lawless/client/assets/scripts/ui/common/UIBase.ts
徐勤民 521603a899
一些检测仍在等待运行
Docs Build / build-and-deploy (push) Waiting to run
refactor(client): 删除游戏核心管理器和场景脚本
- 移除 ConfigManager 配置管理器类
- 移除 GameManager 全局单例管理器类
- 移除 NetworkManager 网络连接管理器类
- 移除 CharacterData 和 ItemData 数据模型类
- 移除 BagScene、BattleScene、LobbyScene 等场景脚本
- 移除 EncounterBubble 和 EventFeedPanel UI组件脚本
- 更新代理邀请文档中的服务器连接方式
- 更新同步状态表格中的代理任务分配信息
- 添加 MiMo 任务完成总结和审查修复记录
2026-07-03 21:34:51 +08:00

148 行
4.6 KiB
TypeScript

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

import { _decorator, Component, Node, Label, Sprite, Color, UITransform, Size } from 'cc';
import { UITheme } from './UITheme';
const { ccclass, property } = _decorator;
/**
* UI基础组件 - 提供通用的UI操作方法
*/
@ccclass('UIBase')
export class UIBase extends Component {
/**
* 设置标签文字和样式
*/
protected setLabel(node: Node, text: string, options?: {
fontSize?: number;
color?: string;
horizontalAlign?: number;
}) {
const label = node.getComponent(Label);
if (label) {
label.string = text;
if (options?.fontSize) label.fontSize = options.fontSize;
if (options?.color) {
const c = options.color;
label.color = new Color(
parseInt(c.substr(1, 2), 16),
parseInt(c.substr(3, 2), 16),
parseInt(c.substr(5, 2), 16),
255
);
}
}
}
/**
* 创建面板背景
*/
protected createPanelBg(parent: Node, options?: {
color?: string;
width?: number;
height?: number;
opacity?: number;
}) {
const node = new Node('PanelBg');
const sprite = node.addComponent(Sprite);
const transform = node.getComponent(UITransform) || node.addComponent(UITransform);
if (options?.width) transform.setContentSize(new Size(options.width, options.height || options.width));
if (options?.opacity !== undefined) sprite.color = new Color(255, 255, 255, options.opacity);
node.setParent(parent);
return node;
}
/**
* 创建金色边框装饰
*/
protected createGoldBorder(parent: Node, width: number, height: number) {
const node = new Node('GoldBorder');
const transform = node.addComponent(UITransform);
transform.setContentSize(new Size(width, height));
node.setParent(parent);
return node;
}
/**
* 创建按钮
*/
protected createButton(parent: Node, text: string, options?: {
width?: number;
height?: number;
bgColor?: string;
textColor?: string;
fontSize?: number;
}) {
const node = new Node('Button');
const transform = node.addComponent(UITransform);
const w = options?.width || 200;
const h = options?.height || 60;
transform.setContentSize(new Size(w, h));
node.setParent(parent);
// 按钮背景
const bgNode = new Node('Bg');
bgNode.addComponent(Sprite);
bgNode.getComponent(UITransform)?.setContentSize(new Size(w, h));
bgNode.setParent(node);
// 按钮文字
const labelNode = new Node('Label');
const label = labelNode.addComponent(Label);
label.string = text;
label.fontSize = options?.fontSize || UITheme.FONT_SIZE.MD;
label.color = new Color(
parseInt((options?.textColor || UITheme.COLORS.TEXT_WHITE).substr(1, 2), 16),
parseInt((options?.textColor || UITheme.COLORS.TEXT_WHITE).substr(3, 2), 16),
parseInt((options?.textColor || UITheme.COLORS.TEXT_WHITE).substr(5, 2), 16),
255
);
labelNode.setParent(node);
return node;
}
/**
* 创建属性条HP/MP/EXP
*/
protected createBar(parent: Node, options: {
width: number;
height: number;
fillColor: string;
bgColor: string;
value: number;
maxValue: number;
}) {
const node = new Node('Bar');
const transform = node.addComponent(UITransform);
transform.setContentSize(new Size(options.width, options.height));
node.setParent(parent);
// 背景
const bgNode = new Node('Bg');
bgNode.addComponent(Sprite);
bgNode.getComponent(UITransform)?.setContentSize(new Size(options.width, options.height));
bgNode.setParent(node);
// 填充
const fillNode = new Node('Fill');
fillNode.addComponent(Sprite);
const fillWidth = options.width * (options.value / options.maxValue);
fillNode.getComponent(UITransform)?.setContentSize(new Size(fillWidth, options.height));
fillNode.setParent(node);
return node;
}
/**
* 颜色字符串转Color
*/
protected hexToColor(hex: string, alpha: number = 255): Color {
const r = parseInt(hex.substr(1, 2), 16);
const g = parseInt(hex.substr(3, 2), 16);
const b = parseInt(hex.substr(5, 2), 16);
return new Color(r, g, b, alpha);
}
}