CShopDialogクラス

36381 ワード

#ifndef SHOP_H
#define SHOP_H

#include "XWidget.h"
#include "GameConfig.h"

class CXStatic;
class CXImage;
class CXButton;
class CXTimer;
class CXCommon;

#define SHOP_NOCHECKED_INIT_ID    1060
#define    SHOP_CHECKED_INIT_ID    1050
#define SHOP_GOODS_NUM            6
#define SHOP_GOODS_BTN_INIT_ID    1070
#define SHOP_PRICE_FRAME        1033
#define SHOP_STA_PRICE            1040
#define SHOP_TIME                0.3
#define SHOP_STATIC_NUM            8
#define SHOP_INTRODUCTION        "shop_"




class CShopDialog : public CXWidget
{
public:
    enum ShopDialogId
    {
        _IDD_ShopDialog = 131,
        _IDC_BtnBuy = 1003,
        _IDC_BtnBack = 1010,
        _IDC_ImgBoss = 1001,
        _IDC_ImgStore = 1002,
        _IDC_Decoration1 = 1004,
        _IDC_Decoration2 = 1005,
        _IDC_ImgSparFrame = 1030,
        _IDC_ImgSectExp    = 1031,
        _IDC_StaIntroduction = 1048,
    };
public:
    CShopDialog(void);
    ~CShopDialog(void);
    bool init();
    void btnMsgCallback(CCObject* pSender);
    virtual void setVisible(bool visible);
    void refreshDlg();
    void onTimerEnd(CCObject* obj);
private:
    CXImage*        m_pImgBoss;
    CXImage*        m_pImgStore;
    CXImage*        m_pImgDecoration1;
    CXImage*        m_pImgDecoration2;
    CXImage*        m_pImgChecked[SHOP_GOODS_NUM];
    CXButton*        m_pBtnBuy;
    CXButton*        m_pBtnBack;
    CXStatic*        m_pStaIntroduction;
    CXTimer*        m_pTimer;
    CCNode*            m_pStorePad;
    int                m_nCheckedIndex;
};

#endif
#include "ShopDialog.h"
#include "WidgetMgr.h"
#include "XButton.h"
#include "XImage.h"
#include "XStatic.h"
#include "XCommon.h"
#include "EncyclopediaDialog.h"
#include "GameConfig.h"
#include "GameLogic.h"
#include "hero.h"
#include "Config.h"
#include "WorldmapDialog.h"
#include "XTimer.h"
#include "XCommon.h"

CShopDialog::CShopDialog(void)
{
    m_pImgBoss = NULL;
    m_pImgStore = NULL;
    m_pBtnBuy = NULL;
    m_pBtnBack = NULL;
    m_pImgDecoration1 = NULL;
    m_pImgDecoration2 = NULL;
    m_pStorePad = NULL;
    m_pTimer = NULL;
    m_pStaIntroduction = NULL;
    m_nCheckedIndex = 0;

    for (int i = 0; i < SHOP_GOODS_NUM; i++)
    {
        m_pImgChecked[i] = NULL;
    }
}


CShopDialog::~CShopDialog(void)
{
}

bool CShopDialog::init()
{
    CWidgetMgr::getInstance()->loadWidget(this, _IDD_ShopDialog);
    CWidgetMgr::getInstance()->addWnd(this);
    for (deque<CXWindow*>::const_iterator it = this->getDequeWnd().begin(); it != this->getDequeWnd().end(); it++)
    {
        if (UI_BUTTON == (*it)->getUIType())
        {
            (*it)->setClickListener(this, callfuncO_selector(CShopDialog::btnMsgCallback));
        }
    }

    m_pStorePad = CCNode::create();
    this->addChild(m_pStorePad);
    m_pStorePad->setPosition(0,0);

    CXWindow* pWnd = NULL;
    
    pWnd = this->getCtrl(_IDC_ImgSparFrame);
    pWnd->getParent()->removeChild(pWnd, false);
    m_pStorePad->addChild(pWnd);

    pWnd = this->getCtrl(_IDC_ImgSectExp);
    pWnd->getParent()->removeChild(pWnd, false);
    m_pStorePad->addChild(pWnd);

    pWnd = this->getCtrl(_IDC_ImgStore);
    pWnd->getParent()->removeChild(pWnd, false);
    m_pStorePad->addChild(pWnd);

    for (int i = 0; i < SHOP_GOODS_NUM; i++)
    {
        m_pImgChecked[i] = (CXImage*)this->getCtrl(SHOP_CHECKED_INIT_ID + i);
        ASSERT(m_pImgChecked[i]);
        m_pImgChecked[i]->setVisible(false);

        pWnd = this->getCtrl(SHOP_NOCHECKED_INIT_ID + i);
        pWnd->getParent()->removeChild(pWnd, false);
        m_pStorePad->addChild(pWnd);

        pWnd = this->getCtrl(SHOP_CHECKED_INIT_ID + i);
        pWnd->getParent()->removeChild(pWnd, false);
        m_pStorePad->addChild(pWnd);

        pWnd = this->getCtrl(SHOP_PRICE_FRAME + i);
        pWnd->getParent()->removeChild(pWnd, false);
        m_pStorePad->addChild(pWnd);

    }

    for (int i = 0; i < SHOP_STATIC_NUM; i++)
    {
        pWnd = this->getCtrl(SHOP_STA_PRICE + i);
        pWnd->getParent()->removeChild(pWnd, false);
        m_pStorePad->addChild(pWnd);
    }
    
    pWnd = this->getCtrl(_IDC_StaIntroduction);
    pWnd->getParent()->removeChild(pWnd, false);
    m_pStorePad->addChild(pWnd);

    m_pStaIntroduction = (CXStatic*)this->getCtrl(_IDC_StaIntroduction);
    ASSERT(m_pStaIntroduction);
    m_pStaIntroduction->reorderChild(m_pStaIntroduction,5);

    m_pImgBoss = (CXImage*)this->getCtrl(_IDC_ImgBoss);
    ASSERT(m_pImgBoss);
    m_pImgBoss->setVisible(false);
    this->reorderChild(m_pImgBoss, 5);

    m_pImgStore = (CXImage*)this->getCtrl(_IDC_ImgStore);
    ASSERT(m_pImgStore);
    m_pImgStore->setVisible(false);

    m_pBtnBuy = (CXButton*)this->getCtrl(_IDC_BtnBuy);
    ASSERT(m_pBtnBuy);
    m_pBtnBuy->setVisible(false);
    this->reorderChild(m_pBtnBuy, 5);

    m_pBtnBack = (CXButton*)this->getCtrl(_IDC_BtnBack);
    ASSERT(m_pBtnBack);
    m_pBtnBack->setVisible(false);

    m_pImgDecoration1 = (CXImage*)this->getCtrl(_IDC_Decoration1);
    ASSERT(m_pImgDecoration1);
    m_pImgDecoration1->setVisible(false);
    this->reorderChild(m_pImgDecoration1, 5);

    m_pImgDecoration2 = (CXImage*)this->getCtrl(_IDC_Decoration2);
    ASSERT(m_pImgDecoration2);
    m_pImgDecoration2->setVisible(false);
    this->reorderChild(m_pImgDecoration2, 5);
    
    m_pTimer = new CXTimer();
    m_pTimer->init(2, 0.2f);
    m_pTimer->autorelease();
    this->addChild(m_pTimer);
    m_pTimer->setTimerEndListener(this, callfuncO_selector(CShopDialog::onTimerEnd));
    

    this->setVisible(false);
    return true;
}

void CShopDialog::onTimerEnd(CCObject* obj)
{
    m_pStorePad->setPosition(m_pStorePad->getPosition().x,m_pStorePad->getPosition().y - 768);
    m_pImgBoss->setPosition(m_pImgBoss->getPosition().x + 1024,m_pImgBoss->getPosition().y);
    m_pBtnBuy->setPosition(m_pBtnBuy->getPosition().x,m_pBtnBuy->getPosition().y + 768);
    m_pBtnBack->setPosition(m_pBtnBack->getPosition().x,m_pBtnBack->getPosition().y - 768);
    m_pImgDecoration1->setPosition(m_pImgDecoration1->getPosition().x,m_pImgDecoration1->getPosition().y + 768);
    m_pImgDecoration2->setPosition(m_pImgDecoration2->getPosition().x,m_pImgDecoration2->getPosition().y + 768);
    this->setVisible(false);
    m_pStorePad->stopAllActions();
    m_pImgBoss->stopAllActions();
    m_pBtnBuy->stopAllActions();
    m_pBtnBack->stopAllActions();
    m_pImgDecoration1->stopAllActions();
    m_pImgDecoration2->stopAllActions();

    ((CWorldmapDialog*)CWidgetMgr::getInstance()->getWnd(CWorldmapDialog::_IDD_ChooseMenuDialog))->entrance();
}

void CShopDialog::btnMsgCallback(CCObject* pSender)
{
    CXButton* pButton = (CXButton*)pSender;

    switch(pButton->getId())
    {
    case _IDC_BtnBack:
        {
            // 
            m_pStorePad->runAction(CCMoveTo::create(SHOP_TIME,
                CCPoint(m_pStorePad->getPosition().x,m_pStorePad->getPosition().y + 768)));
            m_pImgBoss->runAction(CCMoveTo::create(SHOP_TIME,
                CCPoint(m_pImgBoss->getPosition().x - 1024,m_pImgBoss->getPosition().y)));
            m_pBtnBuy->runAction(CCMoveTo::create(SHOP_TIME,
                CCPoint(m_pBtnBuy->getPosition().x,m_pBtnBuy->getPosition().y - 768)));
            m_pBtnBack->runAction(CCMoveTo::create(SHOP_TIME,
                CCPoint(m_pBtnBack->getPosition().x,m_pBtnBack->getPosition().y + 768)));
            m_pImgDecoration1->runAction(CCMoveTo::create(SHOP_TIME,
                CCPoint(m_pImgDecoration1->getPosition().x,m_pImgDecoration1->getPosition().y - 768)));
            m_pImgDecoration2->runAction(CCMoveTo::create(SHOP_TIME,
                CCPoint(m_pImgDecoration2->getPosition().x,m_pImgDecoration2->getPosition().y - 768)));
            if (m_pTimer)
            {
                m_pTimer->setCount(3);
                m_pTimer->start();
            }
        }
        break;
    default:
        break;
    }

    if (pButton->getId() >= SHOP_GOODS_BTN_INIT_ID && pButton->getId() < SHOP_GOODS_BTN_INIT_ID + SHOP_GOODS_NUM)
    {
        m_nCheckedIndex = pButton->getId() - SHOP_GOODS_BTN_INIT_ID;
    }

    if (this->isVisible())
    {
        this->refreshDlg();
    }
}

void CShopDialog::setVisible(bool visible)
{
    CXWidget::setVisible(visible);
    if (visible)
    {
        // 
        CCPoint tPos = m_pStorePad->getPosition();
        m_pStorePad->setPosition(m_pStorePad->getPosition().x ,m_pStorePad->getPosition().y + CConfig::getInstance()->getNumberByKey("shop_store_startpos_y"));
        m_pImgStore->setVisible(true);
        m_pStorePad->runAction(CCSequence::create(
            CCMoveTo::create(CConfig::getInstance()->getNumberByKey("shop_store_showtime"),CCPoint(tPos.x ,tPos.y + CConfig::getInstance()->getNumberByKey("shop_boss01_y"))),
            CCMoveTo::create(CConfig::getInstance()->getNumberByKey("shop_store_showtime"),CCPoint(tPos.x ,tPos.y + CConfig::getInstance()->getNumberByKey("shop_boss02_y"))),
            CCMoveTo::create(CConfig::getInstance()->getNumberByKey("shop_store_showtime"),CCPoint(tPos.x ,tPos.y + CConfig::getInstance()->getNumberByKey("shop_boss03_y"))),
            CCMoveTo::create(CConfig::getInstance()->getNumberByKey("shop_store_showtime"),CCPoint(tPos.x ,tPos.y + CConfig::getInstance()->getNumberByKey("shop_boss04_y"))),
            CCMoveTo::create(CConfig::getInstance()->getNumberByKey("shop_store_showtime"),CCPoint(tPos.x ,tPos.y)),NULL));

        tPos = m_pImgBoss->getPosition();
        m_pImgBoss->setPosition(m_pImgBoss->getPosition().x - CConfig::getInstance()->getNumberByKey("shop_screen_width"), m_pImgBoss->getPosition().y);
        m_pImgBoss->setVisible(true);
        m_pImgBoss->runAction(CCMoveTo::create(CConfig::getInstance()->getNumberByKey("shop_boss_movetime"),tPos));

        CCActionInterval* pFloatUp = CCMoveBy::create(CConfig::getInstance()->getNumberByKey("shop_boss_floattime"),
            CCPoint(CConfig::getInstance()->getNumberByKey("shop_boss_moveby_x"),
                    CConfig::getInstance()->getNumberByKey("shop_boss_moveby_y")));
        CCActionInterval* pReFloat = CCRepeatForever::create(static_cast<CCSequence *>(CCSequence::create(pFloatUp,pFloatUp->reverse(),NULL)));
        m_pImgBoss->runAction(pReFloat);

        tPos = m_pBtnBuy->getPosition();
        m_pBtnBuy->setPosition(m_pBtnBuy->getPosition().x, 
                m_pBtnBuy->getPosition().y - CConfig::getInstance()->getNumberByKey("shop_screen_heigh"));
        m_pBtnBuy->setVisible(true);
        m_pBtnBuy->runAction(CCMoveTo::create(
            CConfig::getInstance()->getNumberByKey("shop_btnbuy_time"),tPos));

        tPos = m_pBtnBack->getPosition();
        m_pBtnBack->setPosition(m_pBtnBack->getPosition().x , m_pBtnBack->getPosition().y + 768);
        m_pBtnBack->setVisible(true);
        m_pBtnBack->runAction(CCMoveTo::create(
            CConfig::getInstance()->getNumberByKey("shop_btnback_time"),tPos));

        pFloatUp = CCMoveBy::create(
            CConfig::getInstance()->getNumberByKey("shop_btnback_moveby_time"),
            CCPoint(CConfig::getInstance()->getNumberByKey("shop_btnback_moveby_x"),
                    CConfig::getInstance()->getNumberByKey("shop_btnback_moveby_y")));
        pReFloat = CCRepeatForever::create(static_cast<CCSequence *>(CCSequence::create(pFloatUp,pFloatUp->reverse(),NULL)));
        m_pBtnBack->runAction(pReFloat);

        tPos = m_pImgDecoration1->getPosition();
        m_pImgDecoration1->setPosition(tPos.x,tPos.y - CConfig::getInstance()->getNumberByKey("shop_screen_heigh"));
        m_pImgDecoration1->setVisible(true);
        m_pImgDecoration1->runAction(CCMoveTo::create(CConfig::getInstance()->getNumberByKey("shop_decoration1_movetime"),tPos));
        pFloatUp = CCMoveBy::create(CConfig::getInstance()->getNumberByKey("shop_decoration1_floatime"),
                                    CCPoint(CConfig::getInstance()->getNumberByKey("shop_decoration1_moveby_x"),
                                            CConfig::getInstance()->getNumberByKey("shop_decoration1_moveby_y")));
        pReFloat = CCRepeatForever::create(static_cast<CCSequence *>(CCSequence::create(pFloatUp,pFloatUp->reverse(),NULL)));
        m_pImgDecoration1->runAction(pReFloat);

        tPos = m_pImgDecoration2->getPosition();
        m_pImgDecoration2->setPosition(tPos.x,tPos.y - CConfig::getInstance()->getNumberByKey("shop_screen_heigh"));
        m_pImgDecoration2->setVisible(true);
        m_pImgDecoration2->runAction(CCMoveTo::create(CConfig::getInstance()->getNumberByKey("shop_decoration2_movetime"),tPos));
        m_pImgDecoration2->setVisible(true);
        pFloatUp = CCMoveBy::create(CConfig::getInstance()->getNumberByKey("shop_decoration2_floatime"),
                                    CCPoint(CConfig::getInstance()->getNumberByKey("shop_decoration2_moveby_x"),
                                            CConfig::getInstance()->getNumberByKey("shop_decoration2_moveby_y")));
        pReFloat = CCRepeatForever::create(static_cast<CCSequence *>(CCSequence::create(pFloatUp,pFloatUp->reverse(),NULL)));
        m_pImgDecoration2->runAction(pReFloat);

        m_nCheckedIndex = 0;
        this->refreshDlg();
    }
}

void CShopDialog::refreshDlg()
{
    for (int i = 0; i < SHOP_GOODS_NUM; i++)
    {
        m_pImgChecked[i]->setVisible(false);
    }
    m_pImgChecked[m_nCheckedIndex]->setVisible(true);
    m_pStaIntroduction->setText(CConfig::getInstance()->getWordBykey((string(SHOP_INTRODUCTION) + CXCommon::toString(m_nCheckedIndex)).c_str()).c_str());
}