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(""); }
/// <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); } } } }
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); } }
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(); } } } } }
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); }
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 HexDirectionNext2Test() { Assert.AreEqual(HexDirection.NE, HexDirectionExtensions.Next2(HexDirection.W)); Assert.AreEqual(HexDirection.SW, HexDirectionExtensions.Next2(HexDirection.E)); }
public void HexDirectionPrevious2Test() { Assert.AreEqual(HexDirection.NW, HexDirectionExtensions.Previous2(HexDirection.E)); Assert.AreEqual(HexDirection.SE, HexDirectionExtensions.Previous2(HexDirection.W)); }
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); }