Обновлено перемещение npc
This commit is contained in:
parent
62cf438b0d
commit
d9aff4fdc4
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 398 B |
29
npc/npc.gd
29
npc/npc.gd
@ -2,6 +2,9 @@ class_name NPC
|
|||||||
extends Node2D
|
extends Node2D
|
||||||
|
|
||||||
var id_path: Array[Vector2i]
|
var id_path: Array[Vector2i]
|
||||||
|
var target: Vector2i
|
||||||
|
var speed: float = 1
|
||||||
|
|
||||||
|
|
||||||
func is_walking() -> bool:
|
func is_walking() -> bool:
|
||||||
return not id_path.is_empty()
|
return not id_path.is_empty()
|
||||||
@ -10,7 +13,6 @@ func is_walking() -> bool:
|
|||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
randomize()
|
randomize()
|
||||||
$Sprite2D.set_nation(randi()%$Sprite2D.Nations.max)
|
$Sprite2D.set_nation(randi()%$Sprite2D.Nations.max)
|
||||||
set_spacesuit(false)
|
|
||||||
pass # Replace with function body.
|
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)
|
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:
|
if global_position == target_pos:
|
||||||
id_path.pop_front()
|
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:
|
func set_spacesuit(suit: bool) -> void:
|
||||||
$Sprite2D.set_spacesuit(suit)
|
$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
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
[ext_resource type="Script" path="res://npc/sprite_2d.gd" id="2_jtl2q"]
|
[ext_resource type="Script" path="res://npc/sprite_2d.gd" id="2_jtl2q"]
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_2v0ml"]
|
[sub_resource type="AtlasTexture" id="AtlasTexture_2v0ml"]
|
||||||
|
resource_local_to_scene = true
|
||||||
atlas = ExtResource("1_vgeae")
|
atlas = ExtResource("1_vgeae")
|
||||||
region = Rect2(0, 0, 16, 16)
|
region = Rect2(0, 0, 16, 16)
|
||||||
|
|
||||||
@ -14,6 +15,7 @@ z_as_relative = false
|
|||||||
script = ExtResource("1_m82ir")
|
script = ExtResource("1_m82ir")
|
||||||
|
|
||||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||||
|
texture_filter = 1
|
||||||
texture = SubResource("AtlasTexture_2v0ml")
|
texture = SubResource("AtlasTexture_2v0ml")
|
||||||
centered = false
|
centered = false
|
||||||
script = ExtResource("2_jtl2q")
|
script = ExtResource("2_jtl2q")
|
||||||
|
@ -22,13 +22,7 @@ func _ready() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func set_npc_target(npc: NPC, target: Vector2i):
|
func set_npc_target(npc: NPC, target: Vector2i):
|
||||||
var id_path = $"../TileMap".astar_grid.get_id_path(
|
npc.set_target(target)
|
||||||
$"../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
|
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
|
@ -244,3 +244,9 @@ func weight(pos: Vector2i) -> int:
|
|||||||
func update_astar_tile(pos: Vector2i):
|
func update_astar_tile(pos: Vector2i):
|
||||||
astar_grid.set_point_solid(pos, not is_walkable(pos))
|
astar_grid.set_point_solid(pos, not is_walkable(pos))
|
||||||
astar_grid.set_point_weight_scale(pos, weight(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
|
||||||
|
@ -20,6 +20,7 @@ var lmb: bool
|
|||||||
var rmb: bool
|
var rmb: bool
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
Engine.physics_ticks_per_second = 60
|
||||||
selection = SELECTION_SCENE.instantiate()
|
selection = SELECTION_SCENE.instantiate()
|
||||||
selection2 = SELECTION_SCENE.instantiate()
|
selection2 = SELECTION_SCENE.instantiate()
|
||||||
add_child(selection)
|
add_child(selection)
|
||||||
|
@ -852,14 +852,17 @@ texture = ExtResource("4_xeinu")
|
|||||||
1:1/0/custom_data_3 = Vector2i(1, 1)
|
1:1/0/custom_data_3 = Vector2i(1, 1)
|
||||||
1:1/0/custom_data_4 = true
|
1:1/0/custom_data_4 = true
|
||||||
1:1/0/custom_data_5 = 1
|
1:1/0/custom_data_5 = 1
|
||||||
|
1:1/0/custom_data_6 = true
|
||||||
2:1/0 = 0
|
2:1/0 = 0
|
||||||
2:1/0/custom_data_3 = Vector2i(0, 1)
|
2:1/0/custom_data_3 = Vector2i(0, 1)
|
||||||
2:1/0/custom_data_4 = true
|
2:1/0/custom_data_4 = true
|
||||||
2:1/0/custom_data_5 = 1
|
2:1/0/custom_data_5 = 1
|
||||||
|
2:1/0/custom_data_6 = true
|
||||||
3:1/0 = 0
|
3:1/0 = 0
|
||||||
3:1/0/custom_data_3 = Vector2i(-1, 1)
|
3:1/0/custom_data_3 = Vector2i(-1, 1)
|
||||||
3:1/0/custom_data_4 = true
|
3:1/0/custom_data_4 = true
|
||||||
3:1/0/custom_data_5 = 1
|
3:1/0/custom_data_5 = 1
|
||||||
|
3:1/0/custom_data_6 = true
|
||||||
4:1/0 = 0
|
4:1/0 = 0
|
||||||
4:1/0/custom_data_3 = Vector2i(-1, 1)
|
4:1/0/custom_data_3 = Vector2i(-1, 1)
|
||||||
4:1/0/custom_data_5 = 255
|
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_3 = Vector2i(1, 0)
|
||||||
1:2/0/custom_data_4 = true
|
1:2/0/custom_data_4 = true
|
||||||
1:2/0/custom_data_5 = 1
|
1:2/0/custom_data_5 = 1
|
||||||
|
1:2/0/custom_data_6 = true
|
||||||
2:2/0 = 0
|
2:2/0 = 0
|
||||||
2:2/0/custom_data_0 = true
|
2:2/0/custom_data_0 = true
|
||||||
2:2/0/custom_data_1 = Vector2i(5, 5)
|
2:2/0/custom_data_1 = Vector2i(5, 5)
|
||||||
2:2/0/custom_data_2 = "EMPTY_ROOM"
|
2:2/0/custom_data_2 = "EMPTY_ROOM"
|
||||||
2:2/0/custom_data_4 = true
|
2:2/0/custom_data_4 = true
|
||||||
2:2/0/custom_data_5 = 1
|
2:2/0/custom_data_5 = 1
|
||||||
|
2:2/0/custom_data_6 = true
|
||||||
3:2/0 = 0
|
3:2/0 = 0
|
||||||
3:2/0/custom_data_3 = Vector2i(-1, 0)
|
3:2/0/custom_data_3 = Vector2i(-1, 0)
|
||||||
3:2/0/custom_data_4 = true
|
3:2/0/custom_data_4 = true
|
||||||
3:2/0/custom_data_5 = 1
|
3:2/0/custom_data_5 = 1
|
||||||
|
3:2/0/custom_data_6 = true
|
||||||
4:2/0 = 0
|
4:2/0 = 0
|
||||||
4:2/0/custom_data_3 = Vector2i(-1, 0)
|
4:2/0/custom_data_3 = Vector2i(-1, 0)
|
||||||
4:2/0/custom_data_4 = true
|
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_3 = Vector2i(1, -1)
|
||||||
1:3/0/custom_data_4 = true
|
1:3/0/custom_data_4 = true
|
||||||
1:3/0/custom_data_5 = 1
|
1:3/0/custom_data_5 = 1
|
||||||
|
1:3/0/custom_data_6 = true
|
||||||
2:3/0 = 0
|
2:3/0 = 0
|
||||||
2:3/0/custom_data_3 = Vector2i(0, -1)
|
2:3/0/custom_data_3 = Vector2i(0, -1)
|
||||||
2:3/0/custom_data_4 = true
|
2:3/0/custom_data_4 = true
|
||||||
2:3/0/custom_data_5 = 1
|
2:3/0/custom_data_5 = 1
|
||||||
|
2:3/0/custom_data_6 = true
|
||||||
3:3/0 = 0
|
3:3/0 = 0
|
||||||
3:3/0/custom_data_3 = Vector2i(-1, -1)
|
3:3/0/custom_data_3 = Vector2i(-1, -1)
|
||||||
3:3/0/custom_data_4 = true
|
3:3/0/custom_data_4 = true
|
||||||
3:3/0/custom_data_5 = 1
|
3:3/0/custom_data_5 = 1
|
||||||
|
3:3/0/custom_data_6 = true
|
||||||
4:3/0 = 0
|
4:3/0 = 0
|
||||||
4:3/0/custom_data_3 = Vector2i(-1, -1)
|
4:3/0/custom_data_3 = Vector2i(-1, -1)
|
||||||
4:3/0/custom_data_5 = 255
|
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_3 = Vector2i(0, 1)
|
||||||
1:5/0/custom_data_4 = true
|
1:5/0/custom_data_4 = true
|
||||||
1:5/0/custom_data_5 = 1
|
1:5/0/custom_data_5 = 1
|
||||||
|
1:5/0/custom_data_6 = true
|
||||||
2:5/0 = 0
|
2:5/0 = 0
|
||||||
2:5/0/custom_data_3 = Vector2i(-1, 1)
|
2:5/0/custom_data_3 = Vector2i(-1, 1)
|
||||||
2:5/0/custom_data_5 = 255
|
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_2 = "V_WAY"
|
||||||
1:6/0/custom_data_4 = true
|
1:6/0/custom_data_4 = true
|
||||||
1:6/0/custom_data_5 = 1
|
1:6/0/custom_data_5 = 1
|
||||||
|
1:6/0/custom_data_6 = true
|
||||||
2:6/0 = 0
|
2:6/0 = 0
|
||||||
2:6/0/custom_data_3 = Vector2i(-1, 0)
|
2:6/0/custom_data_3 = Vector2i(-1, 0)
|
||||||
2:6/0/custom_data_5 = 255
|
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_3 = Vector2i(1, 0)
|
||||||
3:6/0/custom_data_4 = true
|
3:6/0/custom_data_4 = true
|
||||||
3:6/0/custom_data_5 = 1
|
3:6/0/custom_data_5 = 1
|
||||||
|
3:6/0/custom_data_6 = true
|
||||||
1:7/0 = 0
|
1:7/0 = 0
|
||||||
1:7/0/custom_data_0 = true
|
1:7/0/custom_data_0 = true
|
||||||
1:7/0/custom_data_1 = Vector2i(3, 1)
|
1:7/0/custom_data_1 = Vector2i(3, 1)
|
||||||
1:7/0/custom_data_3 = Vector2i(0, -1)
|
1:7/0/custom_data_3 = Vector2i(0, -1)
|
||||||
1:7/0/custom_data_4 = true
|
1:7/0/custom_data_4 = true
|
||||||
1:7/0/custom_data_5 = 1
|
1:7/0/custom_data_5 = 1
|
||||||
|
1:7/0/custom_data_6 = true
|
||||||
2:7/0 = 0
|
2:7/0 = 0
|
||||||
2:7/0/custom_data_3 = Vector2i(-1, -1)
|
2:7/0/custom_data_3 = Vector2i(-1, -1)
|
||||||
2:7/0/custom_data_5 = 255
|
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_2 = "H_WAY"
|
||||||
4:6/0/custom_data_4 = true
|
4:6/0/custom_data_4 = true
|
||||||
4:6/0/custom_data_5 = 1
|
4:6/0/custom_data_5 = 1
|
||||||
|
4:6/0/custom_data_6 = true
|
||||||
4:5/0 = 0
|
4:5/0 = 0
|
||||||
4:5/0/custom_data_3 = Vector2i(0, 1)
|
4:5/0/custom_data_3 = Vector2i(0, 1)
|
||||||
4:5/0/custom_data_5 = 255
|
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_3 = Vector2i(-1, 0)
|
||||||
5:6/0/custom_data_4 = true
|
5:6/0/custom_data_4 = true
|
||||||
5:6/0/custom_data_5 = 1
|
5:6/0/custom_data_5 = 1
|
||||||
|
5:6/0/custom_data_6 = true
|
||||||
5:7/0 = 0
|
5:7/0 = 0
|
||||||
5:7/0/custom_data_3 = Vector2i(-1, -1)
|
5:7/0/custom_data_3 = Vector2i(-1, -1)
|
||||||
5:7/0/custom_data_5 = 255
|
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_4/type = 1
|
||||||
custom_data_layer_5/name = "astar_weight"
|
custom_data_layer_5/name = "astar_weight"
|
||||||
custom_data_layer_5/type = 2
|
custom_data_layer_5/type = 2
|
||||||
|
custom_data_layer_6/name = "indoors"
|
||||||
|
custom_data_layer_6/type = 1
|
||||||
sources/0 = SubResource("TileSetAtlasSource_fyh4j")
|
sources/0 = SubResource("TileSetAtlasSource_fyh4j")
|
||||||
sources/1 = SubResource("TileSetAtlasSource_mv7cw")
|
sources/1 = SubResource("TileSetAtlasSource_mv7cw")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user