Line |
Branch |
Exec |
Source |
1 |
|
|
/* |
2 |
|
|
* Filename: world_initializer.c |
3 |
|
|
* Path: our_rpg\sources\System |
4 |
|
|
* Created Date: Sunday, January 22nd 2023, 1:13:50 am |
5 |
|
|
* Author: osvegn |
6 |
|
|
* |
7 |
|
|
* Copyright (c) 2023 our_rpg |
8 |
|
|
*/ |
9 |
|
|
|
10 |
|
|
#include "resources.h" |
11 |
|
|
#include "systems.h" |
12 |
|
|
#include "world.h" |
13 |
|
|
#include "components.h" |
14 |
|
|
#include "world_entity.h" |
15 |
|
|
|
16 |
|
✗ |
int system_world_initializer_constructor(system_t *system) |
17 |
|
|
{ |
18 |
|
✗ |
system->type = S_WORLD_INITIALIZER; |
19 |
|
✗ |
system->run = &system_world_initializer; |
20 |
|
✗ |
system->active = true; |
21 |
|
✗ |
return 0; |
22 |
|
|
} |
23 |
|
|
|
24 |
|
|
static void entity_initializer(world_t *world) |
25 |
|
|
{ |
26 |
|
|
entity_t e = {0}; |
27 |
|
|
component_t c = {0}; |
28 |
|
|
|
29 |
|
|
entity_constructor(&e); |
30 |
|
|
component_displayable_constructor(&c, 0); |
31 |
|
|
entity_add_component(&e, &c); |
32 |
|
|
component_position_constructor(&c, &(ecs_vector2i_t){.x=100, .y=200}); |
33 |
|
|
entity_add_component(&e, &c); |
34 |
|
|
component_size_constructor(&c, &(ecs_vector2i_t){.x=100, .y=100}); |
35 |
|
|
entity_add_component(&e, &c); |
36 |
|
|
component_controllable_constructor(&c, 0); |
37 |
|
|
entity_add_component(&e, &c); |
38 |
|
|
component_speed_constructor(&c, &(int){1}); |
39 |
|
|
entity_add_component(&e, &c); |
40 |
|
|
component_velocity_constructor(&c, 0); |
41 |
|
|
entity_add_component(&e, &c); |
42 |
|
|
world_add_entity(world, &e); |
43 |
|
|
} |
44 |
|
|
|
45 |
|
✗ |
static void system_initializer(world_t *world) |
46 |
|
|
{ |
47 |
|
|
system_t system; |
48 |
|
✗ |
vector_t *systems = &world->system_list; |
49 |
|
✗ |
int (*constructors[])(system_t *) = { |
50 |
|
|
&system_load_scene_constructor, |
51 |
|
|
0}; |
52 |
|
|
|
53 |
|
✗ |
for (unsigned int i = 0; constructors[i]; i++) { |
54 |
|
✗ |
constructors[i](&system); |
55 |
|
✗ |
systems->emplace_back(systems, &system); |
56 |
|
|
} |
57 |
|
✗ |
for (unsigned int i = 0; i < systems->size(systems); i++) { |
58 |
|
✗ |
if (((system_t *)systems->at(systems, i))->type == |
59 |
|
|
S_WORLD_INITIALIZER) { |
60 |
|
✗ |
systems->erase(systems, i); |
61 |
|
✗ |
break; |
62 |
|
|
} |
63 |
|
|
} |
64 |
|
|
} |
65 |
|
|
|
66 |
|
✗ |
static void resource_initializer(world_t *world) |
67 |
|
|
{ |
68 |
|
|
resource_t resource; |
69 |
|
✗ |
vector_t *resources = &world->resource_list; |
70 |
|
|
|
71 |
|
✗ |
void *data[] = {"config/basic_scene.json", 0}; |
72 |
|
✗ |
int (*constructors[])(resource_t *, |
73 |
|
|
void *) = { |
74 |
|
|
&resource_scene_filename_constructor, |
75 |
|
|
0}; |
76 |
|
✗ |
for (unsigned int i = 0; constructors[i]; i++) { |
77 |
|
✗ |
constructors[i](&resource, data[i]); |
78 |
|
✗ |
resources->emplace_back(resources, &resource); |
79 |
|
|
} |
80 |
|
|
} |
81 |
|
|
|
82 |
|
✗ |
int system_world_initializer(void *ptr) |
83 |
|
|
{ |
84 |
|
|
world_t *world = ptr; |
85 |
|
|
|
86 |
|
✗ |
resource_initializer(world); |
87 |
|
✗ |
system_initializer(world); |
88 |
|
|
// entity_initializer(world); |
89 |
|
✗ |
return 0; |
90 |
|
|
} |
91 |
|
|
|