コード例 #1
0
 /// <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);
             }
         }
     }
 }
コード例 #2
0
ファイル: SimulatedControl.cs プロジェクト: hyzcn/cerealbar
    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("");
    }
コード例 #3
0
 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);
         }
     }
 }
コード例 #4
0
 public void HexDirectionOppositeTest()
 {
     Assert.AreEqual(HexDirection.NE, HexDirectionExtensions.Opposite(HexDirection.SW));
     Assert.AreEqual(HexDirection.W, HexDirectionExtensions.Opposite(HexDirection.E));
 }
コード例 #5
0
    /// <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);
    }