diff --git a/examples/shapes/shapes_penrose_tile.c b/examples/shapes/shapes_penrose_tile.c index 948a29d12..bf6b3baae 100644 --- a/examples/shapes/shapes_penrose_tile.c +++ b/examples/shapes/shapes_penrose_tile.c @@ -57,7 +57,6 @@ static void PushTurtleState(TurtleState state); static TurtleState PopTurtleState(void); static PenroseLSystem CreatePenroseLSystem(float drawLength); static void BuildProductionStep(PenroseLSystem *ls); -static void BuildPenroseLSystem(PenroseLSystem *ls, float drawLength, int generations); static void DrawPenroseLSystem(PenroseLSystem *ls); //------------------------------------------------------------------------------------ @@ -78,10 +77,11 @@ int main(void) int maxGenerations = 4; int generations = 0; - PenroseLSystem ls = {0}; - BuildPenroseLSystem(&ls, drawLength*(generations/(float)maxGenerations), generations); + // Initializee new penrose tile + PenroseLSystem ls = CreatePenroseLSystem(drawLength*(generations/(float)maxGenerations)); + for (int i = 0; i < generations; i++) BuildProductionStep(&ls); - SetTargetFPS(60); // Set our game to run at 60 frames-per-second + SetTargetFPS(120); // Set our game to run at 60 frames-per-second //--------------------------------------------------------------------------------------- // Main game loop @@ -107,7 +107,12 @@ int main(void) } } - if (rebuild) BuildPenroseLSystem(&ls, drawLength*(generations/(float)maxGenerations), generations); + if (rebuild) + { + RL_FREE(ls.production); // Free previous production for re-creation + ls = CreatePenroseLSystem(drawLength*(generations/(float)maxGenerations)); + for (int i = 0; i < generations; i++) BuildProductionStep(&ls); + } //---------------------------------------------------------------------------------- // Draw @@ -137,13 +142,15 @@ int main(void) //---------------------------------------------------------------------------------- // Module Functions Definition //---------------------------------------------------------------------------------- -void PushTurtleState(TurtleState state) +// Push turtle state for next step +static void PushTurtleState(TurtleState state) { if (turtleTop < (TURTLE_STACK_MAX_SIZE - 1)) turtleStack[++turtleTop] = state; else TraceLog(LOG_WARNING, "TURTLE STACK OVERFLOW!"); } -TurtleState PopTurtleState(void) +// Pop turtle state step +static TurtleState PopTurtleState(void) { if (turtleTop >= 0) return turtleStack[turtleTop--]; else TraceLog(LOG_WARNING, "TURTLE STACK UNDERFLOW!"); @@ -151,8 +158,10 @@ TurtleState PopTurtleState(void) return (TurtleState){ 0 }; } -PenroseLSystem CreatePenroseLSystem(float drawLength) +// Create a new penrose tile structure +static PenroseLSystem CreatePenroseLSystem(float drawLength) { + // TODO: Review constant values assignment on recreation? PenroseLSystem ls = { .steps = 0, .ruleW = "YF++ZF4-XF[-YF4-WF]++", @@ -170,7 +179,8 @@ PenroseLSystem CreatePenroseLSystem(float drawLength) return ls; } -void BuildProductionStep(PenroseLSystem *ls) +// Build next penrose step +static void BuildProductionStep(PenroseLSystem *ls) { char *newProduction = (char *)RL_MALLOC(sizeof(char)*STR_MAX_SIZE); newProduction[0] = '\0'; @@ -205,18 +215,13 @@ void BuildProductionStep(PenroseLSystem *ls) RL_FREE(newProduction); } -void BuildPenroseLSystem(PenroseLSystem *ls, float drawLength, int generations) -{ - *ls = CreatePenroseLSystem(drawLength); - for (int i = 0; i < generations; i++) BuildProductionStep(ls); -} - -void DrawPenroseLSystem(PenroseLSystem *ls) +// Draw penrose tile lines +static void DrawPenroseLSystem(PenroseLSystem *ls) { Vector2 screenCenter = { GetScreenWidth()/2, GetScreenHeight()/2 }; TurtleState turtle = { - .origin = {0}, + .origin = { 0 }, .angle = -90.0f }; @@ -257,18 +262,9 @@ void DrawPenroseLSystem(PenroseLSystem *ls) repeats = 1; } - else if (step == '[') - { - PushTurtleState(turtle); - } - else if (step == ']') - { - turtle = PopTurtleState(); - } - else if ((step >= 48) && (step <= 57)) - { - repeats = (int) step - 48; - } + else if (step == '[') PushTurtleState(turtle); + else if (step == ']') turtle = PopTurtleState(); + else if ((step >= 48) && (step <= 57)) repeats = (int) step - 48; } turtleTop = -1;