Fix broken bridges being initialized with a non-zero HP value

This commit is contained in:
Oliver Brakmann
2015-05-23 19:34:24 +02:00
parent 78f1e9fb2f
commit d9f0ca362f
2 changed files with 16 additions and 6 deletions

View File

@@ -41,11 +41,9 @@ namespace OpenRA.Traits
public Health(ActorInitializer init, HealthInfo info) public Health(ActorInitializer init, HealthInfo info)
{ {
Info = info; Info = info;
MaxHP = info.HP; MaxHP = info.HP > 0 ? info.HP : 1;
hp = init.Contains<HealthInit>() ? init.Get<HealthInit, int>() * MaxHP / 100 : MaxHP; hp = init.Contains<HealthInit>() ? init.Get<HealthInit, int>() * MaxHP / 100 : MaxHP;
if (hp <= 0)
hp = Math.Max(MaxHP / 100, 1);
DisplayHp = hp; DisplayHp = hp;
} }
@@ -176,9 +174,21 @@ namespace OpenRA.Traits
public class HealthInit : IActorInit<int> public class HealthInit : IActorInit<int>
{ {
[FieldFromYamlKey] readonly int value = 100; [FieldFromYamlKey] readonly int value = 100;
readonly bool allowZero = false;
public HealthInit() { } public HealthInit() { }
public HealthInit(int init) { value = init; } public HealthInit(int init, bool allowZero = false)
public int Value(World world) { return value; } {
this.allowZero = allowZero;
value = init;
}
public int Value(World world)
{
if (value < 0 || (value == 0 && !allowZero))
return 1;
return value;
}
} }
public static class HealthExts public static class HealthExts

View File

@@ -83,7 +83,7 @@ namespace OpenRA.Mods.Common.Traits
{ {
new LocationInit(new CPos(ni, nj)), new LocationInit(new CPos(ni, nj)),
new OwnerInit(w.WorldActor.Owner), new OwnerInit(w.WorldActor.Owner),
new HealthInit(bridgeTypes[tile].Second), new HealthInit(bridgeTypes[tile].Second, true),
}).Trait<Bridge>(); }).Trait<Bridge>();
var subTiles = new Dictionary<CPos, byte>(); var subTiles = new Dictionary<CPos, byte>();