foxssake / netfox

Addons for building multiplayer games with Godot
https://foxssake.github.io/netfox/
MIT License
355 stars 14 forks source link

Avatar spawning to be delayed to `is_initial_sync_done` #279

Open TheYellowArchitect opened 1 week ago

TheYellowArchitect commented 1 week ago

before-loop-message

Server starting rollback for client avatar at tick 57 starting at tick 56
Setting player name for #1651890795 to Criminal Urial
Server starting rollback for client avatar at tick 58 starting at tick 56
Server starting rollback for client avatar at tick 59 starting at tick 56
Server starting rollback for client avatar at tick 60 starting at tick 56
Server starting rollback for client avatar at tick 61 starting at tick 56
Server starting rollback for client avatar at tick 62 starting at tick 56
Server starting rollback for client avatar at tick 63 starting at tick 56
Server starting rollback for client avatar at tick 64 starting at tick 56
Server starting rollback for client avatar at tick 65 starting at tick 56
Server starting rollback for client avatar at tick 66 starting at tick 56
Server starting rollback for client avatar at tick 67 starting at tick 56
Server starting rollback for client avatar at tick 68 starting at tick 56
Server starting rollback for client avatar at tick 69 starting at tick 56
Server starting rollback for client avatar at tick 70 starting at tick 56
Server starting rollback for client avatar at tick 71 starting at tick 56
Server starting rollback for client avatar at tick 72 starting at tick 56
Server starting rollback for client avatar at tick 73 starting at tick 56
Server starting rollback for client avatar at tick 74 starting at tick 56
Server starting rollback for client avatar at tick 75 starting at tick 56
Server starting rollback for client avatar at tick 76 starting at tick 56
[DBG][netfox::NetworkTime] Client #1651890795 is now on time!

Rollback happens prematurely as seen above.

Also for my game, I use the signal NetworkTime.is_initial_sync_done (so I am certain the ticks are the same among players), and that is when I start the avatar spawns etc This signal should be documented to be used as the "hook" for plugging netfox to any project imo

TheYellowArchitect commented 1 week ago

I am beginning to reconsider this entire issue, so feel free to close or at the very least, move into a discussion.

  1. The message "[DBG][netfox::NetworkTime] Client #1651890795 is now on time!" has a half ping delay.
  2. NetworkTime.is_initial_sync_done is already used, and fixed in #284 Personally not a fan of spawning a player, and awaiting for sync then tweaking him, instead of just straight up spawning after the sync and all good (simpler and intuitive) but race condition bugs popped up with RPCs when I tried this so no big deal I guess. But seriously, the hook for the project is required at documentation. To explain that currently, the first avatars must be spawned, and then have an is_initial_sync_done delay, and then start rollback etc.