protected override void CopyTo(JointInfo target) { base.CopyTo(target); FixedMouseJointInfo c = target as FixedMouseJointInfo; c.worldAnchor = this.worldAnchor; c.localAnchor = this.localAnchor; c.dampingRatio = this.dampingRatio; c.frequency = this.frequency; c.maxForce = this.maxForce; }
private void DrawJoint(Canvas canvas, FixedMouseJointInfo joint) { this.DrawWorldPosConstraint(canvas, joint.BodyA, joint.LocalAnchor, joint.WorldAnchor); this.DrawWorldAnchor(canvas, joint.BodyA, joint.WorldAnchor); this.DrawLocalAnchor(canvas, joint.BodyA, joint.LocalAnchor); }
void ICmpUpdatable.OnUpdate() { Camera cam = this.GameObj.Camera; // Mouse pressed? Drag stuff if (DualityApp.Mouse[MouseButton.Left]) { Vector2 cursorScreen = new Vector2(DualityApp.Mouse.X, DualityApp.Mouse.Y); Vector2 cursorWorld = cam.GetSpaceCoord(cursorScreen).Xy; // Create mouse joint if (this.mouseJoint == null) { ShapeInfo shape = RigidBody.PickShapeGlobal(cursorWorld); RigidBody body = shape != null ? shape.Parent : null; if (body != null && body.BodyType == BodyType.Dynamic) { this.mouseJoint = new FixedMouseJointInfo(); this.mouseJoint.MaxForce = 20.0f; // More power this.mouseJoint.LocalAnchor = body.GameObj.Transform.GetLocalPoint(cursorWorld); body.AddJoint(this.mouseJoint); } } // Update mouse joint if (this.mouseJoint != null) { this.mouseJoint.WorldAnchor = cursorWorld; } } // Mouse not pressed? Release stuff else { if (this.mouseJoint != null) { this.mouseJoint.BodyA.RemoveJoint(this.mouseJoint); this.mouseJoint = null; } } // Update stats // When using a fixed physics timestep, physics isn't updated every frame at high FPS, so // we'll just average the physics time value over several frames and display that value. Thats easier to read anyway. this.physicsTimeAcc += Performance.UpdatePhysicsTime; this.physicsTimeCounter++; if (this.physicsTimeCounter >= 25) { this.physicsTimeVal = this.physicsTimeAcc / this.physicsTimeCounter; this.physicsTimeCounter = 0; this.physicsTimeAcc = 0.0f; } // Update stats text this.UpdateStatsText(); }