Пример #1
0
    private IEnumerator <WaitCommand> StartRebindInternal(InputBindingViewModel binding)
    {
        var bindingId = binding.Id;

        // TODO Update selected binding in the menu model
        Fmod.PlayOneShot("event:/ui/forward");
        // Disable menu input to view
        //_mouseInputToView.Disable();
        _inputModule.DeactivateModule();

        yield return(WaitCommand.WaitForNextFrame);

        _model.Rebinding = binding;

        if (bindingId.Group == InputBindingGroup.Menu)
        {
            MenuAction menuAction = (MenuAction)bindingId.ActionId;
            _inputRebinder.StartRebind(inputSource => {
                if (inputSource.IsJust)
                {
                    _menuInputBindings.UpdateMapping(menuAction, inputSource.Value);
                }
                _coroutineScheduler.Run(CompleteRebind(isCanceled: inputSource.IsNothing));
            });
        }
        else if (bindingId.Group == InputBindingGroup.Wingsuit)
        {
            WingsuitAction pilotAction = (WingsuitAction)bindingId.ActionId;
            _inputRebinder.StartRebind(inputSource => {
                if (inputSource.IsJust)
                {
                    _pilotInputBindings.UpdateMapping(pilotAction, inputSource.Value);
                }
                _coroutineScheduler.Run(CompleteRebind(isCanceled: inputSource.IsNothing));
            });
        }
        else if (bindingId.Group == InputBindingGroup.Spectator)
        {
            SpectatorAction spectatorAction = (SpectatorAction)bindingId.ActionId;
            _inputRebinder.StartRebind(inputSource => {
                if (inputSource.IsJust)
                {
                    _spectatorInputBindings.UpdateMapping(spectatorAction, inputSource.Value);
                }
                _coroutineScheduler.Run(CompleteRebind(isCanceled: inputSource.IsNothing));
            });
        }
        else if (bindingId.Group == InputBindingGroup.Parachute)
        {
            ParachuteAction parachuteAction = (ParachuteAction)bindingId.ActionId;
            _inputRebinder.StartRebind(inputSource => {
                if (inputSource.IsJust)
                {
                    _parachuteInputBindings.UpdateMapping(parachuteAction, inputSource.Value);
                }
                _coroutineScheduler.Run(CompleteRebind(isCanceled: inputSource.IsNothing));
            });
        }
    }
Пример #2
0
        public void ScheduleAction(SpectatorAction action, List <Asteroid> targets, bool exact, bool send = true)
        {
            ActionObjects a = new ActionObjects(action, targets, exact);

            actions.Enqueue(a);

            if (send)
            {
                SendActionScheduleMessage(action, targets, exact);
            }
        }
Пример #3
0
        public void SendActionScheduleMessage(SpectatorAction action, List <Asteroid> targets, bool exact)
        {
            NetOutgoingMessage msg = action.Owner.SceneMgr.CreateNetMessage();

            msg.Write((int)PacketType.SCHEDULE_SPECTATOR_ACTION);
            msg.Write(action.Owner.GetId());
            msg.Write(exact);
            msg.WriteSpecialAction(action);
            msg.Write(targets.Count);
            targets.ForEach(a => msg.Write(a.Id));

            action.Owner.SceneMgr.SendMessage(msg);
        }
Пример #4
0
        public void ReceiveActionScheduleMessage(NetIncomingMessage msg, Player owner)
        {
            bool            exact  = msg.ReadBoolean();
            SpectatorAction action = msg.ReadSpecialAction(owner.SceneMgr, owner) as SpectatorAction;

            int             count = msg.ReadInt32();
            List <Asteroid> temp  = new List <Asteroid>();

            for (int i = 0; i < count; i++)
            {
                Asteroid found = owner.SceneMgr.GetSceneObject(msg.ReadInt64()) as Asteroid;
                if (found != null)
                {
                    temp.Add(found);
                }
            }

            action.CastingTime -= ((msg.SenderConnection.AverageRoundtripTime / 2) / 1000);
            ScheduleAction(action, temp, exact, false);
        }
Пример #5
0
 public ActionObjects(SpectatorAction action, List <Asteroid> objects, bool exact)
 {
     this.action  = action;
     this.targets = objects;
     this.exact   = exact;
 }