void InitializeControlScheme() { var devices = m_PlayerHandle.GetApplicableDevices(); m_ActionMapInput.TryInitializeWithDevices(devices, null, m_ControlSchemeIndex); m_Bindings.Clear(); m_ActionMapInput.controlSchemes[m_ControlSchemeIndex].ExtractLabeledEndBindings(m_Bindings); }
public void Start() { // Create a global player handle that listen to all relevant devices not already used // by other player handles. globalHandle = PlayerHandleManager.GetNewPlayerHandle(); globalHandle.global = true; List <ActionMapSlot> actionMaps = playerPrefab.GetComponent <PlayerInput>().actionMaps; foreach (ActionMapSlot actionMapSlot in actionMaps) { ActionMapInput actionMapInput = ActionMapInput.Create(actionMapSlot.actionMap); actionMapInput.TryInitializeWithDevices(globalHandle.GetApplicableDevices()); actionMapInput.active = actionMapSlot.active; actionMapInput.blockSubsequent = actionMapSlot.blockSubsequent; globalHandle.maps.Add(actionMapInput); } joinAction.Bind(globalHandle); leaveAction.Bind(globalHandle); }
private ActionMapInput CreateActionMapInput(ActionMap map, InputDevice device) { // Check for improper use of action maps first if (device != null && !IsValidActionMapForDevice(map, device)) { return(null); } var devices = device == null?m_PlayerHandle.GetApplicableDevices() : new InputDevice[] { device }; var actionMapInput = ActionMapInput.Create(map); // It's possible that there are no suitable control schemes for the device that is being initialized, // so ActionMapInput can't be marked active if (actionMapInput.TryInitializeWithDevices(devices)) { actionMapInput.autoReinitialize = false; actionMapInput.active = true; } return(actionMapInput); }
public void Update() { // Listen to if the join button was pressed on a yet unassigned device. if (joinAction.control.wasJustPressed) { // These are the devices currently active in the global player handle. List <InputDevice> devices = globalHandle.GetActions(joinAction.action.actionMap).GetCurrentlyUsedDevices(); PlayerHandle handle = PlayerHandleManager.GetNewPlayerHandle(); foreach (var device in devices) { handle.AssignDevice(device, true); } foreach (ActionMapSlot actionMapSlot in playerPrefab.actionMaps) { ActionMapInput map = ActionMapInput.Create(actionMapSlot.actionMap); map.TryInitializeWithDevices(handle.GetApplicableDevices()); map.blockSubsequent = actionMapSlot.blockSubsequent; // Activate the ActionMap that is used to join, // disregard active state from ActionMapSlots for now (wait until instantiating player). if (map.actionMap == joinAction.action.actionMap) { map.active = true; } handle.maps.Add(map); } players.Add(new PlayerInfo(handle, joinAction, leaveAction)); } int readyCount = 0; for (int i = players.Count - 1; i >= 0; i--) { var player = players[i]; if (!player.ready) { if (player.joinControl.wasJustPressed) { player.ready = true; } if (player.leaveControl.wasJustPressed) { player.playerHandle.Destroy(); players.Remove(player); continue; } } else { if (player.joinControl.wasJustPressed || player.leaveControl.wasJustPressed) { player.ready = false; } } if (player.ready) { readyCount++; } } if (readyCount >= 1 && (players.Count - readyCount) == 0) { StartGame(); } }