public bool TryAddDelta(ResourceDelta delta) { AddDelta(delta); if (this.NextAmount >= 0 && this.NextAmount <= MaxAmount) { return(true); } RemoveDelta(delta); return(false); }
private void EnsureUpkeepIsMet(Rocket rocket) { foreach (KeyValuePair <ResourceType, ResourceStorage> resourceStorage in ResourcesStorage.ResourceStorages) { if (resourceStorage.Value.NextAmount >= 0) { continue; } var shortfall = new ResourceDelta(resourceStorage.Key, -resourceStorage.Value.NextAmount); if (!rocket.TryAddCargo(new[] { shortfall })) { // There's not enough space on the rocket to handle upkeep! // TODO it needs to be impossible to get into this state, or something's gotta give. throw new Exception(); } ResourcesStorage.AddDelta(shortfall); } }
public void HappyCase() { ResourceStorage storage = new ResourceStorage(100); storage.AddDelta(new ResourceDelta(ResourceType.Air, 50)); storage.AddDelta(new ResourceDelta(ResourceType.Air, -20)); ResourceDelta temporary = new ResourceDelta(ResourceType.Air, -40); storage.AddDelta(temporary); Assert.AreEqual(0, storage.CurrentAmount); Assert.AreEqual(-10, storage.NextAmount); storage.RemoveDelta(temporary); Assert.AreEqual(0, storage.CurrentAmount); Assert.AreEqual(30, storage.NextAmount); storage.Tick(); Assert.AreEqual(30, storage.CurrentAmount); Assert.AreEqual(30, storage.NextAmount); }
public void AddDelta(ResourceDelta delta) { ResourceStorages[delta.Type].AddDelta(delta); }
public void ModifyResources(ResourceDelta resourceModification) { Resources.AddFood(resourceModification.Food); Resources.AddOre(resourceModification.Ore); Resources.AddTech(resourceModification.Tech); }
public void ApplyImmediate(ResourceDelta delta) { Resource resource = GetResource(delta.Type); resource.Amount += delta.Amount; }
public void ApplyNextCycle(ResourceDelta delta) { Resource resource = GetResource(delta.Type); resource.ChangeNextCycle += delta.Amount; }
public bool CanApplyImmediate(ResourceDelta delta) { Resource resource = GetResource(delta.Type); return(resource.Amount + delta.Amount >= 0); }
public bool CanApplyNextCycle(ResourceDelta delta) { Resource resource = GetResource(delta.Type); return(resource.Amount + resource.ChangeNextCycle + delta.Amount >= 0); }
public void RemoveDelta(ResourceDelta delta) => this.nextTickDeltas.Remove(delta);
public void AddDelta(ResourceDelta delta) => this.nextTickDeltas.Add(delta);
public void RemoveUpkeepDelta(ResourceDelta upkeep) { upkeepDeltas.Remove(upkeep); CalculateNextTurn(); }
public void AddUpkeepDelta(ResourceDelta upkeep) { upkeepDeltas.Add(upkeep); CalculateNextTurn(); }