Merge pull request #12168 from pchote/fix-range-circles
Work around an initialisation order conflict in RenderRangeCircle.
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -27,16 +28,16 @@ namespace OpenRA.Mods.Common.Traits.Render
|
|||||||
public readonly WDist FallbackRange = WDist.Zero;
|
public readonly WDist FallbackRange = WDist.Zero;
|
||||||
|
|
||||||
// Computed range
|
// Computed range
|
||||||
WDist range;
|
Lazy<WDist> range;
|
||||||
|
|
||||||
public IEnumerable<IRenderable> Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition)
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition)
|
||||||
{
|
{
|
||||||
if (range == WDist.Zero)
|
if (range == null || range.Value == WDist.Zero)
|
||||||
return SpriteRenderable.None;
|
return SpriteRenderable.None;
|
||||||
|
|
||||||
var localRange = new RangeCircleRenderable(
|
var localRange = new RangeCircleRenderable(
|
||||||
centerPosition,
|
centerPosition,
|
||||||
range,
|
range.Value,
|
||||||
0,
|
0,
|
||||||
Color.FromArgb(128, Color.Yellow),
|
Color.FromArgb(128, Color.Yellow),
|
||||||
Color.FromArgb(96, Color.Black));
|
Color.FromArgb(96, Color.Black));
|
||||||
@@ -52,12 +53,16 @@ namespace OpenRA.Mods.Common.Traits.Render
|
|||||||
|
|
||||||
public void RulesetLoaded(Ruleset rules, ActorInfo ai)
|
public void RulesetLoaded(Ruleset rules, ActorInfo ai)
|
||||||
{
|
{
|
||||||
var armaments = ai.TraitInfos<ArmamentInfo>().Where(a => a.UpgradeMinEnabledLevel == 0);
|
// ArmamentInfo.ModifiedRange is set by RulesetLoaded, and may not have been initialized yet.
|
||||||
|
// Defer this lookup until we really need it to ensure we get the correct value.
|
||||||
|
range = Exts.Lazy(() =>
|
||||||
|
{
|
||||||
|
var armaments = ai.TraitInfos<ArmamentInfo>().Where(a => a.UpgradeMinEnabledLevel == 0);
|
||||||
|
if (!armaments.Any())
|
||||||
|
return FallbackRange;
|
||||||
|
|
||||||
if (armaments.Any())
|
return armaments.Max(a => a.ModifiedRange);
|
||||||
range = armaments.Select(a => a.ModifiedRange).Max();
|
});
|
||||||
else
|
|
||||||
range = FallbackRange;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user