#pragma once #include "cocos2d.h" #include "cocostudio/CocoStudio.h" #include "cocostudio/CCArmature.h" #include "ui/CocosGUI.h" #include "GameFrameBase.h" #include "PlatformHeader.h" #include "ZJH_CMD.h" #include "ZJH_GamePlayer.h" #include "ZJH_GameLogic.h" #include "ZJH_OpenResultScene.h" #include "ZJH_ChipNode.h" #define ZJH_OPERATE_PANEL 1 //操作面板; #define ZJH_ADD_CHIP_PANEL 2 //加注面板; USING_NS_CC; using namespace cocostudio; using namespace std; using namespace ui; namespace ZJH_SPACE { class ZJHGameScene : public GameFrameBase { public: //创建场景; CREATE_FUNC(ZJHGameScene); static std::string getGameRule(uint32 dwGameRule); //场景初始化; virtual bool init(); //进场动画完成回调; virtual void onEnterTransitionDidFinish(); //场景退出; virtual void onExit(); public: //椅子号视图转换; virtual WORD SwitchViewChairID(WORD wChairID); //更新玩家信息; virtual void upSelfPlayerInfo(); //初始化场景; void initScene(); //绑定网络消息; void initNet(); //重置场景; void resetScene(bool bAll=false); //重置数据; void resetData(); //重置数据; void ResetAllData(); //重置桌子(相当于玩家离开); virtual void ResetTable(); //获取快捷语音文件路径; virtual const std::string getShortChatSoundPath(uint8 cbGender, int nIndex); private: //场景消息; virtual bool OnEventSceneMessage(uint8 cbGameStatus, bool bLookonUser, void* pData, int nDataSize); //恢复空闭场景; bool onGameSceneFree(void* pData, int nDataSize); //发牌场景; bool onGameSceneSendCard(void* pData, int nDataSize); //游戏中场景; bool onGameScenePlaying(void* pData, int nDataSize); void initStatusFree(ZJHStatusBase* pStatusBase); //游戏消息处理; //游戏开始; void onSubGameStart(const void * pBuffer, uint16 wDataSize); //开始下注; void onSubStartChip(const void * pBuffer, uint16 wDataSize); //放弃; void onSubGiveUp(const void * pBuffer, uint16 wDataSize); //加注结果; void onSubUserChip(const void * pBuffer, uint16 wDataSize); //看牌; void onSubLookCard(const void * pBuffer, uint16 wDataSize); //比牌结果; void onSubCompareCard(const void * pBuffer, uint16 wDataSize); //游戏结束; void onSubGameEnd(const void * pBuffer, uint16 wDataSize); //作弊消息; void onSubCheatCard(const void * pBuffer, uint16 wDataSize); //筹码信息处理; void procChipInfo(uint16 wLastViewID, ZJHChipInfo* pChipInfo); //游戏结束处理; void procGameEnd(ZJH_CMD_S_GameEnd* pGameEnd); //比牌结束; void compareCardEnd(); //用户进入; virtual void OnEventUserEnter(GamePlayer * pPlayer); //玩家状态改变; virtual void OnEventUserStatus(GamePlayer * pPlayer); //玩家金币改变; virtual void OnUserScore(GamePlayer* pPlayer); //玩家坐标; virtual Vec2 GetPlayerPosByUserID(uint32 dwUserID); //创建玩家; virtual GamePlayer* CreatePlayer(IClientUserItem * pIClientUserItem); //点击放弃按钮; void onGiveUpButtonClick(Ref* pSender); //点击比牌按钮; void onCompareButtonClick(Ref* pSender); //点击加注按钮; void onAddChipButtonClick(Ref* pSender); //点击跟注按钮; void onFollowButtonClick(Ref* pSender); //点击取消按钮; void onAddCancelButtonClick(Ref* pSender); //点击加注按钮; void onAddChipBtnsClick(Ref* pSender); //点击看牌按钮; void onLookCardButtonClick(Ref* pSender); //点击邀请按钮; void onInviteButtonClick(Ref* pSender); // 开始发牌; void startSendCardAni(); // 动画回调; void movementEventCallFunc(cocostudio::Armature *armature, cocostudio::MovementEventType movementType, const std::string& movementID); // 发牌动画; float playSendCardAni(); // 移动扑克; void moveSentCardSprite(Sprite* pCardSprite, uint16 wViewID, uint8 cbIndex,float fDelayTime); // 扔筹码动画; void playChipAni(uint16 wViewID, int nCount, bool bAction=true); // 播放结束积分动画; void playResultScoreAni(int nIndex, SCORE lScore); // 播放喜钱积分动画; void playXiScoreAni(int nIndex, SCORE lScore); // 显示操作面板; void showOperatePanel(bool bShow, uint8 cbPanelType=0); // 设置桌面总筹码数; void setTotalChipNumber(int nTotalNumber); // 获到性别字符串; std::string getUserGender(int cbGender); // 播放发牌声音; void playSendCardEffect(); // 播放快捷语音; void playFastVoice(int cbGender, int voiceIndex); // 播放音效; void playEffect(std::string strPath); // 播放音效; void playEffectEx(int cbGender, std::string strPath); // 播放点击音效; void playBtnClickEffect(); //发牌结束; void sendSendCardOverMsg(); //发送操作消息; void sendOperateMsg(uint32 dwCode, int lData=0); // 获取当前玩家数量; uint8 getCurPlayerCount(); //私人场; public: //私人场信息; virtual void OnSocketSubPrivateRoomInfo(CMD_GF_Private_Room_Info* pNetInfo); //私人场结束; virtual void OnSocketSubPrivateEnd(void* data, int dataSize); //私人场解散信息; virtual void OnSocketSubPrivateDismissInfo(CMD_GF_Private_Dismiss_Info* pNetInfo); //私人场解散结果; virtual void OnSocketSubPrivateDismissResult(CMD_GF_Private_Dismiss_Result* pNetInfo); //自由人数场玩家状态; virtual void OnSocketSubPrivateAutoUserStatus(tagAutoUserStatus* pNetInfo){} //自由人数 virtual void OnSocketSubPrivateAutoUserReady(CMD_GR_Private_ReadyInfo* pNetInfo){} //显示结算信息; void onEventShowPrivate(cocos2d::EventCustom *event); //按住语音按钮; void OnButtonVoiceTouched(Ref*, Widget::TouchEventType); void ShowGameRule(CMD_GF_Private_Room_Info* pNetInfo); //录像处理; public: virtual void StartGameRecord(){}; virtual void NextRecordAction(float dt){}; private: //私人场信息; CMD_GF_Private_Room_Info m_PrivateRoomInfo; uint32 m_dwRoomID; //房间号; uint32 m_dwPlayCout; //局数; Node* m_pVoiceNode; //语音标志; uint8 m_cbGameStatus; //游戏状态; uint16 _wCurrentUser; //当前玩家; SCORE _lCellScore; //基础积分; uint16 _wOperTimeOut; //操作超时时间; uint8 _cbCurRound; //当前轮数; uint8 _cbMaxRound; //最大轮数; uint8 _cbMinLookRound; //最小看牌轮数; uint32 _dwOperateCode; //操作掩码; uint16 _wBankerUser; //庄家用户; SCORE _lCurChipScore; //当前注数; SCORE _lMaxChipScore; //最大可下注; uint8 _aryGamingStatus[ZJH_GAME_PLAYER]; //玩家状态; SCORE _aryUserChipScore[ZJH_GAME_PLAYER]; //玩家下注; SCORE _lTotalChipScore; //玩家总下注; uint8 _aryHandCardData[ZJH_MAX_COUNT]; //手牌数据; uint16 _aryChairToViewID[ZJH_GAME_PLAYER]; //实际位置对应视图ID; bool _bHasShowLookCard; //是否已显示看牌; bool _bComparingCard; //是否正在比牌; bool _bGameEnd; //游戏是否结束; ZJH_CMD_S_CompareCard _cmdCompareCard; //比牌数据包; ZJH_CMD_S_GameEnd _cmdGameEnd; //游戏结束; //界面; Node* m_rootNode; //场景; Layout* _MainPanel; ImageView* _imgRoomInfo; Layout* _RoundPanel; Text* _txtRoomID; Text* _txtJushu; Text* _txtCompareRound; //比牌轮数文本; Text* _txtLookCardRound; //看牌轮数文本; Text* _txtOpenCardRound; //开牌轮数文本; Layout* _ChipPanel; // 筹码面板; Layout* _ButtonPanel; Button* _btnInvite; Button* _btnDismiss; Button* _btnLeave; // 离开按钮; Button* _btnVoice; Button* _btnChat; Button* _btnStartGame; Layout* _OperBtnsPanel; Layout* _AddChipPanel; ZJHOpenResultScene* _OpenResultScene; Button* _btnGiveUp; Button* _btnCompare; Button* _btnAddChip; Button* _btnFollow; Button* _btnAddCancel; Button* _aryAddChip[4]; Text* _txtCompareChip; Text* _txtFollowChip; Text* _txtTip; ImageView* _imgAllChips; Text* _txtAllChips; Sprite* _sprSelectUserTip; Layout* _ComparePanel; Armature* _armCompare; Sprite* _sprLeftHead; Text* _txtLeftNickName; Sprite* _sprLeftBackCard; Sprite* _sprLeftFlag; Armature* _armLeftLose; Sprite* _sprRightHead; Text* _txtRightNickName; Sprite* _sprRightBackCard; Sprite* _sprRightFlag; Armature* _armRightLose; Layout* _ResultPanel; Button* _btnReady; Button* _btnPrivateEnd; Armature* _pArmatureResult; // 胜负动画; TextAtlas* _pTxtResultScore[ZJH_GAME_PLAYER]; TextAtlas* _pTxtXiScore[ZJH_GAME_PLAYER]; ZJHGamePlayer* m_aryPlayer[ZJH_GAME_PLAYER]; //玩家; ZJHGamePlayer* m_pLocalPlayer; std::string m_strGameRuleInfo; Vec2 _ptSendCardPos; // 发牌位置; std::vector _aryResultItem; std::vector _aryChipNode; CZJHGameLogic m_GameLogic; // localZOrder 层级; enum ZOrder { ZO_DEFAULT = 0, // 默认; ZO_CARDMANAGER, // 麻将管理类; ZO_UPDOWN, // 上下翻; ZO_ANI, // 动画; ZO_TRUSTEE, // 托管; ZO_END, // 结算面板; ZO_PRIVATE, // 私人场面板; }; }; }