Ejemplo n.º 1
0
        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));
        }