Use IRender.ScreenBounds in ScreenMap.
Traits are now required to trigger a ScreenMap update whenever they believe that their ScreenBounds have changed.
This commit is contained in:
@@ -40,6 +40,7 @@ namespace OpenRA.Mods.Cnc.Traits.Render
|
||||
readonly Cargo cargo;
|
||||
readonly BodyOrientation body;
|
||||
readonly IFacing facing;
|
||||
int cachedFacing;
|
||||
|
||||
Dictionary<Actor, IActorPreview[]> previews = new Dictionary<Actor, IActorPreview[]>();
|
||||
|
||||
@@ -58,6 +59,15 @@ namespace OpenRA.Mods.Cnc.Traits.Render
|
||||
if (actorPreviews != null)
|
||||
foreach (var preview in actorPreviews)
|
||||
preview.Tick();
|
||||
|
||||
// HACK: We don't have an efficient way to know when the preview
|
||||
// bounds change, so assume that we need to update the screen map
|
||||
// (only) when the facing changes
|
||||
if (facing.Facing != cachedFacing && previews.Any())
|
||||
{
|
||||
self.World.ScreenMap.AddOrUpdate(self);
|
||||
cachedFacing = facing.Facing;
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerable<IRenderable> IRender.Render(Actor self, WorldRenderer wr)
|
||||
@@ -110,12 +120,16 @@ namespace OpenRA.Mods.Cnc.Traits.Render
|
||||
void INotifyPassengerEntered.OnPassengerEntered(Actor self, Actor passenger)
|
||||
{
|
||||
if (info.DisplayTypes.Contains(passenger.Trait<Passenger>().Info.CargoType))
|
||||
{
|
||||
previews.Add(passenger, null);
|
||||
self.World.ScreenMap.AddOrUpdate(self);
|
||||
}
|
||||
}
|
||||
|
||||
void INotifyPassengerExited.OnPassengerExited(Actor self, Actor passenger)
|
||||
{
|
||||
previews.Remove(passenger);
|
||||
self.World.ScreenMap.AddOrUpdate(self);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user