Inverting y axis

This commit is contained in:
AnonymusRaccoon
2019-12-16 16:26:04 +01:00
parent c4bfa06987
commit df28b300a3
14 changed files with 155 additions and 27 deletions

3
.gitignore vendored
View File

@@ -1,3 +1,4 @@
*.o
libgamacon.a
*.gc*
*.gcda
*.gcno

View File

@@ -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)

View File

@@ -13,6 +13,7 @@ struct gravity_component
{
gc_component base;
int gravity_speed;
int max_speed;
};
extern const struct gravity_component gravity_component;

View File

@@ -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;

View File

@@ -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, \

View File

@@ -21,3 +21,4 @@ char *parse_arg_str(char **str);
int my_pow(int nb, int p);
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#define MAX(x, y) ((x) > (y) ? (x) : (y))

View File

@@ -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;
}

View File

@@ -12,6 +12,7 @@
#include "components/renderer.h"
#include "components/transform_component.h"
#include "components/controllable_component.h"
#include "components/gravity_component.h"
#include <stdlib.h>
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, &parallax_component);
engine->add_component(engine, &controllable_component);
engine->add_component(engine, &gravity_component);
}

View File

@@ -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 <stdlib.h>
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, &parallax_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)

View File

@@ -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 <stddef.h>
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
};

View File

@@ -16,20 +16,17 @@
#include "systems/movable_system.h"
#include <stddef.h>
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;
}

View File

@@ -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
};

75
tests/game.gcprefab Normal file
View File

@@ -0,0 +1,75 @@
<gc_scene>
<gc_entities>
<gc_entity>
<TransformComponent>
<Position x="0" y="0" />
<Size x="800" y="600" />
</TransformComponent>
<Renderer src="assets/sprites/bck_layer4.png">
<Rect height="auto" width="auto" top="0" left="0" />
</Renderer>
<ParallaxComponent speed="60" />
</gc_entity>
<gc_entity>
<TransformComponent>
<Position x="0" y="0" />
<Size x="800" y="600" />
</TransformComponent>
<Renderer src="assets/sprites/bck_layer3.png">
<Rect height="auto" width="auto" top="0" left="0" />
</Renderer>
<ParallaxComponent speed="90" />
</gc_entity>
<gc_entity>
<TransformComponent>
<Position x="0" y="0" />
<Size x="800" y="600" />
</TransformComponent>
<Renderer src="assets/sprites/bck_layer2.png">
<Rect height="auto" width="auto" top="0" left="0" />
</Renderer>
<ParallaxComponent speed="100" />
</gc_entity>
<gc_entity>
<TransformComponent>
<Position x="0" y="0" />
<Size x="800" y="600" />
</TransformComponent>
<Renderer src="assets/sprites/bck_layer1.png">
<Rect height="auto" width="auto" top="0" left="0" />
</Renderer>
<ParallaxComponent speed="120" />
</gc_entity>
<gc_entity>
<TransformComponent>
<Position x="200" y="500" />
<Size x="500" y="50" />
</TransformComponent>
<Renderer src="assets/sprites/grass.png">
<Rect height="auto" width="auto" top="0" left="0" />
</Renderer>
<MovableComponent speed="0" />
</gc_entity>
<gc_entity>
<TransformComponent>
<Position x="100" y="200" />
<Size x="100" y="300" />
</TransformComponent>
<Renderer src="assets/sprites/grass.png">
<Rect height="auto" width="auto" top="0" left="0" />
</Renderer>
<MovableComponent speed="0" />
</gc_entity>
<gc_entity>
<TransformComponent>
<Position x="700" y="200" />
<Size x="100" y="300" />
</TransformComponent>
<Renderer src="assets/sprites/grass.png">
<Rect height="auto" width="auto" top="0" left="0" />
</Renderer>
<MovableComponent speed="0" />
</gc_entity>
</gc_entities>
</gc_scene>

13
tests/player.gcprefab Normal file
View File

@@ -0,0 +1,13 @@
<gc_entities>
<gc_entity>
<TransformComponent>
<Position x="300" y="300" />
<Size x="50" y="50" />
</TransformComponent>
<Renderer src="assets/sprites/grass.png">
<Rect height="auto" width="auto" top="0" left="0" />
</Renderer>
<MovableComponent speed="700" />
<ControllableComponent left="16" right="3" jump=" " />
</gc_entity>
</gc_entities>