From df28b300a321d5cfb89e45aeaea7dab6b7d195c8 Mon Sep 17 00:00:00 2001
From: AnonymusRaccoon
Date: Mon, 16 Dec 2019 16:26:04 +0100
Subject: [PATCH] Inverting y axis
---
.gitignore | 3 +-
Makefile | 8 ++-
include/components/gravity_component.h | 1 +
include/systems/gravity_system.h | 12 +++++
include/systems/sfml_renderer_system.h | 1 +
include/utility.h | 3 +-
src/components/gravity_component.c | 4 +-
src/engine/engine_component_builder.c | 2 +
src/engine/engine_system_builder.c | 2 +
src/systems/gravity_system.c | 11 ++--
src/systems/movable_system.c | 33 +++++++-----
src/systems/sfml_renderer_system.c | 14 +++--
tests/game.gcprefab | 75 ++++++++++++++++++++++++++
tests/player.gcprefab | 13 +++++
14 files changed, 155 insertions(+), 27 deletions(-)
create mode 100644 include/systems/gravity_system.h
create mode 100644 tests/game.gcprefab
create mode 100644 tests/player.gcprefab
diff --git a/.gitignore b/.gitignore
index 1a01414..d48d625 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
*.o
libgamacon.a
-*.gc*
\ No newline at end of file
+*.gcda
+*.gcno
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 8e41aa5..aad20ad 100644
--- a/Makefile
+++ b/Makefile
@@ -29,11 +29,16 @@ SRC = src/engine/engine.c \
src/systems/movable_system.c \
src/systems/parallax_system.c \
src/systems/controllable_system.c \
+ src/systems/gravity_system.c \
src/engine/engine_system_builder.c \
src/engine/engine_component_builder.c
OBJ = $(SRC:%.c=%.o)
+GCDA = *.gcda
+
+GCNO = *.gcno
+
TESTS = tests/deserializations.c \
tests/game_loop.c
@@ -65,7 +70,8 @@ tests_run:
clean:
$(RM) $(OBJ)
- $(RM) *.gc*
+ $(RM) $(GCDA)
+ $(RM) $(GCNO)
fclean: clean
$(RM) $(NAME)
diff --git a/include/components/gravity_component.h b/include/components/gravity_component.h
index 96f2d42..932126a 100644
--- a/include/components/gravity_component.h
+++ b/include/components/gravity_component.h
@@ -13,6 +13,7 @@ struct gravity_component
{
gc_component base;
int gravity_speed;
+ int max_speed;
};
extern const struct gravity_component gravity_component;
\ No newline at end of file
diff --git a/include/systems/gravity_system.h b/include/systems/gravity_system.h
new file mode 100644
index 0000000..78ef038
--- /dev/null
+++ b/include/systems/gravity_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 gravity_system;
\ No newline at end of file
diff --git a/include/systems/sfml_renderer_system.h b/include/systems/sfml_renderer_system.h
index 2ecbb13..57ff2fa 100644
--- a/include/systems/sfml_renderer_system.h
+++ b/include/systems/sfml_renderer_system.h
@@ -15,6 +15,7 @@ struct sfml_renderer_system
gc_system system;
sfRenderWindow *window;
sfSprite *sprite;
+ sfView *view;
};
gc_system *gc_new_sfml_renderer(gc_engine *engine, \
diff --git a/include/utility.h b/include/utility.h
index 9c5151e..055786b 100644
--- a/include/utility.h
+++ b/include/utility.h
@@ -20,4 +20,5 @@ float parse_arg_float(char **str);
char *parse_arg_str(char **str);
int my_pow(int nb, int p);
-#define MIN(x, y) ((x) < (y) ? (x) : (y))
\ No newline at end of file
+#define MIN(x, y) ((x) < (y) ? (x) : (y))
+#define MAX(x, y) ((x) > (y) ? (x) : (y))
\ No newline at end of file
diff --git a/src/components/gravity_component.c b/src/components/gravity_component.c
index 2ce67f2..bcb0eaf 100644
--- a/src/components/gravity_component.c
+++ b/src/components/gravity_component.c
@@ -16,13 +16,15 @@ static void gravity_ctr(void *component, va_list args)
struct gravity_component *cmp = (struct gravity_component *)component;
cmp->gravity_speed = va_arg(args, int);
+ cmp->max_speed = va_arg(args, int);
}
static void gravity_fdctr(gc_engine *engine, void *component, node *n)
{
struct gravity_component *cmp = (struct gravity_component *)component;
- cmp->gravity_speed = xml_getintprop(n, "gravity_speed");
+ cmp->gravity_speed = xml_getintprop(n, "speed");
+ cmp->max_speed = xml_getintprop(n, "max_speed");
(void)engine;
}
diff --git a/src/engine/engine_component_builder.c b/src/engine/engine_component_builder.c
index 5d2c428..7cc80dd 100644
--- a/src/engine/engine_component_builder.c
+++ b/src/engine/engine_component_builder.c
@@ -12,6 +12,7 @@
#include "components/renderer.h"
#include "components/transform_component.h"
#include "components/controllable_component.h"
+#include "components/gravity_component.h"
#include
void engine_add_component(gc_engine *engine, const void *component)
@@ -29,4 +30,5 @@ void engine_add_buildin_components(gc_engine *engine)
engine->add_component(engine, &renderer_component);
engine->add_component(engine, ¶llax_component);
engine->add_component(engine, &controllable_component);
+ engine->add_component(engine, &gravity_component);
}
\ No newline at end of file
diff --git a/src/engine/engine_system_builder.c b/src/engine/engine_system_builder.c
index 84a632c..80ea91e 100644
--- a/src/engine/engine_system_builder.c
+++ b/src/engine/engine_system_builder.c
@@ -11,6 +11,7 @@
#include "systems/movable_system.h"
#include "systems/controllable_system.h"
#include "systems/parallax_system.h"
+#include "systems/gravity_system.h"
#include
void engine_add_system(gc_engine *engine, const gc_system *system)
@@ -26,6 +27,7 @@ void engine_add_buildin_systems(gc_engine *engine)
engine->add_system(engine, ¶llax_system);
engine->add_system(engine, new_system(&movable_system));
engine->add_system(engine, &controllable_system);
+ engine->add_system(engine, &gravity_system);
}
int engine_use_sfml(gc_engine *engine, const char *title, int framerate)
diff --git a/src/systems/gravity_system.c b/src/systems/gravity_system.c
index 3641e60..e8f88b4 100644
--- a/src/systems/gravity_system.c
+++ b/src/systems/gravity_system.c
@@ -10,23 +10,24 @@
#include "system.h"
#include "texture.h"
#include "vector2.h"
+#include "utility.h"
#include "components/movable_component.h"
-#include "components/controllable_component.h"
+#include "components/gravity_component.h"
#include "components/renderer.h"
#include
void gravity_update_entity(gc_engine *engine, void *system, \
gc_entity *entity, float dtime)
{
- struct gravity_component *con = (struct gravity_component *)\
+ struct gravity_component *grav = (struct gravity_component *)\
entity->get_component(entity, "GravityComponent");
struct movable_component *mov = (struct movable_component *)\
entity->get_component(entity, "MovableComponent");
- mov->moving_left = engine->is_keypressed(con->left_key);
- mov->moving_right = engine->is_keypressed(con->right_key);
+ mov->speed_y = MAX(mov->speed_y - grav->gravity_speed, -grav->max_speed);
(void)system;
(void)dtime;
+ (void)engine;
}
void gravity_destroy(void *system)
@@ -41,6 +42,6 @@ const gc_system gravity_system = {
ctr: NULL,
dtr: NULL,
check_dependencies: &system_check_dependencies,
- update_entity: &gravoty_update_entity,
+ update_entity: &gravity_update_entity,
destroy: &gravity_destroy
};
\ No newline at end of file
diff --git a/src/systems/movable_system.c b/src/systems/movable_system.c
index 8ae8a8e..0f1d349 100644
--- a/src/systems/movable_system.c
+++ b/src/systems/movable_system.c
@@ -16,20 +16,17 @@
#include "systems/movable_system.h"
#include
-void movable_update_entity(gc_engine *engine, void *system, \
-gc_entity *entity, float dtime)
+void move_entity(gc_entity *entity, struct movable_component *mov, \
+quadtree *tree, float dtime)
{
- struct movable_component *mov = (struct movable_component *)\
-entity->get_component(entity, "MovableComponent");
struct transform_component *pos = (struct transform_component *)\
entity->get_component(entity, "TransformComponent");
- gc_movable_system *sys = (gc_movable_system *)system;
- qt_object obj = (qt_object) {
- id: entity->id,
- rect: {pos->position.x, pos->position.y, pos->size.y, pos->size.x}
+ qt_object obj = (qt_object) {entity->id,
+ {pos->position.x, pos->position.y, pos->size.y, pos->size.x}
};
- qt_collision i = collision_get_info(sys->tree, obj.id);
+ qt_collision i = collision_get_info(tree, obj.id);
+ printf("Speed: (%d, %d) Left: %d, Right: %d\n", mov->speed_x, mov->speed_y, i.distance_left, i.distance_right);
if (mov->speed_x < 0)
pos->position.x -= MIN(mov->speed_x * -dtime, i.distance_left);
else
@@ -39,16 +36,26 @@ entity->get_component(entity, "TransformComponent");
else
pos->position.y += MIN(mov->speed_y * dtime, i.distance_top);
obj.rect.x = pos->position.x;
- qt_update(sys->tree, obj);
- (void)engine;
- (void)system;
+ obj.rect.y = pos->position.y;
+ qt_update(tree, obj);
+}
+
+void movable_update_entity(gc_engine *engine __attribute__((unused)), \
+void *system __attribute__((unused)), gc_entity *entity, float dtime)
+{
+ struct movable_component *mov = (struct movable_component *)\
+entity->get_component(entity, "MovableComponent");
+ gc_movable_system *sys = (gc_movable_system *)system;
+
+ // if (mov->speed_x != 0 || mov->speed_y != 0) AND IS ALREADY INSIDE THE TREE
+ move_entity(entity, mov, sys->tree, dtime);
}
void movable_ctr(void *system, va_list args)
{
gc_movable_system *mov = (gc_movable_system *)system;
- mov->tree = qt_create((qt_intrect){0, 0, 1000, 1000}, 3);
+ mov->tree = qt_create((qt_intrect){-1000, -1000, 2000, 2000}, 25);
(void)args;
}
diff --git a/src/systems/sfml_renderer_system.c b/src/systems/sfml_renderer_system.c
index deeb8b9..d6836cc 100644
--- a/src/systems/sfml_renderer_system.c
+++ b/src/systems/sfml_renderer_system.c
@@ -17,7 +17,7 @@
void renderer_draw_texture(struct sfml_renderer_system *renderer, \
gc_sprite *sprite)
{
- sfVector2f pos = (sfVector2f){sprite->pos.x, sprite->pos.y};
+ sfVector2f pos = (sfVector2f){sprite->pos.x, -sprite->pos.y};
sfVector2f scale;
sfVector2u t;
sfIntRect rect = {
@@ -59,16 +59,19 @@ void sfmlrend_ctr(void *rend, va_list list)
{
struct sfml_renderer_system *renderer = (struct sfml_renderer_system *)rend;
sfVideoMode mode = {800, 600, 32};
- sfWindowStyle style = sfDefaultStyle;
gc_engine *engine = va_arg(list, gc_engine *);
const char *title = va_arg(list, const char *);
int framerate = va_arg(list, int);
- renderer->window = sfRenderWindow_create(mode, title, style, NULL);
+ renderer->window = sfRenderWindow_create(mode, title, sfDefaultStyle, NULL);
renderer->sprite = sfSprite_create();
- if (!renderer->window || !renderer->sprite)
+ renderer->view = sfView_create();
+ if (!renderer->window || !renderer->sprite || !renderer->view)
return;
sfRenderWindow_setFramerateLimit(renderer->window, framerate);
+ sfView_setSize(renderer->view, (sfVector2f){800, 600});
+ sfView_setCenter(renderer->view, (sfVector2f){400, -300});
+ sfRenderWindow_setView(renderer->window, renderer->view);
engine->is_open = &sfml_is_open;
engine->has_focus = &sfml_has_focus;
engine->is_keypressed = &sfml_is_keypressed;
@@ -97,5 +100,6 @@ const struct sfml_renderer_system sfml_renderer = {
destroy: &system_destroy
},
window: NULL,
- sprite: NULL
+ sprite: NULL,
+ view: NULL
};
\ No newline at end of file
diff --git a/tests/game.gcprefab b/tests/game.gcprefab
new file mode 100644
index 0000000..1b2428f
--- /dev/null
+++ b/tests/game.gcprefab
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/player.gcprefab b/tests/player.gcprefab
new file mode 100644
index 0000000..4af6e0d
--- /dev/null
+++ b/tests/player.gcprefab
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file