/* 文件名:8_SkillTree.nut 路径:User/UI/Window/8_SkillTree/8_SkillTree.nut 创建日期:2025-02-17 10:03 文件用途:技能树 */ //个人信息命名空间 if (!getroottable().rawin("UISpace_SkillTree")) UISpace_SkillTree <- {}; //技能对象 class UISpace_SkillTree.Skill extends Yosin_CommonUi { //技能 Skill = 0; //鼠标悬浮效果 HoverEffect = null; constructor(x, y, width, height, gSkill) { this.Skill = gSkill; base.constructor(x, y, width, height); // OpenDeBug(); Init(); HoverEffect = CL_SpriteObject("sprite/interface2/ui/newskillshop/newskillshop.img", 35); HoverEffect.SetPosition(-1, -1); HoverEffect.SetVisible(false); Addchild(HoverEffect); } function Init() { //背景 local Background = CL_SpriteObject("sprite/interface2/ui/newskillshop/newskillshop.img", 34); Addchild(Background); //技能图标 local SkillIcon = Skill.GetIconSprite(); SkillIcon.SetPosition(4, 4); Addchild(SkillIcon); } //override //鼠标事件回调 function OnMouseProc(MousePos_X, MousePos_Y, WindowInteractiveFlag) { if (!Visible) return; base.OnMouseProc(MousePos_X, MousePos_Y, WindowInteractiveFlag); if (isInRect && !IMouse.DragObj && !WindowInteractiveFlag) { //设置透明度 HoverEffect.SetOpacity(0.4); // if (!ItemInfoShowFlag) { // //显示详细信息 // ShowInfo(MousePos_X - 50, MousePos_Y - ((ItemInfo.RealCanvasHeight + 10) / 2)); // } //设置悬停槽 HoverEffect.SetVisible(true); } else { HoverEffect.SetVisible(false); // //关闭所有详细信息显示 // if (ItemInfoShowFlag) { // CloseInfo(); // } } } } //技能树窗口 class UISpace_SkillTree.Tree extends Yosin_Window { //是否为独立窗口 IsIndependent = false; //是否可见 Visible = false; //是否为图层窗口 IsLayer = true; //技能树信息 TreeInfo = null; //技能List SkillList = null; //滚动条 ScrollObject = null; constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { SkillList = []; base.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); SetClipRect(0, 0, gWidth, gHeight); // OpenDeBug(); // 背景 local Background = CL_SpriteObject("sprite/interface2/ui/newskillshop/newskillshop.img", 0); Background.SetPosition(1, 0); Addchild(Background); //滚动条 ScrollObject = Yosin_ScrollBar(gWidth - 10, 1, 400, 20); ScrollObject.SetScrollBarState(false); ScrollObject.SetChangeCallBack(function(Value) { MsgTextWindow.SetScrollPos(Value); }.bindenv(this)); AddUIChild(ScrollObject); } //通过技能树Config构造 function Init(Config) { TreeInfo = Config; foreach(SkillIndex, Info in Config) { local SkillBuffer = GameItem.Skill(Parent.Job, SkillIndex); local SkillSlotBuffer = UISpace_SkillTree.Skill(35 + Info.IconPos.x, 10 + Info.IconPos.y, 36, 48, SkillBuffer); SkillList.push(SkillSlotBuffer); AddUIChild(SkillSlotBuffer); } } } //主类 class UISpace_SkillTree._SkillTree extends Yosin_Window { //背景画布 BackGroundCanvas = null; //技能树窗口 SkillTreeWindow = null; //技能树信息 TreeInfo = null; //技能点 SkillPoint = 11451; //职业 Job = 0; //转职职业 GrowType = 0; //是否可见 Visible = false; function _typeof() { return "Game_Window"; } constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { base.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); local title = Yosin_TopTitle(gWidth, gHeight, "技能栏(K)"); AddUIChild(title); RegisterBackGround(); RegisterButton(); // 标题按钮 local titlesBtn = Yosin_RowMoreTitleBtn(5, 30, Width - 10, ["技能类型I"], "sprite/interface/lenheartwindowcommon.img", 160); AddUIChild(titlesBtn); //注册按键回调事件 Input.RegisterGameKeyCode(CONTROLLER.OPTION_HOTKEY_SKILL_WINDOW, function(Flag) { //按下的时候 if (Flag == 1) { //如果窗口已经打开 if (this.Visible) { //关闭窗口 CloseWindow(); } else { //打开窗口 ResetFocus(); } } }.bindenv(this)); } function RegisterBackGround() { BackGroundCanvas = CL_CanvasObject(); // 重设大小并清空 BackGroundCanvas.ResizeAndClear(Width, Height); BackGroundCanvas.SetFillBrush(sq_RGBA(59, 56, 57, 250)); BackGroundCanvas.SetStrokeBrush(sq_RGBA(59, 56, 57, 250)); // 开始绘制 BackGroundCanvas.BeginDraw(); //背景框-左 local LeftBox = Yosin_NineBoxStretch(Width - 230, 438, "sprite/interface/lenheartwindowcommon.img", 97); LeftBox.SetPosition(5, 52); BackGroundCanvas.DrawActor(LeftBox); //技能点背景槽 local SkillPointBackgroundSlot = Yosin_NineBoxStretch(Width - 230, 35, "sprite/interface/lenheartwindowcommon.img", 97); SkillPointBackgroundSlot.SetPosition(5, 52); BackGroundCanvas.DrawActor(SkillPointBackgroundSlot); //技能点文字 local SkillPointText = FontAssetManager.GenerateNormal(format("技能点 %d", SkillPoint), true, { color = sq_RGBA(105, 212, 238, 250) }); BackGroundCanvas.DrawActor(SkillPointText, 15, 60); //背景框-右 local RightBox = Yosin_NineBoxStretch(223, 470, "sprite/interface/lenheartwindowcommon.img", 97); RightBox.SetPosition(Width - 228, 52); BackGroundCanvas.DrawActor(RightBox); //右侧文字使用指南背景 // local BoxHelpTextBg = CL_SpriteFrameObject("sprite/interface2/ui/newskillshop/newskillshop.img", 10); // BackGroundCanvas.DrawSpriteFrame(BoxHelpTextBg, Width - BoxHelpTextBg.GetSize().w - 5, 52); //右侧文字使用指南 local BoxHelpText = FontAssetManager.GenerateNormal("技能窗口使用指南", true, { color = sq_RGBA(192, 163, 54, 250) }); BackGroundCanvas.DrawActor(BoxHelpText, 580, 52); // 结束绘制 BackGroundCanvas.EndDraw(); Addchild(BackGroundCanvas); } function RegisterButton() { //初始化按钮 local InitButton = Yosin_SplicingButton(444, 58, 59, 24 "sprite/interface/lenheartwindowcommon.img", 172, true, false); //创建角色按钮文本 local CreateTextActor = FontAssetManager.GenerateNormal("初始化", false, { color = sq_RGBA(186, 147, 97, 255) }); InitButton.OnClick = function(Button) { }.bindenv(this); AddUIChild(InitButton); CreateTextActor.SetPosition(11, 3); CreateTextActor.SetZOrder(1); CreateTextActor.SetUpdateFunc(function(Text, Dt) { if (Text.Parent.State == 1 || Text.Parent.State == 2) { Text.SetFillColor(sq_RGBA(18, 71, 130, 255)); } else if (Text.Parent.State == 0) { Text.SetFillColor(sq_RGBA(186, 147, 97, 255)); } }) InitButton.Addchild(CreateTextActor); //自动加点按钮 local AutoAddPointButton = Yosin_SplicingButton(506, 58, 59, 24 "sprite/interface/lenheartwindowcommon.img", 172, true, false); //创建角色按钮文本 local CreateTextActor = FontAssetManager.GenerateNormal("自动加点", false, { color = sq_RGBA(186, 147, 97, 255) }); AutoAddPointButton.OnClick = function(Button) { }.bindenv(this); AddUIChild(AutoAddPointButton); CreateTextActor.SetPosition(6, 3); CreateTextActor.SetZOrder(1); CreateTextActor.SetUpdateFunc(function(Text, Dt) { if (Text.Parent.State == 1 || Text.Parent.State == 2) { Text.SetFillColor(sq_RGBA(18, 71, 130, 255)); } else if (Text.Parent.State == 0) { Text.SetFillColor(sq_RGBA(186, 147, 97, 255)); } }) AutoAddPointButton.Addchild(CreateTextActor); } //初始化技能树 function Init(Job, GrowType) { this.Job = Job; this.GrowType = GrowType; TreeInfo = AssetManager.GetSkillTreeByJob(Job, GrowType); print(TreeInfo); SkillTreeWindow = UISpace_SkillTree.Tree("技能树" + Job + "-" + GrowType, 7, 85, 560, 400, 0); AddUIChild(SkillTreeWindow); SkillTreeWindow.Init(TreeInfo); } //逻辑入口 function Proc(Dt) { SyncPos(X, Y); base.Proc(Dt); } //刷新个人信息 function RefreshPersonalInfo() { PageList[0].Refresh(); PageList[0].CharactersObject.InitCharacter(); } //在Esc按下时 function OnEsc() { CloseWindow(); } } // if (!getroottable().rawin("chongzaiflag")) { // getroottable()["chongzaiflag"] <- true; // } else { // local BufferList = []; // //遍历窗口队列 如果可见则调用Show // for (local i = 0; i< _SYS_WINDOW_LIST_.len(); i++) { // local Window = _SYS_WINDOW_LIST_[i]; // Window.Visible = false; // _UiObject_.Removechild(Window); // } // _SYS_WINDOW_LIST_ = []; // _SYS_WINDOW_LIST_.extend(BufferList); // //初始化鼠标 // _IMouse_(); // TestStage(); // }