xiandie/scene/ground/script/c02/盒子猫canvas_layer.gd

64 lines
1.6 KiB
GDScript

extends CanvasLayer
@export var show_cat := false
@export var show_cat_duration := 3.0
@onready var cat := $TextureCat as TextureRect
func _ready():
offset = Vector2.ZERO
visible = true
await get_parent().ready
# 盒子猫镜头左右各增加边框宽度
var camera = SceneManager.get_camera_marker()
camera.limit_left -= 100
camera.limit_right += 100
if show_cat:
create_tween().tween_property(cat, "modulate:a", 0.0, show_cat_duration)
else:
cat.visible = false
var down_pressing = false:
set(val):
# print("down_pressing: ", val)
down_pressing = val
_try_toggle_crawl()
var crawling = false:
set(val):
crawling = val
# print("crawling: ", val)
if val != down_pressing:
# 执行结束后,如果发现不一致,尝试切换
# print("crawling mismatch, swtich to: ", down_pressing)
# 需要重置 tween
crawling_toggle_tween = null
_try_toggle_crawl()
var crawling_toggle_tween: Tween
func _try_toggle_crawl():
if crawling_toggle_tween and crawling_toggle_tween.is_valid():
# print("tweening, skip.")
return
crawling_toggle_tween = create_tween()
var crawl = down_pressing
if crawl:
SceneManager.freeze_player(0, 7)
else:
SceneManager.freeze_player(0, 8, true)
crawling_toggle_tween.tween_interval(0.4)
if not crawl:
crawling_toggle_tween.tween_callback(SceneManager.release_player)
crawling_toggle_tween.tween_callback(func(): crawling = crawl)
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("down") and not down_pressing:
down_pressing = true
elif event.is_action_released("down") and down_pressing:
down_pressing = false