unfail crates
This commit is contained in:
@@ -45,22 +45,18 @@ namespace OpenRA.Mods.RA
|
|||||||
public object Create(ActorInitializer init) { return new Crate(init); }
|
public object Create(ActorInitializer init) { return new Crate(init); }
|
||||||
}
|
}
|
||||||
|
|
||||||
class Crate : ICrushable, IOccupySpace, ITick
|
class Crate : ITick
|
||||||
{
|
{
|
||||||
readonly Actor self;
|
readonly Actor self;
|
||||||
[Sync]
|
[Sync]
|
||||||
readonly int2 location;
|
|
||||||
[Sync]
|
|
||||||
int ticks;
|
int ticks;
|
||||||
|
|
||||||
public Crate(ActorInitializer init)
|
public Crate(ActorInitializer init)
|
||||||
{
|
{
|
||||||
this.self = init.self;
|
this.self = init.self;
|
||||||
this.location = init.location;
|
|
||||||
self.World.WorldActor.traits.Get<UnitInfluence>().Add(self, this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnCrush(Actor crusher)
|
public void OnCollected(Actor crusher)
|
||||||
{
|
{
|
||||||
var shares = self.traits.WithInterface<CrateAction>().Select(a => Pair.New(a, a.GetSelectionShares(crusher)));
|
var shares = self.traits.WithInterface<CrateAction>().Select(a => Pair.New(a, a.GetSelectionShares(crusher)));
|
||||||
var totalShares = shares.Sum(a => a.Second);
|
var totalShares = shares.Sum(a => a.Second);
|
||||||
@@ -77,19 +73,20 @@ namespace OpenRA.Mods.RA
|
|||||||
n -= s.Second;
|
n -= s.Second;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsPathableCrush(UnitMovementType umt, Player player) { return true; }
|
|
||||||
public bool IsCrushableBy(UnitMovementType umt, Player player) { return true; }
|
|
||||||
|
|
||||||
public int2 TopLeft { get { return location; } }
|
|
||||||
|
|
||||||
public IEnumerable<int2> OccupiedCells() { yield return TopLeft; }
|
|
||||||
|
|
||||||
public void Tick(Actor self)
|
public void Tick(Actor self)
|
||||||
{
|
{
|
||||||
|
var cell = ((1/24f) * self.CenterLocation).ToInt2();
|
||||||
|
var collector = self.World.WorldActor.traits.Get<UnitInfluence>().GetUnitsAt(cell).FirstOrDefault();
|
||||||
|
if (collector != null)
|
||||||
|
{
|
||||||
|
OnCollected(collector);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (++ticks >= self.Info.Traits.Get<CrateInfo>().Lifetime * 25)
|
if (++ticks >= self.Info.Traits.Get<CrateInfo>().Lifetime * 25)
|
||||||
self.World.AddFrameEndTask(w => w.Remove(self));
|
self.World.AddFrameEndTask(w => w.Remove(self));
|
||||||
|
|
||||||
var seq = self.World.GetTerrainType(self.Location) == TerrainType.Water ? "water" : "idle";
|
var seq = self.World.GetTerrainType(cell) == TerrainType.Water ? "water" : "idle";
|
||||||
if (seq != self.traits.Get<RenderSimple>().anim.CurrentSequence.Name)
|
if (seq != self.traits.Get<RenderSimple>().anim.CurrentSequence.Name)
|
||||||
self.traits.Get<RenderSimple>().anim.PlayRepeating(seq);
|
self.traits.Get<RenderSimple>().anim.PlayRepeating(seq);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,7 +71,6 @@ namespace OpenRA.Mods.RA
|
|||||||
{
|
{
|
||||||
var crate = new Actor(w, "crate", new int2(0, 0), w.WorldActor.Owner);
|
var crate = new Actor(w, "crate", new int2(0, 0), w.WorldActor.Owner);
|
||||||
crates.Add(crate);
|
crates.Add(crate);
|
||||||
self.World.WorldActor.traits.Get<UnitInfluence>().Remove(crate, crate.traits.Get<IOccupySpace>());
|
|
||||||
|
|
||||||
var startPos = w.ChooseRandomEdgeCell();
|
var startPos = w.ChooseRandomEdgeCell();
|
||||||
var plane = w.CreateActor("BADR", startPos, w.WorldActor.Owner);
|
var plane = w.CreateActor("BADR", startPos, w.WorldActor.Owner);
|
||||||
|
|||||||
Reference in New Issue
Block a user