minimal + export

This commit is contained in:
Frater 2026-05-10 14:20:34 +02:00
commit b568b16322
5 changed files with 325 additions and 2 deletions

View file

@ -1,9 +1,13 @@
#ifndef DEFINE_H
#define DEFINE_H
// #define MINIMAL_PLAYER
#include <stdint.h>
#include <stdlib.h>
#include <math.h>
#ifndef MINIMAL_PLAYER
#include <math.h> // Uniquement nécessaire pour la génération
#endif
#include <string.h>
#include <stdio.h>
#include <conio.h>

View file

@ -9,12 +9,14 @@ void mat3_identity(Matrix3 *mat) {
}
void init_engine_math(void) {
#ifndef MINIMAL_PLAYER
int i;
for (i = 0; i < 360; i++) {
double r = (double)i * 3.14159265 / 180.0;
sintab[i] = (fixed)(sin(r) * 65536.0);
costab[i] = (fixed)(cos(r) * 65536.0);
}
#endif
}
void mat3_mul(Matrix3 *res, Matrix3 *a, Matrix3 *b) {

View file

@ -1,5 +1,7 @@
#include "defines.h"
#include <stdio.h>
#ifndef MINIMAL_PLAYER
static void push_face(Universe *uni, Object3D *obj, int a, int b, int c, uint8_t wire) {
Face *f = &uni->faces[uni->num_faces++];
f->a = a; f->b = b; f->c = c;
@ -486,3 +488,64 @@ void free_mesh(Mesh *m) {
free(m->faces);
free(m);
}
void export_universe_to_c(Universe *uni, const char *filename) {
int i;
FILE *f = fopen(filename, "w");
if (!f) return;
fprintf(f, "#ifndef EXPORTED_DATA_H\n#define EXPORTED_DATA_H\n\n#include \"defines.h\"\n\n");
// 1. Tables trigonométriques
fprintf(f, "fixed sintab[360] = {");
for(i=0; i<360; i++) fprintf(f, "%d%s", sintab[i], i<359?", ":"");
fprintf(f, "};\n\nfixed costab[360] = {");
for(i=0; i<360; i++) fprintf(f, "%d%s", costab[i], i<359?", ":"");
fprintf(f, "};\n\n");
// 2. Vertices et Normales
fprintf(f, "Vector3 uni_verts[%d] = {\n", uni->num_verts);
for(i=0; i<uni->num_verts; i++) fprintf(f, " {%d, %d, %d}%s\n", uni->verts[i].x, uni->verts[i].y, uni->verts[i].z, i<uni->num_verts-1?",":"");
fprintf(f, "};\n\n");
fprintf(f, "Vector3 uni_normals[%d] = {\n", uni->num_verts);
for(i=0; i<uni->num_verts; i++) fprintf(f, " {%d, %d, %d}%s\n", uni->v_normals[i].x, uni->v_normals[i].y, uni->v_normals[i].z, i<uni->num_verts-1?",":"");
fprintf(f, "};\n\n");
// 3. Faces
fprintf(f, "Face uni_faces[%d] = {\n", uni->num_faces);
for(i=0; i<uni->num_faces; i++) fprintf(f, " {%d, %d, %d, %d}%s\n", uni->faces[i].a, uni->faces[i].b, uni->faces[i].c, uni->faces[i].force_wire, i<uni->num_faces-1?",":"");
fprintf(f, "};\n\n");
// 4. Objets
fprintf(f, "Object3D uni_objects[%d] = {\n", uni->num_objects);
for(i=0; i<uni->num_objects; i++) {
Object3D *o = &uni->objects[i];
fprintf(f, " { %d, %d, %d, %d, ", o->vert_start, o->num_verts, o->face_start, o->num_faces);
fprintf(f, "{%d,%d,%d}, {%d,%d,%d}, ", o->pos.x, o->pos.y, o->pos.z, o->base_pos.x, o->base_pos.y, o->base_pos.z);
// Matrice identité par défaut ou état actuel
fprintf(f, "{{{%d,%d,%d},{%d,%d,%d},{%d,%d,%d}}}, %d }%s\n",
o->rot.m[0][0], o->rot.m[0][1], o->rot.m[0][2],
o->rot.m[1][0], o->rot.m[1][1], o->rot.m[1][2],
o->rot.m[2][0], o->rot.m[2][1], o->rot.m[2][2], o->color, i<uni->num_objects-1?",":"");
}
fprintf(f, "};\n\n");
// 5. Structure Universe globale
fprintf(f, "Universe static_universe = {\n");
fprintf(f, " {0}, {0}, {0}, %d, %d, {0}, %d\n};\n\n", uni->num_verts, uni->num_faces, uni->num_objects);
fprintf(f, "void load_static_universe(Universe *u) {\n");
fprintf(f, " memcpy(u->verts, uni_verts, sizeof(uni_verts));\n");
fprintf(f, " memcpy(u->v_normals, uni_normals, sizeof(uni_normals));\n");
fprintf(f, " memcpy(u->faces, uni_faces, sizeof(uni_faces));\n");
fprintf(f, " memcpy(u->objects, uni_objects, sizeof(uni_objects));\n");
fprintf(f, " u->num_verts = %d; u->num_faces = %d; u->num_objects = %d;\n", uni->num_verts, uni->num_faces, uni->num_objects);
fprintf(f, "}\n\n");
fprintf(f, "#endif\n");
fclose(f);
}
#endif /* MINIMAL_PLAYER */