Convert all CreateActor calls to use TypeDictionary

This commit is contained in:
alzeih
2010-08-02 01:28:07 +12:00
parent 4ea66ea309
commit 578d42614b
20 changed files with 131 additions and 63 deletions

View File

@@ -44,7 +44,7 @@ namespace OpenRA
World = world; World = world;
Shroud = new ShroudRenderer(this, world.Map); Shroud = new ShroudRenderer(this, world.Map);
PlayerActor = world.CreateActor("Player", new int2(int.MaxValue, int.MaxValue), this); PlayerActor = world.CreateActor("Player", new TypeDictionary{ new OwnerInit( this ) });
Index = index; Index = index;
Palette = "player"+index; Palette = "player"+index;
@@ -64,7 +64,7 @@ namespace OpenRA
World = world; World = world;
Shroud = new ShroudRenderer(this, world.Map); Shroud = new ShroudRenderer(this, world.Map);
PlayerActor = world.CreateActor("Player", new int2(int.MaxValue, int.MaxValue), this); PlayerActor = world.CreateActor("Player", new TypeDictionary{ new OwnerInit( this ) });
Index = client.Index; Index = client.Index;
Palette = "player"+client.Index; Palette = "player"+client.Index;

View File

@@ -76,7 +76,9 @@ namespace OpenRA.Traits
{ {
this.self = init.self; this.self = init.self;
this.Info = info; this.Info = info;
if (init.Contains<LocationInit>())
this.__fromCell = this.__toCell = init.Get<LocationInit,int2>(); this.__fromCell = this.__toCell = init.Get<LocationInit,int2>();
this.Facing = init.Contains<FacingInit>() ? init.Get<FacingInit,int>() : info.InitialFacing; this.Facing = init.Contains<FacingInit>() ? init.Get<FacingInit,int>() : info.InitialFacing;
this.Altitude = init.Contains<AltitudeInit>() ? init.Get<AltitudeInit,int>() : 0; this.Altitude = init.Contains<AltitudeInit>() ? init.Get<AltitudeInit,int>() : 0;

View File

@@ -11,6 +11,7 @@
using System.Linq; using System.Linq;
using OpenRA.Effects; using OpenRA.Effects;
using OpenRA.GameRules; using OpenRA.GameRules;
using OpenRA.FileFormats;
namespace OpenRA.Traits namespace OpenRA.Traits
{ {
@@ -40,7 +41,12 @@ namespace OpenRA.Traits
bool playSounds = true; bool playSounds = true;
foreach (var t in LineBuildUtils.GetLineBuildCells(w, order.TargetLocation, order.TargetString, buildingInfo)) foreach (var t in LineBuildUtils.GetLineBuildCells(w, order.TargetLocation, order.TargetString, buildingInfo))
{ {
var building = w.CreateActor(order.TargetString, t, order.Player); var building = w.CreateActor(order.TargetString, new TypeDictionary
{
new LocationInit( t ),
new OwnerInit( order.Player ),
});
if (playSounds) if (playSounds)
foreach (var s in buildingInfo.BuildSounds) foreach (var s in buildingInfo.BuildSounds)
Sound.PlayToPlayer(order.Player, s, building.CenterLocation); Sound.PlayToPlayer(order.Player, s, building.CenterLocation);
@@ -49,7 +55,11 @@ namespace OpenRA.Traits
} }
else else
{ {
var building = w.CreateActor(order.TargetString, order.TargetLocation, order.Player); var building = w.CreateActor(order.TargetString, new TypeDictionary
{
new LocationInit( order.TargetLocation ),
new OwnerInit( order.Player ),
});
foreach (var s in buildingInfo.BuildSounds) foreach (var s in buildingInfo.BuildSounds)
Sound.PlayToPlayer(order.Player, s, building.CenterLocation); Sound.PlayToPlayer(order.Player, s, building.CenterLocation);
} }

View File

@@ -125,21 +125,6 @@ namespace OpenRA
Timer.Time( "----end World.ctor" ); Timer.Time( "----end World.ctor" );
} }
public Actor CreateActor( string name, int2 location, Player owner )
{
return CreateActor( true, name, location, owner );
}
public Actor CreateActor( bool addToWorld, string name, int2 location, Player owner )
{
var initDict = new TypeDictionary
{
new LocationInit( location ),
new OwnerInit( owner ),
};
return CreateActor( addToWorld, name, initDict );
}
public Actor CreateActor( string name, TypeDictionary initDict ) public Actor CreateActor( string name, TypeDictionary initDict )
{ {
return CreateActor( true, name, initDict ); return CreateActor( true, name, initDict );

View File

@@ -15,6 +15,7 @@ using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Activities;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Traits.Activities; using OpenRA.Traits.Activities;
using OpenRA.FileFormats;
namespace OpenRA.Mods.Cnc namespace OpenRA.Mods.Cnc
{ {
@@ -38,12 +39,17 @@ namespace OpenRA.Mods.Cnc
var rp = self.traits.GetOrDefault<RallyPoint>(); var rp = self.traits.GetOrDefault<RallyPoint>();
owner.World.AddFrameEndTask(w => owner.World.AddFrameEndTask(w =>
{ {
var a = w.CreateActor("C17", startPos, owner); var a = w.CreateActor("C17", new TypeDictionary
var cargo = a.traits.Get<Cargo>(); {
a.traits.Get<IFacing>().Facing = 64; new LocationInit( startPos ),
a.traits.Get<IMove>().Altitude = a.Info.Traits.Get<PlaneInfo>().CruiseAltitude; new OwnerInit( owner ),
new FacingInit( 64 ),
new AltitudeInit( Rules.Info["c17"].Traits.Get<PlaneInfo>().CruiseAltitude ),
});
var newUnit = self.World.CreateActor(false, producee.Name, new int2(0, 0), self.Owner); var cargo = a.traits.Get<Cargo>();
var newUnit = self.World.CreateActor(false, producee.Name, new TypeDictionary{ new OwnerInit( self.Owner ) });
cargo.Load(a, newUnit); cargo.Load(a, newUnit);
a.CancelActivity(); a.CancelActivity();

View File

@@ -11,6 +11,7 @@
using System.Linq; using System.Linq;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Traits.Activities; using OpenRA.Traits.Activities;
using OpenRA.FileFormats;
namespace OpenRA.Mods.RA.Activities namespace OpenRA.Mods.RA.Activities
{ {
@@ -73,8 +74,11 @@ namespace OpenRA.Mods.RA.Activities
if (limitedAmmo != null) limitedAmmo.Attacking(self); if (limitedAmmo != null) limitedAmmo.Attacking(self);
self.World.AddFrameEndTask( self.World.AddFrameEndTask(
w => w.CreateActor( w => w.CreateActor(self.Info.Traits.Get<MinelayerInfo>().Mine, new TypeDictionary
self.Info.Traits.Get<MinelayerInfo>().Mine, self.Location, self.Owner)); {
new LocationInit( self.Location ),
new OwnerInit( self.Owner ),
}));
} }
public void Cancel( Actor self ) { canceled = true; NextActivity = null; } public void Cancel( Actor self ) { canceled = true; NextActivity = null; }

View File

@@ -13,6 +13,7 @@ using System.Linq;
using System.Collections.Generic; using System.Collections.Generic;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Mods.RA.Render; using OpenRA.Mods.RA.Render;
using OpenRA.FileFormats;
namespace OpenRA.Mods.RA.Activities namespace OpenRA.Mods.RA.Activities
{ {
@@ -52,16 +53,17 @@ namespace OpenRA.Mods.RA.Activities
foreach (var s in sounds) foreach (var s in sounds)
Sound.PlayToPlayer(self.Owner, s, self.CenterLocation); Sound.PlayToPlayer(self.Owner, s, self.CenterLocation);
var a = w.CreateActor(actor, self.Location + offset, self.Owner); var a = w.CreateActor( actor, new TypeDictionary
{
new LocationInit( self.Location + offset ),
new OwnerInit( self.Owner ),
new FacingInit( facing ),
});
var oldHealth = self.traits.GetOrDefault<Health>(); var oldHealth = self.traits.GetOrDefault<Health>();
var newHealth = a.traits.GetOrDefault<Health>(); var newHealth = a.traits.GetOrDefault<Health>();
if (oldHealth != null && newHealth != null) if (oldHealth != null && newHealth != null)
newHealth.HPFraction = oldHealth.HPFraction; newHealth.HPFraction = oldHealth.HPFraction;
var ifacing = a.traits.GetOrDefault<IFacing>();
if (ifacing != null)
ifacing.Facing = facing;
if (selected) if (selected)
w.Selection.Add(w, a); w.Selection.Add(w, a);
}); });

View File

@@ -11,6 +11,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.FileFormats;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -80,7 +81,12 @@ namespace OpenRA.Mods.RA
var nj = j - image / template.Size.X; var nj = j - image / template.Size.X;
// Create a new actor for this bridge and keep track of which subtiles this bridge includes // Create a new actor for this bridge and keep track of which subtiles this bridge includes
var bridge = w.CreateActor(BridgeTypes[tile], new int2(ni, nj), w.WorldActor.Owner).traits.Get<Bridge>(); var bridge = w.CreateActor(BridgeTypes[tile], new TypeDictionary
{
new LocationInit( new int2(ni, nj) ),
new OwnerInit( w.WorldActor.Owner ),
}).traits.Get<Bridge>();
Dictionary<int2, byte> subTiles = new Dictionary<int2, byte>(); Dictionary<int2, byte> subTiles = new Dictionary<int2, byte>();
// For each subtile in the template // For each subtile in the template

View File

@@ -49,7 +49,9 @@ namespace OpenRA.Mods.RA
public Crate(ActorInitializer init, CrateInfo info) public Crate(ActorInitializer init, CrateInfo info)
{ {
this.self = init.self; this.self = init.self;
if (init.Contains<LocationInit>())
this.Location = init.Get<LocationInit,int2>(); this.Location = init.Get<LocationInit,int2>();
this.Info = info; this.Info = info;
self.World.WorldActor.traits.Get<UnitInfluence>().Add(self, this); self.World.WorldActor.traits.Get<UnitInfluence>().Add(self, this);

View File

@@ -13,6 +13,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Activities;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.FileFormats;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -67,13 +68,17 @@ namespace OpenRA.Mods.RA
self.World.AddFrameEndTask(w => self.World.AddFrameEndTask(w =>
{ {
var crate = w.CreateActor(false, "crate", new int2(0, 0), w.WorldActor.Owner); var crate = w.CreateActor(false, "crate", new TypeDictionary { new OwnerInit(w.WorldActor.Owner) });
crates.Add(crate); crates.Add(crate);
var startPos = w.ChooseRandomEdgeCell(); var startPos = w.ChooseRandomEdgeCell();
var plane = w.CreateActor("BADR", startPos, w.WorldActor.Owner); var plane = w.CreateActor("badr", new TypeDictionary
var aircraft = plane.traits.Get<Aircraft>(); {
aircraft.Facing = Util.GetFacing(p - startPos, 0); new LocationInit( startPos ),
new OwnerInit( w.WorldActor.Owner),
new FacingInit( Util.GetFacing(p - startPos, 0) ),
new AltitudeInit( Rules.Info["badr"].Traits.Get<AircraftInfo>().CruiseAltitude ),
});
plane.CancelActivity(); plane.CancelActivity();
plane.QueueActivity(new FlyCircle(p)); plane.QueueActivity(new FlyCircle(p));
plane.traits.Get<ParaDrop>().SetLZ(p, null); plane.traits.Get<ParaDrop>().SetLZ(p, null);

View File

@@ -12,6 +12,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.FileFormats;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -65,7 +66,11 @@ namespace OpenRA.Mods.RA
if (self.World.WorldActor.traits.Get<UnitInfluence>().GetUnitsAt(p).Any()) continue; if (self.World.WorldActor.traits.Get<UnitInfluence>().GetUnitsAt(p).Any()) continue;
self.World.AddFrameEndTask( self.World.AddFrameEndTask(
w => crates.Add(w.CreateActor("crate", p, self.World.WorldActor.Owner))); w => crates.Add(w.CreateActor("crate", new TypeDictionary
{
new LocationInit( p ),
new OwnerInit( self.World.WorldActor.Owner ),
})));
return; return;
} }
} }

View File

@@ -10,6 +10,7 @@
using System.Linq; using System.Linq;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.FileFormats;
namespace OpenRA.Mods.RA.Crates namespace OpenRA.Mods.RA.Crates
{ {
@@ -41,7 +42,11 @@ namespace OpenRA.Mods.RA.Crates
var location = ChooseEmptyCellNear(collector); var location = ChooseEmptyCellNear(collector);
if (location != null) if (location != null)
collector.World.AddFrameEndTask( collector.World.AddFrameEndTask(
w => w.CreateActor(Info.Unit, location.Value, collector.Owner)); w => w.CreateActor(Info.Unit, new TypeDictionary
{
new LocationInit( location.Value ),
new OwnerInit( collector.Owner )
}));
base.Activate(collector); base.Activate(collector);
} }

View File

@@ -12,6 +12,7 @@ using System;
using System.Linq; using System.Linq;
using OpenRA.GameRules; using OpenRA.GameRules;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.FileFormats;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -49,7 +50,11 @@ namespace OpenRA.Mods.RA
eligibleLocations.Remove(loc); eligibleLocations.Remove(loc);
dudesValue -= at.Cost; dudesValue -= at.Cost;
self.World.AddFrameEndTask(w => w.CreateActor(at.Name, loc, self.Owner)); self.World.AddFrameEndTask(w => w.CreateActor(at.Name, new TypeDictionary
{
new LocationInit( loc ),
new OwnerInit( self.Owner ),
}));
} }
} }

View File

@@ -10,6 +10,7 @@
using System.Linq; using System.Linq;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.FileFormats;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -31,12 +32,12 @@ namespace OpenRA.Mods.RA
self.World.AddFrameEndTask( self.World.AddFrameEndTask(
w => w =>
{ {
var a = w.CreateActor(info.Actor, self.Location var a = w.CreateActor(info.Actor, new TypeDictionary
+ info.SpawnOffset, self.Owner); {
new LocationInit( self.Location + info.SpawnOffset ),
var facing = a.traits.GetOrDefault<IFacing>(); new OwnerInit( self.Owner ),
if (facing != null) new FacingInit( info.Facing ),
facing.Facing = info.Facing; });
if (info.InitialActivity != null) if (info.InitialActivity != null)
a.QueueActivity(Game.CreateObject<IActivity>(info.InitialActivity)); a.QueueActivity(Game.CreateObject<IActivity>(info.InitialActivity));

View File

@@ -11,6 +11,7 @@
using System.Linq; using System.Linq;
using OpenRA.GameRules; using OpenRA.GameRules;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.FileFormats;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -28,8 +29,11 @@ namespace OpenRA.Mods.RA
if( location == null || self.World.WorldActor.traits.Get<UnitInfluence>().GetUnitsAt( location.Value ).Any() ) if( location == null || self.World.WorldActor.traits.Get<UnitInfluence>().GetUnitsAt( location.Value ).Any() )
return false; return false;
var newUnit = self.World.CreateActor( producee.Name, location.Value, self.Owner ); var newUnit = self.World.CreateActor( producee.Name, new TypeDictionary
newUnit.traits.Get<IFacing>().Facing = CreationFacing( self, newUnit ); ; {
new LocationInit( location.Value ),
new OwnerInit( self.Owner ),
});
var pi = self.Info.Traits.Get<ProductionInfo>(); var pi = self.Info.Traits.Get<ProductionInfo>();
var rp = self.traits.GetOrDefault<RallyPoint>(); var rp = self.traits.GetOrDefault<RallyPoint>();

View File

@@ -9,6 +9,7 @@
#endregion #endregion
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.FileFormats;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -27,7 +28,11 @@ namespace OpenRA.Mods.RA
self.World.AddFrameEndTask(w => self.World.AddFrameEndTask(w =>
{ {
w.Remove(self); w.Remove(self);
w.CreateActor(info.Actor, self.Location, self.Owner); w.CreateActor(info.Actor, new TypeDictionary
{
new LocationInit( self.Location ),
new OwnerInit( self.Owner ),
});
}); });
} }
} }

View File

@@ -41,7 +41,11 @@ namespace OpenRA.Mods.RA
void SpawnUnitsForPlayer(Player p, int2 sp) void SpawnUnitsForPlayer(Player p, int2 sp)
{ {
p.World.CreateActor("mcv", sp, p); p.World.CreateActor("mcv", new TypeDictionary
{
new LocationInit( sp ),
new OwnerInit( p ),
});
if (p == p.World.LocalPlayer || p.Stances[p.World.LocalPlayer] == Stance.Ally) if (p == p.World.LocalPlayer || p.Stances[p.World.LocalPlayer] == Stance.Ally)
p.World.WorldActor.traits.Get<Shroud>().Explore(p.World, sp, p.World.WorldActor.traits.Get<Shroud>().Explore(p.World, sp,

View File

@@ -12,6 +12,7 @@ using OpenRA.Mods.RA.Activities;
using OpenRA.Orders; using OpenRA.Orders;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Traits.Activities; using OpenRA.Traits.Activities;
using OpenRA.FileFormats;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -44,12 +45,20 @@ namespace OpenRA.Mods.RA
Owner.World.AddFrameEndTask(w => Owner.World.AddFrameEndTask(w =>
{ {
var flareType = (Info as AirstrikePowerInfo).FlareType; var info = (Info as AirstrikePowerInfo);
var flare = flareType != null ? w.CreateActor(flareType, order.TargetLocation, Owner) : null; var flare = info.FlareType != null ? w.CreateActor(info.FlareType, new TypeDictionary
{
new LocationInit( order.TargetLocation ),
new OwnerInit( Owner ),
}) : null;
var a = w.CreateActor((Info as AirstrikePowerInfo).UnitType, startPos, Owner); var a = w.CreateActor(info.UnitType, new TypeDictionary
a.traits.Get<IFacing>().Facing = Util.GetFacing(order.TargetLocation - startPos, 0); {
a.traits.Get<IMove>().Altitude = a.Info.Traits.Get<PlaneInfo>().CruiseAltitude; new LocationInit( startPos ),
new OwnerInit( Owner ),
new FacingInit( Util.GetFacing(order.TargetLocation - startPos, 0) ),
new AltitudeInit( Rules.Info[info.UnitType].Traits.Get<PlaneInfo>().CruiseAltitude ),
});
a.traits.Get<CarpetBomb>().SetTarget(order.TargetLocation); a.traits.Get<CarpetBomb>().SetTarget(order.TargetLocation);
a.CancelActivity(); a.CancelActivity();

View File

@@ -59,7 +59,11 @@ namespace OpenRA.Mods.RA
owner.World.AddFrameEndTask(w => owner.World.AddFrameEndTask(w =>
{ {
var info = (Info as ParatroopersPowerInfo); var info = (Info as ParatroopersPowerInfo);
var flare = info.FlareType != null ? w.CreateActor(info.FlareType, p, owner) : null; var flare = info.FlareType != null ? w.CreateActor(info.FlareType, new TypeDictionary
{
new LocationInit( p ),
new OwnerInit( owner ),
}) : null;
var a = w.CreateActor(info.UnitType, new TypeDictionary var a = w.CreateActor(info.UnitType, new TypeDictionary
{ {
@@ -75,8 +79,7 @@ namespace OpenRA.Mods.RA
var cargo = a.traits.Get<Cargo>(); var cargo = a.traits.Get<Cargo>();
foreach (var i in items) foreach (var i in items)
cargo.Load(a, owner.World.CreateActor(false, i.ToLowerInvariant(), cargo.Load(a, owner.World.CreateActor(false, i.ToLowerInvariant(), new TypeDictionary { new OwnerInit( a.Owner ) }));
new int2(0,0), a.Owner));
}); });
} }
} }

View File

@@ -58,7 +58,12 @@ namespace OpenRA.Mods.RA
plane.QueueActivity(new Fly(Util.CenterOfCell(order.TargetLocation))); plane.QueueActivity(new Fly(Util.CenterOfCell(order.TargetLocation)));
plane.QueueActivity(new CallFunc(() => plane.World.AddFrameEndTask( w => plane.QueueActivity(new CallFunc(() => plane.World.AddFrameEndTask( w =>
{ {
var camera = w.CreateActor("camera", order.TargetLocation, Owner); var camera = w.CreateActor("camera", new TypeDictionary
{
new LocationInit( order.TargetLocation ),
new OwnerInit( Owner ),
});
camera.QueueActivity(new Wait((int)(25 * 60 * (Info as SpyPlanePowerInfo).RevealTime))); camera.QueueActivity(new Wait((int)(25 * 60 * (Info as SpyPlanePowerInfo).RevealTime)));
camera.QueueActivity(new RemoveSelf()); camera.QueueActivity(new RemoveSelf());
}))); })));