91 lines
2.3 KiB
GDScript
91 lines
2.3 KiB
GDScript
extends CanvasLayer
|
|
|
|
@export var disable_crawl := false:
|
|
set(val):
|
|
disable_crawl = val
|
|
if disable_crawl and is_node_ready():
|
|
down_pressing = false
|
|
@export var show_cat := false
|
|
@export var show_cat_duration := 6.0
|
|
|
|
@onready var cat_fg := $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
|
|
camera.limit_top -= 50
|
|
# camera.limit_bottom += 50
|
|
if show_cat and not ArchiveManager.get_global_value("c02_boxcat_skip_intro"):
|
|
cat_fg.visible = true
|
|
var tween = create_tween()
|
|
tween.tween_interval(2.5)
|
|
tween.tween_property(cat_fg, "modulate:a", 0.0, show_cat_duration - 3)
|
|
else:
|
|
cat_fg.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 disable_crawl:
|
|
return
|
|
if event.is_action_pressed("down"):
|
|
get_viewport().set_input_as_handled()
|
|
if not down_pressing:
|
|
down_pressing = true
|
|
elif event.is_action_released("down"):
|
|
get_viewport().set_input_as_handled()
|
|
if down_pressing:
|
|
down_pressing = false
|
|
|
|
|
|
func show_footprint():
|
|
$TextureFootprint.show()
|
|
var frame = $TextureFrame
|
|
frame.modulate.a = 0.0
|
|
frame.visible = true
|
|
var tween = create_tween()
|
|
tween.tween_interval(2.0)
|
|
tween.tween_property(frame, "modulate:a", 1.0, 4.0)
|