private static void UpdateRigidbodyCollisionSettings(RigidBody rigidBody, ref ColliderDescription colliderDescription) { rigidBody.CollisionObject.CollisionGroup = colliderDescription.CollisionGroup; switch (colliderDescription.MotionType) { case Karen90MmoFramework.Quantum.Physics.MotionType.Static: { rigidBody.MotionType = MotionType.Static; rigidBody.MassFrame = new MassFrame { Mass = 0 }; } break; case Karen90MmoFramework.Quantum.Physics.MotionType.Kinematic: { rigidBody.MotionType = MotionType.Kinematic; rigidBody.MassFrame = new MassFrame { Mass = 0 }; } break; case Karen90MmoFramework.Quantum.Physics.MotionType.Dynamic: { rigidBody.MotionType = MotionType.Dynamic; rigidBody.MassFrame = new MassFrame { Mass = 1 }; } break; } }
public void Rebuild(Transform root) { elements = new List <Element>(); var bodies = root.GetComponentsInChildren <Rigidbody>(true); foreach (var rb in bodies) { var collider = rb.GetComponent <Collider>(); if (collider != null) { var joint = rb.GetComponent <CharacterJoint>(); var elem = new Element(); elem.path = Utils.GetChildPath(root, rb.transform); elem.collider = ColliderDescription.New(collider); elem.rigidBody = RigidbodyDescription.New(rb); if (joint != null) { elem.joint = CharacterJointDescription.New(joint, root); } elements.Add(elem); } } EditorUtility.SetDirty(this); }
public static ColliderDescription New(SphereCollider sphere) { var d = new ColliderDescription(); d.colliderType = ColliderType.Sphere; d.isTrigger = sphere.isTrigger; d.center = sphere.center; d.size.x = sphere.radius; return(d); }
public static ColliderDescription New(BoxCollider box) { var d = new ColliderDescription(); d.colliderType = ColliderType.Box; d.isTrigger = box.isTrigger; d.center = box.center; d.size = box.size; return(d); }
static CollisionHelper() { WorldObjectColliderDescription = new ColliderDescription() { CollisionGroup = COLLISION_GROUP_WORLD_OBJECT, MotionType = MotionType.Static }; AvatarObjectColliderDescription = new ColliderDescription() { CollisionGroup = COLLISION_GROUP_AVATAR_OBJECT, MotionType = MotionType.Dynamic }; }
/// <summary> /// Creates a capsule shape in the world /// </summary> /// <param name="capsuleDescription"></param> /// <param name="colliderDescription"> </param> /// <returns></returns> public IRigidbody CreateCapsule(Capsule capsuleDescription, ColliderDescription colliderDescription) { var position = Karen90MmoFramework.Quantum.Vector3.Clamp(capsuleDescription.Position, bounds.Min, bounds.Max); var bepuCapsule = new BEPUCapsuleShape(capsuleDescription.Radius, capsuleDescription.Height, position); bepuCapsule.CollisionInformation.CollisionRules.Group = GetCollisionGroup(colliderDescription.CollisionGroup); bepuCapsule.Material = this.frictionlessMaterial; bepuCapsule.Mass = (colliderDescription.MotionType == MotionType.Static || colliderDescription.MotionType == MotionType.Kinematic) ? 0 : 1; this.space.Add(bepuCapsule); return(bepuCapsule); }
/// <summary> /// Creates a box shape in the world /// </summary> /// <param name="boxDescription"></param> /// <param name="colliderDescription"> </param> /// <returns></returns> public IRigidbody CreateBox(Box boxDescription, ColliderDescription colliderDescription) { var position = Karen90MmoFramework.Quantum.Vector3.Clamp(boxDescription.Position, bounds.Min, bounds.Max); var bepuBox = new BEPUBoxShape(boxDescription.Size, position); bepuBox.CollisionInformation.CollisionRules.Group = GetCollisionGroup(colliderDescription.CollisionGroup); bepuBox.Material = this.frictionlessMaterial; bepuBox.Mass = (colliderDescription.MotionType == MotionType.Static || colliderDescription.MotionType == MotionType.Kinematic) ? 0 : 1; this.space.Add(bepuBox); return(bepuBox); }
public static ColliderDescription New(CapsuleCollider capsule) { var d = new ColliderDescription(); d.colliderType = ColliderType.Capsule; d.capsuleDirection = (CapsuleDirection)capsule.direction; d.isTrigger = capsule.isTrigger; d.center = capsule.center; d.size.x = capsule.radius; d.size.y = capsule.height; return(d); }
/// <summary> /// Creates a capsule shape in the world /// </summary> /// <param name="capsuleDescription"></param> /// <param name="colliderDescription"> </param> /// <returns></returns> public IWorldObject CreateWorldObject(CapsuleDescription capsuleDescription, ColliderDescription colliderDescription) { lock (this) { var rigidBody = new RuneRigidbody(new RuneCapsuleShape(capsuleDescription.Radius, capsuleDescription.Height)) { Pose = new Pose(capsuleDescription.Position.ToRuneVector(), capsuleDescription.Rotation.ToRuneQuaternion()), Scale = capsuleDescription.Scale.ToRuneVector(), }; UpdateRigidbodyCollisionSettings(rigidBody, ref colliderDescription); this.simulation.RigidBodies.Add(rigidBody); return(rigidBody); } }
/// <summary> /// Creates a box shape in the world /// </summary> /// <param name="boxDescription"></param> /// <param name="colliderDescription"> </param> /// <returns></returns> public IWorldObject CreateWorldObject(BoxDescription boxDescription, ColliderDescription colliderDescription) { lock (this) { var size = boxDescription.Size; var rigidBody = new RuneRigidbody(new RuneBoxShape(size.X, size.Y, size.Z)) { Pose = new Pose(boxDescription.Position.ToRuneVector(), boxDescription.Rotation.ToRuneQuaternion()), Scale = boxDescription.Scale.ToRuneVector(), }; UpdateRigidbodyCollisionSettings(rigidBody, ref colliderDescription); this.simulation.RigidBodies.Add(rigidBody); return(rigidBody); } }
public static RagdollAsset Create(Transform root, string path) { List <Element> elements = new List <Element>(); var bodies = root.GetComponentsInChildren <Rigidbody>(true); foreach (var rb in bodies) { var collider = rb.GetComponent <Collider>(); if (collider != null) { var joint = rb.GetComponent <CharacterJoint>(); var elem = new Element(); elem.path = Utils.GetChildPath(root, rb.transform); elem.collider = ColliderDescription.New(collider); elem.rigidBody = RigidbodyDescription.New(rb); if (joint != null) { elem.joint = CharacterJointDescription.New(joint, root); } elements.Add(elem); } } RagdollAsset asset = null; if (elements.Count > 0) { asset = Utils.CreateAsset <RagdollAsset>(path); asset.elements = elements; } return(asset); }
/// <summary> /// Creates a sphere shape in the world /// </summary> /// <param name="sphereDescription"></param> /// <param name="colliderDescription"> </param> /// <returns></returns> public IWorldObject CreateWorldObject(SphereDescription sphereDescription, ColliderDescription colliderDescription) { return(null); }
/// <summary> /// Creates a box shape in the world /// </summary> /// <param name="boxDescription"></param> /// <param name="colliderDescription"> </param> /// <returns></returns> public IWorldObject CreateWorldObject(BoxDescription boxDescription, ColliderDescription colliderDescription) { return(null); }
/// <summary> /// Creates a cylinder shape in the world /// </summary> /// <param name="cylinderDescription"></param> /// <param name="colliderDescription"> </param> /// <returns></returns> public IWorldObject CreateWorldObject(CylinderDescription cylinderDescription, ColliderDescription colliderDescription) { return(null); }
/// <summary> /// Creates a capsule shape in the world /// </summary> /// <param name="capsuleDescription"></param> /// <param name="colliderDescription"> </param> /// <returns></returns> public IWorldObject CreateWorldObject(CapsuleDescription capsuleDescription, ColliderDescription colliderDescription) { return(null); }
/// <summary> /// Creates a cylinder shape in the world /// </summary> /// <param name="cylinderDescription"></param> /// <param name="colliderDescription"> </param> /// <returns></returns> public IRigidbody CreateCylinder(Cylinder cylinderDescription, ColliderDescription colliderDescription) { throw new NotImplementedException(); }