public void GiveResource(int amount) { amount = Util.ApplyPercentageModifiers(amount, resourceMultipliers.Select(m => m.GetModifier())); if (info.UseStorage) { if (info.DiscardExcessResources) { amount = Math.Min(amount, playerResources.ResourceCapacity - playerResources.Resources); } playerResources.GiveResources(amount); } else { amount = playerResources.ChangeCash(amount); } foreach (var notify in self.World.ActorsWithTrait <INotifyResourceAccepted>()) { if (notify.Actor.Owner != self.Owner) { continue; } notify.Trait.OnResourceAccepted(notify.Actor, self, amount); } if (info.ShowTicks) { currentDisplayValue += amount; } }
public void GiveResource(int amount) { if (info.UseStorage) { if (info.DiscardExcessResources) { amount = Math.Min(amount, playerResources.ResourceCapacity - playerResources.Resources); } playerResources.GiveResources(amount); } else { amount = playerResources.ChangeCash(amount); } var purifiers = self.World.ActorsWithTrait <IResourcePurifier>().Where(x => x.Actor.Owner == self.Owner).Select(x => x.Trait); foreach (var p in purifiers) { p.RefineAmount(amount); } if (info.ShowTicks) { currentDisplayValue += amount; } }
void ModifyCash(Actor self, Player newOwner, int amount) { amount = resources.ChangeCash(amount); if (info.ShowTicks && amount != 0) { AddCashTick(self, amount); } }
int IAcceptResources.AcceptResources(string resourceType, int count) { if (!playerResources.Info.ResourceValues.TryGetValue(resourceType, out var resourceValue)) { return(0); } var value = Util.ApplyPercentageModifiers(count * resourceValue, resourceValueModifiers); if (info.UseStorage) { var storageLimit = Math.Max(playerResources.ResourceCapacity - playerResources.Resources, 0); if (!info.DiscardExcessResources) { // Reduce amount if needed until it will fit the available storage while (value > storageLimit) { value = Util.ApplyPercentageModifiers(--count * resourceValue, resourceValueModifiers); } } else { value = Math.Min(value, playerResources.ResourceCapacity - playerResources.Resources); } playerResources.GiveResources(value); } else { value = playerResources.ChangeCash(value); } foreach (var notify in self.World.ActorsWithTrait <INotifyResourceAccepted>()) { if (notify.Actor.Owner != self.Owner) { continue; } notify.Trait.OnResourceAccepted(notify.Actor, self, resourceType, count, value); } if (info.ShowTicks) { currentDisplayValue += value; } return(count); }
public void GiveResource(int amount) { amount = Util.ApplyPercentageModifiers(amount, resourceMultipliers.Select(m => m.GetModifier())); if (info.UseStorage) { if (info.DiscardExcessResources) { amount = Math.Min(amount, playerResources.ResourceCapacity - playerResources.Resources); } playerResources.GiveResources(amount); } else { amount = playerResources.ChangeCash(amount); } foreach (var notify in self.World.ActorsWithTrait <INotifyResourceAccepted>()) { if (notify.Actor.Owner != self.Owner) { continue; } notify.Trait.OnResourceAccepted(notify.Actor, self, amount); } foreach (var rrd in refineryResourceDelivereds) { rrd.ResourceGiven(self, amount); } var purifiers = self.World.ActorsWithTrait <IResourcePurifier>().Where(x => x.Actor.Owner == self.Owner).Select(x => x.Trait); foreach (var p in purifiers) { p.RefineAmount(amount); } if (info.ShowTicks) { currentDisplayValue += amount; } }
void ModifyCash(Actor self, Player newOwner, int amount) { if (info.UseResourceStorage) { var initialAmount = resources.Resources; resources.GiveResources(amount); amount = resources.Resources - initialAmount; } else { amount = resources.ChangeCash(amount); } if (info.ShowTicks && amount != 0) { AddCashTick(self, amount); } }
public void GiveResource(int amount) { if (info.UseStorage) { if (info.DiscardExcessResources) { amount = Math.Min(amount, playerResources.ResourceCapacity - playerResources.Resources); } playerResources.GiveResources(amount); } else { amount = playerResources.ChangeCash(amount); } if (info.ShowTicks) { currentDisplayValue += amount; } }