private void FixedUpdate()
    {
        if (!localPlayer.IsPlayerGrounded())//only does anything if in the air.
        {
            float ForwardThrust = Mathf.Max(Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger"), Input.GetKey(KeyCode.F) ? 1 : 0);
            float UpThrust      = Mathf.Max(Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger"), Input.GetKey(KeyCode.Space) ? 1 : 0);

            Vector3 PlayerVel = localPlayer.GetVelocity();

            Quaternion newrot;
            Vector3    NewForwardVec;
            if (InVR)
            {
                newrot        = localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).rotation *Quaternion.Euler(0, 60, 0);
                NewForwardVec = newrot * Vector3.forward;
            }
            else//Desktop
            {
                newrot        = localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).rotation;
                NewForwardVec = newrot * (Vector3.forward);
            }
            //get backwards amount
            float BackThrustAmount = -((Vector3.Dot(PlayerVel, NewForwardVec)) * BackThrustStrength);
            NewForwardVec = NewForwardVec * ThrustStrength * ForwardThrust * Mathf.Max(1, (BackThrustAmount * ForwardThrust));

            Vector3 NewUpVec = ((Vector3.up * ThrustStrength) * UpThrust);

            localPlayer.SetVelocity(PlayerVel + NewForwardVec + NewUpVec);
        }
    }
示例#2
0
    /// <summary>
    /// When the elevator doors are already half closed while closing, this function is called
    /// </summary>
    public void EventHalfClosedOnClosing(int elevatorNumber)
    {
        Debug.Log("[ElevatorController] Received Event HalfClosedOnClosing");
        BoxCollider inDoorCollider;
        GameObject  elevatorObj;
        BoxCollider doorCollider;

        if (elevatorNumber == 0)
        {
            inDoorCollider = _playerInsideDoorElevator1Detector;
            elevatorObj    = _elevator1;
            doorCollider   = _elevator1DoorCollider;
        }
        else if (elevatorNumber == 1)
        {
            inDoorCollider = _playerInsideDoorElevator2Detector;
            elevatorObj    = _elevator2;
            doorCollider   = _elevator2DoorCollider;
        }
        else
        {
            inDoorCollider = _playerInsideDoorElevator3Detector;
            elevatorObj    = _elevator3;
            doorCollider   = _elevator3DoorCollider;
        }
        //Check if player is inside the door and teleport him/her if that is the case
        if (inDoorCollider.bounds.Contains(_localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position))
        {
            _localPlayer.TeleportTo(elevatorObj.transform.position, _localPlayer.GetRotation());
        }
        doorCollider.enabled = true;
    }
    private void LateUpdate()
    {
        float Trigger;

        if (UseLeftTrigger)
        {
            Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger");
        }
        else
        {
            Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger");
        }
        if (Trigger > 0.75)
        {
            Vector3 handpos = VehicleTransform.position - localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position;
            handpos = VehicleTransform.InverseTransformDirection(handpos);

            if (!TriggerLastFrame)
            {
                VTOLZeroPoint = handpos.z;
                VTOLTemp      = EngineControl.VTOLAngle;
            }
            float VTOLAngleDifference = (VTOLZeroPoint - handpos.z) * -ThrottleSensitivity;
            EngineControl.VTOLAngleInput = Mathf.Clamp(VTOLTemp + VTOLAngleDifference, 0, 1);

            TriggerLastFrame = true;
        }
        else
        {
            TriggerLastFrame = false;
        }
    }
示例#4
0
    private void TickDeathProcess()
    {
        currentRespawnTimer = currentRespawnTimer - Time.fixedDeltaTime;

        player.TeleportTo(lastPosition, player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).rotation);

        if (currentRespawnTimer < 0F)
        {
            if (respawnPos != null)
            {
                player.TeleportTo(respawnPos.position, respawnPos.rotation);
                Debug.Log($"CombatSystem: Teleported {player.displayName} to respawn position of {respawnPos.position}.");
            }

            currentRespawnTimer = respawnTimer;

            Debug.Log($"CombatSystem: {player.displayName} is now able to move.");

            float maxHp = float.Parse(player.GetPlayerTag("combat_max_hp"));
            player.SetPlayerTag("combat_hp", $"{maxHp}");

            inDeathProcess = false;
        }

        player.SetPlayerTag("combat_respawn_timer", $"{currentRespawnTimer}");
    }
    private void LateUpdate()
    {
        AwakeTimer     += Time.deltaTime;
        CalibrateTimer += Time.deltaTime;
        if (CalibrateTimer > .3f)    //do it about 3 times a second so we don't send too many broadcasts
        {
            if (localPlayer == null) //find test object relative position for editor testing
            {
                TargetRelative = TargetHeight.InverseTransformPoint(PositionTest.position);
            }
            else//find head relative position ingame
            {
                TargetRelative = TargetHeight.InverseTransformPoint(localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position);
            }

            CalibrateY();
            if (CalibrateFowardBack == true)
            {
                CalibrateZ();
            }
            else
            {
                CalibratedZ = true;
            }

            if (CalibratedY && CalibratedZ)
            {
                gameObject.SetActive(false);
            }
            CalibrateTimer = 0;
        }
    }
示例#6
0
 private void LateUpdate()
 {
     if (followedPlayerApi != null)
     {
         transform.position = followedPlayerApi.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position + Vector3.up * 2f;
     }
 }
示例#7
0
        private void SetToMostPreciseFingerPosition(Transform target, VRCPlayerApi.TrackingDataType trackingDataType, HumanBodyBones bone1, HumanBodyBones bone2, HumanBodyBones bone3)
        {
            Vector3 positionHead = _player.GetBonePosition(bone3);
            Vector3 positionTail = _player.GetBonePosition(bone2);

            if (positionHead != Vector3.zero)
            {
                target.position = positionHead;
                target.rotation = Quaternion.LookRotation(positionHead - positionTail);
                return;
            }
            positionHead = positionTail;
            positionTail = _player.GetBonePosition(bone1);
            if (positionHead != Vector3.zero)
            {
                target.position = positionHead;
                target.rotation = Quaternion.LookRotation(positionHead - positionTail);
                return;
            }
            VRCPlayerApi.TrackingData trackingData = _player.GetTrackingData(trackingDataType);
            positionHead = positionTail;
            positionTail = trackingData.position;
            if (positionHead != Vector3.zero)
            {
                target.position = positionHead;
                target.rotation = Quaternion.LookRotation(positionHead - positionTail);
                return;
            }
            target.position = trackingData.position;
            target.rotation = trackingData.rotation;
        }
示例#8
0
 public void Update()
 {
     if (!editorMode && vrEnabled == localPlayer.IsUserInVR())
     {
         VRCPlayerApi.TrackingData data = localPlayer.GetTrackingData(trackingType);
         transform.SetPositionAndRotation(data.position, data.rotation);
     }
 }
示例#9
0
    private void VrPlayerInputRotationUpdate()
    {
        VRCPlayerApi.TrackingData rightHand = localUser.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand);
        Vector3    wantedForward            = (new Vector3(rightHand.position.x, 0, rightHand.position.z) - new Vector3(transform.position.x, 0, transform.position.z)).normalized;
        Quaternion wantedRotation           = Quaternion.LookRotation(wantedForward, Vector3.up);

        transform.rotation = Quaternion.Lerp(transform.rotation, wantedRotation, RotationMultiplier * Time.deltaTime);
    }
示例#10
0
        private void LateUpdate()
        {
            // PlayerApi data will only be valid in game so we don't run the update if we're in editor
            if (isInEditor)
            {
                return;
            }

            VRCPlayerApi.TrackingData trackingData = playerApi.GetTrackingData(trackingTarget);
            transform.SetPositionAndRotation(trackingData.position, trackingData.rotation);
        }
示例#11
0
    public void Play()
    {
        if (isNotInit)
        {
            return;
        }
        VRCPlayerApi player = Networking.GetOwner(gameObject);

        //Update avatar height
        if (Time.time - lastAvatarHeightUpdate > 10)
        {
            avatarHeight           = GetAvatarHeight(player);
            lastAvatarHeightUpdate = Time.time;
            transform.localScale   = Vector3.one * avatarHeight;
            float pitch = -Mathf.Log(avatarHeight * 0.1f) * 0.4f + 0.2f;
            pitch = Mathf.Clamp(pitch, 0.2f, 3f);
            float volume = avatarHeight * 0.3f + 0.5f;
            volume = Mathf.Clamp(volume, 0.5f, 1f);
            float distance = avatarHeight * 2;
            distance                 = Mathf.Clamp(distance, 1, 10);
            _audioSource.pitch       = pitch;
            _audioSource.maxDistance = distance;
            _audioSource.volume      = volume;
            Debug.Log($"[Clapper] Height: {avatarHeight} => pitch: {pitch} => volume: {volume} => distance: {distance}");
        }
        //Set position
        if (player.IsUserInVR())
        {
            transform.position = Vector3.Lerp(player.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position,
                                              player.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).position, 0.5f);
        }
        else
        {
            transform.position = isHumanoid ? player.GetBonePosition(HumanBodyBones.Chest) :
                                 Vector3.Lerp(player.GetPosition(), player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position, 0.7f);
        }
        transform.rotation = player.GetRotation();
        //Play particle and audio source
        _particleSystem.Emit(1);
        _audioSource.Play();
    }
示例#12
0
        public override void PostLateUpdate()
        {
            //Roation
            transform.rotation = player.GetTrackingData(trackingDataType).rotation;
            transform.Rotate(0, 55, 0);
            //Position
            Vector3 handPosition = player.GetBonePosition(finger);

            if (handPosition == Vector3.zero)
            {
                handPosition = player.GetBonePosition(hand);
            }
            if (handPosition == Vector3.zero)
            {
                handPosition = player.GetTrackingData(trackingDataType).position;
            }
            //Velcoity
            _velocity = (transform.position - handPosition) / Time.deltaTime;
            //Set position
            transform.position = handPosition;
        }
    private void Update()
    {
        if (follow)
        {
            if (!Utilities.IsValid(owner) || !owner.IsOwner(gameObject))
            {
                owner = Networking.GetOwner(gameObject);
            }

            sign.SetPositionAndRotation(owner.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position + new Vector3(0, offset, 0), owner.GetRotation());
        }
    }
示例#14
0
    public void Move2Forward()
    {
        var dv           = velocity - lastVelocity;
        var trackingData = p.GetTrackingData(trackingTarget);

        if (trackingData.Equals(null))
        {
            return;
        }
        var h2v = trackingData.rotation * Quaternion.Inverse(p.GetRotation()); // horizon to view

        dv = h2v * dv;
        //dv = ((p.GetWalkSpeed() - 0.1f) * Mathf.Max(drag, 1) * Time.deltaTime) * dv.normalized; // cancel drag effect
        velocity = lastVelocity + dv;
    }
示例#15
0
        private void Update()
        {
            if (!active)
            {
                return;
            }
            if (target == null)
            {
                return;
            }
            var tData = target.GetTrackingData(source);
            var tPos  = tData.position;
            var tRot  = tData.rotation;

            transform.SetPositionAndRotation(tPos, tRot);
        }
示例#16
0
        private void FixedUpdate()
        {
            if (isEditor || isDesktop)
            {
                return;
            }
            var tData = player.GetTrackingData(source);

            if (trackPosition)
            {
                var tPos = tData.position;
                rb.velocity *= 0.65f;
                var posDelta = tPos - rb.worldCenterOfMass;
                var velocity = posDelta / Time.fixedDeltaTime;
                if (!float.IsNaN(velocity.x))
                {
                    rb.velocity += velocity;
                }
            }

            if (trackRotation)
            {
                var tRot = tData.rotation;
                rb.angularVelocity *= 0.65f;
                var     rotationDelta = tRot * Quaternion.Inverse(rb.rotation);
                float   angleInDegrees;
                Vector3 rotationAxis;
                rotationDelta.ToAngleAxis(out angleInDegrees, out rotationAxis);
                if (angleInDegrees > 180)
                {
                    angleInDegrees -= 360;
                }

                if (Mathf.Abs(angleInDegrees) > Mathf.Epsilon)
                {
                    var angularVelocity = rotationAxis * (angleInDegrees * Mathf.Deg2Rad) / Time.fixedDeltaTime;
                    if (!float.IsNaN(angularVelocity.x))
                    {
                        rb.angularVelocity += angularVelocity * rb.angularDrag;
                    }
                }
            }
        }
示例#17
0
    // 視線追従
    private void OnAnimatorIK(int layerIndex)
    {
        if (!targetik)
        {
            return;
        }
        Vector3 lookpos    = Vector3.zero;
        float   ikbody_new = ikbody;
        float   ikhead_new = ikhead;

        if (selected > 0 && state >= 2 && state <= 3) // 拾いに行くまで
        {
            // ボールを見る
            if (_tgroot.transform.GetChild(selected - 1) != null && agent.remainingDistance < 3.0f)  //目標がセットされ距離が3m以内
            {
                lookpos = _tgroot.transform.GetChild(selected - 1).transform.position;
            }
        }
        if (selected > 0 && state >= 6 && state <= 8) // 渡すとき、なでなで、終了
        {
            // ボールを投げた人(Owner)の頭を見る
            GameObject   ball  = _tgroot.transform.GetChild(selected - 1).gameObject;
            VRCPlayerApi owner = Networking.GetOwner(ball);
            if (owner != null)
            {
                lookpos = owner.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position; // オーナーの頭位置
            }
            ikbody_new = 0.1f;                                                                // 体は曲げない
            if (state == 8)                                                                   // 終了時(なでなで有効時間内)
            {
                ikbody_new = 0f;
                ikhead_new = 0f;
            }
        }
        if (lookpos != Vector3.zero)
        {
            //animator.SetLookAtWeight(ikall, ikbody_new, ikhead, ikeye, ikmotion); // 全体,体,頭,目,モーション
            animator.SetLookAtWeight(Soft(ikall, 0), Soft(ikbody_new, 1), Soft(ikhead_new, 2), Soft(ikeye, 3), Soft(ikmotion, 4));
            animator.SetLookAtPosition(lookpos);
        }
    }
示例#18
0
    public float GetAvatarHeight(VRCPlayerApi player)
    {
        float   height     = 0;
        Vector3 postition1 = player.GetBonePosition(HumanBodyBones.Head);
        Vector3 postition2 = player.GetBonePosition(HumanBodyBones.Neck);

        height    += Vector3.Distance(postition1, postition2);
        postition1 = player.GetBonePosition(HumanBodyBones.Hips);
        height    += Vector3.Distance(postition1, postition2);
        isHumanoid = height > 0;
        if (!isHumanoid)
        {
            return(Vector3.Distance(player.GetPosition(), player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position) * 1.15f);             //For non humanoids
        }
        postition2 = player.GetBonePosition(HumanBodyBones.RightLowerLeg);
        height    += Vector3.Distance(postition1, postition2);
        postition1 = player.GetBonePosition(HumanBodyBones.RightFoot);
        height    += Vector3.Distance(postition1, postition2);
        height    *= 1.15f; // Adjusting for head
        return(height);
    }
    private void Update()
    {
        if (func_active)
        {
            float DeltaTime = Time.deltaTime;
            TriggerTapTime += DeltaTime;
            AGMUnlockTimer += DeltaTime * AGMUnlocking;//AGMUnlocking is 1 if it was locked and just pressed, else 0, (waits for double tap delay to disable)
            float Trigger;
            if (UseLeftTrigger)
            {
                Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger");
            }
            else
            {
                Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger");
            }
            if (AGMUnlockTimer > 0.4f && AGMLocked == true)
            {
                AGMLocked      = false;
                AGMUnlockTimer = 0;
                AGMUnlocking   = 0;
                if (!Dial_FunconNULL)
                {
                    Dial_Funcon.SetActive(false);
                }
                if (!AGMUnlockNull)
                {
                    AGMUnlock.Play();
                }
            }
            if (Trigger > 0.75 || (Input.GetKey(KeyCode.Space)))
            {
                if (!TriggerLastFrame)
                {         //new button press
                    if (TriggerTapTime < 0.4f)
                    {     //double tap detected
                        if (AGMLocked)
                        { //locked on, launch missile
                            if (NumAGM > 0 && !EngineControl.Taxiing)
                            {
                                SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "LaunchAGM");
                                if (EngineControl.IsOwner)
                                {
                                    EngineControl.SendEventToExtensions("SFEXT_O_AGMLaunch", false);
                                }
                            }
                            AGMUnlocking = 0;
                        }
                    }
                    else if (!AGMLocked)
                    {//lock onto a target
                        if (AtGCam != null)
                        {
                            //check for agmtargets to lcok to
                            float        targetangle = 999;
                            RaycastHit   lockpoint;
                            RaycastHit[] agmtargs = Physics.SphereCastAll(AtGCam.transform.position, 150, AtGCam.transform.forward, Mathf.Infinity, AGMTargetsLayer);
                            if (agmtargs.Length > 0)
                            {//found one or more, find lowest angle one
                                //find target with lowest angle from crosshair
                                foreach (RaycastHit target in agmtargs)
                                {
                                    Vector3 targetdirection = target.point - AtGCam.transform.position;
                                    float   angle           = Vector3.Angle(AtGCam.transform.forward, targetdirection);
                                    if (angle < targetangle)
                                    {
                                        targetangle  = angle;
                                        AGMTarget    = target.collider.transform.position;
                                        AGMLocked    = true;
                                        AGMUnlocking = 0;
                                        RequestSerialization();
                                        if (!Dial_FunconNULL)
                                        {
                                            Dial_Funcon.SetActive(false);
                                        }
                                    }
                                }
                            }
                            else
                            {//didn't find one, lock onto raycast point
                                Physics.Raycast(AtGCam.transform.position, AtGCam.transform.forward, out lockpoint, Mathf.Infinity, 133121 /* Default, Environment, and Walkthrough */, QueryTriggerInteraction.Ignore);
                                if (lockpoint.point != null)
                                {
                                    if (!AGMUnlockNull)
                                    {
                                        AGMLock.Play();
                                    }
                                    AGMTarget    = lockpoint.point;
                                    AGMLocked    = true;
                                    AGMUnlocking = 0;
                                    RequestSerialization();
                                    if (!Dial_FunconNULL)
                                    {
                                        Dial_Funcon.SetActive(false);
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        TriggerTapTime = 0;
                        AGMUnlockTimer = 0;
                        AGMUnlocking   = 1;
                    }
                }
                TriggerLastFrame = true;
            }
            else
            {
                TriggerLastFrame = false;
            }
            //AGM Camera, more in hudcontroller
            if (!AGMLocked)
            {
                Quaternion newangle;
                if (InVR)
                {
                    newangle = localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).rotation *Quaternion.Euler(0, 60, 0);
                }
                else if (!InEditor)//desktop mode
                {
                    newangle = localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).rotation;
                }
                else//editor
                {
                    newangle = VehicleTransform.rotation;
                }
                float ZoomLevel = AtGCam.fieldOfView / 90;
                AGMCamRotSlerper = Quaternion.Slerp(AGMCamRotSlerper, newangle, ZoomLevel * 220f * DeltaTime);

                if (AtGCam != null)
                {
                    AGMRotDif = Vector3.Angle(AtGCam.transform.rotation * Vector3.forward, AGMCamLastFrame * Vector3.forward);
                    // AGMRotDif = Vector3.Angle(AtGCam.transform.rotation * Vector3.forward, AGMCamRotSlerper * Vector3.forward);
                    AtGCam.transform.rotation = AGMCamRotSlerper;

                    Vector3 temp2 = AtGCam.transform.localRotation.eulerAngles;
                    temp2.z = 0;
                    AtGCam.transform.localRotation = Quaternion.Euler(temp2);
                }
                AGMCamLastFrame = newangle;
            }


            //AGMScreen
            float SmoothDeltaTime = Time.smoothDeltaTime;
            if (!AGMLocked)
            {
                AtGScreen.SetActive(true);
                AtGCam.gameObject.SetActive(true);
                //if turning camera fast, zoom out
                if (AGMRotDif < 2.5f)
                {
                    RaycastHit camhit;
                    Physics.Raycast(AtGCam.transform.position, AtGCam.transform.forward, out camhit, Mathf.Infinity, 1);
                    if (camhit.point != null)
                    {
                        //dolly zoom //Mathf.Atan(100 <--the 100 is the height of the camera frustrum at the target distance
                        float newzoom = Mathf.Clamp(2.0f * Mathf.Atan(100 * 0.5f / Vector3.Distance(gameObject.transform.position, camhit.point)) * Mathf.Rad2Deg, 1.5f, 90);
                        AtGCam.fieldOfView = Mathf.Clamp(Mathf.Lerp(AtGCam.fieldOfView, newzoom, 1.5f * SmoothDeltaTime), 0.3f, 90);
                    }
                }
                else
                {
                    float newzoom = 80;
                    AtGCam.fieldOfView = Mathf.Clamp(Mathf.Lerp(AtGCam.fieldOfView, newzoom, 3.5f * SmoothDeltaTime), 0.3f, 90); //zooming in is a bit slower than zooming out
                }
            }
            else
            {
                AtGScreen.SetActive(true);
                AtGCam.gameObject.SetActive(true);
                AtGCam.transform.LookAt(AGMTarget, EngineControl.VehicleMainObj.transform.up);

                RaycastHit camhit;
                Physics.Raycast(AtGCam.transform.position, AtGCam.transform.forward, out camhit, Mathf.Infinity, 1);
                if (camhit.point != null)
                {
                    //dolly zoom //Mathf.Atan(40 <--the 40 is the height of the camera frustrum at the target distance
                    AtGCam.fieldOfView = Mathf.Max(Mathf.Lerp(AtGCam.fieldOfView, 2.0f * Mathf.Atan(60 * 0.5f / Vector3.Distance(gameObject.transform.position, camhit.point)) * Mathf.Rad2Deg, 5 * SmoothDeltaTime), 0.3f);
                }
            }
        }
    }
示例#20
0
    public void UpdateTrackValue()
    {
        if (trackType == 1)
        {
            VRCPlayerApi player = null;
            switch (targetPlayer)
            {
            case 0:
                player = Networking.LocalPlayer;
                break;

            case 1:
                player = Networking.GetOwner(gameObject);
                break;

            case 2:
                if (targetTrigger)
                {
                    var playerField = (VRCPlayerApi)targetTrigger.GetProgramVariable("triggeredPlayer");
                    player = playerField;
                }
                break;

            case 3:
                VRCPlayerApi[] players = new VRCPlayerApi[VRCPlayerApi.GetPlayerCount()];;
                VRCPlayerApi.GetPlayers(players);
                if (index < players.Length)
                {
                    player = players[index];
                }
                else
                {
                    player = Networking.LocalPlayer;
                }
                break;
            }
            if (player == null || !player.IsValid())
            {
                return;
            }

            switch (spot)
            {
            case "IsUserInVR":
                value_b = player.IsUserInVR();
                break;

            case "IsPlayerGrounded":
                value_b = player.IsPlayerGrounded();
                break;

            case "IsMaster":
                value_b = player.isMaster;
                break;

            case "IsInstanceOwner":
                value_b = player.isInstanceOwner;
                break;

            case "IsGameObjectOwner":
                value_b = player.IsOwner(gameObject);
                break;

            case "Position":
                value_v3 = player.GetPosition();
                if (positionTracking)
                {
                    transform.position = player.GetPosition();
                    transform.rotation = player.GetRotation();
                }
                break;

            case "Rotation":
                value_v3 = player.GetRotation().eulerAngles;
                break;

            case "HeadPosition":
                value_v3 = player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position;
                if (positionTracking)
                {
                    transform.position = player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position;
                    transform.rotation = player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).rotation;
                }
                break;

            case "HeadRotation":
                value_v3 = player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).rotation.eulerAngles;
                break;

            case "RightHandPosition":
                value_v3 = player.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).position;
                if (positionTracking)
                {
                    transform.position = player.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).position;
                    transform.rotation = player.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).rotation;
                }
                break;

            case "RightHandRotation":
                value_v3 = player.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).rotation.eulerAngles;
                break;

            case "LeftHandPosition":
                value_v3 = player.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position;
                if (positionTracking)
                {
                    transform.position = player.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position;
                    transform.rotation = player.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).rotation;
                }
                break;

            case "LeftHandRotation":
                value_v3 = player.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).rotation.eulerAngles;
                break;

            case "Velocity":
                value_v3 = player.GetVelocity();
                break;

            case "DisplayName":
                value_s = player.displayName;
                break;
            }
        }

        if (trackType == 2)
        {
            if (!targetObject)
            {
                return;
            }

            switch (spot)
            {
            case "IsActive":
                value_b = targetObject.activeSelf;
                break;

            case "Position":
                value_v3 = targetObject.transform.position;
                if (positionTracking)
                {
                    transform.position = targetObject.transform.position;
                    transform.rotation = targetObject.transform.rotation;
                }
                break;

            case "Rotation":
                value_v3 = targetObject.transform.rotation.eulerAngles;
                break;

            case "LocalPosition":
                value_v3 = targetObject.transform.localPosition;
                if (positionTracking)
                {
                    transform.position = targetObject.transform.position;
                    transform.rotation = targetObject.transform.rotation;
                }
                break;

            case "LocalRotation":
                value_v3 = targetObject.transform.localRotation.eulerAngles;
                break;

            case "Velocity":
                value_v3 = targetObject.GetComponent <Rigidbody>().velocity;
                break;

            case "AngularVelocity":
                value_v3 = targetObject.GetComponent <Rigidbody>().angularVelocity;
                break;
            }
        }

        if (trackType == 3)
        {
            switch (spot)
            {
            case "PlayerCount":
                value_i = VRCPlayerApi.GetPlayerCount();
                value_f = value_i;
                break;

            case "Year":
                value_i = System.DateTime.Now.Year;
                value_f = value_i;
                break;

            case "Month":
                value_i = System.DateTime.Now.Month;
                value_f = value_i;
                break;

            case "Day":
                value_i = System.DateTime.Now.Day;
                value_f = value_i;
                break;

            case "DayOfWeek":
                value_i = (int)System.DateTime.Now.DayOfWeek;
                value_f = value_i;
                break;

            case "Hour":
                value_i = System.DateTime.Now.Hour;
                value_f = value_i;
                break;

            case "Minute":
                value_i = System.DateTime.Now.Minute;
                value_f = value_i;
                break;

            case "Second":
                value_i = System.DateTime.Now.Second;
                value_f = value_i;
                break;

            case "JoinHours":
                value_f = (float)(System.DateTime.Now - startTime).TotalHours;
                value_i = (int)value_f;
                break;

            case "JoinMinutes":
                value_f = (float)(System.DateTime.Now - startTime).TotalMinutes;
                value_i = (int)value_f;
                break;

            case "JoinSeconds":
                value_f = (float)(System.DateTime.Now - startTime).TotalSeconds;
                value_i = (int)value_f;
                break;
            }
        }

        if (trackType == 4)
        {
            if (targetComponent)
            {
                if (valueType == 0)
                {
                    if (spot == "Toggle")
                    {
                        var toggle = (Toggle)targetComponent;
                        value_b = toggle.isOn;
                    }
                }
                if (valueType == 1)
                {
                    if (spot == "Text")
                    {
                        var text = (Text)targetComponent;
                        int.TryParse(text.text, out value_i);
                    }
                    if (spot == "InputField")
                    {
                        var inputField = (InputField)targetComponent;
                        int.TryParse(inputField.text, out value_i);
                    }
                }
                if (valueType == 2)
                {
                    if (spot == "Slider")
                    {
                        var slider = (Slider)targetComponent;
                        value_f = slider.value;
                    }
                    if (spot == "Scrollbar")
                    {
                        var scrollbar = (Scrollbar)targetComponent;
                        value_f = scrollbar.value;
                    }
                    if (spot == "Text")
                    {
                        var text = (Text)targetComponent;
                        float.TryParse(text.text, out value_f);
                    }
                    if (spot == "InputField")
                    {
                        var inputField = (InputField)targetComponent;
                        float.TryParse(inputField.text, out value_f);
                    }
                }
                if (valueType == 4)
                {
                    if (spot == "Text")
                    {
                        var text = (Text)targetComponent;
                        value_s = text.text;
                    }
                    if (spot == "InputField")
                    {
                        var inputField = (InputField)targetComponent;
                        value_s = inputField.text;
                    }
                }
            }
        }

        if (trackType == 5)
        {
            if (targetComponent != null && spot != "")
            {
                Animator animator = (Animator)targetComponent;
                if (valueType == 0)
                {
                    value_b = animator.GetBool(spot);
                }
                if (valueType == 1)
                {
                    value_i = animator.GetInteger(spot);
                }
                if (valueType == 2)
                {
                    value_f = animator.GetFloat(spot);
                }
            }
        }

        if (trackType == 6)
        {
            switch (spot)
            {
            case "RightIndexTrigger":
                value_f = Input.GetAxis("Oculus_CrossPlatform_SecondaryIndexTrigger");
                break;

            case "LeftIndexTrigger":
                value_f = Input.GetAxis("Oculus_CrossPlatform_PrimaryIndexTrigger");
                break;

            case "RightGrip":
                value_f = Input.GetAxis("Oculus_CrossPlatform_SecondaryHandTrigger");
                break;

            case "LeftGrip":
                value_f = Input.GetAxis("Oculus_CrossPlatform_PrimaryHandTrigger");
                break;
            }
        }

        UpdateSubValue();
    }
示例#21
0
 private void Update()
 {
     trackingData = _player.GetTrackingData(headType);
     transform.SetPositionAndRotation(trackingData.position, trackingData.rotation);
 }
示例#22
0
    void Update()
    {
        // Put cue in hand
   #if !HT_QUEST
        if (dkPrimaryControlLock)
        {
            dkPrimaryControlLock = false;
            return;
        }

        if (dkPrimaryControl)
        {
            if (useDesktop && bHolding)
            {
                this.transform.position = Networking.LocalPlayer.GetBonePosition(HumanBodyBones.RightHand);

                // Temporary target
                objTarget.transform.position = this.transform.position + Vector3.up;

                Vector3 playerpos = gameController.gameObject.transform.InverseTransformPoint(Networking.LocalPlayer.GetPosition());

                // Check turn entry
                if ((Mathf.Abs(playerpos.x) < 2.0f) && (Mathf.Abs(playerpos.z) < 1.5f))
                {
                    VRCPlayerApi.TrackingData hmd = localplayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head);
                    ui_pressE.SetActive(true);
                    ui_pressE.transform.position = hmd.position + hmd.rotation * Vector3.forward;
                    if (Input.GetKeyDown(KeyCode.E))
                    {
                        dkPrimaryControl = false;
                        gameController._ht_desktop_enter();
                    }
                }
                else
                {
                    ui_pressE.SetActive(false);
                }
            }
   #endif
        lag_objBase = Vector3.Lerp(lag_objBase, this.transform.position, Time.deltaTime * 16.0f);

        if (!bOtherLock)
        {
            lag_objTarget = Vector3.Lerp(lag_objTarget, objTarget.transform.position, Time.deltaTime * 16.0f);
        }

        if (bArmed)
        {
            vSnOff = lag_objBase - vBase;
            vSnDet = Vector3.Dot(vSnOff, vLineNorm);
            objCue.transform.position = vBase + vLineNorm * vSnDet;
        }
        else
        {
            // put cue at base position
            objCue.transform.position = lag_objBase;
            objCue.transform.LookAt(lag_objTarget);
        }

   #if !HT_QUEST
    }
   #endif

        if (bHolding)
        {
            // Clamp controllers to play boundaries while we have hold of them
            Vector3 temp = this.transform.localPosition;
            temp.x = Mathf.Clamp(temp.x, -4.0f, 4.0f);
            temp.y = Mathf.Clamp(temp.y, -0.8f, 1.5f);
            temp.z = Mathf.Clamp(temp.z, -3.25f, 3.25f);
            this.transform.localPosition = temp;
            temp   = objTarget.transform.localPosition;
            temp.x = Mathf.Clamp(temp.x, -4.0f, 4.0f);
            temp.y = Mathf.Clamp(temp.y, -0.8f, 1.5f);
            temp.z = Mathf.Clamp(temp.z, -3.25f, 3.25f);
            objTarget.transform.localPosition = temp;
        }
    }
示例#23
0
    void Update()
    {
        float DeltaTime = Time.deltaTime;

        if (!InEditor)
        {
            IsOwner = localPlayer.IsOwner(VehicleMainObj);
        }
        else
        {
            IsOwner = true;
        }
        if (IsOwner)
        {
            if (Health <= 0)
            {
                if (InEditor)
                {
                    Explode();
                }
                else
                {
                    SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "Explode");
                }
            }
            if (Manning)
            {
                //get inputs
                int Wf = Input.GetKey(KeyCode.W) ? 1 : 0; //inputs as ints
                int Sf = Input.GetKey(KeyCode.S) ? -1 : 0;
                int Af = Input.GetKey(KeyCode.A) ? -1 : 0;
                int Df = Input.GetKey(KeyCode.D) ? 1 : 0;

                float RGrip    = 0;
                float RTrigger = 0;
                float LTrigger = 0;
                if (!InEditor)
                {
                    RTrigger = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger");
                    LTrigger = Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger");
                    RGrip    = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryHandTrigger");
                }
                Vector3 JoystickPosYaw;
                Vector3 JoystickPos;

                //virtual joystick
                if (InVR)
                {
                    if (RGrip > 0.75)
                    {
                        Quaternion RotDif = Rotator.transform.rotation * Quaternion.Inverse(AAGunRotLastFrame); //difference in vehicle's rotation since last frame
                        JoystickZeroPoint = RotDif * JoystickZeroPoint;                                         //zero point rotates with the plane so it appears still to the pilot
                        if (!RGripLastFrame)                                                                    //first frame you gripped joystick
                        {
                            RotDif            = Quaternion.identity;
                            JoystickZeroPoint = localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).rotation;//rotation of the controller relative to the plane when it was pressed
                        }
                        //difference between the plane and the hand's rotation, and then the difference between that and the JoystickZeroPoint
                        Quaternion JoystickDifference = (Quaternion.Inverse(Rotator.transform.rotation) * localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).rotation) * Quaternion.Inverse(JoystickZeroPoint);
                        JoystickPosYaw   = (JoystickDifference * Rotator.transform.forward);//angles to vector
                        JoystickPosYaw.y = 0;
                        JoystickPos      = (JoystickDifference * Rotator.transform.up);
                        JoystickPos.y    = 0;
                        VRPitchYawInput  = new Vector2(JoystickPos.z, JoystickPosYaw.x) * 1.41421f;

                        RGripLastFrame = true;
                    }
                    else
                    {
                        JoystickPosYaw.x = 0;
                        VRPitchYawInput  = Vector3.zero;
                        RGripLastFrame   = false;
                    }
                    AAGunRotLastFrame = Rotator.transform.rotation;
                }
                int InX = (Wf + Sf);
                int InY = (Af + Df);
                if (InX > 0 && InputXKeyb < 0 || InX < 0 && InputXKeyb > 0)
                {
                    InputXKeyb = 0;
                }
                if (InY > 0 && InputYKeyb < 0 || InY < 0 && InputYKeyb > 0)
                {
                    InputYKeyb = 0;
                }
                InputXKeyb = Mathf.Lerp((InputXKeyb), InX, Mathf.Abs(InX) > 0 ? TurningResponseDesktop * DeltaTime : 1);
                InputYKeyb = Mathf.Lerp((InputYKeyb), InY, Mathf.Abs(InY) > 0 ? TurningResponseDesktop * DeltaTime : 1);

                float InputX = Mathf.Clamp((VRPitchYawInput.x + InputXKeyb), -1, 1);
                float InputY = Mathf.Clamp((VRPitchYawInput.y + InputYKeyb), -1, 1);
                //joystick model movement
                if (!JoyStickNull)
                {
                    JoyStick.localRotation = Quaternion.Euler(new Vector3(InputX * 25f, InputY * 25f, 0));
                }
                InputX *= TurnSpeedMulti;
                InputY *= TurnSpeedMulti;

                RotationSpeedX += -(RotationSpeedX * TurnFriction * DeltaTime) + InputX * DeltaTime;
                RotationSpeedY += -(RotationSpeedY * TurnFriction * DeltaTime) + InputY * DeltaTime;

                //rotate turret
                float temprot = Rotator.transform.localRotation.eulerAngles.x;
                temprot += RotationSpeedX;
                if (temprot > 180)
                {
                    temprot -= 360;
                }
                if (temprot > DownAngleMax || temprot < -UpAngleMax)
                {
                    RotationSpeedX = 0;
                }
                temprot = Mathf.Clamp(temprot, -UpAngleMax, DownAngleMax);//limit angles
                Rotator.transform.localRotation = Quaternion.Euler(new Vector3(temprot, Rotator.transform.localRotation.eulerAngles.y + (RotationSpeedY), 0));

                //Firing the gun
                if ((RTrigger >= 0.75 || Input.GetKey(KeyCode.Space)) && MGAmmoSeconds > 0)
                {
                    firing         = true;
                    MGAmmoSeconds -= DeltaTime;
                    MGAmmoRecharge = MGAmmoSeconds - MGReloadDelay;
                }
                else//recharge the ammo
                {
                    firing         = false;
                    MGAmmoRecharge = Mathf.Min(MGAmmoRecharge + (DeltaTime * MGReloadSpeed), MGAmmoFull);
                    MGAmmoSeconds  = Mathf.Max(MGAmmoRecharge, MGAmmoSeconds);
                }

                if (DoAAMTargeting)
                {
                    if (AAMLockTimer > AAMLockTime && AAMHasTarget)
                    {
                        AAMLocked = true;
                    }
                    else
                    {
                        AAMLocked = false;
                    }
                    //firing AAM
                    if (LTrigger > 0.75 || (Input.GetKey(KeyCode.C)))
                    {
                        if (!LTriggerLastFrame)
                        {
                            if (AAMLocked && Time.time - AAMLastFiredTime > AAMLaunchDelay)
                            {
                                AAMLastFiredTime = Time.time;
                                if (InEditor)
                                {
                                    LaunchAAM();
                                }
                                else
                                {
                                    SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "LaunchAAM");
                                }
                                if (NumAAM == 0)
                                {
                                    AAMLockTimer = 0; AAMLocked = false;
                                }
                            }
                        }
                        LTriggerLastFrame = true;
                    }
                    else
                    {
                        LTriggerLastFrame = false;
                    }
                }

                //reloading AAMs
                if (NumAAM == FullAAMs)
                {
                    AAMReloadTimer = 0;
                }
                else
                {
                    AAMReloadTimer += DeltaTime;
                }
                if (AAMReloadTimer > MissileReloadTime)
                {
                    if (InEditor)
                    {
                        ReloadAAM();
                    }
                    else
                    {
                        SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "ReloadAAM");
                    }
                }
                //HP Repair
                if (Health == FullHealth)
                {
                    HPRepairTimer = 0;
                }
                else
                {
                    HPRepairTimer += DeltaTime;
                }
                if (HPRepairTimer > HPRepairDelay)
                {
                    if (InEditor)
                    {
                        HPRepair();
                    }
                    else
                    {
                        SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "HPRepair");
                    }
                }
            }
        }
        if (firing)
        {
            AAGunAnimator.SetBool("firing", true);
        }
        else
        {
            AAGunAnimator.SetBool("firing", false);
        }
        //Sounds
        if (AAMLockTimer > 0 && !AAMLocked && NumAAM > 0)
        {
            AAMLocking.gameObject.SetActive(true);
            AAMLockedOn.gameObject.SetActive(false);
        }
        else if (AAMLocked)
        {
            AAMLocking.gameObject.SetActive(false);
            AAMLockedOn.gameObject.SetActive(true);
        }
        else
        {
            AAMLocking.gameObject.SetActive(false);
            AAMLockedOn.gameObject.SetActive(false);
        }
    }
    private void Update()
    {
        float Trigger;

        if (UseLeftTrigger)
        {
            Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger");
        }
        else
        {
            Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger");
        }

        if (Trigger > 0.75)
        {
            if (!LTriggerLastFrame && EngineControl.Speed < 20)
            {
                if (EngineControl.CanopyCloseTimer <= -100000 - EngineControl.CanopyCloseTime)
                {
                    if (!Dial_FunconNULL)
                    {
                        Dial_Funcon.SetActive(false);
                    }
                }
                else if (EngineControl.CanopyCloseTimer < 0 && EngineControl.CanopyCloseTimer > -100000)
                {
                    if (!Dial_FunconNULL)
                    {
                        Dial_Funcon.SetActive(true);
                    }
                }
                EngineControl.ToggleCanopy();
            }

            //ejection
            if (EngineControl.InVR)
            {
                Vector3 handposL = VehicleTransform.position - localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position;
                handposL = VehicleTransform.InverseTransformDirection(handposL);
                Vector3 handposR = VehicleTransform.position - localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position;
                handposR = VehicleTransform.InverseTransformDirection(handposR);

                if (!LTriggerLastFrame && (handposL.y - handposR.y) < 0.20f)
                {
                    EjectZeroPoint = handposL.y;
                    EjectTimer     = 0;
                }
                if (EjectZeroPoint - handposL.y > .5f && EjectTimer < 1)
                {
                    Ejected = true;
                    HUDControl.ExitStation();
                    SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "CanopyOpening");
                }
            }

            EjectTimer       += Time.deltaTime;
            LTriggerLastFrame = true;
        }
        else
        {
            LTriggerLastFrame = false;
            EjectTimer        = 2;
        }
    }
示例#25
0
        private void LateUpdate()
        {
            Vector3    targetPos;
            Quaternion targetRot;

            // we're tracking bones in regular Update, otherwise it doesnt sync with IK
            if (trackBone)
            {
                return;
            }

            if (trackPlayerBase)
            {
                targetPos = player.GetPosition();
                targetRot = player.GetRotation();
            }
            else if (trackPlayspace)
            {
                var vertical   = Input.GetAxisRaw("Vertical");
                var horizontal = Input.GetAxisRaw("Horizontal");
                var rotation   = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryThumbstickHorizontal");
                targetPos = player.GetPosition();
                targetRot = player.GetRotation();
                offsetRot = oldRot - targetRot.eulerAngles.y;
                oldRot    = targetRot.eulerAngles.y;
                if (vertical > 0 || vertical < 0 || horizontal > 0 || horizontal < 0)
                {
                    targetPos += offsetPos;
                    targetTransform.position = targetPos;
                    if (rotation > 0 || rotation < 0)
                    {
                        targetTransform.RotateAround(player.GetPosition(), Vector3.up, -offsetRot);
                    }

                    return;
                }

                if (rotation > 0 || rotation < 0)
                {
                    targetTransform.RotateAround(player.GetPosition(), Vector3.up, -offsetRot);
                }

                offsetPos = targetTransform.position - targetPos;
                return;
            }
            else
            {
                trackingData = player.GetTrackingData(trackingTarget);
                targetPos    = trackingData.position;
                targetRot    = trackingData.rotation;
            }

            if (trackPosition && trackRotation)
            {
                targetTransform.SetPositionAndRotation(targetPos, targetRot);
            }
            else if (trackPosition)
            {
                targetTransform.position = targetPos;
            }
            else
            {
                targetTransform.rotation = targetRot;
            }

            if (correctForControllers && !trackPlayspace && !trackPlayerBase)
            {
                // Thx to Phasedragon for testing and finding out the exact formula
                targetTransform.rotation = targetRot * Quaternion.Euler(-41, 0, 0);
            }

            if (rotateBy.magnitude > 0)
            {
                targetTransform.Rotate(rotateBy);
            }
        }
示例#26
0
 public void gettracking(Transform visobj, VRCPlayerApi.TrackingDataType trackpoint, VRCPlayerApi PlayerApiref)
 {
     visobj.position = PlayerApiref.GetTrackingData(trackpoint).position;
     visobj.rotation = PlayerApiref.GetTrackingData(trackpoint).rotation;
 }
示例#27
0
    private void LateUpdate()
    {
        if (InPlane)
        {
            if (Pilot)
            {
                float DeltaTime = Time.deltaTime;
                float Trigger;
                if (UseLeftTrigger)
                {
                    Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger");
                }
                else
                {
                    Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger");
                }
                if (Trigger > 0.75)
                {
                    //you can change smoke colour by holding down the trigger and waving your hand around. x/y/z = r/g/b
                    Vector3 HandPosSmoke = VehicleTransform.position - localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).position;
                    HandPosSmoke = VehicleTransform.InverseTransformDirection(HandPosSmoke);
                    Vector3 smokcol      = SmokeColor;
                    Vector3 TempSmokeCol = Vector3.zero;
                    if (!TriggerLastFrame)
                    {
                        SmokeZeroPoint = HandPosSmoke;
                        TempSmokeCol   = smokcol;

                        ToggleSmoking();
                        SmokeHoldTime = 0;
                    }
                    SmokeHoldTime += Time.deltaTime;
                    if (SmokeHoldTime > .4f)
                    {
                        //VR Set Smoke

                        Vector3 SmokeDifference = (SmokeZeroPoint - HandPosSmoke) * -EngineControl.ThrottleSensitivity;
                        smokcol.x = Mathf.Clamp(TempSmokeCol.x + SmokeDifference.x, 0, 1);
                        smokcol.y = Mathf.Clamp(TempSmokeCol.y + SmokeDifference.y, 0, 1);
                        smokcol.z = Mathf.Clamp(TempSmokeCol.z + SmokeDifference.z, 0, 1);
                    }
                    TriggerLastFrame = true;
                }
                else
                {
                    TriggerLastFrame = false;
                }

                if (Smoking)
                {
                    int keypad7 = Input.GetKey(KeyCode.Keypad7) ? 1 : 0;
                    int Keypad4 = Input.GetKey(KeyCode.Keypad4) ? 1 : 0;
                    int Keypad8 = Input.GetKey(KeyCode.Keypad8) ? 1 : 0;
                    int Keypad5 = Input.GetKey(KeyCode.Keypad5) ? 1 : 0;
                    int Keypad9 = Input.GetKey(KeyCode.Keypad9) ? 1 : 0;
                    int Keypad6 = Input.GetKey(KeyCode.Keypad6) ? 1 : 0;
                    SmokeColor.x = Mathf.Clamp(SmokeColor.x + ((keypad7 - Keypad4) * DeltaTime), 0, 1);
                    SmokeColor.y = Mathf.Clamp(SmokeColor.y + ((Keypad8 - Keypad5) * DeltaTime), 0, 1);
                    SmokeColor.z = Mathf.Clamp(SmokeColor.z + ((Keypad9 - Keypad6) * DeltaTime), 0, 1);
                }
            }
            //Smoke Color Indicator
            SmokeColorIndicator.color = SmokeColor_Color;
        }


        //everyone does this while smoke is active
        if (Smoking && !DisplaySmokeNull)
        {
            Color SmokeCol = SmokeColor_Color;
            foreach (ParticleSystem smoke in DisplaySmoke)
            {
                var main = smoke.main;
                main.startColor = new ParticleSystem.MinMaxGradient(SmokeCol, SmokeCol * .8f);
            }
        }
        SmokeColor_Color = new Color(SmokeColor.x, SmokeColor.y, SmokeColor.z);
    }
 private void Update()
 {
     VRCPlayerApi.TrackingData data = player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head);
     gameObject.transform.SetPositionAndRotation(data.position, data.rotation);
 }
示例#29
0
    private void LateUpdate()
    {
        float Trigger;

        if (UseLeftTrigger)
        {
            Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger");
        }
        else
        {
            Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger");
        }

        if (Trigger > 0.75)
        {
            float CruiseTemp = 0;
            //for setting speed in VR
            Vector3 handpos = VehicleTransform.position - localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position;
            handpos = VehicleTransform.InverseTransformDirection(handpos);

            //enable and disable
            if (!TriggerLastFrame)
            {
                if (!EngineControl.Cruise)
                {
                    EngineControl.SetSpeed = EngineControl.AirSpeed;
                    EngineControl.Cruise   = true;
                    if (!Dial_FunconNULL)
                    {
                        Dial_Funcon.SetActive(EngineControl.Cruise);
                    }
                }
                if (TriggerTapTime > .4f)//no double tap
                {
                    TriggerTapTime = 0;
                }
                else//double tap detected, turn off cruise
                {
                    EngineControl.PlayerThrottle = EngineControl.ThrottleInput;
                    EngineControl.Cruise         = false;
                    if (!Dial_FunconNULL)
                    {
                        Dial_Funcon.SetActive(EngineControl.Cruise);
                    }
                }
                //end of enable disable

                //more set speed stuff
                SpeedZeroPoint = handpos.z;
                CruiseTemp     = EngineControl.SetSpeed;
            }
            float SpeedDifference = (SpeedZeroPoint - handpos.z) * 250;
            EngineControl.SetSpeed = Mathf.Floor(Mathf.Clamp(CruiseTemp + SpeedDifference, 0, 2000));

            TriggerLastFrame = true;
        }
        else
        {
            TriggerLastFrame = false;
        }

        TriggerTapTime += Time.deltaTime;
    }
示例#30
0
    void Update()
    {
        // Put cue in hand
                #if !HT_QUEST
        if (dkPrimaryControl)
        {
            if (useDesktop && bHolding)
            {
                this.transform.position = Networking.LocalPlayer.GetBonePosition(HumanBodyBones.RightHand);

                // Temporary target
                objTarget.transform.position = this.transform.position + Vector3.up;

                Vector3 playerpos = gameController.gameObject.transform.InverseTransformPoint(Networking.LocalPlayer.GetPosition());

                // Check turn entry
                if ((Mathf.Abs(playerpos.x) < 2.0f) && (Mathf.Abs(playerpos.z) < 1.5f))
                {
                    VRCPlayerApi.TrackingData hmd = localplayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head);
                    ui_pressE.SetActive(true);
                    ui_pressE.transform.position = hmd.position + hmd.rotation * Vector3.forward;
                    if (Input.GetKeyDown(KeyCode.E))
                    {
                        dkPrimaryControl = false;
                        gameController._ht_desktop_enter();
                    }
                }
                else
                {
                    ui_pressE.SetActive(false);
                }
            }
                        #endif

        lag_objBase = Vector3.Lerp(lag_objBase, this.transform.position, Time.deltaTime * 16.0f);

        if (!bOtherLock)
        {
            lag_objTarget = Vector3.Lerp(lag_objTarget, objTarget.transform.position, Time.deltaTime * 16.0f);
        }

        if (bArmed)
        {
            vSnOff = lag_objBase - vBase;
            vSnDet = Vector3.Dot(vSnOff, vLineNorm);
            objCue.transform.position = vBase + vLineNorm * vSnDet;
        }
        else
        {
            // put cue at base position
            objCue.transform.position = lag_objBase;
            objCue.transform.LookAt(lag_objTarget);
        }

                #if !HT_QUEST
    }
                #endif

        //Xiexe: I find this to be a little silly, hard coding bounds is a little nuts. I think it should either be exposed to the inspector
        // or should be set using a trigger volume and using it's bounds via the editor. We're in a modern game engine, no need to do this. We have the technology.
        if (bHolding)
        {
            // Clamp controllers to play boundaries while we have hold of them
            Vector3 temp = this.transform.localPosition;
            temp.x = Mathf.Clamp(temp.x, -4.0f, 4.0f);
            temp.y = Mathf.Clamp(temp.y, -0.8f, 1.5f);
            temp.z = Mathf.Clamp(temp.z, -3.25f, 3.25f);
            this.transform.localPosition = temp;
            temp   = objTarget.transform.localPosition;
            temp.x = Mathf.Clamp(temp.x, -4.0f, 4.0f);
            temp.y = Mathf.Clamp(temp.y, -0.8f, 1.5f);
            temp.z = Mathf.Clamp(temp.z, -3.25f, 3.25f);
            objTarget.transform.localPosition = temp;
        }
    }