コード例 #1
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("");
    }
コード例 #2
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);
             }
         }
     }
 }
コード例 #3
0
ファイル: HexMesh.cs プロジェクト: matrix09/Shader_CatLike
    void TriangulateConnection(HexDir dir, HexCell cell, Vector3 v1, Vector3 v2)
    {
        HexCell Neighbor = cell.GetHexNeighbour(dir);

        if (null == Neighbor)
        {
            return;
        }
        //add rectangle
        Vector3 v3 = v1 + HexMetrics.GetBridge(dir);
        Vector3 v4 = v2 + HexMetrics.GetBridge(dir);

        AddQuad(v1, v2, v3, v4);


        AddQuadColor(cell.color, Neighbor.color);

        HexCell nextNeighbor = cell.GetHexNeighbour(HexDirectionExtensions.GetNextDir(dir));

        if (null != nextNeighbor)
        {
            AddTriangle(v2, v4, v2 + HexMetrics.GetBridge(HexDirectionExtensions.GetNextDir(dir)));
            AddTriangleColor(cell.color, Neighbor.color, nextNeighbor.color);
        }
    }
コード例 #4
0
    void CreateBorders(int x, int z)
    {
        //don't need side borders if it wraps.
        for (int i = 0; i < x; i++)
        {
            HexCell edgeCellBottom = grid.GetCell(i, 0);
            edgeCellBottom.TerrainTypeIndex = TerrainType.Snow;
            edgeCellBottom.Elevation        = 0;
            edgeCellBottom.RemoveRiver();
            //edgecell.setborder? (to remove functionailty from other stuff)

            HexCell edgeCellBottom2 = edgeCellBottom.GetNeighbor(HexDirectionExtensions.GetRandom());
            if (edgeCellBottom2)
            {
                edgeCellBottom2.TerrainTypeIndex = TerrainType.Snow;
                edgeCellBottom2.Elevation        = 0;
                edgeCellBottom2.RemoveRiver();

                HexCell edgeCellBottom3 = edgeCellBottom2.GetNeighbor(HexDirectionExtensions.GetRandom());

                if (Random.value < 0.60)
                {
                    if (edgeCellBottom3)
                    {
                        edgeCellBottom3.TerrainTypeIndex = TerrainType.Snow;
                        edgeCellBottom3.Elevation        = 0;
                        edgeCellBottom3.RemoveRiver();
                    }
                }
            }

            HexCell edgeCellTop = grid.GetCell(i, z - 1);
            edgeCellTop.TerrainTypeIndex = TerrainType.Snow;
            edgeCellTop.Elevation        = 0;
            edgeCellTop.RemoveRiver();

            HexCell edgeCellTop2 = edgeCellTop.GetNeighbor(HexDirectionExtensions.GetRandom());
            if (edgeCellTop2)
            {
                edgeCellTop2.TerrainTypeIndex = TerrainType.Snow;
                edgeCellTop2.Elevation        = 0;
                edgeCellTop2.RemoveRiver();

                if (Random.value < 0.60)
                {
                    HexCell edgeCellTop3 = edgeCellTop2.GetNeighbor(HexDirectionExtensions.GetRandom());
                    if (edgeCellTop3)
                    {
                        edgeCellTop3.TerrainTypeIndex = TerrainType.Snow;
                        edgeCellTop3.Elevation        = 0;
                        edgeCellTop3.RemoveRiver();
                    }
                }
            }
        }
    }
コード例 #5
0
        public void TestShortestRotation()
        {
            const float clockwise     = -1.0f;
            const float anticlockwise = 1.0f;

            Assert.AreEqual(HexDirectionExtensions.ShortestRotationDirection(HexDirection.North, HexDirection.NorthWest), anticlockwise, 0.01f);
            Assert.AreEqual(HexDirectionExtensions.ShortestRotationDirection(HexDirection.North, HexDirection.SouthWest), anticlockwise, 0.01f);
            Assert.AreEqual(HexDirectionExtensions.ShortestRotationDirection(HexDirection.North, HexDirection.SouthEast), clockwise, 0.01f);
            Assert.AreEqual(HexDirectionExtensions.ShortestRotationDirection(HexDirection.North, HexDirection.NorthEast), clockwise, 0.01f);

            Assert.AreEqual(HexDirectionExtensions.ShortestRotationDirection(HexDirection.NorthWest, HexDirection.SouthWest), anticlockwise, 0.01f);
            Assert.AreEqual(HexDirectionExtensions.ShortestRotationDirection(HexDirection.NorthWest, HexDirection.South), anticlockwise, 0.01f);
            Assert.AreEqual(HexDirectionExtensions.ShortestRotationDirection(HexDirection.NorthWest, HexDirection.North), clockwise, 0.01f);
            Assert.AreEqual(HexDirectionExtensions.ShortestRotationDirection(HexDirection.NorthWest, HexDirection.NorthEast), clockwise, 0.01f);
        }
コード例 #6
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);
         }
     }
 }
コード例 #7
0
 public void HexDirectionNext2Test()
 {
     Assert.AreEqual(HexDirection.NE, HexDirectionExtensions.Next2(HexDirection.W));
     Assert.AreEqual(HexDirection.SW, HexDirectionExtensions.Next2(HexDirection.E));
 }
コード例 #8
0
 public void HexDirectionPrevious2Test()
 {
     Assert.AreEqual(HexDirection.NW, HexDirectionExtensions.Previous2(HexDirection.E));
     Assert.AreEqual(HexDirection.SE, HexDirectionExtensions.Previous2(HexDirection.W));
 }
コード例 #9
0
 public void HexDirectionOppositeTest()
 {
     Assert.AreEqual(HexDirection.NE, HexDirectionExtensions.Opposite(HexDirection.SW));
     Assert.AreEqual(HexDirection.W, HexDirectionExtensions.Opposite(HexDirection.E));
 }
コード例 #10
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);
    }