Spend ore before cash; lose ore > capacity.
This commit is contained in:
@@ -17,8 +17,6 @@ namespace OpenRA.Traits
|
|||||||
{
|
{
|
||||||
Player Owner;
|
Player Owner;
|
||||||
int AdviceInterval;
|
int AdviceInterval;
|
||||||
int nextSiloAdviceTime = 0;
|
|
||||||
int nextPowerAdviceTime = 0;
|
|
||||||
public PlayerResources(Actor self)
|
public PlayerResources(Actor self)
|
||||||
{
|
{
|
||||||
var p = self.Owner;
|
var p = self.Owner;
|
||||||
@@ -44,88 +42,18 @@ namespace OpenRA.Traits
|
|||||||
public int PowerProvided;
|
public int PowerProvided;
|
||||||
[Sync]
|
[Sync]
|
||||||
public int PowerDrained;
|
public int PowerDrained;
|
||||||
|
|
||||||
void UpdatePower()
|
|
||||||
{
|
|
||||||
var oldBalance = PowerProvided - PowerDrained;
|
|
||||||
|
|
||||||
PowerProvided = 0;
|
|
||||||
PowerDrained = 0;
|
|
||||||
|
|
||||||
var myBuildings = Owner.World.Queries.OwnedBy[Owner].WithTrait<Building>();
|
|
||||||
|
|
||||||
foreach (var a in myBuildings)
|
|
||||||
{
|
|
||||||
var q = a.Trait.GetPowerUsage();
|
|
||||||
if (q > 0)
|
|
||||||
PowerProvided += q;
|
|
||||||
else
|
|
||||||
PowerDrained -= q;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PowerProvided - PowerDrained < 0)
|
|
||||||
if (PowerProvided - PowerDrained != oldBalance)
|
|
||||||
nextPowerAdviceTime = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PowerState GetPowerState()
|
|
||||||
{
|
|
||||||
if (PowerProvided >= PowerDrained) return PowerState.Normal;
|
|
||||||
if (PowerProvided > PowerDrained / 2) return PowerState.Low;
|
|
||||||
return PowerState.Critical;
|
|
||||||
}
|
|
||||||
|
|
||||||
public float GetSiloFullness() { return (float)Ore / OreCapacity; }
|
|
||||||
|
|
||||||
public void GiveOre(int num)
|
|
||||||
{
|
|
||||||
Ore += num;
|
|
||||||
|
|
||||||
if (Ore > OreCapacity)
|
|
||||||
{
|
|
||||||
nextSiloAdviceTime = 0;
|
|
||||||
Ore = OreCapacity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void GiveCash(int num)
|
|
||||||
{
|
|
||||||
Cash += num;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool TakeCash(int num)
|
|
||||||
{
|
|
||||||
if (Cash + Ore < num) return false;
|
|
||||||
|
|
||||||
// Spend cash before spending ore
|
|
||||||
Cash -= num;
|
|
||||||
if (Cash < 0)
|
|
||||||
{
|
|
||||||
Ore += Cash;
|
|
||||||
Cash = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
const float displayCashFracPerFrame = .07f;
|
const float displayCashFracPerFrame = .07f;
|
||||||
const int displayCashDeltaPerFrame = 37;
|
const int displayCashDeltaPerFrame = 37;
|
||||||
|
int nextSiloAdviceTime = 0;
|
||||||
public void Tick(Actor self)
|
void TickOre(Actor self)
|
||||||
{
|
{
|
||||||
UpdatePower();
|
|
||||||
|
|
||||||
if (--nextPowerAdviceTime <= 0)
|
|
||||||
{
|
|
||||||
if (PowerProvided - PowerDrained < 0)
|
|
||||||
Owner.GiveAdvice(Rules.Info["world"].Traits.Get<EvaAlertsInfo>().LowPower);
|
|
||||||
|
|
||||||
nextPowerAdviceTime = AdviceInterval;
|
|
||||||
}
|
|
||||||
|
|
||||||
OreCapacity = self.World.Queries.OwnedBy[Owner].WithTrait<StoresOre>()
|
OreCapacity = self.World.Queries.OwnedBy[Owner].WithTrait<StoresOre>()
|
||||||
.Sum(a => a.Actor.Info.Traits.Get<StoresOreInfo>().Capacity);
|
.Sum(a => a.Actor.Info.Traits.Get<StoresOreInfo>().Capacity);
|
||||||
|
|
||||||
|
if (Ore > OreCapacity)
|
||||||
|
Ore = OreCapacity;
|
||||||
|
|
||||||
if (--nextSiloAdviceTime <= 0)
|
if (--nextSiloAdviceTime <= 0)
|
||||||
{
|
{
|
||||||
if (Ore > 0.8*OreCapacity)
|
if (Ore > 0.8*OreCapacity)
|
||||||
@@ -164,6 +92,84 @@ namespace OpenRA.Traits
|
|||||||
DisplayOre -= move;
|
DisplayOre -= move;
|
||||||
//Sound.PlayToPlayer(self.Owner, eva.CashTickDown);
|
//Sound.PlayToPlayer(self.Owner, eva.CashTickDown);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int nextPowerAdviceTime = 0;
|
||||||
|
void TickPower()
|
||||||
|
{
|
||||||
|
var oldBalance = PowerProvided - PowerDrained;
|
||||||
|
|
||||||
|
PowerProvided = 0;
|
||||||
|
PowerDrained = 0;
|
||||||
|
|
||||||
|
var myBuildings = Owner.World.Queries.OwnedBy[Owner].WithTrait<Building>();
|
||||||
|
|
||||||
|
foreach (var a in myBuildings)
|
||||||
|
{
|
||||||
|
var q = a.Trait.GetPowerUsage();
|
||||||
|
if (q > 0)
|
||||||
|
PowerProvided += q;
|
||||||
|
else
|
||||||
|
PowerDrained -= q;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PowerProvided - PowerDrained < 0)
|
||||||
|
if (PowerProvided - PowerDrained != oldBalance)
|
||||||
|
nextPowerAdviceTime = 0;
|
||||||
|
|
||||||
|
if (--nextPowerAdviceTime <= 0)
|
||||||
|
{
|
||||||
|
if (PowerProvided - PowerDrained < 0)
|
||||||
|
Owner.GiveAdvice(Rules.Info["world"].Traits.Get<EvaAlertsInfo>().LowPower);
|
||||||
|
|
||||||
|
nextPowerAdviceTime = AdviceInterval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public PowerState GetPowerState()
|
||||||
|
{
|
||||||
|
if (PowerProvided >= PowerDrained) return PowerState.Normal;
|
||||||
|
if (PowerProvided > PowerDrained / 2) return PowerState.Low;
|
||||||
|
return PowerState.Critical;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float GetSiloFullness() { return (float)Ore / OreCapacity; }
|
||||||
|
|
||||||
|
public void GiveOre(int num)
|
||||||
|
{
|
||||||
|
Ore += num;
|
||||||
|
|
||||||
|
if (Ore > OreCapacity)
|
||||||
|
{
|
||||||
|
nextSiloAdviceTime = 0;
|
||||||
|
Ore = OreCapacity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GiveCash(int num)
|
||||||
|
{
|
||||||
|
Cash += num;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool TakeCash(int num)
|
||||||
|
{
|
||||||
|
if (Cash + Ore < num) return false;
|
||||||
|
|
||||||
|
// Spend ore before cash
|
||||||
|
Ore -= num;
|
||||||
|
if (Ore < 0)
|
||||||
|
{
|
||||||
|
Cash += Ore;
|
||||||
|
Ore = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Tick(Actor self)
|
||||||
|
{
|
||||||
|
TickPower();
|
||||||
|
TickOre(self);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user