mirror of
https://port.numenaute.org/aleajactaest/bazar_alea.git
synced 2024-10-05 00:08:44 +00:00
173 lines
5.2 KiB
GDScript
173 lines
5.2 KiB
GDScript
extends Node
|
|
class_name PlayerNetworkingComponent
|
|
#@export var character_movement_component : NodePath
|
|
#@onready var player_ref = get_node(character_movement_component)
|
|
## Refrence to character mesh, should be assigned to a [Node3D] that is a parent to the actual mesh (Skeleton3D)
|
|
@export var mesh_ref : Node
|
|
## Refrence to a [RayCast3D] that should detect if character is on ground
|
|
@export var ground_check : RayCast3D
|
|
## Reference to Object CharacterMovementComponent
|
|
@export var character_movement_component : CharacterMovementComponent
|
|
## Reference Player
|
|
@export var player_ref:CharacterBody3D
|
|
|
|
|
|
#var sync_camera_h_transform : Transform3D
|
|
#var sync_camera_v_transform : Transform3D
|
|
#var sync_view_mode : Global.VIEW_MODE = Global.VIEW_MODE.THIRD_PERSON
|
|
#var sync_CameraHOffset : float
|
|
#var sync_position : Vector3:
|
|
# set(value):
|
|
# sync_position = value
|
|
# processed_position = false
|
|
#var sync_mesh_rotation : Vector3
|
|
#var sync_direction : Vector3
|
|
#var sync_input_is_moving : bool
|
|
#var sync_gait : Global.GAIT = Global.GAIT.WALKING
|
|
#var sync_rotation_mode : Global.ROTATION_MODE = Global.ROTATION_MODE.VELOCITY_DIRECTION
|
|
#var sync_stance : Global.STANCE = Global.STANCE.STANDING
|
|
#var sync_movement_state : Global.MOVEMENT_STATE = Global.MOVEMENT_STATE.GROUNDED
|
|
#var sync_movement_action : Global.MOVEMENT_ACTION = Global.MOVEMENT_ACTION.NONE
|
|
#var sync_velocity : Vector3
|
|
#var processed_position : bool
|
|
|
|
var save_rot:Vector3
|
|
var tick:int = 0
|
|
var jump:Vector3 = Vector3(0.0, 0.0, 0.0)
|
|
var tickjump: int = 0
|
|
|
|
|
|
@export var id:int = 0:
|
|
get:
|
|
return id
|
|
set(value):
|
|
id = value
|
|
|
|
|
|
func _ready():
|
|
#$MultiplayerSynchronizer.set_multiplayer_authority(str(get_parent().name).to_int())
|
|
pass
|
|
|
|
|
|
func set_id(value:int) -> void:
|
|
id = value
|
|
|
|
|
|
func is_local_authority() -> bool:
|
|
if Multi.is_offline():
|
|
return true
|
|
else:
|
|
return id == Multi.get_id()
|
|
#return str(get_parent().name).to_int() == Multi.get_id()
|
|
# if multiplayer.multiplayer_peer is OfflineMultiplayerPeer:
|
|
# return true
|
|
# else:
|
|
# return str(get_parent().name).to_int() == multiplayer.get_unique_id()
|
|
|
|
#sync player on clients
|
|
func _physics_process(_delta):
|
|
return
|
|
# if !is_local_authority():
|
|
# if not processed_position:
|
|
# PlayerRef.character_node.position = sync_position
|
|
# processed_position = true
|
|
# PlayerRef.mesh_ref.rotation = sync_mesh_rotation
|
|
# PlayerRef.input_direction = sync_direction
|
|
# PlayerRef.gait = sync_gait
|
|
# PlayerRef.stance = sync_stance
|
|
# PlayerRef.rotation_mode = sync_rotation_mode
|
|
# PlayerRef.camera_root.VObject.transform = sync_camera_v_transform
|
|
# PlayerRef.camera_root.HObject.transform = sync_camera_h_transform
|
|
# PlayerRef.camera_root.view_mode = sync_CameraHOffset
|
|
# PlayerRef.camera_root.CameraHOffset = sync_CameraHOffset
|
|
# PlayerRef.movement_state = sync_movement_state
|
|
# PlayerRef.movement_action = sync_movement_action
|
|
## PlayerRef.velocity = sync_velocity
|
|
# PlayerRef.input_is_moving = sync_input_is_moving
|
|
# return
|
|
# sync_position = PlayerRef.character_node.position
|
|
# sync_mesh_rotation = PlayerRef.mesh_ref.rotation
|
|
# sync_direction = PlayerRef.input_direction
|
|
# sync_gait = PlayerRef.gait
|
|
# sync_stance = PlayerRef.stance
|
|
# sync_rotation_mode = PlayerRef.rotation_mode
|
|
# sync_camera_h_transform = PlayerRef.camera_root.HObject.transform
|
|
# sync_camera_v_transform = PlayerRef.camera_root.VObject.transform
|
|
# sync_movement_state = PlayerRef.movement_state
|
|
# sync_movement_action = PlayerRef.movement_action
|
|
# sync_input_is_moving = PlayerRef.input_is_moving
|
|
# sync_view_mode = PlayerRef.camera_root.view_mode
|
|
# sync_CameraHOffset = PlayerRef.camera_root.CameraHOffset
|
|
|
|
func get_my_position() -> Vector3:
|
|
#return $SpringArm3D/Camera3D.get_global_position()
|
|
return player_ref.get_global_position()
|
|
|
|
|
|
func get_my_rotation() -> Vector3:
|
|
return mesh_ref.get_global_rotation()
|
|
|
|
|
|
func set_first_position_player(ctick:int, pos:Vector3, rot:Vector3):
|
|
set_my_position(pos)
|
|
set_my_rotation(rot)
|
|
|
|
|
|
func update_player(ctick:int, pos:Vector3, rot:Vector3, extra:int, ctickjump:int, vel:Vector3):
|
|
#print(tick, " - ", ctick)
|
|
if tick != ctick:
|
|
#set_my_rotation(rot)
|
|
print("extra:", extra, " ctickjump:", ctickjump, " tickjump:", tickjump)
|
|
if extra & 1:
|
|
set_my_position_onlyground(pos)
|
|
if tickjump == ctickjump:
|
|
print("Already Jump")
|
|
return
|
|
tickjump = ctickjump - 1
|
|
character_movement_component.jump()
|
|
print("Go Jump")
|
|
elif tickjump == 0 or ground_check.is_colliding():
|
|
print("No Jump")
|
|
tickjump = 0
|
|
set_my_position(pos)
|
|
set_my_rotation(rot)
|
|
else:
|
|
#set_my_position_onlyground(pos)
|
|
print("Always Jump")
|
|
tick = ctick
|
|
|
|
|
|
func set_my_position(pos:Vector3):
|
|
player_ref.set_global_position(pos)
|
|
|
|
|
|
func set_my_position_onlyground(pos:Vector3):
|
|
var newpos:Vector3 = Vector3(pos.x, player_ref.get_global_position().y ,pos.z)
|
|
player_ref.set_global_position(newpos)
|
|
|
|
func set_my_rotation(rot:Vector3):
|
|
save_rot = rot
|
|
print("Update ->" + str(rot), " ", mesh_ref.get_global_rotation())
|
|
mesh_ref.set_global_rotation(rot)
|
|
#$CharacterMovementComponent.input_direction = rot
|
|
pass
|
|
|
|
|
|
func is_jump() -> bool:
|
|
return jump != Vector3( 0.0, 0.0, 0.0)
|
|
|
|
|
|
func get_jump() -> Vector3:
|
|
var ret:Vector3 = jump
|
|
jump = Vector3(0.0, 0.0, 0.0)
|
|
return ret
|
|
|
|
func get_tickjump() -> int:
|
|
return tickjump
|
|
|
|
func get_comment() -> String:
|
|
return ""
|
|
|
|
func start_jump(vertical_velocity:Vector3):
|
|
jump = vertical_velocity
|
|
tickjump += 1
|