easyx_framework V1.0.0
基于easyx的c++游戏框架
 
载入中...
搜索中...
未找到
F:/vc/project/esayx_framewoek/esayx_framewoek/widgets.h
浏览该文件的文档.
1/*****************************************************************/
7#pragma once
8#include"CoreMinimal.h"
9#include"unordered_map"
10#include"VisualInterface.h"
11#include"Delegate.h"
12#include"World.h"
13
14
19{
20 Left
21 , Middle
22 , Right
23};
24
31{
33 int row = 1;
34 int colume = 0;
35 std::string texts = "";
36
37 int size = 3;
38
39 LPCTSTR type = LPCTSTR("楷体");
40
44 static std::unordered_map<std::string, COLORREF>TextColorMap;
45
46public:
48 int GetWidth() { return colume * size * 3; }
50 int GetHeight() { return row * size * 6; }
51
59 void SetCharacters(std::string text, int size = 3, LPCTSTR type = LPCTSTR("楷体"));
60
68
70 void debugline();
71};
72
90
96{
97 LeftTop,
98 Center
99
100};
101
105enum class UiPattern :uint8
106{
107 None,
110};
111
116class Widget :public base, public LayerInterface
117{
118 friend class Panel;
119 friend class HorizontalPanel;
120
121 //在哪一个区域
122 Pair point_lt{ -1,-1 };
123 Pair point_rb{ -1,-1 };
124
128protected:
130 //实现基础小部件的绑定
131 Widget* parent = nullptr;
132 std::unordered_set<Widget*>children;
133 Panel* attachedPanel = nullptr;
134
136 Vector2D size = {1,1};
137
138 //自定义功能属性
142
144 bool bInfoBox = false;
146 bool isUnderCursor()const;
147public:
149 virtual ~Widget();
150
151 virtual void Update();
152 virtual void BeginPlay() {};
153 virtual void EndPlay() {};
154 virtual void Render() {};
155 void ShowInfoBox() ;
156 void DrawDebugRect();
157
159 void SetLayoutPattern(LayoutPattern pattern) { layoutpattern = pattern; }
160 void SetUiPattern(UiPattern pattern);
162 void SetPosPattern(LayoutPositionPattern pattern) { pospattern = pattern; }
170 void EnableInfoBox(bool showinfo) { bInfoBox = showinfo; }
173 void SetInfoText(std::string text) { InfoText.SetCharacters(text); }
174
175 virtual Vector2D GetSize()const;
176 void SetSize(Vector2D size) { this->size = size; }
177
179 void AttachTo(Widget*par) ;
180 void DetachFrom(Widget* par) ;
181
184 float GetScreenRotation()const;
186
190 float GetRelativeRotation()const { return transform.rotation; }
193
197 void SetRelativeRotation(float rotation) { transform.rotation=rotation; }
200};
201
207class Panel:public Widget
208{
214 void SetSize(Vector2D size) { this->size = size; }
215protected:
216 std::vector<Widget*> members;
217 std::vector<UserInterface*> members_ui;
218
220
227 virtual void AdjustMemberPosition(Widget* member,int32 index)=0;
228public:
229 Panel();
230 ~Panel();
231
232 virtual void Update()override;
233
239
247 void AddMember(Widget* member,int32 index=-1);
252 void Remove(Widget* member);
253
260 void AddMember(UserInterface* member, int32 index = -1);
265 void Remove(UserInterface* member);
266
267private:
273 void AdjustMemberSizeToUnit(Widget* member);
274 //virtual Vector2D GetScreenPosition()const;
275};
276
282{
283 float spacing = 0;
284 void AdjustMemberPosition(Widget* member, int32 index);
285public:
291 void SetSpacing(float spacing) { this->spacing = spacing; }
292 Vector2D GetSize()const override;
293 /*virtual Vector2D GetScreenPosition()const;*/
294};
295
300class VerticalPanel :public Panel
301{
302 float spacing = 0;
303 void AdjustMemberPosition(Widget* member, int32 index);
304public:
310 void SetSpacing(float spacing) { this->spacing = spacing; }
311 Vector2D GetSize()const override;
312};
313
321class GridPanel final:public Panel
322{
323 bool priority = false;
324 float spacingx = 0;
325 float spacingy = 0;
326 int row = 0;
327 int column=0;
328 void AdjustMemberPosition(Widget* member, int32 index);
329public:
335 void SetRow(int row) { this->row = row; }
341 void SetCol(int col) { this->column = col; }
342
348 void SetSpacing(Vector2D spacing) { spacingx = spacing.x; spacingy = spacing.y; }
355 void SetSpacing(float x,float y) { spacingx = x; spacingy = y; }
356 Vector2D GetSize()const override;
357};
358
363class Text :public Widget
364{
367 const std::string* bindedText = nullptr;
368public:
370
371 void Update();
372
373 void Render()override;
374
380 void SetPattern(CharactersPattern pattern) { textpattern = pattern; }
381
389 void SetText(std::string text, int si = 3, LPCTSTR ty = LPCTSTR("楷体")) { texts.SetCharacters(text, si, ty); }
390
396 void BindText(const std::string& text) { bindedText = &text; }
397};
398
404class Image :public Widget, public ImageInterface
405{
406public:
407 void Update()override;
408 void Render()override;
409
411 bool IsMouseOn();
412};
413
416
417
420class Button :public Image
421{
422 IMAGE* normal;
423 IMAGE* hover;
424 IMAGE* pressed;
425
426 bool isPressed=false;
427 bool ishover = true;
428public:
429 void Update()override;
430
431 void LoadNormalPicture(std::string name);
432 void LoadHoverPicture(std::string name);
433 void LoadPressedPicture(std::string name);
434
435 bool IsMousePressed();
436
438 ButtonDelegate OnMousePressedBegin;
440 ButtonDelegate OnMousePressedEnd;
442 ButtonDelegate OnMouseHoverBegin;
444 ButtonDelegate OnMouseHoverEnd;
445};
446
453{
458};
459
464class Bar :public Widget
465{
466private:
467 float Percentage=0;
468 IMAGE* barback;
469 IMAGE* barfront;
470 IMAGE* barbutton;
471
472 Pair SizeBack = { 0,0 };
473 Pair SizeFront = { 0,0 };
474 Pair SizeBottom = { 0,0 };
476
477public:
478 virtual void Update()override;
479 virtual void Render()override;
480
486 void SetPercent(float percentage) { this->Percentage = percentage; }
490 float GetPercent()const { return Percentage ; }
491 void LoadBarBackImg(std::string name);
492 void LoadBarFrontImg(std::string name);
493 void LoadBarButtomImg(std::string name);
494
501 void SetSizeBack(int x, int y) { this->SizeBack = Pair(x, y); }
508 void SetSizeFront(int x, int y) { this->SizeFront = Pair(x, y); }
515 void SetSizeBottom(int x, int y) { this->SizeBottom = Pair(x, y); }
521 void SetSizeBack(Pair sizeback) { this->SizeBack = sizeback; }
527 void SetSizeFront(Pair sizefront) { this->SizeFront = sizefront; }
533 void SetSizeBottom(Pair sizebottom) { this->SizeBottom = sizebottom; }
534
540 void SetDirection(BarDirection direction) { this->direction = direction; }
541};
核心代码文件
委托类.
#define DECLARE_NO_PARAM_MULTI_DELEGATE_CLASS(name)
定义 Delegate.h:121
int int32
定义 Macro.h:24
unsigned char uint8
定义 Macro.h:22
包含一切与2D图像处理与渲染有关的接口
游戏世界类,所有基础类型组织逻辑
滑动条部件
定义 widgets.h:465
void LoadBarBackImg(std::string name)
加载进度条的底图.
定义 widgets.cpp:653
Pair SizeBack
进度条的底图大小
定义 widgets.h:472
float Percentage
进度比例0~1
定义 widgets.h:467
void LoadBarButtomImg(std::string name)
加载进度条的按钮位置图像.
定义 widgets.cpp:679
void SetSizeFront(Pair sizefront)
设置进度条的进度图像大小.
定义 widgets.h:527
float GetPercent() const
获取比例.
定义 widgets.h:490
Pair SizeBottom
进度条的按钮位置图像大小
定义 widgets.h:474
void SetSizeBack(int x, int y)
设置进度条的底图大小.
定义 widgets.h:501
void LoadBarFrontImg(std::string name)
加载进度条的进度图像.
定义 widgets.cpp:666
Pair SizeFront
进度条的进度图像大小
定义 widgets.h:473
void SetSizeFront(int x, int y)
设置进度条的进度图像大小.
定义 widgets.h:508
IMAGE * barback
进度条的底图
定义 widgets.h:468
void SetPercent(float percentage)
设置比例.
定义 widgets.h:486
virtual void Render() override
实现功能
定义 widgets.cpp:604
BarDirection direction
默认方向是左到右
定义 widgets.h:475
IMAGE * barbutton
进度条的按钮位置图像
定义 widgets.h:470
void SetSizeBottom(int x, int y)
设置进度条的按钮位置图像大小.
定义 widgets.h:515
void SetDirection(BarDirection direction)
设置滑动条部件方向.
定义 widgets.h:540
void SetSizeBack(Pair sizeback)
设置进度条的底图大小.
定义 widgets.h:521
virtual void Update() override
插入世界容器中进行一些交互处理 每一帧gengxin
定义 widgets.cpp:598
IMAGE * barfront
进度条的进度图像
定义 widgets.h:469
void SetSizeBottom(Pair sizebottom)
设置进度条的按钮位置图像大小.
定义 widgets.h:533
按钮委托(多播没有参数)
定义 widgets.h:421
IMAGE * pressed
按下之后的图像
定义 widgets.h:424
ButtonDelegate OnMousePressedEnd
鼠标按下去的结束事件
定义 widgets.h:440
IMAGE * normal
正常显示的图像
定义 widgets.h:422
ButtonDelegate OnMouseHoverBegin
鼠标悬停的开始事件
定义 widgets.h:442
IMAGE * hover
正常悬停的图片
定义 widgets.h:423
ButtonDelegate OnMouseHoverEnd
鼠标悬停的结束事件
定义 widgets.h:444
ButtonDelegate OnMousePressedBegin
鼠标按下去的开始事件
定义 widgets.h:438
文字类.
定义 widgets.h:31
void debugline()
画文本的边框
定义 widgets.cpp:96
std::string texts
文本内容
定义 widgets.h:35
Vector2D pos
位置
定义 widgets.h:32
static std::unordered_map< std::string, COLORREF > TextColorMap
颜色映射
定义 widgets.h:8
int colume
最大的列数
定义 widgets.h:34
void SetCharacters(std::string text, int size=3, LPCTSTR type=LPCTSTR("楷体"))
设置文本样式.
定义 widgets.cpp:19
int size
虚拟大小
定义 widgets.h:37
LPCTSTR type
字体样式
定义 widgets.h:39
int GetWidth()
获取宽度
定义 widgets.h:48
int GetHeight()
获取高度
定义 widgets.h:50
int row
行数
定义 widgets.h:33
void PrintCharacters(Vector2D pos, CharactersPattern pattern=CharactersPattern::Middle)
打印文本.
定义 widgets.cpp:50
网格面板.
定义 widgets.h:322
int column
总列数 是否有影响要看优先级
定义 widgets.h:327
void AdjustMemberPosition(Widget *member, int32 index)
行列排列更新坐标
定义 widgets.cpp:406
void SetRow(int row)
设置行数.
定义 widgets.h:335
void SetSpacing(float x, float y)
设置成员间隙大小.
定义 widgets.h:355
void SetCol(int col)
设置列数.
定义 widgets.h:341
float spacingy
成员垂直距离
定义 widgets.h:325
bool priority
优先级 默认false是列优先,true是行优先
定义 widgets.h:323
Vector2D GetSize() const override
获取实际大小
定义 widgets.cpp:417
int row
总行数 是否有影响要看优先级
定义 widgets.h:326
void SetSpacing(Vector2D spacing)
设置成员间隙大小.
定义 widgets.h:348
float spacingx
成员水平距离
定义 widgets.h:324
水平面板.
定义 widgets.h:282
Vector2D GetSize() const override
实际大小=(成员数量*UnitSizex大小,UnitSizey大小)+((数量-1)*空隙,UnitSizey大小)
定义 widgets.cpp:377
void AdjustMemberPosition(Widget *member, int32 index)
水平排列更新坐标
定义 widgets.cpp:365
void SetSpacing(float spacing)
设置成员间隙大小.
定义 widgets.h:291
float spacing
成员中间空隙、间隙大小
定义 widgets.h:283
图像部件.
定义 widgets.h:405
void Update() override
插入世界容器中进行一些交互处理 每一帧gengxin
定义 widgets.cpp:444
bool IsMouseOn()
判断鼠标是否在图片上
定义 widgets.cpp:501
void Render() override
纯虚函数,继承的类都有它来实现渲染,world默认遍历函数实现渲染
定义 widgets.cpp:462
图形接口.
定义 VisualInterface.h:59
实现图层顺序接口
定义 VisualInterface.h:21
容器面板基类.
定义 widgets.h:208
std::vector< UserInterface * > members_ui
本质是容纳画布根部件 一个整体
定义 widgets.h:217
Vector2D UnitSize
单个存储部件大小
定义 widgets.h:219
virtual void Update() override
更新绑定成员位置
定义 widgets.cpp:292
void SetSize(Vector2D size)
调整大小.
定义 widgets.h:214
void AddMember(Widget *member, int32 index=-1)
加入Widget的对象.
定义 widgets.cpp:309
void SetUnitSize(Vector2D size)
设置标准容器部件大小.
定义 widgets.cpp:303
virtual void AdjustMemberPosition(Widget *member, int32 index)=0
调节成员的开始位置
void AdjustMemberSizeToUnit(Widget *member)
调节成员尺寸到容器面板支持的尺寸.
定义 widgets.cpp:350
std::vector< Widget * > members
存储部件
定义 widgets.h:216
~Panel()
析构函数
定义 widgets.cpp:282
Panel()
定义 widgets.cpp:276
void Remove(Widget *member)
从panel中移除部件对象.
定义 widgets.cpp:321
文本部件.
定义 widgets.h:364
void BindText(const std::string &text)
绑定文本.
定义 widgets.h:396
void Render() override
渲染文本
定义 widgets.cpp:433
void SetPattern(CharactersPattern pattern)
设置文字对齐格式.
定义 widgets.h:380
void SetText(std::string text, int si=3, LPCTSTR ty=LPCTSTR("楷体"))
设置文本样式.
定义 widgets.h:389
Characters texts
定义 widgets.h:365
CharactersPattern textpattern
主要为了保留文本格式信息,好修改文本对齐形式
定义 widgets.h:366
void Update()
更新文本坐标和文本样式
定义 widgets.cpp:423
Text()
定义 widgets.h:369
const std::string * bindedText
绑定外部文本,进行更新,节省空间
定义 widgets.h:367
UI类.
定义 UserInterface.h:19
垂直面板.
定义 widgets.h:301
void AdjustMemberPosition(Widget *member, int32 index)
垂直排列更新坐标
定义 widgets.cpp:390
void SetSpacing(float spacing)
设置成员间隙大小.
定义 widgets.h:310
float spacing
成员中间空隙、间隙大小
定义 widgets.h:302
Vector2D GetSize() const override
实际大小=(UnitSizex大小,成员数量*UnitSizex大小)+(UnitSizex大小,(数量-1)*空隙)
定义 widgets.cpp:400
基础小部件
定义 widgets.h:117
virtual void EndPlay()
定义 widgets.h:153
Transform transform
场景属性
定义 widgets.h:129
std::unordered_set< Widget * > children
孩子容器
定义 widgets.h:132
void SetLayoutPattern(LayoutPattern pattern)
设置布局形式
定义 widgets.h:159
UiPattern GetUiPattern() const
获取部件可视性
定义 widgets.h:166
Pair point_lt
左上角所在的区域
定义 widgets.h:122
Vector2D GetLayoutOffset() const
获取父节点座标坐标相对于相对位置的偏移量
定义 widgets.cpp:102
float GetScreenRotation() const
获取相对屏幕坐标系的角度
定义 widgets.cpp:263
LayoutPositionPattern pospattern
坐标系
定义 widgets.h:141
LayoutPositionPattern GetPosPattern() const
获取坐标系
定义 widgets.h:168
void DetachFrom(Widget *par)
解除基础小部件的绑定
定义 widgets.cpp:247
virtual void Render()
纯虚函数,继承的类都有它来实现渲染,world默认遍历函数实现渲染
定义 widgets.h:154
LayoutPattern GetLayoutPattern() const
获取布局形式
定义 widgets.h:164
void ShowInfoBox()
显示提示框
定义 widgets.cpp:184
virtual void BeginPlay()
定义 widgets.h:152
virtual Vector2D GetSize() const
获取实际大小
定义 widgets.cpp:230
void SetRelativeScale(Vector2D scale)
设置小部件相对放缩比例
定义 widgets.h:199
bool isUnderCursor() const
鼠标是否在点击的状态
定义 widgets.cpp:120
Vector2D GetRelativePosition() const
获取小部件相对位置
定义 widgets.h:188
void EnableInfoBox(bool showinfo)
是否开启提示框
定义 widgets.h:170
void AttachTo(Widget *par)
实现基础小部件的绑定
定义 widgets.cpp:235
void SetRelativeRotation(float rotation)
设置相对角度
定义 widgets.h:197
Vector2D GetScreenScale() const
获取绝对放缩比例
定义 widgets.cpp:270
Pair point_rb
右下角所在的区域
定义 widgets.h:123
void SetPosPattern(LayoutPositionPattern pattern)
设置坐标系
定义 widgets.h:162
void SetRelativePosition(Vector2D pos)
设置相对坐标
定义 widgets.h:195
Characters InfoText
提示框
定义 widgets.h:143
virtual ~Widget()
析构函数 从mainworld容器区域中删去类
定义 widgets.cpp:156
float GetRelativeRotation() const
获取小部件相对角度
定义 widgets.h:190
UiPattern uipattern
部件可视性
定义 widgets.h:140
Widget()
定义 widgets.h:148
virtual void Update()
插入世界容器中进行一些交互处理 每一帧gengxin
定义 widgets.cpp:163
void DrawDebugRect()
绘制部件的边框
定义 widgets.cpp:200
Vector2D GetRelativeScale() const
获取小部件相对放缩比例
定义 widgets.h:192
void SetUiPattern(UiPattern pattern)
设置部件可视性
定义 widgets.cpp:215
Vector2D GetScreenPosition() const
获取相对屏幕绝对坐标
定义 widgets.cpp:256
Vector2D size
大小
定义 widgets.h:136
LayoutPattern layoutpattern
布局形式
定义 widgets.h:139
Panel * attachedPanel
附着的容器面板
定义 widgets.h:133
void SetInfoText(std::string text)
设置提示框内容
定义 widgets.h:173
bool bInfoBox
是否开启文本显示
定义 widgets.h:144
Widget * parent
父节点
定义 widgets.h:131
void SetSize(Vector2D size)
定义 widgets.h:176
基类.
定义 CoreMinimal.h:28
std::string name
类似"class base * __ptr64 tag的值"
定义 CoreMinimal.h:31
整数数据对
定义 Struct.h:196
场景属性类.
定义 Struct.h:257
Vector2D scale
缩放尺寸
定义 Struct.h:261
Vector2D position
位置坐标
定义 Struct.h:259
float rotation
角度
定义 Struct.h:260
二维向量
定义 Struct.h:18
float y
定义 Struct.h:20
float x
定义 Struct.h:19
LayoutPositionPattern
坐标系
定义 widgets.h:96
@ Center
默认中心坐标系
UiPattern
部件可视性.
定义 widgets.h:106
@ VisibleOnly
可视不可交互的模式
@ None
既不可交互也不可视 相当于不存在
@ VisibleAndInteractive
可是丙炔可交互
CharactersPattern
文字对齐格式.
定义 widgets.h:19
@ Right
右对齐 受总大小影响
@ Middle
居中 受总大小影响
LayoutPattern
布局形式,相对位置改变
定义 widgets.h:79
@ MiddleBottom
中心底部位置
@ Center
中心位置
@ LeftBottom
左下位置
@ RightMiddle
右中心位置
@ RightTop
右上位置
@ MiddleTop
中心顶部位置
@ RightBottom
右下位置
@ LeftMiddle
左中心位置
@ LeftTop
左上位置
BarDirection
滑动条部件方向
定义 widgets.h:453
@ BottomToTop
从下边开始减少 下到上
@ RightToLeft
从右边开始减少 左到右
@ LeftToRight
从左边开始减少 右到左
@ TopToBottom
从上边开始减少 上到下