创建新工程
This commit is contained in:
85
scripts/GameStateManager.gd
Normal file
85
scripts/GameStateManager.gd
Normal file
@@ -0,0 +1,85 @@
|
||||
extends Node
|
||||
class_name GameStateManager
|
||||
## 游戏状态管理器
|
||||
## 负责管理游戏的全局状态和场景切换
|
||||
|
||||
# 游戏状态枚举
|
||||
enum GameState {
|
||||
LOGIN, # 登录状态
|
||||
CHARACTER_CREATION, # 角色创建状态
|
||||
IN_GAME, # 游戏中
|
||||
DISCONNECTED # 断线状态
|
||||
}
|
||||
|
||||
# 信号定义
|
||||
signal state_changed(old_state: GameState, new_state: GameState)
|
||||
|
||||
# 当前状态
|
||||
var current_state: GameState = GameState.LOGIN
|
||||
|
||||
# 玩家数据
|
||||
var player_data: Dictionary = {}
|
||||
|
||||
# 数据文件路径
|
||||
const SAVE_PATH = "user://player_data.json"
|
||||
|
||||
func _ready():
|
||||
print("GameStateManager initialized")
|
||||
print("Initial state: ", GameState.keys()[current_state])
|
||||
|
||||
# 尝试加载玩家数据
|
||||
load_player_data()
|
||||
|
||||
func change_state(new_state: GameState) -> void:
|
||||
"""切换游戏状态"""
|
||||
if new_state == current_state:
|
||||
return
|
||||
|
||||
var old_state = current_state
|
||||
current_state = new_state
|
||||
|
||||
print("State changed: ", GameState.keys()[old_state], " -> ", GameState.keys()[new_state])
|
||||
state_changed.emit(old_state, new_state)
|
||||
|
||||
func save_player_data() -> void:
|
||||
"""保存玩家数据到本地"""
|
||||
var file = FileAccess.open(SAVE_PATH, FileAccess.WRITE)
|
||||
if file:
|
||||
var json_string = JSON.stringify(player_data)
|
||||
file.store_string(json_string)
|
||||
file.close()
|
||||
print("Player data saved")
|
||||
else:
|
||||
print("Failed to save player data")
|
||||
|
||||
func load_player_data() -> Dictionary:
|
||||
"""从本地加载玩家数据"""
|
||||
if not FileAccess.file_exists(SAVE_PATH):
|
||||
print("No saved player data found")
|
||||
return {}
|
||||
|
||||
var file = FileAccess.open(SAVE_PATH, FileAccess.READ)
|
||||
if file:
|
||||
var json_string = file.get_as_text()
|
||||
file.close()
|
||||
|
||||
var json = JSON.new()
|
||||
var parse_result = json.parse(json_string)
|
||||
|
||||
if parse_result == OK:
|
||||
player_data = json.data
|
||||
print("Player data loaded: ", player_data.keys())
|
||||
return player_data
|
||||
else:
|
||||
print("Failed to parse player data")
|
||||
else:
|
||||
print("Failed to open player data file")
|
||||
|
||||
return {}
|
||||
|
||||
func clear_player_data() -> void:
|
||||
"""清除玩家数据"""
|
||||
player_data.clear()
|
||||
if FileAccess.file_exists(SAVE_PATH):
|
||||
DirAccess.remove_absolute(SAVE_PATH)
|
||||
print("Player data cleared")
|
||||
Reference in New Issue
Block a user