예제 #1
0
        void SetMode(CockpitMode mode)
        {
            if (gameNotRunning)
            {
                gameNotRunning.SetActive(mode.HasFlag(CockpitMode.GameNotRunning));
            }
            if (map)
            {
                map.SetActive(mode.HasFlag(CockpitMode.Map));
            }
            if (cockpit)
            {
                cockpit.SetActive(mode.HasFlag(CockpitMode.Cockpit));
            }
            if (shipOnlyCockpit)
            {
                shipOnlyCockpit.SetActive(mode.HasFlag(CockpitMode.Cockpit) && mode.HasFlag(CockpitMode.InShip));
            }
            if (mainShipOnlyCockpit)
            {
                mainShipOnlyCockpit.SetActive(mode.HasFlag(CockpitMode.Cockpit) && mode.HasFlag(CockpitMode.InMainShip));
            }
            if (fighterOnlyCockpit)
            {
                fighterOnlyCockpit.SetActive(mode.HasFlag(CockpitMode.Cockpit) && mode.HasFlag(CockpitMode.InFighter));
            }
            if (srvOnlyCockpit)
            {
                srvOnlyCockpit.SetActive(mode.HasFlag(CockpitMode.Cockpit) && mode.HasFlag(CockpitMode.InSRV));
            }

            Mode = mode;
            ModeChanged.Send(Mode);
        }
 // Trigger a refresh event
 protected void TriggerRefresh()
 {
     if (refreshEvent != null)
     {
         refreshEvent.Send();
     }
 }
예제 #3
0
        //-------------------------------------------------
        private void TeleportPlayer()
        {
            teleporting = false;

            PlayerPre.Send(pointedAtTeleportMarker);

            SteamVR_Fade.Start(Color.clear, currentFadeTime);

            TeleportPoint teleportPoint    = teleportingToMarker as TeleportPoint;
            Vector3       teleportPosition = pointedAtPosition;

            if (teleportPoint != null)
            {
                teleportPosition = teleportPoint.transform.position;

                //Teleport to a new scene
                if (teleportPoint.teleportType == TeleportPoint.TeleportPointType.SwitchToNewScene)
                {
                    teleportPoint.TeleportToScene();
                    return;
                }
            }

            // Find the actual floor position below the navigation mesh
            TeleportArea teleportArea = teleportingToMarker as TeleportArea;

            if (teleportArea != null)
            {
                if (floorFixupMaximumTraceDistance > 0.0f)
                {
                    RaycastHit raycastHit;
                    if (Physics.Raycast(teleportPosition + 0.05f * Vector3.down, Vector3.down, out raycastHit, floorFixupMaximumTraceDistance, floorFixupTraceLayerMask))
                    {
                        teleportPosition = raycastHit.point;
                    }
                }
            }

            if (teleportingToMarker.ShouldMovePlayer())
            {
                Vector3 playerFeetOffset = player.trackingOriginTransform.position - player.feetPositionGuess;
                player.trackingOriginTransform.position = teleportPosition + playerFeetOffset;

                if (player.leftHand.currentAttachedObjectInfo.HasValue)
                {
                    player.leftHand.ResetAttachedTransform(player.leftHand.currentAttachedObjectInfo.Value);
                }
                if (player.rightHand.currentAttachedObjectInfo.HasValue)
                {
                    player.rightHand.ResetAttachedTransform(player.rightHand.currentAttachedObjectInfo.Value);
                }
            }
            else
            {
                teleportingToMarker.TeleportPlayer(pointedAtPosition);
            }

            Player.Send(pointedAtTeleportMarker);
        }
예제 #4
0
        //-------------------------------------------------
        private void TeleportPlayer()
        {
            teleporting = false;

            PlayerPre.Send(pointedAtTeleportMarker);

            SteamVR_Fade.Start(Color.clear, currentFadeTime);

            TeleportPoint_NVR teleportPoint    = teleportingToMarker as TeleportPoint_NVR;
            Vector3           teleportPosition = pointedAtPosition;

            if (teleportPoint != null)
            {
                teleportPosition = teleportPoint.transform.position;

                //Teleport to a new scene
                if (teleportPoint.teleportType == TeleportPoint_NVR.TeleportPointType.SwitchToNewScene)
                {
                    teleportPoint.TeleportToScene();
                    return;
                }
            }

            // Find the actual floor position below the navigation mesh
            TeleportArea_NVR teleportArea = teleportingToMarker as TeleportArea_NVR;

            if (teleportArea != null)
            {
                if (floorFixupMaximumTraceDistance > 0.0f)
                {
                    RaycastHit raycastHit;
                    if (Physics.Raycast(teleportPosition + 0.05f * Vector3.down, Vector3.down, out raycastHit, floorFixupMaximumTraceDistance, floorFixupTraceLayerMask))
                    {
                        teleportPosition = raycastHit.point;
                    }
                }
            }

            if (teleportingToMarker.ShouldMovePlayer())
            {
                Vector3 playerFeetOffset = player.transform.position - FeetPositionEstimate();
                player.transform.position = teleportPosition + playerFeetOffset;
            }
            else
            {
                teleportingToMarker.TeleportPlayer(pointedAtPosition);
            }

            Player.Send(pointedAtTeleportMarker);
        }
예제 #5
0
        private static void UpdateForegroundWindow(IntPtr hWnd)
        {
            uint pid = 0;

            if (hWnd != IntPtr.Zero)
            {
                GetWindowThreadProcessId(hWnd, out pid);
            }

            if (pid != ForegroundWindowPid)
            {
                ForegroundWindowPid = pid;
                ForegroundWindowProcessChanged.Send(ForegroundWindowPid);
            }
        }
예제 #6
0
        void SetMode(CockpitMode mode)
        {
            gameNotRunning?.SetActive(mode.HasFlag(CockpitMode.GameNotRunning));
            menuMode?.SetActive(mode.HasFlag(CockpitMode.MenuMode));
            map?.SetActive(mode.HasFlag(CockpitMode.Map));
            stationServices?.SetActive(mode.HasFlag(CockpitMode.StationServices));
            cockpit?.SetActive(mode.HasFlag(CockpitMode.Cockpit));
            shipOnlyCockpit?.SetActive(mode.HasFlag(CockpitMode.Cockpit) && mode.HasFlag(CockpitMode.InShip));
            mainShipOnlyCockpit?.SetActive(mode.HasFlag(CockpitMode.Cockpit) && mode.HasFlag(CockpitMode.InMainShip));
            fighterOnlyCockpit?.SetActive(mode.HasFlag(CockpitMode.Cockpit) && mode.HasFlag(CockpitMode.InFighter));
            srvOnlyCockpit?.SetActive(mode.HasFlag(CockpitMode.Cockpit) && mode.HasFlag(CockpitMode.InSRV));
            fssMode?.SetActive(mode.HasFlag(CockpitMode.FSSMode));
            dssMode?.SetActive(mode.HasFlag(CockpitMode.DSSMode));

            Mode = mode;
            ModeChanged.Send(Mode);
        }
예제 #7
0
        //-------------------------------------------------
        private IEnumerator Start()
        {
            // Uncomment for roomscale testing
            //_instance.initialized = true;
            //_instance.playAreaSizeX = UnityEngine.Random.Range( 1.0f, 4.0f );
            //_instance.playAreaSizeZ = UnityEngine.Random.Range( 1.0f, _instance.playAreaSizeX );
            //_instance.roomscale = true;
            //ChaperoneInfo.Initialized.Send();
            //yield break;

            // Get interface pointer
            var chaperone = OpenVR.Chaperone;

            if (chaperone == null)
            {
                Debug.LogWarning("Failed to get IVRChaperone interface.");
                initialized = true;
                yield break;
            }

            // Get play area size
            while (true)
            {
                float px = 0.0f, pz = 0.0f;
                if (chaperone.GetPlayAreaSize(ref px, ref pz))
                {
                    initialized   = true;
                    playAreaSizeX = px;
                    playAreaSizeZ = pz;
                    roomscale     = Mathf.Max(px, pz) > 1.01f;

                    Debug.LogFormat("ChaperoneInfo initialized. {2} play area {0:0.00}m x {1:0.00}m", px, pz,
                                    roomscale ? "Roomscale" : "Standing");

                    Initialized.Send();

                    yield break;
                }

                yield return(null);
            }
        }
예제 #8
0
        //-------------------------------------------------
        private void InitiateTeleportFade()
        {
            teleporting = true;

            currentFadeTime = teleportFadeTime;

            TeleportPoint teleportPoint = teleportingToMarker as TeleportPoint;

            if (teleportPoint != null && teleportPoint.teleportType == TeleportPoint.TeleportPointType.SwitchToNewScene)
            {
                currentFadeTime *= 3.0f;
                ChangeScene.Send(currentFadeTime);
            }

            SteamVR_Fade.Start(Color.clear, 0);
            SteamVR_Fade.Start(Color.black, currentFadeTime);

            headAudioSource.transform.SetParent(player.hmdTransform);
            headAudioSource.transform.localPosition = Vector3.zero;
            PlayAudioClip(headAudioSource, teleportSound);

            Invoke("TeleportPlayer", currentFadeTime);
        }
예제 #9
0
 void SetStatus(VJoyStatus status)
 {
     vJoyStatus = status;
     VJoyStatusChange.Send(status);
 }