/// <summary> /// Can only be called when we are not executing actions /// If not executing, takes action from actionqueue and calls for corresponding movemnt /// </summary> public void ExecuteQueuedAction(string tag) { if (actionsQ.Count != 0 && !isExecuting) { isExecuting = true; var action = actionsQ.Dequeue(); actionsRecord.Add(action); if (action.agentState == AgentState.Turning) { SetRotate(action.direction, tag); } else if (action.agentState == AgentState.Walking) { if (action.direction == 1) { SetMoveTo(directionIndex % 6, 1, tag); } else { var oppositeDir = (int)HexDirectionExtensions.Opposite((HexDirection)(directionIndex % 6)); SetMoveTo(oppositeDir, -1, tag); } } } }
public string DoAction(ActionInformation.AgentState state, int dir) { MainControl mainControl = FindObjectOfType <MainControl>(); if (!timeKeeper.isPaused && !isMoving) { if (state == AgentState.Turning && dir == 1) { RotateTo(1); } else if (state == AgentState.Turning && dir == -1) { RotateTo(-1); } else if (state == AgentState.Walking && dir == 1) { MoveTo(directionIndex % 6, 1, tag); } else if (state == AgentState.Walking && dir == -1) { var oppositeDir = (int)HexDirectionExtensions.Opposite((HexDirection)(directionIndex % 6)); MoveTo(oppositeDir, -1, tag); } if (gotCard) { gotCard = false; return("got card"); } } //MainControl mainControl = FindObjectOfType<MainControl>(); return(""); }
public override void AddAction(ActionInformation.AgentState state, int dir) { if (!timeKeeper.isPaused && !isMoving) { if (state == AgentState.Turning && dir == 1) { SetRotate(1, tag); } else if (state == AgentState.Turning && dir == -1) { SetRotate(-1, tag); } else if (state == AgentState.Walking && dir == 1) { SetMoveTo(directionIndex % 6, 1, tag); } else if (state == AgentState.Walking && dir == -1) { var oppositeDir = (int)HexDirectionExtensions.Opposite((HexDirection)(directionIndex % 6)); SetMoveTo(oppositeDir, -1, tag); } } }
public void HexDirectionOppositeTest() { Assert.AreEqual(HexDirection.NE, HexDirectionExtensions.Opposite(HexDirection.SW)); Assert.AreEqual(HexDirection.W, HexDirectionExtensions.Opposite(HexDirection.E)); }
/// <summary> /// Checks if a direction change is possible at the passed location. Used to check before calling changedir /// </summary> /// <param name="currentNeighbors"></param> /// <param name="currentDirection"></param> /// <returns></returns> private bool CanChangeDir(List <HexCell> currentNeighbors, HexDirection currentDirection) { var viableNeighborsIndices = new List <int>(); for (int i = 0; i < currentNeighbors.Count; i++) { try { if ((currentNeighbors[i].landType == LandType.Grass) && i != (int)currentDirection && i != (int)HexDirectionExtensions.Opposite(currentDirection)) { viableNeighborsIndices.Add(i); } } catch (NullReferenceException) { } } if (viableNeighborsIndices.Count == 0) { return(false); } return(true); }