public override void Apply(ZoneGenContext zoneContext, IGenContext context, StablePriorityQueue <Priority, IGenStep> queue) { //find the first postproc that is a GridRoom postproc and add this to its special rooms //NOTE: if a room-based generator is not found as the generation step, it will just skip this floor but treat it as though it was placed. if (SpreadPlan.CheckIfDistributed(zoneContext, context)) { //TODO: allow arbitrary components to be added RoomGenOption genDuo = Spawns.Pick(context.Rand); SetGridSpecialRoomStep <MapGenContext> specialStep = new SetGridSpecialRoomStep <MapGenContext>(); SetSpecialRoomStep <ListMapGenContext> listSpecialStep = new SetSpecialRoomStep <ListMapGenContext>(); specialStep.Filters = genDuo.Filters; if (specialStep.CanApply(context)) { specialStep.Rooms = new PresetPicker <RoomGen <MapGenContext> >(genDuo.GridOption); specialStep.RoomComponents.Set(new ImmutableRoom()); queue.Enqueue(PriorityGrid, specialStep); } else if (listSpecialStep.CanApply(context)) { listSpecialStep.Rooms = new PresetPicker <RoomGen <ListMapGenContext> >(genDuo.ListOption); listSpecialStep.RoomComponents.Set(new ImmutableRoom()); PresetPicker <PermissiveRoomGen <ListMapGenContext> > picker = new PresetPicker <PermissiveRoomGen <ListMapGenContext> >(); picker.ToSpawn = new RoomGenAngledHall <ListMapGenContext>(0); listSpecialStep.Halls = picker; queue.Enqueue(PriorityList, listSpecialStep); } } }
public override void Apply(ZoneGenContext zoneContext, IGenContext context, StablePriorityQueue <Priority, IGenStep> queue) { if (SpreadPlan.CheckIfDistributed(zoneContext, context)) { IGenPriority genStep = Spawns.Pick(context.Rand); queue.Enqueue(genStep.Priority, genStep.GetItem()); } }