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