drgame-cc 1.0.15 → 1.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/drscript/BtnExtra.ts +17 -0
- package/drscript/Define.ts +22 -0
- package/drscript/ExitWin.ts +39 -0
- package/drscript/Info.ts +75 -0
- package/drscript/Loader.ts +89 -0
- package/drscript/PlatformAdapter.ts +165 -0
- package/drscript/README - /345/211/257/346/234/254.md" +814 -0
- package/drscript/README.md +814 -0
- package/drscript/ad/AdManager.ts +174 -0
- package/drscript/ad/AdManager.ts.meta +10 -0
- package/drscript/ad/AdSlot.ts +44 -0
- package/drscript/ad/AdSlot.ts.meta +10 -0
- package/drscript/ad/AggregateAdProvider.ts +148 -0
- package/drscript/ad/AggregateAdProvider.ts.meta +10 -0
- package/drscript/ad/IAdProvider.ts +39 -0
- package/drscript/ad/IAdProvider.ts.meta +10 -0
- package/drscript/ad/MockAdProvider.ts +36 -0
- package/drscript/ad/MockAdProvider.ts.meta +10 -0
- package/drscript/ad/SelfAdProvider.ts +41 -0
- package/drscript/ad/SelfAdProvider.ts.meta +10 -0
- package/drscript/ad-sdk/README.md +344 -0
- package/drscript/ad-sdk/README.md.meta +6 -0
- package/drscript/ad-sdk/ad-sdk.d.ts +59 -0
- package/drscript/ad-sdk/ad-sdk.d.ts.meta +6 -0
- package/drscript/ad-sdk/ad-sdk.js +322 -0
- package/drscript/ad-sdk/ad-sdk.js.meta +10 -0
- package/drscript/ad-sdk/adapters/xiaomi-adapter.d.ts +29 -0
- package/drscript/ad-sdk/adapters/xiaomi-adapter.d.ts.meta +6 -0
- package/drscript/ad-sdk/adapters/xiaomi-adapter.js +449 -0
- package/drscript/ad-sdk/adapters/xiaomi-adapter.js.meta +10 -0
- package/drscript/ad-sdk/adapters.meta +13 -0
- package/drscript/ad-sdk/event-emitter.d.ts +12 -0
- package/drscript/ad-sdk/event-emitter.d.ts.meta +6 -0
- package/drscript/ad-sdk/event-emitter.js +65 -0
- package/drscript/ad-sdk/event-emitter.js.meta +10 -0
- package/drscript/ad-sdk/leaderboard/leaderboard.d.ts +23 -0
- package/drscript/ad-sdk/leaderboard/leaderboard.d.ts.meta +6 -0
- package/drscript/ad-sdk/leaderboard/leaderboard.js +193 -0
- package/drscript/ad-sdk/leaderboard/leaderboard.js.meta +10 -0
- package/drscript/ad-sdk/leaderboard.meta +13 -0
- package/drscript/ad-sdk/package.json +46 -0
- package/drscript/ad-sdk/package.json.meta +6 -0
- package/drscript/ad-sdk/reporters/reporter.d.ts +40 -0
- package/drscript/ad-sdk/reporters/reporter.d.ts.meta +6 -0
- package/drscript/ad-sdk/reporters/reporter.js +198 -0
- package/drscript/ad-sdk/reporters/reporter.js.meta +10 -0
- package/drscript/ad-sdk/reporters/superset-lewo.js +413 -0
- package/drscript/ad-sdk/reporters/superset-lewo.js.meta +10 -0
- package/drscript/ad-sdk/reporters.meta +13 -0
- package/drscript/ad-sdk/types/enums.d.ts +64 -0
- package/drscript/ad-sdk/types/enums.d.ts.meta +6 -0
- package/drscript/ad-sdk/types/enums.js +111 -0
- package/drscript/ad-sdk/types/enums.js.meta +10 -0
- package/drscript/ad-sdk/types/index.d.ts +6 -0
- package/drscript/ad-sdk/types/index.d.ts.meta +6 -0
- package/drscript/ad-sdk/types/index.js +15 -0
- package/drscript/ad-sdk/types/index.js.meta +10 -0
- package/drscript/ad-sdk/types/interfaces.d.ts +333 -0
- package/drscript/ad-sdk/types/interfaces.d.ts.meta +6 -0
- package/drscript/ad-sdk/types.meta +13 -0
- package/drscript/config/TvUiConfig.ts +155 -0
- package/drscript/config/TvUiConfig.ts.meta +10 -0
- package/drscript/config/TvUiConfigManager.ts +133 -0
- package/drscript/config/TvUiConfigManager.ts.meta +10 -0
- package/drscript/core/BackManager.ts +40 -0
- package/drscript/core/BackManager.ts.meta +10 -0
- package/drscript/core/NativeBridge.ts +137 -0
- package/drscript/core/NativeBridge.ts.meta +10 -0
- package/drscript/core/TvUi.ts +69 -0
- package/drscript/core/TvUi.ts.meta +10 -0
- package/drscript/core/TvUiRoot.ts +137 -0
- package/drscript/core/TvUiRoot.ts.meta +10 -0
- package/drscript/focus/FocusItem.ts +57 -0
- package/drscript/focus/FocusItem.ts.meta +10 -0
- package/drscript/focus/FocusManager.ts +538 -0
- package/drscript/focus/FocusManager.ts.meta +10 -0
- package/drscript/focus/FocusScope.ts +10 -0
- package/drscript/focus/FocusScope.ts.meta +10 -0
- package/drscript/focus/FocusVisualLayer.ts +238 -0
- package/drscript/focus/FocusVisualLayer.ts.meta +10 -0
- package/drscript/icon/IconConfig.ts +7 -0
- package/drscript/icon/IconConfig.ts.meta +10 -0
- package/drscript/icon/IconManager.ts +97 -0
- package/drscript/icon/IconManager.ts.meta +10 -0
- package/drscript/input/KeyCodeAdapter.ts +23 -0
- package/drscript/input/KeyCodeAdapter.ts.meta +10 -0
- package/drscript/input/RemoteInputManager.ts +105 -0
- package/drscript/input/RemoteInputManager.ts.meta +10 -0
- package/drscript/toast/ToastComponent.ts +35 -0
- package/drscript/toast/ToastComponent.ts.meta +10 -0
- package/drscript/toast/ToastManager.ts +66 -0
- package/drscript/toast/ToastManager.ts.meta +10 -0
- package/drscript/toast/TvExitConfirmDialog.ts +334 -0
- package/drscript/toast/TvExitConfirmDialog.ts.meta +10 -0
- package/drscript/toast/UIFunctions.ts +150 -0
- package/drscript/toast/UIFunctions.ts.meta +10 -0
- package/package.json +3 -2
- package/scripts/sync-back.js +85 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
const { ccclass, property } = cc._decorator;
|
|
3
|
+
|
|
4
|
+
@ccclass('BtnExtra')
|
|
5
|
+
export class BtnExtra extends cc.Component {
|
|
6
|
+
@property({
|
|
7
|
+
type: cc.SpriteFrame,
|
|
8
|
+
tooltip: '悬停状态图片'
|
|
9
|
+
})
|
|
10
|
+
hoverSprite: cc.SpriteFrame = null;
|
|
11
|
+
|
|
12
|
+
@property({
|
|
13
|
+
type: cc.SpriteFrame,
|
|
14
|
+
tooltip: '普通状态图片'
|
|
15
|
+
})
|
|
16
|
+
normalSprite: cc.SpriteFrame = null;
|
|
17
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export enum EVideoScene {
|
|
2
|
+
// 使用道具
|
|
3
|
+
UseProp = "use_prop",
|
|
4
|
+
// 开始游戏
|
|
5
|
+
StartGame = "start_game",
|
|
6
|
+
// 复活弹窗
|
|
7
|
+
RevivePop = "revive_pop",
|
|
8
|
+
// 购买皮肤
|
|
9
|
+
BuySkin = "buy_skin",
|
|
10
|
+
// 购买道具
|
|
11
|
+
BuyProp = "buy_prop",
|
|
12
|
+
// 游戏结束
|
|
13
|
+
GameOver = "game_over",
|
|
14
|
+
// 关卡通过
|
|
15
|
+
LevelComplete = "level_complete",
|
|
16
|
+
// 商店/道具
|
|
17
|
+
Shop = "shop",
|
|
18
|
+
// 每日奖励
|
|
19
|
+
DailyReward = "daily_reward",
|
|
20
|
+
// 加速
|
|
21
|
+
Boost = "boost"
|
|
22
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import TvUi from "./core/TvUi";
|
|
2
|
+
import { PlatformAdapter } from "./PlatformAdapter";
|
|
3
|
+
|
|
4
|
+
const { ccclass, property } = cc._decorator;
|
|
5
|
+
|
|
6
|
+
@ccclass
|
|
7
|
+
export default class ExitWin extends cc.Component {
|
|
8
|
+
@property(cc.Button)
|
|
9
|
+
btnCancel: cc.Button = null;
|
|
10
|
+
@property(cc.Button)
|
|
11
|
+
btnExit: cc.Button = null;
|
|
12
|
+
|
|
13
|
+
start() {
|
|
14
|
+
this.btnCancel.node.on(cc.Node.EventType.TOUCH_END, this.onClickCancel, this);
|
|
15
|
+
this.btnExit.node.on(cc.Node.EventType.TOUCH_END, this.onClickExit, this);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
private onClickCancel() {
|
|
19
|
+
this.node.destroy();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
private onClickExit() {
|
|
23
|
+
if (TvUi.api.hasBridge()) {
|
|
24
|
+
TvUi.api.onExitGame();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
cc.game.end();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
onEnable() {
|
|
31
|
+
PlatformAdapter.showWindow(this.node);
|
|
32
|
+
PlatformAdapter.registerButton(this.btnCancel);
|
|
33
|
+
PlatformAdapter.registerButton(this.btnExit);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
onDisable() {
|
|
37
|
+
PlatformAdapter.hideWindow(this.node);
|
|
38
|
+
}
|
|
39
|
+
}
|
package/drscript/Info.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import TvUi from "./core/TvUi";
|
|
2
|
+
import ToastManager from "./toast/ToastManager";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
function getRuntimeTvUi(): any {
|
|
6
|
+
let root: any = typeof window != "undefined" ? window : null;
|
|
7
|
+
return TvUi || (root && (root.TvUi || root.drres)) || null;
|
|
8
|
+
}
|
|
9
|
+
export interface RewardVideoHooks {
|
|
10
|
+
onClose?: Function;
|
|
11
|
+
onFail?: Function;
|
|
12
|
+
onFinish?: Function;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// 请求广告
|
|
16
|
+
// await AdSdk.requestAd({
|
|
17
|
+
// reward_type: 'extra_life', // CP 自定义类型
|
|
18
|
+
// trigger_scene: 'game_over', // CP 自定义场景
|
|
19
|
+
// });
|
|
20
|
+
|
|
21
|
+
// 要求如下定义 trigger_scene:
|
|
22
|
+
// 使用道具 use_prop
|
|
23
|
+
// 开始游戏 start_game
|
|
24
|
+
// 复活弹窗 revive_pop
|
|
25
|
+
// 购买皮肤 buy_skin
|
|
26
|
+
// 购买道具 buy_prop
|
|
27
|
+
// 游戏结束 game_over
|
|
28
|
+
// 关卡通过 level_complete
|
|
29
|
+
// 商店/道具 shop
|
|
30
|
+
// 每日奖励 daily_reward
|
|
31
|
+
// 加速 boost
|
|
32
|
+
// ...增加请提出
|
|
33
|
+
// ```
|
|
34
|
+
export function showRewardVideo(scene: string, rewardType: string, callback: Function, target?: any, hooks?: RewardVideoHooks) {
|
|
35
|
+
let finishFired = false;
|
|
36
|
+
let fireFinish = () => {
|
|
37
|
+
if (finishFired) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
finishFired = true;
|
|
41
|
+
hooks && hooks.onFinish && hooks.onFinish.call(target);
|
|
42
|
+
};
|
|
43
|
+
let onSuccess = () => {
|
|
44
|
+
try {
|
|
45
|
+
callback && callback.call(target);
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
fireFinish();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
let onClose = () => {
|
|
52
|
+
ToastManager.Inst.make("必须看完视频,才能获取奖励");
|
|
53
|
+
hooks && hooks.onClose && hooks.onClose.call(target);
|
|
54
|
+
fireFinish();
|
|
55
|
+
};
|
|
56
|
+
let onFail = () => {
|
|
57
|
+
ToastManager.Inst.make("广告暂不可用,请稍后再试");
|
|
58
|
+
hooks && hooks.onFail && hooks.onFail.call(target);
|
|
59
|
+
fireFinish();
|
|
60
|
+
};
|
|
61
|
+
let tvUi: any = getRuntimeTvUi();
|
|
62
|
+
if (tvUi && tvUi.ads && tvUi.ads.showReward && tvUi.api && tvUi.api.hasBridge && tvUi.api.hasBridge()) {
|
|
63
|
+
tvUi.ads.showReward({
|
|
64
|
+
scene: scene,
|
|
65
|
+
rewardType: rewardType,
|
|
66
|
+
onSuccess: onSuccess,
|
|
67
|
+
onClose: onClose,
|
|
68
|
+
onFail: onFail,
|
|
69
|
+
onFinish: fireFinish
|
|
70
|
+
});
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
callback && callback.call(target);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export class Loader {
|
|
2
|
+
/**
|
|
3
|
+
* 异步加载单个资源
|
|
4
|
+
* @param path 资源路径(相对于resources目录)
|
|
5
|
+
* @param type 资源类型
|
|
6
|
+
* @param progressCallback 进度回调 (可选)
|
|
7
|
+
* @returns Promise<T>
|
|
8
|
+
*/
|
|
9
|
+
public static async loadRes<T extends cc.Asset>(
|
|
10
|
+
path: string,
|
|
11
|
+
progressCallback?: (progress: number) => void
|
|
12
|
+
): Promise<T> {
|
|
13
|
+
return new Promise<T>((resolve, reject) => {
|
|
14
|
+
cc.loader.loadRes(path, (completedCount: number, totalCount: number, item: any) => {
|
|
15
|
+
if (progressCallback) {
|
|
16
|
+
progressCallback(completedCount / totalCount);
|
|
17
|
+
}
|
|
18
|
+
}, (error: Error, asset: cc.Asset) => {
|
|
19
|
+
if (error) {
|
|
20
|
+
reject(error);
|
|
21
|
+
} else {
|
|
22
|
+
resolve(asset as T);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 异步加载资源目录
|
|
29
|
+
* @param dir 目录路径(相对于resources目录)
|
|
30
|
+
* @param type 资源类型 (可选)
|
|
31
|
+
* @param progressCallback 进度回调 (可选)
|
|
32
|
+
* @returns Promise<T[]>
|
|
33
|
+
*/
|
|
34
|
+
public static async loadResDir<T extends cc.Asset>(
|
|
35
|
+
dir: string,
|
|
36
|
+
progressCallback?: (progress: number, completedCount: number, totalCount: number) => void
|
|
37
|
+
): Promise<T[]> {
|
|
38
|
+
return new Promise<T[]>((resolve, reject) => {
|
|
39
|
+
cc.loader.loadResDir(dir, (completedCount: number, totalCount: number, item: any) => {
|
|
40
|
+
if (progressCallback) {
|
|
41
|
+
progressCallback(completedCount / totalCount, completedCount, totalCount);
|
|
42
|
+
}
|
|
43
|
+
}, (error: Error, assets: T[]) => {
|
|
44
|
+
if (error) {
|
|
45
|
+
reject(error);
|
|
46
|
+
} else {
|
|
47
|
+
resolve(assets);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* 异步批量加载多个资源
|
|
55
|
+
* @param resources 资源配置数组
|
|
56
|
+
* @param progressCallback 进度回调 (可选)
|
|
57
|
+
* @returns Promise<Map<string, any>>
|
|
58
|
+
*/
|
|
59
|
+
public static async loadBatch(
|
|
60
|
+
resources: Array<{ path: string; key?: string }>,
|
|
61
|
+
progressCallback?: (progress: number, completedCount: number, totalCount: number) => void
|
|
62
|
+
): Promise<Map<string, any>> {
|
|
63
|
+
const results = new Map<string, any>();
|
|
64
|
+
const totalCount = resources.length;
|
|
65
|
+
let completedCount = 0;
|
|
66
|
+
|
|
67
|
+
const loadPromises = resources.map((res, index) => {
|
|
68
|
+
const key = res.key || res.path;
|
|
69
|
+
return this.loadRes(res.path)
|
|
70
|
+
.then((asset) => {
|
|
71
|
+
results.set(key, asset);
|
|
72
|
+
completedCount++;
|
|
73
|
+
if (progressCallback) {
|
|
74
|
+
progressCallback(completedCount / totalCount, completedCount, totalCount);
|
|
75
|
+
}
|
|
76
|
+
})
|
|
77
|
+
.catch((error) => {
|
|
78
|
+
console.error(`Failed to load resource: ${res.path}`, error);
|
|
79
|
+
completedCount++;
|
|
80
|
+
if (progressCallback) {
|
|
81
|
+
progressCallback(completedCount / totalCount, completedCount, totalCount);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
await Promise.all(loadPromises);
|
|
87
|
+
return results;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
|
|
2
|
+
import { BtnExtra } from "./BtnExtra";
|
|
3
|
+
import TvUi from "./core/TvUi";
|
|
4
|
+
import { EVideoScene } from "./Define";
|
|
5
|
+
import { showRewardVideo } from "./Info";
|
|
6
|
+
import { Loader } from "./Loader";
|
|
7
|
+
import ToastManager from "./toast/ToastManager";
|
|
8
|
+
|
|
9
|
+
/** 平台适配器,名字有点长防止和Platform,Adapter冲突 */
|
|
10
|
+
export class PlatformAdapter {
|
|
11
|
+
private static readonly cpId = "xhbj";
|
|
12
|
+
private static readonly version = "1.0.0";
|
|
13
|
+
private static readonly designWidth = 1920;
|
|
14
|
+
private static readonly designHeight = 1080;
|
|
15
|
+
/** 初始化 */
|
|
16
|
+
public static async init() {
|
|
17
|
+
await ToastManager.Inst.init();
|
|
18
|
+
TvUi.init({
|
|
19
|
+
cpId: this.cpId,
|
|
20
|
+
version: this.version,
|
|
21
|
+
designWidth: this.designWidth,
|
|
22
|
+
designHeight: this.designHeight,
|
|
23
|
+
enableCursor: true,
|
|
24
|
+
configPath: "drres/config/default",
|
|
25
|
+
focus: {
|
|
26
|
+
enabled: true,
|
|
27
|
+
defaultIconKey: "default"
|
|
28
|
+
},
|
|
29
|
+
adSdk: {
|
|
30
|
+
platform: "xiaomi"
|
|
31
|
+
},
|
|
32
|
+
ads: {
|
|
33
|
+
reward: {
|
|
34
|
+
enabled: true,
|
|
35
|
+
mode: "reward",
|
|
36
|
+
channels: [
|
|
37
|
+
{ type: "aggregate", priority: 1, reward_type: "reward" },
|
|
38
|
+
{ type: "mock", priority: 100 }
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
popup: {
|
|
42
|
+
enabled: true,
|
|
43
|
+
mode: "popup",
|
|
44
|
+
channels: [
|
|
45
|
+
{ type: "aggregate", priority: 1 },
|
|
46
|
+
{ type: "mock", priority: 100 }
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
game: {
|
|
50
|
+
enabled: true,
|
|
51
|
+
mode: "popup",
|
|
52
|
+
channels: [
|
|
53
|
+
{ type: "aggregate", priority: 1 },
|
|
54
|
+
{ type: "mock", priority: 100 }
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* 显示奖励视频
|
|
63
|
+
* @param scene 视频场景
|
|
64
|
+
* @param rewardType 奖励类型
|
|
65
|
+
* @param callback 回调函数
|
|
66
|
+
* @param target 回调函数的this指向
|
|
67
|
+
*/
|
|
68
|
+
public static showRewardVideo(scene: EVideoScene, rewardType: string, callback: Function, target?: any) {
|
|
69
|
+
showRewardVideo(scene, rewardType, callback, target);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 注册按钮事件,有BtnExtra组件会自动切换按钮图片
|
|
73
|
+
* @param button 按钮组件
|
|
74
|
+
*/
|
|
75
|
+
public static registerButton(button: cc.Button) {
|
|
76
|
+
var sprite = button.getComponent(cc.Sprite);
|
|
77
|
+
var btnExtra = button.getComponent(BtnExtra);
|
|
78
|
+
var onFocus = () => {
|
|
79
|
+
sprite.spriteFrame = btnExtra.hoverSprite;
|
|
80
|
+
};
|
|
81
|
+
var onRomove = () => {
|
|
82
|
+
sprite.spriteFrame = btnExtra.normalSprite;
|
|
83
|
+
};
|
|
84
|
+
TvUi.focus.register(button, {
|
|
85
|
+
onFocus: onFocus,
|
|
86
|
+
onBlur: onRomove,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* 注册按钮事件,有BtnExtra组件会自动切换按钮图片
|
|
92
|
+
* @param name 按钮名称
|
|
93
|
+
* @param parent 查找的父节点,如果没有指定父节点,默认查找场景节点
|
|
94
|
+
* @returns
|
|
95
|
+
*/
|
|
96
|
+
public static registerButtonByName(name: string, parent: cc.Node = null) {
|
|
97
|
+
if (!parent) parent = cc.director.getScene();
|
|
98
|
+
let button = this.findChildByName(parent, name).getComponent(cc.Button);
|
|
99
|
+
if (!button) return;
|
|
100
|
+
this.registerButton(button);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* 导航到指定的按钮
|
|
105
|
+
* @param name 按钮名称
|
|
106
|
+
* @param parent 查找的父节点,如果没有指定父节点,默认查找场景节点
|
|
107
|
+
* @returns
|
|
108
|
+
*/
|
|
109
|
+
public static focusButtonByName(name: string, parent: cc.Node = null) {
|
|
110
|
+
if (!parent) parent = cc.director.getScene();
|
|
111
|
+
let button = this.findChildByName(parent, name).getComponent(cc.Button);
|
|
112
|
+
if (!button) return;
|
|
113
|
+
TvUi.focus.focus(button.node);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
public static focusButton(btn: cc.Button) {
|
|
117
|
+
TvUi.focus.focus(btn.node);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* 查找指定名称的子节点
|
|
122
|
+
* @param parent 查找的父节点
|
|
123
|
+
* @param name 子节点名称
|
|
124
|
+
* @param name 子节点名称
|
|
125
|
+
* @returns
|
|
126
|
+
*/
|
|
127
|
+
public static findChildByName(parent: cc.Node, name: string): cc.Node | null {
|
|
128
|
+
if (parent.name === name) {
|
|
129
|
+
return parent;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
for (let i = 0; i < parent.children.length; i++) {
|
|
133
|
+
let result = this.findChildByName(parent.children[i], name);
|
|
134
|
+
if (result) {
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
/** 打开界面注册导航按钮 */
|
|
143
|
+
public static showWindow(window: cc.Node) {
|
|
144
|
+
TvUi.focus.pushScope(window.uuid, window);
|
|
145
|
+
TvUi.focus.registerButtons(window);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** 关闭界面取消注册按钮事件 */
|
|
149
|
+
public static hideWindow(window: cc.Node) {
|
|
150
|
+
TvUi.focus.unregisterByRoot(window);
|
|
151
|
+
TvUi.focus.popScope(window.uuid);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/** 刷新界面按钮事件, 用于界面按钮变化(列表,下拉)后,需要刷新按钮事件 */
|
|
155
|
+
public static refreshWindow(window: cc.Node) {
|
|
156
|
+
TvUi.focus.registerButtons(window);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
public static async showExitWin() {
|
|
160
|
+
let exitPfb = await Loader.loadRes<cc.Prefab>('drres/prefab/ExitWin');
|
|
161
|
+
let exitWin = cc.instantiate(exitPfb);
|
|
162
|
+
exitWin.parent = cc.director.getScene();
|
|
163
|
+
exitWin.setPosition(cc.v2(cc.winSize.width / 2, cc.winSize.height / 2));
|
|
164
|
+
}
|
|
165
|
+
}
|