feat: TimeSystem 增加月/年信号与日期设置接口
- 新增 month_passed/year_passed 信号,供俸禄与年度结算 - 新增 speed_changed/pause_changed 信号及 set_paused - 新增 set_date 接口,供读档恢复时间
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
extends Node
|
||||
|
||||
signal day_passed(year, month, day)
|
||||
signal month_passed(year, month)
|
||||
signal year_passed(year)
|
||||
signal speed_changed(speed_index)
|
||||
signal pause_changed(paused)
|
||||
|
||||
const SPEEDS := [1.0, 5.0, 20.0]
|
||||
const DAYS_PER_MONTH := 30
|
||||
@@ -25,28 +29,45 @@ func _is_in_game() -> bool:
|
||||
return scene != null and scene.name == "MainGame"
|
||||
|
||||
func _advance() -> void:
|
||||
var new_month := false
|
||||
var new_year := false
|
||||
GameState.day += 1
|
||||
if GameState.day > DAYS_PER_MONTH:
|
||||
GameState.day = 1
|
||||
GameState.month += 1
|
||||
new_month = true
|
||||
if GameState.month > MONTHS_PER_YEAR:
|
||||
GameState.month = 1
|
||||
GameState.year += 1
|
||||
new_year = true
|
||||
day_passed.emit(GameState.year, GameState.month, GameState.day)
|
||||
if new_month:
|
||||
month_passed.emit(GameState.year, GameState.month)
|
||||
if new_year:
|
||||
year_passed.emit(GameState.year)
|
||||
|
||||
func cycle_speed() -> float:
|
||||
speed_index = (speed_index + 1) % SPEEDS.size()
|
||||
speed = SPEEDS[speed_index]
|
||||
speed_changed.emit(speed_index)
|
||||
return speed
|
||||
|
||||
func set_speed_index(index: int) -> void:
|
||||
speed_index = clampi(index, 0, SPEEDS.size() - 1)
|
||||
speed = SPEEDS[speed_index]
|
||||
speed_changed.emit(speed_index)
|
||||
|
||||
func toggle_pause() -> bool:
|
||||
paused = not paused
|
||||
pause_changed.emit(paused)
|
||||
return paused
|
||||
|
||||
func set_paused(value: bool) -> void:
|
||||
if paused == value:
|
||||
return
|
||||
paused = value
|
||||
pause_changed.emit(paused)
|
||||
|
||||
func get_speed_label() -> String:
|
||||
return "x%d" % int(speed)
|
||||
|
||||
@@ -55,3 +76,8 @@ func get_current_date() -> Array:
|
||||
|
||||
func get_date_text() -> String:
|
||||
return "%d年 %d月 %d日" % [GameState.year, GameState.month, GameState.day]
|
||||
|
||||
func set_date(y: int, m: int, d: int) -> void:
|
||||
GameState.year = y
|
||||
GameState.month = m
|
||||
GameState.day = d
|
||||
|
||||
Reference in New Issue
Block a user