Client.gd 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  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. print('tokenreply_')
  23. var tk = get_parent().get_node('Loginetcode').token_buffer
  24. print('tk is ' + tk)
  25. var username = get_parent().get_node('Loginetcode').username_server
  26. rpc_id(1,'tokenreply', tk, username)
  27. remote func on_token_confirmed():
  28. # if loadlevel_buffer == 'lobby':
  29. $spawnmsg/CenterContainer.visible = true
  30. remote func on_player_state_data(arg):
  31. print(arg)
  32. $spawnmsg/CenterContainer/VBoxContainer/spawnmsg2.text = str(arg)
  33. # $spawnmsg/CenterContainer.visible = false
  34. remote func on_queue_spawn():
  35. $spawnmsg/CenterContainer/VBoxContainer/spawnmsg2.text = 'awaiting checkpoint...'
  36. func spawn_request():
  37. rpc_id(1,'spawn_request')
  38. remote func on_spawn_request_reply():
  39. emit_signal('client_request')
  40. yield(get_tree(),"physics_frame")
  41. yield(get_tree(),"physics_frame")
  42. yield(get_tree(),"physics_frame")
  43. for x in get_tree().get_nodes_in_group('playersprite'): x.die = false
  44. $spawnmsg/CenterContainer.visible = false
  45. func _On_Connection_Failed():
  46. print("Failed to connect to game server")
  47. var playerphsyics = preload('res://playersprite.tscn')
  48. var playerhud = preload('res://hud.tscn')
  49. export var dummy = false
  50. func _On_Connection_Succeeded():
  51. rpc_id(1,'connected_peer')
  52. remote func _On_Peer_Connected():
  53. $Input.enabled = true
  54. print("Succesfully connected to game server")
  55. if not has_node("players"): return
  56. request_clients()
  57. yield(self, 'client_request')
  58. for x in current_clients:
  59. gen_objs(playerphsyics,x,$players)
  60. gen_objs(playerhud,x, $Hud/HBoxContainer)
  61. if x == api.get_network_unique_id():
  62. if $players.has_node(str(x)):
  63. if not $players.get_node(str(x)).has_node('Camera2D'):
  64. var cam2d = Camera2D.new()
  65. cam2d.current = true
  66. cam2d.offset.y = -90
  67. $players.get_node(str(x)).add_child(cam2d)
  68. if dummy:
  69. rpc_id(1,'makedummmy')
  70. func gen_objs(arg,x, node):
  71. if not node.has_node(str(x)):
  72. var instance = arg.instance()
  73. instance.name = str(x)
  74. node.add_child(instance)
  75. remote func _On_Player_Disconnect(arg):
  76. print(str(arg) + ' had left the server')
  77. var arr = [$players, $Hud/HBoxContainer]
  78. for x in arr:
  79. if x.has_node(str(arg)):
  80. x.get_node(str(arg)).queue_free()
  81. signal client_request
  82. var current_clients = []
  83. func request_clients():
  84. rpc_id(1,'send_clients')
  85. remote func client_data(arg):
  86. current_clients = arg
  87. # extra stuff
  88. var ping = 0
  89. func latency_test():
  90. rpc_id(1,'latency',OS.get_system_time_msecs())
  91. remote func returnping(arg):
  92. ping = (OS.get_system_time_msecs() - arg)
  93. func send_input(arg, arg2):
  94. rpc_id(1,'input_handler',arg, arg2)
  95. remote func player_position(arg):
  96. if not has_node("players"): return
  97. for id in arg.keys():
  98. if $players.has_node(str(id)):
  99. var node = $players.get_node(str(id))
  100. if node.global_position.x != arg[id].x:
  101. node.flip_h = node.global_position.x > arg[id].x
  102. node.get_node('Label').scale.x = -1 if node.global_position.x > arg[id].x else 1
  103. node.global_position = arg[id]
  104. remote func player_animation(arg):
  105. if not has_node("players"): return
  106. for id in arg.keys():
  107. if $players.has_node(str(id)):
  108. $players.get_node(str(id)).animation = arg[id]
  109. remote func aimanim(id):
  110. if $players.has_node(str(id)):
  111. $players.get_node(str(id)).shooting()
  112. func reconstruct_int16(bytetest):
  113. return ((bytetest[0] * 255) + bytetest[1])-32768
  114. var argbuffer
  115. var posbuffer
  116. remote func projectiles_sync(arg):
  117. if not has_node('projectiles'): return
  118. for i in $projectiles.get_children():
  119. i.hide()
  120. argbuffer = posbuffer
  121. posbuffer = []
  122. var sprite = []
  123. for i in range(0,arg.size(),6):
  124. var aux = Vector2( reconstruct_int16([ arg[i] , arg[i+1]]), reconstruct_int16([ arg[i+2] , arg[i+3]]) )
  125. posbuffer.append(aux)
  126. sprite.append(arg[i+4])
  127. for i in posbuffer.size():
  128. $projectiles.get_child(i).show()
  129. $projectiles.get_child(i).global_position = posbuffer[i]
  130. for i in sprite.size():
  131. $projectiles.get_child(i).texture = get_node('../Textures').dict[sprite[i]]
  132. remote func enemy_dmg_anim(arg):
  133. $enemies.get_child(arg).flash = true
  134. $enemies.get_child(arg).counter = 0
  135. remote func enemies_position_2(arg):
  136. if not has_node('enemies'): return
  137. for i in $enemies.get_children():
  138. i.hide()
  139. argbuffer = posbuffer
  140. posbuffer = []
  141. var sprite = []
  142. var side = []
  143. for i in range(0,arg.size(),6):
  144. var aux = Vector2( reconstruct_int16([ arg[i] , arg[i+1]]), reconstruct_int16([ arg[i+2] , arg[i+3]]) )
  145. posbuffer.append(aux)
  146. sprite.append(arg[i+4])
  147. side.append(arg[i+5])
  148. for i in posbuffer.size():
  149. var node = $enemies.get_child(i)
  150. node.show()
  151. node.scale.x = 1 if side[i] else -1
  152. node.global_position = posbuffer[i]
  153. for i in sprite.size():
  154. $enemies.get_child(i).texture = get_node('../Textures').dict[sprite[i]]
  155. remote func attack_anim(arg, id):
  156. if not has_node("players"): return
  157. if not $players.has_node(str(id)): return
  158. $players.get_node(str(id)).get_node('weapon/AnimationPlayer').play(arg)
  159. remote func atr_update(arg):
  160. if has_node('Hud/HBoxContainer/'+arg.keys()[0]):
  161. get_node('Hud/HBoxContainer/'+arg.keys()[0])._update(arg.values()[0])
  162. remote func player_death_update(id):
  163. print('die1')
  164. if not has_node("players"): return
  165. print('die2')
  166. $players.get_node(str(id))._die()
  167. remote func level_up(arg, id):
  168. if not has_node("players"): return
  169. $players.get_node(str(id)).level_up_anim()
  170. var loadlevel_buffer = 'lobby'
  171. remote func loadlevel(arg):
  172. arg += 'client'
  173. loadlevel_buffer = arg
  174. get_parent().get_node('Levelselect').loadlevel(arg, false)
  175. #powerpick
  176. remote func powerpick(arg , id):
  177. if has_node('PowerMenu'):
  178. $PowerMenu/CenterContainer.show()
  179. print(arg)
  180. $PowerMenu.showmenu(arg, id)
  181. func players_choice_is(choice, idbuffer):
  182. # print(choice)
  183. rpc_id(1,'optionpick',idbuffer, choice)
  184. remote func _On_chat_Message(arg, id):
  185. $Chat/RichTextLabel.text += arg + "\n"
  186. $players.get_node(str(id)).message(arg)
  187. func chat_messages(arg):
  188. print(arg)
  189. $Chat/LineEdit.text= ''
  190. rpc_id(1,'chat_messages', arg)
  191. var usernamelist = {}
  192. remote func _on_usernames(arg):
  193. for i in arg.keys():
  194. usernamelist[i] = arg[i]
  195. var spriter = preload('res://enemie/enemyspriter.tscn')
  196. var sprite_list = {}
  197. remote func add_sprite(anim, pos, id, auto):
  198. if not sprite_list.keys().has(id):
  199. var instancer = spriter.instance()
  200. add_child(instancer)
  201. instancer.id = id
  202. sprite_list[id] = instancer
  203. if is_instance_valid(sprite_list[id]):
  204. sprite_list[id].global_position = pos
  205. if sprite_list[id].get_animation() != anim:
  206. sprite_list[id].set_animation(anim)
  207. sprite_list[id]._set_playing(true)
  208. remote func nuke_sprite(id):
  209. if is_instance_valid(sprite_list[id]):
  210. if sprite_list.keys().has(id):
  211. sprite_list[id].queue_free()
  212. remote func flash_spriter(id):
  213. if is_instance_valid(sprite_list[id]):
  214. if sprite_list.keys().has(id):
  215. sprite_list[id].modulate = Color(5,2,1)
  216. yield(get_tree().create_timer(0.05),"timeout")
  217. sprite_list[id].modulate = Color(1,1,1)