void HandleNodeCollision(NodeCollisionEvent e) { // Get the other colliding body, make sure it is moving (has nonzero mass) RigidBody otherBody = e.OtherBody; if (otherBody.Mass > 0.0f) { // We do not need the physics components in the AnimatedModel's root scene node anymore Node.RemoveComponent <RigidBody>(); Node.RemoveComponent <CollisionShape>(); // Create RigidBody & CollisionShape components to bones CreateRagdollBone("Bip01_Pelvis", ShapeType.SHAPE_BOX, new Vector3(0.3f, 0.2f, 0.25f), new Vector3(0.0f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 0.0f)); CreateRagdollBone("Bip01_Spine1", ShapeType.SHAPE_BOX, new Vector3(0.35f, 0.2f, 0.3f), new Vector3(0.15f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 0.0f)); CreateRagdollBone("Bip01_L_Thigh", ShapeType.SHAPE_CAPSULE, new Vector3(0.175f, 0.45f, 0.175f), new Vector3(0.25f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_R_Thigh", ShapeType.SHAPE_CAPSULE, new Vector3(0.175f, 0.45f, 0.175f), new Vector3(0.25f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_L_Calf", ShapeType.SHAPE_CAPSULE, new Vector3(0.15f, 0.55f, 0.15f), new Vector3(0.25f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_R_Calf", ShapeType.SHAPE_CAPSULE, new Vector3(0.15f, 0.55f, 0.15f), new Vector3(0.25f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_Head", ShapeType.SHAPE_BOX, new Vector3(0.2f, 0.2f, 0.2f), new Vector3(0.1f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 0.0f)); CreateRagdollBone("Bip01_L_UpperArm", ShapeType.SHAPE_CAPSULE, new Vector3(0.15f, 0.35f, 0.15f), new Vector3(0.1f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_R_UpperArm", ShapeType.SHAPE_CAPSULE, new Vector3(0.15f, 0.35f, 0.15f), new Vector3(0.1f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_L_Forearm", ShapeType.SHAPE_CAPSULE, new Vector3(0.125f, 0.4f, 0.125f), new Vector3(0.2f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_R_Forearm", ShapeType.SHAPE_CAPSULE, new Vector3(0.125f, 0.4f, 0.125f), new Vector3(0.2f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); Vector3 back = new Vector3(0f, 0f, -1f); Vector3 forward = new Vector3(0f, 0f, 1f); Vector3 left = new Vector3(-1f, 0f, 0f); Vector3 down = new Vector3(0f, -1f, 0f); Vector3 up = new Vector3(0f, 1f, 0f); // Create Constraints between bones CreateRagdollConstraint("Bip01_L_Thigh", "Bip01_Pelvis", ConstraintType.CONSTRAINT_CONETWIST, back, forward, new Vector2(45.0f, 45.0f), Vector2.Zero); CreateRagdollConstraint("Bip01_R_Thigh", "Bip01_Pelvis", ConstraintType.CONSTRAINT_CONETWIST, back, forward, new Vector2(45.0f, 45.0f), Vector2.Zero); CreateRagdollConstraint("Bip01_L_Calf", "Bip01_L_Thigh", ConstraintType.CONSTRAINT_HINGE, back, back, new Vector2(90.0f, 0.0f), Vector2.Zero); CreateRagdollConstraint("Bip01_R_Calf", "Bip01_R_Thigh", ConstraintType.CONSTRAINT_HINGE, back, back, new Vector2(90.0f, 0.0f), Vector2.Zero); CreateRagdollConstraint("Bip01_Spine1", "Bip01_Pelvis", ConstraintType.CONSTRAINT_HINGE, forward, forward, new Vector2(45.0f, 0.0f), new Vector2(-10.0f, 0.0f)); CreateRagdollConstraint("Bip01_Head", "Bip01_Spine1", ConstraintType.CONSTRAINT_CONETWIST, left, left, new Vector2(0.0f, 30.0f), Vector2.Zero); CreateRagdollConstraint("Bip01_L_UpperArm", "Bip01_Spine1", ConstraintType.CONSTRAINT_CONETWIST, down, up, new Vector2(45.0f, 45.0f), Vector2.Zero, false); CreateRagdollConstraint("Bip01_R_UpperArm", "Bip01_Spine1", ConstraintType.CONSTRAINT_CONETWIST, down, up, new Vector2(45.0f, 45.0f), Vector2.Zero, false); CreateRagdollConstraint("Bip01_L_Forearm", "Bip01_L_UpperArm", ConstraintType.CONSTRAINT_HINGE, back, back, new Vector2(90.0f, 0.0f), Vector2.Zero); CreateRagdollConstraint("Bip01_R_Forearm", "Bip01_R_UpperArm", ConstraintType.CONSTRAINT_HINGE, back, back, new Vector2(90.0f, 0.0f), Vector2.Zero); // Disable keyframe animation from all bones so that they will not interfere with the ragdoll AnimatedModel model = GetComponent <AnimatedModel>(); Skeleton skeleton = model.Skeleton; for (uint i = 0; i < skeleton.GetNumBones(); ++i) { skeleton.GetBone(i).Animated = false; } // Finally remove self from the scene node. Note that this must be the last operation performed in the function Remove(); } }
void HandleNodeCollision(NodeCollisionEvent e) { // Get the other colliding body, make sure it is moving (has nonzero mass) RigidBody otherBody = e.OtherBody; if (otherBody.Mass > 0.0f) { // We do not need the physics components in the AnimatedModel's root scene node anymore Node.RemoveComponent<RigidBody>(); Node.RemoveComponent<CollisionShape>(); // Create RigidBody & CollisionShape components to bones CreateRagdollBone("Bip01_Pelvis", ShapeType.SHAPE_BOX, new Vector3(0.3f, 0.2f, 0.25f), new Vector3(0.0f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 0.0f)); CreateRagdollBone("Bip01_Spine1", ShapeType.SHAPE_BOX, new Vector3(0.35f, 0.2f, 0.3f), new Vector3(0.15f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 0.0f)); CreateRagdollBone("Bip01_L_Thigh", ShapeType.SHAPE_CAPSULE, new Vector3(0.175f, 0.45f, 0.175f), new Vector3(0.25f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_R_Thigh", ShapeType.SHAPE_CAPSULE, new Vector3(0.175f, 0.45f, 0.175f), new Vector3(0.25f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_L_Calf", ShapeType.SHAPE_CAPSULE, new Vector3(0.15f, 0.55f, 0.15f), new Vector3(0.25f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_R_Calf", ShapeType.SHAPE_CAPSULE, new Vector3(0.15f, 0.55f, 0.15f), new Vector3(0.25f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_Head", ShapeType.SHAPE_BOX, new Vector3(0.2f, 0.2f, 0.2f), new Vector3(0.1f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 0.0f)); CreateRagdollBone("Bip01_L_UpperArm", ShapeType.SHAPE_CAPSULE, new Vector3(0.15f, 0.35f, 0.15f), new Vector3(0.1f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_R_UpperArm", ShapeType.SHAPE_CAPSULE, new Vector3(0.15f, 0.35f, 0.15f), new Vector3(0.1f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_L_Forearm", ShapeType.SHAPE_CAPSULE, new Vector3(0.125f, 0.4f, 0.125f), new Vector3(0.2f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); CreateRagdollBone("Bip01_R_Forearm", ShapeType.SHAPE_CAPSULE, new Vector3(0.125f, 0.4f, 0.125f), new Vector3(0.2f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 90.0f)); Vector3 back = new Vector3(0f, 0f, -1f); Vector3 forward = new Vector3(0f, 0f, 1f); Vector3 left = new Vector3(-1f, 0f, 0f); Vector3 down = new Vector3(0f, -1f, 0f); Vector3 up = new Vector3(0f, 1f, 0f); // Create Constraints between bones CreateRagdollConstraint("Bip01_L_Thigh", "Bip01_Pelvis", ConstraintType.CONSTRAINT_CONETWIST, back, forward, new Vector2(45.0f, 45.0f), Vector2.Zero); CreateRagdollConstraint("Bip01_R_Thigh", "Bip01_Pelvis", ConstraintType.CONSTRAINT_CONETWIST, back, forward, new Vector2(45.0f, 45.0f), Vector2.Zero); CreateRagdollConstraint("Bip01_L_Calf", "Bip01_L_Thigh", ConstraintType.CONSTRAINT_HINGE, back, back, new Vector2(90.0f, 0.0f), Vector2.Zero); CreateRagdollConstraint("Bip01_R_Calf", "Bip01_R_Thigh", ConstraintType.CONSTRAINT_HINGE, back, back, new Vector2(90.0f, 0.0f), Vector2.Zero); CreateRagdollConstraint("Bip01_Spine1", "Bip01_Pelvis", ConstraintType.CONSTRAINT_HINGE, forward, forward, new Vector2(45.0f, 0.0f), new Vector2(-10.0f, 0.0f)); CreateRagdollConstraint("Bip01_Head", "Bip01_Spine1", ConstraintType.CONSTRAINT_CONETWIST, left, left, new Vector2(0.0f, 30.0f), Vector2.Zero); CreateRagdollConstraint("Bip01_L_UpperArm", "Bip01_Spine1", ConstraintType.CONSTRAINT_CONETWIST, down, up, new Vector2(45.0f, 45.0f), Vector2.Zero, false); CreateRagdollConstraint("Bip01_R_UpperArm", "Bip01_Spine1", ConstraintType.CONSTRAINT_CONETWIST, down, up, new Vector2(45.0f, 45.0f), Vector2.Zero, false); CreateRagdollConstraint("Bip01_L_Forearm", "Bip01_L_UpperArm", ConstraintType.CONSTRAINT_HINGE, back, back, new Vector2(90.0f, 0.0f), Vector2.Zero); CreateRagdollConstraint("Bip01_R_Forearm", "Bip01_R_UpperArm", ConstraintType.CONSTRAINT_HINGE, back, back, new Vector2(90.0f, 0.0f), Vector2.Zero); // Disable keyframe animation from all bones so that they will not interfere with the ragdoll AnimatedModel model = GetComponent<AnimatedModel>(); Skeleton skeleton = model.Skeleton; for (uint i = 0; i < skeleton.GetNumBones(); ++i) { skeleton.GetBone(i).Animated = false; } // Finally remove self from the scene node. Note that this must be the last operation performed in the function Remove(); } }
void nodeCollisionHandler(CollisionNodeToggler hitNode, Collider colliderObj, Collision collisionObj, ControllerColliderHit cchit, NodeCollisionEvent evt) { if (sendMessage) { // Inform any listening components that collision entry occured. switch (evt) { case NodeCollisionEvent.OnMouseEnter: SendMessage("OnComponentMouseEnter", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnMouseOver: SendMessage("OnComponentMouseOver", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnMouseExit: SendMessage("OnComponentMouseExit", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnMouseDown: SendMessage("OnComponentMouseDown", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnMouseUp: SendMessage("OnComponentMouseUp", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnMouseUpAsButton: SendMessage("OnComponentMouseUpAsButton", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnMouseDrag: SendMessage("OnComponentMouseDrag", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnTriggerEnter: SendMessage("OnComponentTriggerEnter", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnTriggerExit: SendMessage("OnComponentTriggerExit", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnTriggerStay: SendMessage("OnComponentTriggerStay", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnCollisionEnter: SendMessage("OnComponentCollisionEnter", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnCollisionExit: SendMessage("OnComponentCollisionExit", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnCollisionStay: SendMessage("OnComponentCollisionStay", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnControllerColliderHit: SendMessage("OnComponentControllerColliderHit", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; } } //else { switch (evt) { case NodeCollisionEvent.OnMouseEnter: OnComponentMouseEnter(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnMouseOver: OnComponentMouseOver(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnMouseExit: OnComponentMouseExit(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnMouseDown: OnComponentMouseDown(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnMouseUp: OnComponentMouseUp(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnMouseUpAsButton: OnComponentMouseUpAsButton(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnMouseDrag: OnComponentMouseDrag(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnTriggerEnter: OnComponentTriggerEnter(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnTriggerExit: OnComponentTriggerExit(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnTriggerStay: OnComponentTriggerStay(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnCollisionEnter: OnComponentCollisionEnter(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnCollisionExit: OnComponentCollisionExit(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnCollisionStay: OnComponentCollisionStay(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnControllerColliderHit: OnComponentControllerColliderHit(new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; } } }
void nodeCollisionHandler(CollisionNodeToggler hitNode, Collider colliderObj, Collision collisionObj, ControllerColliderHit cchit, NodeCollisionEvent evt) { if (sendMessage) { // Inform any listening components that collision entry occured. switch (evt) { case NodeCollisionEvent.OnMouseEnter: SendMessage("OnComponentMouseEnter", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnMouseOver: SendMessage("OnComponentMouseOver", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnMouseExit: SendMessage("OnComponentMouseExit", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnMouseDown: SendMessage("OnComponentMouseDown", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnMouseUp: SendMessage("OnComponentMouseUp", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnMouseUpAsButton: SendMessage("OnComponentMouseUpAsButton", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnMouseDrag: SendMessage("OnComponentMouseDrag", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnTriggerEnter: SendMessage("OnComponentTriggerEnter", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnTriggerExit: SendMessage("OnComponentTriggerExit", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnTriggerStay: SendMessage("OnComponentTriggerStay", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnCollisionEnter: SendMessage("OnComponentCollisionEnter", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnCollisionExit: SendMessage("OnComponentCollisionExit", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnCollisionStay: SendMessage("OnComponentCollisionStay", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; case NodeCollisionEvent.OnControllerColliderHit: SendMessage("OnComponentControllerColliderHit", new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit), SendMessageOptions.DontRequireReceiver); break; } } //else { switch (evt) { case NodeCollisionEvent.OnMouseEnter: OnComponentMouseEnter( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnMouseOver: OnComponentMouseOver( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnMouseExit: OnComponentMouseExit( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnMouseDown: OnComponentMouseDown( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnMouseUp: OnComponentMouseUp( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnMouseUpAsButton: OnComponentMouseUpAsButton( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnMouseDrag: OnComponentMouseDrag( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnTriggerEnter: OnComponentTriggerEnter( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnTriggerExit: OnComponentTriggerExit( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnTriggerStay: OnComponentTriggerStay( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnCollisionEnter: OnComponentCollisionEnter( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnCollisionExit: OnComponentCollisionExit( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnCollisionStay: OnComponentCollisionStay( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; case NodeCollisionEvent.OnControllerColliderHit: OnComponentControllerColliderHit( new CollisionNodeInfo(hitNode, colliderObj, collisionObj, cchit)); break; } } }