using UnityEngine; using Input; namespace FX { /// /// Controls particle effects based on player movement. /// Automatically enables/disables particle emission when the player starts/stops moving. /// Attach this to the same GameObject as the PlayerTouchController. /// public class TrafalgarFXController : MonoBehaviour { private PlayerTouchController _playerController; private ParticleSystem _particleSystem; private void Awake() { // Get the PlayerTouchController on this game object _playerController = GetComponent(); if (_playerController == null) { Debug.LogError("TrafalgarFXController: No PlayerTouchController found on this GameObject! This component should be attached to the same GameObject as PlayerTouchController."); enabled = false; return; } // Find the particle system in children _particleSystem = GetComponentInChildren(); if (_particleSystem == null) { Debug.LogError("TrafalgarFXController: No ParticleSystem found in children! This component requires a ParticleSystem in the hierarchy below it."); enabled = false; return; } // Make sure emission is disabled at start var emission = _particleSystem.emission; emission.enabled = false; } private void Start() { // Subscribe to movement events _playerController.OnMovementStarted += EnableParticles; _playerController.OnMovementStopped += DisableParticles; // Set initial state based on current movement status SetParticlesState(_playerController.IsMoving); } private void OnDestroy() { // Unsubscribe from events when this component is destroyed if (_playerController != null) { _playerController.OnMovementStarted -= EnableParticles; _playerController.OnMovementStopped -= DisableParticles; } } private void EnableParticles() { SetParticlesState(true); } private void DisableParticles() { SetParticlesState(false); } private void SetParticlesState(bool enabled) { if (_particleSystem != null) { var emission = _particleSystem.emission; emission.enabled = enabled; if (enabled) { // Optionally play the system when enabling (useful if it's not in looping mode) if (!_particleSystem.isPlaying) { _particleSystem.Play(); } } } } } }