determinism-ledger: every ItemManager states its seed; scatter on the zone's dice

- ItemManager(uint seed, ...) refuses seed 0 and seeds Random from it.
- RunStart.ItemSeed(galaxy, step) is public (formula unchanged), refuses a
  zero result; named steps ArenaStep, StageStep, ContinueStep and NoRunSeed.
- Continue seeds the item stream from the saved run's seed (ContinueStep);
  a scene with no galaxy uses NoRunSeed.
- Zone's unpack scatter draws SimulationDice.For(CombatSeed, ScatterStream,
  1-based pack ordinal), never the item stream.
- Loadout's scratch manager and AetherDb's catalog command take fixed seeds;
  every test and Editor construction gains 1u (mechanical rewrite).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
soul 2026-10-21 19:01:41 +02:00
commit cc0c164574
85 changed files with 200 additions and 160 deletions

View file

@ -122,7 +122,7 @@ namespace Aetheria.EditorTools
var cache = AetheriaStores.Open(Path.Combine(_work, "belts.cc"), Path.Combine(_work, "belts-run.cc"), catalogWritable: true); var cache = AetheriaStores.Open(Path.Combine(_work, "belts.cc"), Path.Combine(_work, "belts-run.cc"), catalogWritable: true);
cache.Upsert(new VerseGrammar { Revision = 1 }); cache.Upsert(new VerseGrammar { Revision = 1 });
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var items = new ItemManager(cache, new ProvenanceLedger(), settings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, _ => { });
CultRecordKey Orbit(CultRecordKey parent, float distance, float phase, float2 fixedPosition = default) CultRecordKey Orbit(CultRecordKey parent, float distance, float phase, float2 fixedPosition = default)
{ {

View file

@ -62,7 +62,7 @@ public static class CapabilityPresentationSmoke
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 8; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 8; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Smoke", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Smoke", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Smoke Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Smoke Hull"));
var ship = new Ship(items, zone, new EquippableItem { Data = hullRef, Durability = 1000, Lot = 1 }, new EntitySettings()); var ship = new Ship(items, zone, new EquippableItem { Data = hullRef, Durability = 1000, Lot = 1 }, new EntitySettings());

View file

@ -115,7 +115,7 @@ namespace Aetheria.EditorTools
cache.Upsert(new SimpleCommodityData { Name = "Wiring Ore", Shape = oneCell, MaxStack = 100 }); cache.Upsert(new SimpleCommodityData { Name = "Wiring Ore", Shape = oneCell, MaxStack = 100 });
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
// A sun and a planet on a moving rail round it, both near the bodies below: the field under a floater changes with the // A sun and a planet on a moving rail round it, both near the bodies below: the field under a floater changes with the
// drawn time, so a presenter that samples it at the step's time, drops it, or reads lead 0 for the height draws a different y. // drawn time, so a presenter that samples it at the step's time, drops it, or reads lead 0 for the height draws a different y.

View file

@ -124,7 +124,7 @@ public static class FloatingItemsDrawnSmoke
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 8; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 8; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), null, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), null, null);
EquippableItem Make(string name, int lot) => new EquippableItem EquippableItem Make(string name, int lot) => new EquippableItem
{ {

View file

@ -106,7 +106,7 @@ namespace Aetheria.EditorTools
var cache = AetheriaStores.Open(Path.Combine(work, Guid.NewGuid().ToString("N") + ".cc"), catalogWritable: true); var cache = AetheriaStores.Open(Path.Combine(work, Guid.NewGuid().ToString("N") + ".cc"), catalogWritable: true);
cache.Upsert(new VerseGrammar { Revision = 1 }); cache.Upsert(new VerseGrammar { Revision = 1 });
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var items = new ItemManager(cache, new ProvenanceLedger(), settings.GameplaySettings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings.GameplaySettings, _ => { });
return new Zone(items, new PlanetSettings { Flow = flow }, new ZonePack { Time = time }, new GalaxyZone { Name = "Parity", Owner = null }, null); return new Zone(items, new PlanetSettings { Flow = flow }, new ZonePack { Time = time }, new GalaxyZone { Name = "Parity", Owner = null }, null);
} }

View file

@ -154,7 +154,7 @@ namespace Aetheria.EditorTools
var cache = AetheriaStores.Open(Path.Combine(work, "catalog.cc"), Path.Combine(work, "run.cc"), catalogWritable: true); var cache = AetheriaStores.Open(Path.Combine(work, "catalog.cc"), Path.Combine(work, "run.cc"), catalogWritable: true);
cache.Upsert(new VerseGrammar { Revision = 1 }); cache.Upsert(new VerseGrammar { Revision = 1 });
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var items = new ItemManager(cache, new ProvenanceLedger(), settings.GameplaySettings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings.GameplaySettings, _ => { });
var positions = new List<Vector2> { new Vector2(-130f, 85f), new Vector2(610f, -240f), new Vector2(670f, -270f), new Vector2(1700f, 300f) }; var positions = new List<Vector2> { new Vector2(-130f, 85f), new Vector2(610f, -240f), new Vector2(670f, -270f), new Vector2(1700f, 300f) };
var masses = new List<float> { 14152f, 273.9f, 29.2f, 0f }; var masses = new List<float> { 14152f, 273.9f, 29.2f, 0f };
var parents = new List<int> { -1, 0, 1, -1 }; var parents = new List<int> { -1, 0, 1, -1 };

View file

@ -52,7 +52,7 @@ public static class MapBeltPerf
Planets = { new CultRecordRef<BodyData>(sunKey), new CultRecordRef<BodyData>(beltKey) }, Planets = { new CultRecordRef<BodyData>(sunKey), new CultRecordRef<BodyData>(beltKey) },
Radius = 5000f, Mass = 10000f, Time = 0 Radius = 5000f, Mass = 10000f, Time = 0
}; };
var items = new ItemManager(cache, new ProvenanceLedger(), settings.GameplaySettings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings.GameplaySettings, _ => { });
var zone = new Zone(items, new PlanetSettings var zone = new Zone(items, new PlanetSettings
{ {
BodyRadius = new ExponentialCurve(), WellStrength = new ExponentialCurve { Multiplier = 1f, Exponent = 1f }, BodyRadius = new ExponentialCurve(), WellStrength = new ExponentialCurve { Multiplier = 1f, Exponent = 1f },

View file

@ -115,7 +115,7 @@ public static class MapPresenterSmoke
}; };
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 8; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 8; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings.GameplaySettings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings.GameplaySettings, _ => { });
var zone = new Zone(items, planetSettings, pack, new GalaxyZone { Name = "Smoke", Owner = null }, null); var zone = new Zone(items, planetSettings, pack, new GalaxyZone { Name = "Smoke", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Smoke Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Smoke Hull"));
var ship = new Ship(items, zone, new EquippableItem { Data = hullRef, Durability = 1000, Lot = 1 }, new EntitySettings()); var ship = new Ship(items, zone, new EquippableItem { Data = hullRef, Durability = 1000, Lot = 1 }, new EntitySettings());

View file

@ -294,7 +294,11 @@ public class ActionGameManager : MonoBehaviour
ConsoleController.MessageReceiver = this; ConsoleController.MessageReceiver = this;
// A new run mints into an empty ledger; the saved run's stays in the store until the new run has started. // A new run mints into an empty ledger; the saved run's stays in the store until the new run has started.
ItemManager = new ItemManager(CultCache, PendingScenario != null ? new ProvenanceLedger() : RunSave.Lots(CultCache), // A new run is reseeded by RunStart; Continue's item draws come from the saved run's seed.
ItemManager = new ItemManager(
CurrentGalaxy == null ? RunStart.NoRunSeed
: RunStart.ItemSeed(CurrentGalaxy, PendingScenario != null ? RunStart.ArenaStep : RunStart.ContinueStep),
CultCache, PendingScenario != null ? new ProvenanceLedger() : RunSave.Lots(CultCache),
Settings.GameplaySettings, Debug.Log); Settings.GameplaySettings, Debug.Log);
ZoneRenderer.ItemManager = ItemManager; ZoneRenderer.ItemManager = ItemManager;

View file

@ -17,6 +17,8 @@ using float4 = CultMath.float4;
public class ItemManager public class ItemManager
{ {
// The item stream: each lot's quality and each generated fit. Seeded by whoever constructs the manager and reseeded
// by RunStart at each step of a new run, never by the clock.
public Random Random; public Random Random;
private Action<string> _logger; private Action<string> _logger;
@ -25,8 +27,10 @@ public class ItemManager
public ProvenanceLedger Lots { get; } public ProvenanceLedger Lots { get; }
public GameplaySettings GameplaySettings { get; } public GameplaySettings GameplaySettings { get; }
public ItemManager(CultCache itemData, ProvenanceLedger lots, GameplaySettings settings, Action<string> logger) public ItemManager(uint seed, CultCache itemData, ProvenanceLedger lots, GameplaySettings settings, Action<string> logger)
{ {
if (seed == 0) throw new ArgumentOutOfRangeException(nameof(seed), "an item stream needs a nonzero seed");
Random = new Random(seed);
ItemData = itemData; ItemData = itemData;
Lots = lots; Lots = lots;
GameplaySettings = settings; GameplaySettings = settings;

View file

@ -127,6 +127,9 @@ public static class Loadouts
// The quality a design no manufacturer makes is built at: the console give's. // The quality a design no manufacturer makes is built at: the console give's.
public const float UnbrandedQuality = .95f; public const float UnbrandedQuality = .95f;
// The seed of the scratch item manager a fit is tried on. It draws nothing, so any nonzero constant does.
private const uint ScratchSeed = 1u;
// All-or-nothing: returns an entity only when every design resolved and fitted, the loadout has at most // All-or-nothing: returns an entity only when every design resolved and fitted, the loadout has at most
// WeaponGroupCount weapon groups, and every group index names a weapon slot. Every failure of a stage is listed; on any // WeaponGroupCount weapon groups, and every group index names a weapon slot. Every failure of a stage is listed; on any
// failure nothing is returned and the zone and cache are unchanged. The stages run in the order that puts refusal // failure nothing is returned and the zone and cache are unchanged. The stages run in the order that puts refusal
@ -166,7 +169,7 @@ public static class Loadouts
// The cells fit or they do not whatever brand a design-only slot takes: the shape is the design's. Tried on its own // The cells fit or they do not whatever brand a design-only slot takes: the shape is the design's. Tried on its own
// item manager, so nothing is minted into the live ledger and nothing is drawn. // item manager, so nothing is minted into the live ledger and nothing is drawn.
var scratch = new ItemManager(cache, new ProvenanceLedger(), itemManager.GameplaySettings, _ => { }); var scratch = new ItemManager(ScratchSeed, cache, new ProvenanceLedger(), itemManager.GameplaySettings, _ => { });
Assemble(scratch, null, hullData, loadout, Unbranded(scratch, hullSettled), slotsSettled.Select(settled => Unbranded(scratch, settled)).ToArray(), failures, out _); Assemble(scratch, null, hullData, loadout, Unbranded(scratch, hullSettled), slotsSettled.Select(settled => Unbranded(scratch, settled)).ToArray(), failures, out _);
if (failures.Count > reported) return null; if (failures.Count > reported) return null;

View file

@ -25,7 +25,7 @@ public static class RunStart
public static ZonePack GenerateArena(ItemManager itemManager, ZoneGenerationSettings zoneSettings, PlanetSettings planetSettings, Galaxy galaxy, Scenario scenario) public static ZonePack GenerateArena(ItemManager itemManager, ZoneGenerationSettings zoneSettings, PlanetSettings planetSettings, Galaxy galaxy, Scenario scenario)
{ {
SeedItems(itemManager, galaxy, 1); SeedItems(itemManager, galaxy, ArenaStep);
return galaxy.Entrance.PackedContents = ZoneGenerator.GenerateZone( return galaxy.Entrance.PackedContents = ZoneGenerator.GenerateZone(
itemManager, zoneSettings, planetSettings, galaxy, galaxy.Entrance, galaxy.IsPrelude, scenario.Ambient); itemManager, zoneSettings, planetSettings, galaxy, galaxy.Entrance, galaxy.IsPrelude, scenario.Ambient);
} }
@ -36,7 +36,7 @@ public static class RunStart
public static Staged Stage(ItemManager itemManager, Zone arena, Scenario scenario, string startingHull, public static Staged Stage(ItemManager itemManager, Zone arena, Scenario scenario, string startingHull,
TutorialGenerationSettings tutorialGenerationSettings, List<string> failures) TutorialGenerationSettings tutorialGenerationSettings, List<string> failures)
{ {
SeedItems(itemManager, arena.Galaxy, 2); SeedItems(itemManager, arena.Galaxy, StageStep);
var stage = new ScenarioStage(itemManager, arena, startingHull, tutorialGenerationSettings); var stage = new ScenarioStage(itemManager, arena, startingHull, tutorialGenerationSettings);
scenario.Stage(stage); scenario.Stage(stage);
var reported = failures.Count; var reported = failures.Count;
@ -62,5 +62,22 @@ public static class RunStart
// so a fixed seed fixes the arena's gear and the player's fit. Each step draws its own stream, so whatever runs // so a fixed seed fixes the arena's gear and the player's fit. Each step draws its own stream, so whatever runs
// between them (populating the level) cannot shift it. // between them (populating the level) cannot shift it.
private static void SeedItems(ItemManager itemManager, Galaxy galaxy, uint step) => private static void SeedItems(ItemManager itemManager, Galaxy galaxy, uint step) =>
itemManager.Random = new Random(galaxy.Seed * 0x9E3779B1u + step); itemManager.Random = new Random(ItemSeed(galaxy, step));
// The steps of a run that draw items: generating its arena, staging its scenario, and continuing a saved run.
public const uint ArenaStep = 1;
public const uint StageStep = 2;
public const uint ContinueStep = 3;
// The item seed of an ActionGameManager scene opened with no galaxy. No run is loaded, so nothing a run decides
// draws from it.
public const uint NoRunSeed = 0x5EED0001u;
// The item stream's seed for one step of a run: the run's seed and the step. Never zero, which no stream accepts.
public static uint ItemSeed(Galaxy galaxy, uint step)
{
var seed = galaxy.Seed * 0x9E3779B1u + step;
if (seed == 0) throw new InvalidOperationException($"Item seed is zero for galaxy seed {galaxy.Seed} at step {step}.");
return seed;
}
} }

View file

@ -14,6 +14,10 @@ public static class SimulationDice
// never rides ItemManager.Random, so minting items cannot change how a pilot fights. // never rides ItemManager.Random, so minting items cannot change how a pilot fights.
public const uint CombatSampleStream = 3; public const uint CombatSampleStream = 3;
public const uint PatrolStream = 4; public const uint PatrolStream = 4;
// Generation placement of an unpacked ship packed at the origin, ordinal its 1-based index in the pack, on the zone's
// seed (CombatSeed): the run seed feeds drops and mines only (ruling run-seed-drops-only), and placement never rides
// ItemManager.Random.
public const uint ScatterStream = 5;
// 9.1 (docs/fire-control-cut.md): fmix32, MurmurHash3's 32-bit finalizer -- xor-shift, multiply, // 9.1 (docs/fire-control-cut.md): fmix32, MurmurHash3's 32-bit finalizer -- xor-shift, multiply,
// xor-shift, multiply, xor-shift. Diffuses a structured seed (a zone seed XORed with a small, // xor-shift, multiply, xor-shift. Diffuses a structured seed (a zone seed XORed with a small,

View file

@ -266,11 +266,18 @@ public class Zone
foreach (var wear in pack.ChunkWear) foreach (var wear in pack.ChunkWear)
_wear[new ChunkId(wear.Field, wear.Index)] = new ChunkWear { Damage = wear.Damage, BrokenUntil = wear.BrokenUntil }; _wear[new ChunkId(wear.Field, wear.Index)] = new ChunkWear { Damage = wear.Damage, BrokenUntil = wear.BrokenUntil };
var ordinal = 0u;
foreach (var entityPack in pack.Entities) foreach (var entityPack in pack.Entities)
{ {
ordinal++;
var entity = EntitySerializer.Unpack(_itemManager, this, entityPack); var entity = EntitySerializer.Unpack(_itemManager, this, entityPack);
var ship = entity as Ship; var ship = entity as Ship;
Admit(entity, piloted: ship is {IsPlayerShip: false}); Admit(entity, piloted: ship is {IsPlayerShip: false});
// Generation placement, not admission: a ship packed at the origin is scattered across the zone, on the
// zone's own dice, so nothing drawn from the item stream can move it.
if (ship is {IsPlayerShip: false} && lengthsq(ship.Position) < 1)
ship.Position = SimulationDice.For(CombatSeed, SimulationDice.ScatterStream, ordinal)
.NextFloat3(float3(-pack.Radius * .5f), float3(pack.Radius * .5f));
} }
// TODO: Associate planets with stored entities for planetary colonies // TODO: Associate planets with stored entities for planetary colonies

View file

@ -25,7 +25,7 @@ public sealed class AssemblyFromMakerTests : IDisposable
Roles = { new ItemRole { Name = "lens" } } Roles = { new ItemRole { Name = "lens" } }
}); });
_lens = new CultRecordRef<CraftedItemData>(gear.Key); _lens = new CultRecordRef<CraftedItemData>(gear.Key);
_items = new ItemManager(_cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); _items = new ItemManager(1u, _cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
} }
public void Dispose() public void Dispose()

View file

@ -101,7 +101,7 @@ public sealed class BrownoutTests : IDisposable
private Ship BuildShip(CultCache cache, float reactorCharge) private Ship BuildShip(CultCache cache, float reactorCharge)
{ {
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff")); var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff"));
var ship = new Ship(items, zone, hull, new EntitySettings()); var ship = new Ship(items, zone, hull, new EntitySettings());

View file

@ -42,7 +42,7 @@ public sealed class ChildrenWithinReachTests : IClassFixture<ChildrenWithinReach
authored.Read<SectorBackgroundSettings>("TutorialBackgroundSettings"), authored.Read<SectorBackgroundSettings>("TutorialBackgroundSettings"),
cache, new PlayerSettings(), cache, new PlayerSettings(),
Directory.CreateDirectory(Path.Combine(dir, "Narrative")), _ => { }, null, seed); Directory.CreateDirectory(Path.Combine(dir, "Narrative")), _ => { }, null, seed);
var items = new ItemManager(cache, new ProvenanceLedger(), authored.Read<GameplaySettings>("GameplaySettings"), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), authored.Read<GameplaySettings>("GameplaySettings"), _ => { });
var planetSettings = authored.Read<PlanetSettings>("PlanetSettings"); var planetSettings = authored.Read<PlanetSettings>("PlanetSettings");
foreach (var galaxyZone in galaxy.Zones) foreach (var galaxyZone in galaxy.Zones)
{ {

View file

@ -84,7 +84,7 @@ public sealed class ConditionRatioTests : IDisposable
private Ship BuildShip(CultCache cache, float reactorCharge, out EquippedItem consumer) private Ship BuildShip(CultCache cache, float reactorCharge, out EquippedItem consumer)
{ {
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff")); var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff"));
var ship = new Ship(items, zone, hull, new EntitySettings()); var ship = new Ship(items, zone, hull, new EntitySettings());

View file

@ -147,7 +147,7 @@ public sealed class ConsumableAiTests : IDisposable
settings.UnaidedPrecision = 2f; settings.UnaidedPrecision = 2f;
settings.AgentMinHitProbability = 0f; settings.AgentMinHitProbability = 0f;
settings.BeamResolveInterval = .1f; settings.BeamResolveInterval = .1f;
var items = new ItemManager(cache, new ProvenanceLedger(), settings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, _ => { });
var maker = cache.RefOf(cache.GetByName<Faction>("Maker")); var maker = cache.RefOf(cache.GetByName<Faction>("Maker"));
EquippableItem Make<T>(string name) where T : CraftedItemData => EquippableItem Make<T>(string name) where T : CraftedItemData =>
(EquippableItem) items.CreateInstance(items.CreateLot(cache.GetByName<T>(name), maker, .5f)); (EquippableItem) items.CreateInstance(items.CreateLot(cache.GetByName<T>(name), maker, .5f));

View file

@ -153,7 +153,7 @@ public sealed class ConsumableSupplyTests : IDisposable
return new Rig return new Rig
{ {
Cache = cache, Cache = cache,
Items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }), Items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }),
Galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { }), Galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { }),
Maker = cache.GetByName<Faction>("Maker") Maker = cache.GetByName<Faction>("Maker")
}; };
@ -281,7 +281,7 @@ public sealed class ConsumableSupplyTests : IDisposable
var authored = AuthoredSettings.Load(repo); var authored = AuthoredSettings.Load(repo);
var galaxy = new Galaxy(authored.Read<TutorialGenerationSettings>("TutorialGenerationSettings"), var galaxy = new Galaxy(authored.Read<TutorialGenerationSettings>("TutorialGenerationSettings"),
authored.Read<SectorBackgroundSettings>("TutorialBackgroundSettings"), cache, new PlayerSettings(), Directory.CreateDirectory(Path.Combine(_root, "Narrative")), _ => { }, null, 1); authored.Read<SectorBackgroundSettings>("TutorialBackgroundSettings"), cache, new PlayerSettings(), Directory.CreateDirectory(Path.Combine(_root, "Narrative")), _ => { }, null, 1);
var items = new ItemManager(cache, new ProvenanceLedger(), authored.Read<GameplaySettings>("GameplaySettings"), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), authored.Read<GameplaySettings>("GameplaySettings"), _ => { });
int stations = 0, ships = 0; int stations = 0, ships = 0;
for (var i = 0; i < Seeds; i++) for (var i = 0; i < Seeds; i++)

View file

@ -76,7 +76,7 @@ public sealed class ConsumableTests : IDisposable
var otherRef = cache.Upsert(new ConsumableItemData { Name = "Flare", Duration = 1f, Shape = new Shape() }); var otherRef = cache.Upsert(new ConsumableItemData { Name = "Flare", Duration = 1f, Shape = new Shape() });
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var makerRef = cache.RefOf(cache.GetByName<Faction>("Maker")); var makerRef = cache.RefOf(cache.GetByName<Faction>("Maker"));
EquippableItem Gear(EquippableItemData design) => (EquippableItem) items.CreateInstance(items.CreateLot(design, makerRef, .5f)); EquippableItem Gear(EquippableItemData design) => (EquippableItem) items.CreateInstance(items.CreateLot(design, makerRef, .5f));
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);

View file

@ -173,7 +173,7 @@ public sealed partial class ContactRevealTests : IDisposable
_openCache = AetheriaStores.Open(Catalog, catalogWritable: true); _openCache = AetheriaStores.Open(Catalog, catalogWritable: true);
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var lot = 1000; lot < 2000; lot++) ledger.Lots[lot] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var lot = 1000; lot < 2000; lot++) ledger.Lots[lot] = new Lot { Origin = new Attributed(), Quality = 1 };
_items = new ItemManager(_openCache, ledger, new GameplaySettings _items = new ItemManager(1u, _openCache, ledger, new GameplaySettings
{ {
DefaultEntitySettings = new EntitySettings(), DefaultEntitySettings = new EntitySettings(),
Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } }, Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } },

View file

@ -116,7 +116,7 @@ public sealed class ContactTests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 50; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 50; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack { Radius = 0 }, new GalaxyZone { Name = "Contacts", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack { Radius = 0 }, new GalaxyZone { Name = "Contacts", Owner = null }, null);
var lab = new Lab { Items = items, Zone = zone }; var lab = new Lab { Items = items, Zone = zone };
zone.Contacted.Subscribe(lab.Events.Add); zone.Contacted.Subscribe(lab.Events.Add);

View file

@ -84,7 +84,7 @@ public sealed class DrawnPoseTests : IDisposable
_caches.Add(cache); _caches.Add(cache);
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
ledger.Lots[1] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[1] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, new GameplaySettings var items = new ItemManager(1u, cache, ledger, new GameplaySettings
{ {
DefaultEntitySettings = new EntitySettings(), DefaultEntitySettings = new EntitySettings(),
Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } }, Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } },

View file

@ -141,7 +141,7 @@ public sealed class FireAuthorityTests : IDisposable
ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 };
for (var i = 5; i <= 12; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 5; i <= 12; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));

View file

@ -134,7 +134,7 @@ public sealed class FireControlCut11Tests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 16; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 16; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, TestSettings(schematicCellSize), _ => { }); var items = new ItemManager(1u, cache, ledger, TestSettings(schematicCellSize), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = zoneName, Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = zoneName, Owner = null }, null);
EquippableItem Make(string name, int lot, float durability) => new EquippableItem EquippableItem Make(string name, int lot, float durability) => new EquippableItem

View file

@ -160,7 +160,7 @@ public sealed class FireControlCut123Tests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 500; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; // F8: shared-item fixtures equip more items (bars) than earlier cuts needed for (var i = 1; i <= 500; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; // F8: shared-item fixtures equip more items (bars) than earlier cuts needed
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Cut123", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Cut123", Owner = null }, null);
EquippableItem Make(string name, int lot, float durability) => new EquippableItem EquippableItem Make(string name, int lot, float durability) => new EquippableItem

View file

@ -188,7 +188,7 @@ public sealed partial class FireControlCut124Tests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 500; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 500; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Cut124", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Cut124", Owner = null }, null);
EquippableItem Make(string name, int lot, float durability) => new EquippableItem EquippableItem Make(string name, int lot, float durability) => new EquippableItem

View file

@ -192,7 +192,7 @@ public sealed class FireControlCut12Tests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 24; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 24; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
// Cut 6.1's own convention (FireControlCut6Tests.cs:62-63): every engagement shares one fixed // Cut 6.1's own convention (FireControlCut6Tests.cs:62-63): every engagement shares one fixed
// GalaxyZone name, so every Zone this fixture builds shares one CombatSeed and every statistical test // GalaxyZone name, so every Zone this fixture builds shares one CombatSeed and every statistical test
// is replayable byte-for-byte across runs. A GUID-suffixed name here (this file's own earlier defect) // is replayable byte-for-byte across runs. A GUID-suffixed name here (this file's own earlier defect)

View file

@ -124,7 +124,7 @@ public sealed class FireControlCut4Tests : IDisposable
ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[5] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[5] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[9] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[9] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));
@ -218,7 +218,7 @@ public sealed class FireControlCut4Tests : IDisposable
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var ledger = new ProvenanceLedger { Lots = { [1] = new Lot { Origin = new Attributed(), Quality = 1 } } }; var ledger = new ProvenanceLedger { Lots = { [1] = new Lot { Origin = new Attributed(), Quality = 1 } } };
var items = new ItemManager(cache, ledger, TestSettings(), _ => { }); var items = new ItemManager(1u, cache, ledger, TestSettings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));
@ -258,7 +258,7 @@ public sealed class FireControlCut4Tests : IDisposable
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
_splashLedger = new ProvenanceLedger(); _splashLedger = new ProvenanceLedger();
var items = new ItemManager(cache, _splashLedger, settings, _ => { }); var items = new ItemManager(1u, cache, _splashLedger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
return (items, zone); return (items, zone);
} }

View file

@ -140,7 +140,7 @@ public sealed class FireControlCut5Tests : IDisposable
ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 };
for (var i = 5; i <= 12; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 5; i <= 12; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));
@ -310,7 +310,7 @@ public sealed class FireControlCut5Tests : IDisposable
ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[5] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[5] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));
@ -406,7 +406,7 @@ public sealed class FireControlCut5Tests : IDisposable
ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[5] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[5] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));
@ -549,7 +549,7 @@ public sealed class FireControlCut5Tests : IDisposable
ledger.Lots[1] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[1] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[2] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[2] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));

View file

@ -126,7 +126,7 @@ public sealed class FireControlCut6Tests : IDisposable
ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[5] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[5] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));

View file

@ -112,7 +112,7 @@ public sealed class FireControlCut6cTests : IDisposable
ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 };
for (var i = 5; i <= 12; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 5; i <= 12; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));
@ -254,7 +254,7 @@ public sealed class FireControlCut6cTests : IDisposable
var random = new Random(1u); var random = new Random(1u);
var settings = TestSettings(); var settings = TestSettings();
var log = new List<string>(); var log = new List<string>();
var items = new ItemManager(cache, new ProvenanceLedger(), settings, log.Add); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, log.Add);
var generator = new LoadoutGenerator(ref random, items, galaxy, null, makerFaction, .5f); var generator = new LoadoutGenerator(ref random, items, galaxy, null, makerFaction, .5f);
var pack = generator.GenerateShipLoadout(candidate => candidate.Name == "Armed"); var pack = generator.GenerateShipLoadout(candidate => candidate.Name == "Armed");

View file

@ -119,7 +119,7 @@ public sealed class FireControlCut6dTests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 20; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 20; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
// Durability high enough to survive thousands of direct 10-damage hits over a test's whole sample -- // Durability high enough to survive thousands of direct 10-damage hits over a test's whole sample --

View file

@ -104,7 +104,7 @@ public sealed class FireControlCut7Tests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 10; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 10; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));
@ -214,7 +214,7 @@ public sealed class FireControlCut7Tests : IDisposable
QualityPriceModifier = new ExponentialLerp() QualityPriceModifier = new ExponentialLerp()
}; };
var log = new List<string>(); var log = new List<string>();
var items = new ItemManager(cache, new ProvenanceLedger(), settings, log.Add); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, log.Add);
var random = new Random(1u); var random = new Random(1u);
var generator = new LoadoutGenerator(ref random, items, null, null, null, .5f); var generator = new LoadoutGenerator(ref random, items, null, null, null, .5f);
var pack = generator.GenerateShipLoadout(candidate => candidate == hull); var pack = generator.GenerateShipLoadout(candidate => candidate == hull);

View file

@ -112,7 +112,7 @@ public sealed class FireControlCut8Tests : IDisposable
ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[5] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[5] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));
@ -195,7 +195,7 @@ public sealed class FireControlCut8Tests : IDisposable
ledger.Lots[2] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[2] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));

View file

@ -107,7 +107,7 @@ public sealed class FireControlCut9Tests : IDisposable
ledger.Lots[2] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[2] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = zoneName, Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = zoneName, Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));
@ -312,7 +312,7 @@ public sealed class FireControlCut9Tests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 5; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 5; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Cut9-Kernel", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Cut9-Kernel", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));
@ -543,7 +543,7 @@ public sealed class FireControlCut9Tests : IDisposable
ledger.Lots[2] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[2] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 };
ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 }; ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Cut9-Lock", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Cut9-Lock", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("Hull"));

View file

@ -193,7 +193,7 @@ public sealed class FireControlPerWeaponTests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 100; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 100; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, TestSettings(minHit, targetLayerHeight), _ => { }); var items = new ItemManager(1u, cache, ledger, TestSettings(minHit, targetLayerHeight), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "PerWeapon", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "PerWeapon", Owner = null }, null);
EquippableItem Make(string name, int lot, float durability) => new EquippableItem EquippableItem Make(string name, int lot, float durability) => new EquippableItem

View file

@ -88,7 +88,7 @@ public sealed class FireControlTests : IDisposable
ledger.Lots[1] = new Lot { Origin = new Attributed(), Quality = 1 }; // hull ledger.Lots[1] = new Lot { Origin = new Attributed(), Quality = 1 }; // hull
for (var i = 0; i < hardpoints.Length; i++) for (var i = 0; i < hardpoints.Length; i++)
ledger.Lots[2 + i] = new Lot { Origin = new Attributed(), Quality = 1 }; // guns ledger.Lots[2 + i] = new Lot { Origin = new Attributed(), Quality = 1 }; // guns
var items = new ItemManager(_openCache, ledger, TestSettings(shipLayerHeight), _ => { }); var items = new ItemManager(1u, _openCache, ledger, TestSettings(shipLayerHeight), _ => { });
var planets = new PlanetSettings(); var planets = new PlanetSettings();
var pack = new ZonePack(); var pack = new ZonePack();
if (well) WellFixture.Dig(_openCache, pack, planets, 300f, 100f); if (well) WellFixture.Dig(_openCache, pack, planets, 300f, 100f);

View file

@ -40,7 +40,7 @@ public sealed class FloatingBodyTests : IDisposable
Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } }, Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } },
QualityPriceModifier = new ExponentialLerp() QualityPriceModifier = new ExponentialLerp()
}; };
var items = new ItemManager(cache, new ProvenanceLedger(), settings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, _ => { });
return new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); return new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
} }
@ -206,7 +206,7 @@ public sealed class FloatingBodyTests : IDisposable
Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } }, Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } },
QualityPriceModifier = new ExponentialLerp() QualityPriceModifier = new ExponentialLerp()
}; };
var items = new ItemManager(cache, new ProvenanceLedger(), settings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, _ => { });
var planets = new PlanetSettings { HeightExaggeration = 10f }; // the tilt reads force / K, which K = 1 would hide var planets = new PlanetSettings { HeightExaggeration = 10f }; // the tilt reads force / K, which K = 1 would hide
var pack = new ZonePack { Radius = 1000 }; var pack = new ZonePack { Radius = 1000 };
WellFixture.Dig(cache, pack, planets, 300, 100); WellFixture.Dig(cache, pack, planets, 300, 100);

View file

@ -30,7 +30,7 @@ public sealed class FlowFieldTests : IDisposable
TargetDetectionInfoThreshold = .1f, TargetGearInfoThreshold = .8f, TargetDetectionInfoThreshold = .1f, TargetGearInfoThreshold = .8f,
FiringArc = 170, CommitHorizon = .5f, SchematicCellSize = 2f FiringArc = 170, CommitHorizon = .5f, SchematicCellSize = 2f
}; };
_items = new ItemManager(_cache, new ProvenanceLedger(), settings, _ => { }); _items = new ItemManager(1u, _cache, new ProvenanceLedger(), settings, _ => { });
} }
public void Dispose() public void Dispose()

View file

@ -29,7 +29,7 @@ public sealed class GravitySubtractTests : IDisposable
TargetDetectionInfoThreshold = .1f, TargetGearInfoThreshold = .8f, TargetDetectionInfoThreshold = .1f, TargetGearInfoThreshold = .8f,
FiringArc = 170, CommitHorizon = .5f, SchematicCellSize = 2f FiringArc = 170, CommitHorizon = .5f, SchematicCellSize = 2f
}; };
_items = new ItemManager(_cache, new ProvenanceLedger(), settings, _ => { }); _items = new ItemManager(1u, _cache, new ProvenanceLedger(), settings, _ => { });
} }
public void Dispose() public void Dispose()

View file

@ -233,7 +233,7 @@ public sealed class HeatResponseTests : IDisposable
public void HeldInsidePlateauTakesNoThermalWear() public void HeldInsidePlateauTakesNoThermalWear()
{ {
using var cache = OpenCatalogWithThermalGear(); using var cache = OpenCatalogWithThermalGear();
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var equipped = BuildEquippedAt(cache, items, 50f, out var ship); var equipped = BuildEquippedAt(cache, items, 50f, out var ship);
Assert.Equal(1f, equipped.ThermalPerformance, 5); Assert.Equal(1f, equipped.ThermalPerformance, 5);
Assert.Equal(0f, equipped.Wear, 5); // no thermal term (Performance == 1) and no deltaTemp (settled) Assert.Equal(0f, equipped.Wear, 5); // no thermal term (Performance == 1) and no deltaTemp (settled)
@ -243,7 +243,7 @@ public sealed class HeatResponseTests : IDisposable
public void HeldOutsidePlateauTakesThermalWear() public void HeldOutsidePlateauTakesThermalWear()
{ {
using var cache = OpenCatalogWithThermalGear(); using var cache = OpenCatalogWithThermalGear();
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var equipped = BuildEquippedAt(cache, items, 10f, out var ship); // outside 40-60, inside 0-100 var equipped = BuildEquippedAt(cache, items, 10f, out var ship); // outside 40-60, inside 0-100
Assert.True(equipped.ThermalPerformance < 1f); Assert.True(equipped.ThermalPerformance < 1f);
Assert.True(equipped.Wear > 0f); Assert.True(equipped.Wear > 0f);
@ -255,7 +255,7 @@ public sealed class HeatResponseTests : IDisposable
public void HeldOutsidePlateauWearReadsEffectiveQuality() public void HeldOutsidePlateauWearReadsEffectiveQuality()
{ {
using var cache = OpenCatalogWithThermalGear(); using var cache = OpenCatalogWithThermalGear();
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var thermal = cache.RefOf<ItemData>(cache.GetByName<GearData>("Thermal")); var thermal = cache.RefOf<ItemData>(cache.GetByName<GearData>("Thermal"));
Lot Gear(float assembly, params float[] parts) => new Lot Lot Gear(float assembly, params float[] parts) => new Lot
{ {
@ -274,7 +274,7 @@ public sealed class HeatResponseTests : IDisposable
public void AFastSwingAcrossThePlateauStillWears() public void AFastSwingAcrossThePlateauStillWears()
{ {
using var cache = OpenCatalogWithThermalGear(); using var cache = OpenCatalogWithThermalGear();
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var equipped = BuildEquippedAt(cache, items, 10f, out var ship); var equipped = BuildEquippedAt(cache, items, 10f, out var ship);
// Jump straight into the plateau in one tick: ThermalPerformance ends at 1 (no thermal term), but the // Jump straight into the plateau in one tick: ThermalPerformance ends at 1 (no thermal term), but the
// swing itself (deltaTemp) still costs. // swing itself (deltaTemp) still costs.

View file

@ -55,7 +55,7 @@ public sealed class IffAndCombatTests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
ledger.Lots[1] = new Lot { Origin = new Attributed(), Quality = 1 }; // hull ledger.Lots[1] = new Lot { Origin = new Attributed(), Quality = 1 }; // hull
ledger.Lots[2] = new Lot { Origin = new Attributed(), Quality = 1 }; // gun ledger.Lots[2] = new Lot { Origin = new Attributed(), Quality = 1 }; // gun
var items = new ItemManager(_openCache, ledger, TestSettings(), _ => { }); var items = new ItemManager(1u, _openCache, ledger, TestSettings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
return (items, zone); return (items, zone);
} }

View file

@ -87,7 +87,7 @@ public sealed class InputCapacitorTests : IDisposable
private (Ship ship, ItemManager items, Reactor reactor) BuildShip(CultCache cache, float reactorCharge) private (Ship ship, ItemManager items, Reactor reactor) BuildShip(CultCache cache, float reactorCharge)
{ {
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
var items = new ItemManager(cache, ledger, Settings(), _ => { }); var items = new ItemManager(1u, cache, ledger, Settings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff")); var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff"));
var ship = new Ship(items, zone, hull, new EntitySettings()); var ship = new Ship(items, zone, hull, new EntitySettings());

View file

@ -105,7 +105,7 @@ public sealed class InspectionScannerCatalogTests
Origin = new Attributed(), Quality = 1f, Origin = new Attributed(), Quality = 1f,
Roles = product.Roles.Select(r => new RoleFill { Role = r.Role, Quality = r.Mean }).ToList(), Roles = product.Roles.Select(r => new RoleFill { Role = r.Role, Quality = r.Mean }).ToList(),
}; };
var items = new ItemManager(Cache, ledger, settings, _ => { }); var items = new ItemManager(1u, Cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var ship = new Ship(items, zone, new EquippableItem { Data = Cache.RefOf<ItemData>(hull), Durability = hull.Durability, Lot = 1 }, settings.DefaultEntitySettings); var ship = new Ship(items, zone, new EquippableItem { Data = Cache.RefOf<ItemData>(hull), Durability = hull.Durability, Lot = 1 }, settings.DefaultEntitySettings);
Assert.True(ship.TryEquip(new EquippableItem { Data = Cache.RefOf<ItemData>(design), Durability = design.Durability, Lot = 2 })); Assert.True(ship.TryEquip(new EquippableItem { Data = Cache.RefOf<ItemData>(design), Durability = design.Durability, Lot = 2 }));

View file

@ -42,7 +42,7 @@ public sealed class ItemTitleTests : IDisposable
_cache.Commit(batch => batch.Upsert(typeof(FactionProductData), _clapBack, new CultRecordKey("array-lucent"))); _cache.Commit(batch => batch.Upsert(typeof(FactionProductData), _clapBack, new CultRecordKey("array-lucent")));
_spiceBlend = new FactionProductData { Name = "Finch Reserve", Design = _cache.RefOf<CraftedItemData>(_spice), Manufacturer = finch }; _spiceBlend = new FactionProductData { Name = "Finch Reserve", Design = _cache.RefOf<CraftedItemData>(_spice), Manufacturer = finch };
_cache.Commit(batch => batch.Upsert(typeof(FactionProductData), _spiceBlend, new CultRecordKey("spice-finch"))); _cache.Commit(batch => batch.Upsert(typeof(FactionProductData), _spiceBlend, new CultRecordKey("spice-finch")));
_items = new ItemManager(_cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); _items = new ItemManager(1u, _cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
} }
public void Dispose() public void Dispose()

View file

@ -116,7 +116,7 @@ public sealed class LaunchSuppressorCatalogTests
Origin = new Attributed(), Quality = 1f, Origin = new Attributed(), Quality = 1f,
Roles = new List<RoleFill> { new RoleFill { Role = "baffles", Quality = baffles }, new RoleFill { Role = "heat sink", Quality = sink } }, Roles = new List<RoleFill> { new RoleFill { Role = "baffles", Quality = baffles }, new RoleFill { Role = "heat sink", Quality = sink } },
}; };
var items = new ItemManager(Cache, ledger, settings, _ => { }); var items = new ItemManager(1u, Cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
Ship = new Ship(items, zone, new EquippableItem { Data = Cache.RefOf<ItemData>(hull), Durability = hull.Durability, Lot = 1 }, settings.DefaultEntitySettings); Ship = new Ship(items, zone, new EquippableItem { Data = Cache.RefOf<ItemData>(hull), Durability = hull.Durability, Lot = 1 }, settings.DefaultEntitySettings);

View file

@ -58,7 +58,7 @@ public sealed class LayerTests : IDisposable
_cache.FlushAsync().Wait(); _cache.FlushAsync().Wait();
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 3; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 3; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(_cache, ledger, Settings(), _ => { }); var items = new ItemManager(1u, _cache, ledger, Settings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack { Radius = 0 }, new GalaxyZone { Name = "Layers", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack { Radius = 0 }, new GalaxyZone { Name = "Layers", Owner = null }, null);
return (items, zone); return (items, zone);
} }

View file

@ -90,7 +90,7 @@ public sealed class LoadoutTests : IDisposable
Loadout hand; Loadout hand;
using (var cache = Open()) using (var cache = Open())
{ {
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
hand = Armed(cache); hand = Armed(cache);
var failures = new List<string>(); var failures = new List<string>();
var ship = Build(items, hand, failures); var ship = Build(items, hand, failures);
@ -108,7 +108,7 @@ public sealed class LoadoutTests : IDisposable
Assert.Equal(hand.Slots.Select(Describe), loaded.Slots.Select(Describe)); Assert.Equal(hand.Slots.Select(Describe), loaded.Slots.Select(Describe));
Assert.Equal(hand.WeaponGroups, loaded.WeaponGroups); Assert.Equal(hand.WeaponGroups, loaded.WeaponGroups);
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var failures = new List<string>(); var failures = new List<string>();
var ship = Build(items, loaded, failures); var ship = Build(items, loaded, failures);
Assert.Empty(failures); Assert.Empty(failures);
@ -279,7 +279,7 @@ public sealed class LoadoutTests : IDisposable
using (var cache = Open()) using (var cache = Open())
{ {
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var missing = HandBuilt(cache); var missing = HandBuilt(cache);
missing.Slots[1].Design = new CultRecordRef<EquippableItemData>(new CultRecordKey("absent-design")); missing.Slots[1].Design = new CultRecordRef<EquippableItemData>(new CultRecordKey("absent-design"));
var failures = new List<string>(); var failures = new List<string>();
@ -304,7 +304,7 @@ public sealed class LoadoutTests : IDisposable
public void FailedFitBuildsNothing() public void FailedFitBuildsNothing()
{ {
using var cache = Open(); using var cache = Open();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var clash = HandBuilt(cache); var clash = HandBuilt(cache);
clash.Slots[1].Position = HardpointCell; clash.Slots[1].Position = HardpointCell;
var failures = new List<string>(); var failures = new List<string>();
@ -319,7 +319,7 @@ public sealed class LoadoutTests : IDisposable
public void ADesignWithNoProductBuildsUnbranded() public void ADesignWithNoProductBuildsUnbranded()
{ {
using var cache = Open(); using var cache = Open();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var failures = new List<string>(); var failures = new List<string>();
var ship = Build(items, WithDesign(HandBuilt(cache), 0, cache, "Orphan"), failures); var ship = Build(items, WithDesign(HandBuilt(cache), 0, cache, "Orphan"), failures);
Assert.Empty(failures); Assert.Empty(failures);
@ -335,7 +335,7 @@ public sealed class LoadoutTests : IDisposable
public void ADesignWhoseOnlyProductIsUnavailableStillFails() public void ADesignWhoseOnlyProductIsUnavailableStillFails()
{ {
using var cache = Open(); using var cache = Open();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var failures = new List<string>(); var failures = new List<string>();
var soleProduct = SoleProduct(cache); var soleProduct = SoleProduct(cache);
Assert.Null(Loadouts.Materialize(items, null, HandBuilt(cache), design => design.Name == "Lamp" ? null : soleProduct(design), failures)); Assert.Null(Loadouts.Materialize(items, null, HandBuilt(cache), design => design.Name == "Lamp" ? null : soleProduct(design), failures));
@ -365,7 +365,7 @@ public sealed class LoadoutTests : IDisposable
var gun = cache.GetAll<FactionProductData>().Single(p => p.Name == "Gun by Maker"); var gun = cache.GetAll<FactionProductData>().Single(p => p.Name == "Gun by Maker");
var bay = cache.GetAll<FactionProductData>().Single(p => p.Name == "Bay by Maker"); var bay = cache.GetAll<FactionProductData>().Single(p => p.Name == "Bay by Maker");
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
EquippableItem Mint(FactionProductData product) => (EquippableItem) items.CreateInstance(product); EquippableItem Mint(FactionProductData product) => (EquippableItem) items.CreateInstance(product);
@ -477,7 +477,7 @@ public sealed class LoadoutTests : IDisposable
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var random = new Random(1); var random = new Random(1);
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var generator = new LoadoutGenerator(ref random, items, null, null, null, .5f); var generator = new LoadoutGenerator(ref random, items, null, null, null, .5f);
var pack = generator.GenerateShipLoadout(candidate => candidate.Name == "Twin"); var pack = generator.GenerateShipLoadout(candidate => candidate.Name == "Twin");
Assert.NotNull(pack); Assert.NotNull(pack);
@ -504,7 +504,7 @@ public sealed class LoadoutTests : IDisposable
new RarityTier { Name = "Common", Quality = .2f, Color = new float3(1, 1, 1) }, new RarityTier { Name = "Common", Quality = .2f, Color = new float3(1, 1, 1) },
new RarityTier { Name = "Rare", Quality = .5f, Color = new float3(1, 1, 1) } new RarityTier { Name = "Rare", Quality = .5f, Color = new float3(1, 1, 1) }
}; };
var items = new ItemManager(cache, new ProvenanceLedger(), settings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, _ => { });
var lamp = cache.GetByName<GearData>("Lamp"); var lamp = cache.GetByName<GearData>("Lamp");
var commonLot = items.Lots.Add(new Lot var commonLot = items.Lots.Add(new Lot
{ {
@ -561,7 +561,7 @@ public sealed class LoadoutTests : IDisposable
using var cache = Open(); using var cache = Open();
var settings = AuthoredSettings.Load(RunStartTests.FindRepoRoot()).Read<GameplaySettings>("GameplaySettings"); var settings = AuthoredSettings.Load(RunStartTests.FindRepoRoot()).Read<GameplaySettings>("GameplaySettings");
var tiers = settings.Tiers; var tiers = settings.Tiers;
var items = new ItemManager(cache, new ProvenanceLedger(), settings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, _ => { });
var lamp = cache.GetByName<GearData>("Lamp"); var lamp = cache.GetByName<GearData>("Lamp");
var assembly = tiers[3].Quality; var assembly = tiers[3].Quality;
var sleeperLot = items.Lots.Add(new Lot var sleeperLot = items.Lots.Add(new Lot
@ -598,7 +598,7 @@ public sealed class LoadoutTests : IDisposable
var settings = AuthoredSettings.Load(RunStartTests.FindRepoRoot()).Read<GameplaySettings>("GameplaySettings"); var settings = AuthoredSettings.Load(RunStartTests.FindRepoRoot()).Read<GameplaySettings>("GameplaySettings");
var tiers = settings.Tiers; var tiers = settings.Tiers;
Assert.True(tiers.Length > index, "premise: the shipped asset carries this tier"); Assert.True(tiers.Length > index, "premise: the shipped asset carries this tier");
var items = new ItemManager(cache, new ProvenanceLedger(), settings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, _ => { });
var lamp = cache.GetByName<GearData>("Lamp"); var lamp = cache.GetByName<GearData>("Lamp");
string TierAt(float quality) => items.GetTier((CraftedItemInstance) items.CreateInstance(items.Lots.Add( string TierAt(float quality) => items.GetTier((CraftedItemInstance) items.CreateInstance(items.Lots.Add(
new Lot { Design = cache.RefOf<ItemData>(lamp), Origin = new Attributed(), Quality = quality, Roles = new List<RoleFill>() }))).tier.Name; new Lot { Design = cache.RefOf<ItemData>(lamp), Origin = new Attributed(), Quality = quality, Roles = new List<RoleFill>() }))).tier.Name;
@ -614,7 +614,7 @@ public sealed class LoadoutTests : IDisposable
{ {
using var cache = Open(); using var cache = Open();
var settings = AuthoredSettings.Load(RunStartTests.FindRepoRoot()).Read<GameplaySettings>("GameplaySettings"); var settings = AuthoredSettings.Load(RunStartTests.FindRepoRoot()).Read<GameplaySettings>("GameplaySettings");
var items = new ItemManager(cache, new ProvenanceLedger(), settings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, _ => { });
var lamp = cache.GetByName<GearData>("Lamp"); var lamp = cache.GetByName<GearData>("Lamp");
// Two steps and a hair above the lowest threshold: the step width decides whether that counts as two or one. // Two steps and a hair above the lowest threshold: the step width decides whether that counts as two or one.
var quality = settings.Tiers[0].Quality + 2 * .0499f + .0001f; var quality = settings.Tiers[0].Quality + 2 * .0499f + .0001f;
@ -640,7 +640,7 @@ public sealed class LoadoutTests : IDisposable
public void QualityTermAppliesItsOwnExponent() public void QualityTermAppliesItsOwnExponent()
{ {
using var cache = Open(); using var cache = Open();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var lamp = cache.GetByName<GearData>("Lamp"); var lamp = cache.GetByName<GearData>("Lamp");
var lotId = items.Lots.Add(new Lot { Design = cache.RefOf<ItemData>(lamp), Origin = new Attributed(), Quality = .5f, Roles = new List<RoleFill>() }); var lotId = items.Lots.Add(new Lot { Design = cache.RefOf<ItemData>(lamp), Origin = new Attributed(), Quality = .5f, Roles = new List<RoleFill>() });
var instance = (EquippableItem) items.CreateInstance(lotId); var instance = (EquippableItem) items.CreateInstance(lotId);
@ -658,7 +658,7 @@ public sealed class LoadoutTests : IDisposable
using var cache = Open(); using var cache = Open();
var settings = RunSaveTests.TestSettings(); var settings = RunSaveTests.TestSettings();
settings.QualityPriceModifier = new ExponentialLerp { Minimum = 0, Maximum = 1, Exponent = 1 }; settings.QualityPriceModifier = new ExponentialLerp { Minimum = 0, Maximum = 1, Exponent = 1 };
var items = new ItemManager(cache, new ProvenanceLedger(), settings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, _ => { });
var lamp = cache.GetByName<GearData>("Lamp"); var lamp = cache.GetByName<GearData>("Lamp");
var lowLot = items.Lots.Add(new Lot { Design = cache.RefOf<ItemData>(lamp), Origin = new Attributed(), Quality = .2f, Roles = new List<RoleFill>() }); var lowLot = items.Lots.Add(new Lot { Design = cache.RefOf<ItemData>(lamp), Origin = new Attributed(), Quality = .2f, Roles = new List<RoleFill>() });
var highLot = items.Lots.Add(new Lot { Design = cache.RefOf<ItemData>(lamp), Origin = new Attributed(), Quality = .8f, Roles = new List<RoleFill>() }); var highLot = items.Lots.Add(new Lot { Design = cache.RefOf<ItemData>(lamp), Origin = new Attributed(), Quality = .8f, Roles = new List<RoleFill>() });
@ -695,7 +695,7 @@ public sealed class LoadoutTests : IDisposable
var durable = cache.Upsert(new GearData { Name = "Durable", Hardpoint = HardpointType.Sensors, Shape = new Shape(), Price = 10, Durability = 100 }); var durable = cache.Upsert(new GearData { Name = "Durable", Hardpoint = HardpointType.Sensors, Shape = new Shape(), Price = 10, Durability = 100 });
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var lowLot = items.Lots.Add(new Lot { Design = new CultRecordRef<ItemData>(durable.Key), Origin = new Attributed(), Quality = .1f, Roles = new List<RoleFill>() }); var lowLot = items.Lots.Add(new Lot { Design = new CultRecordRef<ItemData>(durable.Key), Origin = new Attributed(), Quality = .1f, Roles = new List<RoleFill>() });
var highLot = items.Lots.Add(new Lot { Design = new CultRecordRef<ItemData>(durable.Key), Origin = new Attributed(), Quality = .9f, Roles = new List<RoleFill>() }); var highLot = items.Lots.Add(new Lot { Design = new CultRecordRef<ItemData>(durable.Key), Origin = new Attributed(), Quality = .9f, Roles = new List<RoleFill>() });
var sleeperLot = items.Lots.Add(new Lot var sleeperLot = items.Lots.Add(new Lot
@ -723,7 +723,7 @@ public sealed class LoadoutTests : IDisposable
public void EquippedItemExponentsReadEffectiveQuality() public void EquippedItemExponentsReadEffectiveQuality()
{ {
using var cache = Open(); using var cache = Open();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var maker = cache.RefOf(cache.GetByName<Faction>("Maker")); var maker = cache.RefOf(cache.GetByName<Faction>("Maker"));
var hullData = cache.GetByName<HullData>("Skiff"); var hullData = cache.GetByName<HullData>("Skiff");
var lampData = cache.GetByName<GearData>("Lamp"); var lampData = cache.GetByName<GearData>("Lamp");
@ -785,7 +785,7 @@ public sealed class LoadoutTests : IDisposable
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var thermalData = cache.Get(thermalGear); var thermalData = cache.Get(thermalGear);
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var hullItem = (EquippableItem) items.CreateInstance(items.CreateLot(hullData, maker, .5f)); var hullItem = (EquippableItem) items.CreateInstance(items.CreateLot(hullData, maker, .5f));
var ship = new Ship(items, null, hullItem, new EntitySettings()); var ship = new Ship(items, null, hullItem, new EntitySettings());
var gearItem = (EquippableItem) items.CreateInstance(items.CreateLot(thermalData, maker, .5f)); var gearItem = (EquippableItem) items.CreateInstance(items.CreateLot(thermalData, maker, .5f));
@ -831,7 +831,7 @@ public sealed class LoadoutTests : IDisposable
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var thermalData = cache.Get(thermalGear); var thermalData = cache.Get(thermalGear);
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var hullItem = (EquippableItem) items.CreateInstance(items.CreateLot(hullData, maker, .5f)); var hullItem = (EquippableItem) items.CreateInstance(items.CreateLot(hullData, maker, .5f));
var ship = new Ship(items, null, hullItem, new EntitySettings()); var ship = new Ship(items, null, hullItem, new EntitySettings());
var gearItem = (EquippableItem) items.CreateInstance(items.CreateLot(thermalData, maker, .5f)); var gearItem = (EquippableItem) items.CreateInstance(items.CreateLot(thermalData, maker, .5f));
@ -867,7 +867,7 @@ public sealed class LoadoutTests : IDisposable
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var consumableData = cache.Get(consumableRef); var consumableData = cache.Get(consumableRef);
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var hullItem = (EquippableItem) items.CreateInstance(items.CreateLot(hullData, maker, .5f)); var hullItem = (EquippableItem) items.CreateInstance(items.CreateLot(hullData, maker, .5f));
var ship = new Ship(items, null, hullItem, new EntitySettings()); var ship = new Ship(items, null, hullItem, new EntitySettings());
var consumableItem = (ConsumableItem) items.CreateInstance(items.CreateLot(consumableData, maker, .5f)); var consumableItem = (ConsumableItem) items.CreateInstance(items.CreateLot(consumableData, maker, .5f));
@ -902,7 +902,7 @@ public sealed class LoadoutTests : IDisposable
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var product = cache.GetAll<FactionProductData>().Single(p => p.Name == "Lensed by Maker"); var product = cache.GetAll<FactionProductData>().Single(p => p.Name == "Lensed by Maker");
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var lotId = items.CreateLot(product); var lotId = items.CreateLot(product);
var roleFill = items.Lots[lotId].Roles.Single(r => r.Role == "lens"); var roleFill = items.Lots[lotId].Roles.Single(r => r.Role == "lens");
Assert.Equal(.9f, roleFill.Quality, 3); Assert.Equal(.9f, roleFill.Quality, 3);
@ -914,7 +914,7 @@ public sealed class LoadoutTests : IDisposable
{ {
using var cache = Open(); using var cache = Open();
var maker = cache.RefOf(cache.GetByName<Faction>("Maker")); var maker = cache.RefOf(cache.GetByName<Faction>("Maker"));
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var lamp = cache.GetByName<GearData>("Lamp"); var lamp = cache.GetByName<GearData>("Lamp");
var lotId = items.Lots.Add(new Lot var lotId = items.Lots.Add(new Lot
{ {
@ -932,7 +932,7 @@ public sealed class LoadoutTests : IDisposable
public void OutOfRangeWeaponGroupIndexBuildsNothing() public void OutOfRangeWeaponGroupIndexBuildsNothing()
{ {
using var cache = Open(); using var cache = Open();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var stale = Armed(cache); var stale = Armed(cache);
stale.WeaponGroups = new[] { new[] { 0, 2 }, new[] { -1 } }; stale.WeaponGroups = new[] { new[] { 0, 2 }, new[] { -1 } };
var failures = new List<string>(); var failures = new List<string>();
@ -944,7 +944,7 @@ public sealed class LoadoutTests : IDisposable
public void UnequippingAGroupedWeaponRemovesItFromItsGroups() public void UnequippingAGroupedWeaponRemovesItFromItsGroups()
{ {
using var cache = Open(); using var cache = Open();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var ship = Build(items, Armed(cache), new List<string>()); var ship = Build(items, Armed(cache), new List<string>());
var item = Assert.Single(ship.WeaponGroups[0].items); var item = Assert.Single(ship.WeaponGroups[0].items);
Assert.NotNull(item.GetBehavior<Weapon>()); Assert.NotNull(item.GetBehavior<Weapon>());
@ -959,7 +959,7 @@ public sealed class LoadoutTests : IDisposable
public void NonWeaponGroupIndexBuildsNothing() public void NonWeaponGroupIndexBuildsNothing()
{ {
using var cache = Open(); using var cache = Open();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var lampGrouped = WithDesign(Armed(cache), 0, cache, "Lamp"); var lampGrouped = WithDesign(Armed(cache), 0, cache, "Lamp");
var failures = new List<string>(); var failures = new List<string>();
Assert.Null(Build(items, lampGrouped, failures)); Assert.Null(Build(items, lampGrouped, failures));
@ -970,7 +970,7 @@ public sealed class LoadoutTests : IDisposable
public void MoreWeaponGroupsThanTheGameHasBuildsNothing() public void MoreWeaponGroupsThanTheGameHasBuildsNothing()
{ {
using var cache = Open(); using var cache = Open();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var wide = Armed(cache); var wide = Armed(cache);
wide.WeaponGroups = wide.WeaponGroups.Append(new[] { 0 }).ToArray(); wide.WeaponGroups = wide.WeaponGroups.Append(new[] { 0 }).ToArray();
var failures = new List<string>(); var failures = new List<string>();
@ -984,7 +984,7 @@ public sealed class LoadoutTests : IDisposable
public void FewerWeaponGroupsArePaddedToTheGameCount() public void FewerWeaponGroupsArePaddedToTheGameCount()
{ {
using var cache = Open(); using var cache = Open();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var armed = Armed(cache); var armed = Armed(cache);
armed.WeaponGroups = new[] { new[] { 0 } }; armed.WeaponGroups = new[] { new[] { 0 } };
foreach (var groups in new[] { armed.WeaponGroups, null }) foreach (var groups in new[] { armed.WeaponGroups, null })
@ -1008,7 +1008,7 @@ public sealed class LoadoutTests : IDisposable
public void EntitiesDoNotShareDefaultEntitySettings() public void EntitiesDoNotShareDefaultEntitySettings()
{ {
using var cache = Open(); using var cache = Open();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var maker = cache.RefOf(cache.GetByName<Faction>("Maker")); var maker = cache.RefOf(cache.GetByName<Faction>("Maker"));
var hullData = cache.GetByName<HullData>("Skiff"); var hullData = cache.GetByName<HullData>("Skiff");
var template = items.GameplaySettings.DefaultEntitySettings; var template = items.GameplaySettings.DefaultEntitySettings;

View file

@ -40,7 +40,7 @@ public sealed class LockWarningTests : IDisposable
_openCache = AetheriaStores.Open(Catalog, catalogWritable: true); _openCache = AetheriaStores.Open(Catalog, catalogWritable: true);
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var lot = 1; lot < 12; lot++) ledger.Lots[lot] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var lot = 1; lot < 12; lot++) ledger.Lots[lot] = new Lot { Origin = new Attributed(), Quality = 1 };
_items = new ItemManager(_openCache, ledger, new GameplaySettings _items = new ItemManager(1u, _openCache, ledger, new GameplaySettings
{ {
DefaultEntitySettings = new EntitySettings(), DefaultEntitySettings = new EntitySettings(),
Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } }, Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } },

View file

@ -108,7 +108,7 @@ public sealed class LootTests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 9000; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 9000; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var planets = new PlanetSettings(); var planets = new PlanetSettings();
var pack = new ZonePack { Radius = well ? 1000 : 0 }; var pack = new ZonePack { Radius = well ? 1000 : 0 };
if (well) WellFixture.Dig(cache, pack, planets, 300, 100); if (well) WellFixture.Dig(cache, pack, planets, 300, 100);

View file

@ -118,7 +118,7 @@ public sealed class MineTests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 500; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 500; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var planets = new PlanetSettings(); var planets = new PlanetSettings();
var pack = new ZonePack { Radius = well ? 1000 : 0 }; var pack = new ZonePack { Radius = well ? 1000 : 0 };
if (well) WellFixture.Dig(cache, pack, planets, 300, 100); if (well) WellFixture.Dig(cache, pack, planets, 300, 100);

View file

@ -66,7 +66,7 @@ public sealed class MiningCut1Tests : IDisposable
// OrbitData and BodyData (AsteroidBeltData) are run types (AetheriaStores.RunTypes), not catalog types: // OrbitData and BodyData (AsteroidBeltData) are run types (AetheriaStores.RunTypes), not catalog types:
// they need a run store to write into. // they need a run store to write into.
var cache = AetheriaStores.Open(catalog, run, catalogWritable: true); var cache = AetheriaStores.Open(catalog, run, catalogWritable: true);
var items = new ItemManager(cache, new ProvenanceLedger(), GameSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), GameSettings(), _ => { });
var settings = Settings(); var settings = Settings();
var sunOrbitKey = cache.Upsert(new OrbitData()).Key; var sunOrbitKey = cache.Upsert(new OrbitData()).Key;

View file

@ -69,7 +69,7 @@ public sealed class MiningCut2Tests : IDisposable
var dir = Path.Combine(_root, $"cat{_fixtureCount++}"); var dir = Path.Combine(_root, $"cat{_fixtureCount++}");
Directory.CreateDirectory(dir); Directory.CreateDirectory(dir);
var cache = AetheriaStores.Open(Path.Combine(dir, "Aetheria.cc"), Path.Combine(dir, "run.cc"), catalogWritable: true); var cache = AetheriaStores.Open(Path.Combine(dir, "Aetheria.cc"), Path.Combine(dir, "run.cc"), catalogWritable: true);
var items = new ItemManager(cache, new ProvenanceLedger(), GameSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), GameSettings(), _ => { });
var settings = Settings(); var settings = Settings();
var rootOrbit = new OrbitData { Distance = 3000f, Phase = 0.05f }; var rootOrbit = new OrbitData { Distance = 3000f, Phase = 0.05f };

View file

@ -131,7 +131,7 @@ public sealed partial class MiningCut3Tests : IDisposable
}); });
cache.Upsert(dimEye); cache.Upsert(dimEye);
foreach (var kind in kinds ?? new FieldKindData[0]) cache.Upsert(kind); foreach (var kind in kinds ?? new FieldKindData[0]) cache.Upsert(kind);
var items = new ItemManager(cache, new ProvenanceLedger(), GameSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), GameSettings(), _ => { });
var sunOrbit = cache.Upsert(new OrbitData { FixedPosition = sunAt }).Key; var sunOrbit = cache.Upsert(new OrbitData { FixedPosition = sunAt }).Key;
var sun = cache.Upsert(new SunData { Orbit = new CultRecordRef<OrbitData>(sunOrbit), Mass = 1f }).Key; var sun = cache.Upsert(new SunData { Orbit = new CultRecordRef<OrbitData>(sunOrbit), Mass = 1f }).Key;
@ -679,7 +679,7 @@ public sealed partial class MiningCut3Tests : IDisposable
// Kept: a new, overwhelmingly weighted kind now wins the pick for this belt, yet loading it again leaves it. // Kept: a new, overwhelmingly weighted kind now wins the pick for this belt, yet loading it again leaves it.
reopened.Upsert(Kind("Overwhelming", 9f, 1e6f)); reopened.Upsert(Kind("Overwhelming", 9f, 1e6f));
Assert.False(FieldKinds.Assign(beltKey, reopened).Key.Equals(assigned)); Assert.False(FieldKinds.Assign(beltKey, reopened).Key.Equals(assigned));
var items = new ItemManager(reopened, new ProvenanceLedger(), GameSettings(), _ => { }); var items = new ItemManager(1u, reopened, new ProvenanceLedger(), GameSettings(), _ => { });
var reloaded = new Zone(items, PlanetSettings(), s.Pack, new GalaxyZone { Name = "MiningCut3Reload", Owner = null }, null); var reloaded = new Zone(items, PlanetSettings(), s.Pack, new GalaxyZone { Name = "MiningCut3Reload", Owner = null }, null);
Assert.True(((AsteroidBeltData) reloaded.Planets[beltKey]).Kind.Key.Equals(assigned)); Assert.True(((AsteroidBeltData) reloaded.Planets[beltKey]).Kind.Key.Equals(assigned));
} }
@ -817,7 +817,7 @@ public sealed partial class MiningCut3Tests : IDisposable
cache, new PlayerSettings(), new DirectoryInfo(dir), _ => { }, null, seed); cache, new PlayerSettings(), new DirectoryInfo(dir), _ => { }, null, seed);
} }
catch (Exception) { continue; } // Galaxy's own seed-dependent flakiness (RestoredHullsTests) catch (Exception) { continue; } // Galaxy's own seed-dependent flakiness (RestoredHullsTests)
var items = new ItemManager(cache, new ProvenanceLedger(), GameSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), GameSettings(), _ => { });
foreach (var zone in galaxy.Zones.Take(4)) foreach (var zone in galaxy.Zones.Take(4))
{ {
var pack = ZoneGenerator.GenerateZone(items, RestoredHullsTests.TutorialZoneSettings(), RestoredHullsTests.AuthoredPlanetSettings(), galaxy, zone, isTutorial: zone == galaxy.Entrance); var pack = ZoneGenerator.GenerateZone(items, RestoredHullsTests.TutorialZoneSettings(), RestoredHullsTests.AuthoredPlanetSettings(), galaxy, zone, isTutorial: zone == galaxy.Entrance);
@ -924,7 +924,7 @@ public sealed partial class MiningCut3Tests : IDisposable
_caches.Add(clean); _caches.Add(clean);
Assert.False(clean.IsDirty); Assert.False(clean.IsDirty);
Assert.False(((AsteroidBeltData) clean.Get(beltKey)).Kind.IsSet()); Assert.False(((AsteroidBeltData) clean.Get(beltKey)).Kind.IsSet());
var zone = new Zone(new ItemManager(clean, new ProvenanceLedger(), GameSettings(), _ => { }), PlanetSettings(), s.Pack, var zone = new Zone(new ItemManager(1u, clean, new ProvenanceLedger(), GameSettings(), _ => { }), PlanetSettings(), s.Pack,
new GalaxyZone { Name = "Clean", Owner = null }, null); new GalaxyZone { Name = "Clean", Owner = null }, null);
var assigned = ((AsteroidBeltData) zone.Planets[beltKey]).Kind; var assigned = ((AsteroidBeltData) zone.Planets[beltKey]).Kind;
Assert.True(assigned.IsSet()); Assert.True(assigned.IsSet());
@ -1026,7 +1026,7 @@ public sealed partial class MiningCut3Tests : IDisposable
PingEnergy = Constant(0f), PingRange = Constant(300f), PingCooldown = Constant(4f) PingEnergy = Constant(0f), PingRange = Constant(300f), PingCooldown = Constant(4f)
}); });
cache.Upsert(eye); cache.Upsert(eye);
var items = new ItemManager(cache, new ProvenanceLedger(), GameSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), GameSettings(), _ => { });
var s = new Scene var s = new Scene
{ {
Cache = cache, Items = items, Hull = hull, Eye = eye, Cache = cache, Items = items, Hull = hull, Eye = eye,

View file

@ -257,7 +257,7 @@ public sealed class MunitionPartsTests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
ledger.Lots[1] = new Lot { Origin = new Attributed(), Quality = .5f }; ledger.Lots[1] = new Lot { Origin = new Attributed(), Quality = .5f };
ledger.Lots[2] = new Lot { Origin = new Attributed(), Quality = .5f, Roles = new List<RoleFill> { new RoleFill { Role = "thruster", Quality = thrusterQuality } } }; ledger.Lots[2] = new Lot { Origin = new Attributed(), Quality = .5f, Roles = new List<RoleFill> { new RoleFill { Role = "thruster", Quality = thrusterQuality } } };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
ship = new Ship(items, zone, new EquippableItem { Data = cache.RefOf<ItemData>(hull), Durability = hull.Durability, Lot = 1 }, settings.DefaultEntitySettings); ship = new Ship(items, zone, new EquippableItem { Data = cache.RefOf<ItemData>(hull), Durability = hull.Durability, Lot = 1 }, settings.DefaultEntitySettings);
foreach (var (name, x, y) in ShipGear) foreach (var (name, x, y) in ShipGear)

View file

@ -255,7 +255,7 @@ public sealed class OrbitsFromFieldTests : IDisposable
var galaxy = new Galaxy(tutorial, authored.Read<SectorBackgroundSettings>("TutorialBackgroundSettings"), var galaxy = new Galaxy(tutorial, authored.Read<SectorBackgroundSettings>("TutorialBackgroundSettings"),
cache, new PlayerSettings(), cache, new PlayerSettings(),
Directory.CreateDirectory(Path.Combine(dir, "Narrative")), _ => { }, null, seed); Directory.CreateDirectory(Path.Combine(dir, "Narrative")), _ => { }, null, seed);
var items = new ItemManager(cache, new ProvenanceLedger(), authored.Read<GameplaySettings>("GameplaySettings"), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), authored.Read<GameplaySettings>("GameplaySettings"), _ => { });
var pack = ZoneGenerator.GenerateZone(items, authored.Read<ZoneGenerationSettings>("ZoneSettings"), authored.Read<PlanetSettings>("PlanetSettings"), galaxy, galaxy.Entrance, var pack = ZoneGenerator.GenerateZone(items, authored.Read<ZoneGenerationSettings>("ZoneSettings"), authored.Read<PlanetSettings>("PlanetSettings"), galaxy, galaxy.Entrance,
galaxy.IsPrelude, false); galaxy.IsPrelude, false);
var zone = new Zone(items, authored.Read<PlanetSettings>("PlanetSettings"), pack, galaxy.Entrance, galaxy); var zone = new Zone(items, authored.Read<PlanetSettings>("PlanetSettings"), pack, galaxy.Entrance, galaxy);

View file

@ -60,7 +60,7 @@ public sealed class PaintModeTests : IDisposable
_openCache = AetheriaStores.Open(Catalog, catalogWritable: true); _openCache = AetheriaStores.Open(Catalog, catalogWritable: true);
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var lot = 1; lot < 12; lot++) ledger.Lots[lot] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var lot = 1; lot < 12; lot++) ledger.Lots[lot] = new Lot { Origin = new Attributed(), Quality = 1 };
_items = new ItemManager(_openCache, ledger, new GameplaySettings _items = new ItemManager(1u, _openCache, ledger, new GameplaySettings
{ {
DefaultEntitySettings = new EntitySettings(), DefaultEntitySettings = new EntitySettings(),
Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } }, Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } },

View file

@ -106,7 +106,7 @@ public sealed class PickupTests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 9000; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 9000; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var pack = new ZonePack { Radius = 0 }; var pack = new ZonePack { Radius = 0 };
var curves = new PlanetSettings(); var curves = new PlanetSettings();
if (wells) if (wells)

View file

@ -61,7 +61,7 @@ public sealed class PopulatedRadiusTests : IDisposable
var cache = AetheriaStores.Open(Path.Combine(dir, "Aetheria.cc"), Path.Combine(dir, "run.cc"), catalogWritable: true); var cache = AetheriaStores.Open(Path.Combine(dir, "Aetheria.cc"), Path.Combine(dir, "run.cc"), catalogWritable: true);
_caches.Add(cache); _caches.Add(cache);
cache.Upsert(new VerseGrammar { Revision = 1 }); cache.Upsert(new VerseGrammar { Revision = 1 });
var items = new ItemManager(cache, new ProvenanceLedger(), new GameplaySettings var items = new ItemManager(1u, cache, new ProvenanceLedger(), new GameplaySettings
{ {
DefaultEntitySettings = new EntitySettings(), DefaultEntitySettings = new EntitySettings(),
Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } }, Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } },

View file

@ -31,7 +31,7 @@ public sealed class PotentialOwnerTests : IDisposable
Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } }, Tiers = new[] { new RarityTier { Name = "Common", Quality = .5f, Color = new float3(1, 1, 1) } },
QualityPriceModifier = new ExponentialLerp() QualityPriceModifier = new ExponentialLerp()
}; };
_items = new ItemManager(_cache, new ProvenanceLedger(), settings, _ => { }); _items = new ItemManager(1u, _cache, new ProvenanceLedger(), settings, _ => { });
} }
public void Dispose() public void Dispose()

View file

@ -87,7 +87,7 @@ public sealed class PowerBusTests : IDisposable
CultCache cache, float reactorCharge, float startingCapacitorCharge, bool reactorFirst) CultCache cache, float reactorCharge, float startingCapacitorCharge, bool reactorFirst)
{ {
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
var items = new ItemManager(cache, ledger, Settings(), _ => { }); var items = new ItemManager(1u, cache, ledger, Settings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff")); var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff"));
var ship = new Ship(items, zone, hull, new EntitySettings()); var ship = new Ship(items, zone, hull, new EntitySettings());

View file

@ -93,7 +93,7 @@ public sealed class PowerCurveTests : IDisposable
private Ship BuildShip(CultCache cache, float reactorCharge) private Ship BuildShip(CultCache cache, float reactorCharge)
{ {
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff")); var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff"));
var ship = new Ship(items, zone, hull, new EntitySettings()); var ship = new Ship(items, zone, hull, new EntitySettings());
@ -401,7 +401,7 @@ public sealed class PowerCurveTests : IDisposable
}); });
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
var hullItem = Mint(cache, items, cache.GetByName<HullData>("Skiff")); var hullItem = Mint(cache, items, cache.GetByName<HullData>("Skiff"));
var ship = new Ship(items, zone, hullItem, new EntitySettings()); var ship = new Ship(items, zone, hullItem, new EntitySettings());

View file

@ -63,7 +63,7 @@ public sealed class PowerTierTests : IDisposable
private (Ship ship, ItemManager items, Reactor reactor) BuildShip(CultCache cache, float reactorCharge) private (Ship ship, ItemManager items, Reactor reactor) BuildShip(CultCache cache, float reactorCharge)
{ {
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
var items = new ItemManager(cache, ledger, Settings(), _ => { }); var items = new ItemManager(1u, cache, ledger, Settings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff")); var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff"));
var ship = new Ship(items, zone, hull, new EntitySettings()); var ship = new Ship(items, zone, hull, new EntitySettings());

View file

@ -26,7 +26,7 @@ public sealed class ProductBinTests : IDisposable
Roles = { new ItemRole { Name = "lens" } } Roles = { new ItemRole { Name = "lens" } }
}); });
_lens = new CultRecordRef<CraftedItemData>(gear.Key); _lens = new CultRecordRef<CraftedItemData>(gear.Key);
_items = new ItemManager(_cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _log.Add) { Random = new CultMath.Random(7u) }; _items = new ItemManager(1u, _cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _log.Add) { Random = new CultMath.Random(7u) };
} }
public void Dispose() public void Dispose()

View file

@ -133,7 +133,7 @@ public sealed class ProductChoiceTests : IDisposable
return new Rig return new Rig
{ {
Cache = cache, OutA = outA, OutZ = outZ, OutBoth = cache.GetByName<Faction>("OutBoth"), OutEven = cache.GetByName<Faction>("OutEven"), OutNone = cache.GetByName<Faction>("OutNone"), Cache = cache, OutA = outA, OutZ = outZ, OutBoth = cache.GetByName<Faction>("OutBoth"), OutEven = cache.GetByName<Faction>("OutEven"), OutNone = cache.GetByName<Faction>("OutNone"),
Items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }), Items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }),
Galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { }) Galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { })
}; };
} }
@ -325,7 +325,7 @@ public sealed class ProductChoiceTests : IDisposable
int AlphaDraws(Rig rig) int AlphaDraws(Rig rig)
{ {
var log = new List<string>(); var log = new List<string>();
var items = new ItemManager(rig.Cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), log.Add); var items = new ItemManager(1u, rig.Cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), log.Add);
var lamp = rig.Cache.GetByName<GearData>("Lamp"); var lamp = rig.Cache.GetByName<GearData>("Lamp");
var alpha = Enumerable.Range(1, 1000).Count(i => var alpha = Enumerable.Range(1, 1000).Count(i =>
{ {

View file

@ -57,7 +57,7 @@ public sealed class RangeFalloffTests
public void AnUnequippedWeaponsUnauthoredStatsEvaluate(string design, bool unauthored) public void AnUnequippedWeaponsUnauthoredStatsEvaluate(string design, bool unauthored)
{ {
using var cache = RestoredHullsTests.OpenCatalog(); using var cache = RestoredHullsTests.OpenCatalog();
var items = new ItemManager(cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), RunSaveTests.TestSettings(), _ => { });
var data = cache.GetAll<WeaponItemData>().Single(x => x.Name == design); var data = cache.GetAll<WeaponItemData>().Single(x => x.Name == design);
var lot = items.Lots.Add(new Lot { Design = cache.RefOf<ItemData>(data), Origin = new Attributed(), Quality = .5f, Roles = new System.Collections.Generic.List<RoleFill>() }); var lot = items.Lots.Add(new Lot { Design = cache.RefOf<ItemData>(data), Origin = new Attributed(), Quality = .5f, Roles = new System.Collections.Generic.List<RoleFill>() });
var item = (EquippableItem) items.CreateInstance(lot); var item = (EquippableItem) items.CreateInstance(lot);

View file

@ -147,7 +147,7 @@ public sealed class RestoredHullsTests
private static (uint seed, string zoneName) ScanForNoLagrangeCandidateZone(CultCache cache) private static (uint seed, string zoneName) ScanForNoLagrangeCandidateZone(CultCache cache)
{ {
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
for (var seed = 1u; seed <= 64u; seed++) for (var seed = 1u; seed <= 64u; seed++)
{ {
var galaxy = new Galaxy(TutorialGalaxySettings(), TutorialBackgroundSettings(), cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed); var galaxy = new Galaxy(TutorialGalaxySettings(), TutorialBackgroundSettings(), cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed);
@ -227,7 +227,7 @@ public sealed class RestoredHullsTests
var settings = Settings(); var settings = Settings();
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= hull.Hardpoints.Count + 1; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = .5f }; for (var i = 1; i <= hull.Hardpoints.Count + 1; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = .5f };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullItem = new EquippableItem { Data = cache.RefOf<ItemData>(hull), Durability = hull.Durability, Lot = 1 }; var hullItem = new EquippableItem { Data = cache.RefOf<ItemData>(hull), Durability = hull.Durability, Lot = 1 };
var ship = new Ship(items, zone, hullItem, settings.DefaultEntitySettings); var ship = new Ship(items, zone, hullItem, settings.DefaultEntitySettings);
@ -282,7 +282,7 @@ public sealed class RestoredHullsTests
var settings = Settings(); var settings = Settings();
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= hull.Hardpoints.Count + 1; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = .5f }; for (var i = 1; i <= hull.Hardpoints.Count + 1; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = .5f };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test", Owner = null }, null);
var hullItem = new EquippableItem { Data = cache.RefOf<ItemData>(hull), Durability = hull.Durability, Lot = 1 }; var hullItem = new EquippableItem { Data = cache.RefOf<ItemData>(hull), Durability = hull.Durability, Lot = 1 };
var ship = new Ship(items, zone, hullItem, settings.DefaultEntitySettings); var ship = new Ship(items, zone, hullItem, settings.DefaultEntitySettings);
@ -372,7 +372,7 @@ public sealed class RestoredHullsTests
using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun); using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun);
var galaxy = new Galaxy(tutorialSettings, background, cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed); var galaxy = new Galaxy(tutorialSettings, background, cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed);
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var pack = ZoneGenerator.GenerateZone(items, zoneSettings, AuthoredPlanetSettings(), galaxy, galaxy.Entrance, isTutorial: true); var pack = ZoneGenerator.GenerateZone(items, zoneSettings, AuthoredPlanetSettings(), galaxy, galaxy.Entrance, isTutorial: true);
var dockedStation = pack.Entities.OfType<OrbitalEntityPack>() var dockedStation = pack.Entities.OfType<OrbitalEntityPack>()
@ -412,7 +412,7 @@ public sealed class RestoredHullsTests
using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun); using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun);
var galaxy = new Galaxy(tutorialSettings, background, cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed); var galaxy = new Galaxy(tutorialSettings, background, cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed);
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var pack = ZoneGenerator.GenerateZone(items, zoneSettings, AuthoredPlanetSettings(), galaxy, galaxy.Entrance, isTutorial: true); var pack = ZoneGenerator.GenerateZone(items, zoneSettings, AuthoredPlanetSettings(), galaxy, galaxy.Entrance, isTutorial: true);
var planetOrbits = pack.Planets.Select(p => cache.Get(cache.Get(p).Orbit)).Where(o => o.Parent.IsSet()).ToArray(); var planetOrbits = pack.Planets.Select(p => cache.Get(cache.Get(p).Orbit)).Where(o => o.Parent.IsSet()).ToArray();
@ -449,7 +449,7 @@ public sealed class RestoredHullsTests
{ {
using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun); using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun);
var galaxy = new Galaxy(TutorialGalaxySettings(), TutorialBackgroundSettings(), cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed: 1u); var galaxy = new Galaxy(TutorialGalaxySettings(), TutorialBackgroundSettings(), cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed: 1u);
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var zoneSettings = TutorialZoneSettings(); var zoneSettings = TutorialZoneSettings();
zoneSettings.RosetteProbability = 0; zoneSettings.RosetteProbability = 0;
@ -484,7 +484,7 @@ public sealed class RestoredHullsTests
{ {
using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun); using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun);
var galaxy = new Galaxy(TutorialGalaxySettings(), TutorialBackgroundSettings(), cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed: 1u); var galaxy = new Galaxy(TutorialGalaxySettings(), TutorialBackgroundSettings(), cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed: 1u);
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var zoneSettings = TutorialZoneSettings(); var zoneSettings = TutorialZoneSettings();
zoneSettings.RosetteProbability = 1; zoneSettings.RosetteProbability = 1;
@ -535,7 +535,7 @@ public sealed class RestoredHullsTests
using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun); using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun);
var galaxy = new Galaxy(tutorialSettings, background, cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed); var galaxy = new Galaxy(tutorialSettings, background, cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed);
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var pack = ZoneGenerator.GenerateZone(items, zoneSettings, AuthoredPlanetSettings(), galaxy, galaxy.Entrance, isTutorial: true); var pack = ZoneGenerator.GenerateZone(items, zoneSettings, AuthoredPlanetSettings(), galaxy, galaxy.Entrance, isTutorial: true);
var dockedStation = pack.Entities.OfType<OrbitalEntityPack>() var dockedStation = pack.Entities.OfType<OrbitalEntityPack>()
@ -596,7 +596,7 @@ public sealed class RestoredHullsTests
using var cache = OpenCatalog(); using var cache = OpenCatalog();
var hull = cache.GetByName<HullData>("Longinus"); var hull = cache.GetByName<HullData>("Longinus");
var settings = Settings(); var settings = Settings();
var items = new ItemManager(cache, new ProvenanceLedger(), settings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, _ => { });
// ItemManager.Random defaults to a DateTime.Now-seeded instance; without pinning it here, the item // ItemManager.Random defaults to a DateTime.Now-seeded instance; without pinning it here, the item
// qualities LoadoutGenerator/EntitySerializer roll through it (not through the `random` below, which // qualities LoadoutGenerator/EntitySerializer roll through it (not through the `random` below, which
// only drives which designs get picked) would make this test's own measured speed non-deterministic. // only drives which designs get picked) would make this test's own measured speed non-deterministic.
@ -645,7 +645,7 @@ public sealed class RestoredHullsTests
for (uint seed = 1; seed <= 10; seed++) for (uint seed = 1; seed <= 10; seed++)
{ {
var items = new ItemManager(cache, new ProvenanceLedger(), settings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, _ => { });
var random = new Random(seed); var random = new Random(seed);
var generator = new LoadoutGenerator(ref random, items, null, null, null, .5f); var generator = new LoadoutGenerator(ref random, items, null, null, null, .5f);
var pack = generator.GenerateShipLoadout(candidate => candidate == hull); var pack = generator.GenerateShipLoadout(candidate => candidate == hull);
@ -729,7 +729,7 @@ public sealed class RestoredHullsTests
var (seed, zoneName) = NoLagrangeCandidateZone(); var (seed, zoneName) = NoLagrangeCandidateZone();
var galaxy = BuildGalaxyWithForcedEntrance(cache, seed, zoneName); var galaxy = BuildGalaxyWithForcedEntrance(cache, seed, zoneName);
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var pack = ZoneGenerator.GenerateZone(items, TutorialZoneSettings(), AuthoredPlanetSettings(), galaxy, galaxy.Entrance, isTutorial: true); var pack = ZoneGenerator.GenerateZone(items, TutorialZoneSettings(), AuthoredPlanetSettings(), galaxy, galaxy.Entrance, isTutorial: true);
var station = pack.Entities.OfType<OrbitalEntityPack>() var station = pack.Entities.OfType<OrbitalEntityPack>()
@ -780,7 +780,7 @@ public sealed class RestoredHullsTests
{ {
using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun); using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun);
var galaxy = new Galaxy(TutorialGalaxySettings(), TutorialBackgroundSettings(), cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed: 1u); var galaxy = new Galaxy(TutorialGalaxySettings(), TutorialBackgroundSettings(), cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed: 1u);
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
int StationCount(GalaxyZone zone, bool isTutorial) => int StationCount(GalaxyZone zone, bool isTutorial) =>
ZoneGenerator.GenerateZone(items, TutorialZoneSettings(), AuthoredPlanetSettings(), galaxy, zone, isTutorial) ZoneGenerator.GenerateZone(items, TutorialZoneSettings(), AuthoredPlanetSettings(), galaxy, zone, isTutorial)
@ -820,7 +820,7 @@ public sealed class RestoredHullsTests
{ {
using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun); using var cache = OpenReadOnlyRealCatalogWithScratchRun(gameData, scratchRun);
var galaxy = new Galaxy(TutorialGalaxySettings(), TutorialBackgroundSettings(), cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed: 1u); var galaxy = new Galaxy(TutorialGalaxySettings(), TutorialBackgroundSettings(), cache, new PlayerSettings(), new DirectoryInfo(Path.GetTempPath()), _ => { }, null, seed: 1u);
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var pack = ZoneGenerator.GenerateZone(items, TutorialZoneSettings(), AuthoredPlanetSettings(), galaxy, galaxy.Entrance, isTutorial: true); var pack = ZoneGenerator.GenerateZone(items, TutorialZoneSettings(), AuthoredPlanetSettings(), galaxy, galaxy.Entrance, isTutorial: true);
var stationCount = pack.Entities.OfType<OrbitalEntityPack>().Count(e => (cache.Get(e.Hull.Data) as HullData)?.HullType == HullType.Station); var stationCount = pack.Entities.OfType<OrbitalEntityPack>().Count(e => (cache.Get(e.Hull.Data) as HullData)?.HullType == HullType.Station);
@ -904,7 +904,7 @@ public sealed class RestoredHullsTests
var zone = galaxy.Zones.Single(z => z.Name == zoneName); var zone = galaxy.Zones.Single(z => z.Name == zoneName);
Assert.NotSame(galaxy.Entrance, zone); Assert.NotSame(galaxy.Entrance, zone);
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var pack = ZoneGenerator.GenerateZone(items, TutorialZoneSettings(), AuthoredPlanetSettings(), galaxy, zone, isTutorial: true); var pack = ZoneGenerator.GenerateZone(items, TutorialZoneSettings(), AuthoredPlanetSettings(), galaxy, zone, isTutorial: true);
// Confirms this fixture still has no genuine (non-rosette) Lagrange candidate -- a regression here // Confirms this fixture still has no genuine (non-rosette) Lagrange candidate -- a regression here

View file

@ -102,7 +102,7 @@ public sealed class RoleAuthoringTests : IDisposable
}); });
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var cheapLot = items.CreateLot(cache.GetAll<FactionProductData>().Single(p => p.Name == "Lensed Economy")); var cheapLot = items.CreateLot(cache.GetAll<FactionProductData>().Single(p => p.Name == "Lensed Economy"));
var premiumLot = items.CreateLot(cache.GetAll<FactionProductData>().Single(p => p.Name == "Lensed Premium")); var premiumLot = items.CreateLot(cache.GetAll<FactionProductData>().Single(p => p.Name == "Lensed Premium"));
var cheapInstance = (EquippableItem) items.CreateInstance(cheapLot); var cheapInstance = (EquippableItem) items.CreateInstance(cheapLot);

View file

@ -30,7 +30,7 @@ public sealed partial class RunStartTests
private static Faction Zhestokost(Galaxy galaxy) => galaxy.Factions.Single(faction => faction.Name == "Zhestokost"); private static Faction Zhestokost(Galaxy galaxy) => galaxy.Factions.Single(faction => faction.Name == "Zhestokost");
private ItemManager LoggingItems(List<string> log) => private ItemManager LoggingItems(List<string> log) =>
new ItemManager(_cache, new ProvenanceLedger(), AuthoredSettings.Load(FindRepoRoot()).Read<GameplaySettings>("GameplaySettings"), log.Add); new ItemManager(1u, _cache, new ProvenanceLedger(), AuthoredSettings.Load(FindRepoRoot()).Read<GameplaySettings>("GameplaySettings"), log.Add);
private static string HullName(ItemManager items, EntityPack pack) => items.GetData(pack.Hull).Name; private static string HullName(ItemManager items, EntityPack pack) => items.GetData(pack.Hull).Name;

View file

@ -102,7 +102,7 @@ public sealed class RunSaveTests : IDisposable
var galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { }); var galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { });
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 2; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 2; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, TestSettings(), _ => { }); var items = new ItemManager(1u, cache, ledger, TestSettings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), galaxy.Zones[0], galaxy); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), galaxy.Zones[0], galaxy);
galaxy.Zones[0].Contents = zone; galaxy.Zones[0].Contents = zone;
Ship Make(string hull, int lot) => new Ship(items, zone, new EquippableItem Ship Make(string hull, int lot) => new Ship(items, zone, new EquippableItem
@ -135,7 +135,7 @@ public sealed class RunSaveTests : IDisposable
using (var cache = Open()) using (var cache = Open())
{ {
var galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { }); var galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { });
var itemManager = new ItemManager(cache, new ProvenanceLedger(), TestSettings(), _ => { }); var itemManager = new ItemManager(1u, cache, new ProvenanceLedger(), TestSettings(), _ => { });
galaxy.Zones[0].Contents = new Zone(itemManager, new PlanetSettings(), new ZonePack(), galaxy.Zones[0], galaxy); galaxy.Zones[0].Contents = new Zone(itemManager, new PlanetSettings(), new ZonePack(), galaxy.Zones[0], galaxy);
var (game, zones) = RunSave.Capture(cache, galaxy, galaxy.Zones[0].Contents, null, new SavedActionBarBinding[0], 0); var (game, zones) = RunSave.Capture(cache, galaxy, galaxy.Zones[0].Contents, null, new SavedActionBarBinding[0], 0);
RunSave.Commit(cache, game, zones, RunSave.Lots(cache)); RunSave.Commit(cache, game, zones, RunSave.Lots(cache));
@ -160,7 +160,7 @@ public sealed class RunSaveTests : IDisposable
using (var cache = Open()) using (var cache = Open())
{ {
var galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { }); var galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { });
var itemManager = new ItemManager(cache, new ProvenanceLedger(), TestSettings(), _ => { }); var itemManager = new ItemManager(1u, cache, new ProvenanceLedger(), TestSettings(), _ => { });
galaxy.Zones[0].Contents = new Zone(itemManager, new PlanetSettings(), new ZonePack(), galaxy.Zones[0], galaxy); galaxy.Zones[0].Contents = new Zone(itemManager, new PlanetSettings(), new ZonePack(), galaxy.Zones[0], galaxy);
var (game, zones) = RunSave.Capture(cache, galaxy, galaxy.Zones[0].Contents, null, new SavedActionBarBinding[0], 4242); var (game, zones) = RunSave.Capture(cache, galaxy, galaxy.Zones[0].Contents, null, new SavedActionBarBinding[0], 4242);
RunSave.Commit(cache, game, zones, RunSave.Lots(cache)); RunSave.Commit(cache, game, zones, RunSave.Lots(cache));
@ -186,7 +186,7 @@ public sealed class RunSaveTests : IDisposable
{ {
var galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { }); var galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { });
Assert.Equal(0xC0FFEE42u, galaxy.Seed); Assert.Equal(0xC0FFEE42u, galaxy.Seed);
var itemManager = new ItemManager(cache, new ProvenanceLedger(), TestSettings(), _ => { }); var itemManager = new ItemManager(1u, cache, new ProvenanceLedger(), TestSettings(), _ => { });
galaxy.Zones[0].Contents = new Zone(itemManager, new PlanetSettings(), new ZonePack(), galaxy.Zones[0], galaxy); galaxy.Zones[0].Contents = new Zone(itemManager, new PlanetSettings(), new ZonePack(), galaxy.Zones[0], galaxy);
// The zone's drop dice are its name's seed mixed with the run's. // The zone's drop dice are its name's seed mixed with the run's.
Assert.Equal("Zone 0".StableHash() ^ SimulationDice.Mix(0xC0FFEE42u), galaxy.Zones[0].Contents.DropSeed); Assert.Equal("Zone 0".StableHash() ^ SimulationDice.Mix(0xC0FFEE42u), galaxy.Zones[0].Contents.DropSeed);
@ -207,7 +207,7 @@ public sealed class RunSaveTests : IDisposable
Assert.Equal(0u, cache.GetGlobal<SavedGame>().Seed); Assert.Equal(0u, cache.GetGlobal<SavedGame>().Seed);
var galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { }); var galaxy = new Galaxy(cache, cache.GetGlobal<SavedGame>(), _ => { });
Assert.Equal(0u, galaxy.Seed); Assert.Equal(0u, galaxy.Seed);
var itemManager = new ItemManager(cache, new ProvenanceLedger(), TestSettings(), _ => { }); var itemManager = new ItemManager(1u, cache, new ProvenanceLedger(), TestSettings(), _ => { });
var zone = new Zone(itemManager, new PlanetSettings(), new ZonePack(), galaxy.Zones[0], galaxy); var zone = new Zone(itemManager, new PlanetSettings(), new ZonePack(), galaxy.Zones[0], galaxy);
Assert.Equal("Zone 0".StableHash(), zone.CombatSeed); Assert.Equal("Zone 0".StableHash(), zone.CombatSeed);
Assert.Equal(zone.CombatSeed, zone.DropSeed); Assert.Equal(zone.CombatSeed, zone.DropSeed);
@ -408,7 +408,7 @@ public sealed class RunSaveTests : IDisposable
using (var cache = Open()) using (var cache = Open())
{ {
var random = new Random(7); var random = new Random(7);
var items = new ItemManager(cache, new ProvenanceLedger(), TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), TestSettings(), _ => { });
var generator = new LoadoutGenerator(ref random, items, null, null, null, .5f); var generator = new LoadoutGenerator(ref random, items, null, null, null, .5f);
pack = generator.GenerateShipLoadout(candidate => candidate.Name == "Runabout"); pack = generator.GenerateShipLoadout(candidate => candidate.Name == "Runabout");
Assert.NotNull(pack); Assert.NotNull(pack);

View file

@ -53,7 +53,7 @@ public sealed partial class RunStartTests : IDisposable
_galaxy = new Galaxy(tutorial, authored.Read<SectorBackgroundSettings>("TutorialBackgroundSettings"), _galaxy = new Galaxy(tutorial, authored.Read<SectorBackgroundSettings>("TutorialBackgroundSettings"),
_cache, new PlayerSettings(), _cache, new PlayerSettings(),
Directory.CreateDirectory(Path.Combine(_root, "Narrative")), _ => { }, null, GalaxySeed); Directory.CreateDirectory(Path.Combine(_root, "Narrative")), _ => { }, null, GalaxySeed);
_items = new ItemManager(_cache, new ProvenanceLedger(), authored.Read<GameplaySettings>("GameplaySettings"), _ => { }); _items = new ItemManager(1u, _cache, new ProvenanceLedger(), authored.Read<GameplaySettings>("GameplaySettings"), _ => { });
_protagonist = _galaxy.ResolveFaction(tutorial.ProtagonistFaction); _protagonist = _galaxy.ResolveFaction(tutorial.ProtagonistFaction);
// GameSettings.StartingHullName is a plain field of the Unity settings object, not a ServerShared subtree // GameSettings.StartingHullName is a plain field of the Unity settings object, not a ServerShared subtree

View file

@ -83,7 +83,7 @@ public sealed class ShieldReserveTests : IDisposable
private (Ship ship, Shield shield) BuildShipWithShield(CultCache cache, float reactorGeneration) private (Ship ship, Shield shield) BuildShipWithShield(CultCache cache, float reactorGeneration)
{ {
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
var items = new ItemManager(cache, ledger, Settings(), _ => { }); var items = new ItemManager(1u, cache, ledger, Settings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff")); var hull = Mint(cache, items, cache.GetByName<HullData>("Skiff"));
var ship = new Ship(items, zone, hull, new EntitySettings()); var ship = new Ship(items, zone, hull, new EntitySettings());

View file

@ -132,7 +132,7 @@ public sealed class SignatureTests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 100; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 100; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, Settings(visibilityDecay), _ => { }); var items = new ItemManager(1u, cache, ledger, Settings(visibilityDecay), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Signatures", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Signatures", Owner = null }, null);
var lot = 1; var lot = 1;
EquippableItem Make(string name) => new EquippableItem EquippableItem Make(string name) => new EquippableItem

View file

@ -93,7 +93,7 @@ public sealed class StatResolverTests : IDisposable
cache.Upsert(new GearData { Name = "AutoGun", Hardpoint = HardpointType.Sensors, Shape = new Shape(), Durability = 10, Behaviors = { new AutoWeaponData { Damage = autoDamage } } }); cache.Upsert(new GearData { Name = "AutoGun", Hardpoint = HardpointType.Sensors, Shape = new Shape(), Durability = 10, Behaviors = { new AutoWeaponData { Damage = autoDamage } } });
cache.Upsert(new GearData { Name = "ChargedGun", Hardpoint = HardpointType.Sensors, Shape = new Shape(), Durability = 10, Behaviors = { new ChargedWeaponData { Damage = chargedDamage } } }); cache.Upsert(new GearData { Name = "ChargedGun", Hardpoint = HardpointType.Sensors, Shape = new Shape(), Durability = 10, Behaviors = { new ChargedWeaponData { Damage = chargedDamage } } });
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var ship = BuildActivatedShip(cache, items, withBooster: true); var ship = BuildActivatedShip(cache, items, withBooster: true);
ship.Deactivate(); // TryEquip refuses while deployed ship.Deactivate(); // TryEquip refuses while deployed
Assert.True(ship.TryEquip(Mint(cache, items, cache.GetByName<GearData>("AutoGun")), FirstGunCell)); Assert.True(ship.TryEquip(Mint(cache, items, cache.GetByName<GearData>("AutoGun")), FirstGunCell));
@ -137,7 +137,7 @@ public sealed class StatResolverTests : IDisposable
{ {
var capacity = new PerformanceStat { Min = 1, Max = 1 }; var capacity = new PerformanceStat { Min = 1, Max = 1 };
using var cache = OpenCatalog(new CapacitorData { Capacity = capacity }); using var cache = OpenCatalog(new CapacitorData { Capacity = capacity });
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var shipA = BuildActivatedShip(cache, items, withBooster: false); var shipA = BuildActivatedShip(cache, items, withBooster: false);
var shipB = BuildActivatedShip(cache, items, withBooster: false); var shipB = BuildActivatedShip(cache, items, withBooster: false);
@ -159,7 +159,7 @@ public sealed class StatResolverTests : IDisposable
Type = StatModifierType.Constant Type = StatModifierType.Constant
}; };
using var cache = OpenCatalog(new CapacitorData { Capacity = capacity }, modifier); using var cache = OpenCatalog(new CapacitorData { Capacity = capacity }, modifier);
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var boosted = BuildActivatedShip(cache, items, withBooster: true); var boosted = BuildActivatedShip(cache, items, withBooster: true);
var plain = BuildActivatedShip(cache, items, withBooster: false); var plain = BuildActivatedShip(cache, items, withBooster: false);
@ -198,7 +198,7 @@ public sealed class StatResolverTests : IDisposable
Type = StatModifierType.Constant Type = StatModifierType.Constant
}; };
using var cache = OpenCatalog(new CapacitorData { Capacity = capacity }, modifier); using var cache = OpenCatalog(new CapacitorData { Capacity = capacity }, modifier);
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var ship = BuildActivatedShip(cache, items, withBooster: true); var ship = BuildActivatedShip(cache, items, withBooster: true);
var boosterEquipped = ship.Equipment.Single(e => e.Data.Name == "Booster"); var boosterEquipped = ship.Equipment.Single(e => e.Data.Name == "Booster");
@ -234,7 +234,7 @@ public sealed class StatResolverTests : IDisposable
{ {
var capacity = new PerformanceStat { Min = 1, Max = 1 }; var capacity = new PerformanceStat { Min = 1, Max = 1 };
using var cache = OpenCatalog(new CapacitorData { Capacity = capacity }); using var cache = OpenCatalog(new CapacitorData { Capacity = capacity });
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
WeakReference EquipEvaluateAndDrop() WeakReference EquipEvaluateAndDrop()
{ {
@ -281,7 +281,7 @@ public sealed class StatResolverTests : IDisposable
}); });
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
var hullItem = Mint(cache, items, cache.GetByName<HullData>("Skiff")); var hullItem = Mint(cache, items, cache.GetByName<HullData>("Skiff"));
var ship = new Ship(items, zone, hullItem, new EntitySettings()); var ship = new Ship(items, zone, hullItem, new EntitySettings());
@ -387,7 +387,7 @@ public sealed class StatResolverTests : IDisposable
{ {
var capacity = new PerformanceStat { Min = 1, Max = 1 }; var capacity = new PerformanceStat { Min = 1, Max = 1 };
using var cache = OpenCatalog(new CapacitorData { Capacity = capacity }); using var cache = OpenCatalog(new CapacitorData { Capacity = capacity });
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var ship = BuildActivatedShip(cache, items, withBooster: false); var ship = BuildActivatedShip(cache, items, withBooster: false);
var resolver = ship.Resolver; var resolver = ship.Resolver;
@ -424,7 +424,7 @@ public sealed class StatResolverTests : IDisposable
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var boosterData = cache.Get(boosterRef); var boosterData = cache.Get(boosterRef);
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var ship = BuildActivatedShip(cache, items, withBooster: false); var ship = BuildActivatedShip(cache, items, withBooster: false);
var resolver = ship.Resolver; var resolver = ship.Resolver;
@ -498,7 +498,7 @@ public sealed class StatResolverTests : IDisposable
cache.Upsert(new ConsumableItemData { Name = "Stim", Duration = 1f, Shape = new Shape(), Behaviors = { ThrustModifier(consumable.Value.Type, consumable.Value.Value) } }); cache.Upsert(new ConsumableItemData { Name = "Stim", Duration = 1f, Shape = new Shape(), Behaviors = { ThrustModifier(consumable.Value.Type, consumable.Value.Value) } });
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
var ship = new Ship(items, zone, Mint(cache, items, cache.GetByName<HullData>("Skiff")), new EntitySettings()); var ship = new Ship(items, zone, Mint(cache, items, cache.GetByName<HullData>("Skiff")), new EntitySettings());
Assert.True(ship.TryEquip(Mint(cache, items, cache.GetByName<GearData>("Engine")), cells[0])); Assert.True(ship.TryEquip(Mint(cache, items, cache.GetByName<GearData>("Engine")), cells[0]));

View file

@ -56,7 +56,7 @@ public sealed class StationPlacementTests : IDisposable
authored.Read<SectorBackgroundSettings>("TutorialBackgroundSettings"), authored.Read<SectorBackgroundSettings>("TutorialBackgroundSettings"),
cache, new PlayerSettings(), cache, new PlayerSettings(),
Directory.CreateDirectory(Path.Combine(dir, "Narrative")), _ => { }, null, seed); Directory.CreateDirectory(Path.Combine(dir, "Narrative")), _ => { }, null, seed);
var items = new ItemManager(cache, new ProvenanceLedger(), settings, _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), settings, _ => { });
stock?.Invoke(items); stock?.Invoke(items);
foreach (var galaxyZone in entranceOnly ? new[] { galaxy.Entrance } : galaxy.Zones.Take(zonesPerSeed)) foreach (var galaxyZone in entranceOnly ? new[] { galaxy.Entrance } : galaxy.Zones.Take(zonesPerSeed))
{ {

View file

@ -37,7 +37,7 @@ public sealed class StationServicesTests : IDisposable
_cache.FlushAsync().Wait(); _cache.FlushAsync().Wait();
var settings = AuthoredSettings.Load(RestoredHullsTests.FindRepoRoot()).Read<GameplaySettings>("GameplaySettings"); var settings = AuthoredSettings.Load(RestoredHullsTests.FindRepoRoot()).Read<GameplaySettings>("GameplaySettings");
_items = new ItemManager(_cache, new ProvenanceLedger(), settings, _ => { }); _items = new ItemManager(1u, _cache, new ProvenanceLedger(), settings, _ => { });
_zone = new Zone(_items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); _zone = new Zone(_items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
} }

View file

@ -185,7 +185,7 @@ public sealed class SunsNeverGreenTests : IDisposable
var galaxy = new Galaxy(tutorial, authored.Read<SectorBackgroundSettings>("TutorialBackgroundSettings"), var galaxy = new Galaxy(tutorial, authored.Read<SectorBackgroundSettings>("TutorialBackgroundSettings"),
cache, new PlayerSettings(), cache, new PlayerSettings(),
Directory.CreateDirectory(Path.Combine(dir, "Narrative")), _ => { }, null, seed); Directory.CreateDirectory(Path.Combine(dir, "Narrative")), _ => { }, null, seed);
var items = new ItemManager(cache, new ProvenanceLedger(), authored.Read<GameplaySettings>("GameplaySettings"), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), authored.Read<GameplaySettings>("GameplaySettings"), _ => { });
var zoneSettings = authored.Read<ZoneGenerationSettings>("ZoneSettings"); var zoneSettings = authored.Read<ZoneGenerationSettings>("ZoneSettings");
adjust(zoneSettings); adjust(zoneSettings);
foreach (var zone in galaxy.Zones) foreach (var zone in galaxy.Zones)

View file

@ -104,7 +104,7 @@ public sealed class TargetingSystemTests : IDisposable
ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 }; // wide ledger.Lots[3] = new Lot { Origin = new Attributed(), Quality = 1 }; // wide
ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 }; // narrow ledger.Lots[4] = new Lot { Origin = new Attributed(), Quality = 1 }; // narrow
ledger.Lots[5] = new Lot { Origin = new Attributed(), Quality = 1 }; // targeting (unused unless authored above) ledger.Lots[5] = new Lot { Origin = new Attributed(), Quality = 1 }; // targeting (unused unless authored above)
var items = new ItemManager(_openCache, ledger, settings, _ => { }); var items = new ItemManager(1u, _openCache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("TestHull")); var hullRef = items.ItemData.RefOf<ItemData>(items.ItemData.GetByName<HullData>("TestHull"));
@ -368,7 +368,7 @@ public sealed class TargetingSystemTests : IDisposable
Ship BuildShip(float reactorCharge, out ItemManager items) Ship BuildShip(float reactorCharge, out ItemManager items)
{ {
items = new ItemManager(cache, new ProvenanceLedger(), TestSettings(), _ => { }); items = new ItemManager(1u, cache, new ProvenanceLedger(), TestSettings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
var hullData = cache.GetByName<HullData>("Skiff"); var hullData = cache.GetByName<HullData>("Skiff");
var hull = Mint(hullData); var hull = Mint(hullData);
@ -439,7 +439,7 @@ public sealed class TargetingSystemTests : IDisposable
for (var seed = 1; seed <= 10; seed++) for (var seed = 1; seed <= 10; seed++)
{ {
var random = new Random((uint) seed); var random = new Random((uint) seed);
var items = new ItemManager(cache, new ProvenanceLedger(), TestSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), TestSettings(), _ => { });
var generator = new LoadoutGenerator(ref random, items, null, null, null, .5f); var generator = new LoadoutGenerator(ref random, items, null, null, null, .5f);
var pack = generator.GenerateShipLoadout(candidate => candidate.Name == "Armed"); var pack = generator.GenerateShipLoadout(candidate => candidate.Name == "Armed");
Assert.NotNull(pack); Assert.NotNull(pack);

View file

@ -84,7 +84,7 @@ public sealed class ThrottleLockTests : IDisposable
cache.Upsert(lockData); cache.Upsert(lockData);
cache.FlushAsync().Wait(); cache.FlushAsync().Wait();
var items = new ItemManager(cache, new ProvenanceLedger(), Settings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), Settings(), _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack(), new GalaxyZone { Name = "Test Zone", Owner = null }, null);
var ship = new Ship(items, zone, Mint(cache, items, cache.GetByName<HullData>("Skiff")), new EntitySettings()); var ship = new Ship(items, zone, Mint(cache, items, cache.GetByName<HullData>("Skiff")), new EntitySettings());
var gear = cache.GetByName<GearData>("Thruster"); var gear = cache.GetByName<GearData>("Thruster");

View file

@ -104,7 +104,7 @@ public sealed class VapourCloudTests : IDisposable
var ledger = new ProvenanceLedger(); var ledger = new ProvenanceLedger();
for (var i = 1; i <= 50; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 }; for (var i = 1; i <= 50; i++) ledger.Lots[i] = new Lot { Origin = new Attributed(), Quality = 1 };
var items = new ItemManager(cache, ledger, settings, _ => { }); var items = new ItemManager(1u, cache, ledger, settings, _ => { });
var zone = new Zone(items, new PlanetSettings(), new ZonePack { Radius = 5000 }, new GalaxyZone { Name = "Vapour", Owner = null }, null); var zone = new Zone(items, new PlanetSettings(), new ZonePack { Radius = 5000 }, new GalaxyZone { Name = "Vapour", Owner = null }, null);
var lab = new Lab { Items = items, Zone = zone }; var lab = new Lab { Items = items, Zone = zone };

View file

@ -71,7 +71,7 @@ public sealed class ZonePlacedAtBuildTests : IDisposable
foreach (var cell in shape.AllCoordinates) shape[cell] = true; foreach (var cell in shape.AllCoordinates) shape[cell] = true;
var hull = new HullData { Name = "Skiff", HullType = HullType.Ship, Shape = shape, Durability = 10, Mass = 1000 }; var hull = new HullData { Name = "Skiff", HullType = HullType.Ship, Shape = shape, Durability = 10, Mass = 1000 };
cache.Upsert(hull); cache.Upsert(hull);
var items = new ItemManager(cache, new ProvenanceLedger(), GameSettings(), _ => { }); var items = new ItemManager(1u, cache, new ProvenanceLedger(), GameSettings(), _ => { });
var rootOrbit = cache.Upsert(new OrbitData { FixedPosition = RootAt }).Key; var rootOrbit = cache.Upsert(new OrbitData { FixedPosition = RootAt }).Key;
var planetOrbit = cache.Upsert(new OrbitData var planetOrbit = cache.Upsert(new OrbitData

View file

@ -80,6 +80,6 @@ internal sealed class ZoneWorlds : IDisposable
Directory.CreateDirectory(dir); Directory.CreateDirectory(dir);
var cache = AetheriaStores.Open(Path.Combine(dir, "Aetheria.cc"), Path.Combine(dir, "run.cc"), catalogWritable: true); var cache = AetheriaStores.Open(Path.Combine(dir, "Aetheria.cc"), Path.Combine(dir, "run.cc"), catalogWritable: true);
Caches.Add(cache); Caches.Add(cache);
return new World { Cache = cache, Items = new ItemManager(cache, new ProvenanceLedger(), GameSettings(), _ => { }) }; return new World { Cache = cache, Items = new ItemManager(1u, cache, new ProvenanceLedger(), GameSettings(), _ => { }) };
} }
} }

View file

@ -807,7 +807,8 @@ public static class Program
}; };
var log = new List<string>(); var log = new List<string>();
var itemManager = new ItemManager(db.Cache, new ProvenanceLedger(), settings, log.Add); // A fixed seed: the catalog command's output must not depend on the clock.
var itemManager = new ItemManager(1u, db.Cache, new ProvenanceLedger(), settings, log.Add);
var failures = 0; var failures = 0;
var targetingGaps = 0; var targetingGaps = 0;