414 lines
13 KiB
GDScript
414 lines
13 KiB
GDScript
#*****************************************************************************
|
|
# @author MakerYang
|
|
# @site mir2.makeryang.com
|
|
#*****************************************************************************
|
|
|
|
extends Control
|
|
|
|
# 场景资源
|
|
@onready var button_pressed_music: AudioStreamPlayer2D = $ButtonPressedMusic
|
|
@onready var character: Control = $Character
|
|
@onready var character_box: Control = $Character/CharacterBox
|
|
@onready var character_describe: Control = $Character/CharacterDescribe
|
|
@onready var character_switch: Control = $Character/CharacterSwitch
|
|
@onready var left_switch: TextureButton = $Character/CharacterSwitch/LeftSwitch
|
|
@onready var right_switch: TextureButton = $Character/CharacterSwitch/RightSwitch
|
|
@onready var warrior_men: AnimatedSprite2D = $Character/CharacterBox/WarriorMen
|
|
@onready var warrior_women: AnimatedSprite2D = $Character/CharacterBox/WarriorWomen
|
|
@onready var mage_men: AnimatedSprite2D = $Character/CharacterBox/MageMen
|
|
@onready var mage_women: AnimatedSprite2D = $Character/CharacterBox/MageWomen
|
|
@onready var taoist_men: AnimatedSprite2D = $Character/CharacterBox/TaoistMen
|
|
@onready var taoist_women: AnimatedSprite2D = $Character/CharacterBox/TaoistWomen
|
|
@onready var warrior_describe: TextureRect = $Character/CharacterDescribe/WarriorDescribe
|
|
@onready var mage_describe: TextureRect = $Character/CharacterDescribe/MageDescribe
|
|
@onready var taoist_describe: TextureRect = $Character/CharacterDescribe/TaoistDescribe
|
|
@onready var left: Control = $Left
|
|
@onready var left_level: Label = $Left/LeftLevel
|
|
@onready var left_name: Label = $Left/LeftName
|
|
@onready var left_career: Label = $Left/LeftCareer
|
|
@onready var left_gender: Label = $Left/LeftGender
|
|
@onready var right: Control = $Right
|
|
@onready var create_button: TextureButton = $Right/CreateButton
|
|
@onready var restore_button: TextureButton = $Right/RestoreButton
|
|
@onready var delete_button: TextureButton = $Right/DeleteButton
|
|
@onready var return_button: TextureButton = $Right/ReturnButton
|
|
@onready var bottom: Control = $Bottom
|
|
@onready var create: Control = $Bottom/Create
|
|
@onready var nickname: LineEdit = $Bottom/Create/Top/Nickname
|
|
@onready var men_button: TextureButton = $Bottom/Create/Middle/MenButton
|
|
@onready var women_button: TextureButton = $Bottom/Create/Middle/WomenButton
|
|
@onready var create_confirm_button: TextureButton = $Bottom/Create/Footer/CreateConfirmButton
|
|
@onready var create_cancel_button: TextureButton = $Bottom/Create/Footer/CreateCancelButton
|
|
@onready var start: Control = $Bottom/Start
|
|
@onready var start_button: TextureButton = $Bottom/Start/StartButton
|
|
|
|
@onready var delete_dialog: Control = $DeleteDialog
|
|
@onready var dialog_confirm_button: TextureButton = $DeleteDialog/DialogConfirmButton
|
|
@onready var dialog_cancel_button: TextureButton = $DeleteDialog/DialogCancelButton
|
|
|
|
# 场景信号
|
|
signal switch_login_signal()
|
|
signal switch_world_signal()
|
|
|
|
# 场景数据
|
|
var type:String = ""
|
|
var role_array: Array
|
|
var role_int:int = 0
|
|
var gender:int = 0
|
|
var gender_array: Array = ["men", "women"]
|
|
var career:int = 0
|
|
var career_array: Array = [
|
|
{"career": "warrior", "name": "战士"},
|
|
{"career": "mage", "name": "法师"},
|
|
{"career": "taoist", "name": "道士"}
|
|
]
|
|
|
|
func _ready() -> void:
|
|
type = ""
|
|
role_array = []
|
|
role_int = 0
|
|
gender = 0
|
|
career = 0
|
|
character_box.visible = false
|
|
warrior_men.visible = false
|
|
warrior_women.visible = false
|
|
mage_men.visible = false
|
|
mage_women.visible = false
|
|
taoist_men.visible = false
|
|
taoist_women.visible = false
|
|
character_describe.visible = false
|
|
warrior_describe.visible = false
|
|
mage_describe.visible = false
|
|
taoist_describe.visible = false
|
|
character_switch.visible = false
|
|
left.visible = false
|
|
right.visible = true
|
|
create.visible = false
|
|
start.visible = true
|
|
start_button.disabled = true
|
|
delete_dialog.visible = false
|
|
|
|
func _process(_delta: float) -> void:
|
|
if type == "":
|
|
if len(role_array) > 0:
|
|
left.visible = true
|
|
character_box.visible = true
|
|
character_switch.visible = true
|
|
start_button.disabled = false
|
|
var select_role = role_array[role_int]
|
|
for i in range(len(career_array)):
|
|
if career_array[i]["career"] == select_role["player_career"]:
|
|
career = i
|
|
var gender_string: String = ""
|
|
if select_role["player_gender"] == "men":
|
|
gender = 0
|
|
gender_string = "男"
|
|
if select_role["player_gender"] == "women":
|
|
gender = 1
|
|
gender_string = "女"
|
|
left_level.text = "Level." + str(select_role["player_asset_level"])
|
|
left_name.text = select_role["player_nickname"]
|
|
left_career.text = career_array[i]["name"]
|
|
left_gender.text = gender_string
|
|
if career == 0:
|
|
warrior_describe.visible = true
|
|
mage_describe.visible = false
|
|
taoist_describe.visible = false
|
|
mage_men.visible = false
|
|
mage_women.visible = false
|
|
taoist_men.visible = false
|
|
taoist_women.visible = false
|
|
if gender == 0:
|
|
warrior_men.visible = true
|
|
warrior_women.visible = false
|
|
if gender == 1:
|
|
warrior_men.visible = false
|
|
warrior_women.visible = true
|
|
if career == 1:
|
|
warrior_describe.visible = false
|
|
mage_describe.visible = true
|
|
taoist_describe.visible = false
|
|
warrior_men.visible = false
|
|
warrior_women.visible = false
|
|
taoist_men.visible = false
|
|
taoist_women.visible = false
|
|
if gender == 0:
|
|
mage_men.visible = true
|
|
mage_women.visible = false
|
|
if gender == 1:
|
|
mage_men.visible = false
|
|
mage_women.visible = true
|
|
if career == 2:
|
|
warrior_describe.visible = false
|
|
mage_describe.visible = false
|
|
taoist_describe.visible = true
|
|
warrior_men.visible = false
|
|
warrior_women.visible = false
|
|
mage_men.visible = false
|
|
mage_women.visible = false
|
|
if gender == 0:
|
|
taoist_men.visible = true
|
|
taoist_women.visible = false
|
|
if gender == 1:
|
|
taoist_men.visible = false
|
|
taoist_women.visible = true
|
|
else:
|
|
start_button.disabled = true
|
|
if type == "create":
|
|
left.visible = false
|
|
if career == 0:
|
|
warrior_describe.visible = true
|
|
mage_describe.visible = false
|
|
taoist_describe.visible = false
|
|
mage_men.visible = false
|
|
mage_women.visible = false
|
|
taoist_men.visible = false
|
|
taoist_women.visible = false
|
|
if gender == 0:
|
|
warrior_men.visible = true
|
|
warrior_women.visible = false
|
|
if gender == 1:
|
|
warrior_men.visible = false
|
|
warrior_women.visible = true
|
|
if career == 1:
|
|
warrior_describe.visible = false
|
|
mage_describe.visible = true
|
|
taoist_describe.visible = false
|
|
warrior_men.visible = false
|
|
warrior_women.visible = false
|
|
taoist_men.visible = false
|
|
taoist_women.visible = false
|
|
if gender == 0:
|
|
mage_men.visible = true
|
|
mage_women.visible = false
|
|
if gender == 1:
|
|
mage_men.visible = false
|
|
mage_women.visible = true
|
|
if career == 2:
|
|
warrior_describe.visible = false
|
|
mage_describe.visible = false
|
|
taoist_describe.visible = true
|
|
warrior_men.visible = false
|
|
warrior_women.visible = false
|
|
mage_men.visible = false
|
|
mage_women.visible = false
|
|
if gender == 0:
|
|
taoist_men.visible = true
|
|
taoist_women.visible = false
|
|
if gender == 1:
|
|
taoist_men.visible = false
|
|
taoist_women.visible = true
|
|
|
|
func on_role(_server_token: String) -> void:
|
|
if _server_token != "":
|
|
print("[launch:role:on_role]")
|
|
_ready()
|
|
Request.on_server("/game/player/index?token=" + _server_token, HTTPClient.METHOD_GET, {}, func(_result, code, _headers, body):
|
|
if code == 200:
|
|
var response = JSON.parse_string(body.get_string_from_utf8())
|
|
if response.code != 0:
|
|
get_parent().on_dialog(response.message)
|
|
return
|
|
role_array = Global.update_server_role(response.data.player)
|
|
Account.update_area_token(_server_token)
|
|
else:
|
|
get_parent().on_dialog("服务区人物角色失败")
|
|
)
|
|
|
|
# 开始游戏按钮事件函数
|
|
func _on_start_button_pressed() -> void:
|
|
if len(role_array) > 0:
|
|
print("[launch:role:start:button]")
|
|
_on_button_pressed_music()
|
|
await get_tree().create_timer(0.2).timeout
|
|
var player = Account.update_player(role_array[role_int])
|
|
if player["token"] == "":
|
|
get_parent().on_dialog("开始游戏失败")
|
|
return
|
|
start_button.disabled = true
|
|
switch_world_signal.emit()
|
|
start_button.disabled = false
|
|
|
|
# 创建角色性别男按钮事件函数
|
|
func _on_men_button_pressed() -> void:
|
|
if type == "create":
|
|
print("[launch:role:men:button]")
|
|
_on_button_pressed_music()
|
|
gender = 0
|
|
men_button.button_pressed = true
|
|
women_button.button_pressed = false
|
|
|
|
# 创建角色性别女按钮事件函数
|
|
func _on_women_button_pressed() -> void:
|
|
if type == "create":
|
|
print("[launch:role:women:button]")
|
|
_on_button_pressed_music()
|
|
gender = 1
|
|
women_button.button_pressed = true
|
|
men_button.button_pressed = false
|
|
|
|
# 创建角色提交按钮事件函数
|
|
func _on_create_confirm_button_pressed() -> void:
|
|
if type == "create":
|
|
print("[launch:role:create:confirm:button]")
|
|
_on_button_pressed_music()
|
|
if nickname.text == "":
|
|
get_parent().on_dialog("昵称不能为空")
|
|
return
|
|
create_confirm_button.disabled = true
|
|
var player_data = {
|
|
"token": Account.get_area_token(),
|
|
"nickname": nickname.text,
|
|
"gender": gender_array[gender],
|
|
"career": career_array[career]["career"]
|
|
}
|
|
Request.on_server("/game/player/create", HTTPClient.METHOD_POST, player_data, func(_result, code, _headers, body):
|
|
if code == 200:
|
|
var response = JSON.parse_string(body.get_string_from_utf8())
|
|
if response.code != 0:
|
|
get_parent().on_dialog(response.message)
|
|
return
|
|
get_parent().on_dialog("人物角色创建成功")
|
|
on_role(Account.get_area_token())
|
|
role_int = 0
|
|
create_confirm_button.disabled = false
|
|
_on_create_cancel_button_pressed()
|
|
else:
|
|
create_confirm_button.disabled = false
|
|
get_parent().on_dialog("人物角色创建失败")
|
|
)
|
|
|
|
# 创建角色取消按钮事件函数
|
|
func _on_create_cancel_button_pressed() -> void:
|
|
if type == "create":
|
|
print("[launch:role:create:cancel:button]")
|
|
_on_button_pressed_music()
|
|
type = ""
|
|
gender = 0
|
|
career = 0
|
|
nickname.text = ""
|
|
create_confirm_button.disabled = false
|
|
men_button.button_pressed = true
|
|
women_button.button_pressed = false
|
|
left_switch.disabled = false
|
|
right_switch.disabled = false
|
|
create.visible = false
|
|
start.visible = true
|
|
character_box.visible = false
|
|
character_describe.visible = false
|
|
character_switch.visible = false
|
|
|
|
# 右侧创建角色按钮事件函数
|
|
func _on_create_button_pressed() -> void:
|
|
if type != "create":
|
|
print("[launch:role:create:button]")
|
|
_on_button_pressed_music()
|
|
if len(role_array) == 6:
|
|
get_parent().on_dialog("最多可创建6个人物角色")
|
|
return
|
|
type = "create"
|
|
gender = 0
|
|
career = 0
|
|
nickname.text = ""
|
|
start.visible = false
|
|
create.visible = true
|
|
character_box.visible = true
|
|
character_describe.visible = true
|
|
character_switch.visible = true
|
|
men_button.button_pressed = true
|
|
women_button.button_pressed = false
|
|
|
|
# 右侧恢复角色按钮事件函数
|
|
func _on_restore_button_pressed() -> void:
|
|
if type != "create":
|
|
print("[launch:role:restore:button]")
|
|
_on_button_pressed_music()
|
|
get_parent().on_dialog("功能尚未开放")
|
|
|
|
# 右侧返回按钮事件函数
|
|
func _on_return_button_pressed() -> void:
|
|
if type != "create":
|
|
print("[launch:role:return:button]")
|
|
_on_button_pressed_music()
|
|
switch_login_signal.emit()
|
|
|
|
# 右侧删除角色按钮事件函数
|
|
func _on_delete_button_pressed() -> void:
|
|
if type != "create":
|
|
print("[launch:role:delete:button]")
|
|
_on_button_pressed_music()
|
|
delete_dialog.visible = true
|
|
|
|
# 删除角色弹窗确认按钮事件函数
|
|
func _on_dialog_confirm_button_pressed() -> void:
|
|
if len(role_array) > 0 and delete_dialog.visible:
|
|
print("[launch:role:dialog:confirm:button]")
|
|
_on_button_pressed_music()
|
|
delete_dialog.visible = false
|
|
var select_role = role_array[role_int]
|
|
Request.on_server("/game/player/delete?token=" + select_role["token"], HTTPClient.METHOD_GET, {}, func(_result, code, _headers, body):
|
|
if code == 200:
|
|
var response = JSON.parse_string(body.get_string_from_utf8())
|
|
if response.code != 0:
|
|
get_parent().on_dialog(response.message)
|
|
return
|
|
role_array.remove_at(role_int)
|
|
role_int = 0
|
|
left_switch.disabled = true
|
|
right_switch.disabled = false
|
|
else:
|
|
create_confirm_button.disabled = false
|
|
get_parent().on_dialog("人物角色删除失败")
|
|
)
|
|
|
|
# 删除角色弹窗取消按钮事件函数
|
|
func _on_dialog_cancel_button_pressed() -> void:
|
|
if delete_dialog.visible:
|
|
print("[launch:role:dialog:cancel:button]")
|
|
_on_button_pressed_music()
|
|
delete_dialog.visible = false
|
|
|
|
# 中间左侧切换职业按钮事件函数
|
|
func _on_left_switch_pressed() -> void:
|
|
print("[launch:role:left:switch]")
|
|
_on_button_pressed_music()
|
|
if type == "create":
|
|
career = career - 1
|
|
if career == 0:
|
|
left_switch.disabled = true
|
|
else:
|
|
left_switch.disabled = false
|
|
right_switch.disabled = false
|
|
else:
|
|
if role_int == 0:
|
|
role_int = 0
|
|
left_switch.disabled = true
|
|
else:
|
|
role_int = role_int - 1
|
|
left_switch.disabled = false
|
|
right_switch.disabled = false
|
|
|
|
# 中间右侧切换职业按钮事件函数
|
|
func _on_right_switch_pressed() -> void:
|
|
print("[launch:role:right:switch]")
|
|
_on_button_pressed_music()
|
|
if type == "create":
|
|
career = career + 1
|
|
if career == 2:
|
|
right_switch.disabled = true
|
|
else:
|
|
right_switch.disabled = false
|
|
left_switch.disabled = false
|
|
else:
|
|
if role_int == (len(role_array) - 1):
|
|
role_int = (len(role_array) - 1)
|
|
right_switch.disabled = true
|
|
else:
|
|
role_int = role_int + 1
|
|
right_switch.disabled = false
|
|
left_switch.disabled = false
|
|
|
|
# 公用按钮音效函数
|
|
func _on_button_pressed_music() -> void:
|
|
button_pressed_music.play()
|