178 lines
4.2 KiB
GDScript
178 lines
4.2 KiB
GDScript
extends Control
|
|
|
|
# 简化版更新检测器
|
|
# 适用于萌芽农场游戏
|
|
|
|
# 配置
|
|
const GAME_ID = "mengyafarm"
|
|
const SERVER_URL = "https://app.shumengya.top"
|
|
const CURRENT_VERSION = GlobalVariables.client_version
|
|
|
|
# 更新信息
|
|
var has_update = false
|
|
var latest_version = ""
|
|
|
|
func _ready():
|
|
# 初始化时隐藏面板
|
|
self.hide()
|
|
|
|
# 游戏启动时自动检查更新
|
|
call_deferred("check_for_updates")
|
|
|
|
func check_for_updates():
|
|
|
|
var http_request = HTTPRequest.new()
|
|
add_child(http_request)
|
|
|
|
# 连接请求完成信号
|
|
http_request.request_completed.connect(_on_update_check_completed)
|
|
|
|
# 发送请求
|
|
var url = SERVER_URL + "/api/simple/check-version/" + GAME_ID + "?current_version=" + CURRENT_VERSION
|
|
var error = http_request.request(url)
|
|
|
|
if error != OK:
|
|
print("网络请求失败: ", error)
|
|
|
|
func _on_update_check_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray):
|
|
if response_code != 200:
|
|
print("服务器响应错误: ", response_code)
|
|
return
|
|
|
|
# 解析JSON
|
|
var json = JSON.new()
|
|
var parse_result = json.parse(body.get_string_from_utf8())
|
|
|
|
if parse_result != OK:
|
|
print("解析响应失败")
|
|
return
|
|
|
|
var data = json.data
|
|
|
|
if "error" in data:
|
|
print("服务器错误: ", data.error)
|
|
return
|
|
|
|
# 检查是否有更新
|
|
has_update = data.get("has_update", false)
|
|
latest_version = data.get("latest_version", "")
|
|
|
|
if has_update:
|
|
print("发现新版本: ", latest_version)
|
|
show_update_panel()
|
|
else:
|
|
print("已是最新版本")
|
|
|
|
func show_update_panel():
|
|
"""显示更新面板"""
|
|
self.show() # 直接显示当前面板
|
|
|
|
func download_update():
|
|
"""下载更新"""
|
|
var platform = get_platform_name()
|
|
var download_url = SERVER_URL + "/download/" + GAME_ID + "/" + platform.to_lower()
|
|
|
|
print("下载链接: ", download_url)
|
|
|
|
# 打开下载页面
|
|
var error = OS.shell_open(download_url)
|
|
if error != OK:
|
|
# 复制到剪贴板作为备选方案
|
|
DisplayServer.clipboard_set(download_url)
|
|
show_message("无法打开浏览器,下载链接已复制到剪贴板")
|
|
|
|
func get_platform_name() -> String:
|
|
"""获取平台名称"""
|
|
var os_name = OS.get_name()
|
|
match os_name:
|
|
"Windows":
|
|
return "Windows"
|
|
"Android":
|
|
return "Android"
|
|
"macOS":
|
|
return "macOS"
|
|
"Linux":
|
|
return "Linux"
|
|
_:
|
|
return "Windows"
|
|
|
|
func show_message(text: String):
|
|
"""显示消息提示"""
|
|
var dialog = AcceptDialog.new()
|
|
add_child(dialog)
|
|
dialog.dialog_text = text
|
|
dialog.popup_centered()
|
|
|
|
# 3秒后自动关闭
|
|
await get_tree().create_timer(3.0).timeout
|
|
if is_instance_valid(dialog):
|
|
dialog.queue_free()
|
|
|
|
# 手动检查更新的公共方法
|
|
func manual_check_update():
|
|
"""手动检查更新"""
|
|
check_for_updates()
|
|
|
|
# 直接跳转到相应平台下载链接
|
|
func _on_download_button_pressed() -> void:
|
|
"""下载按钮点击事件"""
|
|
if not has_update:
|
|
show_message("当前已是最新版本")
|
|
return
|
|
|
|
var platform = get_platform_name()
|
|
var download_url = SERVER_URL + "/download/" + GAME_ID + "/" + platform.to_lower()
|
|
|
|
print("下载链接: ", download_url)
|
|
|
|
# 打开下载页面
|
|
var error = OS.shell_open(download_url)
|
|
if error != OK:
|
|
# 复制到剪贴板作为备选方案
|
|
DisplayServer.clipboard_set(download_url)
|
|
show_message("无法打开浏览器,下载链接已复制到剪贴板")
|
|
else:
|
|
show_message("正在打开下载页面...")
|
|
|
|
|
|
# 关闭更新面板
|
|
func _on_close_button_pressed() -> void:
|
|
"""关闭按钮点击事件"""
|
|
self.hide()
|
|
|
|
# 稍后提醒按钮
|
|
func _on_later_button_pressed() -> void:
|
|
"""稍后提醒按钮点击事件"""
|
|
print("用户选择稍后更新")
|
|
self.hide()
|
|
|
|
# 检查更新按钮
|
|
func _on_check_update_button_pressed() -> void:
|
|
"""检查更新按钮点击事件"""
|
|
check_for_updates()
|
|
|
|
# 获取更新信息的公共方法
|
|
func get_update_info() -> Dictionary:
|
|
"""获取更新信息"""
|
|
return {
|
|
"has_update": has_update,
|
|
"current_version": CURRENT_VERSION,
|
|
"latest_version": latest_version,
|
|
"game_id": GAME_ID
|
|
}
|
|
|
|
# 获取当前版本
|
|
func get_current_version() -> String:
|
|
"""获取当前版本"""
|
|
return CURRENT_VERSION
|
|
|
|
# 获取最新版本
|
|
func get_latest_version() -> String:
|
|
"""获取最新版本"""
|
|
return latest_version
|
|
|
|
# 是否有更新
|
|
func is_update_available() -> bool:
|
|
"""是否有更新可用"""
|
|
return has_update
|