Implement HarvesterResourceMultiplier.

This commit is contained in:
Zimmermann Gyula
2018-06-20 11:36:06 +02:00
committed by abcdefg30
parent ef47a3394f
commit 71acfaf014
2 changed files with 36 additions and 1 deletions

View File

@@ -95,6 +95,7 @@ namespace OpenRA.Mods.Common.Traits
INotifyHarvesterAction[] notifyHarvesterAction;
ConditionManager conditionManager;
int conditionToken = ConditionManager.InvalidConditionToken;
HarvesterResourceMultiplier[] resourceMultipliers;
[Sync] public bool LastSearchFailed;
[Sync] public Actor OwnerLinkedProc = null;
@@ -127,6 +128,7 @@ namespace OpenRA.Mods.Common.Traits
void INotifyCreated.Created(Actor self)
{
notifyHarvesterAction = self.TraitsImplementing<INotifyHarvesterAction>().ToArray();
resourceMultipliers = self.TraitsImplementing<HarvesterResourceMultiplier>().ToArray();
conditionManager = self.TraitOrDefault<ConditionManager>();
UpdateCondition(self);
@@ -249,7 +251,7 @@ namespace OpenRA.Mods.Common.Traits
var type = contents.First().Key;
var iao = proc.Trait<IAcceptResources>();
var count = Math.Min(contents[type], Info.BaleUnloadAmount);
var value = type.ValuePerUnit * count;
var value = Util.ApplyPercentageModifiers(type.ValuePerUnit * count, resourceMultipliers.Select(m => m.GetModifier()));
if (!iao.CanGiveResource(value))
return false;

View File

@@ -0,0 +1,33 @@
#region Copyright & License Information
/*
* Copyright 2007-2019 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version. For more
* information, see COPYING.
*/
#endregion
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits
{
[Desc("Modifies the bale values of this harvester.")]
public class HarvesterResourceMultiplierInfo : ConditionalTraitInfo
{
[FieldLoader.Require]
[Desc("Percentage modifier to apply.")]
public readonly int Modifier = 100;
public override object Create(ActorInitializer init) { return new HarvesterResourceMultiplier(this); }
}
public class HarvesterResourceMultiplier : ConditionalTrait<HarvesterResourceMultiplierInfo>, Requires<HarvesterInfo>
{
public HarvesterResourceMultiplier(HarvesterResourceMultiplierInfo info)
: base(info) { }
public int GetModifier() { return IsTraitDisabled ? 100 : Info.Modifier; }
}
}