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; } } } }
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); } } }
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}"; }
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); } }
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); } }
public void RemoveMods() { CyanEmuPlayerController player = CyanEmuPlayerController.instance; if (player == null) { return; } player.SetRunSpeed(defaultRunSpeed_); player.SetWalkSpeed(defaultWalkSpeed_); player.SetStrafeSpeed(defaultStrafeSpeed_); player.SetJump(defaultJumpSpeed_); }
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>(); }