void DetirmineStance() { CharacterStance bestStance = currentStance; foreach (CharacterStance stance in stances) { if ((currentStance == null || stance.Priority > bestStance.Priority) && stance.CanEnterStance(this)) { bestStance = stance; } } if (bestStance != currentStance) { currentStance = bestStance; bestStance.OnEnterStance(this); } }
private void OnEnable() { InputManager.manager.inputs.FindAction("Movement").performed += ctx => movement = (Vector2)ctx.ReadValue <Vector2>(); InputManager.manager.inputs.FindAction("Movement").canceled += ctx => movement = (Vector2)ctx.ReadValue <Vector2>(); InputManager.manager.inputs.FindAction("Rotation").performed += ctx => rotation = (Vector2)ctx.ReadValue <Vector2>(); InputManager.manager.inputs.FindAction("Rotation").canceled += ctx => rotation = (Vector2)ctx.ReadValue <Vector2>(); InputManager.manager.AddEvent("Jump", Jump); for (int i = 0; i < stances.Length; i++) { CharacterStance original = stances[i]; stances[i] = Instantiate(stances[i]); stances[i].name = original.name; stances[i].OnEnableStance(this); } }
private void Update() { onGround = OnGround(); DetirmineStance(); if (currentStance == null) { return; } currentStance.OnUpdateStance(); if (!currentStance.OnValidateStance(this)) { currentStance.OnExitStance(); currentStance = null; DetirmineStance(); } facing.rotation = Quaternion.Euler(0, cam.rotation.eulerAngles.y, 0); Rotate(); movementDirection = Vector3.Dot(character.forward, rb.velocity.normalized); }