diff --git a/isometric-park-fna/Engines/Spawners/ContractSpawner.cs b/isometric-park-fna/Engines/Spawners/ContractSpawner.cs --- a/isometric-park-fna/Engines/Spawners/ContractSpawner.cs +++ b/isometric-park-fna/Engines/Spawners/ContractSpawner.cs @@ -15,7 +15,8 @@ namespace isometricparkfna.Spawners { [Receives(typeof(SpawnContractMessage))] - [Reads(typeof(AreaComponent), typeof(ContractStatusComponent))] + [Reads(typeof(AreaComponent), typeof(ContractStatusComponent), + typeof(OffersContractsComponent))] class ContractSpawner : Spawner { private Random random_generator; @@ -91,6 +92,10 @@ //for now: var occupied = new List(); + var contractOrganizations = ReadEntities().ToArray(); + + var contractCount = contractOrganizations.Count(); + foreach (var (entity, status) in ReadEntities().SelectWhereF((e) => (e, GetComponent(e)), (e) => (e.Item2.status != ContractStatus.Expired)) @@ -132,6 +137,12 @@ AddComponent(contract, new ImageComponent {ImageIndex = image_index}); AddComponent(contract, new WindowTypeComponent { type = Window.Contract}); AddComponent(contract, new VisibilityComponent { visible = false}); + + if (contractCount > 0) + { + var organization_index = random_generator.Next(0, contractCount); + AddComponent(contract, new RelatedOrganizationComponent { Entity = contractOrganizations[organization_index] }); + } } } diff --git a/isometric-park-fna/FNAGame.cs b/isometric-park-fna/FNAGame.cs --- a/isometric-park-fna/FNAGame.cs +++ b/isometric-park-fna/FNAGame.cs @@ -219,6 +219,7 @@ WorldBuilder.AddEngine(new ContractStatusEngine(this.simulation)); WorldBuilder.AddEngine(new ContractSpawner(simulation.map.MapWidth, simulation.map.MapHeight, this.simulation, this.grammar)); + WorldBuilder.AddEngine(new OrganizationSpawner(this.simulation, this.grammar)); WorldBuilder.AddGeneralRenderer(new AreaRenderer(this.batch, this.monoFont), 1); WorldBuilder.AddGeneralRenderer(new ImGuiWindowRenderer(debugWindow.monoFont, this.imGuiWindowBridgeEngine), 2); @@ -253,6 +254,12 @@ } } + + for (int i = 0; i < 10; i++) + { + + WorldBuilder.SendMessage(new SpawnOrganizationtMessage { offersContracts = true }); + } WorldBuilder.SendMessage(new SpawnContractMessage { squares = squares, diff --git a/isometric-park-fna/Renderers/ImGuiWindowRenderer.cs b/isometric-park-fna/Renderers/ImGuiWindowRenderer.cs --- a/isometric-park-fna/Renderers/ImGuiWindowRenderer.cs +++ b/isometric-park-fna/Renderers/ImGuiWindowRenderer.cs @@ -33,6 +33,15 @@ var amount = GetComponent(entity).amount; var tree_delta = GetComponent(entity).deltaTreesName; var image_index = GetComponent(entity).ImageIndex; + + + if (HasComponent(entity)) + { + var related_organization = GetComponent(entity).Entity; + + name = GetComponent(related_organization).DisplayName; + } + return (entity, name, status, amount, tree_delta, image_index); }