lots of stuff: harvester, acceptsore, half-destroyed buildings, building sounds
This commit is contained in:
22
OpenRa.Game/Traits/AcceptsOre.cs
Normal file
22
OpenRa.Game/Traits/AcceptsOre.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class AcceptsOre
|
||||
{
|
||||
public AcceptsOre(Actor self)
|
||||
{
|
||||
/* create the free harvester! */
|
||||
Game.world.AddFrameEndTask(
|
||||
w =>
|
||||
{
|
||||
var harvester = new Actor("harv", self.Location + new int2(1, 2), self.Owner);
|
||||
harvester.traits.Get<Mobile>().facing = 64;
|
||||
w.Add(harvester);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
24
OpenRa.Game/Traits/Harvester.cs
Normal file
24
OpenRa.Game/Traits/Harvester.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class Harvester : IOrder
|
||||
{
|
||||
public Order Order(Actor self, int2 xy, bool lmb, Actor underCursor)
|
||||
{
|
||||
if (underCursor != null
|
||||
&& underCursor.Owner == self.Owner
|
||||
&& underCursor.traits.Contains<AcceptsOre>())
|
||||
return OpenRa.Game.Order.DeliverOre(self, underCursor);
|
||||
|
||||
/* todo: harvest order when on ore */
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public Harvester(Actor self) { }
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ using OpenRa.Game;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class RenderBuilding : RenderSimple, INotifyRemoved
|
||||
class RenderBuilding : RenderSimple, INotifyDamage
|
||||
{
|
||||
const int SmallBibStart = 1;
|
||||
const int LargeBibStart = 5;
|
||||
@@ -51,6 +51,21 @@ namespace OpenRa.Game.Traits
|
||||
yield return Pair.New(anim.Image, 24f * (float2)self.Location);
|
||||
}
|
||||
|
||||
public void Removed(Actor self) { DoBib(self, true); }
|
||||
public void Damaged(Actor self, DamageState state)
|
||||
{
|
||||
switch( state )
|
||||
{
|
||||
case DamageState.Normal:
|
||||
anim.PlayRepeating("idle"); /* todo: make interaction?? this should only get called on half->ok */
|
||||
break;
|
||||
case DamageState.Half:
|
||||
anim.PlayRepeating("damaged-idle");
|
||||
Game.PlaySound("kaboom1.aud", false); /* todo: maybe sep. sound stuff from visual ?? */
|
||||
break;
|
||||
case DamageState.Dead:
|
||||
DoBib(self, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,8 +7,10 @@ using IjwFramework.Types;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
enum DamageState { Normal, Half, Dead };
|
||||
|
||||
interface ITick { void Tick(Actor self); }
|
||||
interface IRender { IEnumerable<Pair<Sprite, float2>> Render(Actor self); }
|
||||
interface IOrder { Order Order(Actor self, int2 xy, bool lmb, Actor underCursor); }
|
||||
interface INotifyRemoved { void Removed(Actor self); }
|
||||
interface INotifyDamage { void Damaged(Actor self, DamageState ds); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user