Beispiel #1
0
        public void UpdateState(NukeUiState state)
        {
            string firstMsg, secondMsg;

            switch (state.Status)
            {
            case NukeStatus.AWAIT_DISK:
                firstMsg  = Loc.GetString("nuke-user-interface-first-status-device-locked");
                secondMsg = Loc.GetString("nuke-user-interface-second-status-await-disk");
                break;

            case NukeStatus.AWAIT_CODE:
                firstMsg  = Loc.GetString("nuke-user-interface-first-status-input-code");
                secondMsg = Loc.GetString("nuke-user-interface-second-status-current-code",
                                          ("code", VisualizeCode(state.EnteredCodeLength, state.MaxCodeLength)));
                break;

            case NukeStatus.AWAIT_ARM:
                firstMsg  = Loc.GetString("nuke-user-interface-first-status-device-ready");
                secondMsg = Loc.GetString("nuke-user-interface-second-status-time",
                                          ("time", state.RemainingTime));
                break;

            case NukeStatus.ARMED:
                firstMsg  = Loc.GetString("nuke-user-interface-first-status-device-armed");
                secondMsg = Loc.GetString("nuke-user-interface-second-status-time",
                                          ("time", state.RemainingTime));
                break;

            case NukeStatus.COOLDOWN:
                firstMsg  = Loc.GetString("nuke-user-interface-first-status-device-cooldown");
                secondMsg = Loc.GetString("nuke-user-interface-second-status-cooldown-time",
                                          ("time", state.CooldownTime));
                break;

            default:
                // shouldn't normally be here
                firstMsg  = Loc.GetString("nuke-user-interface-status-error");
                secondMsg = Loc.GetString("nuke-user-interface-status-error");
                break;
            }

            FirstStatusLabel.Text  = firstMsg;
            SecondStatusLabel.Text = secondMsg;

            EjectButton.Disabled  = !state.DiskInserted || state.Status == NukeStatus.ARMED;
            AnchorButton.Disabled = state.Status == NukeStatus.ARMED;
            AnchorButton.Pressed  = state.IsAnchored;
            ArmButton.Disabled    = !state.AllowArm || !state.IsAnchored;
        }
        private void UpdateUserInterface(EntityUid uid, NukeComponent?component = null)
        {
            if (!Resolve(uid, ref component))
            {
                return;
            }

            var ui = component.Owner.GetUIOrNull(NukeUiKey.Key);

            if (ui == null)
            {
                return;
            }

            var anchored = false;

            if (EntityManager.TryGetComponent(uid, out TransformComponent transform))
            {
                anchored = transform.Anchored;
            }

            var allowArm = component.DiskSlot.HasItem &&
                           (component.Status == NukeStatus.AWAIT_ARM ||
                            component.Status == NukeStatus.ARMED);

            var state = new NukeUiState()
            {
                Status            = component.Status,
                RemainingTime     = (int)component.RemainingTime,
                DiskInserted      = component.DiskSlot.HasItem,
                IsAnchored        = anchored,
                AllowArm          = allowArm,
                EnteredCodeLength = component.EnteredCode.Length,
                MaxCodeLength     = _codes.Code.Length,
                CooldownTime      = (int)component.CooldownTime
            };

            ui.SetState(state);
        }