Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a9de46f1dd | ||
|
|
ad72d36522 |
@@ -149,6 +149,12 @@
|
|||||||
3. "新游戏"直接进入;"读取存档"在存档面板中选择
|
3. "新游戏"直接进入;"读取存档"在存档面板中选择
|
||||||
4. 游戏内顶部 HUD 可暂停/调速(1x/5x/20x),返回按钮回主菜单
|
4. 游戏内顶部 HUD 可暂停/调速(1x/5x/20x),返回按钮回主菜单
|
||||||
|
|
||||||
|
## 导出
|
||||||
|
|
||||||
|
1. 编辑器安装 **4.7.1 导出模板**(编辑器 → 管理导出模板)
|
||||||
|
2. 项目 → 导出 → Windows Desktop(`export_presets.cfg` 已配置 `all_resources`,输出 `aaa.exe` 单文件含嵌入 PCK)
|
||||||
|
3. **约定**:`resources/game_config.cfg` 为未知扩展名,**不随导出打包**——导出版使用 `GameConfig.gd` 代码默认值。修改 cfg 参数后,需同步 `GameConfig.gd` 默认值再导出(注释已标注同步项)。
|
||||||
|
|
||||||
## 命名规范
|
## 命名规范
|
||||||
|
|
||||||
| 类别 | 格式 | 示例 |
|
| 类别 | 格式 | 示例 |
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ name="Windows Desktop"
|
|||||||
platform="Windows Desktop"
|
platform="Windows Desktop"
|
||||||
dedicated_server=false
|
dedicated_server=false
|
||||||
custom_features=""
|
custom_features=""
|
||||||
export_filter="scenes"
|
export_filter="all_resources"
|
||||||
export_files=PackedStringArray()
|
export_files=PackedStringArray()
|
||||||
include_filter=""
|
include_filter=""
|
||||||
exclude_filter=""
|
exclude_filter=""
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ config_version=5
|
|||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="模拟宗门"
|
config/name="模拟宗门"
|
||||||
run/main_scene="uid://d1odycoaqhhyg"
|
run/main_scene="res://src/UI/Panels/MainMenu/MainMenu.tscn"
|
||||||
config/features=PackedStringArray("4.7", "Forward Plus")
|
config/features=PackedStringArray("4.7", "Forward Plus")
|
||||||
|
|
||||||
[autoload]
|
[autoload]
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ signal realm_changed(d: Disciple)
|
|||||||
signal cultivation_log(text: String)
|
signal cultivation_log(text: String)
|
||||||
|
|
||||||
|
|
||||||
|
## 挂接每日推进信号。
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
# 每日推进时结算全体已入宗弟子的修为与境界
|
# 每日推进时结算全体已入宗弟子的修为与境界
|
||||||
TimeSystem.day_passed.connect(_on_day_passed)
|
TimeSystem.day_passed.connect(_on_day_passed)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ const REALM_NAMES: Array[String] = ["练气", "筑基", "金丹", "元婴", "化
|
|||||||
var id: int = 0 # 唯一编号(DiscipleManager 分配)
|
var id: int = 0 # 唯一编号(DiscipleManager 分配)
|
||||||
var name: String = ""
|
var name: String = ""
|
||||||
var age: int = 0
|
var age: int = 0
|
||||||
var aptitude: Aptitude = Aptitude.ORDINARY
|
var aptitude: Aptitude = Aptitude.ORDINARY # 资质(入宗分流结果)
|
||||||
var roots: Array[SpiritRoot] = [] # 普通弟子 1~5 根;天灵根固定 1 根
|
var roots: Array[SpiritRoot] = [] # 普通弟子 1~5 根;天灵根固定 1 根
|
||||||
var is_heavenly: bool = false # 天灵根标记(仅天骄资质,概率见配置)
|
var is_heavenly: bool = false # 天灵根标记(仅天骄资质,概率见配置)
|
||||||
var join_year: int = 0 # 入宗年份(0 = 未入宗/候选),accept 时快照
|
var join_year: int = 0 # 入宗年份(0 = 未入宗/候选),accept 时快照
|
||||||
@@ -35,6 +35,7 @@ var hunger_days: int = 0 # 断粮累计天数(≥阈值离宗,方
|
|||||||
func get_aptitude_name() -> String:
|
func get_aptitude_name() -> String:
|
||||||
return APTITUDE_NAMES[aptitude]
|
return APTITUDE_NAMES[aptitude]
|
||||||
|
|
||||||
|
## 灵根显示文本,如 "金、木"。
|
||||||
func get_roots_text() -> String:
|
func get_roots_text() -> String:
|
||||||
var names: Array[String] = []
|
var names: Array[String] = []
|
||||||
for root in roots:
|
for root in roots:
|
||||||
@@ -49,6 +50,7 @@ func get_root_count_capacity() -> float:
|
|||||||
return 0.0
|
return 0.0
|
||||||
return 1.0 / roots.size()
|
return 1.0 / roots.size()
|
||||||
|
|
||||||
|
## 境界显示文本,如 "练气5层"、"筑基初期"。
|
||||||
func get_realm_text() -> String:
|
func get_realm_text() -> String:
|
||||||
if realm_index == 0:
|
if realm_index == 0:
|
||||||
return "%s%d层" % [REALM_NAMES[realm_index], sub_realm_index + 1]
|
return "%s%d层" % [REALM_NAMES[realm_index], sub_realm_index + 1]
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ var _days_until_recruit := 0
|
|||||||
var _next_id := 1
|
var _next_id := 1
|
||||||
|
|
||||||
|
|
||||||
|
## 挂接每日推进信号并初始化招募倒计时。
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
# 挂到时间系统上:每日推进时倒计时,满间隔生成候选并暂停时间
|
# 挂到时间系统上:每日推进时倒计时,满间隔生成候选并暂停时间
|
||||||
TimeSystem.day_passed.connect(_on_day_passed)
|
TimeSystem.day_passed.connect(_on_day_passed)
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ var opening_applicant_count := 5
|
|||||||
## 开局必须选满数。
|
## 开局必须选满数。
|
||||||
var opening_pick_count := 3
|
var opening_pick_count := 3
|
||||||
## 定期招募间隔(游戏年,1 年 = 360 天)。
|
## 定期招募间隔(游戏年,1 年 = 360 天)。
|
||||||
var recruit_interval_years := 0.1
|
## 注意:cfg 文件不随导出打包(未知扩展名),导出版使用此默认值——与 cfg 保持同步。
|
||||||
|
var recruit_interval_years := 12.0
|
||||||
## 定期弹窗候选人数。
|
## 定期弹窗候选人数。
|
||||||
var recruit_applicant_count := 3
|
var recruit_applicant_count := 3
|
||||||
## 天灵根概率(仅天骄资质中再掷一次)。
|
## 天灵根概率(仅天骄资质中再掷一次)。
|
||||||
@@ -39,8 +40,8 @@ var level_thresholds: Array[float] = [100.0, 200.0, 350.0, 550.0, 800.0, 1100.0,
|
|||||||
var bottleneck_levels: Array[int] = [4, 7, 10, 13]
|
var bottleneck_levels: Array[int] = [4, 7, 10, 13]
|
||||||
|
|
||||||
# —— UI 通用(对应 cfg 的 [ui] 节)——
|
# —— UI 通用(对应 cfg 的 [ui] 节)——
|
||||||
## HUD 字体大小。
|
## HUD 字体大小(导出版用默认值,与 cfg 保持同步)。
|
||||||
var hud_font_size := 32
|
var hud_font_size := 24
|
||||||
|
|
||||||
# —— 建筑系统(对应 cfg 的 [building] 节)——
|
# —— 建筑系统(对应 cfg 的 [building] 节)——
|
||||||
## 开局赠送灵石(新游戏发放)。
|
## 开局赠送灵石(新游戏发放)。
|
||||||
@@ -71,6 +72,7 @@ var aptitude_weights_by_difficulty: Dictionary = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## 启动时加载配置文件。
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
_load_config()
|
_load_config()
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ var profile_id: int = 0
|
|||||||
var save_slot: String = ""
|
var save_slot: String = ""
|
||||||
|
|
||||||
# 游戏内时间(12 月 × 30 天 = 360 天/年),实际推进由 TimeSystem 负责
|
# 游戏内时间(12 月 × 30 天 = 360 天/年),实际推进由 TimeSystem 负责
|
||||||
var year: int = 1
|
var year: int = 1 # 年
|
||||||
var month: int = 1
|
var month: int = 1 # 月(1-12)
|
||||||
var day: int = 1
|
var day: int = 1 # 日(1-30)
|
||||||
|
|
||||||
## 请求开始新游戏。
|
## 请求开始新游戏。
|
||||||
## @param pid: 新存档组 ID(主菜单创建)
|
## @param pid: 新存档组 ID(主菜单创建)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
## 进入游戏时根据 GameState 模式初始化,并连接顶部 HUD 信号。
|
## 进入游戏时根据 GameState 模式初始化,并连接顶部 HUD 信号。
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
## 进入游戏世界:注册场景分组,按 GameState 模式初始化(新游戏/读档)。
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
# 注册为游戏世界场景(供 TimeSystem 判断是否推进时间)
|
# 注册为游戏世界场景(供 TimeSystem 判断是否推进时间)
|
||||||
add_to_group("game_scene")
|
add_to_group("game_scene")
|
||||||
|
|||||||
@@ -10,40 +10,58 @@ var reputation := 0 # 声望
|
|||||||
var food := 0 # 灵米(食物资源,HUD 显示"灵米")
|
var food := 0 # 灵米(食物资源,HUD 显示"灵米")
|
||||||
|
|
||||||
|
|
||||||
|
## 增加灵石并广播信号。
|
||||||
|
## @param amount: 增加量
|
||||||
func add_spirit_stones(amount: int) -> void:
|
func add_spirit_stones(amount: int) -> void:
|
||||||
spirit_stones += amount
|
spirit_stones += amount
|
||||||
emit_signal("spirit_stones_changed", spirit_stones, amount)
|
emit_signal("spirit_stones_changed", spirit_stones, amount)
|
||||||
|
|
||||||
|
## 减少灵石并广播信号。
|
||||||
|
## @param amount: 减少量
|
||||||
func remove_spirit_stones(amount: int) -> void:
|
func remove_spirit_stones(amount: int) -> void:
|
||||||
spirit_stones -= amount
|
spirit_stones -= amount
|
||||||
emit_signal("spirit_stones_changed", spirit_stones, -amount)
|
emit_signal("spirit_stones_changed", spirit_stones, -amount)
|
||||||
|
|
||||||
|
## 增加声望并广播信号。
|
||||||
|
## @param amount: 增加量
|
||||||
func add_reputation(amount: int) -> void:
|
func add_reputation(amount: int) -> void:
|
||||||
reputation += amount
|
reputation += amount
|
||||||
emit_signal("reputation_changed", reputation, amount)
|
emit_signal("reputation_changed", reputation, amount)
|
||||||
|
|
||||||
|
## 减少声望并广播信号。
|
||||||
|
## @param amount: 减少量
|
||||||
func remove_reputation(amount: int) -> void:
|
func remove_reputation(amount: int) -> void:
|
||||||
reputation -= amount
|
reputation -= amount
|
||||||
emit_signal("reputation_changed", reputation, -amount)
|
emit_signal("reputation_changed", reputation, -amount)
|
||||||
|
|
||||||
|
## 增加灵米并广播信号。
|
||||||
|
## @param amount: 增加量
|
||||||
func add_food(amount: int) -> void:
|
func add_food(amount: int) -> void:
|
||||||
food += amount
|
food += amount
|
||||||
emit_signal("food_changed", food, amount)
|
emit_signal("food_changed", food, amount)
|
||||||
|
|
||||||
|
## 减少灵米并广播信号。
|
||||||
|
## @param amount: 减少量
|
||||||
func remove_food(amount: int) -> void:
|
func remove_food(amount: int) -> void:
|
||||||
food -= amount
|
food -= amount
|
||||||
emit_signal("food_changed", food, -amount)
|
emit_signal("food_changed", food, -amount)
|
||||||
|
|
||||||
|
## 直接设定灵石(读档/新游戏用,带信号 HUD 自动刷新)。
|
||||||
|
## @param value: 目标值
|
||||||
func set_spirit_stones(value: int) -> void:
|
func set_spirit_stones(value: int) -> void:
|
||||||
var delta := value - spirit_stones
|
var delta := value - spirit_stones
|
||||||
spirit_stones = value
|
spirit_stones = value
|
||||||
spirit_stones_changed.emit(spirit_stones, delta)
|
spirit_stones_changed.emit(spirit_stones, delta)
|
||||||
|
|
||||||
|
## 直接设定声望(读档/新游戏用,带信号 HUD 自动刷新)。
|
||||||
|
## @param value: 目标值
|
||||||
func set_reputation(value: int) -> void:
|
func set_reputation(value: int) -> void:
|
||||||
var delta := value - reputation
|
var delta := value - reputation
|
||||||
reputation = value
|
reputation = value
|
||||||
reputation_changed.emit(reputation, delta)
|
reputation_changed.emit(reputation, delta)
|
||||||
|
|
||||||
|
## 直接设定灵米(读档/新游戏用,带信号 HUD 自动刷新)。
|
||||||
|
## @param value: 目标值
|
||||||
func set_food(value: int) -> void:
|
func set_food(value: int) -> void:
|
||||||
var delta := value - food
|
var delta := value - food
|
||||||
food = value
|
food = value
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ var paused := false
|
|||||||
var _elapsed := 0.0
|
var _elapsed := 0.0
|
||||||
|
|
||||||
|
|
||||||
|
## 每帧累积时间,满一天推进日期(仅游戏世界场景内)。
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
if paused or not _is_in_game():
|
if paused or not _is_in_game():
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ signal buildings_changed
|
|||||||
var buildings: Array[Building] = []
|
var buildings: Array[Building] = []
|
||||||
|
|
||||||
|
|
||||||
|
## 挂接每日推进信号,结算建筑产出。
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
# 每日推进时结算各建筑产出
|
# 每日推进时结算各建筑产出
|
||||||
TimeSystem.day_passed.connect(_on_day_passed)
|
TimeSystem.day_passed.connect(_on_day_passed)
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ signal sign_open_save
|
|||||||
@onready var pause_button: Button = %Button_Pause
|
@onready var pause_button: Button = %Button_Pause
|
||||||
@onready var speed_buttons: Array[Button] = [%Button_Speed1, %Button_Speed5, %Button_Speed20]
|
@onready var speed_buttons: Array[Button] = [%Button_Speed1, %Button_Speed5, %Button_Speed20]
|
||||||
|
|
||||||
|
## 初始化:连接速度按钮与各信号、设置初始显示、应用配置字号。
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
for i in speed_buttons.size():
|
for i in speed_buttons.size():
|
||||||
var btn := speed_buttons[i]
|
var btn := speed_buttons[i]
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ extends Control
|
|||||||
var _was_paused := false
|
var _was_paused := false
|
||||||
|
|
||||||
|
|
||||||
|
## 订阅建筑变化信号,默认隐藏。
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
BuildingManager.buildings_changed.connect(_on_buildings_changed)
|
BuildingManager.buildings_changed.connect(_on_buildings_changed)
|
||||||
visible = false
|
visible = false
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ extends Control
|
|||||||
@onready var info_label: Label = %InfoLabel
|
@onready var info_label: Label = %InfoLabel
|
||||||
|
|
||||||
|
|
||||||
|
## 默认隐藏。
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ const APTITUDE_COLORS := {
|
|||||||
var _was_paused := false
|
var _was_paused := false
|
||||||
|
|
||||||
|
|
||||||
|
## 订阅名录变化信号,默认隐藏。
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
# 名录变化时刷新(面板打开期间也同步)
|
# 名录变化时刷新(面板打开期间也同步)
|
||||||
DiscipleManager.disciples_changed.connect(_on_disciples_changed)
|
DiscipleManager.disciples_changed.connect(_on_disciples_changed)
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ var _check_buttons: Array[CheckButton] = []
|
|||||||
var _entry_disciples: Array[Disciple] = []
|
var _entry_disciples: Array[Disciple] = []
|
||||||
|
|
||||||
|
|
||||||
|
## 订阅候选生成信号,默认隐藏。
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
# 订阅候选生成信号:开局与定期招募都会触发
|
# 订阅候选生成信号:开局与定期招募都会触发
|
||||||
DiscipleManager.applicants_generated.connect(_on_applicants_generated)
|
DiscipleManager.applicants_generated.connect(_on_applicants_generated)
|
||||||
|
|||||||
@@ -54,5 +54,5 @@ layout_mode = 2
|
|||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
text = "▶"
|
text = "▶"
|
||||||
|
|
||||||
[connection signal="button_up" from="HBoxContainer/ArrowIcon" to="." method="_on_arrow_button_up"]
|
|
||||||
[connection signal="button_up" from="HBoxContainer/DeleteButton" to="." method="_on_delete_button_button_up"]
|
[connection signal="button_up" from="HBoxContainer/DeleteButton" to="." method="_on_delete_button_button_up"]
|
||||||
|
[connection signal="button_up" from="HBoxContainer/ArrowIcon" to="." method="_on_arrow_button_up"]
|
||||||
|
|||||||
Reference in New Issue
Block a user