introduce 'Valued' trait, which is almost Buildable without being buildable.

This commit is contained in:
Chris Forbes
2010-04-16 21:06:54 +12:00
parent 11c2be29bf
commit 150a83852e
6 changed files with 25 additions and 9 deletions

View File

@@ -119,7 +119,7 @@ namespace OpenRA
var actor = world.FindUnitsAtMouse(lastMousePos).FirstOrDefault(); var actor = world.FindUnitsAtMouse(lastMousePos).FirstOrDefault();
if (actor == null) return; if (actor == null) return;
var text = actor.Info.Traits.Contains<BuildableInfo>() ? actor.Info.Traits.Get<BuildableInfo>().Description : actor.Info.Name; var text = actor.Info.Traits.Contains<ValuedInfo>() ? actor.Info.Traits.Get<ValuedInfo>().Description : actor.Info.Name;
var text2 = (actor.Owner == world.LocalPlayer) var text2 = (actor.Owner == world.LocalPlayer)
? "" : (actor.Owner == world.NeutralPlayer ? "{0}" : "{0} ({1})").F(actor.Owner.PlayerName, world.LocalPlayer.Stances[actor.Owner]); ? "" : (actor.Owner == world.NeutralPlayer ? "{0}" : "{0} ({1})").F(actor.Owner.PlayerName, world.LocalPlayer.Stances[actor.Owner]);

View File

@@ -21,13 +21,13 @@ namespace OpenRA.Traits.AI
{ {
var info = self.Info.Traits.Get<EmitInfantryOnSellInfo>(); var info = self.Info.Traits.Get<EmitInfantryOnSellInfo>();
var csv = self.Info.Traits.GetOrDefault<CustomSellValueInfo>(); var csv = self.Info.Traits.GetOrDefault<CustomSellValueInfo>();
var cost = csv != null ? csv.Value : self.Info.Traits.Get<BuildableInfo>().Cost; var cost = csv != null ? csv.Value : self.Info.Traits.Get<ValuedInfo>().Cost;
var hp = self.Info.Traits.Get<OwnedActorInfo>().HP; var hp = self.Info.Traits.Get<OwnedActorInfo>().HP;
var hpFraction = Math.Max(info.MinHpFraction, hp / self.GetMaxHP()); var hpFraction = Math.Max(info.MinHpFraction, hp / self.GetMaxHP());
var dudesValue = (int)(hpFraction * info.ValueFraction * cost); var dudesValue = (int)(hpFraction * info.ValueFraction * cost);
var eligibleLocations = Footprint.Tiles(self).ToList(); var eligibleLocations = Footprint.Tiles(self).ToList();
// todo: fix this for unbuildables in ActorTypes, like civilians. // todo: fix this for unbuildables in ActorTypes, like civilians.
var actorTypes = info.ActorTypes.Select(a => new { Name = a, Cost = Rules.Info[a].Traits.Get<BuildableInfo>().Cost }).ToArray(); var actorTypes = info.ActorTypes.Select(a => new { Name = a, Cost = Rules.Info[a].Traits.Get<ValuedInfo>().Cost }).ToArray();
while (eligibleLocations.Count > 0 && actorTypes.Any(a => a.Cost <= dudesValue)) while (eligibleLocations.Count > 0 && actorTypes.Any(a => a.Cost <= dudesValue))
{ {

View File

@@ -39,7 +39,7 @@ namespace OpenRA.Traits.Activities
var hostBuilding = self.World.FindUnits(self.CenterLocation, self.CenterLocation) var hostBuilding = self.World.FindUnits(self.CenterLocation, self.CenterLocation)
.FirstOrDefault(a => a.traits.Contains<RenderBuilding>()); .FirstOrDefault(a => a.traits.Contains<RenderBuilding>());
var unitCost = self.Info.Traits.Get<BuildableInfo>().Cost; var unitCost = self.Info.Traits.Get<ValuedInfo>().Cost;
var hp = self.Info.Traits.Get<OwnedActorInfo>().HP; var hp = self.Info.Traits.Get<OwnedActorInfo>().HP;
var costPerHp = (hostBuilding.Info.Traits.Get<RepairsUnitsInfo>().URepairPercent * unitCost) / hp; var costPerHp = (hostBuilding.Info.Traits.Get<RepairsUnitsInfo>().URepairPercent * unitCost) / hp;

View File

@@ -31,7 +31,7 @@ namespace OpenRA.Traits.Activities
void DoSell(Actor self) void DoSell(Actor self)
{ {
var csv = self.Info.Traits.GetOrDefault<CustomSellValueInfo>(); var csv = self.Info.Traits.GetOrDefault<CustomSellValueInfo>();
var cost = csv != null ? csv.Value : self.Info.Traits.Get<BuildableInfo>().Cost; var cost = csv != null ? csv.Value : self.Info.Traits.Get<ValuedInfo>().Cost;
var hp = self.Info.Traits.Get<OwnedActorInfo>().HP; var hp = self.Info.Traits.Get<OwnedActorInfo>().HP;
var refund = self.World.Defaults.RefundPercent * self.Health * cost / hp; var refund = self.World.Defaults.RefundPercent * self.Health * cost / hp;

View File

@@ -20,19 +20,29 @@
namespace OpenRA.Traits namespace OpenRA.Traits
{ {
class BuildableInfo : TraitInfo<Buildable> class ValuedInfo : ITraitInfo
{
public readonly int Cost = 0;
public readonly string Description = "";
public readonly string LongDesc = "";
public virtual object Create(Actor self) { return new Valued(); }
}
class BuildableInfo : ValuedInfo
{ {
public readonly int TechLevel = -1; public readonly int TechLevel = -1;
public readonly string[] Prerequisites = { }; public readonly string[] Prerequisites = { };
public readonly string[] BuiltAt = { }; public readonly string[] BuiltAt = { };
public readonly string[] Owner = { }; public readonly string[] Owner = { };
public readonly int Cost = 0;
public readonly string Description = "";
public readonly string LongDesc = "";
public readonly string Icon = null; public readonly string Icon = null;
public readonly string[] AlternateName = { }; public readonly string[] AlternateName = { };
public readonly int BuildPaletteOrder = 50; public readonly int BuildPaletteOrder = 50;
public override object Create(Actor self) { return new Buildable(); }
} }
class Valued { } /* halfway to buildable */
class Buildable { } class Buildable { }
} }

View File

@@ -209,6 +209,9 @@ C1:
Selectable: Selectable:
Voice: CivilianMaleVoice Voice: CivilianMaleVoice
Bounds: 12,17,0,-9 Bounds: 12,17,0,-9
Valued:
Cost: 70
Description: Technician
Unit: Unit:
HP: 20 HP: 20
Sight: 2 Sight: 2
@@ -221,6 +224,9 @@ C2:
Selectable: Selectable:
Voice: CivilianFemaleVoice Voice: CivilianFemaleVoice
Bounds: 12,17,0,-9 Bounds: 12,17,0,-9
Valued:
Cost: 70
Description: Technician
Unit: Unit:
HP: 20 HP: 20
Sight: 2 Sight: 2