コード例 #1
0
        public override void update()
        {
            base.update();

            if (Parent.tool == this)
            {
                arcModel.Position = weaponModel.Position;
                //arcModel.Position2 = weaponModel.Position;
                muzzleModel.Position = weaponModel.Position;

                muzzleModel.Orientation = weaponModel.Orientation;
                arcModel.Orientation    = weaponModel.Orientation;
                arcModel.Orientation2   = weaponModel.Orientation;

                // moving model

                if (selectedMod != null)
                {
                    JVector anchorCoords = GenericMethods.FromOpenTKVector(Position + PointingDirection * grabDist);
                    if (mConst != null)
                    {
                        mConst.Anchor = anchorCoords;
                    }
                    else if (selectedBody.IsStatic)
                    {
                        selectedBody.Position = anchorCoords + selModRelPos;
                    }

                    selectedMod.updateMatrix();
                    Matrix4 globalMaker = Matrix4.Mult(selectedMod.Orientation, selectedMod.ModelMatrix);
                    Vector4 gpos        = GenericMethods.Mult(modelLocalHitCoords, globalMaker);

                    JVector hitCoords = GenericMethods.FromOpenTKVector(gpos.Xyz);
                    //weaponLocalHitCoords = GenericMethods.Mult(gpos, Matrix4.Invert(Parent.viewInfo.modelviewMatrix)).Xyz;

                    //arcModel.Position2 = GenericMethods.Mult(new Vector4(weaponLocalHitCoords - new Vector3(0, 0, 5), 1f), Matrix4.Invert(Parent.viewInfo.modelviewMatrix)).Xyz;
                    arcModel.Position2 = gpos.Xyz - 5 * Parent.viewInfo.PointingDirection;
                    //arcModel.Orientation2 = Matrix4.CreateTranslation(weaponLocalHitCoords - new Vector3(0, 0, -5));
                }
            }
            else
            {
                arcModel.isVisible    = false;
                muzzleModel.isVisible = false;
                if (selectedMod != null)
                {
                    //mConst.Body1.AffectedByGravity = true;
                    if (mConst != null)
                    {
                        Scene.world.RemoveConstraint(mConst);
                    }
                    selectedBody            = null;
                    selectedMod.selected    = 0;
                    selectedMod.Forceupdate = false;
                    selectedMod             = null;
                    mConst = null;
                }
            }
        }
コード例 #2
0
 public PointOnPoint(RigidBody rigidBody, Vector3 position)
 {
     pointOnPoint = new Jitter.Dynamics.Constraints.SingleBody.PointOnPoint(
         rigidBody.rigidBody,
         new JVector(position.X, position.Y, position.Z)
         );
     pointOnPoint.Softness = 0.1f;
 }
コード例 #3
0
        protected override void fireDown()
        {
            RigidBody body; JVector normal; float frac;

            bool result = Scene.world.CollisionSystem.Raycast(GenericMethods.FromOpenTKVector(Position), GenericMethods.FromOpenTKVector(PointingDirection),
                                                              raycastCallback, out body, out normal, out frac);

            Vector4 gpos = new Vector4(Position + PointingDirection * frac, 1);

            JVector hitCoords = GenericMethods.FromOpenTKVector(gpos.Xyz);

            weaponLocalHitCoords  = GenericMethods.Mult(gpos, Matrix4.Invert(weaponModel.ModelMatrix)).Xyz;
            arcModel.Orientation2 = Matrix4.CreateTranslation(weaponLocalHitCoords - new Vector3(0, 0, -5));

            muzzleModel.isVisible = true;

            if (result && body.Tag != null)
            {
                PhysModel curMod = (PhysModel)body.Tag;

                if (curMod.grabable)
                {
                    arcModel.isVisible = true;

                    grabDist = frac;

                    selectedBody            = body;
                    selectedMod             = (PhysModel)body.Tag;
                    selectedMod.selected    = 1;
                    selectedMod.Forceupdate = true;

                    Matrix4 localMaker = Matrix4.Invert(Matrix4.Mult(selectedMod.Orientation, selectedMod.ModelMatrix));
                    modelLocalHitCoords = GenericMethods.Mult(gpos, localMaker);

                    if (body.IsStatic)
                    {
                        selModRelPos = body.Position - hitCoords;
                    }
                    else
                    {
                        JVector lanchor = hitCoords - body.Position;
                        lanchor = JVector.Transform(lanchor, JMatrix.Transpose(body.Orientation));

                        body.IsActive = true;

                        //body.SetMassProperties(JMatrix.Identity, 0.1f, false);
                        //body.AffectedByGravity = false;

                        mConst            = new Jitter.Dynamics.Constraints.SingleBody.PointOnPoint(body, lanchor);
                        mConst.Softness   = 0.02f;
                        mConst.BiasFactor = 0.1f;
                        Scene.world.AddConstraint(mConst);
                    }
                }
            }
        }
コード例 #4
0
 protected override void fireUp()
 {
     arcModel.isVisible    = false;
     muzzleModel.isVisible = false;
     if (selectedMod != null)
     {
         //mConst.Body1.AffectedByGravity = true;
         if (mConst != null)
         {
             Scene.world.RemoveConstraint(mConst);
         }
         selectedBody            = null;
         selectedMod.selected    = 0;
         selectedMod.Forceupdate = false;
         selectedMod             = null;
         mConst = null;
     }
 }
コード例 #5
0
ファイル: Grabber.cs プロジェクト: Richy19/ultraSandbox
        public override void update()
        {
            base.update();

            if (Parent.tool == this)
            {
                arcModel.Position = weaponModel.Position;
                //arcModel.Position2 = weaponModel.Position;
                muzzleModel.Position = weaponModel.Position;

                muzzleModel.Orientation = weaponModel.Orientation;
                arcModel.Orientation = weaponModel.Orientation;
                arcModel.Orientation2 = weaponModel.Orientation;

                // moving model

                if (selectedMod != null)
                {
                    JVector anchorCoords = GenericMethods.FromOpenTKVector(Position + PointingDirection * grabDist);
                    if (mConst != null)
                    {
                        mConst.Anchor = anchorCoords;
                    }
                    else if (selectedBody.IsStatic)
                    {
                        selectedBody.Position = anchorCoords + selModRelPos;
                    }

                    selectedMod.updateMatrix();
                    Matrix4 globalMaker = Matrix4.Mult(selectedMod.Orientation, selectedMod.ModelMatrix);
                    Vector4 gpos = GenericMethods.Mult(modelLocalHitCoords, globalMaker);

                    JVector hitCoords = GenericMethods.FromOpenTKVector(gpos.Xyz);
                    //weaponLocalHitCoords = GenericMethods.Mult(gpos, Matrix4.Invert(Parent.viewInfo.modelviewMatrix)).Xyz;

                    //arcModel.Position2 = GenericMethods.Mult(new Vector4(weaponLocalHitCoords - new Vector3(0, 0, 5), 1f), Matrix4.Invert(Parent.viewInfo.modelviewMatrix)).Xyz;
                    arcModel.Position2 = gpos.Xyz - 5 * Parent.viewInfo.PointingDirection;
                    //arcModel.Orientation2 = Matrix4.CreateTranslation(weaponLocalHitCoords - new Vector3(0, 0, -5));
                }
            }
            else
            {
                arcModel.isVisible = false;
                muzzleModel.isVisible = false;
                if (selectedMod != null)
                {
                    //mConst.Body1.AffectedByGravity = true;
                    if (mConst != null)
                    {
                        Scene.world.RemoveConstraint(mConst);
                    }
                    selectedBody = null;
                    selectedMod.selected = 0;
                    selectedMod.Forceupdate = false;
                    selectedMod = null;
                    mConst = null;
                }
            }
        }
コード例 #6
0
ファイル: Grabber.cs プロジェクト: Richy19/ultraSandbox
 protected override void fireUp()
 {
     arcModel.isVisible = false;
     muzzleModel.isVisible = false;
     if (selectedMod != null)
     {
         //mConst.Body1.AffectedByGravity = true;
         if (mConst != null)
         {
             Scene.world.RemoveConstraint(mConst);
         }
         selectedBody = null;
         selectedMod.selected = 0;
         selectedMod.Forceupdate = false;
         selectedMod = null;
         mConst = null;
     }
 }
コード例 #7
0
ファイル: Grabber.cs プロジェクト: Richy19/ultraSandbox
        protected override void fireDown()
        {
            RigidBody body; JVector normal; float frac;

            bool result = Scene.world.CollisionSystem.Raycast(GenericMethods.FromOpenTKVector(Position), GenericMethods.FromOpenTKVector(PointingDirection),
                raycastCallback, out body, out normal, out frac);

            Vector4 gpos = new Vector4(Position + PointingDirection * frac, 1);

            JVector hitCoords = GenericMethods.FromOpenTKVector(gpos.Xyz);
            weaponLocalHitCoords = GenericMethods.Mult( gpos, Matrix4.Invert(weaponModel.ModelMatrix)).Xyz;
            arcModel.Orientation2 = Matrix4.CreateTranslation(weaponLocalHitCoords - new Vector3(0, 0, -5));

            muzzleModel.isVisible = true;

            if (result && body.Tag != null)
            {
                PhysModel curMod = (PhysModel)body.Tag;

                if (curMod.grabable)
                {

                    arcModel.isVisible = true;

                    grabDist = frac;

                    selectedBody = body;
                    selectedMod = (PhysModel)body.Tag;
                    selectedMod.selected = 1;
                    selectedMod.Forceupdate = true;

                    Matrix4 localMaker = Matrix4.Invert(Matrix4.Mult(selectedMod.Orientation, selectedMod.ModelMatrix));
                    modelLocalHitCoords = GenericMethods.Mult(gpos, localMaker);

                    if (body.IsStatic)
                    {
                        selModRelPos = body.Position - hitCoords;
                    }
                    else
                    {
                        JVector lanchor = hitCoords - body.Position;
                        lanchor = JVector.Transform(lanchor, JMatrix.Transpose(body.Orientation));

                        body.IsActive = true;

                        //body.SetMassProperties(JMatrix.Identity, 0.1f, false);
                        //body.AffectedByGravity = false;

                        mConst = new Jitter.Dynamics.Constraints.SingleBody.PointOnPoint(body, lanchor);
                        mConst.Softness = 0.02f;
                        mConst.BiasFactor = 0.1f;
                        Scene.world.AddConstraint(mConst);
                    }
                }
            }
        }