Example #1
0
        public void AddPlayerMods(VRC_PlayerMods mods)
        {
            CyanEmuPlayerController player = CyanEmuPlayerController.instance;

            if (player == null)
            {
                return;
            }

            foreach (VRCPlayerMod mod in mods.playerMods)
            {
                if (mod.name == "jump")
                {
                    player.SetJump(mod.properties[0].floatValue);

                    if (mods.isRoomPlayerMods)
                    {
                        defaultJumpSpeed_ = mod.properties[0].floatValue;
                    }
                }
                else if (mod.name == "speed")
                {
                    player.SetRunSpeed(mod.properties[0].floatValue);
                    player.SetWalkSpeed(mod.properties[1].floatValue);
                    player.SetStrafeSpeed(mod.properties[2].floatValue);

                    if (mods.isRoomPlayerMods)
                    {
                        defaultRunSpeed_    = mod.properties[0].floatValue;
                        defaultWalkSpeed_   = mod.properties[1].floatValue;
                        defaultStrafeSpeed_ = mod.properties[2].floatValue;
                    }
                }
            }
        }
Example #2
0
        public void Drop()
        {
            if (!isHeld_)
            {
                return;
            }

            this.Log("Dropping object " + name);
            isHeld_      = false;
            initialGrab_ = false;

            gameObject.OnDrop();

            CyanEmuPlayerController player = CyanEmuPlayerController.instance;

            if (player == null)
            {
                return;
            }

            player.DropObject(this);

            // Calculate throw velocity
            if (!rigidbody_.isKinematic && pickup_.AutoHold == VRC_Pickup.AutoHoldMode.Yes)
            {
                float holdDuration = Mathf.Clamp(Time.time - dropActionStartTime_, 0, 3);
                if (holdDuration > 0.2f)
                {
                    Transform rightArm   = player.GetArmTransform();
                    Vector3   throwForce = rightArm.forward * (holdDuration * 500 * pickup_.ThrowVelocityBoostScale);
                    rigidbody_.AddForce(throwForce);
                    this.Log("Adding throw force: " + throwForce);
                }
            }
        }
Example #3
0
        private void SpawnLocalPlayer()
        {
            if (descriptor_ == null)
            {
                Debug.LogError("Cannot spawn player if there is no world descriptor!");
                return;
            }

            GameObject player = new GameObject("Local Player");

            player.transform.parent = transform;

            // Force move the player initially to the spawn point to prevent enter triggers at the origin
            Transform spawn = GetSpawnPoint();

            player.transform.position = spawn.position;
            player.transform.rotation = Quaternion.Euler(0, spawn.rotation.eulerAngles.y, 0);

            playerController_ = player.AddComponent <CyanEmuPlayerController>();
            playerController_.Teleport(spawn, false);

            CyanEmuPlayer playerObj = player.AddComponent <CyanEmuPlayer>();
            VRCPlayerApi  playerAPI = CyanEmuPlayerManager.CreateNewPlayer(true, player, settings_.customLocalPlayerName);

            playerObj.SetPlayer(playerAPI);
            player.name = $"[{playerAPI.playerId}] {player.name}";
        }
Example #4
0
 public static void ApplyRoomMods(CyanEmuPlayerController player)
 {
     if (roomMods != null)
     {
         roomMods.AddPlayerMods();
     }
 }
        public void Pickup()
        {
            isHeld_ = true;

            gameObject.OnPickup();

            CyanEmuPlayerController player = CyanEmuPlayerController.instance;

            if (player == null)
            {
                this.LogWarning("Unable to pickup object when there is no player!");
                return;
            }

            player.PickupObject(this);

            this.Log("Picking up object " + name);

            Networking.SetOwner(Networking.LocalPlayer, gameObject);

            wasKinematic_          = rigidbody_.isKinematic;
            rigidbody_.isKinematic = true;

            // Calculate offest
            Transform pickupHoldPoint = null;

            Quaternion offsetRotation = Quaternion.identity;

            if (pickup_.orientation == VRC_Pickup.PickupOrientation.Grip && pickup_.ExactGrip != null)
            {
                pickupHoldPoint = pickup_.ExactGrip;
                offsetRotation  = GRIP_OFFSET_ROTATION_;
            }
            else if (pickup_.orientation == VRC_Pickup.PickupOrientation.Gun && pickup_.ExactGun != null)
            {
                pickupHoldPoint = pickup_.ExactGun;
                offsetRotation  = GUN_OFFSET_ROTATION_;
            }

            Transform arm = player.GetArmTransform();

            // Grab as if no pickup point
            if (pickupHoldPoint == null)
            {
                rotationOffset_ = Quaternion.Inverse(arm.rotation) * transform.rotation;
                positionOffset_ = arm.InverseTransformDirection(transform.position - arm.position);

                float mag = positionOffset_.magnitude;
                if (mag > MAX_PICKUP_DISTANCE_ && pickup_.orientation == VRC_Pickup.PickupOrientation.Any)
                {
                    positionOffset_ = positionOffset_.normalized * MAX_PICKUP_DISTANCE_;
                }
            }
            else
            {
                rotationOffset_ = offsetRotation * Quaternion.Inverse(Quaternion.Inverse(transform.rotation) * pickupHoldPoint.rotation);
                positionOffset_ = rotationOffset_ * transform.InverseTransformDirection(transform.position - pickupHoldPoint.position);
            }
        }
Example #6
0
        public void UpdatePlayerPosition(CyanEmuPlayerController player)
        {
            if (IsMobile)
            {
                return;
            }

            player.SitPosition(EnterLocation);
        }
        public void SetPlayer(VRCPlayerApi player)
        {
            this.player = player;

            // TODO handle this better
            CyanEmuPlayerController playerController = GetComponent <CyanEmuPlayerController>();

            if (playerController != null)
            {
                playerController.SetPlayer(this);
            }
        }
Example #8
0
        public void RemoveMods()
        {
            CyanEmuPlayerController player = CyanEmuPlayerController.instance;

            if (player == null)
            {
                return;
            }

            player.SetRunSpeed(defaultRunSpeed_);
            player.SetWalkSpeed(defaultWalkSpeed_);
            player.SetStrafeSpeed(defaultStrafeSpeed_);
            player.SetJump(defaultJumpSpeed_);
        }
Example #9
0
        private void Awake()
        {
            if (instance != null)
            {
                this.LogError("Player controller instance already exists!");
                DestroyImmediate(this);
                return;
            }

#if VRC_SDK_VRCSDK2
            legacyLocomotion_ = true;
#endif

            instance         = this;
            descriptor_      = FindObjectOfType <VRC_SceneDescriptor>();
            gameObject.layer = LayerMask.NameToLayer("PlayerLocal");
            gameObject.tag   = "Player";

            rigidbody_             = gameObject.AddComponent <Rigidbody>();
            rigidbody_.isKinematic = true;

            characterController_                 = gameObject.AddComponent <CharacterController>();
            characterController_.slopeLimit      = 50;
            characterController_.stepOffset      = .5f;
            characterController_.skinWidth       = 0.005f;
            characterController_.minMoveDistance = 0;
            characterController_.center          = new Vector3(0, 0.8f, 0);
            characterController_.radius          = 0.2f;
            characterController_.height          = 1.6f;


            GameObject capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule);
            capsule.transform.localScale = new Vector3(0.4f, 1, 0.4f);
            capsule.transform.SetParent(transform, false);
            capsule.transform.localPosition = new Vector3(0, 1, 0);
            capsule.layer = LayerMask.NameToLayer("MirrorReflection");
            DestroyImmediate(capsule.GetComponent <Collider>());


            playerCamera_ = new GameObject("Player Camera");
            GameObject cameraHolder = new GameObject("CameraHolder");
            cameraHolder.transform.SetParent(playerCamera_.transform, false);
            camera_               = cameraHolder.AddComponent <Camera>();
            camera_.cullingMask  &= ~(1 << 18); // remove mirror reflection
            updateStancePosition_ = false;

            // TODO, make based on avatar armspan/settings
            cameraHolder.transform.localScale = Vector3.one * AVATAR_SCALE_;

            playerCamera_.AddComponent <AudioListener>();
            playerCamera_.transform.SetParent(transform, false);
            playerCamera_.transform.localPosition = new Vector3(0, STANDING_HEIGHT_, .1f);
            playerCamera_.transform.localRotation = Quaternion.identity;

            playspace_ = new GameObject("Playspace Center");
            playspace_.transform.SetParent(transform, false);
            playspace_.transform.localPosition = new Vector3(-1, 0, -1);
            playspace_.transform.localRotation = Quaternion.Euler(0, 45, 0);

            rightArmPosition_ = new GameObject("Right Arm Position");
            rightArmPosition_.transform.SetParent(playerCamera_.transform, false);
            rightArmPosition_.transform.localPosition = new Vector3(0.15f, -0.13f, 0.4f);
            rightArmPosition_.transform.localRotation = Quaternion.Euler(-35, 0, -90);
            rightArmRigidbody_             = rightArmPosition_.AddComponent <Rigidbody>();
            rightArmRigidbody_.isKinematic = true;

            leftArmPosition_ = new GameObject("Left Arm Position");
            leftArmPosition_.transform.SetParent(playerCamera_.transform, false);
            leftArmPosition_.transform.localPosition = new Vector3(-0.15f, -0.13f, 0.4f);
            leftArmPosition_.transform.localRotation = Quaternion.Euler(-35, 0, -90);
            leftArmRigidbody_             = leftArmPosition_.AddComponent <Rigidbody>();
            leftArmRigidbody_.isKinematic = true;

            mouseLook_ = new MouseLook();
            mouseLook_.Init(transform, playerCamera_.transform);

            stance_ = Stance.STANDING;

            baseInput_ = transform.parent.gameObject.GetComponent <CyanEmuBaseInput>();
            CreateMenu();

            GameObject interactHelper = new GameObject("InteractHelper");
            interactHelper.transform.SetParent(transform.parent, false);
            interactHelper_ = interactHelper.AddComponent <CyanEmuInteractHelper>();
            Func <bool> shouldCheckForInteracts = () => { return(currentPickup_ == null && !menu_.activeInHierarchy && !isDead_); };
            interactHelper_.Initialize(playerCamera_.transform, playerCamera_.transform, shouldCheckForInteracts);

            reticleTexture_ = Resources.Load <Texture2D>("Images/Reticle");

            cameraProxyObject_ = new GameObject("CameraDamageProxy").transform;
            cameraProxyObject_.SetParent(CyanEmuMain.GetProxyObjectTransform(), false);
            UpdateCameraProxyPosition();

            // experimental!
            //interactHelper_.highlightManager = playerCamera_.AddComponent<VRCP_HighlightManager>();
        }