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

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;
}
}