You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.5 KiB
104 lines
2.5 KiB
using UnityEngine;
|
|
using System.Collections;
|
|
using Forces;
|
|
|
|
public class Player : MonoBehaviour {
|
|
|
|
public float weight = 20.0f;
|
|
|
|
protected new Collider collider;
|
|
protected Rigidbody rigidBody;
|
|
protected Vector3 velocity;
|
|
protected ForceController controller;
|
|
|
|
public ForceProps[] forces;
|
|
|
|
protected bool grounding;
|
|
|
|
void Awake ()
|
|
{
|
|
rigidBody = GetComponent<Rigidbody>();
|
|
controller = new ForceController();
|
|
collider = GetComponent<Collider>();
|
|
}
|
|
// Use this for initialization
|
|
void Start () {
|
|
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update ()
|
|
{
|
|
if (Mathf.Abs(Input.GetAxis("Horizontal")) > 0.3f)
|
|
{
|
|
float value = Mathf.Sign(Input.GetAxis("Horizontal"));
|
|
controller.AddForce(forces[0], Vector3.right * value);
|
|
}
|
|
if (Input.GetButtonDown("A") && grounding)
|
|
{
|
|
controller.AddForce(forces[1], Vector3.up);
|
|
}
|
|
}
|
|
|
|
void FixedUpdate ()
|
|
{
|
|
Step();
|
|
}
|
|
|
|
void OnLanded ()
|
|
{
|
|
controller.DestroyForce(forces[1]);
|
|
velocity.y = 0.0f;
|
|
}
|
|
|
|
void Step ()
|
|
{
|
|
bool lastGrounded = grounding;
|
|
|
|
velocity = rigidBody.velocity;
|
|
|
|
velocity.y += -8.0f * weight * Time.fixedDeltaTime;
|
|
|
|
Vector2 forceControllerVel = controller.Update();
|
|
velocity.x += forceControllerVel.x;
|
|
|
|
if (controller.GetForce(forces[1]) != null)
|
|
{
|
|
Debug.Log(forceControllerVel.y);
|
|
}
|
|
|
|
velocity.y += forceControllerVel.y;
|
|
|
|
grounding = IsGrounded();
|
|
|
|
if (lastGrounded != grounding)
|
|
{
|
|
if (grounding) OnLanded();
|
|
}
|
|
|
|
rigidBody.velocity = velocity;
|
|
}
|
|
|
|
bool IsGrounded()
|
|
{
|
|
Vector3[] raycastPoints =
|
|
{
|
|
new Vector3(collider.bounds.max.x, collider.bounds.min.y + 0.1f, collider.bounds.center.z),
|
|
new Vector3(collider.bounds.min.x, collider.bounds.min.y + 0.1f, collider.bounds.center.z),
|
|
new Vector3(collider.bounds.center.x, collider.bounds.min.y + 0.1f, collider.bounds.center.z)
|
|
};
|
|
|
|
for (int i = 0; i < raycastPoints.Length; i++)
|
|
{
|
|
//Debug.DrawRay(raycastPoints[i], Vector3.down * (0.1f + velocity.magnitude * Time.fixedDeltaTime));
|
|
|
|
if (Physics.Raycast(raycastPoints[i], Vector3.down, 0.1f + velocity.magnitude * Time.fixedDeltaTime))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|