Пример #1
0
 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;
     });
 }
Пример #2
0
    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);
    }
Пример #3
0
    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);
    }
Пример #4
0
 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;
 }
Пример #5
0
    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);
    }
Пример #6
0
    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);
    }
Пример #7
0
 public override void PreDeployTweaks(ThemeElementSpec spec)
 {
     base.PreDeployTweaks(spec);
     TombTopElement top     = TombTop.Random(spec.Random);
     GenDeploy      tombTop = new GenDeploy(top);
 }
Пример #8
0
 public GridDeploy(GenDeploy genDeploy)
 {
     this.GO     = genDeploy.Element.GO;
     this.Static = !genDeploy.Element.Dynamic;
     ITransformExt.CopyFrom(this, genDeploy);
 }