mirror of
https://github.com/zoriya/My3D.git
synced 2025-12-06 06:26:14 +00:00
Adding an option for framerate
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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 _);
|
||||
|
||||
Submodule lib/gamacon updated: e23cf1c4fc...9becdaece5
@@ -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
67
src/framerate.c
Normal 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);
|
||||
}
|
||||
@@ -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},
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user