Browse Source

Yeet windup

develop
MrJDunn 3 years ago
parent
commit
f86d40e064
1 changed files with 38 additions and 9 deletions
  1. +38
    -9
      Assets/Scripts/Behaviours/YeetController.cs

+ 38
- 9
Assets/Scripts/Behaviours/YeetController.cs View File

@ -6,18 +6,22 @@ public class YeetController : MonoBehaviour
{ {
public GameObject parent { get; set; } public GameObject parent { get; set; }
public float yeetVelocity = 10f;
public float yeetVelocity = 5f;
public float yeetDuration = 2f; public float yeetDuration = 2f;
public enum YeetState { Unheld, Held, Yeeting }; public enum YeetState { Unheld, Held, Yeeting };
public YeetState yeetState { get; private set; } = YeetState.Unheld; public YeetState yeetState { get; private set; } = YeetState.Unheld;
private GameObject _child; private GameObject _child;
private float _time;
private float m_time;
private GameObject m_child; private GameObject m_child;
private GameObject m_body; private GameObject m_body;
private float m_velocityWindup;
private LineRenderer m_lineRenderer;
private void Awake() private void Awake()
{ {
m_body = this.gameObject; m_body = this.gameObject;
@ -28,39 +32,63 @@ public class YeetController : MonoBehaviour
_child = child; _child = child;
_child.transform.parent = parent.transform; _child.transform.parent = parent.transform;
yeetState = YeetState.Held; yeetState = YeetState.Held;
m_lineRenderer = gameObject.AddComponent<LineRenderer>();
} }
public void Yeet() public void Yeet()
{ {
_child.transform.parent = null; _child.transform.parent = null;
_child.transform.rotation = parent.transform.rotation; _child.transform.rotation = parent.transform.rotation;
_child.GetComponent<Rigidbody>().velocity = _child.transform.forward * yeetVelocity + _child.transform.up * yeetVelocity;
_child.GetComponent<Rigidbody>().velocity = _child.transform.forward * m_velocityWindup + _child.transform.up * m_velocityWindup;
yeetState = YeetState.Yeeting; yeetState = YeetState.Yeeting;
_time = yeetDuration;
m_time = yeetDuration;
m_velocityWindup = 0;
Destroy(m_lineRenderer);
} }
// Start is called before the first frame update
void Start() void Start()
{ {
} }
// Update is called once per frame
void Update() void Update()
{ {
switch(yeetState) switch(yeetState)
{ {
case YeetState.Yeeting: case YeetState.Yeeting:
//_child.transform.position += _child.transform.forward * yeetVelocity * Time.deltaTime;
_time -= Time.deltaTime;
m_time -= Time.deltaTime;
if(_time <= 0f)
if(m_time <= 0f)
{ {
Debug.Log("YeetController.Update: Yeet finished"); Debug.Log("YeetController.Update: Yeet finished");
yeetState = YeetState.Unheld; yeetState = YeetState.Unheld;
} }
break; break;
case YeetState.Held: case YeetState.Held:
// draw yeet lines
if(m_velocityWindup < yeetVelocity)
{
m_velocityWindup += 0.01f;
}
Vector3 velocity = parent.transform.forward * m_velocityWindup + parent.transform.up * m_velocityWindup;
float t;
t = (-1f * velocity.y) / Physics.gravity.y;
t = 2f * t;
m_lineRenderer.positionCount = 10;
Vector3 trajectoryPoint;
for (int i = 0; i < m_lineRenderer.positionCount; i++)
{
float time = t * i / (float)(m_lineRenderer.positionCount);
trajectoryPoint = parent.transform.position + velocity * time + 0.5f * Physics.gravity * time * time;
m_lineRenderer.SetPosition(i, trajectoryPoint);
}
break; break;
case YeetState.Unheld: case YeetState.Unheld:
_child = null; _child = null;
@ -98,4 +126,5 @@ public class YeetController : MonoBehaviour
break; break;
} }
} }
} }

Loading…
Cancel
Save