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

82 lines
2.3 KiB
C++

#pragma once
#include "cocos2d.h"
#include "ui/CocosGUI.h"
#include "Define.h"
#include "SparrowCardBase.h"
#include "Types.h"
USING_NS_CC;
using namespace ui;
using namespace std;
//逻辑掩码
#define SP_MASK_COLOR 0xF0 //花色掩码
#define SP_MASK_VALUE 0x0F //数值掩码
#define SENDCARD_HEIGHT 130 //拖动出牌高度
#define TOP_CARD_HEIGHT 20 //弹起牌高度
//////////////////////////////////////////////////////////////////////////
// 麻将控件
class SparrowCard : public Sprite
{
public:
SparrowCard();
virtual bool init(BYTE _value, EN_SPARROW_TYPE _cardType);
// 场景退出回调
virtual void onExit();
void addClickEventListener(const std::function<bool(cocos2d::Ref *, Vec2 pos)>);
// 子类实现
public:
virtual bool IsValidCard(BYTE _value) = 0; // 是否是有效牌
// 麻将属性修改
public:
static std::string GetCardValuePng(BYTE _value); // 获取值图片
void SetCardValuePng(BYTE _value, EN_SPARROW_TYPE _cardType); // 设置麻将值
bool ShowCardValue(BYTE _value); // 亮牌
void SetTingCardStatus(bool isTing); // 听牌状态
void SetKingStatus(bool isKing, std::string strKing); // 设置精牌
void SetTop(bool istop); // 设置弹起
void SetCurrentOutCard(bool isCurrent); // 设置当前牌标识
//触摸事件
public:
void BindingTouchEvent();
bool TouchBegan(Touch* touch, Event* event);
void TouchMove(Touch* touch, Event* event);
void TouchEnd(Touch* touch, Event* event);
void setTouchState(bool _btouch){ m_bTouch = _btouch; }
bool getTouchState(){ return m_bTouch; }
// 获取数值
public:
BYTE GetCardData() { return m_ValueData; }
EN_SPARROW_TYPE GetCardType(){ return m_CardType; }
static BYTE GetCardValue(BYTE cbCardData) { return (cbCardData&SP_MASK_VALUE); } //获取数值
static BYTE GetCardColor(BYTE cbCardData) { return ((cbCardData&SP_MASK_COLOR) >> 4); } //获取花色
bool GetTop(){ return m_IsTop; }
public:
ImageView* m_pRootImage; // 根节点
BYTE m_ValueData; // 麻将数值
EN_SPARROW_TYPE m_CardType; // 麻将类型
bool m_IsTop; // 弹起标识
ImageView* m_cloneCardImg; //copy根節點
private:
Vec2 m_originalPos; //触摸前的位置
Vec2 m_MovePos; //移动位置
int m_startZorder; //起始zorder值
bool m_bTouch; //是否触摸
std::function<bool(cocos2d::Ref *, Vec2 pos)> _SendCardCallBack; //回掉出牌
};