コード例 #1
0
    public bool TryAddDelta(ResourceDelta delta)
    {
        AddDelta(delta);
        if (this.NextAmount >= 0 && this.NextAmount <= MaxAmount)
        {
            return(true);
        }

        RemoveDelta(delta);
        return(false);
    }
コード例 #2
0
    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);
        }
    }
コード例 #3
0
    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);
    }
コード例 #4
0
 public void AddDelta(ResourceDelta delta)
 {
     ResourceStorages[delta.Type].AddDelta(delta);
 }
コード例 #5
0
 public void ModifyResources(ResourceDelta resourceModification)
 {
     Resources.AddFood(resourceModification.Food);
     Resources.AddOre(resourceModification.Ore);
     Resources.AddTech(resourceModification.Tech);
 }
コード例 #6
0
ファイル: ResourceCollection.cs プロジェクト: knexer/Apophis
    public void ApplyImmediate(ResourceDelta delta)
    {
        Resource resource = GetResource(delta.Type);

        resource.Amount += delta.Amount;
    }
コード例 #7
0
ファイル: ResourceCollection.cs プロジェクト: knexer/Apophis
    public void ApplyNextCycle(ResourceDelta delta)
    {
        Resource resource = GetResource(delta.Type);

        resource.ChangeNextCycle += delta.Amount;
    }
コード例 #8
0
ファイル: ResourceCollection.cs プロジェクト: knexer/Apophis
    public bool CanApplyImmediate(ResourceDelta delta)
    {
        Resource resource = GetResource(delta.Type);

        return(resource.Amount + delta.Amount >= 0);
    }
コード例 #9
0
ファイル: ResourceCollection.cs プロジェクト: knexer/Apophis
    public bool CanApplyNextCycle(ResourceDelta delta)
    {
        Resource resource = GetResource(delta.Type);

        return(resource.Amount + resource.ChangeNextCycle + delta.Amount >= 0);
    }
コード例 #10
0
 public void RemoveDelta(ResourceDelta delta) => this.nextTickDeltas.Remove(delta);
コード例 #11
0
 public void AddDelta(ResourceDelta delta) => this.nextTickDeltas.Add(delta);
コード例 #12
0
 public void RemoveUpkeepDelta(ResourceDelta upkeep)
 {
     upkeepDeltas.Remove(upkeep);
     CalculateNextTurn();
 }
コード例 #13
0
 public void AddUpkeepDelta(ResourceDelta upkeep)
 {
     upkeepDeltas.Add(upkeep);
     CalculateNextTurn();
 }