Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
 static CollisionHelper()
 {
     WorldObjectColliderDescription = new ColliderDescription()
     {
         CollisionGroup = COLLISION_GROUP_WORLD_OBJECT, MotionType = MotionType.Static
     };
     AvatarObjectColliderDescription = new ColliderDescription()
     {
         CollisionGroup = COLLISION_GROUP_AVATAR_OBJECT, MotionType = MotionType.Dynamic
     };
 }
Ejemplo n.º 6
0
        /// <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);
        }
Ejemplo n.º 7
0
        /// <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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        /// <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);
            }
        }
Ejemplo n.º 10
0
        /// <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);
            }
        }
Ejemplo n.º 11
0
    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);
    }
Ejemplo n.º 12
0
 /// <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);
 }
Ejemplo n.º 13
0
 /// <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);
 }
Ejemplo n.º 14
0
 /// <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);
 }
Ejemplo n.º 15
0
 /// <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);
 }
Ejemplo n.º 16
0
 /// <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();
 }