示例#1
0
    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;
    }
示例#3
0
    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);
    }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
 private void Start()
 {
     player = GameObject.FindGameObjectWithTag("Player").GetComponent <GrabObject>();
     if (GameObject.FindGameObjectWithTag("ItemSpawner") != null)
     {
         spawner = GameObject.FindGameObjectWithTag("ItemSpawner").GetComponent <SpawnerScript>();
     }
 }
示例#7
0
 void Start()
 {
     if (oceanTrackerObject != null)
     {
         oceanTracker = oceanTrackerObject.GetComponent <OceanTracker>();
     }
     character  = player.GetComponent <CharacterController>();
     grabObject = player.GetComponent <GrabObject>();
 }
示例#8
0
 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();
        }
示例#10
0
    // 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());
    }
示例#11
0
    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;
    }
示例#13
0
 private void Awake()
 {
     myPlayerControl = GetComponent <PlayerControl>();
     charController  = GetComponent <CharacterController>();
     grabObject      = GetComponent <GrabObject>();
     // kinemaControl = GetComponent<KinemaControl>();
     checkers = myPlayerControl.checkers;
     if (!isPlayer)
     {
         simpleIA = GetComponent <SimpleIA>();
     }
 }
示例#14
0
    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;
        }
    }
示例#15
0
        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);
        }
示例#16
0
    // 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
    }
示例#18
0
    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);
        }
    }
示例#19
0
 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);
        }
    }
示例#21
0
    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;
            }
        }
    }
示例#22
0
    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;
    }
示例#23
0
    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>());
            }
        }
    }
示例#24
0
    // 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)
                });
            }
        }
示例#26
0
    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) });
      }
    }
示例#27
0
    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;
        }
    }
示例#28
0
 private void Awake()
 {
     anim       = GetComponent <Animator>();
     grabObject = GetComponent <GrabObject>();
 }
示例#29
0
    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);
    }
示例#30
0
    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);
    }
示例#31
0
 /// <summary>
 /// This function is called when the object becomes enabled and active.
 /// </summary>
 protected virtual void OnEnable()
 {
     instance = (GrabObject)target;
 }
示例#32
0
    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);
        }
示例#34
0
        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;
 }
示例#36
0
        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);
        }
示例#37
0
 // Use this for initialization
 void Start()
 {
     isDestroy = false;
     grab      = GetComponent <GrabObject> ();
     //gameObject.GetComponent<Rigidbody> ().useGravity = false;
 }