test-3ds/source/main.c
2021-03-18 23:51:00 +01:00

101 lines
3.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file main.c
* @author rick <rick@gnous.eu>
* date 2021
* @licence GPL3
*/
#include <citro2d.h>
#include <stdlib.h>
#include <stdio.h>
#define SCREEN_HEIGH 240
#define SCREEN_WIDTH 400
typedef struct
{
C2D_Sprite spr;
float x, y;
} sprite ;
int main(int argc, char *argv[])
{
/* initialisation du driver RomFS */
romfsInit();
/* init le framebuffer de lécran avec des paramètres par défaut */
gfxInitDefault();
/* init la lib C3D avec la taille du buffer par défaut */
if (!C3D_Init(C3D_DEFAULT_CMDBUF_SIZE))
printf("Erreur lors de linitialisation de C3D.\n");
/* init la lib C2D avec le max de sprites possible / frame */
if(!C2D_Init(C2D_DEFAULT_MAX_OBJECTS))
printf("Erreur lors de linitialisation de C2D.\n");
/* prépare le GPU pour du rendu 2D */
C2D_Prepare();
/* init la console sur lécran du bas avec la console actuelle */
consoleInit(GFX_BOTTOM, NULL);
/* on créé une cible de rendu pour lécran du haut (on le "créé")
* On utilise le coté gauche car le droit nest utilisé quen 3D */
C3D_RenderTarget *top = C2D_CreateScreenTarget(GFX_TOP, GFX_LEFT);
/* on récupère la feuille des sprites générée par le Makefile */
C2D_SpriteSheet sprite_sheet = C2D_SpriteSheetLoad("romfs:/gfx/sprites.t3x");
if (!sprite_sheet)
svcBreak(USERBREAK_PANIC);
sprite m_blue;
m_blue.x = 0;
m_blue.y = 0;
C2D_SpriteFromSheet(&m_blue.spr, sprite_sheet, 0);
//C2D_SpriteSetCenter(&m_blue.spr, 0.5f, 0.5f);
C2D_SpriteSetPos(&m_blue.spr, m_blue.x, m_blue.y);
//C2D_SpriteSetRotation(&m_blue.spr, C3D_Angle(0.0f));
while (aptMainLoop())
{
/* on capte le boutons pressé */
hidScanInput();
/* on récupère le bouton qui est maintenu
* pour déplacer le sprite */
u32 bouton_presse = hidKeysHeld();
/* hidKeysHeld retourne lensemble des touches pressées.
* ces opérations bit à bit sont nécessaires pour extraire la touche voulue.*/
if (bouton_presse & KEY_DOWN)
/* on récupère la position du sprite (lire la doc pour + dinfos) */
if (m_blue.spr.params.pos.y != SCREEN_HEIGH)
/* permet de déplacer le sprite en mettant à jour son x et son y
* on indique la vitesse de x et y après en pixel/frame (je suppose) */
C2D_SpriteMove(&m_blue.spr, 0, 5);
if (bouton_presse & KEY_UP)
if (m_blue.spr.params.pos.y != 0)
C2D_SpriteMove(&m_blue.spr, 0, -1);
if (bouton_presse & KEY_LEFT)
if (m_blue.spr.params.pos.x != 0)
C2D_SpriteMove(&m_blue.spr, -1, 0);
if (bouton_presse & KEY_RIGHT)
if (m_blue.spr.params.pos.x != SCREEN_WIDTH)
C2D_SpriteMove(&m_blue.spr, 1, 0);
/* attend que la frame précédente soit afficher avant de rendre la suivante */
C3D_FrameBegin(C3D_FRAME_SYNCDRAW);
/* nettoye lécran avec la couleur passée en paramètre */
C2D_TargetClear(top, C2D_Color32f(0.0f, 0.0f, 0.0f, 1.0f));
/* prépare à écrire sur lécran top, définit le buffer où écrire */
C2D_SceneBegin(top);
/* dessine le sprite */
C2D_DrawSprite(&m_blue.spr);
/* on indique la fin de la frame */
C3D_FrameEnd(0);
}
/* nécessaire pour nettoyer la mémoire et les buffers */
C2D_SpriteSheetFree(sprite_sheet);
C2D_Fini();
C3D_Fini();
gfxExit();
romfsExit();
return 0;
}