refactor: optimize snake sprite rendering using preloaded directional assets and implement HUD caching
This commit is contained in:
1 parent
db9013c9c5
commit
60740a53c2
5 files changed
+268
-152
No files matched your search
+20
-8
@@ -47,7 +47,7 @@ AudioContext audioContext;
|
||||
|
||||
RenderAssets renderAssets;
|
||||
|
||||
const void * get_sprite_pointer(uint16 spriteIndex) {
|
||||
const void * get_sprite_pointer(uint16_t spriteIndex) {
|
||||
return &tilemapTiles[spriteIndex*16];
|
||||
}
|
||||
|
||||
@@ -69,16 +69,27 @@ void setup() {
|
||||
|
||||
renderAssets.gfx_segment = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
renderAssets.gfx_segment_small = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
renderAssets.gfx_head = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
renderAssets.gfx_head_h = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
renderAssets.gfx_head_v = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
renderAssets.gfx_apple = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
renderAssets.gfx_apple_blink = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
renderAssets.gfx_tail_h[0] = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
renderAssets.gfx_tail_h[1] = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
renderAssets.gfx_tail_v[0] = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
renderAssets.gfx_tail_v[1] = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
renderAssets.gfx_apple_rotten = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
renderAssets.gfx_apple_cursed = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
renderAssets.gfx_tail = oamAllocateGfx(&oamSub, SpriteSize_8x8, SpriteColorFormat_256Color);
|
||||
|
||||
dmaCopy(get_sprite_pointer(1), renderAssets.gfx_segment, 64);
|
||||
dmaCopy(get_sprite_pointer(2), renderAssets.gfx_segment_small, 64);
|
||||
dmaCopy(get_sprite_pointer(3), renderAssets.gfx_head, 64);
|
||||
dmaCopy(get_sprite_pointer(3), renderAssets.gfx_head_h, 64);
|
||||
dmaCopy(get_sprite_pointer(4), renderAssets.gfx_head_v, 64);
|
||||
dmaCopy(get_sprite_pointer(5), renderAssets.gfx_apple, 64);
|
||||
dmaCopy(get_sprite_pointer(6), renderAssets.gfx_apple_blink, 64);
|
||||
dmaCopy(get_sprite_pointer(7), renderAssets.gfx_tail_h[0], 64);
|
||||
dmaCopy(get_sprite_pointer(8), renderAssets.gfx_tail_h[1], 64);
|
||||
dmaCopy(get_sprite_pointer(9), renderAssets.gfx_tail_v[0], 64);
|
||||
dmaCopy(get_sprite_pointer(10), renderAssets.gfx_tail_v[1], 64);
|
||||
dmaCopy(get_sprite_pointer(11), renderAssets.gfx_apple_rotten, 64);
|
||||
|
||||
consoleSelect(&topScreen);
|
||||
@@ -118,7 +129,7 @@ void handle_vblank() {
|
||||
frame++;
|
||||
if (gameState.scene == Scene::Playing) {
|
||||
consoleSelect(&topScreen);
|
||||
draw_stats(gameState, internals, audio_is_music_enabled(audioContext), frame);
|
||||
draw_stats(gameState, renderAssets, internals, audio_is_music_enabled(audioContext), frame);
|
||||
}
|
||||
oamUpdate(&oamSub);
|
||||
//flashy_colors();
|
||||
@@ -155,7 +166,6 @@ void do_tick() {
|
||||
audio_stop_music();
|
||||
audio_play_fail(audioContext);
|
||||
}
|
||||
blink_apples(gameState, renderAssets.gfx_apple);
|
||||
//consoleSelect(&bottomScreen);
|
||||
draw_game(gameState, renderAssets);
|
||||
}
|
||||
@@ -179,9 +189,10 @@ void init_game() {
|
||||
gameState.cursed_apples.clear();
|
||||
consoleSelect(&topScreen);
|
||||
consoleClear();
|
||||
invalidate_hud(renderAssets);
|
||||
consoleSelect(&bottomScreen);
|
||||
consoleClear();
|
||||
oamClear(&oamSub,0,0);
|
||||
oamClear(&oamSub,0,128);
|
||||
audio_start_music(audioContext);
|
||||
}
|
||||
else
|
||||
@@ -198,9 +209,10 @@ void init_game() {
|
||||
gameState.cursed_apples.clear();
|
||||
consoleSelect(&topScreen);
|
||||
consoleClear();
|
||||
invalidate_hud(renderAssets);
|
||||
consoleSelect(&bottomScreen);
|
||||
consoleClear();
|
||||
oamClear(&oamSub,0,0);
|
||||
oamClear(&oamSub,0,128);
|
||||
audio_start_music(audioContext);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user