void Start() { approaching = false; inputLocked = false; modeLocked = false; mode = EntityBehaviour.movementModes.Medium; defaultMode = mode; }
void ValidateApproach() { /* If coroutine is running stop it and restore the mode. */ if (approaching) { StopCoroutine(approachCoroutine); mode = defaultMode; } else { approaching = true; } }
IEnumerator HoldModeCoroutine(EntityBehaviour.movementModes tempMode, float duration) { float elapsed = 0.0f; mode = tempMode; modeLocked = true; while (elapsed <= duration) { elapsed += Time.deltaTime; yield return null; } modeLocked = false; mode = defaultMode; }
/* Approaches a static target with custom movement mode. */ IEnumerator ApproachCoroutine(Vector3 target, EntityBehaviour.movementModes moveMode) { mode = moveMode; Vector3 dir = target - transform.position; Vector3 heightDiff = new Vector3(0.0f, target.y - transform.position.y, 0.0f); dir.y = 0; while (Vector3.Distance(transform.position + heightDiff, target) > touchDist) { Move (dir.x, dir.z); Rotate (dir); yield return null; } approaching = false; unlockInput(); mode = defaultMode; }
public void SetBehaviour(EntityBehaviour beh) { behaviour = beh; mode = behaviour.movementMode; }
/* Move one frame worth of movement in the forward direction. Preserves mode. Doesn't preserve direction. Reports the distance traveled. */ public float Move(EntityBehaviour.movementModes moveMode) { EntityBehaviour.movementModes oldMode = mode; mode = moveMode; float dist = Move(transform.forward.x, transform.forward.z); mode = oldMode; return dist; }
/* Move one frame worth of movement. Preserves mode. Doesn't preserve direction. Reports the distance traveled. */ public float Move(Vector3 dir, EntityBehaviour.movementModes moveMode) { // Save the old mode, then set the new mode EntityBehaviour.movementModes oldMode = mode; mode = moveMode; // Perform the movement and rotation float dist = Move (dir.x, dir.z); Rotate(dir.x, dir.z); // Restore old mode mode = oldMode; return dist; }