From d9aff4fdc44664070c742fda4af6e4160bf141c8 Mon Sep 17 00:00:00 2001 From: DIvan2000 Date: Sun, 8 Dec 2024 15:05:33 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20npc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/Sprite-0001.aseprite | Bin 3523 -> 0 bytes assets/coridors.png | Bin 398 -> 0 bytes npc/npc.gd | 29 +++++++++++++++++++++++++++-- npc/npc.tscn | 2 ++ world/npcs.gd | 8 +------- world/tile_map.gd | 6 ++++++ world/world.gd | 1 + world/world.tscn | 17 +++++++++++++++++ 8 files changed, 54 insertions(+), 9 deletions(-) delete mode 100644 assets/Sprite-0001.aseprite delete mode 100644 assets/coridors.png diff --git a/assets/Sprite-0001.aseprite b/assets/Sprite-0001.aseprite deleted file mode 100644 index a993fa9a197c7c371495fc5dde229e95ebd1c1f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3523 zcmcJSX;f2JyT^kl(OLto?=1*{M6FV+$RuDSA)@VTL8hX&Dzk_vGZF?N;6bBO2Zk12 zl))riAxJAALckD0q%vrkQi#k+Kp{aP2@oJal5_5fy?4F+&=2>^-DmB!pZ(waSf_kR9#?%l56<0OhxSAOr5pnhhpQNLAp4i%soIXE9Zpyju zb|=>Q#fujhZ7{6vU&2GMjYPPgOSuq_wb}Kz!=E5{r93vTg~!6$^le2THevtthc^7# z!e1Hj0&%58`j9{x>-gf{%RV;P!JDp^nB7-=_i0u-=2D#;WD@>&x`?gBPLZmT}8{I8*-gn^cYq zbcxHCcGx%FA8-+5m!poN+@S<@XqId`&bu>qUO(Pu$xAh1EGT|QZ@@rU^8?V}2jTeP zAA#KMG$1m;s@+9R`P_ZY5npq`L$-!SQ_U%W_jLoPTjA@*N+!Ju2>$)>W18bCvV6;O zAHHVKeX^(IDyfWqH*D-^!6wiJ6{7B%7QSL1=f>!sSK81ht4QW!DQ%2B^iwVQM}W88 zUbA&kmh80w-$tCd=?fOhvYN>Wk;$((<_8QVPCo+P#l|2`;FKyM^-^my73enNV~=o% zF>dmPO>~yT7$|U&gzgC}=o0O=?kE)wvynr>D5KY0-kwu?(`OyxPoe`dluo zb(NI>VbbFG*txOUUmFL9(@Ns48}!~{_>3FC;HcxcsP4IBvG+sifC~w*uGS8O4NInK zMEV3zJkCIuk=v70WRmw|iiqBI!HO_S_Ss#Rz=VN1p4@0NuOjMD5ob?yR zPq+Od&1>*nt571^i4X2BmG+3|cC`^XV01p9!<2^>E5hc4f3%vY8Xj}?ZmGd)&jjS5lxybHm&C?tqq4gj-=7UONlx$;qQkjifSF?X3&U~(ZNxXy{qpc#P!Rk#A z{WCN$v8r27c_&8$nMrZrNF`7L=-E%IXKP_&8*@T+JPBF_KjQ}vOIATk5%*?l{=C&= zy?D(QL^byYz{~Xkvm&uWn2kn0{X{OsA26gklxq~YSId$~i<2+8u1FU23I1Hfnqxw) zDn};{@=#L>_$%^O7a4IIwrz>UBR$O{pjQvwkpgzj`U3<4cRNJaD+R;3<1vkAO_!R^ z@K~kfeg{oSEAg?*kH9DuFgu}{t7SG*Ff?c+`T{lxBe$z#4XR%bA*^-523hsDDzPT@TA%7@H*xoN*r&{_A}}>h zKXvC|EA={=r+X6BPG>kutl8#JZTTZVQ z%ZE$Ghitzr7i%Z^B1y*??2(cH_wuP`KdaLj-fr2q(~8tA%bSud|BLv)Z*%53(HTiI zOphpK$myY}*m3AHEO8adL#cHyAwivbT?jFH4M0d=5Hpe{Fh`u`_35U6JA7r|{sneY zL&~Qb60>xPto!QbVBs+TN>BrLM6Dp`o!RAU6>4(8!CqJ_jeSddPw%ov-`MjgF_tYb zTYolpzP+qNRj2XLkfJl!89F@U0Yc>kwm`;TP6QKgRmCIjAp1kmpJ-E*QJEUd)&!7j}aYfe3bfgXwx+g#4eJvT^VK6}*VE@|b zo?T-l~n?w7He>r!VDc;lFRziJ0| ztl(0jR&WGE+g_rVbn9h#YVKy_$;jZ}|9qQnXLBz1%EGcMZJ_fHFe`#~9*CU~YM4`A z#~JA6i!L|l9fLFq^DZ~2QG40^|Au}~?u8qCB9vS=`=#KAeiURQT zmo=n&><8JEorIc!1o zV~VA1g4gJusY~Hv-(0dvb2SmwG@jScRG_iYb+G2Lw^Q2N*u_!m9gU zANgue=Qsb8OuN5@0`atm!X%R5yF2_ZR`+i zJThKifAEe?chrM5tbbsj=YQOba_ClPXQO@zPN+L4?kmCNh1~0jnwl^Dr+@#3fiXe- zC$YZe+kMMpeWy=^k}3nJ^y00$mWfixqV;*VsXduL_kG>*9y9ym!(ju@VvM3Avm5M> Sj}<+N_K0ZTgNR+;(DvUTa|@>c diff --git a/assets/coridors.png b/assets/coridors.png deleted file mode 100644 index f2b9aacc6d5be197eeffc3a1f565897b0b29307a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmV;90df9`P)1t{P@;nzQQ51!77LX0cr_^4=MnsBE^9AC7QruK5ON$KOBt;UQ;7t|8+*pGA< zvV*22q$L!%nS)+P4>CQ-^dL*To%Yx{e|{3}d4K{Q=V;QxJ6-P9Jz!J9S0&hQB{<-1 z30474c$}L}AOt+FL4LIu5+2tgyIPC^k88HRosJ2QYkR*RkN{tmaDGQ73Eq})5|9Xw sOtk`%;gRicE0F?xm9bmjN~D;97gS8_ZM@8G(*OVf07*qoM6N<$g79{qt^fc4 diff --git a/npc/npc.gd b/npc/npc.gd index 97d2bad..6013fff 100644 --- a/npc/npc.gd +++ b/npc/npc.gd @@ -2,6 +2,9 @@ class_name NPC extends Node2D var id_path: Array[Vector2i] +var target: Vector2i +var speed: float = 1 + func is_walking() -> bool: return not id_path.is_empty() @@ -10,7 +13,6 @@ func is_walking() -> bool: func _ready() -> void: randomize() $Sprite2D.set_nation(randi()%$Sprite2D.Nations.max) - set_spacesuit(false) pass # Replace with function body. @@ -20,11 +22,34 @@ func _physics_process(delta: float) -> void: var target_pos = Vector2(id_path.front()*World.tile_size) - global_position = global_position.move_toward(target_pos, 1) + global_position = global_position.move_toward(target_pos, speed) + + if global_position.x < target_pos.x: $Sprite2D.flip_h = true + elif global_position.x > target_pos.x: $Sprite2D.flip_h = false if global_position == target_pos: id_path.pop_front() + set_target(target) + + if $"../../TileMap".check_indoors(global_position/16): + set_spacesuit(false) + else: + set_spacesuit(true) func set_spacesuit(suit: bool) -> void: $Sprite2D.set_spacesuit(suit) + if suit: speed = 0.2 + else: speed = 1 +func set_target(pos: Vector2i): + var new_id_path = $"../../TileMap".astar_grid.get_id_path( + $"../../TileMap/ground".local_to_map(global_position+$"../../TileMap/ground".global_position), + target + ).slice(1) + + if not new_id_path.is_empty(): + id_path = new_id_path + target = pos + else: + id_path = [] + target = pos diff --git a/npc/npc.tscn b/npc/npc.tscn index f679a80..bf7c7c4 100644 --- a/npc/npc.tscn +++ b/npc/npc.tscn @@ -5,6 +5,7 @@ [ext_resource type="Script" path="res://npc/sprite_2d.gd" id="2_jtl2q"] [sub_resource type="AtlasTexture" id="AtlasTexture_2v0ml"] +resource_local_to_scene = true atlas = ExtResource("1_vgeae") region = Rect2(0, 0, 16, 16) @@ -14,6 +15,7 @@ z_as_relative = false script = ExtResource("1_m82ir") [node name="Sprite2D" type="Sprite2D" parent="."] +texture_filter = 1 texture = SubResource("AtlasTexture_2v0ml") centered = false script = ExtResource("2_jtl2q") diff --git a/world/npcs.gd b/world/npcs.gd index a37dea3..d728ff8 100644 --- a/world/npcs.gd +++ b/world/npcs.gd @@ -22,13 +22,7 @@ func _ready() -> void: func set_npc_target(npc: NPC, target: Vector2i): - var id_path = $"../TileMap".astar_grid.get_id_path( - $"../TileMap/ground".local_to_map(npc.global_position+$"../TileMap/ground".global_position), - target - ).slice(1) - - if not id_path.is_empty(): - npc.id_path = id_path + npc.set_target(target) # Called every frame. 'delta' is the elapsed time since the previous frame. func _physics_process(delta: float) -> void: diff --git a/world/tile_map.gd b/world/tile_map.gd index 4a4fd73..abf608c 100644 --- a/world/tile_map.gd +++ b/world/tile_map.gd @@ -244,3 +244,9 @@ func weight(pos: Vector2i) -> int: func update_astar_tile(pos: Vector2i): astar_grid.set_point_solid(pos, not is_walkable(pos)) astar_grid.set_point_weight_scale(pos, weight(pos)) + +func check_indoors(pos: Vector2i) -> bool: + var layer = get_toplayer(pos) + var tiledata: TileData = layer.get_cell_tile_data(pos) + if tiledata != null: return tiledata.get_custom_data("indoors") + else: return false diff --git a/world/world.gd b/world/world.gd index 031d001..9a5bcba 100644 --- a/world/world.gd +++ b/world/world.gd @@ -20,6 +20,7 @@ var lmb: bool var rmb: bool func _ready(): + Engine.physics_ticks_per_second = 60 selection = SELECTION_SCENE.instantiate() selection2 = SELECTION_SCENE.instantiate() add_child(selection) diff --git a/world/world.tscn b/world/world.tscn index d2faae2..82e2393 100644 --- a/world/world.tscn +++ b/world/world.tscn @@ -852,14 +852,17 @@ texture = ExtResource("4_xeinu") 1:1/0/custom_data_3 = Vector2i(1, 1) 1:1/0/custom_data_4 = true 1:1/0/custom_data_5 = 1 +1:1/0/custom_data_6 = true 2:1/0 = 0 2:1/0/custom_data_3 = Vector2i(0, 1) 2:1/0/custom_data_4 = true 2:1/0/custom_data_5 = 1 +2:1/0/custom_data_6 = true 3:1/0 = 0 3:1/0/custom_data_3 = Vector2i(-1, 1) 3:1/0/custom_data_4 = true 3:1/0/custom_data_5 = 1 +3:1/0/custom_data_6 = true 4:1/0 = 0 4:1/0/custom_data_3 = Vector2i(-1, 1) 4:1/0/custom_data_5 = 255 @@ -871,16 +874,19 @@ texture = ExtResource("4_xeinu") 1:2/0/custom_data_3 = Vector2i(1, 0) 1:2/0/custom_data_4 = true 1:2/0/custom_data_5 = 1 +1:2/0/custom_data_6 = true 2:2/0 = 0 2:2/0/custom_data_0 = true 2:2/0/custom_data_1 = Vector2i(5, 5) 2:2/0/custom_data_2 = "EMPTY_ROOM" 2:2/0/custom_data_4 = true 2:2/0/custom_data_5 = 1 +2:2/0/custom_data_6 = true 3:2/0 = 0 3:2/0/custom_data_3 = Vector2i(-1, 0) 3:2/0/custom_data_4 = true 3:2/0/custom_data_5 = 1 +3:2/0/custom_data_6 = true 4:2/0 = 0 4:2/0/custom_data_3 = Vector2i(-1, 0) 4:2/0/custom_data_4 = true @@ -892,14 +898,17 @@ texture = ExtResource("4_xeinu") 1:3/0/custom_data_3 = Vector2i(1, -1) 1:3/0/custom_data_4 = true 1:3/0/custom_data_5 = 1 +1:3/0/custom_data_6 = true 2:3/0 = 0 2:3/0/custom_data_3 = Vector2i(0, -1) 2:3/0/custom_data_4 = true 2:3/0/custom_data_5 = 1 +2:3/0/custom_data_6 = true 3:3/0 = 0 3:3/0/custom_data_3 = Vector2i(-1, -1) 3:3/0/custom_data_4 = true 3:3/0/custom_data_5 = 1 +3:3/0/custom_data_6 = true 4:3/0 = 0 4:3/0/custom_data_3 = Vector2i(-1, -1) 4:3/0/custom_data_5 = 255 @@ -925,6 +934,7 @@ texture = ExtResource("4_xeinu") 1:5/0/custom_data_3 = Vector2i(0, 1) 1:5/0/custom_data_4 = true 1:5/0/custom_data_5 = 1 +1:5/0/custom_data_6 = true 2:5/0 = 0 2:5/0/custom_data_3 = Vector2i(-1, 1) 2:5/0/custom_data_5 = 255 @@ -937,6 +947,7 @@ texture = ExtResource("4_xeinu") 1:6/0/custom_data_2 = "V_WAY" 1:6/0/custom_data_4 = true 1:6/0/custom_data_5 = 1 +1:6/0/custom_data_6 = true 2:6/0 = 0 2:6/0/custom_data_3 = Vector2i(-1, 0) 2:6/0/custom_data_5 = 255 @@ -946,12 +957,14 @@ texture = ExtResource("4_xeinu") 3:6/0/custom_data_3 = Vector2i(1, 0) 3:6/0/custom_data_4 = true 3:6/0/custom_data_5 = 1 +3:6/0/custom_data_6 = true 1:7/0 = 0 1:7/0/custom_data_0 = true 1:7/0/custom_data_1 = Vector2i(3, 1) 1:7/0/custom_data_3 = Vector2i(0, -1) 1:7/0/custom_data_4 = true 1:7/0/custom_data_5 = 1 +1:7/0/custom_data_6 = true 2:7/0 = 0 2:7/0/custom_data_3 = Vector2i(-1, -1) 2:7/0/custom_data_5 = 255 @@ -976,6 +989,7 @@ texture = ExtResource("4_xeinu") 4:6/0/custom_data_2 = "H_WAY" 4:6/0/custom_data_4 = true 4:6/0/custom_data_5 = 1 +4:6/0/custom_data_6 = true 4:5/0 = 0 4:5/0/custom_data_3 = Vector2i(0, 1) 4:5/0/custom_data_5 = 255 @@ -988,6 +1002,7 @@ texture = ExtResource("4_xeinu") 5:6/0/custom_data_3 = Vector2i(-1, 0) 5:6/0/custom_data_4 = true 5:6/0/custom_data_5 = 1 +5:6/0/custom_data_6 = true 5:7/0 = 0 5:7/0/custom_data_3 = Vector2i(-1, -1) 5:7/0/custom_data_5 = 255 @@ -1012,6 +1027,8 @@ custom_data_layer_4/name = "walkable" custom_data_layer_4/type = 1 custom_data_layer_5/name = "astar_weight" custom_data_layer_5/type = 2 +custom_data_layer_6/name = "indoors" +custom_data_layer_6/type = 1 sources/0 = SubResource("TileSetAtlasSource_fyh4j") sources/1 = SubResource("TileSetAtlasSource_mv7cw")