mirror of
https://github.com/zoriya/Gamacon.git
synced 2026-06-03 20:12:14 +00:00
Freeing everything now
This commit is contained in:
@@ -9,8 +9,6 @@ SRC = src/engine/engine.c \
|
|||||||
src/engine/engine_internal.c \
|
src/engine/engine_internal.c \
|
||||||
src/engine/discard_player.c \
|
src/engine/discard_player.c \
|
||||||
src/engine/engine_dataloader.c \
|
src/engine/engine_dataloader.c \
|
||||||
src/renderer/sfml_functions.c \
|
|
||||||
src/renderer/update_to_cam.c \
|
|
||||||
src/entity/entity.c \
|
src/entity/entity.c \
|
||||||
src/entity/entity_factory.c \
|
src/entity/entity_factory.c \
|
||||||
src/component.c \
|
src/component.c \
|
||||||
@@ -43,6 +41,7 @@ SRC = src/engine/engine.c \
|
|||||||
src/systems/parallax_system.c \
|
src/systems/parallax_system.c \
|
||||||
src/systems/controllers/keyboard_controller_system.c \
|
src/systems/controllers/keyboard_controller_system.c \
|
||||||
src/systems/friction_system.c \
|
src/systems/friction_system.c \
|
||||||
|
src/systems/fixed_to_cam_pseudosystem.c \
|
||||||
src/engine/engine_system_builder.c \
|
src/engine/engine_system_builder.c \
|
||||||
src/engine/engine_component_builder.c \
|
src/engine/engine_component_builder.c \
|
||||||
src/utility/vector2.c \
|
src/utility/vector2.c \
|
||||||
@@ -50,7 +49,8 @@ SRC = src/engine/engine.c \
|
|||||||
src/sfml_renderer/sfml_dataloaders.c \
|
src/sfml_renderer/sfml_dataloaders.c \
|
||||||
src/sfml_renderer/sfml_music_player.c \
|
src/sfml_renderer/sfml_music_player.c \
|
||||||
src/sfml_renderer/texture_utility.c \
|
src/sfml_renderer/texture_utility.c \
|
||||||
src/sfml_renderer/sfml_drawer.c
|
src/sfml_renderer/sfml_drawer.c \
|
||||||
|
src/sfml_renderer/sfml_functions.c
|
||||||
|
|
||||||
OBJ = $(SRC:%.c=%.o)
|
OBJ = $(SRC:%.c=%.o)
|
||||||
|
|
||||||
|
|||||||
@@ -8,5 +8,12 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "component.h"
|
#include "component.h"
|
||||||
|
#include "vector2.h"
|
||||||
|
|
||||||
extern const gc_component fixed_to_cam;
|
struct fixed_to_cam
|
||||||
|
{
|
||||||
|
gc_component base;
|
||||||
|
gc_vector2 offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern const struct fixed_to_cam fixed_to_cam;
|
||||||
@@ -19,6 +19,7 @@ typedef struct gc_engine gc_engine;
|
|||||||
struct gc_engine
|
struct gc_engine
|
||||||
{
|
{
|
||||||
gc_scene *scene;
|
gc_scene *scene;
|
||||||
|
bool should_close;
|
||||||
bool (*is_open)(gc_engine *engine);
|
bool (*is_open)(gc_engine *engine);
|
||||||
bool (*has_focus)(gc_engine *engine);
|
bool (*has_focus)(gc_engine *engine);
|
||||||
bool (*is_keypressed)(int key);
|
bool (*is_keypressed)(int key);
|
||||||
@@ -38,6 +39,7 @@ struct gc_engine
|
|||||||
const void *(*get_component)(gc_engine *engine, const char *name);
|
const void *(*get_component)(gc_engine *engine, const char *name);
|
||||||
|
|
||||||
void (*play_music)(void *music);
|
void (*play_music)(void *music);
|
||||||
|
void (*stop_music)(gc_engine *engine);
|
||||||
|
|
||||||
gc_list *dataloaders;
|
gc_list *dataloaders;
|
||||||
void (*add_dataloader)(gc_engine *engine, char *type, gc_loader loader);
|
void (*add_dataloader)(gc_engine *engine, char *type, gc_loader loader);
|
||||||
@@ -50,6 +52,8 @@ bool engine_is_keypressed(int key);
|
|||||||
void handle_events(gc_engine *engine);
|
void handle_events(gc_engine *engine);
|
||||||
void engine_draw(gc_engine *engine);
|
void engine_draw(gc_engine *engine);
|
||||||
void engine_play_music(void *music);
|
void engine_play_music(void *music);
|
||||||
|
void engine_stop_music(gc_engine *engine);
|
||||||
|
|
||||||
int change_scene(gc_engine *engine, gc_scene *scene);
|
int change_scene(gc_engine *engine, gc_scene *scene);
|
||||||
|
|
||||||
void engine_add_buildin_systems(gc_engine *engine);
|
void engine_add_buildin_systems(gc_engine *engine);
|
||||||
|
|||||||
+12
-1
@@ -29,4 +29,15 @@ struct transform_component *tra, gc_text *txt);
|
|||||||
|
|
||||||
void sfml_texture_destroy(gc_data *data);
|
void sfml_texture_destroy(gc_data *data);
|
||||||
void sfml_music_destroy(gc_data *data);
|
void sfml_music_destroy(gc_data *data);
|
||||||
void sfml_font_destroy(gc_data *data);
|
void sfml_font_destroy(gc_data *data);
|
||||||
|
|
||||||
|
bool sfml_is_open(gc_engine *engine);
|
||||||
|
bool sfml_has_focus(gc_engine *engine);
|
||||||
|
bool sfml_is_keypressed(int key);
|
||||||
|
void sfml_handle_events(gc_engine *engine);
|
||||||
|
void sfml_draw(gc_engine *engine);
|
||||||
|
void sfml_play_music(void *music);
|
||||||
|
void sfml_stop_music(gc_engine *engine);
|
||||||
|
void entities_update_to_cam(gc_scene *scene, \
|
||||||
|
struct sfml_renderer_system *renderer, struct camerafollow_system *cam);
|
||||||
|
void entities_update_to_cam_size(gc_scene *scene, gc_vector2 size);
|
||||||
|
|||||||
@@ -24,14 +24,5 @@ struct sfml_renderer_system
|
|||||||
|
|
||||||
gc_system *gc_new_sfml_renderer(gc_engine *engine, \
|
gc_system *gc_new_sfml_renderer(gc_engine *engine, \
|
||||||
const char *title, int framerate);
|
const char *title, int framerate);
|
||||||
bool sfml_is_open(gc_engine *engine);
|
|
||||||
bool sfml_has_focus(gc_engine *engine);
|
|
||||||
bool sfml_is_keypressed(int key);
|
|
||||||
void sfml_handle_events(gc_engine *engine);
|
|
||||||
void sfml_draw(gc_engine *engine);
|
|
||||||
void sfml_play_music(void *music);
|
|
||||||
void entities_update_to_cam(gc_scene *scene, \
|
|
||||||
struct sfml_renderer_system *renderer, struct camerafollow_system *cam);
|
|
||||||
void entities_update_to_cam_size(gc_scene *scene, gc_vector2 size);
|
|
||||||
|
|
||||||
extern const struct sfml_renderer_system sfml_renderer;
|
extern const struct sfml_renderer_system sfml_renderer;
|
||||||
@@ -10,6 +10,9 @@ typedef struct dictionary dictionary;
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
struct dictionary
|
struct dictionary
|
||||||
{
|
{
|
||||||
char *key;
|
char *key;
|
||||||
@@ -29,7 +32,9 @@ struct node
|
|||||||
|
|
||||||
node *xml_parse(const char *path);
|
node *xml_parse(const char *path);
|
||||||
node *xml_getnode(node *parent, const char *name);
|
node *xml_getnode(node *parent, const char *name);
|
||||||
|
bool xml_hasproperty(node *n, const char *key);
|
||||||
char *xml_getproperty(node *n, const char *key);
|
char *xml_getproperty(node *n, const char *key);
|
||||||
|
char *xml_gettempprop(node *n, const char *key);
|
||||||
int xml_getintprop(node *n, const char *key);
|
int xml_getintprop(node *n, const char *key);
|
||||||
int xml_getbinaprop(node *n, const char *key);
|
int xml_getbinaprop(node *n, const char *key);
|
||||||
int xml_gethexaprop(node *n, const char *key);
|
int xml_gethexaprop(node *n, const char *key);
|
||||||
|
|||||||
@@ -40,7 +40,10 @@ static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n)
|
|||||||
|
|
||||||
static void dtr(void *component)
|
static void dtr(void *component)
|
||||||
{
|
{
|
||||||
(void)component;
|
struct collision_component *cmp = (struct collision_component *)component;
|
||||||
|
|
||||||
|
if (cmp->on_collide)
|
||||||
|
free(cmp->on_collide);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *serialize(void *component)
|
static char *serialize(void *component)
|
||||||
|
|||||||
@@ -7,27 +7,47 @@
|
|||||||
|
|
||||||
#include "xml.h"
|
#include "xml.h"
|
||||||
#include "component.h"
|
#include "component.h"
|
||||||
#include "components/controllable_component.h"
|
#include "components/fixed_to_cam_component.h"
|
||||||
#include "components/camerafollow_component.h"
|
|
||||||
#include "utility.h"
|
#include "utility.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static void ctr(void *component, va_list args)
|
||||||
|
{
|
||||||
|
struct fixed_to_cam *cmp = (struct fixed_to_cam *)component;
|
||||||
|
|
||||||
|
cmp->offset = va_arg(args, gc_vector2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n)
|
||||||
|
{
|
||||||
|
struct fixed_to_cam *cmp = (struct fixed_to_cam *)component;
|
||||||
|
|
||||||
|
n = xml_getnode(n, "Position");
|
||||||
|
cmp->offset.x = xml_getintprop(n, "x");
|
||||||
|
cmp->offset.y = xml_getintprop(n, "y");
|
||||||
|
(void)scene;
|
||||||
|
(void)entity;
|
||||||
|
}
|
||||||
|
|
||||||
static char *serialize(void *component)
|
static char *serialize(void *component)
|
||||||
{
|
{
|
||||||
(void)component;
|
(void)component;
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
const gc_component fixed_to_cam = {
|
const struct fixed_to_cam fixed_to_cam = {
|
||||||
name: "fixed_to_cam",
|
base: {
|
||||||
size: sizeof(struct gc_component),
|
name: "fixed_to_cam",
|
||||||
dependencies: (char *[]){
|
size: sizeof(struct fixed_to_cam),
|
||||||
"transform_component",
|
dependencies: (char *[]){
|
||||||
NULL
|
"transform_component",
|
||||||
|
NULL
|
||||||
|
},
|
||||||
|
ctr: &ctr,
|
||||||
|
fdctr: &fdctr,
|
||||||
|
dtr: NULL,
|
||||||
|
serialize: &serialize,
|
||||||
|
destroy: &component_destroy
|
||||||
},
|
},
|
||||||
ctr: NULL,
|
offset: (gc_vector2){0, 0}
|
||||||
fdctr: NULL,
|
|
||||||
dtr: NULL,
|
|
||||||
serialize: &serialize,
|
|
||||||
destroy: &component_destroy
|
|
||||||
};
|
};
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "xml.h"
|
#include "xml.h"
|
||||||
#include "utility.h"
|
#include "utility.h"
|
||||||
#include "sprite.h"
|
#include "sprite.h"
|
||||||
|
#include "text.h"
|
||||||
#include "components/transform_component.h"
|
#include "components/transform_component.h"
|
||||||
#include "components/renderer.h"
|
#include "components/renderer.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -31,7 +32,7 @@ GC_TEXTURETYPE renderer_get_type(node *n)
|
|||||||
{
|
{
|
||||||
if (xml_getnode(n, "animation"))
|
if (xml_getnode(n, "animation"))
|
||||||
return (GC_ANIMREND);
|
return (GC_ANIMREND);
|
||||||
if (xml_getproperty(n, "text"))
|
if (xml_hasproperty(n, "text"))
|
||||||
return (GC_TXTREND);
|
return (GC_TXTREND);
|
||||||
return (GC_TEXTUREREND);
|
return (GC_TEXTUREREND);
|
||||||
}
|
}
|
||||||
@@ -54,13 +55,22 @@ static void dtr(void *component)
|
|||||||
{
|
{
|
||||||
struct renderer *cmp = (struct renderer *)component;
|
struct renderer *cmp = (struct renderer *)component;
|
||||||
|
|
||||||
if (cmp->type == GC_TEXTUREREND)
|
switch (cmp->type) {
|
||||||
free(cmp->data);
|
case GC_ANIMREND:
|
||||||
if (cmp->type == GC_ANIMREND) {
|
for (int i = 0; i < ((gc_animholder *)cmp->data)->animcount; i++) {
|
||||||
|
if (my_strcmp(((gc_animholder *)cmp->data)->anims[i].name, "none"))
|
||||||
|
free(((gc_animholder *)cmp->data)->anims[i].name);
|
||||||
|
}
|
||||||
free(((gc_animholder *)cmp->data)->sprite);
|
free(((gc_animholder *)cmp->data)->sprite);
|
||||||
free(((gc_animholder *)cmp->data)->anims);
|
free(((gc_animholder *)cmp->data)->anims);
|
||||||
free(cmp->data);
|
break;
|
||||||
|
case GC_TXTREND:
|
||||||
|
free(((gc_text *)cmp->data)->text);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
free(cmp->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *serialize(void *component)
|
static char *serialize(void *component)
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ void sprite_fdctr(gc_scene *scene, struct renderer *cmp, node *n)
|
|||||||
cmp->data = sprite;
|
cmp->data = sprite;
|
||||||
if (!cmp->data)
|
if (!cmp->data)
|
||||||
return;
|
return;
|
||||||
sprite->texture = get_texture(scene, xml_getproperty(n, "src"));
|
sprite->texture = get_texture(scene, xml_gettempprop(n, "src"));
|
||||||
sprite->rect.height = xml_getfloatprop(rect, "height");
|
sprite->rect.height = xml_getfloatprop(rect, "height");
|
||||||
sprite->rect.width = xml_getfloatprop(rect, "width");
|
sprite->rect.width = xml_getfloatprop(rect, "width");
|
||||||
sprite->rect.top = xml_getfloatprop(rect, "top");
|
sprite->rect.top = xml_getfloatprop(rect, "top");
|
||||||
|
|||||||
@@ -5,7 +5,14 @@
|
|||||||
** discard_player
|
** discard_player
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "engine.h"
|
||||||
|
|
||||||
void engine_play_music(void *music)
|
void engine_play_music(void *music)
|
||||||
{
|
{
|
||||||
(void)music;
|
(void)music;
|
||||||
|
}
|
||||||
|
|
||||||
|
void engine_stop_music(gc_engine *engine)
|
||||||
|
{
|
||||||
|
(void)engine;
|
||||||
}
|
}
|
||||||
@@ -46,6 +46,11 @@ void engine_destroy(gc_engine *engine)
|
|||||||
|
|
||||||
if (engine->scene)
|
if (engine->scene)
|
||||||
engine->scene->destroy(engine->scene);
|
engine->scene->destroy(engine->scene);
|
||||||
|
for (gc_list *dl = engine->dataloaders; dl; dl = next) {
|
||||||
|
next = dl->next;
|
||||||
|
free(dl->data);
|
||||||
|
free(dl);
|
||||||
|
}
|
||||||
for (gc_list *system = engine->systems; system; system = next) {
|
for (gc_list *system = engine->systems; system; system = next) {
|
||||||
next = system->next;
|
next = system->next;
|
||||||
((gc_system *)system->data)->destroy(system->data);
|
((gc_system *)system->data)->destroy(system->data);
|
||||||
@@ -65,6 +70,7 @@ gc_engine *engine_create(void)
|
|||||||
if (!engine)
|
if (!engine)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
engine->scene = NULL;
|
engine->scene = NULL;
|
||||||
|
engine->should_close = false;
|
||||||
engine->is_open = &engine_is_open;
|
engine->is_open = &engine_is_open;
|
||||||
engine->has_focus = &engine_has_focus;
|
engine->has_focus = &engine_has_focus;
|
||||||
engine->is_keypressed = &engine_is_keypressed;
|
engine->is_keypressed = &engine_is_keypressed;
|
||||||
@@ -73,6 +79,7 @@ gc_engine *engine_create(void)
|
|||||||
engine->draw = &engine_draw;
|
engine->draw = &engine_draw;
|
||||||
engine->change_scene = &change_scene;
|
engine->change_scene = &change_scene;
|
||||||
engine->play_music = &engine_play_music;
|
engine->play_music = &engine_play_music;
|
||||||
|
engine->stop_music = &engine_stop_music;
|
||||||
engine->destroy = &engine_destroy;
|
engine->destroy = &engine_destroy;
|
||||||
engine_add_buildin_systems(engine);
|
engine_add_buildin_systems(engine);
|
||||||
engine_add_buildin_components(engine);
|
engine_add_buildin_components(engine);
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ int change_scene(gc_engine *engine, gc_scene *scene)
|
|||||||
{
|
{
|
||||||
void *music = scene->get_data(scene, "music", NULL);
|
void *music = scene->get_data(scene, "music", NULL);
|
||||||
|
|
||||||
|
engine->stop_music(engine);
|
||||||
if (engine->scene)
|
if (engine->scene)
|
||||||
engine->scene->destroy(engine->scene);
|
engine->scene->destroy(engine->scene);
|
||||||
engine->scene = scene;
|
engine->scene = scene;
|
||||||
@@ -84,6 +85,8 @@ void scene_destroy(gc_scene *scene)
|
|||||||
next = data->next;
|
next = data->next;
|
||||||
if (((gc_data *)data->data)->destroy)
|
if (((gc_data *)data->data)->destroy)
|
||||||
((gc_data *)data->data)->destroy(data->data);
|
((gc_data *)data->data)->destroy(data->data);
|
||||||
|
free(((gc_data *)data->data)->type);
|
||||||
|
free(data->data);
|
||||||
free(data);
|
free(data);
|
||||||
}
|
}
|
||||||
for (gc_tupple *tupple = tup; tupple; tupple = tup) {
|
for (gc_tupple *tupple = tup; tupple; tupple = tup) {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ int sfml_sprite_loader(gc_data *data, node *n)
|
|||||||
|
|
||||||
if (!path)
|
if (!path)
|
||||||
return (-1);
|
return (-1);
|
||||||
data->name = my_strdup(path);
|
data->name = path;
|
||||||
data->custom = sfTexture_createFromFile(path, NULL);
|
data->custom = sfTexture_createFromFile(path, NULL);
|
||||||
if (!data->custom || !data->name)
|
if (!data->custom || !data->name)
|
||||||
return (-1);
|
return (-1);
|
||||||
@@ -48,7 +48,7 @@ int sfml_font_loader(gc_data *data, node *n)
|
|||||||
|
|
||||||
if (!path)
|
if (!path)
|
||||||
return (-1);
|
return (-1);
|
||||||
data->name = my_strdup(path);
|
data->name = path;
|
||||||
data->custom = sfFont_createFromFile(path);
|
data->custom = sfFont_createFromFile(path);
|
||||||
if (!data->custom || !data->name)
|
if (!data->custom || !data->name)
|
||||||
return (-1);
|
return (-1);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "engine.h"
|
#include "engine.h"
|
||||||
#include <SFML/Graphics.h>
|
#include <SFML/Graphics.h>
|
||||||
|
#include "sfml_renderer.h"
|
||||||
#include "systems/sfml_renderer_system.h"
|
#include "systems/sfml_renderer_system.h"
|
||||||
#include "systems/camerafollow_system.h"
|
#include "systems/camerafollow_system.h"
|
||||||
#include "components/transform_component.h"
|
#include "components/transform_component.h"
|
||||||
@@ -15,6 +16,8 @@ bool sfml_is_open(gc_engine *engine)
|
|||||||
{
|
{
|
||||||
struct sfml_renderer_system *renderer = GETSYS(sfml_renderer_system);
|
struct sfml_renderer_system *renderer = GETSYS(sfml_renderer_system);
|
||||||
|
|
||||||
|
if (engine->should_close)
|
||||||
|
return (false);
|
||||||
return (sfRenderWindow_isOpen(renderer->window));
|
return (sfRenderWindow_isOpen(renderer->window));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,10 +46,10 @@ void sfml_handle_events(gc_engine *engine)
|
|||||||
event.size.width,
|
event.size.width,
|
||||||
event.size.height
|
event.size.height
|
||||||
});
|
});
|
||||||
entities_update_to_cam_size(engine->scene, (gc_vector2) {
|
// entities_update_to_cam_size(engine->scene, (gc_vector2) {
|
||||||
event.size.width,
|
// event.size.width,
|
||||||
event.size.height
|
// event.size.height
|
||||||
});
|
// });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -12,4 +12,14 @@ void sfml_play_music(void *music)
|
|||||||
{
|
{
|
||||||
sfMusic_setLoop(music, true);
|
sfMusic_setLoop(music, true);
|
||||||
sfMusic_play(music);
|
sfMusic_play(music);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sfml_stop_music(gc_engine *engine)
|
||||||
|
{
|
||||||
|
void *music;
|
||||||
|
|
||||||
|
if (!engine->scene)
|
||||||
|
return;
|
||||||
|
music = engine->scene->get_data(engine->scene, "music", NULL);
|
||||||
|
sfMusic_stop(music);
|
||||||
}
|
}
|
||||||
@@ -35,11 +35,6 @@ static void ctr(void *system, va_list args)
|
|||||||
(void)args;
|
(void)args;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void destroy(void *system)
|
|
||||||
{
|
|
||||||
(void)system;
|
|
||||||
}
|
|
||||||
|
|
||||||
const struct camerafollow_system camerafollow_system = {
|
const struct camerafollow_system camerafollow_system = {
|
||||||
base: {
|
base: {
|
||||||
name: "camerafollow_system",
|
name: "camerafollow_system",
|
||||||
@@ -49,7 +44,7 @@ const struct camerafollow_system camerafollow_system = {
|
|||||||
dtr: NULL,
|
dtr: NULL,
|
||||||
check_dependencies: &system_check_dependencies,
|
check_dependencies: &system_check_dependencies,
|
||||||
update_entity: &update_entity,
|
update_entity: &update_entity,
|
||||||
destroy: &destroy
|
destroy: &system_destroy
|
||||||
},
|
},
|
||||||
cam_pos: (gc_vector2){0, 0}
|
cam_pos: (gc_vector2){0, 0}
|
||||||
};
|
};
|
||||||
@@ -8,8 +8,11 @@
|
|||||||
#include "entity.h"
|
#include "entity.h"
|
||||||
#include "scene.h"
|
#include "scene.h"
|
||||||
#include "systems/camerafollow_system.h"
|
#include "systems/camerafollow_system.h"
|
||||||
|
#include "component.h"
|
||||||
#include "components/transform_component.h"
|
#include "components/transform_component.h"
|
||||||
|
#include "components/fixed_to_cam_component.h"
|
||||||
#include "systems/sfml_renderer_system.h"
|
#include "systems/sfml_renderer_system.h"
|
||||||
|
#include "my.h"
|
||||||
#include <SFML/Graphics.h>
|
#include <SFML/Graphics.h>
|
||||||
|
|
||||||
void entities_update_to_cam(gc_scene *scene, \
|
void entities_update_to_cam(gc_scene *scene, \
|
||||||
@@ -18,14 +21,20 @@ struct sfml_renderer_system *renderer, struct camerafollow_system *cam)
|
|||||||
gc_list *list;
|
gc_list *list;
|
||||||
gc_entity *entity;
|
gc_entity *entity;
|
||||||
sfVector2f size;
|
sfVector2f size;
|
||||||
|
gc_vector2 offset;
|
||||||
|
struct transform_component *tra;
|
||||||
|
|
||||||
list = scene->get_entity_by_cmp(scene, "fixed_to_cam");
|
list = scene->get_entity_by_cmp(scene, "fixed_to_cam");
|
||||||
for (gc_list *li = list; li; li = li->next) {
|
for (gc_list *li = list; li; li = li->next) {
|
||||||
entity = (gc_entity *)li->data;
|
entity = (gc_entity *)li->data;
|
||||||
|
tra = GETCMP(transform_component);
|
||||||
|
if (!tra)
|
||||||
|
continue;
|
||||||
size = sfView_getSize(renderer->view);
|
size = sfView_getSize(renderer->view);
|
||||||
GETCMP(transform_component)->position = (gc_vector2) {
|
offset = GETCMP(fixed_to_cam)->offset;
|
||||||
cam->cam_pos.x - size.x / 2,
|
tra->position = (gc_vector2) {
|
||||||
cam->cam_pos.y + size.y / 2,
|
cam->cam_pos.x - size.x / 2 + offset.x,
|
||||||
|
cam->cam_pos.y + size.y / 2 - offset.y,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -34,11 +43,15 @@ void entities_update_to_cam_size(gc_scene *scene, gc_vector2 size)
|
|||||||
{
|
{
|
||||||
gc_list *list;
|
gc_list *list;
|
||||||
gc_entity *entity;
|
gc_entity *entity;
|
||||||
|
struct transform_component *tra;
|
||||||
|
|
||||||
list = scene->get_entity_by_cmp(scene, "fixed_to_cam");
|
list = scene->get_entity_by_cmp(scene, "fixed_to_cam");
|
||||||
for (gc_list *li = list; li; li = li->next) {
|
for (gc_list *li = list; li; li = li->next) {
|
||||||
entity = (gc_entity *)li->data;
|
entity = (gc_entity *)li->data;
|
||||||
GETCMP(transform_component)->size = (gc_vector2) {
|
tra = GETCMP(transform_component);
|
||||||
|
if (!tra)
|
||||||
|
continue;
|
||||||
|
tra->size = (gc_vector2) {
|
||||||
size.x,
|
size.x,
|
||||||
size.y
|
size.y
|
||||||
};
|
};
|
||||||
@@ -52,6 +52,7 @@ void sfml_setup_options(gc_engine *engine)
|
|||||||
engine->handle_events = &sfml_handle_events;
|
engine->handle_events = &sfml_handle_events;
|
||||||
engine->draw = &sfml_draw;
|
engine->draw = &sfml_draw;
|
||||||
engine->play_music = &sfml_play_music;
|
engine->play_music = &sfml_play_music;
|
||||||
|
engine->stop_music = &sfml_stop_music;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sfmlrend_ctr(void *rend, va_list list)
|
void sfmlrend_ctr(void *rend, va_list list)
|
||||||
@@ -83,6 +84,7 @@ system;
|
|||||||
|
|
||||||
sfRenderWindow_destroy(renderer->window);
|
sfRenderWindow_destroy(renderer->window);
|
||||||
sfSprite_destroy(renderer->sprite);
|
sfSprite_destroy(renderer->sprite);
|
||||||
|
sfText_destroy(renderer->text);
|
||||||
sfView_destroy(renderer->view);
|
sfView_destroy(renderer->view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,5 +17,7 @@ void *my_realloc(void *oldptr, size_t oldsize, size_t newsize)
|
|||||||
((char *)new)[i] = ((char *)oldptr)[i];
|
((char *)new)[i] = ((char *)oldptr)[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (oldptr)
|
||||||
|
free(oldptr);
|
||||||
return (new);
|
return (new);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user