Beispiel #1
0
        public static void CreateVerticalExitPath(IntentionGrid grid, int exitX, int exitY)
        {
            var circuits   = grid.GetByMeaning(Meaning.Circuit);
            var topMost    = circuits.Select(x => x.Y).Min();
            var bottomMost = circuits.Select(x => x.Y).Max();

            var yDir   = 0;
            var yStart = 0;
            var yStop  = topMost + 1;

            if (exitY <= 0)
            {
                yDir = 1;
            }
            else
            {
                yDir   = -1;
                yStart = grid.Width - 1;
                yStop  = bottomMost - 1;
            }

            for (var y = yStart; y != yStop; y += yDir)
            {
                grid.Positions[exitX, y].Intentions.Add(Intention.ExitPathIntention());
                if (y != yStop - yDir)//not the last one
                {
                    grid.Positions[exitX, y].Intentions.Add(Intention.VerticalExitIntention());
                }
            }

            DebugPrintMeaning(grid, Meaning.ExitPath);
        }
Beispiel #2
0
        public static void CreateHorizontalExitPath(IntentionGrid grid, int exitX, int exitY)
        {
            var onGroundLevel = grid.GetByMeaning(Meaning.GroundLevel).Any(t => t.Y == exitY);
            var circuits      = grid.GetByMeaning(Meaning.Circuit);
            var leftMost      = circuits.Select(x => x.X).Min();
            var rightMost     = circuits.Select(x => x.X).Max();

            var xDir   = 0;
            var xStart = 0;
            var xStop  = leftMost;

            if (exitX <= 0)
            {
                xDir = 1;
            }
            else
            {
                xDir   = -1;
                xStart = grid.Width - 1;
                xStop  = rightMost;
            }

            for (var x = xStart; x != xStop; x += xDir)
            {
                if (x != xStart)
                {
                    grid.Positions[xStop, exitY].Intentions.Add(Intention.NonDynamic());
                }

                if (!onGroundLevel && exitY - 1 >= 0)
                {
                    grid.Positions[x, exitY - 1].Intentions.Clear();
                    grid.Positions[x, exitY - 1].Intentions.Add(Intention.SolidIntention());
                }
                if (!onGroundLevel && exitY + 1 < grid.Height)
                {
                    grid.Positions[x, exitY + 1].Intentions.Clear();
                    grid.Positions[x, exitY + 1].Intentions.Add(Intention.SolidIntention());
                }
                grid.Positions[x, exitY].Intentions.Add(Intention.ExitPathIntention());
            }
            if (exitY > circuits.Select(t => t.Y).Max() || exitY < circuits.Select(t => t.Y).Min())
            {
                grid.Positions[xStop, exitY].Intentions.Add(Intention.LadderIntention());
                grid.Positions[xStop, exitY].Intentions.Add(Intention.NonDynamic());
            }

            DebugPrintMeaning(grid, Meaning.ExitPath);
        }