public static string LabelShort(this Direction8Way dir) { switch (dir) { case Direction8Way.North: return("Direction8Way_North_Short".Translate()); case Direction8Way.NorthEast: return("Direction8Way_NorthEast_Short".Translate()); case Direction8Way.East: return("Direction8Way_East_Short".Translate()); case Direction8Way.SouthEast: return("Direction8Way_SouthEast_Short".Translate()); case Direction8Way.South: return("Direction8Way_South_Short".Translate()); case Direction8Way.SouthWest: return("Direction8Way_SouthWest_Short".Translate()); case Direction8Way.West: return("Direction8Way_West_Short".Translate()); case Direction8Way.NorthWest: return("Direction8Way_NorthWest_Short".Translate()); default: return("Unknown Direction8Way"); } }
private IntVec3 GetDir(Direction8Way dir) { switch (dir) { case Direction8Way.North: return(new IntVec3(map.Center.x + cellVariation.RandomInRange, 1, map.Size.z - 1)); case Direction8Way.NorthEast: return(new IntVec3(map.Size.x - 1, 1, map.Size.z - 1)); case Direction8Way.East: return(new IntVec3(map.Size.x - 1, 1, map.Center.z + cellVariation.RandomInRange)); case Direction8Way.SouthEast: return(new IntVec3(map.Size.x - 1, 1, 0)); case Direction8Way.South: return(new IntVec3(map.Center.x + cellVariation.RandomInRange, 1, 0)); case Direction8Way.SouthWest: return(new IntVec3(0, 1, 0)); case Direction8Way.West: return(new IntVec3(0, 1, map.Center.z + cellVariation.RandomInRange)); case Direction8Way.NorthWest: return(new IntVec3(0, 1, map.Center.z)); default: return(new IntVec3(0, 1, 0)); } }
public static IntVec3 IntVec3FromDirection8Way(Direction8Way source) { switch (source) { case Direction8Way.North: return(IntVec3.North); case Direction8Way.NorthEast: return(IntVec3.NorthEast); case Direction8Way.East: return(IntVec3.East); case Direction8Way.SouthEast: return(IntVec3.SouthEast); case Direction8Way.South: return(IntVec3.South); case Direction8Way.SouthWest: return(IntVec3.SouthWest); case Direction8Way.West: return(IntVec3.West); case Direction8Way.NorthWest: return(IntVec3.NorthWest); } throw new NotImplementedException(); }
public Direction8Way FacingCardinal() { Direction8Way dir = new Direction8Way() { }; switch (Facing) { case LinkDirections.Up: dir = Direction8Way.North; break; case LinkDirections.Right: dir = Direction8Way.East; break; case LinkDirections.Down: dir = Direction8Way.South; break; case LinkDirections.Left: dir = Direction8Way.West; break; case LinkDirections.None: break; } return(dir); }
private bool TryFormAndSendCaravan() { List <Pawn> pawnsFromTransferables = TransferableUtility.GetPawnsFromTransferables(transferables); if (!CheckForErrors(pawnsFromTransferables)) { return(false); } Direction8Way direction8WayFromTo = Find.WorldGrid.GetDirection8WayFromTo(CurrentTile, startingTile); if (!TryFindExitSpot(pawnsFromTransferables, reachableForEveryColonist: true, out IntVec3 spot)) { if (!TryFindExitSpot(pawnsFromTransferables, reachableForEveryColonist: false, out spot)) { Messages.Message("CaravanCouldNotFindExitSpot".Translate(direction8WayFromTo.LabelShort()), MessageTypeDefOf.RejectInput, historical: false); return(false); } Messages.Message("CaravanCouldNotFindReachableExitSpot".Translate(direction8WayFromTo.LabelShort()), new GlobalTargetInfo(spot, map), MessageTypeDefOf.CautionInput, historical: false); } if (!TryFindRandomPackingSpot(spot, out IntVec3 packingSpot)) { Messages.Message("CaravanCouldNotFindPackingSpot".Translate(direction8WayFromTo.LabelShort()), new GlobalTargetInfo(spot, map), MessageTypeDefOf.RejectInput, historical: false); return(false); } CaravanFormingUtility.StartFormingCaravan((from x in pawnsFromTransferables where !x.Downed select x).ToList(), (from x in pawnsFromTransferables where x.Downed select x).ToList(), Faction.OfPlayer, transferables, packingSpot, spot, startingTile, destinationTile); Messages.Message("CaravanFormationProcessStarted".Translate(), pawnsFromTransferables[0], MessageTypeDefOf.PositiveEvent, historical: false); return(true); }
private bool TryFormAndSendCaravan() { List <Pawn> pawnsFromTransferables = TransferableUtility.GetPawnsFromTransferables(this.transferables); if (!this.CheckForErrors(pawnsFromTransferables)) { return(false); } Direction8Way direction8WayFromTo = Find.WorldGrid.GetDirection8WayFromTo(this.CurrentTile, this.startingTile); IntVec3 intVec; if (!this.TryFindExitSpot(pawnsFromTransferables, true, out intVec)) { if (!this.TryFindExitSpot(pawnsFromTransferables, false, out intVec)) { Messages.Message("CaravanCouldNotFindExitSpot".Translate(direction8WayFromTo.LabelShort()), MessageTypeDefOf.RejectInput, false); return(false); } Messages.Message("CaravanCouldNotFindReachableExitSpot".Translate(direction8WayFromTo.LabelShort()), new GlobalTargetInfo(intVec, this.map, false), MessageTypeDefOf.CautionInput, false); } IntVec3 meetingPoint; if (!this.TryFindRandomPackingSpot(intVec, out meetingPoint)) { Messages.Message("CaravanCouldNotFindPackingSpot".Translate(direction8WayFromTo.LabelShort()), new GlobalTargetInfo(intVec, this.map, false), MessageTypeDefOf.RejectInput, false); return(false); } CaravanFormingUtility.StartFormingCaravan((from x in pawnsFromTransferables where !x.Downed select x).ToList <Pawn>(), (from x in pawnsFromTransferables where x.Downed select x).ToList <Pawn>(), Faction.OfPlayer, this.transferables, meetingPoint, intVec, this.startingTile, this.destinationTile); Messages.Message("CaravanFormationProcessStarted".Translate(), pawnsFromTransferables[0], MessageTypeDefOf.PositiveEvent, false); return(true); }
public bool AllowsDirection(IntVec3 loc, Direction8Way direction) { if (!loc.InBounds(map)) { return(false); } if (grid == null) { return(true); } byte b = grid[map.cellIndices.CellToIndex(loc)]; switch (direction) { case Direction8Way.North: return((b & 1) == 1); case Direction8Way.NorthEast: return((b & 2) == 2); case Direction8Way.East: return((b & 4) == 4); case Direction8Way.SouthEast: return((b & 8) == 8); case Direction8Way.South: return((b & 16) == 16); case Direction8Way.SouthWest: return((b & 32) == 32); case Direction8Way.West: return((b & 64) == 64); case Direction8Way.NorthWest: return((b & 128) == 128); } return(false); }
/// <summary> /// 방향 변경 /// </summary> /// <param name="type">방향</param> public virtual bool ChangeDirection(Direction8Way type) { if ((int)type < 0 || (int)type > 7) { Debug.LogError("ChangeDirection Error:" + type.ToString()); } bool retValue = false; if (this.direction8Type != type) { retValue = true; //바꼈다. } this.direction8Type = type; if (this.direction8Type == Direction8Way.nw || this.direction8Type == Direction8Way.sw || this.direction8Type == Direction8Way.w) { // this.sprite_main.FlipX = true; } else { //this.sprite_main.FlipX = false; } currDirection = (int)type; return(retValue); }
private static int FindRandomStartingTileBasedOnExitDir(int tileID, Direction8Way exitDir) { tileCandidates.Clear(); World world = Find.World; WorldGrid grid = world.grid; grid.GetTileNeighbors(tileID, tmpNeighbors); for (int i = 0; i < tmpNeighbors.Count; i++) { int num = tmpNeighbors[i]; if (IsGoodCaravanStartingTile(num) && grid.GetDirection8WayFromTo(tileID, num) == exitDir) { tileCandidates.Add(num); } } if (tileCandidates.TryRandomElement(out int result)) { return(result); } if (tmpNeighbors.Where(IsGoodCaravanStartingTile).TryRandomElement(out result)) { return(result); } return(tileID); }
private static int FindRandomStartingTileBasedOnExitDir(int tileID, Direction8Way exitDir) { CaravanExitMapUtility.tileCandidates.Clear(); World world = Find.World; WorldGrid grid = world.grid; grid.GetTileNeighbors(tileID, CaravanExitMapUtility.tmpNeighbors); for (int i = 0; i < CaravanExitMapUtility.tmpNeighbors.Count; i++) { int num = CaravanExitMapUtility.tmpNeighbors[i]; if (CaravanExitMapUtility.IsGoodCaravanStartingTile(num)) { if (grid.GetDirection8WayFromTo(tileID, num) == exitDir) { CaravanExitMapUtility.tileCandidates.Add(num); } } } int result; if (CaravanExitMapUtility.tileCandidates.TryRandomElement(out result)) { return(result); } if (CaravanExitMapUtility.tmpNeighbors.Where(new Func <int, bool>(CaravanExitMapUtility.IsGoodCaravanStartingTile)).TryRandomElement(out result)) { return(result); } return(tileID); }
public static string LabelShort(this Direction8Way dir) { return(dir switch { Direction8Way.North => "Direction8Way_North_Short".Translate(), Direction8Way.NorthEast => "Direction8Way_NorthEast_Short".Translate(), Direction8Way.East => "Direction8Way_East_Short".Translate(), Direction8Way.SouthEast => "Direction8Way_SouthEast_Short".Translate(), Direction8Way.South => "Direction8Way_South_Short".Translate(), Direction8Way.SouthWest => "Direction8Way_SouthWest_Short".Translate(), Direction8Way.West => "Direction8Way_West_Short".Translate(), Direction8Way.NorthWest => "Direction8Way_NorthWest_Short".Translate(), _ => "Unknown Direction8Way", });
/// <summary> /// Gets the type of the direction. /// </summary> /// <returns>The direction type.</returns> /// <param name="diff">Diff.</param> public static Direction8Way GetDirectionType(Vector3 diff) { Direction8Way retType = Direction8Way.se; float atanAngleVal = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg; if (atanAngleVal >= -22.5f && atanAngleVal <= 22.5f) { retType = Direction8Way.e; } else if (atanAngleVal >= 22.5f && atanAngleVal <= 67.5f) { retType = Direction8Way.ne; } else if (atanAngleVal >= 67.5f && atanAngleVal <= 112.5f) { retType = Direction8Way.n; } else if (atanAngleVal >= 112.5f && atanAngleVal <= 157.5f) { retType = Direction8Way.nw; } else if (atanAngleVal >= 157.5f) { retType = Direction8Way.w; } else if (atanAngleVal <= -157.5f) { retType = Direction8Way.w; } else if (atanAngleVal <= -112.5f && atanAngleVal >= -157.5f) { retType = Direction8Way.sw; } else if (atanAngleVal <= -67.5f && atanAngleVal >= -112.5f) { retType = Direction8Way.s; } else if (atanAngleVal <= -22.5f && atanAngleVal >= -67.5f) { retType = Direction8Way.se; } return(retType); }
public static string LabelShort(this Direction8Way dir) { string result; switch (dir) { case Direction8Way.North: result = "Direction8Way_North_Short".Translate(); break; case Direction8Way.NorthEast: result = "Direction8Way_NorthEast_Short".Translate(); break; case Direction8Way.East: result = "Direction8Way_East_Short".Translate(); break; case Direction8Way.SouthEast: result = "Direction8Way_SouthEast_Short".Translate(); break; case Direction8Way.South: result = "Direction8Way_South_Short".Translate(); break; case Direction8Way.SouthWest: result = "Direction8Way_SouthWest_Short".Translate(); break; case Direction8Way.West: result = "Direction8Way_West_Short".Translate(); break; case Direction8Way.NorthWest: result = "Direction8Way_NorthWest_Short".Translate(); break; default: result = "Unknown Direction8Way"; break; } return(result); }
// Token: 0x06000009 RID: 9 RVA: 0x00002304 File Offset: 0x00000504 public static IntVec3 IntVec3FromDirection8Way(Direction8Way source) { IntVec3 result; switch (source) { case Direction8Way.North: result = IntVec3.North; break; case Direction8Way.NorthEast: result = IntVec3.NorthEast; break; case Direction8Way.East: result = IntVec3.East; break; case Direction8Way.SouthEast: result = IntVec3.SouthEast; break; case Direction8Way.South: result = IntVec3.South; break; case Direction8Way.SouthWest: result = IntVec3.SouthWest; break; case Direction8Way.West: result = IntVec3.West; break; case Direction8Way.NorthWest: result = IntVec3.NorthWest; break; default: throw new NotImplementedException(); } return(result); }
}; // { row, col } public static List <SearchNode> Get8WayNeighbors(SearchNode current, IMovable grid) { List <SearchNode> neighbors = new List <SearchNode>(); for (Direction8Way dir = ( Direction8Way )0; dir < Direction8Way.NO_WAY; dir += 1) { Node newPos = new Node(current.Pos.Row + Way8Directions[( int )dir, 0], current.Pos.Col + Way8Directions[( int )dir, 1]); // for specific constraints if (grid != null && grid.IsMovableNode(newPos) == false) { continue; } SearchNode newNode = new SearchNode(newPos, current, 0, 0); neighbors.Add(newNode); } return(neighbors); }
private bool TryFormAndSendCaravan() { List <Pawn> pawnsFromTransferables = TransferableUtility.GetPawnsFromTransferables(this.transferables); if (!this.CheckForErrors(pawnsFromTransferables)) { return(false); } Direction8Way direction8WayFromTo = Find.WorldGrid.GetDirection8WayFromTo(this.CurrentTile, this.startingTile); IntVec3 intVec; if (!this.TryFindExitSpot(pawnsFromTransferables, true, out intVec)) { if (!this.TryFindExitSpot(pawnsFromTransferables, false, out intVec)) { Messages.Message("CaravanCouldNotFindExitSpot".Translate(new object[] { direction8WayFromTo.LabelShort() }), MessageSound.RejectInput); return(false); } Messages.Message("CaravanCouldNotFindReachableExitSpot".Translate(new object[] { direction8WayFromTo.LabelShort() }), new GlobalTargetInfo(intVec, this.map, false), MessageSound.Negative); } IntVec3 meetingPoint; if (!this.TryFindRandomPackingSpot(intVec, out meetingPoint)) { Messages.Message("CaravanCouldNotFindPackingSpot".Translate(new object[] { direction8WayFromTo.LabelShort() }), new GlobalTargetInfo(intVec, this.map, false), MessageSound.RejectInput); return(false); } CaravanFormingUtility.StartFormingCaravan(pawnsFromTransferables, Faction.OfPlayer, this.transferables, meetingPoint, intVec, this.startingTile); Messages.Message("CaravanFormationProcessStarted".Translate(), pawnsFromTransferables[0], MessageSound.Benefit); return(true); }
public static bool ButtonIcon(ref Rect rect, Texture2D icon, string tooltip = null, Texture2D iconAddon = null, Direction8Way addonLocation = Direction8Way.NorthEast, Color?mouseOverColor = null, Color?baseColor = null, int gapSize = SmallMargin, UIDirection direction = UIDirection.LeftThenDown) { if (Mouse.IsOver(rect)) { GUI.color = mouseOverColor ?? GenUI.MouseoverColor; } else { GUI.color = baseColor ?? Color.white; } GUI.DrawTexture(rect, icon); if (iconAddon != null) { GUI.DrawTexture(AddonRect(rect, addonLocation), iconAddon); } if (!tooltip.NullOrEmpty()) { TooltipHandler.TipRegion(rect, tooltip); } var clicked = Widgets.ButtonInvisible(rect); switch (direction) { case UIDirection.LeftThenDown: case UIDirection.LeftThenUp: rect.x -= rect.width + gapSize; break; case UIDirection.RightThenDown: case UIDirection.RightThenUp: rect.x += rect.width + gapSize; break; } return(clicked); }
private static Rect AddonRect(Rect canvas, Direction8Way loc) { var rect = new Rect(0f, 0f, canvas.width / 2f, canvas.height / 2f); switch (loc) { case Direction8Way.NorthWest: rect.x = canvas.xMin; rect.y = canvas.yMin; break; case Direction8Way.NorthEast: rect.x = canvas.xMin + canvas.width / 2f; rect.y = canvas.yMin; break; default: Debug.Log("invalid addon icon location: " + loc); break; } return(rect); }
private void DrawConfig(Rect rect) { Rect rect2 = new Rect(0f, rect.y, rect.width, 30f); Text.Font = GameFont.Medium; Widgets.Label(rect2, "ExitDirection".Translate()); Text.Font = GameFont.Small; List <int> list = CaravanExitMapUtility.AvailableExitTilesAt(this.map); if (list.Any()) { for (int i = 0; i < list.Count; i++) { Direction8Way direction8WayFromTo = Find.WorldGrid.GetDirection8WayFromTo(this.CurrentTile, list[i]); float y = rect.y; float num = (float)i; Vector2 exitDirectionRadioSize = this.ExitDirectionRadioSize; float num2 = (float)(y + num * exitDirectionRadioSize.y + 30.0 + 4.0); float x = rect.x; float y2 = num2; Vector2 exitDirectionRadioSize2 = this.ExitDirectionRadioSize; float x2 = exitDirectionRadioSize2.x; Vector2 exitDirectionRadioSize3 = this.ExitDirectionRadioSize; Rect rect3 = new Rect(x, y2, x2, exitDirectionRadioSize3.y); Vector2 vector = Find.WorldGrid.LongLatOf(list[i]); string labelText = "ExitDirectionRadioButtonLabel".Translate(direction8WayFromTo.LabelShort(), vector.y.ToStringLatitude(), vector.x.ToStringLongitude()); if (Widgets.RadioButtonLabeled(rect3, labelText, this.startingTile == list[i])) { this.startingTile = list[i]; } } } else { GUI.color = Color.gray; Widgets.Label(new Rect(rect.x, (float)(rect.y + 30.0 + 4.0), rect.width, 100f), "NoCaravanExitDirectionAvailable".Translate()); GUI.color = Color.white; } }
private static int FindRandomStartingTileBasedOnExitDir(int tileID, Direction8Way exitDir) { CaravanExitMapUtility.tileCandidates.Clear(); World world = Find.World; WorldGrid grid = world.grid; grid.GetTileNeighbors(tileID, CaravanExitMapUtility.tmpNeighbors); for (int i = 0; i < CaravanExitMapUtility.tmpNeighbors.Count; i++) { int num = CaravanExitMapUtility.tmpNeighbors[i]; if (CaravanExitMapUtility.IsGoodCaravanStartingTile(num)) { if (grid.GetDirection8WayFromTo(tileID, num) == exitDir) { CaravanExitMapUtility.tileCandidates.Add(num); } } } int num2; int result; if (CaravanExitMapUtility.tileCandidates.TryRandomElement(out num2)) { result = num2; } else if ((from x in CaravanExitMapUtility.tmpNeighbors where CaravanExitMapUtility.IsGoodCaravanStartingTile(x) select x).TryRandomElement(out num2)) { result = num2; } else { result = tileID; } return(result); }
private static void ShowAskMayComeDialog(Faction faction, Map map, string reasons, Direction8Way spawnDirection, Action allow, Action refuse) { string text = "VisitorsArrivedDesc".Translate(faction, reasons); DiaNode diaNode = new DiaNode(text); DiaOption diaOption = new DiaOption("VisitorsArrivedAccept".Translate()); diaOption.action = allow; diaOption.resolveTree = true; diaNode.options.Add(diaOption); DiaOption diaOption2 = new DiaOption("VisitorsArrivedRefuse".Translate()); diaOption2.action = refuse; diaOption2.resolveTree = true; diaNode.options.Add(diaOption2); var location = ((MapParent)map.ParentHolder).Label; string title = "VisitorsArrivedTitle".Translate(location, spawnDirection.LabelShort()); Find.WindowStack.Add(new Dialog_NodeTree(diaNode, true, true, title)); }
public bool DirectionChange(Vector3 Dir) { Direction8Way newDir = Direction8Way.e; if (Mathf.Abs(Dir.x) > 0.2f) { if (Mathf.Abs(Dir.y) > 0.2f) { if (Dir.x > 0.0f) { if (Dir.y > 0.0f) { newDir = Direction8Way.ne; } else { newDir = Direction8Way.se; } } else { if (Dir.y > 0.0f) { newDir = Direction8Way.nw; } else { newDir = Direction8Way.sw; } } } else { if (Dir.x > 0.0f) { newDir = Direction8Way.e; } else { newDir = Direction8Way.w; } } } else { if (Mathf.Abs(Dir.y) > 0.2f) { if (Dir.y > 0.0f) { newDir = Direction8Way.n; } else { newDir = Direction8Way.s; } } else { if (Dir.x > 0.0f) { if (Dir.y > 0.0f) { newDir = Direction8Way.ne; } else { newDir = Direction8Way.se; } } else { if (Dir.y > 0.0f) { newDir = Direction8Way.nw; } else { newDir = Direction8Way.sw; } } } } bool retValue = false; if (this.myDirection != newDir) { retValue = true; } this.myDirection = newDir; this.aniController.ChangeDirection(this.myDirection); return(retValue); }
protected Mesh createArrow(Direction8Way direction) { Mesh m = new Mesh(); float y = Altitudes.AltitudeFor(AltitudeLayer.MapDataOverlay); const float xPixelSize = 1f / 15f; const float zPixelSize = 1f / 15f; List <Vector3> vertices = new List <Vector3>(7); List <Color> colors = new List <Color>(7); int[] triangles = new int[9]; switch (direction) { case Direction8Way.South: m.name = "ArrowSouth"; //stem vertices.Add(new Vector3(xPixelSize * 7f, y, zPixelSize * 5f)); vertices.Add(new Vector3(xPixelSize * 8f, y, zPixelSize * 5f)); vertices.Add(new Vector3(xPixelSize * 8f, y, zPixelSize * 3f)); vertices.Add(new Vector3(xPixelSize * 7f, y, zPixelSize * 3f)); //head vertices.Add(new Vector3(xPixelSize * 5f, y, zPixelSize * 3f)); vertices.Add(new Vector3(xPixelSize * 10f, y, zPixelSize * 3f)); vertices.Add(new Vector3(xPixelSize * 7.5f, y, zPixelSize * 0f)); break; case Direction8Way.North: m.name = "ArrowNorth"; //stem vertices.Add(new Vector3(xPixelSize * 8f, y, zPixelSize * 12f)); vertices.Add(new Vector3(xPixelSize * 8f, y, zPixelSize * 10f)); vertices.Add(new Vector3(xPixelSize * 7f, y, zPixelSize * 10f)); vertices.Add(new Vector3(xPixelSize * 7f, y, zPixelSize * 12f)); //head vertices.Add(new Vector3(xPixelSize * 7.5f, y, zPixelSize * 15f)); vertices.Add(new Vector3(xPixelSize * 10f, y, zPixelSize * 12f)); vertices.Add(new Vector3(xPixelSize * 5f, y, zPixelSize * 12f)); break; case Direction8Way.East: m.name = "ArrowEast"; //stem vertices.Add(new Vector3(xPixelSize * 10f, y, zPixelSize * 8f)); vertices.Add(new Vector3(xPixelSize * 12f, y, zPixelSize * 8f)); vertices.Add(new Vector3(xPixelSize * 12f, y, zPixelSize * 7f)); vertices.Add(new Vector3(xPixelSize * 10f, y, zPixelSize * 7f)); //head vertices.Add(new Vector3(xPixelSize * 12f, y, zPixelSize * 5f)); vertices.Add(new Vector3(xPixelSize * 12f, y, zPixelSize * 10f)); vertices.Add(new Vector3(xPixelSize * 15f, y, zPixelSize * 7.5f)); break; case Direction8Way.West: m.name = "ArrowWest"; //stem vertices.Add(new Vector3(xPixelSize * 5f, y, zPixelSize * 7f)); vertices.Add(new Vector3(xPixelSize * 3f, y, zPixelSize * 7f)); vertices.Add(new Vector3(xPixelSize * 3f, y, zPixelSize * 8f)); vertices.Add(new Vector3(xPixelSize * 5f, y, zPixelSize * 8f)); //head vertices.Add(new Vector3(xPixelSize * 3f, y, zPixelSize * 5f)); vertices.Add(new Vector3(xPixelSize * 0f, y, zPixelSize * 7.5f)); vertices.Add(new Vector3(xPixelSize * 3f, y, zPixelSize * 10f)); break; case Direction8Way.NorthEast: m.name = "NorthEast"; //stem vertices.Add(new Vector3(xPixelSize * 10f, y, zPixelSize * 11f)); vertices.Add(new Vector3(xPixelSize * 12f, y, zPixelSize * 13f)); vertices.Add(new Vector3(xPixelSize * 13f, y, zPixelSize * 12f)); vertices.Add(new Vector3(xPixelSize * 11f, y, zPixelSize * 10f)); //head vertices.Add(new Vector3(xPixelSize * 11f, y, zPixelSize * 14f)); vertices.Add(new Vector3(xPixelSize * 14f, y, zPixelSize * 14f)); vertices.Add(new Vector3(xPixelSize * 14f, y, zPixelSize * 11f)); break; case Direction8Way.NorthWest: m.name = "NorthWest"; //stem vertices.Add(new Vector3(xPixelSize * 5f, y, zPixelSize * 11f)); vertices.Add(new Vector3(xPixelSize * 4f, y, zPixelSize * 10f)); vertices.Add(new Vector3(xPixelSize * 2f, y, zPixelSize * 12f)); vertices.Add(new Vector3(xPixelSize * 3f, y, zPixelSize * 13f)); //head vertices.Add(new Vector3(xPixelSize * 1f, y, zPixelSize * 11f)); vertices.Add(new Vector3(xPixelSize * 1f, y, zPixelSize * 14f)); vertices.Add(new Vector3(xPixelSize * 4f, y, zPixelSize * 14f)); break; case Direction8Way.SouthEast: m.name = "SouthEast"; //stem vertices.Add(new Vector3(xPixelSize * 10f, y, zPixelSize * 4f)); vertices.Add(new Vector3(xPixelSize * 11f, y, zPixelSize * 5f)); vertices.Add(new Vector3(xPixelSize * 13f, y, zPixelSize * 3f)); vertices.Add(new Vector3(xPixelSize * 12f, y, zPixelSize * 2f)); //head vertices.Add(new Vector3(xPixelSize * 11f, y, zPixelSize * 1f)); vertices.Add(new Vector3(xPixelSize * 14f, y, zPixelSize * 4f)); vertices.Add(new Vector3(xPixelSize * 14f, y, zPixelSize * 1f)); break; case Direction8Way.SouthWest: m.name = "SouthWest"; //stem vertices.Add(new Vector3(xPixelSize * 4f, y, zPixelSize * 5f)); vertices.Add(new Vector3(xPixelSize * 5f, y, zPixelSize * 4f)); vertices.Add(new Vector3(xPixelSize * 3f, y, zPixelSize * 2f)); vertices.Add(new Vector3(xPixelSize * 2f, y, zPixelSize * 3f)); //head vertices.Add(new Vector3(xPixelSize * 4f, y, zPixelSize * 1f)); vertices.Add(new Vector3(xPixelSize * 1f, y, zPixelSize * 1f)); vertices.Add(new Vector3(xPixelSize * 1f, y, zPixelSize * 4f)); break; default: m.name = "ArrowNorth"; //stem vertices.Add(new Vector3(xPixelSize * 7f, y, zPixelSize * 10f)); vertices.Add(new Vector3(xPixelSize * 8f, y, zPixelSize * 10f)); vertices.Add(new Vector3(xPixelSize * 8f, y, zPixelSize * 12f)); vertices.Add(new Vector3(xPixelSize * 7f, y, zPixelSize * 12f)); //head vertices.Add(new Vector3(xPixelSize * 5f, y, zPixelSize * 12f)); vertices.Add(new Vector3(xPixelSize * 10f, y, zPixelSize * 12f)); vertices.Add(new Vector3(xPixelSize * 7.5f, y, zPixelSize * 15f)); break; } triangles[0] = 0; triangles[1] = 1; triangles[2] = 2; triangles[3] = 0; triangles[4] = 2; triangles[5] = 3; triangles[6] = vertices.Count - 3; triangles[7] = vertices.Count - 2; triangles[8] = vertices.Count - 1; for (int i = 0; i < vertices.Count; i++) { colors.Add(Color.black); } m.SetVertices(vertices); m.SetColors(colors); m.SetTriangles(triangles, 0); return(m); }
void Pan() { if (InputManager.fingerInputDic.Count == 1) { InputManager.FingerInput input = InputManager.Instance.GetCurrentInput(); if (input.currentTouchPhase == TouchPhase.Began) { this.momentumVector = Vector2.zero; this.springDampStrengthen = this.springDampStrengthenMax; this.dragStartPosition = input.currentPoint; if (springPosition != null) { springPosition.enabled = false; } } else if (input.currentTouchPhase == TouchPhase.Moved) { float x = (input.prevPoint.x - input.currentPoint.x); float y = (input.currentPoint.y - input.prevPoint.y); Vector2 deltaDrag = new Vector2(x, y); this.momentumVector = momentumVector + deltaDrag * ((0.02f / CameraManager.tk2DCamera.ZoomFactor) * momentumAmount); this.panAcumVector += this.momentumVector; } else if (input.currentTouchPhase == TouchPhase.Canceled || input.currentTouchPhase == TouchPhase.Ended) { Vector3 direction = (Vector3)input.currentPoint - this.dragStartPosition; Direction8Way way = Helper.GetDirectionType(direction); float panTH = this.panThresHolds; if (way == Direction8Way.n || way == Direction8Way.s) { panTH = panTH * (Screen.height / Screen.width); } float distance = Vector3.Distance(input.currentPoint, this.dragStartPosition); if (distance > panTH) { this.springDampStrengthen = this.springDampStrengthenMin; } else { this.springDampStrengthen = this.springDampStrengthenMax; } this.ContrainBounds(false); } } else { this.panAcumVector = Vector2.zero; this.isCameraPanning = false; } float delTaTime = Time.deltaTime; if (momentumVector.magnitude > 0.01f) { Vector2 dampingVec = NGUIMath.SpringDampen(ref momentumVector, this.springDampStrengthen, delTaTime); if (float.IsNaN(dampingVec.x) == false && float.IsNaN(dampingVec.y) == false) { this.isCameraPanning = true; CameraManager.tk2DCamera.transform.Translate(dampingVec, Space.Self); } if (!ContrainBounds(false)) { springPosition.enabled = false; } } }
public static Caravan ExitMapAndCreateCaravan(IEnumerable <Pawn> pawns, Faction faction, int exitFromTile, Direction8Way dir, int destinationTile, bool sendMessage = true) { int directionTile = CaravanExitMapUtility.FindRandomStartingTileBasedOnExitDir(exitFromTile, dir); return(CaravanExitMapUtility.ExitMapAndCreateCaravan(pawns, faction, exitFromTile, directionTile, destinationTile, sendMessage)); }
private static void ShowAskMayComeDialog(Faction faction, Map map, TaggedString reasons, Direction8Way spawnDirection, Action allow, Action refuse) { var text = "VisitorsArrivedDesc".Translate(faction, reasons); DiaNode diaNode = new DiaNode(text); DiaOption diaOption = new DiaOption("VisitorsArrivedAccept".Translate()) { action = allow, resolveTree = true }; diaNode.options.Add(diaOption); DiaOption diaOption2 = new DiaOption("VisitorsArrivedRefuse".Translate()) { action = refuse, resolveTree = true }; diaNode.options.Add(diaOption2); if (!map.listerBuildings.AllBuildingsColonistOfClass <Building_GuestBed>().Any()) { DiaOption diaOption3 = new DiaOption("VisitorsArrivedRefuseUntilBeds".Translate()); diaOption3.resolveTree = true; diaOption3.action = () => { Hospitality_MapComponent.RefuseGuestsUntilWeHaveBeds(map); refuse(); }; diaNode.options.Add(diaOption3); } string title = "VisitorsArrivedTitle".Translate(new NamedArgument((MapParent)map.ParentHolder, "WORLDOBJECT"), spawnDirection.LabelShort()); Find.WindowStack.Add(new Dialog_NodeTree(diaNode, true, true, title)); }
public static List <Direction8Way> Search8WayNode(Node start, Node end, IMovable grid, out int distance) { Console.Error.WriteLine("Finding from {0} to {1} by A*", start, end); distance = -1; List <Direction8Way> pathWay = new List <Direction8Way>(); if (start.Equals(end)) { distance = 0; return(pathWay); } List <SearchNode> frontier = new List <SearchNode>(); List <SearchNode> explored = new List <SearchNode>(); SearchNode startNode = new SearchNode(start, null, 0, PathFinding.GetManhattanHeuristic(start, end)); frontier.Add(startNode); bool found = false; while (frontier.Count > 0) { SearchNode current = frontier[0]; frontier.RemoveAt(0); explored.Add(current); if (current.Pos.Equals(end)) { distance = current.CostSoFar + current.CostToEnd; SearchNode parent = current; while (parent != null && parent.Pos.Equals(start) == false) { Direction8Way dir = PathFinding.Get8WayDirection(parent.Parent.Pos, parent.Pos); pathWay.Add(dir); parent = parent.Parent; } found = true; break; } List <SearchNode> neighbors = PathFinding.Get8WayNeighbors(current, grid); foreach (SearchNode node in neighbors) { if (explored.Contains(node)) { continue; } node.CostSoFar = current.CostSoFar + 1; node.CostToEnd = PathFinding.GetManhattanHeuristic(node.Pos, end); int index = frontier.IndexOf(node); if (index > 0) { if (node.CostSoFar < frontier[index].CostSoFar) { // if found better way frontier[index].Parent = current; frontier[index].CostSoFar = node.CostSoFar; frontier[index].CostToEnd = node.CostToEnd; } } else { frontier.Add(node); } } frontier.Sort((item1, item2) => (item1.CostSoFar + item1.CostToEnd) - (item2.CostSoFar + item2.CostToEnd)); //Console.Error.WriteLine( "frontier = {0}", frontier.ToDebugString() ); } pathWay.Reverse(); if (found) { Console.Error.WriteLine("Found : {0} to {1} : {2} of distance {3}", start, end, pathWay.ToDebugString(), distance); } else { Console.Error.WriteLine("No Way! : {0} to {1}", start, end); } return(pathWay); }