325 lines
8.8 KiB
C++
325 lines
8.8 KiB
C++
#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<tagZJHOpenResultItem> _aryResultItem;
|
|
std::vector<ZJHChipNode*> _aryChipNode;
|
|
|
|
CZJHGameLogic m_GameLogic;
|
|
|
|
// localZOrder 层级;
|
|
enum ZOrder
|
|
{
|
|
ZO_DEFAULT = 0, // 默认;
|
|
ZO_CARDMANAGER, // 麻将管理类;
|
|
ZO_UPDOWN, // 上下翻;
|
|
ZO_ANI, // 动画;
|
|
ZO_TRUSTEE, // 托管;
|
|
ZO_END, // 结算面板;
|
|
ZO_PRIVATE, // 私人场面板;
|
|
};
|
|
};
|
|
|
|
} |