瀏覽代碼

2025-05-27 wws 修改结算数据

2025-05-27 wws 修改结算数据
Kziwws 1 周之前
父節點
當前提交
6518df6e04
共有 35 個文件被更改,包括 2040 次插入948 次删除
  1. 二進制
      assets/audios/sound/head_shot.mp3
  2. 14 0
      assets/audios/sound/head_shot.mp3.meta
  3. 1 1
      assets/data/csv/enemy.csv
  4. 1 1
      assets/data/csv/enemy_guns.csv
  5. 10 10
      assets/data/csv/levels.csv
  6. 5 5
      assets/prefabs/ui/arsenalUI.prefab
  7. 4 4
      assets/prefabs/ui/gunfightShootUI.prefab
  8. 686 64
      assets/prefabs/ui/settleUI.prefab
  9. 9 9
      assets/prefabs/ui/storeUI.prefab
  10. 9 9
      assets/prefabs/ui/tossBoomerangUI.prefab
  11. 230 148
      assets/prefabs/ui/upgradeGunUI.prefab
  12. 16 16
      assets/scenes/game.scene
  13. 3 0
      assets/scripts/core/base/BaseExp.ts
  14. 3 2
      assets/scripts/core/manager/StateManager.ts
  15. 4 3
      assets/scripts/data/Constants.ts
  16. 33 9
      assets/scripts/game/BuildEnemys.ts
  17. 17 11
      assets/scripts/game/Enemy.ts
  18. 9 8
      assets/scripts/game/Player.ts
  19. 4 4
      assets/scripts/items/item/TaskEnemyItem.ts
  20. 4 2
      assets/scripts/items/player/Bullet1.ts
  21. 4 2
      assets/scripts/ui/BuyBoomerangUI.ts
  22. 14 22
      assets/scripts/ui/GunfightShootUI.ts
  23. 1 0
      assets/scripts/ui/ObtainUI.ts
  24. 53 27
      assets/scripts/ui/SettleUI.ts
  25. 6 2
      assets/scripts/ui/StoreUI.ts
  26. 1 0
      assets/scripts/ui/SuccessUI.ts
  27. 3 0
      assets/scripts/ui/TossBoomerangUI.ts
  28. 6 4
      assets/scripts/ui/UpgradeGunUI.ts
  29. 56 19
      assets/scripts/utils/Utils.ts
  30. 二進制
      assets/textures/settle/AnJian_Lan.png
  31. 134 0
      assets/textures/settle/AnJian_Lan.png.meta
  32. 二進制
      assets/textures/settle/AnJian_Lv.png
  33. 134 0
      assets/textures/settle/AnJian_Lv.png.meta
  34. 1 1
      profiles/v2/packages/reference-image.json
  35. 565 565
      profiles/v2/packages/scene.json

二進制
assets/audios/sound/head_shot.mp3


+ 14 - 0
assets/audios/sound/head_shot.mp3.meta

@@ -0,0 +1,14 @@
+{
+  "ver": "1.0.0",
+  "importer": "audio-clip",
+  "imported": true,
+  "uuid": "42dbd94f-2283-4048-9607-c6ca5381a4cb",
+  "files": [
+    ".json",
+    ".mp3"
+  ],
+  "subMetas": {},
+  "userData": {
+    "downloadMode": 0
+  }
+}

+ 1 - 1
assets/data/csv/enemy.csv

@@ -2,7 +2,7 @@ ID,名称,名称多语言,"类型
 1_小兵
 2_BOSS",生命值,攻速(每几秒攻击一次),子弹数量,移速,使用武器,使用武器2,同一类兵种最小随机出兵间隔,同一类兵种最大随机出兵间隔,模型预制体,头像
 number,string,string,number,number,number,number,number,number,number,number,number,string,string
-id,name,name_lang,type,hp,atk_speed,bullet_number,speed,enemy_weapon_id_1,enemy_weapon_id_2,min_interval,max_interval,prb_name,headshot
+id,name,name_lang,type,hp,atk_speed,bullet_number,speed,weapon_id_1,weapon_id_2,min_interval,max_interval,prb_name,headshot
 10001,大兵,Soldier,1,70,1.5,1,1,1001,0,0,0.2,enemy,soldierPistol
 10002,狙击兵,Sniper,1,60,2.5,1,1.2,1002,0,0.1,0.3,enemy,sniperSoldier
 10003,盾牌兵,Shield Bearer,1,120,2,1,0.75,1001,1003,0.1,0.3,enemy,shieldSoldier

+ 1 - 1
assets/data/csv/enemy_guns.csv

@@ -1,6 +1,6 @@
 ID,名称,攻击力,盾的生命值,模型预制体,子弹的射速
 number,string,number,number,string,number
-id,gun_name,attack,shield_hp,gun_prb_name,bulletSpeed
+gun_id,gun_name,attack,shield_hp,gun_prb_name,bulletSpeed
 1001,大兵手枪,5,0,pistol,450
 1002,狙击兵狙击枪,10,0,sniper_rifle,680
 1003,盾牌兵盾牌,,75,shield,650

+ 10 - 10
assets/data/csv/levels.csv

@@ -2,16 +2,16 @@ ID,关卡名称,名字多语言,关卡任务,任务多语言,地图,玩家点位
 敌人类型_属性",敌人射击精准度
 number,string,string,string,string,string,number,number,string,string,string,string,number
 id,name,name_lang,task,task_lang,map,point,coefficient,reward_1,reward_2,unlock,dispose,precision
-1,任务1,Task1,击杀所有敌军,Kill all the enemy troops,map1,1,0,1001_150,1001_30,10016|1/10,10001_5|10002_1,0.2
-2,任务2,Task2,击杀所有敌军,Kill all the enemy troops,map1,2,0,1001_200,1001_30,10016|2/10,10001_3|10002_3,0.2
-3,任务3,Task3,击杀所有敌军,Kill all the enemy troops,map1,3,0,1001_250,1001_30,10016|3/10,10001_4|10002_2|10003_1,0.2
-4,任务4,Task4,击杀所有敌军,Kill all the enemy troops,map1,4,0.1,1001_300,1001_30,10016|4/10,10001_5|10002_3|10003_1,0.2
-5,任务5,Task5,击杀所有敌军,Kill all the enemy troops,map1,5,0.1,1001_350,1001_30,10016|5/10,10001_3|10002_4|10003_1,0.2
-6,任务6,Task6,击杀所有敌军,Kill all the enemy troops,map2,1,0.1,1001_400,1001_30,10016|6/10,10001_3|10002_5|10003_1,0.2
-7,任务7,Task7,击杀所有敌军,Kill all the enemy troops,map2,2,0.2,1001_450,1001_30,10016|7/10,10001_4|10002_3|10003_2,0.2
-8,任务8,Task8,击杀所有敌军,Kill all the enemy troops,map2,3,0.2,1001_500,1001_30,10016|8/10,10001_5|10002_2|10003_3,0.2
-9,任务9,Task9,击杀所有敌军,Kill all the enemy troops,map2,4,0.2,1001_550,1001_30,10016|9/10,10001_6|10002_3|10003_1,0.2
-10,任务10,Task10,击杀所有敌军,Kill all the enemy troops,map2,5,0.2,1001_600,1001_30,10016|10/10,10001_3|10002_5|20001_1,0.2
+1,任务1,Task1,击杀所有敌军,Kill all the enemy troops,map1,1,0,1001_150,1001_30,100016|1/10,10001_5|10002_1,0.2
+2,任务2,Task2,击杀所有敌军,Kill all the enemy troops,map1,2,0,1001_200,1001_30,100016|2/10,10001_3|10002_3,0.2
+3,任务3,Task3,击杀所有敌军,Kill all the enemy troops,map1,3,0,1001_250,1001_30,100016|3/10,10001_4|10002_2|10003_1,0.2
+4,任务4,Task4,击杀所有敌军,Kill all the enemy troops,map1,4,0.1,1001_300,1001_30,100016|4/10,10001_5|10002_3|10003_1,0.2
+5,任务5,Task5,击杀所有敌军,Kill all the enemy troops,map1,5,0.1,1001_350,1001_30,100016|5/10,10001_3|10002_4|10003_1,0.2
+6,任务6,Task6,击杀所有敌军,Kill all the enemy troops,map2,1,0.1,1001_400,1001_30,100016|6/10,10001_3|10002_5|10003_1,0.2
+7,任务7,Task7,击杀所有敌军,Kill all the enemy troops,map2,2,0.2,1001_450,1001_30,100016|7/10,10001_4|10002_3|10003_2,0.2
+8,任务8,Task8,击杀所有敌军,Kill all the enemy troops,map2,3,0.2,1001_500,1001_30,100016|8/10,10001_5|10002_2|10003_3,0.2
+9,任务9,Task9,击杀所有敌军,Kill all the enemy troops,map2,4,0.2,1001_550,1001_30,100016|9/10,10001_6|10002_3|10003_1,0.2
+10,任务10,Task10,击杀所有敌军,Kill all the enemy troops,map2,5,0.2,1001_600,1001_30,100016|10/10,10001_3|10002_5|20001_1,0.2
 11,任务11,Task11,击杀所有敌军,Kill all the enemy troops,map3,1,0.3,1001_650,1001_50,100014|1/10,10001_3|10002_5,0.2
 12,任务12,Task12,击杀所有敌军,Kill all the enemy troops,map3,2,0.3,1001_700,1001_50,100014|2/10,10001_3|10002_4|10003_1,0.2
 13,任务13,Task13,击杀所有敌军,Kill all the enemy troops,map3,3,0.3,1001_750,1001_50,100014|3/10,10001_3|10002_4|10003_2,0.2

+ 5 - 5
assets/prefabs/ui/arsenalUI.prefab

@@ -177,7 +177,7 @@
     "_lpos": {
       "__type__": "cc.Vec3",
       "x": -287.064,
-      "y": 737.3320000000001,
+      "y": 737.332,
       "z": 0
     },
     "_lrot": {
@@ -410,7 +410,7 @@
     "_lpos": {
       "__type__": "cc.Vec3",
       "x": 0,
-      "y": 729.0780000000001,
+      "y": 729.078,
       "z": 0
     },
     "_lrot": {
@@ -6343,7 +6343,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 720,
-      "height": 1600.0000000000002
+      "height": 1600
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -8523,7 +8523,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 100,
-      "height": 100.00000000000028
+      "height": 100.00000000000006
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -8600,7 +8600,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 720,
-      "height": 1600.0000000000002
+      "height": 1600
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",

+ 4 - 4
assets/prefabs/ui/gunfightShootUI.prefab

@@ -813,7 +813,7 @@
     "_lpos": {
       "__type__": "cc.Vec3",
       "x": 80,
-      "y": 0.918,
+      "y": 0,
       "z": 0
     },
     "_lrot": {
@@ -909,8 +909,8 @@
     },
     "_contentSize": {
       "__type__": "cc.Size",
-      "width": 34.869140625,
-      "height": 27.72
+      "width": 37.869140625,
+      "height": 30.72
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -965,7 +965,7 @@
     "_isUnderline": false,
     "_underlineHeight": 2,
     "_cacheMode": 0,
-    "_enableOutline": false,
+    "_enableOutline": true,
     "_outlineColor": {
       "__type__": "cc.Color",
       "r": 0,

File diff suppressed because it is too large
+ 686 - 64
assets/prefabs/ui/settleUI.prefab


+ 9 - 9
assets/prefabs/ui/storeUI.prefab

@@ -458,7 +458,7 @@
     },
     "_lpos": {
       "__type__": "cc.Vec3",
-      "x": 190.2393035888672,
+      "x": 178.2393035888672,
       "y": 0,
       "z": 0
     },
@@ -661,7 +661,7 @@
     },
     "_contentSize": {
       "__type__": "cc.Size",
-      "width": 176.47860717773438,
+      "width": 152.47860717773438,
       "height": 74
     },
     "_anchorPoint": {
@@ -740,8 +740,8 @@
       "height": 40
     },
     "_startAxis": 0,
-    "_paddingLeft": 102,
-    "_paddingRight": 52,
+    "_paddingLeft": 90,
+    "_paddingRight": 40,
     "_paddingTop": 0,
     "_paddingBottom": 0,
     "_spacingX": 0,
@@ -801,7 +801,7 @@
     },
     "_lpos": {
       "__type__": "cc.Vec3",
-      "x": 379.71791076660156,
+      "x": 343.71791076660156,
       "y": 0,
       "z": 0
     },
@@ -1004,7 +1004,7 @@
     },
     "_contentSize": {
       "__type__": "cc.Size",
-      "width": 176.47860717773438,
+      "width": 152.47860717773438,
       "height": 74
     },
     "_anchorPoint": {
@@ -1083,8 +1083,8 @@
       "height": 40
     },
     "_startAxis": 0,
-    "_paddingLeft": 102,
-    "_paddingRight": 52,
+    "_paddingLeft": 90,
+    "_paddingRight": 40,
     "_paddingTop": 0,
     "_paddingBottom": 0,
     "_spacingX": 0,
@@ -1128,7 +1128,7 @@
     },
     "_contentSize": {
       "__type__": "cc.Size",
-      "width": 467.95721435546875,
+      "width": 419.95721435546875,
       "height": 100
     },
     "_anchorPoint": {

+ 9 - 9
assets/prefabs/ui/tossBoomerangUI.prefab

@@ -560,7 +560,7 @@
     },
     "_lpos": {
       "__type__": "cc.Vec3",
-      "x": 88.23930358886719,
+      "x": 76.23930358886719,
       "y": 0,
       "z": 0
     },
@@ -763,7 +763,7 @@
     },
     "_contentSize": {
       "__type__": "cc.Size",
-      "width": 176.47860717773438,
+      "width": 152.47860717773438,
       "height": 74
     },
     "_anchorPoint": {
@@ -842,8 +842,8 @@
       "height": 40
     },
     "_startAxis": 0,
-    "_paddingLeft": 102,
-    "_paddingRight": 52,
+    "_paddingLeft": 90,
+    "_paddingRight": 40,
     "_paddingTop": 0,
     "_paddingBottom": 0,
     "_spacingX": 0,
@@ -903,7 +903,7 @@
     },
     "_lpos": {
       "__type__": "cc.Vec3",
-      "x": 283.9786071777344,
+      "x": 241.71791076660156,
       "y": 0,
       "z": 0
     },
@@ -1106,7 +1106,7 @@
     },
     "_contentSize": {
       "__type__": "cc.Size",
-      "width": 176.47860717773438,
+      "width": 152.47860717773438,
       "height": 74
     },
     "_anchorPoint": {
@@ -1185,8 +1185,8 @@
       "height": 40
     },
     "_startAxis": 0,
-    "_paddingLeft": 102,
-    "_paddingRight": 52,
+    "_paddingLeft": 90,
+    "_paddingRight": 40,
     "_paddingTop": 0,
     "_paddingBottom": 0,
     "_spacingX": 0,
@@ -1230,7 +1230,7 @@
     },
     "_contentSize": {
       "__type__": "cc.Size",
-      "width": 378.4786071777344,
+      "width": 317.95721435546875,
       "height": 100
     },
     "_anchorPoint": {

File diff suppressed because it is too large
+ 230 - 148
assets/prefabs/ui/upgradeGunUI.prefab


+ 16 - 16
assets/scenes/game.scene

@@ -301,7 +301,7 @@
         "__id__": 141
       }
     ],
-    "_active": true,
+    "_active": false,
     "_components": [
       {
         "__id__": 144
@@ -1321,7 +1321,7 @@
     "_prefab": null,
     "_lpos": {
       "__type__": "cc.Vec3",
-      "x": 190.2393035888672,
+      "x": 178.2393035888672,
       "y": 0,
       "z": 0
     },
@@ -1495,7 +1495,7 @@
     "__prefab": null,
     "_contentSize": {
       "__type__": "cc.Size",
-      "width": 176.47860717773438,
+      "width": 152.47860717773438,
       "height": 74
     },
     "_anchorPoint": {
@@ -1562,8 +1562,8 @@
       "height": 40
     },
     "_startAxis": 0,
-    "_paddingLeft": 102,
-    "_paddingRight": 52,
+    "_paddingLeft": 90,
+    "_paddingRight": 40,
     "_paddingTop": 0,
     "_paddingBottom": 0,
     "_spacingX": 0,
@@ -1604,7 +1604,7 @@
     "_prefab": null,
     "_lpos": {
       "__type__": "cc.Vec3",
-      "x": 379.71791076660156,
+      "x": 343.71791076660156,
       "y": 0,
       "z": 0
     },
@@ -1778,7 +1778,7 @@
     "__prefab": null,
     "_contentSize": {
       "__type__": "cc.Size",
-      "width": 176.47860717773438,
+      "width": 152.47860717773438,
       "height": 74
     },
     "_anchorPoint": {
@@ -1845,8 +1845,8 @@
       "height": 40
     },
     "_startAxis": 0,
-    "_paddingLeft": 102,
-    "_paddingRight": 52,
+    "_paddingLeft": 90,
+    "_paddingRight": 40,
     "_paddingTop": 0,
     "_paddingBottom": 0,
     "_spacingX": 0,
@@ -1871,7 +1871,7 @@
     "__prefab": null,
     "_contentSize": {
       "__type__": "cc.Size",
-      "width": 467.95721435546875,
+      "width": 419.95721435546875,
       "height": 100
     },
     "_anchorPoint": {
@@ -1970,8 +1970,8 @@
     "_prefab": null,
     "_lpos": {
       "__type__": "cc.Vec3",
-      "x": 263.1960000000001,
-      "y": 736.2250000000001,
+      "x": 289.061,
+      "y": 736.225,
       "z": 0
     },
     "_lrot": {
@@ -2121,8 +2121,8 @@
     "_alignFlags": 33,
     "_target": null,
     "_left": 0,
-    "_right": 0.07264444444444441,
-    "_top": 20.274999999999977,
+    "_right": 0.03672083333333345,
+    "_top": 20.27500000000009,
     "_bottom": 0,
     "_horizontalCenter": 0,
     "_verticalCenter": 0,
@@ -2836,7 +2836,7 @@
     "_isUnderline": false,
     "_underlineHeight": 2,
     "_cacheMode": 0,
-    "_enableOutline": true,
+    "_enableOutline": false,
     "_outlineColor": {
       "__type__": "cc.Color",
       "r": 0,
@@ -3158,7 +3158,7 @@
     "_isUnderline": false,
     "_underlineHeight": 2,
     "_cacheMode": 0,
-    "_enableOutline": true,
+    "_enableOutline": false,
     "_outlineColor": {
       "__type__": "cc.Color",
       "r": 0,

+ 3 - 0
assets/scripts/core/base/BaseExp.ts

@@ -4,6 +4,8 @@ import { Logger } from '../../extend/Logger';
 import { uiMgr } from '../manager/UIManager';
 import { eventEmitter } from '../event/EventEmitter';
 import { initAutoBindings } from '../../extend/AutoBind';
+import { Constants } from '../../data/Constants';
+import { audioMgr } from '../manager/AudioManager';
 const { ccclass, property } = _decorator;
 
 @ccclass('BaseExp')
@@ -89,6 +91,7 @@ export class BaseExp extends Component {
      * @param customEventData 数据
      */
     public onBtnClicked(event:EventTouch, customEventData:any) {
+        audioMgr.playOneShot(Constants.audios.click);
         let btnName = event.target.name;
         if(btnName === 'close_btn'){
            this.close();

+ 3 - 2
assets/scripts/core/manager/StateManager.ts

@@ -2,6 +2,7 @@ import { _decorator, Label, Node } from 'cc';
 import { Singleton } from './Singleton';
 import { Constants } from '../../data/Constants';
 import { userIns } from '../../data/UserData';
+import { Utils } from '../../utils/Utils';
 const { ccclass, property } = _decorator;
 
 @ccclass('StateManager')
@@ -47,9 +48,9 @@ class StateManager extends Singleton{
      */
     private updateSingleUI(field: string, com: Label|any): void {
         if(field == Constants.gold){//金币数量
-            com.string = `${userIns.data.gold}`;
+            com.string = `${Utils.numberToString(userIns.data.gold)}`;
         }else if(field == Constants.diamond){//钻石数量
-            com.string = `${userIns.data.diamond}`;
+            com.string = `${Utils.numberToString(userIns.data.diamond)}`;
         }else if(field == Constants.levelTask){//任务数据变化
         }
     }

+ 4 - 3
assets/scripts/data/Constants.ts

@@ -1,3 +1,4 @@
+import { Enemy } from "../game/Enemy";
 
 const Constants = {
     //是否是测试包
@@ -14,8 +15,7 @@ const Constants = {
     //通知事件类型
     eventName: {
         magazine_num_change:'magazine_num_change', //弹夹子弹颗数发生变化  
-        battele_end: 'battele-end', //战斗结束
-        slide_receive_change:'slide_receive_change', //侧边栏领取奖励UI变化  
+        enemy_num_change: 'enemy_num_change', //敌人数量发生变化
     },
 
     //音效
@@ -35,7 +35,8 @@ const Constants = {
         Tank_Attack: "sound/Tank_Attack",
         Tank_Explosion: "sound/Tank_Explosion",
         upgrade: "sound/upgrade",
-        victory: "sound/victory"
+        victory: "sound/victory",
+        head_shot: "sound/head_shot"
     },
 
     //动态bun

+ 33 - 9
assets/scripts/game/BuildEnemys.ts

@@ -4,11 +4,12 @@ import { ResUtil } from '../utils/ResUtil';
 import { Game } from './Game';
 import { Utils } from '../utils/Utils';
 import { userIns } from '../data/UserData';
-import { Logger } from '../extend/Logger';
 import { Enemy } from './Enemy';
 import { GMap } from './GMap';
 import { uiMgr } from '../core/manager/UIManager';
 import { Constants } from '../data/Constants';
+import { audioMgr } from '../core/manager/AudioManager';
+import { eventEmitter } from '../core/event/EventEmitter';
 const { ccclass, property } = _decorator;
 
 @ccclass('BuildEnemys')
@@ -16,6 +17,12 @@ export class BuildEnemys extends Component {
     @property({type: Animation,tooltip:"开门动画"})
     public openDoor: Animation = null;
 
+    //敌人类型统计数组(保存每类敌人的总数量、剩余数量和配置数据)
+    public enemyTypeRecords: Array<{
+        enemyId: number, 
+        total: number, 
+        count: number, 
+        enemyData: any}> = [];
     //所有敌人数据
     public queueEnemys: Array<any> = [];
     //保存每一波临时数据定时器记录
@@ -103,10 +110,17 @@ export class BuildEnemys extends Component {
         //拆分并处理每个敌人配置
         data.dispose.split('|').forEach((item: string) => {
             const [enemyId, count] = item.split('_').map(Number);
-            const enemyData = Utils.clone(userIns.enemyTable).find((e: any) => e.id === enemyId);
-            //敌人生命成长系数{生命值*(1+系数)}
-            enemyData.hp = Math.floor((1 + data.coefficient) * enemyData.hp);
-            if (enemyData) {//根据类型分类
+            const enemyData = Utils.clone(userIns.enemyTable).find((e: any) => e.id == enemyId);
+            //记录敌人类型统计
+            if (enemyData) {
+                this.enemyTypeRecords.push({
+                    enemyId,
+                    total: count,
+                    count: count,
+                    enemyData: Utils.clone(enemyData)
+                });
+                //敌人生命成长系数{生命值*(1+系数)}
+                enemyData.hp = Math.floor((1 + data.coefficient) * enemyData.hp);
                 if(enemyData.type === 2) { // BOSS类型
                     for(let i = 0; i < count; i++) {
                         bossEnemies.push({ ...enemyData });
@@ -160,12 +174,22 @@ export class BuildEnemys extends Component {
             || Game.I.isGameOver)return;
         //删除一个敌人
         Utils.remove(this.allEnemys,enemy);
-        this.allEnemys.forEach(e => {
-            e.addDiffHP();
-        });
+        this.allEnemys.forEach(e => e.addDiffHP());
+        //从敌人实例获取id
+        let record = this.enemyTypeRecords.find(record => record.enemyId == enemy.data?.id);
+        if(record) {
+           record.count = Math.max(record.count - 1, 0); 
+        }
+        //敌人数量改变
+        eventEmitter.dispatch(Constants.eventName.enemy_num_change);
         if(this.allEnemys.length <= 0){
+            audioMgr.playOneShot(Constants.audios.victory);
             Game.I.isGameOver = true;
-            uiMgr.show(Constants.popUIs.settleUI,[true,()=>{}]);
+            uiMgr.show(Constants.popUIs.settleUI,[{
+                isWin: true,
+                headShotNum: Game.I.player.headShotNum,
+                cb: ()=>{}
+            }]);
         }
     }
 

+ 17 - 11
assets/scripts/game/Enemy.ts

@@ -9,6 +9,8 @@ import { autoBind } from '../extend/AutoBind';
 import { BaseExp } from '../core/base/BaseExp';
 import { GunBase } from '../items/base/GunBase';
 import { PoolManager } from '../core/manager/PoolManager';
+import { audioMgr } from '../core/manager/AudioManager';
+import { Constants } from '../data/Constants';
 const { ccclass, property } = _decorator;
 
 
@@ -150,18 +152,18 @@ export class Enemy extends BaseExp {
     public enemyData(data:any){
         if(!data)return;
         //主武器id
-        const mainWeaponID:number = data.enemy_weapon_id_1;
+        const mainWeaponID:number = data.weapon_id_1;
         let hp: number = Utils.clone(data).hp;
-        let gunData:any = userIns.enemyWeaponTable.find(e=>e.id == mainWeaponID);
+        let gData:any = userIns.enemyWeaponTable.find(e=>e.gun_id == mainWeaponID);
         //副武器 盾上的血量
-        const secondWeaponID:number = data.enemy_weapon_id_2;
+        const secondWeaponID:number = data.weapon_id_2;
         if(secondWeaponID != 0){
-            let sData:any = userIns.enemyWeaponTable.find(e=>e.id == secondWeaponID);
+            let sData:any = userIns.enemyWeaponTable.find(e=>e.gun_id == secondWeaponID);
             if(sData && sData.hp > 0){
                data.hp += hp + sData.shield_hp;
             }
         }
-        return Object.assign(data,gunData);
+        return Object.assign(data,gData);
     }
     
     /**
@@ -172,8 +174,8 @@ export class Enemy extends BaseExp {
         //敌人主武器
         console.log("FFFFF = " + this.enemyNode.name);
         let gunPos:Node = this.enemyNode.getChildByName("gun_pos");
-        const mainWeaponID:number = this.data.enemy_weapon_id_1;
-        let mData:any = userIns.enemyWeaponTable.find(e=>e.id == mainWeaponID);
+        const mainWeaponID:number = this.data.weapon_id_1;
+        let mData:any = userIns.enemyWeaponTable.find(e=>e.gun_id == mainWeaponID);
         let gunNode:Node = await ResUtil.loadGunRes(`enemy/${mData.gun_prb_name}`,this.enemyNode) as Node;
         gunNode.active = true;
         gunNode.parent = this.node;
@@ -182,9 +184,9 @@ export class Enemy extends BaseExp {
         gunNode.eulerAngles = new Vec3(0,-180,0);
         this.gun.init(this.data,this);
         //敌人附武器
-        const secondWeaponID:number = this.data.enemy_weapon_id_2;
+        const secondWeaponID:number = this.data.weapon_id_2;
         if(secondWeaponID != 0){
-            let sData:any = userIns.enemyWeaponTable.find(e=>e.id == secondWeaponID);
+            let sData:any = userIns.enemyWeaponTable.find(e=>e.gun_id == secondWeaponID);
             let shieldNode:Node = await ResUtil.loadGunRes(`enemy/${sData.gun_prb_name}`,this.enemyNode) as Node;
             shieldNode.active = true;
             shieldNode.parent = this.node;
@@ -216,8 +218,9 @@ export class Enemy extends BaseExp {
      * 扣掉血
      * @param hp 血
      * @param pData 英雄数据
+     * @param isHeadShot 是否是爆头
      */
-    public subHP(hp: number, pData:any){
+    public subHP(hp: number, pData:any,isHeadShot: boolean = false){
         if(Game.I.isPause
             ||this.isDead
             ||hp == null
@@ -234,7 +237,10 @@ export class Enemy extends BaseExp {
         }
         //敌人死亡
         if(this.totalHP <= 0 && !this.isDead){
-            //audioMgr.playDieAudios();
+            //爆头击杀播放音效
+            if(isHeadShot){
+               audioMgr.playOneShot(Constants.audios.head_shot);
+            }
             this.escape = false;
             this.recycle();
         }else{//进度条和单独扣血

+ 9 - 8
assets/scripts/game/Player.ts

@@ -11,6 +11,7 @@ import { ResUtil } from '../utils/ResUtil';
 import { Game } from './Game';
 import MsgHints from '../utils/MsgHints';
 import { PlayerCamera } from './PlayerCamera';
+import { audioMgr } from '../core/manager/AudioManager';
 const { ccclass, property } = _decorator;
 
 //玩家动作类型
@@ -178,22 +179,22 @@ export class Player extends BaseExp {
             return;
         }
         this.curHP -= hp;
-        //这种是伤害超级高直接死亡了 或者血量为小于等于0
-        if(hp > this.curHP && this.curHP <= 0){
-        }
         this.curHP = this.curHP < 0 ? 0 : this.curHP;
         //设置血条
         const progress:number = this.curHP / this.pData.hp;
         this.shootUI.playerHurtTwinkle(progress);
         //敌人死亡
         if(this.curHP <= 0 && !this.isDead){
-            //英雄死亡回收节点 看广告
-            // Game.I.buildHeros.addAndSubHeros(this,true);
-            // Game.I.buildHeros.heroDeadPop(this);
-            this.isDead = true;
             Game.I.isGameOver = true;
+            audioMgr.playOneShot(Constants.audios.loss);
+            uiMgr.show(Constants.popUIs.settleUI,[{
+                isWin: false,
+                headShotNum: Game.I.player.headShotNum,
+                cb: ()=>{}
+            }]);
+            this.isDead = true;
             this.recycle();
-            this.player_skeletal.play('die');
+            this.player_skeletal.play(PAnimType.die);
             this.scheduleOnce(() => {
                 this.player_skeletal.stop();
                 this.player_skeletal.node.active = false;

+ 4 - 4
assets/scripts/items/item/TaskEnemyItem.ts

@@ -16,7 +16,7 @@ export class TaskEnemyItem extends ListItem {
     public data: any = null;
 
     /**
-     * 数据填充
+     * 数据填充 enemyId total count enemyData
      * @param data 敌人数据
      * @param cb 回调
      */
@@ -24,10 +24,10 @@ export class TaskEnemyItem extends ListItem {
         if(!data)return;
         this.data = data;
         //敌人头像
-        ResUtil.setSpriteFrame(data.headshot,this.enemy_header);
+        ResUtil.setSpriteFrame(data.enemyData.headshot,this.enemy_header);
         //剩余敌人数量
-        this.num_label.string = `${data.killCount} / ${data.count}`;
+        this.num_label.string = `${data.total - data.count} / ${data.total}`;
         //敌人名字
-        this.enemy_name_label.string = data.name_lang;
+        this.enemy_name_label.string = data.enemyData.name_lang;
     }
 }

+ 4 - 2
assets/scripts/items/player/Bullet1.ts

@@ -89,17 +89,19 @@ export class Bullet1 extends BulletBase {
             if(e){
                 let attack: number = this.gunBase.data.attack;
                 //爆头击杀
+                let isHeadShot:boolean = false;
                 if(name == EPartType.head){
                    Game.I.player.headShotNum += 1;
                    attack = Game.I.player.pData.headshotDmgMul * attack;
+                   isHeadShot = true;
                 }
                 //坦克是单独的碰撞体
                 if(e.isTank()){
                     if(name == EPartType.tank){
-                      e.subHP(attack,this.gunBase.data);
+                      e.subHP(attack,this.gunBase.data,isHeadShot);
                     }
                 }else{
-                    e.subHP(attack,this.gunBase.data);
+                    e.subHP(attack,this.gunBase.data,isHeadShot);
                 }
             }
             //自动回收了子弹

+ 4 - 2
assets/scripts/ui/BuyBoomerangUI.ts

@@ -8,14 +8,14 @@ import { uiMgr } from '../core/manager/UIManager';
 import { Constants } from '../data/Constants';
 import { TossBoomerangUI } from './TossBoomerangUI';
 import MsgHints from '../utils/MsgHints';
-import { stateMgr } from '../core/manager/StateManager';
 import { ITEM_TYPE, ResUtil } from '../utils/ResUtil';
+import { audioMgr } from '../core/manager/AudioManager';
 const { ccclass, property } = _decorator;
 
 //购买飞镖
 @ccclass('BuyBoomerangUI')
 export class BuyBoomerangUI extends BaseExp {
-    @autoBind({ type: List, tooltip: "飞列表" })
+    @autoBind({ type: List, tooltip: "飞列表" })
     public prop_scrollView: List;
     @autoBind({ type: Label, tooltip: "飞镖个数文本" })
     public boomerang_num_lable: Label;
@@ -79,6 +79,7 @@ export class BuyBoomerangUI extends BaseExp {
             }
         }
         if(isSucced){
+            audioMgr.playOneShot(Constants.audios.buy);
             ResUtil.flyAnim(ITEM_TYPE.Boomerang, clikTarget, this.boomerang_btn, data.quantity, 50,(b) => {});
             userIns.data.boomerang += data.quantity;
             //设置飞镖个数
@@ -96,6 +97,7 @@ export class BuyBoomerangUI extends BaseExp {
      * @param param 参数
      */
     override onBtnClicked(event:EventTouch, param:any) {
+        super.onBtnClicked(event, param);
         let btnName = event.target.name;
         if(btnName === 'close_btn'){
             const toss:TossBoomerangUI = uiMgr.getPageComponent(Constants.popUIs.tossBoomerangUI);

+ 14 - 22
assets/scripts/ui/GunfightShootUI.ts

@@ -52,7 +52,7 @@ export class GunfightShootUI extends BaseExp {
     /** 当前相机绕 Y 轴的旋转角度 */
     private currentYRotation: number = 0;
     /** 左右旋转角度的最大限制值 */
-    private maxHorizontalAngle: number = 40;
+    private maxHorizontalAngle: number = 70;
     /** 上下旋转角度的最大限制值 */
     private maxVerticalAngle: number = 40;
     /** 相机的原始视野值 */
@@ -126,6 +126,8 @@ export class GunfightShootUI extends BaseExp {
         this.wheel.on(Node.EventType.TOUCH_START, this.onWheelClick, this);
         this.wheel.on(Node.EventType.TOUCH_END, this.onWheelRelease, this);
         this.wheel.on(Node.EventType.TOUCH_CANCEL, this.onWheelRelease, this);
+        //敌人数量改变
+        this.register(Constants.eventName.enemy_num_change, this.loadTaskData.bind(this));
     }
 
     public show(...args: any[]){
@@ -133,26 +135,25 @@ export class GunfightShootUI extends BaseExp {
     }
 
     /**
+     * enemyId total count enemyData
      * 加载数据
      */
     public loadTaskData() {
-        const data: any = userIns.getCurLevelData();
-        if(!data)return;
-        this.taskDatas = []
-        //拆分并处理每个敌人配置
-        data.dispose.split('|').forEach((item: string) => {
-            const [enemyId, count] = item.split('_').map(Number);
-            const enemyData = Utils.clone(userIns.enemyTable).find((e: any) => e.id === enemyId);
-            enemyData.count = count;
-            enemyData.killCount = 0;
-            this.taskDatas.push(enemyData);
-        });
-        if(this.taskDatas.length <= 0)return;
+        this.taskDatas = Game.I.buildEnemys.enemyTypeRecords;
         this.task_scrollView.numItems = this.taskDatas.length;
         //加载子弹的数据
         this.gunDataUI();
     }
     
+    /**
+     * 任务数据
+     * @param item item节点
+     * @param idx 数据下标
+     */
+    public setTaskItemData(item: Node, idx: number) {
+        item.getComponent(TaskEnemyItem).init(this.taskDatas[idx]);
+    }
+
     /**
      * 设置枪的数据
      */
@@ -218,15 +219,6 @@ export class GunfightShootUI extends BaseExp {
         }
     }
 
-    /**
-     * 任务数据
-     * @param item item节点
-     * @param idx 数据下标
-     */
-    public setTaskItemData(item: Node, idx: number) {
-        item.getComponent(TaskEnemyItem).init(this.taskDatas[idx]);
-    }
-
     /**
      * 根据切换枪的stability设置镜头的稳定性
      */

+ 1 - 0
assets/scripts/ui/ObtainUI.ts

@@ -97,6 +97,7 @@ export class ObtainUI extends BaseExp {
      * @param param 参数
      */
     override onBtnClicked(event:EventTouch, param:any) {
+        super.onBtnClicked(event, param);
         let btnName = event.target.name;
         if(btnName === 'confim_btn' 
             || btnName === 'close_btn'){

+ 53 - 27
assets/scripts/ui/SettleUI.ts

@@ -10,6 +10,7 @@ import i18n from '../core/i18n/runtime-scripts/LanguageData';
 import { Utils } from '../utils/Utils';
 import { Game } from '../game/Game';
 import PlatformSystem from '../platform/PlatformSystem';
+import { audioMgr } from '../core/manager/AudioManager';
 const { ccclass, property } = _decorator;
 
 @ccclass('SettleUI')
@@ -43,16 +44,25 @@ export class SettleUI extends BaseExp {
     public back_home_btn: Node;
     @autoBind({ type: Node, tooltip: "重新开始" })
     public restart_btn: Node;
+    @autoBind({ type: Node, tooltip: "看视频双倍奖励" })
+    public video_btn: Node;
 
     @autoBind({ type: Label, tooltip: "金币文本" })
     public gold_lable: Label;
     @autoBind({ type: Label, tooltip: "钻石文本" })
     public diamond_lable: Label;
 
-    //回调函数
-    private cb:Function = null;
-    //是否胜利
-    private isWin: boolean = false;
+    //关卡数据
+    private levelData:any = null;
+    //传递过后的参数
+    private param:any = null;
+    /*const param:any = {
+        isWin: false,//是否胜利
+        headShotNum: Game.I.player.headShotNum,//爆头数量
+        cb: ()=>{//回调函数
+            
+        }
+    }*/
 
     start() {
         this.closeOnBlank = false;
@@ -63,10 +73,7 @@ export class SettleUI extends BaseExp {
     
     public show(...args: any[]){
         this.hasAnim = true;
-        this.isWin = args[0];
-        if(args.length > 1){
-           this.cb = args[1];
-        }
+        this.param = args[0];
         //加载数据ui
         this.ui();
     }
@@ -79,8 +86,9 @@ export class SettleUI extends BaseExp {
         this.gun_not_unlock_icon.spriteFrame = this.gun_def_sf;
         this.gun_unlock_icon.spriteFrame = this.gun_def_sf;
         //成功失败的图片
-        this.success_status_icon.spriteFrame = this.isWin? this.success_sf : this.fail_sf;
+        this.success_status_icon.spriteFrame = this.param.isWin? this.success_sf : this.fail_sf;
         const data: any = userIns.getCurLevelData();
+        this.levelData = data;
         if(data){
             //关卡数
             this.task_num_lable.string = i18n("main.关卡任务 %{value}",{value: data.id});
@@ -89,10 +97,10 @@ export class SettleUI extends BaseExp {
             if(!Utils.isNull(unlock)){
                 let [gun_id,progress_str] = unlock.split('|');
                 let [cur,max] = progress_str.split('/');
-                let gunData:any = userIns.playerGunsTable.find(e=>e.id === gun_id);
-                this.gun_unlock_icon.spriteFrame = gunData.gun_unlock_icon;
-                this.gun_not_unlock_icon.spriteFrame = gunData.gun_not_unlock_icon;
-                if(cur === max){//解锁该武器
+                let gunData:any = userIns.playerGunsTable.find(e=>e.id == gun_id);
+                ResUtil.setSpriteFrame(gunData.gun_unlock_icon,this.gun_unlock_icon);
+                ResUtil.setSpriteFrame(gunData.gun_not_unlock_icon,this.gun_not_unlock_icon);
+                if(cur == max){//解锁该武器
                 }
                 //解锁进度
                 this.progress_num_lable.string =`${cur}/${max}`;
@@ -102,39 +110,42 @@ export class SettleUI extends BaseExp {
             }
         }
         //关卡的奖励
-        const reward:string = this.isWin ? data.reward_1 : data.reward_2;
+        const reward:string = this.param.isWin ? data.reward_1 : data.reward_2;
         let [g_id_1,num_1] = reward.split('_');
         //任务奖励
         let reward_icon_1: Node = this.task_reward_btn.getChildByName("reward_icon");
-        const itemData:any = userIns.itemTable.find(e=>e.id === g_id_1);
+        const itemData:any = userIns.itemTable.find(e=>e.id == g_id_1);
         //任务奖励图片
         ResUtil.setSpriteFrame(itemData.icon,reward_icon_1);
         //任务奖励数量
         this.task_reward_btn.getChildByName("reward_num_lable").getComponent(Label).string = `x${num_1}`;
+        this.video_btn.getChildByName("reward_num_lable").getComponent(Label).string = `x${num_1}`;
         //延迟0.5播放奖励动画
         this.scheduleOnce(() => {
             this.flyReward(itemData,Number(num_1),this.task_reward_btn);
         },0.5)
         //是否胜利 胜利的时候有爆头奖励
-        this.headshot_reward_btn.active = this.isWin;
-        if(this.isWin){
+        const isShowHeadshot:boolean = this.param.isWin && this.param.headShotNum > 0;
+        this.headshot_reward_btn.active = isShowHeadshot;
+        if(isShowHeadshot){
             //爆头奖励
             let [g_id_2,num_2] = Game.I.player.pData.headshotReward.split('_');
+            const t_num_2:number = Number(num_2) * Game.I.player.headShotNum;
             let reward_icon_2: Node = this.headshot_reward_btn.getChildByName("reward_icon");
-            const hData:any = userIns.itemTable.find(e=>e.id === g_id_2);
+            const hData:any = userIns.itemTable.find(e=>e.id == g_id_2);
             //爆头任务奖励图片
             ResUtil.setSpriteFrame(hData.icon,reward_icon_2);
             //爆头奖励数量
-            this.headshot_reward_btn.getChildByName("reward_num_lable").getComponent(Label).string = `x${num_2}`;
+            this.headshot_reward_btn.getChildByName("reward_num_lable").getComponent(Label).string = `x${t_num_2}`;
             //延迟0.5播放奖励动画
             this.scheduleOnce(() => {
-                this.flyReward(hData,Number(num_2),this.headshot_reward_btn);
+                this.flyReward(hData,Number(t_num_2),this.headshot_reward_btn);
             },0.5)
         }
         //下一关按钮
-        this.next_level_btn.active = this.isWin;
+        this.next_level_btn.active = this.param.isWin;
         //重新开始按钮
-        this.restart_btn.active = !this.isWin;
+        this.restart_btn.active = !this.param.isWin;
     }
 
     /**
@@ -145,10 +156,11 @@ export class SettleUI extends BaseExp {
      */
     public flyReward(data:any,num:number,clikTarget: Node){
         if(num <= 0)return;
-        if(data.type === 1){
+        audioMgr.playOneShot(Constants.audios.reward);
+        if(data.type == 1){
             userIns.data.gold += num;
             ResUtil.flyAnim(ITEM_TYPE.Coin, clikTarget, this.gold_lable.node, 5, 50,(b) => {});
-        }else if(data.type === 2){
+        }else if(data.type == 2){
             userIns.data.diamond += num;
             ResUtil.flyAnim(ITEM_TYPE.Diamond, clikTarget, this.diamond_lable.node, 5, 50,(b) => {});
         }
@@ -160,9 +172,10 @@ export class SettleUI extends BaseExp {
      * @param param 参数
      */
     override onBtnClicked(event:EventTouch, param:any) {
+        super.onBtnClicked(event, param);
         let btnName = event.target.name;
         if(btnName === 'restart_btn'){//重新开始
-            uiMgr.hide(Constants.popUIs.settleUI,this.cb);
+            uiMgr.hide(Constants.popUIs.settleUI,this.param.cb);
             Game.I.restart();
         }else if(btnName ==='back_home_btn'){//返回首页
             uiMgr.pop(Constants.mainUIs.main);
@@ -172,14 +185,27 @@ export class SettleUI extends BaseExp {
             if(Utils.getRandomFloat(0,1) <= odds){
                 PlatformSystem.platform.showRewardVideo((f) => {
                     if(f) {//播放视频成功
-                        uiMgr.hide(Constants.popUIs.settleUI,this.cb);
+                        uiMgr.hide(Constants.popUIs.settleUI,this.param.cb);
                         Game.I.nextLevel();
                     }
                 });
             }else{
-                uiMgr.hide(Constants.popUIs.settleUI,this.cb);
+                uiMgr.hide(Constants.popUIs.settleUI,this.param.cb);
                 Game.I.nextLevel();
             }
+        }else if(btnName ==='video_btn'){//看视频双倍奖励
+            PlatformSystem.platform.showRewardVideo((f) => {
+                if(f) {//播放视频成功
+                    this.video_btn.active = false;
+                    this.scheduleOnce(() => {
+                        //视频再奖励一次
+                        const reward:string = this.param.isWin ? this.levelData.reward_1 : this.levelData.reward_2;
+                        let [g_id_1,num_1] = reward.split('_');
+                        const itemData:any = userIns.itemTable.find(e=>e.id == g_id_1);
+                        this.flyReward(itemData,Number(num_1),this.video_btn);
+                    },0.3)
+                }
+            });
         }
     }
 }

+ 6 - 2
assets/scripts/ui/StoreUI.ts

@@ -11,6 +11,7 @@ import { stateMgr } from '../core/manager/StateManager';
 import i18n from '../core/i18n/runtime-scripts/LanguageData';
 import PlatformSystem from '../platform/PlatformSystem';
 import { ITEM_TYPE, ResUtil } from '../utils/ResUtil';
+import { audioMgr } from '../core/manager/AudioManager';
 const { ccclass, property } = _decorator;
 
 @ccclass('StoreUI')
@@ -93,6 +94,7 @@ export class StoreUI extends BaseExp {
      * @param clikTarget 道具节点
      */
     public clicked(data:any,clikTarget: Node){
+        audioMgr.playOneShot(Constants.audios.click);
         const num: number = Number(data.price_2);
         PlatformSystem.platform.showRewardVideo((f) => {
             if(f) {
@@ -100,10 +102,12 @@ export class StoreUI extends BaseExp {
                 if(data.alreadyVideo >= num){
                     data.alreadyVideo = 0;
                     //达到看视频的次数 获得奖励
-                    if(data.type === 1){
+                    if(data.type == 1){
+                        audioMgr.playOneShot(Constants.audios.buy);
                         userIns.data.gold += data.quantity;
                         ResUtil.flyAnim(ITEM_TYPE.Coin, clikTarget, this.gold_lable.node, 5, 50,(b) => {});
-                    }else if(data.type === 2){
+                    }else if(data.type == 2){
+                        audioMgr.playOneShot(Constants.audios.buy);
                         userIns.data.diamond += data.quantity;
                         ResUtil.flyAnim(ITEM_TYPE.Diamond, clikTarget, this.diamond_lable.node, 5, 50,(b) => {});
                     }

+ 1 - 0
assets/scripts/ui/SuccessUI.ts

@@ -97,6 +97,7 @@ export class SuccessUI extends BaseExp {
      * @param param 参数
      */
     override onBtnClicked(event:EventTouch, param:any) {
+        super.onBtnClicked(event, param);
         let btnName = event.target.name;
         if(btnName === 'confim_btn' 
             || btnName === 'close_btn'){

+ 3 - 0
assets/scripts/ui/TossBoomerangUI.ts

@@ -11,6 +11,7 @@ import { PoolManager } from '../core/manager/PoolManager';
 import { bundleMgr } from '../core/manager/BundleManager';
 import { Utils } from '../utils/Utils';
 import { uiMgr } from '../core/manager/UIManager';
+import { audioMgr } from '../core/manager/AudioManager';
 const { ccclass, property } = _decorator;
 
 //扔飞镖
@@ -69,6 +70,7 @@ export class TossBoomerangUI extends BaseExp {
            this.buyBoomerang();
            return;
         }
+        audioMgr.playOneShot(Constants.audios.dart);
         this.isBoomeranging = true;
         userIns.data.boomerang -= 1;
         this.setBoomerang();
@@ -167,6 +169,7 @@ export class TossBoomerangUI extends BaseExp {
      */
     private handleReward(item: any) {
         const [type, amount] = item.quantity.split('_');
+        audioMgr.playOneShot(Constants.audios.reward);
         switch(type) {
             case '1001': {//金币
                     userIns.data.gold += parseInt(amount);

+ 6 - 4
assets/scripts/ui/UpgradeGunUI.ts

@@ -9,6 +9,7 @@ import { stateMgr } from '../core/manager/StateManager';
 import { UpgradeItem } from '../items/item/UpgradeItem';
 import { uiMgr } from '../core/manager/UIManager';
 import { ArsenalUI } from './ArsenalUI';
+import { audioMgr } from '../core/manager/AudioManager';
 const { ccclass, property } = _decorator;
 
 @ccclass('UpgradeGunUI')
@@ -107,16 +108,16 @@ export class UpgradeGunUI extends BaseExp {
             const sData:any = userIns.itemTable.find(e=>e.id == id);
             //是否升级
             let isSucced: boolean = false;
-            if(idx === 1){//免费看广告
-            }else if(idx === 3){//金币钻石
-                if(sData.id === 1001){
+            if(idx == 1){//免费看广告
+            }else if(idx == 3){//金币钻石
+                if(sData.id == 1001){
                     if(userIns.data.gold < num){
                         MsgHints.show("Insufficient gold!");
                     }else{
                         userIns.data.gold -= num;
                         isSucced = true;
                     }
-                }else if(sData.id === 1002){//钻石
+                }else if(sData.id == 1002){//钻石
                     if(userIns.data.diamond < num){
                         MsgHints.show("Insufficient diamonds!");
                     }else{
@@ -129,6 +130,7 @@ export class UpgradeGunUI extends BaseExp {
                 userIns.upgradeGun(this.curGunData,data.attr_name);
                 //刷新数据
                 this.loadUpgradeData(this.curGunData.id);
+                audioMgr.playOneShot(Constants.audios.upgrade);
             }
         }
     }

+ 56 - 19
assets/scripts/utils/Utils.ts

@@ -1172,26 +1172,63 @@ export class Utils {
      * @param number 
      * @returns 
      */
-    public static numberToString(number:number) {
-        let str = '';
-        let data = [
-            { minnum: 1000000000,maxnum:9999999999, toStr: 'o' },
-            { minnum: 100000000,maxnum:999999999, toStr: 'p' },
-            { minnum: 10000000,maxnum:99999999, toStr: 't' },
-            { minnum: 1000000,maxnum:9999999, toStr: 'g' },
-            { minnum: 100000,maxnum:999999, toStr: 'm' },
-            { minnum: 10000,maxnum:99999, toStr: 'b' },
-            { minnum: 1000,maxnum:9999, toStr: 'K' }
-        ];
-        for (let i: number = 0; i < data.length; i++) {
-            if (number >= data[i].minnum && number <=  data[i].maxnum ) {
-                number /= data[i].minnum;
-                let m: string = number.toFixed(1);
-                str = m + data[i].toStr;
-                return str;
-            }
+    public static numberToString(value: number | string) {
+        const num = Number(value);
+        if (isNaN(num)) return "0";
+        //特殊处理:小于1百万显示完整数字
+        if(num < 100000) {
+           return Math.floor(num).toString();
+        }
+        //使用标准格式化中文单位
+        return this.formatBigNumber(num, ["", "K", "M", "B"]);
+    }
+
+    /**
+     * 基本用法(自动中文单位)
+       console.log(formatChineseBigNumber(998989));  // "998989"
+       console.log(formatChineseBigNumber(24326755)); // "2432.67万"
+       console.log(formatChineseBigNumber(958753111)); // "9.58亿"
+       console.log(formatChineseBigNumber(9587531115987));// "9.58万亿"
+       //高级用法(自定义单位)
+       console.log(formatBigNumber(1500, ["", "K", "M"], 1000)); // "1.5K"
+       console.log(formatBigNumber(2500000, ["", "K", "M"], 1000)); // "2.5M"
+     * 格式化大数字带单位
+     * @param value 要格式化的数字或字符串
+     * @param customUnits 可选的自定义单位数组(从大到小排序)
+     * @param customK 可选的进制基数(默认10000)
+     * @returns 格式化后的字符串
+     */
+    public static formatBigNumber(
+        value: number | string,
+        customUnits?: string[],
+        customK: number = 10000
+    ): string {
+        const num = Number(value);
+        if (isNaN(num)) return "0";
+        const defaultUnits = ["", "万", "亿", "万亿"];
+        const units = customUnits || defaultUnits;
+        const k = customK;
+        //小于1万的直接返回原数字
+        if(num < k) {
+           return num % 1 === 0 ? num.toString() : num.toFixed(2);
+        }
+        //计算单位
+        const i = Math.floor(Math.log(num) / Math.log(k));
+        const unitIndex = Math.min(i, units.length - 1);
+        const divided = num / Math.pow(k, unitIndex);
+        // 智能确定小数位数
+        let decimalPlaces = 2;
+        if (divided >= 1000) decimalPlaces = 0;
+        else if (divided >= 100) decimalPlaces = 1;
+        // 格式化并去除无效的.00
+        let formatted = divided.toFixed(decimalPlaces);
+        if(formatted.endsWith(".00")) {
+            formatted = formatted.slice(0, -3);
+        }else if (formatted.endsWith("0") && decimalPlaces > 0) {
+            //处理类似1032.50万 -> 1032.5万的情况
+            formatted = formatted.replace(/0+$/, "").replace(/\.$/, "");
         }
-        return number.toFixed(0);
+        return formatted + units[unitIndex];
     }
 
     /**

二進制
assets/textures/settle/AnJian_Lan.png


+ 134 - 0
assets/textures/settle/AnJian_Lan.png.meta

@@ -0,0 +1,134 @@
+{
+  "ver": "1.0.27",
+  "importer": "image",
+  "imported": true,
+  "uuid": "f4a10943-6f59-430f-8aaf-a37beabba9b3",
+  "files": [
+    ".json",
+    ".png"
+  ],
+  "subMetas": {
+    "6c48a": {
+      "importer": "texture",
+      "uuid": "f4a10943-6f59-430f-8aaf-a37beabba9b3@6c48a",
+      "displayName": "AnJian_Lan",
+      "id": "6c48a",
+      "name": "texture",
+      "userData": {
+        "wrapModeS": "clamp-to-edge",
+        "wrapModeT": "clamp-to-edge",
+        "imageUuidOrDatabaseUri": "f4a10943-6f59-430f-8aaf-a37beabba9b3",
+        "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": "f4a10943-6f59-430f-8aaf-a37beabba9b3@f9941",
+      "displayName": "AnJian_Lan",
+      "id": "f9941",
+      "name": "spriteFrame",
+      "userData": {
+        "trimThreshold": 1,
+        "rotated": false,
+        "offsetX": 0,
+        "offsetY": 0,
+        "trimX": 0,
+        "trimY": 0,
+        "width": 282,
+        "height": 96,
+        "rawWidth": 282,
+        "rawHeight": 96,
+        "borderTop": 23,
+        "borderBottom": 23,
+        "borderLeft": 29,
+        "borderRight": 57,
+        "packable": true,
+        "pixelsToUnit": 100,
+        "pivotX": 0.5,
+        "pivotY": 0.5,
+        "meshType": 0,
+        "vertices": {
+          "rawPosition": [
+            -141,
+            -48,
+            0,
+            141,
+            -48,
+            0,
+            -141,
+            48,
+            0,
+            141,
+            48,
+            0
+          ],
+          "indexes": [
+            0,
+            1,
+            2,
+            2,
+            1,
+            3
+          ],
+          "uv": [
+            0,
+            96,
+            282,
+            96,
+            0,
+            0,
+            282,
+            0
+          ],
+          "nuv": [
+            0,
+            0,
+            1,
+            0,
+            0,
+            1,
+            1,
+            1
+          ],
+          "minPos": [
+            -141,
+            -48,
+            0
+          ],
+          "maxPos": [
+            141,
+            48,
+            0
+          ]
+        },
+        "isUuid": true,
+        "imageUuidOrDatabaseUri": "f4a10943-6f59-430f-8aaf-a37beabba9b3@6c48a",
+        "atlasUuid": "",
+        "trimType": "auto"
+      },
+      "ver": "1.0.12",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    }
+  },
+  "userData": {
+    "type": "sprite-frame",
+    "hasAlpha": true,
+    "fixAlphaTransparencyArtifacts": false,
+    "redirect": "f4a10943-6f59-430f-8aaf-a37beabba9b3@6c48a"
+  }
+}

二進制
assets/textures/settle/AnJian_Lv.png


+ 134 - 0
assets/textures/settle/AnJian_Lv.png.meta

@@ -0,0 +1,134 @@
+{
+  "ver": "1.0.27",
+  "importer": "image",
+  "imported": true,
+  "uuid": "0315de77-cc19-430b-9d34-99416cf8ec52",
+  "files": [
+    ".json",
+    ".png"
+  ],
+  "subMetas": {
+    "6c48a": {
+      "importer": "texture",
+      "uuid": "0315de77-cc19-430b-9d34-99416cf8ec52@6c48a",
+      "displayName": "AnJian_Lv",
+      "id": "6c48a",
+      "name": "texture",
+      "userData": {
+        "wrapModeS": "clamp-to-edge",
+        "wrapModeT": "clamp-to-edge",
+        "imageUuidOrDatabaseUri": "0315de77-cc19-430b-9d34-99416cf8ec52",
+        "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": "0315de77-cc19-430b-9d34-99416cf8ec52@f9941",
+      "displayName": "AnJian_Lv",
+      "id": "f9941",
+      "name": "spriteFrame",
+      "userData": {
+        "trimThreshold": 1,
+        "rotated": false,
+        "offsetX": 0,
+        "offsetY": 0,
+        "trimX": 0,
+        "trimY": 0,
+        "width": 282,
+        "height": 96,
+        "rawWidth": 282,
+        "rawHeight": 96,
+        "borderTop": 32,
+        "borderBottom": 26,
+        "borderLeft": 122,
+        "borderRight": 36,
+        "packable": true,
+        "pixelsToUnit": 100,
+        "pivotX": 0.5,
+        "pivotY": 0.5,
+        "meshType": 0,
+        "vertices": {
+          "rawPosition": [
+            -141,
+            -48,
+            0,
+            141,
+            -48,
+            0,
+            -141,
+            48,
+            0,
+            141,
+            48,
+            0
+          ],
+          "indexes": [
+            0,
+            1,
+            2,
+            2,
+            1,
+            3
+          ],
+          "uv": [
+            0,
+            96,
+            282,
+            96,
+            0,
+            0,
+            282,
+            0
+          ],
+          "nuv": [
+            0,
+            0,
+            1,
+            0,
+            0,
+            1,
+            1,
+            1
+          ],
+          "minPos": [
+            -141,
+            -48,
+            0
+          ],
+          "maxPos": [
+            141,
+            48,
+            0
+          ]
+        },
+        "isUuid": true,
+        "imageUuidOrDatabaseUri": "0315de77-cc19-430b-9d34-99416cf8ec52@6c48a",
+        "atlasUuid": "",
+        "trimType": "auto"
+      },
+      "ver": "1.0.12",
+      "imported": true,
+      "files": [
+        ".json"
+      ],
+      "subMetas": {}
+    }
+  },
+  "userData": {
+    "type": "sprite-frame",
+    "hasAlpha": true,
+    "fixAlphaTransparencyArtifacts": false,
+    "redirect": "0315de77-cc19-430b-9d34-99416cf8ec52@6c48a"
+  }
+}

+ 1 - 1
profiles/v2/packages/reference-image.json

@@ -3,6 +3,6 @@
   "config": {
     "images": [],
     "sceneUUID": {},
-    "scene": "018a74cb-0fed-4096-af33-fef3cc3e4be0"
+    "scene": "10795865-5525-41fc-8bf7-0e8d6983b214"
   }
 }

+ 565 - 565
profiles/v2/packages/scene.json

@@ -2,7 +2,7 @@
   "__version__": "1.0.3",
   "builder": {},
   "gizmos-infos": {
-    "is2D": false,
+    "is2D": true,
     "is3DIcon": false,
     "iconSize": 2,
     "gridVisible": true,
@@ -64,106 +64,6 @@
     }
   },
   "camera-infos": {
-    "c96279a4-6201-4bf1-bcfb-c24c1d7e2336": {
-      "position": {
-        "x": 5.2645526919689125,
-        "y": 4.6832908113688845,
-        "z": -5.3247319389373935
-      },
-      "rotation": {
-        "x": -0.10483406206379398,
-        "y": 0.8890784605082293,
-        "z": 0.2551399525082163,
-        "w": 0.3653120790853031
-      },
-      "viewCenter": {
-        "x": 0,
-        "y": 0,
-        "z": 0
-      },
-      "contentRect": {
-        "x": 0,
-        "y": 0,
-        "width": 964,
-        "height": 938
-      },
-      "scale": 1
-    },
-    "e0912834-f120-4154-9c5c-2db95e355c1d": {
-      "position": {
-        "x": -4.81511500003927,
-        "y": 10.487620290593924,
-        "z": 107.32314958450618
-      },
-      "rotation": {
-        "x": 0.07885008305937583,
-        "y": 0.8114107374833437,
-        "z": 0.11262534871963806,
-        "w": -0.5680764123989358
-      },
-      "viewCenter": {
-        "x": 30,
-        "y": 0,
-        "z": 120
-      },
-      "contentRect": {
-        "x": 0,
-        "y": 0,
-        "width": 964,
-        "height": 938
-      },
-      "scale": 1
-    },
-    "190175d9-cf10-4a52-904c-d1cff9e31b56": {
-      "position": {
-        "x": -7.985097466529933,
-        "y": 2.4054112764600966,
-        "z": -2.9075269789062705
-      },
-      "rotation": {
-        "x": 0.07885008305937583,
-        "y": 0.8114107374833437,
-        "z": 0.11262534871963806,
-        "w": -0.5680764123989358
-      },
-      "viewCenter": {
-        "x": 0,
-        "y": 0,
-        "z": 0
-      },
-      "contentRect": {
-        "x": 0,
-        "y": 0,
-        "width": 964,
-        "height": 938
-      },
-      "scale": 1
-    },
-    "fd6f4597-e97f-49c9-944a-cd9952aa9a94": {
-      "position": {
-        "x": -39.49177413987434,
-        "y": 11.896405678408115,
-        "z": -14.3797116112668
-      },
-      "rotation": {
-        "x": 0.07885008305937583,
-        "y": 0.8114107374833437,
-        "z": 0.11262534871963806,
-        "w": -0.5680764123989358
-      },
-      "viewCenter": {
-        "x": 0,
-        "y": 0,
-        "z": 0
-      },
-      "contentRect": {
-        "x": 0,
-        "y": 0,
-        "width": 964,
-        "height": 938
-      },
-      "scale": 1
-    },
     "d1c35953-29ff-47d2-b543-5faf9f079fc8": {
       "position": {
         "x": 5.264552692345035,
@@ -239,31 +139,6 @@
       },
       "scale": 1
     },
-    "f4a95669-6998-4e14-855c-0d5242a730f4": {
-      "position": {
-        "x": -0.07737487206699711,
-        "y": 1.8682584572993122,
-        "z": -3.88465031182659
-      },
-      "rotation": {
-        "x": 0.07885008305937583,
-        "y": 0.8114107374833437,
-        "z": 0.11262534871963806,
-        "w": -0.5680764123989358
-      },
-      "viewCenter": {
-        "x": 4,
-        "y": 0.64,
-        "z": -2.4
-      },
-      "contentRect": {
-        "x": 0,
-        "y": 0,
-        "width": 964,
-        "height": 938
-      },
-      "scale": 1
-    },
     "6b41b223-a6c0-4b0e-8e27-80deda2f3504": {
       "position": {
         "x": 7.174389352417258,
@@ -439,106 +314,6 @@
       },
       "scale": 1.68
     },
-    "78b2a53e-ee70-4c31-8746-1f752c9a8b92": {
-      "position": {
-        "x": 360,
-        "y": 800,
-        "z": 5000
-      },
-      "rotation": {
-        "x": 0,
-        "y": 0,
-        "z": 0,
-        "w": 1
-      },
-      "viewCenter": {
-        "x": 611.7217447131084,
-        "y": 697.7140466383684,
-        "z": 66.8248105206502
-      },
-      "contentRect": {
-        "x": -4.995800848102075,
-        "y": 1136.5712007372888,
-        "width": 1110,
-        "height": 960
-      },
-      "scale": 1.2484422437276153
-    },
-    "a4431508-a30c-430e-a50d-86f479d3fe98": {
-      "position": {
-        "x": 0,
-        "y": 0,
-        "z": 5000
-      },
-      "rotation": {
-        "x": 0,
-        "y": 0,
-        "z": 0,
-        "w": 1
-      },
-      "viewCenter": {
-        "x": 611.7217447131084,
-        "y": 697.7140466383684,
-        "z": 66.8248105206502
-      },
-      "contentRect": {
-        "x": -4.995800848102075,
-        "y": 1136.5712007372888,
-        "width": 1110,
-        "height": 960
-      },
-      "scale": 1.2484422437276153
-    },
-    "d2a4ee3f-42cc-4d35-b1c0-7062fce93a50": {
-      "position": {
-        "x": 561.3366978906834,
-        "y": 659.9385616454839,
-        "z": 1609.0026470783532
-      },
-      "rotation": {
-        "x": 0,
-        "y": 0,
-        "z": 0,
-        "w": 1
-      },
-      "viewCenter": {
-        "x": 611.7217447131084,
-        "y": 697.7140466383684,
-        "z": 66.8248105206502
-      },
-      "contentRect": {
-        "x": -4.995800848102075,
-        "y": 1136.5712007372888,
-        "width": 1110,
-        "height": 960
-      },
-      "scale": 1.2484422437276153
-    },
-    "645a2962-9d04-45c4-88ca-6701fe0cfbb7": {
-      "position": {
-        "x": -0.2159345760424348,
-        "y": 0.798719663260147,
-        "z": -2.8999568109555662
-      },
-      "rotation": {
-        "x": 0.012408656027563955,
-        "y": 0.7474530446693184,
-        "z": 0.013967113255507363,
-        "w": -0.6640518737398935
-      },
-      "viewCenter": {
-        "x": 4,
-        "y": 0.64,
-        "z": -2.4
-      },
-      "contentRect": {
-        "x": 0,
-        "y": 0,
-        "width": 1486,
-        "height": 960
-      },
-      "scale": 1
-    },
     "8eefb02a-1bb0-4dec-a9f8-54f82cbbf1fc": {
       "position": {
         "x": 482.2554456723898,
@@ -564,31 +339,6 @@
       },
       "scale": 0.1958742967373352
     },
-    "5ee4992e-6d52-4123-9583-a4c06fbc1948": {
-      "position": {
-        "x": 5.752515492937533,
-        "y": 13.507674434636414,
-        "z": 4.557305073223105
-      },
-      "rotation": {
-        "x": -0.4659227412832299,
-        "y": 0.1272021874316889,
-        "z": 0.0678882910453051,
-        "w": 0.8729987300143465
-      },
-      "viewCenter": {
-        "x": 3.205,
-        "y": 0.183,
-        "z": -3.999
-      },
-      "contentRect": {
-        "x": 0,
-        "y": 0,
-        "width": 996,
-        "height": 860
-      },
-      "scale": 1
-    },
     "866d77f1-6686-4dce-a70c-c66552f34611": {
       "position": {
         "x": 1165.8474527575286,
@@ -689,42 +439,17 @@
       },
       "scale": 1
     },
-    "99b412e6-33d6-4baf-87f9-25502bc99057": {
+    "40e151c7-cc50-476b-92a1-9a7bb42531ce": {
       "position": {
-        "x": 256.0650713535121,
-        "y": 1437.0644962245494,
-        "z": 1904.3760456425043
+        "x": 360,
+        "y": 800.0000000000001,
+        "z": 5000
       },
       "rotation": {
-        "x": -0.0297835156381569,
-        "y": -0.08998844095084747,
-        "z": -0.002692304378325411,
-        "w": 0.9954937338771158
-      },
-      "viewCenter": {
-        "x": 389.21080595403373,
-        "y": 1392.5972968774406,
-        "z": 1173.9341189250774
-      },
-      "contentRect": {
         "x": 0,
         "y": 0,
-        "width": 0,
-        "height": 0
-      },
-      "scale": 1
-    },
-    "b27497b3-42c4-4a2b-8bcf-8c0b7aac8559": {
-      "position": {
-        "x": 2.3173207331363983,
-        "y": 1.7227949672303566,
-        "z": 1.0706098433947773
-      },
-      "rotation": {
-        "x": -0.24641257905869793,
-        "y": 0.5152285079604588,
-        "z": 0.1575962258349843,
-        "w": 0.8055953420105214
+        "z": 0,
+        "w": 1
       },
       "viewCenter": {
         "x": 0,
@@ -732,18 +457,18 @@
         "z": 0
       },
       "contentRect": {
-        "x": 0,
-        "y": 0,
-        "width": 0,
-        "height": 0
+        "x": 290.0872955376368,
+        "y": 724.5271961189892,
+        "width": 618.6030151148636,
+        "height": 667.8
       },
-      "scale": 1
+      "scale": 4.424110180488601
     },
-    "579247ec-5b8a-472e-bcb6-3e024b1a3564": {
+    "65af6e68-ba19-45cf-88e7-d4cd24b58077": {
       "position": {
-        "x": 572.1687014340932,
-        "y": 1126.2565549009432,
-        "z": 4997.709349271075
+        "x": 720,
+        "y": 1600,
+        "z": 440.6576007662684
       },
       "rotation": {
         "x": 0,
@@ -752,154 +477,29 @@
         "w": 1
       },
       "viewCenter": {
-        "x": 611.7217447131084,
-        "y": 697.7140466383684,
-        "z": 66.8248105206502
+        "x": 720,
+        "y": 1600,
+        "z": 4.643324567305285
       },
       "contentRect": {
-        "x": 345.96846497959456,
-        "y": 784.339645361015,
-        "width": 1318,
-        "height": 954
+        "x": 356.6367731914029,
+        "y": 786.0120000000001,
+        "width": 470.64296258179223,
+        "height": 665
       },
-      "scale": 23.37616439668164
+      "scale": 21.668258668252026
     },
-    "10aa6375-5d6a-4091-bb55-e0322cd02e49": {
+    "5926ea72-8485-4610-9289-2fb08dbb7664": {
       "position": {
-        "x": 0,
-        "y": 0,
-        "z": 5000
+        "x": 712.9969558877075,
+        "y": 1795.1318538612418,
+        "z": 394.49325207573327
       },
       "rotation": {
-        "x": 0,
-        "y": 0,
-        "z": 0,
-        "w": 1
-      },
-      "viewCenter": {
-        "x": 611.7217447131084,
-        "y": 697.7140466383684,
-        "z": 66.8248105206502
-      },
-      "contentRect": {
-        "x": 0,
-        "y": 0,
-        "width": 0,
-        "height": 0
-      },
-      "scale": 1
-    },
-    "3eadf28d-4c41-4582-afff-c8441fa5470a": {
-      "position": {
-        "x": 0,
-        "y": 0,
-        "z": 5000
-      },
-      "rotation": {
-        "x": 0,
-        "y": 0,
-        "z": 0,
-        "w": 1
-      },
-      "viewCenter": {
-        "x": 611.7217447131084,
-        "y": 697.7140466383684,
-        "z": 66.8248105206502
-      },
-      "contentRect": {
-        "x": 0,
-        "y": 0,
-        "width": 0,
-        "height": 0
-      },
-      "scale": 1
-    },
-    "0ab8a800-8ba6-4fe1-9b37-6bb77d04047f": {
-      "position": {
-        "x": 498,
-        "y": 430,
-        "z": 5000
-      },
-      "rotation": {
-        "x": 0,
-        "y": 0,
-        "z": 0,
-        "w": 1
-      },
-      "viewCenter": {
-        "x": 611.7217447131084,
-        "y": 697.7140466383684,
-        "z": 66.8248105206502
-      },
-      "contentRect": {
-        "x": -161,
-        "y": -47,
-        "width": 1318,
-        "height": 954
-      },
-      "scale": 1
-    },
-    "40e151c7-cc50-476b-92a1-9a7bb42531ce": {
-      "position": {
-        "x": 360,
-        "y": 800.0000000000001,
-        "z": 5000
-      },
-      "rotation": {
-        "x": 0,
-        "y": 0,
-        "z": 0,
-        "w": 1
-      },
-      "viewCenter": {
-        "x": 0,
-        "y": 0,
-        "z": 0
-      },
-      "contentRect": {
-        "x": 290.0872955376368,
-        "y": 724.5271961189892,
-        "width": 618.6030151148636,
-        "height": 667.8
-      },
-      "scale": 4.424110180488601
-    },
-    "65af6e68-ba19-45cf-88e7-d4cd24b58077": {
-      "position": {
-        "x": 720,
-        "y": 1600,
-        "z": 440.6576007662684
-      },
-      "rotation": {
-        "x": 0,
-        "y": 0,
-        "z": 0,
-        "w": 1
-      },
-      "viewCenter": {
-        "x": 720,
-        "y": 1600,
-        "z": 4.643324567305285
-      },
-      "contentRect": {
-        "x": 356.6367731914029,
-        "y": 786.0120000000001,
-        "width": 470.64296258179223,
-        "height": 665
-      },
-      "scale": 21.668258668252026
-    },
-    "5926ea72-8485-4610-9289-2fb08dbb7664": {
-      "position": {
-        "x": 712.9969558877075,
-        "y": 1795.1318538612418,
-        "z": 394.49325207573327
-      },
-      "rotation": {
-        "x": -0.22991878009917416,
-        "y": -0.008740018839070003,
-        "z": -0.0020648990487221837,
-        "w": 0.9731683835905885
+        "x": -0.22991878009917416,
+        "y": -0.008740018839070003,
+        "z": -0.0020648990487221837,
+        "w": 0.9731683835905885
       },
       "viewCenter": {
         "x": 720,
@@ -964,31 +564,6 @@
       },
       "scale": 3.325
     },
-    "6fdfa45a-54d2-427e-9510-d0cbbbc63997": {
-      "position": {
-        "x": 899.0461567331639,
-        "y": 790.4579581058309,
-        "z": 2997.7360379047245
-      },
-      "rotation": {
-        "x": 0,
-        "y": 0,
-        "z": 0,
-        "w": 1
-      },
-      "viewCenter": {
-        "x": 0,
-        "y": 0,
-        "z": 0
-      },
-      "contentRect": {
-        "x": 620,
-        "y": 1500,
-        "width": 1302,
-        "height": 950
-      },
-      "scale": 3.325
-    },
     "35f396e5-f1fd-4206-8567-fd9b5fef6ba2": {
       "position": {
         "x": 323.37425395019363,
@@ -1039,56 +614,6 @@
       },
       "scale": 1
     },
-    "018a74cb-0fed-4096-af33-fef3cc3e4be0": {
-      "position": {
-        "x": 743.3570510410964,
-        "y": 1620.7444638830743,
-        "z": 12.357017470044978
-      },
-      "rotation": {
-        "x": -0.2306343055066102,
-        "y": 0.5623470830570179,
-        "z": 0.16706728455794717,
-        "w": 0.7763131441185194
-      },
-      "viewCenter": {
-        "x": 712.6803034533307,
-        "y": 1599.704190631719,
-        "z": 2.29342171947075
-      },
-      "contentRect": {
-        "x": 308.1250414594673,
-        "y": 246.97960521653837,
-        "width": 1294,
-        "height": 950
-      },
-      "scale": 2.496661097803226
-    },
-    "dbda5c7c-1e8b-4019-9399-09bf671d8101": {
-      "position": {
-        "x": 367.96590970040086,
-        "y": 803.5657400947383,
-        "z": 1.1642136067772901
-      },
-      "rotation": {
-        "x": -0.14897392663233924,
-        "y": 0.6455906944546945,
-        "z": 0.13039516266089343,
-        "w": 0.7375747595816216
-      },
-      "viewCenter": {
-        "x": 360,
-        "y": 800.1812,
-        "z": 0.1
-      },
-      "contentRect": {
-        "x": 0,
-        "y": 0,
-        "width": 1294,
-        "height": 950
-      },
-      "scale": 1
-    },
     "a2423517-560c-435d-97c6-1e8ab247f69f": {
       "position": {
         "x": 3.755446311907831,
@@ -1289,11 +814,36 @@
       },
       "scale": 1
     },
-    "10795865-5525-41fc-8bf7-0e8d6983b214": {
+    "5ee4992e-6d52-4123-9583-a4c06fbc1948": {
+      "position": {
+        "x": 5.752515492937505,
+        "y": 13.507674434636328,
+        "z": 4.557305073223105
+      },
+      "rotation": {
+        "x": -0.4659227412832299,
+        "y": 0.1272021874316889,
+        "z": 0.0678882910453051,
+        "w": 0.8729987300143465
+      },
+      "viewCenter": {
+        "x": 3.205,
+        "y": 0.183,
+        "z": -3.999
+      },
+      "contentRect": {
+        "x": 0,
+        "y": 0,
+        "width": 1120,
+        "height": 950
+      },
+      "scale": 1
+    },
+    "dbda5c7c-1e8b-4019-9399-09bf671d8101": {
       "position": {
-        "x": 271.69626631053734,
-        "y": 807.5917237108588,
-        "z": 5918.515902477645
+        "x": 647,
+        "y": 475,
+        "z": 5000
       },
       "rotation": {
         "x": 0,
@@ -1309,63 +859,513 @@
       "contentRect": {
         "x": 0,
         "y": 0,
-        "width": 1294,
+        "width": 1120,
         "height": 950
       },
       "scale": 1
-    }
-  },
-  "camera-uuids": [
-    "c96279a4-6201-4bf1-bcfb-c24c1d7e2336",
-    "e0912834-f120-4154-9c5c-2db95e355c1d",
-    "190175d9-cf10-4a52-904c-d1cff9e31b56",
-    "fd6f4597-e97f-49c9-944a-cd9952aa9a94",
-    "d1c35953-29ff-47d2-b543-5faf9f079fc8",
-    "7e43af95-a241-4a1f-9871-281159f7dee4",
-    "e359a3d5-28b4-44a0-9f31-eee3017fe4a1",
-    "f4a95669-6998-4e14-855c-0d5242a730f4",
-    "6b41b223-a6c0-4b0e-8e27-80deda2f3504",
-    "b3b0f6bd-a824-4bda-9b11-a7b1c316e324",
-    "c3d6dea4-381c-4fb8-938d-63dc28f58d0b",
-    "30971e21-b947-4ca2-a1c1-14b3fb4c7ca4",
-    "902829a1-f2ee-4ba9-95b1-f8d3781da00c",
-    "d5104200-5bc1-4423-90ab-a11d5c871ee4",
-    "659d5670-dfc2-4962-bbeb-03f35b5ff38b",
-    "78b2a53e-ee70-4c31-8746-1f752c9a8b92",
-    "a4431508-a30c-430e-a50d-86f479d3fe98",
-    "d2a4ee3f-42cc-4d35-b1c0-7062fce93a50",
-    "645a2962-9d04-45c4-88ca-6701fe0cfbb7",
-    "8eefb02a-1bb0-4dec-a9f8-54f82cbbf1fc",
-    "5ee4992e-6d52-4123-9583-a4c06fbc1948",
-    "866d77f1-6686-4dce-a70c-c66552f34611",
-    "8d7be10c-44de-4846-bd56-4debafaa4918",
-    "3aa48dd0-e619-4204-82a7-230940688a2b",
-    "4492c5fb-ef30-470b-b18a-f51ea0ffb0b4",
-    "99b412e6-33d6-4baf-87f9-25502bc99057",
-    "b27497b3-42c4-4a2b-8bcf-8c0b7aac8559",
-    "579247ec-5b8a-472e-bcb6-3e024b1a3564",
-    "10aa6375-5d6a-4091-bb55-e0322cd02e49",
-    "3eadf28d-4c41-4582-afff-c8441fa5470a",
-    "0ab8a800-8ba6-4fe1-9b37-6bb77d04047f",
-    "40e151c7-cc50-476b-92a1-9a7bb42531ce",
-    "65af6e68-ba19-45cf-88e7-d4cd24b58077",
-    "5926ea72-8485-4610-9289-2fb08dbb7664",
-    "fc774aed-7fd0-4127-9ca0-235504fca237",
-    "f9621cff-0655-4c80-bbf2-9692908fa3b7",
-    "6fdfa45a-54d2-427e-9510-d0cbbbc63997",
-    "35f396e5-f1fd-4206-8567-fd9b5fef6ba2",
-    "4844b5ae-cfad-4282-92e9-d58dae3b6445",
-    "018a74cb-0fed-4096-af33-fef3cc3e4be0",
-    "dbda5c7c-1e8b-4019-9399-09bf671d8101",
-    "a2423517-560c-435d-97c6-1e8ab247f69f",
-    "a7a6f4b2-2950-4fdd-9c62-87fc8c2ccbb5",
-    "bdc77bdb-8073-4998-9750-f71441ef3c57",
-    "ed15477d-4f3f-40d1-bdef-502972e9f657",
-    "30621104-8452-4289-8780-104f7d111bf9",
-    "9d309b46-65a8-4a1f-9165-30d36a39a984",
-    "74e37f6d-a91e-4d39-b0e2-2cfcec246df9",
-    "7ba383ef-bb25-41b4-b697-fd3ade021262",
-    "10795865-5525-41fc-8bf7-0e8d6983b214"
+    },
+    "28a9f61c-c9ee-4b56-acdd-86ed85c7d066": {
+      "position": {
+        "x": 4,
+        "y": 0.6399999999999864,
+        "z": 41.201427619896094
+      },
+      "rotation": {
+        "x": 0,
+        "y": 0,
+        "z": 0,
+        "w": 1
+      },
+      "viewCenter": {
+        "x": 4,
+        "y": 0.64,
+        "z": -2.4
+      },
+      "contentRect": {
+        "x": 0,
+        "y": 0,
+        "width": 1120,
+        "height": 950
+      },
+      "scale": 1
+    },
+    "645a2962-9d04-45c4-88ca-6701fe0cfbb7": {
+      "position": {
+        "x": -0.21593457604245714,
+        "y": 0.7987196632600444,
+        "z": -2.8999568109557003
+      },
+      "rotation": {
+        "x": 0.012408656027563955,
+        "y": 0.7474530446693184,
+        "z": 0.013967113255507363,
+        "w": -0.6640518737398935
+      },
+      "viewCenter": {
+        "x": 4,
+        "y": 0.64,
+        "z": -2.4
+      },
+      "contentRect": {
+        "x": 0,
+        "y": 0,
+        "width": 1120,
+        "height": 950
+      },
+      "scale": 1
+    },
+    "94719fcd-0e99-4a54-9b20-bc0a31782638": {
+      "position": {
+        "x": -11.890814337189232,
+        "y": 1.2382504365368519,
+        "z": -4.284450699177114
+      },
+      "rotation": {
+        "x": 0.012408656027563955,
+        "y": 0.7474530446693184,
+        "z": 0.013967113255507363,
+        "w": -0.6640518737398935
+      },
+      "viewCenter": {
+        "x": 4,
+        "y": 0.64,
+        "z": -2.4
+      },
+      "contentRect": {
+        "x": 0,
+        "y": 0,
+        "width": 1120,
+        "height": 950
+      },
+      "scale": 1
+    },
+    "dd6c53c6-4cf3-4691-9db1-5959a144930a": {
+      "position": {
+        "x": -39.26781406128591,
+        "y": 2.268927762976946,
+        "z": -7.531018507266614
+      },
+      "rotation": {
+        "x": 0.012408656027563955,
+        "y": 0.7474530446693184,
+        "z": 0.013967113255507363,
+        "w": -0.6640518737398935
+      },
+      "viewCenter": {
+        "x": 4,
+        "y": 0.64,
+        "z": -2.4
+      },
+      "contentRect": {
+        "x": 0,
+        "y": 0,
+        "width": 1120,
+        "height": 950
+      },
+      "scale": 1
+    },
+    "f4a95669-6998-4e14-855c-0d5242a730f4": {
+      "position": {
+        "x": -0.07737487206702554,
+        "y": 1.868258457299362,
+        "z": -3.88465031182659
+      },
+      "rotation": {
+        "x": 0.07885008305937583,
+        "y": 0.8114107374833437,
+        "z": 0.11262534871963806,
+        "w": -0.5680764123989358
+      },
+      "viewCenter": {
+        "x": 4,
+        "y": 0.64,
+        "z": -2.4
+      },
+      "contentRect": {
+        "x": 0,
+        "y": 0,
+        "width": 1120,
+        "height": 950
+      },
+      "scale": 1
+    },
+    "10aa6375-5d6a-4091-bb55-e0322cd02e49": {
+      "position": {
+        "x": 0,
+        "y": 0,
+        "z": 5000
+      },
+      "rotation": {
+        "x": 0,
+        "y": 0,
+        "z": 0,
+        "w": 1
+      },
+      "viewCenter": {
+        "x": 0,
+        "y": 0,
+        "z": 0
+      },
+      "contentRect": {
+        "x": 0,
+        "y": 0,
+        "width": 0,
+        "height": 0
+      },
+      "scale": 1
+    },
+    "b27497b3-42c4-4a2b-8bcf-8c0b7aac8559": {
+      "position": {
+        "x": 868.845450003383,
+        "y": 550.9496048020266,
+        "z": 5000
+      },
+      "rotation": {
+        "x": 0,
+        "y": 0,
+        "z": 0,
+        "w": 1
+      },
+      "viewCenter": {
+        "x": 360,
+        "y": 800,
+        "z": 0
+      },
+      "contentRect": {
+        "x": -818.8524536870619,
+        "y": -825.703324350213,
+        "width": 1362,
+        "height": 950
+      },
+      "scale": 0.5896782961306078
+    },
+    "99b412e6-33d6-4baf-87f9-25502bc99057": {
+      "position": {
+        "x": 672.7151717036445,
+        "y": 665.2704897410858,
+        "z": 5000
+      },
+      "rotation": {
+        "x": 0,
+        "y": 0,
+        "z": 0,
+        "w": 1
+      },
+      "viewCenter": {
+        "x": 360,
+        "y": 800,
+        "z": 0
+      },
+      "contentRect": {
+        "x": -2648.535704560207,
+        "y": -1651.314189003891,
+        "width": 1362,
+        "height": 950
+      },
+      "scale": 0.2050432277991815
+    },
+    "579247ec-5b8a-472e-bcb6-3e024b1a3564": {
+      "position": {
+        "x": 909.7384510304931,
+        "y": 1004.5879105509757,
+        "z": 5000
+      },
+      "rotation": {
+        "x": 0,
+        "y": 0,
+        "z": 0,
+        "w": 1
+      },
+      "viewCenter": {
+        "x": 360,
+        "y": 800,
+        "z": 0
+      },
+      "contentRect": {
+        "x": -208.13771367706855,
+        "y": 224.86518186361621,
+        "width": 1362,
+        "height": 950
+      },
+      "scale": 0.6091909117483963
+    },
+    "6fdfa45a-54d2-427e-9510-d0cbbbc63997": {
+      "position": {
+        "x": 835.6573207343341,
+        "y": 1612.6060761096305,
+        "z": 5000
+      },
+      "rotation": {
+        "x": 0,
+        "y": 0,
+        "z": 0,
+        "w": 1
+      },
+      "viewCenter": {
+        "x": 360,
+        "y": 800,
+        "z": 0
+      },
+      "contentRect": {
+        "x": -565.2605334477604,
+        "y": 635.4607299473766,
+        "width": 1362,
+        "height": 950
+      },
+      "scale": 0.486109872871591
+    },
+    "78b2a53e-ee70-4c31-8746-1f752c9a8b92": {
+      "position": {
+        "x": 1141.9234962563783,
+        "y": 1846.646845614067,
+        "z": 5000
+      },
+      "rotation": {
+        "x": 0,
+        "y": 0,
+        "z": 0,
+        "w": 1
+      },
+      "viewCenter": {
+        "x": 360,
+        "y": 800,
+        "z": 0
+      },
+      "contentRect": {
+        "x": -541.7327633670114,
+        "y": 672.2904237034792,
+        "width": 1362,
+        "height": 950
+      },
+      "scale": 0.40447686165603075
+    },
+    "d2a4ee3f-42cc-4d35-b1c0-7062fce93a50": {
+      "position": {
+        "x": 2901.029344376445,
+        "y": 2543.912040577871,
+        "z": 5000
+      },
+      "rotation": {
+        "x": 0,
+        "y": 0,
+        "z": 0,
+        "w": 1
+      },
+      "viewCenter": {
+        "x": 360,
+        "y": 800,
+        "z": 0
+      },
+      "contentRect": {
+        "x": -1267.6708606664486,
+        "y": -363.7716560379507,
+        "width": 1362,
+        "height": 950
+      },
+      "scale": 0.16336027214818458
+    },
+    "a4431508-a30c-430e-a50d-86f479d3fe98": {
+      "position": {
+        "x": 2269.9787921057223,
+        "y": 2191.600456791385,
+        "z": 5000
+      },
+      "rotation": {
+        "x": 0,
+        "y": 0,
+        "z": 0,
+        "w": 1
+      },
+      "viewCenter": {
+        "x": 360,
+        "y": 800,
+        "z": 0
+      },
+      "contentRect": {
+        "x": -743.8503342697765,
+        "y": 89.44357716089797,
+        "width": 1362,
+        "height": 950
+      },
+      "scale": 0.2259583975880499
+    },
+    "3eadf28d-4c41-4582-afff-c8441fa5470a": {
+      "position": {
+        "x": 577.8907950928566,
+        "y": 1427.7654906920075,
+        "z": 5000
+      },
+      "rotation": {
+        "x": 0,
+        "y": 0,
+        "z": 0,
+        "w": 1
+      },
+      "viewCenter": {
+        "x": 360,
+        "y": 800,
+        "z": 0
+      },
+      "contentRect": {
+        "x": -85.44610409957643,
+        "y": 965.0855683477994,
+        "width": 1362,
+        "height": 950
+      },
+      "scale": 1.0266276470207982
+    },
+    "0ab8a800-8ba6-4fe1-9b37-6bb77d04047f": {
+      "position": {
+        "x": 1059.9343215959334,
+        "y": 921.8915166378004,
+        "z": 5000
+      },
+      "rotation": {
+        "x": 0,
+        "y": 0,
+        "z": 0,
+        "w": 1
+      },
+      "viewCenter": {
+        "x": 360,
+        "y": 800,
+        "z": 0
+      },
+      "contentRect": {
+        "x": -705.1372733242669,
+        "y": -309.25240052386647,
+        "width": 1362,
+        "height": 950
+      },
+      "scale": 0.3858200437647337
+    },
+    "ea775253-49d0-4ed3-b61d-b95637b22a14": {
+      "position": {
+        "x": 682.5241772412398,
+        "y": 1121.9224179367702,
+        "z": 5000
+      },
+      "rotation": {
+        "x": 0,
+        "y": 0,
+        "z": 0,
+        "w": 1
+      },
+      "viewCenter": {
+        "x": 360,
+        "y": 800,
+        "z": 0
+      },
+      "contentRect": {
+        "x": -690.851866325195,
+        "y": 163.98758578690735,
+        "width": 1362,
+        "height": 950
+      },
+      "scale": 0.49585836536914785
+    },
+    "10795865-5525-41fc-8bf7-0e8d6983b214": {
+      "position": {
+        "x": 1160.2215833661908,
+        "y": 1348.8415716531347,
+        "z": 5000
+      },
+      "rotation": {
+        "x": 0,
+        "y": 0,
+        "z": 0,
+        "w": 1
+      },
+      "viewCenter": {
+        "x": 0,
+        "y": 0,
+        "z": 0
+      },
+      "contentRect": {
+        "x": -2691.2419579897723,
+        "y": -1337.5683874424342,
+        "width": 1362,
+        "height": 950
+      },
+      "scale": 0.17681590197793853
+    },
+    "018a74cb-0fed-4096-af33-fef3cc3e4be0": {
+      "position": {
+        "x": 743.75667856221,
+        "y": 1651.6436987140885,
+        "z": 10.988419742662828
+      },
+      "rotation": {
+        "x": -0.35512592880921784,
+        "y": 0.5613862121738767,
+        "z": 0.28924514624850217,
+        "w": 0.6892520154777496
+      },
+      "viewCenter": {
+        "x": 712.8444490228436,
+        "y": 1607.3611650480902,
+        "z": 4.600688166691976
+      },
+      "contentRect": {
+        "x": 694.2541820710484,
+        "y": 1577.097163603306,
+        "width": 1362,
+        "height": 950
+      },
+      "scale": 19.812237765575453
+    }
+  },
+  "camera-uuids": [
+    "d1c35953-29ff-47d2-b543-5faf9f079fc8",
+    "7e43af95-a241-4a1f-9871-281159f7dee4",
+    "e359a3d5-28b4-44a0-9f31-eee3017fe4a1",
+    "6b41b223-a6c0-4b0e-8e27-80deda2f3504",
+    "b3b0f6bd-a824-4bda-9b11-a7b1c316e324",
+    "c3d6dea4-381c-4fb8-938d-63dc28f58d0b",
+    "30971e21-b947-4ca2-a1c1-14b3fb4c7ca4",
+    "902829a1-f2ee-4ba9-95b1-f8d3781da00c",
+    "d5104200-5bc1-4423-90ab-a11d5c871ee4",
+    "659d5670-dfc2-4962-bbeb-03f35b5ff38b",
+    "8eefb02a-1bb0-4dec-a9f8-54f82cbbf1fc",
+    "866d77f1-6686-4dce-a70c-c66552f34611",
+    "8d7be10c-44de-4846-bd56-4debafaa4918",
+    "3aa48dd0-e619-4204-82a7-230940688a2b",
+    "4492c5fb-ef30-470b-b18a-f51ea0ffb0b4",
+    "40e151c7-cc50-476b-92a1-9a7bb42531ce",
+    "65af6e68-ba19-45cf-88e7-d4cd24b58077",
+    "5926ea72-8485-4610-9289-2fb08dbb7664",
+    "fc774aed-7fd0-4127-9ca0-235504fca237",
+    "f9621cff-0655-4c80-bbf2-9692908fa3b7",
+    "35f396e5-f1fd-4206-8567-fd9b5fef6ba2",
+    "4844b5ae-cfad-4282-92e9-d58dae3b6445",
+    "a2423517-560c-435d-97c6-1e8ab247f69f",
+    "a7a6f4b2-2950-4fdd-9c62-87fc8c2ccbb5",
+    "bdc77bdb-8073-4998-9750-f71441ef3c57",
+    "ed15477d-4f3f-40d1-bdef-502972e9f657",
+    "30621104-8452-4289-8780-104f7d111bf9",
+    "9d309b46-65a8-4a1f-9165-30d36a39a984",
+    "74e37f6d-a91e-4d39-b0e2-2cfcec246df9",
+    "7ba383ef-bb25-41b4-b697-fd3ade021262",
+    "5ee4992e-6d52-4123-9583-a4c06fbc1948",
+    "dbda5c7c-1e8b-4019-9399-09bf671d8101",
+    "28a9f61c-c9ee-4b56-acdd-86ed85c7d066",
+    "645a2962-9d04-45c4-88ca-6701fe0cfbb7",
+    "94719fcd-0e99-4a54-9b20-bc0a31782638",
+    "dd6c53c6-4cf3-4691-9db1-5959a144930a",
+    "f4a95669-6998-4e14-855c-0d5242a730f4",
+    "10aa6375-5d6a-4091-bb55-e0322cd02e49",
+    "b27497b3-42c4-4a2b-8bcf-8c0b7aac8559",
+    "99b412e6-33d6-4baf-87f9-25502bc99057",
+    "579247ec-5b8a-472e-bcb6-3e024b1a3564",
+    "6fdfa45a-54d2-427e-9510-d0cbbbc63997",
+    "78b2a53e-ee70-4c31-8746-1f752c9a8b92",
+    "d2a4ee3f-42cc-4d35-b1c0-7062fce93a50",
+    "a4431508-a30c-430e-a50d-86f479d3fe98",
+    "3eadf28d-4c41-4582-afff-c8441fa5470a",
+    "0ab8a800-8ba6-4fe1-9b37-6bb77d04047f",
+    "ea775253-49d0-4ed3-b61d-b95637b22a14",
+    "10795865-5525-41fc-8bf7-0e8d6983b214",
+    "018a74cb-0fed-4096-af33-fef3cc3e4be0"
   ],
   "camera": {
     "color": [

Some files were not shown because too many files changed in this diff