refinery comes with a harvester

git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1344 993157c7-ee19-0410-b2c4-bb4e9862e678
This commit is contained in:
(no author)
2007-07-24 10:22:34 +00:00
parent 60e6f36042
commit ced4d24793
11 changed files with 43 additions and 26 deletions

View File

@@ -10,9 +10,16 @@ namespace OpenRa.Game
{
abstract class Actor
{
protected readonly Game game;
public abstract float2 RenderLocation { get; }
public Player owner;
public abstract Sprite[] CurrentImages { get; }
public virtual void Tick(Game game, int t) { }
protected Actor(Game game)
{
this.game = game;
}
}
}

View File

@@ -9,7 +9,8 @@ namespace OpenRa.Game
protected Animation animation;
protected int2 location;
public Building( string name, int2 location, Player owner )
public Building( string name, int2 location, Player owner, Game game )
: base( game )
{
this.location = location;
this.owner = owner;

View File

@@ -7,8 +7,8 @@ namespace OpenRa.Game
{
class ConstructionYard : Building
{
public ConstructionYard( int2 location, Player owner )
: base( "fact", location, owner )
public ConstructionYard( int2 location, Player owner, Game game )
: base( "fact", location, owner, game )
{
animation.PlayThen( "make", delegate { animation.PlayRepeating( "build" ); } );
}

View File

@@ -39,7 +39,7 @@ namespace OpenRa.Game
treeCache = new TreeCache(renderer.Device, map);
foreach (TreeReference treeReference in map.Trees)
world.Add(new Tree(treeReference, treeCache, map));
world.Add(new Tree(treeReference, treeCache, map, this));
pathFinder = new PathFinder(map, terrain.tileSet);
@@ -48,12 +48,12 @@ namespace OpenRa.Game
buildingCreation.Add( "fact",
delegate( int2 location, Player owner )
{
return new ConstructionYard( location, owner );
return new ConstructionYard( location, owner, this );
} );
buildingCreation.Add( "proc",
delegate( int2 location, Player owner )
{
return new Refinery( location, owner );
return new Refinery( location, owner, this );
} );
string[] buildings = { "powr", "apwr", "weap", "barr", "atek", "stek", "dome" };
@@ -66,7 +66,7 @@ namespace OpenRa.Game
buildingCreation.Add( name,
delegate( int2 location, Player owner )
{
return new Building( name, location, owner );
return new Building( name, location, owner, this );
} );
}

View File

@@ -6,8 +6,8 @@ namespace OpenRa.Game
{
class Harvester : Unit
{
public Harvester( int2 cell, Player owner )
: base( "harv", cell, owner, new float2( 12, 12 ) )
public Harvester( int2 cell, Player owner, Game game )
: base( "harv", cell, owner, new float2( 12, 12 ), game )
{
}

View File

@@ -45,12 +45,11 @@ namespace OpenRa.Game
SequenceProvider.ForcePrecache();
game.world.Add( new Mcv( new int2( 5, 5 ), game.players[ 3 ] ) );
game.world.Add( new Mcv( new int2( 7, 5 ), game.players[ 2 ] ) );
Mcv mcv = new Mcv( new int2( 9, 5 ), game.players[ 1 ] );
game.world.Add( new Mcv( new int2( 5, 5 ), game.players[ 3 ], game ) );
game.world.Add( new Mcv( new int2( 7, 5 ), game.players[ 2 ], game ) );
Mcv mcv = new Mcv( new int2( 9, 5 ), game.players[ 1 ], game );
game.world.orderGenerator = mcv;
game.world.Add( mcv );
game.world.Add( new Refinery( new int2( 7, 5 ), game.players[ 2 ] ) );
sidebar = new Sidebar(Race.Soviet, renderer, game);

View File

@@ -9,8 +9,8 @@ namespace OpenRa.Game
{
class Mcv : Unit
{
public Mcv( int2 location, Player owner )
: base( "mcv", location, owner, new float2( 12, 12 ) )
public Mcv( int2 location, Player owner, Game game )
: base( "mcv", location, owner, new float2( 12, 12 ), game )
{
}
@@ -25,11 +25,7 @@ namespace OpenRa.Game
world.AddFrameEndTask( delegate
{
world.Remove( this );
world.Add( new ConstructionYard( fromCell - new int2( 1, 1 ), owner ) );
world.Add( new Refinery( fromCell - new int2( 1, -2 ), owner ) );
world.orderGenerator = new Harvester( fromCell - new int2( 0, -4 ), owner );
world.Add( (Actor)world.orderGenerator );
world.Add( new ConstructionYard( fromCell - new int2( 1, 1 ), owner, game ) );
} );
currentOrder = null;
};

View File

@@ -9,9 +9,21 @@ namespace OpenRa.Game
{
class Refinery : Building
{
public Refinery( int2 location, Player owner )
: base( "proc", location, owner )
public Refinery( int2 location, Player owner, Game game )
: base( "proc", location, owner, game )
{
animation.PlayThen("make", delegate
{
animation.PlayRepeating("idle");
game.world.AddFrameEndTask(delegate
{
Unit harvester = new Harvester(location + new int2(1, 2), owner, game);
harvester.facing = 8;
game.world.Add(harvester);
game.world.orderGenerator = harvester;
});
});
}
}
}

View File

@@ -143,7 +143,6 @@ namespace OpenRa.Game
public IOrder Order( Game game, int2 xy )
{
game.world.uiOverlay.KillOverlay();
// todo: check that space is free
return new PlaceBuildingOrder( this, xy );
}
@@ -175,6 +174,7 @@ namespace OpenRa.Game
game.world.Add( newBuilding( xy, building.owner ) );
}
game.world.orderGenerator = null;
game.world.uiOverlay.KillOverlay();
} );
}
}

View File

@@ -10,7 +10,8 @@ namespace OpenRa.Game
{
int2 location;
public Tree(TreeReference r, TreeCache renderer, Map map)
public Tree(TreeReference r, TreeCache renderer, Map map, Game game)
: base( game )
{
location = new int2( r.Location ) - map.Offset;
currentImages = new Sprite[] { renderer.GetImage(r.Image) };

View File

@@ -8,7 +8,7 @@ namespace OpenRa.Game
{
protected Animation animation;
protected int facing = 0;
public int facing = 0;
protected int2 fromCell, toCell;
protected int moveFraction, moveFractionTotal;
@@ -18,7 +18,8 @@ namespace OpenRa.Game
protected readonly float2 renderOffset;
public Unit( string name, int2 cell, Player owner, float2 renderOffset )
public Unit( string name, int2 cell, Player owner, float2 renderOffset, Game game )
: base( game )
{
fromCell = toCell = cell;
this.renderOffset = renderOffset;