Giving network manager the authority and sky sync?
This commit is contained in:
parent
e6288189ca
commit
353336eddf
@ -30,6 +30,18 @@ var moonPosition : float = 0.0
|
|||||||
var star_alpha
|
var star_alpha
|
||||||
var start_time : float = 0.0
|
var start_time : float = 0.0
|
||||||
|
|
||||||
|
var network_uuid: int = 0
|
||||||
|
|
||||||
|
var time_of_day_cache: float = 0.0
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
NetworkManager.register_node(self)
|
||||||
|
network_uuid = NetworkManager.get_network_uuid(self)
|
||||||
|
|
||||||
|
NetworkManager.property_update_received.connect(_on_property_update)
|
||||||
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
_updateRotation()
|
_updateRotation()
|
||||||
_updateSky()
|
_updateSky()
|
||||||
@ -38,10 +50,18 @@ func _physics_process(delta: float) -> void:
|
|||||||
_updateFog()
|
_updateFog()
|
||||||
_updateStars(delta)
|
_updateStars(delta)
|
||||||
|
|
||||||
|
|
||||||
|
func _process(delta: float) -> void:
|
||||||
|
if !NetworkManager.has_network_authority: return
|
||||||
|
if time_of_day_cache != timeOfDay:
|
||||||
|
NetworkManager.sync_property(network_uuid, "timeOfDay", timeOfDay)
|
||||||
|
|
||||||
func _simulateTime(delta):
|
func _simulateTime(delta):
|
||||||
|
if !NetworkManager.has_network_authority: return
|
||||||
if simulatingTime:
|
if simulatingTime:
|
||||||
timeOfDay += (rateOfTime / 36) * delta
|
timeOfDay += (rateOfTime / 36) * delta
|
||||||
timeOfDay = wrapf(timeOfDay, 0.0, 2400.0)
|
timeOfDay = wrapf(timeOfDay, 0.0, 2400.0)
|
||||||
|
time_of_day_cache = timeOfDay
|
||||||
|
|
||||||
func _updateLight():
|
func _updateLight():
|
||||||
sunPosition = sun_directional_light_3d.global_position.y + 0.5
|
sunPosition = sun_directional_light_3d.global_position.y + 0.5
|
||||||
@ -84,3 +104,11 @@ func _updateSky():
|
|||||||
# Match ground to gradient color
|
# Match ground to gradient color
|
||||||
skyMaterial.ground_bottom_color = sky_base_color_gradient.gradient.sample(sunPosition) # sample gradient and set ground top color to match based on the time of day
|
skyMaterial.ground_bottom_color = sky_base_color_gradient.gradient.sample(sunPosition) # sample gradient and set ground top color to match based on the time of day
|
||||||
skyMaterial.ground_horizon_color = sky_sun_set_rise_color_gradient.gradient.sample(sunPosition) # sample gradient and set ground horizon color to match based on the time of day
|
skyMaterial.ground_horizon_color = sky_sun_set_rise_color_gradient.gradient.sample(sunPosition) # sample gradient and set ground horizon color to match based on the time of day
|
||||||
|
|
||||||
|
|
||||||
|
func _on_property_update(uuid: int, property: String, value: Variant) -> void:
|
||||||
|
if NetworkManager.node_map.has(uuid):
|
||||||
|
var node = NetworkManager.node_map[uuid]
|
||||||
|
node.set(property, value)
|
||||||
|
else:
|
||||||
|
printerr("Received property update but node_id is wrong? Expected " + str(network_uuid) + " but got " + str(uuid))
|
@ -4,6 +4,8 @@ const STEAM_APP_ID: int = 480
|
|||||||
|
|
||||||
const PACKET_READ_LIMIT: int = 32
|
const PACKET_READ_LIMIT: int = 32
|
||||||
|
|
||||||
|
var has_network_authority: bool = false
|
||||||
|
|
||||||
var level_scene: PackedScene
|
var level_scene: PackedScene
|
||||||
var player_scene: PackedScene
|
var player_scene: PackedScene
|
||||||
|
|
||||||
@ -314,15 +316,15 @@ func read_p2p_packet() -> void:
|
|||||||
#print("Received property update packet for node %d: %s = %s" % [readable_data["node_id"], readable_data["property_name"], readable_data["value"]])
|
#print("Received property update packet for node %d: %s = %s" % [readable_data["node_id"], readable_data["property_name"], readable_data["value"]])
|
||||||
|
|
||||||
|
|
||||||
func register_node(node: Node) -> String:
|
func register_node(node: Node) -> int:
|
||||||
var uuid = generate_uuid()
|
var uuid = generate_uuid()
|
||||||
node_map[uuid] = node
|
node_map[uuid] = node
|
||||||
return uuid
|
return uuid
|
||||||
|
|
||||||
|
|
||||||
func generate_uuid() -> String:
|
func generate_uuid() -> int:
|
||||||
uuid_counter += 1
|
uuid_counter += 1
|
||||||
return str(uuid_counter)
|
return uuid_counter
|
||||||
|
|
||||||
|
|
||||||
func request_player_avatar(user_id: int, size: int = 128) -> void:
|
func request_player_avatar(user_id: int, size: int = 128) -> void:
|
||||||
@ -374,14 +376,16 @@ func _on_game_started():
|
|||||||
player.username = Steam.getFriendPersonaName(member["steam_id"])
|
player.username = Steam.getFriendPersonaName(member["steam_id"])
|
||||||
|
|
||||||
if member["steam_id"] == steam_id:
|
if member["steam_id"] == steam_id:
|
||||||
|
has_network_authority = true
|
||||||
player.is_network_authority = true
|
player.is_network_authority = true
|
||||||
else:
|
else:
|
||||||
|
has_network_authority = false
|
||||||
player.is_network_authority = false
|
player.is_network_authority = false
|
||||||
|
|
||||||
level.add_child(player)
|
level.add_child(player)
|
||||||
|
|
||||||
|
|
||||||
func sync_property(node_id: String, property_name: String, value: Variant):
|
func sync_property(node_id: int, property_name: String, value: Variant):
|
||||||
var packet_data = {"message":"property_update", "node_id": node_id, "property_name":property_name, "value":value}
|
var packet_data = {"message":"property_update", "node_id": node_id, "property_name":property_name, "value":value}
|
||||||
send_p2p_packet(0, packet_data)
|
send_p2p_packet(0, packet_data)
|
||||||
|
|
||||||
|
@ -4,8 +4,7 @@ var player_tag: Label3D
|
|||||||
var username: String = ""
|
var username: String = ""
|
||||||
var is_piloting: bool = false
|
var is_piloting: bool = false
|
||||||
|
|
||||||
var is_network_authority: bool = false
|
var network_uuid: int
|
||||||
var network_uuid: String = ""
|
|
||||||
var steam_id: int = 0
|
var steam_id: int = 0
|
||||||
|
|
||||||
@export_category("Player")
|
@export_category("Player")
|
||||||
@ -34,17 +33,17 @@ var previous_global_rotation: Vector3
|
|||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
NetworkManager.property_update_received.connect(_on_property_update)
|
NetworkManager.property_update_received.connect(_on_property_update)
|
||||||
network_uuid = NetworkManager.register_node(self)
|
network_uuid = NetworkManager.get_network_uuid(self)
|
||||||
|
|
||||||
player_tag = get_node("PlayerTag")
|
player_tag = get_node("PlayerTag")
|
||||||
player_tag.text = username
|
player_tag.text = username
|
||||||
|
|
||||||
if is_network_authority:
|
if NetworkManager.has_network_authority:
|
||||||
camera.make_current()
|
camera.make_current()
|
||||||
|
|
||||||
|
|
||||||
func _unhandled_input(event: InputEvent) -> void:
|
func _unhandled_input(event: InputEvent) -> void:
|
||||||
if !is_network_authority: return
|
if !NetworkManager.has_network_authority: return
|
||||||
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||||
if event is InputEventMouseMotion:
|
if event is InputEventMouseMotion:
|
||||||
is_using_joystick = false
|
is_using_joystick = false
|
||||||
@ -57,7 +56,7 @@ func _unhandled_input(event: InputEvent) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _input(event):
|
func _input(event):
|
||||||
if !is_network_authority: return
|
if !NetworkManager.has_network_authority: return
|
||||||
if event.is_action_pressed("esc") and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
if event.is_action_pressed("esc") and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||||
release_mouse()
|
release_mouse()
|
||||||
elif event.is_action_pressed("esc") and not Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
elif event.is_action_pressed("esc") and not Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||||
@ -65,7 +64,7 @@ func _input(event):
|
|||||||
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
if !is_network_authority: return
|
if !NetworkManager.has_network_authority: return
|
||||||
if current_ship != null:
|
if current_ship != null:
|
||||||
if is_piloting: #if we are piloting a ship
|
if is_piloting: #if we are piloting a ship
|
||||||
global_transform.basis = current_ship.global_transform.basis
|
global_transform.basis = current_ship.global_transform.basis
|
||||||
@ -84,7 +83,7 @@ func _physics_process(delta: float) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
if !is_network_authority: return
|
if !NetworkManager.has_network_authority: return
|
||||||
|
|
||||||
# If the global_position has changed, notify the NetworkManager
|
# If the global_position has changed, notify the NetworkManager
|
||||||
if previous_global_position != global_position:
|
if previous_global_position != global_position:
|
||||||
@ -96,17 +95,17 @@ func _process(delta: float) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func capture_mouse() -> void:
|
func capture_mouse() -> void:
|
||||||
if !is_network_authority: return
|
if !NetworkManager.has_network_authority: return
|
||||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||||
|
|
||||||
|
|
||||||
func release_mouse() -> void:
|
func release_mouse() -> void:
|
||||||
if !is_network_authority: return
|
if !NetworkManager.has_network_authority: return
|
||||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||||
|
|
||||||
|
|
||||||
func _rotate_camera(sens_mod: float = 1.0) -> void:
|
func _rotate_camera(sens_mod: float = 1.0) -> void:
|
||||||
if !is_network_authority: return
|
if !NetworkManager.has_network_authority: return
|
||||||
var camera_sens_final = camera_sens
|
var camera_sens_final = camera_sens
|
||||||
if is_using_joystick:
|
if is_using_joystick:
|
||||||
camera_sens_final = camera_sens * joystick_camera_sens_multiplier
|
camera_sens_final = camera_sens * joystick_camera_sens_multiplier
|
||||||
@ -147,21 +146,21 @@ func _jump(delta: float) -> Vector3:
|
|||||||
|
|
||||||
|
|
||||||
func player_entered_ship(ship_global_position: Vector3, ship: Ship):
|
func player_entered_ship(ship_global_position: Vector3, ship: Ship):
|
||||||
if !is_network_authority: return
|
if !NetworkManager.has_network_authority: return
|
||||||
current_ship = ship
|
current_ship = ship
|
||||||
print(ship.ship_id)
|
print(ship.ship_id)
|
||||||
print(global_position)
|
print(global_position)
|
||||||
|
|
||||||
|
|
||||||
func player_exited_ship(ship_global_position: Vector3, ship: Ship):
|
func player_exited_ship(ship_global_position: Vector3, ship: Ship):
|
||||||
if !is_network_authority: return
|
if !NetworkManager.has_network_authority: return
|
||||||
current_ship = null
|
current_ship = null
|
||||||
print(ship.ship_id)
|
print(ship.ship_id)
|
||||||
print(global_position)
|
print(global_position)
|
||||||
|
|
||||||
|
|
||||||
func set_is_piloting(state: bool):
|
func set_is_piloting(state: bool):
|
||||||
if !is_network_authority: return
|
if !NetworkManager.has_network_authority: return
|
||||||
is_piloting = state
|
is_piloting = state
|
||||||
GameConsole.log_debug("player pilot state" + str(is_piloting))
|
GameConsole.log_debug("player pilot state" + str(is_piloting))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user