public static void CreateVerticalEntrancePath(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.EntrancePathIntention()); if (y != yStop - yDir) { grid.Positions[exitX, y].Intentions.Add(Intention.VerticalExitIntention()); } } DebugPrintMeaning(grid, Meaning.ExitPath); }
public static void CreateHorizontalEntrancePath(IntentionGrid grid, int entranceX, int entranceY) { var onGroundLevel = grid.GetByMeaning(Meaning.GroundLevel).Any(t => t.Y == entranceY); 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 (entranceX <= 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, entranceY].Intentions.Add(Intention.NonDynamic()); } if (!onGroundLevel && entranceY - 1 >= 0) { grid.Positions[x, entranceY - 1].Intentions.Clear(); grid.Positions[x, entranceY - 1].Intentions.Add(Intention.SolidIntention()); } if (!onGroundLevel && entranceY + 1 < grid.Height) { grid.Positions[x, entranceY + 1].Intentions.Clear(); grid.Positions[x, entranceY + 1].Intentions.Add(Intention.SolidIntention()); } grid.Positions[x, entranceY].Intentions.Add(Intention.EntrancePathIntention()); } if (entranceY > circuits.Select(t => t.Y).Max() || entranceY < circuits.Select(t => t.Y).Min()) { grid.Positions[xStop, entranceY].Intentions.Add(Intention.LadderIntention()); grid.Positions[xStop, entranceY].Intentions.Add(Intention.NonDynamic()); } //Debug DebugPrintMeaning(grid, Meaning.EntrancePath); }