Make procgen use weighted variants (#24669)
This commit is contained in:
@@ -25,12 +25,29 @@ public sealed class TileSystem : EntitySystem
|
||||
/// Returns a weighted pick of a tile variant.
|
||||
/// </summary>
|
||||
public byte PickVariant(ContentTileDefinition tile)
|
||||
{
|
||||
return PickVariant(tile, _robustRandom.GetRandom());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a weighted pick of a tile variant.
|
||||
/// </summary>
|
||||
public byte PickVariant(ContentTileDefinition tile, int seed)
|
||||
{
|
||||
var rand = new System.Random(seed);
|
||||
return PickVariant(tile, rand);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a weighted pick of a tile variant.
|
||||
/// </summary>
|
||||
public byte PickVariant(ContentTileDefinition tile, System.Random random)
|
||||
{
|
||||
var variants = tile.PlacementVariants;
|
||||
|
||||
var sum = variants.Sum();
|
||||
var accumulated = 0f;
|
||||
var rand = _robustRandom.NextFloat() * sum;
|
||||
var rand = random.NextFloat() * sum;
|
||||
|
||||
for (byte i = 0; i < variants.Length; ++i)
|
||||
{
|
||||
@@ -44,6 +61,23 @@ public sealed class TileSystem : EntitySystem
|
||||
throw new InvalidOperationException($"Invalid weighted variantize tile pick for {tile.ID}!");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a tile with a weighted random variant.
|
||||
/// </summary>
|
||||
public Tile GetVariantTile(ContentTileDefinition tile, System.Random random)
|
||||
{
|
||||
return new Tile(tile.TileId, variant: PickVariant(tile, random));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a tile with a weighted random variant.
|
||||
/// </summary>
|
||||
public Tile GetVariantTile(ContentTileDefinition tile, int seed)
|
||||
{
|
||||
var rand = new System.Random(seed);
|
||||
return new Tile(tile.TileId, variant: PickVariant(tile, rand));
|
||||
}
|
||||
|
||||
public bool PryTile(Vector2i indices, EntityUid gridId)
|
||||
{
|
||||
var grid = Comp<MapGridComponent>(gridId);
|
||||
|
||||
Reference in New Issue
Block a user