Skip to content

Commit 951b3e8

Browse files
committed
Przywołanie nietoperza
1 parent 2fbd279 commit 951b3e8

File tree

4 files changed

+137
-1
lines changed

4 files changed

+137
-1
lines changed

Nodes/Projectiles/PBat.tscn

+126
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
[gd_scene load_steps=5 format=2]
2+
3+
[ext_resource path="res://Graphics/Enemies/Bat.png" type="Texture" id=1]
4+
5+
[sub_resource type="GDScript" id=1]
6+
resource_name = "Bone"
7+
script/source = "extends KinematicBody2D
8+
9+
var player
10+
11+
onready var sprite = $Sprite
12+
13+
var enemy
14+
var velocity = Vector2()
15+
16+
func _ready():
17+
if Com.register_node(self, \"Projectiles/PBat\"): return
18+
19+
func home(dir):
20+
var enemies = get_tree().get_nodes_in_group(\"enemies\")
21+
var closest = enemies.front()
22+
if closest:
23+
var closest_dist = global_position.distance_squared_to(closest.global_position)
24+
25+
for enemy in enemies:
26+
var dist = global_position.distance_squared_to(enemy.global_position)
27+
28+
if dist < closest_dist:
29+
closest = enemy
30+
closest_dist = dist
31+
32+
if global_position.distance_squared_to(closest.global_position) < 90000:
33+
enemy = closest
34+
35+
if not enemy:
36+
velocity = Vector2.RIGHT * 400 * dir
37+
38+
func attack():
39+
return {damage = player.stats.magic_attack + 3}
40+
41+
func _physics_process(delta):
42+
if sprite.position.length_squared() > 1:
43+
sprite.position *= 0.7
44+
else:
45+
sprite.position = Vector2()
46+
47+
if Com.is_server:
48+
if enemy and is_instance_valid(enemy):
49+
velocity = (enemy.global_position - global_position).normalized() * 400
50+
elif enemy:
51+
enemy = null
52+
else:
53+
sprite.flip_h = velocity.x < 0
54+
55+
position += velocity * delta
56+
57+
func state_vector_types():
58+
return [
59+
Data.TYPE.U16,
60+
Data.TYPE.U16,
61+
Data.TYPE.U16,
62+
Data.TYPE.U16
63+
]
64+
65+
func get_state_vector():
66+
return [
67+
round(position.x),
68+
round(position.y),
69+
round(velocity.x) + 10000,
70+
round(velocity.y) + 10000
71+
]
72+
73+
func apply_state_vector(timestamp, diff_vector, vector):
74+
var old_position = position
75+
position.x = vector[0]
76+
position.y = vector[1]
77+
if has_meta(\"initialized\"): sprite.position = (old_position - position) + sprite.position
78+
79+
velocity.x = vector[2] - 10000
80+
velocity.y = vector[3] - 10000
81+
82+
func on_hit():
83+
Com.dispose_node(self)"
84+
85+
[sub_resource type="RectangleShape2D" id=2]
86+
extents = Vector2( 16, 8 )
87+
88+
[sub_resource type="Animation" id=3]
89+
resource_name = "Flying"
90+
length = 4.0
91+
loop = true
92+
step = 1.0
93+
tracks/0/type = "value"
94+
tracks/0/path = NodePath("Sprite:frame")
95+
tracks/0/interp = 1
96+
tracks/0/loop_wrap = true
97+
tracks/0/imported = false
98+
tracks/0/enabled = true
99+
tracks/0/keys = {
100+
"times": PoolRealArray( 0, 1, 2, 3 ),
101+
"transitions": PoolRealArray( 1, 1, 1, 1 ),
102+
"update": 1,
103+
"values": [ 1, 2, 3, 2 ]
104+
}
105+
106+
[node name="Bat" type="KinematicBody2D" groups=[
107+
"player_attack",
108+
]]
109+
z_index = 2
110+
collision_layer = 0
111+
collision_mask = 5
112+
script = SubResource( 1 )
113+
114+
[node name="Collider" type="CollisionShape2D" parent="."]
115+
shape = SubResource( 2 )
116+
117+
[node name="Sprite" type="Sprite" parent="."]
118+
scale = Vector2( 0.5, 0.5 )
119+
texture = ExtResource( 1 )
120+
hframes = 4
121+
frame = 3
122+
123+
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
124+
autoplay = "Flying"
125+
playback_speed = 16.0
126+
anims/Flying = SubResource( 3 )

Scripts/Networking/Data.gd

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const NODES = [
3030
"Enemies/Dagger",
3131
"Projectiles/PBone",
3232
"Projectiles/PDagger",
33+
"Projectiles/PBat",
3334
"Effects/Soul",
3435
"Objects/Item"
3536
]

Scripts/Player.gd

+8
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,14 @@ func trigger_soul():
212212
get_meta("character").call("SyncStat", "mp", stats.mp)
213213

214214
match Res.get_res(Res.souls, int(souls[0])).name:
215+
"Summon Bat":
216+
var bat = preload("res://Nodes/Projectiles/PBat.tscn").instance()
217+
get_parent().add_child(bat)
218+
bat.position = position
219+
if Com.is_server:
220+
bat.home(direction_i())
221+
bat.player = self
222+
215223
"Bone Throw":
216224
var bone = preload("res://Nodes/Projectiles/PBone.tscn").instance()
217225
get_parent().add_child(bone)

TODO.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
-można przeżyć z 0 hp? (albo buguje się wartość)
44

5-
>zamienić ID map na ich nazwy
65
-potrafi się wykrzaczyć podczas np. BroadcastPacket, bo cocnurrent modifiation (chyba trzeba też inne kolekcje zabezpieczyć)
76
>niedawanie do ticka objektów, które wcale się nie zmieniły
87
-zwalone tło jak większe okno
@@ -14,7 +13,9 @@
1413
-a potem wgl łączy się znowu z serwerem wtf
1514
+informacje jak ktoś wchodzi albo umiera
1615
-wychodzący gracz się nie wylogowyje?
16+
-nie działa mp save odnowa
1717

18+
>zamienić ID map na ich nazwy
1819
+potwierdzenie save
1920
+usuwanie gracza z controls, gdy wychodzi z servera
2021
-zabezpieczyć stream.write w każdym miejscu

0 commit comments

Comments
 (0)