汤金涛 преди 2 седмици
родител
ревизия
484b6d7be6
променени са 100 файла, в които са добавени 2884 реда и са изтрити 503 реда
  1. 1 0
      Flowers/assets/core/ui/ui.ts
  2. 22 16
      Flowers/assets/core/ui/ui_base.ts
  3. 5 5
      Flowers/assets/core/util_class/GameData.ts
  4. 2 1
      Flowers/assets/module_basic.meta
  5. 2 1
      Flowers/assets/module_extra.meta
  6. 100 28
      Flowers/assets/module_extra/Customize/Customize_Ani.ts
  7. 4 0
      Flowers/assets/module_extra/Customize/Customize_Event.ts
  8. 116 32
      Flowers/assets/module_extra/Customize/Customize_RedPoint.ts
  9. 44 5
      Flowers/assets/module_extra/Customize/Customize_RedPointMgr.ts
  10. 1 1
      Flowers/assets/module_extra/Table_Json/level.json
  11. 4 1
      Flowers/assets/module_extra/Table_Ts/TableUtil.ts
  12. 0 2
      Flowers/assets/module_extra/Table_Ts/Table_Flowers.ts
  13. 0 2
      Flowers/assets/module_extra/Table_Ts/Table_Store.ts
  14. 0 2
      Flowers/assets/module_extra/Table_Ts/Table_Task.ts
  15. 2 1
      Flowers/assets/module_game/game/flower/Flower.ts
  16. 9 9
      Flowers/assets/module_game/game/process/GameCtl.ts
  17. 68 11
      Flowers/assets/module_game/game/process/Root.ts
  18. 57 7
      Flowers/assets/module_game/ui/UI/UIManager.ts
  19. 54 0
      Flowers/assets/module_game/ui/UI/UI_ClassManager.ts
  20. 9 0
      Flowers/assets/module_game/ui/UI/UI_ClassManager.ts.meta
  21. 10 4
      Flowers/assets/module_game/ui/UI_Collection/Collection.prefab
  22. 12 4
      Flowers/assets/module_game/ui/UI_Collection/UI_Collection.ts
  23. 11 1
      Flowers/assets/module_game/ui/UI_Game/UI_Game.ts
  24. 4 4
      Flowers/assets/module_game/ui/UI_Hall/Hall.prefab
  25. 49 31
      Flowers/assets/module_game/ui/UI_Hall/UI_Hall.ts
  26. 6 7
      Flowers/assets/module_game/ui/UI_Hall_Up/Hall_Up.prefab
  27. 14 4
      Flowers/assets/module_game/ui/UI_Hall_Up/UI_Hall_Up.ts
  28. 65 11
      Flowers/assets/module_game/ui/UI_HomePage/UI_HomePage.ts
  29. 191 149
      Flowers/assets/module_game/ui/UI_LuckyGift/LuckyGift.prefab
  30. 21 7
      Flowers/assets/module_game/ui/UI_Main/UI_Main.ts
  31. 3 2
      Flowers/assets/module_game/ui/UI_Rank/Rank_Item.prefab
  32. 22 2
      Flowers/assets/module_game/ui/UI_Rank/UI_Rank.ts
  33. 42 0
      Flowers/assets/module_game/ui/UI_Rank/UI_Rank_Item.ts
  34. 9 0
      Flowers/assets/module_game/ui/UI_Rank/UI_Rank_Item.ts.meta
  35. 32 23
      Flowers/assets/module_game/ui/UI_Settings/UI_Settings.ts
  36. 40 1
      Flowers/assets/module_game/ui/UI_Store/Store.prefab
  37. 426 103
      Flowers/assets/module_game/ui/UI_Task/Task.prefab
  38. 12 2
      Flowers/assets/module_game/ui/UI_Task/TaskItem.ts
  39. 36 4
      Flowers/assets/module_game/ui/UI_Task/UI_Task.ts
  40. 2 8
      Flowers/assets/res/material/blur.mtl
  41. 9 0
      Flowers/assets/res/ui/box_award.meta
  42. BIN
      Flowers/assets/res/ui/box_award/ch_gqbx.png
  43. 134 0
      Flowers/assets/res/ui/box_award/ch_gqbx.png.meta
  44. BIN
      Flowers/assets/res/ui/box_award/ch_tmc.png
  45. 134 0
      Flowers/assets/res/ui/box_award/ch_tmc.png.meta
  46. BIN
      Flowers/assets/res/ui/box_award/ch_wk.png
  47. 134 0
      Flowers/assets/res/ui/box_award/ch_wk.png.meta
  48. BIN
      Flowers/assets/res/ui/box_award/ch_xfk.png
  49. 134 0
      Flowers/assets/res/ui/box_award/ch_xfk.png.meta
  50. BIN
      Flowers/assets/res/ui/box_award/ch_xx.png
  51. 134 0
      Flowers/assets/res/ui/box_award/ch_xx.png.meta
  52. BIN
      Flowers/assets/res/ui/box_award/props4.png
  53. 134 0
      Flowers/assets/res/ui/box_award/props4.png.meta
  54. BIN
      Flowers/assets/res/ui/box_award/props5.png
  55. 134 0
      Flowers/assets/res/ui/box_award/props5.png.meta
  56. BIN
      Flowers/assets/res/ui/box_award/props6.png
  57. 134 0
      Flowers/assets/res/ui/box_award/props6.png.meta
  58. BIN
      Flowers/assets/res/ui/box_award/props7.png
  59. 134 0
      Flowers/assets/res/ui/box_award/props7.png.meta
  60. BIN
      Flowers/assets/res/ui/box_award/插花游戏 宝箱奖励效果图.png
  61. 134 0
      Flowers/assets/res/ui/box_award/插花游戏 宝箱奖励效果图.png.meta
  62. 8 0
      Flowers/assets/start/Start.ts
  63. 2 2
      Flowers/assets/start/start.scene
  64. 0 0
      Flowers/build/wechatgame/assets/internal/import/06/06585a170.json
  65. 0 0
      Flowers/build/wechatgame/assets/start-scene/import/03/03882949c.json
  66. 0 0
      Flowers/build/wechatgame/assets/start-scene/index.js
  67. BIN
      Flowers/build/wechatgame/assets/start-scene/native/2a/2a612619-46e9-4c03-a4d6-97837fbdc399.png
  68. BIN
      Flowers/build/wechatgame/assets/start-scene/native/af/af8025bd-86da-4e48-88ac-053a38fc3b6d.png
  69. BIN
      Flowers/build/wechatgame/assets/start-scene/native/c8/c84ab4d2-8257-476c-a097-2ca0f0c978a0.png
  70. BIN
      Flowers/build/wechatgame/assets/start-scene/native/d8/d84d12f9-7d9a-4f64-acf2-1c0fc350c172.png
  71. BIN
      Flowers/build/wechatgame/assets/start-scene/native/fc/fcff2dfe-82af-47f6-b2d1-1d36763976fb.png
  72. 0 0
      Flowers/build/wechatgame/cocos-js/_virtual_cc-147f694a.js
  73. 0 0
      Flowers/build/wechatgame/cocos-js/_virtual_cc-8643bb90.js
  74. 0 0
      Flowers/build/wechatgame/cocos-js/cc.js
  75. 0 0
      Flowers/build/wechatgame/cocos-js/spine.wasm-44fdc6cc.js
  76. 0 0
      Flowers/build/wechatgame/cocos-js/spine.wasm-5b4ed55f.js
  77. 1 1
      Flowers/build/wechatgame/game.js
  78. 8 4
      Flowers/build/wechatgame/game.json
  79. 1 1
      Flowers/build/wechatgame/src/chunks/bundle.js
  80. 0 0
      Flowers/build/wechatgame/src/settings.json
  81. 1 1
      Flowers/build/wechatgame/subpackages/module_extra/config.json
  82. 0 0
      Flowers/build/wechatgame/subpackages/module_extra/game.js
  83. 0 0
      Flowers/build/wechatgame/subpackages/module_extra/import/45/45a0b835-c3e5-4a02-8e22-c9587a649897.json
  84. 1 0
      Flowers/build/wechatgame/subpackages/module_extra/import/48/48918dba-d67b-48f2-9fc7-1223f17005a8.json
  85. 1 1
      Flowers/build/wechatgame/subpackages/module_extra/import/9e/9e66a713-ec63-492d-b09d-07102ddb526d.json
  86. 1 0
      Flowers/build/wechatgame/subpackages/module_extra/import/d5/d59a69fd-7878-4fbd-9fe8-aca182d5feb0.json
  87. 0 0
      Flowers/build/wechatgame/subpackages/module_game/config.json
  88. 1 2
      Flowers/build/wechatgame/subpackages/module_game/game.js
  89. 0 0
      Flowers/build/wechatgame/subpackages/module_game/import/00/00238084-42cf-48eb-b392-296464d4227a.json
  90. 0 0
      Flowers/build/wechatgame/subpackages/module_game/import/00/00ba69cc-8269-4a7f-a25f-8a945a121399.json
  91. 1 0
      Flowers/build/wechatgame/subpackages/module_game/import/00/00f4b37c-4be6-426f-ba78-94e7e51f24e9.json
  92. 0 0
      Flowers/build/wechatgame/subpackages/module_game/import/01/0169dd550.json
  93. 1 0
      Flowers/build/wechatgame/subpackages/module_game/import/02/0205a476-13c0-4896-b978-ca51c930f408.json
  94. 0 0
      Flowers/build/wechatgame/subpackages/module_game/import/02/028e5e9fd.json
  95. 0 0
      Flowers/build/wechatgame/subpackages/module_game/import/02/02e4bfa3b.json
  96. 1 0
      Flowers/build/wechatgame/subpackages/module_game/import/03/037a1091-dc2c-43cd-a624-d45a284914f8.json
  97. 0 0
      Flowers/build/wechatgame/subpackages/module_game/import/03/03ab15490.json
  98. 0 0
      Flowers/build/wechatgame/subpackages/module_game/import/03/03b29a4eb.json
  99. 0 0
      Flowers/build/wechatgame/subpackages/module_game/import/03/03ebce07a.json
  100. 0 0
      Flowers/build/wechatgame/subpackages/module_game/import/03/03fa3ef00.json

+ 1 - 0
Flowers/assets/core/ui/ui.ts

@@ -279,6 +279,7 @@ class ui {
             return null;
         }
     }
+
     private async _create<T extends ui_base>(bundle: AssetManager.Bundle, ui: T, uiCls: Constructor<T>, ...p: any[]): Promise<T> {
         try {
             const data: Prefab = await this.loadPrefabAsync(bundle, ui.prefab);

+ 22 - 16
Flowers/assets/core/ui/ui_base.ts

@@ -137,6 +137,11 @@ export default class ui_base {
         //检查是否为已销毁,如果已销毁,则走销毁流程
         if (this._destroyed) this.close();
     }
+
+    public showPanel() {
+        this.node.active = true;
+    }
+
     /**
      * @en hide and destroy this ui panel.
      * @zh 隐藏并销毁此UI面板
@@ -161,22 +166,23 @@ export default class ui_base {
     }
 
     public new_close() {
-        this._resolve_close?.();
-        this._resolve_close = null;
-        this._destroyed = true;
-        if (!this.node) return;
-        this.node.removeFromParent();
-        for (let i = 0; i < ui_base._uis.length; ++i) {
-            if (ui_base._uis[i] == this) {
-                ui_base._uis.splice(i, 1);
-                break;
-            }
-        }
-        this.onDispose();
-        this.node.destroy();
-        this.node = null;
-        (ui_base as any)._removeCls(this._cls);
-        this._cls = null;
+        // this._resolve_close?.();
+        // this._resolve_close = null;
+        // this._destroyed = true;
+        // if (!this.node) return;
+        // this.node.removeFromParent();
+        // for (let i = 0; i < ui_base._uis.length; ++i) {
+        //     if (ui_base._uis[i] == this) {
+        //         ui_base._uis.splice(i, 1);
+        //         break;
+        //     }
+        // }
+        // this.onDispose();
+        // this.node.destroy();
+        // this.node = null;
+        // (ui_base as any)._removeCls(this._cls);
+        // this._cls = null;
+        this.node.active = false;
     }
 
     public closeAndRelease() {

+ 5 - 5
Flowers/assets/core/util_class/GameData.ts

@@ -104,10 +104,10 @@ export default class GameData<T extends string | number | symbol, DT extends str
          if (ch.sdk.get_inited() && load_data.uid != this._uid) load_data = null;
       }
       //
-      if (!load_data) {
-         const remote_data = await this.loadGameDataWithRetry();
-         load_data = remote_data;
-      }
+      // if (!load_data) {
+      //    const remote_data = await this.loadGameDataWithRetry();
+      //    load_data = remote_data;
+      // }
       // } else if (remote_data && this.on_check(load_data, remote_data)) {
       //    load_data = remote_data;
       // }
@@ -158,7 +158,7 @@ export default class GameData<T extends string | number | symbol, DT extends str
    * 序列化(数据库存储)
    */
    private serialize(): { [key: string]: number | string | any } {
-      const save_data: { [key: string]: number | string } = {};
+      const save_data: { [key: string]: number | string | any} = {};
       if (this._data) save_data.data = this._data.serialize();
       if (this._day_data) save_data.day_data = this._day_data.serialize();
       if (this._week_data) save_data.week_data = this._week_data.serialize();

+ 2 - 1
Flowers/assets/module_basic.meta

@@ -6,6 +6,7 @@
   "files": [],
   "subMetas": {},
   "userData": {
-    "isBundle": true
+    "isBundle": true,
+    "priority": 6
   }
 }

+ 2 - 1
Flowers/assets/module_extra.meta

@@ -6,6 +6,7 @@
   "files": [],
   "subMetas": {},
   "userData": {
-    "isBundle": true
+    "isBundle": true,
+    "priority": 7
   }
 }

+ 100 - 28
Flowers/assets/module_extra/Customize/Customize_Ani.ts

@@ -1,79 +1,150 @@
-import { Node, Sprite, tween, UIOpacity, Vec3, Widget } from "cc";
+import { Node, Sprite, Tween, tween, UIOpacity, Vec3, view, Widget } from "cc";
 import { gui } from "../../core/ui/ui";
 
 //单个节点进场动画,退场动画
 export function toggleSlideOutAndBack(t: Node, offset: Vec3, duration: number = 0.5, onFinish?: () => void) {
     if (!t['__originPos']) {
-        t['__originPos'] = t.position.clone();
+        t['__originPos'] = t.position.clone(); // 初始位置
         t['__isHidden'] = false;
     }
 
     const originPos: Vec3 = t['__originPos'];
-    const isHidden: boolean = t['__isHidden'];
 
-    const targetPos = isHidden ? originPos.clone() : originPos.clone().add(offset);
+    if (t['__targetHidden'] === undefined) {
+        t['__targetHidden'] = t['__isHidden'];
+    }
 
-    tween(t)
-        .to(duration, { position: targetPos }, { easing: "quadInOut" })
+    const isHidden = t['__isHidden'];
+    const targetHidden = !t['__targetHidden']; // 翻转目标
+    t['__targetHidden'] = targetHidden;        // 标记目标
+
+    const targetPos = targetHidden ? originPos.clone().add(offset) : originPos.clone();
+
+    // 停止旧动画(彻底打断)
+    if (t['__slideTween']) {
+        t['__slideTween'].stop();
+        t['__slideTween'] = null;
+    }
+
+    const currentPos = t.position.clone();
+    const posDelta = targetPos.clone().subtract(currentPos).length();
+    const isReversing = posDelta > 1 && isHidden !== targetHidden;
+    const actualDuration = isReversing ? duration * 0.4 : duration;
+
+    const tweenInst = tween(t)
+        .to(actualDuration, { position: new Vec3().set(targetPos) }, { easing: "quadInOut" })
         .call(() => {
-            t['__isHidden'] = !isHidden;
-            if (onFinish) onFinish();
-        })
-        .start();
+            // 动画未被中断才更新最终状态
+            if (t['__targetHidden'] === targetHidden) {
+                t['__isHidden'] = targetHidden;
+                t['__slideTween'] = null;
+                onFinish?.();
+            }
+        });
+
+    t['__slideTween'] = tweenInst;
+    tweenInst.start();
 }
 
+
+
 //节点下所有子节点进场动画,退场动画
 export function toggleSlideOutAndBack_Nodes(t: Node, offset: Vec3, duration: number = 0.5, onFinish?: () => void) {
-    t.children.forEach(node => {
-        toggleSlideOutAndBack(node, offset, duration, onFinish);
+    const children = t.children;
+    if (children.length === 0) {
+        onFinish?.();
+        return;
+    }
+
+    let completedCount = 0;
+
+    children.forEach((node) => {
+        toggleSlideOutAndBack(node, offset, duration, () => {
+            completedCount++;
+            if (completedCount === children.length) {
+                onFinish?.();
+            }
+        });
     });
 }
 
-//界面过渡动画,淡入淡出以及滑动感
+
 export function toggleSlideInAndOut(t: Node, duration: number = 0.5, onFinish?: () => void) {
     if (!t['__originPos']) {
         t['__originPos'] = t.position.clone();
     }
 
+    console.log(view.getVisibleSize())
     const originPos: Vec3 = t['__originPos'];
-    const isHidden: boolean = t['__isHidden'] ?? false;
-    const targetPos = isHidden ? originPos : originPos.clone().add(new Vec3(0, 1334, 0));
+    const showPos = originPos.clone().add(new Vec3(0, 1334, 0));
 
     let uiOpacity = t.getComponent(UIOpacity);
     if (!uiOpacity) {
         uiOpacity = t.addComponent(UIOpacity);
+        uiOpacity.opacity = 0;
     }
 
-    const startOpacity = isHidden ? 255 : 0;
-    const endOpacity = isHidden ? 0 : 255;
+    // 初始化状态记录
+    if (t['__isHidden'] === undefined) {
+        t['__isHidden'] = true;
+    }
+    if (t['__targetHidden'] === undefined) {
+        t['__targetHidden'] = t['__isHidden'];
+    }
+
+    // 计算新的目标状态(翻转)
+    const nextTargetHidden = !t['__targetHidden'];
+    t['__targetHidden'] = nextTargetHidden;
+
+    const targetPos = nextTargetHidden ? originPos : showPos;
+    const targetOpacity = nextTargetHidden ? 0 : 255;
 
-    uiOpacity.opacity = startOpacity;
+    // 当前状态
+    const currentPos = t.position.clone();
+    const currentOpacity = uiOpacity.opacity;
+    const posDiff = targetPos.clone().subtract(currentPos).length();
+    const isMidTween = currentOpacity > 0 && currentOpacity < 255 && posDiff > 0;
+    const actualDuration = isMidTween ? duration * 0.4 : duration;
+
+    // 停止旧动画
+    Tween.stopAllByTarget(t);
+    Tween.stopAllByTarget(uiOpacity);
 
     tween(t)
         .parallel(
-            tween(t).to(duration, { position: targetPos }, { easing: "quadOut" }),
-            tween(uiOpacity).to(duration, { opacity: endOpacity }, { easing: "quadOut" })
+            tween(t).to(actualDuration, { position: targetPos.clone() }, { easing: 'quadInOut' }),
+            tween(uiOpacity).to(actualDuration, { opacity: targetOpacity }, { easing: 'quadInOut' })
         )
         .call(() => {
-            t['__isHidden'] = !isHidden;
-            if (onFinish) onFinish();
+            // 只有目标状态未被再次更改时,才确认最终状态
+            if (t['__targetHidden'] === nextTargetHidden) {
+                t['__isHidden'] = nextTargetHidden;
+                onFinish?.();
+            }
         })
         .start();
 }
 
+
 //呼吸动画
 export function toggleBreath(t: Node, duration: number = 0.5, onFinish?: () => void) {
+    if (!t['__originalScale']) {
+        t['__originalScale'] = t.scale.clone(); // 缓存初始缩放
+    }
+    const originalScale: Vec3 = t['__originalScale'];
+
+    //停止之前的 tween,并还原缩放
     if (t['__breathTween']) {
         t['__breathTween'].stop();
+        t.scale = originalScale.clone(); //强制还原到初始 scale
     }
 
-    const originalScale = t.scale.clone();
     const scaleUp = originalScale.clone().multiplyScalar(1.1);
     const scaleDown = originalScale;
 
     const breathTween = tween(t)
         .repeatForever(
-            tween(t) // ✅ 一整段循环体
+            tween(t)
                 .to(duration, { scale: scaleUp }, { easing: 'sineInOut' })
                 .to(duration, { scale: scaleDown }, { easing: 'sineInOut' })
                 .call(() => {
@@ -86,6 +157,7 @@ export function toggleBreath(t: Node, duration: number = 0.5, onFinish?: () => v
     breathTween.start();
 }
 
+
 //提醒动画
 export function toggleRemind(t: Node, duration: number = 0.2, delay: number = 1.5, onFinish?: () => void) {
     if (!t['__originScale']) {
@@ -147,7 +219,7 @@ export function toggleMoveBy(t: Node, offset: Vec3, duration: number = 0.5, onFi
 
     if (t['__moveTween']) {
         t['__moveTween'].stop();
-        t['__moveTween'] = null; 
+        t['__moveTween'] = null;
     }
 
     const originPos: Vec3 = t['__originPos'];
@@ -162,14 +234,14 @@ export function toggleMoveBy(t: Node, offset: Vec3, duration: number = 0.5, onFi
         });
 
     t['__moveTween'] = moveTween;
-    moveTween.start(); 
+    moveTween.start();
 }
 
 //图片填充动画  未完善
-export function fillImage(t: Node, duration: number, target:number,onFinish?: Function) { 
+export function fillImage(t: Node, duration: number, target: number, onFinish?: Function) {
     let sprite = t.getComponent(Sprite);
     tween(sprite)
-        .to(duration, { fillRange: target },{ easing: 'quadOut' })
+        .to(duration, { fillRange: target }, { easing: 'quadOut' })
         .start();
 }
 

+ 4 - 0
Flowers/assets/module_extra/Customize/Customize_Event.ts

@@ -10,11 +10,15 @@ export interface process_event_protocol {
 //定义操作事件
 export interface operate_event_protocol {
     Combo():void;
+    UpdateComboProgress(combo_count_down: number):void;
+    UpdateComboLabel(n: number):void;
+    UpdateGameTimeLabel(t: number):void;
 }
 
 //定义UI更新事件
 export interface ui_update_event_protocol {
     UpdateGold():void;
     UpdateHallUp():void;
+    UpdateTaskMrrwRedPoint():void;
 }
 

+ 116 - 32
Flowers/assets/module_extra/Customize/Customize_RedPoint.ts

@@ -13,61 +13,88 @@ export enum RedPointState {
     Hide,
 }
 
+export enum RedPointPersistType {
+    Temporary, // 按天重置
+    Permanent, // 永久保存
+}
+
+
 export class Customize_RedPoint {
-    private key: string|null;
+    //属于哪一个根节点
+    private key: string | null = null;
     get Key() {
         return this.key;
     }
-    private subKey: string|null;
+    //自己
+    private subKey: string | null = null;
     get SubKey() {
         return this.subKey;
     }
-    private isRoot: boolean;
+    //是否为根节点
+    private isRoot: boolean = false;
     get IsRoot() {
         return this.isRoot;
     }
-    private type: RedPointType;
+    //红点类型
+    private type: RedPointType = 0;
     get Type() {
         return this.type;
     }
-    private state: RedPointState;
+    //当前状态
+    private state: RedPointState = RedPointState.None;
     get State() {
         return this.state;
     }
-    private data: number;
+    //数据
+    private data: number = 0;
     get Data() {
         return this.data;
     }
-    private parent: Customize_RedPoint;
+    //父节点
+    private parent: Customize_RedPoint = null;
     get Parent() {
         return this.parent;
     }
-    private children: Customize_RedPoint[] = [];
+    //子节点
+    private children: Customize_RedPoint[] = null;
     get Children() {
         return this.children;
     }
+    private persistType: RedPointPersistType = RedPointPersistType.Temporary;
+    get PersistType() {
+        return this.persistType;
+    }
 
-    event: (state:RedPointState,data:number)=>void|null = null;
+
+    event: (state: RedPointState, data: number) => void = () => { };
     btn: Button = null;
 
-    constructor(key: string, subKey: string, isRoot: boolean, type: RedPointType) {
+    constructor(
+        key: string,
+        subKey: string,
+        isRoot: boolean,
+        type: RedPointType,
+        persistType: RedPointPersistType = RedPointPersistType.Temporary
+    ) {
         this.key = key;
         this.subKey = subKey;
         this.isRoot = isRoot;
         this.type = type;
+        this.persistType = persistType;
         this.state = RedPointState.Hide;
         this.data = 0;
         this.children = [];
     }
 
-    public Init(event:(state:RedPointState,data:number)=>void, btn: Button): void {
+
+    public Init(event: (state: RedPointState, data: number) => void, btn: Button): void {
         this.event = event;
         if (btn) {
             this.btn = btn;
-            btn.node.on(Button.EventType.CLICK, this.OnClick,this)
+            btn.node.on(Button.EventType.CLICK, this.OnClick, this)
         }
-        if(this.event){
-            this.event(this.state,this.data);
+        if (this.event) {
+            this.event(this.state, this.data);
         }
     }
 
@@ -130,53 +157,61 @@ export class Customize_RedPoint {
 
         this.data = 0;
 
-        for(let i = 0; i < this.children.length; i++){
-            this.data  += this.children[i].data;
+        for (let i = 0; i < this.children.length; i++) {
+            this.data += this.children[i].data;
         }
 
         //触发事件
-        this.event(this.state,this.data);
+        this.event(this.state, this.data);
+    }
+
+    public GetState(subKey: string): { state: RedPointState, data: number } {
+        let node: Customize_RedPoint = this.GetChild(subKey);
+        if (node == null) {
+            return null;
+        }
+        return { state: node.state, data: node.data };
     }
 
     public SetTreeState(subKey: string, state: RedPointState, data: number) {
         this.state = state;
         if (this.subKey == subKey) {
             this.data = data;
-        }else{
-            this.data=0;
+        } else {
+            this.data = 0;
             for (let i = 0; i < this.children.length; i++) {
-                if(this.children[i].state==RedPointState.Show){
-                    this.state=RedPointState.Show;
-                    this.data+=this.children[i].data;
+                if (this.children[i].state == RedPointState.Show) {
+                    this.state = RedPointState.Show;
+                    this.data += this.children[i].data;
                 }
             }
         }
 
-        if(this.parent!=null){
+        if (this.parent != null) {
             this.parent.SetTreeState(subKey, state, data);
         }
 
         //触发事件
-        this.event(this.state,this.data);
+        this.event(this.state, this.data);
     }
 
-    private OnClick():void{
-        if(this.type == RedPointType.Once){
+    private OnClick(): void {
+        if (this.type == RedPointType.Once) {
             this.HideChildren();
             this.SetState(this.subKey, RedPointState.Hide, this.data);
         }
     }
 
-    private HideChildren():void{
-        this.state  = RedPointState.Hide;
+    private HideChildren(): void {
+        this.state = RedPointState.Hide;
         for (let i = 0; i < this.children.length; i++) {
             this.children[i].HideChildren();
         }
         //触发事件
-        this.event(this.state,this.data);
+        this.event(this.state, this.data);
     }
 
-    private Dispose():void{
+    private Dispose(): void {
         for (let i = 0; i < this.children.length; i++) {
             this.children[i].Dispose();
         }
@@ -184,8 +219,8 @@ export class Customize_RedPoint {
         this.children.length = 0;
         this.children = null;
 
-        if(this.btn!=null){
-            this.btn.node.off(Button.EventType.CLICK,this.OnClick,this)
+        if (this.btn != null) {
+            this.btn.node.off(Button.EventType.CLICK, this.OnClick, this)
         }
 
         this.btn = null;
@@ -196,6 +231,55 @@ export class Customize_RedPoint {
         this.type = RedPointType.None;
         this.state = RedPointState.None;
     }
+
+    public Serialize(): any {
+        return {
+            key: this.key,
+            subKey: this.subKey,
+            state: this.state,
+            data: this.data,
+            type: this.type,
+            persistType: this.persistType,
+            children: this.children.map(child => child.Serialize())
+        };
+    }
+
+
+    public static Deserialize(json: any): Customize_RedPoint {
+        const node = new Customize_RedPoint(
+            json.key,
+            json.subKey,
+            json.key === json.subKey,
+            json.type,
+            json.persistType ?? RedPointPersistType.Temporary
+        );
+        node.state = json.state;
+        node.data = json.data;
+        if (json.children) {
+            json.children.forEach((childJson: any) => {
+                const child = Customize_RedPoint.Deserialize(childJson);
+                node.AddChild(child, node.subKey);
+            });
+        }
+        return node;
+    }
+
+
+    public ResetTemporaryData() {
+        if (this.persistType === RedPointPersistType.Temporary) {
+            this.data = 1;
+            this.state = RedPointState.Show;
+            this.event(this.state, this.data);
+        }
+
+        if (this.children) {
+            for (let i = 0; i < this.children.length; i++) {
+                this.children[i].ResetTemporaryData();
+            }
+        }
+    }
+
+
 }
 
 

+ 44 - 5
Flowers/assets/module_extra/Customize/Customize_RedPointMgr.ts

@@ -1,5 +1,14 @@
 import { Button } from 'cc';
-import { Customize_RedPoint, RedPointState, RedPointType } from './Customize_RedPoint';
+import { Customize_RedPoint, RedPointPersistType, RedPointState, RedPointType } from './Customize_RedPoint';
+
+export enum NodeName {
+    root= "root",
+    homePage = "HomePage",
+    task = "Task",
+    rank = "Rank",
+    collection = "Collection",
+    box = "Box",
+}
 
 export class Customize_RedPointMgr {
     private static _instance: Customize_RedPointMgr | null = null;
@@ -17,7 +26,7 @@ export class Customize_RedPointMgr {
         this.redPointTrees = [];
     }
 
-    public Add(key: string, subKey: string, parentKey: string, type: RedPointType): void {
+    public Add(key: string, subKey: string, parentKey: string, type: RedPointType,persistType:RedPointPersistType): void {
         let root = this.GetRoot(key);
 
         if (!subKey || key === subKey) {
@@ -26,7 +35,7 @@ export class Customize_RedPointMgr {
                 return;
             }
 
-            root = new Customize_RedPoint(key, key, true, type);
+            root = new Customize_RedPoint(key, key, true, type,persistType);
             this.redPointTrees.push(root);
         } else {
             if (!root) {
@@ -34,7 +43,7 @@ export class Customize_RedPointMgr {
                 return;
             }
 
-            const node = new Customize_RedPoint(key, subKey, false, type);
+            const node = new Customize_RedPoint(key, subKey, false, type,persistType);
             root.AddChild(node, parentKey);
         }
     }
@@ -80,10 +89,17 @@ export class Customize_RedPointMgr {
             return;
         }
 
+        console.log(`Set red point state [${state}] for [${key}] [${subKey}] [${data}]`);
+
         root.SetState(subKey, state, data);
     }
 
-    private GetRoot(key: string): Customize_RedPoint | null {
+    public GetState(key: string, subKey: string): { state: RedPointState, data: number } {
+        const root = this.GetRoot(key);
+        return root.GetState(subKey);
+    }
+
+    public GetRoot(key: string): Customize_RedPoint | null {
         if (!key) return null;
 
         for (let i = 0; i < this.redPointTrees.length; i++) {
@@ -102,4 +118,27 @@ export class Customize_RedPointMgr {
 
         this.redPointTrees.length = 0;
     }
+
+    public SaveToLocal(): void {
+        const data = this.redPointTrees.map(tree => tree.Serialize());
+        localStorage.setItem('redPointData', JSON.stringify(data));
+    }
+
+    public LoadFromLocal(): boolean {
+        const str = localStorage.getItem('redPointData');
+        if (!str) return false;
+
+        try {
+            const data = JSON.parse(str);
+            this.redPointTrees = data.map((treeJson: any) => Customize_RedPoint.Deserialize(treeJson));
+            return true;
+        } catch (e) {
+            console.error("Failed to parse red point data:", e);
+        }
+    }
+
+    public RedPointTree(){
+        return this.redPointTrees;
+    }
+
 }

+ 1 - 1
Flowers/assets/module_extra/Table_Json/level.json

@@ -8,6 +8,6 @@
         "data1": "[[1,1,1],[1,1,1]]",
         "data2": "1+0+1/2+0+2/1+0+1,0+0+1/3+0+2,4+0+3/0+1+0,3+0+4,4+5+0,5+0+5",
         "time": "600",
-        "award ": "0 "
+        "award": "0"
     }
 ]

+ 4 - 1
Flowers/assets/module_extra/Table_Ts/TableUtil.ts

@@ -20,10 +20,13 @@ export class TableUtil {
             let json = data.get(tableName);
             if(!json){
                 assetManager.getBundle("module_extra").load("Table_Json/" + tableName,JsonAsset, (err, asset) => {
+                    if(err){
+                        console.error("加载失败");
+                    }
                     json = asset.json;
                     if (json && Array.isArray(json)) {
                         data.set(tableName, json);
-                        console.log("加载成功");
+                        console.log("加载成功",json);
                         return json;
                     }
                 });

+ 0 - 2
Flowers/assets/module_extra/Table_Ts/Table_Flowers.ts

@@ -1,8 +1,6 @@
 import { _decorator, Component, Node } from 'cc';
 import { TableUtil } from './TableUtil';
-const { ccclass, property } = _decorator;
 
-@ccclass('Table_Flowers')
 export class Table_Flowers {
     static readonly TableName: string = "flowers";
 

+ 0 - 2
Flowers/assets/module_extra/Table_Ts/Table_Store.ts

@@ -1,8 +1,6 @@
 import { _decorator, Component, Node } from 'cc';
 import { TableUtil } from './TableUtil';
-const { ccclass, property } = _decorator;
 
-@ccclass('Table_Store')
 export class Table_Store {
     static readonly TableName: string = "store";
 

+ 0 - 2
Flowers/assets/module_extra/Table_Ts/Table_Task.ts

@@ -1,8 +1,6 @@
 import { _decorator, Component, Node } from 'cc';
 import { TableUtil } from './TableUtil';
-const { ccclass, property } = _decorator;
 
-@ccclass('Table_Task')
 export class Table_Task {
     static readonly TableName: string = "task";
 

+ 2 - 1
Flowers/assets/module_game/game/flower/Flower.ts

@@ -3,6 +3,7 @@ import { GameCtl } from '../process/GameCtl';
 import { Create_Pots } from './Create_Pots';
 import { Flowers_Show } from './Flowers_Show';
 import { flower_info } from '../../../module_extra/Customize/Customize_Type';
+import { Root } from '../process/Root';
 
 const { ccclass, property } = _decorator;
 
@@ -161,7 +162,7 @@ export class Flower extends Component {
                             this.flower_info = newInfo;
                             this.originalAngle = this.node.angle;
                             if (this.originalParent.parent.getComponent(Flowers_Show).F_Info.compare_Flowers()) {
-                                GameCtl.getInstance().operate_event.emit(GameCtl.getInstance().operate_event.key.Combo);
+                                Root.getInstance().operate_event.emit(Root.getInstance().operate_event.key.Combo);
                                 //消除表层花朵
                                 this.originalParent.parent.getComponent(Flowers_Show).replace_Flowers_Sprites();
                             } else {

+ 9 - 9
Flowers/assets/module_game/game/process/GameCtl.ts

@@ -3,14 +3,14 @@ import { ch } from '../../../ch/ch';
 
 import { Flower_Pool } from '../flower/Flower_Pool';
 import { Create_Pots } from '../flower/Create_Pots';
-import { operate_event_protocol, process_event_protocol } from '../../../module_extra/Customize/Customize_Event';
+import { process_event_protocol } from '../../../module_extra/Customize/Customize_Event';
 import { Table_Level } from '../../../module_extra/Table_Ts/Table_Level';
 import { Flowers_Show } from '../flower/Flowers_Show';
 import { Flower } from '../flower/Flower';
 import { flower_info, flowers_info } from '../../../module_extra/Customize/Customize_Type';
 import ch_util from '../../../ch/ch_util';
 import { Fisher_Yates, getRandomExcludeMany, partitionToGroups } from '../../../module_extra/Customize/Customize_Util';
-import { UI_Main } from '../../ui/UI_Main/UI_Main';
+// import { UI_Main } from '../../ui/UI_Main/UI_Main';
 import { Root } from './Root';
 import { gui } from '../../../core/ui/ui';
 const { ccclass, property } = _decorator;
@@ -19,7 +19,6 @@ const { ccclass, property } = _decorator;
 export class GameCtl extends Component {
     private static instance: GameCtl = null;
     public process_event = ch.get_new_event<process_event_protocol>();
-    public operate_event = ch.get_new_event<operate_event_protocol>();
 
     flower_Pool: Flower_Pool = null!;
 
@@ -51,7 +50,7 @@ export class GameCtl extends Component {
         this.process_event.on(this.process_event.key.EndGame, this.endGame, this);
         this.process_event.on(this.process_event.key.RestartGame, this.restartGame, this);
 
-        this.operate_event.on(this.operate_event.key.Combo, this.combo, this);
+        Root.getInstance().operate_event.on(Root.getInstance().operate_event.key.Combo, this.combo, this);
         // Root.getInstance().Fsm.Change("Init");
 
         this.flower_Pool = new Flower_Pool();
@@ -62,16 +61,17 @@ export class GameCtl extends Component {
         if (this.combo_count_down > 0) {
             this.combo_count_down -= deltaTime;
             //更新进度条显示
-            gui.get(UI_Main).updateCombo(this.combo_count_down);
+            Root.getInstance().operate_event.emit(Root.getInstance().operate_event.key.UpdateComboProgress, this.combo_count_down);
         } else {
             this.combo_count_down = 0;
             this.combo_times = 0;
-            gui.get(UI_Main).updateComboLabel(this.combo_times);
+            Root.getInstance().operate_event.emit(Root.getInstance().operate_event.key.UpdateComboLabel, this.combo_times);
         }
     }
 
     //初始化并刷新界面显示
     initGame() {
+        console.log("initGame:",Table_Level.get(0));
         this.flower_Pool.initFlowers(Table_Level.get(0));
         this.create_Pots = new Create_Pots();
         this.create_Pots.loadConfig(this.node, this.Pot_Prefab, this.shelf_Prefabs, Table_Level.get(0));
@@ -109,7 +109,7 @@ export class GameCtl extends Component {
 
     startCount_Down() {
         //刷新UI显示
-        gui.get(UI_Main).updateTimeLabel(this.gametime);
+        Root.getInstance().operate_event.emit(Root.getInstance().operate_event.key.UpdateGameTimeLabel, this.gametime);
         this.gametime--;
         if (this.gametime < 0) {
             this.unschedule(this.startCount_Down);
@@ -125,8 +125,8 @@ export class GameCtl extends Component {
             this.combo_count_down = 3;
         }
         //更新连击显示
-        gui.get(UI_Main).updateCombo(this.combo_count_down);
-        gui.get(UI_Main).updateComboLabel(this.combo_times);
+        Root.getInstance().operate_event.emit(Root.getInstance().operate_event.key.UpdateComboProgress, this.combo_count_down);
+        Root.getInstance().operate_event.emit(Root.getInstance().operate_event.key.UpdateComboLabel, this.combo_times);
     }
 
     //判断游戏结束

+ 68 - 11
Flowers/assets/module_game/game/process/Root.ts

@@ -1,7 +1,5 @@
 import { _decorator, Component, Material, Sprite, SpriteFrame } from 'cc';
 import get_new_fms from '../../../core/util_class/FMS';
-import { gui } from '../../../core/ui/ui';
-import { UI_Hall } from '../../ui/UI_Hall/UI_Hall';
 import TableLoadUtil from '../../../core/util/TableLoadUtil';
 import { TableUtil } from '../../../module_extra/Table_Ts/TableUtil';
 import { ModuleDef } from '../../../scripts/ModuleDef';
@@ -9,8 +7,13 @@ import { Table_Level } from '../../../module_extra/Table_Ts/Table_Level';
 import { UIManager } from '../../ui/UI/UIManager';
 import PlayerData from '../data/PlayerData';
 import { ch } from '../../../ch/ch';
-import { UI_Main } from '../../ui/UI_Main/UI_Main';
-import { ui_update_event_protocol } from '../../../module_extra/Customize/Customize_Event';
+import { operate_event_protocol, ui_update_event_protocol } from '../../../module_extra/Customize/Customize_Event';
+import { RedPointPersistType, RedPointState, RedPointType } from '../../../module_extra/Customize/Customize_RedPoint';
+import { Customize_RedPointMgr, NodeName } from '../../../module_extra/Customize/Customize_RedPointMgr';
+import { Task_Reward_State } from '../../../module_extra/Customize/Customize_Type';
+import { UIName } from '../../ui/UI/UI_ClassManager';
+import { Table_Task } from '../../../module_extra/Table_Ts/Table_Task';
+import { Table_Flowers } from '../../../module_extra/Table_Ts/Table_Flowers';
 
 
 const { ccclass, property } = _decorator;
@@ -18,11 +21,11 @@ const { ccclass, property } = _decorator;
 @ccclass('Root')
 export class Root extends Component {
     @property(Sprite)
-    private Bg:Sprite=null;
+    private Bg: Sprite = null;
     @property([SpriteFrame])
-    private Bg_SpriteFrams:SpriteFrame[]=[];
+    private Bg_SpriteFrams: SpriteFrame[] = [];
     @property(Material)
-    private Bg_Material:Material=null;
+    private Bg_Material: Material = null;
     private default_Material: Material = null;
     private static Instance: Root = null;
     private fsm = get_new_fms();
@@ -38,6 +41,7 @@ export class Root extends Component {
     can_UseItem: boolean = true;
 
     public ui_update_event = ch.get_new_event<ui_update_event_protocol>();
+    public operate_event = ch.get_new_event<operate_event_protocol>();
 
     //缓存所有花朵图片
     @property([SpriteFrame])
@@ -53,7 +57,7 @@ export class Root extends Component {
 
     async start() {
         Root.Instance = this;
-        this.default_Material=this.Bg.getMaterialInstance(0);
+        this.default_Material = this.Bg.getMaterialInstance(0);
         this.fsm.Change("Hall");
         this.replaceBg(1);
 
@@ -63,8 +67,14 @@ export class Root extends Component {
         await this.player.init_user_info();
         await this.player.load();
 
+        //
+        this.initTaskData();
+
+        //初始化红点模块
+        this.initRedPointTree();
+
         await this.loadTable();
-        UIManager.getInstance().pushUI(UI_Main);
+        UIManager.getInstance().pushUI(UIName.MAIN);
     }
 
     private loadTable(): Promise<void> {
@@ -72,6 +82,8 @@ export class Root extends Component {
         return new Promise((resolve) => {
             TableLoadUtil.preloadAll(ModuleDef.EXTRA, "table_json", () => {
                 Table_Level.getList();
+                Table_Task.getList();
+                Table_Flowers.getList();
                 resolve();
             }, TableUtil.set);
         });
@@ -81,14 +93,59 @@ export class Root extends Component {
         this.Bg.spriteFrame = this.Bg_SpriteFrams[index];
     }
 
-    blurBg(){
+    blurBg() {
         this.Bg.customMaterial = this.Bg_Material;
     }
 
-    cancelBlurBg(){
+    cancelBlurBg() {
         this.Bg.customMaterial = null;
     }
 
+    private initRedPointTree() {
+        if (!Customize_RedPointMgr.instance.LoadFromLocal()) {
+            console.log("初始化红点树");
+            Customize_RedPointMgr.instance.Add(NodeName.root, null, null, RedPointType.Enternal, RedPointPersistType.Permanent);
+            Customize_RedPointMgr.instance.Add(NodeName.homePage, null, NodeName.root, RedPointType.Enternal, RedPointPersistType.Permanent);
+            Customize_RedPointMgr.instance.Add(NodeName.task, null, NodeName.root, RedPointType.Enternal, RedPointPersistType.Permanent);
+            Customize_RedPointMgr.instance.Add(NodeName.rank, null, NodeName.root, RedPointType.Enternal, RedPointPersistType.Permanent);
+            Customize_RedPointMgr.instance.Add(NodeName.collection, null, NodeName.root, RedPointType.Enternal, RedPointPersistType.Permanent);
+            Customize_RedPointMgr.instance.Add(NodeName.box, null, NodeName.root, RedPointType.Enternal, RedPointPersistType.Permanent);
+
+            let day_task_reward_state = Root.getInstance().player.get_task_state(1) == undefined ? [] : Root.getInstance().player.get_task_state(1);
+            let count = day_task_reward_state.filter(it => it.state == Task_Reward_State.Completed).length;
+            console.log("任务红点:", count);
+            Customize_RedPointMgr.instance.SetState(NodeName.task, NodeName.task, count == 0 ? RedPointState.Hide : RedPointState.Show, count);
+        }
+
+        const lastLogin = localStorage.getItem("LastLoginDate");
+        const today = new Date().toDateString();
+        if (lastLogin === today || lastLogin === null) {
+            console.log("今天已经登录过");
+            localStorage.setItem("LastLoginDate", today);
+            Customize_RedPointMgr.instance.GetRoot(NodeName.root).ResetTemporaryData();
+        }
+
+    }
+
+    private initTaskData() {
+        let day_task_name: string[] = ['mrdl', 'gksp', 'xhbx', 'mrtg', 'wppp', 'cczh', 'mrjs', 'sjng', 'sxhd', 'sjjl', 'mrfx', 'gqbx'];
+        let day_task_reward_state = Root.getInstance().player.get_task_state(1) == undefined ? [] : Root.getInstance().player.get_task_state(1);
+        console.log(",,,,,,,,,,", day_task_reward_state);
+        let flag = true;
+        if (day_task_reward_state.length == 0) {
+            day_task_name.forEach(v => {
+                if (flag) {
+                    day_task_reward_state.push({ name: v, state: Task_Reward_State.Incomplete });
+                } else {
+                    day_task_reward_state.push({ name: v, state: Task_Reward_State.Completed });
+                }
+                flag = !flag;
+            })
+            Root.getInstance().player.set_task_state(1, day_task_reward_state);
+            console.log(day_task_reward_state);
+        }
+    }
+
 }
 
 

+ 57 - 7
Flowers/assets/module_game/ui/UI/UIManager.ts

@@ -1,13 +1,17 @@
 import { _decorator, Component, Constructor, Node } from 'cc';
 import { gui } from '../../../core/ui/ui';
 import ui_base from '../../../core/ui/ui_base';
+import { NameToClass } from './UI_ClassManager';
+
 const { ccclass, property } = _decorator;
 
+
 @ccclass('UIManager')
 export class UIManager {
     private static instance: UIManager = null;
     private Panel_Stack = [];
     private show_Ani = false;
+    private Panel_Map: Map<string, Constructor<ui_base>> = new Map<string, Constructor<ui_base>>();
 
     public static getInstance(): UIManager {
         if (this.instance == null) {
@@ -33,22 +37,58 @@ export class UIManager {
         return this.Panel_Stack[this.Panel_Stack.length - 1];
     }
 
+    //获取栈顶界面名字
+    getTopUIName(): string | null {
+        const topUI = this.getTopUI();
+        for (const [key, value] of NameToClass) {
+            if (value == topUI) {
+                return key;
+            }
+        }
+        return null;
+    }
+
+
     //获取栈底界面
     getDownUI<T extends ui_base>(): Constructor<T> | null {
         return this.Panel_Stack[0];
     }
 
-    pushUI<T extends ui_base>(ui: Constructor<T>,flag?: boolean) {
-        if(!flag){
+    //获取栈底界面名字
+    getDownUIName(): string | null {
+        const downUI = this.getDownUI();
+        for (const [key, value] of NameToClass) {
+            if (value == downUI) {
+                return key;
+            }
+        }
+        return null;
+    }
+
+    pushUI(name: string, flag?: boolean) {
+        let ui = NameToClass.get(name);
+        if (!flag) {
             this.PopUI();
         }
-        console.log("当前:", this.Panel_Stack);
-        this.Panel_Stack.push(ui);
-        gui.show(ui);
+
+        if (!this.Panel_Map.has(name)) {
+            console.log(`${name}未注册`);
+            this.Panel_Map.set(name, ui);
+            this.Panel_Stack.push(ui);
+            gui.show(ui);
+        } else {
+            this.Panel_Stack.push(this.Panel_Map.get(name));
+            let u = gui.get(this.Panel_Map.get(name));
+            u.showPanel();
+        }
+
+        // console.log("当前:", this.Panel_Stack);
+        // this.Panel_Stack.push(ui);
+        // gui.show(ui);
     }
 
     PopUI() {
-        if (this.Panel_Stack.length > 1) {
+        if (this.Panel_Stack.length > 2) {
             const ui = gui.get(this.getTopUI());
             if (ui) {
                 ui.new_close();
@@ -57,10 +97,20 @@ export class UIManager {
         }
     }
 
-    closeAllUI() {
+    DestoryAllUI() {
         for (let i = 0; i < this.Panel_Stack.length; i++) {
             gui.get(this.Panel_Stack[i]).close();
         }
+        this.Panel_Map = new Map();
+        this.Panel_Stack = [];
+        this.show_Ani = false;
+    }
+
+    closeAllUI() {
+        for (let i = 0; i < this.Panel_Stack.length; i++) {
+            gui.get(this.Panel_Stack[i]).new_close();
+        }
+        // this.Panel_Map  = new Map();
         this.Panel_Stack = [];
         this.show_Ani = false;
     }

+ 54 - 0
Flowers/assets/module_game/ui/UI/UI_ClassManager.ts

@@ -0,0 +1,54 @@
+import ui_base from "../../../core/ui/ui_base";
+import { UI_Collection } from "../UI_Collection/UI_Collection";
+import { UI_Game } from "../UI_Game/UI_Game";
+import { UI_Hall } from "../UI_Hall/UI_Hall";
+import { UI_Hall_Up } from "../UI_Hall_Up/UI_Hall_Up";
+import { UI_HomePage } from "../UI_HomePage/UI_HomePage";
+import { UI_Life } from "../UI_Life/UI_Life";
+import { UI_LuckyGift } from "../UI_LuckyGift/UI_LuckyGift";
+import { UI_Main } from "../UI_Main/UI_Main";
+import { UI_PiggyBank } from "../UI_PiggyBank/UI_PiggyBank";
+import { UI_Rank } from "../UI_Rank/UI_Rank";
+import { UI_Settings } from "../UI_Settings/UI_Settings";
+import { UI_Store } from "../UI_Store/UI_Store";
+import { UI_Task } from "../UI_Task/UI_Task";
+
+export const UIName = {
+    HALL: 'UI_Hall',
+    MAIN: 'UI_Main',
+    GAME: 'UI_Game',
+    HOMEPAGE: 'UI_HomePage',
+    TASK: 'UI_Task',
+    STORE:  'UI_Store',
+    RANK: 'UI_Rank',
+    COLLECTION: 'UI_Collection',
+    HALL_UP: 'UI_Hall_Up',
+    SETTINGS: 'UI_Settings',
+    LUCKYGIFT:  'UI_LuckyGift',
+    PIGGYBANK:'UI_PiggyBank',
+    LIFE:  'UI_Life',
+} as const;
+
+type UINameType = typeof UIName[keyof typeof UIName];
+type Constructor<T = any> = new (...args: any[]) => T;
+
+
+export const NameToClass = new Map<string, Constructor<ui_base>>(
+  [
+    [UIName.HALL, UI_Hall],
+    [UIName.MAIN, UI_Main],
+    [UIName.GAME, UI_Game],
+    [UIName.HOMEPAGE, UI_HomePage],
+    [UIName.TASK, UI_Task],
+    [UIName.STORE, UI_Store],
+    [UIName.RANK, UI_Rank],
+    [UIName.SETTINGS, UI_Settings],
+    [UIName.COLLECTION, UI_Collection],
+    [UIName.HALL_UP, UI_Hall_Up],
+    [UIName.LUCKYGIFT, UI_LuckyGift],
+    [UIName.PIGGYBANK, UI_PiggyBank],
+    [UIName.LIFE, UI_Life],
+  ] as [string, Constructor<ui_base>][]
+);
+
+

+ 9 - 0
Flowers/assets/module_game/ui/UI/UI_ClassManager.ts.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "4.0.24",
+  "importer": "typescript",
+  "imported": true,
+  "uuid": "571d70a7-4730-440d-9079-b94feadf9b1a",
+  "files": [],
+  "subMetas": {},
+  "userData": {}
+}

+ 10 - 4
Flowers/assets/module_game/ui/UI_Collection/Collection.prefab

@@ -1963,6 +1963,8 @@
       "__id__": 0
     },
     "fileId": "e8Lhj2VjlP94qIAsRRaxF9",
+    "instance": null,
+    "targetOverrides": null,
     "nestedPrefabInstanceRoots": null
   },
   {
@@ -2515,7 +2517,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 700,
-      "height": 820
+      "height": 1020
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -2605,6 +2607,8 @@
       "__id__": 0
     },
     "fileId": "20huG/b9FPT7S7mYyN4GlB",
+    "instance": null,
+    "targetOverrides": null,
     "nestedPrefabInstanceRoots": null
   },
   {
@@ -2622,7 +2626,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 600,
-      "height": 0
+      "height": 100
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -2658,7 +2662,7 @@
     "_paddingLeft": 0,
     "_paddingRight": 0,
     "_paddingTop": 0,
-    "_paddingBottom": 0,
+    "_paddingBottom": 100,
     "_spacingX": 0,
     "_spacingY": 0,
     "_verticalDirection": 1,
@@ -2714,7 +2718,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 700,
-      "height": 820
+      "height": 1020
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -2847,6 +2851,8 @@
       "__id__": 0
     },
     "fileId": "7dphOe71dO6aYCd8E90vpt",
+    "instance": null,
+    "targetOverrides": null,
     "nestedPrefabInstanceRoots": null
   },
   {

+ 12 - 4
Flowers/assets/module_game/ui/UI_Collection/UI_Collection.ts

@@ -3,7 +3,6 @@ import ui_base from '../../../core/ui/ui_base';
 import { ModuleDef } from '../../../scripts/ModuleDef';
 import { GameUILayers } from '../../../core/ui/ui';
 import { Layout_Collection } from './Layout_Collection';
-import { UIManager } from '../UI/UIManager';
 import { toggleSlideInAndOut } from '../../../module_extra/Customize/Customize_Ani';
 import { Root } from '../../game/process/Root';
 import { button_Sound, SoundName } from '../../../module_extra/Customize/Customize_Sound';
@@ -46,14 +45,23 @@ export class UI_Collection extends ui_base {
         }
 
         if (this.type == 1) {
-
+            layout.List1.node.active = true;
+            layout.List2.node.active = false;
         } else if (this.type == 2) {
+            layout.List1.node.active = false;
+            layout.List2.node.active = true;
             this.data2 = Table_Flowers.getList();
-            layout.List2.numItems = Math.ceil(this.data2.length/3);
-            console.log("show portfolio",this.data2.length);
+            layout.List2.numItems = Math.ceil(this.data2.length / 3);
+            console.log("show portfolio", this.data2.length);
         }
     }
 
+    public showPanel(): void {
+        super.showPanel();
+        const layout = this.getLayout<Layout_Collection>();
+        toggleSlideInAndOut(layout.node, 0.3);
+    }
+
     public new_close() {
         const layout = this.getLayout<Layout_Collection>();
 

+ 11 - 1
Flowers/assets/module_game/ui/UI_Game/UI_Game.ts

@@ -12,7 +12,17 @@ export class UI_Game extends ui_base {
     }
 
     protected onCreated(): void {
-        
+        this.showPanel();
+    }
+
+    public showPanel(): void {
+        super.showPanel(); 
+        // GameCtl.getInstance().initGame();
+    }
+
+
+    public new_close() {
+        super.new_close();
     }
 }
 

+ 4 - 4
Flowers/assets/module_game/ui/UI_Hall/Hall.prefab

@@ -3259,7 +3259,7 @@
   },
   {
     "__type__": "cc.Node",
-    "_name": "HInt_Point",
+    "_name": "hint_point",
     "_objFlags": 0,
     "__editorExtras__": {},
     "_parent": {
@@ -3608,7 +3608,7 @@
   },
   {
     "__type__": "cc.Node",
-    "_name": "HInt_Point",
+    "_name": "hint_point",
     "_objFlags": 0,
     "__editorExtras__": {},
     "_parent": {
@@ -3945,7 +3945,7 @@
   },
   {
     "__type__": "cc.Node",
-    "_name": "HInt_Point",
+    "_name": "hint_point",
     "_objFlags": 0,
     "__editorExtras__": {},
     "_parent": {
@@ -4491,7 +4491,7 @@
   },
   {
     "__type__": "cc.Node",
-    "_name": "HInt_Point",
+    "_name": "hint_point",
     "_objFlags": 0,
     "__editorExtras__": {},
     "_parent": {

+ 49 - 31
Flowers/assets/module_game/ui/UI_Hall/UI_Hall.ts

@@ -3,21 +3,14 @@ import ui_base from '../../../core/ui/ui_base';
 import { ModuleDef } from '../../../scripts/ModuleDef';
 import { GameUILayers, gui } from '../../../core/ui/ui';
 import { Layout_Hall } from './Layout_Hall';
-import { UI_HomePage } from '../UI_HomePage/UI_HomePage';
-import { UI_Collection } from '../UI_Collection/UI_Collection';
-import { UI_Task } from '../UI_Task/UI_Task';
 import { UIManager } from '../UI/UIManager';
 import { button_Sound, SoundName } from '../../../module_extra/Customize/Customize_Sound';
 import { toggleMoveBy, toggleMoveTo } from '../../../module_extra/Customize/Customize_Ani';
 import { Root } from '../../game/process/Root';
-import { UI_Settings } from '../UI_Settings/UI_Settings';
-import { UI_Life } from '../UI_Life/UI_Life';
-import { Table_Task } from '../../../module_extra/Table_Ts/Table_Task';
-import { UI_Rank } from '../UI_Rank/UI_Rank';
-import { UI_Store } from '../UI_Store/UI_Store';
-import { Table_Store } from '../../../module_extra/Table_Ts/Table_Store';
-import { UI_Hall_Up } from '../UI_Hall_Up/UI_Hall_Up';
-import { Table_Flowers } from '../../../module_extra/Table_Ts/Table_Flowers';
+import { Customize_RedPointMgr, NodeName } from '../../../module_extra/Customize/Customize_RedPointMgr';
+import { RedPointState } from '../../../module_extra/Customize/Customize_RedPoint';
+import { UIName } from '../UI/UI_ClassManager';
+
 
 const { ccclass, property } = _decorator;
 
@@ -31,47 +24,39 @@ export class UI_Hall extends ui_base {
     }
 
     protected async onCreated() {
-        Root.getInstance().replaceBg(0);
-        const layout = this.getLayout<Layout_Hall>();
-
         //存储每个按钮的初始位置
         this.init_Originak_Pos();
+        this.showPanel();
+        const layout = this.getLayout<Layout_Hall>();
 
-        UIManager.getInstance().pushUI(UI_Hall_Up,true);
-
-        //默认进入主页
-        UIManager.getInstance().pushUI(UI_HomePage);
-        this.selectNode = layout.HomePage_Btn.node;
-        toggleMoveBy(this.selectNode, this.offset, 0);
+        this.initRedPointTree();
 
         this.onButtonEvent(layout.Settings_Btn, () => {
             button_Sound(SoundName.clickUI);
             //打开设置
-            UIManager.getInstance().pushUI(UI_Settings, true);
+            UIManager.getInstance().pushUI(UIName.SETTINGS, true);
         })
 
         this.onButtonEvent(layout.Collection_Btn, async () => {
             button_Sound(SoundName.clickUI);
-            if (UIManager.getInstance().getTopUI() !== UI_Collection) {
-                Table_Flowers.getList();
-                UIManager.getInstance().pushUI(UI_Collection);
+            if (UIManager.getInstance().getTopUIName() !== UIName.COLLECTION) {
+                UIManager.getInstance().pushUI(UIName.COLLECTION);
                 this.selectPanel(layout.Tab_Top, layout.Collection_Btn.node);
             }
         })
 
         this.onButtonEvent(layout.HomePage_Btn, async () => {
             button_Sound(SoundName.clickUI);
-            if (UIManager.getInstance().getTopUI() !== UI_HomePage) {
-                UIManager.getInstance().pushUI(UI_HomePage);
+            if (UIManager.getInstance().getTopUIName() !== UIName.HOMEPAGE) {
+                UIManager.getInstance().pushUI(UIName.HOMEPAGE);
                 this.selectPanel(layout.Tab_Top, layout.HomePage_Btn.node);
             }
         })
 
         this.onButtonEvent(layout.Task_Btn, async () => {
             button_Sound(SoundName.clickUI);
-            Table_Task.getList();
-            if (UIManager.getInstance().getTopUI() !== UI_Task) {
-                UIManager.getInstance().pushUI(UI_Task);
+            if (UIManager.getInstance().getTopUIName() !== UIName.TASK) {
+                UIManager.getInstance().pushUI(UIName.TASK);
                 this.selectPanel(layout.Tab_Top, layout.Task_Btn.node);
             }
         })
@@ -79,8 +64,8 @@ export class UI_Hall extends ui_base {
         this.onButtonEvent(layout.Rank_Btn, () => {
             button_Sound(SoundName.clickUI);
             //打开排行榜
-            if (UIManager.getInstance().getTopUI() !== UI_Rank) {
-                UIManager.getInstance().pushUI(UI_Rank);
+            if (UIManager.getInstance().getTopUIName() !== UIName.RANK) {
+                UIManager.getInstance().pushUI(UIName.RANK);
                 this.selectPanel(layout.Tab_Top, layout.Rank_Btn.node);
             }
         })
@@ -108,6 +93,39 @@ export class UI_Hall extends ui_base {
         toggleMoveBy(targetNode, this.offset, 0.2);
         this.selectNode = targetNode;
     }
+
+    private initRedPointTree() {
+        console.log('初始化homePage红点树');
+        Customize_RedPointMgr.instance.Init(NodeName.homePage, NodeName.homePage, this.OnHomePageShow.bind(this));
+        Customize_RedPointMgr.instance.Init(NodeName.task, NodeName.task, this.OnTaskShow.bind(this));
+    }
+
+    private OnHomePageShow(state: RedPointState, data: number) {
+        const layout = this.getLayout<Layout_Hall>();
+        layout.HomePage_Btn.node.getChildByName('hint_point').active = state === RedPointState.Show;
+    }
+
+    private OnTaskShow(state: RedPointState, data: number) {
+        const layout = this.getLayout<Layout_Hall>();
+        layout.Task_Btn.node.getChildByName('hint_point').active = state === RedPointState.Show;
+    }
+
+    public showPanel(): void {
+        Root.getInstance().replaceBg(0);
+        super.showPanel();
+        const layout = this.getLayout<Layout_Hall>();
+        UIManager.getInstance().pushUI(UIName.HALL_UP, true);
+
+        //默认进入主页
+        UIManager.getInstance().pushUI(UIName.HOMEPAGE);
+        this.selectNode = layout.HomePage_Btn.node;
+        toggleMoveBy(this.selectNode, this.offset, 0);
+    }
+
+
+    public new_close() {
+        super.new_close();
+    }
 }
 
 

+ 6 - 7
Flowers/assets/module_game/ui/UI_Hall_Up/Hall_Up.prefab

@@ -45,7 +45,7 @@
     },
     "_lpos": {
       "__type__": "cc.Vec3",
-      "x": -221.69299999999998,
+      "x": 0,
       "y": 600,
       "z": 0
     },
@@ -108,7 +108,7 @@
     },
     "_lpos": {
       "__type__": "cc.Vec3",
-      "x": 50,
+      "x": -160.681,
       "y": 0,
       "z": 0
     },
@@ -849,7 +849,7 @@
     },
     "_lpos": {
       "__type__": "cc.Vec3",
-      "x": 260,
+      "x": 49.31900000000002,
       "y": 0,
       "z": 0
     },
@@ -1590,7 +1590,7 @@
     },
     "_lpos": {
       "__type__": "cc.Vec3",
-      "x": 470,
+      "x": 259.31899999999996,
       "y": 0,
       "z": 0
     },
@@ -2335,7 +2335,7 @@
     "__prefab": {
       "__id__": 95
     },
-    "_alignFlags": 33,
+    "_alignFlags": 17,
     "_target": null,
     "_left": 0,
     "_right": 546.693,
@@ -2404,7 +2404,6 @@
       "__id__": 0
     },
     "fileId": "35WtDIZ89EYLhoVfhqW9Qw",
-    "instance": null,
-    "targetOverrides": null
+    "instance": null
   }
 ]

+ 14 - 4
Flowers/assets/module_game/ui/UI_Hall_Up/UI_Hall_Up.ts

@@ -9,6 +9,7 @@ import { UIManager } from '../UI/UIManager';
 import { UI_Life } from '../UI_Life/UI_Life';
 import { UI_Store } from '../UI_Store/UI_Store';
 import { Root } from '../../game/process/Root';
+import { UIName } from '../UI/UI_ClassManager';
 const { ccclass, property } = _decorator;
 
 @ccclass('UI_Hall_Up')
@@ -23,10 +24,10 @@ export class UI_Hall_Up extends ui_base {
         this.showData();
 
         this.onButtonEvent(layout.Gold_Btn, () => {
-            if (UIManager.getInstance().getTopUI() !== UI_Store) {
+            if (UIManager.getInstance().getTopUIName() !== UIName.STORE) {
                 button_Sound(SoundName.clickUI);
                 Table_Store.getList();
-                UIManager.getInstance().pushUI(UI_Store, true);
+                UIManager.getInstance().pushUI(UIName.STORE, true);
                 //其余按钮消失,关闭后再恢复
                 layout.Gold_Btn.node.getChildByName('Add').active = false;
                 layout.Life_Btn.node.active = false;
@@ -35,9 +36,9 @@ export class UI_Hall_Up extends ui_base {
         });
 
         this.onButtonEvent(layout.Life_Btn, () => {
-            if (UIManager.getInstance().getTopUI() !== UI_Life) {
+            if (UIManager.getInstance().getTopUIName() !== UIName.LIFE) {
                 button_Sound(SoundName.clickUI);
-                UIManager.getInstance().pushUI(UI_Life, true);
+                UIManager.getInstance().pushUI(UIName.LIFE, true);
                 //其余按钮消失,关闭后再恢复
                 layout.Gold_Btn.node.getChildByName('Add').active = false;
                 layout.Life_Btn.node.getChildByName('Add').active = false;
@@ -78,6 +79,15 @@ export class UI_Hall_Up extends ui_base {
         Root.getInstance().ui_update_event.off(Root.getInstance().ui_update_event.key.UpdateGold, this.showData, this);
         Root.getInstance().ui_update_event.off(Root.getInstance().ui_update_event.key.UpdateHallUp, this.showBtn, this);
     }
+
+    public showPanel(): void {
+        super.showPanel(); 
+    }
+
+
+    public new_close() {
+        super.new_close();
+    }
 }
 
 

+ 65 - 11
Flowers/assets/module_game/ui/UI_HomePage/UI_HomePage.ts

@@ -3,13 +3,13 @@ import ui_base from '../../../core/ui/ui_base';
 import { ModuleDef } from '../../../scripts/ModuleDef';
 import { GameUILayers, gui } from '../../../core/ui/ui';
 import { Layout_HomePage } from './Layout_HomePage';
-import { UI_Main } from '../UI_Main/UI_Main';
 import { UIManager } from '../UI/UIManager';
 import { toggleBreath, toggleSlideOutAndBack_Nodes } from '../../../module_extra/Customize/Customize_Ani';
 import { Root } from '../../game/process/Root';
-import { UI_PiggyBank } from '../UI_PiggyBank/UI_PiggyBank';
 import { button_Sound, SoundName } from '../../../module_extra/Customize/Customize_Sound';
-import { UI_LuckyGift } from '../UI_LuckyGift/UI_LuckyGift';
+import { Customize_RedPointMgr, NodeName } from '../../../module_extra/Customize/Customize_RedPointMgr';
+import { RedPointPersistType, RedPointState, RedPointType } from '../../../module_extra/Customize/Customize_RedPoint';
+import { UIName } from '../UI/UI_ClassManager';
 
 const { ccclass, property } = _decorator;
 
@@ -23,21 +23,34 @@ export class UI_HomePage extends ui_base {
 
     ];
     private duration: number = 0.3;
+
+    luckyGift: string = "LuckyGift";
+    subscriptionGift: string = "SubscriptionGift";
+    piggyBank: string = "PiggyBank";
+
+    count = 1;
     constructor() {
         super(ModuleDef.GAME, "ui/UI_HomePage/HomePage", GameUILayers.HUD, Layout_HomePage);
     }
 
     protected onCreated(): void {
         Root.getInstance().cancelBlurBg();
+
+        const layout = this.getLayout<Layout_HomePage>();
+        this.initRedPointTree();
+
+        this.showPanel();
+    }
+
+    public showPanel(): void {
+        super.showPanel();
         let flag: boolean = false;//是否需要做动画
         if (!UIManager.getInstance().Show_Ani) {
             UIManager.getInstance().Show_Ani = true;
-        }else{
+        } else {
             flag = true;
         }
-
         const layout = this.getLayout<Layout_HomePage>();
-
         let count = 3;
         const onOneFinish = () => {
             count--;
@@ -45,23 +58,29 @@ export class UI_HomePage extends ui_base {
                 this.onButtonEvent(layout.Start_Btn, () => {
                     button_Sound(SoundName.clickUI);
                     Root.getInstance().Mode = 1;
-                    UIManager.getInstance().closeAllUI();
-                    UIManager.getInstance().pushUI(UI_Main);
+                    UIManager.getInstance().DestoryAllUI();
+                    UIManager.getInstance().pushUI(UIName.MAIN);
                 })
 
                 this.onButtonEvent(layout.LuckyGift_Btn, () => {
                     button_Sound(SoundName.clickUI);
-                    UIManager.getInstance().pushUI(UI_LuckyGift,true);
+                    UIManager.getInstance().pushUI(UIName.LUCKYGIFT, true);
+                    Customize_RedPointMgr.instance.SetState(NodeName.homePage, this.luckyGift, RedPointState.Hide);
+                    Customize_RedPointMgr.instance.SaveToLocal();
                 });
 
                 this.onButtonEvent(layout.SubscriptionGift_Btn, () => {
                     button_Sound(SoundName.clickUI);
                     // UIManager.getInstance().pushUI();
+                    Customize_RedPointMgr.instance.SetState(NodeName.homePage, this.subscriptionGift, RedPointState.Hide);
+                    Customize_RedPointMgr.instance.SaveToLocal();
                 });
 
                 this.onButtonEvent(layout.PiggyBank_Btn, () => {
                     button_Sound(SoundName.clickUI);
-                    UIManager.getInstance().pushUI(UI_PiggyBank,true);
+                    UIManager.getInstance().pushUI(UIName.PIGGYBANK, true);
+                    Customize_RedPointMgr.instance.SetState(NodeName.homePage, this.piggyBank, RedPointState.Hide);
+                    Customize_RedPointMgr.instance.SaveToLocal();
                 });
             }
         };
@@ -72,7 +91,6 @@ export class UI_HomePage extends ui_base {
         toggleSlideOutAndBack_Nodes(layout.Down_Groups, this.offset[3], this.duration, onOneFinish);
 
         toggleBreath(layout.Start_Btn.node, 0.8);
-
     }
 
     public new_close() {
@@ -89,7 +107,43 @@ export class UI_HomePage extends ui_base {
         toggleSlideOutAndBack_Nodes(layout.Left_Groups, this.offset[0], 0.3, onOneFinish);
         toggleSlideOutAndBack_Nodes(layout.Right_Groups, this.offset[1], 0.3, onOneFinish);
         toggleSlideOutAndBack_Nodes(layout.Down_Groups, this.offset[3], 0.3, onOneFinish);
+    }
+
+    private initRedPointTree() {
+        if (!Customize_RedPointMgr.instance.GetState(NodeName.homePage, this.luckyGift)) {
+            console.log("添加");
+            Customize_RedPointMgr.instance.Add(NodeName.homePage, this.luckyGift, NodeName.homePage, RedPointType.Enternal, RedPointPersistType.Temporary);
+            Customize_RedPointMgr.instance.SetState(NodeName.homePage, this.luckyGift, this.count == 0 ? RedPointState.Hide : RedPointState.Show, this.count);
+        }
+        if (!Customize_RedPointMgr.instance.GetState(NodeName.homePage, this.subscriptionGift)) {
+            console.log("添加");
+            Customize_RedPointMgr.instance.Add(NodeName.homePage, this.subscriptionGift, NodeName.homePage, RedPointType.Enternal, RedPointPersistType.Temporary);
+            Customize_RedPointMgr.instance.SetState(NodeName.homePage, this.subscriptionGift, this.count == 0 ? RedPointState.Hide : RedPointState.Show, this.count);
+        }
+        if (!Customize_RedPointMgr.instance.GetState(NodeName.homePage, this.piggyBank)) {
+            console.log("添加");
+            Customize_RedPointMgr.instance.Add(NodeName.homePage, this.piggyBank, NodeName.homePage, RedPointType.Enternal, RedPointPersistType.Temporary);
+            Customize_RedPointMgr.instance.SetState(NodeName.homePage, this.piggyBank, this.count == 0 ? RedPointState.Hide : RedPointState.Show, this.count);
+        }
+
+        Customize_RedPointMgr.instance.Init(NodeName.homePage, this.luckyGift, this.OnLuckyGiftShow.bind(this));
+        Customize_RedPointMgr.instance.Init(NodeName.homePage, this.subscriptionGift, this.OnSubscriptionGiftShow.bind(this));
+        Customize_RedPointMgr.instance.Init(NodeName.homePage, this.piggyBank, this.OnPiggyBankShow.bind(this));
+    }
+
+    private OnLuckyGiftShow(state: RedPointState, data: number = 1) {
+        const layout = this.getLayout<Layout_HomePage>();
+        layout.LuckyGift_Btn.node.getChildByName('hint_point').active = state === RedPointState.Show;
+    }
+
+    private OnSubscriptionGiftShow(state: RedPointState, data: number = 1) {
+        const layout = this.getLayout<Layout_HomePage>();
+        layout.SubscriptionGift_Btn.node.getChildByName('hint_point').active = state === RedPointState.Show;
+    }
 
+    private OnPiggyBankShow(state: RedPointState, data: number = 1) {
+        const layout = this.getLayout<Layout_HomePage>();
+        layout.PiggyBank_Btn.node.getChildByName('hint_point').active = state === RedPointState.Show;
     }
 
 }

Файловите разлики са ограничени, защото са твърде много
+ 191 - 149
Flowers/assets/module_game/ui/UI_LuckyGift/LuckyGift.prefab


+ 21 - 7
Flowers/assets/module_game/ui/UI_Main/UI_Main.ts

@@ -1,12 +1,12 @@
 import { _decorator, Component, Node } from 'cc';
 import ui_base from '../../../core/ui/ui_base';
-import { GameUILayers, gui } from '../../../core/ui/ui';
+import { GameUILayers } from '../../../core/ui/ui';
 import { ModuleDef } from '../../../scripts/ModuleDef';
 import { Layout_Main } from './Layout_Main';
-import { UI_Game } from '../UI_Game/UI_Game';
 import { Root } from '../../game/process/Root';
 import { UIManager } from '../UI/UIManager';
-import { UI_Settings } from '../UI_Settings/UI_Settings';
+import { UIName } from '../UI/UI_ClassManager';
+import { GameCtl } from '../../game/process/GameCtl';
 const { ccclass, property } = _decorator;
 
 @ccclass('UI_Main')
@@ -16,13 +16,11 @@ export class UI_Main extends ui_base {
     }
 
     protected onCreated() {
-        Root.getInstance().replaceBg(1);
+        this.showPanel();
         const layout = this.getLayout<Layout_Main>();
 
-        UIManager.getInstance().pushUI(UI_Game);
-
         this.onButtonEvent(layout.Settings_Btn, () => {
-            UIManager.getInstance().pushUI(UI_Settings,true);
+            UIManager.getInstance().pushUI(UIName.SETTINGS, true);
         });
     }
 
@@ -66,6 +64,22 @@ export class UI_Main extends ui_base {
         }
         layout.Time_Label.string = minutes_str + ":" + seconds_str;
     }
+
+    public showPanel(): void {
+        console.log("UI_Main showPanel");
+        Root.getInstance().replaceBg(1);
+        super.showPanel();
+        UIManager.getInstance().pushUI(UIName.GAME);
+
+        Root.getInstance().operate_event.on(Root.getInstance().operate_event.key.UpdateComboProgress, this.updateCombo,this);
+        Root.getInstance().operate_event.on(Root.getInstance().operate_event.key.UpdateComboLabel, this.updateComboLabel,this);
+        Root.getInstance().operate_event.on(Root.getInstance().operate_event.key.UpdateGameTimeLabel, this.updateTimeLabel,this); 
+    }
+
+
+    public new_close() {
+        super.new_close();
+    }
 }
 
 

+ 3 - 2
Flowers/assets/module_game/ui/UI_Rank/Rank_Item.prefab

@@ -1136,8 +1136,8 @@
     },
     "_contentSize": {
       "__type__": "cc.Size",
-      "width": 100,
-      "height": 100
+      "width": 700,
+      "height": 120
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -1159,6 +1159,7 @@
       "__id__": 0
     },
     "fileId": "1938xnnFVMTZfQp31ImOO5",
+    "instance": null,
     "targetOverrides": null
   }
 ]

+ 22 - 2
Flowers/assets/module_game/ui/UI_Rank/UI_Rank.ts

@@ -21,7 +21,7 @@ export class UI_Rank extends ui_base {
         const layout = this.getLayout<Layout_Rank>();
         Root.getInstance().blurBg();
 
-        toggleSlideInAndOut(layout.node, 0.3);
+        this.showPanel();
 
         layout.onList = (item: Node, index: number) => {
             // item.getComponent(UI_Rank_Item).showInfo(index + 1, type, this._data[index], false);
@@ -46,7 +46,7 @@ export class UI_Rank extends ui_base {
         layout.Rank_Toggle_1.isChecked = type == 1;
         layout.Rank_Toggle_2.isChecked = type == 2;
 
-        
+
         if (type == 1 || t == null) {
             // await gui.show(UIWaiting);
             layout.list.numItems = 0;
@@ -77,6 +77,26 @@ export class UI_Rank extends ui_base {
             // gui.close(UIWaiting);
         }
     }
+
+    public showPanel(): void {
+        super.showPanel();
+        const layout = this.getLayout<Layout_Rank>();
+        toggleSlideInAndOut(layout.node, 0.3);
+    }
+
+    public new_close() {
+        const layout = this.getLayout<Layout_Rank>();
+
+        let count = 1;
+        const onOneFinish = () => {
+            count--;
+            if (count === 0) {
+                super.new_close();
+            }
+        };
+
+        toggleSlideInAndOut(layout.node, 0.3, onOneFinish);
+    }
 }
 
 

+ 42 - 0
Flowers/assets/module_game/ui/UI_Rank/UI_Rank_Item.ts

@@ -0,0 +1,42 @@
+import { _decorator, Component, Label, Node, Sprite, SpriteFrame } from 'cc';
+const { ccclass, property } = _decorator;
+
+@ccclass('UI_Rank_Item')
+export class UI_Rank_Item extends Component {
+    @property(Sprite)
+    Medal: Sprite = null;
+    @property(Label)
+    Num: Label = null;
+    @property(Sprite)
+    Head_Icon: Sprite = null;
+    @property(Label)
+    Name: Label = null;
+    @property(Label)
+    Level: Label = null;
+
+    @property([SpriteFrame])
+    medal_SpriteFrames: SpriteFrame[] = [];
+
+    showInfo(index: number, type: number, data: { head: string, nickName: string, score: number, userId: number, [key: string]: any }, me: boolean): void {
+        if(!data){
+            this.node.active=false;
+            return;
+        }
+        this.node.active=true;
+
+        
+        if (index < 3) {
+            this.Medal.spriteFrame = this.medal_SpriteFrames[index];
+            this.Num.node.active = false;
+        } else {
+            this.Medal.node.active = false;
+            this.Num.string = (index+1) + "";
+        }
+
+        this.Name.string = data.nickName;
+        this.Level.string = data.score + "";
+
+    }
+}
+
+

+ 9 - 0
Flowers/assets/module_game/ui/UI_Rank/UI_Rank_Item.ts.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "4.0.24",
+  "importer": "typescript",
+  "imported": true,
+  "uuid": "d37c0304-c861-4f3f-bc34-cf3bccb40394",
+  "files": [],
+  "subMetas": {},
+  "userData": {}
+}

+ 32 - 23
Flowers/assets/module_game/ui/UI_Settings/UI_Settings.ts

@@ -8,7 +8,7 @@ import { Root } from '../../game/process/Root';
 import { ch } from '../../../ch/ch';
 import { button_Sound, SoundName } from '../../../module_extra/Customize/Customize_Sound';
 import { ani_ui, toggleMoveTo } from '../../../module_extra/Customize/Customize_Ani';
-import { UI_Hall } from '../UI_Hall/UI_Hall';
+import { UIName } from '../UI/UI_ClassManager';
 const { ccclass, property } = _decorator;
 
 @ccclass('UI_Settings')
@@ -21,20 +21,7 @@ export class UI_Settings extends ui_base {
 
     protected onCreated() {
         const layout = this.getLayout<Layout_Settings>();
-        //区分场景
-        if (UIManager.getInstance().getDownUI().name === 'UI_Hall') {
-            layout.Return_Btn.node.active = false;
-            layout.Restart_Btn.node.active = false;
-            layout.Question_Btn.node.active = ch.sdk.createFeedbackButton(ch.util.getBtnOp(layout.Question_Btn.node));
-        }
-
-        else if (UIManager.getInstance().getDownUI().name === 'UI_Main') {
-            layout.Return_Btn.node.active = true;
-            layout.Restart_Btn.node.active = true;
-            layout.Question_Btn.node.active = false;
-        }
-
-        ani_ui(layout.Close_Btn.node.parent);
+        this.showPanel();
 
         this.onButtonEvent(layout.Close_Btn, () => {
             button_Sound(SoundName.clickUI);
@@ -43,38 +30,60 @@ export class UI_Settings extends ui_base {
         });
 
         this.onButtonEvent(layout.Return_Btn, async () => {
-            UIManager.getInstance().closeAllUI();
-            UIManager.getInstance().pushUI(UI_Hall);
+            UIManager.getInstance().DestoryAllUI();
+            UIManager.getInstance().pushUI(UIName.HALL);
         });
 
         layout.Music_Toggle.isChecked = ch.audio.volumeMusic != 0;
         layout.Sound_Toggle.isChecked = ch.audio.switchEffect;
         layout.Vibrate_Toggle.isChecked = Root.getInstance().Vibrate;
 
-        toggleMoveTo(layout.Music_Toggle.node.getChildByName('Sprite'), this.offset[ch.audio.volumeMusic],0);
-        toggleMoveTo(layout.Sound_Toggle.node.getChildByName('Sprite'), this.offset[ch.audio.switchEffect ? 1 : 0],0);
-        toggleMoveTo(layout.Vibrate_Toggle.node.getChildByName('Sprite'), this.offset[Root.getInstance().Vibrate ? 1 : 0],0);
+        toggleMoveTo(layout.Music_Toggle.node.getChildByName('Sprite'), this.offset[ch.audio.volumeMusic], 0);
+        toggleMoveTo(layout.Sound_Toggle.node.getChildByName('Sprite'), this.offset[ch.audio.switchEffect ? 1 : 0], 0);
+        toggleMoveTo(layout.Vibrate_Toggle.node.getChildByName('Sprite'), this.offset[Root.getInstance().Vibrate ? 1 : 0], 0);
 
         this.onToggleEvent(layout.Music_Toggle, (toggle) => {
             button_Sound(SoundName.clickUI);
             ch.audio.volumeMusic = layout.Music_Toggle.isChecked ? 1 : 0;
-            toggleMoveTo(layout.Music_Toggle.node.getChildByName('Sprite'), this.offset[ch.audio.volumeMusic],0.1);
+            toggleMoveTo(layout.Music_Toggle.node.getChildByName('Sprite'), this.offset[ch.audio.volumeMusic], 0.1);
             ch.audio.save();
         });
 
         this.onToggleEvent(layout.Sound_Toggle, (toggle) => {
             button_Sound(SoundName.clickUI);
             ch.audio.switchEffect = layout.Sound_Toggle.isChecked;
-            toggleMoveTo(layout.Sound_Toggle.node.getChildByName('Sprite'), this.offset[ch.audio.switchEffect ? 1 : 0],0.1);
+            toggleMoveTo(layout.Sound_Toggle.node.getChildByName('Sprite'), this.offset[ch.audio.switchEffect ? 1 : 0], 0.1);
             ch.audio.save();
         });
 
         this.onToggleEvent(layout.Vibrate_Toggle, (toggle) => {
             button_Sound(SoundName.clickUI);
             Root.getInstance().Vibrate = layout.Vibrate_Toggle.isChecked;
-            toggleMoveTo(layout.Vibrate_Toggle.node.getChildByName('Sprite'), this.offset[Root.getInstance().Vibrate ? 1 : 0],0.1);
+            toggleMoveTo(layout.Vibrate_Toggle.node.getChildByName('Sprite'), this.offset[Root.getInstance().Vibrate ? 1 : 0], 0.1);
         });
     }
+
+    public showPanel(): void {
+        super.showPanel();
+        const layout = this.getLayout<Layout_Settings>();
+        ani_ui(layout.Close_Btn.node.parent);
+        //区分场景
+        if (UIManager.getInstance().getDownUIName() === UIName.HALL) {
+            layout.Return_Btn.node.active = false;
+            layout.Restart_Btn.node.active = false;
+            layout.Question_Btn.node.active = ch.sdk.createFeedbackButton(ch.util.getBtnOp(layout.Question_Btn.node));
+        }
+
+        else if (UIManager.getInstance().getDownUIName() === UIName.MAIN) {
+            layout.Return_Btn.node.active = true;
+            layout.Restart_Btn.node.active = true;
+            layout.Question_Btn.node.active = false;
+        }
+    }
+
+    public new_close(): void {
+        super.new_close();
+    }
 }
 
 

+ 40 - 1
Flowers/assets/module_game/ui/UI_Store/Store.prefab

@@ -32,10 +32,13 @@
       },
       {
         "__id__": 75
+      },
+      {
+        "__id__": 77
       }
     ],
     "_prefab": {
-      "__id__": 77
+      "__id__": 79
     },
     "_lpos": {
       "__type__": "cc.Vec3",
@@ -1632,6 +1635,42 @@
     "fileId": "94l/fPFzNIP5hhcrk8OCr+"
   },
   {
+    "__type__": "cc.Widget",
+    "_name": "",
+    "_objFlags": 0,
+    "__editorExtras__": {},
+    "node": {
+      "__id__": 1
+    },
+    "_enabled": true,
+    "__prefab": {
+      "__id__": 78
+    },
+    "_alignFlags": 45,
+    "_target": null,
+    "_left": 0,
+    "_right": 0,
+    "_top": 0,
+    "_bottom": 0,
+    "_horizontalCenter": 0,
+    "_verticalCenter": 0,
+    "_isAbsLeft": true,
+    "_isAbsRight": true,
+    "_isAbsTop": true,
+    "_isAbsBottom": true,
+    "_isAbsHorizontalCenter": true,
+    "_isAbsVerticalCenter": true,
+    "_originalWidth": 750,
+    "_originalHeight": 1334,
+    "_alignMode": 2,
+    "_lockFlags": 0,
+    "_id": ""
+  },
+  {
+    "__type__": "cc.CompPrefabInfo",
+    "fileId": "57r/Q+7r1CNru326JsRrDU"
+  },
+  {
     "__type__": "cc.PrefabInfo",
     "root": {
       "__id__": 1

Файловите разлики са ограничени, защото са твърде много
+ 426 - 103
Flowers/assets/module_game/ui/UI_Task/Task.prefab


+ 12 - 2
Flowers/assets/module_game/ui/UI_Task/TaskItem.ts

@@ -30,6 +30,7 @@ export class TaskItem extends Component {
     @property([SpriteFrame])
     private Btn_SpriteFrames: SpriteFrame[] = [];
 
+    private Type: number = 0;
     private Name: string = null;
     private State: Task_Reward_State = null;
 
@@ -39,6 +40,7 @@ export class TaskItem extends Component {
         console.log("info", info);
         this.Des_Label.string = info.task_text;
 
+        this.Type = type;
         this.Name = res.name;
         this.State = res.state;
 
@@ -103,12 +105,20 @@ export class TaskItem extends Component {
     }
 
     updateStorage(): void {
-        let res = Root.getInstance().player.get_task_state(1);
+        let res = Root.getInstance().player.get_task_state(this.Type);
         let index = res.findIndex(it => it.name == this.Name);
         if (this.State == Task_Reward_State.Claimed) {
             res[index].state = Task_Reward_State.Claimed;
         }
-        Root.getInstance().player.set_task_state(1, res);
+        Root.getInstance().player.set_task_state(this.Type, res);
+        //该类型不存在可领取的
+        if (!res.find(it => it.state == Task_Reward_State.Completed)) {
+            if(this.Type==1){
+                Root.getInstance().ui_update_event.emit(Root.getInstance().ui_update_event.key.UpdateTaskMrrwRedPoint);
+            }else if(this.Type==2){
+
+            }
+        }
     }
 }
 

+ 36 - 4
Flowers/assets/module_game/ui/UI_Task/UI_Task.ts

@@ -3,13 +3,14 @@ import ui_base from '../../../core/ui/ui_base';
 import { ModuleDef } from '../../../scripts/ModuleDef';
 import { GameUILayers } from '../../../core/ui/ui';
 import { Layout_Task } from './Layout_Task';
-import { UIManager } from '../UI/UIManager';
 import { toggleSlideInAndOut } from '../../../module_extra/Customize/Customize_Ani';
 import { button_Sound, SoundName } from '../../../module_extra/Customize/Customize_Sound';
 import { Table_Task } from '../../../module_extra/Table_Ts/Table_Task';
 import { TaskItem } from './TaskItem';
 import { Root } from '../../game/process/Root';
 import { Task_Reward_State } from '../../../module_extra/Customize/Customize_Type';
+import { Customize_RedPointMgr, NodeName } from '../../../module_extra/Customize/Customize_RedPointMgr';
+import { RedPointPersistType, RedPointState, RedPointType } from '../../../module_extra/Customize/Customize_RedPoint';
 const { ccclass, property } = _decorator;
 
 type page = 1 | 2;//1每日任务 2每周任务
@@ -17,6 +18,7 @@ type page = 1 | 2;//1每日任务 2每周任务
 @ccclass('UI_Task')
 export class UI_Task extends ui_base {
     private _data: Table_Task[];
+    private task_type: string[] = ['mrrw', 'mzrw'];
     private day_task_name: string[] = ['mrdl', 'gksp', 'xhbx', 'mrtg', 'wppp', 'cczh', 'mrjs', 'sjng', 'sxhd', 'sjjl', 'mrfx', 'gqbx'];
     private week_task_name: string[] = ['zddl', 'zdsj'];
     private day_task_reward_state: any[] = [];
@@ -30,7 +32,8 @@ export class UI_Task extends ui_base {
         const layout = this.getLayout<Layout_Task>();
         Root.getInstance().blurBg();
         this.initData();
-        
+        this.initRedPointTree();
+
         layout.onList = (item: Node, index: number) => {
             let res = this.day_task_reward_state.find(it => it.name == this.day_task_name[index]);
             console.log(res);
@@ -48,6 +51,12 @@ export class UI_Task extends ui_base {
         this.onToggleEvent(layout.T2_Toggle, (tg: Toggle, i: page) => { if (tg.isChecked) { this.show(i) } }, this, 2);
     }
 
+    public showPanel(): void {
+        super.showPanel();
+        const layout = this.getLayout<Layout_Task>();
+        toggleSlideInAndOut(layout.node, 0.3);
+    }
+
     private async show(t?: null | page) {
         if (t != null) {
             if (t == this.type) return;
@@ -81,7 +90,7 @@ export class UI_Task extends ui_base {
         }
     }
 
-    private initData(){
+    private initData() {
         this.day_task_reward_state = Root.getInstance().player.get_task_state(1) == undefined ? [] : Root.getInstance().player.get_task_state(1);
         console.log(",,,,,,,,,,", this.day_task_reward_state);
         let flag = true;
@@ -99,6 +108,29 @@ export class UI_Task extends ui_base {
         }
     }
 
+
+    private initRedPointTree() {
+        if (!Customize_RedPointMgr.instance.GetState(NodeName.task, this.task_type[0])) {
+            console.log("添加");
+            Customize_RedPointMgr.instance.Add(NodeName.task, this.task_type[0], NodeName.task, RedPointType.Enternal, RedPointPersistType.Permanent);
+            let count = this.day_task_reward_state.filter(it => it.state == Task_Reward_State.Completed).length;
+            Customize_RedPointMgr.instance.SetState(NodeName.task, this.task_type[0], count == 0 ? RedPointState.Hide : RedPointState.Show, count);
+        }
+
+        Customize_RedPointMgr.instance.Init(NodeName.task, this.task_type[0], this.OnMrrwShow.bind(this));
+
+        Root.getInstance().ui_update_event.on(Root.getInstance().ui_update_event.key.UpdateTaskMrrwRedPoint, this.OnMrrwHide, this);
+    }
+
+    private OnMrrwShow(state: RedPointState, data: number = 1) {
+        const layout = this.getLayout<Layout_Task>();
+        layout.T1_Toggle.node.getChildByName('hint_point').active = state === RedPointState.Show;
+    }
+
+    private OnMrrwHide() {
+        Customize_RedPointMgr.instance.SetState(NodeName.task, this.task_type[0], RedPointState.Hide);
+    }
+
     public new_close() {
         const layout = this.getLayout<Layout_Task>();
 
@@ -110,7 +142,7 @@ export class UI_Task extends ui_base {
             }
         };
 
-        toggleSlideInAndOut(layout.node, 0.5, onOneFinish);
+        toggleSlideInAndOut(layout.node, 0.3, onOneFinish);
     }
 }
 

+ 2 - 8
Flowers/assets/res/material/blur.mtl

@@ -5,7 +5,7 @@
   "__editorExtras__": {},
   "_native": "",
   "_effectAsset": {
-    "__uuid__": "d93dfa4b-84cc-4e4f-afe6-75257e804fd1",
+    "__uuid__": "60f7195c-ec2a-45eb-ba94-8955f60e81d0",
     "__expectedType__": "cc.EffectAsset"
   },
   "_techIdx": 0,
@@ -26,12 +26,6 @@
     }
   ],
   "_props": [
-    {
-      "size": {
-        "__type__": "cc.Vec2",
-        "x": 1280,
-        "y": 1280
-      }
-    }
+    {}
   ]
 }

+ 9 - 0
Flowers/assets/res/ui/box_award.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.2.0",
+  "importer": "directory",
+  "imported": true,
+  "uuid": "69547e55-63a5-47f4-bb9a-b8da695f3bac",
+  "files": [],
+  "subMetas": {},
+  "userData": {}
+}

BIN
Flowers/assets/res/ui/box_award/ch_gqbx.png


+ 134 - 0
Flowers/assets/res/ui/box_award/ch_gqbx.png.meta

@@ -0,0 +1,134 @@
+{
+  "ver": "1.0.27",
+  "importer": "image",
+  "imported": true,
+  "uuid": "2c096241-83bf-40c8-8e9e-ead1e246306c",
+  "files": [
+    ".json",
+    ".png"
+  ],
+  "subMetas": {
+    "6c48a": {
+      "importer": "texture",
+      "uuid": "2c096241-83bf-40c8-8e9e-ead1e246306c@6c48a",
+      "displayName": "ch_gqbx",
+      "id": "6c48a",
+      "name": "texture",
+      "userData": {
+        "wrapModeS": "clamp-to-edge",
+        "wrapModeT": "clamp-to-edge",
+        "imageUuidOrDatabaseUri": "2c096241-83bf-40c8-8e9e-ead1e246306c",
+        "isUuid": true,
+        "visible": false,
+        "minfilter": "linear",
+        "magfilter": "linear",
+        "mipfilter": "none",
+        "anisotropy": 0
+      },
+      "ver": "1.0.22",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    },
+    "f9941": {
+      "importer": "sprite-frame",
+      "uuid": "2c096241-83bf-40c8-8e9e-ead1e246306c@f9941",
+      "displayName": "ch_gqbx",
+      "id": "f9941",
+      "name": "spriteFrame",
+      "userData": {
+        "trimType": "auto",
+        "trimThreshold": 1,
+        "rotated": false,
+        "offsetX": 0,
+        "offsetY": 0,
+        "trimX": 0,
+        "trimY": 0,
+        "width": 156,
+        "height": 41,
+        "rawWidth": 156,
+        "rawHeight": 41,
+        "borderTop": 0,
+        "borderBottom": 0,
+        "borderLeft": 0,
+        "borderRight": 0,
+        "packable": true,
+        "pixelsToUnit": 100,
+        "pivotX": 0.5,
+        "pivotY": 0.5,
+        "meshType": 0,
+        "vertices": {
+          "rawPosition": [
+            -78,
+            -20.5,
+            0,
+            78,
+            -20.5,
+            0,
+            -78,
+            20.5,
+            0,
+            78,
+            20.5,
+            0
+          ],
+          "indexes": [
+            0,
+            1,
+            2,
+            2,
+            1,
+            3
+          ],
+          "uv": [
+            0,
+            41,
+            156,
+            41,
+            0,
+            0,
+            156,
+            0
+          ],
+          "nuv": [
+            0,
+            0,
+            1,
+            0,
+            0,
+            1,
+            1,
+            1
+          ],
+          "minPos": [
+            -78,
+            -20.5,
+            0
+          ],
+          "maxPos": [
+            78,
+            20.5,
+            0
+          ]
+        },
+        "isUuid": true,
+        "imageUuidOrDatabaseUri": "2c096241-83bf-40c8-8e9e-ead1e246306c@6c48a",
+        "atlasUuid": ""
+      },
+      "ver": "1.0.12",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    }
+  },
+  "userData": {
+    "type": "sprite-frame",
+    "hasAlpha": true,
+    "fixAlphaTransparencyArtifacts": false,
+    "redirect": "2c096241-83bf-40c8-8e9e-ead1e246306c@6c48a"
+  }
+}

BIN
Flowers/assets/res/ui/box_award/ch_tmc.png


+ 134 - 0
Flowers/assets/res/ui/box_award/ch_tmc.png.meta

@@ -0,0 +1,134 @@
+{
+  "ver": "1.0.27",
+  "importer": "image",
+  "imported": true,
+  "uuid": "0fb38a98-148a-4951-94aa-23c24a00faae",
+  "files": [
+    ".json",
+    ".png"
+  ],
+  "subMetas": {
+    "6c48a": {
+      "importer": "texture",
+      "uuid": "0fb38a98-148a-4951-94aa-23c24a00faae@6c48a",
+      "displayName": "ch_tmc",
+      "id": "6c48a",
+      "name": "texture",
+      "userData": {
+        "wrapModeS": "clamp-to-edge",
+        "wrapModeT": "clamp-to-edge",
+        "imageUuidOrDatabaseUri": "0fb38a98-148a-4951-94aa-23c24a00faae",
+        "isUuid": true,
+        "visible": false,
+        "minfilter": "linear",
+        "magfilter": "linear",
+        "mipfilter": "none",
+        "anisotropy": 0
+      },
+      "ver": "1.0.22",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    },
+    "f9941": {
+      "importer": "sprite-frame",
+      "uuid": "0fb38a98-148a-4951-94aa-23c24a00faae@f9941",
+      "displayName": "ch_tmc",
+      "id": "f9941",
+      "name": "spriteFrame",
+      "userData": {
+        "trimType": "auto",
+        "trimThreshold": 1,
+        "rotated": false,
+        "offsetX": 0,
+        "offsetY": 0,
+        "trimX": 0,
+        "trimY": 0,
+        "width": 750,
+        "height": 1334,
+        "rawWidth": 750,
+        "rawHeight": 1334,
+        "borderTop": 0,
+        "borderBottom": 0,
+        "borderLeft": 0,
+        "borderRight": 0,
+        "packable": true,
+        "pixelsToUnit": 100,
+        "pivotX": 0.5,
+        "pivotY": 0.5,
+        "meshType": 0,
+        "vertices": {
+          "rawPosition": [
+            -375,
+            -667,
+            0,
+            375,
+            -667,
+            0,
+            -375,
+            667,
+            0,
+            375,
+            667,
+            0
+          ],
+          "indexes": [
+            0,
+            1,
+            2,
+            2,
+            1,
+            3
+          ],
+          "uv": [
+            0,
+            1334,
+            750,
+            1334,
+            0,
+            0,
+            750,
+            0
+          ],
+          "nuv": [
+            0,
+            0,
+            1,
+            0,
+            0,
+            1,
+            1,
+            1
+          ],
+          "minPos": [
+            -375,
+            -667,
+            0
+          ],
+          "maxPos": [
+            375,
+            667,
+            0
+          ]
+        },
+        "isUuid": true,
+        "imageUuidOrDatabaseUri": "0fb38a98-148a-4951-94aa-23c24a00faae@6c48a",
+        "atlasUuid": ""
+      },
+      "ver": "1.0.12",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    }
+  },
+  "userData": {
+    "type": "sprite-frame",
+    "hasAlpha": true,
+    "fixAlphaTransparencyArtifacts": false,
+    "redirect": "0fb38a98-148a-4951-94aa-23c24a00faae@6c48a"
+  }
+}

BIN
Flowers/assets/res/ui/box_award/ch_wk.png


+ 134 - 0
Flowers/assets/res/ui/box_award/ch_wk.png.meta

@@ -0,0 +1,134 @@
+{
+  "ver": "1.0.27",
+  "importer": "image",
+  "imported": true,
+  "uuid": "04270281-0dd6-40b3-af30-4ac97ce793f5",
+  "files": [
+    ".json",
+    ".png"
+  ],
+  "subMetas": {
+    "6c48a": {
+      "importer": "texture",
+      "uuid": "04270281-0dd6-40b3-af30-4ac97ce793f5@6c48a",
+      "displayName": "ch_wk",
+      "id": "6c48a",
+      "name": "texture",
+      "userData": {
+        "wrapModeS": "clamp-to-edge",
+        "wrapModeT": "clamp-to-edge",
+        "imageUuidOrDatabaseUri": "04270281-0dd6-40b3-af30-4ac97ce793f5",
+        "isUuid": true,
+        "visible": false,
+        "minfilter": "linear",
+        "magfilter": "linear",
+        "mipfilter": "none",
+        "anisotropy": 0
+      },
+      "ver": "1.0.22",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    },
+    "f9941": {
+      "importer": "sprite-frame",
+      "uuid": "04270281-0dd6-40b3-af30-4ac97ce793f5@f9941",
+      "displayName": "ch_wk",
+      "id": "f9941",
+      "name": "spriteFrame",
+      "userData": {
+        "trimType": "auto",
+        "trimThreshold": 1,
+        "rotated": false,
+        "offsetX": 0,
+        "offsetY": 0,
+        "trimX": 0,
+        "trimY": 0,
+        "width": 603,
+        "height": 395,
+        "rawWidth": 603,
+        "rawHeight": 395,
+        "borderTop": 0,
+        "borderBottom": 0,
+        "borderLeft": 0,
+        "borderRight": 0,
+        "packable": true,
+        "pixelsToUnit": 100,
+        "pivotX": 0.5,
+        "pivotY": 0.5,
+        "meshType": 0,
+        "vertices": {
+          "rawPosition": [
+            -301.5,
+            -197.5,
+            0,
+            301.5,
+            -197.5,
+            0,
+            -301.5,
+            197.5,
+            0,
+            301.5,
+            197.5,
+            0
+          ],
+          "indexes": [
+            0,
+            1,
+            2,
+            2,
+            1,
+            3
+          ],
+          "uv": [
+            0,
+            395,
+            603,
+            395,
+            0,
+            0,
+            603,
+            0
+          ],
+          "nuv": [
+            0,
+            0,
+            1,
+            0,
+            0,
+            1,
+            1,
+            1
+          ],
+          "minPos": [
+            -301.5,
+            -197.5,
+            0
+          ],
+          "maxPos": [
+            301.5,
+            197.5,
+            0
+          ]
+        },
+        "isUuid": true,
+        "imageUuidOrDatabaseUri": "04270281-0dd6-40b3-af30-4ac97ce793f5@6c48a",
+        "atlasUuid": ""
+      },
+      "ver": "1.0.12",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    }
+  },
+  "userData": {
+    "type": "sprite-frame",
+    "hasAlpha": true,
+    "fixAlphaTransparencyArtifacts": false,
+    "redirect": "04270281-0dd6-40b3-af30-4ac97ce793f5@6c48a"
+  }
+}

BIN
Flowers/assets/res/ui/box_award/ch_xfk.png


+ 134 - 0
Flowers/assets/res/ui/box_award/ch_xfk.png.meta

@@ -0,0 +1,134 @@
+{
+  "ver": "1.0.27",
+  "importer": "image",
+  "imported": true,
+  "uuid": "46c85bc2-373a-466a-8279-8a8ebddeed81",
+  "files": [
+    ".json",
+    ".png"
+  ],
+  "subMetas": {
+    "6c48a": {
+      "importer": "texture",
+      "uuid": "46c85bc2-373a-466a-8279-8a8ebddeed81@6c48a",
+      "displayName": "ch_xfk",
+      "id": "6c48a",
+      "name": "texture",
+      "userData": {
+        "wrapModeS": "clamp-to-edge",
+        "wrapModeT": "clamp-to-edge",
+        "imageUuidOrDatabaseUri": "46c85bc2-373a-466a-8279-8a8ebddeed81",
+        "isUuid": true,
+        "visible": false,
+        "minfilter": "linear",
+        "magfilter": "linear",
+        "mipfilter": "none",
+        "anisotropy": 0
+      },
+      "ver": "1.0.22",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    },
+    "f9941": {
+      "importer": "sprite-frame",
+      "uuid": "46c85bc2-373a-466a-8279-8a8ebddeed81@f9941",
+      "displayName": "ch_xfk",
+      "id": "f9941",
+      "name": "spriteFrame",
+      "userData": {
+        "trimType": "auto",
+        "trimThreshold": 1,
+        "rotated": false,
+        "offsetX": 0,
+        "offsetY": 0,
+        "trimX": 0,
+        "trimY": 0,
+        "width": 132,
+        "height": 132,
+        "rawWidth": 132,
+        "rawHeight": 132,
+        "borderTop": 0,
+        "borderBottom": 0,
+        "borderLeft": 0,
+        "borderRight": 0,
+        "packable": true,
+        "pixelsToUnit": 100,
+        "pivotX": 0.5,
+        "pivotY": 0.5,
+        "meshType": 0,
+        "vertices": {
+          "rawPosition": [
+            -66,
+            -66,
+            0,
+            66,
+            -66,
+            0,
+            -66,
+            66,
+            0,
+            66,
+            66,
+            0
+          ],
+          "indexes": [
+            0,
+            1,
+            2,
+            2,
+            1,
+            3
+          ],
+          "uv": [
+            0,
+            132,
+            132,
+            132,
+            0,
+            0,
+            132,
+            0
+          ],
+          "nuv": [
+            0,
+            0,
+            1,
+            0,
+            0,
+            1,
+            1,
+            1
+          ],
+          "minPos": [
+            -66,
+            -66,
+            0
+          ],
+          "maxPos": [
+            66,
+            66,
+            0
+          ]
+        },
+        "isUuid": true,
+        "imageUuidOrDatabaseUri": "46c85bc2-373a-466a-8279-8a8ebddeed81@6c48a",
+        "atlasUuid": ""
+      },
+      "ver": "1.0.12",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    }
+  },
+  "userData": {
+    "type": "sprite-frame",
+    "hasAlpha": true,
+    "fixAlphaTransparencyArtifacts": false,
+    "redirect": "46c85bc2-373a-466a-8279-8a8ebddeed81@6c48a"
+  }
+}

BIN
Flowers/assets/res/ui/box_award/ch_xx.png


+ 134 - 0
Flowers/assets/res/ui/box_award/ch_xx.png.meta

@@ -0,0 +1,134 @@
+{
+  "ver": "1.0.27",
+  "importer": "image",
+  "imported": true,
+  "uuid": "3abd8450-8582-4510-9eeb-0a56e1d741fe",
+  "files": [
+    ".json",
+    ".png"
+  ],
+  "subMetas": {
+    "6c48a": {
+      "importer": "texture",
+      "uuid": "3abd8450-8582-4510-9eeb-0a56e1d741fe@6c48a",
+      "displayName": "ch_xx",
+      "id": "6c48a",
+      "name": "texture",
+      "userData": {
+        "wrapModeS": "clamp-to-edge",
+        "wrapModeT": "clamp-to-edge",
+        "imageUuidOrDatabaseUri": "3abd8450-8582-4510-9eeb-0a56e1d741fe",
+        "isUuid": true,
+        "visible": false,
+        "minfilter": "linear",
+        "magfilter": "linear",
+        "mipfilter": "none",
+        "anisotropy": 0
+      },
+      "ver": "1.0.22",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    },
+    "f9941": {
+      "importer": "sprite-frame",
+      "uuid": "3abd8450-8582-4510-9eeb-0a56e1d741fe@f9941",
+      "displayName": "ch_xx",
+      "id": "f9941",
+      "name": "spriteFrame",
+      "userData": {
+        "trimType": "auto",
+        "trimThreshold": 1,
+        "rotated": false,
+        "offsetX": 0,
+        "offsetY": 0,
+        "trimX": 0,
+        "trimY": 0,
+        "width": 86,
+        "height": 86,
+        "rawWidth": 86,
+        "rawHeight": 86,
+        "borderTop": 0,
+        "borderBottom": 0,
+        "borderLeft": 0,
+        "borderRight": 0,
+        "packable": true,
+        "pixelsToUnit": 100,
+        "pivotX": 0.5,
+        "pivotY": 0.5,
+        "meshType": 0,
+        "vertices": {
+          "rawPosition": [
+            -43,
+            -43,
+            0,
+            43,
+            -43,
+            0,
+            -43,
+            43,
+            0,
+            43,
+            43,
+            0
+          ],
+          "indexes": [
+            0,
+            1,
+            2,
+            2,
+            1,
+            3
+          ],
+          "uv": [
+            0,
+            86,
+            86,
+            86,
+            0,
+            0,
+            86,
+            0
+          ],
+          "nuv": [
+            0,
+            0,
+            1,
+            0,
+            0,
+            1,
+            1,
+            1
+          ],
+          "minPos": [
+            -43,
+            -43,
+            0
+          ],
+          "maxPos": [
+            43,
+            43,
+            0
+          ]
+        },
+        "isUuid": true,
+        "imageUuidOrDatabaseUri": "3abd8450-8582-4510-9eeb-0a56e1d741fe@6c48a",
+        "atlasUuid": ""
+      },
+      "ver": "1.0.12",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    }
+  },
+  "userData": {
+    "type": "sprite-frame",
+    "hasAlpha": true,
+    "fixAlphaTransparencyArtifacts": false,
+    "redirect": "3abd8450-8582-4510-9eeb-0a56e1d741fe@6c48a"
+  }
+}

BIN
Flowers/assets/res/ui/box_award/props4.png


+ 134 - 0
Flowers/assets/res/ui/box_award/props4.png.meta

@@ -0,0 +1,134 @@
+{
+  "ver": "1.0.27",
+  "importer": "image",
+  "imported": true,
+  "uuid": "13bece27-5f31-401b-a691-b2585e768adb",
+  "files": [
+    ".json",
+    ".png"
+  ],
+  "subMetas": {
+    "6c48a": {
+      "importer": "texture",
+      "uuid": "13bece27-5f31-401b-a691-b2585e768adb@6c48a",
+      "displayName": "props4",
+      "id": "6c48a",
+      "name": "texture",
+      "userData": {
+        "wrapModeS": "clamp-to-edge",
+        "wrapModeT": "clamp-to-edge",
+        "imageUuidOrDatabaseUri": "13bece27-5f31-401b-a691-b2585e768adb",
+        "isUuid": true,
+        "visible": false,
+        "minfilter": "linear",
+        "magfilter": "linear",
+        "mipfilter": "none",
+        "anisotropy": 0
+      },
+      "ver": "1.0.22",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    },
+    "f9941": {
+      "importer": "sprite-frame",
+      "uuid": "13bece27-5f31-401b-a691-b2585e768adb@f9941",
+      "displayName": "props4",
+      "id": "f9941",
+      "name": "spriteFrame",
+      "userData": {
+        "trimType": "auto",
+        "trimThreshold": 1,
+        "rotated": false,
+        "offsetX": 0,
+        "offsetY": 0,
+        "trimX": 0,
+        "trimY": 0,
+        "width": 112,
+        "height": 121,
+        "rawWidth": 112,
+        "rawHeight": 121,
+        "borderTop": 0,
+        "borderBottom": 0,
+        "borderLeft": 0,
+        "borderRight": 0,
+        "packable": true,
+        "pixelsToUnit": 100,
+        "pivotX": 0.5,
+        "pivotY": 0.5,
+        "meshType": 0,
+        "vertices": {
+          "rawPosition": [
+            -56,
+            -60.5,
+            0,
+            56,
+            -60.5,
+            0,
+            -56,
+            60.5,
+            0,
+            56,
+            60.5,
+            0
+          ],
+          "indexes": [
+            0,
+            1,
+            2,
+            2,
+            1,
+            3
+          ],
+          "uv": [
+            0,
+            121,
+            112,
+            121,
+            0,
+            0,
+            112,
+            0
+          ],
+          "nuv": [
+            0,
+            0,
+            1,
+            0,
+            0,
+            1,
+            1,
+            1
+          ],
+          "minPos": [
+            -56,
+            -60.5,
+            0
+          ],
+          "maxPos": [
+            56,
+            60.5,
+            0
+          ]
+        },
+        "isUuid": true,
+        "imageUuidOrDatabaseUri": "13bece27-5f31-401b-a691-b2585e768adb@6c48a",
+        "atlasUuid": ""
+      },
+      "ver": "1.0.12",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    }
+  },
+  "userData": {
+    "type": "sprite-frame",
+    "hasAlpha": true,
+    "fixAlphaTransparencyArtifacts": false,
+    "redirect": "13bece27-5f31-401b-a691-b2585e768adb@6c48a"
+  }
+}

BIN
Flowers/assets/res/ui/box_award/props5.png


+ 134 - 0
Flowers/assets/res/ui/box_award/props5.png.meta

@@ -0,0 +1,134 @@
+{
+  "ver": "1.0.27",
+  "importer": "image",
+  "imported": true,
+  "uuid": "42e6ca57-6d52-471d-a691-e6b932856737",
+  "files": [
+    ".json",
+    ".png"
+  ],
+  "subMetas": {
+    "6c48a": {
+      "importer": "texture",
+      "uuid": "42e6ca57-6d52-471d-a691-e6b932856737@6c48a",
+      "displayName": "props5",
+      "id": "6c48a",
+      "name": "texture",
+      "userData": {
+        "wrapModeS": "clamp-to-edge",
+        "wrapModeT": "clamp-to-edge",
+        "imageUuidOrDatabaseUri": "42e6ca57-6d52-471d-a691-e6b932856737",
+        "isUuid": true,
+        "visible": false,
+        "minfilter": "linear",
+        "magfilter": "linear",
+        "mipfilter": "none",
+        "anisotropy": 0
+      },
+      "ver": "1.0.22",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    },
+    "f9941": {
+      "importer": "sprite-frame",
+      "uuid": "42e6ca57-6d52-471d-a691-e6b932856737@f9941",
+      "displayName": "props5",
+      "id": "f9941",
+      "name": "spriteFrame",
+      "userData": {
+        "trimType": "auto",
+        "trimThreshold": 1,
+        "rotated": false,
+        "offsetX": 0,
+        "offsetY": 0,
+        "trimX": 0,
+        "trimY": 0,
+        "width": 109,
+        "height": 115,
+        "rawWidth": 109,
+        "rawHeight": 115,
+        "borderTop": 0,
+        "borderBottom": 0,
+        "borderLeft": 0,
+        "borderRight": 0,
+        "packable": true,
+        "pixelsToUnit": 100,
+        "pivotX": 0.5,
+        "pivotY": 0.5,
+        "meshType": 0,
+        "vertices": {
+          "rawPosition": [
+            -54.5,
+            -57.5,
+            0,
+            54.5,
+            -57.5,
+            0,
+            -54.5,
+            57.5,
+            0,
+            54.5,
+            57.5,
+            0
+          ],
+          "indexes": [
+            0,
+            1,
+            2,
+            2,
+            1,
+            3
+          ],
+          "uv": [
+            0,
+            115,
+            109,
+            115,
+            0,
+            0,
+            109,
+            0
+          ],
+          "nuv": [
+            0,
+            0,
+            1,
+            0,
+            0,
+            1,
+            1,
+            1
+          ],
+          "minPos": [
+            -54.5,
+            -57.5,
+            0
+          ],
+          "maxPos": [
+            54.5,
+            57.5,
+            0
+          ]
+        },
+        "isUuid": true,
+        "imageUuidOrDatabaseUri": "42e6ca57-6d52-471d-a691-e6b932856737@6c48a",
+        "atlasUuid": ""
+      },
+      "ver": "1.0.12",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    }
+  },
+  "userData": {
+    "type": "sprite-frame",
+    "hasAlpha": true,
+    "fixAlphaTransparencyArtifacts": false,
+    "redirect": "42e6ca57-6d52-471d-a691-e6b932856737@6c48a"
+  }
+}

BIN
Flowers/assets/res/ui/box_award/props6.png


+ 134 - 0
Flowers/assets/res/ui/box_award/props6.png.meta

@@ -0,0 +1,134 @@
+{
+  "ver": "1.0.27",
+  "importer": "image",
+  "imported": true,
+  "uuid": "74284049-44a0-4bce-8709-217787a61015",
+  "files": [
+    ".json",
+    ".png"
+  ],
+  "subMetas": {
+    "6c48a": {
+      "importer": "texture",
+      "uuid": "74284049-44a0-4bce-8709-217787a61015@6c48a",
+      "displayName": "props6",
+      "id": "6c48a",
+      "name": "texture",
+      "userData": {
+        "wrapModeS": "clamp-to-edge",
+        "wrapModeT": "clamp-to-edge",
+        "imageUuidOrDatabaseUri": "74284049-44a0-4bce-8709-217787a61015",
+        "isUuid": true,
+        "visible": false,
+        "minfilter": "linear",
+        "magfilter": "linear",
+        "mipfilter": "none",
+        "anisotropy": 0
+      },
+      "ver": "1.0.22",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    },
+    "f9941": {
+      "importer": "sprite-frame",
+      "uuid": "74284049-44a0-4bce-8709-217787a61015@f9941",
+      "displayName": "props6",
+      "id": "f9941",
+      "name": "spriteFrame",
+      "userData": {
+        "trimType": "auto",
+        "trimThreshold": 1,
+        "rotated": false,
+        "offsetX": 0,
+        "offsetY": 0,
+        "trimX": 0,
+        "trimY": 0,
+        "width": 115,
+        "height": 127,
+        "rawWidth": 115,
+        "rawHeight": 127,
+        "borderTop": 0,
+        "borderBottom": 0,
+        "borderLeft": 0,
+        "borderRight": 0,
+        "packable": true,
+        "pixelsToUnit": 100,
+        "pivotX": 0.5,
+        "pivotY": 0.5,
+        "meshType": 0,
+        "vertices": {
+          "rawPosition": [
+            -57.5,
+            -63.5,
+            0,
+            57.5,
+            -63.5,
+            0,
+            -57.5,
+            63.5,
+            0,
+            57.5,
+            63.5,
+            0
+          ],
+          "indexes": [
+            0,
+            1,
+            2,
+            2,
+            1,
+            3
+          ],
+          "uv": [
+            0,
+            127,
+            115,
+            127,
+            0,
+            0,
+            115,
+            0
+          ],
+          "nuv": [
+            0,
+            0,
+            1,
+            0,
+            0,
+            1,
+            1,
+            1
+          ],
+          "minPos": [
+            -57.5,
+            -63.5,
+            0
+          ],
+          "maxPos": [
+            57.5,
+            63.5,
+            0
+          ]
+        },
+        "isUuid": true,
+        "imageUuidOrDatabaseUri": "74284049-44a0-4bce-8709-217787a61015@6c48a",
+        "atlasUuid": ""
+      },
+      "ver": "1.0.12",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    }
+  },
+  "userData": {
+    "type": "sprite-frame",
+    "hasAlpha": true,
+    "fixAlphaTransparencyArtifacts": false,
+    "redirect": "74284049-44a0-4bce-8709-217787a61015@6c48a"
+  }
+}

BIN
Flowers/assets/res/ui/box_award/props7.png


+ 134 - 0
Flowers/assets/res/ui/box_award/props7.png.meta

@@ -0,0 +1,134 @@
+{
+  "ver": "1.0.27",
+  "importer": "image",
+  "imported": true,
+  "uuid": "46ac364e-7116-42ad-a88a-afd0cc3cd937",
+  "files": [
+    ".json",
+    ".png"
+  ],
+  "subMetas": {
+    "6c48a": {
+      "importer": "texture",
+      "uuid": "46ac364e-7116-42ad-a88a-afd0cc3cd937@6c48a",
+      "displayName": "props7",
+      "id": "6c48a",
+      "name": "texture",
+      "userData": {
+        "wrapModeS": "clamp-to-edge",
+        "wrapModeT": "clamp-to-edge",
+        "imageUuidOrDatabaseUri": "46ac364e-7116-42ad-a88a-afd0cc3cd937",
+        "isUuid": true,
+        "visible": false,
+        "minfilter": "linear",
+        "magfilter": "linear",
+        "mipfilter": "none",
+        "anisotropy": 0
+      },
+      "ver": "1.0.22",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    },
+    "f9941": {
+      "importer": "sprite-frame",
+      "uuid": "46ac364e-7116-42ad-a88a-afd0cc3cd937@f9941",
+      "displayName": "props7",
+      "id": "f9941",
+      "name": "spriteFrame",
+      "userData": {
+        "trimType": "auto",
+        "trimThreshold": 1,
+        "rotated": false,
+        "offsetX": 0,
+        "offsetY": 0,
+        "trimX": 0,
+        "trimY": 0,
+        "width": 128,
+        "height": 107,
+        "rawWidth": 128,
+        "rawHeight": 107,
+        "borderTop": 0,
+        "borderBottom": 0,
+        "borderLeft": 0,
+        "borderRight": 0,
+        "packable": true,
+        "pixelsToUnit": 100,
+        "pivotX": 0.5,
+        "pivotY": 0.5,
+        "meshType": 0,
+        "vertices": {
+          "rawPosition": [
+            -64,
+            -53.5,
+            0,
+            64,
+            -53.5,
+            0,
+            -64,
+            53.5,
+            0,
+            64,
+            53.5,
+            0
+          ],
+          "indexes": [
+            0,
+            1,
+            2,
+            2,
+            1,
+            3
+          ],
+          "uv": [
+            0,
+            107,
+            128,
+            107,
+            0,
+            0,
+            128,
+            0
+          ],
+          "nuv": [
+            0,
+            0,
+            1,
+            0,
+            0,
+            1,
+            1,
+            1
+          ],
+          "minPos": [
+            -64,
+            -53.5,
+            0
+          ],
+          "maxPos": [
+            64,
+            53.5,
+            0
+          ]
+        },
+        "isUuid": true,
+        "imageUuidOrDatabaseUri": "46ac364e-7116-42ad-a88a-afd0cc3cd937@6c48a",
+        "atlasUuid": ""
+      },
+      "ver": "1.0.12",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    }
+  },
+  "userData": {
+    "type": "sprite-frame",
+    "hasAlpha": true,
+    "fixAlphaTransparencyArtifacts": false,
+    "redirect": "46ac364e-7116-42ad-a88a-afd0cc3cd937@6c48a"
+  }
+}

BIN
Flowers/assets/res/ui/box_award/插花游戏 宝箱奖励效果图.png


+ 134 - 0
Flowers/assets/res/ui/box_award/插花游戏 宝箱奖励效果图.png.meta

@@ -0,0 +1,134 @@
+{
+  "ver": "1.0.27",
+  "importer": "image",
+  "imported": true,
+  "uuid": "d8c4ea82-e0d7-4eef-b644-81475efdcdd1",
+  "files": [
+    ".json",
+    ".png"
+  ],
+  "subMetas": {
+    "6c48a": {
+      "importer": "texture",
+      "uuid": "d8c4ea82-e0d7-4eef-b644-81475efdcdd1@6c48a",
+      "displayName": "插花游戏 宝箱奖励效果图",
+      "id": "6c48a",
+      "name": "texture",
+      "userData": {
+        "wrapModeS": "clamp-to-edge",
+        "wrapModeT": "clamp-to-edge",
+        "imageUuidOrDatabaseUri": "d8c4ea82-e0d7-4eef-b644-81475efdcdd1",
+        "isUuid": true,
+        "visible": false,
+        "minfilter": "linear",
+        "magfilter": "linear",
+        "mipfilter": "none",
+        "anisotropy": 0
+      },
+      "ver": "1.0.22",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    },
+    "f9941": {
+      "importer": "sprite-frame",
+      "uuid": "d8c4ea82-e0d7-4eef-b644-81475efdcdd1@f9941",
+      "displayName": "插花游戏 宝箱奖励效果图",
+      "id": "f9941",
+      "name": "spriteFrame",
+      "userData": {
+        "trimType": "auto",
+        "trimThreshold": 1,
+        "rotated": false,
+        "offsetX": 0,
+        "offsetY": 0,
+        "trimX": 0,
+        "trimY": 0,
+        "width": 750,
+        "height": 1334,
+        "rawWidth": 750,
+        "rawHeight": 1334,
+        "borderTop": 0,
+        "borderBottom": 0,
+        "borderLeft": 0,
+        "borderRight": 0,
+        "packable": true,
+        "pixelsToUnit": 100,
+        "pivotX": 0.5,
+        "pivotY": 0.5,
+        "meshType": 0,
+        "vertices": {
+          "rawPosition": [
+            -375,
+            -667,
+            0,
+            375,
+            -667,
+            0,
+            -375,
+            667,
+            0,
+            375,
+            667,
+            0
+          ],
+          "indexes": [
+            0,
+            1,
+            2,
+            2,
+            1,
+            3
+          ],
+          "uv": [
+            0,
+            1334,
+            750,
+            1334,
+            0,
+            0,
+            750,
+            0
+          ],
+          "nuv": [
+            0,
+            0,
+            1,
+            0,
+            0,
+            1,
+            1,
+            1
+          ],
+          "minPos": [
+            -375,
+            -667,
+            0
+          ],
+          "maxPos": [
+            375,
+            667,
+            0
+          ]
+        },
+        "isUuid": true,
+        "imageUuidOrDatabaseUri": "d8c4ea82-e0d7-4eef-b644-81475efdcdd1@6c48a",
+        "atlasUuid": ""
+      },
+      "ver": "1.0.12",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    }
+  },
+  "userData": {
+    "type": "sprite-frame",
+    "hasAlpha": false,
+    "fixAlphaTransparencyArtifacts": false,
+    "redirect": "d8c4ea82-e0d7-4eef-b644-81475efdcdd1@6c48a"
+  }
+}

+ 8 - 0
Flowers/assets/start/Start.ts

@@ -11,6 +11,14 @@ const _preloadBundles = [ModuleDef.EXTRA, ModuleDef.BASIC, ModuleDef.GAME];
 //预加载资源
 const _preloadRes = [
     { bundle: ModuleDef.GAME, url: 'prefab/FP' },
+    // { bundle: ModuleDef.GAME, url: 'ui/UI_Hall/Hall' },
+    // { bundle: ModuleDef.GAME, url: 'ui/UI_Hall_Up/Hall_Up' },
+    // { bundle: ModuleDef.GAME, url: 'ui/UI_HomePage/HomePage' },
+    // { bundle: ModuleDef.GAME, url: 'ui/UI_Task/Task' },
+    // { bundle: ModuleDef.GAME, url: 'ui/UI_Rank/Rank' },
+    // { bundle: ModuleDef.GAME, url: 'ui/UI_Store/Store' },
+    // { bundle: ModuleDef.GAME, url: 'ui/UI_Collection/Collection' },
+    // { bundle: ModuleDef.GAME, url: 'ui/UI_Main/Main' },
 ];
 //
 const _loadingText = ['Loading.', 'Loading..', 'Loading...'];

+ 2 - 2
Flowers/assets/start/start.scene

@@ -1,7 +1,7 @@
 [
   {
     "__type__": "cc.SceneAsset",
-    "_name": "start",
+    "_name": "",
     "_objFlags": 0,
     "__editorExtras__": {},
     "_native": "",
@@ -1300,7 +1300,7 @@
     "wx_conf": {
       "__id__": 37
     },
-    "is_local": false,
+    "is_local": true,
     "server": 2,
     "serverIP": "http://192.168.1.120:8787/v1",
     "serverIP1": "",

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/assets/internal/import/06/06585a170.json


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/assets/start-scene/import/03/03882949c.json


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/assets/start-scene/index.js


BIN
Flowers/build/wechatgame/assets/start-scene/native/2a/2a612619-46e9-4c03-a4d6-97837fbdc399.png


BIN
Flowers/build/wechatgame/assets/start-scene/native/af/af8025bd-86da-4e48-88ac-053a38fc3b6d.png


BIN
Flowers/build/wechatgame/assets/start-scene/native/c8/c84ab4d2-8257-476c-a097-2ca0f0c978a0.png


BIN
Flowers/build/wechatgame/assets/start-scene/native/d8/d84d12f9-7d9a-4f64-acf2-1c0fc350c172.png


BIN
Flowers/build/wechatgame/assets/start-scene/native/fc/fcff2dfe-82af-47f6-b2d1-1d36763976fb.png


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/cocos-js/_virtual_cc-147f694a.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/cocos-js/_virtual_cc-8643bb90.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/cocos-js/cc.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/cocos-js/spine.wasm-44fdc6cc.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/cocos-js/spine.wasm-5b4ed55f.js


+ 1 - 1
Flowers/build/wechatgame/game.js

@@ -50,7 +50,7 @@ System.warmup({
     },
 });
 
-firstScreen.start('default', 'default', 'false').then(() => {
+firstScreen.start('default', 'default', 'true').then(() => {
     return System.import('./application.js');
 }).then((module) => {
     return firstScreen.setProgress(0.2).then(() => Promise.resolve(module));

+ 8 - 4
Flowers/build/wechatgame/game.json

@@ -8,18 +8,22 @@
     },
     "subpackages": [
         {
-            "name": "main",
-            "root": "subpackages/main/"
+            "name": "resources",
+            "root": "subpackages/resources/"
         },
         {
-            "name": "module_basic",
-            "root": "subpackages/module_basic/"
+            "name": "main",
+            "root": "subpackages/main/"
         },
         {
             "name": "module_extra",
             "root": "subpackages/module_extra/"
         },
         {
+            "name": "module_basic",
+            "root": "subpackages/module_basic/"
+        },
+        {
             "name": "module_game",
             "root": "subpackages/module_game/"
         }

Файловите разлики са ограничени, защото са твърде много
+ 1 - 1
Flowers/build/wechatgame/src/chunks/bundle.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/src/settings.json


+ 1 - 1
Flowers/build/wechatgame/subpackages/module_extra/config.json

@@ -1 +1 @@
-{"importBase":"import","nativeBase":"native","name":"module_extra","deps":[],"uuids":["623dMNWwBJtq6oUTtB5J8I","9eZqcT7GNJLbCdBxAt21Jt"],"paths":{"0":["Sound/clickUI",0,1],"1":["Table_Json/level",1,1]},"scenes":{},"packs":{},"versions":{"import":[],"native":[]},"redirect":[],"debug":false,"extensionMap":{},"hasPreloadScript":true,"dependencyRelationships":{},"types":["cc.AudioClip","cc.JsonAsset"]}
+{"importBase":"import","nativeBase":"native","name":"module_extra","deps":[],"uuids":["45oLg1w+VKAo4iyVh6ZJiX","48kY261ntI8p/HEiPxcAWo","623dMNWwBJtq6oUTtB5J8I","9eZqcT7GNJLbCdBxAt21Jt","d5mmn9eHhPvZ/orKGC1f6w"],"paths":{"0":["Table_Json/task",1,1],"1":["Table_Json/store",1,1],"2":["Sound/clickUI",0,1],"3":["Table_Json/level",1,1],"4":["Table_Json/flowers",1,1]},"scenes":{},"packs":{},"versions":{"import":[],"native":[]},"redirect":[],"debug":false,"extensionMap":{},"hasPreloadScript":true,"dependencyRelationships":{},"types":["cc.AudioClip","cc.JsonAsset"]}

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/subpackages/module_extra/game.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/subpackages/module_extra/import/45/45a0b835-c3e5-4a02-8e22-c9587a649897.json


+ 1 - 0
Flowers/build/wechatgame/subpackages/module_extra/import/48/48918dba-d67b-48f2-9fc7-1223f17005a8.json

@@ -0,0 +1 @@
+[1,0,0,[["cc.JsonAsset",["_name","json"],1]],[[0,0,1,3]],[[0,"store",[{"id":"1","name":"金币","gold_shop":"0","gold_num":"0","ad_shop":"1","ad_num":"1","icon":"1.png","award":"1:1:100:10000 "},{"id":"2","name":"铲子","gold_shop":"1","gold_num":"100","ad_shop":"1","ad_num":"1","icon":"2.png","award":"3:2:1:10000 "},{"id":"3","name":"水壶","gold_shop":"1","gold_num":"300","ad_shop":"1","ad_num":"1","icon":"3.png","award":"4:2:1:10000 "},{"id":"4","name":"冰冻","gold_shop":"1","gold_num":"100","ad_shop":"1","ad_num":"1","icon":"4.png","award":"5:2:1:10000 "},{"id":"5","name":"刷新","gold_shop":"1","gold_num":"300","ad_shop":"1","ad_num":"1","icon":"5.png","award":"6:2:1:10000 "}]]],0,0,[],[],[]]

+ 1 - 1
Flowers/build/wechatgame/subpackages/module_extra/import/9e/9e66a713-ec63-492d-b09d-07102ddb526d.json

@@ -1 +1 @@
-[1,0,0,[["cc.JsonAsset",["_name","json"],1]],[[0,0,1,3]],[[0,"level",[{"Id":"2001","level":"1","lname":"第1关","row":"2","col":"3","data1":"[[1,1,1],[1,1,1]]","data2":"1+0+1/2+0+2/1+0+1,0+0+1/3+0+2,4+0+3/0+1+0,3+0+4,4+5+0,5+0+5","time":"600","award ":"0 "}]]],0,0,[],[],[]]
+[1,0,0,[["cc.JsonAsset",["_name","json"],1]],[[0,0,1,3]],[[0,"level",[{"Id":"2001","level":"1","lname":"第1关","row":"2","col":"3","data1":"[[1,1,1],[1,1,1]]","data2":"1+0+1/2+0+2/1+0+1,0+0+1/3+0+2,4+0+3/0+1+0,3+0+4,4+5+0,5+0+5","time":"600","award":"0"}]]],0,0,[],[],[]]

+ 1 - 0
Flowers/build/wechatgame/subpackages/module_extra/import/d5/d59a69fd-7878-4fbd-9fe8-aca182d5feb0.json

@@ -0,0 +1 @@
+[1,0,0,[["cc.JsonAsset",["_name","json"],1]],[[0,0,1,3]],[[0,"flowers",[{"id":"1","name":"玫瑰","have_flowers":"1/2/3/4/5/6/7/8/9/10/11/12/13","award ":"1 "},{"id":"2","name":"百合","have_flowers":"14/15/16/17/18/19/20/21/22/23","award ":"2 "},{"id":"3","name":"郁金香","have_flowers":"24/25/26/27/28/29/30/31/32/33/34/35","award ":"3 "},{"id":"4","name":"海棠花","have_flowers":"36/37/38/39/40/41/42/43/44/45/46/47/48//49","award ":"4 "},{"id":"5","name":"菊花","have_flowers":"50/51/52/53/54/55/56/57/58/59/60/61/62//63/64/65/66/67/68/69","award ":"5 "},{"id":"6","name":"康乃馨","have_flowers":"70/71/72/73/74/75/76/77/78/79/80/81/82//83/84/85/86/87/88","award ":"6 "},{"id":"7","name":"荷花","have_flowers":"89/90/91/92/93/94/95/96/97/98","award ":"7 "},{"id":"8","name":"牵牛花","have_flowers":"99/100/101/102/103/104/105/106/107/108/109/110/111//112/113/114/115/116","award ":"8 "},{"id":"9","name":"梧桐花","have_flowers":"117/118/119/120/121/122/123/124/125/126/127/128/129//130/131/132","award ":"9 "},{"id":"10","name":"红掌","have_flowers":"133/134/135/136/137/138/139/140/141/142/143","award ":"10 "},{"id":"11","name":"蝴蝶兰","have_flowers":"144/145/146/147/148/149/150/151/152/153/154/155/156//157/158/159/160/161","award ":"11 "},{"id":"12","name":"静谧公主","have_flowers":"162/163/164/165/166/167/168/169/170/171/172/173/174//175/176/177/178","award ":"12 "},{"id":"13","name":"雪莲花","have_flowers":"179/180/181/182/183/184/185/186/187/188/189/190/191//192/193","award ":"13 "},{"id":"14","name":"薰衣草","have_flowers":"194/195/196/197/198/199/200/201/202/203/204/205/206","award ":"14 "}]]],0,0,[],[],[]]

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/subpackages/module_game/config.json


Файловите разлики са ограничени, защото са твърде много
+ 1 - 2
Flowers/build/wechatgame/subpackages/module_game/game.js


+ 0 - 0
Flowers/build/wechatgame/subpackages/module_game/import/b7/b7b94645-edda-459a-83c5-6ba67b3801c6.json → Flowers/build/wechatgame/subpackages/module_game/import/00/00238084-42cf-48eb-b392-296464d4227a.json


+ 0 - 0
Flowers/build/wechatgame/subpackages/module_game/import/ce/ceae4bf1-5b18-4389-9d7f-08aea48aa577.json → Flowers/build/wechatgame/subpackages/module_game/import/00/00ba69cc-8269-4a7f-a25f-8a945a121399.json


+ 1 - 0
Flowers/build/wechatgame/subpackages/module_game/import/00/00f4b37c-4be6-426f-ba78-94e7e51f24e9.json

@@ -0,0 +1 @@
+[1,0,0,["cc.ImageAsset"],0,[{"fmt":"0","w":0,"h":0},-1],[0],0,[],[],[]]

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/subpackages/module_game/import/01/0169dd550.json


+ 1 - 0
Flowers/build/wechatgame/subpackages/module_game/import/02/0205a476-13c0-4896-b978-ca51c930f408.json

@@ -0,0 +1 @@
+[1,0,0,["cc.ImageAsset"],0,[{"fmt":"0","w":0,"h":0},-1],[0],0,[],[],[]]

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/subpackages/module_game/import/02/028e5e9fd.json


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/subpackages/module_game/import/02/02e4bfa3b.json


+ 1 - 0
Flowers/build/wechatgame/subpackages/module_game/import/03/037a1091-dc2c-43cd-a624-d45a284914f8.json

@@ -0,0 +1 @@
+[1,0,0,["cc.ImageAsset"],0,[{"fmt":"0","w":0,"h":0},-1],[0],0,[],[],[]]

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/subpackages/module_game/import/03/03ab15490.json


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/subpackages/module_game/import/03/03b29a4eb.json


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/subpackages/module_game/import/03/03ebce07a.json


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
Flowers/build/wechatgame/subpackages/module_game/import/03/03fa3ef00.json


Някои файлове не бяха показани, защото твърде много файлове са промени