Skip to content

Phantom camera's global_position getting incorrectly(?) floored when it's limit is set #268

@audeck

Description

@audeck

Issue description

I've been playing around with 2D phantom cameras recently (great initiative, btw!) and ran into weird behavior. Using lawnjelly/smoothing-addon, simple cameras with no limit work as expected.

However, once I set a limit target (and, quickly looking through the code, I imagine the same thing happens when limit sides are set), the camera's global_position kept getting rounded down to integer values, causing visual jitter while following a node with a position that wasn't rounded to integers.

After dissecting phantom_camera_2d.gd, it seems the _set_limit_clamp_position function, called from _process through _interpolate_position on every frame here returns a Vector2i, resulting in the aforementioned rounding down. After changing the return type to Vector2, everything works as expected.

As someone with little to no experience using this plugin, I don't whether:

  1. I'm doing something wrong and the _set_limit_clamp_function is getting called incorrectly every frame (and otherwise works as expected), or
  2. the return type is indeed wrong.

That is mainly why I'm creating an issue, rather than submitting a PR (the single-commit PR would also change literally one (1) character). Thank you.

Steps to reproduce

  1. Create a node that is able to move at non-integer increments (a player character, etc.)
  2. Setup a basic Camera2D (no smoothing, etc.) w/ a PhantomCameraHost
  3. Add a PhantomCamera2D following said node on simple mode
  4. Set any limits to said PhantomCamera2D

(Optional) Minimal reproduction project

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions