GCC Code Coverage Report


Directory: ./
File: sources/System/system_movement.c
Date: 2023-09-29 04:53:15
Exec Total Coverage
Lines: 0 21 0.0%
Branches: 0 4 0.0%

Line Branch Exec Source
1 /*
2 * Filename: system_movement.c
3 * Path: sources/System
4 * Created Date: Sunday, September 17th 2023, 7:25:32 am
5 * Author: osvegn
6 *
7 * Copyright (c) 2023 our_rpg
8 */
9
10 #include "systems.h"
11 #include "vector.h"
12 #include "world_entity.h"
13 #include "world_resource.h"
14 #include "components.h"
15 #include "resources.h"
16 #ifdef __linux__
17 #include <sys/time.h>
18 #endif
19
20 int system_movement_constructor(system_t *system)
21 {
22 system->type = S_MOVEMENT;
23 system->run = &system_movement;
24 system->active = true;
25 return 0;
26 }
27
28 static int system_movement(void *world)
29 {
30 vector_t entities = {0};
31 int rvalue = world_join_entities(world, &entities, 2, C_POSITION, C_VELOCITY);
32 ecs_vector2f_t position = {0};
33 entity_t *e = 0;
34 component_t *c_position = 0;
35 component_t *c_velocity = 0;
36 resource_t *r = world_get_resource_by_type(world, R_GAME_CLOCK);
37 #ifdef __linux__
38 struct timeval now, start;
39 start = *(struct timeval *)resource_game_clock_get(r);
40 gettimeofday(&now, NULL);
41 double time = ((now.tv_sec - start.tv_sec) * 1000.0f + (now.tv_usec - start.tv_usec) / 1000.0f);
42 #else
43 double time = 1.0f;
44 #endif
45
46 if (rvalue <= 0)
47 return 0;
48 for (unsigned int i = 0; i < entities.size(&entities); i++) {
49 e = *(entity_t **)entities.at(&entities, i);
50 c_position = entity_get_component(e, C_POSITION);
51 c_velocity = entity_get_component(e, C_VELOCITY);
52 position.x = (ecs_vector2f_t *){c_position->data}->x + (ecs_vector2i_t *){c_velocity->data}->x * time;
53 position.y = (ecs_vector2f_t *){c_position->data}->y + (ecs_vector2i_t *){c_velocity->data}->y * time;
54 component_position_set(c_position, &position);
55 }
56 return 0;
57 }
58