138 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名:UI_Widget.nut
 | |
| 路径:Core/UI_Class/UI_Widget.nut
 | |
| 创建日期:2024-11-08	14:24
 | |
| 文件用途: 控件基类
 | |
| */
 | |
| //基础UI
 | |
| class Yosin_CommonUi extends Yosin_BaseWindow {
 | |
| 
 | |
|     ObjectId = null;
 | |
| 
 | |
|     Localtion_X = 0;
 | |
|     Localtion_Y = 0;
 | |
|     Width = null;
 | |
|     Height = null;
 | |
| 
 | |
|     isLBDown = false;
 | |
|     //是否悬停
 | |
|     isInRect = false;
 | |
| 
 | |
|     OnClick = null;
 | |
|     OnClickSound = null;
 | |
| 
 | |
|     Data = null;
 | |
| 
 | |
|     constructor(x, y, width, height) {
 | |
|         this.Localtion_X = x;
 | |
|         this.Localtion_Y = y;
 | |
|         this.Width = width;
 | |
|         this.Height = height;
 | |
| 
 | |
|         ObjectId = clock();
 | |
|         base.constructor();
 | |
|         //构造时第一次同步坐标
 | |
|         SyncPos(x, y);
 | |
|     }
 | |
| 
 | |
|     //override
 | |
|     //鼠标事件回调
 | |
|     function OnMouseProc(MousePos_X, MousePos_Y) {
 | |
|         local Pos = GetWorldPosition();
 | |
|         if (Math.IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Pos.x, Pos.y, Width, Height)) isInRect = true;
 | |
|         else isInRect = false;
 | |
|     }
 | |
|     //鼠标左键按下回调
 | |
|     function OnMouseLbDown(MousePos_X, MousePos_Y) {
 | |
|         local Pos = GetWorldPosition();
 | |
|         if (Math.IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Pos.x, Pos.y, Width, Height)) {
 | |
|             isLBDown = true;
 | |
|             //如果有配置按键音效
 | |
|             if (OnClickSound) {
 | |
|                 Sq_PlaySoundEffect(OnClickSound);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     //鼠标左键弹起回调
 | |
|     function OnMouseLbUp(MousePos_X, MousePos_Y) {
 | |
|         isLBDown = false;
 | |
|     }
 | |
| 
 | |
|     //鼠标左键单击回调
 | |
|     function OnMouseLbClick(MousePos_X, MousePos_Y) {
 | |
|         local Pos = GetWorldPosition();
 | |
|         if (Math.IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Pos.x, Pos.y, Width, Height)) {
 | |
|             if (OnClick) OnClick(this);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| //基础按钮
 | |
| class Yosin_BaseButton extends Yosin_CommonUi {
 | |
|     //按钮状态
 | |
|     State = 0;
 | |
|     DWidth = null;
 | |
|     Path = null;
 | |
|     Idx = null;
 | |
| 
 | |
|     Sprite = null;
 | |
|     SpriteState = -1;
 | |
|     FrameList = null;
 | |
| 
 | |
| 
 | |
|     constructor(X, Y, W, H, Path, Idx) {
 | |
|         this.DWidth = W;
 | |
|         this.Path = Path;
 | |
|         this.Idx = Idx;
 | |
|         base.constructor(X, Y, W, H);
 | |
| 
 | |
|         FrameList = [];
 | |
|         Sprite = CL_SpriteObject();
 | |
|         // Sprite.ShowBorder(true);
 | |
|         Addchild(Sprite);
 | |
| 
 | |
|         for (local i = 0; i< 4; i++) {
 | |
|             local Sf = CL_SpriteFrameObject(this.Path, this.Idx + i);
 | |
|             FrameList.push(Sf);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function ChangeFrame() {
 | |
|         //状态更改 刷新精灵帧
 | |
|         if (State != SpriteState) {
 | |
|             //如果按下 调整Y坐标向下一个单位
 | |
|             if (State == 2) {
 | |
|                 Y += 1;
 | |
|                 SyncPos(X, Y);
 | |
|             } else if (SpriteState == 2) {
 | |
|                 Y -= 1;
 | |
|                 SyncPos(X, Y);
 | |
|             }
 | |
|             SpriteState = State;
 | |
|             Sprite.SetFrame(FrameList[SpriteState]);
 | |
|             Sprite.SetPosition(0, 0);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function Proc(Dt) {
 | |
|         //不可用
 | |
|         if (State == 3) {
 | |
| 
 | |
|         } else {
 | |
|             //按下
 | |
|             if (isLBDown) {
 | |
|                 State = 2;
 | |
|             }
 | |
|             //悬停
 | |
|             else if (isInRect) {
 | |
|                 State = 1;
 | |
|             }
 | |
|             //普通
 | |
|             else {
 | |
|                 State = 0;
 | |
|             }
 | |
|         }
 | |
|         ChangeFrame();
 | |
|     }
 | |
| } |