Skip to content

Ratty camera protocol#118

Open
Nomagno wants to merge 8 commits into
orhun:mainfrom
Nomagno:ratty_camera_protocol
Open

Ratty camera protocol#118
Nomagno wants to merge 8 commits into
orhun:mainfrom
Nomagno:ratty_camera_protocol

Conversation

@Nomagno

@Nomagno Nomagno commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Hey!
Ctrl + Alt + O -> Regular orthographic view
Ctrl + Alt + P -> New perspective view ('videogame camera' style)
Basically, both cameras are created at startup, but only the requested one is activated in Bevy. Not sure if this might suppose a performance penalty. I am also not an expert in Rust nor Bevy, so sorry if something's improvable 😅. I also refactored a bunch of match statements into comparisons against is_3d() where I thought it might be reasonable, since 3 long enum values per arm seemed silly once I added the new Persp3d mode (I can revert this if needed).

Additionally:

The ratty graphics protocol is expanded as per the update to protocols/graphics.md, with the corresponding implementation. The rendering and input processing pipeline is reordered in order to allow the applications and the user to control the camera at once harmoniously. I am not a Rust expert, and would, in general, appreciate feedback on the architecture and style.

Missing: better documentation of the code, add support for the features described here to the big rat demo, and perhaps add Ctrl+Alt+[0-9] bindings for manually changing to the 10 camera slots.

Obsoletes #89 and implements #114

@orhun orhun left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for the PR! I have pushed a cleanup commit and have a small question about one of the parts :)

Comment thread src/inline.rs
camera_slots.slots[camera_slot as usize].0.yaw = rx;
}
if let Some(_ry) = settings.rotation[1] {
/*camera_slots.slots[camera_slot as usize].0.roll = ry;*/

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this disabled?

@Nomagno Nomagno Jun 30, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, my bad, should've mentioned this as an open implementation question! It's because ratty's camera doesn't currently have the capability to be rolled by the user, it has 2 axis rotation. If I allowed to actually change the roll, the user would have no intuitive way to correct it afterwards with the mouse 😅
There's several solutions, ignoring roll inputs from the Ratty Camera Protocol is the one that seemed safest for a first implementation.

Comment thread src/inline.rs
RgpOperation::Camera {
camera_slot, switch_immediately, settings
} => {
//info!("camera settings for slot {}: set {}; rotation: ({},{},{})", camera_slot, switch_immediately, settings.rotation[0].unwrap_or(0.0), settings.rotation[1].unwrap_or(0.0), settings.rotation[2].unwrap_or(0.0));

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove the commented out code :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants