public static DrawAction <GenSpace> MergeIn(GenDeploy deploy, Theme theme, GridType type = GridType.Floor, bool typeOnlyDefault = true, bool themeOnlyDefault = false) { return((arr, x, y) => { MergeIn(arr, x, y, deploy, theme, type, typeOnlyDefault, themeOnlyDefault); return true; }); }
protected override bool ModifyInternal(RoomSpec spec) { UndeadTombTheme undeadTheme = spec.Theme as UndeadTombTheme; if (undeadTheme == null) { throw new ArgumentException("Theme needs to be undead themed."); } var tombCollection = undeadTheme.Tombs.SmartElement; ThemeElement tombProto = tombCollection.Proto; List <List <Bounding> > options = spec.Grids.FindRectanglesMaximized(tombProto.GridWidth + 2, tombProto.GridLength + 2, true, new StrokedAction <GenSpace>() { UnitAction = Draw.IsType <GenSpace>(GridType.Floor), StrokeAction = Draw.Walkable() }, spec.Grids.Bounding); #region DEBUG if (BigBoss.Debug.logging(Logs.LevelGen) && BigBoss.Debug.Flag(DebugManager.DebugFlag.FineSteps)) { BigBoss.Debug.printHeader(Logs.LevelGen, "Printing tomb layout options"); for (int i = 0; i < options.Count; i++) { MultiMap <GenSpace> tmp = new MultiMap <GenSpace>(spec.Grids); foreach (Bounding bound in options[i]) { tmp.DrawRect(bound.XMin, bound.XMax, bound.YMin, bound.YMax, new StrokedAction <GenSpace>() { UnitAction = Draw.SetTo(GridType.Wall, spec.Theme), StrokeAction = Draw.True <GenSpace>() }); } tmp.ToLog(Logs.LevelGen, "Option " + i); } BigBoss.Debug.printFooter(Logs.LevelGen, "Printing tomb layout options"); } #endregion while (options.Count > 0) { List <Bounding> set = options.RandomTake(spec.Random); if (set.Count > MIN_TOMBS) { foreach (Bounding tombBound in set) { GenDeploy tomb = new GenDeploy(tombCollection.Get(spec.Random)); spec.Grids.DrawRect(tombBound.XMin, tombBound.XMax, tombBound.YMin, tombBound.YMax, new StrokedAction <GenSpace>() { UnitAction = Draw.MergeIn(tomb, spec.Theme), StrokeAction = Draw.True <GenSpace>() }); } return(true); } } return(false); }
public void AddAdditional(GenDeploy deploy, int x, int y) { List <GenDeploy> list; if (!Additional.TryGetValue(x, y, out list)) { list = new List <GenDeploy>(1); Additional[x, y] = list; } list.Add(deploy); }
public void AddDeploy(GenDeploy elem, int x, int y) { if (Deploys == null) { Deploys = new List <GenDeploy>(3); } if (MainDeploys == null) { MainDeploys = new List <GenDeploy>(3); } if (elem.OriginPt == null) { elem.OriginPt = new Point(x, y); MainDeploys.Add(elem); } Deploys.Add(elem); elem.Spaces[x, y] = this; }
public static void MergeIn(this Container2D <GenSpace> arr, int x, int y, GenDeploy deploy, Theme theme, GridType type = GridType.Floor, bool typeOnlyDefault = true, bool themeOnlyDefault = false) { GenSpace space; if (!arr.TryGetValue(x, y, out space)) { space = new GenSpace(type, theme, x, y); arr[x, y] = space; } else { if (!themeOnlyDefault) { space.Theme = theme; } if (!typeOnlyDefault) { space.Type = type; } } space.AddDeploy(deploy, x, y); }
protected bool HandleEmptyDeploy(GenSpace space, System.Random rand) { space.Deploys = new List <GenDeploy>(1); ThemeElement element; switch (space.Type) { case GridType.Wall: element = space.Theme.Wall.SmartElement.Get(rand); break; case GridType.Door: element = space.Theme.Door.SmartElement.Get(rand); break; case GridType.Chest: element = space.Theme.Chest.SmartElement.Get(rand); break; case GridType.NULL: return(false); case GridType.StairPlace: case GridType.Floor: case GridType.SmallLoot: default: element = space.Theme.Floor.SmartElement.Get(rand); break; } if (element == null) { throw new ArgumentException("Theme " + space.Theme.GetType() + " had no elements for type: " + space.Type); } GenDeploy deploy = new GenDeploy(element); space.AddDeploy(deploy, 0, 0); return(true); }
public override void PreDeployTweaks(ThemeElementSpec spec) { base.PreDeployTweaks(spec); TombTopElement top = TombTop.Random(spec.Random); GenDeploy tombTop = new GenDeploy(top); }
public GridDeploy(GenDeploy genDeploy) { this.GO = genDeploy.Element.GO; this.Static = !genDeploy.Element.Dynamic; ITransformExt.CopyFrom(this, genDeploy); }