#include "i_input.h"
#include "t_camera.h"
#include "t_map.h"
+#include "t_update.h"
#include "u_time.h"
struct lrts_config lrts_global_cfg;
+struct lrts_state lrts_global_state;
struct lrts_config* lrts_cfg() {
return &lrts_global_cfg;
}
+struct lrts_state* lrts_state() {
+ return &lrts_global_state;
+}
+
void lrts_help(int argc, char **argv) {
LRTS_UNUSED(argc);
}
void lrts_init(void) {
- struct lrts_config* cfg = lrts_cfg();
+ struct lrts_config *cfg = lrts_cfg();
+ struct lrts_state *state = lrts_state();
struct u_vec2 res = lrts_get_render_res();
i_input_init();
u_fps_timer = u_timer_init();
-
+ t_sim_init();
t_main_camera = t_camera_init(res.x, res.y);
t_map = t_map_init();
+
+ state->frame_count = 0;
+ state->tick_count = 0;
}
int lrts_main(int argc, char **argv) {
while (!lrts_cfg()->exit) {
p_poll_events();
+ t_sim_update();
r_render_frame();
}
#include "r_assets.c"
#include "i_input.c"
#include "u_time.c"
+#include "t_update.c"
#endif
}
void r_render_frame() {
+ struct lrts_state *state = lrts_state();
+
u_timer_start(&u_fps_timer);
p_draw_begin();
- t_map_draw(&t_map);
+ /* t_map_draw(&t_map); */
p_draw_end();
p_draw_present();
u_timer_end(&u_fps_timer);
+ state->frame_count++;
u_cap_fps();
}
--- /dev/null
+#include "t_update.h"
+
+struct u_timer t_sim_timer;
+u32 t_updates_this_interval;
+
+void t_sim_init(void) {
+ t_sim_timer = u_timer_init();
+ t_updates_this_interval = 0;
+ u_timer_start(&t_sim_timer);
+}
+
+/* returns how much time should pass between each tick
+ * based on the platform time information provided */
+u32 t_sim_tick_interval(void) {
+ return (u32)p_ticks_per_second() / LRTS_TPS;
+}
+
+
+void t_sim_update(void) {
+ struct lrts_state *state = lrts_state();
+
+ /* if timer has been running for more than a second
+ * reset tick this sec and timer */
+ if (u_timer_end(&t_sim_timer) >= (u32)t_sim_tick_interval()) {
+ t_updates_this_interval = 0;
+ u_timer_start(&t_sim_timer);
+ }
+
+ /* bail if timer is not ready yet */
+ if (t_updates_this_interval) {
+ return;
+ }
+
+ t_updates_this_interval++;
+ state->tick_count++;
+
+ /* update game simulation */
+}
--- /dev/null
+#ifndef T_UPDATE_H__
+#define T_UPDATE_H__
+
+#include "u_time.h"
+
+extern struct u_timer t_sim_timer;
+
+void t_sim_init(void);
+
+/**
+ * Advances the simulation by a tick
+ * Simulation updates are capped at the
+ * max tick rate per second.
+ */
+void t_sim_update(void);
+
+#endif
int argc;
};
+struct lrts_state {
+ u32 frame_count;
+ u32 tick_count;
+};
+
struct lrts_config* lrts_cfg();
+struct lrts_state* lrts_state();
void lrts_help(int argc, char **argv);
void lrts_version(void);
void lrts_getopt(int argc, char **argv, struct lrts_config *cfg);