This commit is contained in:
Clément Le Bihan
2020-03-12 16:53:21 +01:00
8 changed files with 29 additions and 7 deletions
+2 -1
View File
@@ -18,6 +18,7 @@
gc_data *sfml_music_loader(gc_engine *engine, gc_scene *scene, node *n);
gc_data *sfml_sprite_loader(gc_engine *engine, gc_scene *scene, node *n);
gc_data *sfml_font_loader(gc_engine *engine, gc_scene *scene, node *n);
gc_data *sfml_camera(gc_engine *engine, gc_scene *scene, node *n);
sfTexture *get_texture(gc_scene *scene, char *name);
sfVertexArray *sfml_init_verticies(void);
@@ -49,5 +50,5 @@ gc_vector2 sfml_get_screen_size(gc_engine *engine);
gc_vector2 sfml_engine_get_cursor_pos(gc_engine *engine);
void entities_update_to_cam(gc_scene *scene, \
struct sfml_renderer_system *renderer, struct camerafollow_system *cam);
struct sfml_renderer_system *renderer);
void entities_update_to_cam_size(gc_scene *scene, gc_vector2 size);
+1
View File
@@ -13,6 +13,7 @@ struct camerafollow_system
{
gc_system base;
gc_vector2 cam_pos;
bool enabled;
};
extern const struct camerafollow_system camerafollow_system;
+1
View File
@@ -54,5 +54,6 @@ int engine_use_sfml(gc_engine *engine, const char *title, int framerate)
engine->add_dataloader(engine, "music", &sfml_music_loader);
engine->add_dataloader(engine, "sprite", &sfml_sprite_loader);
engine->add_dataloader(engine, "font", &sfml_font_loader);
engine->add_dataloader(engine, "camera", &sfml_camera);
return (0);
}
+2
View File
@@ -48,6 +48,8 @@ void scene_load_entity(gc_scene *this, gc_engine *engine, node *n, int prefab)
return;
}
data = loader->load(engine, this, n);
if (!data)
return;
for (gc_list *li = (gc_list *)data->custom; li; li = li->next) {
((gc_entity *)li->data)->prefab_id = prefab;
this->add_entity(this, li->data);
+14
View File
@@ -65,4 +65,18 @@ gc_data *sfml_font_loader(gc_engine *engine, gc_scene *scene, node *n)
return (NULL);
data->destroy = &sfml_font_destroy;
return (data);
}
gc_data *sfml_camera(gc_engine *engine, gc_scene *scene, node *n)
{
struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system);
if (!rend)
my_printf("The sfml is not found. Could not change the position\
of the camera.\n");
sfView_setCenter(rend->view, (sfVector2f){
xml_getfloatprop(n, "x"),
-xml_getfloatprop(n, "y")
});
return (NULL);
}
+3 -3
View File
@@ -39,14 +39,14 @@ void sfml_draw(gc_engine *engine)
struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system);
struct camerafollow_system *cam = GETSYS(engine, camerafollow_system);
if (cam) {
if (cam && cam->enabled) {
sfView_setCenter(rend->view, (sfVector2f){
cam->cam_pos.x,
-cam->cam_pos.y
});
sfRenderWindow_setView(rend->window, rend->view);
entities_update_to_cam(engine->scene, rend, cam);
}
entities_update_to_cam(engine->scene, rend);
sfRenderWindow_setView(rend->window, rend->view);
sfRenderWindow_display(rend->window);
sfRenderWindow_clear(rend->window, sfBlack);
}
+2
View File
@@ -23,6 +23,7 @@ gc_entity *entity, float dtime)
sys->cam_pos.x = (sys->cam_pos.x + tra->position.x) / 2;
sys->cam_pos.y = (sys->cam_pos.y + tra->position.y) / 2;
sys->enabled = true;
(void)engine;
(void)dtime;
}
@@ -32,6 +33,7 @@ static void ctr(void *system, va_list args)
struct camerafollow_system *sys = (struct camerafollow_system *)system;
sys->cam_pos = (gc_vector2){0, 0};
sys->enabled = false;
(void)args;
}
+4 -3
View File
@@ -16,7 +16,7 @@
#include <SFML/Graphics.h>
void entities_update_to_cam(gc_scene *scene, \
struct sfml_renderer_system *renderer, struct camerafollow_system *cam)
struct sfml_renderer_system *renderer)
{
gc_list *list = scene->get_entity_by_cmp(scene, "fixed_to_cam");
@@ -25,8 +25,9 @@ struct sfml_renderer_system *renderer, struct camerafollow_system *cam)
struct transform_component *tra = GETCMP(entity, transform_component);
struct fixed_to_cam *fc = GETCMP(entity, fixed_to_cam);
sfVector2f size = sfView_getSize(renderer->view);
float x = (cam->cam_pos.x - size.x / 2);
float y = (cam->cam_pos.y + size.y / 2);
sfVector2f pos = sfView_getCenter(renderer->view);
float x = pos.x - size.x / 2;
float y = -pos.y + size.y / 2;
if (!tra)
continue;