Browse Source

Update shapes_penrose_tile.c

pull/5384/head
Ray 2 days ago
parent
commit
68befcc64f
1 changed files with 25 additions and 29 deletions
  1. +25
    -29
      examples/shapes/shapes_penrose_tile.c

+ 25
- 29
examples/shapes/shapes_penrose_tile.c View File

@ -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;

Loading…
Cancel
Save