megafauna elimination mission and fish salv faction (#16720)
Co-authored-by: deltanedas <@deltanedas:kde.org>
This commit is contained in:
@@ -197,6 +197,9 @@ public sealed class SpawnSalvageMissionJob : Job<bool>
|
||||
case SalvageMissionType.Destruction:
|
||||
await SetupStructure(mission, dungeon, mapUid, grid, random);
|
||||
break;
|
||||
case SalvageMissionType.Elimination:
|
||||
await SetupElimination(mission, dungeon, mapUid, grid, random);
|
||||
break;
|
||||
default:
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
@@ -337,9 +340,34 @@ public sealed class SpawnSalvageMissionJob : Job<bool>
|
||||
}
|
||||
}
|
||||
|
||||
private async Task SpawnMobsRandomRooms(SalvageMission mission, Dungeon dungeon, SalvageFactionPrototype faction, MapGridComponent grid, Random random)
|
||||
private async Task SetupElimination(
|
||||
SalvageMission mission,
|
||||
Dungeon dungeon,
|
||||
EntityUid gridUid,
|
||||
MapGridComponent grid,
|
||||
Random random)
|
||||
{
|
||||
var groupSpawns = _salvage.GetSpawnCount(mission.Difficulty);
|
||||
// spawn megafauna in a random place
|
||||
var roomIndex = random.Next(dungeon.Rooms.Count);
|
||||
var room = dungeon.Rooms[roomIndex];
|
||||
var tile = room.Tiles.ElementAt(random.Next(room.Tiles.Count));
|
||||
var position = grid.GridTileToLocal(tile);
|
||||
|
||||
var faction = _prototypeManager.Index<SalvageFactionPrototype>(mission.Faction);
|
||||
var prototype = faction.Configs["Megafauna"];
|
||||
var uid = _entManager.SpawnEntity(prototype, position);
|
||||
// not removing ghost role since its 1 megafauna, expect that you won't be able to cheese it.
|
||||
var eliminationComp = _entManager.EnsureComponent<SalvageEliminationExpeditionComponent>(gridUid);
|
||||
eliminationComp.Megafauna.Add(uid);
|
||||
|
||||
// spawn less mobs than usual since there's megafauna to deal with too
|
||||
await SpawnMobsRandomRooms(mission, dungeon, faction, grid, random, 0.5f);
|
||||
}
|
||||
|
||||
private async Task SpawnMobsRandomRooms(SalvageMission mission, Dungeon dungeon, SalvageFactionPrototype faction, MapGridComponent grid, Random random, float scale = 1f)
|
||||
{
|
||||
// scale affects how many groups are spawned, not the size of the groups themselves
|
||||
var groupSpawns = _salvage.GetSpawnCount(mission.Difficulty) * scale;
|
||||
var groupSum = faction.MobGroups.Sum(o => o.Prob);
|
||||
|
||||
for (var i = 0; i < groupSpawns; i++)
|
||||
|
||||
Reference in New Issue
Block a user