Files
wnmj/Classes/Games/NiuNiu/NN_GameScene.h
2026-02-13 14:34:15 +08:00

316 lines
8.4 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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<void()>& 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<Sprite*> _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, // 私人场面板;
};
};
}