258 lines
8.7 KiB
GDScript
258 lines
8.7 KiB
GDScript
extends Panel
|
|
|
|
@onready var scare_crow_1: Button = $BuyScareCrowHbox/ScareCrow1 #稻草人类型1
|
|
@onready var scare_crow_2: Button = $BuyScareCrowHbox/ScareCrow2 #稻草人类型2
|
|
@onready var scare_crow_3: Button = $BuyScareCrowHbox/ScareCrow3 #稻草人类型3
|
|
@onready var scare_crow_input: LineEdit = $HBox/ScareCrowInput #稻草人的昵称
|
|
@onready var scare_crow_name_color_input: ColorPickerButton = $HBox/ScareCrowNameColorInput #稻草人昵称的颜色
|
|
@onready var talk_1: LineEdit = $ScareCrowTalksGrid/Talk1 #稻草人展示的第一句话
|
|
@onready var talk_2: LineEdit = $ScareCrowTalksGrid/Talk2 #稻草人展示的第二句话
|
|
@onready var talk_3: LineEdit = $ScareCrowTalksGrid/Talk3 #稻草人展示的第三句话
|
|
@onready var talk_4: LineEdit = $ScareCrowTalksGrid/Talk4 #稻草人展示的第四句话
|
|
@onready var quit_button: Button = $QuitButton #关闭面板按钮
|
|
@onready var sure_button: Button = $HBox2/SureButton #确认修改按钮
|
|
|
|
@onready var color_picker_button_1: ColorPickerButton = $ScareCrowTalksColorGrid/ColorPickerButton1 #第一句话颜色
|
|
@onready var color_picker_button_2: ColorPickerButton = $ScareCrowTalksColorGrid/ColorPickerButton2 #第二句话颜色
|
|
@onready var color_picker_button_3: ColorPickerButton = $ScareCrowTalksColorGrid/ColorPickerButton3 #第三句话颜色
|
|
@onready var color_picker_button_4: ColorPickerButton = $ScareCrowTalksColorGrid/ColorPickerButton4 #第四句话颜色
|
|
|
|
# 引用主游戏和网络管理器
|
|
@onready var main_game = get_node("/root/main")
|
|
@onready var tcp_network_manager_panel: Panel = $'../../BigPanel/TCPNetworkManagerPanel'
|
|
|
|
|
|
# 稻草人配置数据
|
|
var scare_crow_config = {}
|
|
var player_scare_crow_config = {}
|
|
|
|
# 稻草人按钮数组
|
|
var scare_crow_buttons = []
|
|
|
|
func _ready():
|
|
# 初始化按钮数组
|
|
scare_crow_buttons = [scare_crow_1, scare_crow_2, scare_crow_3]
|
|
|
|
# 连接信号
|
|
scare_crow_1.pressed.connect(_on_scare_crow_1_pressed)
|
|
scare_crow_2.pressed.connect(_on_scare_crow_2_pressed)
|
|
scare_crow_3.pressed.connect(_on_scare_crow_3_pressed)
|
|
quit_button.pressed.connect(_on_quit_button_pressed)
|
|
sure_button.pressed.connect(_on_sure_button_pressed)
|
|
# 连接可见性改变信号
|
|
visibility_changed.connect(_on_visibility_changed)
|
|
# 加载稻草人配置
|
|
load_scare_crow_config()
|
|
|
|
# 初始化UI
|
|
update_ui()
|
|
|
|
# 加载稻草人配置
|
|
func load_scare_crow_config():
|
|
var file = FileAccess.open("res://Server/config/scare_crow_config.json", FileAccess.READ)
|
|
if file:
|
|
var json_text = file.get_as_text()
|
|
file.close()
|
|
|
|
var json = JSON.new()
|
|
var parse_result = json.parse(json_text)
|
|
if parse_result == OK:
|
|
scare_crow_config = json.get_data()
|
|
print("稻草人配置加载成功")
|
|
else:
|
|
print("稻草人配置JSON解析失败")
|
|
else:
|
|
print("无法读取稻草人配置文件")
|
|
|
|
# 更新UI显示
|
|
func update_ui():
|
|
if not scare_crow_config.has("稻草人类型"):
|
|
return
|
|
|
|
# 更新稻草人按钮
|
|
var scare_crow_types = scare_crow_config["稻草人类型"]
|
|
var type_names = ["稻草人1", "稻草人2", "稻草人3"]
|
|
|
|
for i in range(min(3, scare_crow_buttons.size())):
|
|
var button = scare_crow_buttons[i]
|
|
var type_name = type_names[i]
|
|
|
|
if scare_crow_types.has(type_name):
|
|
var price = scare_crow_types[type_name]["价格"]
|
|
var is_owned = player_scare_crow_config.get("已拥有稻草人类型", []).has(type_name)
|
|
|
|
if is_owned:
|
|
button.text = type_name + " (已拥有)"
|
|
button.disabled = false
|
|
button.modulate = Color.GREEN
|
|
else:
|
|
button.text = type_name + " (" + str(price) + "金币)"
|
|
button.disabled = false
|
|
button.modulate = Color.WHITE
|
|
else:
|
|
button.text = "未知类型"
|
|
button.disabled = true
|
|
|
|
# 更新当前稻草人配置
|
|
if player_scare_crow_config.has("稻草人昵称"):
|
|
scare_crow_input.text = player_scare_crow_config["稻草人昵称"]
|
|
|
|
# 更新昵称颜色
|
|
if player_scare_crow_config.has("稻草人昵称颜色"):
|
|
scare_crow_name_color_input.color = Color(player_scare_crow_config["稻草人昵称颜色"])
|
|
|
|
if player_scare_crow_config.has("稻草人说的话"):
|
|
var talks = player_scare_crow_config["稻草人说的话"]
|
|
if talks.has("第一句话"):
|
|
talk_1.text = talks["第一句话"]["内容"]
|
|
color_picker_button_1.color = Color(talks["第一句话"]["颜色"])
|
|
if talks.has("第二句话"):
|
|
talk_2.text = talks["第二句话"]["内容"]
|
|
color_picker_button_2.color = Color(talks["第二句话"]["颜色"])
|
|
if talks.has("第三句话"):
|
|
talk_3.text = talks["第三句话"]["内容"]
|
|
color_picker_button_3.color = Color(talks["第三句话"]["颜色"])
|
|
if talks.has("第四句话"):
|
|
talk_4.text = talks["第四句话"]["内容"]
|
|
color_picker_button_4.color = Color(talks["第四句话"]["颜色"])
|
|
|
|
# 设置玩家稻草人配置
|
|
func set_player_scare_crow_config(config: Dictionary):
|
|
player_scare_crow_config = config
|
|
update_ui()
|
|
|
|
# 购买/选择稻草人1
|
|
func _on_scare_crow_1_pressed():
|
|
handle_scare_crow_selection("稻草人1")
|
|
|
|
# 购买/选择稻草人2
|
|
func _on_scare_crow_2_pressed():
|
|
handle_scare_crow_selection("稻草人2")
|
|
|
|
# 购买/选择稻草人3
|
|
func _on_scare_crow_3_pressed():
|
|
handle_scare_crow_selection("稻草人3")
|
|
|
|
# 处理稻草人选择
|
|
func handle_scare_crow_selection(type_name: String):
|
|
var owned_types = player_scare_crow_config.get("已拥有稻草人类型", [])
|
|
|
|
if owned_types.has(type_name):
|
|
# 已拥有,选择为当前展示类型
|
|
# 发送修改请求到服务器保存展示类型
|
|
var config_data = {
|
|
"稻草人展示类型": type_name
|
|
}
|
|
|
|
# 发送修改请求(不需要费用,只是切换展示类型)
|
|
tcp_network_manager_panel.send_modify_scare_crow_config(config_data, 0)
|
|
|
|
Toast.show("正在切换到" + type_name + "...", Color.CYAN)
|
|
else:
|
|
# 未拥有,购买
|
|
var price = scare_crow_config["稻草人类型"][type_name]["价格"]
|
|
if main_game.money >= price:
|
|
# 发送购买请求
|
|
tcp_network_manager_panel.send_buy_scare_crow(type_name, price)
|
|
else:
|
|
Toast.show("金币不足,需要" + str(price) + "金币", Color.RED)
|
|
|
|
# 确认修改按钮
|
|
func _on_sure_button_pressed():
|
|
# 检查网络连接
|
|
if not tcp_network_manager_panel.is_connected_to_server():
|
|
Toast.show("未连接到服务器", Color.RED)
|
|
return
|
|
|
|
# 获取修改费用
|
|
var modify_cost = scare_crow_config.get("修改稻草人配置花费", 300)
|
|
|
|
# 检查金币是否足够
|
|
if main_game.money < modify_cost:
|
|
Toast.show("金币不足,修改配置需要" + str(modify_cost) + "金币", Color.RED)
|
|
return
|
|
|
|
# 准备配置数据
|
|
var config_data = {
|
|
"稻草人昵称": scare_crow_input.text,
|
|
"稻草人昵称颜色": scare_crow_name_color_input.color.to_html(),
|
|
"稻草人说的话": {
|
|
"第一句话": {
|
|
"内容": talk_1.text,
|
|
"颜色": color_picker_button_1.color.to_html()
|
|
},
|
|
"第二句话": {
|
|
"内容": talk_2.text,
|
|
"颜色": color_picker_button_2.color.to_html()
|
|
},
|
|
"第三句话": {
|
|
"内容": talk_3.text,
|
|
"颜色": color_picker_button_3.color.to_html()
|
|
},
|
|
"第四句话": {
|
|
"内容": talk_4.text,
|
|
"颜色": color_picker_button_4.color.to_html()
|
|
}
|
|
}
|
|
}
|
|
|
|
# 发送修改请求
|
|
tcp_network_manager_panel.send_modify_scare_crow_config(config_data, modify_cost)
|
|
|
|
# 关闭面板按钮
|
|
func _on_quit_button_pressed():
|
|
hide()
|
|
|
|
# 处理购买稻草人响应
|
|
func handle_buy_scare_crow_response(success: bool, message: String, updated_data: Dictionary):
|
|
if success:
|
|
Toast.show(message, Color.GREEN)
|
|
|
|
# 更新玩家数据
|
|
if updated_data.has("钱币"):
|
|
main_game.money = updated_data["钱币"]
|
|
if updated_data.has("稻草人配置"):
|
|
player_scare_crow_config = updated_data["稻草人配置"]
|
|
|
|
# 更新UI
|
|
main_game._update_ui()
|
|
update_ui()
|
|
|
|
# 更新主游戏中的稻草人显示
|
|
if main_game.has_method("update_scare_crow_display"):
|
|
main_game.update_scare_crow_display()
|
|
else:
|
|
Toast.show(message, Color.RED)
|
|
|
|
# 处理修改稻草人配置响应
|
|
func handle_modify_scare_crow_config_response(success: bool, message: String, updated_data: Dictionary):
|
|
if success:
|
|
Toast.show(message, Color.GREEN)
|
|
|
|
# 更新玩家数据
|
|
if updated_data.has("钱币"):
|
|
main_game.money = updated_data["钱币"]
|
|
if updated_data.has("稻草人配置"):
|
|
player_scare_crow_config = updated_data["稻草人配置"]
|
|
|
|
# 更新UI
|
|
main_game._update_ui()
|
|
update_ui()
|
|
|
|
# 更新主游戏中的稻草人显示
|
|
if main_game.has_method("update_scare_crow_display"):
|
|
main_game.update_scare_crow_display()
|
|
else:
|
|
Toast.show(message, Color.RED)
|
|
|
|
# 面板显示时的处理
|
|
func _on_visibility_changed():
|
|
if visible:
|
|
# 请求最新的稻草人配置
|
|
if tcp_network_manager_panel.is_connected_to_server():
|
|
tcp_network_manager_panel.send_get_scare_crow_config()
|
|
|
|
GlobalVariables.isZoomDisabled = true
|
|
else:
|
|
GlobalVariables.isZoomDisabled = false
|