Skip to content

Commit e6de6b1

Browse files
authored
organize renderManager, and provide sample code for game design, also modify .gitignore (#32)
1 parent 0f4296a commit e6de6b1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+9461
-1
lines changed

.gitignore

+3-1
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,6 @@ Mkfile.old
5252
dkms.conf
5353

5454
.vscode/
55-
build/
55+
build/
56+
57+
.DS_Store

Game/README.md

+6
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,9 @@
33
## Unit Test
44
In ".\unit_test\"
55
test others' library
6+
7+
## engine
8+
Integrates tested components (e.g. RenderManager, InputManager...).
9+
10+
## sample_code
11+
For testing different functions of the engine.

Game/engine/CMakeLists.txt

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
set(srcs "src/ResourceManager.c" "src/RenderManager.c")
2+
set(requires st7789 fontx pngle decode_png)
3+
4+
idf_component_register(SRCS "${srcs}"
5+
INCLUDE_DIRS "include"
6+
REQUIRES "${requires}")

Game/engine/README.md

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
## Simple Game Engine
2+
3+
### Description
4+
5+
This is a game engine designed for NTUEE game console.
6+
7+
### Architecture
8+
9+
```
10+
└──engine/
11+
├──include/
12+
│ ├──Engine.h
13+
│ ├──ResourceManager.h
14+
│ └──RenderManager.h
15+
├──src/
16+
│ ├──ResourceManager.c
17+
│ └──RenderManager.c
18+
├──CMakeLists.txt
19+
└──README.md
20+
```
21+
22+
### How to use?
23+
24+
Include following file in `main.c`
25+
```C
26+
#include "Engine.h"
27+
```
28+
For more usage of the engine, you can visit the [tutorial](https://hackmd.io/@uzF57KwOT5SnkVGD3Ppheg/Bkq8tLnLC) here.
29+
30+
### Sample code
31+
32+
[render_test](https://drive.google.com/file/d/1fSTIGNiYqWQUzMxRMaV6cDyT94TVNQgK/view?usp=sharing) (After building and flashing, you should see 5 people moving on the screen.)

Game/engine/include/Engine.h

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
Simple Game Engine for ESP32
3+
*/
4+
5+
/*
6+
Engine.h
7+
8+
Main include header for the whole engine library.
9+
*/
10+
11+
#ifndef _ENGINE_H_
12+
#define _ENGINE_H_
13+
14+
#include "ResourceManager.h"
15+
#include "RenderManager.h"
16+
17+
#endif /* _ENGINE_H_ */

Game/engine/include/RenderManager.h

+194
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
/*
2+
RenderManager.h
3+
4+
Class RenderResource, RenderObject and RenderManager.
5+
*/
6+
7+
#ifndef _RENDERMANAGER_H_
8+
#define _RENDERMANAGER_H_
9+
10+
#include <stdint.h>
11+
#include "./ResourceManager.h"
12+
13+
//include library "st7789"
14+
#include "../../st7789/include/st7789.h"
15+
#include "../../fontx/include/fontx.h"
16+
#include "../../pngle/include/pngle.h"
17+
#include "../../decode_png/include/decode_png.h"
18+
19+
#define MAX_TEXT_LENGTH 64
20+
#define SCREEN_WIDTH 320
21+
#define SCREEN_HEIGHT 240
22+
#define TRANSPARENT 0x0001
23+
24+
typedef struct renderManager RenderManager;
25+
26+
/*
27+
RenderResource class (derived from Resource), indicate a resource which is to be rendered.
28+
*/
29+
typedef struct renderResource
30+
{
31+
Resource* baseResource;
32+
uint8_t mRenderResourceID;
33+
uint16_t mWidth;
34+
uint16_t mHeight;
35+
36+
//Image file(for graphic object only)
37+
uint16_t* mImage;
38+
//Decoded font file (for text object only)
39+
//FontxFile mFont[2];
40+
41+
//Constructor for RenderResource
42+
void (*new)(struct renderResource*, uint8_t, Resource*, uint16_t, uint16_t);
43+
44+
//sets loadImage function
45+
void (*setLoadFunction)(struct renderResource*, void (struct renderResource*, uint16_t*));
46+
47+
//loadImage function, load image. (for graphic object only)
48+
void (*loadImage)(struct renderResource*, uint16_t*);
49+
//loadFont function, load font. (for text object only)
50+
//void (*loadFont)(struct renderResource*);
51+
52+
//sets unloadImage function
53+
void (*setUnloadFunction)(struct renderResource*, void (struct renderResource*));
54+
55+
//unload function, set the image pointer to NULL.
56+
void (*unloadImage)(struct renderResource*);
57+
}RenderResource;
58+
59+
//Constructor for RenderResource
60+
void renderResourceNew(RenderResource*, uint8_t, Resource*, uint16_t, uint16_t);
61+
void renderResourceSetLoadFunction(RenderResource*, void (struct renderResource*, uint16_t*));
62+
void renderResourceLoadImage(RenderResource*, uint16_t*);
63+
//void renderResourceLoadFont(RenderResource*);
64+
void renderResourceSetUnloadFunction(RenderResource*, void (struct renderResource*));
65+
void renderResourceUnloadImageDefault(RenderResource*);
66+
void renderResourceUnloadImageHeapFree(RenderResource*);
67+
68+
/*
69+
RenderObject class, includes a RenderResource and parameters for rendering.
70+
*/
71+
typedef struct renderObject
72+
{
73+
RenderResource* mRenderResource;
74+
75+
int16_t mPrePosX;
76+
int16_t mPrePosY;
77+
int16_t mPosX;
78+
int16_t mPosY;
79+
uint16_t mColor;
80+
uint8_t mPreVisible;
81+
uint8_t mVisible;
82+
//float mScale;
83+
84+
//Display text (for text object only)
85+
//uint8_t mText[MAX_TEXT_LENGTH];
86+
87+
//next and previous RenderObject
88+
struct renderObject* nextObj;
89+
struct renderObject* prevObj;
90+
91+
//constructor of RenderObject
92+
void (*new)(struct renderObject*, RenderResource*, int16_t, int16_t, uint8_t);
93+
94+
//Sets position
95+
void (*setPos)(struct renderObject*, int16_t, int16_t);
96+
97+
//Sets color (default: WHITE)
98+
void (*setColor)(struct renderObject*, uint16_t);
99+
100+
//Sets visible
101+
void (*setVisible)(struct renderObject*, uint8_t);
102+
103+
//Sets text (for text object only)
104+
//void (*setText)(struct renderObject*, char[]);
105+
106+
//Adds RenderObject to the render list, which is to be rendered.
107+
void (*add)(struct renderObject*, RenderManager*);
108+
//Removes RenderObject in the list.
109+
void (*remove)(struct renderObject*, RenderManager*);
110+
111+
//Renders object.
112+
void (*render)(struct renderObject*, RenderManager*);
113+
}RenderObject;
114+
115+
//constructor of RenderObject
116+
void renderObjectNew(RenderObject*, RenderResource*, int16_t, int16_t, uint8_t);
117+
void renderObjectSetPos(RenderObject*, int16_t, int16_t);
118+
void renderObjectSetColor(RenderObject*, uint16_t);
119+
void renderObjectSetVisible(RenderObject*, uint8_t);
120+
//void renderObjectSetText(RenderObject*, char[]);
121+
void renderObjectAdd(RenderObject*, RenderManager*);
122+
void renderObjectRemove(RenderObject*, RenderManager*);
123+
void renderObjectRender(RenderObject*, RenderManager*);
124+
125+
/*
126+
RenderManager class, manages RenderResource and RenderObject objects.
127+
*/
128+
typedef struct renderManager
129+
{
130+
TFT_t TFT_t;
131+
uint16_t *mScreen;
132+
uint8_t mRenderResourceCount;
133+
uint8_t mRenderObjectCount;
134+
void (*new)(struct renderManager*);
135+
136+
RenderResource mRenderResources[MAX_OBJECT_COUNT];
137+
RenderObject mInitRenderObject; //a sentinel of the linked list
138+
139+
//Finds RenderResource by its ID, returns NULL if not found.
140+
RenderResource* (*findRenderResourceByID)(struct renderManager*, uint8_t);
141+
//Finds RenderResource by its name, returns NULL if not found.
142+
RenderResource* (*findRenderResourceByName)(struct renderManager*, char[]);
143+
144+
//Adds Image type RenderResource, whose base class is also registered in the ResourceManager.
145+
void (*addImage)(struct renderManager*, ResourceManager*, char[], uint16_t*, uint16_t, uint16_t);
146+
void (*addImageByFunction)(struct renderManager*, ResourceManager*, char[], void (RenderResource*, uint16_t*), uint16_t, uint16_t);
147+
//Adds Text type RenderResource (aka. font), whose base class is also registered in the ResourceManager.
148+
//void (*addFont)(struct renderManager*, ResourceManager*, char[]);
149+
150+
//Adds RenderObject to the render list, which is to be rendered.
151+
void (*addObject)(struct renderManager*, RenderObject*);
152+
//Removes RenderObject in the list.
153+
void (*removeObject)(struct renderManager*, RenderObject*);
154+
155+
void (*copy)(struct renderManager*, RenderObject*, int16_t, int16_t, uint16_t, uint16_t);
156+
void (*readDown)(struct renderManager*, RenderObject*);
157+
void (*readUp)(struct renderManager*, RenderObject*);
158+
void (*readFull)(struct renderManager*, RenderObject*);
159+
160+
//Clear the current render list.
161+
void (*clear)(struct renderManager*);
162+
//Evaluate the data to be rendered, and send to st7789 buffer.
163+
void (*reRender)(struct renderManager*, RenderObject*);
164+
165+
//Update the screen.
166+
void (*update)(struct renderManager*);
167+
//Render all texts in the linked list (IN ORDER).
168+
//void (*renderAllText)(struct renderManager*);
169+
//Render all objects in the linked list (IN ORDER).
170+
//void (*renderAllObject)(struct renderManager*);
171+
}RenderManager;
172+
173+
//constructor of RenderManager
174+
void renderManagerNew(RenderManager*);
175+
RenderResource* renderManagerFindRenderResourceByID(RenderManager*, uint8_t);
176+
RenderResource* renderManagerFindRenderResourceByName(RenderManager*, char[]);
177+
void renderManagerAddImage(RenderManager*, ResourceManager*, char[], uint16_t*, uint16_t, uint16_t);
178+
void renderManagerAddImageByFunction(RenderManager*, ResourceManager*, char[], void (RenderResource*, uint16_t*), uint16_t, uint16_t);
179+
//void renderManagerAddFont(RenderManager*, ResourceManager*, char[]);
180+
void renderManagerAddObject(RenderManager*, RenderObject*);
181+
void renderManagerRemoveObject(RenderManager*, RenderObject*);
182+
183+
void renderManagerCopy(RenderManager*, RenderObject*, int16_t, int16_t, uint16_t, uint16_t);
184+
void renderManagerReadDown(RenderManager*, RenderObject*);
185+
void renderManagerReadUp(RenderManager*, RenderObject*);
186+
void renderManagerReadFull(RenderManager*, RenderObject*);
187+
188+
void renderManagerClear(RenderManager*);
189+
void renderManagerReRender(RenderManager*, RenderObject*);
190+
void renderManagerUpdate(RenderManager*);
191+
//void renderManagerRenderAllText(RenderManager*);
192+
//void renderManagerRenderAllObject(RenderManager*);
193+
194+
#endif /* _RENDERMANAGER_H_ */

Game/engine/include/ResourceManager.h

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
ResourceManager.h
3+
4+
Class Resource and ResourceManager.
5+
*/
6+
7+
#ifndef _RESOURCEMANAGER_H_
8+
#define _RESOURCEMANAGER_H_
9+
10+
#include <stdint.h>
11+
#define MAX_OBJECT_COUNT 20
12+
#define MAX_FILENAME_LENGTH 64
13+
14+
//Enum to indicate resource type
15+
typedef enum{
16+
RESOURCE_NULL = 0,
17+
RESOURCE_GRAPHIC = 1,
18+
RESOURCE_TEXT = 2,
19+
RESOURCE_AUDIO = 3,
20+
}RESOURCE_TYPE;
21+
22+
/*
23+
Resource class, indicate a resource object.
24+
*/
25+
typedef struct resource
26+
{
27+
uint8_t mResourceID;
28+
char mFileName[MAX_FILENAME_LENGTH];
29+
RESOURCE_TYPE mType;
30+
31+
//Constructor for Resource
32+
void (*new)(struct resource*, uint8_t, char[], RESOURCE_TYPE);
33+
/*
34+
The following function is required for each derived class.:
35+
void (*load)(TYPE*);
36+
void (*unload)(TYPE*);
37+
*/
38+
}Resource;
39+
40+
//Constructor for Resource
41+
void resourceNew(Resource*, uint8_t, char[], RESOURCE_TYPE);
42+
43+
/*
44+
ResourceManager class, manages resource objects.
45+
*/
46+
typedef struct resourceManager
47+
{
48+
uint8_t mResourceCount;
49+
void (*new)(struct resourceManager*);
50+
51+
Resource mResources[MAX_OBJECT_COUNT];
52+
53+
//Finds resource by its ID, returns NULL if not found.
54+
Resource* (*findResourceByID)(struct resourceManager*, uint8_t);
55+
//Finds resource by its name, returns NULL if not found.
56+
Resource* (*findResourceByName)(struct resourceManager*, char[]);
57+
58+
//Adds resource.
59+
void (*addResource)(struct resourceManager*, char[], RESOURCE_TYPE);
60+
}ResourceManager;
61+
62+
//Constructor for ResourceManager
63+
void resourceManagerNew(ResourceManager*);
64+
Resource* resourceManagerFindResourceByID(ResourceManager*, uint8_t);
65+
Resource* resourceManagerFindResourceByName(ResourceManager*, char[]);
66+
void resourceManagerAddResource(ResourceManager*, char[], RESOURCE_TYPE);
67+
68+
#endif /* _RESOURCEMANAGER_H_ */

0 commit comments

Comments
 (0)