Improve spice bloom seeding mechanism

Improve seeding target cell determination.
Draw out spice seedable cells before loop.
Default to null for SpiceBloom.Weapon.
Pull spice seeding into its own method.
Skip it completely if no seed weapon is defined.
This commit is contained in:
reaperrr
2015-11-08 13:59:38 +01:00
parent 64b1aea065
commit a175f53ba7

View File

@@ -39,7 +39,7 @@ namespace OpenRA.Mods.D2k.Traits
[Desc("The weapon to use for spice creation.")]
[WeaponReference]
public readonly string Weapon = "SpiceExplosion";
public readonly string Weapon = null;
[Desc("The amount of spice to expel.")]
public readonly int[] Pieces = { 2, 12 };
@@ -98,18 +98,19 @@ namespace OpenRA.Mods.D2k.Traits
}
}
public void Killed(Actor self, AttackInfo e)
void SeedResources(Actor self)
{
var pieces = self.World.SharedRandom.Next(info.Pieces[0], info.Pieces[1]) * ticks / growTicks;
if (pieces < info.Pieces[0])
pieces = info.Pieces[0];
for (var i = 0; pieces > i; i++)
var cells = self.World.Map.FindTilesInAnnulus(self.Location, 1, info.Range);
for (var i = 0; i < pieces; i++)
{
var cells = OpenRA.Traits.Util.RandomWalk(self.Location, self.World.SharedRandom);
var cell = cells.Take(info.Range).SkipWhile(p => resLayer.GetResource(p) == resType && resLayer.IsFull(p)).Cast<CPos?>().RandomOrDefault(self.World.SharedRandom);
var cell = cells.SkipWhile(p => resLayer.GetResource(p) == resType && resLayer.IsFull(p)).Cast<CPos?>().RandomOrDefault(self.World.SharedRandom);
if (cell == null)
cell = cells.Take(info.Range).Random(self.World.SharedRandom);
cell = cells.Random(self.World.SharedRandom);
var args = new ProjectileArgs
{
@@ -140,6 +141,12 @@ namespace OpenRA.Mods.D2k.Traits
}
});
}
}
public void Killed(Actor self, AttackInfo e)
{
if (!string.IsNullOrEmpty(info.Weapon))
SeedResources(self);
self.World.AddFrameEndTask(t => t.Add(new DelayedAction(respawnTicks, () =>
{