|
|
@ -17,9 +17,10 @@ var ping_update_timer: Timer |
|
|
|
## Hardcoded list of bone names that will get syncronized. |
|
|
|
## Hardcoded list of bone names that will get syncronized. |
|
|
|
var tracked_bones: Array[String] |
|
|
|
var tracked_bones: Array[String] |
|
|
|
|
|
|
|
|
|
|
|
var version: int = -1 |
|
|
|
var version : int = -1 |
|
|
|
var bone_lookup: Array[String] = [] |
|
|
|
var bone_lookup : Array[String] = [] |
|
|
|
var blendshape_lookup: Array[NodePath] = [] |
|
|
|
var blendshape_lookup : Array[NodePath] = [] |
|
|
|
|
|
|
|
var collider_data : Array[Dictionary] = [] |
|
|
|
|
|
|
|
|
|
|
|
# TODO: Remember the position of each remote player by name. |
|
|
|
# TODO: Remember the position of each remote player by name. |
|
|
|
## Whether the position of remote players can be ajusted |
|
|
|
## Whether the position of remote players can be ajusted |
|
|
@ -175,7 +176,7 @@ func on_peer_connected(id: int) -> void: |
|
|
|
# (Technically this doesn't need to be relayed through the server, but oh well.) |
|
|
|
# (Technically this doesn't need to be relayed through the server, but oh well.) |
|
|
|
if nickname: change_nickname.rpc_id(id, nickname) |
|
|
|
if nickname: change_nickname.rpc_id(id, nickname) |
|
|
|
var filename = main_controller._last_loaded_vrm.get_file() |
|
|
|
var filename = main_controller._last_loaded_vrm.get_file() |
|
|
|
if filename.is_valid_filename(): change_model.rpc_id(id, version, bone_lookup, blendshape_lookup, filename) |
|
|
|
if filename.is_valid_filename(): change_model.rpc_id(id, version, bone_lookup, blendshape_lookup, collider_data, filename) |
|
|
|
|
|
|
|
|
|
|
|
update_status() |
|
|
|
update_status() |
|
|
|
print_log("%s connected" % controller.get_display_name()) |
|
|
|
print_log("%s connected" % controller.get_display_name()) |
|
|
@ -199,6 +200,8 @@ func on_connection_failed() -> void: |
|
|
|
update_enabled_state(false) |
|
|
|
update_enabled_state(false) |
|
|
|
|
|
|
|
|
|
|
|
func on_server_disconnected() -> void: |
|
|
|
func on_server_disconnected() -> void: |
|
|
|
|
|
|
|
# NOTE: For some reason this is also called when the server is closed? |
|
|
|
|
|
|
|
if multiplayer.is_server(): return |
|
|
|
set_status("") |
|
|
|
set_status("") |
|
|
|
print_log("Disconnected from server") |
|
|
|
print_log("Disconnected from server") |
|
|
|
update_enabled_state(false) |
|
|
|
update_enabled_state(false) |
|
|
@ -264,9 +267,14 @@ func scene_init() -> void: |
|
|
|
blendshape_lookup.append(anim.track_get_path(track_index)) |
|
|
|
blendshape_lookup.append(anim.track_get_path(track_index)) |
|
|
|
continue |
|
|
|
continue |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
collider_data = [] |
|
|
|
|
|
|
|
for collider in skeleton.get_children(): |
|
|
|
|
|
|
|
if collider is AvatarCollider: |
|
|
|
|
|
|
|
collider_data.append(collider.get_settings()) |
|
|
|
|
|
|
|
|
|
|
|
if multiplayer.get_peers().size() > 1: |
|
|
|
if multiplayer.get_peers().size() > 1: |
|
|
|
var filename = main_controller._last_loaded_vrm.get_file() |
|
|
|
var filename = main_controller._last_loaded_vrm.get_file() |
|
|
|
change_model.rpc(version, bone_lookup, blendshape_lookup, filename) |
|
|
|
change_model.rpc(version, bone_lookup, blendshape_lookup, collider_data, filename) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func get_sync_controller(peer_id: int): #-> SyncController: |
|
|
|
func get_sync_controller(peer_id: int): #-> SyncController: |
|
|
@ -314,11 +322,12 @@ func change_model( |
|
|
|
new_version: int, |
|
|
|
new_version: int, |
|
|
|
new_bone_lookup: Array[String], |
|
|
|
new_bone_lookup: Array[String], |
|
|
|
new_blendshape_lookup: Array[NodePath], |
|
|
|
new_blendshape_lookup: Array[NodePath], |
|
|
|
|
|
|
|
new_collider_data: Array[Dictionary], |
|
|
|
filename: String, |
|
|
|
filename: String, |
|
|
|
) -> void: |
|
|
|
) -> void: |
|
|
|
var peer_id := multiplayer.get_remote_sender_id() |
|
|
|
var peer_id := multiplayer.get_remote_sender_id() |
|
|
|
var controller = get_sync_controller(peer_id) |
|
|
|
var controller = get_sync_controller(peer_id) |
|
|
|
if controller: controller.change_model(new_version, new_bone_lookup, new_blendshape_lookup, filename) |
|
|
|
if controller: controller.change_model(new_version, new_bone_lookup, new_blendshape_lookup, new_collider_data, filename) |
|
|
|
|
|
|
|
|
|
|
|
@rpc("any_peer", "unreliable_ordered") |
|
|
|
@rpc("any_peer", "unreliable_ordered") |
|
|
|
func sync_model_animation( |
|
|
|
func sync_model_animation( |
|
|
|