DOF/sqr/User/UI/Window/1_Select_Character.nut

247 lines
6.7 KiB
Plaintext
Raw Normal View History

2024-12-13 20:51:41 +08:00
/*
文件名:1_Select_Character.nut
路径:User/UI/Window/1_Select_Character.nut
创建日期:2024-12-13 15:45
文件用途:选择角色界面窗口
*/
class _Select_Character_SettingBackground_Object_Window extends Yosin_CommonUi {
2024-12-13 22:28:47 +08:00
//编号
Idx = 0;
2024-12-13 20:51:41 +08:00
//蓝色悬停框
RectMask = null;
//黄色选中框
SelectMask = null;
//选中状态
SelectFlag = false;
2024-12-13 22:28:47 +08:00
constructor(x, y, width, height, gIdx) {
2024-12-13 20:51:41 +08:00
base.constructor(x, y, width, height);
2024-12-13 22:28:47 +08:00
//编号
Idx = gIdx;
2024-12-13 20:51:41 +08:00
//注册绘制
2024-12-13 22:28:47 +08:00
RegisterDraw();
2024-12-13 20:51:41 +08:00
}
2024-12-13 22:28:47 +08:00
function RegisterDraw() {
2024-12-13 20:51:41 +08:00
//背景
local Background = CL_SpriteObject("sprite/interface2/selectcharacter_ver2/background/small/background_small_event.img", Idx);
Background.SetScale(0.7, 0.7);
Addchild(Background);
RectMask = CL_SpriteObject("sprite/interface2/selectcharacter_ver2/setup/setup.img", 18);
RectMask.SetVisible(false);
Addchild(RectMask);
SelectMask = CL_SpriteObject("sprite/interface2/selectcharacter_ver2/setup/setup.img", 19);
SelectMask.SetPosition(-2, -2);
SelectMask.SetVisible(false);
Addchild(SelectMask);
}
//override
function Proc(Dt) {
base.Proc(Dt);
if (isInRect && !SelectFlag) {
RectMask.SetVisible(true);
} else {
RectMask.SetVisible(false);
}
}
//鼠标左键单击回调
function OnMouseLbClick(MousePos_X, MousePos_Y) {
base.OnMouseLbClick(MousePos_X, MousePos_Y);
if (isInRect) {
2024-12-13 22:28:47 +08:00
//遍历父对象中的所有按钮 还原其他按钮
foreach(Button in Parent.SettingBackgroundButtonList) {
Button.SelectMask.SetVisible(false);
Button.SelectFlag = false;
}
//设置自身选中状态
2024-12-13 20:51:41 +08:00
SelectMask.SetVisible(true);
SelectFlag = true;
2024-12-13 22:28:47 +08:00
Parent.Parent.ChangeBackground(Idx);
2024-12-13 20:51:41 +08:00
}
}
}
class _Select_Character_SettingBackground_Window extends Yosin_Window {
//是否为独立窗口
IsIndependent = false;
//是否可见
Visible = false;
2024-12-13 22:28:47 +08:00
//选择背景按钮集合
SettingBackgroundButtonList = null;
2024-12-14 11:14:20 +08:00
Background = null;
2024-12-13 20:51:41 +08:00
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
base.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
2024-12-13 22:28:47 +08:00
SettingBackgroundButtonList = [];
2024-12-14 16:14:16 +08:00
SetClipRect(0, 0, gWidth, gHeight);
2024-12-13 22:28:47 +08:00
// ShowBorder(true);
// SetLayerOpacity(1);
}
2024-12-13 20:51:41 +08:00
2024-12-13 22:28:47 +08:00
function Init() {
2024-12-13 20:51:41 +08:00
//注册绘制
RegisterDraw();
}
function RegisterDraw() {
//背景
2024-12-14 11:14:20 +08:00
Background = CL_SpriteObject("sprite/interface2/selectcharacter_ver2/setup/setup.img", 17);
2024-12-13 20:51:41 +08:00
Addchild(Background);
for (local i = 0; i< 24; i++) {
2024-12-13 22:28:47 +08:00
local Buf = _Select_Character_SettingBackground_Object_Window(5 + (101 * (i % 2)), 9 + (61 * (i / 2)), 91, 51, i);
SettingBackgroundButtonList.push(Buf);
//如果是父对象默认构造的默认是勾选状态
if (i == Parent.Info.Background) {
Buf.SelectMask.SetVisible(true);
Buf.SelectFlag = true;
}
2024-12-13 20:51:41 +08:00
AddUIChild(Buf);
}
}
//逻辑入口
function Proc(Dt) {
SyncPos(X, Y);
base.Proc(Dt);
}
}
class _Select_Character_Window extends Yosin_Window {
//调试模式
// DeBugMode = true;
//不是窗口
// NoWindow = true;
//是否可见
// Visible = false;
//背景音乐
BackGroundMusic = null
//设置背景图片窗口
SettingBackgroundWindow = null;
//背景图片
BackGround = null;
//信息
Info = null;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
base.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
function Init(gInfo) {
//接收参数信息
Info = gInfo;
//注册绘制
RegisterDraw();
//注册控件
RegisterWidget();
//注册窗口
RegisterWindow();
// OpenDeBug();
//播放音乐
PlayBackgroundMusic();
}
function PlayBackgroundMusic() {
// BackGroundMusic = Sound("SoundPacks/Loop.ogg");
// BackGroundMusic.Play();
}
function MusicLogic() {
if (BackGroundMusic == null) return;
if (!BackGroundMusic.IsPlaying()) BackGroundMusic.Play();
}
function RegisterWindow() {
SettingBackgroundWindow = _Select_Character_SettingBackground_Window("选择角色_设置背景图片窗口", 850, 28, 212, 129, 0);
AddUIChild(SettingBackgroundWindow);
2024-12-13 22:28:47 +08:00
//先添加为子对象 因为子对象需要用到父对象
SettingBackgroundWindow.Init();
2024-12-13 20:51:41 +08:00
}
function RegisterWidget() {
//背景设置按钮
local SettingButton = Yosin_BaseButton(984, 6, 77, 24 "sprite/interface2/ui/community/guild_2019/guildsetting/guildsetting.img", 29);
//点击事件回调
SettingButton.OnClick = function(Button) {
SettingBackgroundWindow.SetVisible(!SettingBackgroundWindow.Visible)
}.bindenv(this);
AddUIChild(SettingButton);
//登录按钮文本
local LoginTextActor = FontAssetManager.GenerateNormal("背景设置", sq_RGBA(221, 197, 147, 255), true);
LoginTextActor.SetPosition(23, 3);
LoginTextActor.SetUpdateFunc(function(Text, Dt) {
if (Text.Parent.State == 1 || Text.Parent.State == 2) {
Text.SetFillColor(sq_RGBA(255, 255, 184, 255));
} else if (Text.Parent.State == 0) {
Text.SetFillColor(sq_RGBA(221, 197, 147, 255));
}
})
SettingButton.Addchild(LoginTextActor);
2024-12-14 11:14:20 +08:00
2024-12-14 16:14:16 +08:00
local TestButton = Yosin_ScrollBar(500, 100, 150, 40);
2024-12-14 11:14:20 +08:00
AddUIChild(TestButton);
2024-12-13 20:51:41 +08:00
}
2024-12-13 22:28:47 +08:00
//切换背景
function ChangeBackground(Idx) {
if (BackGround) {
BackGround.RemoveSelf();
BackGround = null;
}
BackGround = CL_SpriteObject("sprite/interface2/selectcharacter_ver2/background/large/background_large_event.img", Idx);
BackGround.SetZOrder(-10);
2024-12-14 11:14:20 +08:00
/*
BackGround = Layer();
BackGround.Addchild(CL_SpriteObject("sprite/interface2/selectcharacter_ver2/background/large/background_large_event.img", Idx));
BackGround.SetZOrder(-10);
BackGround.SetPosition(100, 100);
BackGround.SetClipRect(0, 0, 200, 200);
*/
2024-12-13 22:28:47 +08:00
Addchild(BackGround);
}
2024-12-13 20:51:41 +08:00
function RegisterDraw() {
//大背景 根据玩家的设定背景决定
2024-12-13 22:28:47 +08:00
ChangeBackground(Info.Background);
2024-12-13 20:51:41 +08:00
}
//逻辑入口
function Proc(Dt) {
MusicLogic();
SyncPos(X, Y);
base.Proc(Dt);
}
}