#pragma once #include "cocos2d.h" #include "cocostudio/CocoStudio.h" #include "cocostudio/CCArmature.h" #include "ui/CocosGUI.h" #include "Singleton.h" #include "GameFrameBase.h" #include "PlatformHeader.h" #include "NN_GamePlayer.h" #include "NN_GameLogic.h" #include "NN_CMD.h" #include "NN_PrivateEndNode.h" USING_NS_CC; using namespace cocostudio; using namespace std; using namespace ui; namespace NiuNiu_SPACE{ enum NN_OPERATE_STATUS { NN_OS_NULL = 0, // 无操作; NN_OS_CALLBANK, // 其他人叫庄; NN_OS_ADDSCORE0, // 其他人加注; NN_OS_ADDSCORE1, // 自己加注; }; class NNGameScene :public GameFrameBase { public: //创建场景; CREATE_FUNC(NNGameScene); 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); void onSliderEventCallback(Ref* widget, Slider::EventType type); 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 onGameSceneRomBanker(void* pData, int nDataSize); //下注状态; bool onGameSceneUserChip(void* pData, int nDataSize); //开牌状态; bool onGameSceneOpenCard(void* pData, int nDataSize); //游戏结束; bool onGameSceneEnd(void* pData, int nDataSize); //游戏消息处理; //游戏开始; void onSubGameStart(const void * pBuffer, uint16 wDataSize); //开始抢庄; void onSubStartRob(const void * pBuffer, uint16 wDataSize); //玩家抢庄; void onSubUserRob(const void * pBuffer, uint16 wDataSize); //开始下注; void onSubStartChip(const void * pBuffer, uint16 wDataSize); //玩家下注; void onSubUserChip(const void * pBuffer, uint16 wDataSize); //开始开牌; void onSubStartOpen(const void * pBuffer, uint16 wDataSize); //玩家开牌; void onSubOpenCard(const void * pBuffer, uint16 wDataSize); //游戏结束; void onSubGameEnd(const void * pBuffer, uint16 wDataSize); //所有玩家开牌; void onSubAllOpenCard(const void * pBuffer, uint16 wDataSize); //用户进入; virtual void OnEventUserEnter(GamePlayer * pPlayer); //玩家状态改变; virtual void OnEventUserStatus(GamePlayer * pPlayer); //用户离开; virtual void OnEventUserLeave(GamePlayer * pPlayer); //玩家金币改变; virtual void OnUserScore(GamePlayer* pPlayer); //玩家坐标; virtual Vec2 GetPlayerPosByUserID(uint32 dwUserID); //创建玩家; virtual GamePlayer* CreatePlayer(IClientUserItem * pIClientUserItem); // 定时器; void openGameClock(int iLeftTime, const std::function& callFunc=nullptr); // 开启定时器; void closeGameClock(); // 玩家抢庄字消失; void clearRobIcon(); // 发牌动画; float playSendCardAni(); // 移动扑克; void moveSentCardSprite(Sprite* pCardSprite, uint16 wViewID, float fDelayTime); //// 赢动画; //void showWinAni(SCORE lGameScore[NN_GAME_PLAYER]); //// 赢图标显示; //void showWinCup(); // 显示玩家牌; void showPlayerCard(); // 显示庄家; void showLordUser(bool isplayEffect = false); // 扔筹码动画; void playChipAni(uint16 wViewID, int nCount, bool bAction); // 收筹码动画; void playGetChipAni(); // 筹码移动到下注区; void ShowGoldMoveToArea(SCORE lScore, uint8 wStartViewID, uint8 wTargetViewID); // 显示搓牌; void showCuoPai(uint8 aryCardData[], uint8 cbCardCount); // 操作动画; void operateAction(std::string strAction); // 获到性别字符串; std::string getUserGender(int cbGender); // 播放发牌声音; void playSendCardEffect(); // 播放快捷语音; void playFastVoice(int cbGender, int voiceIndex); // 播放牛音效; void playCowValue(int cbGender, int cowIndex); // 播放音效; void playEffect(std::string strPath); // 播放点击音效; void playBtnClickEffect(); // 发牌结束消息; void sendSendCardOverMsg(); // 抢庄消息; void sendRobBankerMsg(bool bFlag); // 加注消息; void sendChipScoreMsg(SCORE lChipScore); // 发送开牌消息; void sendOpenCardMsg(); // 设置状态; void setOperateStatus(NN_OPERATE_STATUS ops); // 获取当前玩家数量; 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; //语音标志; int m_nVoiceTimeID; //语音定时器ID; uint8 m_cbGameStatus; //游戏状态; SCORE _iBaseScore; //底注; SCORE _lMinFreeChip; //最小可下注; SCORE _lMaxFreeChip; //最大封顶; SCORE _lAddChip; //加注筹码; bool _bCuoPai; bool _bWin; uint16 _wLordUser; //庄家; uint16 _wCurrentUser; //当前玩家; uint8 _cbHandCardCount; //手牌数量; uint8 _aryRobStatus[NN_GAME_PLAYER]; //抢庄状态 0:没操作,1:不抢,2:抢; uint8 _aryChipStatus[NN_GAME_PLAYER]; //下注状态 0:没下,1:已下; uint8 _aryOpenStatus[NN_GAME_PLAYER]; //开牌状态 0:没开,1:已开; bool _aryActiveStatus[NN_GAME_PLAYER]; //玩家手牌状态; uint8 _aryHandCardData[NN_MAX_COUNT]; //手牌数据; uint8 _aryAllHandCardData[NN_GAME_PLAYER][NN_MAX_COUNT]; //所有玩家手牌; int _aryCardNiuType[NN_GAME_PLAYER]; //牛值; SCORE _aryTableScore[NN_GAME_PLAYER]; //下注数目; SCORE _lCurrentChip; //当前注数; SCORE _lViewGameScore[NN_GAME_PLAYER]; //玩家输赢积分; std::vector _aryChipSprite; //筹码精灵数组; NNPrivateEndNode* _OpenResultScene; //界面; Node* m_rootNode; //场景; Layout* _MainPanel; ImageView* _imgRoomInfo; Layout* _RoundPanel; TextBMFont* _txtRoomID; Text* _txtCurrentTime; Text* _txtRoomRule; //Sprite* _spRoomRule0; // 抢庄; //Sprite* _spRoomRule1; // 轮庄; TextBMFont* _txtJushu; Layout* _ResultPanel; Armature* _pArmatureEnd; Button* _btnContinue; Button* _btnLookon; Button* _ButtonPanel; Button* _btnWXInvite; Button* _btnLeave; Button* _btnWXDismiss; Button* _btnWXVoice; Button* _btnWXChat; Button* _btnStartGame; Layout* _GamePanel; Button* _btnAutoNiu; Button* _btnCuoPai; Layout* _RobPanel; Button* _btnRobNO; Button* _btnRobYES; Layout* _YazhuPanel1; Text* _txtZhu; Sprite* _spOtherCallBanker; Sprite* _spOtherAddScore; Sprite* _spSelfAddScore; Sprite* _imgGameClock; Layout* _ChipPanel; NN_GamePlayer* m_aryPlayer[NN_GAME_PLAYER]; //玩家; NN_GamePlayer* m_pLocalPlayer; std::string m_strGameRuleInfo; std::string m_strGameTitle; Vec2 _ptSendCardPos; // 发牌位置; Armature* _pArmatureStart; // 开始动画; CNNGameLogic m_GameLogic; // localZOrder 层级; enum ZOrder { ZO_DEFAULT = 0, // 默认; ZO_CARDMANAGER, // 麻将管理类; ZO_UPDOWN, // 上下翻; ZO_ANI, // 动画; ZO_TRUSTEE, // 托管; ZO_END, // 结算面板; ZO_PRIVATE, // 私人场面板; }; }; }