예제 #1
0
        public override void Apply(ZoneGenContext zoneContext, IGenContext context, StablePriorityQueue <Priority, IGenStep> queue)
        {
            int id = zoneContext.CurrentID;

            foreach (int floorId in SpreadPlan.DropPoints)
            {
                if (floorId != zoneContext.CurrentID)
                {
                    continue;
                }
                foreach (IGenPriority vaultStep in VaultSteps)
                {
                    queue.Enqueue(vaultStep.Priority, vaultStep.GetItem());
                }

                {
                    SpawnList <MapItem> itemListSlice = Items.GetSpawnList(id);
                    PickerSpawner <ListMapGenContext, MapItem> constructedSpawns = new PickerSpawner <ListMapGenContext, MapItem>(new LoopedRand <MapItem>(itemListSlice, ItemAmount[id]));

                    List <IStepSpawner <ListMapGenContext, MapItem> > steps = new List <IStepSpawner <ListMapGenContext, MapItem> >();
                    steps.Add(constructedSpawns);
                    if (ItemSpawners.ContainsItem(id))
                    {
                        IStepSpawner <ListMapGenContext, MapItem> treasures = ItemSpawners[id].Copy();
                        steps.Add(treasures);
                    }
                    PresetMultiRand <IStepSpawner <ListMapGenContext, MapItem> > groupRand   = new PresetMultiRand <IStepSpawner <ListMapGenContext, MapItem> >(steps.ToArray());
                    RandomRoomSpawnStep <ListMapGenContext, MapItem>             detourItems = ItemPlacements[id].Copy();
                    detourItems.Spawn = new MultiStepSpawner <ListMapGenContext, MapItem>(groupRand);
                    queue.Enqueue(ItemPriority, detourItems);
                }


                SpawnList <MobSpawn> mobListSlice = Mobs.GetSpawnList(id);
                if (mobListSlice.CanPick)
                {
                    //secret enemies
                    SpecificTeamSpawner specificTeam = new SpecificTeamSpawner();

                    MobSpawn newSpawn = mobListSlice.Pick(context.Rand).Copy();
                    specificTeam.Spawns.Add(newSpawn);

                    //use bruteforce clone for this
                    PlaceRandomMobsStep <ListMapGenContext> secretMobPlacement = MobPlacements[id].Copy();
                    secretMobPlacement.Spawn = new LoopedTeamSpawner <ListMapGenContext>(specificTeam, MobAmount[id]);
                    queue.Enqueue(MobPriority, secretMobPlacement);
                }
            }
        }
예제 #2
0
        public override void Apply(ZoneGenContext zoneContext, IGenContext context, StablePriorityQueue <Priority, IGenStep> queue)
        {
            int id = zoneContext.CurrentID;

            foreach (int floorId in SpreadPlan.DropPoints)
            {
                if (floorId != zoneContext.CurrentID)
                {
                    continue;
                }
                {
                    SpawnList <AddBossRoomStep <ListMapGenContext> > bossListSlice = BossSteps.GetSpawnList(id);
                    if (!bossListSlice.CanPick)
                    {
                        return;
                    }
                    AddBossRoomStep <ListMapGenContext> bossStep = bossListSlice.Pick(context.Rand).Copy();
                    queue.Enqueue(BossRoomPriority, bossStep);
                }

                foreach (IGenPriority vaultStep in VaultSteps)
                {
                    queue.Enqueue(vaultStep.Priority, vaultStep.GetItem());
                }

                {
                    SpawnList <MapItem> itemListSlice = Items.GetSpawnList(id);
                    PickerSpawner <ListMapGenContext, MapItem> constructedSpawns = new PickerSpawner <ListMapGenContext, MapItem>(new LoopedRand <MapItem>(itemListSlice, ItemAmount[id]));

                    IStepSpawner <ListMapGenContext, MapItem> treasures = ItemSpawners[id].Copy();

                    PresetMultiRand <IStepSpawner <ListMapGenContext, MapItem> > groupRand = new PresetMultiRand <IStepSpawner <ListMapGenContext, MapItem> >(constructedSpawns, treasures);

                    RandomRoomSpawnStep <ListMapGenContext, MapItem> detourItems = ItemPlacements[id].Copy();
                    detourItems.Spawn = new MultiStepSpawner <ListMapGenContext, MapItem>(groupRand);
                    queue.Enqueue(RewardPriority, detourItems);
                }
            }
        }
예제 #3
0
 protected RoomSpawnStep(IStepSpawner <TGenContext, TSpawnable> spawn)
     : base(spawn)
 {
 }
예제 #4
0
 public DueSpawnStep(IStepSpawner <TGenContext, TSpawnable> spawn, int successPercent)
     : base(spawn)
 {
     this.SuccessPercent = successPercent;
 }
예제 #5
0
 protected BaseSpawnStep(IStepSpawner <TGenContext, TSpawnable> spawn)
 {
     this.Spawn = spawn;
 }
예제 #6
0
 public TerrainSpawnStep(ITile terrain, IStepSpawner <TGenContext, TSpawnable> spawn)
     : base(spawn)
 {
     this.Terrain = terrain;
 }
예제 #7
0
 public TerminalSpawnStep(IStepSpawner <TGenContext, TSpawnable> spawn, bool includeHalls = false)
     : base(spawn)
 {
     this.IncludeHalls = includeHalls;
 }
예제 #8
0
 public BoxSpawner(int id, IStepSpawner <TGenContext, MapItem> spawner)
 {
     this.BaseSpawner = spawner;
     this.BoxID       = id;
 }
예제 #9
0
 public RandomSpawnStep(IStepSpawner <TGenContext, TSpawnable> spawn)
     : base(spawn)
 {
 }
 public DisconnectedSpawnStep(IStepSpawner <T, E> spawn) : base(spawn)
 {
 }
예제 #11
0
 public DueSpawnStep(IStepSpawner <TGenContext, TSpawnable> spawn, int successPercent, bool includeHalls = false)
     : base(spawn)
 {
     this.SuccessPercent = successPercent;
     this.IncludeHalls   = includeHalls;
 }
예제 #12
0
 public SpecificSpawnStep(IStepSpawner <TGenContext, TSpawnable> spawn, List <Loc> spawnLocs)
     : base(spawn)
 {
     this.SpawnLocs = spawnLocs;
 }
예제 #13
0
 protected RoomSpawnStep(IStepSpawner <TGenContext, TSpawnable> spawn)
     : base(spawn)
 {
     this.Filters = new List <BaseRoomFilter>();
 }