galo 2 năm trước cách đây
mục cha
commit
df3424f1bc
7 tập tin đã thay đổi với 98 bổ sung28 xóa
  1. 33 14
      Client.gd
  2. 4 3
      Enemy.gd
  3. 8 4
      Server.gd
  4. 3 3
      enemie/monster.tscn
  5. 26 1
      main.tscn
  6. 1 1
      playerphysics.gd
  7. 23 2
      playersprite.tscn

+ 33 - 14
Client.gd

@@ -31,9 +31,23 @@ var playerphsyics = preload('res://playersprite.tscn')
 func _On_Connection_Succeeded():
 	$Input.enabled = true
 	print("Succesfully connected to game server")
-	var instance = playerphsyics.instance()
-	instance.name = str(api.get_network_unique_id())
-	$players.add_child(instance)
+	if not has_node("players"): return
+	request_clients()
+	yield(self, 'client_request')
+	for x in current_clients:
+		var instance = playerphsyics.instance()
+		instance.name = str(x)
+		$players.add_child(instance)
+
+signal client_request
+var current_clients = []
+
+func request_clients():
+	rpc_id(1,'send_clients')
+
+remote func client_data(arg):
+	current_clients = arg
+	emit_signal('client_request')
 
 # extra stuff
 
@@ -49,6 +63,7 @@ func send_input(arg):
 	rpc_id(1,'input_handler',arg)
 
 remote func player_position(arg):
+	if not has_node("players"): return
 	for id in arg.keys():
 		if $players.has_node(str(id)):
 			var node = $players.get_node(str(id))
@@ -57,19 +72,23 @@ remote func player_position(arg):
 			node.global_position = arg[id]
 
 remote func player_animation(arg):
+	if not has_node("players"): return
 	for id in arg.keys():
 		if $players.has_node(str(id)):
 			$players.get_node(str(id)).animation  = arg[id]
 
 remote func enemies_position(arg):
-	if has_node('enemies'):
-		for i in $enemies.get_children():
-			i.hide()
-		for id in arg.keys().size():
-			var node = $enemies.get_child(id)
-			node.global_position = arg[arg.keys()[id]][0]
-			node.animation = arg[arg.keys()[id]][1]
-			node.show()
-
-remote func attack_anim(arg):
-	$players.get_node( str(api.get_network_unique_id()) ).get_node('weapon/AnimationPlayer').play(arg)
+	if not has_node('enemies'): return
+	for i in $enemies.get_children():
+		i.hide()
+	for id in arg.keys().size():
+		var node = $enemies.get_child(id)
+		node.global_position = arg[arg.keys()[id]][0]
+		node.animation = arg[arg.keys()[id]][1]
+		node.show()
+
+remote func attack_anim(arg, id):
+	if not has_node("players"): return
+#	for i in $players.get_children():
+#		print(i.name)
+	$players.get_node(str(id)).get_node('weapon/AnimationPlayer').play(arg)

+ 4 - 3
Enemy.gd

@@ -6,7 +6,7 @@ var type = 'goblin'
 
 func damage(arg):
 	vida += arg
-	if vida == 0:
+	if vida <= 0:
 		get_parent().death_count()
 		queue_free()
 
@@ -17,12 +17,13 @@ onready var reaction_time = int(rand_range(60,120))
 func _ready():
 	var array = get_node('../../players').get_children()
 	array.shuffle()
-	target = array[0]
-	
+	if array.size() > 0:
+		target = array[0]
 
 var dir_buffer = 0
 
 func _physics_process(delta):
+	if target == null: _ready()
 	if target == null: return
 	dir_buffer += 1
 	if fmod(dir_buffer,reaction_time) == 0:

+ 8 - 4
Server.gd

@@ -32,12 +32,16 @@ func conn(arg):
 	instance.name = str(arg)
 	$players.add_child(instance)
 
+remote func send_clients():
+	rpc_id(api.get_rpc_sender_id(), 'client_data', custom_multiplayer.get_network_connected_peers())
+
+# extra
+
 func disc(arg):
 	print('client disconnected, id: ' + str(arg))
 
 remote func latency(arg):
-	var id = api.get_rpc_sender_id()
-	rpc_id(id, 'returnping', arg)
+	rpc_id(api.get_rpc_sender_id(), 'returnping', arg)
 
 remote func input_handler(arg):
 	var id = api.get_rpc_sender_id()
@@ -61,5 +65,5 @@ func _physics_process(delta):
 		enemies_datachunk[i.name] = [i.global_position, i.type]
 	rpc_id(0, 'enemies_position', enemies_datachunk)
 
-remote func player_anim(attack,arg):
-	rpc_id(int(name), 'attack_anim', attack)
+func player_anim(attack,arg):
+	rpc_id( 0,'attack_anim', attack, int(arg) )

+ 3 - 3
enemie/monster.tscn

@@ -26,7 +26,7 @@ animations = [ {
 "speed": 5.0
 } ]
 
-[sub_resource type="GDScript" id=8]
+[sub_resource type="GDScript" id=28]
 script/source = "extends AnimatedSprite
 
 
@@ -50,6 +50,6 @@ func _ready():
 visible = false
 frames = SubResource( 3 )
 animation = "goblin"
-frame = 1
+frame = 3
 playing = true
-script = SubResource( 8 )
+script = SubResource( 28 )

+ 26 - 1
main.tscn

@@ -1,4 +1,4 @@
-[gd_scene load_steps=8 format=2]
+[gd_scene load_steps=9 format=2]
 
 [ext_resource path="res://Client.gd" type="Script" id=1]
 [ext_resource path="res://Server.gd" type="Script" id=2]
@@ -8,6 +8,25 @@
 [ext_resource path="res://spawner.gd" type="Script" id=6]
 [ext_resource path="res://enemiessprite.gd" type="Script" id=7]
 
+[sub_resource type="GDScript" id=1]
+script/source = "extends Node
+
+var enabled = false
+
+func _physics_process(delta):
+	if enabled:
+		var input = ''
+		if Input.is_action_pressed(\"s\"):
+			input =(\"ui_down\")
+		if Input.is_action_pressed(\"w\"):
+			input =(\"ui_up\")
+		if Input.is_action_pressed(\"a\"):
+			input =(\"ui_left\")
+		if Input.is_action_pressed(\"d\"):
+			input =(\"ui_right\")
+		get_parent().send_input(input)
+"
+
 [node name="Node" type="Node"]
 
 [node name="Server" type="Node" parent="."]
@@ -43,6 +62,12 @@ script = ExtResource( 5 )
 [node name="enemies" type="Node" parent="Client"]
 script = ExtResource( 7 )
 
+[node name="Client2" type="Node" parent="."]
+script = ExtResource( 1 )
+
+[node name="Input" type="Node" parent="Client2"]
+script = SubResource( 1 )
+
 [node name="Database" type="Node" parent="."]
 script = ExtResource( 3 )
 

+ 1 - 1
playerphysics.gd

@@ -16,7 +16,7 @@ var vida = 100
 
 func damage(arg):
 	vida += arg
-	print(vida)
+	if vida <= 0: queue_free()
 
 var sidebuffer = true
 

+ 23 - 2
playersprite.tscn

@@ -1,4 +1,4 @@
-[gd_scene load_steps=32 format=2]
+[gd_scene load_steps=33 format=2]
 
 [ext_resource path="res://art/1/character 1__Idle.png" type="Texture" id=1]
 [ext_resource path="res://art/1/character 1__WALK.png" type="Texture" id=2]
@@ -127,12 +127,33 @@ animations = [ {
 "speed": 15.0
 } ]
 
+[sub_resource type="GDScript" id=28]
+script/source = "extends AnimatedSprite
+
+
+# Declare member variables here. Examples:
+# var a = 2
+# var b = \"text\"
+
+
+# Called when the node enters the scene tree for the first time.
+func _ready():
+	speed_scale = rand_range(0.8,1.2)
+	pass # Replace with function body.
+
+
+# Called every frame. 'delta' is the elapsed time since the previous frame.
+#func _process(delta):
+#	pass
+"
+
 [node name="playersprite" type="AnimatedSprite"]
 frames = SubResource( 27 )
 animation = "idle"
-frame = 2
+frame = 3
 playing = true
 offset = Vector2( 3.72692, -21.0081 )
+script = SubResource( 28 )
 
 [node name="weapon" parent="." instance=ExtResource( 4 )]
 position = Vector2( 0, -8.0534 )