diff --git a/inc/canvas/Canvas.hpp b/inc/canvas/Canvas.hpp index b95e95a..dcdb56f 100644 --- a/inc/canvas/Canvas.hpp +++ b/inc/canvas/Canvas.hpp @@ -10,9 +10,11 @@ public: ~Canvas() = default; void init(int size); void deinit(); - void newGen(RenderTexture2D& target); - + void newGen(RenderTexture2D &target); + private: BackGround backGround; Tree tree; + + Dna dna = {0}; }; diff --git a/inc/canvas/Tree.hpp b/inc/canvas/Tree.hpp index 9dd7ff4..06f9a38 100644 --- a/inc/canvas/Tree.hpp +++ b/inc/canvas/Tree.hpp @@ -3,14 +3,7 @@ #include #include -#define MAX_DEPTH 11 - -struct Branch -{ - Color color; - uint8_t numOfBranches; - float lenghthRatio; -}; +#include "values/Dna.hpp" struct DrawArgs { @@ -27,16 +20,16 @@ public: Tree() = default; ~Tree() = default; void init(int size); - void newGen(); + void draw(Dna *dna); private: + Dna *m_dna; + int size = 0; Vector2 start = {0}; - std::vector branches; std::list draw_calls; void generateBranches(); - void drawTree(); void drawBranch(); Vector2 drawLine(); }; \ No newline at end of file diff --git a/inc/values/Dna.hpp b/inc/values/Dna.hpp index 1df8cc3..6e3d535 100644 --- a/inc/values/Dna.hpp +++ b/inc/values/Dna.hpp @@ -1,4 +1,12 @@ +#ifndef DNA_H +#define DNA_H + #include +#include + +#include + +#define MAX_DEPTH 11 struct uint128 { @@ -15,6 +23,13 @@ struct Moon float size; }; +struct Branch +{ + Color color; + uint8_t numOfBranches; + float lenghthRatio; +}; + struct Dna { Moon moon; @@ -22,6 +37,9 @@ struct Dna int time; uint128 mountenSeed; uint128 starSeed; + std::array branches; }; -Dna newDna(); +void newDna(Dna &dna); + +#endif /* DNA_H */ diff --git a/src/canvas/Canvas.cpp b/src/canvas/Canvas.cpp index 93384df..2215015 100644 --- a/src/canvas/Canvas.cpp +++ b/src/canvas/Canvas.cpp @@ -11,10 +11,10 @@ void Canvas::newGen(RenderTexture2D &target) BeginTextureMode(target); ClearBackground(WHITE); - Dna dna = newDna(); + newDna(dna); backGround.draw(&dna); - tree.newGen(); + tree.draw(&dna); EndTextureMode(); } diff --git a/src/canvas/Tree.cpp b/src/canvas/Tree.cpp index 69c1b79..aad0b51 100644 --- a/src/canvas/Tree.cpp +++ b/src/canvas/Tree.cpp @@ -3,7 +3,6 @@ #include #include "canvas/Tree.hpp" #include "Math.hpp" -#include "values/mrand.hpp" // Public void Tree::init(int size) @@ -11,15 +10,18 @@ void Tree::init(int size) this->size = size; start.x = size / 2; start.y = size; - - branches.assign(11, {}); } -void Tree::newGen() +void Tree::draw(Dna *dna) { - generateBranches(); + m_dna = dna; + draw_calls.push_back({start, 0, (float)size / 4, 1}); - drawTree(); + while (!draw_calls.empty()) + { + drawBranch(); + draw_calls.pop_front(); + } } // Private @@ -40,7 +42,7 @@ Vector2 Tree::drawLine() for (float i = 0; i < 1; i += fstep) { Vector2 point = Vector2Lerp(arg.start, end, i); - Color color = ColorLerp(branches[arg.dep - 1].color, branches[arg.dep].color, i); + Color color = ColorLerp(m_dna->branches[arg.dep - 1].color, m_dna->branches[arg.dep].color, i); DrawCircleV(point, thick, color); } return end; @@ -54,41 +56,13 @@ void Tree::drawBranch() Vector2 next = drawLine(); - float next_len = branches[arg.dep].lenghthRatio; - float sectors = branches[arg.dep].numOfBranches + 1; + float next_len = m_dna->branches[arg.dep].lenghthRatio; + float sectors = m_dna->branches[arg.dep].numOfBranches + 1; float degres = 180.0f / sectors; - for (size_t i = 0; i < branches[arg.dep].numOfBranches; i++) + for (size_t i = 0; i < m_dna->branches[arg.dep].numOfBranches; i++) { float newAngle = arg.angleDeg - 90 + (degres * (i + 1)); draw_calls.push_back({next, newAngle, arg.lenghth * next_len, arg.dep + 1}); } } - -void Tree::drawTree() -{ - draw_calls.push_back({start, 0, (float)size / 4, 1}); - - while (!draw_calls.empty()) - { - drawBranch(); - draw_calls.pop_front(); - } -} - -void Tree::generateBranches() -{ - for (size_t i = 0; i < MAX_DEPTH; i++) - { - uint8_t r = mrand::getValue(0, 255); - uint8_t g = mrand::getValue(0, 255); - uint8_t b = mrand::getValue(0, 255); - branches[i].color = {r, g, b, 255}; - - branches[i].numOfBranches = mrand::getValue(1, 3); - - branches[i].lenghthRatio = ((float)mrand::getValue(600, 700)) / 1000.0f; - } - - branches[0].color = branches[1].color; -} diff --git a/src/values/Dna.cpp b/src/values/Dna.cpp index e0ce89c..cdf2a2e 100644 --- a/src/values/Dna.cpp +++ b/src/values/Dna.cpp @@ -5,9 +5,8 @@ #include -Dna newDna() +void newDna(Dna &dna) { - Dna dna = {0}; dna.moon = {mrand::getFloat(), mrand::getFloat(), mrand::getFloat()}; dna.colorSet = mrand::getValue(0, 3); dna.time = std::floor(Remap(mrand::getFloat(), 0, 1, 4, 0)); @@ -21,5 +20,19 @@ Dna newDna() dna.starSeed.c = mrand::getInt(); dna.starSeed.d = mrand::getInt(); - return dna; + for (size_t i = 0; i < MAX_DEPTH; i++) + { + uint8_t r = mrand::getValue(0, 255); + uint8_t g = mrand::getValue(0, 255); + uint8_t b = mrand::getValue(0, 255); + dna.branches[i].color = {r, g, b, 255}; + + dna.branches[i].numOfBranches = mrand::getValue(1, 3); + + dna.branches[i].lenghthRatio = ((float)mrand::getValue(600, 700)) / 1000.0f; + } + + dna.branches[0].color = dna.branches[1].color; + + return; } \ No newline at end of file