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)); }); } }
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); } }
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); }
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); }
public ActionObjects(SpectatorAction action, List <Asteroid> objects, bool exact) { this.action = action; this.targets = objects; this.exact = exact; }