Demote entity blueprints to construction

This commit is contained in:
Meta Vens 2026-06-14 20:40:13 +01:00
commit 7b605f049c
17 changed files with 73 additions and 96 deletions

View file

@ -38,7 +38,7 @@ public class Faction : INamedEntry
[Inspectable]
public int InfluenceDistance = 4;
[RangedFloat(0, 1)]
[InspectableRangedFloat(0, 1)]
public Dictionary<Guid, float> Allegiance = new Dictionary<Guid, float>();
[InspectableSoundBank]

View file

@ -4,20 +4,20 @@ using System.Collections.Generic;
using System.Linq;
using Unity.Mathematics;
public static class RuntimeEntityBlueprintProjector
public static class EntityConstructionBlueprintProjector
{
public static RuntimeEntityBlueprint CaptureBlueprint(Entity entity)
public static EntityConstructionBlueprint CaptureBlueprint(Entity entity)
{
RuntimeEntityBlueprint blueprint;
EntityConstructionBlueprint blueprint;
if (entity is OrbitalEntity orbital)
blueprint = new RuntimeOrbitalEntityBlueprint
blueprint = new OrbitalEntityConstructionBlueprint
{
Orbit = orbital.OrbitId,
SecurityLevel = orbital.SecurityLevel,
SecurityRadius = orbital.SecurityRadius
};
else if (entity is Ship ship)
blueprint = new RuntimeShipBlueprint
blueprint = new ShipConstructionBlueprint
{
Position = ship.Position,
Direction = ship.Direction,
@ -41,19 +41,19 @@ public static class RuntimeEntityBlueprintProjector
return blueprint;
}
public static Entity InstantiateFromBlueprint(ItemManager itemManager, Zone zone, RuntimeEntityBlueprint blueprint, bool instantiate = false)
public static Entity InstantiateFromBlueprint(ItemManager itemManager, Zone zone, EntityConstructionBlueprint blueprint, bool instantiate = false)
{
blueprint.Settings ??= itemManager.GameplaySettings.DefaultEntitySettings.Copy();
return blueprint switch
{
RuntimeShipBlueprint shipBlueprint => InstantiateFromBlueprint(itemManager, zone, shipBlueprint, instantiate),
RuntimeOrbitalEntityBlueprint orbitalBlueprint => InstantiateFromBlueprint(itemManager, zone, orbitalBlueprint, instantiate),
ShipConstructionBlueprint shipBlueprint => InstantiateFromBlueprint(itemManager, zone, shipBlueprint, instantiate),
OrbitalEntityConstructionBlueprint orbitalBlueprint => InstantiateFromBlueprint(itemManager, zone, orbitalBlueprint, instantiate),
_ => null
};
}
private static Ship InstantiateFromBlueprint(ItemManager itemManager, Zone zone, RuntimeShipBlueprint blueprint, bool instantiate = false)
private static Ship InstantiateFromBlueprint(ItemManager itemManager, Zone zone, ShipConstructionBlueprint blueprint, bool instantiate = false)
{
var entity = new Ship(itemManager, zone, instantiate ? (EquippableItem) itemManager.Instantiate(blueprint.Hull) : blueprint.Hull, blueprint.Settings);
@ -64,7 +64,7 @@ public static class RuntimeEntityBlueprintProjector
return entity;
}
private static OrbitalEntity InstantiateFromBlueprint(ItemManager itemManager, Zone zone, RuntimeOrbitalEntityBlueprint blueprint, bool instantiate = false)
private static OrbitalEntity InstantiateFromBlueprint(ItemManager itemManager, Zone zone, OrbitalEntityConstructionBlueprint blueprint, bool instantiate = false)
{
var entity = new OrbitalEntity(itemManager, zone, instantiate ? (EquippableItem) itemManager.Instantiate(blueprint.Hull) : blueprint.Hull, blueprint.Orbit, blueprint.Settings);
Restore(itemManager, zone, blueprint, entity, instantiate);
@ -74,7 +74,7 @@ public static class RuntimeEntityBlueprintProjector
return entity;
}
private static void Restore(ItemManager itemManager, Zone zone, RuntimeEntityBlueprint blueprint, Entity entity, bool instantiate = false)
private static void Restore(ItemManager itemManager, Zone zone, EntityConstructionBlueprint blueprint, Entity entity, bool instantiate = false)
{
entity.Name = blueprint.Name;
entity.Faction = zone?.Galaxy?.ResolveFaction(blueprint.Faction);
@ -112,14 +112,14 @@ public static class RuntimeEntityBlueprintProjector
}
}
public class RuntimeShipBlueprint : RuntimeEntityBlueprint
public class ShipConstructionBlueprint : EntityConstructionBlueprint
{
public float3 Position;
public float2 Direction;
public bool IsPlayerShip;
}
public class RuntimeOrbitalEntityBlueprint : RuntimeEntityBlueprint
public class OrbitalEntityConstructionBlueprint : EntityConstructionBlueprint
{
public Guid Orbit;
public int Story = -1;
@ -127,7 +127,7 @@ public class RuntimeOrbitalEntityBlueprint : RuntimeEntityBlueprint
public float SecurityRadius;
}
public abstract class RuntimeEntityBlueprint
public abstract class EntityConstructionBlueprint
{
public string Name;
public EquippableItem Hull;
@ -137,7 +137,7 @@ public abstract class RuntimeEntityBlueprint
public int[] DockingBayAssignments;
public (int2 position, ItemInstance item)[][] CargoContents;
public (int2 position, ItemInstance item)[][] DockingBayContents;
public RuntimeEntityBlueprint[] Children;
public EntityConstructionBlueprint[] Children;
public EntitySettings Settings;
public Guid Faction;
public int[][] WeaponGroups;

View file

@ -55,7 +55,7 @@ public class LoadoutGenerator
// PriceExponent = priceExponent;
// }
public RuntimeEntityBlueprint GenerateShipLoadout(Predicate<AetheriaRuntimeCatalogItem> hullFilter = null)
public EntityConstructionBlueprint GenerateShipLoadout(Predicate<AetheriaRuntimeCatalogItem> hullFilter = null)
{
var hullRow = RandomHull(HullType.Ship, hullFilter);
if(hullRow==null)
@ -69,10 +69,10 @@ public class LoadoutGenerator
var entity = new Ship(ItemManager, null, hull, ItemManager.GameplaySettings.DefaultEntitySettings);
entity.Faction = Faction;
OutfitEntity(entity);
return RuntimeEntityBlueprintProjector.CaptureBlueprint(entity);
return EntityConstructionBlueprintProjector.CaptureBlueprint(entity);
}
public RuntimeOrbitalEntityBlueprint GenerateTurretLoadout()
public OrbitalEntityConstructionBlueprint GenerateTurretLoadout()
{
var hullRow = RandomHull(HullType.Turret);
if(hullRow==null)
@ -84,10 +84,10 @@ public class LoadoutGenerator
var entity = new OrbitalEntity(ItemManager, null, hull, Guid.Empty, ItemManager.GameplaySettings.DefaultEntitySettings);
entity.Faction = Faction;
OutfitEntity(entity);
return RuntimeEntityBlueprintProjector.CaptureBlueprint(entity) as RuntimeOrbitalEntityBlueprint;
return EntityConstructionBlueprintProjector.CaptureBlueprint(entity) as OrbitalEntityConstructionBlueprint;
}
public RuntimeOrbitalEntityBlueprint GenerateStationLoadout()
public OrbitalEntityConstructionBlueprint GenerateStationLoadout()
{
var hullRow = RandomHull(HullType.Station);
if(hullRow==null)
@ -130,7 +130,7 @@ public class LoadoutGenerator
entity.CanTow = hullRow.HullCanTow;
return RuntimeEntityBlueprintProjector.CaptureBlueprint(entity) as RuntimeOrbitalEntityBlueprint;
return EntityConstructionBlueprintProjector.CaptureBlueprint(entity) as OrbitalEntityConstructionBlueprint;
}
public AetheriaRuntimeCatalogItem RandomHull(HullType type, Predicate<AetheriaRuntimeCatalogItem> hullFilter = null)

View file

@ -79,7 +79,7 @@ public class Zone
foreach (var entityBlueprint in blueprint.Entities)
{
var entity = RuntimeEntityBlueprintProjector.InstantiateFromBlueprint(_itemManager, this, entityBlueprint);
var entity = EntityConstructionBlueprintProjector.InstantiateFromBlueprint(_itemManager, this, entityBlueprint);
Entities.Add(entity);
entity.Activate();
if (entity is Ship {IsPlayerShip: false} ship)
@ -102,11 +102,6 @@ public class Zone
return agent;
}
public void AddOrbit(OrbitData orbit)
{
Orbits.Add(orbit.ID, new Orbit(Settings, orbit));
}
public void Update(float deltaTime)
{
_time += deltaTime;

View file

@ -15,7 +15,7 @@ public class ZoneConstructionBlueprint
{
public List<BodyData> Planets = new List<BodyData>();
public List<OrbitData> Orbits = new List<OrbitData>();
public List<RuntimeEntityBlueprint> Entities = new List<RuntimeEntityBlueprint>();
public List<EntityConstructionBlueprint> Entities = new List<EntityConstructionBlueprint>();
public float Radius = 2000;
public float Mass = 10000;
public double Time;