| 
									
										
										
										
											2024-03-08 19:36:26 +08:00
										 |  |  | import { _decorator, CCInteger, CCString, Component, Node, Sprite, SpriteFrame, input, Input, __private, NodeEventType, EventTouch, EventMouse, UITransform, v2 } from 'cc'; | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  | import { BaseSpriteFrame } from './BaseSpriteFrame'; | 
					
						
							|  |  |  | const { ccclass, property } = _decorator; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-13 17:04:19 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export enum BaseButtonState{ | 
					
						
							|  |  |  |     // 普通
 | 
					
						
							|  |  |  |     Normal = 0, | 
					
						
							|  |  |  |     // 悬停
 | 
					
						
							|  |  |  |     Hover = 1, | 
					
						
							|  |  |  |     // 按下
 | 
					
						
							|  |  |  |     Press = 2, | 
					
						
							|  |  |  |     //失效
 | 
					
						
							|  |  |  |     Disable = 8 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  | @ccclass('BaseButton') | 
					
						
							|  |  |  | export class BaseButton extends Component { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @property({ type: CCString, displayName: 'img路径', tooltip: "img路径" }) | 
					
						
							|  |  |  |     ImgPath: string; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @property({ type: [CCInteger], displayName: '普通img编号', tooltip: "普通img编号" }) | 
					
						
							|  |  |  |     NormalImgIndex: number; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @property({ type: [CCInteger], displayName: '悬停img编号', tooltip: "悬停img编号" }) | 
					
						
							|  |  |  |     HoverImgIndex: number; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @property({ type: [CCInteger], displayName: '按下img编号', tooltip: "按下img编号" }) | 
					
						
							|  |  |  |     PressImgIndex: number; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @property({ type: [CCInteger], displayName: '失效img编号', tooltip: "失效img编号" }) | 
					
						
							|  |  |  |     DisableImgIndex: number; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //普通精灵帧
 | 
					
						
							|  |  |  |     NormalImgSpriteFrame: SpriteFrame; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //悬停精灵帧
 | 
					
						
							|  |  |  |     HoverImgSpriteFrame: SpriteFrame; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //按下精灵帧
 | 
					
						
							|  |  |  |     PressImgSpriteFrame: SpriteFrame; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //失效精灵帧
 | 
					
						
							|  |  |  |     DisableImgSpriteFrame: SpriteFrame; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //精灵对象
 | 
					
						
							|  |  |  |     SpriteObj: Sprite; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //初始化状态
 | 
					
						
							|  |  |  |     InitState = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //按钮状态
 | 
					
						
							| 
									
										
										
										
											2024-03-13 17:04:19 +08:00
										 |  |  |     ButtonState = BaseButtonState.Normal; // 0 普通 1悬停 2按下 8失效
 | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-22 22:56:08 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @description: BaseButton初始化设置 | 
					
						
							|  |  |  |      * @param {string} ImgPath: npk中的路径 | 
					
						
							|  |  |  |      * @param {number} NormalIndex: 普通 在npk.img 中的idnex 其他状态自动+1 | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     init(ImgPath:string,NormalIndex:number): void; | 
					
						
							|  |  |  |     init(ImgPath:string,NormalIndex:number,HoverIndex:number,PressIndex:number,DisableIndex:number,auto:boolean): void; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * @description: BaseButton初始化设置 | 
					
						
							|  |  |  |      * @param {string} ImgPath: npk中的路径 | 
					
						
							|  |  |  |      * @param {number} NormalIndex: 普通 在npk.img 中的idnex | 
					
						
							|  |  |  |      * @param {number} HoverIndex: 悬停 | 
					
						
							|  |  |  |      * @param {number} PressIndex 按下 | 
					
						
							|  |  |  |      * @param {number} DisableIndex 失效 | 
					
						
							|  |  |  |      * @param {number} Disable 是否启用失效状态 | 
					
						
							|  |  |  |      * @return {*} | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     init(ImgPath:string,NormalIndex:number,HoverIndex?:number,PressIndex?:number,DisableIndex?:number,Disable:boolean = true): void{ | 
					
						
							|  |  |  |         this.ImgPath = ImgPath; | 
					
						
							|  |  |  |         this.NormalImgIndex = NormalIndex; | 
					
						
							|  |  |  |         this.HoverImgIndex = HoverIndex ? HoverIndex : NormalIndex + 1; | 
					
						
							|  |  |  |         this.PressImgIndex = PressIndex ? PressIndex : NormalIndex + 2; | 
					
						
							|  |  |  |         if (Disable){ this.DisableImgIndex = DisableIndex ? DisableIndex : NormalIndex + 3; } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2024-03-23 20:28:14 +08:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  |     start() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //判断是否有精灵 如果没有 就给他搞一个
 | 
					
						
							|  |  |  |         if (this.node.getComponent(Sprite)) | 
					
						
							|  |  |  |             this.SpriteObj = this.node.getComponent(Sprite); | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             this.SpriteObj = this.node.addComponent(Sprite); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-08 19:36:26 +08:00
										 |  |  |         //设置节点锚点为左上角
 | 
					
						
							|  |  |  |         this.node.getComponent(UITransform).anchorPoint = v2(0, 1); | 
					
						
							|  |  |  |         //设置类型
 | 
					
						
							|  |  |  |         this.SpriteObj.sizeMode = Sprite.SizeMode.RAW; | 
					
						
							|  |  |  |         //设置
 | 
					
						
							|  |  |  |         this.SpriteObj.trim = false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  |         new BaseSpriteFrame(this.ImgPath, this.NormalImgIndex, _SpriteFrame => { this.NormalImgSpriteFrame = _SpriteFrame }); | 
					
						
							|  |  |  |         new BaseSpriteFrame(this.ImgPath, this.HoverImgIndex, _SpriteFrame => { this.HoverImgSpriteFrame = _SpriteFrame }); | 
					
						
							|  |  |  |         new BaseSpriteFrame(this.ImgPath, this.PressImgIndex, _SpriteFrame => { this.PressImgSpriteFrame = _SpriteFrame }); | 
					
						
							|  |  |  |         new BaseSpriteFrame(this.ImgPath, this.DisableImgIndex, _SpriteFrame => { this.DisableImgSpriteFrame = _SpriteFrame }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     UploadSpriteFrame(_SpriteFrame) { | 
					
						
							|  |  |  |         if (this.SpriteObj.spriteFrame != _SpriteFrame) { | 
					
						
							|  |  |  |             this.SpriteObj.spriteFrame = _SpriteFrame; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     update(deltaTime: number) { | 
					
						
							|  |  |  |         if (!this.InitState) { | 
					
						
							|  |  |  |             if (this.NormalImgSpriteFrame && this.HoverImgSpriteFrame && this.PressImgSpriteFrame) { | 
					
						
							|  |  |  |                 this.InitState = true; | 
					
						
							|  |  |  |                 this.UploadSpriteFrame(this.NormalImgSpriteFrame); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 // this.node.on(Input.EventType.TOUCH_START, this.OnPress, this);
 | 
					
						
							|  |  |  |                 // this.node.on(Input.EventType.TOUCH_END, this.OnEnd, this);
 | 
					
						
							|  |  |  |                 this.node.on(Node.EventType.MOUSE_ENTER, this.OnHever, this); | 
					
						
							|  |  |  |                 this.node.on(Node.EventType.MOUSE_LEAVE, this.OffHever, this); | 
					
						
							|  |  |  |                 this.node.on(Node.EventType.MOUSE_DOWN, this.OnPress, this); | 
					
						
							|  |  |  |                 this.node.on(Node.EventType.MOUSE_UP, this.OnEnd, this); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             switch (this.ButtonState) { | 
					
						
							| 
									
										
										
										
											2024-03-13 17:04:19 +08:00
										 |  |  |                 case BaseButtonState.Normal: | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  |                     this.UploadSpriteFrame(this.NormalImgSpriteFrame); | 
					
						
							|  |  |  |                     break; | 
					
						
							| 
									
										
										
										
											2024-03-13 17:04:19 +08:00
										 |  |  |                 case BaseButtonState.Hover: | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  |                     this.UploadSpriteFrame(this.HoverImgSpriteFrame); | 
					
						
							|  |  |  |                     break; | 
					
						
							| 
									
										
										
										
											2024-03-13 17:04:19 +08:00
										 |  |  |                 case BaseButtonState.Press: | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  |                     this.UploadSpriteFrame(this.PressImgSpriteFrame); | 
					
						
							|  |  |  |                     break; | 
					
						
							| 
									
										
										
										
											2024-03-13 17:04:19 +08:00
										 |  |  |                 case BaseButtonState.Disable: | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  |                     this.UploadSpriteFrame(this.DisableImgSpriteFrame); | 
					
						
							|  |  |  |                     break; | 
					
						
							|  |  |  |                 default: | 
					
						
							|  |  |  |                     break; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     OffHever(event) { | 
					
						
							| 
									
										
										
										
											2024-03-13 17:04:19 +08:00
										 |  |  |         if (this.ButtonState == BaseButtonState.Disable) return; | 
					
						
							|  |  |  |         this.ButtonState = BaseButtonState.Normal; | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  |     } | 
					
						
							|  |  |  |     OnHever(event) { | 
					
						
							| 
									
										
										
										
											2024-03-13 17:04:19 +08:00
										 |  |  |         if (this.ButtonState == BaseButtonState.Disable) return; | 
					
						
							| 
									
										
										
										
											2024-03-22 15:48:09 +08:00
										 |  |  |         this.ButtonState = BaseButtonState.Hover; | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2024-03-11 17:37:03 +08:00
										 |  |  |     OnEnd(event: EventMouse) { | 
					
						
							| 
									
										
										
										
											2024-03-13 17:04:19 +08:00
										 |  |  |         if (this.ButtonState == BaseButtonState.Disable) return; | 
					
						
							| 
									
										
										
										
											2024-03-11 17:37:03 +08:00
										 |  |  |         if (event.getButton() != EventMouse.BUTTON_LEFT) return; | 
					
						
							| 
									
										
										
										
											2024-03-13 17:04:19 +08:00
										 |  |  |         this.ButtonState = BaseButtonState.Normal; | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     OnPress(event: EventMouse) { | 
					
						
							| 
									
										
										
										
											2024-03-13 17:04:19 +08:00
										 |  |  |         if (this.ButtonState == BaseButtonState.Disable) return; | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  |         //必须是鼠标左键
 | 
					
						
							| 
									
										
										
										
											2024-03-11 17:37:03 +08:00
										 |  |  |         if (event.getButton() != EventMouse.BUTTON_LEFT) return; | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-13 17:04:19 +08:00
										 |  |  |         this.ButtonState = BaseButtonState.Press; | 
					
						
							| 
									
										
										
										
											2024-03-08 15:51:26 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 |