var currentMap = _entManager.GetComponent<TransformComponent>(playerEntity).MapID;
var currentGrid = _entManager.GetComponent<TransformComponent>(playerEntity).GridUid;
- var found = _entManager.EntityQuery<WarpPointComponent>(true)
- .Where(p => p.Location == location)
- .Select(p => (_entManager.GetComponent<TransformComponent>(p.Owner).Coordinates, p.Follow))
+ var found = GetWarpPointByName(location)
.OrderBy(p => p.Item1, Comparer<EntityCoordinates>.Create((a, b) =>
{
// Sort so that warp points on the same grid/map are first.
private IEnumerable<string> GetWarpPointNames()
{
- return _entManager.EntityQuery<WarpPointComponent>(true)
- .Select(p => p.Location)
- .Where(p => p != null)
- .OrderBy(p => p)
- .Distinct()!;
+ List<string> points = new(_entManager.Count<WarpPointComponent>());
+ var query = _entManager.AllEntityQueryEnumerator<WarpPointComponent, MetaDataComponent>();
+ while (query.MoveNext(out _, out var warp, out var meta))
+ {
+ points.Add(warp.Location ?? meta.EntityName);
+ }
+
+ points.Sort();
+ return points;
+ }
+
+ private List<(EntityCoordinates, bool)> GetWarpPointByName(string name)
+ {
+ List<(EntityCoordinates, bool)> points = new();
+ var query = _entManager.AllEntityQueryEnumerator<WarpPointComponent, MetaDataComponent, TransformComponent>();
+ while (query.MoveNext(out var uid, out var warp, out var meta, out var xform))
+ {
+ if (name == (warp.Location ?? meta.EntityName))
+ points.Add((xform.Coordinates, warp.Follow));
+ }
+
+ return points;
}
public CompletionResult GetCompletion(IConsoleShell shell, string[] args)
while (allQuery.MoveNext(out var uid, out var warp))
{
- if (warp.Location != null)
- yield return new GhostWarp(GetNetEntity(uid), warp.Location, true);
+ yield return new GhostWarp(GetNetEntity(uid), warp.Location ?? Name(uid), true);
}
}
// choose spider charge detonation point
var warps = new List<EntityUid>();
- var query = EntityQueryEnumerator<BombingTargetComponent, WarpPointComponent, TransformComponent>();
- var map = Transform(uid).MapID;
- while (query.MoveNext(out var warpUid, out _, out var warp, out var xform))
+ var query = EntityQueryEnumerator<BombingTargetComponent, WarpPointComponent>();
+ while (query.MoveNext(out var warpUid, out _, out var warp))
{
- if (warp.Location != null)
- warps.Add(warpUid);
+ warps.Add(warpUid);
}
if (warps.Count > 0)
{
if (!TryComp<NinjaRoleComponent>(mindId, out var role) ||
role.SpiderChargeTarget == null ||
- !TryComp<WarpPointComponent>(role.SpiderChargeTarget, out var warp) ||
- warp.Location == null)
+ !TryComp<WarpPointComponent>(role.SpiderChargeTarget, out var warp))
{
// this should never really happen but eh
return Loc.GetString("objective-condition-spider-charge-title-no-target");
}
- return Loc.GetString("objective-condition-spider-charge-title", ("location", warp.Location));
+ return Loc.GetString("objective-condition-spider-charge-title", ("location", warp.Location ?? Name(role.SpiderChargeTarget.Value)));
}
// steal research
[RegisterComponent]
public sealed partial class WarpPointComponent : Component
{
- [ViewVariables(VVAccess.ReadWrite)] [DataField("location")] public string? Location { get; set; }
+ [ViewVariables(VVAccess.ReadWrite), DataField]
+ public string? Location;
/// <summary>
/// If true, ghosts warping to this entity will begin following it.
/// </summary>
- [DataField("follow")]
- public bool Follow = false;
+ [DataField]
+ public bool Follow;
}
}
name: warp point (beacon)
components:
- type: NavMapBeacon
+ - type: WarpPoint
+ location: beacon
- type: entity
parent: WarpPoint
suffix: ninja bombing target
components:
- type: BombingTarget
+ - type: WarpPoint
+ location: bombing target
- type: Sprite
layers:
- state: pink
- type: NavMapBeacon
text: bar
color: "#791500"
+ - type: WarpPoint
+ location: bar
- type: entity
id: WarpPointBeaconCargo
- type: NavMapBeacon
text: cargo
color: "#A46106"
+ - type: WarpPoint
+ location: cargo
- type: entity
id: WarpPointBeaconCommand
- type: NavMapBeacon
text: command
color: "#334E6D"
+ - type: WarpPoint
+ location: command
- type: entity
id: WarpPointBeaconEngineering
- type: NavMapBeacon
text: engineering
color: "#EFB341"
+ - type: WarpPoint
+ location: engineering
- type: entity
id: WarpPointBeaconMedical
- type: NavMapBeacon
text: medical
color: "#52B4E9"
+ - type: WarpPoint
+ location: medical
- type: entity
id: WarpPointBeaconNeutral
- type: NavMapBeacon
text: neutral
color: "#D4D4D4"
+ - type: WarpPoint
+ location: neutral
- type: entity
id: WarpPointBeaconScience
- type: NavMapBeacon
text: science
color: "#D381C9"
+ - type: WarpPoint
+ location: science
- type: entity
id: WarpPointBeaconService
- type: NavMapBeacon
text: service
color: "#9FED58"
+ - type: WarpPoint
+ location: service