Files
shawn e7299b17e9 Phase 7: netfox + godot-jolt stack upgrade
Stack installed:
- netfox v1.35.3 (core + extras + noray + internals)
- godot-jolt v0.16.0-stable

Architecture:
- Server: ENet transport (works headless, no netfox deps)
- Client/Editor: netfox rollback (RollbackSynchronizer, TickInterpolator)

New/modified:
- docs/migration-netfox-plan.md — migration architecture
- scripts/network/network_manager.gd — netfox-aware ENet fallback
- scripts/network/player.gd — clean base player
- client/characters/player_netfox.gd — rollback player w/ WeaponManager
- client/characters/input/player_net_input.gd — BaseNetInput subclass
- client/characters/character/fps_character_controller.gd — netfox input feed
- client/weapons/ — weapon data, registry, TacticalWeaponHitscan, WeaponManager
- client/scripts/round_replicator.gd — client-side round state bridge
- server/scripts/round_manager.gd — improved state machine
- server/scripts/plugin_api/plugin_manager.gd — refined plugin system
- config: enemy_tag, ally_tag for meatball targeting

Removed: old C++ SimulationServer GDExtension (replaced by netfox rollback)
2026-07-02 17:39:22 -04:00

52 lines
1.2 KiB
GDScript

extends RefCounted
class_name PropertyEntry
var _path: String
var node: Node
var property: String
static var _logger := NetfoxLogger._for_netfox("PropertyEntry")
func get_value() -> Variant:
return node.get_indexed(property)
func set_value(value):
node.set_indexed(property, value)
func is_valid() -> bool:
if not node or not is_instance_valid(node):
# Node is invalid
return false
# Return true if node has given property
return node.get_property_list()\
.any(func(it): return it["name"] == property)
func _to_string() -> String:
return _path
static func parse(root: Node, path: String) -> PropertyEntry:
var result = PropertyEntry.new()
result.node = root.get_node(NodePath(path))
result.property = path.erase(0, path.find(":") + 1)
result._path = path
return result
static func make_path(root: Node, node: Variant, property: String) -> String:
var node_path := ""
if node is String:
node_path = node
elif node is NodePath:
node_path = str(node)
elif node is Node:
node_path = str(root.get_path_to(node))
else:
_logger.error("Can't stringify node reference: %s", [node])
return ""
if node_path == ".":
node_path = ""
return "%s:%s" % [node_path, property]