载入中...
搜索中...
未找到
UI.h
浏览该文件的文档.
1#pragma once
2
3#include "common/Module.h"
4#include "ui/UIBackend.h"
5#include "ui/UIHost.h"
6#include "ui/Widget.h"
7
8#include <SDL2/SDL.h>
9#include <simplesquirrel/simplesquirrel.hpp>
10#include <cstdint>
11#include <memory>
12#include <string>
13#include <vector>
14
15namespace eve::graphics {
16class Canvas;
17class Graphics;
18class Texture;
19}
20
21namespace eve::ui {
22
23struct UIEvent;
24
30class UI : public Module {
31public:
33 UI();
34 ~UI() override;
35
37 bool initBackend();
39 void shutdownBackend();
41 bool isBackendReady() const;
42
44 void processEvent(const SDL_Event *event);
48 void dispatchEvents();
49
51 bool wantCaptureMouse() const;
53 bool wantCaptureKeyboard() const;
54
56 UIHost *mountAs(const std::string &name, WidgetDesc root);
58 UIHost *mount(WidgetDesc root);
64 UIHost *remountAs(const std::string &name, WidgetDesc root);
65
67 bool select(const std::string &name);
69 UIHost *findHost(const std::string &name) const;
71 UIHost *findHostByOwner(uint32_t ownerId) const;
73 UIHost *current() const { return selected_; }
75 void bindOwner(uint32_t ownerId);
76
78 void beginBuild();
80 void beginWindow(const std::string &title, const std::string &id = "root");
82 void beginGroup(const std::string &id = "");
84 void beginList(const std::string &id);
86 void beginCollapsing(const std::string &label, const std::string &id = "", bool open = true);
88 void beginChild(const std::string &id, float width = 0.f, float height = 120.f);
90 void beginScrollList(const std::string &id = "", float height = 0.f, float itemHeight = 0.f);
97 void beginFlex(const std::string &direction = "row", const std::string &id = "",
98 float gap = -1.f);
100 void beginRow(const std::string &id = "", float gap = -1.f);
102 void beginColumn(const std::string &id = "", float gap = -1.f);
104 void end();
106 void addText(const std::string &content, const std::string &id = "");
108 void addTextWrapped(const std::string &content, float width, const std::string &id = "");
110 void addButton(const std::string &label, const std::string &id = "");
112 void addSameLine(const std::string &id = "");
114 void addSeparator(const std::string &id = "");
116 void addCheckbox(const std::string &label, bool checked, const std::string &id = "");
118 void addSlider(const std::string &label, float value, float minV, float maxV,
119 const std::string &id = "");
121 void addProgress(float fraction, const std::string &id = "", const std::string &overlay = "");
123 void addImage(const std::string &id = "", float width = 0.f, float height = 0.f);
125 void addImageButton(const std::string &id, float width, float height);
127 void addViewport(const std::string &id, float width = 0.f, float height = 0.f);
129 void addCombo(const std::string &label, const std::string &options, int selected,
130 const std::string &id = "");
132 void addInputText(const std::string &label, const std::string &value, const std::string &id = "");
134 void addSpacer(const std::string &id = "", float grow = 1.f);
139 void setItemFlexGrow(float grow);
141 void setItemSize(float width, float height);
143 void setItemMargin(float l, float t, float r, float b);
144 void setItemPadding(float l, float t, float r, float b);
145 void setItemMinSize(float w, float h);
146 void setItemMaxSize(float w, float h);
147 void setItemPercent(float w, float h);
149 void setItemAbsolute(float anchorX, float anchorY, float x = 0.f, float y = 0.f);
152 void setFlexAlign(const std::string &align);
154 void setFlexJustify(const std::string &justify);
156 void addListItem(const std::string &label, const std::string &id = "");
157
159 bool mountBuild();
161 bool mountBuildAs(const std::string &name);
163 bool remountBuildAs(const std::string &name);
164
169 bool setListItems(const std::string &listId, const std::vector<std::string> &items);
170
172 void setText(const std::string &id, const std::string &text);
173 void setTextWrap(const std::string &id, float width);
174 void setVisible(const std::string &id, bool visible);
175 void setChecked(const std::string &id, bool checked);
176 void setValue(const std::string &id, float value);
177 void setValueText(const std::string &id, const std::string &value);
178 void setImageTint(const std::string &id, float r, float g, float b, float a = 1.f);
179 void setImageUv(const std::string &id, float u0, float v0, float u1, float v1);
180 void setImageNinePatch(const std::string &id, float l, float t, float r, float b);
181 void setImageCornerRadius(const std::string &id, float radius);
183 void setImageTextureId(const std::string &id, uint64_t textureId);
185 uint64_t registerTexture(graphics::Texture *tex);
186 float getValue(const std::string &id) const;
187 std::string getValueText(const std::string &id) const;
188 bool getChecked(const std::string &id) const;
190 void setHostVisible(bool visible);
191 void setHostLayer(int layer);
193 void setHostModal(bool modal);
194 void setHostOverlay(bool overlay);
196 void setHostPos(float x, float y, float pivotX = 0.f, float pivotY = 0.f);
198 void setHostAnchor(float x, float y);
200 void setHostSize(float w, float h);
202 void setHostPercent(float w, float h);
208 void animateHostPos(float x, float y, float durationMs);
210 std::string consumeClick();
212 std::string consumeChange();
213
221 void onClick(const std::string &id, ssq::Function fn);
222 void onChange(const std::string &id, ssq::Function fn);
223
225 void setThemeDark();
226 void setThemeLight();
228 bool setTheme(const std::string &name);
230 std::string getTheme() const;
232 void setNavKeyboard(bool enabled);
233 void setNavGamepad(bool enabled);
235 void setScale(float scale);
237 float getScale() const;
239 std::string getStats() const;
241 std::string saveTreeJson() const;
243 bool loadTreeJson(const std::string &json);
250 graphics::Canvas *viewportCanvas(const std::string &id);
251 bool viewportHovered(const std::string &id);
252 bool viewportActive(const std::string &id);
253 float viewportMouseX(const std::string &id);
254 float viewportMouseY(const std::string &id);
255 float viewportDragDX(const std::string &id);
256 float viewportDragDY(const std::string &id);
257 float viewportWheel(const std::string &id);
258
260 void mountSimple(const std::string &title, const std::string &labelText,
261 const std::string &buttonText);
262
263private:
264 WidgetDesc &currentParent();
265 void pushOpen(WidgetDesc d);
266 bool buildComplete() const;
267 UIHost *ensureSelected(const std::string &preferredName = "");
268
269 std::unique_ptr<UIBackend> backend_;
270 UIHost *selected_ = nullptr;
271
272 std::vector<WidgetDesc> openStack_;
273 WidgetDesc builtRoot_;
274 bool hasBuiltRoot_ = false;
275
276 struct ScriptHandler {
277 ScriptHandler(std::string host, std::string node, std::string k, ssq::Function f)
278 : hostName(std::move(host)), nodeId(std::move(node)), kind(std::move(k)),
279 fn(std::move(f)) {}
280 std::string hostName;
281 std::string nodeId;
282 std::string kind; // "click" | "toggle" | "value" | "text"
283 ssq::Function fn;
284 };
285 std::vector<ScriptHandler> scriptHandlers_;
286 void fireScriptHandlers(const UIEvent &ev);
287
288 struct HostTween {
289 UIHost *host = nullptr;
290 float fromX = 0.f;
291 float fromY = 0.f;
292 float toX = 0.f;
293 float toY = 0.f;
294 double startMs = 0.0;
295 double durationMs = 0.0;
296 };
297 std::vector<HostTween> hostTweens_;
298 void updateHostTweens();
299};
300
301} // namespace eve::ui
Tok kind
std::string value
std::string title
int y
Definition Grass.cpp:135
float height
Definition Grass.cpp:235
int x
Definition Grass.cpp:135
int h
int w
uint32_t a
uint32_t b
int width
TileLayer * layer
float f
const char * name
Definition RockMesh.cpp:21
SettlementPipeline::Stage fn
bool enabled
int d
float scale
Definition TreeMesh.cpp:122
GPU texture created via Graphics::newTexture. Owns GPU resources through an opaque backend handle.
Definition Texture.h:17
ECS mount point for one UI panel/screen. Subclass to attach UI to game entities, e....
Definition UIHost.h:130
Declarative UI module (eve.UI).
Definition UI.h:30
UIHost * findHost(const std::string &name) const
Finds a host by name, or nullptr.
Definition UI.cpp:256
void setTextWrap(const std::string &id, float width)
Definition UI.cpp:609
bool mountBuild()
Finishes the build pass and mounts the built tree.
Definition UI.cpp:562
void addCombo(const std::string &label, const std::string &options, int selected, const std::string &id="")
Definition UI.cpp:456
float viewportMouseX(const std::string &id)
Definition UI.cpp:852
bool wantCaptureKeyboard() const
True when the UI wants to capture keyboard input this frame.
Definition UI.cpp:252
uint64_t registerTexture(graphics::Texture *tex)
Definition UI.cpp:670
std::string consumeClick()
Returns the id of the clicked widget since the last frame (or "").
Definition UI.cpp:760
bool initBackend()
Creates the platform UI backend (ImGui); true on success.
Definition UI.cpp:152
void setHostPercent(float w, float h)
Definition UI.cpp:736
void setImageTextureId(const std::string &id, uint64_t textureId)
Definition UI.cpp:665
void setHostPos(float x, float y, float pivotX=0.f, float pivotY=0.f)
Positions the host window with a pivot (0..1 each axis).
Definition UI.cpp:711
std::string saveTreeJson() const
Definition UI.cpp:801
void dispatchEvents()
Dispatches queued widget callbacks (click/toggle/value/text).
Definition UI.cpp:211
void setItemPercent(float w, float h)
Definition UI.cpp:523
void bindOwner(uint32_t ownerId)
Binds the selected host to a UI/scene owner id.
Definition UI.cpp:269
void addText(const std::string &content, const std::string &id="")
Adds a text label to the current container.
Definition UI.cpp:411
void setImageCornerRadius(const std::string &id, float radius)
Definition UI.cpp:660
void processEvent(const SDL_Event *event)
Feeds an SDL event into the UI backend (before window/game handling).
Definition UI.cpp:171
void setHostSize(float w, float h)
Definition UI.cpp:728
void shutdownBackend()
Destroys the platform UI backend.
Definition UI.cpp:167
float viewportDragDX(const std::string &id)
Definition UI.cpp:864
UIHost * findHostByOwner(uint32_t ownerId) const
Finds the host bound to an owner id, or nullptr.
Definition UI.cpp:258
float getValue(const std::string &id) const
Definition UI.cpp:677
UIHost * mount(WidgetDesc root)
Mounts the tree as an auto-named host and selects it.
Definition UI.cpp:296
~UI() override
Definition UI.cpp:148
void addSpacer(const std::string &id="", float grow=1.f)
Flexible empty space inside Flex (default grow=1).
Definition UI.cpp:474
void addImage(const std::string &id="", float width=0.f, float height=0.f)
Definition UI.cpp:444
bool viewportActive(const std::string &id)
Definition UI.cpp:846
void setNavKeyboard(bool enabled)
Enables/disables keyboard navigation support.
Definition UI.cpp:772
void setItemMaxSize(float w, float h)
Definition UI.cpp:516
bool setListItems(const std::string &listId, const std::vector< std::string > &items)
Replace children of a Group listId with buttons for each label (reconcile). Host must already exist a...
Definition UI.cpp:589
void setItemPadding(float l, float t, float r, float b)
Definition UI.cpp:500
void setItemFlexGrow(float grow)
Set flex item props on the most recently added child of the current open container....
Definition UI.cpp:478
void beginWindow(const std::string &title, const std::string &id="root")
Opens a window for the current build pass.
Definition UI.cpp:333
void end()
Closes the innermost open container.
Definition UI.cpp:399
bool remountBuildAs(const std::string &name)
Like mountBuildAs but reconciles by key when possible.
Definition UI.cpp:578
void beginFlex(const std::string &direction="row", const std::string &id="", float gap=-1.f)
Begin a Flex container.
Definition UI.cpp:389
void addInputText(const std::string &label, const std::string &value, const std::string &id="")
Adds an editable text field.
Definition UI.cpp:470
void addViewport(const std::string &id, float width=0.f, float height=0.f)
Definition UI.cpp:452
void addImageButton(const std::string &id, float width, float height)
Definition UI.cpp:448
std::string getStats() const
Definition UI.cpp:792
void beginGroup(const std::string &id="")
Opens a group container in the current build pass.
Definition UI.cpp:338
void onClick(const std::string &id, ssq::Function fn)
Definition UI.cpp:235
void beginCollapsing(const std::string &label, const std::string &id="", bool open=true)
Opens a collapsible header.
Definition UI.cpp:342
bool setTheme(const std::string &name)
Named preset: "dark" / "light" (case-insensitive). Returns false if unknown.
Definition UI.cpp:768
void setHostLayer(int layer)
Definition UI.cpp:699
void setThemeLight()
Definition UI.cpp:766
void setItemAbsolute(float anchorX, float anchorY, float x=0.f, float y=0.f)
Definition UI.cpp:530
UIHost * remountAs(const std::string &name, WidgetDesc root)
Creates/replaces a named host (does not select it).
Definition UI.cpp:316
void beginFrameAndRender()
Builds and presents the current frame's UI.
Definition UI.cpp:175
bool select(const std::string &name)
Selects a named host; false when it does not exist.
Definition UI.cpp:262
float getScale() const
Current UI scale factor.
Definition UI.cpp:788
void setItemMargin(float l, float t, float r, float b)
Definition UI.cpp:491
bool viewportHovered(const std::string &id)
Definition UI.cpp:840
float viewportWheel(const std::string &id)
Definition UI.cpp:876
void setScale(float scale)
Global UI scale factor (default 1).
Definition UI.cpp:780
void beginColumn(const std::string &id="", float gap=-1.f)
Opens a column flex container.
Definition UI.cpp:397
void setNavGamepad(bool enabled)
Definition UI.cpp:776
void setItemSize(float width, float height)
Sets width/height on the most recently added child.
Definition UI.cpp:484
void setHostModal(bool modal)
Marks the host as a modal (blocks other hosts) / overlay.
Definition UI.cpp:703
void addCheckbox(const std::string &label, bool checked, const std::string &id="")
Adds a checkbox.
Definition UI.cpp:431
bool isBackendReady() const
True once the backend exists.
Definition UI.cpp:150
void beginBuild()
Imperative builder: open a new build pass (see beginWindow etc.).
Definition UI.cpp:320
UIHost * current() const
Currently selected host, or nullptr.
Definition UI.h:73
void addSlider(const std::string &label, float value, float minV, float maxV, const std::string &id="")
Adds a slider.
Definition UI.cpp:435
void setFlexAlign(const std::string &align)
Set Flex container align/justify on the current open Flex (no-op otherwise).
Definition UI.cpp:540
void addProgress(float fraction, const std::string &id="", const std::string &overlay="")
Adds a progress bar.
Definition UI.cpp:440
bool getChecked(const std::string &id) const
Definition UI.cpp:689
void setHostVisible(bool visible)
Host-level state.
Definition UI.cpp:695
graphics::Canvas * viewportCanvas(const std::string &id)
Definition UI.cpp:832
void setImageUv(const std::string &id, float u0, float v0, float u1, float v1)
Definition UI.cpp:640
void addTextWrapped(const std::string &content, float width, const std::string &id="")
Definition UI.cpp:415
void setText(const std::string &id, const std::string &text)
Widget state setters/getters on the current host (by node id).
Definition UI.cpp:605
void beginList(const std::string &id)
Opens a list container (rows added with addListItem).
Definition UI.cpp:340
void addSeparator(const std::string &id="")
Adds a separator line.
Definition UI.cpp:427
void beginChild(const std::string &id, float width=0.f, float height=120.f)
Opens a sized child region.
Definition UI.cpp:346
void setHostAnchor(float x, float y)
Definition UI.cpp:721
void setImageNinePatch(const std::string &id, float l, float t, float r, float b)
Definition UI.cpp:650
void addSameLine(const std::string &id="")
Adds an inline-break spacer.
Definition UI.cpp:425
void setImageTint(const std::string &id, float r, float g, float b, float a=1.f)
Definition UI.cpp:630
void setThemeDark()
Applies the dark/light built-in theme.
Definition UI.cpp:764
void onChange(const std::string &id, ssq::Function fn)
Definition UI.cpp:241
UIHost * mountAs(const std::string &name, WidgetDesc root)
Creates/replaces a named host from a WidgetDesc tree and selects it.
Definition UI.cpp:287
std::string consumeChange()
Returns the id of the changed widget since the last frame (or "").
Definition UI.cpp:762
void setItemMinSize(float w, float h)
Definition UI.cpp:509
void beginScrollList(const std::string &id="", float height=0.f, float itemHeight=0.f)
Definition UI.cpp:350
void animateHostPos(float x, float y, float durationMs)
Definition UI.cpp:743
void setHostOverlay(bool overlay)
Definition UI.cpp:707
void setValueText(const std::string &id, const std::string &value)
Definition UI.cpp:626
void mountSimple(const std::string &title, const std::string &labelText, const std::string &buttonText)
One-shot convenience: a window with a label and a button.
Definition UI.cpp:1089
void beginRow(const std::string &id="", float gap=-1.f)
Opens a row flex container.
Definition UI.cpp:395
bool wantCaptureMouse() const
True when the UI wants to capture mouse input this frame.
Definition UI.cpp:248
void addButton(const std::string &label, const std::string &id="")
Adds a button to the current container.
Definition UI.cpp:421
bool mountBuildAs(const std::string &name)
Finishes the build pass and mounts as a named host.
Definition UI.cpp:570
float viewportDragDY(const std::string &id)
Definition UI.cpp:870
void setFlexJustify(const std::string &justify)
Sets Flex container justify on the current open Flex.
Definition UI.cpp:546
std::string getValueText(const std::string &id) const
Definition UI.cpp:683
void setValue(const std::string &id, float value)
Definition UI.cpp:622
void addListItem(const std::string &label, const std::string &id="")
Append one list row button (call inside beginList).
Definition UI.cpp:552
UIHost * remountReconcile(WidgetDesc root)
Remount with key reconcile (props-only when structure matches).
Definition UI.cpp:310
void setVisible(const std::string &id, bool visible)
Definition UI.cpp:614
std::string getTheme() const
Name of the active theme.
Definition UI.cpp:770
void setChecked(const std::string &id, bool checked)
Definition UI.cpp:618
bool loadTreeJson(const std::string &json)
Definition UI.cpp:812
UIHost * remount(WidgetDesc root)
Replaces the selected host's tree.
Definition UI.cpp:304
float viewportMouseY(const std::string &id)
Definition UI.cpp:858
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition AnimTrail.h:6
WidgetDesc text(std::string content, std::string id)
Static text label.
Definition Widget.cpp:235
Declarative widget description (build once / on dirty → flatten into UIHost::Tree).
Definition Widget.h:13