#ifndef _NCMJ_CGameScene_h_ #define _NCMJ_CGameScene_h_ #include #include #include "cocos2d.h" #include "ui/CocosGUI.h" #include "GameFrameBase.h" #include "Singleton.h" #include "TimeNode.h" #include "GameDefine.h" #include "WN_CMD_Sparrow.h" #include "WN_GamePlayer.h" #include "WN_GameLogic.h" #include "WN_GameOver.h" #include "WN_CardManager.h" #include "WN_PrivateScene.h" //#include "WN_CreateScene.h" #include "WN_GetCardCtrl.h" USING_NS_CC; using namespace cocos2d::ui; namespace WNMJ_SPACE{ class WN_GameScene : public GameFrameBase { public: WN_GameScene(); virtual ~WN_GameScene(); static std::string getGameRule(uint32 dwGameRule); static int GetRealChairCount(uint32 dwGameRule); // public: CREATE_FUNC(WN_GameScene); virtual bool init(); // 场景初始化 virtual bool InitGameEvent(); // 事件注册 virtual void onEnterTransitionDidFinish(); // 进场动画完成回调 virtual void onExit(); // 场景退出回调 virtual void ResetTable(); // 重置桌子 virtual void ResetScene(); // 重置场景 virtual void upSelfPlayerInfo(); // 更新信息 virtual WORD SwitchViewChairID(WORD wChairID); // 椅子号视图转换 virtual uint16 GetRealChairCount(); // 初始化 private: void uiLayerinit(); // UI初始化 void loadingRes(); // 加载麻将资源 void SetCurrentUser(WORD wCurrentUser); // 设置当前玩家 void ResetAllData(); // 重置所有数据 // 定时器 private: void OnEventGameClock(float dt); // 游戏定时器 void SetGameClock(WORD wChairID, DWORD dwTimerID, DWORD dwElapse); // 设置时间(秒) void KillGameClock(); // 删除时间 void UpdateSystmeTime(float dt); // 更新系统时间; //场景消息 private: virtual bool OnEventSceneMessage(uint8 cbGameStatus, bool bLookonUser, void* data, int dataSize); void onGameScenePlay(CMD_S_StatusPlay* pStatusPlay); // 正在游戏 void onGameSceneFree(CMD_S_StatusFree* pStatusFree); // 空闲场景 // 游戏消息 private: void OnSubGameStart(const void *pBuffer, WORD wDataSize); // 游戏开始 void OnSubRecordGameStart(const void *pBuffer, WORD wDataSize); void OnSubSendCard(const void *pBuffer, WORD wDataSize); // 发第十四张牌 void OnSubOperateNotify(const void *pBuffer, WORD wDataSize); // 提示消息 void OnSubOutCard(const void *pBuffer, WORD wDataSize); // 用户出牌 void OnSubOperateResult(const void *pBuffer, WORD wDataSize); // 操作结果 void OnSubUserTrust(const void *pBuffer, WORD wDataSize); // 用户托管 void OnSubGameEnd(const void *pBuffer, WORD wDataSize); // 游戏结束 void OnSubKickOut(const void *pBuffer, WORD wDataSize); // 踢出消息处理 void OnSubGetLeftCard(const void *pBuffer, WORD wDataSize); // 获取排堆; // 消息发送函数 public: void SendFrameData(WORD wSubCmdID, void* buffer, WORD wSize); // 发送框架消息 void SendGameData(WORD wSubCmdID, void* buffer, WORD wSize); // 发送游戏消息 void SendUserData(WORD wSubCmdID, void* buffer, WORD wSize); // 发送用户消息 // 按钮回调事件 private: void onLeaveClickEvent(cocos2d::Ref *pSender); // 离开按钮点击事件 void onStartClickEvent(cocos2d::Ref *pSender); // 开始按钮点击事件 void onKeyReleased(EventKeyboard::KeyCode keyCode, Event * pEvent); //按键处理 // 游戏内事件处理 public: void onGameStartInitUI(bool IsMove = true); // 游戏开始移动玩家; void onShowDice(); // 显示骰子 bool IsHaveOperateCard(WORD dwUserAction); // 是否有高级操作 void SetTimerByEast(WORD wEastUser); // 根据东方位玩家设置时钟TAG void SetSurplusCardCount(BYTE cbUseingCount); // 设置剩余排数 void onEventShowPrivate(cocos2d::EventCustom *event); // 显示结算信息 // 游戏动画 private: // 补花 游戏中结算动画 void SetPayAniShowMode(ANI_TYPE aType, Point pos, const std::function& callback); void doHuAnimation(float fEndX, float fEndY, const std::function& fnCallback); void doHuangAnimation(float fEndX, float fEndY, const std::function& fnCallback); // 玩家信息处理 public: 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); // 聊天消息 GamePlayer* CreatePlayer(IClientUserItem * pIClientUserItem); string getGoldStr(string _str, char insertChar); // 字符串格式化 //void ShowPlayer(WORD wChairID, GamePlayer* pPlayer); // 显示玩家 //void ShowKingAndUpDownCard(BYTE cbKingCard[2]); // 显示精牌 // 声音控制 public: void PlayBackMusic(BYTE cbType, bool ispool); // 播放背景音乐 void playGameEffect(BYTE cbType); // 播放游戏音效 void playGameEffect(BYTE cbSoundType, WORD wChairID, BYTE cbOutCard = 0);// 播放游戏音效 // 按钮事件 public: // 按住语音按钮 void OnButtonVoiceTouched(Ref*, Widget::TouchEventType); //私人场 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 ShowGameRule(CMD_GF_Private_Room_Info* pNetInfo); // 游戏规则 void ShowRoomID(Ref *pSender); // 分享房间号; void SetChairs(); // 玩家要牌 public: void onPlayerGetCard(); //自定义事件回调 public: void onEventOutCard(EventCustom* event); //出牌 void onEventOperCard(EventCustom* event); //操作牌 void onEventGetCard(EventCustom* event); //要牌事件; //录像处理 public: virtual void StartGameRecord(); virtual void NextRecordAction(float dt); // 控件信息 public: WN_CardManager* m_pCardManager; // 麻将管理类 Layout* m_pRootLayout; // 根场景 Layout* m_PanelCard; // 麻将节点; WN_GameOver* m_pResultLayer; // 结算面板 WN_PrivateScene* m_pPrivateScene; // 私人场面板 GetCardCtrl* m_pGetCardLayer; // 要牌面板; //Sprite* m_SpritePlayers[GAME_PLAYER]; // 玩家控件 //Button* m_btnPlayer[GAME_PLAYER]; // 添加點擊事件 //Sprite* m_SpriteReadys[GAME_PLAYER]; // 准备控件 //Sprite* m_SpriteOffLine[GAME_PLAYER]; // 离线控件 Sprite* m_SpriteTimeBg; // 时间界面 Sprite* m_SpriteTimer; // 时间界面 LabelAtlas* m_LableTime; // 时间数字 Text* m_ptxtCardNum; // 剩余牌数量 Text* m_txtGameRule; // 游戏规则; Text* m_txtGameRuleScore; // 游戏规则; Text* m_txtGangRule; // 杠规则; Text* m_txtCurrentTime; // 当前时间; ImageView* m_ImageMenu; // 菜单; Button* m_BtnMenu; // 菜单按钮; Button* m_pBtnLeave; // 离开按钮 Button* m_pBtnReady; // 准备按钮; Button* m_btnDismiss; // 解散房间 Button* m_btnWeiXin; // 微信分享按钮 Button* m_pBtnStartGame; // 可以开始游戏按钮; Node* m_pVoiceNode; // 语音标志 Text* m_txtRoomID; // 房间号 Text* m_txtGameTimes; // 游戏局数 WNGamePlayer* m_aryPlayer[GAME_PLAYER]; // 玩家数组; bool m_bActiveStatus[GAME_PLAYER]; //玩家状态; // 玩家信息 private: int m_lBaseScore; // 基础积分 BYTE m_cbGameStatus; // 游戏状态 BYTE m_cbSurplusCard; // 剩余牌数量 BYTE m_cbHuaAniCout; // 胡牌动画播放完成玩家 ///<坐标变量 public: Point m_ptStartCard[GAME_PLAYER]; // 每个玩家第一张手牌 Point m_ptOutCard[GAME_PLAYER]; // 每个玩家第一张出牌 Point m_ptCurrentCard[GAME_PLAYER]; // 每个玩家当前出牌 Point m_ptWeaveCard[GAME_PLAYER]; // 每个玩家组合牌坐标 Point m_ptPlayerEnd[GAME_PLAYER]; // 每个玩家最终坐标 //用户变量(记录的用户全是服务端椅子号) protected: WORD m_wBankerUser; // 庄家用户 WORD m_wCurrentUser; // 当前用户 WORD m_wEastUser; // 东方位玩家 WORD m_wUserPosition[GAME_PLAYER]; // 方位旋转角度 //发牌数据 public: BYTE m_cbSelfHandCardData[MAX_COUNT]; // 自己发牌时候手牌 //定时器 public: DWORD m_dwTimerID; // 定时器ID int m_nSecondCount; // 当前计数 WORD m_wTimeChairID; // 正在计数玩家 int m_nVoiceTimeID; // 语音定时器ID // //声音 //public: // BYTE m_cbSoundType; // 语音类型 // //BYTE m_cbBackMusicType; // 背景音效类型 //私人场信息 public: CMD_GF_Private_Room_Info m_PrivateRoomInfo; bool m_IsRunEndAction; std::string m_strGameRuleInfo; std::string m_strGameTitle; }; } #endif