Route viewport centering via WorldRenderer.
This commit is contained in:
@@ -45,11 +45,6 @@ namespace OpenRA
|
|||||||
public static Renderer Renderer;
|
public static Renderer Renderer;
|
||||||
public static bool HasInputFocus = false;
|
public static bool HasInputFocus = false;
|
||||||
|
|
||||||
public static void MoveViewport(float2 loc)
|
|
||||||
{
|
|
||||||
viewport.Center(loc);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void JoinServer(string host, int port)
|
public static void JoinServer(string host, int port)
|
||||||
{
|
{
|
||||||
JoinInner(new OrderManager(host, port,
|
JoinInner(new OrderManager(host, port,
|
||||||
|
|||||||
@@ -150,12 +150,17 @@ namespace OpenRA.Graphics
|
|||||||
scrollPosition = NormalizeScrollPosition((Game.CellSize * loc - 1f/(2*Zoom)*new float2(Game.Renderer.Resolution)).ToInt2());
|
scrollPosition = NormalizeScrollPosition((Game.CellSize * loc - 1f/(2*Zoom)*new float2(Game.Renderer.Resolution)).ToInt2());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Center(WPos pos)
|
||||||
|
{
|
||||||
|
Center(new float2(pos.X / 1024f, (pos.Y + pos.Z) / 1024f));
|
||||||
|
}
|
||||||
|
|
||||||
public void Center(IEnumerable<Actor> actors)
|
public void Center(IEnumerable<Actor> actors)
|
||||||
{
|
{
|
||||||
if (!actors.Any())
|
if (!actors.Any())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Center(actors.Select(a => a.CenterPosition).Average().ToCPos().ToFloat2());
|
Center(actors.Select(a => a.CenterPosition).Average());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rectangle (in viewport coords) that contains things to be drawn
|
// Rectangle (in viewport coords) that contains things to be drawn
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ namespace OpenRA.Graphics
|
|||||||
{
|
{
|
||||||
public readonly World world;
|
public readonly World world;
|
||||||
public readonly Theater Theater;
|
public readonly Theater Theater;
|
||||||
|
public Viewport Viewport { get { return Game.viewport; } }
|
||||||
|
|
||||||
internal readonly TerrainRenderer terrainRenderer;
|
internal readonly TerrainRenderer terrainRenderer;
|
||||||
internal readonly ShroudRenderer shroudRenderer;
|
internal readonly ShroudRenderer shroudRenderer;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using OpenRA.FileFormats;
|
using OpenRA.FileFormats;
|
||||||
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
|
|
||||||
namespace OpenRA
|
namespace OpenRA
|
||||||
@@ -64,7 +65,7 @@ namespace OpenRA
|
|||||||
|
|
||||||
Cache<int, List<Actor>> controlGroups = new Cache<int, List<Actor>>(_ => new List<Actor>());
|
Cache<int, List<Actor>> controlGroups = new Cache<int, List<Actor>>(_ => new List<Actor>());
|
||||||
|
|
||||||
public void DoControlGroup(World world, int group, Modifiers mods, int MultiTapCount)
|
public void DoControlGroup(World world, WorldRenderer worldRenderer, int group, Modifiers mods, int MultiTapCount)
|
||||||
{
|
{
|
||||||
var addModifier = Platform.CurrentPlatform == PlatformType.OSX ? Modifiers.Meta : Modifiers.Ctrl;
|
var addModifier = Platform.CurrentPlatform == PlatformType.OSX ? Modifiers.Meta : Modifiers.Ctrl;
|
||||||
if (mods.HasModifier(addModifier))
|
if (mods.HasModifier(addModifier))
|
||||||
@@ -84,7 +85,7 @@ namespace OpenRA
|
|||||||
|
|
||||||
if (mods.HasModifier(Modifiers.Alt) || MultiTapCount >= 2)
|
if (mods.HasModifier(Modifiers.Alt) || MultiTapCount >= 2)
|
||||||
{
|
{
|
||||||
Game.viewport.Center(controlGroups[group]);
|
worldRenderer.Viewport.Center(controlGroups[group]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -176,7 +176,7 @@ namespace OpenRA.Widgets
|
|||||||
{
|
{
|
||||||
if (e.KeyName.Length == 1 && char.IsDigit(e.KeyName[0]))
|
if (e.KeyName.Length == 1 && char.IsDigit(e.KeyName[0]))
|
||||||
{
|
{
|
||||||
world.Selection.DoControlGroup(world, e.KeyName[0] - '0', e.Modifiers, e.MultiTapCount);
|
world.Selection.DoControlGroup(world, worldRenderer, e.KeyName[0] - '0', e.Modifiers, e.MultiTapCount);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,14 +22,16 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
class CncShellmapScript : IWorldLoaded, ITick
|
class CncShellmapScript : IWorldLoaded, ITick
|
||||||
{
|
{
|
||||||
static CPos viewportOrigin;
|
WPos viewportOrigin;
|
||||||
Dictionary<string, Actor> actors;
|
Dictionary<string, Actor> actors;
|
||||||
|
WorldRenderer worldRenderer;
|
||||||
|
|
||||||
public void WorldLoaded(World w, WorldRenderer wr)
|
public void WorldLoaded(World w, WorldRenderer wr)
|
||||||
{
|
{
|
||||||
|
worldRenderer = wr;
|
||||||
var b = w.Map.Bounds;
|
var b = w.Map.Bounds;
|
||||||
viewportOrigin = new CPos(b.Left + b.Width / 2, b.Top + b.Height / 2);
|
viewportOrigin = new CPos(b.Left + b.Width / 2, b.Top + b.Height / 2).CenterPosition;
|
||||||
Game.MoveViewport(viewportOrigin.ToFloat2());
|
worldRenderer.Viewport.Center(viewportOrigin);
|
||||||
|
|
||||||
actors = w.WorldActor.Trait<SpawnMapActors>().Actors;
|
actors = w.WorldActor.Trait<SpawnMapActors>().Actors;
|
||||||
|
|
||||||
@@ -39,8 +41,8 @@ namespace OpenRA.Mods.RA
|
|||||||
void SetViewport()
|
void SetViewport()
|
||||||
{
|
{
|
||||||
var t = (ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed;
|
var t = (ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed;
|
||||||
var loc = viewportOrigin.ToFloat2() + (new float2(-15, 4) * float2.FromAngle((float)t));
|
var offset = new float2(-15360, 4096) * float2.FromAngle((float)t);
|
||||||
Game.viewport.Center(loc);
|
worldRenderer.Viewport.Center(viewportOrigin + new WVec((int)offset.X, (int)offset.Y, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
int ticks = 0;
|
int ticks = 0;
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ namespace OpenRA.Mods.Cnc.Missions
|
|||||||
players = w.Players.ToDictionary(p => p.InternalName);
|
players = w.Players.ToDictionary(p => p.InternalName);
|
||||||
actors = w.WorldActor.Trait<SpawnMapActors>().Actors;
|
actors = w.WorldActor.Trait<SpawnMapActors>().Actors;
|
||||||
var b = w.Map.Bounds;
|
var b = w.Map.Bounds;
|
||||||
Game.MoveViewport(new CPos(b.Left + b.Width / 2, b.Top + b.Height / 2).ToFloat2());
|
wr.Viewport.Center(new CPos(b.Left + b.Width / 2, b.Top + b.Height / 2).CenterPosition);
|
||||||
|
|
||||||
Action afterFMV = () =>
|
Action afterFMV = () =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -193,13 +193,10 @@ namespace OpenRA.Mods.Cnc.Missions
|
|||||||
nr1 = actors["NODReinforceNthA"];
|
nr1 = actors["NODReinforceNthA"];
|
||||||
nr2 = actors["NODReinforceNthB"];
|
nr2 = actors["NODReinforceNthB"];
|
||||||
nr3 = actors["NODReinforceNWstA"];
|
nr3 = actors["NODReinforceNWstA"];
|
||||||
Game.MoveViewport(nr1.Location.ToFloat2());
|
|
||||||
Action afterFMV = () =>
|
wr.Viewport.Center(nr1.Location.CenterPosition);
|
||||||
{
|
|
||||||
MissionUtils.PlayMissionMusic();
|
|
||||||
};
|
|
||||||
Game.RunAfterDelay(0, () => Media.PlayFMVFullscreen(w, "nod1pre.vqa", () =>
|
Game.RunAfterDelay(0, () => Media.PlayFMVFullscreen(w, "nod1pre.vqa", () =>
|
||||||
Media.PlayFMVFullscreen(w, "nod1.vqa", afterFMV)));
|
Media.PlayFMVFullscreen(w, "nod1.vqa", MissionUtils.PlayMissionMusic)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
// Set viewport
|
// Set viewport
|
||||||
if (world.LocalPlayer != null && Start.ContainsKey(world.LocalPlayer))
|
if (world.LocalPlayer != null && Start.ContainsKey(world.LocalPlayer))
|
||||||
Game.viewport.Center(Start[world.LocalPlayer].ToFloat2());
|
wr.Viewport.Center(Start[world.LocalPlayer].CenterPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Player FindPlayerInSlot(World world, string pr)
|
static Player FindPlayerInSlot(World world, string pr)
|
||||||
|
|||||||
@@ -300,7 +300,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
attackEntryPoint2 = actors["SovietAttackEntryPoint2"];
|
attackEntryPoint2 = actors["SovietAttackEntryPoint2"];
|
||||||
SetAlliedUnitsToDefensiveStance();
|
SetAlliedUnitsToDefensiveStance();
|
||||||
|
|
||||||
Game.MoveViewport(insertionLZ.Location.ToFloat2());
|
wr.Viewport.Center(insertionLZ.CenterPosition);
|
||||||
|
|
||||||
if (w.LobbyInfo.IsSinglePlayer)
|
if (w.LobbyInfo.IsSinglePlayer)
|
||||||
Media.PlayFMVFullscreen(w, "ally1.vqa", () =>
|
Media.PlayFMVFullscreen(w, "ally1.vqa", () =>
|
||||||
|
|||||||
@@ -468,10 +468,9 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
shroud.Explore(w, sam4.Location, 2);
|
shroud.Explore(w, sam4.Location, 2);
|
||||||
|
|
||||||
if (w.LocalPlayer == null || w.LocalPlayer == allies1)
|
if (w.LocalPlayer == null || w.LocalPlayer == allies1)
|
||||||
Game.MoveViewport(chinookHusk.Location.ToFloat2());
|
wr.Viewport.Center(chinookHusk.CenterPosition);
|
||||||
|
|
||||||
else
|
else
|
||||||
Game.MoveViewport(allies2BasePoint.Location.ToFloat2());
|
wr.Viewport.Center(allies2BasePoint.CenterPosition);
|
||||||
|
|
||||||
MissionUtils.PlayMissionMusic();
|
MissionUtils.PlayMissionMusic();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -448,10 +448,9 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
paradropBox = new Rectangle(topLeft.Location.X, topLeft.Location.Y, bottomRight.Location.X - topLeft.Location.X, bottomRight.Location.Y - topLeft.Location.Y);
|
paradropBox = new Rectangle(topLeft.Location.X, topLeft.Location.Y, bottomRight.Location.X - topLeft.Location.X, bottomRight.Location.Y - topLeft.Location.Y);
|
||||||
|
|
||||||
if (w.LocalPlayer == null || w.LocalPlayer == allies1)
|
if (w.LocalPlayer == null || w.LocalPlayer == allies1)
|
||||||
Game.MoveViewport(allies1EntryPoint.Location.ToFloat2());
|
wr.Viewport.Center(allies1EntryPoint.CenterPosition);
|
||||||
|
|
||||||
else
|
else
|
||||||
Game.MoveViewport(allies2EntryPoint.Location.ToFloat2());
|
wr.Viewport.Center(allies2EntryPoint.CenterPosition);
|
||||||
|
|
||||||
OnObjectivesUpdated(false);
|
OnObjectivesUpdated(false);
|
||||||
MissionUtils.PlayMissionMusic();
|
MissionUtils.PlayMissionMusic();
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
Player soviets;
|
Player soviets;
|
||||||
Player creeps;
|
Player creeps;
|
||||||
World world;
|
World world;
|
||||||
|
WorldRenderer worldRenderer;
|
||||||
|
|
||||||
List<Patrol> patrols;
|
List<Patrol> patrols;
|
||||||
CPos[] patrolPoints1;
|
CPos[] patrolPoints1;
|
||||||
@@ -110,7 +111,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
if (world.FrameNumber == frameInfiltrated + 100)
|
if (world.FrameNumber == frameInfiltrated + 100)
|
||||||
{
|
{
|
||||||
Sound.Play("aarrivs1.aud");
|
Sound.Play("aarrivs1.aud");
|
||||||
Game.MoveViewport(reinforcementsUnloadPoint.Location.ToFloat2());
|
worldRenderer.Viewport.Center(reinforcementsUnloadPoint.CenterPosition);
|
||||||
world.AddFrameEndTask(w => SendReinforcements());
|
world.AddFrameEndTask(w => SendReinforcements());
|
||||||
}
|
}
|
||||||
if (world.FrameNumber == frameInfiltrated + 200)
|
if (world.FrameNumber == frameInfiltrated + 200)
|
||||||
@@ -354,6 +355,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
public void WorldLoaded(World w, WorldRenderer wr)
|
public void WorldLoaded(World w, WorldRenderer wr)
|
||||||
{
|
{
|
||||||
world = w;
|
world = w;
|
||||||
|
worldRenderer = wr;
|
||||||
|
|
||||||
difficulty = w.LobbyInfo.GlobalSettings.Difficulty;
|
difficulty = w.LobbyInfo.GlobalSettings.Difficulty;
|
||||||
Game.Debug("{0} difficulty selected".F(difficulty));
|
Game.Debug("{0} difficulty selected".F(difficulty));
|
||||||
@@ -453,7 +455,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
OnObjectivesUpdated(false);
|
OnObjectivesUpdated(false);
|
||||||
SetupSubStances();
|
SetupSubStances();
|
||||||
|
|
||||||
Game.MoveViewport(spyReinforcementsEntryPoint.Location.ToFloat2());
|
worldRenderer.Viewport.Center(spyReinforcementsEntryPoint.CenterPosition);
|
||||||
MissionUtils.PlayMissionMusic();
|
MissionUtils.PlayMissionMusic();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,13 +22,15 @@ namespace OpenRA.Mods.RA
|
|||||||
class DefaultShellmapScript: IWorldLoaded, ITick
|
class DefaultShellmapScript: IWorldLoaded, ITick
|
||||||
{
|
{
|
||||||
Dictionary<string, Actor> Actors;
|
Dictionary<string, Actor> Actors;
|
||||||
static CPos ViewportOrigin;
|
static WPos ViewportOrigin;
|
||||||
|
WorldRenderer worldRenderer;
|
||||||
|
|
||||||
public void WorldLoaded(World w, WorldRenderer wr)
|
public void WorldLoaded(World w, WorldRenderer wr)
|
||||||
{
|
{
|
||||||
|
worldRenderer = wr;
|
||||||
var b = w.Map.Bounds;
|
var b = w.Map.Bounds;
|
||||||
ViewportOrigin = new CPos(b.Left + b.Width/2, b.Top + b.Height/2);
|
ViewportOrigin = new CPos(b.Left + b.Width/2, b.Top + b.Height/2).CenterPosition;
|
||||||
Game.MoveViewport(ViewportOrigin.ToFloat2());
|
worldRenderer.Viewport.Center(ViewportOrigin);
|
||||||
|
|
||||||
Actors = w.WorldActor.Trait<SpawnMapActors>().Actors;
|
Actors = w.WorldActor.Trait<SpawnMapActors>().Actors;
|
||||||
Sound.SoundVolumeModifier = 0.25f;
|
Sound.SoundVolumeModifier = 0.25f;
|
||||||
@@ -38,12 +40,9 @@ namespace OpenRA.Mods.RA
|
|||||||
float speed = 4f;
|
float speed = 4f;
|
||||||
public void Tick(Actor self)
|
public void Tick(Actor self)
|
||||||
{
|
{
|
||||||
var loc = new float2(
|
var t = (ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed;
|
||||||
(float)(System.Math.Sin((ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed) * 15f + ViewportOrigin.X),
|
var offset = new float2(15360, 10240) * float2.FromAngle((float)t);
|
||||||
(float)(System.Math.Cos((ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed) * 10f + ViewportOrigin.Y)
|
worldRenderer.Viewport.Center(ViewportOrigin + new WVec((int)offset.X, (int)offset.Y, 0));
|
||||||
);
|
|
||||||
|
|
||||||
Game.MoveViewport(loc);
|
|
||||||
|
|
||||||
if (ticks == 50)
|
if (ticks == 50)
|
||||||
{
|
{
|
||||||
@@ -54,7 +53,6 @@ namespace OpenRA.Mods.RA
|
|||||||
}, Actors["pdox"], -1, false);
|
}, Actors["pdox"], -1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (ticks == 100)
|
if (ticks == 100)
|
||||||
Actors["mslo1"].Trait<NukePower>().Activate(Actors["mslo1"], new Order() { TargetLocation = new CPos(98, 52) });
|
Actors["mslo1"].Trait<NukePower>().Activate(Actors["mslo1"], new Order() { TargetLocation = new CPos(98, 52) });
|
||||||
if (ticks == 140)
|
if (ticks == 140)
|
||||||
|
|||||||
@@ -26,16 +26,17 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
class DesertShellmapScript : ITick, IWorldLoaded
|
class DesertShellmapScript : ITick, IWorldLoaded
|
||||||
{
|
{
|
||||||
World world;
|
World world;
|
||||||
|
WorldRenderer worldRenderer;
|
||||||
Player allies;
|
Player allies;
|
||||||
Player soviets;
|
Player soviets;
|
||||||
Player neutral;
|
Player neutral;
|
||||||
|
|
||||||
List<int2> viewportTargets = new List<int2>();
|
WPos[] viewportTargets;
|
||||||
int2 viewportTarget;
|
WPos viewportTarget;
|
||||||
int viewportTargetNumber;
|
int viewportTargetNumber;
|
||||||
int2 viewportOrigin;
|
WPos viewportOrigin;
|
||||||
float mul;
|
int mul;
|
||||||
float div = 400;
|
int div = 400;
|
||||||
int waitTicks = 0;
|
int waitTicks = 0;
|
||||||
|
|
||||||
int nextCivilianMove = 1;
|
int nextCivilianMove = 1;
|
||||||
@@ -138,12 +139,12 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
if (--waitTicks <= 0)
|
if (--waitTicks <= 0)
|
||||||
{
|
{
|
||||||
if (++mul <= div)
|
if (++mul <= div)
|
||||||
Game.MoveViewport(float2.Lerp(viewportOrigin, viewportTarget, mul / div));
|
worldRenderer.Viewport.Center(WPos.Lerp(viewportOrigin, viewportTarget, mul, div));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mul = 0;
|
mul = 0;
|
||||||
viewportOrigin = viewportTarget;
|
viewportOrigin = viewportTarget;
|
||||||
viewportTarget = viewportTargets[(viewportTargetNumber = (viewportTargetNumber + 1) % viewportTargets.Count)];
|
viewportTarget = viewportTargets[(viewportTargetNumber = (viewportTargetNumber + 1) % viewportTargets.Length)];
|
||||||
waitTicks = 100;
|
waitTicks = 100;
|
||||||
|
|
||||||
if (viewportTargetNumber == 0)
|
if (viewportTargetNumber == 0)
|
||||||
@@ -238,7 +239,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
public void WorldLoaded(World w, WorldRenderer wr)
|
public void WorldLoaded(World w, WorldRenderer wr)
|
||||||
{
|
{
|
||||||
world = w;
|
world = w;
|
||||||
|
worldRenderer = wr;
|
||||||
allies = w.Players.Single(p => p.InternalName == "Allies");
|
allies = w.Players.Single(p => p.InternalName == "Allies");
|
||||||
soviets = w.Players.Single(p => p.InternalName == "Soviets");
|
soviets = w.Players.Single(p => p.InternalName == "Soviets");
|
||||||
neutral = w.Players.Single(p => p.InternalName == "Neutral");
|
neutral = w.Players.Single(p => p.InternalName == "Neutral");
|
||||||
@@ -254,12 +255,12 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
paradrop2LZ = actors["Paradrop2LZ"];
|
paradrop2LZ = actors["Paradrop2LZ"];
|
||||||
paradrop2Entry = actors["Paradrop2Entry"];
|
paradrop2Entry = actors["Paradrop2Entry"];
|
||||||
|
|
||||||
var t1 = actors["ViewportTarget1"];
|
var t1 = actors["ViewportTarget1"].CenterPosition;
|
||||||
var t2 = actors["ViewportTarget2"];
|
var t2 = actors["ViewportTarget2"].CenterPosition;
|
||||||
var t3 = actors["ViewportTarget3"];
|
var t3 = actors["ViewportTarget3"].CenterPosition;
|
||||||
var t4 = actors["ViewportTarget4"];
|
var t4 = actors["ViewportTarget4"].CenterPosition;
|
||||||
var t5 = actors["ViewportTarget5"];
|
var t5 = actors["ViewportTarget5"].CenterPosition;
|
||||||
viewportTargets = new[] { t1, t2, t3, t4, t5 }.Select(t => t.Location.ToInt2()).ToList();
|
viewportTargets = new[] { t1, t2, t3, t4, t5 };
|
||||||
|
|
||||||
offmapAttackerSpawn1 = actors["OffmapAttackerSpawn1"];
|
offmapAttackerSpawn1 = actors["OffmapAttackerSpawn1"];
|
||||||
offmapAttackerSpawn2 = actors["OffmapAttackerSpawn2"];
|
offmapAttackerSpawn2 = actors["OffmapAttackerSpawn2"];
|
||||||
@@ -298,7 +299,8 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
viewportOrigin = viewportTargets[0];
|
viewportOrigin = viewportTargets[0];
|
||||||
viewportTargetNumber = 1;
|
viewportTargetNumber = 1;
|
||||||
viewportTarget = viewportTargets[1];
|
viewportTarget = viewportTargets[1];
|
||||||
Game.viewport.Center(viewportOrigin);
|
|
||||||
|
wr.Viewport.Center(viewportOrigin);
|
||||||
Sound.SoundVolumeModifier = 0.1f;
|
Sound.SoundVolumeModifier = 0.1f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -335,7 +335,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
superTankDome.AddTrait(new InfiltrateAction(OnSuperTankDomeInfiltrated));
|
superTankDome.AddTrait(new InfiltrateAction(OnSuperTankDomeInfiltrated));
|
||||||
superTankDome.AddTrait(new TransformedAction(self => superTankDome = self));
|
superTankDome.AddTrait(new TransformedAction(self => superTankDome = self));
|
||||||
|
|
||||||
Game.MoveViewport(startEntryPoint.Location.ToFloat2());
|
wr.Viewport.Center(startEntryPoint.CenterPosition);
|
||||||
MissionUtils.PlayMissionMusic();
|
MissionUtils.PlayMissionMusic();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
airfield3 = actors["Airfield3"];
|
airfield3 = actors["Airfield3"];
|
||||||
airfields = new[] { airfield1, airfield2, airfield3 };
|
airfields = new[] { airfield1, airfield2, airfield3 };
|
||||||
|
|
||||||
Game.MoveViewport(startJeep.Location.ToFloat2());
|
wr.Viewport.Center(startJeep.CenterPosition);
|
||||||
|
|
||||||
if (w.LobbyInfo.IsSinglePlayer)
|
if (w.LobbyInfo.IsSinglePlayer)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -336,7 +336,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
shroud.Explore(w, sam1.Location, 4);
|
shroud.Explore(w, sam1.Location, 4);
|
||||||
shroud.Explore(w, sam2.Location, 4);
|
shroud.Explore(w, sam2.Location, 4);
|
||||||
|
|
||||||
Game.MoveViewport(alliesbase.Location.ToFloat2());
|
wr.Viewport.Center(alliesbase.CenterPosition);
|
||||||
StartCountDownTimer();
|
StartCountDownTimer();
|
||||||
SendSquad1();
|
SendSquad1();
|
||||||
SendSquad2();
|
SendSquad2();
|
||||||
|
|||||||
@@ -80,8 +80,8 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
Actor FranceparaEntry2;
|
Actor FranceparaEntry2;
|
||||||
Actor FranceparaEntry3;
|
Actor FranceparaEntry3;
|
||||||
|
|
||||||
|
|
||||||
World world;
|
World world;
|
||||||
|
WorldRenderer worldRenderer;
|
||||||
|
|
||||||
CountdownTimer survivalTimer;
|
CountdownTimer survivalTimer;
|
||||||
CountdownTimerWidget survivalTimerWidget;
|
CountdownTimerWidget survivalTimerWidget;
|
||||||
@@ -168,7 +168,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
|
|
||||||
void FrenchReinforcements()
|
void FrenchReinforcements()
|
||||||
{
|
{
|
||||||
Game.MoveViewport(sovietrally1.Location.ToFloat2());
|
worldRenderer.Viewport.Center(sovietrally1.CenterPosition);
|
||||||
MissionUtils.Parabomb(world, allies, FranceparaEntry1.Location, drum3.Location);
|
MissionUtils.Parabomb(world, allies, FranceparaEntry1.Location, drum3.Location);
|
||||||
MissionUtils.Parabomb(world, allies, FranceparaEntry3.Location, drum2.Location);
|
MissionUtils.Parabomb(world, allies, FranceparaEntry3.Location, drum2.Location);
|
||||||
MissionUtils.Parabomb(world, allies, FranceparaEntry2.Location, drum1.Location);
|
MissionUtils.Parabomb(world, allies, FranceparaEntry2.Location, drum1.Location);
|
||||||
@@ -355,6 +355,8 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
public void WorldLoaded(World w, WorldRenderer wr)
|
public void WorldLoaded(World w, WorldRenderer wr)
|
||||||
{
|
{
|
||||||
world = w;
|
world = w;
|
||||||
|
worldRenderer = wr;
|
||||||
|
|
||||||
allies = w.Players.SingleOrDefault(p => p.InternalName == "Allies");
|
allies = w.Players.SingleOrDefault(p => p.InternalName == "Allies");
|
||||||
if (allies != null)
|
if (allies != null)
|
||||||
{
|
{
|
||||||
@@ -395,7 +397,8 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
FranceparaEntry3 = actors["FranceparaEntry3"];
|
FranceparaEntry3 = actors["FranceparaEntry3"];
|
||||||
newsovietentrypoints = new[] { sovietparadropEntry, sovietEntry3 }.Select(p => p.Location).ToArray();
|
newsovietentrypoints = new[] { sovietparadropEntry, sovietEntry3 }.Select(p => p.Location).ToArray();
|
||||||
newsovietrallypoints = new[] { sovietrally3, sovietrally4, sovietrally8 }.Select(p => p.Location).ToArray();
|
newsovietrallypoints = new[] { sovietrally3, sovietrally4, sovietrally8 }.Select(p => p.Location).ToArray();
|
||||||
Game.MoveViewport(alliesbase.Location.ToFloat2());
|
|
||||||
|
worldRenderer.Viewport.Center(alliesbase.CenterPosition);
|
||||||
StartCountDownTimer();
|
StartCountDownTimer();
|
||||||
SetSovietUnitsToDefensiveStance();
|
SetSovietUnitsToDefensiveStance();
|
||||||
world.CreateActor(Camera, new TypeDictionary
|
world.CreateActor(Camera, new TypeDictionary
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ using System.Collections.Generic;
|
|||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using OpenRA.FileFormats;
|
using OpenRA.FileFormats;
|
||||||
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Mods.RA.Buildings;
|
using OpenRA.Mods.RA.Buildings;
|
||||||
using OpenRA.Network;
|
using OpenRA.Network;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
@@ -37,11 +38,13 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
DropDownButtonWidget statsDropDown;
|
DropDownButtonWidget statsDropDown;
|
||||||
IEnumerable<Player> players;
|
IEnumerable<Player> players;
|
||||||
World world;
|
World world;
|
||||||
|
WorldRenderer worldRenderer;
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public ObserverStatsLogic(World world, Widget widget)
|
public ObserverStatsLogic(World world, WorldRenderer worldRenderer, Widget widget)
|
||||||
{
|
{
|
||||||
this.world = world;
|
this.world = world;
|
||||||
|
this.worldRenderer = worldRenderer;
|
||||||
players = world.Players.Where(p => !p.NonCombatant);
|
players = world.Players.Where(p => !p.NonCombatant);
|
||||||
|
|
||||||
basicStatsHeaders = widget.Get<ContainerWidget>("BASIC_STATS_HEADERS");
|
basicStatsHeaders = widget.Get<ContainerWidget>("BASIC_STATS_HEADERS");
|
||||||
@@ -272,9 +275,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
{
|
{
|
||||||
var playerBase = world.Actors.FirstOrDefault(a => !a.IsDead() && a.HasTrait<BaseBuilding>() && a.Owner == player);
|
var playerBase = world.Actors.FirstOrDefault(a => !a.IsDead() && a.HasTrait<BaseBuilding>() && a.Owner == player);
|
||||||
if (playerBase != null)
|
if (playerBase != null)
|
||||||
{
|
worldRenderer.Viewport.Center(playerBase.CenterPosition);
|
||||||
Game.MoveViewport(playerBase.Location.ToFloat2());
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,12 +22,14 @@ namespace OpenRA.Mods.RA.Widgets
|
|||||||
{
|
{
|
||||||
public class WorldCommandWidget : Widget
|
public class WorldCommandWidget : Widget
|
||||||
{
|
{
|
||||||
World world;
|
readonly World world;
|
||||||
|
readonly WorldRenderer worldRenderer;
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public WorldCommandWidget(World world)
|
public WorldCommandWidget(World world, WorldRenderer worldRenderer)
|
||||||
{
|
{
|
||||||
this.world = world;
|
this.world = world;
|
||||||
|
this.worldRenderer = worldRenderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string GetCursor(int2 pos) { return null; }
|
public override string GetCursor(int2 pos) { return null; }
|
||||||
@@ -207,13 +209,13 @@ namespace OpenRA.Mods.RA.Widgets
|
|||||||
if (eventNotifier.lastAttackTime < 0)
|
if (eventNotifier.lastAttackTime < 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
Game.viewport.Center(eventNotifier.lastAttackLocation.ToFloat2());
|
worldRenderer.Viewport.Center(eventNotifier.lastAttackLocation.CenterPosition);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToSelection()
|
bool ToSelection()
|
||||||
{
|
{
|
||||||
Game.viewport.Center(world.Selection.Actors);
|
worldRenderer.Viewport.Center(world.Selection.Actors);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user