Adding an option for framerate

This commit is contained in:
AnonymusRaccoon
2020-03-11 17:30:03 +01:00
parent 76435739ce
commit 4f8a1474e9
7 changed files with 80 additions and 2 deletions

View File

@@ -252,7 +252,7 @@ add_executable(My3D
src/components/isometry/map_manager_component.c
include/components/isometry/map_manager_component.h
lib/gamacon/src/components/isometry/vertex_data_loader.c
lib/gamacon/include/vertex_data_loader.h src/toolbar.c lib/gamacon/include/callbacks.h src/selectors.c)
lib/gamacon/include/vertex_data_loader.h src/toolbar.c lib/gamacon/include/callbacks.h src/selectors.c src/framerate.c)
add_compile_options(-W -Wall -Wextra -Wshadow)

View File

@@ -21,10 +21,13 @@ bool toggle_pause(gc_engine *engine, gc_entity *entity, gc_vector2 _);
int checkbox_update(gc_scene *s, gc_entity *entity, bool checked);
void resolution_set_text(gc_entity *entity, gc_engine *engine);
void framerate_set_text(gc_entity *entity, gc_engine *engine);
bool fullscreen(gc_engine *engine, gc_entity *entity, gc_vector2 _);
bool resolution_down(gc_engine *engine, gc_entity *entity, gc_vector2 _);
bool resolution_up(gc_engine *engine, gc_entity *entity, gc_vector2 _);
bool framerate_up(gc_engine *engine, gc_entity *entity, gc_vector2 _);
bool framerate_down(gc_engine *engine, gc_entity *entity, gc_vector2 _);
bool tile_select(gc_engine *engine, gc_entity *entity, gc_vector2 _);
bool vertex_select(gc_engine *engine, gc_entity *entity, gc_vector2 _);

View File

@@ -11,6 +11,10 @@
<gc_entities>
<panel src="panel" x="50%" y="45%" width="40%" height="65%" />
<text text="Options" x="50%" y="25%" />
<text text="Framerate" x="41%" y="40%"/>
<button x="53%" y="40%" click="framerate_down" sprite="left" width="2%" height="4%" />
<text x="59%" y="40%" size="18" text_id="52" />
<button x="65%" y="40%" click="framerate_up" sprite="right" width="2%" height="4%" />
<text text="Fullscreen" x="45%" y="50%" />
<button x="60%" y="50%" click="fullscreen" sprite="cross" width="5%" height="%" background_id="50" />
<text text="Resolution" x="41%" y="60%"/>

67
src/framerate.c Normal file
View File

@@ -0,0 +1,67 @@
//
// Created by anonymus-raccoon on 3/11/20.
//
#include "entity.h"
#include "engine.h"
#include <malloc.h>
#include "utility.h"
#include "renderer.h"
#include "systems/sfml_renderer_system.h"
#include "limits.h"
static const int framerates[] = {
30,
60,
120,
INT_MAX
};
void framerate_set_text(gc_entity *entity, gc_engine *engine)
{
struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system);
struct renderer *renderer;
char *framerate;
if (!entity)
return;
renderer = GETCMP(entity, renderer);
if (!rend || !renderer || renderer->type != GC_TXTREND)
return;
framerate = tostr(rend->framerate);
free(((gc_text *)renderer->data)->text);
((gc_text *)renderer->data)->text = framerate;
}
bool framerate_down(gc_engine *engine, gc_entity *entity, gc_vector2 _)
{
struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system);
int i = 2;
if (!rend || rend->is_fullscreen)
return (false);
while (i > 0 && framerates[i] >= rend->framerate)
i--;
sfRenderWindow_setFramerateLimit(rend->window, framerates[i]);
rend->framerate = framerates[i];
framerate_set_text(engine->scene->get_entity(engine->scene, 52), engine);
return (true);
}
bool framerate_up(gc_engine *engine, gc_entity *entity, gc_vector2 _)
{
struct sfml_renderer_system *rend = GETSYS(engine, sfml_renderer_system);
int i = 0;
if (!rend || rend->is_fullscreen)
return (false);
while (framerates[i] <= rend->framerate)
i++;
if (framerates[i] == INT_MAX)
return (true);
sfRenderWindow_setFramerateLimit(rend->window, framerates[i]);
rend->framerate = framerates[i];
framerate_set_text(engine->scene->get_entity(engine->scene, 52), engine);
return (true);
}

View File

@@ -27,6 +27,8 @@ const struct callback callbacks[] = {
{"map_manage_click", &tile_interact},
{"resolution_down", &resolution_down},
{"resolution_up", &resolution_up},
{"framerate_up", &framerate_up},
{"framerate_down", &framerate_down},
{"absent_check", &absent_check},
{"absent_cross", &absent_cross},
{"forgot_lmfao", &forgot_lmfao},

View File

@@ -36,6 +36,8 @@ bool options(gc_engine *engine, gc_entity *entity, gc_vector2 _)
checkbox_update(engine->scene, entity, rend->is_fullscreen);
entity = engine->scene->get_entity(engine->scene, 51);
resolution_set_text(entity, engine);
entity = engine->scene->get_entity(engine->scene, 52);
framerate_set_text(entity, engine);
return (true);
}