载入中...
搜索中...
未找到
BuildingFx.h
浏览该文件的文档.
1#pragma once
2
3// 建筑放置渲染桥(可选模块):监听 building::PlacementWorld 的实例,
4// 按 BuildingDefinition.renderMode 生成 / 同步 / 销毁 Renderable2D 或 Renderable3D,
5// 并提供鬼影预览 + 占地光标 + 网格可视化。
6// 纯逻辑(building)与渲染解耦:本模块依赖 building / graphics / ECS,不反向依赖。
7
8#include "common/Module.h"
9
10#include <string>
11#include <unordered_map>
12#include <vector>
13
14namespace eve::building {
15class BuildingDefinition;
16class Ghost;
17class PlacementWorld;
18struct PlacedBuilding;
19}
20
21namespace eve::graphics {
22class Graphics;
23class Mesh;
24class Renderable2D;
25class Renderable3D;
26}
27
28namespace eve::buildingfx {
29
30class BuildingFx : public Module {
31public:
33 BuildingFx() = default;
34 ~BuildingFx() override = default;
35
39 bool isAttached(building::PlacementWorld *world) const;
40 int getAttachedCount() const;
41
43 void sync(building::PlacementWorld *world);
45
49
50 void setGridVisible(building::PlacementWorld *world, bool visible);
55 void drawGrid3D(building::PlacementWorld *world, graphics::Graphics *gfx, float height = 0.f);
56
57private:
58 struct Visual {
59 graphics::Renderable2D *r2d = nullptr;
60 graphics::Renderable3D *r3d = nullptr;
61 };
62
63 struct WorldState {
64 std::unordered_map<int, Visual> visuals;
65 Visual ghost;
66 Visual cursor;
67 std::string ghostBuildingId;
68 bool gridVisible = false;
69 std::vector<graphics::Renderable3D *> gridLines;
70 int gridLineCount = -1;
71 };
72
73 bool is3d(const building::BuildingDefinition &def) const;
74 void createVisual(WorldState &st, const building::BuildingDefinition &def,
76 Visual &v, float alpha);
77 void updateVisual(const building::BuildingDefinition &def,
79 Visual &v);
80 void destroyVisual(Visual &v);
81 void destroyAll(WorldState &st);
82
83 graphics::Mesh *cubeMesh(graphics::Graphics *gfx);
84 void rebuildGridLines(WorldState &st, building::PlacementWorld *world,
85 graphics::Graphics *gfx, float height);
86 void setVisible(Visual &v, bool visible);
87
88 std::unordered_map<building::PlacementWorld *, WorldState> states_;
89 graphics::Mesh *cubeMesh_ = nullptr;
90};
91
92} // namespace eve::buildingfx
float height
Definition Grass.cpp:235
int v
格子型建筑放置世界(脚本可直接操作)。
bool attach(building::PlacementWorld *world)
int getVisualCount(building::PlacementWorld *world) const
bool getGridVisible(building::PlacementWorld *world) const
void hideGhost(building::PlacementWorld *world)
void setGridVisible(building::PlacementWorld *world, bool visible)
~BuildingFx() override=default
bool isAttached(building::PlacementWorld *world) const
void drawGrid3D(building::PlacementWorld *world, graphics::Graphics *gfx, float height=0.f)
void updateGhost(building::PlacementWorld *world, building::Ghost *ghost)
bool detach(building::PlacementWorld *world)
void drawGrid2D(building::PlacementWorld *world, graphics::Graphics *gfx)
void sync(building::PlacementWorld *world)
GPU mesh handle (+ optional CPU morph targets).
Definition Mesh.h:18
Default renderable entity for declarative 2D sprites / solid quads.
建筑放置模块入口:定义 / 放置世界 / 鬼影 / 变更事件的脚本绑定点。 设计文档:docs/dev/建筑放置系统设计.md
Definition Building.cpp:7
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition AnimTrail.h:6
建筑模板(进程级注册表中的定义)。
已放置的建筑实例。