From 15a62795a2f2d9e7311bea4b59430c589125ec79 Mon Sep 17 00:00:00 2001 From: Neil Kollack Date: Wed, 13 Apr 2022 18:10:31 -0500 Subject: fix: player swing + whip damage/grapple --- Assets/Scripts/Items/Whip.cs | 53 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 6 deletions(-) (limited to 'Assets/Scripts/Items/Whip.cs') diff --git a/Assets/Scripts/Items/Whip.cs b/Assets/Scripts/Items/Whip.cs index 5f086eb..134ea53 100644 --- a/Assets/Scripts/Items/Whip.cs +++ b/Assets/Scripts/Items/Whip.cs @@ -1,3 +1,6 @@ +using MontanaJohns.Actors; +using MontanaJohns.Core; +using System.Collections; using UnityEngine; using UnityEngine.InputSystem; @@ -6,25 +9,63 @@ namespace MontanaJohns.Items public class Whip : Active { [SerializeField] protected GameObject hook; - [SerializeField] protected float maxRopeLength = 5f; - + [SerializeField] protected GameObject hookNoSwing; + [SerializeField] protected float maxRopeLength = 20f; + protected GameObject player; protected GameObject currentHook; + protected LayerMask ropeLayers; protected bool ropeExists = false; - public override void Use() + private void Awake() + { + stats.damage = 1; + } + + private void Start() + { + player = GameObject.FindGameObjectWithTag("Player"); + ropeLayers = LayerMask.GetMask("Grapple", "Enemy"); + } + + public override Vector2? Use() { if (!ropeExists) { Vector2 clickLocation = Camera.main.ScreenToWorldPoint(Mouse.current.position.ReadValue()); - - currentHook = Instantiate(hook, clickLocation, Quaternion.identity); - ropeExists = true; + Vector2 playerPos = player.transform.position; + Vector2 direction = clickLocation - playerPos; + RaycastHit2D hit = Physics2D.Raycast(playerPos, direction, maxRopeLength, ropeLayers); + if(hit.collider != null) + { + GameObject collisionGameObject = hit.collider.gameObject; + ropeExists = true; + if (LayerMask.LayerToName(collisionGameObject.layer) == "Grapple") + { + currentHook = Instantiate(hook, clickLocation, Quaternion.identity); + return clickLocation; + } + else + { + StartCoroutine(WhipSmack(collisionGameObject, clickLocation)); + } + } + return null; } else { Destroy(currentHook); ropeExists = false; + return null; } } + + private IEnumerator WhipSmack(GameObject collisionGameObject, Vector2 clickLocation) + { + currentHook = Instantiate(hookNoSwing, clickLocation, Quaternion.identity); + collisionGameObject.GetComponent().TakeDamage(player.GetComponent().damage); + yield return new WaitForSeconds(0.1f); + Destroy(currentHook); + ropeExists = false; + } } } \ No newline at end of file -- cgit v1.2.3-70-g09d2