commit 7477d99b6ee7d4a2a72b188da8328684e7f50d15 Author: Tristan Roux Date: Mon Dec 2 11:53:44 2019 +0100 Making the basics of the engine diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1a01414 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.o +libgamacon.a +*.gc* \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..aa673e6 --- /dev/null +++ b/Makefile @@ -0,0 +1,38 @@ +## +## EPITECH PROJECT, 2019 +## Gamacon +## File description: +## Makefile +## + +SRC = src/engine.c \ + src/engine_internal.c \ + src/component.c \ + src/components/movable_component.c + +OBJ = $(SRC:%.c=%.o) + +INCLUDE = -I ./include + +CFLAGS = $(INCLUDE) -Wall -Wshadow -Wextra + +NAME = libgamacon.a + +CC = gcc + +AR = ar rc + +all: build + +build: $(OBJ) + $(AR) $(NAME) $(OBJ) + +clean: + $(RM) $(OBJ) + +fclean: clean + $(RM) $(NAME) + +re: fclean all + +.PHONY: all build clean fclean \ No newline at end of file diff --git a/include/Components/movable_component.h b/include/Components/movable_component.h new file mode 100644 index 0000000..83b9829 --- /dev/null +++ b/include/Components/movable_component.h @@ -0,0 +1,18 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** movable_component +*/ + +#pragma once + +#include "component.h" + +struct MovableComponent +{ + Component *base; + int left_key; + int right_key; + int jump_key; +}; \ No newline at end of file diff --git a/include/component.h b/include/component.h new file mode 100644 index 0000000..dcbf8f5 --- /dev/null +++ b/include/component.h @@ -0,0 +1,22 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** component +*/ + +#pragma once + +#include + +typedef struct Component +{ + char *name; + unsigned size; + struct Component *dependencies; + void (*ctr)(void *component, va_list); + void (*dtr)(void *component); + char *(*serialize)(void *component); +// privates: + char *tostr; +} Component; \ No newline at end of file diff --git a/include/engine.h b/include/engine.h new file mode 100644 index 0000000..8d3f13c --- /dev/null +++ b/include/engine.h @@ -0,0 +1,25 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** engine +*/ + +#pragma once + +#include "scene.h" +#include "renderer.h" +#include + +typedef struct gcEngine +{ + gcRenderer renderer; + gcScene *scene; + bool (*is_open)(); + int (*game_loop)(struct gcEngine *engine); + int (*change_scene)(struct gcEngine *engine, gcScene *scene); +} gcEngine; + +gcEngine *create_engine(char *title); +bool engine_is_open(gcEngine *engine); +int change_scene(gcEngine *engine, gcScene *scene); \ No newline at end of file diff --git a/include/entity.h b/include/entity.h new file mode 100644 index 0000000..7af2f5d --- /dev/null +++ b/include/entity.h @@ -0,0 +1,25 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** entity +*/ + +#pragma once + +#include "component.h" +#include "vector2.h" +#include "tags.h" + +typedef struct Entity +{ + int id; + char *str; + tag tag; + Component *components; + void (*serialize)(); + Vector2 position; + + struct Entity *next; + struct Entity *prev; +} Entity; \ No newline at end of file diff --git a/include/renderer.h b/include/renderer.h new file mode 100644 index 0000000..7f575a6 --- /dev/null +++ b/include/renderer.h @@ -0,0 +1,15 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** renderer +*/ + +#pragma once + +#include + +typedef struct gcRenderer +{ + sfRenderWindow *window; +} gcRenderer; \ No newline at end of file diff --git a/include/scene.h b/include/scene.h new file mode 100644 index 0000000..e35fbf0 --- /dev/null +++ b/include/scene.h @@ -0,0 +1,17 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** scene +*/ + +#pragma once + +#include "entity.h" +#include "texture.h" + +typedef struct gcScene +{ + Entity *entity_list; + gcTexture *texture; +} gcScene; \ No newline at end of file diff --git a/include/system.h b/include/system.h new file mode 100644 index 0000000..3b2ded8 --- /dev/null +++ b/include/system.h @@ -0,0 +1,17 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** system +*/ + +#pragma once + +#include "entity.h" + +typedef struct System +{ + unsigned size; + void *(check_dependencies)(const Entity *entity); + void *(update_entity)(const Entity *entity); +} System; \ No newline at end of file diff --git a/include/tags.h b/include/tags.h new file mode 100644 index 0000000..718d73f --- /dev/null +++ b/include/tags.h @@ -0,0 +1,13 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** tag +*/ + +#pragma once + +typedef enum tag +{ + none = 0 +} tag; \ No newline at end of file diff --git a/include/texture.h b/include/texture.h new file mode 100644 index 0000000..5e7d808 --- /dev/null +++ b/include/texture.h @@ -0,0 +1,16 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** texture +*/ + +#pragma once + +#include + +typedef struct gcTexture +{ + char *name; + sfTexture *texture; +} gcTexture; \ No newline at end of file diff --git a/include/vector2.h b/include/vector2.h new file mode 100644 index 0000000..40564f1 --- /dev/null +++ b/include/vector2.h @@ -0,0 +1,14 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** vector2 +*/ + +#pragma once + +typedef struct Vector2 +{ + int x; + int y; +} Vector2; \ No newline at end of file diff --git a/src/component.c b/src/component.c new file mode 100644 index 0000000..379d398 --- /dev/null +++ b/src/component.c @@ -0,0 +1,23 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** component +*/ + +#include "component.h" +#include + +void *new_component(Component *component, ...) +{ + void *new_cmp = malloc(component->size); + va_list args; + + *(Component *)new_cmp = *component; + if (((Component *)new_cmp)->ctr) { + va_start(args, component); + ((Component *)new_cmp)->ctr(new_cmp, args); + va_end(args); + } + return (new_cmp); +} \ No newline at end of file diff --git a/src/components/movable_component.c b/src/components/movable_component.c new file mode 100644 index 0000000..4475cfc --- /dev/null +++ b/src/components/movable_component.c @@ -0,0 +1,44 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** movable_component +*/ + +#include "component.h" +#include "Components/movable_component.h" +#include + +static void movable_ctr(void *component, va_list args) +{ + struct MovableComponent *movable = (struct MovableComponent *)component; + + movable->left_key = va_arg(args, int); + movable->right_key = va_arg(args, int); + movable->jump_key = va_arg(args, int); +} + +static void movable_dtr(void *component) +{ + Component *base = (Component *)component; + + if (base->tostr) + free(base->tostr); +} + +static char *movable_serialize(void *component) +{ + //Component *base = (Component *)component; + (void)component; + return (NULL); +} + +const Component MovableComponent = { + name: "PositionComponent", + size: sizeof(MovableComponent), + dependencies: NULL, + ctr: &movable_ctr, + dtr: &movable_dtr, + serialize: &movable_serialize, + tostr: NULL +}; \ No newline at end of file diff --git a/src/engine.c b/src/engine.c new file mode 100644 index 0000000..6638a90 --- /dev/null +++ b/src/engine.c @@ -0,0 +1,29 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** engine +*/ + +#include "engine.h" +#include +#include + +int game_loop(gcEngine *engine) +{ + (void)engine; + return (0); +} + +gcEngine *create_engine(char *title) +{ + gcEngine *engine = malloc(sizeof(gcEngine)); + sfVideoMode mode = {800, 600, 32}; + sfWindowStyle style = sfDefaultStyle; + + engine->renderer.window = sfRenderWindow_create(mode, title, style, NULL); + engine->is_open = &engine_is_open; + engine->game_loop = &game_loop; + engine->change_scene = &change_scene; + return (engine); +} \ No newline at end of file diff --git a/src/engine_internal.c b/src/engine_internal.c new file mode 100644 index 0000000..dc06bb1 --- /dev/null +++ b/src/engine_internal.c @@ -0,0 +1,21 @@ +/* +** EPITECH PROJECT, 2019 +** Gamacon +** File description: +** engine_internal +*/ + +#include +#include "engine.h" + + bool engine_is_open(gcEngine *engine) + { + return (sfRenderWindow_isOpen(engine->renderer.window)); + } + + int change_scene(gcEngine *engine, gcScene *scene) + { + (void)engine; + (void)scene; + return (0); + } \ No newline at end of file