void HandleTouchBegin3(TouchBeginEvent args) { var graphics = GetSubsystem <Graphics>(); PhysicsWorld2D physicsWorld = scene.GetComponent <PhysicsWorld2D>(); RigidBody2D rigidBody = physicsWorld.GetRigidBody(new Vector2(args.X, args.Y), uint.MaxValue); // Raycast for RigidBody2Ds to pick if (rigidBody != null) { pickedNode = rigidBody.Node; StaticSprite2D staticSprite = pickedNode.GetComponent <StaticSprite2D>(); staticSprite.Color = (new Color(1.0f, 0.0f, 0.0f, 1.0f)); // Temporary modify color of the picked sprite rigidBody = pickedNode.GetComponent <RigidBody2D>(); // Create a ConstraintMouse2D - Temporary apply this constraint to the pickedNode to allow grasping and moving with touch ConstraintMouse2D constraintMouse = pickedNode.CreateComponent <ConstraintMouse2D>(); Vector3 pos = camera.ScreenToWorldPoint(new Vector3((float)args.X / graphics.Width, (float)args.Y / graphics.Height, 0.0f)); constraintMouse.Target = new Vector2(pos.X, pos.Y); constraintMouse.MaxForce = 1000 * rigidBody.Mass; constraintMouse.CollideConnected = true; constraintMouse.OtherBody = dummyBody; // Use dummy body instead of rigidBody. It's better to create a dummy body automatically in ConstraintMouse2D constraintMouse.DampingRatio = 0; } SubscribeToEvent <TouchMoveEvent>(HandleTouchMove3); SubscribeToEvent <TouchEndEvent>(HandleTouchEnd3); }
void HandleTouchBegin3(TouchBeginEvent args) { var graphics = GetSubsystem<Graphics>(); PhysicsWorld2D physicsWorld = scene.GetComponent<PhysicsWorld2D>(); RigidBody2D rigidBody = physicsWorld.GetRigidBody(new Vector2(args.X, args.Y), uint.MaxValue); // Raycast for RigidBody2Ds to pick if (rigidBody != null) { pickedNode = rigidBody.Node; StaticSprite2D staticSprite = pickedNode.GetComponent<StaticSprite2D>(); staticSprite.Color = (new Color(1.0f, 0.0f, 0.0f, 1.0f)); // Temporary modify color of the picked sprite rigidBody = pickedNode.GetComponent<RigidBody2D>(); // Create a ConstraintMouse2D - Temporary apply this constraint to the pickedNode to allow grasping and moving with touch ConstraintMouse2D constraintMouse = pickedNode.CreateComponent<ConstraintMouse2D>(); Vector3 pos = camera.ScreenToWorldPoint(new Vector3((float)args.X / graphics.Width, (float)args.Y / graphics.Height, 0.0f)); constraintMouse.Target = new Vector2(pos.X, pos.Y); constraintMouse.MaxForce = 1000 * rigidBody.Mass; constraintMouse.CollideConnected = true; constraintMouse.OtherBody = dummyBody; // Use dummy body instead of rigidBody. It's better to create a dummy body automatically in ConstraintMouse2D constraintMouse.DampingRatio = 0; } SubscribeToEvent<TouchMoveEvent>(HandleTouchMove3); SubscribeToEvent<TouchEndEvent>(HandleTouchEnd3); }