Spatially partition SatelliteLaunch and GpsSatellite effects
This commit is contained in:
@@ -16,7 +16,7 @@ using OpenRA.Mods.Cnc.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.Cnc.Effects
|
namespace OpenRA.Mods.Cnc.Effects
|
||||||
{
|
{
|
||||||
class GpsSatellite : IEffect
|
class GpsSatellite : IEffect, ISpatiallyPartitionable
|
||||||
{
|
{
|
||||||
readonly Player launcher;
|
readonly Player launcher;
|
||||||
readonly Animation anim;
|
readonly Animation anim;
|
||||||
@@ -34,6 +34,7 @@ namespace OpenRA.Mods.Cnc.Effects
|
|||||||
|
|
||||||
anim = new Animation(world, image);
|
anim = new Animation(world, image);
|
||||||
anim.PlayRepeating(sequence);
|
anim.PlayRepeating(sequence);
|
||||||
|
world.ScreenMap.Add(this, pos, anim.Image);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Tick(World world)
|
public void Tick(World world)
|
||||||
@@ -45,8 +46,10 @@ namespace OpenRA.Mods.Cnc.Effects
|
|||||||
{
|
{
|
||||||
var watcher = launcher.PlayerActor.Trait<GpsWatcher>();
|
var watcher = launcher.PlayerActor.Trait<GpsWatcher>();
|
||||||
watcher.ReachedOrbit(launcher);
|
watcher.ReachedOrbit(launcher);
|
||||||
world.AddFrameEndTask(w => w.Remove(this));
|
world.AddFrameEndTask(w => { w.Remove(this); w.ScreenMap.Remove(this); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
world.ScreenMap.Update(this, pos, anim.Image);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IRenderable> Render(WorldRenderer wr)
|
public IEnumerable<IRenderable> Render(WorldRenderer wr)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ using OpenRA.Mods.Cnc.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.Cnc.Effects
|
namespace OpenRA.Mods.Cnc.Effects
|
||||||
{
|
{
|
||||||
class SatelliteLaunch : IEffect
|
class SatelliteLaunch : IEffect, ISpatiallyPartitionable
|
||||||
{
|
{
|
||||||
readonly GpsPowerInfo info;
|
readonly GpsPowerInfo info;
|
||||||
readonly Actor launcher;
|
readonly Actor launcher;
|
||||||
@@ -31,14 +31,16 @@ namespace OpenRA.Mods.Cnc.Effects
|
|||||||
|
|
||||||
doors = new Animation(launcher.World, info.DoorImage);
|
doors = new Animation(launcher.World, info.DoorImage);
|
||||||
doors.PlayThen(info.DoorSequence,
|
doors.PlayThen(info.DoorSequence,
|
||||||
() => launcher.World.AddFrameEndTask(w => w.Remove(this)));
|
() => launcher.World.AddFrameEndTask(w => { w.Remove(this); w.ScreenMap.Remove(this); }));
|
||||||
|
|
||||||
pos = launcher.CenterPosition;
|
pos = launcher.CenterPosition;
|
||||||
|
launcher.World.ScreenMap.Add(this, pos, doors.Image);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Tick(World world)
|
public void Tick(World world)
|
||||||
{
|
{
|
||||||
doors.Tick();
|
doors.Tick();
|
||||||
|
world.ScreenMap.Update(this, pos, doors.Image);
|
||||||
|
|
||||||
if (++frame == 19)
|
if (++frame == 19)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user