You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			92 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			GDScript
		
	
		
		
			
		
	
	
			92 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			GDScript
		
	
| 
								 
											2 years ago
										 
									 | 
							
								@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"
							 |