| | |
| | | using Assets.Scripts.Enums; |
| | | using Assets.Scripts.Helpers; |
| | | using System; |
| | | using System.Collections; |
| | | using System.ComponentModel.Design; |
| | | using Unity.VisualScripting; |
| | | using UnityEngine; |
| | | using UnityEngine.InputSystem; |
| | | using UnityEngine.Tilemaps; |
| | | |
| | | [RequireComponent(typeof(Rigidbody2D))] |
| | | public class PlayerController : MonoBehaviour |
| | |
| | | private float maxFallSpeedCurrent = 0f; |
| | | Vector2 moveInput; |
| | | |
| | | Rigidbody2D rb; |
| | | [NonSerialized] |
| | | public Rigidbody2D rb; |
| | | Animator animator; |
| | | Animator animator_rotor; |
| | | public GameObject rotorGO; |
| | | TouchingDirections touchingDirections; |
| | | Damageable health; |
| | | [NonSerialized] |
| | | public Damageable health; |
| | | |
| | | // Time it takes to drill |
| | | public float drillingTime = 1f; |
| | | private float timeSinceDrill = 0f; |
| | | |
| | | [SerializeField] |
| | | private bool _isMoving; |
| | |
| | | animator_rotor.SetBool(AnimationStrings.Player.isFlying, value); |
| | | } |
| | | } |
| | | [SerializeField] |
| | | private bool _isDrilling; |
| | | public bool IsDrilling |
| | | { |
| | | get { return _isDrilling; } |
| | | set |
| | | { |
| | | _isDrilling = value; |
| | | //animator.SetBool(AnimationStrings.Player.isDrilling, value); |
| | | } |
| | | } |
| | | |
| | | private bool _isFacingRight = true; |
| | | |
| | |
| | | { |
| | | get |
| | | { |
| | | return animator.GetBool(AnimationStrings.canMove); |
| | | return animator.GetBool(AnimationStrings.canMove) && !PauseMenu.GameIsPaused; |
| | | } |
| | | } |
| | | |
| | |
| | | animator_rotor = rotorGO.GetComponent<Animator>(); |
| | | touchingDirections = GetComponent<TouchingDirections>(); |
| | | health = GetComponent<Damageable>(); |
| | | if (SaveSystem.isGameLoaded) |
| | | { |
| | | GameObject uiManager = GameObject.Find("GameManager"); |
| | | uiManager.GetComponent<GameManager>().GameLoaded(); |
| | | SaveData save = SaveSystem.LoadPlayer(); |
| | | health.MaxHealth = save.maxHealth; |
| | | health.Health = save.health; |
| | | transform.position = VectorHelper.ConvertToVector3(save.position); |
| | | rb.velocity = VectorHelper.ConvertToVector2(save.velocity); |
| | | SaveSystem.isGameLoaded = false; |
| | | } |
| | | } |
| | | |
| | | private void FixedUpdate() |
| | |
| | | maxFallSpeedCurrent = rb.velocity.y; |
| | | } |
| | | } |
| | | if (touchingDirections.IsGrounded && moveInput.y < 0 && !IsDrilling) |
| | | { |
| | | //IsDrilling = true; |
| | | Drill(DrillDirection.Down); |
| | | } |
| | | if (touchingDirections.IsGrounded && touchingDirections.IsAtWall && moveInput.x != 0 && !IsDrilling) |
| | | { |
| | | //IsDrilling = true; |
| | | if (touchingDirections.IsAtWallLeft) |
| | | { |
| | | Drill(DrillDirection.Left); |
| | | } |
| | | else if (touchingDirections.IsAtWallRight) |
| | | { |
| | | Drill(DrillDirection.Right); |
| | | } |
| | | } |
| | | if (IsDrilling) |
| | | { |
| | | if (timeSinceDrill > drillingTime) |
| | | { |
| | | IsDrilling = false; |
| | | timeSinceDrill = 0; |
| | | } |
| | | else |
| | | { |
| | | timeSinceDrill += Time.deltaTime; |
| | | } |
| | | } |
| | | } |
| | | |
| | | public void OnMove(InputAction.CallbackContext context) |
| | |
| | | IsFlying = (moveInput.y != 0); |
| | | |
| | | SetFacingDirection(moveInput); |
| | | |
| | | } |
| | | else |
| | | { |
| | |
| | | moveInput = Vector2.zero; |
| | | } |
| | | } |
| | | |
| | | private void Drill(DrillDirection drillDirection) |
| | | { |
| | | IsDrilling = true; |
| | | ContactPoint2D[] contactPoints = new ContactPoint2D[1]; |
| | | //rb.GetContacts(contactPoints); |
| | | if (drillDirection == DrillDirection.Down) |
| | | { |
| | | touchingDirections.groundHits[0].collider.GetContacts(contactPoints); |
| | | } else if (drillDirection == DrillDirection.Left || drillDirection == DrillDirection.Right) |
| | | { |
| | | touchingDirections.wallHits[0].collider.GetContacts(contactPoints); |
| | | } |
| | | CharacterEvents.characterDrill.Invoke(contactPoints[0], drillDirection); |
| | | } |
| | | |
| | | //private void DrillLeftOrRight() |
| | | //{ |
| | | // ContactPoint2D[] contactPoints = new ContactPoint2D[1]; |
| | | // touchingDirections.wallHits[0].collider.GetContacts(contactPoints); |
| | | // CharacterEvents.characterDrillLeftOrRight.Invoke(contactPoints[0]); |
| | | //} |
| | | |
| | | private void SetFacingDirection(Vector2 moveInput) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | public void TakeDamage(int damage) |
| | | { |
| | | health.Hit(damage); |
| | | } |
| | | |
| | | public void TakeFallDamage(int fallDamage) |
| | | { |
| | | health.Hit(fallDamage); |
| | | TakeDamage(fallDamage); |
| | | } |
| | | |
| | | //public void OnRun(InputAction.CallbackContext context) |