From de850676e79da39aec6f1ce0400cfa94cecbd744 Mon Sep 17 00:00:00 2001 From: mattkae Date: Sun, 19 Sep 2021 16:32:15 -0400 Subject: First commit --- themes/TreeShape.h~ | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 themes/TreeShape.h~ (limited to 'themes/TreeShape.h~') 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(); + } +}; + -- cgit v1.2.1