切换服务器

This commit is contained in:
Reed 2026-01-06 16:19:08 +08:00
parent e1de327991
commit 61f8cbb62a
21 changed files with 372 additions and 162 deletions

View File

@ -1,93 +0,0 @@
[gd_scene load_steps=18 format=3 uid="uid://3vc8ojbiyy5w"]
[ext_resource type="PackedScene" uid="uid://gwhff4qaouxy" path="res://_player/Avatar.tscn" id="1_fdx6o"]
[ext_resource type="Script" uid="uid://crgac4manhoud" path="res://_game/game.gd" id="1_j2xwq"]
[ext_resource type="PackedScene" uid="uid://cvqehvdjpoar4" path="res://_player/player_controller.tscn" id="2_j2xwq"]
[ext_resource type="Script" uid="uid://5e157vdk6175" path="res://addons/reedscene/scene/ReedScene.gd" id="5_skiqd"]
[ext_resource type="Script" uid="uid://bh066o84byplh" path="res://addons/reedscene/scene/ReedSceneID.gd" id="6_1l6xv"]
[ext_resource type="Script" uid="uid://dn0ksjoswquf5" path="res://addons/reedscene/scene/SceneManager.gd" id="7_iaift"]
[ext_resource type="Script" uid="uid://dsgl7lbyjsiif" path="res://addons/reedscene/act/ActManager.gd" id="8_nuiql"]
[ext_resource type="Script" uid="uid://pxjf5vst08eo" path="res://addons/reedscene/prop/PropManager.gd" id="9_6aweh"]
[ext_resource type="PackedScene" uid="uid://bflwr7cryd2l0" path="res://_shared/CameraAnchor.tscn" id="10_6aweh"]
[ext_resource type="Script" uid="uid://b4menkyub4ce7" path="res://addons/reedscene/prop/PropComponent.gd" id="11_knjgm"]
[ext_resource type="Script" uid="uid://di41kt2tj34c2" path="res://addons/reedscene/prop/StateManager.gd" id="12_7onhb"]
[ext_resource type="PackedScene" uid="uid://bonrls3iuhdqb" path="res://_props/_prefabs/player/player_trigger_volumn.tscn" id="13_6aweh"]
[ext_resource type="Script" uid="uid://7lml6d1t5xtq" path="res://addons/reedscene/prop/PropState.gd" id="13_28rt5"]
[ext_resource type="Script" uid="uid://cdvgq0xqdbagk" path="res://addons/reedscene/prop/ReedPropEffect.gd" id="13_knjgm"]
[sub_resource type="Resource" id="Resource_7onhb"]
script = ExtResource("13_knjgm")
property_name = &"priority"
value = 0
metadata/_custom_type_script = "uid://cdvgq0xqdbagk"
[sub_resource type="Resource" id="Resource_knjgm"]
script = ExtResource("13_knjgm")
property_name = &"priority"
value = 1000
metadata/_custom_type_script = "uid://cdvgq0xqdbagk"
[sub_resource type="RectangleShape2D" id="RectangleShape2D_knjgm"]
size = Vector2(661, 379)
[node name="Game" type="Node2D"]
script = ExtResource("1_j2xwq")
[node name="PlayerController" parent="." node_paths=PackedStringArray("auto_controlled_avatar") instance=ExtResource("2_j2xwq")]
auto_controlled_avatar = NodePath("../Avatar")
[node name="Avatar" parent="." instance=ExtResource("1_fdx6o")]
position = Vector2(349, -271)
collision_mask = 4
[node name="ReedScene" type="Node2D" parent="."]
script = ExtResource("5_skiqd")
metadata/_custom_type_script = "uid://5e157vdk6175"
[node name="[Invalid!]" type="Node" parent="ReedScene"]
script = ExtResource("6_1l6xv")
[node name="SceneManager" type="Node" parent="ReedScene"]
script = ExtResource("7_iaift")
[node name="ActManager" type="Node" parent="ReedScene"]
script = ExtResource("8_nuiql")
[node name="Props" type="Node2D" parent="ReedScene"]
script = ExtResource("9_6aweh")
[node name="CameraAnchor" parent="ReedScene/Props" instance=ExtResource("10_6aweh")]
[node name="[Prop_0000]" type="Node" parent="ReedScene/Props/CameraAnchor"]
script = ExtResource("11_knjgm")
prop_id = 0
[node name="States" type="Node" parent="ReedScene/Props/CameraAnchor/[Prop_0000]"]
script = ExtResource("12_7onhb")
[node name="[ID_0] Disable" type="Node" parent="ReedScene/Props/CameraAnchor/[Prop_0000]/States"]
script = ExtResource("13_28rt5")
state_id = 0
effects = Array[ExtResource("13_knjgm")]([SubResource("Resource_7onhb")])
[node name="[ID_1] Enable" type="Node" parent="ReedScene/Props/CameraAnchor/[Prop_0000]/States"]
script = ExtResource("13_28rt5")
state_id = 1
effects = Array[ExtResource("13_knjgm")]([SubResource("Resource_knjgm")])
[node name="PlayerTriggerVolumn" parent="ReedScene/Props" instance=ExtResource("13_6aweh")]
[node name="CollisionShape2D" type="CollisionShape2D" parent="ReedScene/Props/PlayerTriggerVolumn"]
shape = SubResource("RectangleShape2D_knjgm")
debug_color = Color(0.70308036, 0.46053094, 0.46591634, 0.41960785)
[node name="[Prop_0001]" type="Node" parent="ReedScene/Props/PlayerTriggerVolumn"]
script = ExtResource("11_knjgm")
prop_id = 1
[node name="States" type="Node" parent="ReedScene/Props/PlayerTriggerVolumn/[Prop_0001]"]
script = ExtResource("12_7onhb")
[node name="[ID_0] Default" type="Node" parent="ReedScene/Props/PlayerTriggerVolumn/[Prop_0001]/States"]
script = ExtResource("13_28rt5")
state_id = 0

237
_game/example/Game.tscn Normal file

File diff suppressed because one or more lines are too long

7
_game/example/example.gd Normal file
View File

@ -0,0 +1,7 @@
extends SceneManager
func _on_player_trigger_volumn_player_entered(body: CharacterBody2D) -> void:
_act_manager.switch_act_with_id(1)
$"../../ReedScene/ActManager".switch_act_with_id(0)

View File

@ -0,0 +1 @@
uid://d3600a4hjp6y6

View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="ReedPropEffect" load_steps=2 format=3 uid="uid://bjjxh7g7iosla"]
[ext_resource type="Script" uid="uid://cdvgq0xqdbagk" path="res://addons/reedscene/prop/ReedPropEffect.gd" id="1_828o8"]
[resource]
script = ExtResource("1_828o8")
effect_type = 1
value = null
func_name = &"pop_camera"
metadata/_custom_type_script = "uid://cdvgq0xqdbagk"

View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="ReedPropEffect" load_steps=2 format=3 uid="uid://458r8rf7x02p"]
[ext_resource type="Script" uid="uid://cdvgq0xqdbagk" path="res://addons/reedscene/prop/ReedPropEffect.gd" id="1_87nse"]
[resource]
script = ExtResource("1_87nse")
effect_type = 1
value = null
func_name = &"push_camera"
metadata/_custom_type_script = "uid://cdvgq0xqdbagk"

View File

@ -0,0 +1,11 @@
[gd_resource type="Resource" script_class="ReedPropEffect" load_steps=2 format=3 uid="uid://dd4df6yjkeifa"]
[ext_resource type="Script" uid="uid://cdvgq0xqdbagk" path="res://addons/reedscene/prop/ReedPropEffect.gd" id="1_bxu3h"]
[resource]
script = ExtResource("1_bxu3h")
effect_type = 1
value = null
func_name = &"set_defer"
func_args = [&"monitoring", false]
metadata/_custom_type_script = "uid://cdvgq0xqdbagk"

View File

@ -0,0 +1,11 @@
[gd_resource type="Resource" script_class="ReedPropEffect" load_steps=2 format=3 uid="uid://b6iglvt36pm55"]
[ext_resource type="Script" uid="uid://cdvgq0xqdbagk" path="res://addons/reedscene/prop/ReedPropEffect.gd" id="1_3md03"]
[resource]
script = ExtResource("1_3md03")
effect_type = 1
value = null
func_name = &"set_defer"
func_args = [&"monitoring", true]
metadata/_custom_type_script = "uid://cdvgq0xqdbagk"

View File

@ -1,19 +0,0 @@
@tool
class_name CameraAnchor extends Node2D
@export var priority: int = 0
@export var enabled: bool = true
@export var blend_time: float = 0.3
@export var zoom: Vector2 = Vector2.ONE
@export var offset: Vector2 = Vector2.ZERO
func _enter_tree() -> void:
if Engine.is_editor_hint():
return
CameraSystem.register_anchor(self)
func _exit_tree() -> void:
if Engine.is_editor_hint():
return
CameraSystem.unregister_anchor(self)

View File

@ -0,0 +1,42 @@
@tool
class_name CameraAnchor extends Node2D
## 该priority不会直接修改Anchor的priority
@export var priority: int = 0
@export var enabled: bool = true
@export var blend_time: float = 0.3
@export var zoom: Vector2 = Vector2.ONE
@export var offset: Vector2 = Vector2.ZERO
var _priority: int :
set(value):
if _priority != value:
_priority = value
on_priority_change.emit(_priority, self)
signal on_priority_change(_priority:int, anchor: CameraAnchor)
func _ready() -> void:
if not Engine.is_editor_hint():
_runtime_ready()
func _runtime_ready() -> void:
_priority = priority
func push_camera() -> void:
CameraSystem.reset_all_camera_priority()
_priority = 1000
func pop_camera() -> void:
_priority = 0
func _enter_tree() -> void:
if Engine.is_editor_hint():
return
CameraSystem.register_anchor(self)
func _exit_tree() -> void:
if Engine.is_editor_hint():
return
CameraSystem.unregister_anchor(self)

View File

@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://bflwr7cryd2l0"]
[ext_resource type="Script" uid="uid://dyxrydokgy0qs" path="res://_shared/CameraAnchor.gd" id="1_dhu66"]
[ext_resource type="Script" uid="uid://dyxrydokgy0qs" path="res://_shared/camera/CameraAnchor.gd" id="1_dhu66"]
[node name="CameraAnchor" type="Node2D"]
script = ExtResource("1_dhu66")

View File

@ -1,19 +0,0 @@
extends Node
var _cached_player_camera: GlobalCamera
const PLAYER_CAMERA_SCENE:= preload("res://_shared/camera/PlayerStaticCamera.tscn")
## 注册玩家相机
func register_player_camera(owner: Node) -> GlobalCamera:
if not _cached_player_camera:
_cached_player_camera = PLAYER_CAMERA_SCENE.instantiate() as GlobalCamera
if _cached_player_camera:
owner.add_child(_cached_player_camera)
return _cached_player_camera
## 外部获取玩家全局相机
func get_cached_camera() -> GlobalCamera:
return _cached_player_camera

View File

@ -1,9 +1,4 @@
[gd_scene load_steps=3 format=3 uid="uid://b8pv5wtbo0y20"]
[ext_resource type="Script" uid="uid://bd046eokvcnu2" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="2_s84x6"]
[sub_resource type="GDScript" id="GDScript_3tsvq"]
script/source = "'''全局的相机管理器
'''全局的相机管理器
======= =======
@ -16,7 +11,7 @@ var _current_anchor: CameraAnchor
var _switch_tween: Tween
## 玩家关卡内静态相机
const PLAYER_CAMERA_SCENE:= preload(\"res://_shared/camera/PlayerStaticCamera.tscn\")
const PLAYER_CAMERA_SCENE:= preload("res://_shared/camera/PlayerStaticCamera.tscn")
## 注册玩家相机
func register_player_camera(owner: Node) -> GlobalCamera:
@ -38,6 +33,14 @@ func register_anchor(anchor: CameraAnchor) -> void:
if anchor in _cached_anchors:
return
_cached_anchors.append(anchor)
anchor.on_priority_change.connect(on_anchor_priority_changed)
_sort_anchors()
_try_auto_switch()
## 当相机锚点的权重改变时,向管理器触发事件
func on_anchor_priority_changed(priority:int, anchor: CameraAnchor) -> void:
if _current_anchor:
if _current_anchor._priority < priority:
_sort_anchors()
_try_auto_switch()
@ -51,7 +54,7 @@ func unregister_anchor(anchor: CameraAnchor) -> void:
## 排序已有的锚点
func _sort_anchors() -> void:
_cached_anchors.sort_custom(func(a, b):
return a.priority > b.priority
return a._priority > b._priority
)
## 尝试自切换
@ -59,12 +62,13 @@ func _try_auto_switch() -> void:
for a in _cached_anchors:
if a.enabled:
switch_anchor(a)
_current_anchor = a
return
## 重置所有的Camera的priority
## 重置所有的Camera的_priority
func reset_all_camera_priority() -> void:
for a in _cached_anchors:
a.priority = 0
a._priority = 0
## 切换相机
func switch_anchor(target_anchor: CameraAnchor) -> void:
@ -92,7 +96,7 @@ func switch_anchor(target_anchor: CameraAnchor) -> void:
# ===== 位置 =====
_switch_tween.tween_property(
camera,
\"global_position\",
"global_position",
target_anchor.global_position,
blend_time
)
@ -100,7 +104,7 @@ func switch_anchor(target_anchor: CameraAnchor) -> void:
# ===== Zoom =====
_switch_tween.tween_property(
camera,
\"zoom\",
"zoom",
target_anchor.zoom,
blend_time
)
@ -108,7 +112,7 @@ func switch_anchor(target_anchor: CameraAnchor) -> void:
# ===== Offset =====
_switch_tween.tween_property(
camera,
\"offset\",
"offset",
target_anchor.offset,
blend_time
)
@ -119,15 +123,3 @@ func switch_anchor(target_anchor: CameraAnchor) -> void:
)
_current_anchor = target_anchor
"
[node name="CameraSystem" type="Node"]
script = SubResource("GDScript_3tsvq")
[node name="Camera2D" type="Camera2D" parent="."]
[node name="PhantomCameraHost" type="Node" parent="Camera2D"]
process_priority = 300
process_physics_priority = 300
script = ExtResource("2_s84x6")
metadata/_custom_type_script = "uid://bd046eokvcnu2"

View File

@ -0,0 +1,15 @@
[gd_scene load_steps=3 format=3 uid="uid://b8pv5wtbo0y20"]
[ext_resource type="Script" uid="uid://04mchxkp161a" path="res://_shared/camera/CameraSystem.gd" id="1_xxnab"]
[ext_resource type="Script" uid="uid://bd046eokvcnu2" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="2_385ly"]
[node name="CameraSystem" type="Node"]
script = ExtResource("1_xxnab")
[node name="Camera2D" type="Camera2D" parent="."]
[node name="PhantomCameraHost" type="Node" parent="Camera2D"]
process_priority = 300
process_physics_priority = 300
script = ExtResource("2_385ly")
metadata/_custom_type_script = "uid://bd046eokvcnu2"

View File

@ -1,8 +1,12 @@
[gd_scene load_steps=4 format=3 uid="uid://d1w8ftfhxycfy"]
[gd_scene load_steps=6 format=3 uid="uid://d1w8ftfhxycfy"]
[ext_resource type="Script" uid="uid://52tgslofxoi2" path="res://_shared/camera/GlobalCamera.gd" id="1_fixiw"]
[ext_resource type="Script" uid="uid://bhexx6mj1xv3q" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="1_llsih"]
[ext_resource type="Script" uid="uid://bhd4nuiu23e7l" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_noise_emitter_2d.gd" id="3_0bl5s"]
[ext_resource type="Script" uid="uid://8umksf8e80fw" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="3_fixiw"]
[sub_resource type="Resource" id="Resource_pvk7k"]
script = ExtResource("3_fixiw")
[node name="PlayerStaticCamera" type="Node2D"]
script = ExtResource("1_fixiw")
@ -11,6 +15,7 @@ script = ExtResource("1_fixiw")
unique_name_in_owner = true
script = ExtResource("1_llsih")
priority = 1000
tween_resource = SubResource("Resource_pvk7k")
tween_on_load = false
draw_limits = true
metadata/_custom_type_script = "uid://bhexx6mj1xv3q"

View File

@ -12,8 +12,8 @@ var _gen_default_act: Callable = Callable(self, "_editor_generate_default_act")
var _gen_empty_act: Callable = Callable(self, "_editor_generate_empty_act")
##是否要输出报错信息
@export var debug_log: bool = false
##关卡的初始Act默认Clamp到Act的数量防止出现错误
@export var init_act_id: int = 0:
##关卡的初始Act默认Clamp到Act的数量防止出现错误,此处的-1是用来占位的如果是 -1意味着不修改使用const的Id即0
@export var init_act_id: int = -1:
set(value):
var max_index := max(prop_state_map.size() - 1, 0)
init_act_id = clamp(value, 0, max_index)

View File

@ -96,7 +96,7 @@ func _ready() -> void:
pc.init()
## act manger 切换一次
_act_manager.switch_act_with_id(_act_manager.DEFAULT_ACT_ID)
_act_manager.switch_act_with_id(_act_manager.DEFAULT_ACT_ID if _act_manager.init_act_id < 0 else _act_manager.init_act_id)
## 如果prop有复写init state的选项则overwrite
for pc in pcs:

View File

@ -18,7 +18,7 @@ config/icon="res://icon.svg"
[autoload]
PhantomCameraManager="*res://addons/phantom_camera/scripts/managers/phantom_camera_manager.gd"
CameraSystem="*res://_shared/camera/camera_shake/CameraSystem.tscn"
CameraSystem="*res://_shared/camera/CameraSystem.tscn"
GlobalEvent="*res://_shared/global_event.gd"
ReedVFX="*res://addons/reedfx/vfx/ReedVFXSystem.tscn"
ReedSceneRegistry="*res://addons/reedscene/scene/SceneRegistry.gd"