mirror of
				https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
				synced 2025-11-04 08:35:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
class_name EditorTileSelector
 | 
						|
extends Control
 | 
						|
 | 
						|
@export var tile_name := ""
 | 
						|
@export_enum("Tile", "Entity", "Terrain") var type := 0
 | 
						|
@export var icon_texture: Resource = null
 | 
						|
@export var icon_region_override := Rect2(0, 0, 0, 0)
 | 
						|
 | 
						|
@export var secondary_icon_texture: Resource = null
 | 
						|
@export var secondary_icon_region_override := Rect2(0, 0, 0, 0)
 | 
						|
 | 
						|
@export_category("Entity")
 | 
						|
@export var entity_scene: PackedScene = null
 | 
						|
@export var tile_offset := Vector2i(0, 8)
 | 
						|
 | 
						|
@export_category("Tile")
 | 
						|
@export var source_id := 0
 | 
						|
@export var terrain_id := 0
 | 
						|
@export var tile_coords := Vector2i.ZERO
 | 
						|
@export var flip_h := false
 | 
						|
@export var flip_v := false
 | 
						|
 | 
						|
var texture_rect_region := Rect2(0, 0, 0, 0)
 | 
						|
 | 
						|
signal tile_selected(selector: EditorTileSelector)
 | 
						|
 | 
						|
 | 
						|
var mouse_hovered := false
 | 
						|
 | 
						|
var disabled := false
 | 
						|
 | 
						|
func _ready() -> void:
 | 
						|
	set_icon_texture()
 | 
						|
	set_second_icon_texture()
 | 
						|
	update_visuals()
 | 
						|
	set_process(false)
 | 
						|
	if tile_selected.is_connected(owner.on_tile_selected) == false:
 | 
						|
		tile_selected.connect(owner.on_tile_selected)
 | 
						|
	%NameLabel.text = tile_name
 | 
						|
 | 
						|
func _process(_delta: float) -> void:
 | 
						|
	var target_position = get_viewport().get_mouse_position()
 | 
						|
	target_position.x = clamp(target_position.x, %Panel.size.x / 2, (get_viewport().get_visible_rect().size.x) - %Panel.size.x / 2)
 | 
						|
	%NamePanel.position = target_position
 | 
						|
 | 
						|
func set_icon_texture():
 | 
						|
	if icon_texture == null:
 | 
						|
		return
 | 
						|
	if icon_texture is JSON:
 | 
						|
		$ResourceSetterNew.resource_json = icon_texture
 | 
						|
		$ResourceSetterNew.update_resource()
 | 
						|
	else:
 | 
						|
		%Icon.texture = ResourceSetter.get_resource(icon_texture, %Icon)
 | 
						|
 | 
						|
func set_second_icon_texture():
 | 
						|
	if secondary_icon_texture == null:
 | 
						|
		return
 | 
						|
	if secondary_icon_texture is JSON:
 | 
						|
		$ResourceSetterNew2.resource_json = secondary_icon_texture
 | 
						|
		$ResourceSetterNew2.update_resource()
 | 
						|
	elif secondary_icon_texture is ThemedResource:
 | 
						|
		%SecondaryIcon.texture = ResourceSetter.get_resource(secondary_icon_texture, %SecondaryIcon)
 | 
						|
	else:
 | 
						|
		%SecondaryIcon.texture = secondary_icon_texture
 | 
						|
 | 
						|
 | 
						|
func on_pressed() -> void:
 | 
						|
	tile_selected.emit(self)
 | 
						|
 | 
						|
 | 
						|
func update_visuals() -> void:
 | 
						|
	if icon_region_override != Rect2(0, 0, 0, 0):
 | 
						|
		%Icon.region_rect = icon_region_override
 | 
						|
	if secondary_icon_region_override != Rect2(0, 0, 0, 0):
 | 
						|
		%SecondaryIcon.region_rect = secondary_icon_region_override
 | 
						|
	modulate = Color.WHITE if not disabled else Color.DIM_GRAY
 | 
						|
 | 
						|
func set_mouse_hovered(hovered := false) -> void:
 | 
						|
	%NamePanel.visible = hovered and tile_name.is_empty() == false
 | 
						|
	mouse_hovered = hovered
 | 
						|
	$Button.disabled = disabled
 | 
						|
	set_process(hovered)
 | 
						|
 | 
						|
func on_mouse_entered() -> void:
 | 
						|
	set_mouse_hovered(true)
 | 
						|
 | 
						|
 | 
						|
func on_mouse_exited() -> void:
 | 
						|
	set_mouse_hovered(false)
 |