Hey, I’m making a tank game with some similarities to diep.io, I’ve got quite a lot done and already had movement, firing, and the tank barrel rotation down, but I ran into some performance issues so now I’m trying to rework my code.
The only thing I’m having performance issues with is the tank barrel rotation, so I’ll only talk about that. A short video so you have an idea of how the barrel rotation looks in my game:
Now I previously did this by firing a remote event on Heartbeat, sending in the mouse position and rotating the barrel on the server with that, but this causes performance issues (imagine 10+ players all firing remote events on Heartbeat).
For a different approach I’ve tried setting network ownership of the part that rotates to the player, and rotating on the client (so no need for remote events), which worked fine, until I started moving the tank around. When colliding with something, the tank noclips through it. I’m not sure if this is of any use but my tanks are made like this:

There’s the main body which is the name of the tank, and anything else is welded to it using WeldConstraints.
I’ve also tried setting network ownership of the whole tank to the player, which fixes the noclipping, but then causes inconsistencies with projectiles. Easier to show than to explain:
Red projectile is fired client-side, black one is server-side. Works fine when standing still, but not when rotating and/or moving.
I’m stumped on what else I could do. Do I just make projectiles client-side, replicate to other clients and verify on the server, or is there something else I can do?
EDIT: I’m using FastCast for projectiles.