Files
terrin/src/render.c
2026-01-03 11:05:21 -05:00

66 lines
1.7 KiB
C

#include "include/render.h"
#include "include/gen.h"
#include "include/geom.h"
#include "include/util.h"
#include <raylib.h>
Vector2 PointToVector2(Pt p) {
Vector2 v;
v.x = (float)(p.x * 100) + 50.;
v.y = (float)(p.y * 100) + 50.;
return v;
}
Vector2 PointpToVector2(Pt* p) {
Vector2 v;
v.x = (float)(p->x * 100) + 50;
v.y = (float)(p->y * 100) + 50;
return v;
}
void draw_tri(Tri* tri) {
DrawTriangleLines(
PointToVector2(tri->a), PointToVector2(tri->b), PointToVector2(tri->c),
RED
);
}
void draw_tri_inside(Tri* tri, Color col) {
int maxx = MAX3(tri->a.x, tri->b.x, tri->c.x);
int maxy = MAX3(tri->a.y, tri->b.y, tri->c.y);
int minx = MIN3(tri->a.x, tri->b.x, tri->c.x);
int miny = MIN3(tri->a.y, tri->b.y, tri->c.y);
for (int x = minx; x <= maxx; x++) {
for (int y = miny; y <= maxy; y++) {
if (tri_within((Pt){x, y}, tri)) {
// DrawCircleV(PointToVector2((Pt){x, y}), 4.f, col);
DrawLineV(
PointToVector2((Pt){x, y}), PointToVector2(tri_center(tri)),
col
);
}
}
}
}
void render() {
for (int x = 0; x < WORLD_SZ; x++) {
for (int y = 0; y < WORLD_SZ; y++) {
Vector2 v = PointToVector2((Pt){x, y});
DrawCircleV(v, 4.f, WHITE);
DrawLineV(
v,
(Vector2){v.x + asth[x][y].x * WORLD_SZ,
v.y + asth[x][y].y * WORLD_SZ},
WHITE
);
}
}
for (int i = 0; i < NPLATES; i++) {
Plate plate = lith[i];
draw_tri(plate.tris);
draw_tri_inside(plate.tris, plate.col);
}
}