chore:代码重构
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
// @structural-rewrite-v1
|
||||
import { ResolutionPolicy } from 'cc';
|
||||
export interface DesignResolution {
|
||||
width: number;
|
||||
height: number;
|
||||
policy: number;
|
||||
}
|
||||
type ResolutionRule = {
|
||||
minimumRatio: number;
|
||||
create: (width: number, height: number) => DesignResolution;
|
||||
};
|
||||
const resolutionRules: ReadonlyArray<ResolutionRule> = [
|
||||
{
|
||||
"minimumRatio": 18 / 9,
|
||||
"create": (width, height) => ({
|
||||
"width": 1080,
|
||||
"height": height * (1080 / width),
|
||||
"policy": ResolutionPolicy["FIXED_WIDTH"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown,
|
||||
}),
|
||||
},
|
||||
{
|
||||
"minimumRatio": 16 / 9,
|
||||
"create": (width, height) => ({
|
||||
"width": width * (1920 / height),
|
||||
"height": 1920,
|
||||
"policy": ResolutionPolicy["FIXED_HEIGHT"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown,
|
||||
}),
|
||||
},
|
||||
];
|
||||
export function resolveDesignResolution(width: number, height: number): DesignResolution {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const ratio = height / width;
|
||||
const rule = resolutionRules["find"]((candidate) => ratio > (candidate["minimumRatio"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
return rule?.["create"](width, height) ?? {
|
||||
"width": 1080,
|
||||
"height": height * (1080 / width),
|
||||
"policy": ResolutionPolicy["EXACT_FIT"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown,
|
||||
};
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "d13737ee-baaf-457f-acca-428fa612c9f4",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -1,74 +1,182 @@
|
||||
import { _decorator, Component, Node, director, resources, instantiate, Prefab, js } from 'cc';
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Component, instantiate, js, Label, Node } from 'cc';
|
||||
import { FramePoller } from '../runtime/FramePoller';
|
||||
import { RuntimeAssetLoader } from '../runtime/RuntimeAssetLoader';
|
||||
const { ccclass } = _decorator;
|
||||
@ccclass('PanelBase')
|
||||
export class PanelBase extends Component {
|
||||
protected isOpen: boolean = false;
|
||||
|
||||
protected isOpen = false;
|
||||
public async open(): Promise<void> {
|
||||
if (this.isOpen) return;
|
||||
this.node.active = true
|
||||
this.isOpen = true;
|
||||
this.onOpen();
|
||||
}
|
||||
|
||||
static async LoadPanel(prefabPath: string, parentNode: Node) {
|
||||
|
||||
let panelNode: Node = null
|
||||
resources.load(prefabPath, Prefab, (err, prefabAsset) => {
|
||||
if (prefabAsset) {
|
||||
const node = instantiate(prefabAsset);
|
||||
node.parent = parentNode;
|
||||
node.getComponent(PanelBase).open()
|
||||
panelNode = node
|
||||
} else {
|
||||
console.error(`Failed to load UI prefab: ${prefabPath}`);
|
||||
}
|
||||
});
|
||||
|
||||
await this.waitUntil(() => panelNode != null);
|
||||
return panelNode
|
||||
}
|
||||
|
||||
|
||||
static waitUntil(condition: () => boolean): Promise<void> {
|
||||
return new Promise((resolve) => {
|
||||
const checkCondition = () => {
|
||||
if (condition()) {
|
||||
resolve(); // 条件成立,结束等待
|
||||
} else {
|
||||
// 条件不成立,继续轮询
|
||||
requestAnimationFrame(checkCondition);
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if (this["isOpen"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)
|
||||
return;
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["active"] = true);
|
||||
void (this["isOpen"] = true);
|
||||
void (this["onOpen"]());
|
||||
}
|
||||
};
|
||||
checkCondition(); // 开始检查条件
|
||||
});
|
||||
}
|
||||
|
||||
public close(): void {
|
||||
console.log("close panel", this.node.name)
|
||||
if (!this.isOpen) return;
|
||||
if (!this.isValid) return;
|
||||
|
||||
if (this.node && this.node.parent) {
|
||||
this.node.removeFromParent();
|
||||
this.node.destroy();
|
||||
this.isOpen = false;
|
||||
this.onClose();
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
public close(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
if (!(this["isOpen"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) || !(this["isValid"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
|
||||
return;
|
||||
void (this["isOpen"] = false);
|
||||
void (this["onClose"]());
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["removeFromParent"]());
|
||||
void ((this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["destroy"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
static async LoadPanel(prefabPath: string, parentNode: Node): Promise<Node> {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const prefab = await this["loadPrefab"](prefabPath);
|
||||
const panelNode = instantiate(prefab);
|
||||
void (panelNode["parent"] = parentNode);
|
||||
const panel = panelNode["getComponent"](PanelBase);
|
||||
if (!panel) {
|
||||
void (panelNode["destroy"]());
|
||||
throw new Error(`UI prefab does not contain PanelBase: ${prefabPath}`);
|
||||
}
|
||||
void (await panel["open"]());
|
||||
return panelNode;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
static waitUntil(condition: () => boolean): Promise<void> {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return FramePoller["until"](condition);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
protected getPrefabPath(): string {
|
||||
let panelName = js.getClassName(this)
|
||||
return `ui/${panelName}`; // 生成预制件路径
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return `ui/${js["getClassName"](this)}`;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
protected formatTime(totalSeconds: number): string {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const minutes = Math["floor"](totalSeconds / 60);
|
||||
const seconds = totalSeconds % 60;
|
||||
return `${minutes < 10 ? `0${minutes}` : minutes}:${seconds < 10 ? `0${seconds}` : seconds}`;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
protected setNodesActive(states: ReadonlyArray<readonly [
|
||||
Node | number,
|
||||
boolean
|
||||
]>, nodes: readonly Node[] = []): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (states["forEach"](([target, active]) => (typeof target === 'number' ? nodes[target] : target)["active"] = active));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
protected setLabelStrings(states: ReadonlyArray<readonly [
|
||||
Label,
|
||||
string | number
|
||||
]>): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (states["forEach"](([label, value]) => label["string"] = String(value)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
protected onOpen(): void {
|
||||
// 子类可以重写此方法以执行打开后的操作
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
protected onClose(): void {
|
||||
// 子类可以重写此方法以执行关闭后的操作
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
private static loadPrefab(path: string) {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return RuntimeAssetLoader["loadResourcePrefab"](path);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
// @structural-rewrite-v1
|
||||
import { Button, Component } from 'cc';
|
||||
import { AssetController } from '../../AssetController';
|
||||
import { AudioMgr } from '../audio/AudioMgr';
|
||||
import { SdkMgr } from '../sdk/SdkMgr';
|
||||
export type PanelButtonAction = readonly [
|
||||
button: Button,
|
||||
execute: () => void
|
||||
];
|
||||
export function connectPanelButtons(owner: Component, actions: readonly PanelButtonAction[]): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (actions["forEach"](([button, execute]) => (button["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["on"]((Button["EventType"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["CLICK"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, execute, owner)));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
export function playPanelClick(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["playOneShot"]((AssetController["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["click"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
export function runPanelAction(action: () => void): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (playPanelClick());
|
||||
void (action());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
export function runRewardedPanelAction(onReward: () => void): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (playPanelClick());
|
||||
void ((SdkMgr["instance"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["requestReward"](onReward));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "05c2cc75-4a76-4e21-a784-5e816f684572",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
// @structural-rewrite-v1
|
||||
import { instantiate, Node, Prefab, randomRange, Tween, tween, Vec3 } from 'cc';
|
||||
/** Reusable visual and numerical presentation for coin rewards. */
|
||||
export class RewardFlight {
|
||||
static launch(prefab: Prefab, parent: Node, origin: Vec3, destination: Node, count = 10): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: for (let index = 0; index < count; index++) {
|
||||
const item = instantiate(prefab);
|
||||
void (item["parent"] = parent);
|
||||
void (item["setPosition"](origin));
|
||||
void (tween(item)["by"](0.3, { "position": new Vec3(randomRange(-150, 150), randomRange(-150, 150), 0) })["delay"](index * 0.1)["to"](0.6, { "worldPosition": destination["getWorldPosition"]() })["call"](() => item["destroy"]())["start"]());
|
||||
}
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
static count(from: number, to: number, onUpdate: (value: number) => void, onComplete?: () => void, delay = 0): Tween<{
|
||||
value: number;
|
||||
}> {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: return new Tween<{
|
||||
value: number;
|
||||
}>({ "value": from })["delay"](delay)["to"](1, { "value": to }, {
|
||||
"onUpdate": (target) => onUpdate(Math["floor"]((target as {
|
||||
value: number;
|
||||
})["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)),
|
||||
})["call"](() => onComplete?.())["start"]();
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "2f600369-a140-4fee-b53c-491287bc13d1",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -1,49 +1,66 @@
|
||||
import { _decorator, Component, Node, ResolutionPolicy, screen, Screen, view } from 'cc';
|
||||
import { WINDOWS } from 'cc/env';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Component, screen, view } from 'cc';
|
||||
import { resolveDesignResolution } from './DesignResolutionPolicy';
|
||||
const { ccclass } = _decorator;
|
||||
@ccclass('UIAdapt')
|
||||
export class UIAdapt extends Component {
|
||||
start() {
|
||||
screen.on('window-resize', this.adaptScreenSize, this);
|
||||
this.adaptScreenSize()
|
||||
let self = this
|
||||
this.scheduleOnce(() => {
|
||||
self.adaptScreenSize()
|
||||
}, 0.1)
|
||||
protected start(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["applyAndListen"]());
|
||||
void (this["scheduleOnce"](() => this["adaptScreenSize"](), 0.1));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
adaptScreenSize() {
|
||||
let screenWidth = view.getViewportRect().width
|
||||
let screenHeight = view.getViewportRect().height
|
||||
// let screenWidth = view.getVisibleSize().width;
|
||||
// let screenHeight = view.getVisibleSize().height;
|
||||
let screenRatio = screenHeight / screenWidth;
|
||||
|
||||
console.log("修改屏幕分辨率", screenRatio, view.getViewportRect(), view)
|
||||
|
||||
if (screenRatio > 18 / 9) {
|
||||
// 适配屏幕高度
|
||||
console.log("修改屏幕分辨率", "适配高度")
|
||||
|
||||
|
||||
let designWidth = 1080;
|
||||
let designHeight = screenHeight * (designWidth / screenWidth);
|
||||
|
||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_WIDTH);
|
||||
} else if (screenRatio > 16 / 9) {
|
||||
// 适配屏幕宽度
|
||||
console.log("修改屏幕分辨率", "适配屏幕宽度")
|
||||
let designHeight = 1920;
|
||||
let designWidth = screenWidth * (designHeight / screenHeight);
|
||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.FIXED_HEIGHT);
|
||||
} else {
|
||||
console.log("修改屏幕分辨率", "适配屏幕宽高")
|
||||
let designWidth = 1080;
|
||||
let designHeight = screenHeight * (designWidth / screenWidth);
|
||||
view.setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy.EXACT_FIT);
|
||||
protected onDestroy(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (screen["off"]('window-resize', this["adaptScreenSize"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
adaptScreenSize(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const viewport = view["getViewportRect"]();
|
||||
const resolution = resolveDesignResolution(viewport["width"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, viewport["height"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
||||
void (view["setDesignResolutionSize"](resolution["width"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, resolution["height"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, resolution["policy"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
private applyAndListen(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (screen["on"]('window-resize', this["adaptScreenSize"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this));
|
||||
void (this["adaptScreenSize"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,57 +1,114 @@
|
||||
import { _decorator, Node, director, resources, instantiate, Canvas, Component, js } from 'cc';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Component, js, Node } from 'cc';
|
||||
import { PanelBase } from './PanelBase';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('UIManager')
|
||||
export class UIManager extends Component {
|
||||
static instance: UIManager
|
||||
|
||||
|
||||
|
||||
private panels: Map<string, PanelBase> = new Map();
|
||||
|
||||
@property({ type: Node })
|
||||
static instance: UIManager;
|
||||
@property({ "type": Node })
|
||||
uiRoot: Node = null;
|
||||
|
||||
onLoad() {
|
||||
UIManager.instance = this;
|
||||
private readonly panels = new Map<string, PanelBase>();
|
||||
private readonly loadingPanels = new Map<string, Promise<PanelBase>>();
|
||||
protected onLoad(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (UIManager["instance"] = this);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 打开UI面板
|
||||
public async openPanel<T extends PanelBase>(panelClass: new () => T): Promise<T> {
|
||||
const panelName = js.getClassName(panelClass);
|
||||
|
||||
if (!this.panels.has(panelName)) {
|
||||
let panelNode = PanelBase.LoadPanel(`ui/${js.getClassName(panelClass)}`, this.uiRoot)
|
||||
let newPanel = (await panelNode).getComponent(PanelBase)
|
||||
this.panels.set(panelName, newPanel);
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const panelName = js["getClassName"](panelClass);
|
||||
return ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](panelName)
|
||||
?? await ((this["loadingPanels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](panelName) ?? this["createPanel"](panelName))) as T;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
const existingPanel = this.panels.get(panelName);
|
||||
if (existingPanel) {
|
||||
existingPanel.open();
|
||||
return existingPanel as T;
|
||||
finally {
|
||||
}
|
||||
|
||||
}
|
||||
// 关闭UI面板
|
||||
public closePanel<T extends PanelBase>(panelClass: new () => T): void {
|
||||
const panelName = js.getClassName(panelClass);
|
||||
if (this.panels.has(panelName)) {
|
||||
const panel = this.panels.get(panelName);
|
||||
if (panel) {
|
||||
panel.close();
|
||||
this.panels.delete(panelName);
|
||||
}
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const panelName = js["getClassName"](panelClass);
|
||||
const panel = (this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](panelName);
|
||||
if (!panel)
|
||||
return;
|
||||
void ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["delete"](panelName));
|
||||
void (panel["close"]());
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭所有面板
|
||||
public closeAllPanels(): void {
|
||||
this.panels.forEach(panel => {
|
||||
console.log("关闭页面", panel.node.name)
|
||||
panel.close();
|
||||
});
|
||||
this.panels.clear();
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const openedPanels = Array["from"]((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["values"]());
|
||||
void ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["clear"]());
|
||||
void (openedPanels["forEach"]((panel) => panel["close"]()));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
private async createPanel(panelName: string): Promise<PanelBase> {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const loadingPanel = PanelBase["LoadPanel"](`ui/${panelName}`, this["uiRoot"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["then"]((node) => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
const panel = node["getComponent"](PanelBase);
|
||||
if (!panel)
|
||||
throw new Error(`PanelBase missing from UI prefab: ${panelName}`);
|
||||
void ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["set"](panelName, panel));
|
||||
return panel;
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
});
|
||||
void ((this["loadingPanels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["set"](panelName, loadingPanel));
|
||||
try {
|
||||
return await loadingPanel;
|
||||
}
|
||||
finally {
|
||||
void ((this["loadingPanels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["delete"](panelName));
|
||||
}
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,62 +1,124 @@
|
||||
import { _decorator, Button, Component, Node, Sprite, SpriteFrame, Toggle } from 'cc';
|
||||
import { AudioMgr } from '../audio/AudioMgr';
|
||||
import { AssetController } from '../../AssetController';
|
||||
// @structural-rewrite-v1
|
||||
import { _decorator, Button, Component, Sprite, SpriteFrame } from 'cc';
|
||||
import { runPanelAction } from './PanelInteraction';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('UISwitcher')
|
||||
export class UISwitcher extends Component {
|
||||
toggle: Button
|
||||
value: boolean
|
||||
sprite: Sprite;
|
||||
|
||||
@property({ type: SpriteFrame })
|
||||
@property({ "type": SpriteFrame })
|
||||
onSelect: SpriteFrame = null;
|
||||
|
||||
@property({ type: SpriteFrame })
|
||||
@property({ "type": SpriteFrame })
|
||||
onNoSelect: SpriteFrame = null;
|
||||
|
||||
|
||||
toggle: Button;
|
||||
value: boolean;
|
||||
sprite: Sprite;
|
||||
onSwitchCallBack: (value: boolean) => void;
|
||||
protected onLoad(): void {
|
||||
this.toggle = this.getComponent(Button)
|
||||
this.sprite = this.getComponent(Sprite)
|
||||
}
|
||||
|
||||
start() {
|
||||
|
||||
this.toggle.node.on(Button.EventType.CLICK, this.onClickToggleBtn, this);
|
||||
}
|
||||
|
||||
onSwitchCallBack
|
||||
|
||||
addCallBack(callBack) {
|
||||
this.onSwitchCallBack = callBack
|
||||
}
|
||||
|
||||
SetValue(v: boolean) {
|
||||
this.value = v
|
||||
this.switchSprite(this.value)
|
||||
}
|
||||
|
||||
switchSprite(v: boolean) {
|
||||
if (v) {
|
||||
this.sprite.spriteFrame = this.onSelect
|
||||
} else {
|
||||
this.sprite.spriteFrame = this.onNoSelect
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["toggle"] = this["getComponent"](Button));
|
||||
void (this["sprite"] = this["getComponent"](Sprite));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
onClickToggleBtn() {
|
||||
AudioMgr.inst.playOneShot(AssetController.instance.click)
|
||||
// AudioMgr.inst.playOneShot(AssetController.instance.buttonClip)
|
||||
this.value = !this.value
|
||||
|
||||
this.switchSprite(this.value)
|
||||
|
||||
if (this.onSwitchCallBack != null) {
|
||||
this.onSwitchCallBack(this.value)
|
||||
protected start(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (((this["toggle"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["on"]((Button["EventType"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["CLICK"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickToggleBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
protected onDestroy(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (((this["toggle"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)?.["node"])["off"]((Button["EventType"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["CLICK"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onClickToggleBtn"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
addCallBack(callBack: (value: boolean) => void): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (this["onSwitchCallBack"] = callBack);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
SetValue(value: boolean): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["value"] = value);
|
||||
void (this["switchSprite"](value));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
switchSprite(value: boolean): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void ((this["sprite"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["spriteFrame"] = [this["onNoSelect"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["onSelect"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown][Number(value)]);
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
onClickToggleBtn(): void {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default: void (runPanelAction(() => {
|
||||
try {
|
||||
do {
|
||||
switch (0 as number) {
|
||||
case 1: break;
|
||||
case 2: break;
|
||||
default:
|
||||
void (this["SetValue"](!(this["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
|
||||
void (this["onSwitchCallBack"]?.(this["value"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}));
|
||||
}
|
||||
} while (false);
|
||||
}
|
||||
finally {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user