411 lines
12 KiB
C++
411 lines
12 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 "13S_CMD.h"
|
|
#include "13S_GamePlayer.h"
|
|
#include "13S_GameLogic.h"
|
|
#include "13S_OperateCardPanel.h"
|
|
#include "13S_OpenResultScene.h"
|
|
#include "13S_GameOverAni.h"
|
|
|
|
USING_NS_CC;
|
|
using namespace cocostudio;
|
|
using namespace std;
|
|
using namespace ui;
|
|
|
|
namespace SSS_SPACE {
|
|
|
|
enum SSS_OPERATE_STATUS
|
|
{
|
|
SSS_OS_NULL = 0, // 无操作;
|
|
SSS_OS_CALLBANK, // 其他人叫庄;
|
|
SSS_OS_ADDSCORE0, // 其他人加注;
|
|
SSS_OS_ADDSCORE1, // 自己加注;
|
|
};
|
|
|
|
class SSSGameScene : public GameFrameBase
|
|
{
|
|
public:
|
|
//创建场景;
|
|
CREATE_FUNC(SSSGameScene);
|
|
|
|
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 onGameSceneRobBanker(void* pData, int nDataSize);
|
|
//下注场景;
|
|
bool onGameSceneUserChip(void* pData, int nDataSize);
|
|
//发牌场景;
|
|
bool onGameSceneSendCard(void* pData, int nDataSize);
|
|
//开牌场景;
|
|
bool onGameSceneOpenCard(void* pData, int nDataSize);
|
|
//比牌场景;
|
|
bool onGameSceneCompareCard(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 onSubSendLeftCard(const void * pBuffer, uint16 wDataSize);
|
|
//开始开牌;
|
|
void onSubStartOpen(const void * pBuffer, uint16 wDataSize);
|
|
//开牌;
|
|
void onSubOpenCard(const void * pBuffer, uint16 wDataSize);
|
|
//经典玩法比牌结果;
|
|
void onSubClassicCompareCard(const void * pBuffer, uint16 wDataSize);
|
|
//带庄家比牌结果;
|
|
void onSubBankerCompareCard(const void * pBuffer, uint16 wDataSize);
|
|
//游戏结束;
|
|
void onSubGameEnd(const void * pBuffer, uint16 wDataSize);
|
|
|
|
//用户进入;
|
|
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 onCompareButtonClick(Ref* pSender);
|
|
//点击随便机组牌按钮;
|
|
void onRandomButtonClick(Ref* pSender);
|
|
//点击重置按钮;
|
|
void onResetButtonClick(Ref* pSender);
|
|
//点击邀请按钮;
|
|
void onInviteButtonClick(Ref* pSender);
|
|
//点击重选按钮;
|
|
void onRechooseButtonClick(Ref* pSender);
|
|
//面板触摸事件;
|
|
void onPanelTouchEvent(Ref* pSender, Widget::TouchEventType iEventType);
|
|
//抢注按钮点击事件;
|
|
void onRobYesButtonClick(Ref* pSender);
|
|
//抢注按钮点击事件;
|
|
void onRobNoButtonClick(Ref* pSender);
|
|
//压注按钮点击事件;
|
|
void onYaZhuButtonClick(Ref* pSender);
|
|
//不摆特殊牌按钮点击事件;
|
|
void onRefuseCardsButtonClick(Ref* pSender);
|
|
//确定特殊牌按钮点击事件;
|
|
void onCommitSpecialButtonClick(Ref* pSender);
|
|
|
|
//一对;
|
|
void onDuiZiButtonClick(Ref* pSender);
|
|
//两对;
|
|
void onLiangDuiButtonClick(Ref* pSender);
|
|
//三条;
|
|
void onSanTiaoButtonClick(Ref* pSender);
|
|
//顺子;
|
|
void onShunZiButtonClick(Ref* pSender);
|
|
//同花;
|
|
void onTongHuaButtonClick(Ref* pSender);
|
|
//葫芦;
|
|
void onHuLuButtonClick(Ref* pSender);
|
|
//铁支;
|
|
void onTieZhiButtonClick(Ref* pSender);
|
|
//同花顺;
|
|
void onTongHuaShunButtonClick(Ref* pSender);
|
|
|
|
// 开始发牌;
|
|
void startSendCardAni();
|
|
// 开始比牌;
|
|
void startCompareCardAni();
|
|
// 动画回调;
|
|
void movementEventCallFunc(cocostudio::Armature *armature, cocostudio::MovementEventType movementType, const std::string& movementID);
|
|
|
|
// 定时器;
|
|
void openClock(Sprite* sprClock, int iLeftTime, const std::function<void()>& callFunc=nullptr);
|
|
// 开启定时器;
|
|
void closeClock(Sprite* sprClock);
|
|
|
|
//选牌回调;
|
|
void selectCardCallback(uint8* pCardData, uint8 cbCardCount);
|
|
// 显示玩家牌;
|
|
void showAllPlayersCard();
|
|
// 播放结束积分动画;
|
|
void playResultScoreAni(int nIndex, SCORE lScore, SCORE lXinScore);
|
|
//显示操作面板;
|
|
void showOperatePanel(bool bShow);
|
|
//显示特殊牌面板;
|
|
void showSpecialPanel(bool bShow);
|
|
|
|
void addTricksCard(int nIndex, uint8 aryCardData[SSS_MAX_ITEM_COUNT], uint8 cbCardCount);
|
|
//加入选择面板;
|
|
bool inTricksCardPanel(int nIndex, uint8 cbCardData);
|
|
//选择结束;
|
|
void onChooseFinished();
|
|
//一道牌动画播放完成;
|
|
void oneGroupFinished();
|
|
//检测是否有特殊牌动画;
|
|
void checkSpecialTypeAni();
|
|
//特殊牌动画播放完成;
|
|
void specialTypeAniFinished();
|
|
//检测是否有全垒打动画;
|
|
void checkKillAllAni();
|
|
//全垒打动画播放完成;
|
|
void killAllAniFinished();
|
|
|
|
void oneShootFinished(tagSSSTwoGunInfos* pGunInfos);
|
|
//打枪加分动画结束;
|
|
void shootScoreAniFinished();
|
|
//更新牌类型按钮状态;
|
|
void updateCardTypeButtons();
|
|
//禁用牌类型按钮状态;
|
|
void disableCardTypeButtons();
|
|
|
|
// 获到性别字符串;
|
|
std::string getUserGender(int cbGender);
|
|
// 播放发牌声音;
|
|
void playSendCardEffect();
|
|
// 播放特殊牌型声音;
|
|
void playSpecialTypeEffect(uint8 cbGender, uint8 cbCardType);
|
|
// 播放快捷语音;
|
|
void playFastVoice(int cbGender, int voiceIndex);
|
|
// 播放音效;
|
|
void playEffect(std::string strPath);
|
|
// 播放点击音效;
|
|
void playBtnClickEffect();
|
|
|
|
//发牌结束;
|
|
void sendSendCardOverMsg();
|
|
//开牌操作;
|
|
void sendOpenCardMsg();
|
|
//比牌完成;
|
|
void sendCompareOverMsg();
|
|
//显示当前手牌;
|
|
void showCurHandCard(uint8 cbCardCount);
|
|
//显示庄家图标;
|
|
void showBankerIcon();
|
|
// 设置状态;
|
|
void setOperateStatus(SSS_OPERATE_STATUS ops);
|
|
//牌型A32转32A;
|
|
bool cardTypeTo32A(const uint8 arySrcCardData[SSS_MAX_ITEM_COUNT], const uint8 cbCardCount, uint8* aryTargetCardData, const uint8 cbTargetCardCount);
|
|
//检测扑克牌摆放规则;
|
|
bool checkCardPutRule();
|
|
// 获取当前玩家数量;
|
|
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; //语音标志;
|
|
bool m_bClassicRule; //是否是经典规则;
|
|
|
|
uint8 _cbGameStatus; //游戏状态;
|
|
uint16 _wBuildCardTime; //配置时间;
|
|
uint16 _wRobBankerTime; //抢庄时间;
|
|
uint16 _wUserChipTime; //下注时间;
|
|
|
|
SCORE _iBaseScore; //底注;
|
|
|
|
uint8 _cbSendCardCount; //发牌数量;
|
|
uint16 _wBankerUser; //庄家玩家;
|
|
uint8 _cbCurOpenCardAniIndex; //当前播放动画索引;
|
|
|
|
uint16 _wSelfSpecialType; //特殊牌型;
|
|
uint16 _wKillAllUserChairID; //全垒打用户椅子号;
|
|
|
|
uint8 _aryActiveStatus[SSS_GAME_PLAYER]; //玩家手牌状态;
|
|
uint8 _aryHandCardData[SSS_HAND_CARD_COUNT]; //手牌数据;
|
|
uint16 _arySpecialType[SSS_GAME_PLAYER]; //特殊牌类型;
|
|
|
|
int _arySpecialCompareResult[SSS_GAME_PLAYER]; //特殊牌型比较结果;
|
|
int _aryThreeKillResult[SSS_GAME_PLAYER]; //全垒打加减分;
|
|
|
|
uint8 _aryTricksFrontCard[SSS_MIN_ITEM_COUNT];
|
|
uint8 _aryTricksMidCard[SSS_MAX_ITEM_COUNT];
|
|
uint8 _aryTricksBackCard[SSS_MAX_ITEM_COUNT];
|
|
|
|
uint8 _aryFrontCard[SSS_GAME_PLAYER][SSS_MIN_ITEM_COUNT]; //玩家前墩;
|
|
uint8 _aryMidCard[SSS_GAME_PLAYER][SSS_MAX_ITEM_COUNT]; //玩家中墩;
|
|
uint8 _aryBackCard[SSS_GAME_PLAYER][SSS_MAX_ITEM_COUNT]; //玩家后墩;
|
|
|
|
//界面;
|
|
Node* m_rootNode; //场景;
|
|
Layout* _MainPanel;
|
|
ImageView* _imgRoomInfo;
|
|
Layout* _RoundPanel;
|
|
Text* _txtRoomID;
|
|
Text* _txtRoomRule;
|
|
Text* _txtJushu;
|
|
|
|
Layout* _ButtonPanel;
|
|
Layout* _SendCardPanel;
|
|
Button* _btnInvite;
|
|
Button* _btnDismiss;
|
|
Button* _btnLeave; // 离开按钮;
|
|
Button* _btnVoice;
|
|
Button* _btnChat;
|
|
Button* _btnStartGame;
|
|
|
|
Layout* _RobPanel; // 抢庄面板;
|
|
Layout* _YaZhuPanel; // 压注面板;
|
|
|
|
Button* _btnRobYes; // 抢庄;
|
|
Button* _btnRobNo; // 不抢庄;
|
|
|
|
Button* _aryButtonScore[3]; // 压注按钮;
|
|
|
|
Layout* _SpecialPanel;
|
|
Layout* _OperatePanel;
|
|
SSSOperateCardPanel* _OperateCardPanel;
|
|
SSSOpenResultScene* _OpenResultScene;
|
|
|
|
Layout* _aryTricksCardPanel[SSS_GROUP_COUNT];
|
|
Button* _aryButtonRechoose[SSS_GROUP_COUNT];
|
|
Sprite* _arySprCardType[SSS_GROUP_COUNT];
|
|
Sprite* _arySprCardShadow[SSS_GROUP_COUNT];
|
|
|
|
Sprite* _sprSpecialType;
|
|
Button* _btnRefuseCards;
|
|
Button* _btnCommitSpecial;
|
|
|
|
Button* _btnCompare;
|
|
Button* _btnReset;
|
|
Button* _btnRandomCard;
|
|
|
|
Button* _btnDuiZi;
|
|
Button* _btnLiangDui;
|
|
Button* _btnSanTiao;
|
|
Button* _btnShunZi;
|
|
Button* _btnTongHua;
|
|
Button* _btnHuLu;
|
|
Button* _btnTieZhi;
|
|
Button* _btnTongHuaShun;
|
|
|
|
Text* _txtTip;
|
|
Sprite* _imgOperClock;
|
|
Sprite* _imgGameClock;
|
|
Sprite* _imgQualifiedTips; // 头道小于中道提示;
|
|
|
|
Sprite* _sprOtherCallBanker;
|
|
Sprite* _sprOtherAddScore;
|
|
Sprite* _sprSelfAddScore;
|
|
|
|
Layout* _ResultPanel;
|
|
Button* _btnReady;
|
|
Button* _btnPrivateEnd;
|
|
|
|
Armature* _pArmatureStart; // 开始动画;
|
|
Armature* _pArmatureResult; // 胜负动画;
|
|
Armature* _pArmaAllKillEffect; // 全垒打动画;
|
|
|
|
TextAtlas* _pTxtResultScore[SSS_GAME_PLAYER];
|
|
//TextAtlas* _pTxtXinScore[SSS_GAME_PLAYER];
|
|
|
|
SSS_GamePlayer* m_aryPlayer[SSS_GAME_PLAYER]; //玩家;
|
|
SSS_GamePlayer* m_pLocalPlayer;
|
|
|
|
std::string m_strGameRuleInfo;
|
|
std::string m_strGameTitle;
|
|
|
|
Vec2 _ptSendCardPos; // 发牌位置;
|
|
|
|
std::vector<tagSSSOpenResultItem> _aryResultItem;
|
|
//std::vector<tagSSSOpenScore> _aryOpenScoreList;
|
|
|
|
CGameOverAni* m_GameOverAni;
|
|
tag13SAnalyseType m_AnalyseType;
|
|
C13SGameLogic m_GameLogic;
|
|
|
|
SSS_CMD_S_GameEnd m_GameEnd;
|
|
|
|
// localZOrder 层级;
|
|
enum ZOrder
|
|
{
|
|
ZO_DEFAULT = 0, // 默认;
|
|
ZO_CARDMANAGER, // 麻将管理类;
|
|
ZO_UPDOWN, // 上下翻;
|
|
ZO_ANI, // 动画;
|
|
ZO_TRUSTEE, // 托管;
|
|
ZO_END, // 结算面板;
|
|
ZO_PRIVATE, // 私人场面板;
|
|
};
|
|
};
|
|
|
|
} |