OliveRave/UnityProject/Assets/CyanEmu/Scripts/VRCSDK2/CyanEmuPlayerModsHelper.cs
2022-02-02 18:13:48 +01:00

106 lines
3.2 KiB
C#

#if VRC_SDK_VRCSDK2
using UnityEngine;
using VRCSDK2;
namespace VRCPrefabs.CyanEmu
{
[AddComponentMenu("")]
public class CyanEmuPlayerModsHelper : MonoBehaviour
{
public static CyanEmuPlayerModsHelper roomMods;
private VRC_PlayerMods mods_;
private static float defaultWalkSpeed_ = CyanEmuPlayerController.DEFAULT_WALK_SPEED_;
private static float defaultRunSpeed_ = CyanEmuPlayerController.DEFAULT_RUN_SPEED_;
private static float defaultStrafeSpeed_ = CyanEmuPlayerController.DEFAULT_WALK_SPEED_;
private static float defaultJumpSpeed_ = 0;
public static void InitializePlayerMods(VRC_PlayerMods mods)
{
CyanEmuPlayerModsHelper helper = mods.gameObject.AddComponent<CyanEmuPlayerModsHelper>();
helper.mods_ = mods;
if (mods.isRoomPlayerMods)
{
if (roomMods != null)
{
helper.LogWarning("Multiple room player mods!");
}
roomMods = helper;
}
}
public static void ApplyRoomMods(CyanEmuPlayerController player)
{
if (roomMods != null)
{
roomMods.AddPlayerMods();
}
}
public void AddPlayerMods()
{
this.Log("Adding player mods");
AddPlayerMods(mods_);
}
public void RemovePlayerMods()
{
this.Log("Removing player mods");
RemoveMods();
}
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 RemoveMods()
{
CyanEmuPlayerController player = CyanEmuPlayerController.instance;
if (player == null)
{
return;
}
player.SetRunSpeed(defaultRunSpeed_);
player.SetWalkSpeed(defaultWalkSpeed_);
player.SetStrafeSpeed(defaultStrafeSpeed_);
player.SetJump(defaultJumpSpeed_);
}
}
}
#endif