using UnityEngine; using UnityEngine.SceneManagement; public class Player : MonoBehaviour { public Rigidbody2D RigidBody { get; private set; } public Transform Transform { get; private set; } public ParticleSystem Particle { get; private set; } public LevelsLoader LevelsLoader { get; private set; } public SpriteRenderer SpriteRenderer { get; private set; } public bool IsColliding { get; set; } = true; public bool HasStarted { get; private set; } = false; public bool CanJump { get; set; } = true; public IGameMode CurrentGameMode { get; set; } public float SpeedMultiplier = 1f; public void Awake() { RigidBody = GetComponent(); Transform = transform; Particle = GetComponentInChildren(); SpriteRenderer = GetComponentInChildren(); LevelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent(); } public void Start() { var mainModule = Particle.main; mainModule.simulationSpace = ParticleSystemSimulationSpace.World; Particle.transform.parent = null; Invoke(nameof(EnableInput), 0.1f); CurrentGameMode = new NormalGameMode(); } private void EnableInput() { HasStarted = true; } public void Update() { CurrentGameMode.Update(this); LevelsLoader.CalculateCurrentProgressionPercent(transform.position); } public void OnCollisionEnter2D(Collision2D collision) { CurrentGameMode.OnCollisionEnter(this, collision); } public void OnCollisionExit2D(Collision2D collision) { CurrentGameMode.OnCollisionExit(this, collision); } private void OnTriggerEnter2D(Collider2D collision) { if (collision.CompareTag("ShipPortal")) { SpriteRenderer.sprite = Resources.Load("Shapes/Ship"); ChangeGameMode(new ShipGameMode()); } else if (collision.CompareTag("CubePortal")) { SpriteRenderer.sprite = Resources.Load("Shapes/BaseSquare"); ChangeGameMode(new NormalGameMode()); } else if (collision.CompareTag("BonusBoostSpeed")) { SpeedMultiplier *= 1.5f; Destroy(collision.gameObject); } else if (collision.CompareTag("BonusSlowSpeed")) { SpeedMultiplier /= 1.5f; Destroy(collision.gameObject); } } public void ChangeGameMode(IGameMode newMode) { CurrentGameMode = newMode; } }