Fixed UI Buttons. TODO: Fix 3D Tile Selection/Hover etc
This commit is contained in:
parent
5b79dc9822
commit
353c2f8dbc
10 changed files with 1014 additions and 74 deletions
135
InsectButton.gd
135
InsectButton.gd
|
|
@ -9,127 +9,124 @@ extends TextureButton
|
|||
const HEX_BLACK = preload("res://InsectTiles/Assets/UI/hex_black.svg")
|
||||
const HEX_WHITE = preload("res://InsectTiles/Assets/UI/hex_white.svg")
|
||||
|
||||
@export var is_bee: bool = false
|
||||
|
||||
@export var is_black: bool = false
|
||||
|
||||
var tile_count: int = 1
|
||||
var deactivated: bool = false
|
||||
|
||||
var selected: bool = false
|
||||
var hovered: bool = false
|
||||
var deactivated: bool = false
|
||||
|
||||
func is_empty() -> bool:
|
||||
return tile_count <= 0
|
||||
|
||||
func update_tile_count_display() -> void:
|
||||
tile_count_label.text = str(tile_count)
|
||||
if is_empty():
|
||||
disable()
|
||||
|
||||
func decrement_tile_count() -> void:
|
||||
tile_count -= 1
|
||||
update_tile_count_display()
|
||||
|
||||
func disable() -> void:
|
||||
disabled = true
|
||||
deactivated = true
|
||||
|
||||
var tween = get_tree().create_tween()
|
||||
tween.tween_property(self, "modulate", Color.DIM_GRAY, 0.15)
|
||||
|
||||
func enable() -> void:
|
||||
deactivated = false
|
||||
disabled = false
|
||||
deactivated = false
|
||||
|
||||
var tween = get_tree().create_tween()
|
||||
tween.tween_property(self, "modulate", Color.WHITE, 0.15)
|
||||
|
||||
|
||||
func _on_placement_cancelled() -> void:
|
||||
if selected:
|
||||
tile_count += 1
|
||||
tile_count_label.text = str(tile_count)
|
||||
selected = false
|
||||
|
||||
|
||||
if tile_count > 0:
|
||||
if not hovered:
|
||||
_on_mouse_exited()
|
||||
selected = false
|
||||
|
||||
if not is_empty():
|
||||
enable()
|
||||
return
|
||||
|
||||
func _on_insect_placed(resource: TileResource, is_black: bool, pos: HexGrid.CubeCoordinates) -> void:
|
||||
if selected:
|
||||
selected = false
|
||||
|
||||
if not hovered:
|
||||
_on_mouse_exited()
|
||||
|
||||
if tile_count > 0:
|
||||
if not hovered:
|
||||
_on_mouse_exited()
|
||||
enable()
|
||||
return
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
GameEvents.insect_selected.connect(_on_insect_selected)
|
||||
GameEvents.insect_placement_cancelled.connect(_on_placement_cancelled)
|
||||
GameEvents.insect_placed.connect(_on_insect_placed)
|
||||
|
||||
tile_count_label.text = str(tile_count)
|
||||
insect_icon.texture = insect_resource.ui_texture
|
||||
|
||||
if is_black:
|
||||
hex.texture = HEX_BLACK
|
||||
|
||||
func _on_insect_selected(_resource: TileResource, _is_black: bool) -> void:
|
||||
disabled = true
|
||||
|
||||
if _resource == insect_resource and _is_black == is_black:
|
||||
selected = true
|
||||
if hovered and not is_empty():
|
||||
hover()
|
||||
else:
|
||||
unhover()
|
||||
|
||||
func _on_insect_placed(resource: TileResource, is_black: bool, pos: HexGrid.CubeCoordinates) -> void:
|
||||
selected = false
|
||||
|
||||
if not is_empty():
|
||||
enable()
|
||||
|
||||
if hovered and not is_empty():
|
||||
hover()
|
||||
else:
|
||||
unhover()
|
||||
|
||||
if insect_resource == resource:
|
||||
decrement_tile_count()
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
if is_black:
|
||||
hex.texture = HEX_BLACK
|
||||
|
||||
update_tile_count_display()
|
||||
insect_icon.texture = insect_resource.ui_texture
|
||||
|
||||
if is_black != GameData.is_player_black:
|
||||
disabled = true
|
||||
return
|
||||
|
||||
GameEvents.insect_selected.connect(_on_insect_selected)
|
||||
GameEvents.insect_placement_cancelled.connect(_on_placement_cancelled)
|
||||
GameEvents.insect_placed.connect(_on_insect_placed)
|
||||
|
||||
func _on_insect_selected(_resource: TileResource, _is_black: bool) -> void:
|
||||
if _resource != insect_resource:
|
||||
disable()
|
||||
|
||||
pass
|
||||
|
||||
func hover() -> void:
|
||||
hovered = true
|
||||
if GameData.is_player_black != is_black:
|
||||
return
|
||||
|
||||
var tween = get_tree().create_tween()
|
||||
tween.tween_property(hex, "position", Vector2(0, -16), 0.1).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_SPRING)
|
||||
|
||||
func unhover() -> void:
|
||||
hovered = false
|
||||
if GameData.is_player_black != is_black:
|
||||
return
|
||||
|
||||
var tween = get_tree().create_tween()
|
||||
tween.tween_property(hex, "position", Vector2(0, 0), 0.25).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_SPRING)
|
||||
|
||||
func _on_mouse_entered():
|
||||
if deactivated:
|
||||
return
|
||||
|
||||
hover()
|
||||
hovered = true
|
||||
|
||||
if not deactivated:
|
||||
hover()
|
||||
|
||||
func _on_mouse_exited():
|
||||
hovered = false
|
||||
|
||||
if selected:
|
||||
return
|
||||
|
||||
if deactivated:
|
||||
return
|
||||
|
||||
unhover()
|
||||
|
||||
if not selected:
|
||||
unhover()
|
||||
|
||||
func _on_pressed():
|
||||
if deactivated:
|
||||
if is_empty():
|
||||
return
|
||||
|
||||
if selected:
|
||||
return
|
||||
|
||||
if tile_count <= 0:
|
||||
return
|
||||
selected = true
|
||||
|
||||
GameEvents.insect_selected.emit(insect_resource, is_black)
|
||||
|
||||
tile_count -= 1
|
||||
|
||||
release_focus()
|
||||
|
||||
tile_count_label.text = str(tile_count)
|
||||
|
||||
|
||||
func _input(event):
|
||||
if Input.is_action_just_pressed("ui_accept"):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue