mirror of
https://github.com/hanetzer/sdraw_mods_cvr.git
synced 2025-09-04 02:49:23 +00:00
Ragdolled
avatar's animator boolean parameter
Simplified additional parameters parsing
This commit is contained in:
parent
912b37c87f
commit
2c7c90c792
7 changed files with 97 additions and 53 deletions
|
@ -1,4 +1,6 @@
|
||||||
using ABI_RC.Core.Player;
|
using ABI_RC.Core;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
namespace ml_amt
|
namespace ml_amt
|
||||||
{
|
{
|
||||||
|
@ -11,24 +13,30 @@ namespace ml_amt
|
||||||
Moving
|
Moving
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ParameterSyncType
|
readonly ParameterType m_type;
|
||||||
{
|
readonly string m_name;
|
||||||
Synced,
|
readonly int m_hash = 0;
|
||||||
Local
|
readonly bool m_sync;
|
||||||
}
|
readonly AnimatorControllerParameterType m_innerType;
|
||||||
|
readonly CVRAnimatorManager m_manager = null;
|
||||||
|
|
||||||
public readonly ParameterType m_type;
|
public AvatarParameter(ParameterType p_type, CVRAnimatorManager p_manager)
|
||||||
public readonly ParameterSyncType m_sync;
|
|
||||||
public readonly string m_name;
|
|
||||||
public readonly int m_hash; // For local only
|
|
||||||
|
|
||||||
|
|
||||||
public AvatarParameter(ParameterType p_type, string p_name, ParameterSyncType p_sync = ParameterSyncType.Synced, int p_hash = 0)
|
|
||||||
{
|
{
|
||||||
m_type = p_type;
|
m_type = p_type;
|
||||||
m_sync = p_sync;
|
m_name = p_type.ToString();
|
||||||
m_name = p_name;
|
m_manager = p_manager;
|
||||||
m_hash = p_hash;
|
|
||||||
|
Regex l_regex = new Regex("^#?" + m_name + '$');
|
||||||
|
foreach(var l_param in m_manager.animator.parameters)
|
||||||
|
{
|
||||||
|
if(l_regex.IsMatch(l_param.name))
|
||||||
|
{
|
||||||
|
m_hash = l_param.nameHash;
|
||||||
|
m_sync = (l_param.name[0] != '#');
|
||||||
|
m_innerType = l_param.type;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Update(MotionTweaker p_tweaker)
|
public void Update(MotionTweaker p_tweaker)
|
||||||
|
@ -49,29 +57,28 @@ namespace ml_amt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsValid() => (m_hash != 0);
|
||||||
|
public ParameterType GetParameterType() => m_type;
|
||||||
|
|
||||||
void SetFloat(float p_value)
|
void SetFloat(float p_value)
|
||||||
{
|
{
|
||||||
switch(m_sync)
|
if(m_innerType == AnimatorControllerParameterType.Float)
|
||||||
{
|
{
|
||||||
case ParameterSyncType.Local:
|
if(m_sync)
|
||||||
PlayerSetup.Instance._animator.SetFloat(m_hash, p_value);
|
m_manager.SetAnimatorParameterFloat(m_name, p_value);
|
||||||
break;
|
else
|
||||||
case ParameterSyncType.Synced:
|
m_manager.animator.SetFloat(m_hash, p_value);
|
||||||
PlayerSetup.Instance.animatorManager.SetAnimatorParameterFloat(m_name, p_value);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetBoolean(bool p_value)
|
void SetBoolean(bool p_value)
|
||||||
{
|
{
|
||||||
switch(m_sync)
|
if(m_innerType == AnimatorControllerParameterType.Bool)
|
||||||
{
|
{
|
||||||
case ParameterSyncType.Local:
|
if(m_sync)
|
||||||
PlayerSetup.Instance._animator.SetBool(m_hash, p_value);
|
m_manager.SetAnimatorParameterBool(m_name, p_value);
|
||||||
break;
|
else
|
||||||
case ParameterSyncType.Synced:
|
m_manager.animator.SetBool(m_hash, p_value);
|
||||||
PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool(m_name, p_value);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -208,28 +208,12 @@ namespace ml_amt
|
||||||
m_viewPointHeight = PlayerSetup.Instance._avatar.GetComponent<ABI.CCK.Components.CVRAvatar>().viewPosition.y;
|
m_viewPointHeight = PlayerSetup.Instance._avatar.GetComponent<ABI.CCK.Components.CVRAvatar>().viewPosition.y;
|
||||||
|
|
||||||
// Parse animator parameters
|
// Parse animator parameters
|
||||||
AnimatorControllerParameter[] l_params = PlayerSetup.Instance._animator.parameters;
|
m_parameters.Add(new AvatarParameter(AvatarParameter.ParameterType.Upright, PlayerSetup.Instance.animatorManager));
|
||||||
foreach(var l_param in l_params)
|
m_parameters.Add(new AvatarParameter(AvatarParameter.ParameterType.GroundedRaw, PlayerSetup.Instance.animatorManager));
|
||||||
{
|
m_parameters.Add(new AvatarParameter(AvatarParameter.ParameterType.Moving, PlayerSetup.Instance.animatorManager));
|
||||||
foreach(AvatarParameter.ParameterType l_enumParam in System.Enum.GetValues(typeof(AvatarParameter.ParameterType)))
|
m_parameters.RemoveAll(p => !p.IsValid());
|
||||||
{
|
|
||||||
if(l_param.name.Contains(l_enumParam.ToString()) && (m_parameters.FindIndex(p => p.m_type == l_enumParam) == -1))
|
|
||||||
{
|
|
||||||
bool l_local = (l_param.name[0] == '#');
|
|
||||||
|
|
||||||
m_parameters.Add(new AvatarParameter(
|
m_compatibleAvatar = m_parameters.Exists(p => (p.GetParameterType() == AvatarParameter.ParameterType.Upright));
|
||||||
l_enumParam,
|
|
||||||
l_param.name,
|
|
||||||
(l_local ? AvatarParameter.ParameterSyncType.Local : AvatarParameter.ParameterSyncType.Synced),
|
|
||||||
(l_local ? l_param.nameHash : 0)
|
|
||||||
));
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_compatibleAvatar = m_parameters.Exists(p => p.m_type == AvatarParameter.ParameterType.Upright);
|
|
||||||
m_avatarScale = Mathf.Abs(PlayerSetup.Instance._avatar.transform.localScale.y);
|
m_avatarScale = Mathf.Abs(PlayerSetup.Instance._avatar.transform.localScale.y);
|
||||||
|
|
||||||
Transform l_customTransform = PlayerSetup.Instance._avatar.transform.Find("CrouchLimit");
|
Transform l_customTransform = PlayerSetup.Instance._avatar.transform.Find("CrouchLimit");
|
||||||
|
|
|
@ -38,9 +38,9 @@ Available additional parameters for AAS animator:
|
||||||
* Note: Can be set as local-only (not synced) if starts with `#` character.
|
* Note: Can be set as local-only (not synced) if starts with `#` character.
|
||||||
* Note: Defining this parameter in AAS animator will consider avatar as compatible with mod.
|
* Note: Defining this parameter in AAS animator will consider avatar as compatible with mod.
|
||||||
* Note: Can't be used for transitions between poses in desktop mode. In desktop mode its value is driven by avatar animations. Use `CVR Parameter Stream` for detecting desktop/VR modes and change AAS animator transitions accordingly.
|
* Note: Can't be used for transitions between poses in desktop mode. In desktop mode its value is driven by avatar animations. Use `CVR Parameter Stream` for detecting desktop/VR modes and change AAS animator transitions accordingly.
|
||||||
* **`GroundedRaw`:** defines instant grounding state of player instead of delayed default parameter `Grounded`.
|
* **`GroundedRaw`:** defines instant grounding state of player instead of delayed default parameter `Grounded`; boolean.
|
||||||
* Note: Can be set as local-only (not synced) if starts with `#` character.
|
* Note: Can be set as local-only (not synced) if starts with `#` character.
|
||||||
* **`Moving`:** defines movement state of player
|
* **`Moving`:** defines movement state of player; boolean.
|
||||||
* Note: Can be set as local-only (not synced) if starts with `#` character.
|
* Note: Can be set as local-only (not synced) if starts with `#` character.
|
||||||
|
|
||||||
Additional mod's behaviour:
|
Additional mod's behaviour:
|
||||||
|
|
43
ml_prm/AvatarBoolParameter.cs
Normal file
43
ml_prm/AvatarBoolParameter.cs
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
using ABI_RC.Core;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace ml_prm
|
||||||
|
{
|
||||||
|
class AvatarBoolParameter
|
||||||
|
{
|
||||||
|
public readonly string m_name;
|
||||||
|
public readonly int m_hash = 0;
|
||||||
|
public readonly bool m_sync;
|
||||||
|
readonly CVRAnimatorManager m_manager = null;
|
||||||
|
|
||||||
|
public AvatarBoolParameter(string p_name, CVRAnimatorManager p_manager)
|
||||||
|
{
|
||||||
|
m_name = p_name;
|
||||||
|
m_manager = p_manager;
|
||||||
|
|
||||||
|
Regex l_regex = new Regex("^#?" + p_name + '$');
|
||||||
|
foreach(var l_param in m_manager.animator.parameters)
|
||||||
|
{
|
||||||
|
if(l_regex.IsMatch(l_param.name) && (l_param.type == AnimatorControllerParameterType.Bool))
|
||||||
|
{
|
||||||
|
m_name = l_param.name;
|
||||||
|
m_hash = l_param.nameHash;
|
||||||
|
m_sync = (l_param.name[0] != '#');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetValue(bool p_value)
|
||||||
|
{
|
||||||
|
if(m_hash != 0)
|
||||||
|
{
|
||||||
|
if(m_sync)
|
||||||
|
m_manager.SetAnimatorParameterBool(m_name, p_value);
|
||||||
|
else
|
||||||
|
m_manager.animator.SetBool(m_hash, p_value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,6 +24,10 @@ Optional mod's settings with [BTKUILib](https://github.com/BTK-Development/BTKUI
|
||||||
* **Angular movement drag:** angular movement resistance; `2.0` by default.
|
* **Angular movement drag:** angular movement resistance; `2.0` by default.
|
||||||
* **Reset settings:** resets mod settings to default.
|
* **Reset settings:** resets mod settings to default.
|
||||||
|
|
||||||
|
Available additional parameters for AAS animator:
|
||||||
|
* **`Ragdolled`:** defines current ragdoll state; boolean.
|
||||||
|
* Note: Can be set as local-only (not synced) if starts with `#` character.
|
||||||
|
|
||||||
# Unity Editor Script
|
# Unity Editor Script
|
||||||
You can also trigger the ragdoll via animations on your avatar. To do this you need:
|
You can also trigger the ragdoll via animations on your avatar. To do this you need:
|
||||||
* Download and import the `ml_prm_editor_script.unitypackage` into your unity project
|
* Download and import the `ml_prm_editor_script.unitypackage` into your unity project
|
||||||
|
|
|
@ -33,6 +33,7 @@ namespace ml_prm
|
||||||
|
|
||||||
RagdollToggle m_avatarRagdollToggle = null;
|
RagdollToggle m_avatarRagdollToggle = null;
|
||||||
RagdollTrigger m_customTrigger = null;
|
RagdollTrigger m_customTrigger = null;
|
||||||
|
AvatarBoolParameter m_ragdolledParameter = null;
|
||||||
|
|
||||||
bool m_reachedGround = true;
|
bool m_reachedGround = true;
|
||||||
|
|
||||||
|
@ -129,6 +130,7 @@ namespace ml_prm
|
||||||
m_enabled = false;
|
m_enabled = false;
|
||||||
m_avatarReady = false;
|
m_avatarReady = false;
|
||||||
m_avatarRagdollToggle = null;
|
m_avatarRagdollToggle = null;
|
||||||
|
m_ragdolledParameter = null;
|
||||||
m_rigidBodies.Clear();
|
m_rigidBodies.Clear();
|
||||||
m_colliders.Clear();
|
m_colliders.Clear();
|
||||||
m_puppetReferences = new BipedRagdollReferences();
|
m_puppetReferences = new BipedRagdollReferences();
|
||||||
|
@ -231,6 +233,7 @@ namespace ml_prm
|
||||||
}
|
}
|
||||||
|
|
||||||
m_avatarRagdollToggle = PlayerSetup.Instance._avatar.GetComponentInChildren<RagdollToggle>(true);
|
m_avatarRagdollToggle = PlayerSetup.Instance._avatar.GetComponentInChildren<RagdollToggle>(true);
|
||||||
|
m_ragdolledParameter = new AvatarBoolParameter("Ragdolled", PlayerSetup.Instance.animatorManager);
|
||||||
|
|
||||||
m_avatarReady = true;
|
m_avatarReady = true;
|
||||||
}
|
}
|
||||||
|
@ -336,6 +339,7 @@ namespace ml_prm
|
||||||
|
|
||||||
MovementSystem.Instance.SetImmobilized(true);
|
MovementSystem.Instance.SetImmobilized(true);
|
||||||
PlayerSetup.Instance.animatorManager.SetAnimatorParameterTrigger("CancelEmote");
|
PlayerSetup.Instance.animatorManager.SetAnimatorParameterTrigger("CancelEmote");
|
||||||
|
m_ragdolledParameter.SetValue(true);
|
||||||
if(BodySystem.isCalibratedAsFullBody)
|
if(BodySystem.isCalibratedAsFullBody)
|
||||||
BodySystem.TrackingPositionWeight = 0f;
|
BodySystem.TrackingPositionWeight = 0f;
|
||||||
|
|
||||||
|
@ -368,6 +372,7 @@ namespace ml_prm
|
||||||
if(IsSafeToUnragdoll())
|
if(IsSafeToUnragdoll())
|
||||||
{
|
{
|
||||||
MovementSystem.Instance.SetImmobilized(false);
|
MovementSystem.Instance.SetImmobilized(false);
|
||||||
|
m_ragdolledParameter.SetValue(false);
|
||||||
if(BodySystem.isCalibratedAsFullBody)
|
if(BodySystem.isCalibratedAsFullBody)
|
||||||
BodySystem.TrackingPositionWeight = 1f;
|
BodySystem.TrackingPositionWeight = 1f;
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,7 @@
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="AvatarBoolParameter.cs" />
|
||||||
<Compile Include="RagdollTrigger.cs" />
|
<Compile Include="RagdollTrigger.cs" />
|
||||||
<Compile Include="Main.cs" />
|
<Compile Include="Main.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue