Skip to content
This repository was archived by the owner on Feb 22, 2025. It is now read-only.

Repository files navigation

Warning

This repository is now deprecated.

Please use Godot Rollback Netcode Mono, a C# wrapper for SnopekGame's Godot Rollback Netcode addon instead!

Fractural Rollback Netcode 🔃

This is a C# implementation of rollback netcode in Godot. This is based off of SnopekGames' Godot Rollback Netcode addon.

Usage

Getting Input

publicclassGame:Node2D{publicenumScenes{Player}NetcodeManager_netcodeManager;DIContainer_diContainer;PackedScene_playerPrefab;Player_player;publicvoid_Ready(){InitDIContainer();StartGame();}privatevoidInitDIContainer(){_netcodeManager=newNetcodeManager();_diContainer=newDIContainer();AddChild(_diContainer);_diContainer.Bind<NetcodeManager>().To(_netcodeManager);}privatevoidStartGame(){// Spawn automatically registers the instance to the// sync manager if it implements any of the INetwork// interfaces._player=_netcodeManager.Spawn(this,(int)Scenes.Player,_playerPrefab);}}publicclassExplosion:Node2D,INetworkSpawnable,IInjectable{publicclassSpawnData{publicVector2position;}privateNetworkTimer_despawnTimer;privateNetcodeManager_netcodeManager;publicvoidConstruct(DIContainercontainer){_netcodeManager=container.Resolve<NetcodeManager>();}publicvoid_Ready(){_despawnTimer=GetNode<NetworkTimer>("ExplosionTimer");_despawnTimer.Timeout+=OnDespawnTimerTimeout;}// ----- INetworkSpawnable ----- //publicvoidNetworkSpawn(objectdata){vartypedData=dataasSpawnData;GlobalPosition=typedData.position;_despawnTimer.Start();}publicvoidNetworkDespawn(){}// ----- INetworkSpawnable ----- //publicvoidOnDespawnTimerTimeout(){_netcodeManager.Despawn(this);}}publicclassBomb:Node2D,INetworkSpawnable,IInjectable{publicenumScenes{Explosion}publicclassSpawnData{publicVector2position;}privateNetworkTimer_explosionTimer;privateNetcodeManager_netcodeManager;publicvoidConstruct(DIContainercontainer){_netcodeManager=container.Resolve<NetcodeManager>();}publicvoid_Ready(){_explosionTimer=GetNode<NetworkTimer>("ExplosionTimer");_explosionTimer.Timeout+=OnExplosionTimerTimeout;}// ----- INetworkSpawnable ----- //publicvoidNetworkSpawn(objectdata){vartypedData=dataasSpawnData;GlobalPosition=typedData.position;_explosionTimer.Start();}publicvoidNetworkDespawn(){}// ----- INetworkSpawnable ----- //publicvoidOnExplosionTimerTimeout(){_netcodeManager.Spawn(this,(int)Scenes.Explosion,newExplosion.SpawnData(){position=GlobalPosition});_netcodeManager.Despawn(this);}}publicclassPlayer:Node2D,INetworkSerializable,INetworkInput,INetworkProcess,INetworkSpawner{publicenumScenes{Bomb}publicclassData{publicVector2position;publicVector2attackCooldown;}publicclassInput{publicboolbombDropped;publicVector2inputDirection;}publicDatadata;privateNetcodeManager_netcodeManager;publicvoidConstruct(DIContainercontainer){_netcodeManager=container.Resolve<NetcodeManager>();}// ----- INetworkSpawner ----- //publicvoidSpawnwerSpawned(intid,Nodescene){if(id==(int)Scenes.Bomb){scene.Exploded+=OnBombExploded;}}publicvoidSpawnwerDespawned(intid,Nodescene){if(id==(int)Scenes.Bomb){scene.Exploded-=OnBombExploded;}}// ----- INetworkSpawner ----- //// ----- INetworkProcess ----- //privatevoidNetworkProcess(objectinput){if(inputisInputtypedInput){if(typedInput.bombDropped)_netcodeManager.Spawn(this,(int)Scenes.Bomb,newBomb.SpawnData(){position=GlobalPosition});}}// ----- INetworkProcess ----- //// ----- INetworkSerializable ----- //publicobjectSave(){returnObject.MemberwiseClone(data);}publicvoidLoad(objectdata){data=Object.MemberwiseClone(data)asData;}// ----- INetworkSerializable ----- //// ----- INetworkInput ----- //publicobjectGetLocalInput(){returnnewInput(){inputDirection=Input.GetVector("ui_left","ui_right","ui_up","ui_down");bombDropped=Input.IsActionJustPressed("ui_accept")};}publicobjectPredictLocalInput(objectinput,intticksSinceRealInput){varinput=Object.MemberwiseClone(input);if(input.bombDropped)input.bombDropped=false;returninput;}// ----- INetworkInput ----- //privatevoidOnBombExploded(){}}

About

C# rollback netcode solution for Godot. Based on Snopek Game's godot-rollback-netcode addon. 🔙

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages