Fix IDE0039
This commit is contained in:
@@ -9,7 +9,6 @@
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@@ -257,16 +256,16 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
var mapTiles = map.Tiles;
|
||||
var replace = mapTiles[cell];
|
||||
|
||||
Action<CPos> maybeEnqueue = newCell =>
|
||||
void MaybeEnqueue(CPos newCell)
|
||||
{
|
||||
if (map.Contains(cell) && !touched[newCell])
|
||||
{
|
||||
queue.Enqueue(newCell);
|
||||
touched[newCell] = true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Func<CPos, bool> shouldPaint = cellToCheck =>
|
||||
bool ShouldPaint(CPos cellToCheck)
|
||||
{
|
||||
for (var y = 0; y < terrainTemplate.Size.Y; y++)
|
||||
{
|
||||
@@ -279,28 +278,28 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
}
|
||||
|
||||
Func<CPos, CVec, CPos> findEdge = (refCell, direction) =>
|
||||
CPos FindEdge(CPos refCell, CVec direction)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
var newCell = refCell + direction;
|
||||
if (!shouldPaint(newCell))
|
||||
if (!ShouldPaint(newCell))
|
||||
return refCell;
|
||||
refCell = newCell;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
queue.Enqueue(cell);
|
||||
while (queue.Count > 0)
|
||||
{
|
||||
var queuedCell = queue.Dequeue();
|
||||
if (!shouldPaint(queuedCell))
|
||||
if (!ShouldPaint(queuedCell))
|
||||
continue;
|
||||
|
||||
var previousCell = findEdge(queuedCell, new CVec(-1 * terrainTemplate.Size.X, 0));
|
||||
var nextCell = findEdge(queuedCell, new CVec(1 * terrainTemplate.Size.X, 0));
|
||||
var previousCell = FindEdge(queuedCell, new CVec(-1 * terrainTemplate.Size.X, 0));
|
||||
var nextCell = FindEdge(queuedCell, new CVec(1 * terrainTemplate.Size.X, 0));
|
||||
|
||||
for (var x = previousCell.X; x <= nextCell.X; x += terrainTemplate.Size.X)
|
||||
{
|
||||
@@ -308,10 +307,10 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
var upperCell = new CPos(x, queuedCell.Y - (1 * terrainTemplate.Size.Y));
|
||||
var lowerCell = new CPos(x, queuedCell.Y + (1 * terrainTemplate.Size.Y));
|
||||
|
||||
if (shouldPaint(upperCell))
|
||||
maybeEnqueue(upperCell);
|
||||
if (shouldPaint(lowerCell))
|
||||
maybeEnqueue(lowerCell);
|
||||
if (ShouldPaint(upperCell))
|
||||
MaybeEnqueue(upperCell);
|
||||
if (ShouldPaint(lowerCell))
|
||||
MaybeEnqueue(lowerCell);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -330,7 +330,7 @@ namespace OpenRA.Mods.Common.Graphics
|
||||
var offset = LoadField(Offset, data, defaults);
|
||||
var blendMode = LoadField(BlendMode, data, defaults);
|
||||
|
||||
Func<int, IEnumerable<int>> getUsedFrames = frameCount =>
|
||||
IEnumerable<int> GetUsedFrames(int frameCount)
|
||||
{
|
||||
if (LoadField(Length.Key, "", data, defaults) == "*")
|
||||
length = frames?.Length ?? frameCount - start;
|
||||
@@ -387,7 +387,7 @@ namespace OpenRA.Mods.Common.Graphics
|
||||
return usedFrames.Concat(usedFrames.Select(i => i + shadowStart - start));
|
||||
|
||||
return usedFrames;
|
||||
};
|
||||
}
|
||||
|
||||
var combineNode = data.Nodes.FirstOrDefault(n => n.Key == Combine.Key);
|
||||
if (combineNode != null)
|
||||
@@ -406,7 +406,7 @@ namespace OpenRA.Mods.Common.Graphics
|
||||
var subFrames = LoadField(Frames, combineData, NoData);
|
||||
var subLength = 0;
|
||||
|
||||
Func<int, IEnumerable<int>> subGetUsedFrames = subFrameCount =>
|
||||
IEnumerable<int> SubGetUsedFrames(int subFrameCount)
|
||||
{
|
||||
var combineLengthNode = combineData.Nodes.FirstOrDefault(n => n.Key == Length.Key);
|
||||
if (combineLengthNode?.Value.Value == "*")
|
||||
@@ -415,13 +415,13 @@ namespace OpenRA.Mods.Common.Graphics
|
||||
subLength = LoadField(Length, combineData, NoData);
|
||||
|
||||
return subFrames != null ? subFrames.Skip(subStart).Take(subLength) : Enumerable.Range(subStart, subLength);
|
||||
};
|
||||
}
|
||||
|
||||
var subFilename = GetSpriteFilename(modData, tileSet, image, sequence, combineData, NoData);
|
||||
if (subFilename == null)
|
||||
throw new YamlException($"Sequence {image}.{sequence}.{combineSequenceNode.Key} does not define a filename.");
|
||||
|
||||
var subSprites = cache[subFilename, subGetUsedFrames].Select(s =>
|
||||
var subSprites = cache[subFilename, SubGetUsedFrames].Select(s =>
|
||||
{
|
||||
if (s == null)
|
||||
return null;
|
||||
@@ -439,7 +439,7 @@ namespace OpenRA.Mods.Common.Graphics
|
||||
}
|
||||
|
||||
sprites = combined.ToArray();
|
||||
getUsedFrames(sprites.Length);
|
||||
GetUsedFrames(sprites.Length);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -449,7 +449,7 @@ namespace OpenRA.Mods.Common.Graphics
|
||||
if (filename == null)
|
||||
throw new YamlException($"Sequence {image}.{sequence} does not define a filename.");
|
||||
|
||||
sprites = cache[filename, getUsedFrames].Select(s =>
|
||||
sprites = cache[filename, GetUsedFrames].Select(s =>
|
||||
{
|
||||
if (s == null)
|
||||
return null;
|
||||
|
||||
@@ -63,8 +63,8 @@ namespace OpenRA.Mods.Common.Installer
|
||||
{
|
||||
Log.Write("install", $"Extracting {sourcePath} -> {targetPath}");
|
||||
var displayFilename = Path.GetFileName(Path.GetFileName(targetPath));
|
||||
Action<int> onProgress = percent => updateMessage(modData.Translation.GetString(InstallFromSourceLogic.ExtracingProgress, Translation.Arguments("filename", displayFilename, "progress", percent)));
|
||||
reader.ExtractFile(node.Value.Value, target, onProgress);
|
||||
void OnProgress(int percent) => updateMessage(modData.Translation.GetString(InstallFromSourceLogic.ExtracingProgress, Translation.Arguments("filename", displayFilename, "progress", percent)));
|
||||
reader.ExtractFile(node.Value.Value, target, OnProgress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,8 +44,8 @@ namespace OpenRA.Mods.Common.Installer
|
||||
{
|
||||
Log.Write("install", $"Extracting {sourcePath} -> {targetPath}");
|
||||
var displayFilename = Path.GetFileName(Path.GetFileName(targetPath));
|
||||
Action<int> onProgress = percent => updateMessage(modData.Translation.GetString(InstallFromSourceLogic.ExtracingProgress, Translation.Arguments("filename", displayFilename, "progress", percent)));
|
||||
reader.ExtractFile(node.Value.Value, target, onProgress);
|
||||
void OnProgress(int percent) => updateMessage(modData.Translation.GetString(InstallFromSourceLogic.ExtracingProgress, Translation.Arguments("filename", displayFilename, "progress", percent)));
|
||||
reader.ExtractFile(node.Value.Value, target, OnProgress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
public void AfterDelay(int delay, LuaFunction func)
|
||||
{
|
||||
var f = (LuaFunction)func.CopyReference();
|
||||
Action doCall = () =>
|
||||
void DoCall()
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -47,9 +47,9 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
{
|
||||
Context.FatalError(e.Message);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Context.World.AddFrameEndTask(w => w.Add(new DelayedAction(delay, doCall)));
|
||||
Context.World.AddFrameEndTask(w => w.Add(new DelayedAction(delay, DoCall)));
|
||||
}
|
||||
|
||||
[Desc("Call a function for each passenger when it enters a transport. " +
|
||||
@@ -93,7 +93,7 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
{
|
||||
var group = actors.ToList();
|
||||
var f = (LuaFunction)func.CopyReference();
|
||||
Action<Actor> onMemberKilled = m =>
|
||||
void OnMemberKilled(Actor m)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -106,10 +106,10 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
{
|
||||
Context.FatalError(e.Message);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
foreach (var a in group)
|
||||
GetScriptTriggers(a).OnKilledInternal += onMemberKilled;
|
||||
GetScriptTriggers(a).OnKilledInternal += OnMemberKilled;
|
||||
}
|
||||
|
||||
[Desc("Call a function when one of the actors in a group is killed. The callback " +
|
||||
@@ -118,7 +118,7 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
{
|
||||
var called = false;
|
||||
var f = (LuaFunction)func.CopyReference();
|
||||
Action<Actor> onMemberKilled = m =>
|
||||
void OnMemberKilled(Actor m)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -135,10 +135,10 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
{
|
||||
Context.FatalError(e.Message);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
foreach (var a in actors)
|
||||
GetScriptTriggers(a).OnKilledInternal += onMemberKilled;
|
||||
GetScriptTriggers(a).OnKilledInternal += OnMemberKilled;
|
||||
}
|
||||
|
||||
[Desc("Call a function when this actor produces another actor. " +
|
||||
@@ -211,7 +211,7 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
var group = actors.ToList();
|
||||
|
||||
var f = (LuaFunction)func.CopyReference();
|
||||
Action<Actor> onMemberRemoved = m =>
|
||||
void OnMemberRemoved(Actor m)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -230,9 +230,9 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
{
|
||||
Context.FatalError(e.Message);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Action<Actor> onMemberAdded = m =>
|
||||
void OnMemberAdded(Actor m)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -245,12 +245,12 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
{
|
||||
Context.FatalError(e.Message);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
foreach (var a in group)
|
||||
{
|
||||
GetScriptTriggers(a).OnRemovedInternal += onMemberRemoved;
|
||||
GetScriptTriggers(a).OnAddedInternal += onMemberAdded;
|
||||
GetScriptTriggers(a).OnRemovedInternal += OnMemberRemoved;
|
||||
GetScriptTriggers(a).OnAddedInternal += OnMemberAdded;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,7 +268,7 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
var called = false;
|
||||
|
||||
var f = (LuaFunction)func.CopyReference();
|
||||
Action<Actor> onKilledOrCaptured = m =>
|
||||
void OnKilledOrCaptured(Actor m)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -284,10 +284,10 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
{
|
||||
Context.FatalError(e.Message);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
GetScriptTriggers(a).OnCapturedInternal += onKilledOrCaptured;
|
||||
GetScriptTriggers(a).OnKilledInternal += onKilledOrCaptured;
|
||||
GetScriptTriggers(a).OnCapturedInternal += OnKilledOrCaptured;
|
||||
GetScriptTriggers(a).OnKilledInternal += OnKilledOrCaptured;
|
||||
}
|
||||
|
||||
[Desc("Call a function when all of the actors in a group have been killed or captured. " +
|
||||
@@ -297,7 +297,7 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
var group = actors.ToList();
|
||||
|
||||
var f = (LuaFunction)func.CopyReference();
|
||||
Action<Actor> onMemberKilledOrCaptured = m =>
|
||||
void OnMemberKilledOrCaptured(Actor m)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -312,12 +312,12 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
{
|
||||
Context.FatalError(e.Message);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
foreach (var a in group)
|
||||
{
|
||||
GetScriptTriggers(a).OnCapturedInternal += onMemberKilledOrCaptured;
|
||||
GetScriptTriggers(a).OnKilledInternal += onMemberKilledOrCaptured;
|
||||
GetScriptTriggers(a).OnCapturedInternal += OnMemberKilledOrCaptured;
|
||||
GetScriptTriggers(a).OnKilledInternal += OnMemberKilledOrCaptured;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -329,7 +329,7 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
// We can't easily dispose onEntry, so we'll have to rely on finalization for it.
|
||||
var onEntry = (LuaFunction)func.CopyReference();
|
||||
var triggerId = 0;
|
||||
Action<Actor> invokeEntry = a =>
|
||||
void InvokeEntry(Actor a)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -341,9 +341,9 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
{
|
||||
Context.FatalError(e.Message);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
triggerId = Context.World.ActorMap.AddCellTrigger(cells, invokeEntry, null);
|
||||
triggerId = Context.World.ActorMap.AddCellTrigger(cells, InvokeEntry, null);
|
||||
|
||||
return triggerId;
|
||||
}
|
||||
@@ -356,7 +356,7 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
// We can't easily dispose onExit, so we'll have to rely on finalization for it.
|
||||
var onExit = (LuaFunction)func.CopyReference();
|
||||
var triggerId = 0;
|
||||
Action<Actor> invokeExit = a =>
|
||||
void InvokeExit(Actor a)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -368,9 +368,9 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
{
|
||||
Context.FatalError(e.Message);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
triggerId = Context.World.ActorMap.AddCellTrigger(cells, null, invokeExit);
|
||||
triggerId = Context.World.ActorMap.AddCellTrigger(cells, null, InvokeExit);
|
||||
|
||||
return triggerId;
|
||||
}
|
||||
@@ -389,7 +389,7 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
// We can't easily dispose onEntry, so we'll have to rely on finalization for it.
|
||||
var onEntry = (LuaFunction)func.CopyReference();
|
||||
var triggerId = 0;
|
||||
Action<Actor> invokeEntry = a =>
|
||||
void InvokeEntry(Actor a)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -401,9 +401,9 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
{
|
||||
Context.FatalError(e.Message);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
triggerId = Context.World.ActorMap.AddProximityTrigger(pos, range, WDist.Zero, invokeEntry, null);
|
||||
triggerId = Context.World.ActorMap.AddProximityTrigger(pos, range, WDist.Zero, InvokeEntry, null);
|
||||
|
||||
return triggerId;
|
||||
}
|
||||
@@ -416,7 +416,7 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
// We can't easily dispose onExit, so we'll have to rely on finalization for it.
|
||||
var onExit = (LuaFunction)func.CopyReference();
|
||||
var triggerId = 0;
|
||||
Action<Actor> invokeExit = a =>
|
||||
void InvokeExit(Actor a)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -428,9 +428,9 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
{
|
||||
Context.FatalError(e.Message);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
triggerId = Context.World.ActorMap.AddProximityTrigger(pos, range, WDist.Zero, null, invokeExit);
|
||||
triggerId = Context.World.ActorMap.AddProximityTrigger(pos, range, WDist.Zero, null, InvokeExit);
|
||||
|
||||
return triggerId;
|
||||
}
|
||||
|
||||
@@ -218,7 +218,7 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
foreach (var q in player.PlayerActor.TraitsImplementing<ClassicProductionQueue>().Where(q => q.Enabled))
|
||||
queues.Add(q.Info.Type, q);
|
||||
|
||||
Action<Actor, Actor> globalProductionHandler = (factory, unit) =>
|
||||
void GlobalProductionHandler(Actor factory, Actor unit)
|
||||
{
|
||||
if (factory.Owner != player)
|
||||
return;
|
||||
@@ -227,10 +227,10 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
|
||||
if (productionHandlers.ContainsKey(queue))
|
||||
productionHandlers[queue](factory, unit);
|
||||
};
|
||||
}
|
||||
|
||||
var triggers = TriggerGlobal.GetScriptTriggers(player.PlayerActor);
|
||||
triggers.OnOtherProducedInternal += globalProductionHandler;
|
||||
triggers.OnOtherProducedInternal += GlobalProductionHandler;
|
||||
}
|
||||
|
||||
[Desc("Build the specified set of actors using classic (RA-style) production queues. " +
|
||||
@@ -259,7 +259,7 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
var squad = new List<Actor>();
|
||||
var func = actionFunc.CopyReference() as LuaFunction;
|
||||
|
||||
Action<Actor, Actor> productionHandler = (factory, unit) =>
|
||||
void ProductionHandler(Actor factory, Actor unit)
|
||||
{
|
||||
squad.Add(unit);
|
||||
if (squad.Count >= squadSize)
|
||||
@@ -271,10 +271,10 @@ namespace OpenRA.Mods.Common.Scripting
|
||||
foreach (var q in queueTypes)
|
||||
productionHandlers.Remove(q);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
foreach (var q in queueTypes)
|
||||
productionHandlers.Add(q, productionHandler);
|
||||
productionHandlers.Add(q, ProductionHandler);
|
||||
}
|
||||
|
||||
foreach (var actorType in actorTypes)
|
||||
|
||||
@@ -560,7 +560,7 @@ namespace OpenRA.Mods.Common.Server
|
||||
}
|
||||
|
||||
var lastMap = server.LobbyInfo.GlobalSettings.Map;
|
||||
Action<MapPreview> selectMap = map =>
|
||||
void SelectMap(MapPreview map)
|
||||
{
|
||||
lock (server.LobbyInfo)
|
||||
{
|
||||
@@ -646,28 +646,28 @@ namespace OpenRA.Mods.Common.Server
|
||||
if (briefing != null)
|
||||
server.SendMessage(briefing);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Action queryFailed = () => server.SendLocalizedMessageTo(conn, UnknownMap);
|
||||
void QueryFailed() => server.SendLocalizedMessageTo(conn, UnknownMap);
|
||||
|
||||
var m = server.ModData.MapCache[s];
|
||||
if (m.Status == MapStatus.Available || m.Status == MapStatus.DownloadAvailable)
|
||||
selectMap(m);
|
||||
SelectMap(m);
|
||||
else if (server.Settings.QueryMapRepository)
|
||||
{
|
||||
server.SendLocalizedMessageTo(conn, SearchingMap);
|
||||
var mapRepository = server.ModData.Manifest.Get<WebServices>().MapRepository;
|
||||
var reported = false;
|
||||
server.ModData.MapCache.QueryRemoteMapDetails(mapRepository, new[] { s }, selectMap, _ =>
|
||||
server.ModData.MapCache.QueryRemoteMapDetails(mapRepository, new[] { s }, SelectMap, _ =>
|
||||
{
|
||||
if (!reported)
|
||||
queryFailed();
|
||||
QueryFailed();
|
||||
|
||||
reported = true;
|
||||
});
|
||||
}
|
||||
else
|
||||
queryFailed();
|
||||
QueryFailed();
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1232,17 +1232,17 @@ namespace OpenRA.Mods.Common.Server
|
||||
var colorManager = server.ModData.DefaultRules.Actors[SystemActors.World].TraitInfo<ColorPickerManagerInfo>();
|
||||
var askColor = askedColor;
|
||||
|
||||
Action<string> onError = message =>
|
||||
void OnError(string message)
|
||||
{
|
||||
if (connectionToEcho != null && message != null)
|
||||
server.SendLocalizedMessageTo(connectionToEcho, message);
|
||||
};
|
||||
}
|
||||
|
||||
var terrainColors = server.ModData.DefaultTerrainInfo[server.Map.TileSet].RestrictedPlayerColors;
|
||||
var playerColors = server.LobbyInfo.Clients.Where(c => c.Index != playerIndex).Select(c => c.Color)
|
||||
.Concat(server.Map.Players.Players.Values.Select(p => p.Color)).ToList();
|
||||
|
||||
return colorManager.MakeValid(askColor, server.Random, terrainColors, playerColors, onError);
|
||||
return colorManager.MakeValid(askColor, server.Random, terrainColors, playerColors, OnError);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -280,11 +280,11 @@ namespace OpenRA.Mods.Common.Traits
|
||||
foreach (var na in notifyAttacks)
|
||||
na.PreparingAttack(self, target, this, barrel);
|
||||
|
||||
Func<WPos> muzzlePosition = () => self.CenterPosition + MuzzleOffset(self, barrel);
|
||||
Func<WAngle> muzzleFacing = () => MuzzleOrientation(self, barrel).Yaw;
|
||||
var muzzleOrientation = WRot.FromYaw(muzzleFacing());
|
||||
WPos MuzzlePosition() => self.CenterPosition + MuzzleOffset(self, barrel);
|
||||
WAngle MuzzleFacing() => MuzzleOrientation(self, barrel).Yaw;
|
||||
var muzzleOrientation = WRot.FromYaw(MuzzleFacing());
|
||||
|
||||
var passiveTarget = Weapon.TargetActorCenter ? target.CenterPosition : target.Positions.PositionClosestTo(muzzlePosition());
|
||||
var passiveTarget = Weapon.TargetActorCenter ? target.CenterPosition : target.Positions.PositionClosestTo(MuzzlePosition());
|
||||
var initialOffset = Weapon.FirstBurstTargetOffset;
|
||||
if (initialOffset != WVec.Zero)
|
||||
{
|
||||
@@ -304,8 +304,8 @@ namespace OpenRA.Mods.Common.Traits
|
||||
var args = new ProjectileArgs
|
||||
{
|
||||
Weapon = Weapon,
|
||||
Facing = muzzleFacing(),
|
||||
CurrentMuzzleFacing = muzzleFacing,
|
||||
Facing = MuzzleFacing(),
|
||||
CurrentMuzzleFacing = MuzzleFacing,
|
||||
|
||||
DamageModifiers = damageModifiers.ToArray(),
|
||||
|
||||
@@ -313,8 +313,8 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
RangeModifiers = rangeModifiers.ToArray(),
|
||||
|
||||
Source = muzzlePosition(),
|
||||
CurrentSource = muzzlePosition,
|
||||
Source = MuzzlePosition(),
|
||||
CurrentSource = MuzzlePosition,
|
||||
SourceActor = self,
|
||||
PassiveTarget = passiveTarget,
|
||||
GuidedTarget = target
|
||||
|
||||
@@ -390,7 +390,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
return (null, 0);
|
||||
|
||||
// Find the buildable cell that is closest to pos and centered around center
|
||||
Func<CPos, CPos, int, int, (CPos? Location, int Variant)> findPos = (center, target, minRange, maxRange) =>
|
||||
(CPos? Location, int Variant) FindPos(CPos center, CPos target, int minRange, int maxRange)
|
||||
{
|
||||
var actorVariant = 0;
|
||||
var buildingVariantInfo = actorInfo.TraitInfoOrDefault<PlaceBuildingVariantsInfo>();
|
||||
@@ -461,7 +461,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
}
|
||||
|
||||
return (null, 0);
|
||||
};
|
||||
}
|
||||
|
||||
var baseCenter = baseBuilder.GetRandomBaseCenter();
|
||||
|
||||
@@ -475,7 +475,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
var targetCell = closestEnemy != null ? closestEnemy.Location : baseCenter;
|
||||
|
||||
return findPos(baseBuilder.DefenseCenter, targetCell, baseBuilder.Info.MinimumDefenseRadius, baseBuilder.Info.MaximumDefenseRadius);
|
||||
return FindPos(baseBuilder.DefenseCenter, targetCell, baseBuilder.Info.MinimumDefenseRadius, baseBuilder.Info.MaximumDefenseRadius);
|
||||
|
||||
case BuildingType.Refinery:
|
||||
|
||||
@@ -488,17 +488,17 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
foreach (var r in nearbyResources)
|
||||
{
|
||||
var found = findPos(baseCenter, r, baseBuilder.Info.MinBaseRadius, baseBuilder.Info.MaxBaseRadius);
|
||||
var found = FindPos(baseCenter, r, baseBuilder.Info.MinBaseRadius, baseBuilder.Info.MaxBaseRadius);
|
||||
if (found.Location != null)
|
||||
return found;
|
||||
}
|
||||
}
|
||||
|
||||
// Try and find a free spot somewhere else in the base
|
||||
return findPos(baseCenter, baseCenter, baseBuilder.Info.MinBaseRadius, baseBuilder.Info.MaxBaseRadius);
|
||||
return FindPos(baseCenter, baseCenter, baseBuilder.Info.MinBaseRadius, baseBuilder.Info.MaxBaseRadius);
|
||||
|
||||
case BuildingType.Building:
|
||||
return findPos(baseCenter, baseCenter, baseBuilder.Info.MinBaseRadius,
|
||||
return FindPos(baseCenter, baseCenter, baseBuilder.Info.MinBaseRadius,
|
||||
distanceToBaseIsImportant ? baseBuilder.Info.MaxBaseRadius : world.Map.Grid.MaximumTileSearchRange);
|
||||
}
|
||||
|
||||
|
||||
@@ -138,12 +138,12 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
Target FindNextResource(Actor actor, HarvesterTraitWrapper harv)
|
||||
{
|
||||
Func<CPos, bool> isValidResource = cell =>
|
||||
bool IsValidResource(CPos cell) =>
|
||||
harv.Harvester.CanHarvestCell(cell) &&
|
||||
claimLayer.CanClaimCell(actor, cell);
|
||||
|
||||
var path = harv.Mobile.PathFinder.FindPathToTargetCellByPredicate(
|
||||
actor, new[] { actor.Location }, isValidResource, BlockedByActor.Stationary,
|
||||
actor, new[] { actor.Location }, IsValidResource, BlockedByActor.Stationary,
|
||||
loc => world.FindActorsInCircle(world.Map.CenterOfCell(loc), Info.HarvesterEnemyAvoidanceRadius)
|
||||
.Where(u => !u.IsDead && actor.Owner.RelationshipWith(u.Owner) == PlayerRelationship.Enemy)
|
||||
.Sum(u => Math.Max(WDist.Zero.Length, Info.HarvesterEnemyAvoidanceRadius.Length - (world.Map.CenterOfCell(loc) - u.CenterPosition).Length)));
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.Traits;
|
||||
@@ -178,7 +177,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
return null;
|
||||
|
||||
// Find the buildable cell that is closest to pos and centered around center
|
||||
Func<CPos, CPos, int, int, CPos?> findPos = (center, target, minRange, maxRange) =>
|
||||
CPos? FindPos(CPos center, CPos target, int minRange, int maxRange)
|
||||
{
|
||||
var cells = world.Map.FindTilesInAnnulus(center, minRange, maxRange);
|
||||
|
||||
@@ -193,11 +192,11 @@ namespace OpenRA.Mods.Common.Traits
|
||||
return cell;
|
||||
|
||||
return null;
|
||||
};
|
||||
}
|
||||
|
||||
var baseCenter = GetRandomBaseCenter();
|
||||
|
||||
return findPos(baseCenter, baseCenter, Info.MinBaseRadius,
|
||||
return FindPos(baseCenter, baseCenter, Info.MinBaseRadius,
|
||||
distanceToBaseIsImportant ? Info.MaxBaseRadius : world.Map.Grid.MaximumTileSearchRange);
|
||||
}
|
||||
|
||||
|
||||
@@ -74,15 +74,15 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
anim.PlayRepeating(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence));
|
||||
|
||||
var body = init.Actor.TraitInfo<BodyOrientationInfo>();
|
||||
Func<WRot> orientation = () => body.QuantizeOrientation(WRot.FromYaw(facing()), facings);
|
||||
Func<WVec> offset = () => body.LocalToWorld(Offset.Rotate(orientation()));
|
||||
Func<int> zOffset = () =>
|
||||
WRot Orientation() => body.QuantizeOrientation(WRot.FromYaw(facing()), facings);
|
||||
WVec Offset() => body.LocalToWorld(this.Offset.Rotate(Orientation()));
|
||||
int ZOffset()
|
||||
{
|
||||
var tmpOffset = offset();
|
||||
var tmpOffset = Offset();
|
||||
return tmpOffset.Y + tmpOffset.Z + 1;
|
||||
};
|
||||
}
|
||||
|
||||
yield return new SpriteActorPreview(anim, offset, zOffset, p);
|
||||
yield return new SpriteActorPreview(anim, Offset, ZOffset, p);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -90,15 +90,15 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
anim.PlayThen(OpeningSequence, () => anim.PlayRepeating(Sequence));
|
||||
|
||||
var body = init.Actor.TraitInfo<BodyOrientationInfo>();
|
||||
Func<WRot> orientation = () => body.QuantizeOrientation(WRot.FromYaw(facing()), facings);
|
||||
Func<WVec> offset = () => body.LocalToWorld(Offset.Rotate(orientation()));
|
||||
Func<int> zOffset = () =>
|
||||
WRot Orientation() => body.QuantizeOrientation(WRot.FromYaw(facing()), facings);
|
||||
WVec Offset() => body.LocalToWorld(this.Offset.Rotate(Orientation()));
|
||||
int ZOffset()
|
||||
{
|
||||
var tmpOffset = offset();
|
||||
var tmpOffset = Offset();
|
||||
return tmpOffset.Y + tmpOffset.Z + 1;
|
||||
};
|
||||
}
|
||||
|
||||
yield return new SpriteActorPreview(anim, offset, zOffset, p);
|
||||
yield return new SpriteActorPreview(anim, Offset, ZOffset, p);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.Graphics;
|
||||
@@ -50,15 +49,15 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
anim.Play(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence));
|
||||
|
||||
var facing = init.GetFacing();
|
||||
Func<WRot> orientation = () => body.QuantizeOrientation(WRot.FromYaw(facing()), facings);
|
||||
Func<WVec> turretOffset = () => body.LocalToWorld(t.Offset.Rotate(orientation()));
|
||||
Func<int> zOffset = () =>
|
||||
WRot Orientation() => body.QuantizeOrientation(WRot.FromYaw(facing()), facings);
|
||||
WVec TurretOffset() => body.LocalToWorld(t.Offset.Rotate(Orientation()));
|
||||
int ZOffset()
|
||||
{
|
||||
var tmpOffset = turretOffset();
|
||||
var tmpOffset = TurretOffset();
|
||||
return -(tmpOffset.Y + tmpOffset.Z) + 1;
|
||||
};
|
||||
}
|
||||
|
||||
yield return new SpriteActorPreview(anim, turretOffset, zOffset, p);
|
||||
yield return new SpriteActorPreview(anim, TurretOffset, ZOffset, p);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -75,18 +75,18 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
{
|
||||
rs = init.Self.Trait<RenderSprites>();
|
||||
|
||||
Func<bool> paused = () => IsTraitPaused &&
|
||||
bool Paused() => IsTraitPaused &&
|
||||
DefaultAnimation.CurrentSequence.Name == NormalizeSequence(init.Self, Info.Sequence);
|
||||
|
||||
Func<WVec> subtractDAT = null;
|
||||
if (info.ForceToGround)
|
||||
subtractDAT = () => new WVec(0, 0, -init.Self.World.Map.DistanceAboveTerrain(init.Self.CenterPosition).Length);
|
||||
|
||||
DefaultAnimation = new Animation(init.World, rs.GetImage(init.Self), baseFacing, paused);
|
||||
DefaultAnimation = new Animation(init.World, rs.GetImage(init.Self), baseFacing, Paused);
|
||||
rs.Add(new AnimationWithOffset(DefaultAnimation, subtractDAT, () => IsTraitDisabled), info.Palette, info.IsPlayerPalette);
|
||||
|
||||
// Cache the bounds from the default sequence to avoid flickering when the animation changes
|
||||
boundsAnimation = new Animation(init.World, rs.GetImage(init.Self), baseFacing, paused);
|
||||
boundsAnimation = new Animation(init.World, rs.GetImage(init.Self), baseFacing, Paused);
|
||||
boundsAnimation.PlayRepeating(info.Sequence);
|
||||
}
|
||||
|
||||
|
||||
@@ -55,20 +55,20 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
anim.Play(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence));
|
||||
|
||||
var facing = init.GetFacing();
|
||||
Func<WRot> orientation = () => body.QuantizeOrientation(WRot.FromYaw(facing()), facings);
|
||||
Func<WVec> offset = () => body.LocalToWorld(t.Offset.Rotate(orientation()));
|
||||
Func<int> zOffset = () =>
|
||||
WRot Orientation() => body.QuantizeOrientation(WRot.FromYaw(facing()), facings);
|
||||
WVec Offset() => body.LocalToWorld(t.Offset.Rotate(Orientation()));
|
||||
int ZOffset()
|
||||
{
|
||||
var tmpOffset = offset();
|
||||
var tmpOffset = Offset();
|
||||
return -(tmpOffset.Y + tmpOffset.Z) + 1;
|
||||
};
|
||||
}
|
||||
|
||||
if (IsPlayerPalette)
|
||||
p = init.WorldRenderer.Palette(Palette + init.Get<OwnerInit>().InternalName);
|
||||
else if (Palette != null)
|
||||
p = init.WorldRenderer.Palette(Palette);
|
||||
|
||||
yield return new SpriteActorPreview(anim, offset, zOffset, p);
|
||||
yield return new SpriteActorPreview(anim, Offset, ZOffset, p);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -52,10 +52,10 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
var model = init.World.ModelCache.GetModelSequence(image, Sequence);
|
||||
|
||||
var turretOrientation = t.PreviewOrientation(init, orientation, facings);
|
||||
Func<WVec> barrelOffset = () => body.LocalToWorld(t.Offset + LocalOffset.Rotate(turretOrientation()));
|
||||
Func<WRot> barrelOrientation = () => LocalOrientation.Rotate(turretOrientation());
|
||||
WVec BarrelOffset() => body.LocalToWorld(t.Offset + LocalOffset.Rotate(turretOrientation()));
|
||||
WRot BarrelOrientation() => LocalOrientation.Rotate(turretOrientation());
|
||||
|
||||
yield return new ModelAnimation(model, barrelOffset, barrelOrientation, () => false, () => 0, ShowShadow);
|
||||
yield return new ModelAnimation(model, BarrelOffset, BarrelOrientation, () => false, () => 0, ShowShadow);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
Beacon beacon = null;
|
||||
var aircraftInRange = new Dictionary<Actor, bool>();
|
||||
|
||||
Action<Actor> onEnterRange = a =>
|
||||
void OnEnterRange(Actor a)
|
||||
{
|
||||
// Spawn a camera and remove the beacon when the first plane enters the target area
|
||||
if (info.CameraActor != null && camera == null && !aircraftInRange.Any(kv => kv.Value))
|
||||
@@ -112,18 +112,18 @@ namespace OpenRA.Mods.Common.Traits
|
||||
RemoveBeacon(beacon);
|
||||
|
||||
aircraftInRange[a] = true;
|
||||
};
|
||||
}
|
||||
|
||||
Action<Actor> onExitRange = a =>
|
||||
void OnExitRange(Actor a)
|
||||
{
|
||||
aircraftInRange[a] = false;
|
||||
|
||||
// Remove the camera when the final plane leaves the target area
|
||||
if (!aircraftInRange.Any(kv => kv.Value))
|
||||
RemoveCamera(camera);
|
||||
};
|
||||
}
|
||||
|
||||
Action<Actor> onRemovedFromWorld = a =>
|
||||
void OnRemovedFromWorld(Actor a)
|
||||
{
|
||||
aircraftInRange[a] = false;
|
||||
|
||||
@@ -135,7 +135,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
RemoveCamera(camera);
|
||||
RemoveBeacon(beacon);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Create the actors immediately so they can be returned
|
||||
for (var i = -info.SquadSize / 2; i <= info.SquadSize / 2; i++)
|
||||
@@ -160,9 +160,9 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
var attack = a.Trait<AttackBomber>();
|
||||
attack.SetTarget(target + targetOffset);
|
||||
attack.OnEnteredAttackRange += onEnterRange;
|
||||
attack.OnExitedAttackRange += onExitRange;
|
||||
attack.OnRemovedFromWorld += onRemovedFromWorld;
|
||||
attack.OnEnteredAttackRange += OnEnterRange;
|
||||
attack.OnExitedAttackRange += OnExitRange;
|
||||
attack.OnRemovedFromWorld += OnRemovedFromWorld;
|
||||
}
|
||||
|
||||
self.World.AddFrameEndTask(w =>
|
||||
|
||||
@@ -119,7 +119,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
Beacon beacon = null;
|
||||
var aircraftInRange = new Dictionary<Actor, bool>();
|
||||
|
||||
Action<Actor> onEnterRange = a =>
|
||||
void OnEnterRange(Actor a)
|
||||
{
|
||||
// Spawn a camera and remove the beacon when the first plane enters the target area
|
||||
if (info.CameraActor != null && camera == null && !aircraftInRange.Any(kv => kv.Value))
|
||||
@@ -145,18 +145,18 @@ namespace OpenRA.Mods.Common.Traits
|
||||
}
|
||||
|
||||
aircraftInRange[a] = true;
|
||||
};
|
||||
}
|
||||
|
||||
Action<Actor> onExitRange = a =>
|
||||
void OnExitRange(Actor a)
|
||||
{
|
||||
aircraftInRange[a] = false;
|
||||
|
||||
// Remove the camera when the final plane leaves the target area
|
||||
if (!aircraftInRange.Any(kv => kv.Value))
|
||||
RemoveCamera(camera);
|
||||
};
|
||||
}
|
||||
|
||||
Action<Actor> onRemovedFromWorld = a =>
|
||||
void OnRemovedFromWorld(Actor a)
|
||||
{
|
||||
aircraftInRange[a] = false;
|
||||
|
||||
@@ -168,7 +168,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
RemoveCamera(camera);
|
||||
RemoveBeacon(beacon);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Create the actors immediately so they can be returned
|
||||
for (var i = -info.SquadSize / 2; i <= info.SquadSize / 2; i++)
|
||||
@@ -221,9 +221,9 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
var drop = a.Trait<ParaDrop>();
|
||||
drop.SetLZ(w.Map.CellContaining(target + targetOffset), !info.AllowImpassableCells);
|
||||
drop.OnEnteredDropRange += onEnterRange;
|
||||
drop.OnExitedDropRange += onExitRange;
|
||||
drop.OnRemovedFromWorld += onRemovedFromWorld;
|
||||
drop.OnEnteredDropRange += OnEnterRange;
|
||||
drop.OnExitedDropRange += OnExitRange;
|
||||
drop.OnRemovedFromWorld += OnRemovedFromWorld;
|
||||
|
||||
var cargo = a.Trait<Cargo>();
|
||||
foreach (var unit in units.Skip(added).Take(passengersPerPlane))
|
||||
|
||||
@@ -115,13 +115,13 @@ namespace OpenRA.Mods.Common.Traits
|
||||
var body = init.Actor.TraitInfo<BodyOrientationInfo>();
|
||||
var turretFacing = LocalFacingFromInit(init);
|
||||
|
||||
Func<WRot> world = () => WRot.FromYaw(turretFacing()).Rotate(orientation());
|
||||
WRot World() => WRot.FromYaw(turretFacing()).Rotate(orientation());
|
||||
if (facings == 0)
|
||||
return world;
|
||||
return World;
|
||||
|
||||
// Quantize orientation to match a rendered sprite
|
||||
// Implies no pitch or roll
|
||||
return () => WRot.FromYaw(body.QuantizeFacing(world().Yaw, facings));
|
||||
return () => WRot.FromYaw(body.QuantizeFacing(World().Yaw, facings));
|
||||
}
|
||||
|
||||
public override object Create(ActorInitializer init) { return new Turreted(init, this); }
|
||||
|
||||
@@ -207,7 +207,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
public MiniYaml Save()
|
||||
{
|
||||
Func<object, bool> saveInit = init =>
|
||||
bool SaveInit(ActorInit init)
|
||||
{
|
||||
if (init is FactionInit factionInit && factionInit.Value == Owner.Faction)
|
||||
return false;
|
||||
@@ -218,9 +218,9 @@ namespace OpenRA.Mods.Common.Traits
|
||||
// TODO: Other default values will need to be filtered
|
||||
// here after we have built a properties panel
|
||||
return true;
|
||||
};
|
||||
}
|
||||
|
||||
return reference.Save(saveInit);
|
||||
return reference.Save(SaveInit);
|
||||
}
|
||||
|
||||
WPos PreviewPosition(World world, ActorReference actor)
|
||||
|
||||
@@ -303,12 +303,12 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
if (check > BlockedByActor.None)
|
||||
{
|
||||
Func<Actor, bool> checkTransient = otherActor => IsBlockedBy(self, otherActor, ignoreActor, cell, check, GetCache(cell).CellFlag);
|
||||
bool CheckTransient(Actor otherActor) => IsBlockedBy(self, otherActor, ignoreActor, cell, check, GetCache(cell).CellFlag);
|
||||
|
||||
if (!sharesCell)
|
||||
return world.ActorMap.AnyActorsAt(cell, SubCell.FullCell, checkTransient) ? SubCell.Invalid : SubCell.FullCell;
|
||||
return world.ActorMap.AnyActorsAt(cell, SubCell.FullCell, CheckTransient) ? SubCell.Invalid : SubCell.FullCell;
|
||||
|
||||
return world.ActorMap.FreeSubCell(cell, preferredSubCell, checkTransient);
|
||||
return world.ActorMap.FreeSubCell(cell, preferredSubCell, CheckTransient);
|
||||
}
|
||||
|
||||
if (!sharesCell)
|
||||
|
||||
@@ -26,14 +26,14 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
var missingImages = new HashSet<string>();
|
||||
var failed = false;
|
||||
Action<uint, string> onMissingImage = (id, f) =>
|
||||
void OnMissingImage(uint id, string f)
|
||||
{
|
||||
onError($"\tTemplate `{id}` references sprite `{f}` that does not exist.");
|
||||
missingImages.Add(f);
|
||||
failed = true;
|
||||
};
|
||||
}
|
||||
|
||||
var tileCache = new DefaultTileCache((DefaultTerrain)terrainInfo, onMissingImage);
|
||||
var tileCache = new DefaultTileCache((DefaultTerrain)terrainInfo, OnMissingImage);
|
||||
foreach (var t in terrainInfo.Templates)
|
||||
{
|
||||
var templateInfo = (DefaultTerrainTemplateInfo)t.Value;
|
||||
|
||||
@@ -235,35 +235,35 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var ownerDropdown = ownerContainer.Get<DropDownButtonWidget>("OPTION");
|
||||
var selectedOwner = actor.Owner;
|
||||
|
||||
Action<EditorActorPreview, PlayerReference> updateOwner = (preview, reference) =>
|
||||
void UpdateOwner(EditorActorPreview preview, PlayerReference reference)
|
||||
{
|
||||
preview.Owner = reference;
|
||||
preview.ReplaceInit(new OwnerInit(reference.Name));
|
||||
};
|
||||
}
|
||||
|
||||
var ownerHandler = new EditorActorOptionActionHandle<PlayerReference>(updateOwner, actor.Owner);
|
||||
var ownerHandler = new EditorActorOptionActionHandle<PlayerReference>(UpdateOwner, actor.Owner);
|
||||
editActorPreview.Add(ownerHandler);
|
||||
|
||||
Func<PlayerReference, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
ScrollItemWidget SetupItem(PlayerReference option, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template, () => selectedOwner == option, () =>
|
||||
{
|
||||
selectedOwner = option;
|
||||
updateOwner(CurrentActor, selectedOwner);
|
||||
UpdateOwner(CurrentActor, selectedOwner);
|
||||
ownerHandler.OnChange(option);
|
||||
});
|
||||
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.Name;
|
||||
item.GetColor = () => option.Color;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
ownerDropdown.GetText = () => selectedOwner.Name;
|
||||
ownerDropdown.GetColor = () => selectedOwner.Color;
|
||||
ownerDropdown.OnClick = () =>
|
||||
{
|
||||
var owners = editorActorLayer.Players.Players.Values.OrderBy(p => p.Name);
|
||||
ownerDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, owners, setupItem);
|
||||
ownerDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, owners, SetupItem);
|
||||
};
|
||||
|
||||
initContainer.Bounds.Height += ownerContainer.Bounds.Height;
|
||||
@@ -320,9 +320,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var valueField = sliderContainer.GetOrNull<TextFieldWidget>("VALUE");
|
||||
if (valueField != null)
|
||||
{
|
||||
Action<float> updateValueField = f => valueField.Text = ((int)f).ToString();
|
||||
updateValueField(so.GetValue(actor));
|
||||
slider.OnChange += updateValueField;
|
||||
void UpdateValueField(float f) => valueField.Text = ((int)f).ToString();
|
||||
UpdateValueField(so.GetValue(actor));
|
||||
slider.OnChange += UpdateValueField;
|
||||
|
||||
valueField.OnTextEdited = () =>
|
||||
{
|
||||
@@ -348,7 +348,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
editActorPreview.Add(editorActionHandle);
|
||||
|
||||
var dropdown = dropdownContainer.Get<DropDownButtonWidget>("OPTION");
|
||||
Func<KeyValuePair<string, string>, ScrollItemWidget, ScrollItemWidget> dropdownSetup = (option, template) =>
|
||||
ScrollItemWidget DropdownSetup(KeyValuePair<string, string> option, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template,
|
||||
() => ddo.GetValue(actor) == option.Key,
|
||||
@@ -360,10 +360,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.Value;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
dropdown.GetText = () => ddo.Labels[ddo.GetValue(actor)];
|
||||
dropdown.OnClick = () => dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, ddo.Labels, dropdownSetup);
|
||||
dropdown.OnClick = () => dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, ddo.Labels, DropdownSetup);
|
||||
|
||||
initContainer.AddChild(dropdownContainer);
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var editorLayer = world.WorldActor.Trait<EditorActorLayer>();
|
||||
|
||||
selectedOwner = editorLayer.Players.Players.Values.First();
|
||||
Func<PlayerReference, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
ScrollItemWidget SetupItem(PlayerReference option, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template, () => selectedOwner == option, () => SelectOwner(option));
|
||||
|
||||
@@ -65,7 +65,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
item.GetColor = () => option.Color;
|
||||
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
editorLayer.OnPlayerRemoved = () =>
|
||||
{
|
||||
@@ -77,7 +77,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
ownersDropDown.OnClick = () =>
|
||||
{
|
||||
var owners = editorLayer.Players.Players.Values.OrderBy(p => p.Name);
|
||||
ownersDropDown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, owners, setupItem);
|
||||
ownersDropDown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, owners, SetupItem);
|
||||
};
|
||||
|
||||
ownersDropDown.Text = selectedOwner.Name;
|
||||
|
||||
@@ -29,18 +29,18 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
var tilesetDropDown = panel.Get<DropDownButtonWidget>("TILESET");
|
||||
var tilesets = modData.DefaultTerrainInfo.Keys;
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
ScrollItemWidget SetupItem(string option, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template,
|
||||
() => tilesetDropDown.Text == option,
|
||||
() => { tilesetDropDown.Text = option; });
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
tilesetDropDown.Text = tilesets.First();
|
||||
tilesetDropDown.OnClick = () =>
|
||||
tilesetDropDown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 210, tilesets, setupItem);
|
||||
tilesetDropDown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 210, tilesets, SetupItem);
|
||||
|
||||
var widthTextField = panel.Get<TextFieldWidget>("WIDTH");
|
||||
var heightTextField = panel.Get<TextFieldWidget>("HEIGHT");
|
||||
|
||||
@@ -115,14 +115,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
var directoryDropdown = widget.Get<DropDownButtonWidget>("DIRECTORY_DROPDOWN");
|
||||
{
|
||||
Func<SaveDirectory, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
ScrollItemWidget SetupItem(SaveDirectory option, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template,
|
||||
() => selectedDirectory == option,
|
||||
() => selectedDirectory = option);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.DisplayName;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
foreach (var kv in modData.MapCache.MapLocations)
|
||||
{
|
||||
@@ -157,7 +157,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
directoryDropdown.GetText = () => selectedDirectory?.DisplayName ?? "";
|
||||
directoryDropdown.OnClick = () =>
|
||||
directoryDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 210, writableDirectories, setupItem);
|
||||
directoryDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 210, writableDirectories, SetupItem);
|
||||
}
|
||||
|
||||
var mapIsUnpacked = map.Package != null && map.Package is Folder;
|
||||
@@ -177,25 +177,25 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
var typeDropdown = widget.Get<DropDownButtonWidget>("TYPE_DROPDOWN");
|
||||
{
|
||||
Func<KeyValuePair<MapFileType, MapFileTypeInfo>, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
ScrollItemWidget SetupItem(KeyValuePair<MapFileType, MapFileTypeInfo> option, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template,
|
||||
() => fileType == option.Key,
|
||||
() => { typeDropdown.Text = option.Value.UiLabel; fileType = option.Key; });
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.Value.UiLabel;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
typeDropdown.Text = fileTypes[fileType].UiLabel;
|
||||
|
||||
typeDropdown.OnClick = () =>
|
||||
typeDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 210, fileTypes, setupItem);
|
||||
typeDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 210, fileTypes, SetupItem);
|
||||
}
|
||||
|
||||
var close = widget.Get<ButtonWidget>("BACK_BUTTON");
|
||||
close.OnClick = () => { Ui.CloseWindow(); onExit(); };
|
||||
|
||||
Action<string> saveMap = (string combinedPath) =>
|
||||
void SaveMap(string combinedPath)
|
||||
{
|
||||
map.Title = title.Text;
|
||||
map.Author = author.Text;
|
||||
@@ -228,7 +228,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
}
|
||||
|
||||
onSave(map.Uid);
|
||||
};
|
||||
}
|
||||
|
||||
var save = widget.Get<ButtonWidget>("SAVE_BUTTON");
|
||||
save.IsDisabled = () => string.IsNullOrWhiteSpace(filename.Text) || string.IsNullOrWhiteSpace(title.Text) || string.IsNullOrWhiteSpace(author.Text);
|
||||
@@ -236,7 +236,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
save.OnClick = () =>
|
||||
{
|
||||
var combinedPath = Platform.ResolvePath(Path.Combine(selectedDirectory.Folder.Name, filename.Text + fileTypes[fileType].Extension));
|
||||
SaveMap(modData, world, map, combinedPath, saveMap);
|
||||
SaveMapLogic.SaveMap(modData, world, map, combinedPath, SaveMap);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -352,12 +352,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
modData.Manifest.Metadata.Version,
|
||||
filename);
|
||||
|
||||
Action inner = () =>
|
||||
void Inner()
|
||||
{
|
||||
world.RequestGameSave(filename);
|
||||
Ui.CloseWindow();
|
||||
onExit();
|
||||
};
|
||||
}
|
||||
|
||||
if (selectedSave != null || File.Exists(testPath))
|
||||
{
|
||||
@@ -365,12 +365,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
title: OverwriteSaveTitle,
|
||||
text: OverwriteSavePrompt,
|
||||
textArguments: Translation.Arguments("file", saveTextField.Text),
|
||||
onConfirm: inner,
|
||||
onConfirm: Inner,
|
||||
confirmText: OverwriteSaveAccpet,
|
||||
onCancel: () => { });
|
||||
}
|
||||
else
|
||||
inner();
|
||||
Inner();
|
||||
}
|
||||
|
||||
void OnGameStart()
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
.Where(q => (q.Info.Group ?? q.Info.Type) == button.ProductionGroup)
|
||||
.ToArray();
|
||||
|
||||
Action<bool> selectTab = reverse =>
|
||||
void SelectTab(bool reverse)
|
||||
{
|
||||
palette.CurrentQueue = queues.FirstOrDefault(q => q.Enabled);
|
||||
|
||||
@@ -40,12 +40,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
// Attempt to pick up a completed building (if there is one) so it can be placed
|
||||
palette.PickUpCompletedBuilding();
|
||||
};
|
||||
}
|
||||
|
||||
button.IsDisabled = () => !queues.Any(q => q.BuildableItems().Any());
|
||||
button.OnMouseUp = mi => selectTab(mi.Modifiers.HasModifier(Modifiers.Shift));
|
||||
button.OnKeyPress = e => selectTab(e.Modifiers.HasModifier(Modifiers.Shift));
|
||||
button.OnClick = () => selectTab(false);
|
||||
button.OnMouseUp = mi => SelectTab(mi.Modifiers.HasModifier(Modifiers.Shift));
|
||||
button.OnKeyPress = e => SelectTab(e.Modifiers.HasModifier(Modifiers.Shift));
|
||||
button.OnClick = () => SelectTab(false);
|
||||
button.IsHighlighted = () => queues.Contains(palette.CurrentQueue);
|
||||
|
||||
var chromeName = button.ProductionGroup.ToLowerInvariant();
|
||||
@@ -77,7 +77,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
if (foreground != null)
|
||||
foregroundTemplate = foreground.Get("ROW_TEMPLATE");
|
||||
|
||||
Action<int, int> updateBackground = (_, icons) =>
|
||||
void UpdateBackground(int _, int icons)
|
||||
{
|
||||
var rows = Math.Max(palette.MinimumRows, (icons + palette.Columns - 1) / palette.Columns);
|
||||
rows = Math.Min(rows, palette.MaximumRows);
|
||||
@@ -113,12 +113,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
foreground.AddChild(row);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
palette.OnIconCountChanged += updateBackground;
|
||||
palette.OnIconCountChanged += UpdateBackground;
|
||||
|
||||
// Set the initial palette state
|
||||
updateBackground(0, 0);
|
||||
UpdateBackground(0, 0);
|
||||
}
|
||||
|
||||
var typesContainer = widget.Get("PRODUCTION_TYPES");
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
attackMoveButton.IsDisabled = () => { UpdateStateIfNecessary(); return attackMoveDisabled; };
|
||||
attackMoveButton.IsHighlighted = () => world.OrderGenerator is AttackMoveOrderGenerator;
|
||||
|
||||
Action<bool> toggle = allowCancel =>
|
||||
void Toggle(bool allowCancel)
|
||||
{
|
||||
if (attackMoveButton.IsHighlighted())
|
||||
{
|
||||
@@ -66,10 +66,10 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
}
|
||||
else
|
||||
world.OrderGenerator = new AttackMoveOrderGenerator(selectedActors, Game.Settings.Game.MouseButtonPreference.Action);
|
||||
};
|
||||
}
|
||||
|
||||
attackMoveButton.OnClick = () => toggle(true);
|
||||
attackMoveButton.OnKeyPress = _ => toggle(false);
|
||||
attackMoveButton.OnClick = () => Toggle(true);
|
||||
attackMoveButton.OnKeyPress = _ => Toggle(false);
|
||||
}
|
||||
|
||||
var forceMoveButton = widget.GetOrNull<ButtonWidget>("FORCE_MOVE");
|
||||
@@ -114,7 +114,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
guardButton.IsDisabled = () => { UpdateStateIfNecessary(); return guardDisabled; };
|
||||
guardButton.IsHighlighted = () => world.OrderGenerator is GuardOrderGenerator;
|
||||
|
||||
Action<bool> toggle = allowCancel =>
|
||||
void Toggle(bool allowCancel)
|
||||
{
|
||||
if (guardButton.IsHighlighted())
|
||||
{
|
||||
@@ -124,10 +124,10 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
else
|
||||
world.OrderGenerator = new GuardOrderGenerator(selectedActors,
|
||||
"Guard", "guard", Game.Settings.Game.MouseButtonPreference.Action);
|
||||
};
|
||||
}
|
||||
|
||||
guardButton.OnClick = () => toggle(true);
|
||||
guardButton.OnKeyPress = _ => toggle(false);
|
||||
guardButton.OnClick = () => Toggle(true);
|
||||
guardButton.OnKeyPress = _ => Toggle(false);
|
||||
}
|
||||
|
||||
var scatterButton = widget.GetOrNull<ButtonWidget>("SCATTER");
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using OpenRA.Mods.Common.Traits;
|
||||
using OpenRA.Primitives;
|
||||
@@ -62,12 +61,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
PopulateObjectivesList(mo, objectivesPanel, template);
|
||||
|
||||
Action<Player, bool> redrawObjectives = (p, _) =>
|
||||
void RedrawObjectives(Player p, bool _)
|
||||
{
|
||||
if (p == player)
|
||||
PopulateObjectivesList(mo, objectivesPanel, template);
|
||||
};
|
||||
mo.ObjectiveAdded += redrawObjectives;
|
||||
}
|
||||
|
||||
mo.ObjectiveAdded += RedrawObjectives;
|
||||
}
|
||||
|
||||
static void PopulateObjectivesList(MissionObjectives mo, ScrollPanelWidget parent, ContainerWidget template)
|
||||
|
||||
@@ -38,12 +38,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var tlm = world.WorldActor.TraitOrDefault<TimeLimitManager>();
|
||||
var startTick = Ui.LastTickTime.Value;
|
||||
|
||||
Func<bool> shouldShowStatus = () => (world.Paused || world.ReplayTimestep != world.Timestep)
|
||||
bool ShouldShowStatus() => (world.Paused || world.ReplayTimestep != world.Timestep)
|
||||
&& (Ui.LastTickTime.Value - startTick) / 1000 % 2 == 0;
|
||||
|
||||
Func<bool> paused = () => world.Paused || world.ReplayTimestep == 0;
|
||||
bool Paused() => world.Paused || world.ReplayTimestep == 0;
|
||||
|
||||
var pausedText = modData.Translation.GetString(Paused);
|
||||
var pausedText = modData.Translation.GetString(GameTimerLogic.Paused);
|
||||
var maxSpeedText = modData.Translation.GetString(MaxSpeed);
|
||||
var speedText = new CachedTransform<int, string>(p =>
|
||||
modData.Translation.GetString(Speed, Translation.Arguments("percentage", p)));
|
||||
@@ -52,7 +52,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{
|
||||
timer.GetText = () =>
|
||||
{
|
||||
if (status == null && paused() && shouldShowStatus())
|
||||
if (status == null && Paused() && ShouldShowStatus())
|
||||
return pausedText;
|
||||
|
||||
var timeLimit = tlm?.TimeLimit ?? 0;
|
||||
@@ -64,10 +64,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
if (status != null)
|
||||
{
|
||||
// Blink the status line
|
||||
status.IsVisible = shouldShowStatus;
|
||||
status.IsVisible = ShouldShowStatus;
|
||||
status.GetText = () =>
|
||||
{
|
||||
if (paused())
|
||||
if (Paused())
|
||||
return pausedText;
|
||||
|
||||
if (world.ReplayTimestep == 1)
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using OpenRA.Mods.Common.Traits;
|
||||
using OpenRA.Widgets;
|
||||
@@ -30,7 +29,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var locomotorSelector = widget.Get<DropDownButtonWidget>("HPF_OVERLAY_LOCOMOTOR");
|
||||
locomotorSelector.OnMouseDown = _ =>
|
||||
{
|
||||
Func<Locomotor, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
ScrollItemWidget SetupItem(Locomotor option, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(
|
||||
template,
|
||||
@@ -38,16 +37,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
() => hpfOverlay.Locomotor = option);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option?.Info.Name ?? "(Selected Units)";
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
locomotorSelector.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", locomotors.Length * 30, locomotors, setupItem);
|
||||
locomotorSelector.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", locomotors.Length * 30, locomotors, SetupItem);
|
||||
};
|
||||
|
||||
var checks = new[] { BlockedByActor.None, BlockedByActor.Immovable };
|
||||
var checkSelector = widget.Get<DropDownButtonWidget>("HPF_OVERLAY_CHECK");
|
||||
checkSelector.OnMouseDown = _ =>
|
||||
{
|
||||
Func<BlockedByActor, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
ScrollItemWidget SetupItem(BlockedByActor option, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(
|
||||
template,
|
||||
@@ -55,9 +54,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
() => hpfOverlay.Check = option);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.ToString();
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
checkSelector.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", checks.Length * 30, checks, setupItem);
|
||||
checkSelector.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", checks.Length * 30, checks, SetupItem);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using OpenRA.FileSystem;
|
||||
using OpenRA.Mods.Common.Lint;
|
||||
@@ -39,7 +38,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
|
||||
return false;
|
||||
|
||||
var map = world.Map;
|
||||
Action<string> saveMap = (string combinedPath) =>
|
||||
void SaveMap(string combinedPath)
|
||||
{
|
||||
var editorActorLayer = world.WorldActor.Trait<EditorActorLayer>();
|
||||
|
||||
@@ -53,9 +52,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
|
||||
|
||||
var package = (IReadWritePackage)map.Package;
|
||||
SaveMapLogic.SaveMapInner(map, package, world, modData);
|
||||
};
|
||||
}
|
||||
|
||||
SaveMapLogic.SaveMap(modData, world, map, map.Package?.Name, saveMap);
|
||||
SaveMapLogic.SaveMap(modData, world, map, map.Package?.Name, SaveMap);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -310,7 +310,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var iop = world.WorldActor.TraitsImplementing<IObjectivesPanel>().FirstOrDefault();
|
||||
var exitDelay = iop?.ExitDelay ?? 0;
|
||||
|
||||
Action onRestart = () =>
|
||||
void OnRestart()
|
||||
{
|
||||
Ui.CloseWindow();
|
||||
if (mpe != null)
|
||||
@@ -321,7 +321,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
}
|
||||
|
||||
Game.RunAfterDelay(exitDelay, Game.RestartGame);
|
||||
};
|
||||
}
|
||||
|
||||
var button = AddButton("RESTART", RestartButton);
|
||||
button.IsDisabled = () => hasError || leaving;
|
||||
@@ -331,7 +331,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
ConfirmationDialogs.ButtonPrompt(modData,
|
||||
title: RestartMissionTitle,
|
||||
text: RestartMissionPrompt,
|
||||
onConfirm: onRestart,
|
||||
onConfirm: OnRestart,
|
||||
onCancel: ShowMenu,
|
||||
confirmText: RestartMissionAccept,
|
||||
cancelText: RestartMissionCancel);
|
||||
@@ -343,11 +343,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
if (world.Type != WorldType.Regular || isSinglePlayer || world.LocalPlayer == null)
|
||||
return;
|
||||
|
||||
Action onSurrender = () =>
|
||||
void OnSurrender()
|
||||
{
|
||||
world.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor, false));
|
||||
CloseMenu();
|
||||
};
|
||||
}
|
||||
|
||||
var button = AddButton("SURRENDER", SurrenderButton);
|
||||
button.IsDisabled = () => world.LocalPlayer.WinState != WinState.Undefined || hasError || leaving;
|
||||
@@ -357,7 +357,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
ConfirmationDialogs.ButtonPrompt(modData,
|
||||
title: SurrenderTitle,
|
||||
text: SurrenderPrompt,
|
||||
onConfirm: onSurrender,
|
||||
onConfirm: OnSurrender,
|
||||
onCancel: ShowMenu,
|
||||
confirmText: SurrenderAccept,
|
||||
cancelText: SurrenderCancel);
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using OpenRA.Mods.Common.Traits;
|
||||
using OpenRA.Widgets;
|
||||
@@ -52,16 +51,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
if (lp != null)
|
||||
{
|
||||
Action<Player, bool> startBlinking = (player, inhibitAnnouncement) =>
|
||||
void StartBlinking(Player player, bool inhibitAnnouncement)
|
||||
{
|
||||
if (!inhibitAnnouncement && player == world.LocalPlayer)
|
||||
blinking = true;
|
||||
};
|
||||
}
|
||||
|
||||
var mo = lp.PlayerActor.TraitOrDefault<MissionObjectives>();
|
||||
|
||||
if (mo != null)
|
||||
mo.ObjectiveAdded += startBlinking;
|
||||
mo.ObjectiveAdded += StartBlinking;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -131,7 +131,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
shroudSelector.IsDisabled = () => shroudSelectorDisabled;
|
||||
shroudSelector.OnMouseDown = _ =>
|
||||
{
|
||||
Func<CameraOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
ScrollItemWidget SetupItem(CameraOption option, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template, option.IsSelected, option.OnClick);
|
||||
var showFlag = option.Faction != null;
|
||||
@@ -156,9 +156,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
labelAlt.GetColor = () => option.Color;
|
||||
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
shroudSelector.ShowDropDown("SPECTATOR_DROPDOWN_TEMPLATE", 400, groups, setupItem);
|
||||
shroudSelector.ShowDropDown("SPECTATOR_DROPDOWN_TEMPLATE", 400, groups, SetupItem);
|
||||
};
|
||||
|
||||
shroudLabel = shroudSelector.Get<LabelWidget>("LABEL");
|
||||
|
||||
@@ -142,7 +142,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
teamTemplate = playerStatsPanel.Get<ScrollItemWidget>("TEAM_TEMPLATE");
|
||||
|
||||
var statsDropDown = widget.Get<DropDownButtonWidget>("STATS_DROPDOWN");
|
||||
Func<string, ObserverStatsPanel, ScrollItemWidget, Action, StatsDropDownOption> createStatsOption = (title, panel, template, a) =>
|
||||
StatsDropDownOption CreateStatsOption(string title, ObserverStatsPanel panel, ScrollItemWidget template, Action a)
|
||||
{
|
||||
title = modData.Translation.GetString(title);
|
||||
return new StatsDropDownOption
|
||||
@@ -162,7 +162,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
Ui.ResetTooltips();
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
var statsDropDownOptions = new StatsDropDownOption[]
|
||||
{
|
||||
@@ -179,26 +179,26 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
activePanel = ObserverStatsPanel.None;
|
||||
}
|
||||
},
|
||||
createStatsOption(Basic, ObserverStatsPanel.Basic, basicPlayerTemplate, () => DisplayStats(BasicStats, modData)),
|
||||
createStatsOption(Economy, ObserverStatsPanel.Economy, economyPlayerTemplate, () => DisplayStats(EconomyStats, modData)),
|
||||
createStatsOption(Production, ObserverStatsPanel.Production, productionPlayerTemplate, () => DisplayStats(ProductionStats, modData)),
|
||||
createStatsOption(SupportPowers, ObserverStatsPanel.SupportPowers, supportPowersPlayerTemplate, () => DisplayStats(SupportPowerStats, modData)),
|
||||
createStatsOption(Combat, ObserverStatsPanel.Combat, combatPlayerTemplate, () => DisplayStats(CombatStats, modData)),
|
||||
createStatsOption(Army, ObserverStatsPanel.Army, armyPlayerTemplate, () => DisplayStats(ArmyStats, modData)),
|
||||
createStatsOption(EarningsGraph, ObserverStatsPanel.Graph, null, () => IncomeGraph()),
|
||||
createStatsOption(ArmyGraph, ObserverStatsPanel.ArmyGraph, null, () => ArmyValueGraph()),
|
||||
CreateStatsOption(Basic, ObserverStatsPanel.Basic, basicPlayerTemplate, () => DisplayStats(BasicStats, modData)),
|
||||
CreateStatsOption(Economy, ObserverStatsPanel.Economy, economyPlayerTemplate, () => DisplayStats(EconomyStats, modData)),
|
||||
CreateStatsOption(Production, ObserverStatsPanel.Production, productionPlayerTemplate, () => DisplayStats(ProductionStats, modData)),
|
||||
CreateStatsOption(SupportPowers, ObserverStatsPanel.SupportPowers, supportPowersPlayerTemplate, () => DisplayStats(SupportPowerStats, modData)),
|
||||
CreateStatsOption(Combat, ObserverStatsPanel.Combat, combatPlayerTemplate, () => DisplayStats(CombatStats, modData)),
|
||||
CreateStatsOption(Army, ObserverStatsPanel.Army, armyPlayerTemplate, () => DisplayStats(ArmyStats, modData)),
|
||||
CreateStatsOption(EarningsGraph, ObserverStatsPanel.Graph, null, () => IncomeGraph()),
|
||||
CreateStatsOption(ArmyGraph, ObserverStatsPanel.ArmyGraph, null, () => ArmyValueGraph()),
|
||||
};
|
||||
|
||||
Func<StatsDropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
ScrollItemWidget SetupItem(StatsDropDownOption option, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template, option.IsSelected, option.OnClick);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.Title;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
var statsDropDownPanelTemplate = logicArgs.TryGetValue("StatsDropDownPanelTemplate", out yaml) ? yaml.Value : "LABEL_DROPDOWN_TEMPLATE";
|
||||
|
||||
statsDropDown.OnMouseDown = _ => statsDropDown.ShowDropDown(statsDropDownPanelTemplate, 230, statsDropDownOptions, setupItem);
|
||||
statsDropDown.OnMouseDown = _ => statsDropDown.ShowDropDown(statsDropDownPanelTemplate, 230, statsDropDownOptions, SetupItem);
|
||||
statsDropDownOptions[0].OnClick();
|
||||
|
||||
var keyListener = statsDropDown.Get<LogicKeyListenerWidget>("STATS_DROPDOWN_KEYHANDLER");
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using OpenRA.Widgets;
|
||||
|
||||
@@ -25,7 +24,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
if (button == null)
|
||||
return;
|
||||
|
||||
Action<bool> selectTab = reverse =>
|
||||
void SelectTab(bool reverse)
|
||||
{
|
||||
if (tabs.QueueGroup == button.ProductionGroup)
|
||||
tabs.SelectNextTab(reverse);
|
||||
@@ -33,11 +32,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
tabs.QueueGroup = button.ProductionGroup;
|
||||
|
||||
tabs.PickUpCompletedBuilding();
|
||||
};
|
||||
}
|
||||
|
||||
button.IsDisabled = () => !tabs.Groups[button.ProductionGroup].Tabs.Any(t => t.Queue.BuildableItems().Any());
|
||||
button.OnMouseUp = mi => selectTab(mi.Modifiers.HasModifier(Modifiers.Shift));
|
||||
button.OnKeyPress = e => selectTab(e.Modifiers.HasModifier(Modifiers.Shift));
|
||||
button.OnMouseUp = mi => SelectTab(mi.Modifiers.HasModifier(Modifiers.Shift));
|
||||
button.OnKeyPress = e => SelectTab(e.Modifiers.HasModifier(Modifiers.Shift));
|
||||
button.IsHighlighted = () => tabs.QueueGroup == button.ProductionGroup;
|
||||
|
||||
var chromeName = button.ProductionGroup.ToLowerInvariant();
|
||||
@@ -65,7 +64,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var palette = tabs.Parent.Get<ProductionPaletteWidget>(tabs.PaletteWidget);
|
||||
var icontemplate = background.Get("ICON_TEMPLATE");
|
||||
|
||||
Action<int, int> updateBackground = (oldCount, newCount) =>
|
||||
void UpdateBackground(int oldCount, int newCount)
|
||||
{
|
||||
background.RemoveChildren();
|
||||
|
||||
@@ -79,12 +78,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
bg.Bounds.Y = palette.IconSize.Y * y;
|
||||
background.AddChild(bg);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
palette.OnIconCountChanged += updateBackground;
|
||||
palette.OnIconCountChanged += UpdateBackground;
|
||||
|
||||
// Set the initial palette state
|
||||
updateBackground(0, 0);
|
||||
UpdateBackground(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,20 +46,20 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var originalTimestep = world.Timestep;
|
||||
|
||||
// In the event the replay goes out of sync, it becomes no longer usable. For polish we permanently pause the world.
|
||||
Func<bool> isWidgetDisabled = () => orderManager.IsOutOfSync || orderManager.NetFrameNumber >= replayNetTicks;
|
||||
bool IsWidgetDisabled() => orderManager.IsOutOfSync || orderManager.NetFrameNumber >= replayNetTicks;
|
||||
|
||||
var pauseButton = widget.Get<ButtonWidget>("BUTTON_PAUSE");
|
||||
pauseButton.IsVisible = () => world.ReplayTimestep != 0 && !isWidgetDisabled();
|
||||
pauseButton.IsVisible = () => world.ReplayTimestep != 0 && !IsWidgetDisabled();
|
||||
pauseButton.OnClick = () => world.ReplayTimestep = 0;
|
||||
|
||||
var playButton = widget.Get<ButtonWidget>("BUTTON_PLAY");
|
||||
playButton.IsVisible = () => world.ReplayTimestep == 0 || isWidgetDisabled();
|
||||
playButton.IsVisible = () => world.ReplayTimestep == 0 || IsWidgetDisabled();
|
||||
playButton.OnClick = () => world.ReplayTimestep = (int)Math.Ceiling(originalTimestep * multipliers[speed]);
|
||||
playButton.IsDisabled = isWidgetDisabled;
|
||||
playButton.IsDisabled = IsWidgetDisabled;
|
||||
|
||||
var slowButton = widget.Get<ButtonWidget>("BUTTON_SLOW");
|
||||
slowButton.IsHighlighted = () => speed == PlaybackSpeed.Slow;
|
||||
slowButton.IsDisabled = isWidgetDisabled;
|
||||
slowButton.IsDisabled = IsWidgetDisabled;
|
||||
slowButton.OnClick = () =>
|
||||
{
|
||||
speed = PlaybackSpeed.Slow;
|
||||
@@ -69,7 +69,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
var normalSpeedButton = widget.Get<ButtonWidget>("BUTTON_REGULAR");
|
||||
normalSpeedButton.IsHighlighted = () => speed == PlaybackSpeed.Regular;
|
||||
normalSpeedButton.IsDisabled = isWidgetDisabled;
|
||||
normalSpeedButton.IsDisabled = IsWidgetDisabled;
|
||||
normalSpeedButton.OnClick = () =>
|
||||
{
|
||||
speed = PlaybackSpeed.Regular;
|
||||
@@ -79,7 +79,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
var fastButton = widget.Get<ButtonWidget>("BUTTON_FAST");
|
||||
fastButton.IsHighlighted = () => speed == PlaybackSpeed.Fast;
|
||||
fastButton.IsDisabled = isWidgetDisabled;
|
||||
fastButton.IsDisabled = IsWidgetDisabled;
|
||||
fastButton.OnClick = () =>
|
||||
{
|
||||
speed = PlaybackSpeed.Fast;
|
||||
@@ -89,7 +89,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
var maximumButton = widget.Get<ButtonWidget>("BUTTON_MAXIMUM");
|
||||
maximumButton.IsHighlighted = () => speed == PlaybackSpeed.Maximum;
|
||||
maximumButton.IsDisabled = isWidgetDisabled;
|
||||
maximumButton.IsDisabled = IsWidgetDisabled;
|
||||
maximumButton.OnClick = () =>
|
||||
{
|
||||
speed = PlaybackSpeed.Maximum;
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using OpenRA.Widgets;
|
||||
|
||||
namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
@@ -34,7 +33,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
if (foreground != null)
|
||||
foregroundTemplate = foreground.Get("ICON_TEMPLATE");
|
||||
|
||||
Action<int, int> updateBackground = (_, icons) =>
|
||||
void UpdateBackground(int _, int icons)
|
||||
{
|
||||
var rowHeight = palette.IconSize.Y + palette.IconMargin;
|
||||
var rowWidth = palette.IconSize.X + palette.IconMargin;
|
||||
@@ -68,12 +67,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
foreground.AddChild(row);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
palette.OnIconCountChanged += updateBackground;
|
||||
palette.OnIconCountChanged += UpdateBackground;
|
||||
|
||||
// Set the initial palette state
|
||||
updateBackground(0, 0);
|
||||
UpdateBackground(0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,9 +135,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
progressBar.Percentage = progressPercentage;
|
||||
}
|
||||
|
||||
Action<string> onExtractProgress = s => Game.RunAfterTick(() => getStatusText = () => s);
|
||||
void OnExtractProgress(string s) => Game.RunAfterTick(() => getStatusText = () => s);
|
||||
|
||||
Action<string> onError = s => Game.RunAfterTick(() =>
|
||||
void OnError(string s) => Game.RunAfterTick(() =>
|
||||
{
|
||||
var host = downloadHost ?? modData.Translation.GetString(UnknownHost);
|
||||
Log.Write("install", $"Download from {host} failed: " + s);
|
||||
@@ -149,7 +149,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
cancelButton.OnClick = Ui.CloseWindow;
|
||||
});
|
||||
|
||||
Action<string> downloadUrl = url =>
|
||||
void DownloadUrl(string url)
|
||||
{
|
||||
Log.Write("install", "Downloading " + url);
|
||||
|
||||
@@ -205,7 +205,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
if (!archiveValid)
|
||||
{
|
||||
onError(modData.Translation.GetString(ArchiveValidationFailed));
|
||||
OnError(modData.Translation.GetString(ArchiveValidationFailed));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -231,7 +231,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
continue;
|
||||
}
|
||||
|
||||
onExtractProgress(modData.Translation.GetString(ExtractingEntry, Translation.Arguments("entry", kv.Value)));
|
||||
OnExtractProgress(modData.Translation.GetString(ExtractingEntry, Translation.Arguments("entry", kv.Value)));
|
||||
Log.Write("install", "Extracting " + kv.Value);
|
||||
var targetPath = Platform.ResolvePath(kv.Key);
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(targetPath));
|
||||
@@ -262,19 +262,19 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
File.Delete(f);
|
||||
}
|
||||
|
||||
onError(modData.Translation.GetString(ArchiveExtractionFailed));
|
||||
OnError(modData.Translation.GetString(ArchiveExtractionFailed));
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
onError(e.ToString());
|
||||
OnError(e.ToString());
|
||||
}
|
||||
finally
|
||||
{
|
||||
File.Delete(file);
|
||||
}
|
||||
}, token);
|
||||
};
|
||||
}
|
||||
|
||||
if (download.MirrorList != null)
|
||||
{
|
||||
@@ -289,18 +289,18 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var result = await httpResponseMessage.Content.ReadAsStringAsync();
|
||||
|
||||
var mirrorList = result.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
downloadUrl(mirrorList.Random(new MersenneTwister()));
|
||||
DownloadUrl(mirrorList.Random(new MersenneTwister()));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.Write("install", "Mirror selection failed with error:");
|
||||
Log.Write("install", e.ToString());
|
||||
onError(modData.Translation.GetString(MirrorSelectionFailed));
|
||||
OnError(modData.Translation.GetString(MirrorSelectionFailed));
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
downloadUrl(download.URL);
|
||||
DownloadUrl(download.URL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
// Show connection failed dialog
|
||||
Ui.CloseWindow();
|
||||
|
||||
Action onConnect = () =>
|
||||
void OnConnect()
|
||||
{
|
||||
Game.OpenWindow("SERVER_LOBBY", new WidgetArgs()
|
||||
{
|
||||
@@ -125,9 +125,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{ "onStart", onStart },
|
||||
{ "skirmishMode", false }
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
Action<string> onRetry = pass => ConnectionLogic.Connect(connection.Target, pass, onConnect, onExit);
|
||||
Action<string> onRetry = pass => ConnectionLogic.Connect(connection.Target, pass, OnConnect, onExit);
|
||||
|
||||
var switchPanel = CurrentServerSettings.ServerExternalMod != null ? "CONNECTION_SWITCHMOD_PANEL" : "CONNECTIONFAILED_PANEL";
|
||||
Ui.OpenWindow(switchPanel, new WidgetArgs()
|
||||
@@ -327,13 +327,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
options.Add(modData.Translation.GetString(ConfigureTeams), teamOptions);
|
||||
}
|
||||
|
||||
Func<DropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
ScrollItemWidget SetupItem(DropDownOption option, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template, option.IsSelected, option.OnClick);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.Title;
|
||||
return item;
|
||||
};
|
||||
slotsButton.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 175, options, setupItem);
|
||||
}
|
||||
|
||||
slotsButton.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 175, options, SetupItem);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -401,7 +402,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
}
|
||||
|
||||
// Force start panel
|
||||
Action startGame = () =>
|
||||
void StartGame()
|
||||
{
|
||||
// Refresh MapCache and check if the selected map is available before attempting to start the game
|
||||
if (modData.MapCache[map.Uid].Status == MapStatus.Available)
|
||||
@@ -411,7 +412,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
}
|
||||
else
|
||||
UpdateSelectedMap();
|
||||
};
|
||||
}
|
||||
|
||||
var startGameButton = lobby.GetOrNull<ButtonWidget>("START_GAME_BUTTON");
|
||||
if (startGameButton != null)
|
||||
@@ -428,14 +429,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
if (orderManager.LobbyInfo.Clients.Any(c => c.Slot != null && !c.IsAdmin && c.Bot == null && !c.IsReady))
|
||||
panel = PanelType.ForceStart;
|
||||
else
|
||||
startGame();
|
||||
StartGame();
|
||||
};
|
||||
}
|
||||
|
||||
var forceStartBin = Ui.LoadWidget("FORCE_START_DIALOG", lobby.Get("TOP_PANELS_ROOT"), new WidgetArgs());
|
||||
forceStartBin.IsVisible = () => panel == PanelType.ForceStart;
|
||||
forceStartBin.Get("KICK_WARNING").IsVisible = () => orderManager.LobbyInfo.Clients.Any(c => c.IsInvalid);
|
||||
forceStartBin.Get<ButtonWidget>("OK_BUTTON").OnClick = startGame;
|
||||
forceStartBin.Get<ButtonWidget>("OK_BUTTON").OnClick = StartGame;
|
||||
forceStartBin.Get<ButtonWidget>("CANCEL_BUTTON").OnClick = () => panel = PanelType.Players;
|
||||
|
||||
var disconnectButton = lobby.Get<ButtonWidget>("DISCONNECT_BUTTON");
|
||||
|
||||
@@ -157,17 +157,17 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
dropdown.OnMouseDown = _ =>
|
||||
{
|
||||
Func<KeyValuePair<string, string>, ScrollItemWidget, ScrollItemWidget> setupItem = (c, template) =>
|
||||
ScrollItemWidget SetupItem(KeyValuePair<string, string> c, ScrollItemWidget template)
|
||||
{
|
||||
Func<bool> isSelected = () => optionValue.Update(orderManager.LobbyInfo.GlobalSettings).Value == c.Key;
|
||||
Action onClick = () => orderManager.IssueOrder(Order.Command($"option {option.Id} {c.Key}"));
|
||||
bool IsSelected() => optionValue.Update(orderManager.LobbyInfo.GlobalSettings).Value == c.Key;
|
||||
void OnClick() => orderManager.IssueOrder(Order.Command($"option {option.Id} {c.Key}"));
|
||||
|
||||
var item = ScrollItemWidget.Setup(template, isSelected, onClick);
|
||||
var item = ScrollItemWidget.Setup(template, IsSelected, OnClick);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => c.Value;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", option.Values.Count * 30, option.Values, setupItem);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", option.Values.Count * 30, option.Values, SetupItem);
|
||||
};
|
||||
|
||||
var label = row.GetOrNull<LabelWidget>(dropdown.Id + "_DESC");
|
||||
|
||||
@@ -82,16 +82,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
options.Add(bots.Count > 0 ? modData.Translation.GetString(Bots) : modData.Translation.GetString(BotsDisabled), bots);
|
||||
|
||||
Func<SlotDropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(SlotDropDownOption o, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
o.Selected,
|
||||
() => orderManager.IssueOrder(Order.Command(o.Order)));
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => o.Title;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 180, options, setupItem);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 180, options, SetupItem);
|
||||
}
|
||||
|
||||
public static void ShowPlayerActionDropDown(DropDownButtonWidget dropdown,
|
||||
@@ -137,37 +137,37 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
});
|
||||
}
|
||||
|
||||
Func<DropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(DropDownOption o, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate, o.IsSelected, o.OnClick);
|
||||
var labelWidget = item.Get<LabelWidget>("LABEL");
|
||||
labelWidget.GetText = () => o.Title;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
dropdown.ShowDropDown("PLAYERACTION_DROPDOWN_TEMPLATE", 167, options, setupItem);
|
||||
dropdown.ShowDropDown("PLAYERACTION_DROPDOWN_TEMPLATE", 167, options, SetupItem);
|
||||
}
|
||||
|
||||
public static void ShowTeamDropDown(DropDownButtonWidget dropdown, Session.Client client,
|
||||
OrderManager orderManager, int teamCount)
|
||||
{
|
||||
Func<int, ScrollItemWidget, ScrollItemWidget> setupItem = (ii, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(int ii, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => client.Team == ii,
|
||||
() => orderManager.IssueOrder(Order.Command($"team {client.Index} {ii}")));
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => ii == 0 ? "-" : ii.ToString();
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
var options = Enumerable.Range(0, teamCount + 1);
|
||||
dropdown.ShowDropDown("TEAM_DROPDOWN_TEMPLATE", 150, options, setupItem);
|
||||
dropdown.ShowDropDown("TEAM_DROPDOWN_TEMPLATE", 150, options, SetupItem);
|
||||
}
|
||||
|
||||
public static void ShowHandicapDropDown(DropDownButtonWidget dropdown, Session.Client client,
|
||||
OrderManager orderManager)
|
||||
{
|
||||
Func<int, ScrollItemWidget, ScrollItemWidget> setupItem = (ii, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(int ii, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => client.Handicap == ii,
|
||||
@@ -176,26 +176,26 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var label = $"{ii}%";
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => label;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
// Handicaps may be set between 0 - 95% in steps of 5%
|
||||
var options = Enumerable.Range(0, 20).Select(i => 5 * i);
|
||||
dropdown.ShowDropDown("TEAM_DROPDOWN_TEMPLATE", 150, options, setupItem);
|
||||
dropdown.ShowDropDown("TEAM_DROPDOWN_TEMPLATE", 150, options, SetupItem);
|
||||
}
|
||||
|
||||
public static void ShowSpawnDropDown(DropDownButtonWidget dropdown, Session.Client client,
|
||||
OrderManager orderManager, IEnumerable<int> spawnPoints)
|
||||
{
|
||||
Func<int, ScrollItemWidget, ScrollItemWidget> setupItem = (ii, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(int ii, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => client.SpawnPoint == ii,
|
||||
() => SetSpawnPoint(orderManager, client, ii));
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => ii == 0 ? "-" : Convert.ToChar('A' - 1 + ii).ToString();
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
dropdown.ShowDropDown("SPAWN_DROPDOWN_TEMPLATE", 150, spawnPoints, setupItem);
|
||||
dropdown.ShowDropDown("SPAWN_DROPDOWN_TEMPLATE", 150, spawnPoints, SetupItem);
|
||||
}
|
||||
|
||||
/// <summary>Splits a string into two parts on the first instance of a given token.</summary>
|
||||
@@ -213,7 +213,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
public static void ShowFactionDropDown(DropDownButtonWidget dropdown, Session.Client client,
|
||||
OrderManager orderManager, Dictionary<string, LobbyFaction> factions)
|
||||
{
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (factionId, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(string factionId, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => client.Faction == factionId,
|
||||
@@ -233,18 +233,18 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
item.GetTooltipDesc = () => tooltip.Second;
|
||||
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
var options = factions.Where(f => f.Value.Selectable).GroupBy(f => f.Value.Side)
|
||||
.ToDictionary(g => g.Key ?? "", g => g.Select(f => f.Key));
|
||||
|
||||
dropdown.ShowDropDown("FACTION_DROPDOWN_TEMPLATE", 154, options, setupItem);
|
||||
dropdown.ShowDropDown("FACTION_DROPDOWN_TEMPLATE", 154, options, SetupItem);
|
||||
}
|
||||
|
||||
public static void ShowColorDropDown(DropDownButtonWidget color, Session.Client client,
|
||||
OrderManager orderManager, WorldRenderer worldRenderer, ColorPickerManagerInfo colorManager)
|
||||
{
|
||||
Action onExit = () =>
|
||||
void OnExit()
|
||||
{
|
||||
if (client == orderManager.LocalClient)
|
||||
{
|
||||
@@ -254,7 +254,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
color.RemovePanel();
|
||||
orderManager.IssueOrder(Order.Command($"color {client.Index} {colorManager.Color}"));
|
||||
};
|
||||
}
|
||||
|
||||
var colorChooser = Game.LoadWidget(worldRenderer.World, "COLOR_CHOOSER", null, new WidgetArgs()
|
||||
{
|
||||
@@ -263,7 +263,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{ "initialFaction", client.Faction }
|
||||
});
|
||||
|
||||
color.AttachPanel(colorChooser, onExit);
|
||||
color.AttachPanel(colorChooser, OnExit);
|
||||
}
|
||||
|
||||
public static void SelectSpawnPoint(OrderManager orderManager, MapPreviewWidget mapPreview, MapPreview preview, MouseInput mi)
|
||||
@@ -511,7 +511,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
checkBox.IsVisible = () => orderManager.LocalClient.IsAdmin && !skirmishMode;
|
||||
checkBox.IsDisabled = () => false;
|
||||
|
||||
Action okPressed = () =>
|
||||
void OkPressed()
|
||||
{
|
||||
orderManager.IssueOrder(Order.Command($"allow_spectators {!orderManager.LobbyInfo.GlobalSettings.AllowSpectators}"));
|
||||
orderManager.IssueOrders(
|
||||
@@ -520,7 +520,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
client => Order.Command($"kick {client.Index} {client.Name}")).ToArray());
|
||||
|
||||
after();
|
||||
};
|
||||
}
|
||||
|
||||
checkBox.OnClick = () =>
|
||||
{
|
||||
@@ -532,7 +532,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
Game.LoadWidget(null, "KICK_SPECTATORS_DIALOG", lobby.Get("TOP_PANELS_ROOT"), new WidgetArgs
|
||||
{
|
||||
{ "clientCount", spectatorCount },
|
||||
{ "okPressed", okPressed },
|
||||
{ "okPressed", OkPressed },
|
||||
{ "cancelPressed", after }
|
||||
});
|
||||
}
|
||||
|
||||
@@ -249,34 +249,34 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
menuType = MenuType.StartupPrompts;
|
||||
|
||||
Action onIntroductionComplete = () =>
|
||||
void OnIntroductionComplete()
|
||||
{
|
||||
Action onSysInfoComplete = () =>
|
||||
void OnSysInfoComplete()
|
||||
{
|
||||
LoadAndDisplayNews(webServices, newsBG);
|
||||
SwitchMenu(MenuType.Main);
|
||||
};
|
||||
}
|
||||
|
||||
if (SystemInfoPromptLogic.ShouldShowPrompt())
|
||||
{
|
||||
Ui.OpenWindow("MAINMENU_SYSTEM_INFO_PROMPT", new WidgetArgs
|
||||
{
|
||||
{ "onComplete", onSysInfoComplete }
|
||||
{ "onComplete", OnSysInfoComplete }
|
||||
});
|
||||
}
|
||||
else
|
||||
onSysInfoComplete();
|
||||
};
|
||||
OnSysInfoComplete();
|
||||
}
|
||||
|
||||
if (IntroductionPromptLogic.ShouldShowPrompt())
|
||||
{
|
||||
Game.OpenWindow("MAINMENU_INTRODUCTION_PROMPT", new WidgetArgs
|
||||
{
|
||||
{ "onComplete", onIntroductionComplete }
|
||||
{ "onComplete", OnIntroductionComplete }
|
||||
});
|
||||
}
|
||||
else
|
||||
onIntroductionComplete();
|
||||
OnIntroductionComplete();
|
||||
|
||||
Game.OnShellmapLoaded += OpenMenuBasedOnLastGame;
|
||||
|
||||
|
||||
@@ -255,19 +255,19 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
// 'all game types' extra item
|
||||
categories.Insert(0, (null as string, tabMaps[tab].Length));
|
||||
|
||||
Func<(string Category, int Count), string> showItem = x => (x.Category ?? allMaps) + $" ({x.Count})";
|
||||
string ShowItem((string Category, int Count) x) => (x.Category ?? allMaps) + $" ({x.Count})";
|
||||
|
||||
Func<(string Category, int Count), ScrollItemWidget, ScrollItemWidget> setupItem = (ii, template) =>
|
||||
ScrollItemWidget SetupItem((string Category, int Count) ii, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template,
|
||||
() => category == ii.Category,
|
||||
() => { category = ii.Category; EnumerateMaps(tab, itemTemplate); });
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => showItem(ii);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => ShowItem(ii);
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
gameModeDropdown.OnClick = () =>
|
||||
gameModeDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 210, categories, setupItem);
|
||||
gameModeDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 210, categories, SetupItem);
|
||||
|
||||
gameModeDropdown.GetText = () =>
|
||||
{
|
||||
@@ -275,7 +275,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
if (item == default((string, int)))
|
||||
item.Category = modData.Translation.GetString(NoMatches);
|
||||
|
||||
return showItem(item);
|
||||
return ShowItem(item);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -295,7 +295,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
if (orderByFunc == null)
|
||||
orderByFunc = orderByDict[orderByPlayer];
|
||||
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, template) =>
|
||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template,
|
||||
() => orderByFunc == orderByDict[o],
|
||||
@@ -303,10 +303,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
||||
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
orderByDropdown.OnClick = () =>
|
||||
orderByDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, orderByDict.Keys, setupItem);
|
||||
orderByDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, orderByDict.Keys, SetupItem);
|
||||
|
||||
orderByDropdown.GetText = () =>
|
||||
orderByDict.FirstOrDefault(m => m.Value == orderByFunc).Key;
|
||||
@@ -334,17 +334,17 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
// Access the minimap to trigger async generation of the minimap.
|
||||
preview.GetMinimap();
|
||||
|
||||
Action dblClick = () =>
|
||||
void DblClick()
|
||||
{
|
||||
if (onSelect != null)
|
||||
{
|
||||
Ui.CloseWindow();
|
||||
onSelect(preview.Uid);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
var item = ScrollItemWidget.Setup(preview.Uid, template, () => selectedUid == preview.Uid,
|
||||
() => selectedUid = preview.Uid, dblClick);
|
||||
() => selectedUid = preview.Uid, DblClick);
|
||||
item.IsVisible = () => item.RenderBounds.IntersectsWith(scrollpanels[tab].RenderBounds);
|
||||
|
||||
var titleLabel = item.Get<LabelWithTooltipWidget>("TITLE");
|
||||
|
||||
@@ -298,14 +298,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
OnClick = () => difficulty = kv.Key
|
||||
});
|
||||
|
||||
Func<DropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
ScrollItemWidget SetupItem(DropDownOption option, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template, option.IsSelected, option.OnClick);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.Title;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
difficultyButton.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", options.Count() * 30, options, setupItem);
|
||||
difficultyButton.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", options.Count() * 30, options, SetupItem);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -325,14 +325,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
OnClick = () => gameSpeed = s.Key
|
||||
});
|
||||
|
||||
Func<DropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
ScrollItemWidget SetupItem(DropDownOption option, ScrollItemWidget template)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(template, option.IsSelected, option.OnClick);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.Title;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
gameSpeedButton.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", options.Count() * 30, options, setupItem);
|
||||
gameSpeedButton.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", options.Count() * 30, options, SetupItem);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
// Close the multiplayer browser
|
||||
Ui.CloseWindow();
|
||||
|
||||
Action onLobbyExit = () =>
|
||||
void OnLobbyExit()
|
||||
{
|
||||
// Open a fresh copy of the multiplayer browser
|
||||
Ui.OpenWindow("MULTIPLAYER_PANEL", new WidgetArgs
|
||||
@@ -97,12 +97,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
Game.Disconnect();
|
||||
|
||||
DiscordService.UpdateStatus(DiscordState.InMenu);
|
||||
};
|
||||
}
|
||||
|
||||
Game.OpenWindow("SERVER_LOBBY", new WidgetArgs
|
||||
{
|
||||
{ "onStart", onStart },
|
||||
{ "onExit", onLobbyExit },
|
||||
{ "onExit", OnLobbyExit },
|
||||
{ "skirmishMode", false }
|
||||
});
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
BuildMusicTable();
|
||||
|
||||
Func<bool> noMusic = () => !musicPlaylist.IsMusicAvailable || musicPlaylist.CurrentSongIsBackground || currentSong == null;
|
||||
bool NoMusic() => !musicPlaylist.IsMusicAvailable || musicPlaylist.CurrentSongIsBackground || currentSong == null;
|
||||
panel.Get("NO_MUSIC_LABEL").IsVisible = () => !musicPlaylist.IsMusicAvailable;
|
||||
|
||||
if (musicPlaylist.IsMusicAvailable)
|
||||
@@ -57,25 +57,25 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
var playButton = panel.Get<ButtonWidget>("BUTTON_PLAY");
|
||||
playButton.OnClick = Play;
|
||||
playButton.IsDisabled = noMusic;
|
||||
playButton.IsDisabled = NoMusic;
|
||||
playButton.IsVisible = () => !Game.Sound.MusicPlaying;
|
||||
|
||||
var pauseButton = panel.Get<ButtonWidget>("BUTTON_PAUSE");
|
||||
pauseButton.OnClick = Game.Sound.PauseMusic;
|
||||
pauseButton.IsDisabled = noMusic;
|
||||
pauseButton.IsDisabled = NoMusic;
|
||||
pauseButton.IsVisible = () => Game.Sound.MusicPlaying;
|
||||
|
||||
var stopButton = panel.Get<ButtonWidget>("BUTTON_STOP");
|
||||
stopButton.OnClick = () => { musicPlaylist.Stop(); };
|
||||
stopButton.IsDisabled = noMusic;
|
||||
stopButton.IsDisabled = NoMusic;
|
||||
|
||||
var nextButton = panel.Get<ButtonWidget>("BUTTON_NEXT");
|
||||
nextButton.OnClick = () => { currentSong = musicPlaylist.GetNextSong(); Play(); };
|
||||
nextButton.IsDisabled = noMusic;
|
||||
nextButton.IsDisabled = NoMusic;
|
||||
|
||||
var prevButton = panel.Get<ButtonWidget>("BUTTON_PREV");
|
||||
prevButton.OnClick = () => { currentSong = musicPlaylist.GetPrevSong(); Play(); };
|
||||
prevButton.IsDisabled = noMusic;
|
||||
prevButton.IsDisabled = NoMusic;
|
||||
|
||||
var shuffleCheckbox = panel.Get<CheckboxWidget>("SHUFFLE");
|
||||
shuffleCheckbox.IsChecked = () => Game.Settings.Sound.Shuffle;
|
||||
|
||||
@@ -240,7 +240,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
ddb.GetText = () => lookup[filter.Type];
|
||||
ddb.OnMouseDown = _ =>
|
||||
{
|
||||
Func<(GameType GameType, string Text), ScrollItemWidget, ScrollItemWidget> setupItem = (option, tpl) =>
|
||||
ScrollItemWidget SetupItem((GameType GameType, string Text) option, ScrollItemWidget tpl)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(
|
||||
tpl,
|
||||
@@ -248,9 +248,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
() => { filter.Type = option.GameType; ApplyFilter(); });
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.Text;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, setupItem);
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, SetupItem);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -275,7 +275,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
ddb.GetText = () => lookup[filter.Date];
|
||||
ddb.OnMouseDown = _ =>
|
||||
{
|
||||
Func<(DateType DateType, string Text), ScrollItemWidget, ScrollItemWidget> setupItem = (option, tpl) =>
|
||||
ScrollItemWidget SetupItem((DateType DateType, string Text) option, ScrollItemWidget tpl)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(
|
||||
tpl,
|
||||
@@ -284,9 +284,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.Text;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, setupItem);
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, SetupItem);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -311,7 +311,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
ddb.GetText = () => lookup[filter.Duration];
|
||||
ddb.OnMouseDown = _ =>
|
||||
{
|
||||
Func<(DurationType DurationType, string Text), ScrollItemWidget, ScrollItemWidget> setupItem = (option, tpl) =>
|
||||
ScrollItemWidget SetupItem((DurationType DurationType, string Text) option, ScrollItemWidget tpl)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(
|
||||
tpl,
|
||||
@@ -319,9 +319,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
() => { filter.Duration = option.DurationType; ApplyFilter(); });
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.Text;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, setupItem);
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, SetupItem);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -346,7 +346,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
ddb.GetText = () => lookup[filter.Outcome];
|
||||
ddb.OnMouseDown = _ =>
|
||||
{
|
||||
Func<(WinState WinState, string Text), ScrollItemWidget, ScrollItemWidget> setupItem = (option, tpl) =>
|
||||
ScrollItemWidget SetupItem((WinState WinState, string Text) option, ScrollItemWidget tpl)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(
|
||||
tpl,
|
||||
@@ -354,9 +354,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
() => { filter.Outcome = option.WinState; ApplyFilter(); });
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option.Text;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, setupItem);
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, SetupItem);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -384,7 +384,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
ddb.GetText = () => string.IsNullOrEmpty(filter.MapName) ? anyText : filter.MapName;
|
||||
ddb.OnMouseDown = _ =>
|
||||
{
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (option, tpl) =>
|
||||
ScrollItemWidget SetupItem(string option, ScrollItemWidget tpl)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(
|
||||
tpl,
|
||||
@@ -392,9 +392,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
() => { filter.MapName = option; ApplyFilter(); });
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option ?? anyText;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, setupItem);
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, SetupItem);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -412,7 +412,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
ddb.GetText = () => string.IsNullOrEmpty(filter.PlayerName) ? anyText : filter.PlayerName;
|
||||
ddb.OnMouseDown = _ =>
|
||||
{
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (option, tpl) =>
|
||||
ScrollItemWidget SetupItem(string option, ScrollItemWidget tpl)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(
|
||||
tpl,
|
||||
@@ -420,9 +420,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
() => { filter.PlayerName = option; ApplyFilter(); });
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option ?? anyText;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, setupItem);
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, SetupItem);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -444,7 +444,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
ddb.GetText = () => string.IsNullOrEmpty(filter.Faction) ? anyText : filter.Faction;
|
||||
ddb.OnMouseDown = _ =>
|
||||
{
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (option, tpl) =>
|
||||
ScrollItemWidget SetupItem(string option, ScrollItemWidget tpl)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(
|
||||
tpl,
|
||||
@@ -452,9 +452,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
() => { filter.Faction = option; ApplyFilter(); });
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => option ?? anyText;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, setupItem);
|
||||
ddb.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 330, options, SetupItem);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -497,7 +497,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
});
|
||||
};
|
||||
|
||||
Action<ReplayMetadata, Action> onDeleteReplay = (r, after) =>
|
||||
void OnDeleteReplay(ReplayMetadata r, Action after)
|
||||
{
|
||||
ConfirmationDialogs.ButtonPrompt(modData,
|
||||
title: DeleteReplayTitle,
|
||||
@@ -510,13 +510,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
},
|
||||
confirmText: DeleteReplayAccept,
|
||||
onCancel: () => { });
|
||||
};
|
||||
}
|
||||
|
||||
var deleteButton = panel.Get<ButtonWidget>("MNG_DELSEL_BUTTON");
|
||||
deleteButton.IsDisabled = () => selectedReplay == null;
|
||||
deleteButton.OnClick = () =>
|
||||
{
|
||||
onDeleteReplay(selectedReplay, () =>
|
||||
OnDeleteReplay(selectedReplay, () =>
|
||||
{
|
||||
if (selectedReplay == null)
|
||||
SelectFirstVisibleReplay();
|
||||
@@ -533,7 +533,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
if (list.Count == 1)
|
||||
{
|
||||
onDeleteReplay(list[0], () => { if (selectedReplay == null) SelectFirstVisibleReplay(); });
|
||||
OnDeleteReplay(list[0], () => { if (selectedReplay == null) SelectFirstVisibleReplay(); });
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -231,12 +231,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
progressText.GetText = ProgressLabelText;
|
||||
|
||||
var gs = Game.Settings.Game;
|
||||
Action<MPGameFilters> toggleFilterFlag = f =>
|
||||
void ToggleFilterFlag(MPGameFilters f)
|
||||
{
|
||||
gs.MPGameFilters ^= f;
|
||||
Game.Settings.Save();
|
||||
RefreshServerList();
|
||||
};
|
||||
}
|
||||
|
||||
var filtersButton = widget.GetOrNull<DropDownButtonWidget>("FILTERS_DROPDOWNBUTTON");
|
||||
if (filtersButton != null)
|
||||
@@ -251,35 +251,35 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
if (showWaitingCheckbox != null)
|
||||
{
|
||||
showWaitingCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Waiting);
|
||||
showWaitingCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Waiting);
|
||||
showWaitingCheckbox.OnClick = () => ToggleFilterFlag(MPGameFilters.Waiting);
|
||||
}
|
||||
|
||||
var showEmptyCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("EMPTY");
|
||||
if (showEmptyCheckbox != null)
|
||||
{
|
||||
showEmptyCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Empty);
|
||||
showEmptyCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Empty);
|
||||
showEmptyCheckbox.OnClick = () => ToggleFilterFlag(MPGameFilters.Empty);
|
||||
}
|
||||
|
||||
var showAlreadyStartedCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("ALREADY_STARTED");
|
||||
if (showAlreadyStartedCheckbox != null)
|
||||
{
|
||||
showAlreadyStartedCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Started);
|
||||
showAlreadyStartedCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Started);
|
||||
showAlreadyStartedCheckbox.OnClick = () => ToggleFilterFlag(MPGameFilters.Started);
|
||||
}
|
||||
|
||||
var showProtectedCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("PASSWORD_PROTECTED");
|
||||
if (showProtectedCheckbox != null)
|
||||
{
|
||||
showProtectedCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Protected);
|
||||
showProtectedCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Protected);
|
||||
showProtectedCheckbox.OnClick = () => ToggleFilterFlag(MPGameFilters.Protected);
|
||||
}
|
||||
|
||||
var showIncompatibleCheckbox = filtersPanel.GetOrNull<CheckboxWidget>("INCOMPATIBLE_VERSION");
|
||||
if (showIncompatibleCheckbox != null)
|
||||
{
|
||||
showIncompatibleCheckbox.IsChecked = () => gs.MPGameFilters.HasFlag(MPGameFilters.Incompatible);
|
||||
showIncompatibleCheckbox.OnClick = () => toggleFilterFlag(MPGameFilters.Incompatible);
|
||||
showIncompatibleCheckbox.OnClick = () => ToggleFilterFlag(MPGameFilters.Incompatible);
|
||||
}
|
||||
|
||||
filtersButton.IsDisabled = () => searchStatus == SearchStatus.Fetching;
|
||||
@@ -692,7 +692,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
header.Get<LabelWidget>("LABEL").GetText = () => headerTitle;
|
||||
rows.Add(header);
|
||||
|
||||
Func<GameServer, int> listOrder = g =>
|
||||
int ListOrder(GameServer g)
|
||||
{
|
||||
// Servers waiting for players are always first
|
||||
if (g.State == (int)ServerState.WaitingPlayers && g.Players > 0)
|
||||
@@ -709,9 +709,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
// Empty servers are shown at the end because a flood of empty servers
|
||||
// at the top of the game list make the community look dead
|
||||
return 3;
|
||||
};
|
||||
}
|
||||
|
||||
foreach (var modGamesByState in modGames.GroupBy(listOrder).OrderBy(g => g.Key))
|
||||
foreach (var modGamesByState in modGames.GroupBy(ListOrder).OrderBy(g => g.Key))
|
||||
{
|
||||
// Sort 'Playing' games by Started, others by number of players
|
||||
foreach (var game in modGamesByState.Key == 2 ? modGamesByState.OrderByDescending(g => g.Started) : modGamesByState.OrderByDescending(g => g.Players))
|
||||
|
||||
@@ -156,7 +156,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var i = 0;
|
||||
var options = devices.ToDictionary(d => i++.ToString(), d => d);
|
||||
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => soundDevice == options[o],
|
||||
@@ -171,9 +171,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var label = WidgetUtils.TruncateText(options[o].Label, deviceLabel.Bounds.Width, font);
|
||||
deviceLabel.GetText = () => label;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -342,7 +342,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{ modData.Translation.GetString(Windowed), WindowMode.Windowed },
|
||||
};
|
||||
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => s.Mode == options[o],
|
||||
@@ -354,31 +354,31 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
||||
}
|
||||
|
||||
public static void BindTextNotificationPoolFilterSettings(Widget panel, GameSettings gs)
|
||||
{
|
||||
Action<TextNotificationPoolFilters> toggleFilterFlag = f =>
|
||||
void ToggleFilterFlag(TextNotificationPoolFilters f)
|
||||
{
|
||||
gs.TextNotificationPoolFilters ^= f;
|
||||
Game.Settings.Save();
|
||||
};
|
||||
}
|
||||
|
||||
var feedbackCheckbox = panel.GetOrNull<CheckboxWidget>("UI_FEEDBACK_CHECKBOX");
|
||||
if (feedbackCheckbox != null)
|
||||
{
|
||||
feedbackCheckbox.IsChecked = () => gs.TextNotificationPoolFilters.HasFlag(TextNotificationPoolFilters.Feedback);
|
||||
feedbackCheckbox.OnClick = () => toggleFilterFlag(TextNotificationPoolFilters.Feedback);
|
||||
feedbackCheckbox.OnClick = () => ToggleFilterFlag(TextNotificationPoolFilters.Feedback);
|
||||
}
|
||||
|
||||
var transientsCheckbox = panel.GetOrNull<CheckboxWidget>("TRANSIENTS_CHECKBOX");
|
||||
if (transientsCheckbox != null)
|
||||
{
|
||||
transientsCheckbox.IsChecked = () => gs.TextNotificationPoolFilters.HasFlag(TextNotificationPoolFilters.Transients);
|
||||
transientsCheckbox.OnClick = () => toggleFilterFlag(TextNotificationPoolFilters.Transients);
|
||||
transientsCheckbox.OnClick = () => ToggleFilterFlag(TextNotificationPoolFilters.Transients);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -391,7 +391,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{ modData.Translation.GetString(AlwaysShow), StatusBarsType.AlwaysShow },
|
||||
};
|
||||
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => s.StatusBars == options[o],
|
||||
@@ -399,14 +399,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
||||
}
|
||||
|
||||
static void ShowDisplaySelectionDropdown(DropDownButtonWidget dropdown, GraphicSettings s)
|
||||
{
|
||||
Func<int, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(int o, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => s.VideoDisplay == o,
|
||||
@@ -415,14 +415,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var label = $"Display {o + 1}";
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => label;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, Enumerable.Range(0, Game.Renderer.DisplayCount), setupItem);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, Enumerable.Range(0, Game.Renderer.DisplayCount), SetupItem);
|
||||
}
|
||||
|
||||
static void ShowGLProfileDropdown(DropDownButtonWidget dropdown, GraphicSettings s)
|
||||
{
|
||||
Func<GLProfile, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(GLProfile o, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => s.GLProfile == o,
|
||||
@@ -431,10 +431,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var label = o.ToString();
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => label;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
var profiles = new[] { GLProfile.Automatic }.Concat(Game.Renderer.SupportedGLProfiles);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, profiles, setupItem);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, profiles, SetupItem);
|
||||
}
|
||||
|
||||
static void ShowTargetLinesDropdown(ModData modData, DropDownButtonWidget dropdown, GameSettings s)
|
||||
@@ -446,7 +446,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{ modData.Translation.GetString(Disabled), TargetLinesType.Disabled },
|
||||
};
|
||||
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => s.TargetLines == options[o],
|
||||
@@ -454,14 +454,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
||||
}
|
||||
|
||||
public static void ShowBattlefieldCameraDropdown(ModData modData, DropDownButtonWidget dropdown, WorldViewportSizes viewportSizes, GraphicSettings gs)
|
||||
{
|
||||
Func<WorldViewport, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(WorldViewport o, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => gs.ViewportDistance == o,
|
||||
@@ -470,7 +470,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var label = GetViewportSizeName(modData, o);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => label;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
var windowHeight = Game.Renderer.NativeResolution.Height;
|
||||
|
||||
@@ -485,7 +485,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
if (viewportSizes.AllowNativeZoom && farRange.Y < windowHeight)
|
||||
validSizes.Add(WorldViewport.Native);
|
||||
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, validSizes, setupItem);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, validSizes, SetupItem);
|
||||
}
|
||||
|
||||
static void RecalculateWidgetLayout(Widget w, bool insideScrollPanel = false)
|
||||
@@ -533,7 +533,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
public static void ShowUIScaleDropdown(DropDownButtonWidget dropdown, GraphicSettings gs)
|
||||
{
|
||||
Func<float, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(float o, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => gs.UIScale == o,
|
||||
@@ -553,14 +553,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var label = $"{(int)(100 * o)}%";
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => label;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
var viewportSizes = Game.ModData.Manifest.Get<WorldViewportSizes>();
|
||||
var maxScales = new float2(Game.Renderer.NativeResolution) / new float2(viewportSizes.MinEffectiveResolution);
|
||||
var maxScale = Math.Min(maxScales.X, maxScales.Y);
|
||||
|
||||
var validScales = new[] { 1f, 1.25f, 1.5f, 1.75f, 2f }.Where(x => x <= maxScale);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, validScales, setupItem);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, validScales, SetupItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,16 +170,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{ modData.Translation.GetString(Modern), false },
|
||||
};
|
||||
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => s.UseClassicMouseStyle == options[o],
|
||||
() => s.UseClassicMouseStyle = options[o]);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
||||
}
|
||||
|
||||
static void ShowMouseScrollDropdown(ModData modData, DropDownButtonWidget dropdown, GameSettings s)
|
||||
@@ -192,16 +192,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{ modData.Translation.GetString(Joystick), MouseScrollType.Joystick },
|
||||
};
|
||||
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => s.MouseScroll == options[o],
|
||||
() => s.MouseScroll = options[o]);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
||||
}
|
||||
|
||||
static void ShowZoomModifierDropdown(ModData modData, DropDownButtonWidget dropdown, GameSettings s)
|
||||
@@ -215,16 +215,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{ modData.Translation.GetString(None), Modifiers.None }
|
||||
};
|
||||
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => s.ZoomModifier == options[o],
|
||||
() => s.ZoomModifier = options[o]);
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
||||
return item;
|
||||
};
|
||||
}
|
||||
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
||||
}
|
||||
|
||||
static void MakeMouseFocusSettingsLive()
|
||||
|
||||
@@ -105,46 +105,46 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var current = Game.Settings;
|
||||
current.Save();
|
||||
|
||||
Action closeAndExit = () => { Ui.CloseWindow(); onExit(); };
|
||||
void CloseAndExit() { Ui.CloseWindow(); onExit(); }
|
||||
if (needsRestart)
|
||||
{
|
||||
Action noRestart = () => ConfirmationDialogs.ButtonPrompt(modData,
|
||||
void NoRestart() => ConfirmationDialogs.ButtonPrompt(modData,
|
||||
title: SettingsSaveTitle,
|
||||
text: SettingsSavePrompt,
|
||||
onCancel: closeAndExit,
|
||||
onCancel: CloseAndExit,
|
||||
cancelText: SettingsSaveCancel);
|
||||
|
||||
if (!Game.ExternalMods.TryGetValue(ExternalMod.MakeKey(Game.ModData.Manifest), out var external))
|
||||
{
|
||||
noRestart();
|
||||
NoRestart();
|
||||
return;
|
||||
}
|
||||
|
||||
ConfirmationDialogs.ButtonPrompt(modData,
|
||||
title: RestartTitle,
|
||||
text: RestartPrompt,
|
||||
onConfirm: () => Game.SwitchToExternalMod(external, null, noRestart),
|
||||
onCancel: closeAndExit,
|
||||
onConfirm: () => Game.SwitchToExternalMod(external, null, NoRestart),
|
||||
onCancel: CloseAndExit,
|
||||
confirmText: RestartAccept,
|
||||
cancelText: RestartCancel);
|
||||
}
|
||||
else
|
||||
closeAndExit();
|
||||
CloseAndExit();
|
||||
};
|
||||
|
||||
widget.Get<ButtonWidget>("RESET_BUTTON").OnClick = () =>
|
||||
{
|
||||
Action reset = () =>
|
||||
void Reset()
|
||||
{
|
||||
resetPanelActions[activePanel]();
|
||||
Game.Settings.Save();
|
||||
};
|
||||
}
|
||||
|
||||
ConfirmationDialogs.ButtonPrompt(modData,
|
||||
title: ResetTitle,
|
||||
titleArguments: Translation.Arguments("panel", panels[activePanel]),
|
||||
text: ResetPrompt,
|
||||
onConfirm: reset,
|
||||
onConfirm: Reset,
|
||||
onCancel: () => { },
|
||||
confirmText: ResetAccept,
|
||||
cancelText: ResetCancel);
|
||||
|
||||
@@ -400,7 +400,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
{
|
||||
var key = Hotkey.FromKeyInput(e);
|
||||
|
||||
Func<HotkeyReference, ScrollDirection, bool> handleMapScrollKey = (hotkey, scrollDirection) =>
|
||||
bool HandleMapScrollKey(HotkeyReference hotkey, ScrollDirection scrollDirection)
|
||||
{
|
||||
var isHotkey = false;
|
||||
var keyValue = hotkey.GetValue();
|
||||
@@ -411,10 +411,10 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
}
|
||||
|
||||
return isHotkey;
|
||||
};
|
||||
}
|
||||
|
||||
if (handleMapScrollKey(ScrollUpKey, ScrollDirection.Up) || handleMapScrollKey(ScrollDownKey, ScrollDirection.Down)
|
||||
|| handleMapScrollKey(ScrollLeftKey, ScrollDirection.Left) || handleMapScrollKey(ScrollRightKey, ScrollDirection.Right))
|
||||
if (HandleMapScrollKey(ScrollUpKey, ScrollDirection.Up) || HandleMapScrollKey(ScrollDownKey, ScrollDirection.Down)
|
||||
|| HandleMapScrollKey(ScrollLeftKey, ScrollDirection.Left) || HandleMapScrollKey(ScrollRightKey, ScrollDirection.Right))
|
||||
return true;
|
||||
|
||||
if (e.Event != KeyInputEvent.Down)
|
||||
|
||||
Reference in New Issue
Block a user