summaryrefslogtreecommitdiff
path: root/themes/TreeShape.h~
diff options
context:
space:
mode:
Diffstat (limited to 'themes/TreeShape.h~')
-rw-r--r--themes/TreeShape.h~104
1 files changed, 104 insertions, 0 deletions
diff --git a/themes/TreeShape.h~ b/themes/TreeShape.h~
new file mode 100644
index 0000000..14ea765
--- /dev/null
+++ b/themes/TreeShape.h~
@@ -0,0 +1,104 @@
+#include "Renderer2d.h"
+#include "types.h"
+#include "mathlib.h"
+
+struct TreeBranch {
+ float32 width = 0.f;
+ float32 height = 0.f;
+ Vector2 position; // Center point
+ Vector2 direction = Vector2 { 1.f, 0.f };
+ Vector4 color = Vector4 { 1.f, 0.f, 0.f, 1.f };
+
+ void fillVertices(Renderer2dVertex* vertices) {
+ vertices[0] = {
+ Vector2 { position.x - width / 2.f, position.y },
+ color
+ };
+ vertices[1] = {
+ Vector2 { position.x + width / 2.f, position.y },
+ color
+ };
+ vertices[2] = {
+ Vector2 { position.x - width / 2.f, position.y + height },
+ color
+ };
+ vertices[3] = {
+ Vector2 { position.x - width / 2.f, position.y + height },
+ color
+ };
+ vertices[4] = {
+ Vector2 { position.x + width / 2.f, position.y + height },
+ color
+ };
+ vertices[5] = {
+ Vector2 { position.x + width / 2.f, position.y },
+ color
+ };
+ }
+};
+
+struct TreeShape {
+ Renderer2dShape shape;
+
+ float32 height = 100.f; // Height of the whole tree
+ float32 width = 50.f; // Width of the whole tree
+ int32 divisionsPerBranch = 2; // How many branches to split into at each branch split
+ int32 numBranchLevels = 8; // How many branch levels to display
+ float32 animateTimeSeconds = 2.f; // How long it takes the tree to form
+
+ void load(Renderer2d* renderer) {
+ int32 numBranches = divisionsPerBranch * numBranchLevels;
+ TreeBranch* branches = new TreeBranch[numBranches];
+ TreeBranch trunk = branches[0];
+
+ int32 numVertices = 6 * numBranches;
+ Renderer2dVertex* vertices = new Renderer2dVertex[numVertices];
+
+
+
+ trunk.width = width;
+ trunk.height = height;
+ trunk.position = Vector2 { 0.f, 0.f };
+ trunk.direction = Vector2 { 1.f, 0.f };
+ trunk.fillVertices(&vertices[0]);
+
+ shape.load(vertices, numVertices, renderer);
+
+ delete[] branches;
+ delete[] vertices;
+ }
+
+ void createBranch(TreeBranch* branchList, int32 numBranches, int32* branchIndex, int32 branchLevel, float32 width, float32 height, Vector2 position, Vector2 direction, Renderer2dVertex* vertices) {
+ branch->width = width;
+ branch->height = height;
+ branch->position = position;
+ branch->direction = direction;
+ branch->fillIinVertices(&vertices[&branchIndex * 6]);
+
+ if (branchLevel == numBranchLevels) {
+ return;
+ }
+
+ float32 branchWidth = width / divisionsPerBranch;
+ float32 branchHeight = height / divisionsPerBranch;
+ Vector2 branchPosition = branch->position + (height * branch->direction);
+
+ for (int division = 0; division < divisionsPerBranch; division++) {
+ (*branchIndex)++;
+ createBranch(branchList, numBranches, branchIndex, branchLevel + 1, branchWidth, branchHeight,
+ }
+ }
+
+ void update(float32 dtSeconds) {
+
+ }
+
+ void render(Renderer2d* renderer) {
+ shape.render(renderer);
+ }
+
+ void unload() {
+ shape.unload();
+ }
+};
+