Browse Source

换皮肤

baowen 12 hours ago
parent
commit
ade53ff3d4

File diff suppressed because it is too large
+ 444 - 311
assets/editor/prefab/SuperFindPanel.prefab


+ 2 - 1
assets/editor/script/LevelContainer.ts

@@ -100,7 +100,8 @@ export class LevelContainer extends Component {
                 this.lvlBg.spriteFrame = spriteFrame;
             }
         });
-        var randomIndex = randomRangeInt(0, itemSpinePaths.length);
+        console.log("打印",Skin.skinData._lastSelectSpinePath,"数组",itemSpinePaths)
+        var randomIndex = itemSpinePaths.indexOf(Skin.skinData._lastSelectSpinePath);
         // console.log("物品数量", itemcnt,"物品缩放数组长度",Difficulty.difficutyData.scales.length,"动画路径长度",itemSpinePaths.length);
         // 生成物品
         for (let i = 0; i < itemcnt; i++) {

+ 18 - 0
assets/editor/script/SelectSkinPanel.ts

@@ -4,6 +4,7 @@ import { SkinItem } from './SkinItem';
 import { LayerMgr } from '../../script/Manager/LayerMgr';
 import { BundleName } from '../../script/Config/EnumCfg';
 import EventMgr from '../../script/Manager/EventMgr';
+import { SkinItem2 } from './SkinItem2';
 const { ccclass, property } = _decorator;
 
 @ccclass('SelectSkinPanel')
@@ -16,6 +17,8 @@ export class SelectSkinPanel extends Component {
     spineoffset:Vec2 = new Vec2(0,0);
     @property(Button)
     btnClose: Button = null;
+    @property(Boolean)
+    addListenerShowUsingLabel:boolean = false;
 
     _skinData: SkinData = null
     _allSkinList:{ [key: number]: string };
@@ -24,6 +27,8 @@ export class SelectSkinPanel extends Component {
 
     protected start(): void {
         this.btnClose.node.on(Node.EventType.TOUCH_END,this.onBtnCloseClick,this)
+        if(this.addListenerShowUsingLabel)
+        EventMgr.ins.addEventListener("showUsingLabel",this.showUsingLabel,this)
     }
 
     init() {
@@ -143,6 +148,19 @@ export class SelectSkinPanel extends Component {
             item.getComponent(SkinItem).setSelectSkin(false)
         }
     }
+
+    showUsingLabel(para:any[2])
+    {
+        let item = para[0]
+        let isUnlock = para[1]
+
+        this._items.forEach(element => {
+            if(element == item && isUnlock)
+            (element.getComponent(SkinItem) as SkinItem2).usingLabel.active = true
+            else
+            (element.getComponent(SkinItem) as SkinItem2).usingLabel.active = false
+        });
+    }
 }
 
 

+ 63 - 0
assets/editor/script/SkinItem2.ts

@@ -0,0 +1,63 @@
+import { _decorator, Color, Component, instantiate, Node, Prefab, Sprite, Vec2, Vec3 } from 'cc';
+import { SkinItem } from './SkinItem';
+import EventMgr from '../../script/Manager/EventMgr';
+import { Skin } from '../../script/Manager/LocalDataMgr';
+const { ccclass, property } = _decorator;
+
+@ccclass('SkinItem2')
+export class SkinItem2 extends SkinItem {
+    @property({type:Node})
+    lock:Node = null
+    @property({type:Node})
+    usingLabel:Node = null
+    @property(Sprite)
+    bgSprite:Sprite = null
+    @property({type:Node})
+    btnUse:Node = null
+
+    private unlockColor = "C16D51"
+    private lockColor = "FFFFFF"
+
+    private key:number = -1
+    private isUnlock:boolean = false
+
+    protected override start(): void {
+        super.start()
+        this.btnUse.on(Node.EventType.TOUCH_END,this.onBtnUseClick,this)
+    }
+    override init(key: number,spine:Prefab,animName:string = "idle",spineOffset:Vec2 = new Vec2(0,0),isUnlock:boolean = false)
+    {
+        let skin = instantiate(spine)
+        this.skinRoot.addChild(skin)
+        skin.active = true
+        skin.setPosition(Vec3.ZERO)
+        skin.position = skin.position.clone().add3f(spineOffset.x,spineOffset.y,0)
+        this.lock.active = !isUnlock
+        this.key = key
+        this.setBgColor(isUnlock)
+        this.isUnlock = isUnlock
+    }
+
+    override onClick()
+    {
+        this.isUnlock = true
+        this.setBgColor(this.isUnlock)
+        this.lock.active = !this.isUnlock
+        Skin.addSelectSkin(this.key)
+    }
+
+    onBtnUseClick()
+    {
+        Skin.setSelectStatu(true)
+        EventMgr.ins.dispatchEvent("showUsingLabel",[this.node,this.isUnlock])
+        EventMgr.ins.dispatchEvent("regenerate")
+    }
+
+    setBgColor(isUnlock)
+    {
+        let color = new Color()
+        this.bgSprite.color = isUnlock ? Color.fromHEX(color, this.unlockColor) : Color.fromHEX(color, this.lockColor);
+    }
+}
+
+

+ 9 - 0
assets/editor/script/SkinItem2.ts.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "4.0.24",
+  "importer": "typescript",
+  "imported": true,
+  "uuid": "3d7d39d0-8bc9-4b1c-a153-3346f70b3d57",
+  "files": [],
+  "subMetas": {},
+  "userData": {}
+}

+ 9 - 0
assets/editor/script/SuperFindPanel.ts

@@ -13,6 +13,8 @@ export class SuperFindPanel extends Component {
     selDifPanel: SelectDifficultyPanel = null
     @property(SelectSkinPanel)
     selSkinPanel: SelectSkinPanel = null
+    @property(SelectSkinPanel)
+    selSkinPanel2: SelectSkinPanel = null
     @property(SelectMapPanel)
     selMapPanel: SelectMapPanel = null
     @property(LevelContainer)
@@ -33,6 +35,8 @@ export class SuperFindPanel extends Component {
 
     @property(Node)
     bottom: Node = null
+    @property(Node)
+    bottom2: Node = null
 
     _showScale:boolean = false
     _gameTime:number = 600
@@ -60,6 +64,10 @@ export class SuperFindPanel extends Component {
         this.selSkinPanel.node.active = true;
         this.selSkinPanel.init();
     }
+    OpenSelSkinPanel2() {
+        this.selSkinPanel2.node.active = true;
+        this.selSkinPanel2.init();
+    }
     OpenSelMapPanel() {
         this.selMapPanel.node.active = true;
         this.selMapPanel.init();
@@ -105,6 +113,7 @@ export class SuperFindPanel extends Component {
     onHideClick()
     {
         this.bottom.active = false
+        this.bottom2.active = true
     }
 
     onTipClick()

+ 13 - 2
assets/script/Manager/LocalDataMgr.ts

@@ -221,17 +221,20 @@ export interface SkinData {
     singleSelect:string
     multiSelect:string
     selectedSkinList:Array<number>
+    _lastSelectSpinePath:string
 }
 
 export class UserSkinData {
      private _skinData: SkinData;
      private _selectSkins:string[] = []
+     private  = defaultSkin
 
     constructor() {
         let defaultData: SkinData = {
             singleSelect: "true",
             multiSelect: "false",
-            selectedSkinList: []
+            selectedSkinList: [],
+            _lastSelectSpinePath:defaultSkin,
         }
         this._skinData = sys.localStorage.getItem("skinData") ? Object.assign(defaultData, JSON.parse(sys.localStorage.getItem("skinData"))) : defaultData
     }
@@ -256,6 +259,12 @@ export class UserSkinData {
         this.saveSkinData()
     }
 
+    setCurrentSelSingleSkin(key:number)
+    {
+        this._skinData._lastSelectSpinePath = allSkinList[key]
+        this.saveSkinData()
+    }
+
     get skinData(): SkinData {
         return this._skinData;
     }
@@ -288,6 +297,7 @@ export class UserSkinData {
         {
             this._skinData.selectedSkinList.push(key)
         }
+        this.setCurrentSelSingleSkin(key)
         this.saveSkinData()
     }
 
@@ -323,7 +333,8 @@ export class UserSkinData {
         let defaultData: SkinData = {
             singleSelect: "true",
             multiSelect: "false",
-            selectedSkinList: []
+            selectedSkinList: [],
+            _lastSelectSpinePath:defaultSkin,
         }
         this._skinData = defaultData
         this.saveSkinData()

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