RewardLevelItem.ts 7.81 KB
import { ResUtils } from "simba-cc-resutils";
import { ConfigManager } from "simba-config-manager";
import { DeepReadonlyObject } from "simba-utils";
import { DummyLabel } from "../../common/CCDummyObjects";
import { GameConstData } from "../../common/gameplay/gamedata/GameConstData";
import { UIManager } from "../../common/gameplay/managers/UIManager";
import { IStoryTbl, storyTbl } from "../../config/StoryTbl";
import { suitConfig } from "../../config/SuitConfig";
import { BedRoomCatModelManager, CatRewardConfigTpye } from "../model/BedRoomCatModelManager";
import { UnlockItemModelManager } from "../model/UnlockItemModelManager";
import { UnlockSpecialPlotModelManager } from "../model/UnlockSpecialPlotModelManager";
import PromptAlertDialogViewPresenter from "./presenter/bedroom/PromptAlertDialogViewPresenter";
import { PromptAlertDialogViewProps } from "./view/type/PromptAlertDialogView";

export enum rewardType {
    catFood = 0,
    canned,
    clothes,
    item,
}
export enum CatRewardStatus {
    unlock = 0,//未解锁
    available,//可领取
    received,//已领取
}

export interface rewardSturct {
    numberOrId: number,
    type: rewardType
}

const { ccclass, property } = cc._decorator;

@ccclass
export default class RewardLevelItem extends cc.Component {

    @property({ type: cc.Label, displayName: "Task description labels" })
    private taskDescriptionLabel: cc.Label = DummyLabel;
    @property({ type: [cc.Node], displayName: "Reward items" })
    private rewardItemsNodes: cc.Node[] = [];
    @property({ type: [cc.Sprite], displayName: "Reward icons" })
    private rewardIcons: cc.Sprite[] = [];
    @property({ type: [cc.Label], displayName: "Reward labels" })
    private rewardLabels: cc.Label[] = [];
    @property({ type: cc.Button, displayName: "Reward button" })
    private rewardBtn: cc.Button;

    private _itemId: number = -1;
    private _catRewardConfigTpye: CatRewardConfigTpye = -1;
    private _btnNumber = -1;
    private _rewardBtnStatus = -1;
    private _rewardSturcts: rewardSturct[] = [];
    private _callFunc: () => void;
    async setData(catRewardConfigTpye: CatRewardConfigTpye, btnNumber: number, rewardTaskDescription: string, rewardSturcts: rewardSturct[], rewardBtnStatus: CatRewardStatus, callback: () => void) {
        this._catRewardConfigTpye = catRewardConfigTpye;
        this._btnNumber = btnNumber;
        this._rewardSturcts = rewardSturcts;
        this._rewardBtnStatus = rewardBtnStatus;
        this.taskDescriptionLabel.string = rewardTaskDescription;
        this._callFunc = callback;
        for (let i = 0; i < rewardSturcts.length; i++) {
            let path = "";
            let number = "";
            switch (rewardSturcts[i].type) {
                case rewardType.catFood:
                    path = GameConstData.GAME_CONST_BEDROOMCAT_SPR_DIR + "catfood";
                    number = "x" + rewardSturcts[i].numberOrId.toString();
                    break;
                case rewardType.canned:
                    path = GameConstData.GAME_CONST_BEDROOMCAT_SPR_DIR + "canned";
                    number = "x" + rewardSturcts[i].numberOrId.toString();
                    break;
                case rewardType.clothes:
                    path = GameConstData.GAME_CONST_BEDROOMCAT_SUIT_SPR_DIR + rewardSturcts[i].numberOrId;
                    number = "x1";
                    break;
                case rewardType.item:
                    //获取番外Id对应的物品Id
                    let cfg: DeepReadonlyObject<IStoryTbl> | undefined = undefined;
                    cfg = ConfigManager.getConfig(storyTbl, this._rewardSturcts[i].numberOrId);
                    if (cfg) {
                        this._itemId = cfg.itemId;
                    }
                    path = GameConstData.GAME_CONST_BEDROOMCAT_ITEM_SPR_DIR + this._itemId;
                    number = "x1";
                    break;
                default:
                    break;
            }
            this.rewardIcons[i].spriteFrame = await ResUtils.loadRes(path, cc.SpriteFrame);
            this.rewardLabels[i].string = number;
            this.rewardItemsNodes[i].active = true;
        }
        this.setBtnStatus();
    }

    async setBtnStatus() {
        this.rewardBtn.node.active = true;
        if (this._rewardBtnStatus == CatRewardStatus.unlock) {
            this.rewardBtn.getComponentInChildren(cc.Sprite).spriteFrame = await ResUtils.loadRes(GameConstData.GAME_CONST_BEDROOMCAT_SPR_DIR + "lockBtn", cc.SpriteFrame);
        } else if (this._rewardBtnStatus == CatRewardStatus.available) {
            this.rewardBtn.getComponentInChildren(cc.Sprite).spriteFrame = await ResUtils.loadRes(GameConstData.GAME_CONST_BEDROOMCAT_SPR_DIR + "receiveBtn", cc.SpriteFrame);
        } else if (this._rewardBtnStatus == CatRewardStatus.received) {
            this.rewardBtn.getComponentInChildren(cc.Sprite).spriteFrame = await ResUtils.loadRes(GameConstData.GAME_CONST_BEDROOMCAT_SPR_DIR + "receivedBtn", cc.SpriteFrame);
        }
    }

    onBtnClick() {
        if (this._rewardBtnStatus == CatRewardStatus.unlock) {
            UIManager.showSceneToast("还未解锁,无法领取哦~");
        } else if (this._rewardBtnStatus == CatRewardStatus.available) {
            BedRoomCatModelManager.changeCatRewardStatus(this._catRewardConfigTpye, this._btnNumber);
            this._rewardBtnStatus = CatRewardStatus.received;
            this.setBtnStatus();
            for (let i = 0; i < this._rewardSturcts.length; i++) {
                switch (this._rewardSturcts[i].type) {
                    case rewardType.catFood:
                        BedRoomCatModelManager.addCatFoodNumberByFoodId(1, this._rewardSturcts[i].numberOrId);
                        break;
                    case rewardType.canned:
                        BedRoomCatModelManager.addCatFoodNumberByFoodId(2, this._rewardSturcts[i].numberOrId);
                        break;
                    case rewardType.clothes:
                        let suitConfigs = ConfigManager.getAllConfig(suitConfig);
                        let suitId: number = -1;
                        let clothingId = this._rewardSturcts[i].numberOrId;
                        for (let id in suitConfigs) {
                            if (suitConfigs[id].clothingId == clothingId) {
                                suitId = suitConfigs[id].suitId;
                            }
                        }
                        BedRoomCatModelManager.saveUnlockClothingBySuitId(suitId, clothingId);
                        this.showAlertDialogView(GameConstData.GAME_CONST_BEDROOMCAT_SUIT_SPR_DIR + clothingId, "碎片");
                        break;
                    case rewardType.item:
                        //解锁卧室物品
                        UnlockItemModelManager.saveItemIdToGameRecord(this._itemId);
                        //解锁卧室物品的第一个番外
                        UnlockSpecialPlotModelManager.saveUnlockedSpecialPlotIdByItemIdToGameRecord(this._rewardSturcts[i].numberOrId);
                        this.showAlertDialogView(GameConstData.GAME_CONST_BEDROOMCAT_ITEM_SPR_DIR + this._itemId, "物品");
                        break;
                    default:
                        break;
                }
            }
            UIManager.showSceneToast("领取成功~");
        } else if (this._rewardBtnStatus == CatRewardStatus.received) {
            UIManager.showSceneToast("已经领取过了哦~");
        }
        if (this._callFunc) {
            this._callFunc();
        }
    }

    showAlertDialogView(path: string, name: string) {
        let temp: PromptAlertDialogViewProps = {
            iconSpritePath: path,
            contentLabel: "恭喜您解锁新" + name + "!!!",
        };
        UIManager.pushPresenter(PromptAlertDialogViewPresenter, temp);
    }

    getRewardBtnNode(): cc.Node {
        return this.rewardBtn.node;
    }
}