载入中...
搜索中...
未找到
Card.h
浏览该文件的文档.
1#pragma once
2
10#include "common/ECS.h"
11#include "common/Module.h"
12#include "card/CardTypes.h"
13
14#include <memory>
15#include <string>
16#include <unordered_map>
17#include <vector>
18
19namespace eve::graphics {
20class Graphics;
21}
22
23namespace eve::card {
24
26class Card : public Module {
27public:
29 Card() = default;
30 ~Card() override;
31
33 int registerCardsFromJson(const std::string &json);
39 bool hasCardDefinition(const std::string &id);
40 std::string getCardDefinitionName(const std::string &id);
41 std::string getCardDefinitionKind(const std::string &id);
42 int getCardDefinitionCost(const std::string &id);
43 int getCardDefinitionAttack(const std::string &id);
44 int getCardDefinitionHealth(const std::string &id);
45 float getCardDefinitionTintR(const std::string &id);
46 float getCardDefinitionTintG(const std::string &id);
47 float getCardDefinitionTintB(const std::string &id);
48
51 CardData *newCard(const std::string &defId);
52 Deck *newDeck();
54 Zone *newZone(const std::string &id, const std::string &label, float x, float y, float w, float h);
57
59 void setConfig(LayoutConfig *cfg);
60 LayoutConfig *getConfig() const;
61 int handCount() const;
62 Hand *getHand(int index) const;
63 Hand *findHand(const std::string &owner) const;
64 int zoneCount() const;
65 Zone *getZone(int index) const;
66 Deck *getDeck() const;
68 CardData *drawCard(const std::string &handOwner);
69
71 void update(float dt, float mx, float my, bool down);
73 void render(graphics::Graphics *gfx);
75
77 void clearEvents();
78 int getEventCount() const;
79 std::string getEventType(int index) const;
80 std::string getEventHand(int index) const;
81 std::string getEventZone(int index) const;
82 std::string getEventCardId(int index) const;
83 std::string getEventReason(int index) const;
84
85private:
86 const CardDefinition *findDef(const std::string &id) const;
87
88 std::unordered_map<std::string, CardDefinition> defs_;
89 std::vector<std::unique_ptr<LayoutConfig>> configs_;
90 std::vector<CardEvent> events_;
91 std::vector<ecs::EntityHandle> cards_;
92 std::vector<ecs::EntityHandle> decks_;
93 std::vector<ecs::EntityHandle> zones_;
94 std::vector<ecs::EntityHandle> hands_;
95
96 LayoutConfig *activeConfig_ = nullptr;
97 Deck *activeDeck_ = nullptr;
98 int nextInstance_ = 1;
99};
100
101} // namespace eve::card
int y
Definition Grass.cpp:135
int x
Definition Grass.cpp:135
int h
int w
单张卡牌:ECS 实体,数据拆成 Identity / Stats / Visual / Layout / State。
Definition CardTypes.h:84
卡牌模块入口(eve.Card):定义注册、对象工厂与每帧 update/render。
Definition Card.h:26
std::string getEventReason(int index) const
Definition Card.cpp:334
std::string getEventType(int index) const
Definition Card.cpp:314
int getCardDefinitionCost(const std::string &id)
Definition Card.cpp:132
float getCardDefinitionTintB(const std::string &id)
Definition Card.cpp:157
int zoneCount() const
Definition Card.cpp:241
void renderDeck(graphics::Graphics *gfx)
Definition Card.cpp:290
void clearEvents()
交互事件队列(抽牌/出牌/拖拽等)。
Definition Card.cpp:310
LayoutConfig * getConfig() const
Definition Card.cpp:224
CardData * drawCard(const std::string &handOwner)
从牌库抽一张牌加入指定手牌;无牌时返回 nullptr。
Definition Card.cpp:250
int registerCardsFromJson(const std::string &json)
从 JSON 注册卡牌类型;返回成功注册数量。
Definition Card.cpp:97
void render(graphics::Graphics *gfx)
绘制手牌/落牌区(与牌库)。
Definition Card.cpp:279
int handCount() const
Definition Card.cpp:226
std::string getEventCardId(int index) const
Definition Card.cpp:329
bool hasCardDefinition(const std::string &id)
卡牌类型查询。
Definition Card.cpp:115
LayoutConfig * newConfig()
工厂:对象由 ECS 表持有,脚本持有的是非拥有句柄。
Definition Card.cpp:166
void update(float dt, float mx, float my, bool down)
每帧更新布局与交互。
Definition Card.cpp:268
Hand * newHand(LayoutConfig *cfg)
创建一个手牌布局。
Definition Card.cpp:209
float getCardDefinitionTintG(const std::string &id)
Definition Card.cpp:152
~Card() override
Definition Card.cpp:84
std::string getEventZone(int index) const
Definition Card.cpp:324
void setConfig(LayoutConfig *cfg)
游戏状态:当前布局、手牌、落牌区、牌库。
Definition Card.cpp:220
int getCardDefinitionHealth(const std::string &id)
Definition Card.cpp:142
std::string getEventHand(int index) const
Definition Card.cpp:319
Hand * findHand(const std::string &owner) const
Definition Card.cpp:233
Card()=default
Hand * getHand(int index) const
Definition Card.cpp:228
int getCardDefinitionCount()
已注册卡牌类型数量。
Definition Card.cpp:113
Deck * getDeck() const
Definition Card.cpp:248
int getCardDefinitionAttack(const std::string &id)
Definition Card.cpp:137
int getEventCount() const
Definition Card.cpp:312
float getCardDefinitionTintR(const std::string &id)
Definition Card.cpp:147
Deck * newDeck()
Definition Card.cpp:189
std::string getCardDefinitionName(const std::string &id)
Definition Card.cpp:122
void clearCardDefinitions()
清空全部卡牌类型定义。
Definition Card.cpp:111
Zone * getZone(int index) const
Definition Card.cpp:243
Zone * newZone(const std::string &id, const std::string &label, float x, float y, float w, float h)
创建一个落牌区。
Definition Card.cpp:196
CardData * newCard(const std::string &defId)
Definition Card.cpp:174
std::string getCardDefinitionKind(const std::string &id)
Definition Card.cpp:127
牌库(栈顶在末尾)。
Definition CardTypes.h:142
手牌:扇形布局 + 悬浮 + 拖拽 + 落区判定 + 渲染。
Definition CardTypes.h:223
落牌区(手牌区 / 出牌区 / 弃牌区),用于拖放命中判定。
Definition CardTypes.h:175
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition AnimTrail.h:6
卡牌类型定义(registerCardsFromJson 注册)。
Definition CardTypes.h:73
UiCard 风格的布局配置(脚本可实时修改,对应 UiCard 的 Configs 面板)。
Definition CardTypes.h:40