mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-05-21 18:36:18 -05:00
90 lines
2.2 KiB
C#
90 lines
2.2 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Numerics;
|
|
|
|
namespace VrmLib
|
|
{
|
|
public enum VrmSpringBoneColliderTypes
|
|
{
|
|
Sphere,
|
|
Capsule,
|
|
}
|
|
|
|
public struct VrmSpringBoneCollider
|
|
{
|
|
public readonly VrmSpringBoneColliderTypes ColliderType;
|
|
public readonly Vector3 Offset;
|
|
public readonly float Radius;
|
|
public readonly Vector3 CapsuleTail;
|
|
|
|
VrmSpringBoneCollider(VrmSpringBoneColliderTypes type, Vector3 offset, float radius, Vector3 tail)
|
|
{
|
|
ColliderType = type;
|
|
Offset = offset;
|
|
Radius = radius;
|
|
CapsuleTail = tail;
|
|
}
|
|
|
|
public static VrmSpringBoneCollider CreateSphere(Vector3 offset, float radius)
|
|
{
|
|
return new VrmSpringBoneCollider(VrmSpringBoneColliderTypes.Sphere, offset, radius, Vector3.Zero);
|
|
}
|
|
|
|
public static VrmSpringBoneCollider CreateCapsule(Vector3 offset, float radius, Vector3 tail)
|
|
{
|
|
return new VrmSpringBoneCollider(VrmSpringBoneColliderTypes.Capsule, offset, radius, tail);
|
|
}
|
|
}
|
|
|
|
public class SpringBoneColliderGroup
|
|
{
|
|
public readonly Node Node;
|
|
|
|
public readonly List<VrmSpringBoneCollider> Colliders;
|
|
|
|
public SpringBoneColliderGroup(Node node, IEnumerable<VrmSpringBoneCollider> colliders)
|
|
{
|
|
Node = node;
|
|
Colliders = colliders.ToList();
|
|
}
|
|
}
|
|
|
|
public class SpringJoint
|
|
{
|
|
public readonly Node Node;
|
|
|
|
public SpringJoint(Node node)
|
|
{
|
|
Node = node;
|
|
}
|
|
|
|
public float DragForce;
|
|
|
|
public Vector3 GravityDir;
|
|
|
|
public float GravityPower;
|
|
|
|
public float HitRadius;
|
|
|
|
public float Stiffness;
|
|
|
|
public bool Exclude;
|
|
}
|
|
|
|
public class SpringBone
|
|
{
|
|
public const string ExtensionName = "VRMC_springBone";
|
|
public readonly List<SpringJoint> Joints = new List<SpringJoint>();
|
|
public Node Origin;
|
|
|
|
public readonly List<SpringBoneColliderGroup> Colliders = new List<SpringBoneColliderGroup>();
|
|
|
|
public string Comment = "";
|
|
}
|
|
|
|
public class SpringBoneManager
|
|
{
|
|
public readonly List<SpringBone> Springs = new List<SpringBone>();
|
|
}
|
|
}
|