-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontrol.gd
92 lines (63 loc) · 3.06 KB
/
control.gd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
extends Control
@onready var popup_menu: PopupMenu = $PanelContainer/Panel/MenuBar/PopupMenu
@onready var popup_menu_2: PopupMenu = $PanelContainer/Panel/MenuBar/PopupMenu2
@onready var navigation_region_2d: NavigationRegion2D = $PanelContainer/Panel/CanvasLayer/NavigationRegion2D
@onready var navigation_region_2d_2: NavigationRegion2D = $PanelContainer/Panel/CanvasLayer/NavigationRegion2D2
@onready var character_body_2d: CharacterBody2D = $PanelContainer/Panel/CanvasLayer/CharacterBody2D
@onready var navigation_agent_2d: NavigationAgent2D = $PanelContainer/Panel/CanvasLayer/CharacterBody2D/NavigationAgent2D
@onready var navigation_obstacle_2d: NavigationObstacle2D = $PanelContainer/Panel/CanvasLayer/NavigationRegion2D2/NavigationObstacle2D
var onpath:bool = false
var madeit:bool = false
func _ready() -> void:
popup_menu.add_item("New...")
popup_menu.add_item("Restore...")
popup_menu.add_item("Quit, while you're ahead...")
popup_menu_2.add_check_item("Hard mode")
popup_menu_2.add_item("Boss Key")
self.call_deferred("init_nav")
func _input(event: InputEvent) -> void:
if event is InputEventMouseButton:
var parse_ev = event as InputEventMouseButton
if parse_ev.pressed and parse_ev.button_index == MOUSE_BUTTON_LEFT:
var pa:PackedVector2Array = navigation_region_2d.navigation_polygon.get_vertices()
var pa2:PackedVector2Array = navigation_region_2d_2.navigation_polygon.get_vertices()
if Geometry2D.is_point_in_polygon(parse_ev.global_position, pa):
if !onpath:
clicked(parse_ev.global_position)
elif Geometry2D.is_point_in_polygon(parse_ev.global_position, pa2):
if !onpath:
clicked(parse_ev.global_position)
func clicked(pos:Vector2i):
onpath = true
navigation_agent_2d.target_position = pos
await get_tree().physics_frame
func _physics_process(delta: float) -> void:
var nex
var vel
if onpath:
character_body_2d.velocity = character_body_2d.global_position.direction_to(navigation_agent_2d.get_next_path_position()) * 150.0
character_body_2d.move_and_slide()
#navigation_agent_2d.velocity = navigation_agent_2d.get_next_path_position()
#navigation_agent_2d.get_parent().transform.origin = navigation_agent_2d.get_next_path_position()
#lerp(navigation_agent_2d.get_parent().transform.origin, navigation_agent_2d.get_next_path_position(),delta )
func _on_navigation_agent_2d_target_reached() -> void:
print("Reached!")
onpath = false
func init_nav():
var rid = NavigationServer2D.get_maps()
print(rid)
navigation_obstacle_2d.set_navigation_map(rid[0])
NavigationServer2D.map_set_edge_connection_margin(rid[0],55.0)
NavigationServer2D.map_set_cell_size(rid[0],10.0)
await(get_tree().physics_frame)
print(NavigationServer2D.map_get_obstacles(rid[0]))
func _on_popup_menu_index_pressed(index: int) -> void:
match index:
2: get_tree().quit()
func _on_popup_menu_2_index_pressed(index: int) -> void:
match index:
0:
popup_menu_2.toggle_item_checked(0)
func _on_navigation_agent_2d_waypoint_reached(details: Dictionary) -> void:
var pos = navigation_agent_2d.target_position
#await get_tree().physics_frame