mirror of
https://github.com/zoriya/Gamacon.git
synced 2025-12-06 02:36:09 +00:00
Inverting y axis
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
*.o
|
||||
libgamacon.a
|
||||
*.gc*
|
||||
*.gcda
|
||||
*.gcno
|
||||
8
Makefile
8
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)
|
||||
|
||||
@@ -13,6 +13,7 @@ struct gravity_component
|
||||
{
|
||||
gc_component base;
|
||||
int gravity_speed;
|
||||
int max_speed;
|
||||
};
|
||||
|
||||
extern const struct gravity_component gravity_component;
|
||||
12
include/systems/gravity_system.h
Normal file
12
include/systems/gravity_system.h
Normal 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;
|
||||
@@ -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, \
|
||||
|
||||
@@ -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))
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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, ¶llax_component);
|
||||
engine->add_component(engine, &controllable_component);
|
||||
engine->add_component(engine, &gravity_component);
|
||||
}
|
||||
@@ -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, ¶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)
|
||||
|
||||
@@ -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
|
||||
};
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
75
tests/game.gcprefab
Normal 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
13
tests/player.gcprefab
Normal 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>
|
||||
Reference in New Issue
Block a user