增加检阅时的运镜效果;画面支持嵌入高分辨率物品
This commit is contained in:
parent
a8b947f9a5
commit
1afa814377
File diff suppressed because one or more lines are too long
@ -8,8 +8,8 @@ enum VIBE {
|
||||
}
|
||||
|
||||
|
||||
func get_camera() -> MainCamera:
|
||||
return get_node_or_null("/root/Main/MainPlayer/CameraFocusMarker/MainCamera") as MainCamera
|
||||
func get_camera_marker():
|
||||
return get_node_or_null("/root/Main/CameraFocusMarker")
|
||||
|
||||
|
||||
func get_player() -> MainPlayer:
|
||||
@ -24,16 +24,15 @@ func freeze_player(lock_time: float, animation := ""):
|
||||
|
||||
|
||||
func set_camera_boundary(size: Vector2) -> void:
|
||||
var camera = get_camera()
|
||||
if camera:
|
||||
camera.limit_left = 0
|
||||
camera.limit_right = size.x
|
||||
var camera_marker = CameraFocusMarker
|
||||
camera_marker.limit_left = 0
|
||||
camera_marker.limit_right = size.x
|
||||
camera_marker.limit_top = -size.y / 2.0 - 38
|
||||
camera_marker.limit_bottom = size.y / 2.0 + 38
|
||||
if GlobalConfig.DEBUG:
|
||||
print("set camera boundary:", size)
|
||||
# camera.limit_top = -size.y / 2
|
||||
# camera.limit_bottom = size.y / 2
|
||||
else:
|
||||
printerr("Camera node not found")
|
||||
printerr("camera_marker node not found")
|
||||
|
||||
|
||||
func set_player_boundary(size: Vector2) -> void:
|
||||
@ -85,3 +84,52 @@ func pop_note(note: String, note_color := "white", duration := 2.5) -> void:
|
||||
func get_inspector() -> PropInspector:
|
||||
return get_node_or_null("/root/Main/PropInspector") as PropInspector
|
||||
|
||||
|
||||
func focus_nodepath(node_path: NodePath) -> void:
|
||||
if not node_path:
|
||||
printerr("Node path is empty")
|
||||
return
|
||||
var node = get_node_or_null(node_path)
|
||||
if node:
|
||||
focus_node(node)
|
||||
else:
|
||||
printerr("Node not found:", node_path)
|
||||
|
||||
|
||||
var camera_remote_transformer: RemoteTransform2D
|
||||
|
||||
|
||||
func focus_node(node: Node2D) -> void:
|
||||
var rt := node.get_node_or_null("./camera_remote_transformer") as RemoteTransform2D
|
||||
if rt:
|
||||
if camera_remote_transformer and rt != camera_remote_transformer:
|
||||
camera_remote_transformer.queue_free()
|
||||
camera_remote_transformer = rt
|
||||
else:
|
||||
if camera_remote_transformer:
|
||||
camera_remote_transformer.queue_free()
|
||||
camera_remote_transformer = RemoteTransform2D.new()
|
||||
node.add_child(camera_remote_transformer)
|
||||
_setup_camera_remote_transformer()
|
||||
|
||||
|
||||
func _setup_camera_remote_transformer():
|
||||
if not camera_remote_transformer:
|
||||
return
|
||||
camera_remote_transformer.remote_path = "/root/CameraFocusMarker"
|
||||
camera_remote_transformer.update_position = true
|
||||
camera_remote_transformer.update_rotation = false
|
||||
camera_remote_transformer.update_scale = false
|
||||
camera_remote_transformer.name = "camera_remote_transformer"
|
||||
|
||||
|
||||
func focus_player() -> void:
|
||||
var player = get_player()
|
||||
if player:
|
||||
focus_node(player)
|
||||
else:
|
||||
printerr("Player node not found")
|
||||
|
||||
|
||||
func focus_player_and_reset_zoom(duration := 1.0) -> void:
|
||||
CameraFocusMarker.tween_zoom(1.0, duration).tween_callback(focus_player)
|
||||
|
@ -33,6 +33,8 @@ buses/default_bus_layout="res://config/default_bus_layout.tres"
|
||||
|
||||
DebugMenu="*res://addons/debug_menu/debug_menu.tscn"
|
||||
GlobalConfigManager="*res://manager/config_manager/global_config_manager.gd"
|
||||
CameraFocusMarker="*res://scene/camera/camera_focus_marker.tscn"
|
||||
MainCamera="*res://scene/camera/main_camera.tscn"
|
||||
SceneManager="*res://manager/deploy/scene/scene_manager.gd"
|
||||
AudioManager="*res://manager/audio_manager/audio_manager.gd"
|
||||
EventManager="*res://manager/event_manager/event_manager.gd"
|
||||
@ -44,9 +46,9 @@ ArchiveManager="*res://manager/archive_manager/archive_manager.gd"
|
||||
[display]
|
||||
|
||||
window/size/viewport_width=564
|
||||
window/size/viewport_height=317
|
||||
window/size/viewport_height=316
|
||||
window/size/window_width_override=1692
|
||||
window/size/window_height_override=951
|
||||
window/size/window_height_override=948
|
||||
window/subwindows/embed_subwindows=false
|
||||
window/stretch/mode="canvas_items"
|
||||
window/stretch/scale_mode="integer"
|
||||
|
@ -2,9 +2,46 @@ extends Marker2D
|
||||
|
||||
@export var lock_horizontal = true
|
||||
|
||||
@export var speed := 3.0
|
||||
@export var half_screen_size := Vector2(564, 240) / 2.0
|
||||
@export var top_shaded_length := 38
|
||||
@export var limit_left := 0
|
||||
@export var limit_right := 564
|
||||
@export var limit_top := -158
|
||||
@export var limit_bottom := 158
|
||||
|
||||
@onready var target = %Target as Node2D
|
||||
# @onready var camera = %MainCamera as MainCamera
|
||||
|
||||
var zoom_ratio := 1.0
|
||||
|
||||
|
||||
func tweak_position(velocity, facing_direction):
|
||||
position.x = facing_direction.x * abs(velocity.x) * 0.3
|
||||
target.position.x = facing_direction.x * abs(velocity.x) * 0.3
|
||||
if lock_horizontal:
|
||||
global_position.y = 0
|
||||
target.position.y = 0
|
||||
else:
|
||||
position.y = facing_direction.y * abs(velocity.y) * 0.3
|
||||
target.position.y = facing_direction.y * abs(velocity.y) * 0.3
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
# set camera's position
|
||||
var target_position = target.global_position
|
||||
var current_position = MainCamera.global_position
|
||||
# easing with speed
|
||||
var position_delta = (target_position - current_position) * speed * delta
|
||||
var new_position = current_position + position_delta
|
||||
# clamp the position
|
||||
var margin = half_screen_size / zoom_ratio
|
||||
margin.y += top_shaded_length
|
||||
new_position.x = clamp(new_position.x, limit_left + margin.x, limit_right - margin.x)
|
||||
new_position.y = clamp(new_position.y, limit_top + margin.y, limit_bottom - margin.y)
|
||||
MainCamera.global_position = new_position
|
||||
MainCamera.zoom = Vector2(zoom_ratio, zoom_ratio)
|
||||
|
||||
|
||||
func tween_zoom(ratio: float, duration := 1.0) -> Tween:
|
||||
var tween = create_tween()
|
||||
tween.tween_property(self, "zoom_ratio", ratio, duration).set_trans(Tween.TRANS_CUBIC)
|
||||
return tween
|
||||
|
@ -4,3 +4,13 @@
|
||||
|
||||
[node name="CameraFocusMarker" type="Marker2D"]
|
||||
script = ExtResource("1_7t4e6")
|
||||
lock_horizontal = null
|
||||
speed = null
|
||||
half_screen_size = null
|
||||
limit_left = null
|
||||
limit_right = null
|
||||
limit_top = null
|
||||
limit_bottom = null
|
||||
|
||||
[node name="Target" type="Node2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
@ -1,4 +1 @@
|
||||
extends Camera2D
|
||||
|
||||
class_name MainCamera
|
||||
|
||||
|
111
scene/entity/hd_entity.gd
Normal file
111
scene/entity/hd_entity.gd
Normal file
@ -0,0 +1,111 @@
|
||||
@tool
|
||||
|
||||
extends Node2D
|
||||
|
||||
@export var reload := false:
|
||||
set(val):
|
||||
_reload()
|
||||
reload = false
|
||||
@export var sprite_name := "name":
|
||||
set(val):
|
||||
if sprite_name and sprite_name != val:
|
||||
_remove_sprite(sprite_name)
|
||||
sprite_name = val
|
||||
_reload()
|
||||
@export var texture: Texture2D:
|
||||
set(val):
|
||||
texture = val
|
||||
_reload()
|
||||
@export var sprite_scale := 1.0:
|
||||
set(val):
|
||||
sprite_scale = val
|
||||
_update_sprite_transform(true)
|
||||
@export var sprite_ref: Sprite2D
|
||||
|
||||
const RATIO = 4.0
|
||||
|
||||
@onready var sign_mark = %Sign as Sprite2D
|
||||
@onready var area2d = %Area2D as Area2D
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_reload()
|
||||
set_notify_transform(true)
|
||||
# set_notify_local_transform(true)
|
||||
item_rect_changed.connect(_update_sprite_transform)
|
||||
area2d.body_entered.connect(_reset)
|
||||
area2d.body_exited.connect(_on_cancel)
|
||||
sign_mark.interacted.connect(_on_interacted)
|
||||
sign_mark.cancel.connect(_on_cancel)
|
||||
|
||||
|
||||
func _notification(what: int) -> void:
|
||||
if what == NOTIFICATION_TRANSFORM_CHANGED:
|
||||
if not is_node_ready():
|
||||
await ready
|
||||
_update_sprite_transform()
|
||||
|
||||
|
||||
func _reload():
|
||||
if not texture or not sprite_name:
|
||||
return
|
||||
var layer = _get_hd_layer()
|
||||
if not layer:
|
||||
return
|
||||
sprite_ref = layer.get_node_or_null(sprite_name) as Sprite2D
|
||||
if not sprite_ref:
|
||||
sprite_ref = Sprite2D.new()
|
||||
layer.add_child(sprite_ref)
|
||||
sprite_ref.owner = layer
|
||||
sprite_ref.name = sprite_name
|
||||
sprite_ref.texture = texture
|
||||
sprite_ref.z_index = 0
|
||||
sprite_ref.centered = true
|
||||
sprite_ref.visible = true
|
||||
_update_sprite_transform()
|
||||
|
||||
|
||||
func _remove_sprite(sprite_node_name):
|
||||
if sprite_ref:
|
||||
sprite_ref.queue_free()
|
||||
sprite_ref = null
|
||||
if not sprite_name:
|
||||
return
|
||||
var layer = _get_hd_layer()
|
||||
if layer:
|
||||
var sprite = layer.get_node_or_null(sprite_node_name)
|
||||
layer.remove_child(sprite)
|
||||
sprite.queue_free()
|
||||
|
||||
|
||||
func _get_hd_layer() -> CanvasLayer:
|
||||
return get_node_or_null("../../SubViewportContainer/SubViewport/HdLayer") as CanvasLayer
|
||||
|
||||
|
||||
func _update_sprite_transform(update_scale := false):
|
||||
if not sprite_ref:
|
||||
return
|
||||
sprite_ref.global_position = global_position * RATIO
|
||||
if update_scale:
|
||||
sprite_ref.scale = Vector2(sprite_scale, sprite_scale)
|
||||
|
||||
|
||||
var interacted = false
|
||||
|
||||
|
||||
func _on_interacted() -> void:
|
||||
if interacted:
|
||||
_on_cancel()
|
||||
return
|
||||
interacted = true
|
||||
CameraFocusMarker.tween_zoom(1.8, 1.5)
|
||||
SceneManager.focus_node(self)
|
||||
|
||||
|
||||
func _on_cancel(_body = null):
|
||||
SceneManager.focus_player_and_reset_zoom()
|
||||
interacted = false
|
||||
|
||||
|
||||
func _reset(_body):
|
||||
interacted = false
|
42
scene/entity/hd_entity.tscn
Normal file
42
scene/entity/hd_entity.tscn
Normal file
@ -0,0 +1,42 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://bj4ufua0b0k34"]
|
||||
|
||||
[ext_resource type="Script" path="res://scene/entity/hd_entity.gd" id="1_fp2a8"]
|
||||
[ext_resource type="PackedScene" uid="uid://c85t6stvytvjn" path="res://scene/entity/ux/sfx.tscn" id="2_jmpkt"]
|
||||
[ext_resource type="Texture2D" uid="uid://t526pexw4ng4" path="res://asset/art/neutral_point_light.webp" id="3_oxpta"]
|
||||
[ext_resource type="Texture2D" uid="uid://dvg6wjwn1qxiv" path="res://asset/art/ui/action_mark/探索ui.png" id="4_7tkfj"]
|
||||
[ext_resource type="Script" path="res://scene/entity/ux/sign.gd" id="5_5v6q2"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_gffp4"]
|
||||
resource_local_to_scene = true
|
||||
size = Vector2(35, 70)
|
||||
|
||||
[node name="HdEntity" type="Marker2D"]
|
||||
script = ExtResource("1_fp2a8")
|
||||
|
||||
[node name="Sfx" parent="." instance=ExtResource("2_jmpkt")]
|
||||
unique_name_in_owner = true
|
||||
file = "物品查看.mp3"
|
||||
|
||||
[node name="PointLight2D" type="PointLight2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2(0, -35)
|
||||
scale = Vector2(0.2, 0.2)
|
||||
energy = 0.0
|
||||
texture = ExtResource("3_oxpta")
|
||||
texture_scale = 0.5
|
||||
|
||||
[node name="Sign" type="Sprite2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
position = Vector2(0, -9)
|
||||
scale = Vector2(0.2, 0.2)
|
||||
texture = ExtResource("4_7tkfj")
|
||||
script = ExtResource("5_5v6q2")
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 0
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||
unique_name_in_owner = true
|
||||
shape = SubResource("RectangleShape2D_gffp4")
|
98
scene/entity/local_inspectable.gd
Normal file
98
scene/entity/local_inspectable.gd
Normal file
@ -0,0 +1,98 @@
|
||||
extends Sprite2D
|
||||
|
||||
# @export var entity_config: EntityConfig:
|
||||
# set(value):
|
||||
# entity_config = value
|
||||
|
||||
enum { STATUS_NORAML, STATUS_INSPECTING_COVER, STATUS_INSPECTING_NOTES }
|
||||
|
||||
@export var entity_name: String = ""
|
||||
@export var entity_title: String = ""
|
||||
@export var texture_cover: Texture2D
|
||||
@export_multiline var inspection_note: String = ""
|
||||
|
||||
@onready var sprite2d = %AnimatedSoundSprite2D as AnimatedSoundSprite2D
|
||||
@onready var sign_mark = %Sign as Sprite2D
|
||||
@onready var area2d = %Area2D as Area2D
|
||||
|
||||
@onready var sfx = %Sfx
|
||||
@onready var cover_sprite = %Cover as Sprite2D
|
||||
@onready var content_label = %ContentLabel as Label
|
||||
@onready var tip_label = %TipLabel as Label
|
||||
|
||||
var tip_cover = "Q: 退出 E: 阅读"
|
||||
var tip_notes = "Q: 退出 E: 收起"
|
||||
|
||||
var status := STATUS_NORAML
|
||||
var blinking_tween: Tween
|
||||
|
||||
var inspected_time = 0.0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
sign_mark.interacted.connect(_on_interacted)
|
||||
sign_mark.cancel.connect(_on_cancel)
|
||||
|
||||
content_label.text = inspection_note
|
||||
content_label.modulate.a = 0.0
|
||||
tip_label.text = tip_cover
|
||||
tip_label.modulate.a = 0.0
|
||||
cover_sprite.modulate.a = 0.0
|
||||
cover_sprite.texture = texture_cover
|
||||
|
||||
|
||||
func _on_interacted() -> void:
|
||||
# 1.5s 内锁定交互,留给镜头复位时间
|
||||
if Time.get_ticks_msec() - inspected_time < 1500:
|
||||
return
|
||||
if status == STATUS_NORAML:
|
||||
sfx.play()
|
||||
SceneManager.focus_node(self)
|
||||
CameraFocusMarker.tween_zoom(2.0, 1.5)
|
||||
status = STATUS_INSPECTING_COVER
|
||||
sign_mark.show_sign = false
|
||||
var player = SceneManager.get_player()
|
||||
if player:
|
||||
player.freeze_player(0)
|
||||
tip_label.text = tip_cover
|
||||
_blink_label(true)
|
||||
elif status == STATUS_INSPECTING_COVER:
|
||||
sfx.play()
|
||||
status = STATUS_INSPECTING_NOTES
|
||||
tip_label.text = tip_notes
|
||||
create_tween().tween_property(content_label, "modulate:a", 1.0, 0.2)
|
||||
create_tween().tween_property(cover_sprite, "modulate:a", 1.0, 0.15)
|
||||
elif status == STATUS_INSPECTING_NOTES:
|
||||
sfx.play()
|
||||
status = STATUS_INSPECTING_COVER
|
||||
tip_label.text = tip_cover
|
||||
create_tween().tween_property(content_label, "modulate:a", 0.0, 0.15)
|
||||
create_tween().tween_property(cover_sprite, "modulate:a", 0.0, 0.2)
|
||||
|
||||
|
||||
func _blink_label(init := true):
|
||||
if status == STATUS_NORAML:
|
||||
return
|
||||
blinking_tween = create_tween()
|
||||
if init:
|
||||
blinking_tween.tween_property(tip_label, "modulate:a", 0.8, 2.0)
|
||||
blinking_tween.tween_callback(_blink_label.bind(false))
|
||||
else:
|
||||
blinking_tween.tween_property(tip_label, "modulate:a", 0.5, 1.0)
|
||||
blinking_tween.tween_callback(_blink_label.bind(true))
|
||||
|
||||
|
||||
func _on_cancel(_body = null):
|
||||
inspected_time = Time.get_ticks_msec()
|
||||
status = STATUS_NORAML
|
||||
cover_sprite.modulate.a = 0.0
|
||||
var tween = create_tween()
|
||||
tween.tween_property(content_label, "modulate:a", 0.0, 0.15)
|
||||
if blinking_tween and blinking_tween.is_running():
|
||||
blinking_tween.stop()
|
||||
tween.parallel().tween_property(tip_label, "modulate:a", 0.0, 0.15)
|
||||
SceneManager.focus_player_and_reset_zoom(1.0)
|
||||
var player = SceneManager.get_player()
|
||||
if player:
|
||||
player.release_player()
|
||||
sign_mark.show_sign = true
|
105
scene/entity/local_inspectable.tscn
Normal file
105
scene/entity/local_inspectable.tscn
Normal file
@ -0,0 +1,105 @@
|
||||
[gd_scene load_steps=10 format=3 uid="uid://ci5anaxsa1apl"]
|
||||
|
||||
[ext_resource type="Script" path="res://scene/entity/local_inspectable.gd" id="1_85el0"]
|
||||
[ext_resource type="PackedScene" uid="uid://c85t6stvytvjn" path="res://scene/entity/ux/sfx.tscn" id="2_h0c2s"]
|
||||
[ext_resource type="Texture2D" uid="uid://t526pexw4ng4" path="res://asset/art/neutral_point_light.webp" id="3_o562w"]
|
||||
[ext_resource type="Texture2D" uid="uid://dvg6wjwn1qxiv" path="res://asset/art/ui/action_mark/探索ui.png" id="4_bi35o"]
|
||||
[ext_resource type="Script" path="res://scene/entity/ux/sign.gd" id="5_vsfuq"]
|
||||
[ext_resource type="SpriteFrames" uid="uid://c3s8u4ifaucpj" path="res://config/animation/entity_sprite_frames.tres" id="6_e77p4"]
|
||||
[ext_resource type="Script" path="res://scene/entity/ux/animated_sound_sprite_2d.gd" id="7_bhwlx"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_4fuic"]
|
||||
resource_local_to_scene = true
|
||||
size = Vector2(35, 70)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_c3c2j"]
|
||||
line_spacing = 1.0
|
||||
font_size = 11
|
||||
|
||||
[node name="LocalInspectable" type="Sprite2D"]
|
||||
script = ExtResource("1_85el0")
|
||||
|
||||
[node name="Sfx" parent="." instance=ExtResource("2_h0c2s")]
|
||||
unique_name_in_owner = true
|
||||
file = "纸条.mp3"
|
||||
|
||||
[node name="PointLight2D" type="PointLight2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2(0, -35)
|
||||
scale = Vector2(0.2, 0.2)
|
||||
energy = 0.0
|
||||
texture = ExtResource("3_o562w")
|
||||
texture_scale = 0.5
|
||||
|
||||
[node name="Sign" type="Sprite2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
position = Vector2(0, -9)
|
||||
scale = Vector2(0.2, 0.2)
|
||||
texture = ExtResource("4_bi35o")
|
||||
script = ExtResource("5_vsfuq")
|
||||
|
||||
[node name="AnimatedSoundSprite2D" type="AnimatedSprite2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
sprite_frames = ExtResource("6_e77p4")
|
||||
animation = &"c00_吕萍_记笔记_right"
|
||||
script = ExtResource("7_bhwlx")
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
collision_layer = 0
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||
unique_name_in_owner = true
|
||||
shape = SubResource("RectangleShape2D_4fuic")
|
||||
|
||||
[node name="Cover" type="Sprite2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
z_index = 99
|
||||
scale = Vector2(0.5, 0.5)
|
||||
|
||||
[node name="ContentLabel" type="Label" parent="."]
|
||||
unique_name_in_owner = true
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
z_index = 100
|
||||
custom_minimum_size = Vector2(70, 0)
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -29.5
|
||||
offset_top = -49.5
|
||||
offset_right = 90.5
|
||||
offset_bottom = 145.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
scale = Vector2(0.5, 0.5)
|
||||
size_flags_horizontal = 4
|
||||
text = "据闻奉贤县分水墩又有七人染受鼠疫,病状可怖,闻医官药治无用,免职。
|
||||
有地方人称鼠疫为妖邪作祟,甚为惊骇,一时人心惶惶,竟有聚众滋闹之事,政府以防疫事宜关系紧要,拟赴分水墩一带调查防疫事宜云。
|
||||
|
||||
《申报》
|
||||
民国五年一月十三日"
|
||||
label_settings = SubResource("LabelSettings_c3c2j")
|
||||
vertical_alignment = 1
|
||||
autowrap_mode = 3
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
unique_name_in_owner = true
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
z_index = 100
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -25.5
|
||||
offset_top = 49.0
|
||||
offset_right = 80.5
|
||||
offset_bottom = 64.0
|
||||
grow_horizontal = 2
|
||||
scale = Vector2(0.5, 0.5)
|
||||
size_flags_vertical = 8
|
||||
text = "Q: 退出 E: 阅读"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
@ -32,11 +32,16 @@ func _on_interacted() -> void:
|
||||
played_time = Time.get_ticks_msec()
|
||||
mutex.unlock()
|
||||
%Sfx.play()
|
||||
SceneManager.focus_node(self)
|
||||
CameraFocusMarker.tween_zoom(1.2, 1.5)
|
||||
for note in notes:
|
||||
SceneManager.pop_note(note, "white", 2.0)
|
||||
var player = SceneManager.get_player()
|
||||
# TODO note viewing animation
|
||||
player.freeze_player(note_time, "")
|
||||
get_tree().create_timer(note_time - 0.5).timeout.connect(
|
||||
SceneManager.focus_player_and_reset_zoom
|
||||
)
|
||||
|
||||
|
||||
func _on_cancel(_body = null):
|
||||
|
@ -9,7 +9,13 @@ extends Node2D
|
||||
# # set(val):
|
||||
# # base_scale = val
|
||||
# # sprite2d.scale = base_scale
|
||||
@export var show_sign := true
|
||||
@export var show_sign := true:
|
||||
set(val):
|
||||
show_sign = val
|
||||
if val:
|
||||
modulate.a = 1.0
|
||||
else:
|
||||
modulate.a = 0.0
|
||||
|
||||
signal interacted
|
||||
signal cancel
|
||||
|
@ -9,6 +9,8 @@ var footstep_audio = RandomAudioStreamPlayer.new()
|
||||
|
||||
func _ready() -> void:
|
||||
foreground.layer = GlobalConfig.CANVAS_LAYER_FG
|
||||
%ColorRectTop.visible = true
|
||||
%ColorRectBottom.visible = true
|
||||
add_child(footstep_audio)
|
||||
reload()
|
||||
|
||||
|
@ -38,6 +38,7 @@ layer = 10
|
||||
[node name="BGParallaxLayer" type="ParallaxLayer" parent="ParallaxForeground"]
|
||||
|
||||
[node name="FGParallaxLayer" type="ParallaxLayer" parent="ParallaxForeground"]
|
||||
visible = false
|
||||
motion_scale = Vector2(1.1, 1.1)
|
||||
|
||||
[node name="FGSprite2D" type="Sprite2D" parent="ParallaxForeground/FGParallaxLayer"]
|
||||
@ -47,6 +48,8 @@ texture = ExtResource("5_i5hii")
|
||||
centered = false
|
||||
|
||||
[node name="ColorRectTop" type="ColorRect" parent="ParallaxForeground"]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
custom_minimum_size = Vector2(564, 38.5)
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
@ -59,6 +62,8 @@ mouse_filter = 2
|
||||
color = Color(0.0519829, 0.0179176, 0.00269875, 1)
|
||||
|
||||
[node name="ColorRectBottom" type="ColorRect" parent="ParallaxForeground"]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
custom_minimum_size = Vector2(564, 38.5)
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
@ -72,3 +77,17 @@ grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
mouse_filter = 2
|
||||
color = Color(0.0519829, 0.0179176, 0.00269875, 1)
|
||||
|
||||
[node name="SubViewportContainer" type="SubViewportContainer" parent="."]
|
||||
offset_right = 2256.0
|
||||
offset_bottom = 1268.0
|
||||
scale = Vector2(0.25, 0.25)
|
||||
|
||||
[node name="SubViewport" type="SubViewport" parent="SubViewportContainer"]
|
||||
transparent_bg = true
|
||||
handle_input_locally = false
|
||||
canvas_item_default_texture_filter = 0
|
||||
size = Vector2i(2256, 1268)
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="HdLayer" type="CanvasLayer" parent="SubViewportContainer/SubViewport"]
|
||||
|
@ -16,12 +16,16 @@ func _ready() -> void:
|
||||
if not ignore_archive:
|
||||
_load_save()
|
||||
_read_grounds()
|
||||
if current_scene and entrance_portal and not Engine.is_editor_hint():
|
||||
ground = get_node_or_null("Ground")
|
||||
if current_scene and entrance_portal:
|
||||
transition_to_scene(current_scene, entrance_portal, true)
|
||||
elif ground:
|
||||
ground.queue_free()
|
||||
ground = null
|
||||
|
||||
|
||||
func _load_save():
|
||||
if ArchiveManager.archive:
|
||||
if not Engine.is_editor_hint() and ArchiveManager.archive:
|
||||
if ArchiveManager.archive.current_scene:
|
||||
current_scene = ArchiveManager.archive.current_scene
|
||||
if ArchiveManager.archive.entrance_portal:
|
||||
@ -68,7 +72,7 @@ func transition_to_scene(key: String, portal: String, load_save := false) -> voi
|
||||
|
||||
|
||||
func _update_player_position():
|
||||
if ignore_archive:
|
||||
if ignore_archive or Engine.is_editor_hint():
|
||||
return
|
||||
var player = SceneManager.get_player() as MainPlayer
|
||||
if player and ArchiveManager.archive:
|
||||
@ -92,28 +96,25 @@ func _do_transition(scene: Node2D):
|
||||
ground.name = "Ground"
|
||||
_set_camera_and_player_boundary()
|
||||
_update_archive()
|
||||
var portal_node = get_node_or_null("./Ground/DeployLayer/portal_" + entrance_portal) as Node2D
|
||||
if portal_node:
|
||||
print("set player and camera to portal:", entrance_portal, portal_node.global_position)
|
||||
var portal_node = ground.get_node_or_null("DeployLayer/portal_" + entrance_portal) as Node2D
|
||||
if portal_node and not Engine.is_editor_hint():
|
||||
var player = SceneManager.get_player()
|
||||
if player:
|
||||
player.global_position.x = portal_node.global_position.x
|
||||
var camera = SceneManager.get_camera()
|
||||
if camera:
|
||||
camera.global_position.x = portal_node.global_position.x
|
||||
if GlobalConfig.DEBUG:
|
||||
print("move player to portal:", entrance_portal, portal_node.global_position)
|
||||
if GlobalConfig.DEBUG and not Engine.is_editor_hint():
|
||||
_watch_scene_update()
|
||||
|
||||
|
||||
func _set_camera_and_player_boundary():
|
||||
var bg = ground.get_node("BGSprite2D")
|
||||
if bg.texture:
|
||||
if bg.texture and not Engine.is_editor_hint():
|
||||
SceneManager.set_camera_boundary(bg.texture.get_size())
|
||||
SceneManager.set_player_boundary(bg.texture.get_size())
|
||||
|
||||
|
||||
func _update_archive():
|
||||
if ArchiveManager.archive:
|
||||
if not Engine.is_editor_hint() and ArchiveManager.archive:
|
||||
ArchiveManager.archive.current_scene = current_scene
|
||||
ArchiveManager.archive.entrance_portal = entrance_portal
|
||||
|
||||
@ -121,6 +122,7 @@ func _update_archive():
|
||||
var update_watcher: Timer
|
||||
var last_modify = 0
|
||||
|
||||
|
||||
func _watch_scene_update():
|
||||
var scene_path = ground_dict[current_scene]
|
||||
if scene_path:
|
||||
@ -147,6 +149,6 @@ func _check_scene_update(scene_path):
|
||||
|
||||
func _on_resources_reload(res):
|
||||
print("resources_reload processing:", res)
|
||||
if res.ends_with(".tscn"):
|
||||
if not Engine.is_editor_hint() and res.ends_with(".tscn"):
|
||||
ArchiveManager.save_all()
|
||||
transition_to_scene(current_scene, entrance_portal, true)
|
||||
|
@ -1,6 +1,94 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://clxgkj80yin2"]
|
||||
[gd_scene load_steps=7 format=3 uid="uid://clxgkj80yin2"]
|
||||
|
||||
[ext_resource type="Script" path="res://scene/ground/ground_loader.gd" id="1_6mjre"]
|
||||
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="2_xtikv"]
|
||||
[ext_resource type="Script" path="res://scene/ground/ground.gd" id="3_aiqgg"]
|
||||
[ext_resource type="Script" path="res://config/deploy/scene_config.gd" id="4_vfq42"]
|
||||
[ext_resource type="Texture2D" uid="uid://kc4726andgy2" path="res://asset/art/scene/c02/s01_街道/bg_公寓入口.png" id="5_ogvfs"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_6ux50"]
|
||||
script = ExtResource("4_vfq42")
|
||||
scene_name = ""
|
||||
foreground_scale = Vector2(1.2, 1.2)
|
||||
foreground_position = Vector2(0, 0)
|
||||
background_scale = Vector2(1, 1)
|
||||
background_position = Vector2(0, 0)
|
||||
player_initial_position = Vector2(300, 186)
|
||||
player_initial_direction = Vector2(1, -1)
|
||||
player_movement_rect = Rect2(0, 0, 0, 0)
|
||||
camera_rect = Rect2(0, -1000, 664, 2317)
|
||||
footstep_type = "concrete"
|
||||
|
||||
[node name="GroundLoader" type="Node2D"]
|
||||
script = ExtResource("1_6mjre")
|
||||
|
||||
[node name="Ground" parent="." instance=ExtResource("2_xtikv")]
|
||||
script = ExtResource("3_aiqgg")
|
||||
scene_config = SubResource("Resource_6ux50")
|
||||
|
||||
[node name="BGSprite2D" parent="Ground" index="0"]
|
||||
unique_name_in_owner = true
|
||||
texture = ExtResource("5_ogvfs")
|
||||
centered = false
|
||||
offset = Vector2(0, -119)
|
||||
|
||||
[node name="DeployLayer" parent="Ground" index="1"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="ParallaxForeground" parent="Ground" index="2"]
|
||||
unique_name_in_owner = true
|
||||
layer = 10
|
||||
|
||||
[node name="FGParallaxLayer" parent="Ground/ParallaxForeground" index="1"]
|
||||
visible = false
|
||||
motion_scale = Vector2(1.1, 1.1)
|
||||
|
||||
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2(-34, -118)
|
||||
centered = false
|
||||
|
||||
[node name="ColorRectTop" parent="Ground/ParallaxForeground" index="2"]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
custom_minimum_size = Vector2(564, 38.5)
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -282.0
|
||||
offset_right = 282.0
|
||||
offset_bottom = 40.0
|
||||
grow_horizontal = 2
|
||||
mouse_filter = 2
|
||||
color = Color(0.0519829, 0.0179176, 0.00269875, 1)
|
||||
|
||||
[node name="ColorRectBottom" parent="Ground/ParallaxForeground" index="3"]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
custom_minimum_size = Vector2(564, 38.5)
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -282.0
|
||||
offset_top = -38.5
|
||||
offset_right = 282.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
mouse_filter = 2
|
||||
color = Color(0.0519829, 0.0179176, 0.00269875, 1)
|
||||
|
||||
[node name="SubViewportContainer" parent="Ground" index="3"]
|
||||
offset_right = 2256.0
|
||||
offset_bottom = 1268.0
|
||||
scale = Vector2(0.25, 0.25)
|
||||
|
||||
[node name="SubViewport" parent="Ground/SubViewportContainer" index="0"]
|
||||
transparent_bg = true
|
||||
handle_input_locally = false
|
||||
canvas_item_default_texture_filter = 0
|
||||
size = Vector2i(2256, 1268)
|
||||
render_target_update_mode = 4
|
||||
|
||||
[editable path="Ground"]
|
||||
|
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://e381spnutx62"]
|
||||
[gd_scene load_steps=9 format=3 uid="uid://e381spnutx62"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_klnwh"]
|
||||
[ext_resource type="PackedScene" uid="uid://0sofmhrl358m" path="res://scene/entity/npc.tscn" id="2_upqk5"]
|
||||
@ -6,6 +6,8 @@
|
||||
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="4_eejqb"]
|
||||
[ext_resource type="PackedScene" uid="uid://wyj4qdjyn4ql" path="res://scene/entity/inspectable.tscn" id="5_pirce"]
|
||||
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="6_fiskb"]
|
||||
[ext_resource type="PackedScene" uid="uid://bj4ufua0b0k34" path="res://scene/entity/hd_entity.tscn" id="7_l4pco"]
|
||||
[ext_resource type="Texture2D" uid="uid://b0gti8fx40hph" path="res://asset/art/scene/c01/s04/e_树.png" id="8_6dlbe"]
|
||||
|
||||
[node name="S00" type="Node2D"]
|
||||
|
||||
@ -32,4 +34,10 @@ position = Vector2(376, 36)
|
||||
position = Vector2(567, 28)
|
||||
hook_cg = "c02_胖子说话"
|
||||
|
||||
[node name="HdEntity" parent="Ground/DeployLayer" index="5" node_paths=PackedStringArray("sprite_ref") instance=ExtResource("7_l4pco")]
|
||||
position = Vector2(259, 52)
|
||||
sprite_name = "tree"
|
||||
texture = ExtResource("8_6dlbe")
|
||||
sprite_ref = NodePath("../../SubViewportContainer/SubViewport/HdLayer/tree")
|
||||
|
||||
[editable path="Ground"]
|
||||
|
@ -1,12 +1,17 @@
|
||||
[gd_scene load_steps=10 format=3 uid="uid://brck77w81fhvc"]
|
||||
[gd_scene load_steps=16 format=3 uid="uid://brck77w81fhvc"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_wrr6r"]
|
||||
[ext_resource type="Texture2D" uid="uid://c4647gof464ws" path="res://asset/art/scene/c02/s02_走道/bg_过道.png" id="2_cn1s8"]
|
||||
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="3_fy0o1"]
|
||||
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="4_vwh5u"]
|
||||
[ext_resource type="PackedScene" uid="uid://wyj4qdjyn4ql" path="res://scene/entity/inspectable.tscn" id="5_nhtbp"]
|
||||
[ext_resource type="Texture2D" uid="uid://do8quqgkrwahj" path="res://asset/art/scene/c02/s02_走道/ux_进门鼠疫海报wz.png" id="6_4pcq0"]
|
||||
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="6_70vqn"]
|
||||
[ext_resource type="Texture2D" uid="uid://ds4yw1wqelhm1" path="res://asset/art/scene/c02/s02_走道/ux_进门鼠疫海报yz.png" id="7_wdwbi"]
|
||||
[ext_resource type="Texture2D" uid="uid://dd0sn5e4hwq5m" path="res://asset/art/scene/c02/s02_走道/e_纸人.png" id="7_xsghn"]
|
||||
[ext_resource type="PackedScene" uid="uid://bj4ufua0b0k34" path="res://scene/entity/hd_entity.tscn" id="10_3c313"]
|
||||
[ext_resource type="Texture2D" uid="uid://dtk3c3uqhn8ue" path="res://asset/art/scene/c01/s04/e_轿车.png" id="11_x0h3x"]
|
||||
[ext_resource type="PackedScene" uid="uid://ci5anaxsa1apl" path="res://scene/entity/local_inspectable.tscn" id="12_0fckv"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_vj0ag"]
|
||||
resource_local_to_scene = true
|
||||
@ -15,6 +20,10 @@ size = Vector2(45, 130)
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_0xrg2"]
|
||||
size = Vector2(40, 150)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_3qhvr"]
|
||||
resource_local_to_scene = true
|
||||
size = Vector2(35, 70)
|
||||
|
||||
[node name="S02" type="Node2D"]
|
||||
|
||||
[node name="Ground" parent="." instance=ExtResource("1_wrr6r")]
|
||||
@ -49,6 +58,8 @@ shape = SubResource("RectangleShape2D_vj0ag")
|
||||
position = Vector2(441, -20)
|
||||
flip_h = true
|
||||
entity_title = "(鼠疫海报)"
|
||||
texture_cover = ExtResource("6_4pcq0")
|
||||
texture_note = ExtResource("7_wdwbi")
|
||||
inspection_note = "据闻奉贤县分水墩又有七人染受鼠疫,病状可怖,闻医官药治无用,免职。
|
||||
有地方人称鼠疫为妖邪作祟,甚为惊骇,一时人心惶惶,竟有聚众滋闹之事,政府以防疫事宜关系紧要,拟赴分水墩一带调查防疫事宜云。
|
||||
|
||||
@ -71,8 +82,30 @@ shape = SubResource("RectangleShape2D_0xrg2")
|
||||
position = Vector2(434, 60)
|
||||
hook_cg = "c02_胖子说话"
|
||||
|
||||
[node name="HdEntity" parent="Ground/DeployLayer" index="6" instance=ExtResource("10_3c313")]
|
||||
position = Vector2(147, 75)
|
||||
sprite_name = "car"
|
||||
texture = ExtResource("11_x0h3x")
|
||||
|
||||
[node name="Sign" parent="Ground/DeployLayer/HdEntity" index="2"]
|
||||
position = Vector2(1, -28)
|
||||
|
||||
[node name="CollisionShape2D" parent="Ground/DeployLayer/HdEntity/Area2D" index="0"]
|
||||
shape = SubResource("RectangleShape2D_3qhvr")
|
||||
|
||||
[node name="LocalInspectable" parent="Ground/DeployLayer" index="7" instance=ExtResource("12_0fckv")]
|
||||
position = Vector2(387, -25)
|
||||
entity_title = "鼠疫海报"
|
||||
texture_cover = ExtResource("6_4pcq0")
|
||||
inspection_note = "据闻奉贤县分水墩又有七人染受鼠疫,病状可怖,闻医官药治无用,免职。
|
||||
有地方人称鼠疫为妖邪作祟,甚为惊骇,一时人心惶惶,竟有聚众滋闹之事,政府以防疫事宜关系紧要,拟赴分水墩一带调查防疫事宜云。
|
||||
|
||||
《申报》
|
||||
民国五年一月十三日"
|
||||
|
||||
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
|
||||
texture = null
|
||||
|
||||
[editable path="Ground"]
|
||||
[editable path="Ground/DeployLayer/Portal2"]
|
||||
[editable path="Ground/DeployLayer/HdEntity"]
|
||||
|
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=11 format=3 uid="uid://dygvcmykn02n8"]
|
||||
[gd_scene load_steps=9 format=3 uid="uid://dygvcmykn02n8"]
|
||||
|
||||
[ext_resource type="Script" path="res://scene/main.gd" id="1_pks84"]
|
||||
[ext_resource type="PackedScene" uid="uid://3gk1gxwanw24" path="res://ui/vignette/vignette_shading.tscn" id="2_d1re1"]
|
||||
@ -7,8 +7,6 @@
|
||||
[ext_resource type="PackedScene" uid="uid://5g07x6q7wwr1" path="res://scene/notification/notification.tscn" id="5_3gg5t"]
|
||||
[ext_resource type="PackedScene" uid="uid://cekhj65axie0p" path="res://scene/popup/prop_inspector.tscn" id="5_ux0rw"]
|
||||
[ext_resource type="PackedScene" uid="uid://cjhw5ecygrqty" path="res://scene/player/main_player.tscn" id="6_6geb0"]
|
||||
[ext_resource type="PackedScene" uid="uid://cqkeegrcdjyg4" path="res://scene/camera/camera_focus_marker.tscn" id="7_n7qcv"]
|
||||
[ext_resource type="PackedScene" uid="uid://ogyvstscr0kx" path="res://scene/camera/main_camera.tscn" id="8_nj084"]
|
||||
[ext_resource type="PackedScene" uid="uid://clxgkj80yin2" path="res://scene/ground/ground_loader.tscn" id="10_8rc5n"]
|
||||
|
||||
[node name="Main" type="Node2D"]
|
||||
@ -35,7 +33,6 @@ metadata/_edit_use_anchors_ = true
|
||||
|
||||
[node name="PropInspector" parent="." instance=ExtResource("5_ux0rw")]
|
||||
unique_name_in_owner = true
|
||||
layer = 98
|
||||
|
||||
[node name="VignetteShading" parent="." instance=ExtResource("2_d1re1")]
|
||||
|
||||
@ -43,17 +40,3 @@ layer = 98
|
||||
unique_name_in_owner = true
|
||||
position = Vector2(80, 42)
|
||||
scale = Vector2(0.6, 0.6)
|
||||
|
||||
[node name="CameraFocusMarker" parent="MainPlayer" instance=ExtResource("7_n7qcv")]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="MainCamera" parent="MainPlayer/CameraFocusMarker" instance=ExtResource("8_nj084")]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2(1.66667, 0)
|
||||
limit_left = 0
|
||||
limit_top = -1000
|
||||
limit_right = 820
|
||||
limit_bottom = 1000
|
||||
limit_smoothed = true
|
||||
position_smoothing_enabled = true
|
||||
position_smoothing_speed = 8.0
|
||||
|
@ -50,6 +50,7 @@ func _ready() -> void:
|
||||
# _reset_face_direction()
|
||||
footstep_timer.timeout.connect(_on_footstep_timer_timeout)
|
||||
footstep_timer.stop()
|
||||
SceneManager.focus_player()
|
||||
|
||||
|
||||
func _on_footstep_timer_timeout():
|
||||
@ -198,9 +199,7 @@ func _physics_process(_delta: float) -> void:
|
||||
# drag the camera marker against the player movement
|
||||
# so there will be a better vision in front of the player.
|
||||
func _tweak_camera_marker():
|
||||
var marker = get_node("./CameraFocusMarker") as Node2D
|
||||
if marker:
|
||||
marker.tweak_position(velocity, facing_direction)
|
||||
CameraFocusMarker.tweak_position(velocity, facing_direction)
|
||||
|
||||
|
||||
var lock_mutex = Mutex.new()
|
||||
|
@ -8,10 +8,12 @@ line_spacing = 1.0
|
||||
font_size = 11
|
||||
|
||||
[node name="PropInspector" type="CanvasLayer"]
|
||||
layer = 98
|
||||
script = ExtResource("1_2wpwe")
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="."]
|
||||
unique_name_in_owner = true
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
@ -22,6 +24,7 @@ texture = ExtResource("2_wr575")
|
||||
|
||||
[node name="ContentLabel" type="Label" parent="."]
|
||||
unique_name_in_owner = true
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
custom_minimum_size = Vector2(120, 0)
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
@ -46,6 +49,7 @@ autowrap_mode = 3
|
||||
|
||||
[node name="TipLabel" type="Label" parent="."]
|
||||
unique_name_in_owner = true
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
@ -58,6 +62,6 @@ offset_bottom = -33.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
size_flags_vertical = 8
|
||||
text = "Q:退出 E:阅读"
|
||||
text = "Q: 退出 E: 阅读"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
Loading…
Reference in New Issue
Block a user