1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
#include <stdlib.h>
#include <stdio.h>
#include "raylib.h"
typedef struct Config {
int SCREEN_WIDTH;
int SCREEN_HEIGHT;
int ORIGIN_X;
int ORIGIN_Y;
char TITLE[20];
int TARGET_FPS;
} Config;
typedef struct Line {
Vector2 start;
Vector2 end;
Color color;
} Line;
typedef struct VectorField {
int colSize;
int rowSize;
int spacing;
Line **lines; // col then row
} VectorField;
void Initialize(Config config);
void InitializeVectorField(VectorField *vectorField, int colSize, int rowSize);
void doDrawing(VectorField *vectorField, int colSize, int rowSize);
void doUpdate();
int main(void)
{
Config config = {
1500,
900,
1500 / 2,
900 / 2,
"Cool Thing",
60
};
Initialize(config);
int spacing = 20;
int colSize = config.SCREEN_WIDTH / spacing - 1;
int rowSize = config.SCREEN_HEIGHT / spacing - 1;
Line **lines = NULL;
VectorField vectorField = {
.colSize = colSize,
.rowSize = rowSize,
.spacing = spacing,
.lines = lines
};
InitializeVectorField(&vectorField, colSize, rowSize);
while (!WindowShouldClose())
{
doUpdate();
doDrawing(&vectorField, colSize, rowSize);
}
CloseWindow();
return 0;
}
void Initialize(Config config) {
InitWindow(config.SCREEN_WIDTH, config.SCREEN_HEIGHT, config.TITLE);
SetTargetFPS(config.TARGET_FPS);
}
void MemAllocFailed(char *source) {
printf("Memory allocation for %s failed", source);
exit(42);
}
void InitializeVectorField(VectorField *vectorField, int colSize, int rowSize) {
vectorField->lines = malloc(rowSize * sizeof(Line*));
for (int i = 0; i < rowSize; i++) {
vectorField->lines[i] = malloc(colSize * sizeof(Line));
for (int j = 0; j < colSize; j++) {
Line line = {
.start = {
(float)((j + 1) * vectorField->spacing),
(float)((i + 1) * vectorField->spacing)
},
.end = {
(float)((j + 1) * vectorField->spacing + 10),
(float)((i + 1) * vectorField->spacing - 10)
},
.color = WHITE
};
vectorField->lines[i][j] = line;
}
}
}
void doUpdate() {
float dt = GetFrameTime();
}
void doDrawing(VectorField *vectorField, int colSize, int rowSize) {
BeginDrawing();
ClearBackground(BLACK);
for (int i = 0; i < rowSize; i++) {
for (int j = 0; j < colSize; j++) {
DrawLineV(vectorField->lines[i][j].start, vectorField->lines[i][j].end, vectorField->lines[i][j].color);
}
}
EndDrawing();
}
|