Files
MakerYang a902dd3de7 new
2024-08-06 18:30:21 +08:00

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()