Client.gd 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  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. remote func aimanim(id):
  104. if $players.has_node(str(id)):
  105. $players.get_node(str(id)).shooting()
  106. func reconstruct_int16(bytetest):
  107. return ((bytetest[0] * 255) + bytetest[1])-32768
  108. var argbuffer
  109. var posbuffer
  110. remote func projectiles_sync(arg):
  111. if not has_node('projectiles'): return
  112. for i in $projectiles.get_children():
  113. i.hide()
  114. argbuffer = posbuffer
  115. posbuffer = []
  116. var sprite = []
  117. for i in range(0,arg.size(),6):
  118. var aux = Vector2( reconstruct_int16([ arg[i] , arg[i+1]]), reconstruct_int16([ arg[i+2] , arg[i+3]]) )
  119. posbuffer.append(aux)
  120. sprite.append(arg[i+4])
  121. for i in posbuffer.size():
  122. $projectiles.get_child(i).show()
  123. $projectiles.get_child(i).global_position = posbuffer[i]
  124. for i in sprite.size():
  125. $projectiles.get_child(i).texture = get_node('../Textures').dict[sprite[i]]
  126. remote func enemy_dmg_anim(arg):
  127. $enemies.get_child(arg).flash = true
  128. $enemies.get_child(arg).counter = 0
  129. remote func enemies_position_2(arg):
  130. if not has_node('enemies'): return
  131. for i in $enemies.get_children():
  132. i.hide()
  133. argbuffer = posbuffer
  134. posbuffer = []
  135. var sprite = []
  136. var side = []
  137. for i in range(0,arg.size(),6):
  138. var aux = Vector2( reconstruct_int16([ arg[i] , arg[i+1]]), reconstruct_int16([ arg[i+2] , arg[i+3]]) )
  139. posbuffer.append(aux)
  140. sprite.append(arg[i+4])
  141. side.append(arg[i+5])
  142. for i in posbuffer.size():
  143. var node = $enemies.get_child(i)
  144. node.show()
  145. node.scale.x = 1 if side[i] else -1
  146. node.global_position = posbuffer[i]
  147. for i in sprite.size():
  148. $enemies.get_child(i).texture = get_node('../Textures').dict[sprite[i]]
  149. remote func attack_anim(arg, id):
  150. if not has_node("players"): return
  151. if not $players.has_node(str(id)): return
  152. $players.get_node(str(id)).get_node('weapon/AnimationPlayer').play(arg)
  153. remote func atr_update(arg):
  154. if has_node('Hud/HBoxContainer/'+arg.keys()[0]):
  155. get_node('Hud/HBoxContainer/'+arg.keys()[0])._update(arg.values()[0])
  156. remote func player_death_update(id):
  157. print('die1')
  158. if not has_node("players"): return
  159. print('die2')
  160. $players.get_node(str(id))._die()
  161. remote func level_up(arg, id):
  162. if not has_node("players"): return
  163. $players.get_node(str(id)).level_up_anim()
  164. var loadlevel_buffer = 'lobby'
  165. remote func loadlevel(arg):
  166. arg += 'client'
  167. loadlevel_buffer = arg
  168. get_parent().get_node('Levelselect').loadlevel(arg, false)
  169. #powerpick
  170. remote func powerpick(arg , id):
  171. if has_node('PowerMenu'):
  172. $PowerMenu/CenterContainer.show()
  173. print(arg)
  174. $PowerMenu.showmenu(arg, id)
  175. func players_choice_is(choice, idbuffer):
  176. # print(choice)
  177. rpc_id(1,'optionpick',idbuffer, choice)
  178. remote func _On_chat_Message(arg, id):
  179. $Chat/RichTextLabel.text += arg + "\n"
  180. $players.get_node(str(id)).message(arg)
  181. func chat_messages(arg):
  182. print(arg)
  183. $Chat/LineEdit.text= ''
  184. rpc_id(1,'chat_messages', arg)
  185. var usernamelist = {}
  186. remote func _on_usernames(arg):
  187. for i in arg.keys():
  188. usernamelist[i] = arg[i]