64 lines
1.6 KiB
GDScript
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
|