Beispiel #1
0
        public Crosshair(Axis[] listeningAxis, InputAction primaryAction, InputAction secondaryAction, Entity focusedEntity, World w)
        {
            #region defaults
            this.CursorSensitivity     = 1f;
            this.CursorRange           = 100f;
            this.CursorSize            = 1f;
            this.CursorColor           = Color.Red;
            this.CursorSize            = 3f;
            this.CursorLineStartOffset = 1f;
            this.CursorLineEndOffset   = 1f;

            #endregion defaults

            this.ListeningAxis = listeningAxis;

            this.world         = w;
            this.FocusedEntity = focusedEntity;

            this.Selected = new List <Entity>();

            this.Sensor                     = BodyFactory.CreateCircle(w, ConvertUnits.ToSimUnits(1), 1, this);
            this.Sensor.BodyType            = BodyType.Dynamic;
            this.Sensor.IsSensor            = true;
            this.Sensor.CollidesWith        = Category.All;
            this.Sensor.CollisionCategories = Category.All;// Categories.SENSOR;
            this.Sensor.UserData            = this;
            this.Sensor.IgnoreCollisionWith(this.FocusedEntity.Mesh.Body);

            pj = new FixedMouseJoint(this.Sensor, new Vector2(0, 0));

            this.world.AddJoint(pj);

            this.Sensor.OnCollision += (fA, fB, contact) =>
            {
                Entity e = fB.Body.UserData as Entity;
                if (e != null && !this.Selected.Contains(e))
                {
                    this.Selected.Add(e);
                }

                if (this.OnSelection != null)
                {
                    this.OnSelection(e);
                }
                return(true);
            };

            this.Sensor.OnSeparation += (fA, fB) =>
            {
                Entity e = fB.Body.UserData as Entity;
                if (this.Selected.Contains(e))
                {
                    if (this.OnSelectionLeave != null)
                    {
                        this.OnSelectionLeave(e);
                    }
                    this.Selected.Remove(e);
                }
            };
        }
        public override void update()
        {
            if (enableMousePicking)
            {
                if (Input.leftMouseButtonPressed)
                {
                    var pos     = Core.scene.camera.screenToWorldPoint(Input.mousePosition);
                    var fixture = world.testPoint(FSConvert.displayToSim * pos);
                    if (fixture != null && !fixture.body.isStatic && !fixture.body.isKinematic)
                    {
                        _mouseJoint = fixture.body.createFixedMouseJoint(pos);
                    }
                }

                if (Input.leftMouseButtonDown && _mouseJoint != null)
                {
                    var pos = Core.scene.camera.screenToWorldPoint(Input.mousePosition);
                    _mouseJoint.worldAnchorB = FSConvert.displayToSim * pos;
                }

                if (Input.leftMouseButtonReleased && _mouseJoint != null)
                {
                    world.removeJoint(_mouseJoint);
                    _mouseJoint = null;
                }
            }

                        #if DEBUG
            TimeRuler.instance.beginMark("physics", Color.Blue);
                        #endif
            world.step(MathHelper.Min(Time.deltaTime, minimumUpdateDeltaTime));
                        #if DEBUG
            TimeRuler.instance.endMark("physics");
                        #endif
        }
Beispiel #3
0
        void IUpdatable.update()
        {
            if (enableMousePicking)
            {
                if (Input.leftMouseButtonPressed)
                {
                    var pos     = entity.scene.camera.screenToWorldPoint(Input.mousePosition);
                    var fixture = world.TestPoint(ConvertUnits.displayToSim * pos);
                    if (fixture != null && !fixture.Body.IsStatic && !fixture.Body.IsKinematic)
                    {
                        _mouseJoint = Farseer.JointFactory.createFixedMouseJoint(world, fixture.Body, pos);
                    }
                }

                if (Input.leftMouseButtonDown && _mouseJoint != null)
                {
                    var pos = entity.scene.camera.screenToWorldPoint(Input.mousePosition);
                    _mouseJoint.WorldAnchorB = ConvertUnits.toSimUnits(pos);
                }

                if (Input.leftMouseButtonReleased && _mouseJoint != null)
                {
                    world.RemoveJoint(_mouseJoint);
                    _mouseJoint = null;
                }
            }

            world.Step(MathHelper.Min(Time.deltaTime, minimumUpdateDeltaTime));
        }
 public void UpdatePhysicsManipulation(bool leftMouseButtonPressed, Vector2 mousePosition)
 {
     // If left mouse button clicked then create a fixture for physics manipulation
     if (leftMouseButtonPressed && FixedMouseJoint == null)
     {
         Fixture savedFixture = _World.TestPoint(ConvertUnits.ToSimUnits(mousePosition));
         if (savedFixture != null)
         {
             Body body = savedFixture.Body;
             FixedMouseJoint          = new FixedMouseJoint(body, ConvertUnits.ToSimUnits(mousePosition));
             FixedMouseJoint.MaxForce = 1000.0f * body.Mass;
             _World.AddJoint(FixedMouseJoint);
             body.Awake = true;
         }
     }
     // If left mouse button releases then remove the fixture from the world
     if (!leftMouseButtonPressed && FixedMouseJoint != null)
     {
         _World.RemoveJoint(FixedMouseJoint);
         FixedMouseJoint = null;
     }
     if (FixedMouseJoint != null)
     {
         FixedMouseJoint.WorldAnchorB = ConvertUnits.ToSimUnits(mousePosition);
     }
 }
Beispiel #5
0
        public static FixedMouseJoint CreateFixedMouseJoint(PhysicsWorld world, Body body, Vector2 worldAnchor)
        {
            FixedMouseJoint joint = new FixedMouseJoint(body, worldAnchor);

            world.AddJoint(joint);
            return(joint);
        }
Beispiel #6
0
        private void HandleCursor(InputManager inputManager)
        {
            Vector2 position = Camera.ConvertScreenToWorld(inputManager.Mouse.MousePosition.ToVector2());

            if ((inputManager.GamePad.IsButtonPressed(Buttons.A) || inputManager.Mouse.IsLeftButtonPressed()) &&
                fixedMouseJoint == null)
            {
                Fixture savedFixture = World.TestPoint(position);
                if (savedFixture != null)
                {
                    Body body = savedFixture.Body;
                    fixedMouseJoint          = new FixedMouseJoint(body, position);
                    fixedMouseJoint.MaxForce = 1000.0f * body.Mass;
                    World.AddJoint(fixedMouseJoint);
                    body.Awake = true;
                }
            }
            if ((inputManager.GamePad.IsButtonReleased(Buttons.A) || inputManager.Mouse.IsLeftButtonReleased()) &&
                fixedMouseJoint != null)
            {
                World.RemoveJoint(fixedMouseJoint);
                fixedMouseJoint = null;
            }
            if (fixedMouseJoint != null)
            {
                fixedMouseJoint.WorldAnchorB = position;
            }
        }
Beispiel #7
0
        public override void Update()
        {
            if (EnableMousePicking)
            {
                if (Input.LeftMouseButtonPressed)
                {
                    var pos     = Core.Scene.Camera.ScreenToWorldPoint(Input.MousePosition);
                    var fixture = World.TestPoint(FSConvert.DisplayToSim * pos);
                    if (fixture != null && !fixture.Body.IsStatic && !fixture.Body.IsKinematic)
                    {
                        _mouseJoint = fixture.Body.CreateFixedMouseJoint(pos);
                    }
                }

                if (Input.LeftMouseButtonDown && _mouseJoint != null)
                {
                    var pos = Core.Scene.Camera.ScreenToWorldPoint(Input.MousePosition);
                    _mouseJoint.WorldAnchorB = FSConvert.DisplayToSim * pos;
                }

                if (Input.LeftMouseButtonReleased && _mouseJoint != null)
                {
                    World.RemoveJoint(_mouseJoint);
                    _mouseJoint = null;
                }
            }

            World.Step(MathHelper.Min(Time.DeltaTime, MinimumUpdateDeltaTime));
        }
Beispiel #8
0
    public virtual void MouseDrag()
    {
        // mouse press
        if (Input.GetMouseButtonDown(0) && mouseJoint == null)
        {
            Body body = GetBodyAtMouse();
            if (body != null)
            {
                FVector2 target = new FVector2(MouseXWorldPhys, MouseYWorldPhys);
                mouseJoint = JointFactory.CreateFixedMouseJoint(FSWorldComponent.PhysicsWorld, body, target);
                mouseJoint.CollideConnected = true;
                mouseJoint.MaxForce         = 300f * body.Mass;
                body.Awake = true;
            }
        }
        // mouse release
        if (Input.GetMouseButtonUp(0))
        {
            if (mouseJoint != null)
            {
                FSWorldComponent.PhysicsWorld.RemoveJoint(mouseJoint);
                mouseJoint = null;
            }
        }

        // mouse move
        if (mouseJoint != null)
        {
            FVector2 p2 = new FVector2(MouseXWorldPhys, MouseYWorldPhys);
            mouseJoint.WorldAnchorB = p2;
        }
    }
Beispiel #9
0
 protected virtual void JointRemoved(World sender, Joint joint)
 {
     if (fixedMouseJoint == joint)
     {
         fixedMouseJoint = null;
     }
 }
Beispiel #10
0
 protected virtual void JointRemoved(Joint joint)
 {
     if (_fixedMouseJoint == joint)
     {
         _fixedMouseJoint = null;
     }
 }
        protected virtual void HandleCursor(InputHelper input)
        {
            Vector2 position = Camera.ConvertScreenToWorld(input.Cursor);

            if ((input.IsNewButtonPress(Buttons.A) || input.IsNewMouseButtonPress(MouseButtons.LeftButton)) && _fixedMouseJoint == null)
            {
                Fixture savedFixture = World.TestPoint(position);
                if (savedFixture != null)
                {
                    Body body = savedFixture.Body;
                    _fixedMouseJoint          = new FixedMouseJoint(body, position);
                    _fixedMouseJoint.MaxForce = 1000.0f * body.Mass;
                    World.Add(_fixedMouseJoint);
                    body.Awake = true;
                }
            }

            if ((input.IsNewButtonRelease(Buttons.A) || input.IsNewMouseButtonRelease(MouseButtons.LeftButton)) && _fixedMouseJoint != null)
            {
                World.Remove(_fixedMouseJoint);
                _fixedMouseJoint = null;
            }

            if (_fixedMouseJoint != null)
            {
                _fixedMouseJoint.WorldAnchorB = position;
            }
        }
Beispiel #12
0
        public static FixedMouseJoint CreateFixedMouseJoint(World world, Body body, Vector2 worldAnchor)
        {
            var joint = new FixedMouseJoint(body, worldAnchor);

            world.addJoint(joint);
            return(joint);
        }
Beispiel #13
0
 private void JointRemoved(World sender, Joint joint)
 {
     if (_fixedMouseJoint == joint)
     {
         _fixedMouseJoint = null;
     }
 }
        protected override void Update(Microsoft.Xna.Framework.GameTime gameTime)
        {
            MouseState ms       = Mouse.GetState();
            Vector2    position = camera.ConvertScreenToWorld(new Vector2(ms.X, ms.Y), true, false);

            if (ms.LeftButton == ButtonState.Pressed && _fixedMouseJoint == null)
            {
                Fixture savedFixture = world.World.TestPoint(position);
                if (savedFixture != null)
                {
                    Body body = savedFixture.Body;
                    _fixedMouseJoint          = new FixedMouseJoint(body, position);
                    _fixedMouseJoint.MaxForce = 1000.0f * body.Mass;
                    world.World.AddJoint(_fixedMouseJoint);
                    body.Awake = true;
                }
            }

            if (ms.LeftButton == ButtonState.Released && _fixedMouseJoint != null)
            {
                world.World.RemoveJoint(_fixedMouseJoint);
                _fixedMouseJoint = null;
            }

            if (_fixedMouseJoint != null)
            {
                _fixedMouseJoint.WorldAnchorB = position;
            }
        }
Beispiel #15
0
        public override void Update()
        {
            if (EnableMousePicking)
            {
                if (Input.LeftMouseButtonPressed)
                {
                    Vector2 pos     = Core.Scene.Camera.ScreenToWorldPoint(Input.MousePosition);
                    Fixture fixture = World.TestPoint(FSConvert.DisplayToSim * pos);
                    if (fixture != null && !fixture.Body.IsStatic && !fixture.Body.IsKinematic)
                    {
                        _mouseJoint = fixture.Body.CreateFixedMouseJoint(pos);
                    }
                }

                if (Input.LeftMouseButtonDown && _mouseJoint != null)
                {
                    Vector2 pos = Core.Scene.Camera.ScreenToWorldPoint(Input.MousePosition);
                    _mouseJoint.WorldAnchorB = FSConvert.DisplayToSim * pos;
                }

                if (Input.LeftMouseButtonReleased && _mouseJoint != null)
                {
                    World.RemoveJoint(_mouseJoint);
                    _mouseJoint = null;
                }
            }

#if DEBUG
            TimeRuler.Instance.BeginMark("physics", Color.Blue);
#endif
            World.Step(MathHelper.Min(Time.DeltaTime, MinimumUpdateDeltaTime));
#if DEBUG
            TimeRuler.Instance.EndMark("physics");
#endif
        }
Beispiel #16
0
        public static FixedMouseJoint CreateFixedMouseJoint(World world, Body body, Vector2 target)
        {
            FixedMouseJoint joint = new FixedMouseJoint(body, target);

            world.AddJoint(joint);
            return(joint);
        }
Beispiel #17
0
        private void MouseDown(Vector2 p)
        {
            InputHelper inputHelper = game.inputManager.inputHelper;

            if (_fixedMouseJoint != null)
            {
                return;
            }

            savedFixture = game.farseerManager.world.TestPoint(p);

            if (savedFixture != null)
            {
                Body body = savedFixture.Body;
                if (!body.IsStatic)
                {
                    _fixedMouseJoint          = new FixedMouseJoint(body, p);
                    _fixedMouseJoint.MaxForce = 1000.0f * body.Mass;
                    game.farseerManager.world.AddJoint(_fixedMouseJoint);
                    body.Awake = true;
                }
                else
                {
                    dragging = true;
                }
            }
            else // start a selection rectangle
            {
                dragStartWorld     = p;
                dragStartPixel     = inputHelper.MousePosition;
                selectingRectangle = true;
                dragArea           = new DragArea(dragStartPixel, dragStartPixel);
            }
        }
Beispiel #18
0
 public void destroyRemoteMouseJoint()
 {
     if (_remoteMouseJoint != null)
     {
         _world.RemoveJoint(_remoteMouseJoint);
         _remoteMouseJoint = null;
     }
 }
Beispiel #19
0
 private void MouseUp()
 {
     if (_fixedMouseJoint != null)
     {
         World.RemoveJoint(_fixedMouseJoint);
         _fixedMouseJoint = null;
     }
 }
Beispiel #20
0
 public virtual void MouseUp(MouseEventArgs e, Vector2 p)
 {
     if (_fixedMouseJoint != null)
     {
         World.RemoveJoint(_fixedMouseJoint);
         _fixedMouseJoint = null;
     }
 }
Beispiel #21
0
 private void MouseUp()
 {
     if (fixedMouseJoint != null)
     {
         world.Remove(fixedMouseJoint);
         fixedMouseJoint = null;
     }
 }
Beispiel #22
0
 public void RemoveMouseJoint()
 {
     if (_mouseJoint != null)
     {
         _simulatedLevel.World.RemoveJoint(_mouseJoint);
         _mouseJoint = null;
     }
 }
Beispiel #23
0
 /// <summary>
 /// Pustí uchopené těleso.
 /// </summary>
 public void ReleaseGrabbedBody()
 {
     if (_fixedMouseJoint != null)
     {
         World2D.Remove(_fixedMouseJoint);
         _fixedMouseJoint = null;
     }
 }
        public void sendMoveMouseJoint(FixedMouseJoint joint)
        {
            NetOutgoingMessage om = _peer.CreateMessage();

            om.Write((int)MessageType.MoveMouseJoint);
            om.Write(joint.WorldAnchorB.X);
            om.Write(joint.WorldAnchorB.Y);
            _peer.SendMessage(om, _peer.Connections[0], NetDeliveryMethod.ReliableUnordered);
        }
        protected override void CreateExtraJoints(World world)
        {
            rightHandSpring          = new FixedMouseJoint(_lowerRightArm, _lowerRightArm.Position);
            rightHandSpring.MaxForce = 1000.0f * _lowerRightArm.Mass;
            world.AddJoint(rightHandSpring);

            leftHandSpring          = new FixedMouseJoint(_lowerLeftArm, _lowerLeftArm.Position);
            leftHandSpring.MaxForce = 1000.0f * _lowerLeftArm.Mass;
            world.AddJoint(leftHandSpring);
        }
Beispiel #26
0
        protected override Joint CreateJoint(Body bodyA, Body bodyB)
        {
            if (bodyA == null)
            {
                return(null);
            }
            FixedMouseJoint mj = new FixedMouseJoint(bodyA, Vector2.Zero);

            Scene.PhysicsWorld.AddJoint(mj);
            return(mj);
        }
Beispiel #27
0
        public void createMouseJoint(Vector2 point)
        {
            Fixture fixture = _world.TestPoint(point);

            if (fixture != null)
            {
                _mouseJoint          = JointFactory.CreateFixedMouseJoint(_world, fixture.Body, point);
                _mouseJoint.MaxForce = 1000f * fixture.Body.Mass;
                _game.netManager.sendCreateMouseJoint(_mouseJoint);
            }
        }
Beispiel #28
0
 public void createRemoteMouseJoint(Body body, Vector2 anchorA, Vector2 anchorB)
 {
     if (_remoteMouseJoint == null)
     {
         _remoteMouseJoint = JointFactory.CreateFixedMouseJoint(_world, body, anchorA);
         _remoteMouseJoint.WorldAnchorA = anchorA;
         _remoteMouseJoint.WorldAnchorB = anchorB;
     }
     else
     {
         _remoteMouseJoint.WorldAnchorB = anchorB;
     }
 }
Beispiel #29
0
        // I N I T
        protected override void Initialize()
        {
            gpu         = GraphicsDevice;
            spriteBatch = new SpriteBatch(GraphicsDevice);
            quadBatch   = new QuadBatch(Content, gpu, "QuadEffect", "", null, null); // ( if using a rendertarget for most rendering - change null to its resolution )

            pixel    = new Rectangle(382, 0, 1, 1);     quadBatch.PIXEL = pixel;     // need this for line drawing to work in quadbatch
            gras1    = new Rectangle(12, 144, 28, 82);                               // fixed these since last time
            gras2    = new Rectangle(80, 144, 28, 82);                               // fixed these since last time
            gras3    = new Rectangle(142, 144, 28, 82);                              // fixed these since last time
            BigGrass = new Rectangle(0, 0, 380, 122);

            world = new World(new Vector2(0f, 9.8f)); // world physics sim (provide gravity direction)

            player_body                     = BodyFactory.CreateCircle(world, con.ToSimUnits(8.0f), 1.0f);
            player_body.Position            = con.ToSimUnits(400, 10);
            player_body.BodyType            = BodyType.Dynamic; // moves
            player_body.Mass                = 0.4f;
            player_body.Restitution         = 0.2f;             // bounciness
            player_body.Friction            = 0.4f;             // grip
            player_body.CollisionCategories = Category.Cat1; player_body.CollidesWith = Category.All;
            player_body.FixedRotation       = false;

            // attach collider_body to mouse:
            mouse_joint          = JointFactory.CreateFixedMouseJoint(world, player_body, player_body.Position);
            mouse_joint.MaxForce = 500.0f;


            // 大きな 草
            big_grass_body                     = BodyFactory.CreateRectangle(world, con.ToSimUnits(BigGrass.Width * 0.88f), con.ToSimUnits(BigGrass.Height * 0.6f), 1.0f);
            big_grass_body.Position            = con.ToSimUnits(300 + BigGrass.Width / 2f - 10, 600 + BigGrass.Height / 2f);
            big_grass_body.BodyType            = BodyType.Static;
            big_grass_body.Restitution         = 0.2f; // bounciness
            big_grass_body.Friction            = 0.8f; // surface grip
            big_grass_body.Mass                = 1.0f;
            big_grass_body.CollisionCategories = Category.Cat2;
            big_grass_body.CollidesWith        = Category.Cat1;


            // DYNAMIC GRASS (BOTTOM PART):
            grassChain    = new VelcroChain[3];
            grassChain[0] = new VelcroChain(world, quadBatch);
            grassChain[0].MakeGrass(gras1.Width * 0.5f, gras1.Height, new Vector2(350, 600), num_divisions: 3, baseBody: big_grass_body, noGravity: false);
            grassChain[1] = new VelcroChain(world, quadBatch);
            grassChain[1].MakeGrass(gras1.Width * 0.5f, gras1.Height, new Vector2(380, 600), num_divisions: 3, baseBody: big_grass_body, noGravity: false);
            grassChain[2] = new VelcroChain(world, quadBatch);
            grassChain[2].MakeGrass(gras1.Width * 0.5f, gras1.Height, new Vector2(410, 600), num_divisions: 3, baseBody: big_grass_body, noGravity: false);

            base.Initialize();
        }
Beispiel #30
0
 public void CreateMouseJoint()
 {
     if (_state == SimulationState.Simulation && _mouseJoint == null)
     {
         Fixture savedFixture = _simulatedLevel.World.TestPoint(ConvertUnits.ToSimUnits(_mousePosition));
         if (savedFixture != null)
         {
             Body body = savedFixture.Body;
             _mouseJoint          = new FixedMouseJoint(body, ConvertUnits.ToSimUnits(_mousePosition));
             _mouseJoint.MaxForce = 1000.0f * body.Mass;
             _simulatedLevel.World.AddJoint(_mouseJoint);
             body.Awake = true;
         }
     }
 }