249 lines
9.0 KiB
C++
249 lines
9.0 KiB
C++
#ifndef _NCMJ_CGameScene_h_
|
|
#define _NCMJ_CGameScene_h_
|
|
|
|
#include <vector>
|
|
#include <string>
|
|
|
|
#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<void()>& callback);
|
|
void doHuAnimation(float fEndX, float fEndY, const std::function<void()>& fnCallback);
|
|
void doHuangAnimation(float fEndX, float fEndY, const std::function<void()>& 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 |