|  |  |  | @tool | 
					
						
							|  |  |  | extends "res://addons/MetroidvaniaSystem/Scripts/MapView.gd" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @onready var ghost_map: Control = %GhostMap | 
					
						
							|  |  |  | @onready var grid: Control = %Grid | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @export var mode_group: ButtonGroup | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var mode: int | 
					
						
							|  |  |  | var preview_layer := -1 | 
					
						
							|  |  |  | var modified: bool | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _ready() -> void: | 
					
						
							|  |  |  |     if not plugin: | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     plugin.dirty_toggled.connect(update_name) | 
					
						
							|  |  |  |     await super() | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     mode_group.pressed.connect(mode_pressed) | 
					
						
							|  |  |  |     get_current_sub_editor()._editor_enter() | 
					
						
							|  |  |  |     MetSys.settings.theme_changed.connect(grid.queue_redraw) | 
					
						
							|  |  |  |     map_overlay.mouse_entered.connect(map_overlay.grab_focus) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func mode_pressed(button: BaseButton): | 
					
						
							|  |  |  |     get_current_sub_editor()._editor_exit() | 
					
						
							|  |  |  |     mode = button.get_index() - 1 | 
					
						
							|  |  |  |     get_current_sub_editor()._editor_enter() | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     map_overlay.queue_redraw() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func on_layer_changed(l: int): | 
					
						
							|  |  |  |     super(l) | 
					
						
							|  |  |  |     ghost_map.queue_redraw() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func preview_layer_changed(value: float) -> void: | 
					
						
							|  |  |  |     preview_layer = value | 
					
						
							|  |  |  |     ghost_map.queue_redraw() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func get_current_sub_editor() -> Control: | 
					
						
							|  |  |  |     return mode_group.get_buttons()[mode] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_overlay_input(event: InputEvent) -> void: | 
					
						
							|  |  |  |     super(event) | 
					
						
							|  |  |  |     get_current_sub_editor()._editor_input(event) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_drag(): | 
					
						
							|  |  |  |     ghost_map.queue_redraw() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_overlay_draw() -> void: | 
					
						
							|  |  |  |     if not plugin: | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     super() | 
					
						
							|  |  |  |     map_overlay.draw_set_transform(Vector2(map_offset) * MetSys.CELL_SIZE) | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     var sub := get_current_sub_editor() | 
					
						
							|  |  |  |     sub.top_draw = Callable() | 
					
						
							|  |  |  |     sub._editor_draw(map_overlay) | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     if sub.top_draw.is_valid(): | 
					
						
							|  |  |  |         sub.top_draw.call(map_overlay) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_ghost_map_draw() -> void: | 
					
						
							|  |  |  |     if not plugin: | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     if preview_layer == -1 or preview_layer == current_layer: | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     for x in range(-100, 100): | 
					
						
							|  |  |  |         for y in range(-100, 100): | 
					
						
							|  |  |  |             MetSys.draw_cell(ghost_map, Vector2i(x, y) + map_offset, Vector3i(x, y, preview_layer)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_grid_draw() -> void: | 
					
						
							|  |  |  |     if not plugin: | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     var empty_texture: Texture2D = MetSys.settings.theme.empty_space_texture | 
					
						
							|  |  |  |     for x in ceili(grid.size.x / MetSys.CELL_SIZE.x): | 
					
						
							|  |  |  |         for y in ceili(grid.size.y / MetSys.CELL_SIZE.y): | 
					
						
							|  |  |  |             if empty_texture: | 
					
						
							|  |  |  |                 grid.draw_texture(empty_texture, Vector2(x, y) * MetSys.CELL_SIZE) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 grid.draw_rect(Rect2(Vector2(x, y) * MetSys.CELL_SIZE, MetSys.CELL_SIZE), Color(Color.WHITE, 0.1), false) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func update_name(dirty: bool): | 
					
						
							|  |  |  |     if dirty: | 
					
						
							|  |  |  |         name = "Map Editor (*)" | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         name = "Map Editor" |