Collab_RPG/src/main.c

144 lines
2.7 KiB
C
Raw Normal View History

#include <gint/display.h>
#include <gint/keyboard.h>
#include <gint/timer.h>
#include <gint/cpu.h>
#include "config.h"
#if USB_FEATURE
#include <gint/usb-ff-bulk.h>
#include <gint/usb.h>
#endif //USB_FEATURE
#if !defined(FXCG50) && defined(COLOR2BIT)
#define GRAYMODEOK
#endif
#ifdef GRAYMODEOK
#include <gint/gray.h>
#endif //GRAYMODEOK
#include <stdint.h>
#include <stdbool.h>
#include "game.h"
#include "mapdata.h"
/* Game data (defined in "game.h")*/
Game game = {
&map_level0,
{10, 5, 0, 0, 100},
false, false, false, 0
};
/* screen capture management code */
#if USB_FEATURE==1
void USB_feature( void )
{
if (game.screenshot && usb_is_open()) {
#ifdef GRAYMODEOK // This is a trick, if GRAYMODEOK is defined then we make the code accessible
if (dgray_enabled())
usb_fxlink_screenshot_gray(false);
else
#endif
usb_fxlink_screenshot(false); // else we just let the usual screeshot function
game.screenshot = false;
}
if (game.record && usb_is_open()) {
#ifdef GRAYMODEOK
if (dgray_enabled())
usb_fxlink_videocapture_gray(false);
else
#endif
usb_fxlink_videocapture(false);
}
}
#endif
/* Timer callback */
int update_time(void) {
game.frame_duration++;
return TIMER_CONTINUE;
}
2023-07-07 14:50:30 +02:00
int main(void) {
int timer;
timer = timer_configure(TIMER_TMU, 1000, GINT_CALL(update_time));
if(timer < 0){
return -1;
}
timer_start(timer);
#if USB_FEATURE==1
usb_interface_t const *interfaces[] = {&usb_ff_bulk, NULL};
usb_open(interfaces, GINT_CALL_NULL);
#endif
/* start grayscale engine */
#ifdef GRAYMODEOK
dgray(DGRAY_ON);
#endif
do{
/* clear screen */
dclear(C_WHITE);
/* render the map */
draw(&game);
/* start the logic of the game */
game_logic(&game);
/* Screen blit */
dupdate();
/* Screen capture feature if enabled */
#if USB_FEATURE==1
USB_feature();
#endif
/* Management of the inputs */
get_inputs(&game);
/* Run the game at max. 50fps */
while(game.frame_duration < 20) sleep();
/* Reset frame_duration for the next frame */
game.frame_duration = 0;
}while(!game.exittoOS); // want to exit ?
2023-07-06 21:16:07 +02:00
/* shutdown grayengine*/
#ifdef GRAYMODEOK
dgray(DGRAY_OFF);
#endif
2023-07-06 21:16:07 +02:00
/* close USB */
#if USB_FEATURE==1
usb_close();
#endif
timer_stop(timer);
return 1;
}
2023-07-08 16:57:04 +02:00