-
Notifications
You must be signed in to change notification settings - Fork 0
/
PlayerController.cs
54 lines (40 loc) · 1.47 KB
/
PlayerController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using UnityEngine;
using System.Collections;
using AI;
using AI.States;
public class PlayerController : MonoBehaviour {
private StateMachine _fsm;
private void Start()
{
_fsm = new StateMachine (this.gameObject);
var walkState = _fsm.AddState<PlayerDefaultState> ();
walkState.WalkingSpeed = WalkingSpeed;
var jumpState = _fsm.AddState<PlayerJumpState> ();
jumpState.JumpForce = JumpForce;
jumpState.WalkingSpeed = WalkingSpeed;
var fallingState = _fsm.AddState<PlayerFallingState> ();
fallingState.Gravity = Gravity;
fallingState.WalkingSpeed = WalkingSpeed;
fallingState.GroundCollisionLayer = GroundCollisionLayer;
walkState.Transitions.Add (new StateTransition (jumpState, () => Input.GetButton ("Jump")));
walkState.Transitions.Add (new StateTransition (fallingState, () => {
var downCast = this.gameObject.CheckIsFalling(GroundCollisionLayer);
bool isHit = (null == downCast.collider);
return isHit;
}));
jumpState.Transitions.Add (new StateTransition (fallingState, () => jumpState.ExecutionTime > 0.25f));
fallingState.Transitions.Add (new StateTransition (walkState, () => fallingState.Completed));
_fsm.SetState (0);
}
private void Update()
{
_fsm.Execute ();
}
#region Properties
public float JumpForce = 25.0f;
public float Gravity = 10.0f;
public float WalkingSpeed = 4.0f;
public float RunningSpeed = 8.0f;
public int GroundCollisionLayer = 8;
#endregion Properties
}