private void SetRoamState(Floor parent) { var myPosition = parent.Entities.Reverse[this]; CurrentState = State.Roaming; var visible = VisiblePoints.ToArray(); if (visible.Length != 0) { var roamPoint = visible[RandomHelper.Random.Next(0, visible.Length)]; var path = PathFinder.AStar(parent, myPosition, roamPoint); if (path != null) { Path = path; return; } } RandomMoveDirection.Shuffle(); foreach (var direction in RandomMoveDirection) { if (parent.IsPointPassable(NewPosition(direction, myPosition))) { MoveTo(parent, direction); return; } } SetWaitState(); }
public static ActorInstanceRandomMoveCommand ActorInstanceRandomMove(ActorInstance actorInstance, RandomMoveDirection directions = RandomMoveDirection.AnyUnoccupied) { return new ActorInstanceRandomMoveCommand(actorInstance, directions); }
public ActorInstanceRandomMoveCommand(ActorInstance actorInstance, RandomMoveDirection direction = RandomMoveDirection.AnyUnoccupied) : base(actorInstance) { _direction = direction; }
private static string GetDirectionText(RandomMoveDirection direction) { string directionText; switch (direction) { case RandomMoveDirection.AnyUnoccupied: directionText = "Any unoccupied"; break; default: directionText = direction.ToString(); break; } return directionText; }