78 lines
2.4 KiB
C#
78 lines
2.4 KiB
C#
//using System.Collections;
|
|
//using System.Collections.Generic;
|
|
//using UnityEngine;
|
|
//using UnityEngine.InputSystem;
|
|
//using System.Linq;
|
|
//using UnityUtils;
|
|
/*
|
|
* Screw this whip attack. Hard coded code. I hate it...
|
|
*
|
|
public class RopeWhipAttack : MonoBehaviour
|
|
{
|
|
[SerializeField] PlayerAnimationHandler animationHandler;
|
|
[SerializeField] PlayerInput playerInput;
|
|
|
|
public RopeWhipAttack otherPlayerAttack;
|
|
public PlayerMovement playerMovement;
|
|
public RopeJoint joint;
|
|
public bool IsWhippingOtherPlayer => joint.locked;
|
|
public bool IsBeingWhipped => otherPlayerAttack.joint.locked;
|
|
|
|
public float initialDrag;
|
|
|
|
private void Awake()
|
|
{
|
|
initialDrag = joint.body.drag;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
// Other player is whip attacking
|
|
if (otherPlayerAttack.joint.locked) return;
|
|
|
|
if (playerInput.whipAttack)
|
|
{
|
|
otherPlayerAttack.joint.trailRenderer.enabled = true;
|
|
|
|
// reset local scale so rotations match up
|
|
transform.localScale = transform.localScale.With(x: 1f);
|
|
|
|
animationHandler.Swing(true);
|
|
animationHandler.animator.speed = 0f;
|
|
float radianAngle = CalculateAngleBetwenRight();
|
|
float sign = Mathf.Sign(radianAngle);
|
|
|
|
//if (sign < 0)
|
|
// transform.localScale = transform.localScale.With(x: -1f);
|
|
//else
|
|
// transform.localScale = transform.localScale.With(x: 1f);
|
|
|
|
float t = Mathf.Abs(radianAngle) / 360;
|
|
|
|
if (sign > 0)
|
|
t -= (radianAngle - 180) / 180 * sign;
|
|
|
|
//Debug.Log($"angle: {radianAngle}, t: {t}, sgn: {sign}");
|
|
animationHandler.animator.Play("Swing", 0, t);
|
|
joint.locked = true;
|
|
otherPlayerAttack.joint.body.drag = 0f;
|
|
}
|
|
else
|
|
{
|
|
animationHandler.Swing(false);
|
|
animationHandler.animator.speed = 1f;
|
|
animationHandler.animator.StopPlayback();
|
|
joint.locked = false;
|
|
otherPlayerAttack.joint.trailRenderer.enabled = false;
|
|
otherPlayerAttack.joint.body.drag = otherPlayerAttack.initialDrag;
|
|
}
|
|
}
|
|
|
|
float CalculateAngleBetwenRight()
|
|
{
|
|
Vector2 ropeDir = (otherPlayerAttack.joint.anchor.position - joint.anchor.position).normalized;
|
|
float angle = Vector2.SignedAngle(Vector2.right, ropeDir);
|
|
return angle;
|
|
}
|
|
}
|
|
*/ |