Пример #1
0
        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();
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
    /// <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);
    }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
 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",
     });
Пример #12
0
    /// <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);
    }
Пример #13
0
        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);
        }
Пример #15
0
        };                                                                                                                                  // { 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);
        }
Пример #16
0
        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);
        }
Пример #19
0
        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;
            }
        }
Пример #20
0
        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);
        }
Пример #21
0
        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));
        }
Пример #22
0
    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);
    }
Пример #23
0
        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);
        }
Пример #24
0
    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;
            }
        }
    }
Пример #25
0
        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));
        }
Пример #27
0
        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);
        }