| | |
| | | using Assets.Scripts.Enums; |
| | | using Assets.Scripts.Helpers; |
| | | using System; |
| | | using System.Linq; |
| | | using UnityEngine; |
| | | using UnityEngine.InputSystem; |
| | | |
| | |
| | | TouchingDirections touchingDirections; |
| | | |
| | | // Time it takes to drill |
| | | [SerializeField] |
| | | private float drillingTime = 1f; |
| | | private float timeSinceDrill = 0f; |
| | | private bool drillToPosition; |
| | |
| | | { |
| | | get |
| | | { |
| | | return animator.GetBool(AnimationStrings.canMove) && !PauseMenu.GameIsPaused && !IsDrilling; |
| | | return animator.GetBool(AnimationStrings.canMove) && !GameManager.GameIsPaused && !IsDrilling; |
| | | } |
| | | } |
| | | |
| | | private void OnEnable() |
| | | { |
| | | CharacterEvents.characterDrillingToPosition += (DrillingToPosition); |
| | | //CharacterEvents.characterDrillingToPositionAbort += (DrillingToPositionAbort); |
| | | } |
| | | |
| | | private void OnDisable() |
| | | { |
| | | CharacterEvents.characterDrillingToPosition -= (DrillingToPosition); |
| | | //CharacterEvents.characterDrillingToPositionAbort -= (DrillingToPositionAbort); |
| | | } |
| | | |
| | | private void Awake() |
| | | { |
| | | if(Debug.isDebugBuild) |
| | | { |
| | | moveSpeed = 25f; |
| | | } |
| | | rb = GetComponent<Rigidbody2D>(); |
| | | animator = GetComponent<Animator>(); |
| | | animator_rotor = rotorGO.GetComponent<Animator>(); |
| | |
| | | |
| | | public void OnMove(InputAction.CallbackContext context) |
| | | { |
| | | if (!health.IsAlive) |
| | | { |
| | | return; |
| | | } |
| | | moveInput = context.ReadValue<Vector2>(); |
| | | |
| | | IsMoving = moveInput.x != 0; |
| | | |
| | | IsFlying = (moveInput.y != 0); |
| | | |
| | | SetFacingDirection(moveInput); |
| | | |
| | | if (IsDrilling) |
| | | { |
| | | IsMoving = false; |
| | | IsFlying = false; |
| | | //moveInput = Vector2.zero; |
| | | } |
| | | else |
| | | { |
| | | SetFacingDirection(moveInput); |
| | | } |
| | | } |
| | | |
| | |
| | | switch (drillDirection) |
| | | { |
| | | case DrillDirection.Left: |
| | | SetFacingDirection(Vector2.left); |
| | | touchingDirections.wallHitsLeft[0].collider.GetContacts(contactPoints); |
| | | break; |
| | | case DrillDirection.Right: |
| | | SetFacingDirection(Vector2.right); |
| | | touchingDirections.wallHitsRight[0].collider.GetContacts(contactPoints); |
| | | break; |
| | | case DrillDirection.Down: |
| | |
| | | break; |
| | | } |
| | | //Debug.Log(contactPoints[0].otherRigidbody?.gameObject.name); |
| | | if (contactPoints[0].otherRigidbody?.name == "Tilemap") |
| | | if (contactPoints.Any(x => x.otherRigidbody?.name == "Tilemap")) |
| | | { |
| | | boxCollider.enabled = false; |
| | | switch (drillDirection) |
| | | { |
| | | case DrillDirection.Left: |
| | | case DrillDirection.Right: |
| | | IsDrillingLeftRight = true; |
| | | break; |
| | | case DrillDirection.Down: |
| | | IsDrillingDown = true; |
| | | break; |
| | | default: |
| | | Debug.Assert(false, "Add DrillDirection here!"); |
| | | break; |
| | | } |
| | | CharacterEvents.characterDrill.Invoke(contactPoints[0], drillDirection); |
| | | CharacterEvents.characterDrill.Invoke(contactPoints.Single(x => x.otherRigidbody?.name == "Tilemap"), drillDirection); |
| | | } |
| | | } |
| | | |
| | | private void DrillingToPosition(Vector3 tilePosition) |
| | | private void DrillingToPosition(Vector3 tilePosition, DrillDirection drillDirection) |
| | | { |
| | | boxCollider.enabled = false; |
| | | switch (drillDirection) |
| | | { |
| | | case DrillDirection.Left: |
| | | case DrillDirection.Right: |
| | | IsDrillingLeftRight = true; |
| | | break; |
| | | case DrillDirection.Down: |
| | | IsDrillingDown = true; |
| | | break; |
| | | default: |
| | | Debug.Assert(false, "Add DrillDirection here!"); |
| | | break; |
| | | } |
| | | //Debug.Log("DrillingToPosition() called"); |
| | | //Debug.Log(gameObject.transform.position); |
| | | drillToPosition = true; |
| | |
| | | drillOriginalPosition = gameObject.transform.position; |
| | | //Debug.Log("drillOriginalPosition: " + drillOriginalPosition); |
| | | } |
| | | //private void DrillingToPositionAbort() |
| | | //{ |
| | | // IsDrilling = false; |
| | | // //Debug.Log("DrillingToPosition() called"); |
| | | // //Debug.Log(gameObject.transform.position); |
| | | // drillToPosition = false; |
| | | // //drillTilePosition = null; |
| | | // //Debug.Log("drillTilePosition: " + drillTilePosition); |
| | | // drillOriginalPosition = gameObject.transform.position; |
| | | // //Debug.Log("drillOriginalPosition: " + drillOriginalPosition); |
| | | //} |
| | | |
| | | //private void DrillLeftOrRight() |
| | | //{ |
| | |
| | | public void TakeDamage(int damage) |
| | | { |
| | | health.Hit(damage); |
| | | if (!health.IsAlive) |
| | | { |
| | | rb.velocity = Vector3.zero; |
| | | } |
| | | } |
| | | |
| | | public void TakeFallDamage(int fallDamage) |