private void UpdateState(ShuttleConsoleComponent component, List <DockingInterfaceState>?docks = null) { EntityUid?entity = component.Owner; var getShuttleEv = new ConsoleShuttleEvent { Console = entity, }; RaiseLocalEvent(entity.Value, ref getShuttleEv, false); entity = getShuttleEv.Console; TryComp <TransformComponent>(entity, out var consoleXform); TryComp <RadarConsoleComponent>(entity, out var radar); var range = radar?.MaxRange ?? 0f; TryComp <ShuttleComponent>(consoleXform?.GridUid, out var shuttle); var mode = shuttle?.Mode ?? ShuttleMode.Cruise; docks ??= GetAllDocks(); _ui.GetUiOrNull(component.Owner, ShuttleConsoleUiKey.Key) ?.SetState(new ShuttleConsoleBoundInterfaceState( mode, range, consoleXform?.Coordinates, consoleXform?.LocalRotation, docks)); }
private void OnDestinationMessage(EntityUid uid, ShuttleConsoleComponent component, ShuttleConsoleDestinationMessage args) { if (!TryComp <FTLDestinationComponent>(args.Destination, out var dest)) { return; } if (!dest.Enabled) { return; } EntityUid?entity = component.Owner; var getShuttleEv = new ConsoleShuttleEvent { Console = uid, }; RaiseLocalEvent(entity.Value, ref getShuttleEv); entity = getShuttleEv.Console; if (entity == null || dest.Whitelist?.IsValid(entity.Value, EntityManager) == false) { return; } if (!TryComp <TransformComponent>(entity, out var xform) || !TryComp <ShuttleComponent>(xform.GridUid, out var shuttle)) { return; } if (HasComp <FTLComponent>(xform.GridUid)) { if (args.Session.AttachedEntity != null) { _popup.PopupCursor(Loc.GetString("shuttle-console-in-ftl"), Filter.Entities(args.Session.AttachedEntity.Value)); } return; } if (!_shuttle.CanFTL(shuttle.Owner, out var reason)) { if (args.Session.AttachedEntity != null) { _popup.PopupCursor(reason, Filter.Entities(args.Session.AttachedEntity.Value)); } return; } _shuttle.FTLTravel(shuttle, args.Destination, hyperspaceTime: _shuttle.TransitTime); }
private void OnCargoGetConsole(EntityUid uid, CargoPilotConsoleComponent component, ref ConsoleShuttleEvent args) { args.Console = GetShuttleConsole(component); }
private void UpdateState(ShuttleConsoleComponent component, List <DockingInterfaceState>?docks = null) { EntityUid?entity = component.Owner; var getShuttleEv = new ConsoleShuttleEvent { Console = entity, }; RaiseLocalEvent(entity.Value, ref getShuttleEv); entity = getShuttleEv.Console; TryComp <TransformComponent>(entity, out var consoleXform); TryComp <RadarConsoleComponent>(entity, out var radar); var range = radar?.MaxRange ?? 0f; TryComp <ShuttleComponent>(consoleXform?.GridUid, out var shuttle); var destinations = new List <(EntityUid, string, bool)>(); var ftlState = FTLState.Available; var ftlTime = TimeSpan.Zero; if (TryComp <FTLComponent>(shuttle?.Owner, out var shuttleFtl)) { ftlState = shuttleFtl.State; ftlTime = _timing.CurTime + TimeSpan.FromSeconds(shuttleFtl.Accumulator); } // Mass too large if (entity != null && shuttle?.Owner != null && (!TryComp <PhysicsComponent>(shuttle?.Owner, out var shuttleBody) || shuttleBody.Mass < 1000f)) { var metaQuery = GetEntityQuery <MetaDataComponent>(); // Can't go anywhere when in FTL. var locked = shuttleFtl != null || Paused(shuttle !.Owner); // Can't cache it because it may have a whitelist for the particular console. // Include paused as we still want to show CentCom. foreach (var comp in EntityQuery <FTLDestinationComponent>(true)) { // Can't warp to itself or if it's not on the whitelist. if (comp.Owner == shuttle?.Owner || comp.Whitelist?.IsValid(entity.Value) == false) { continue; } var meta = metaQuery.GetComponent(comp.Owner); var name = meta.EntityName; if (string.IsNullOrEmpty(name)) { name = Loc.GetString("shuttle-console-unknown"); } var canTravel = !locked && comp.Enabled && !Paused(comp.Owner, meta) && (!TryComp <FTLComponent>(comp.Owner, out var ftl) || ftl.State == FTLState.Cooldown); // Can't travel to same map. if (canTravel && consoleXform?.MapUid == Transform(comp.Owner).MapUid) { canTravel = false; } destinations.Add((comp.Owner, name, canTravel)); } } docks ??= GetAllDocks(); _ui.GetUiOrNull(component.Owner, ShuttleConsoleUiKey.Key) ?.SetState(new ShuttleConsoleBoundInterfaceState( ftlState, ftlTime, destinations, range, consoleXform?.Coordinates, consoleXform?.LocalRotation, docks)); }