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.
Files changed (98) hide show
  1. package/drscript/BtnExtra.ts +17 -0
  2. package/drscript/Define.ts +22 -0
  3. package/drscript/ExitWin.ts +39 -0
  4. package/drscript/Info.ts +75 -0
  5. package/drscript/Loader.ts +89 -0
  6. package/drscript/PlatformAdapter.ts +165 -0
  7. package/drscript/README - /345/211/257/346/234/254.md" +814 -0
  8. package/drscript/README.md +814 -0
  9. package/drscript/ad/AdManager.ts +174 -0
  10. package/drscript/ad/AdManager.ts.meta +10 -0
  11. package/drscript/ad/AdSlot.ts +44 -0
  12. package/drscript/ad/AdSlot.ts.meta +10 -0
  13. package/drscript/ad/AggregateAdProvider.ts +148 -0
  14. package/drscript/ad/AggregateAdProvider.ts.meta +10 -0
  15. package/drscript/ad/IAdProvider.ts +39 -0
  16. package/drscript/ad/IAdProvider.ts.meta +10 -0
  17. package/drscript/ad/MockAdProvider.ts +36 -0
  18. package/drscript/ad/MockAdProvider.ts.meta +10 -0
  19. package/drscript/ad/SelfAdProvider.ts +41 -0
  20. package/drscript/ad/SelfAdProvider.ts.meta +10 -0
  21. package/drscript/ad-sdk/README.md +344 -0
  22. package/drscript/ad-sdk/README.md.meta +6 -0
  23. package/drscript/ad-sdk/ad-sdk.d.ts +59 -0
  24. package/drscript/ad-sdk/ad-sdk.d.ts.meta +6 -0
  25. package/drscript/ad-sdk/ad-sdk.js +322 -0
  26. package/drscript/ad-sdk/ad-sdk.js.meta +10 -0
  27. package/drscript/ad-sdk/adapters/xiaomi-adapter.d.ts +29 -0
  28. package/drscript/ad-sdk/adapters/xiaomi-adapter.d.ts.meta +6 -0
  29. package/drscript/ad-sdk/adapters/xiaomi-adapter.js +449 -0
  30. package/drscript/ad-sdk/adapters/xiaomi-adapter.js.meta +10 -0
  31. package/drscript/ad-sdk/adapters.meta +13 -0
  32. package/drscript/ad-sdk/event-emitter.d.ts +12 -0
  33. package/drscript/ad-sdk/event-emitter.d.ts.meta +6 -0
  34. package/drscript/ad-sdk/event-emitter.js +65 -0
  35. package/drscript/ad-sdk/event-emitter.js.meta +10 -0
  36. package/drscript/ad-sdk/leaderboard/leaderboard.d.ts +23 -0
  37. package/drscript/ad-sdk/leaderboard/leaderboard.d.ts.meta +6 -0
  38. package/drscript/ad-sdk/leaderboard/leaderboard.js +193 -0
  39. package/drscript/ad-sdk/leaderboard/leaderboard.js.meta +10 -0
  40. package/drscript/ad-sdk/leaderboard.meta +13 -0
  41. package/drscript/ad-sdk/package.json +46 -0
  42. package/drscript/ad-sdk/package.json.meta +6 -0
  43. package/drscript/ad-sdk/reporters/reporter.d.ts +40 -0
  44. package/drscript/ad-sdk/reporters/reporter.d.ts.meta +6 -0
  45. package/drscript/ad-sdk/reporters/reporter.js +198 -0
  46. package/drscript/ad-sdk/reporters/reporter.js.meta +10 -0
  47. package/drscript/ad-sdk/reporters/superset-lewo.js +413 -0
  48. package/drscript/ad-sdk/reporters/superset-lewo.js.meta +10 -0
  49. package/drscript/ad-sdk/reporters.meta +13 -0
  50. package/drscript/ad-sdk/types/enums.d.ts +64 -0
  51. package/drscript/ad-sdk/types/enums.d.ts.meta +6 -0
  52. package/drscript/ad-sdk/types/enums.js +111 -0
  53. package/drscript/ad-sdk/types/enums.js.meta +10 -0
  54. package/drscript/ad-sdk/types/index.d.ts +6 -0
  55. package/drscript/ad-sdk/types/index.d.ts.meta +6 -0
  56. package/drscript/ad-sdk/types/index.js +15 -0
  57. package/drscript/ad-sdk/types/index.js.meta +10 -0
  58. package/drscript/ad-sdk/types/interfaces.d.ts +333 -0
  59. package/drscript/ad-sdk/types/interfaces.d.ts.meta +6 -0
  60. package/drscript/ad-sdk/types.meta +13 -0
  61. package/drscript/config/TvUiConfig.ts +155 -0
  62. package/drscript/config/TvUiConfig.ts.meta +10 -0
  63. package/drscript/config/TvUiConfigManager.ts +133 -0
  64. package/drscript/config/TvUiConfigManager.ts.meta +10 -0
  65. package/drscript/core/BackManager.ts +40 -0
  66. package/drscript/core/BackManager.ts.meta +10 -0
  67. package/drscript/core/NativeBridge.ts +137 -0
  68. package/drscript/core/NativeBridge.ts.meta +10 -0
  69. package/drscript/core/TvUi.ts +69 -0
  70. package/drscript/core/TvUi.ts.meta +10 -0
  71. package/drscript/core/TvUiRoot.ts +137 -0
  72. package/drscript/core/TvUiRoot.ts.meta +10 -0
  73. package/drscript/focus/FocusItem.ts +57 -0
  74. package/drscript/focus/FocusItem.ts.meta +10 -0
  75. package/drscript/focus/FocusManager.ts +538 -0
  76. package/drscript/focus/FocusManager.ts.meta +10 -0
  77. package/drscript/focus/FocusScope.ts +10 -0
  78. package/drscript/focus/FocusScope.ts.meta +10 -0
  79. package/drscript/focus/FocusVisualLayer.ts +238 -0
  80. package/drscript/focus/FocusVisualLayer.ts.meta +10 -0
  81. package/drscript/icon/IconConfig.ts +7 -0
  82. package/drscript/icon/IconConfig.ts.meta +10 -0
  83. package/drscript/icon/IconManager.ts +97 -0
  84. package/drscript/icon/IconManager.ts.meta +10 -0
  85. package/drscript/input/KeyCodeAdapter.ts +23 -0
  86. package/drscript/input/KeyCodeAdapter.ts.meta +10 -0
  87. package/drscript/input/RemoteInputManager.ts +105 -0
  88. package/drscript/input/RemoteInputManager.ts.meta +10 -0
  89. package/drscript/toast/ToastComponent.ts +35 -0
  90. package/drscript/toast/ToastComponent.ts.meta +10 -0
  91. package/drscript/toast/ToastManager.ts +66 -0
  92. package/drscript/toast/ToastManager.ts.meta +10 -0
  93. package/drscript/toast/TvExitConfirmDialog.ts +334 -0
  94. package/drscript/toast/TvExitConfirmDialog.ts.meta +10 -0
  95. package/drscript/toast/UIFunctions.ts +150 -0
  96. package/drscript/toast/UIFunctions.ts.meta +10 -0
  97. package/package.json +3 -2
  98. 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
+ }
@@ -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
+ }