Client.gd 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. extends Node
  2. var net = NetworkedMultiplayerENet.new()
  3. var api = MultiplayerAPI.new()
  4. var port = 0
  5. var ip = ''
  6. # Called when the node enters the scene tree for the first time.
  7. func _ready():
  8. print('connecting to port: ' + str(port))
  9. print('at ip: '+ip)
  10. net.create_client(ip,port)
  11. self.set_custom_multiplayer(api)
  12. custom_multiplayer.set_root_node(self)
  13. custom_multiplayer.set_network_peer(net)
  14. net.connect("connection_failed", self, "_On_Connection_Failed")
  15. net.connect("connection_succeeded", self, "_On_Connection_Succeeded")
  16. pass # Replace with function body.
  17. func _process(_delta):
  18. custom_multiplayer.poll()
  19. remote func ping():
  20. print('messaged received from server')
  21. remote func tokerequest():
  22. var tk = get_parent().get_node('Loginetcode').token_buffer
  23. print('tk is ' + tk)
  24. var username = get_parent().get_node('Loginetcode').username_server
  25. rpc_id(1,'tokenreply', tk, username)
  26. remote func on_token_confirmed():
  27. if loadlevel_buffer == 'lobby':
  28. $spawnmsg/CenterContainer.visible = true
  29. remote func on_player_state_data(arg):
  30. print(arg)
  31. $spawnmsg/CenterContainer/VBoxContainer/spawnmsg2.text = str(arg)
  32. remote func on_queue_spawn():
  33. $spawnmsg/CenterContainer/VBoxContainer/spawnmsg2.text = 'awaiting checkpoint...'
  34. func spawn_request():
  35. rpc_id(1,'spawn_request')
  36. remote func on_spawn_request_reply():
  37. $spawnmsg/CenterContainer.visible = false
  38. emit_signal('client_request')
  39. func _On_Connection_Failed():
  40. print("Failed to connect to game server")
  41. var playerphsyics = preload('res://playersprite.tscn')
  42. var playerhud = preload('res://hud.tscn')
  43. export var dummy = false
  44. func _On_Connection_Succeeded():
  45. rpc_id(1,'connected_peer')
  46. remote func _On_Peer_Connected():
  47. $Input.enabled = true
  48. print("Succesfully connected to game server")
  49. if not has_node("players"): return
  50. request_clients()
  51. yield(self, 'client_request')
  52. for x in current_clients:
  53. gen_objs(playerphsyics,x,$players)
  54. gen_objs(playerhud,x, $Hud/HBoxContainer)
  55. if x == api.get_network_unique_id():
  56. if $players.has_node(str(x)):
  57. if not $players.get_node(str(x)).has_node('Camera2D'):
  58. var cam2d = Camera2D.new()
  59. cam2d.current = true
  60. cam2d.offset.y = -90
  61. $players.get_node(str(x)).add_child(cam2d)
  62. if dummy:
  63. rpc_id(1,'makedummmy')
  64. func gen_objs(arg,x, node):
  65. if not node.has_node(str(x)):
  66. var instance = arg.instance()
  67. instance.name = str(x)
  68. node.add_child(instance)
  69. remote func _On_Player_Disconnect(arg):
  70. print(str(arg) + ' had left the server')
  71. var arr = [$players, $Hud/HBoxContainer]
  72. for x in arr:
  73. if x.has_node(str(arg)):
  74. x.get_node(str(arg)).queue_free()
  75. signal client_request
  76. var current_clients = []
  77. func request_clients():
  78. rpc_id(1,'send_clients')
  79. remote func client_data(arg):
  80. current_clients = arg
  81. # extra stuff
  82. var ping = 0
  83. func latency_test():
  84. rpc_id(1,'latency',OS.get_system_time_msecs())
  85. remote func returnping(arg):
  86. ping = (OS.get_system_time_msecs() - arg)
  87. func send_input(arg, arg2):
  88. rpc_id(1,'input_handler',arg, arg2)
  89. remote func player_position(arg):
  90. if not has_node("players"): return
  91. for id in arg.keys():
  92. if $players.has_node(str(id)):
  93. var node = $players.get_node(str(id))
  94. if node.global_position.x != arg[id].x:
  95. node.flip_h = node.global_position.x > arg[id].x
  96. node.get_node('Label').scale.x = -1 if node.global_position.x > arg[id].x else 1
  97. node.global_position = arg[id]
  98. remote func player_animation(arg):
  99. if not has_node("players"): return
  100. for id in arg.keys():
  101. if $players.has_node(str(id)):
  102. $players.get_node(str(id)).animation = arg[id]
  103. func reconstruct_int16(bytetest):
  104. return ((bytetest[0] * 255) + bytetest[1])-32768
  105. var argbuffer
  106. var posbuffer
  107. remote func projectiles_sync(arg):
  108. if not has_node('projectiles'): return
  109. for i in $projectiles.get_children():
  110. i.hide()
  111. argbuffer = posbuffer
  112. posbuffer = []
  113. var sprite = []
  114. for i in range(0,arg.size(),5):
  115. var aux = Vector2( reconstruct_int16([ arg[i] , arg[i+1]]), reconstruct_int16([ arg[i+2] , arg[i+3]]) )
  116. posbuffer.append(aux)
  117. sprite.append(arg[i+4])
  118. for i in posbuffer.size():
  119. $projectiles.get_child(i).show()
  120. $projectiles.get_child(i).global_position = posbuffer[i]
  121. for i in sprite.size():
  122. $projectiles.get_child(i).texture = get_node('../Textures').dict[sprite[i]]
  123. remote func enemies_position_2(arg):
  124. if not has_node('enemies'): return
  125. for i in $enemies.get_children():
  126. i.hide()
  127. argbuffer = posbuffer
  128. posbuffer = []
  129. var sprite = []
  130. for i in range(0,arg.size(),5):
  131. var aux = Vector2( reconstruct_int16([ arg[i] , arg[i+1]]), reconstruct_int16([ arg[i+2] , arg[i+3]]) )
  132. posbuffer.append(aux)
  133. sprite.append(arg[i+4])
  134. for i in posbuffer.size():
  135. $enemies.get_child(i).show()
  136. $enemies.get_child(i).global_position = posbuffer[i]
  137. for i in sprite.size():
  138. $enemies.get_child(i).texture = get_node('../Textures').dict[sprite[i]]
  139. remote func attack_anim(arg, id):
  140. if not has_node("players"): return
  141. if not $players.has_node(str(id)): return
  142. $players.get_node(str(id)).get_node('weapon/AnimationPlayer').play(arg)
  143. remote func atr_update(arg):
  144. if has_node('Hud/HBoxContainer/'+arg.keys()[0]):
  145. get_node('Hud/HBoxContainer/'+arg.keys()[0])._update(arg.values()[0])
  146. remote func level_up(arg, id):
  147. if not has_node("players"): return
  148. $players.get_node(str(id)).level_up_anim()
  149. var loadlevel_buffer = 'lobby'
  150. remote func loadlevel(arg):
  151. arg += 'client'
  152. loadlevel_buffer = arg
  153. get_parent().get_node('Levelselect').loadlevel(arg, false)
  154. #powerpick
  155. remote func powerpick(arg , id):
  156. if has_node('PowerMenu'):
  157. $PowerMenu/CenterContainer.show()
  158. print(arg)
  159. $PowerMenu.showmenu(arg, id)
  160. func players_choice_is(choice, idbuffer):
  161. # print(choice)
  162. rpc_id(1,'optionpick',idbuffer, choice)
  163. remote func _On_chat_Message(arg, id):
  164. $Chat/RichTextLabel.text += arg + "\n"
  165. $players.get_node(str(id)).message(arg)
  166. func chat_messages(arg):
  167. print(arg)
  168. $Chat/LineEdit.text= ''
  169. rpc_id(1,'chat_messages', arg)
  170. var usernamelist = {}
  171. remote func _on_usernames(arg):
  172. for i in arg.keys():
  173. usernamelist[i] = arg[i]