From d66a707cad648a08b5ce0bb5cc27cdb37e8da935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20G=C3=A1lffy?= Date: Sun, 18 Feb 2024 10:01:03 +0100 Subject: [PATCH 1/3] add node --- addons/netfox/icons/state-synchronizer.svg | 61 +++++++++++++++++++ .../icons/state-synchronizer.svg.import | 37 +++++++++++ addons/netfox/netfox.gd | 6 ++ addons/netfox/state-synchronizer.gd | 45 ++++++++++++++ 4 files changed, 149 insertions(+) create mode 100644 addons/netfox/icons/state-synchronizer.svg create mode 100644 addons/netfox/icons/state-synchronizer.svg.import create mode 100644 addons/netfox/state-synchronizer.gd diff --git a/addons/netfox/icons/state-synchronizer.svg b/addons/netfox/icons/state-synchronizer.svg new file mode 100644 index 00000000..757438d4 --- /dev/null +++ b/addons/netfox/icons/state-synchronizer.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + diff --git a/addons/netfox/icons/state-synchronizer.svg.import b/addons/netfox/icons/state-synchronizer.svg.import new file mode 100644 index 00000000..18f73f08 --- /dev/null +++ b/addons/netfox/icons/state-synchronizer.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ogbi1hffcoyh" +path="res://.godot/imported/state-synchronizer.svg-9cb9447ba79f114a58e468a24d17b860.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/netfox/icons/state-synchronizer.svg" +dest_files=["res://.godot/imported/state-synchronizer.svg-9cb9447ba79f114a58e468a24d17b860.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/netfox/netfox.gd b/addons/netfox/netfox.gd index 220f2957..76bd6b13 100644 --- a/addons/netfox/netfox.gd +++ b/addons/netfox/netfox.gd @@ -104,6 +104,12 @@ const TYPES = [ "script": ROOT + "/rollback/rollback-synchronizer.gd", "icon": ROOT + "/icons/rollback-synchronizer.svg" }, + { + "name": "StateSynchronizer", + "base": "Node", + "script": ROOT + "/state-synchronizer.gd", + "icon": ROOT + "/icons/state-synchronizer.svg" + }, { "name": "TickInterpolator", "base": "Node", diff --git a/addons/netfox/state-synchronizer.gd b/addons/netfox/state-synchronizer.gd new file mode 100644 index 00000000..f8927581 --- /dev/null +++ b/addons/netfox/state-synchronizer.gd @@ -0,0 +1,45 @@ +extends Node +class_name StateSynchronizer + +## Synchronizes state from authority. + +@export var root: Node +@export var properties: Array[String] + +var _property_cache: PropertyCache +var _props: Array[PropertyEntry] + +var _last_received_tick: int = -1 +var _last_received_state: Dictionary = {} + +## Process settings. +## +## Call this after any change to configuration. +func process_settings(): + _property_cache = PropertyCache.new(root) + _props = [] + + for property in properties: + var pe = _property_cache.get_entry(property) + _props.push_back(pe) + +func _ready(): + process_settings() + NetworkTime.after_tick.connect(_after_tick) + +func _after_tick(_dt, tick): + if is_multiplayer_authority(): + # Submit snapshot + var state = PropertySnapshot.extract(_props) + rpc("_submit_state", state, tick) + else: + # Apply last received state + PropertySnapshot.apply(_last_received_state, _property_cache) + +@rpc("authority", "unreliable", "call_remote") +func _submit_state(state: Dictionary, tick: int): + if tick <= _last_received_tick: + return + + _last_received_state = state + _last_received_tick = tick From ab339e838fab9d89fa2ab639d53b4004f163123e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20G=C3=A1lffy?= Date: Sun, 18 Feb 2024 13:29:26 +0100 Subject: [PATCH 2/3] add docs --- .../assets/state-synchronizer-config.png | Bin 0 -> 16897 bytes docs/netfox/nodes/state-synchronizer.md | 74 ++++++++++++++++++ mkdocs.yml | 1 + 3 files changed, 75 insertions(+) create mode 100644 docs/netfox/assets/state-synchronizer-config.png create mode 100644 docs/netfox/nodes/state-synchronizer.md diff --git a/docs/netfox/assets/state-synchronizer-config.png b/docs/netfox/assets/state-synchronizer-config.png new file mode 100644 index 0000000000000000000000000000000000000000..f09ddfd5c5e8ffd068d61269fd622cdf3fc76c1d GIT binary patch literal 16897 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 jrR0iyNOR Date: Sun, 18 Feb 2024 13:29:54 +0100 Subject: [PATCH 3/3] bv --- addons/netfox.extras/plugin.cfg | 2 +- addons/netfox.internals/plugin.cfg | 2 +- addons/netfox.noray/plugin.cfg | 2 +- addons/netfox/plugin.cfg | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/netfox.extras/plugin.cfg b/addons/netfox.extras/plugin.cfg index 9c9b8062..2b5189fa 100644 --- a/addons/netfox.extras/plugin.cfg +++ b/addons/netfox.extras/plugin.cfg @@ -3,5 +3,5 @@ name="netfox.extras" description="Game-specific utilities for Netfox" author="Tamas Galffy" -version="1.2.0" +version="1.3.0" script="netfox-extras.gd" diff --git a/addons/netfox.internals/plugin.cfg b/addons/netfox.internals/plugin.cfg index 38fb3be0..cac6e55a 100644 --- a/addons/netfox.internals/plugin.cfg +++ b/addons/netfox.internals/plugin.cfg @@ -3,5 +3,5 @@ name="netfox.internals" description="Shared internals for netfox addons" author="Tamas Galffy" -version="1.2.0" +version="1.3.0" script="plugin.gd" diff --git a/addons/netfox.noray/plugin.cfg b/addons/netfox.noray/plugin.cfg index 0b84cfd5..31df0ca8 100644 --- a/addons/netfox.noray/plugin.cfg +++ b/addons/netfox.noray/plugin.cfg @@ -3,5 +3,5 @@ name="netfox.noray" description="Bulletproof your connectivity with noray integration for netfox" author="Tamas Galffy" -version="1.2.0" +version="1.3.0" script="netfox-noray.gd" diff --git a/addons/netfox/plugin.cfg b/addons/netfox/plugin.cfg index 3faeef24..d9f3061e 100644 --- a/addons/netfox/plugin.cfg +++ b/addons/netfox/plugin.cfg @@ -3,5 +3,5 @@ name="netfox" description="Shared internals for netfox addons" author="Tamas Galffy" -version="1.2.0" +version="1.3.0" script="netfox.gd"