// STITCHME It might be valuable to eventually have InGameState be able to say which nodes are reachable? // STITCHME It could be nice to keep track of all canResets in the room and evaluate them as you move around? // Another option would be to have something in an initialization phase that converts canResets into just names, // and adds information on nodes and strats that they invalidate the canReset. // We'll see when we get to the step of reducing logical elements *shrug* /// <summary> /// Creates a new InGameState /// </summary> /// <param name="model">A SuperMetroidModel. Its rooms must have both been set and initialized. /// Its items and game flags must also have been set.</param> /// <param name="itemContainer">The result of reading the items.json file.</param> public InGameState(SuperMetroidModel model, ItemContainer itemContainer) { IEnumerable <ResourceCapacity> startingResources = itemContainer.StartingResources; Inventory = new ItemInventory(startingResources); Resources = new ResourceCount(); // Start the player at full foreach (ResourceCapacity capacity in startingResources) { Resources.ApplyAmountIncrease(capacity.Resource, capacity.MaxAmount); } // Initialize starting game flags foreach (string gameFlagName in itemContainer.StartingGameFlagNames) { ApplyAddGameFlag(model.GameFlags[gameFlagName]); } // Initialize starting items foreach (string itemName in itemContainer.StartingItemNames) { ApplyAddItem(model.Items[itemName]); } RoomNode startingNode = model.Rooms[itemContainer.StartingRoomName].Nodes[itemContainer.StartingNodeId]; InRoomState = new InRoomState(startingNode); }
/// <summary> /// A constructor that receives an enumeration of ResourceCapacity to express the base resource maximums. /// </summary> /// <param name="baseResourceMaximums">The base maximum for all resources</param> public ItemInventory(IEnumerable <ResourceCapacity> baseResourceMaximums) { ResourceCapacityChanges = new ResourceCount(); // Apply startingResources to base maximums BaseResourceMaximums = new ResourceCount(); foreach (ResourceCapacity capacity in baseResourceMaximums) { BaseResourceMaximums.ApplyAmountIncrease(capacity.Resource, capacity.MaxAmount); } }