diff --git a/Makefile b/Makefile index 2867930..d0b6933 100644 --- a/Makefile +++ b/Makefile @@ -13,9 +13,11 @@ SRC = main.c \ src/components/live_component.c \ src/components/kill_component.c \ src/components/win_component.c \ + src/components/timer_component.c \ src/systems/gravity_system.c \ src/systems/walk_system.c \ - src/systems/jump_system.c + src/systems/jump_system.c \ + src/systems/timer_system.c OBJ = $(SRC:%.c=%.o) diff --git a/assets/fonts/roboto.ttf b/assets/fonts/roboto.ttf new file mode 100644 index 0000000..2b6392f Binary files /dev/null and b/assets/fonts/roboto.ttf differ diff --git a/assets/maps/scrolling_map.txt b/assets/maps/scrolling_map.txt deleted file mode 100644 index 081f0f4..0000000 --- a/assets/maps/scrolling_map.txt +++ /dev/null @@ -1,4 +0,0 @@ - - - -11111111111111111111111111111111111111111111111111111111111111111111111111111111 \ No newline at end of file diff --git a/include/components/timer_component.h b/include/components/timer_component.h new file mode 100644 index 0000000..8fd79c3 --- /dev/null +++ b/include/components/timer_component.h @@ -0,0 +1,18 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** gravity_component +*/ + +#pragma once + +#include "component.h" + +struct timer_component +{ + gc_component base; + float time_left; +}; + +extern const struct timer_component timer_component; \ No newline at end of file diff --git a/include/systems/timer_system.h b/include/systems/timer_system.h new file mode 100644 index 0000000..bd518cd --- /dev/null +++ b/include/systems/timer_system.h @@ -0,0 +1,12 @@ +/* +** EPITECH PROJECT, 2019 +** MUL_my_runner_2019 +** File description: +** texture_renderer_system +*/ + +#pragma once + +#include "system.h" + +extern const gc_system timer_system; \ No newline at end of file diff --git a/lib/gamacon b/lib/gamacon index ded8579..a1e4936 160000 --- a/lib/gamacon +++ b/lib/gamacon @@ -1 +1 @@ -Subproject commit ded85794e01c6d9d8b2ac888937689cf45193f82 +Subproject commit a1e4936dba3d8de7905d433081cb62765497a97d diff --git a/prefabs/game.gcprefab b/prefabs/game.gcprefab index 3bc663f..5332ff8 100644 --- a/prefabs/game.gcprefab +++ b/prefabs/game.gcprefab @@ -7,6 +7,7 @@ + @@ -54,7 +55,16 @@ - + + + + + + + + + + diff --git a/src/components/timer_component.c b/src/components/timer_component.c new file mode 100644 index 0000000..8070a1b --- /dev/null +++ b/src/components/timer_component.c @@ -0,0 +1,49 @@ +/* +** EPITECH PROJECT, 2020 +** Twac +** File description: +** timer_component +*/ + +#include "component.h" +#include "components/timer_component.h" +#include "utility.h" +#include + +static void ctr(void *component, va_list args) +{ + struct timer_component *cmp = (struct timer_component *)component; + + cmp->time_left = va_arg(args, double); +} + +static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n) +{ + struct timer_component *cmp = (struct timer_component *)component; + + cmp->time_left = xml_getintprop(n, "time"); + (void)entity; + (void)scene; +} + +static char *serialize(void *component) +{ + (void)component; + return (NULL); +} + +const struct timer_component timer_component = { + base: { + name: "timer_component", + size: sizeof(struct timer_component), + dependencies: (char *[]){ + "renderer", + NULL + }, + ctr: &ctr, + fdctr: &fdctr, + dtr: NULL, + serialize: &serialize, + destroy: &component_destroy + } +}; \ No newline at end of file diff --git a/src/game_loader.c b/src/game_loader.c index f8cea4e..850113d 100644 --- a/src/game_loader.c +++ b/src/game_loader.c @@ -6,6 +6,7 @@ */ #include "engine.h" +#include "components/renderer.h" #include "runner.h" #include "prefab.h" #include "components/gravity_component.h" @@ -14,9 +15,11 @@ #include "components/live_component.h" #include "components/kill_component.h" #include "components/win_component.h" +#include "components/timer_component.h" #include "systems/gravity_system.h" #include "systems/walk_system.h" #include "systems/jump_system.h" +#include "systems/timer_system.h" #include #include @@ -28,10 +31,12 @@ int register_customcmps(gc_engine *engine) engine->add_system(engine, &gravity_system); engine->add_system(engine, &walk_system); engine->add_system(engine, &jump_system); + engine->add_system(engine, &timer_system); engine->finish_physics(engine); engine->add_component(engine, &live_component); engine->add_component(engine, &kill_component); engine->add_component(engine, &win_component); + engine->add_component(engine, &timer_component); return (0); } diff --git a/src/systems/timer_system.c b/src/systems/timer_system.c new file mode 100644 index 0000000..a58b9de --- /dev/null +++ b/src/systems/timer_system.c @@ -0,0 +1,45 @@ +/* +** EPITECH PROJECT, 2020 +** Twac +** File description: +** timer_system +*/ + +#include "entity.h" +#include "system.h" +#include "vector2.h" +#include "utility.h" +#include "components/timer_component.h" +#include "components/renderer.h" +#include "text.h" +#include + +static void update_entity(gc_engine *engine, void *system, \ +gc_entity *entity, float dtime) +{ + struct renderer *rend = GETCMP(renderer); + struct timer_component *timer = GETCMP(timer_component); + + if (!rend || rend->type != GC_TXTREND) + return; + timer->time_left -= dtime; + ((gc_text *)rend->data)->text = tostr((int)timer->time_left); + (void)system; + (void)engine; +} + +static void destroy(void *system) +{ + (void)system; +} + +const gc_system timer_system = { + name: "timer_system", + component_name: "timer_component", + size: sizeof(gc_system), + ctr: NULL, + dtr: NULL, + check_dependencies: &system_check_dependencies, + update_entity: &update_entity, + destroy: &destroy +}; \ No newline at end of file