Client.gd 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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. func _On_Connection_Failed():
  27. print("Failed to connect to game server")
  28. var playerphsyics = preload('res://playersprite.tscn')
  29. var playerhud = preload('res://hud.tscn')
  30. export var dummy = false
  31. func _On_Connection_Succeeded():
  32. rpc_id(1,'connected_peer')
  33. remote func _On_Peer_Connected():
  34. $Input.enabled = true
  35. print("Succesfully connected to game server")
  36. if not has_node("players"): return
  37. request_clients()
  38. yield(self, 'client_request')
  39. for x in current_clients:
  40. gen_objs(playerphsyics,x,$players)
  41. gen_objs(playerhud,x, $Hud/HBoxContainer)
  42. if x == api.get_network_unique_id():
  43. if $players.has_node(str(x)):
  44. if not $players.get_node(str(x)).has_node('Camera2D'):
  45. var cam2d = Camera2D.new()
  46. cam2d.current = true
  47. cam2d.offset.y = -90
  48. $players.get_node(str(x)).add_child(cam2d)
  49. if dummy:
  50. rpc_id(1,'makedummmy')
  51. func gen_objs(arg,x, node):
  52. if not node.has_node(str(x)):
  53. var instance = arg.instance()
  54. instance.name = str(x)
  55. node.add_child(instance)
  56. remote func _On_Player_Disconnect(arg):
  57. print(str(arg) + ' had left the server')
  58. var arr = [$players, $Hud/HBoxContainer]
  59. for x in arr:
  60. if x.has_node(str(arg)):
  61. x.get_node(str(arg)).queue_free()
  62. signal client_request
  63. var current_clients = []
  64. func request_clients():
  65. rpc_id(1,'send_clients')
  66. remote func client_data(arg):
  67. current_clients = arg
  68. emit_signal('client_request')
  69. # extra stuff
  70. var ping = 0
  71. func latency_test():
  72. rpc_id(1,'latency',OS.get_system_time_msecs())
  73. remote func returnping(arg):
  74. ping = (OS.get_system_time_msecs() - arg)
  75. func send_input(arg, arg2):
  76. rpc_id(1,'input_handler',arg, arg2)
  77. remote func player_position(arg):
  78. if not has_node("players"): return
  79. for id in arg.keys():
  80. if $players.has_node(str(id)):
  81. var node = $players.get_node(str(id))
  82. if node.global_position.x != arg[id].x:
  83. node.scale.x = -1 if node.global_position.x > arg[id].x else 1
  84. node.get_node('Label').scale.x = -1 if node.global_position.x > arg[id].x else 1
  85. node.global_position = arg[id]
  86. remote func player_animation(arg):
  87. if not has_node("players"): return
  88. for id in arg.keys():
  89. if $players.has_node(str(id)):
  90. $players.get_node(str(id)).animation = arg[id]
  91. func reconstruct_int16(bytetest):
  92. return ((bytetest[0] * 255) + bytetest[1])-32768
  93. var argbuffer
  94. var posbuffer
  95. remote func projectiles_sync(arg):
  96. if not has_node('projectiles'): return
  97. for i in $projectiles.get_children():
  98. i.hide()
  99. argbuffer = posbuffer
  100. posbuffer = []
  101. var sprite = []
  102. for i in range(0,arg.size(),5):
  103. var aux = Vector2( reconstruct_int16([ arg[i] , arg[i+1]]), reconstruct_int16([ arg[i+2] , arg[i+3]]) )
  104. posbuffer.append(aux)
  105. sprite.append(arg[i+4])
  106. for i in posbuffer.size():
  107. $projectiles.get_child(i).show()
  108. $projectiles.get_child(i).global_position = posbuffer[i]
  109. for i in sprite.size():
  110. $projectiles.get_child(i).texture = get_node('../Textures').dict[sprite[i]]
  111. remote func enemies_position_2(arg):
  112. if not has_node('enemies'): return
  113. for i in $enemies.get_children():
  114. i.hide()
  115. argbuffer = posbuffer
  116. posbuffer = []
  117. var sprite = []
  118. for i in range(0,arg.size(),5):
  119. var aux = Vector2( reconstruct_int16([ arg[i] , arg[i+1]]), reconstruct_int16([ arg[i+2] , arg[i+3]]) )
  120. posbuffer.append(aux)
  121. sprite.append(arg[i+4])
  122. for i in posbuffer.size():
  123. $enemies.get_child(i).show()
  124. $enemies.get_child(i).global_position = posbuffer[i]
  125. for i in sprite.size():
  126. $enemies.get_child(i).texture = get_node('../Textures').dict[sprite[i]]
  127. remote func attack_anim(arg, id):
  128. if not has_node("players"): return
  129. if not $players.has_node(str(id)): return
  130. $players.get_node(str(id)).get_node('weapon/AnimationPlayer').play(arg)
  131. remote func atr_update(arg):
  132. if has_node('Hud/HBoxContainer/'+arg.keys()[0]):
  133. get_node('Hud/HBoxContainer/'+arg.keys()[0])._update(arg.values()[0])
  134. remote func level_up(arg, id):
  135. if not has_node("players"): return
  136. $players.get_node(str(id)).level_up_anim()
  137. remote func loadlevel(arg):
  138. get_parent().get_node('Levelselect').loadlevel(arg, false)
  139. #powerpick
  140. remote func powerpick(arg , id):
  141. if has_node('PowerMenu'):
  142. $PowerMenu/CenterContainer.show()
  143. print(arg)
  144. $PowerMenu.showmenu(arg, id)
  145. func players_choice_is(choice, idbuffer):
  146. # print(choice)
  147. rpc_id(1,'optionpick',idbuffer, choice)
  148. remote func _On_chat_Message(arg):
  149. $Chat/RichTextLabel.text += arg + "\n"
  150. func chat_messages(arg):
  151. print(arg)
  152. $Chat/LineEdit.text= ''
  153. rpc_id(1,'chat_messages', arg)
  154. var usernamelist = {}
  155. remote func _on_usernames(arg):
  156. for i in arg.keys():
  157. usernamelist[i] = arg[i]