Support weighted tile variantize (#18940)

* Support weighted tile variantize

* Remove unused using

* Use an array
This commit is contained in:
Vordenburg
2023-08-13 03:25:54 -04:00
committed by GitHub
parent ade5cace12
commit 1df650871d
8 changed files with 302 additions and 67 deletions

View File

@@ -1,4 +1,4 @@
using Content.Shared.Administration;
using Content.Shared.Administration;
using Content.Shared.Maps;
using Robust.Shared.Console;
using Robust.Shared.Map;
@@ -42,7 +42,7 @@ public sealed class VariantizeCommand : IConsoleCommand
foreach (var tile in gridComp.GetAllTiles())
{
var def = tile.GetContentTileDefinition();
var newTile = new Tile(tile.Tile.TypeId, tile.Tile.Flags, random.Pick(def.PlacementVariants));
var newTile = new Tile(tile.Tile.TypeId, tile.Tile.Flags, def.PickVariant(random));
gridComp.SetTile(tile.GridIndices, newTile);
}
}

View File

@@ -1,4 +1,4 @@
using System.Numerics;
using System.Numerics;
using Content.Server.Decals;
using Content.Shared.Coordinates.Helpers;
using Content.Shared.Decals;
@@ -26,7 +26,7 @@ public sealed class TileSystem : EntitySystem
var tileRef = grid.GetTileRef(indices);
return PryTile(tileRef);
}
public bool PryTile(TileRef tileRef)
{
return PryTile(tileRef, false);
@@ -74,7 +74,7 @@ public sealed class TileSystem : EntitySystem
if (!Resolve(grid, ref component))
return false;
var variant = _robustRandom.Pick(replacementTile.PlacementVariants);
var variant = replacementTile.PickVariant();
var decals = _decal.GetDecalsInRange(tileref.GridUid, _turf.GetTileCenter(tileref).Position, 0.5f);
foreach (var (id, _) in decals)
{

View File

@@ -1,4 +1,4 @@
using System.Linq;
using System.Linq;
using Content.Server.Worldgen.Components.Debris;
using Content.Shared.Maps;
using Robust.Shared.Map;
@@ -56,7 +56,7 @@ public sealed class BlobFloorPlanBuilderSystem : BaseWorldSystem
spawnPoints.Add(west);
var tileDef = _tileDefinition[_random.Pick(comp.FloorTileset)];
taken.Add(point, new Tile(tileDef.TileId, 0, _random.Pick(((ContentTileDefinition)tileDef).PlacementVariants)));
taken.Add(point, new Tile(tileDef.TileId, 0, ((ContentTileDefinition)tileDef).PickVariant(_random)));
}
PlaceTile(Vector2i.Zero);