@@ -33,60 +33,52 @@ public sealed class WeatherSystem : SharedWeatherSystem
|
|||||||
{
|
{
|
||||||
if (args.Length < 2)
|
if (args.Length < 2)
|
||||||
{
|
{
|
||||||
shell.WriteError($"A");
|
shell.WriteError(Loc.GetString("cmd-weather-error-no-arguments"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!int.TryParse(args[0], out var mapInt))
|
if (!int.TryParse(args[0], out var mapInt))
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
var mapId = new MapId(mapInt);
|
var mapId = new MapId(mapInt);
|
||||||
|
|
||||||
if (!MapManager.MapExists(mapId))
|
if (!MapManager.MapExists(mapId))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!_mapSystem.TryGetMap(mapId, out var mapUid))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var weatherComp = EnsureComp<WeatherComponent>(mapUid.Value);
|
||||||
|
|
||||||
|
//Weather Proto parsing
|
||||||
|
WeatherPrototype? weather = null;
|
||||||
|
if (!args[1].Equals("null"))
|
||||||
{
|
{
|
||||||
|
if (!ProtoMan.TryIndex(args[1], out weather))
|
||||||
|
{
|
||||||
|
shell.WriteError(Loc.GetString("cmd-weather-error-unknown-proto"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Time parsing
|
||||||
TimeSpan? endTime = null;
|
TimeSpan? endTime = null;
|
||||||
|
|
||||||
if (args.Length == 3)
|
if (args.Length == 3)
|
||||||
{
|
{
|
||||||
|
var curTime = Timing.CurTime;
|
||||||
if (int.TryParse(args[2], out var durationInt))
|
if (int.TryParse(args[2], out var durationInt))
|
||||||
{
|
{
|
||||||
var curTime = Timing.CurTime;
|
|
||||||
var maxTime = TimeSpan.MaxValue;
|
|
||||||
|
|
||||||
// If it's already running then just fade out with how much time we're into the weather.
|
|
||||||
if (_mapSystem.TryGetMap(mapId, out var mapUid) &&
|
|
||||||
TryComp<WeatherComponent>(mapUid, out var weatherComp) &&
|
|
||||||
weatherComp.Weather.TryGetValue(args[1], out var existing))
|
|
||||||
{
|
|
||||||
maxTime = curTime - existing.StartTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
endTime = curTime + TimeSpan.FromSeconds(durationInt);
|
endTime = curTime + TimeSpan.FromSeconds(durationInt);
|
||||||
|
|
||||||
if (endTime > maxTime)
|
|
||||||
endTime = maxTime;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[1].Equals("null"))
|
|
||||||
{
|
|
||||||
SetWeather(mapId, null, endTime);
|
|
||||||
}
|
|
||||||
else if (ProtoMan.TryIndex<WeatherPrototype>(args[1], out var weatherProto))
|
|
||||||
{
|
|
||||||
SetWeather(mapId, weatherProto, endTime);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
shell.WriteError($"Unable to parse weather prototype");
|
shell.WriteError(Loc.GetString("cmd-weather-error-wrong-time"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetWeather(mapId, weather, endTime);
|
||||||
|
}
|
||||||
|
|
||||||
private CompletionResult WeatherCompletion(IConsoleShell shell, string[] args)
|
private CompletionResult WeatherCompletion(IConsoleShell shell, string[] args)
|
||||||
{
|
{
|
||||||
if (args.Length == 1)
|
if (args.Length == 1)
|
||||||
|
|||||||
@@ -156,11 +156,14 @@ public abstract class SharedWeatherSystem : EntitySystem
|
|||||||
|
|
||||||
foreach (var (eProto, weather) in weatherComp.Weather)
|
foreach (var (eProto, weather) in weatherComp.Weather)
|
||||||
{
|
{
|
||||||
|
// if we turn off the weather, we don't want endTime = null
|
||||||
|
if (proto == null)
|
||||||
|
endTime ??= Timing.CurTime + WeatherComponent.ShutdownTime;
|
||||||
|
|
||||||
// Reset cooldown if it's an existing one.
|
// Reset cooldown if it's an existing one.
|
||||||
if (proto == null || eProto == proto.ID)
|
if (proto is not null && eProto == proto.ID)
|
||||||
{
|
{
|
||||||
weather.EndTime = endTime;
|
weather.EndTime = endTime;
|
||||||
|
|
||||||
if (weather.State == WeatherState.Ending)
|
if (weather.State == WeatherState.Ending)
|
||||||
weather.State = WeatherState.Running;
|
weather.State = WeatherState.Running;
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
cmd-weather-desc = Sets the weather for the current map.
|
cmd-weather-desc = Sets the weather for the current map.
|
||||||
cmd-weather-help = weather <mapId> <prototype / null>
|
cmd-weather-help = weather <mapId> <prototype / null>
|
||||||
cmd-weather-hint = Weather prototype
|
cmd-weather-hint = Weather prototype
|
||||||
|
|
||||||
|
cmd-weather-error-no-arguments = Not enough arguments!
|
||||||
|
cmd-weather-error-unknown-proto = Unknown Weather prototype!
|
||||||
|
cmd-weather-error-wrong-time = Time is in the wrong format!
|
||||||
Reference in New Issue
Block a user