Make procgen use weighted variants (#24669)
This commit is contained in:
@@ -84,7 +84,7 @@ public sealed partial class DungeonJob
|
||||
foundNoise = true;
|
||||
noiseFill = true;
|
||||
var tileDef = _tileDefManager[layer.Tile];
|
||||
var variant = rand.NextByte(tileDef.Variants);
|
||||
var variant = _tile.PickVariant((ContentTileDefinition) tileDef, rand);
|
||||
|
||||
tiles.Add((node, new Tile(tileDef.TileId, variant: variant)));
|
||||
roomTiles.Add(node);
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Numerics;
|
||||
using System.Threading.Tasks;
|
||||
using Content.Server.NodeContainer;
|
||||
using Content.Shared.Doors.Components;
|
||||
using Content.Shared.Maps;
|
||||
using Content.Shared.Physics;
|
||||
using Content.Shared.Procedural;
|
||||
using Content.Shared.Procedural.PostGeneration;
|
||||
@@ -191,7 +192,7 @@ public sealed partial class DungeonJob
|
||||
if (!_anchorable.TileFree(grid, neighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask))
|
||||
continue;
|
||||
|
||||
tiles.Add((neighbor, _tileDefManager.GetVariantTile(tileDef, random)));
|
||||
tiles.Add((neighbor, _tile.GetVariantTile((ContentTileDefinition) tileDef, random)));
|
||||
}
|
||||
|
||||
foreach (var index in dungeon.CorridorExteriorTiles)
|
||||
@@ -202,7 +203,7 @@ public sealed partial class DungeonJob
|
||||
if (!_anchorable.TileFree(grid, index, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask))
|
||||
continue;
|
||||
|
||||
tiles.Add((index, _tileDefManager.GetVariantTile(tileDef, random)));
|
||||
tiles.Add((index, _tile.GetVariantTile((ContentTileDefinition)tileDef, random)));
|
||||
}
|
||||
|
||||
grid.SetTiles(tiles);
|
||||
@@ -478,7 +479,7 @@ public sealed partial class DungeonJob
|
||||
isValid = true;
|
||||
|
||||
// Entrance wew
|
||||
grid.SetTile(tile, _tileDefManager.GetVariantTile(tileDef, random));
|
||||
grid.SetTile(tile, _tile.GetVariantTile((ContentTileDefinition) tileDef, random));
|
||||
ClearDoor(dungeon, grid, tile);
|
||||
var gridCoords = grid.GridTileToLocal(tile);
|
||||
// Need to offset the spawn to avoid spawning in the room.
|
||||
@@ -496,7 +497,7 @@ public sealed partial class DungeonJob
|
||||
continue;
|
||||
}
|
||||
|
||||
grid.SetTile(nearTile.GridIndices, _tileDefManager.GetVariantTile(tileDef, random));
|
||||
grid.SetTile(nearTile.GridIndices, _tile.GetVariantTile((ContentTileDefinition) tileDef, random));;
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -589,7 +590,7 @@ public sealed partial class DungeonJob
|
||||
{
|
||||
var neighbor = tile + dirVec * j;
|
||||
|
||||
tiles.Add((neighbor, _tileDefManager.GetVariantTile(tileDef, random)));
|
||||
tiles.Add((neighbor, _tile.GetVariantTile((ContentTileDefinition) tileDef, random)));
|
||||
index++;
|
||||
takenTiles.Add(neighbor);
|
||||
}
|
||||
@@ -690,7 +691,7 @@ public sealed partial class DungeonJob
|
||||
{
|
||||
var tile = validTiles[j];
|
||||
var gridPos = grid.GridTileToLocal(tile);
|
||||
grid.SetTile(tile, _tileDefManager.GetVariantTile(tileDef, random));
|
||||
grid.SetTile(tile, _tile.GetVariantTile((ContentTileDefinition) tileDef, random));
|
||||
|
||||
_entManager.SpawnEntities(gridPos, gen.Entities);
|
||||
}
|
||||
@@ -721,7 +722,7 @@ public sealed partial class DungeonJob
|
||||
{
|
||||
foreach (var entrance in room.Entrances)
|
||||
{
|
||||
setTiles.Add((entrance, _tileDefManager.GetVariantTile(tileDef, random)));
|
||||
setTiles.Add((entrance, _tile.GetVariantTile((ContentTileDefinition) tileDef, random)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -857,7 +858,7 @@ public sealed partial class DungeonJob
|
||||
|
||||
foreach (var tile in corridorTiles)
|
||||
{
|
||||
setTiles.Add((tile, _tileDefManager.GetVariantTile(tileDef, random)));
|
||||
setTiles.Add((tile, _tile.GetVariantTile((ContentTileDefinition) tileDef, random)));
|
||||
}
|
||||
|
||||
grid.SetTiles(setTiles);
|
||||
@@ -902,7 +903,7 @@ public sealed partial class DungeonJob
|
||||
if (!dungeon.RoomExteriorTiles.Contains(neighbor))
|
||||
continue;
|
||||
|
||||
tiles.Add((neighbor, _tileDefManager.GetVariantTile(tileDef, random)));
|
||||
tiles.Add((neighbor, _tile.GetVariantTile((ContentTileDefinition) tileDef, random)));
|
||||
spawnPositions.Add(neighbor);
|
||||
}
|
||||
}
|
||||
@@ -1013,7 +1014,7 @@ public sealed partial class DungeonJob
|
||||
for (var x = -width + 1; x < width; x++)
|
||||
{
|
||||
var weh = tile + neighborDir.ToIntVec() * x;
|
||||
grid.SetTile(weh, _tileDefManager.GetVariantTile(tileDef, random));
|
||||
grid.SetTile(weh, _tile.GetVariantTile((ContentTileDefinition) tileDef, random));
|
||||
|
||||
var coords = grid.GridTileToLocal(weh);
|
||||
_entManager.SpawnEntities(coords, gen.Entities);
|
||||
@@ -1131,7 +1132,7 @@ public sealed partial class DungeonJob
|
||||
continue;
|
||||
|
||||
width--;
|
||||
grid.SetTile(node, _tileDefManager.GetVariantTile(tileDef, random));
|
||||
grid.SetTile(node, _tile.GetVariantTile((ContentTileDefinition) tileDef, random));
|
||||
|
||||
if (gen.EdgeEntities != null && nodeDistances.Count - i <= 2)
|
||||
{
|
||||
@@ -1217,7 +1218,7 @@ public sealed partial class DungeonJob
|
||||
if (!random.Prob(gen.Prob) || !checkedTiles.Add(neighbor))
|
||||
continue;
|
||||
|
||||
grid.SetTile(neighbor, _tileDefManager.GetVariantTile(tileDef, random));
|
||||
grid.SetTile(neighbor, _tile.GetVariantTile((ContentTileDefinition) tileDef, random));
|
||||
var gridPos = grid.GridTileToLocal(neighbor);
|
||||
var protoNames = EntitySpawnCollection.GetSpawns(gen.Spawns, random);
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ using Content.Server.Construction;
|
||||
using Robust.Shared.CPUJob.JobQueues;
|
||||
using Content.Server.Decals;
|
||||
using Content.Shared.Construction.EntitySystems;
|
||||
using Content.Shared.Maps;
|
||||
using Content.Shared.Procedural;
|
||||
using Content.Shared.Procedural.DungeonGenerators;
|
||||
using Content.Shared.Procedural.PostGeneration;
|
||||
@@ -27,6 +28,7 @@ public sealed partial class DungeonJob : Job<Dungeon>
|
||||
private readonly DecalSystem _decals;
|
||||
private readonly DungeonSystem _dungeon;
|
||||
private readonly EntityLookupSystem _lookup;
|
||||
private readonly TileSystem _tile;
|
||||
private readonly SharedMapSystem _maps;
|
||||
private readonly SharedTransformSystem _transform;
|
||||
private EntityQuery<TagComponent> _tagQuery;
|
||||
@@ -51,6 +53,7 @@ public sealed partial class DungeonJob : Job<Dungeon>
|
||||
DecalSystem decals,
|
||||
DungeonSystem dungeon,
|
||||
EntityLookupSystem lookup,
|
||||
TileSystem tile,
|
||||
SharedTransformSystem transform,
|
||||
DungeonConfigPrototype gen,
|
||||
MapGridComponent grid,
|
||||
@@ -69,6 +72,7 @@ public sealed partial class DungeonJob : Job<Dungeon>
|
||||
_decals = decals;
|
||||
_dungeon = dungeon;
|
||||
_lookup = lookup;
|
||||
_tile = tile;
|
||||
_maps = _entManager.System<SharedMapSystem>();
|
||||
_transform = transform;
|
||||
_tagQuery = _entManager.GetEntityQuery<TagComponent>();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Numerics;
|
||||
using Content.Shared.Decals;
|
||||
using Content.Shared.Maps;
|
||||
using Content.Shared.Procedural;
|
||||
using Content.Shared.Random.Helpers;
|
||||
using Content.Shared.Whitelist;
|
||||
@@ -230,7 +231,7 @@ public sealed partial class DungeonSystem
|
||||
// but place 1 nanometre off grid and fail the add.
|
||||
if (!_maps.TryGetTileRef(gridUid, grid, tilePos, out var tileRef) || tileRef.Tile.IsEmpty)
|
||||
{
|
||||
_maps.SetTile(gridUid, grid, tilePos, _tileDefManager.GetVariantTile(FallbackTileId, _random));
|
||||
_maps.SetTile(gridUid, grid, tilePos, _tile.GetVariantTile((ContentTileDefinition) _tileDefManager[FallbackTileId], _random.GetRandom()));
|
||||
}
|
||||
|
||||
var result = _decals.TryAddDecal(
|
||||
|
||||
@@ -31,6 +31,7 @@ public sealed partial class DungeonSystem : SharedDungeonSystem
|
||||
[Dependency] private readonly AnchorableSystem _anchorable = default!;
|
||||
[Dependency] private readonly DecalSystem _decals = default!;
|
||||
[Dependency] private readonly EntityLookupSystem _lookup = default!;
|
||||
[Dependency] private readonly TileSystem _tile = default!;
|
||||
[Dependency] private readonly MapLoaderSystem _loader = default!;
|
||||
[Dependency] private readonly SharedMapSystem _maps = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
@@ -198,6 +199,7 @@ public sealed partial class DungeonSystem : SharedDungeonSystem
|
||||
_decals,
|
||||
this,
|
||||
_lookup,
|
||||
_tile,
|
||||
_transform,
|
||||
gen,
|
||||
grid,
|
||||
@@ -229,6 +231,7 @@ public sealed partial class DungeonSystem : SharedDungeonSystem
|
||||
_decals,
|
||||
this,
|
||||
_lookup,
|
||||
_tile,
|
||||
_transform,
|
||||
gen,
|
||||
grid,
|
||||
|
||||
Reference in New Issue
Block a user