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
|
extends Node
|
||||||
|
|
||||||
signal day_passed(year, month, day)
|
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 SPEEDS := [1.0, 5.0, 20.0]
|
||||||
const DAYS_PER_MONTH := 30
|
const DAYS_PER_MONTH := 30
|
||||||
@@ -25,28 +29,45 @@ func _is_in_game() -> bool:
|
|||||||
return scene != null and scene.name == "MainGame"
|
return scene != null and scene.name == "MainGame"
|
||||||
|
|
||||||
func _advance() -> void:
|
func _advance() -> void:
|
||||||
|
var new_month := false
|
||||||
|
var new_year := false
|
||||||
GameState.day += 1
|
GameState.day += 1
|
||||||
if GameState.day > DAYS_PER_MONTH:
|
if GameState.day > DAYS_PER_MONTH:
|
||||||
GameState.day = 1
|
GameState.day = 1
|
||||||
GameState.month += 1
|
GameState.month += 1
|
||||||
|
new_month = true
|
||||||
if GameState.month > MONTHS_PER_YEAR:
|
if GameState.month > MONTHS_PER_YEAR:
|
||||||
GameState.month = 1
|
GameState.month = 1
|
||||||
GameState.year += 1
|
GameState.year += 1
|
||||||
|
new_year = true
|
||||||
day_passed.emit(GameState.year, GameState.month, GameState.day)
|
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:
|
func cycle_speed() -> float:
|
||||||
speed_index = (speed_index + 1) % SPEEDS.size()
|
speed_index = (speed_index + 1) % SPEEDS.size()
|
||||||
speed = SPEEDS[speed_index]
|
speed = SPEEDS[speed_index]
|
||||||
|
speed_changed.emit(speed_index)
|
||||||
return speed
|
return speed
|
||||||
|
|
||||||
func set_speed_index(index: int) -> void:
|
func set_speed_index(index: int) -> void:
|
||||||
speed_index = clampi(index, 0, SPEEDS.size() - 1)
|
speed_index = clampi(index, 0, SPEEDS.size() - 1)
|
||||||
speed = SPEEDS[speed_index]
|
speed = SPEEDS[speed_index]
|
||||||
|
speed_changed.emit(speed_index)
|
||||||
|
|
||||||
func toggle_pause() -> bool:
|
func toggle_pause() -> bool:
|
||||||
paused = not paused
|
paused = not paused
|
||||||
|
pause_changed.emit(paused)
|
||||||
return paused
|
return paused
|
||||||
|
|
||||||
|
func set_paused(value: bool) -> void:
|
||||||
|
if paused == value:
|
||||||
|
return
|
||||||
|
paused = value
|
||||||
|
pause_changed.emit(paused)
|
||||||
|
|
||||||
func get_speed_label() -> String:
|
func get_speed_label() -> String:
|
||||||
return "x%d" % int(speed)
|
return "x%d" % int(speed)
|
||||||
|
|
||||||
@@ -55,3 +76,8 @@ func get_current_date() -> Array:
|
|||||||
|
|
||||||
func get_date_text() -> String:
|
func get_date_text() -> String:
|
||||||
return "%d年 %d月 %d日" % [GameState.year, GameState.month, GameState.day]
|
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