SFX_EngineController.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System;
  2. using System.Globalization;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. // ReSharper disable once CheckNamespace
  6. namespace QFX.SFX
  7. {
  8. internal sealed class SFX_EngineController : MonoBehaviour
  9. {
  10. public float PowerFactor = 1;
  11. public KeyCode EngineKeyCode = KeyCode.W;
  12. public ParticleSystem FlareParticleSystem;
  13. public float FlareFactor = 150;
  14. public ParticleSystem SlowSparksParticleSystem;
  15. public float SlowSparksFactor = 10;
  16. public ParticleSystem FastSparksParticleSystem;
  17. public float FastSparksFactor = 10;
  18. public ParticleSystem DistortionParticleSystem;
  19. public float DistortionFactor;
  20. public GameObject EngineInner;
  21. //ONLY FOR THE DEMO
  22. public Text TextUi;
  23. private float _currentPower;
  24. private bool _isButtonHeld;
  25. private Material _engineInnerMaterial;
  26. private void OnEnable()
  27. {
  28. _engineInnerMaterial = EngineInner.GetComponent<Renderer>().material;
  29. }
  30. private void Update()
  31. {
  32. var enginePower = PowerFactor * Time.deltaTime;
  33. if (Input.GetKeyDown(EngineKeyCode))
  34. _isButtonHeld = true;
  35. else if (Input.GetKeyUp(EngineKeyCode))
  36. _isButtonHeld = false;
  37. if (_isButtonHeld)
  38. _currentPower += enginePower;
  39. else
  40. _currentPower -= enginePower;
  41. _currentPower = Mathf.Clamp01(_currentPower);
  42. var flareForceModule = FlareParticleSystem.forceOverLifetime;
  43. flareForceModule.zMultiplier = -(FlareFactor * _currentPower);
  44. var slowSparksMain = SlowSparksParticleSystem.main;
  45. var slowSpeedModule = slowSparksMain.startSpeed;
  46. slowSpeedModule.constantMin = _currentPower * SlowSparksFactor;
  47. slowSpeedModule.constantMax = _currentPower * (SlowSparksFactor + 7);
  48. slowSparksMain.startSpeed = slowSpeedModule;
  49. var fastSparksMain = FastSparksParticleSystem.main;
  50. var fastSpeedModule = fastSparksMain.startSpeed;
  51. fastSpeedModule.constantMin = _currentPower * FastSparksFactor;
  52. fastSpeedModule.constantMax = _currentPower * (FastSparksFactor + 10);
  53. fastSparksMain.startSpeed = fastSpeedModule;
  54. var noiseModule = FastSparksParticleSystem.noise;
  55. noiseModule.enabled = Math.Abs(_currentPower) > 0.01;
  56. var distortionModule = DistortionParticleSystem.forceOverLifetime;
  57. distortionModule.zMultiplier = -(DistortionFactor * _currentPower);
  58. var tintColor = _engineInnerMaterial.GetColor("_TintColor");
  59. tintColor.a = _currentPower;
  60. _engineInnerMaterial.SetColor("_TintColor", tintColor);
  61. //ONLY FOR THE DEMO
  62. TextUi.text = ((int) (_currentPower * 100)).ToString(CultureInfo.InvariantCulture);
  63. }
  64. }
  65. }