blob: e14054b63f5c57282d438ab39fcd84d66399f58b (
plain)
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
|
#include "3d/scene_loader.h"
#include "util/mini_math.h"
#include "util/asset_manager.h"
#include "generated/assets.h"
#include <cstdio>
#include <cstring>
#include <vector>
#include <cassert>
int main() {
Scene scene;
std::vector<uint8_t> buffer;
// Header
const char* magic = "SCN1";
for(int i=0; i<4; ++i) buffer.push_back(magic[i]);
uint32_t num_obj = 2; // Increased to 2
uint32_t num_cam = 0;
uint32_t num_light = 0;
auto push_u32 = [&](uint32_t v) {
uint8_t* p = (uint8_t*)&v;
for(int i=0; i<4; ++i) buffer.push_back(p[i]);
};
auto push_f = [&](float v) {
uint8_t* p = (uint8_t*)&v;
for(int i=0; i<4; ++i) buffer.push_back(p[i]);
};
push_u32(num_obj);
push_u32(num_cam);
push_u32(num_light);
// --- Object 1: Basic Cube ---
char name1[64] = {0};
std::strcpy(name1, "TestObject");
for(int i=0; i<64; ++i) buffer.push_back(name1[i]);
push_u32(0); // CUBE
// Pos
push_f(1.0f); push_f(2.0f); push_f(3.0f);
// Rot (0,0,0,1)
push_f(0.0f); push_f(0.0f); push_f(0.0f); push_f(1.0f);
// Scale
push_f(1.0f); push_f(1.0f); push_f(1.0f);
// Color
push_f(1.0f); push_f(0.0f); push_f(0.0f); push_f(1.0f);
// Mesh Name length 0
push_u32(0);
// Physics
push_f(10.0f); // mass
push_f(0.8f); // restitution
push_u32(1); // static
// --- Object 2: Mesh with Asset Ref ---
char name2[64] = {0};
std::strcpy(name2, "MeshObject");
for(int i=0; i<64; ++i) buffer.push_back(name2[i]);
push_u32(6); // MESH
// Pos
push_f(0.0f); push_f(0.0f); push_f(0.0f);
// Rot
push_f(0.0f); push_f(0.0f); push_f(0.0f); push_f(1.0f);
// Scale
push_f(1.0f); push_f(1.0f); push_f(1.0f);
// Color
push_f(0.0f); push_f(1.0f); push_f(0.0f); push_f(1.0f);
// Mesh Name "MESH_CUBE"
const char* mesh_name = "MESH_CUBE";
uint32_t mesh_name_len = std::strlen(mesh_name);
push_u32(mesh_name_len);
for(size_t i=0; i<mesh_name_len; ++i) buffer.push_back(mesh_name[i]);
// Physics
push_f(1.0f);
push_f(0.5f);
push_u32(0); // dynamic
// --- Load ---
if (SceneLoader::LoadScene(scene, buffer.data(), buffer.size())) {
printf("Scene loaded successfully.\n");
assert(scene.objects.size() == 2);
// Check Obj 1
assert(scene.objects[0].type == ObjectType::CUBE);
assert(scene.objects[0].position.x == 1.0f);
assert(scene.objects[0].is_static == true);
// Check Obj 2
assert(scene.objects[1].type == ObjectType::MESH);
assert(scene.objects[1].mesh_asset_id == AssetId::ASSET_MESH_CUBE);
printf("Mesh Asset ID resolved to: %d (Expected %d)\n", (int)scene.objects[1].mesh_asset_id, (int)AssetId::ASSET_MESH_CUBE);
} else {
printf("Scene load failed.\n");
return 1;
}
return 0;
}
|