more
This commit is contained in:
@@ -12,7 +12,7 @@ namespace OpenRa.Game
|
|||||||
{
|
{
|
||||||
[Sync]
|
[Sync]
|
||||||
public readonly TypeDictionary traits = new TypeDictionary();
|
public readonly TypeDictionary traits = new TypeDictionary();
|
||||||
public readonly UnitInfo Info;
|
public readonly LegacyUnitInfo Info;
|
||||||
|
|
||||||
public readonly uint ActorID;
|
public readonly uint ActorID;
|
||||||
[Sync]
|
[Sync]
|
||||||
@@ -36,7 +36,7 @@ namespace OpenRa.Game
|
|||||||
public Actor( ActorInfo info, int2 location, Player owner )
|
public Actor( ActorInfo info, int2 location, Player owner )
|
||||||
{
|
{
|
||||||
ActorID = Game.world.NextAID();
|
ActorID = Game.world.NextAID();
|
||||||
Info = (UnitInfo)info; // temporary
|
Info = (LegacyUnitInfo)info; // temporary
|
||||||
Location = location;
|
Location = location;
|
||||||
CenterLocation = Traits.Util.CenterOfCell(Location);
|
CenterLocation = Traits.Util.CenterOfCell(Location);
|
||||||
Owner = owner;
|
Owner = owner;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace OpenRa.Game
|
|||||||
public static IniFile AllRules;
|
public static IniFile AllRules;
|
||||||
public static Dictionary<string, List<string>> Categories = new Dictionary<string, List<string>>();
|
public static Dictionary<string, List<string>> Categories = new Dictionary<string, List<string>>();
|
||||||
public static Dictionary<string, string> UnitCategory;
|
public static Dictionary<string, string> UnitCategory;
|
||||||
public static InfoLoader<UnitInfo> UnitInfo;
|
public static InfoLoader<LegacyUnitInfo> UnitInfo;
|
||||||
public static InfoLoader<WeaponInfo> WeaponInfo;
|
public static InfoLoader<WeaponInfo> WeaponInfo;
|
||||||
public static InfoLoader<WarheadInfo> WarheadInfo;
|
public static InfoLoader<WarheadInfo> WarheadInfo;
|
||||||
public static InfoLoader<ProjectileInfo> ProjectileInfo;
|
public static InfoLoader<ProjectileInfo> ProjectileInfo;
|
||||||
@@ -64,13 +64,13 @@ namespace OpenRa.Game
|
|||||||
"Plane");
|
"Plane");
|
||||||
UnitCategory = Categories.SelectMany(x => x.Value.Select(y => new KeyValuePair<string, string>(y, x.Key))).ToDictionary(x => x.Key, x => x.Value);
|
UnitCategory = Categories.SelectMany(x => x.Value.Select(y => new KeyValuePair<string, string>(y, x.Key))).ToDictionary(x => x.Key, x => x.Value);
|
||||||
|
|
||||||
UnitInfo = new InfoLoader<UnitInfo>(
|
UnitInfo = new InfoLoader<LegacyUnitInfo>(
|
||||||
Pair.New<string, Func<string, UnitInfo>>("Building", s => new BuildingInfo(s)),
|
Pair.New<string, Func<string, LegacyUnitInfo>>("Building", s => new BuildingInfo(s)),
|
||||||
Pair.New<string, Func<string, UnitInfo>>("Defense", s => new BuildingInfo(s)),
|
Pair.New<string, Func<string, LegacyUnitInfo>>("Defense", s => new BuildingInfo(s)),
|
||||||
Pair.New<string, Func<string, UnitInfo>>("Infantry", s => new InfantryInfo(s)),
|
Pair.New<string, Func<string, LegacyUnitInfo>>("Infantry", s => new InfantryInfo(s)),
|
||||||
Pair.New<string, Func<string, UnitInfo>>("Vehicle", s => new VehicleInfo(s)),
|
Pair.New<string, Func<string, LegacyUnitInfo>>("Vehicle", s => new VehicleInfo(s)),
|
||||||
Pair.New<string, Func<string, UnitInfo>>("Ship", s => new VehicleInfo(s)),
|
Pair.New<string, Func<string, LegacyUnitInfo>>("Ship", s => new VehicleInfo(s)),
|
||||||
Pair.New<string, Func<string, UnitInfo>>("Plane", s => new VehicleInfo(s)));
|
Pair.New<string, Func<string, LegacyUnitInfo>>("Plane", s => new VehicleInfo(s)));
|
||||||
|
|
||||||
LoadCategories(
|
LoadCategories(
|
||||||
"Weapon",
|
"Weapon",
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ namespace OpenRa.Game.GameRules
|
|||||||
{
|
{
|
||||||
class TechTree
|
class TechTree
|
||||||
{
|
{
|
||||||
readonly Cache<string, List<UnitInfo>> producesIndex = new Cache<string, List<UnitInfo>>( x => new List<UnitInfo>() );
|
readonly Cache<string, List<LegacyUnitInfo>> producesIndex = new Cache<string, List<LegacyUnitInfo>>( x => new List<LegacyUnitInfo>() );
|
||||||
|
|
||||||
public TechTree()
|
public TechTree()
|
||||||
{
|
{
|
||||||
@@ -26,7 +26,7 @@ namespace OpenRa.Game.GameRules
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanBuild( UnitInfo unit, Player player, Cache<string, List<Actor>> playerBuildings )
|
public bool CanBuild( LegacyUnitInfo unit, Player player, Cache<string, List<Actor>> playerBuildings )
|
||||||
{
|
{
|
||||||
if( unit.TechLevel == -1 )
|
if( unit.TechLevel == -1 )
|
||||||
return false;
|
return false;
|
||||||
@@ -59,7 +59,7 @@ namespace OpenRa.Game.GameRules
|
|||||||
.Where(x => Rules.UnitInfo[x].Owner.Contains(player.Race)); /* todo: fix for dual-race scenarios (captured buildings) */
|
.Where(x => Rules.UnitInfo[x].Owner.Contains(player.Race)); /* todo: fix for dual-race scenarios (captured buildings) */
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<UnitInfo> UnitBuiltAt( UnitInfo info )
|
public IEnumerable<LegacyUnitInfo> UnitBuiltAt( LegacyUnitInfo info )
|
||||||
{
|
{
|
||||||
if( info.BuiltAt.Length != 0 )
|
if( info.BuiltAt.Length != 0 )
|
||||||
return info.BuiltAt.Select( x => Rules.UnitInfo[ x.ToLowerInvariant() ] );
|
return info.BuiltAt.Select( x => Rules.UnitInfo[ x.ToLowerInvariant() ] );
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ namespace OpenRa.Game.GameRules
|
|||||||
concrete = 4,
|
concrete = 4,
|
||||||
}
|
}
|
||||||
|
|
||||||
public class UnitInfo : ActorInfo
|
public class LegacyUnitInfo : ActorInfo
|
||||||
{
|
{
|
||||||
public readonly string Name;
|
public readonly string Name;
|
||||||
|
|
||||||
@@ -64,10 +64,10 @@ namespace OpenRa.Game.GameRules
|
|||||||
public readonly int[] PrimaryLocalOffset = { };
|
public readonly int[] PrimaryLocalOffset = { };
|
||||||
public readonly int[] SecondaryLocalOffset = { };
|
public readonly int[] SecondaryLocalOffset = { };
|
||||||
|
|
||||||
public UnitInfo(string name) { Name = name; }
|
public LegacyUnitInfo(string name) { Name = name; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class LegacyMobileInfo : UnitInfo
|
public class LegacyMobileInfo : LegacyUnitInfo
|
||||||
{
|
{
|
||||||
public readonly int Speed = 0;
|
public readonly int Speed = 0;
|
||||||
public readonly bool NoMovingFire = false;
|
public readonly bool NoMovingFire = false;
|
||||||
@@ -94,7 +94,7 @@ namespace OpenRa.Game.GameRules
|
|||||||
public VehicleInfo(string name) : base(name) { }
|
public VehicleInfo(string name) : base(name) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BuildingInfo : UnitInfo
|
public class BuildingInfo : LegacyUnitInfo
|
||||||
{
|
{
|
||||||
public readonly int2 Dimensions = new int2(1, 1);
|
public readonly int2 Dimensions = new int2(1, 1);
|
||||||
public readonly string Footprint = "x";
|
public readonly string Footprint = "x";
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ namespace OpenRa.Game.Orders
|
|||||||
&& a.traits.WithInterface<Chronoshiftable>().Any()
|
&& a.traits.WithInterface<Chronoshiftable>().Any()
|
||||||
&& a.Info.Selectable).FirstOrDefault();
|
&& a.Info.Selectable).FirstOrDefault();
|
||||||
|
|
||||||
var unit = underCursor != null ? underCursor.Info as UnitInfo : null;
|
var unit = underCursor != null ? underCursor.Info as LegacyUnitInfo : null;
|
||||||
|
|
||||||
if (unit != null)
|
if (unit != null)
|
||||||
yield return new Order("ChronosphereSelect", underCursor, null, int2.Zero, power.Name);
|
yield return new Order("ChronosphereSelect", underCursor, null, int2.Zero, power.Name);
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ namespace OpenRa.Game.Orders
|
|||||||
&& a.traits.Contains<IronCurtainable>()
|
&& a.traits.Contains<IronCurtainable>()
|
||||||
&& a.Info.Selectable).FirstOrDefault();
|
&& a.Info.Selectable).FirstOrDefault();
|
||||||
|
|
||||||
var unit = underCursor != null ? underCursor.Info as UnitInfo : null;
|
var unit = underCursor != null ? underCursor.Info as LegacyUnitInfo : null;
|
||||||
|
|
||||||
if (unit != null)
|
if (unit != null)
|
||||||
yield return new Order("IronCurtain", underCursor, null, int2.Zero, power.Name);
|
yield return new Order("IronCurtain", underCursor, null, int2.Zero, power.Name);
|
||||||
|
|||||||
@@ -6,6 +6,13 @@ using OpenRa.Game.Effects;
|
|||||||
|
|
||||||
namespace OpenRa.Game.Traits
|
namespace OpenRa.Game.Traits
|
||||||
{
|
{
|
||||||
|
class AttackBaseInfo : ITraitInfo
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
public object Create(Actor self) { return new AttackBase(self); }
|
||||||
|
}
|
||||||
|
|
||||||
class AttackBase : IIssueOrder, IResolveOrder, ITick
|
class AttackBase : IIssueOrder, IResolveOrder, ITick
|
||||||
{
|
{
|
||||||
[Sync] public Actor target;
|
[Sync] public Actor target;
|
||||||
|
|||||||
@@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
namespace OpenRa.Game.Traits
|
namespace OpenRa.Game.Traits
|
||||||
{
|
{
|
||||||
|
class AutoTargetInfo : ITraitInfo
|
||||||
|
{
|
||||||
|
public object Create(Actor self) { return new AutoTarget(self); }
|
||||||
|
}
|
||||||
|
|
||||||
class AutoTarget : ITick, INotifyDamage
|
class AutoTarget : ITick, INotifyDamage
|
||||||
{
|
{
|
||||||
public AutoTarget(Actor self) {}
|
public AutoTarget(Actor self) {}
|
||||||
|
|||||||
@@ -5,6 +5,11 @@ using System.Linq;
|
|||||||
|
|
||||||
namespace OpenRa.Game.Traits
|
namespace OpenRa.Game.Traits
|
||||||
{
|
{
|
||||||
|
class ChronoshiftableInfo : ITraitInfo
|
||||||
|
{
|
||||||
|
public object Create(Actor self) { return new Chronoshiftable(self); }
|
||||||
|
}
|
||||||
|
|
||||||
class Chronoshiftable : IResolveOrder, ISpeedModifier, ITick
|
class Chronoshiftable : IResolveOrder, ISpeedModifier, ITick
|
||||||
{
|
{
|
||||||
// Return-to-sender logic
|
// Return-to-sender logic
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ namespace OpenRa.Game.Traits
|
|||||||
|
|
||||||
public Production( Actor self ) { }
|
public Production( Actor self ) { }
|
||||||
|
|
||||||
public virtual int2? CreationLocation( Actor self, UnitInfo producee )
|
public virtual int2? CreationLocation( Actor self, LegacyUnitInfo producee )
|
||||||
{
|
{
|
||||||
return ( 1 / 24f * self.CenterLocation ).ToInt2();
|
return ( 1 / 24f * self.CenterLocation ).ToInt2();
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@ namespace OpenRa.Game.Traits
|
|||||||
return newUnit.Info.InitialFacing;
|
return newUnit.Info.InitialFacing;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Produce( Actor self, UnitInfo producee )
|
public bool Produce( Actor self, LegacyUnitInfo producee )
|
||||||
{
|
{
|
||||||
var location = CreationLocation( self, producee );
|
var location = CreationLocation( self, producee );
|
||||||
if( location == null || Game.UnitInfluence.GetUnitsAt( location.Value ).Any() )
|
if( location == null || Game.UnitInfluence.GetUnitsAt( location.Value ).Any() )
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace OpenRa.Game.Traits
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int2? CreationLocation(Actor self, UnitInfo producee)
|
public override int2? CreationLocation(Actor self, LegacyUnitInfo producee)
|
||||||
{
|
{
|
||||||
return FindAdjacentTile(self, producee.WaterBound ?
|
return FindAdjacentTile(self, producee.WaterBound ?
|
||||||
UnitMovementType.Float : UnitMovementType.Wheel); /* hackety hack */
|
UnitMovementType.Float : UnitMovementType.Wheel); /* hackety hack */
|
||||||
|
|||||||
@@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
namespace OpenRa.Game.Traits
|
namespace OpenRa.Game.Traits
|
||||||
{
|
{
|
||||||
|
class RenderUnitReloadInfo : ITraitInfo
|
||||||
|
{
|
||||||
|
public object Create(Actor self) { return new RenderUnitReload(self); }
|
||||||
|
}
|
||||||
|
|
||||||
class RenderUnitReload : RenderUnit
|
class RenderUnitReload : RenderUnit
|
||||||
{
|
{
|
||||||
public RenderUnitReload(Actor self)
|
public RenderUnitReload(Actor self)
|
||||||
|
|||||||
@@ -6,6 +6,11 @@ using OpenRa.Game.Traits.Activities;
|
|||||||
|
|
||||||
namespace OpenRa.Game.Traits
|
namespace OpenRa.Game.Traits
|
||||||
{
|
{
|
||||||
|
class RepairableInfo : ITraitInfo
|
||||||
|
{
|
||||||
|
public object Create(Actor self) { return new Repairable(self); }
|
||||||
|
}
|
||||||
|
|
||||||
class Repairable : IIssueOrder, IResolveOrder
|
class Repairable : IIssueOrder, IResolveOrder
|
||||||
{
|
{
|
||||||
IDisposable reservation;
|
IDisposable reservation;
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace OpenRa.Game.Traits
|
|||||||
|
|
||||||
interface IProducer
|
interface IProducer
|
||||||
{
|
{
|
||||||
bool Produce( Actor self, UnitInfo producee );
|
bool Produce( Actor self, LegacyUnitInfo producee );
|
||||||
void SetPrimaryProducer(Actor self, bool isPrimary);
|
void SetPrimaryProducer(Actor self, bool isPrimary);
|
||||||
}
|
}
|
||||||
interface IOccupySpace { IEnumerable<int2> OccupiedCells(); }
|
interface IOccupySpace { IEnumerable<int2> OccupiedCells(); }
|
||||||
|
|||||||
@@ -1,6 +1,16 @@
|
|||||||
|
using OpenRa.Game.GameRules;
|
||||||
|
|
||||||
namespace OpenRa.Game.Traits
|
namespace OpenRa.Game.Traits
|
||||||
{
|
{
|
||||||
|
class UnitInfo : ITraitInfo
|
||||||
|
{
|
||||||
|
public readonly int HP = 0;
|
||||||
|
public readonly ArmorType Armor = ArmorType.none;
|
||||||
|
public readonly bool Crewed = false; // replace with trait?
|
||||||
|
|
||||||
|
public object Create(Actor self) { return new Unit(self); }
|
||||||
|
}
|
||||||
|
|
||||||
class Unit : INotifyDamage
|
class Unit : INotifyDamage
|
||||||
{
|
{
|
||||||
[Sync]
|
[Sync]
|
||||||
|
|||||||
Reference in New Issue
Block a user