From 6f2125d2cd1607b8fb70db652607adc84fd9346c Mon Sep 17 00:00:00 2001 From: miepzerino <o.skotnik@gmail.com> Date: Fri, 22 Dec 2023 19:40:59 +0000 Subject: [PATCH] Added drilling function to player --- Assets/Scripts/PlayerController.cs | 90 +++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 87 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs index 7d13b2e..1ab8309 100644 --- a/Assets/Scripts/PlayerController.cs +++ b/Assets/Scripts/PlayerController.cs @@ -1,7 +1,12 @@ +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 @@ -12,12 +17,18 @@ 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; @@ -43,6 +54,17 @@ 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; @@ -63,7 +85,6 @@ { get { - Debug.Log("gameIsPaused: " + PauseMenu.GameIsPaused); return animator.GetBool(AnimationStrings.canMove) && !PauseMenu.GameIsPaused; } } @@ -77,6 +98,17 @@ 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() @@ -126,6 +158,35 @@ 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) @@ -139,6 +200,7 @@ IsFlying = (moveInput.y != 0); SetFacingDirection(moveInput); + } else { @@ -148,6 +210,28 @@ } } + 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) { if (moveInput.x > 0 && !IsFacingRight) -- Gitblit v1.9.3