Refactor per-player shrouds & fix shellmap shroud.
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using OpenRA.Effects;
|
||||
using OpenRA.FileFormats;
|
||||
@@ -40,11 +41,25 @@ namespace OpenRA
|
||||
|
||||
public void AddPlayer(Player p) { Players.Add(p); }
|
||||
public Player LocalPlayer { get; private set; }
|
||||
public readonly Shroud LocalShroud;
|
||||
public bool Observer { get { return LocalPlayer == null; } }
|
||||
public Player RenderedPlayer;
|
||||
public Shroud RenderedShroud { get { return RenderedPlayer != null ? RenderedPlayer.Shroud : LocalShroud; } }
|
||||
|
||||
|
||||
Player renderPlayer;
|
||||
public Player RenderPlayer
|
||||
{
|
||||
get { return renderPlayer; }
|
||||
set
|
||||
{
|
||||
renderPlayer = value;
|
||||
if (renderPlayer != null)
|
||||
renderPlayer.Shroud.Dirty();
|
||||
}
|
||||
}
|
||||
|
||||
public Rectangle? VisibleBounds { get { return renderPlayer != null ? renderPlayer.Shroud.Bounds : null; } }
|
||||
public bool FogObscures(Actor a) { return renderPlayer != null && !renderPlayer.Shroud.IsVisible(a); }
|
||||
public bool FogObscures(CPos p) { return renderPlayer != null && !renderPlayer.Shroud.IsVisible(p); }
|
||||
public bool ShroudObscures(Actor a) { return renderPlayer != null && !renderPlayer.Shroud.IsExplored(a); }
|
||||
public bool ShroudObscures(CPos p) { return renderPlayer != null && !renderPlayer.Shroud.IsExplored(p); }
|
||||
|
||||
public void SetLocalPlayer(string pr)
|
||||
{
|
||||
@@ -52,7 +67,7 @@ namespace OpenRA
|
||||
return;
|
||||
|
||||
LocalPlayer = Players.FirstOrDefault(p => p.InternalName == pr);
|
||||
RenderedPlayer = LocalPlayer;
|
||||
RenderPlayer = LocalPlayer;
|
||||
}
|
||||
|
||||
public readonly Actor WorldActor;
|
||||
@@ -104,7 +119,6 @@ namespace OpenRA
|
||||
SharedRandom = new XRandom(orderManager.LobbyInfo.GlobalSettings.RandomSeed);
|
||||
|
||||
WorldActor = CreateActor( "World", new TypeDictionary() );
|
||||
LocalShroud = WorldActor.Trait<Shroud>();
|
||||
ActorMap = new ActorMap(this);
|
||||
|
||||
// Add players
|
||||
|
||||
Reference in New Issue
Block a user