Use angle from dna
This commit is contained in:
		| @@ -40,4 +40,5 @@ private: | |||||||
|   inline int get_start_size(DrawArgs &arg); |   inline int get_start_size(DrawArgs &arg); | ||||||
|   inline int get_end_size(DrawArgs &arg, int start); |   inline int get_end_size(DrawArgs &arg, int start); | ||||||
|   inline float get_lenght(DrawArgs &arg); |   inline float get_lenght(DrawArgs &arg); | ||||||
|  |   inline float get_angle_var(DrawArgs &arg); | ||||||
| }; | }; | ||||||
| @@ -7,6 +7,8 @@ | |||||||
| #include <raylib.h> | #include <raylib.h> | ||||||
|  |  | ||||||
| #define MAX_DEPTH 8 | #define MAX_DEPTH 8 | ||||||
|  | #define MAX_POSIBLE_DEPTH 11 | ||||||
|  | static_assert(MAX_DEPTH <= MAX_POSIBLE_DEPTH); | ||||||
|  |  | ||||||
| struct uint128 | struct uint128 | ||||||
| { | { | ||||||
|   | |||||||
| @@ -22,9 +22,13 @@ constexpr int min_size_var = -5; | |||||||
| constexpr int max_size_chnage = 5; | constexpr int max_size_chnage = 5; | ||||||
| constexpr int min_size_change = -5; | constexpr int min_size_change = -5; | ||||||
| constexpr int sizes[] = {2, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20}; | constexpr int sizes[] = {2, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20}; | ||||||
|  | static_assert(sizeof(sizes) / sizeof(int) == MAX_POSIBLE_DEPTH); | ||||||
|  |  | ||||||
| float lengths[MAX_DEPTH]; | float lengths[MAX_DEPTH]; | ||||||
|  |  | ||||||
|  | constexpr float max_angles[] = {5.0f, 5.0f, 5.0f, 10.0f, 10.0f, 10.0f, 15.0f, 15.0f, 20.0f, 20.0f, 20.0f}; | ||||||
|  | static_assert(sizeof(max_angles) / sizeof(float) == MAX_POSIBLE_DEPTH); | ||||||
|  |  | ||||||
| void calculateLevels(int canvasSize) | void calculateLevels(int canvasSize) | ||||||
| { | { | ||||||
|   lengths[0] = canvasSize / 4.0f; |   lengths[0] = canvasSize / 4.0f; | ||||||
| @@ -75,7 +79,8 @@ void Tree::drawBranch() | |||||||
|   DrawArgs arg = draw_calls.front(); |   DrawArgs arg = draw_calls.front(); | ||||||
|   if (arg.dep == MAX_DEPTH) |   if (arg.dep == MAX_DEPTH) | ||||||
|     return; |     return; | ||||||
|   float angle = ((arg.angleDeg) * PI) / 180.0f; |   float angle_var = get_angle_var(arg); | ||||||
|  |   float angle = ((arg.angleDeg + angle_var) * PI) / 180.0f; | ||||||
|   float length = get_lenght(arg); |   float length = get_lenght(arg); | ||||||
|   float nx = length * std::sin(angle); |   float nx = length * std::sin(angle); | ||||||
|   float ny = length * std::cos(angle); |   float ny = length * std::cos(angle); | ||||||
| @@ -194,3 +199,12 @@ inline float Tree::get_lenght(DrawArgs &arg) | |||||||
|     lenght = 1; |     lenght = 1; | ||||||
|   return lenght; |   return lenght; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | inline float Tree::get_angle_var(DrawArgs &arg) | ||||||
|  | { | ||||||
|  |   float angle_var = Remap(m_dna->branches[arg.dep].branch_angle_var, 0, 255, 0.0f, max_angles[arg.dep]); | ||||||
|  |  | ||||||
|  |   angle_var = Lerp(angle_var, -angle_var, mrand::getFloat(&branchSeed)); | ||||||
|  |  | ||||||
|  |   return angle_var; | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user