void Update() { if (!_doUpdate) { return; } if (_wasJumping && !_enemy.IsJumping) { OnLanded(); } _wasJumping = _enemy.IsJumping; if (IsPreoccupied) { return; } if (_isIdling) { if (Time.time - _idleStartTime >= _idleDuration) { _isIdling = false; _justFinishedIdling = true; } } else if (MoveDirection_Tile.IsZero()) { DetermineNextAction(); } }
IndexDirection2 GetDesiredMoveDirection(DiscreteAction action) { IndexDirection2 desiredMoveDir = IndexDirection2.zero; IndexDirection2 toPlayer = IndexDirection2.zero; _enemyMove.speed = _baseSpeed; if (_enemy.ShouldFollowBait()) { desiredMoveDir = GetDirectionToBait(); } else if (chasePlayerIfInSight && IsPlayerInSight(MAX_DISTANCE_PLAYER_CAN_BE_SEEN, out toPlayer)) { _enemyMove.speed = _baseSpeed * chaseSpeedMultiplier; desiredMoveDir = toPlayer; } else { if (MoveDirection_Tile.IsZero()) { desiredMoveDir = GetRandomTileDirection(); } else { if (action == DiscreteAction.ChangeDirection) { List <IndexDirection2> excludeDirections = new List <IndexDirection2>(); excludeDirections.Add(MoveDirection_Tile); if (avoidsReversingDirections) { excludeDirections.Add(MoveDirection_Tile.Reversed); } desiredMoveDir = GetRandomTileDirectionExcluding(excludeDirections); } else if (action == DiscreteAction.Jump) { desiredMoveDir = GetRandomTileDirection(); } else { desiredMoveDir = MoveDirection_Tile; } } } if (!WorldInfo.Instance.IsInDungeon) { desiredMoveDir = EnforceBoundary(desiredMoveDir); } return(desiredMoveDir); }
void SetNextMoveDirection() { Vector3 p = transform.position; IndexDirection2 newMoveDir = IndexDirection2.zero; if (MoveDirection_Tile.IsDown()) { if (p.z <= Boundary.yMin) { newMoveDir = IndexDirection2.up; } } else if (MoveDirection_Tile.IsUp()) { if (p.z >= Boundary.yMax) { newMoveDir = (Extensions.FlipCoin()) ? IndexDirection2.left : IndexDirection2.right; } } else { if (Extensions.FlipCoin(chanceToMoveDown)) { newMoveDir = IndexDirection2.down; } else { if (MoveDirection_Tile.IsRight()) { if (p.x >= Boundary.xMax) { newMoveDir = IndexDirection2.left; } } else if (MoveDirection_Tile.IsLeft()) { if (p.x <= Boundary.xMin) { newMoveDir = IndexDirection2.right; } } } } if (newMoveDir.IsZero()) { newMoveDir = MoveDirection_Tile; } MoveDirection_Tile = newMoveDir; }