public PassiveRagdollSample(Microsoft.Xna.Framework.Game game) : base(game) { GraphicsScreen.DrawReticle = true; // Add game objects which allow to shoot balls and grab rigid bodies. _ballShooterObject = new BallShooterObject(Services) { Speed = 10 }; GameObjectService.Objects.Add(_ballShooterObject); _grabObject = new GrabObject(Services); GameObjectService.Objects.Add(_grabObject); var modelNode = ContentManager.Load<ModelNode>("Dude/Dude"); _meshNode = modelNode.GetSubtree().OfType<MeshNode>().First().Clone(); _meshNode.PoseLocal = new Pose(new Vector3F(0, 0, 0)); SampleHelper.EnablePerPixelLighting(_meshNode); GraphicsScreen.Scene.Children.Add(_meshNode); // Create a ragdoll for the Dude model. _ragdoll = new Ragdoll(); DudeRagdollCreator.Create(_meshNode.SkeletonPose, _ragdoll, Simulation, 0.571f); // Set the world space pose of the whole ragdoll. And copy the bone poses of the // current skeleton pose. _ragdoll.Pose = _meshNode.PoseWorld; _ragdoll.UpdateBodiesFromSkeleton(_meshNode.SkeletonPose); // Uncomment to disable dynamic movement (for debugging during ragdoll creation): //foreach (var body in _ragdoll.Bodies) // if (body != null) // body.MotionType = MotionType.Kinematic; // In this sample we use a passive ragdoll where we need joints to hold the // limbs together and limits to restrict angular movement. _ragdoll.EnableJoints(); _ragdoll.EnableLimits(); // Set all motors to constraint motors that only use damping. This adds a damping // effect to all ragdoll limbs. foreach (RagdollMotor motor in _ragdoll.Motors) { if (motor != null) { motor.Mode = RagdollMotorMode.Constraint; motor.ConstraintDamping = 5; motor.ConstraintSpring = 0; } } _ragdoll.EnableMotors(); // Add rigid bodies and the constraints of the ragdoll to the simulation. _ragdoll.AddToSimulation(Simulation); // Add a rigid body. var box = new RigidBody(new BoxShape(0.4f, 0.4f, 0.4f)) { Name = "Box", Pose = new Pose(new Vector3F(0, 3, 0)), }; Simulation.RigidBodies.Add(box); }
void GetClosestObject() { if (_grabables.Count == 0) { if (_nearestObject != null) { _nearestObject.GetComponent <Outline>().color = 0; _nearestObject = null; } return; } _nearestObject = _grabables[0]; for (int i = 0; i < _grabables.Count; i++) { float closestDistance = Vector3.Distance(transform.position, _nearestObject.transform.position); float thisDistance = Vector3.Distance(transform.position, _grabables[i].transform.position); if (thisDistance < closestDistance) { _nearestObject.GetComponent <Outline>().color = 0; _nearestObject = _grabables[i]; } } _nearestObject.GetComponent <Outline>().color = 2; }
public AvatarRagdollSample(Microsoft.Xna.Framework.Game game) : base(game) { SampleFramework.IsMouseVisible = false; // This sample uses for a DebugRenderer for the rendering rigid bodies. _debugRenderer = new DebugRenderer(GraphicsService, SpriteFont); // Add a custom game object which controls the camera. _cameraObject = new CameraObject(Services); _cameraObject.ResetPose(new Vector3F(0, 1, -3), ConstantsF.Pi, 0); GameObjectService.Objects.Add(_cameraObject); // Add some objects which allow the user to interact with the rigid bodies. _grabObject = new GrabObject(Services); _ballShooterObject = new BallShooterObject(Services) { Speed = 20 }; GameObjectService.Objects.Add(_grabObject); GameObjectService.Objects.Add(_ballShooterObject); // Add some default force effects. Simulation.ForceEffects.Add(new Gravity()); Simulation.ForceEffects.Add(new Damping()); // Add a ground plane in the simulation. Simulation.RigidBodies.Add(new RigidBody(new PlaneShape(Vector3F.UnitY, 0)) { MotionType = MotionType.Static }); // Create a random avatar. _avatarDescription = AvatarDescription.CreateRandom(); _avatarRenderer = new AvatarRenderer(_avatarDescription); }
public AvatarRagdollSample(Microsoft.Xna.Framework.Game game) : base(game) { // This sample uses for a DebugRenderer for the rendering rigid bodies. _debugRenderer = new DebugRenderer(GraphicsService, SpriteFont); // Add a custom game object which controls the camera. _cameraObject = new CameraObject(Services); _cameraObject.ResetPose(new Vector3F(0, 1, -3), ConstantsF.Pi, 0); GameObjectService.Objects.Add(_cameraObject); // Add some objects which allow the user to interact with the rigid bodies. _grabObject = new GrabObject(Services); _ballShooterObject = new BallShooterObject(Services) { Speed = 20 }; GameObjectService.Objects.Add(_grabObject); GameObjectService.Objects.Add(_ballShooterObject); // Add some default force effects. Simulation.ForceEffects.Add(new Gravity()); Simulation.ForceEffects.Add(new Damping()); // Add a ground plane in the simulation. Simulation.RigidBodies.Add(new RigidBody(new PlaneShape(Vector3F.UnitY, 0)) { MotionType = MotionType.Static }); // Create a random avatar. _avatarDescription = AvatarDescription.CreateRandom(); _avatarRenderer = new AvatarRenderer(_avatarDescription); }
public RibbonSample(Microsoft.Xna.Framework.Game game) : base(game) { GraphicsScreen.DrawReticle = true; _grabObject = new GrabObject(Services); GameObjectService.Objects.Add(_grabObject); // Load a sphere model. _modelNode = ContentManager.Load <ModelNode>("Particles/Sphere").Clone(); GraphicsScreen.Scene.Children.Add(_modelNode); // Add gravity and damping to the physics simulation. Simulation.ForceEffects.Add(new Gravity()); Simulation.ForceEffects.Add(new Damping()); // Create a rigid body for the sphere. _rigidBody = new RigidBody(new SphereShape(0.5f)) { Pose = new Pose(new Vector3F(-3, 0, 0)), LinearVelocity = new Vector3F(10, 10, -3f), }; Simulation.RigidBodies.Add(_rigidBody); _particleSystem = RibbonEffect.Create(ContentManager); ParticleSystemService.ParticleSystems.Add(_particleSystem); _particleSystemNode = new ParticleSystemNode(_particleSystem); GraphicsScreen.Scene.Children.Add(_particleSystemNode); }
private void Start() { player = GameObject.FindGameObjectWithTag("Player").GetComponent <GrabObject>(); if (GameObject.FindGameObjectWithTag("ItemSpawner") != null) { spawner = GameObject.FindGameObjectWithTag("ItemSpawner").GetComponent <SpawnerScript>(); } }
void Start() { if (oceanTrackerObject != null) { oceanTracker = oceanTrackerObject.GetComponent <OceanTracker>(); } character = player.GetComponent <CharacterController>(); grabObject = player.GetComponent <GrabObject>(); }
public void Grab() { foreach (GrabObject go in grab_list) { if (go.Grab(this)) { currentlyGrabbedObject = go; } } }
public ReferenceFrameSample(Microsoft.Xna.Framework.Game game) : base(game) { GraphicsScreen.DrawReticle = true; _grabObject = new GrabObject(Services); GameObjectService.Objects.Add(_grabObject); CreateParticleSystem(); }
// Use this for initialization void Start() { grabObject = gameObject.GetComponent <GrabObject>(); foreach (Transform i in GameObject.Find("lures").GetComponentsInChildren <Transform>()) { lureZones.Add(i); } // done populating waypoints StartCoroutine(CheckInTheZone()); }
private void OnTriggerEnter(Collider other) { IForkable forkable = other.GetComponent <IForkable>(); if (MyGrabObject.Grabbed && _grabbedObject == null && forkable != null) { other.enabled = false; _grabbedObject = (GrabObject)forkable; _grabbedObject.Grab(); } }
/// <summary> /// Release the grabbed object /// </summary> void ReleaseGrab() { _isGrabbing = false; StartAnimateClose(); if (_grabbedObject == null) { return; } _grabbedObject.Release(_handMover.Rigidbody.velocity); _grabbedObject = null; }
private void Awake() { myPlayerControl = GetComponent <PlayerControl>(); charController = GetComponent <CharacterController>(); grabObject = GetComponent <GrabObject>(); // kinemaControl = GetComponent<KinemaControl>(); checkers = myPlayerControl.checkers; if (!isPlayer) { simpleIA = GetComponent <SimpleIA>(); } }
protected void UpdateActionInput(SixenseInput.Controller controller) { Vector3 currentPosition = GetCurrentColliderPosition(); Quaternion currentRotation = GetCurrentColliderRotation(); Velocity(); if (isHoldingObject && !controller.GetButton(SixenseButtons.TRIGGER)) { Throw(); isHoldingObject = false; } if (!isHoldingObject) { foreach (GameObject o in GameObject.FindGameObjectsWithTag("Grabbable")) { float dist = Vector3.Distance(o.transform.position, currentPosition); if (dist < minGrabDistance) { closestObject = o; } } } if ((isHoldingObject && controller.GetButton(SixenseButtons.TRIGGER)) || (closestObject != null && Vector3.Distance(closestObject.transform.position, currentPosition) < minGrabDistance && controller.GetButton(SixenseButtons.TRIGGER))) { if (closestObject.GetComponent <Rigidbody>() && closestObject.GetComponent <Rigidbody>().isKinematic) { return; } grabObject = closestObject.GetComponent <GrabObject>(); if (grabObject && grabObject.isEnabled) { grabObject.SetRigidbodyDetectionCollisions(false); closestObject.transform.position = currentPosition + closestObject.transform.TransformDirection(grabObject.GetPosition(Hand)); closestObject.transform.rotation = currentRotation * Quaternion.Euler(grabObject.GetRotation(Hand)); } else { closestObject.transform.position = currentPosition; closestObject.transform.rotation = currentRotation; } isHoldingObject = true; } }
protected PhysicsSample(Microsoft.Xna.Framework.Game game) : base(game) { GraphicsScreen.ClearBackground = true; GraphicsScreen.BackgroundColor = Color.White; GraphicsScreen.DrawReticle = true; SetCamera(new Vector3F(0, 2, 10), 0, 0); // Add game objects which implement simple physics interactions. _grabObject = new GrabObject(Services); _ballShooterObject = new BallShooterObject(Services); _explosionObject = new ExplosionObject(Services); GameObjectService.Objects.Add(_grabObject); GameObjectService.Objects.Add(_ballShooterObject); GameObjectService.Objects.Add(_explosionObject); }
// Throw the held object once player lets go based on hand velocity // TODO: Take into account weight (1 unit = kilogram) of held object protected void Throw() { if (closestObject.GetComponent <Rigidbody>()) { grabObject = closestObject.GetComponent <GrabObject>(); float additionalThrowForce = 0; if (grabObject) { additionalThrowForce += grabObject.additionalThrowForce; grabObject.SetRigidbodyDetectionCollisions(true); } closestObject.GetComponent <Rigidbody>().AddForce(handDirection * handVelocity * (throwForce + additionalThrowForce)); } }
void Grab() { _isGrabbing = true; if (_grabables.Count == 0) { StartAnimateOpen(1); return; } _grabbedObject = _nearestObject; _nearestObject.GetComponent <Outline>().color = 0; _grabbedObject.Grab(); StartAnimateOpen(0.17f); // eventually base this number on a value in GrabObject }
private void SpawnRingR() { bool isSpawn = HasControllerR() && HasGameObject(m_Ring); if (!isSpawn) { return; } if (m_ControllerR.IsGrabDown()) { Vector3 pos = m_ControllerR.GetTransform().position; Quaternion rot = m_ControllerR.GetTransform().rotation; GrabObject lasso = Instantiate(m_Ring, pos, rot).GetComponent <GrabObject>(); lasso.AttachController(m_ControllerObjectR); } }
void AssignInstructions(GrabObject targetObject) { if (objectNameLabel) { objectNameLabel.text = targetObject.ObjectName; } if (objectInstructionsLabel) { if (grabObject) { objectInstructionsLabel.text = targetObject.ObjectInstructions; } else { objectInstructionsLabel.text = "Grip Trigger to grab"; } } }
private void Start() { localRotation = flashlightRoot.localRotation; localPosition = flashlightRoot.localPosition; skeletons = new OVRSkeleton[2]; hands = new OVRHand[2]; externalController = GetComponent <GrabObject>(); if (externalController) { externalController.GrabbedObjectDelegate += Grab; externalController.ReleasedObjectDelegate += Release; } if (GetComponent <Flashlight>()) { GetComponent <Flashlight>().EnableFlashlight(false); } }
private void Update() { if (_grabbedObject != null) { if (_grabbedObject.gameObject == null) { _grabbedObject = null; return; } _grabbedObject.transform.position = transform.position; if (!MyGrabObject.Grabbed) { _grabbedObject.Release(Vector3.zero); _grabbedObject = null; _grabbedObject.gameObject.layer = GrabObject.GRABBEDLAYER; _grabbedObject.GetComponent <Collider>().enabled = true; } } }
public void Release(bool is_left) { if (currentlyGrabbedObject) { Vector3 vel, ang_vel; if (is_left) { vel = SteamVR_Input._default.inActions.Pose.GetVelocity(SteamVR_Input_Sources.LeftHand); ang_vel = SteamVR_Input._default.inActions.Pose.GetAngularVelocity(SteamVR_Input_Sources.LeftHand); } else { vel = SteamVR_Input._default.inActions.Pose.GetVelocity(SteamVR_Input_Sources.RightHand); ang_vel = SteamVR_Input._default.inActions.Pose.GetAngularVelocity(SteamVR_Input_Sources.RightHand); } currentlyGrabbedObject.Release(vel, ang_vel); } currentlyGrabbedObject = null; }
void OnTriggerStay(Collider col) { GrabObject g = col.GetComponent <GrabObject>(); if (g) { Debug.Log(g.name + " is inside"); if (g.grab && (!GetComponent <FixedJoint>())) { Debug.Log("fixed joint added"); grabbed = true; FixedJoint Joint = gameObject.AddComponent <FixedJoint>(); Joint.connectedBody = g.GetComponent <Rigidbody>(); Joint.breakForce = 1000; } if (!g.grab && GetComponent <FixedJoint>()) { grabbed = false; Debug.Log("fixed joint destroyd"); Destroy(GetComponent <FixedJoint>()); } } }
// Update is called once per frame void Update() { if (Controller.GetHairTriggerUp()) { if (currently_grabbing != null) { currently_grabbing.release(); currently_grabbing = null; } } if (Controller.GetHairTriggerDown()) { foreach (GrabObject grabo in grab_list) { if (grabo.grab_try_the_waters()) { grabo.grab(gameObject); currently_grabbing = grabo; break; } } } }
public AdvancedAvatarRagdollSample(Microsoft.Xna.Framework.Game game) : base(game) { SampleFramework.IsMouseVisible = false; // This sample uses for a DebugRenderer to draw text and rigid bodies. _debugRenderer = new DebugRenderer(GraphicsService, SpriteFont) { DefaultColor = Color.Black, DefaultTextPosition = new Vector2F(10), }; // Add a custom game object which controls the camera. _cameraObject = new CameraObject(Services); _cameraObject.ResetPose(new Vector3(0, 1, -3), ConstantsF.Pi, 0); GameObjectService.Objects.Add(_cameraObject); // Add some objects which allow the user to interact with the rigid bodies. _grabObject = new GrabObject(Services); _ballShooterObject = new BallShooterObject(Services) { Speed = 20 }; GameObjectService.Objects.Add(_grabObject); GameObjectService.Objects.Add(_ballShooterObject); // Add some default force effects. Simulation.ForceEffects.Add(new Gravity()); Simulation.ForceEffects.Add(new Damping()); // Create a random avatar. _avatarDescription = AvatarDescription.CreateRandom(); _avatarRenderer = new AvatarRenderer(_avatarDescription); // Use the "Wave" animation preset. var avatarAnimation = new AvatarAnimation(AvatarAnimationPreset.Wave); _expressionAnimation = new AnimationClip <AvatarExpression>(new WrappedAvatarExpressionAnimation(avatarAnimation)) { LoopBehavior = LoopBehavior.Cycle, Duration = TimeSpan.MaxValue, }; _skeletonAnimation = new AnimationClip <SkeletonPose>(new WrappedAvatarSkeletonAnimation(avatarAnimation)) { LoopBehavior = LoopBehavior.Cycle, Duration = TimeSpan.MaxValue, }; // Add a ground plane in the simulation. Simulation.RigidBodies.Add(new RigidBody(new PlaneShape(Vector3.UnitY, 0)) { MotionType = MotionType.Static }); // Distribute a few dynamic spheres and boxes across the landscape. SphereShape sphereShape = new SphereShape(0.3f); for (int i = 0; i < 10; i++) { Vector3 position = RandomHelper.Random.NextVector3(-10, 10); position.Y = 1; Simulation.RigidBodies.Add(new RigidBody(sphereShape) { Pose = new Pose(position) }); } BoxShape boxShape = new BoxShape(0.6f, 0.6f, 0.6f); for (int i = 0; i < 10; i++) { Vector3 position = RandomHelper.Random.NextVector3(-10, 10); position.Y = 1; Simulation.RigidBodies.Add(new RigidBody(boxShape) { Pose = new Pose(position) }); } }
public AdvancedAvatarRagdollSample(Microsoft.Xna.Framework.Game game) : base(game) { SampleFramework.IsMouseVisible = false; // This sample uses for a DebugRenderer to draw text and rigid bodies. _debugRenderer = new DebugRenderer(GraphicsService, SpriteFont) { DefaultColor = Color.Black, DefaultTextPosition = new Vector2F(10), }; // Add a custom game object which controls the camera. _cameraObject = new CameraObject(Services); _cameraObject.ResetPose(new Vector3F(0, 1, -3), ConstantsF.Pi, 0); GameObjectService.Objects.Add(_cameraObject); // Add some objects which allow the user to interact with the rigid bodies. _grabObject = new GrabObject(Services); _ballShooterObject = new BallShooterObject(Services) { Speed = 20 }; GameObjectService.Objects.Add(_grabObject); GameObjectService.Objects.Add(_ballShooterObject); // Add some default force effects. Simulation.ForceEffects.Add(new Gravity()); Simulation.ForceEffects.Add(new Damping()); // Create a random avatar. _avatarDescription = AvatarDescription.CreateRandom(); _avatarRenderer = new AvatarRenderer(_avatarDescription); // Use the "Wave" animation preset. var avatarAnimation = new AvatarAnimation(AvatarAnimationPreset.Wave); _expressionAnimation = new AnimationClip<AvatarExpression>(new WrappedAvatarExpressionAnimation(avatarAnimation)) { LoopBehavior = LoopBehavior.Cycle, Duration = TimeSpan.MaxValue, }; _skeletonAnimation = new AnimationClip<SkeletonPose>(new WrappedAvatarSkeletonAnimation(avatarAnimation)) { LoopBehavior = LoopBehavior.Cycle, Duration = TimeSpan.MaxValue, }; // Add a ground plane in the simulation. Simulation.RigidBodies.Add(new RigidBody(new PlaneShape(Vector3F.UnitY, 0)) { MotionType = MotionType.Static }); // Distribute a few dynamic spheres and boxes across the landscape. SphereShape sphereShape = new SphereShape(0.3f); for (int i = 0; i < 10; i++) { Vector3F position = RandomHelper.Random.NextVector3F(-10, 10); position.Y = 1; Simulation.RigidBodies.Add(new RigidBody(sphereShape) { Pose = new Pose(position) }); } BoxShape boxShape = new BoxShape(0.6f, 0.6f, 0.6f); for (int i = 0; i < 10; i++) { Vector3F position = RandomHelper.Random.NextVector3F(-10, 10); position.Y = 1; Simulation.RigidBodies.Add(new RigidBody(boxShape) { Pose = new Pose(position) }); } }
private void Update() { switch (_holdingObject) { case true: var currentMousePosition = headCamera.ScreenToWorldPoint(Input.mousePosition); currentMousePosition.z = 2.0f; _mouseTracker.transform.position = currentMousePosition; if (Input.GetMouseButtonUp(1)) { RaycastHit hit; if (Physics.Raycast(currentMousePosition, Vector3.back, out hit, 5, _roomMask)) { var room = hit.point; room.y = hit.transform.position.y - 1.2f; room.z = 0; _grabbedObject.transform.position = room; } else _grabbedObject.transform.position = _oldPositionOfPickup; _grabbedObject.Drop(); _grabbedObject = null; _holdingObject = false; _canGrab = true; } else { _grabbedObject.transform.position = Vector3.Slerp(_grabbedObject.transform.position, _mouseTracker.transform.position + new Vector3(0, -1.2f, 0), Time.deltaTime * 15.0f); } break; case false: if (Input.GetMouseButtonDown(0)) { RaycastHit rayHit; var hit = Physics.Raycast(headCamera.ScreenPointToRay(Input.mousePosition), out rayHit, 50.0f, _roomMask); if (hit && rayHit.collider.tag == "Room") { var position = rayHit.collider.transform.position; position.z = 1; position.y -= 1; blobBank.ActivateWorker(position); } } else if (Input.GetMouseButtonDown(1)) { if (_canGrab == false) break; RaycastHit rayHit; var hit = Physics.Raycast(headCamera.ScreenPointToRay(Input.mousePosition), out rayHit, 50.0f, _workerMask); if (hit && rayHit.collider.tag == "Worker") { var worker = rayHit.transform.GetComponent<Worker>(); _oldPositionOfPickup = worker.transform.position; worker.PickUp(); _grabbedObject = worker; _holdingObject = true; } } break; } }
private void Awake() { anim = GetComponent <Animator>(); grabObject = GetComponent <GrabObject>(); }
public ActiveRagdollSample(Microsoft.Xna.Framework.Game game) : base(game) { GraphicsScreen.DrawReticle = true; // Add game objects which allow to shoot balls and grab rigid bodies. _ballShooterObject = new BallShooterObject(Services) { Speed = 10 }; GameObjectService.Objects.Add(_ballShooterObject); _grabObject = new GrabObject(Services); GameObjectService.Objects.Add(_grabObject); var modelNode = ContentManager.Load<ModelNode>("Dude/Dude"); _meshNode = modelNode.GetSubtree().OfType<MeshNode>().First().Clone(); _meshNode.PoseLocal = new Pose(new Vector3F(0, 0, 0)); SampleHelper.EnablePerPixelLighting(_meshNode); GraphicsScreen.Scene.Children.Add(_meshNode); // Create a copy of the dude's skeleton. _targetSkeletonPose = SkeletonPose.Create(_meshNode.Mesh.Skeleton); // Animate the _targetSkeletonPose. var animations = _meshNode.Mesh.Animations; var loopingAnimation = new AnimationClip<SkeletonPose>(animations.Values.First()) { LoopBehavior = LoopBehavior.Cycle, Duration = TimeSpan.MaxValue, }; AnimationService.StartAnimation(loopingAnimation, (IAnimatableProperty)_targetSkeletonPose); // Create a ragdoll for the Dude model. _ragdoll = new Ragdoll(); DudeRagdollCreator.Create(_targetSkeletonPose, _ragdoll, Simulation, 0.571f); // Set the world space pose of the whole ragdoll. And copy the bone poses of the // current skeleton pose. _ragdoll.Pose = _meshNode.PoseWorld; _ragdoll.UpdateBodiesFromSkeleton(_targetSkeletonPose); // In this sample we use an active ragdoll. We need joints because constraint ragdoll // motors only affect the body rotations. _ragdoll.EnableJoints(); // We disable limits. If limits are enabled, the ragdoll could get unstable if // the animation tries to move a limb beyond an allowed limit. (This happens if // a pose in the animation violates one of our limits.) _ragdoll.DisableLimits(); // Set all motors to constraint motors. Constraint motors are like springs that // rotate the limbs to a target position. foreach (RagdollMotor motor in _ragdoll.Motors) { if (motor != null) { motor.Mode = RagdollMotorMode.Constraint; motor.ConstraintDamping = 10000; motor.ConstraintSpring = 100000; } } _ragdoll.EnableMotors(); // Add rigid bodies and the constraints of the ragdoll to the simulation. _ragdoll.AddToSimulation(Simulation); // Add a rigid body. var box = new RigidBody(new BoxShape(0.4f, 0.4f, 0.4f)) { Name = "Box", Pose = new Pose(new Vector3F(0, 3, 0)), }; Simulation.RigidBodies.Add(box); }
public KinematicRagdollSample(Microsoft.Xna.Framework.Game game) : base(game) { GraphicsScreen.DrawReticle = true; // Add game objects which allow to shoot balls and grab rigid bodies. _ballShooterObject = new BallShooterObject(Services) { Speed = 10 }; GameObjectService.Objects.Add(_ballShooterObject); _grabObject = new GrabObject(Services); GameObjectService.Objects.Add(_grabObject); var modelNode = ContentManager.Load<ModelNode>("Dude/Dude"); _meshNode = modelNode.GetSubtree().OfType<MeshNode>().First().Clone(); _meshNode.PoseLocal = new Pose(new Vector3F(0, 0, 0), Matrix33F.CreateRotationY(ConstantsF.Pi)); SampleHelper.EnablePerPixelLighting(_meshNode); GraphicsScreen.Scene.Children.Add(_meshNode); var animations = _meshNode.Mesh.Animations; var loopingAnimation = new AnimationClip<SkeletonPose>(animations.Values.First()) { LoopBehavior = LoopBehavior.Cycle, Duration = TimeSpan.MaxValue, }; var animationController = AnimationService.StartAnimation(loopingAnimation, (IAnimatableProperty)_meshNode.SkeletonPose); animationController.UpdateAndApply(); // Create a ragdoll for the Dude model. _ragdoll = new Ragdoll(); DudeRagdollCreator.Create(_meshNode.SkeletonPose, _ragdoll, Simulation, 0.571f); // Set the world space pose of the whole ragdoll. And copy the bone poses of the // current skeleton pose. _ragdoll.Pose = _meshNode.PoseWorld; _ragdoll.UpdateBodiesFromSkeleton(_meshNode.SkeletonPose); // Set all bodies to kinematic - they should not be affected by forces. foreach (var body in _ragdoll.Bodies) { if (body != null) { body.MotionType = MotionType.Kinematic; } } // Set all motors to velocity motors. Velocity motors change RigidBody.LinearVelocity // RigidBody.AngularVelocity to move the rigid bodies. foreach (RagdollMotor motor in _ragdoll.Motors) { if (motor != null) { motor.Mode = RagdollMotorMode.Velocity; } } _ragdoll.EnableMotors(); // In this sample, we do not need joints or limits. _ragdoll.DisableJoints(); _ragdoll.DisableLimits(); // Add ragdoll rigid bodies to the simulation. _ragdoll.AddToSimulation(Simulation); // Add a rigid body. var box = new RigidBody(new BoxShape(0.4f, 0.4f, 0.4f)) { Name = "Box", Pose = new Pose(new Vector3F(0, 3, 0)), }; Simulation.RigidBodies.Add(box); }
/// <summary> /// This function is called when the object becomes enabled and active. /// </summary> protected virtual void OnEnable() { instance = (GrabObject)target; }
public IKPhysicsSample(Microsoft.Xna.Framework.Game game) : base(game) { GraphicsScreen.DrawReticle = true; // Add game objects which allows to grab rigid bodies. _grabObject = new GrabObject(Services); GameObjectService.Objects.Add(_grabObject); // Add Dude model. var modelNode = ContentManager.Load<ModelNode>("Dude/Dude"); _meshNode = modelNode.GetSubtree().OfType<MeshNode>().First().Clone(); _meshNode.PoseLocal = new Pose(new Vector3F(0, 0, 0)); SampleHelper.EnablePerPixelLighting(_meshNode); GraphicsScreen.Scene.Children.Add(_meshNode); // Create a ragdoll for the Dude model. _ragdoll = new Ragdoll(); DudeRagdollCreator.Create(_meshNode.SkeletonPose, _ragdoll, Simulation, 0.571f); // Set the initial world space pose of the whole ragdoll. And copy the bone poses of the // current skeleton pose. _ragdoll.Pose = _meshNode.PoseWorld; _ragdoll.UpdateBodiesFromSkeleton(_meshNode.SkeletonPose); // Enable constraints (joints and limits, no motors) _ragdoll.EnableJoints(); _ragdoll.EnableLimits(); _ragdoll.DisableMotors(); foreach (var body in _ragdoll.Bodies) { if (body != null) { // Disable rigid body sleeping. (If we leave it enabled, the simulation might // disable slow bodies before they reach their IK goal.) body.CanSleep = false; // Disable collisions response. body.CollisionResponseEnabled = false; } } // Add rigid bodies and the constraints of the ragdoll to the simulation. _ragdoll.AddToSimulation(Simulation); // Disable all force effects (default gravity and damping). Simulation.ForceEffects.Clear(); // Create constraints which hold selected bodies at their current position // relative to the world. // To constrain the position + orientation, we use a FixedJoint. foreach (var boneName in new[] { "Pelvis" }) { var ragdollBody = _ragdoll.Bodies[_meshNode.SkeletonPose.Skeleton.GetIndex(boneName)]; var ikJoint = new FixedJoint { AnchorPoseALocal = ragdollBody.Pose, BodyA = Simulation.World, AnchorPoseBLocal = Pose.Identity, BodyB = ragdollBody, CollisionEnabled = false, MaxForce = 1000, }; _ikJoints.Add(ikJoint); Simulation.Constraints.Add(ikJoint); } // To constrain only the position, we use a BallJoint. foreach(var boneName in new[] { "L_Hand", "R_Hand", "L_Ankle1", "R_Ankle" }) { var ragdollBody = _ragdoll.Bodies[_meshNode.SkeletonPose.Skeleton.GetIndex(boneName)]; var ikJoint = new BallJoint { AnchorPositionALocal = ragdollBody.Pose.Position, BodyA = Simulation.World, AnchorPositionBLocal = Vector3F.Zero, BodyB = ragdollBody, CollisionEnabled = false, MaxForce = 1000, }; _ikJoints.Add(ikJoint); Simulation.Constraints.Add(ikJoint); } }
public KinematicRagdollSample(Microsoft.Xna.Framework.Game game) : base(game) { GraphicsScreen.DrawReticle = true; // Add game objects which allow to shoot balls and grab rigid bodies. _ballShooterObject = new BallShooterObject(Services) { Speed = 10 }; GameObjectService.Objects.Add(_ballShooterObject); _grabObject = new GrabObject(Services); GameObjectService.Objects.Add(_grabObject); var modelNode = ContentManager.Load <ModelNode>("Dude/Dude"); _meshNode = modelNode.GetSubtree().OfType <MeshNode>().First().Clone(); _meshNode.PoseLocal = new Pose(new Vector3F(0, 0, 0), Matrix33F.CreateRotationY(ConstantsF.Pi)); SampleHelper.EnablePerPixelLighting(_meshNode); GraphicsScreen.Scene.Children.Add(_meshNode); var animations = _meshNode.Mesh.Animations; var loopingAnimation = new AnimationClip <SkeletonPose>(animations.Values.First()) { LoopBehavior = LoopBehavior.Cycle, Duration = TimeSpan.MaxValue, }; var animationController = AnimationService.StartAnimation(loopingAnimation, (IAnimatableProperty)_meshNode.SkeletonPose); animationController.UpdateAndApply(); // Create a ragdoll for the Dude model. _ragdoll = new Ragdoll(); DudeRagdollCreator.Create(_meshNode.SkeletonPose, _ragdoll, Simulation, 0.571f); // Set the world space pose of the whole ragdoll. And copy the bone poses of the // current skeleton pose. _ragdoll.Pose = _meshNode.PoseWorld; _ragdoll.UpdateBodiesFromSkeleton(_meshNode.SkeletonPose); // Set all bodies to kinematic - they should not be affected by forces. foreach (var body in _ragdoll.Bodies) { if (body != null) { body.MotionType = MotionType.Kinematic; } } // Set all motors to velocity motors. Velocity motors change RigidBody.LinearVelocity // RigidBody.AngularVelocity to move the rigid bodies. foreach (RagdollMotor motor in _ragdoll.Motors) { if (motor != null) { motor.Mode = RagdollMotorMode.Velocity; } } _ragdoll.EnableMotors(); // In this sample, we do not need joints or limits. _ragdoll.DisableJoints(); _ragdoll.DisableLimits(); // Add ragdoll rigid bodies to the simulation. _ragdoll.AddToSimulation(Simulation); // Add a rigid body. var box = new RigidBody(new BoxShape(0.4f, 0.4f, 0.4f)) { Name = "Box", Pose = new Pose(new Vector3F(0, 3, 0)), }; Simulation.RigidBodies.Add(box); }
public PassiveRagdollSample(Microsoft.Xna.Framework.Game game) : base(game) { GraphicsScreen.DrawReticle = true; // Add game objects which allow to shoot balls and grab rigid bodies. _ballShooterObject = new BallShooterObject(Services) { Speed = 10 }; GameObjectService.Objects.Add(_ballShooterObject); _grabObject = new GrabObject(Services); GameObjectService.Objects.Add(_grabObject); var modelNode = ContentManager.Load <ModelNode>("Dude/Dude"); _meshNode = modelNode.GetSubtree().OfType <MeshNode>().First().Clone(); _meshNode.PoseLocal = new Pose(new Vector3F(0, 0, 0)); SampleHelper.EnablePerPixelLighting(_meshNode); GraphicsScreen.Scene.Children.Add(_meshNode); // Create a ragdoll for the Dude model. _ragdoll = new Ragdoll(); DudeRagdollCreator.Create(_meshNode.SkeletonPose, _ragdoll, Simulation, 0.571f); // Set the world space pose of the whole ragdoll. And copy the bone poses of the // current skeleton pose. _ragdoll.Pose = _meshNode.PoseWorld; _ragdoll.UpdateBodiesFromSkeleton(_meshNode.SkeletonPose); // Uncomment to disable dynamic movement (for debugging during ragdoll creation): //foreach (var body in _ragdoll.Bodies) // if (body != null) // body.MotionType = MotionType.Kinematic; // In this sample we use a passive ragdoll where we need joints to hold the // limbs together and limits to restrict angular movement. _ragdoll.EnableJoints(); _ragdoll.EnableLimits(); // Set all motors to constraint motors that only use damping. This adds a damping // effect to all ragdoll limbs. foreach (RagdollMotor motor in _ragdoll.Motors) { if (motor != null) { motor.Mode = RagdollMotorMode.Constraint; motor.ConstraintDamping = 5; motor.ConstraintSpring = 0; } } _ragdoll.EnableMotors(); // Add rigid bodies and the constraints of the ragdoll to the simulation. _ragdoll.AddToSimulation(Simulation); // Add a rigid body. var box = new RigidBody(new BoxShape(0.4f, 0.4f, 0.4f)) { Name = "Box", Pose = new Pose(new Vector3F(0, 3, 0)), }; Simulation.RigidBodies.Add(box); }
void Start() { _handMover = transform.parent.GetComponent <HandMover>(); _nearestObject = null; }
public ActiveRagdollSample(Microsoft.Xna.Framework.Game game) : base(game) { GraphicsScreen.DrawReticle = true; // Add game objects which allow to shoot balls and grab rigid bodies. _ballShooterObject = new BallShooterObject(Services) { Speed = 10 }; GameObjectService.Objects.Add(_ballShooterObject); _grabObject = new GrabObject(Services); GameObjectService.Objects.Add(_grabObject); var modelNode = ContentManager.Load <ModelNode>("Dude/Dude"); _meshNode = modelNode.GetSubtree().OfType <MeshNode>().First().Clone(); _meshNode.PoseLocal = new Pose(new Vector3F(0, 0, 0)); SampleHelper.EnablePerPixelLighting(_meshNode); GraphicsScreen.Scene.Children.Add(_meshNode); // Create a copy of the dude's skeleton. _targetSkeletonPose = SkeletonPose.Create(_meshNode.Mesh.Skeleton); // Animate the _targetSkeletonPose. var animations = _meshNode.Mesh.Animations; var loopingAnimation = new AnimationClip <SkeletonPose>(animations.Values.First()) { LoopBehavior = LoopBehavior.Cycle, Duration = TimeSpan.MaxValue, }; AnimationService.StartAnimation(loopingAnimation, (IAnimatableProperty)_targetSkeletonPose); // Create a ragdoll for the Dude model. _ragdoll = new Ragdoll(); DudeRagdollCreator.Create(_targetSkeletonPose, _ragdoll, Simulation, 0.571f); // Set the world space pose of the whole ragdoll. And copy the bone poses of the // current skeleton pose. _ragdoll.Pose = _meshNode.PoseWorld; _ragdoll.UpdateBodiesFromSkeleton(_targetSkeletonPose); // In this sample we use an active ragdoll. We need joints because constraint ragdoll // motors only affect the body rotations. _ragdoll.EnableJoints(); // We disable limits. If limits are enabled, the ragdoll could get unstable if // the animation tries to move a limb beyond an allowed limit. (This happens if // a pose in the animation violates one of our limits.) _ragdoll.DisableLimits(); // Set all motors to constraint motors. Constraint motors are like springs that // rotate the limbs to a target position. foreach (RagdollMotor motor in _ragdoll.Motors) { if (motor != null) { motor.Mode = RagdollMotorMode.Constraint; motor.ConstraintDamping = 10000; motor.ConstraintSpring = 100000; } } _ragdoll.EnableMotors(); // Add rigid bodies and the constraints of the ragdoll to the simulation. _ragdoll.AddToSimulation(Simulation); // Add a rigid body. var box = new RigidBody(new BoxShape(0.4f, 0.4f, 0.4f)) { Name = "Box", Pose = new Pose(new Vector3F(0, 3, 0)), }; Simulation.RigidBodies.Add(box); }
// Use this for initialization void Start() { isDestroy = false; grab = GetComponent <GrabObject> (); //gameObject.GetComponent<Rigidbody> ().useGravity = false; }