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;
@@ -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);

View File

@@ -1,5 +1,4 @@
using Content.Shared.Atmos;
using JetBrains.Annotations;
using Robust.Shared.Audio;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
@@ -62,7 +61,7 @@ namespace Content.Shared.Maps
/// <summary>
/// This controls what variants the `variantize` command is allowed to use.
/// </summary>
[DataField("placementVariants")] public byte[] PlacementVariants { get; set; } = new byte[1] { 0 };
[DataField("placementVariants")] public float[] PlacementVariants { get; set; } = new [] { 1f };
[DataField("thermalConductivity")] public float ThermalConductivity = 0.04f;

View File

@@ -89,6 +89,30 @@ namespace Content.Shared.Maps
return tile.Tile.IsSpace(tileDefinitionManager);
}
/// <summary>
/// Returns a weighted pick of a tile variant.
/// </summary>
public static byte PickVariant(this ContentTileDefinition tile, IRobustRandom? random = null)
{
IoCManager.Resolve(ref random);
var variants = tile.PlacementVariants;
var sum = variants.Sum();
var accumulated = 0f;
var rand = random.NextFloat() * sum;
for (byte i = 0; i < variants.Length; ++i)
{
accumulated += variants[i];
if (accumulated >= rand)
return i;
}
// Shouldn't happen
throw new InvalidOperationException($"Invalid weighted variantize tile pick for {tile.ID}!");
}
/// <summary>
/// Helper that returns all entities in a turf.
/// </summary>

View File

@@ -177,7 +177,7 @@ public sealed class FloorTileSystem : EntitySystem
{
_adminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(user):actor} placed tile {_tileDefinitionManager[tileId].Name} at {ToPrettyString(gridUid)} {location}");
var variant = _random.Pick(((ContentTileDefinition) _tileDefinitionManager[tileId]).PlacementVariants);
var variant = ((ContentTileDefinition) _tileDefinitionManager[tileId]).PickVariant();
mapGrid.SetTile(location.Offset(new Vector2(offset, offset)), new Tile(tileId, 0, variant));
_audio.PlayPredicted(placeSound, location, user, AudioHelpers.WithVariation(0.125f, _random));

View File

@@ -3,7 +3,11 @@
name: tiles-steel-floor
sprite: /Textures/Tiles/steel.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -17,7 +21,11 @@
name: tiles-steel-floor-checker-light
sprite: /Textures/Tiles/cafeteria.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -31,7 +39,11 @@
name: tiles-steel-floor-checker-dark
sprite: /Textures/Tiles/checker_dark.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -45,7 +57,11 @@
name: tiles-steel-floor-mini
sprite: /Textures/Tiles/steel_mini.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -59,7 +75,11 @@
name: tiles-steel-floor-pavement
sprite: /Textures/Tiles/steel_pavement.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -73,7 +93,11 @@
name: tiles-steel-floor-diagonal
sprite: /Textures/Tiles/steel_diagonal.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -86,8 +110,6 @@
id: FloorSteelOffset
name: tiles-steel-floor-offset
sprite: /Textures/Tiles/steel_offset.png
variants: 1
placementVariants: [0]
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -101,7 +123,11 @@
name: tiles-steel-floor-mono
sprite: /Textures/Tiles/steel_mono.png
variants: 4
placementVariants: [0,1,2,3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -115,7 +141,11 @@
name: tiles-steel-floor-pavement-vertical
sprite: /Textures/Tiles/steel_pavement_vertical.png
variants: 4
placementVariants: [0,1,2,3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -129,7 +159,11 @@
name: tiles-steel-floor-herringbone
sprite: /Textures/Tiles/steel_herringbone.png
variants: 4
placementVariants: [0,1,2,3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -143,7 +177,11 @@
name: tiles-steel-floor-diagonal-mini
sprite: /Textures/Tiles/steel_diagonal_mini.png
variants: 4
placementVariants: [0,1,2,3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -157,7 +195,11 @@
name: tiles-plastic-floor
sprite: /Textures/Tiles/plastic.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -171,7 +213,11 @@
name: tiles-wood
sprite: /Textures/Tiles/wood.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -187,7 +233,11 @@
name: tiles-white-floor
sprite: /Textures/Tiles/white.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -201,7 +251,11 @@
name: tiles-white-floor-mini
sprite: /Textures/Tiles/white_mini.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -215,7 +269,11 @@
name: tiles-white-floor-pavement
sprite: /Textures/Tiles/white_pavement.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -229,7 +287,11 @@
name: tiles-white-floor-diagonal
sprite: /Textures/Tiles/white_diagonal.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -242,8 +304,6 @@
id: FloorWhiteOffset
name: tiles-white-floor-offset
sprite: /Textures/Tiles/white_offset.png
variants: 1
placementVariants: [0]
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -257,7 +317,11 @@
name: tiles-white-floor-mono
sprite: /Textures/Tiles/white_mono.png
variants: 4
placementVariants: [0,1,2,3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -271,7 +335,11 @@
name: tiles-white-floor-pavement-vertical
sprite: /Textures/Tiles/white_pavement_vertical.png
variants: 4
placementVariants: [0,1,2,3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -285,7 +353,11 @@
name: tiles-white-floor-herringbone
sprite: /Textures/Tiles/white_herringbone.png
variants: 4
placementVariants: [0,1,2,3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -299,7 +371,11 @@
name: tiles-white-floor-diagonal-mini
sprite: /Textures/Tiles/white_diagonal_mini.png
variants: 4
placementVariants: [0,1,2,3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -313,7 +389,11 @@
name: tiles-plastic-white-floor
sprite: /Textures/Tiles/white_plastic.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -327,7 +407,11 @@
name: tiles-dark-floor
sprite: /Textures/Tiles/dark.png
variants: 4
placementVariants: [ 0, 1, 2, 3 ]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -341,7 +425,11 @@
name: tiles-dark-floor-mini
sprite: /Textures/Tiles/dark_mini.png
variants: 4
placementVariants: [ 0, 1, 2, 3 ]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -355,7 +443,11 @@
name: tiles-dark-floor-pavement
sprite: /Textures/Tiles/dark_pavement.png
variants: 4
placementVariants: [ 0, 1, 2, 3 ]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -369,7 +461,11 @@
name: tiles-dark-floor-diagonal
sprite: /Textures/Tiles/dark_diagonal.png
variants: 4
placementVariants: [ 0, 1, 2, 3 ]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -382,8 +478,6 @@
id: FloorDarkOffset
name: tiles-dark-floor-offset
sprite: /Textures/Tiles/dark_offset.png
variants: 1
placementVariants: [0]
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -397,7 +491,11 @@
name: tiles-dark-floor-mono
sprite: /Textures/Tiles/dark_mono.png
variants: 4
placementVariants: [0,1,2,3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -411,7 +509,11 @@
name: tiles-dark-floor-pavement-vertical
sprite: /Textures/Tiles/dark_pavement_vertical.png
variants: 4
placementVariants: [0,1,2,3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -425,7 +527,11 @@
name: tiles-dark-floor-herringbone
sprite: /Textures/Tiles/dark_herringbone.png
variants: 4
placementVariants: [0,1,2,3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -439,7 +545,11 @@
name: tiles-dark-floor-diagonal-mini
sprite: /Textures/Tiles/dark_diagonal_mini.png
variants: 4
placementVariants: [0,1,2,3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -453,7 +563,11 @@
name: tiles-plastic-dark-floor
sprite: /Textures/Tiles/dark_plastic.png
variants: 4
placementVariants: [ 0, 1, 2, 3 ]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -612,7 +726,11 @@
name: tiles-bar-floor
sprite: /Textures/Tiles/bar.png
variants: 4
placementVariants: [ 0, 1, 2, 3 ]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -765,7 +883,11 @@
name: tiles-boxing-ring-floor
sprite: /Textures/Tiles/boxing.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -780,7 +902,11 @@
name: tiles-gym-floor
sprite: /Textures/Tiles/gym.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -882,7 +1008,11 @@
name: tiles-glass-floor
sprite: /Textures/Tiles/glass.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -896,7 +1026,11 @@
name: tiles-reinforced-glass-floor
sprite: /Textures/Tiles/rglass.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -962,7 +1096,11 @@
name: tiles-dark-grass-floor
sprite: /Textures/Tiles/grassdark.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: FloorDirt
isSubfloor: true
canCrowbar: false
@@ -976,7 +1114,11 @@
name: tiles-light-grass-floor
sprite: /Textures/Tiles/grasslight.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: FloorDirt
isSubfloor: true
canCrowbar: false
@@ -990,7 +1132,11 @@
name: tiles-dirt-floor
sprite: /Textures/Tiles/dirt.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: true
canCrowbar: false
@@ -1074,7 +1220,10 @@
name: tiles-asteroid-coarse-sand
sprite: /Textures/Tiles/Asteroid/asteroid_coarse_sand.png
variants: 3
placementVariants: [ 0, 1, 2 ]
placementVariants:
- 1.0
- 1.0
- 1.0
baseTurf: Space
isSubfloor: true
canCrowbar: false
@@ -1161,7 +1310,14 @@
name: tiles-cave
sprite: /Textures/Tiles/cave.png
variants: 7
placementVariants: [0, 1, 2, 3, 4, 5, 6]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Space
isSubfloor: true
canCrowbar: false
@@ -1174,7 +1330,15 @@
name: tiles-cave-drought
sprite: /Textures/Tiles/cavedrought.png
variants: 8
placementVariants: [0, 1, 2, 3, 4, 5, 6, 7]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Space
isSubfloor: true
canCrowbar: false
@@ -1187,7 +1351,11 @@
name: tiles-flesh-floor
sprite: /Textures/Tiles/meat.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -1214,7 +1382,11 @@
name: tiles-techmaint3-floor
sprite: /Textures/Tiles/grating_maint.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -1228,7 +1400,11 @@
name: tiles-wood2
sprite: /Textures/Tiles/wood_tile.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true
@@ -1244,7 +1420,14 @@
name: tiles-wood3
sprite: /Textures/Tiles/wood_broken.png
variants: 7
placementVariants: [0, 1, 2, 3, 4, 5, 6]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
canCrowbar: true

View File

@@ -16,7 +16,13 @@
name: tiles-desert-floor
sprite: /Textures/Tiles/Planet/Desert/desert.png
variants: 6
placementVariants: [0, 1, 2, 3, 4, 5]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
isSubfloor: true
canCrowbar: false
footstepSounds:
@@ -30,7 +36,13 @@
name: tiles-low-desert-floor
sprite: /Textures/Tiles/Planet/Desert/low_desert.png
variants: 6
placementVariants: [0, 1, 2, 3, 4, 5]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
isSubfloor: true
canCrowbar: false
footstepSounds:
@@ -45,7 +57,11 @@
name: tiles-grass-planet-floor
sprite: /Textures/Tiles/Planet/Grass/grass.png
variants: 4
placementVariants: [0, 1, 2, 3]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
edgeSprites:
SouthEast: /Textures/Tiles/Planet/Grass/single_edge.png
NorthEast: /Textures/Tiles/Planet/Grass/single_edge.png
@@ -84,7 +100,20 @@
name: tiles-snow-floor
sprite: /Textures/Tiles/Planet/Snow/snow.png
variants: 13
placementVariants: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
- 1.0
#cornerSprites:
# - /Textures/Tiles/Planet/Snow/single_edge.png
#cardinalSprites: