mirror of
https://github.com/nacabaro/nacapet.git
synced 2026-10-02 08:01:38 +00:00
Let's get this up to date, i'll update the readme later on
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
#include "animations/animations.h"
|
||||
|
||||
void menu_drawAngryScreen(
|
||||
TFT_eSprite &bg, TFT_eSprite &sprite,
|
||||
TFT_eSprite& bg, TFT_eSprite &sprite,
|
||||
struct SpriteData* spriteData, struct SpriteData* smallUiElements
|
||||
) {
|
||||
uint8_t frameCounter = 0;
|
||||
@@ -33,8 +33,8 @@ void menu_drawAngryScreen(
|
||||
tone(SPK_PIN, 1000, 200);
|
||||
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
draw_drawSprite(sprite, 18, 72, smallUiElements, FIREWORKS_ICON, 6);
|
||||
draw_drawSprite(sprite, 174, 72, smallUiElements, FIREWORKS_ICON, 6);
|
||||
draw_drawSprite(sprite, 18, 72, smallUiElements, FIREWORKS_ICON);
|
||||
draw_drawSprite(sprite, 174, 72, smallUiElements, FIREWORKS_ICON);
|
||||
}
|
||||
|
||||
frameCounter++;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
uint64_t lastBeepTime = esp_timer_get_time();
|
||||
uint8_t beepCounter = 0;
|
||||
|
||||
void menu_careMistakeScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct SpriteData* uiSpritesBig) {
|
||||
void menu_careMistakeScreen(TFT_eSprite& bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct SpriteData* uiSpritesBig) {
|
||||
uint64_t currentTime = esp_timer_get_time();
|
||||
uint8_t pressedButtons = buttons_getPressedButtons();
|
||||
|
||||
|
||||
@@ -8,18 +8,33 @@
|
||||
struct SpriteData* checkerboardPattern;
|
||||
|
||||
void menu_createCheckerboard() {
|
||||
// Build the pattern pre-scaled by SPRITE_SCALE (6) so that
|
||||
// draw_drawSprite can treat it identically to SPIFFS-loaded sprites.
|
||||
// Logical size: 34 wide × 1 tall → Scaled: 204 wide × 6 tall
|
||||
const uint8_t SCALE = 6;
|
||||
const uint8_t logicalW = 34;
|
||||
const uint8_t logicalH = 1;
|
||||
const uint16_t scaledW = logicalW * SCALE; // 204
|
||||
const uint16_t scaledH = logicalH * SCALE; // 6
|
||||
const uint32_t bufferSize = scaledW * scaledH;
|
||||
|
||||
checkerboardPattern = (SpriteData*) malloc(sizeof(SpriteData));
|
||||
checkerboardPattern->spriteHeight = 1;
|
||||
checkerboardPattern->spriteWidth = 34;
|
||||
checkerboardPattern->spriteWidth = scaledW;
|
||||
checkerboardPattern->spriteHeight = scaledH;
|
||||
checkerboardPattern->spriteNumber = 1;
|
||||
checkerboardPattern->spriteData = (uint16_t**) malloc(sizeof(uint16_t*) * checkerboardPattern->spriteNumber);
|
||||
checkerboardPattern->spriteData[0] = (uint16_t*) malloc(sizeof(uint16_t) * checkerboardPattern->spriteWidth);
|
||||
|
||||
for (int i = 0; i < checkerboardPattern->spriteWidth; i++) {
|
||||
if (i % 2 == 0) {
|
||||
checkerboardPattern->spriteData[0][i] = TFT_BLACK;
|
||||
} else {
|
||||
checkerboardPattern->spriteData[0][i] = TFT_TRANSPARENT;
|
||||
checkerboardPattern->spriteData = (uint16_t**) malloc(sizeof(uint16_t*));
|
||||
checkerboardPattern->spriteData[0] = (uint16_t*) malloc(sizeof(uint16_t) * bufferSize);
|
||||
|
||||
uint16_t* buf = checkerboardPattern->spriteData[0];
|
||||
|
||||
// Fill: repeat each logical pixel as a SCALE×SCALE block across all rows
|
||||
for (uint16_t row = 0; row < scaledH; row++) {
|
||||
for (uint8_t col = 0; col < logicalW; col++) {
|
||||
uint16_t color = (col % 2 == 0) ? TFT_BLACK : TFT_TRANSPARENT;
|
||||
uint16_t* dst = buf + row * scaledW + col * SCALE;
|
||||
for (uint8_t dx = 0; dx < SCALE; dx++) {
|
||||
dst[dx] = color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -32,7 +47,7 @@ void menu_freeCheckerboard() {
|
||||
}
|
||||
|
||||
// Don't worry, I hate this too
|
||||
void menu_evolutionScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* mainCharacterSprites) {
|
||||
void menu_evolutionScreen(TFT_eSprite& bg, TFT_eSprite &sprite, struct SpriteData* mainCharacterSprites) {
|
||||
menu_createCheckerboard();
|
||||
TFT_eSprite checkerboard = TFT_eSprite(&tft);
|
||||
|
||||
@@ -48,7 +63,7 @@ void menu_evolutionScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteDat
|
||||
tone(SPK_PIN, 3500, 50);
|
||||
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
draw_drawSprite(sprite, 72 + ((i % 2 == 0) * 6), 72, mainCharacterSprites, 6, 6);
|
||||
draw_drawSprite(sprite, 72 + ((i % 2 == 0) * 6), 72, mainCharacterSprites, 6);
|
||||
|
||||
tft_drawBuffer();
|
||||
|
||||
@@ -59,7 +74,7 @@ void menu_evolutionScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteDat
|
||||
}
|
||||
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
draw_drawSprite(sprite, 72, 72, mainCharacterSprites, 7, 6);
|
||||
draw_drawSprite(sprite, 72, 72, mainCharacterSprites, 7);
|
||||
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
|
||||
@@ -70,7 +85,7 @@ void menu_evolutionScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteDat
|
||||
|
||||
tft_drawRectangle(18, startYPos, 204, 6, TFT_RED);
|
||||
|
||||
draw_drawSprite(checkerboard, 18, startYPos, checkerboardPattern, 0, 6, checkerboardShift);
|
||||
draw_drawSprite(checkerboard, 18, startYPos, checkerboardPattern, 0, checkerboardShift);
|
||||
|
||||
tft_drawBuffer();
|
||||
|
||||
@@ -105,7 +120,7 @@ void menu_evolutionScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteDat
|
||||
uint8_t startYPos = 72 + (i * 6);
|
||||
|
||||
tft_drawRectangle(18, startYPos, 204, 6, TFT_GREEN);
|
||||
draw_drawSprite(checkerboard, 18, startYPos, checkerboardPattern, 0, 6, checkerboardShift);
|
||||
draw_drawSprite(checkerboard, 18, startYPos, checkerboardPattern, 0, checkerboardShift);
|
||||
|
||||
tft_drawBuffer();
|
||||
|
||||
@@ -120,7 +135,7 @@ void menu_evolutionScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteDat
|
||||
uint64_t currentTime = esp_timer_get_time();
|
||||
if (currentTime - lastUpdateTime > 100000) {
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
draw_drawSprite(sprite, 72, 72, mainCharacterSprites, 7, 6);
|
||||
draw_drawSprite(sprite, 72, 72, mainCharacterSprites, 7);
|
||||
|
||||
uint8_t rectHeight = (6 * i);
|
||||
|
||||
@@ -129,7 +144,7 @@ void menu_evolutionScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteDat
|
||||
for (int j = 0; j < i; j++) {
|
||||
uint8_t rectYPos = 72 + (6 * j);
|
||||
|
||||
draw_drawSprite(checkerboard, 18, rectYPos, checkerboardPattern, 0, 6, checkerboardShift);
|
||||
draw_drawSprite(checkerboard, 18, rectYPos, checkerboardPattern, 0, checkerboardShift);
|
||||
|
||||
checkerboardShift = !checkerboardShift;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include "defs/defs.h"
|
||||
|
||||
|
||||
void menu_changeCharaScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* mainSpriteData, struct SpriteData* uiSpriteData) {
|
||||
void menu_changeCharaScreen(TFT_eSprite& bg, TFT_eSprite &sprite, struct SpriteData* mainSpriteData, struct SpriteData* uiSpriteData) {
|
||||
vTaskSuspend(secondLoop);
|
||||
|
||||
uint8_t selectedChara = currentCharacter;
|
||||
@@ -63,13 +63,13 @@ void menu_changeCharaScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteD
|
||||
sprintf(fileName, "/chara/%02x.bin", selectedCharaData->idChara);
|
||||
|
||||
storage_readFile(fileName, mainSpriteData);
|
||||
draw_drawSprite(sprite, 18, 72, mainSpriteData, 0, 6);
|
||||
draw_drawSprite(sprite, 18, 72, mainSpriteData, 0);
|
||||
|
||||
} else {
|
||||
tft_drawCenteredText("EMPTY", 4, 120);
|
||||
}
|
||||
|
||||
draw_drawSprite(sprite, 174, 96, uiSpriteData, ARROW_ICON, 6);
|
||||
draw_drawSprite(sprite, 174, 96, uiSpriteData, ARROW_ICON);
|
||||
|
||||
tft_drawBuffer();
|
||||
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
#include "display/display.h"
|
||||
#include "buttons/buttons.h"
|
||||
#include "defs/screen_defs.h"
|
||||
#include "vpet/vpet/vpet.h"
|
||||
|
||||
void menu_drawClock(TFT_eSprite &bg) {
|
||||
void menu_drawClock(TFT_eSprite& bg) {
|
||||
uint8_t pressedButtons = buttons_getPressedButtons();
|
||||
switch (pressedButtons) {
|
||||
case K2_PRESSED:
|
||||
@@ -30,7 +31,7 @@ void menu_drawClock(TFT_eSprite &bg) {
|
||||
tft_drawBuffer();
|
||||
}
|
||||
|
||||
void menu_drawClockEdit(TFT_eSprite &bg) {
|
||||
void menu_drawClockEdit(TFT_eSprite& bg) {
|
||||
char textBuffer[6];
|
||||
|
||||
static int clockHourCount = 0;
|
||||
@@ -50,10 +51,14 @@ void menu_drawClockEdit(TFT_eSprite &bg) {
|
||||
case K3_PRESSED:
|
||||
// Es un dia random, nada significativo, ya pondre mas adelante que tenga dia del año
|
||||
rtc.setTime(0, clockMinuteCount, clockHourCount, 1, 11, 2024);
|
||||
srand(time(NULL));
|
||||
|
||||
coldBoot = false;
|
||||
|
||||
timeSet = true;
|
||||
|
||||
screenKey = CLOCK_SCREEN;
|
||||
|
||||
vpet_initTimer();
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include "defs/sprite_data.h"
|
||||
#include "vpet/lines/lines.h"
|
||||
|
||||
void menu_drawDeathScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* uiBigSprite, struct SpriteData* uiSmallSprite) {
|
||||
void menu_drawDeathScreen(TFT_eSprite& bg, TFT_eSprite &sprite, struct SpriteData* uiBigSprite, struct SpriteData* uiSmallSprite) {
|
||||
static uint8_t frameCounter = 0;
|
||||
uint64_t currentTime = esp_timer_get_time();
|
||||
|
||||
@@ -33,7 +33,7 @@ void menu_drawDeathScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteDat
|
||||
|
||||
if (currentTime - lastUpdateTime > ANIMATION_THRESHOLD_TIME_US) {
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
draw_drawSprite(sprite, 72 + (6 * (frameCounter == 0)), 72, uiBigSprite, EMPTY_EGG, 6);
|
||||
draw_drawSprite(sprite, 72 + (6 * (frameCounter == 0)), 72, uiBigSprite, EMPTY_EGG);
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
menu_uiOverlay(sprite, uiSmallSprite);
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include "vpet/vpet/vpet.h"
|
||||
#include "vpet/lines/lines.h"
|
||||
|
||||
void menu_eggHatchScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* uiBigSprite, struct SpriteData* uiSmallSprite) {
|
||||
void menu_eggHatchScreen(TFT_eSprite& bg, TFT_eSprite &sprite, struct SpriteData* uiBigSprite, struct SpriteData* uiSmallSprite) {
|
||||
static bool eggSpriteFrame = false;
|
||||
|
||||
uint8_t pressedButtons = buttons_getPressedButtons();
|
||||
@@ -26,7 +26,7 @@ void menu_eggHatchScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData
|
||||
if (currentTime - lastUpdateTime > ANIMATION_THRESHOLD_TIME_US) {
|
||||
if (charaData[currentCharacter].hatchTimer <= currentLine[currentCharacter]->hatchTime) {
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
draw_drawSpriteCentered(sprite, ¤tEgg->eggSprite, eggSpriteFrame, 6);
|
||||
draw_drawSpriteCentered(sprite, ¤tEgg->eggSprite, eggSpriteFrame);
|
||||
|
||||
eggSpriteFrame = !eggSpriteFrame;
|
||||
lastUpdateTime = currentTime;
|
||||
@@ -47,7 +47,7 @@ void menu_eggHatchScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData
|
||||
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
|
||||
draw_drawSpriteCentered(sprite, ¤tEgg->eggSprite, 2, 6);
|
||||
draw_drawSpriteCentered(sprite, ¤tEgg->eggSprite, 2);
|
||||
|
||||
tft_drawBuffer();
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include "vpet/vpet/vpet.h"
|
||||
|
||||
|
||||
void menu_lineSwitcher(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* uiSmallSprite) {
|
||||
void menu_lineSwitcher(TFT_eSprite& bg, TFT_eSprite &sprite, struct SpriteData* uiSmallSprite) {
|
||||
static uint8_t eggCounter = 0;
|
||||
|
||||
uint8_t buttonsPressed = buttons_getPressedButtons();
|
||||
@@ -36,9 +36,9 @@ void menu_lineSwitcher(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData*
|
||||
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
draw_drawSpriteCentered(sprite, &eggSelection[eggCounter].eggSprite, 0, 6);
|
||||
draw_drawSpriteCentered(sprite, &eggSelection[eggCounter].eggSprite, 0);
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
draw_drawSprite(sprite, 194, 96, uiSmallSprite, ARROW_ICON, 6);
|
||||
draw_drawSprite(sprite, 194, 96, uiSmallSprite, ARROW_ICON);
|
||||
|
||||
tft_drawBuffer();
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "display/display.h"
|
||||
|
||||
void menu_feedingScreen(
|
||||
TFT_eSprite &bg, TFT_eSprite &charaSprite,
|
||||
TFT_eSprite& bg, TFT_eSprite &charaSprite,
|
||||
struct SpriteData* uiSpriteData, struct SpriteData* charaSpriteData, uint8_t item
|
||||
) {
|
||||
static int currentAnimationFrame = 0;
|
||||
@@ -19,7 +19,7 @@ void menu_feedingScreen(
|
||||
animate_performEatingAnimation(charaSprite, charaSpriteData);
|
||||
|
||||
tft_clearBuffer(charaSprite, TFT_TRANSPARENT);
|
||||
draw_drawSprite(charaSprite, 24, 120, uiSpriteData, item, 6);
|
||||
draw_drawSprite(charaSprite, 24, 120, uiSpriteData, item);
|
||||
|
||||
lastUpdateTime = currentTime;
|
||||
currentAnimationFrame++;
|
||||
|
||||
@@ -1,92 +1,94 @@
|
||||
#include "menu.h"
|
||||
#include "display/display.h"
|
||||
#include "draw/draw.h"
|
||||
#include "buttons/buttons.h"
|
||||
#include "defs/chara_data.h"
|
||||
#include "display/display.h"
|
||||
#include "draw/draw.h"
|
||||
#include "menu.h"
|
||||
#include "vpet/vpet/vpet.h"
|
||||
|
||||
void menu_foodScreen(TFT_eSprite &bg, TFT_eSprite &mainChara, struct SpriteData* spriteData) {
|
||||
if (charaData[currentCharacter].sleepy) {
|
||||
tone(SPK_PIN, BEEP_FREQ_HZ, BEEP_LEN_MS);
|
||||
delay(100);
|
||||
tone(SPK_PIN, BEEP_FREQ_HZ, BEEP_LEN_MS);
|
||||
screenKey = MENU_SCREEN;
|
||||
|
||||
return;
|
||||
}
|
||||
void menu_foodScreen(TFT_eSprite &bg, TFT_eSprite &mainChara,
|
||||
struct SpriteData *spriteData) {
|
||||
if (charaData[currentCharacter].sleepy) {
|
||||
tone(SPK_PIN, BEEP_FREQ_HZ, BEEP_LEN_MS);
|
||||
delay(100);
|
||||
tone(SPK_PIN, BEEP_FREQ_HZ, BEEP_LEN_MS);
|
||||
screenKey = MENU_SCREEN;
|
||||
|
||||
static uint8_t arrowPosition = 0;
|
||||
|
||||
uint8_t pressedButtons = buttons_getPressedButtons();
|
||||
switch (pressedButtons) {
|
||||
case 8:
|
||||
arrowPosition = (arrowPosition + 1) % 2;
|
||||
break;
|
||||
return;
|
||||
}
|
||||
|
||||
case 2:
|
||||
screenKey = MENU_SCREEN;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (pressedButtons == 4) {
|
||||
lastUpdateTime = 0;
|
||||
switch(arrowPosition) {
|
||||
case 0:
|
||||
if (charaData[currentCharacter].hunger < 8) {
|
||||
charaData[currentCharacter].hungerCareMistakeTimer = charaData[currentCharacter].initialStatsReductionTime;
|
||||
charaData[currentCharacter].hungerCareMistakeObtained = false;
|
||||
charaData[currentCharacter].weight++;
|
||||
charaData[currentCharacter].hunger++;
|
||||
screenKey = FEEDING_SCREEN;
|
||||
submenuKey = FOOD_ICON;
|
||||
} else {
|
||||
screenKey = REFUSING_SCREEN;
|
||||
if (!charaData[currentCharacter].overfeedHappened) {
|
||||
charaData[currentCharacter].overfeed++;
|
||||
charaData[currentCharacter].overfeedHappened = true;
|
||||
}
|
||||
}
|
||||
return;
|
||||
break;
|
||||
static uint8_t arrowPosition = 0;
|
||||
|
||||
case 1:
|
||||
if (charaData[currentCharacter].strength < 8) {
|
||||
charaData[currentCharacter].strengthCareMistakeTimer = charaData[currentCharacter].initialStatsReductionTime;
|
||||
charaData[currentCharacter].strength++;
|
||||
charaData[currentCharacter].weight += 2;
|
||||
screenKey = FEEDING_SCREEN;
|
||||
submenuKey = PILL_ICON;
|
||||
} else {
|
||||
screenKey = REFUSING_SCREEN;
|
||||
}
|
||||
return;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
uint8_t pressedButtons = buttons_getPressedButtons();
|
||||
switch (pressedButtons) {
|
||||
case 8:
|
||||
arrowPosition = (arrowPosition + 1) % 2;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
screenKey = MENU_SCREEN;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (pressedButtons == 4) {
|
||||
lastUpdateTime = 0;
|
||||
switch (arrowPosition) {
|
||||
case 0:
|
||||
if (charaData[currentCharacter].hunger < 8) {
|
||||
charaData[currentCharacter].hungerCareMistakeTimer =
|
||||
charaData[currentCharacter].initialStatsReductionTime;
|
||||
charaData[currentCharacter].hungerCareMistakeObtained = false;
|
||||
charaData[currentCharacter].weight++;
|
||||
charaData[currentCharacter].hunger++;
|
||||
screenKey = FEEDING_SCREEN;
|
||||
submenuKey = FOOD_ICON;
|
||||
} else {
|
||||
screenKey = REFUSING_SCREEN;
|
||||
if (!charaData[currentCharacter].overfeedHappened) {
|
||||
charaData[currentCharacter].overfeed++;
|
||||
charaData[currentCharacter].overfeedHappened = true;
|
||||
}
|
||||
}
|
||||
return;
|
||||
break;
|
||||
|
||||
vpet_computeCallLight();
|
||||
case 1:
|
||||
if (charaData[currentCharacter].strength < 8) {
|
||||
charaData[currentCharacter].strengthCareMistakeTimer =
|
||||
charaData[currentCharacter].initialStatsReductionTime;
|
||||
charaData[currentCharacter].strength++;
|
||||
charaData[currentCharacter].weight += 2;
|
||||
screenKey = FEEDING_SCREEN;
|
||||
submenuKey = PILL_ICON;
|
||||
} else {
|
||||
screenKey = REFUSING_SCREEN;
|
||||
}
|
||||
return;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
vpet_computeCallLight();
|
||||
}
|
||||
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
menu_foodScreen_drawEntry(mainChara, spriteData, 0, FOOD_ICON, "Meat");
|
||||
menu_foodScreen_drawEntry(mainChara, spriteData, 1, PILL_ICON, "Pill");
|
||||
|
||||
draw_drawSprite(mainChara, 5, (arrowPosition * 34) + 5, spriteData, ARROW_ICON, 4);
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
menu_foodScreen_drawEntry(mainChara, spriteData, 0, FOOD_ICON, "Meat");
|
||||
menu_foodScreen_drawEntry(mainChara, spriteData, 1, PILL_ICON, "Pill");
|
||||
|
||||
tft_drawBuffer();
|
||||
draw_drawSprite(mainChara, 5, (arrowPosition * 34) + 5, spriteData,
|
||||
ARROW_ICON);
|
||||
|
||||
tft_drawBuffer();
|
||||
}
|
||||
|
||||
void menu_foodScreen_drawEntry(
|
||||
TFT_eSprite &mainChara, struct SpriteData* spriteData,
|
||||
uint8_t entryId, uint8_t spriteNumber, const char* textEntry
|
||||
) {
|
||||
tft_clearBuffer(mainChara, TFT_TRANSPARENT);
|
||||
draw_drawSprite(mainChara, 45, (entryId * 34) + 5, spriteData, spriteNumber, 4);
|
||||
tft_drawText(textEntry, 4, 80, (entryId * 34) + 5);
|
||||
void menu_foodScreen_drawEntry(TFT_eSprite &mainChara,
|
||||
struct SpriteData *spriteData, uint8_t entryId,
|
||||
uint8_t spriteNumber, const char *textEntry) {
|
||||
tft_clearBuffer(mainChara, TFT_TRANSPARENT);
|
||||
draw_drawSprite(mainChara, 45, (entryId * 34) + 5, spriteData, spriteNumber);
|
||||
tft_drawText(textEntry, 4, 80, (entryId * 34) + 5);
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
#include "menu.h"
|
||||
#include "buttons/buttons.h"
|
||||
#include "draw/draw.h"
|
||||
#include "display/display.h"
|
||||
|
||||
void menu_drawFridgeScreen(TFT_eSprite &bg, TFT_eSprite& sprite, struct SpriteData* smallUiElements, struct SpriteData* bigUiElements) {
|
||||
uint8_t pressedButtons = buttons_getPressedButtons();
|
||||
switch (pressedButtons) {
|
||||
case K1_PRESSED:
|
||||
screenKey = MENU_SCREEN;
|
||||
menuKey = STATUS_SCREEN_MENU;
|
||||
break;
|
||||
|
||||
case K2_PRESSED:
|
||||
screenKey = CLOCK_SCREEN;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
uint64_t currentTime = esp_timer_get_time();
|
||||
if (currentTime - lastUpdateTime > ANIMATION_THRESHOLD_TIME_US) {
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
|
||||
draw_drawSpriteCentered(sprite, bigUiElements, FRIDGE_DOOR);
|
||||
|
||||
menu_uiOverlay(sprite, bigUiElements);
|
||||
|
||||
lastUpdateTime = currentTime;
|
||||
}
|
||||
|
||||
tft_drawBuffer();
|
||||
}
|
||||
@@ -6,8 +6,8 @@
|
||||
#include "animations/animations.h"
|
||||
|
||||
void menu_drawHappyScreen(
|
||||
TFT_eSprite &bg, TFT_eSprite &sprite,
|
||||
struct SpriteData* spriteData, struct SpriteData* smallUiElements
|
||||
TFT_eSprite& bg, TFT_eSprite &sprite,
|
||||
struct SpriteData* spriteData, struct SpriteData* smallUiElements, const int returnScreen
|
||||
) {
|
||||
uint8_t frameCounter = 0;
|
||||
|
||||
@@ -15,11 +15,9 @@ void menu_drawHappyScreen(
|
||||
uint64_t currentTime = esp_timer_get_time();
|
||||
if (currentTime - lastUpdateTime > ANIMATION_THRESHOLD_TIME_US) {
|
||||
if (frameCounter > 3) {
|
||||
screenKey = MAIN_SCREEN; // TODO: Change for while battling
|
||||
screenKey = returnScreen; // TODO: Change for while battling
|
||||
menuKey = STATUS_SCREEN;
|
||||
|
||||
vTaskResume(secondLoop);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -35,8 +33,8 @@ void menu_drawHappyScreen(
|
||||
tone(SPK_PIN, 1000, 50);
|
||||
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
draw_drawSprite(sprite, 18, 72, smallUiElements, FIREWORKS_ICON, 6);
|
||||
draw_drawSprite(sprite, 174, 72, smallUiElements, FIREWORKS_ICON, 6);
|
||||
draw_drawSprite(sprite, 18, 72, smallUiElements, FIREWORKS_ICON);
|
||||
draw_drawSprite(sprite, 174, 72, smallUiElements, FIREWORKS_ICON);
|
||||
}
|
||||
|
||||
frameCounter++;
|
||||
|
||||
@@ -13,7 +13,7 @@ void menu_drawIdleScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData
|
||||
switch (pressedButtons) {
|
||||
case K1_PRESSED:
|
||||
screenKey = MENU_SCREEN;
|
||||
menuKey = 0;
|
||||
menuKey = STATUS_SCREEN_MENU;
|
||||
break;
|
||||
|
||||
case K2_PRESSED:
|
||||
|
||||
@@ -4,10 +4,14 @@
|
||||
|
||||
void menu_mainScreen() {
|
||||
printf("[MAINSCR] on main screen\n");
|
||||
lastUpdateTime = 0;
|
||||
|
||||
if (coldBoot) {
|
||||
if (!timeSet) {
|
||||
screenKey = TITLE_SCREEN;
|
||||
return;
|
||||
} else if (charaData[currentCharacter].frozen) {
|
||||
screenKey = FROZEN_SCREEN;
|
||||
return;
|
||||
} else if (!charaData[currentCharacter].hatched && !charaData[currentCharacter].hatching) {
|
||||
screenKey = EGG_EMPTY_SCREEN;
|
||||
return;
|
||||
|
||||
+10
-2
@@ -3,11 +3,12 @@
|
||||
|
||||
#include <TFT_eSPI.h>
|
||||
#include "defs/defs.h"
|
||||
#include "defs/sprite_data.h"
|
||||
|
||||
void menu_drawCurrentMenuOption(TFT_eSprite &bg, TFT_eSprite &icon, struct SpriteData* spriteData);
|
||||
void menu_drawClock(TFT_eSprite &bg);
|
||||
void menu_drawClockEdit(TFT_eSprite &bg);
|
||||
void menu_drawTitle(TFT_eSprite &bg);
|
||||
void menu_drawTitle(TFT_eSprite &bg, TFT_eSprite &composite);
|
||||
void menu_drawIdleScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct SpriteData* bigUiElements, struct SpriteData* smallUiElements);
|
||||
void menu_offScreen();
|
||||
void menu_statusScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData);
|
||||
@@ -38,7 +39,7 @@ uint8_t menu_poopOverlay(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData
|
||||
void menu_clearPoopScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct SpriteData* bigUiElements, struct SpriteData* smallUiElements);
|
||||
void menu_drawHappyScreen(
|
||||
TFT_eSprite &bg, TFT_eSprite &sprite,
|
||||
struct SpriteData* spriteData, struct SpriteData* smallUiElements
|
||||
struct SpriteData* spriteData, struct SpriteData* smallUiElements, const int returnScreen = MAIN_SCREEN
|
||||
);
|
||||
void menu_lineSwitcher(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* uiSmallSprite);
|
||||
void menu_eggHatchScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* uiBigSprite, struct SpriteData* uiSmallSprite);
|
||||
@@ -51,8 +52,15 @@ void menu_drawAngryScreen(
|
||||
TFT_eSprite &bg, TFT_eSprite &sprite,
|
||||
struct SpriteData* spriteData, struct SpriteData* smallUiElements
|
||||
);
|
||||
void menu_drawFridgeScreen(TFT_eSprite &bg, TFT_eSprite& sprite, struct SpriteData* smallUiElements, struct SpriteData* bigUiElements);
|
||||
|
||||
void training_screenTraining2(
|
||||
TFT_eSprite &bg, TFT_eSprite &sprite,
|
||||
struct SpriteData* mainCharaData, struct SpriteData* attackSprites
|
||||
);
|
||||
|
||||
void menu_sleepScreen_sleepAction();
|
||||
void menu_sleepScreen_recalculateSleep();
|
||||
void menu_freezeScreen_alternateFreeze();
|
||||
|
||||
#endif
|
||||
@@ -12,7 +12,7 @@
|
||||
const int textXPos = 10;
|
||||
const int textYPos = 180;
|
||||
|
||||
void menu_drawCurrentMenuOption(TFT_eSprite &bg, TFT_eSprite &icon, struct SpriteData* spriteData) {
|
||||
void menu_drawCurrentMenuOption(TFT_eSprite& bg, TFT_eSprite &icon, struct SpriteData* spriteData) {
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
|
||||
uint8_t pressedButtons = buttons_getPressedButtons();
|
||||
@@ -40,19 +40,23 @@ void menu_drawCurrentMenuOption(TFT_eSprite &bg, TFT_eSprite &icon, struct Sprit
|
||||
break;
|
||||
|
||||
case FOOD_SCREEN_MENU:
|
||||
if (charaData[currentCharacter].frozen) { break; }
|
||||
screenKey = FOOD_SCREEN;
|
||||
break;
|
||||
|
||||
case SLEEP_SCREEN_MENU:
|
||||
if (charaData[currentCharacter].frozen) { break; }
|
||||
menu_sleepScreen_sleepAction();
|
||||
break;
|
||||
|
||||
case TRAIN_SCREEN_MENU:
|
||||
if (charaData[currentCharacter].frozen) { break; }
|
||||
screenKey = TRAINING_SCREEN_1;
|
||||
return;
|
||||
break;
|
||||
|
||||
case POOP_SCREEN_MENU:
|
||||
if (charaData[currentCharacter].frozen) { break; }
|
||||
menuKey = STATUS_SCREEN;
|
||||
screenKey = CLEAR_POOP_SCREEN;
|
||||
return;
|
||||
@@ -64,15 +68,20 @@ void menu_drawCurrentMenuOption(TFT_eSprite &bg, TFT_eSprite &icon, struct Sprit
|
||||
return;
|
||||
break;
|
||||
|
||||
case FREEZE_SCREEN_MENU:
|
||||
menu_freezeScreen_alternateFreeze();
|
||||
return;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
draw_drawSpriteCentered(icon, spriteData, menuKey % 9, 6);
|
||||
draw_drawSpriteCentered(icon, spriteData, menuKey % 10);
|
||||
|
||||
switch(menuKey % 10) {
|
||||
switch(menuKey % 11) {
|
||||
case STATUS_SCREEN_MENU:
|
||||
tft_drawCenteredText("Status", 4, textYPos);
|
||||
break;
|
||||
@@ -108,8 +117,12 @@ void menu_drawCurrentMenuOption(TFT_eSprite &bg, TFT_eSprite &icon, struct Sprit
|
||||
case SETTINGS_SCREEN_MENU:
|
||||
tft_drawCenteredText("Settings", 4, textYPos);
|
||||
break;
|
||||
|
||||
case 9:
|
||||
|
||||
case FREEZE_SCREEN_MENU:
|
||||
tft_drawCenteredText("Freeze", 4, textYPos);
|
||||
break;
|
||||
|
||||
case 10:
|
||||
menuKey = STATUS_SCREEN_MENU;
|
||||
screenKey = MAIN_SCREEN;
|
||||
return;
|
||||
@@ -130,7 +143,7 @@ void menu_sleepScreen_sleepAction() {
|
||||
|
||||
charaData[currentCharacter].sleepDisturbances++;
|
||||
|
||||
menuKey = STATUS_SCREEN;
|
||||
menuKey = STATUS_SCREEN_MENU;
|
||||
screenKey = MAIN_SCREEN;
|
||||
|
||||
} else {
|
||||
@@ -138,11 +151,18 @@ void menu_sleepScreen_sleepAction() {
|
||||
|
||||
vpet_computeCallLight(); // Lo hago por cortesia, no me gusta
|
||||
|
||||
menuKey = STATUS_SCREEN;
|
||||
menuKey = STATUS_SCREEN_MENU;
|
||||
screenKey = SLEEP_SCREEN;
|
||||
}
|
||||
}
|
||||
|
||||
void menu_freezeScreen_alternateFreeze() {
|
||||
charaData[currentCharacter].frozen = !charaData[currentCharacter].frozen;
|
||||
|
||||
menuKey = STATUS_SCREEN;
|
||||
screenKey = MAIN_SCREEN;
|
||||
}
|
||||
|
||||
void menu_sleepScreen_recalculateSleep() {
|
||||
uint32_t newSleepTime = (dayUnixTime + 3600) % SECONDS_IN_DAY;
|
||||
uint32_t newWakeUpTime = charaData[currentCharacter].wakeupTime + 3600;
|
||||
|
||||
+10
-4
@@ -36,15 +36,21 @@ void menu_clearPoopScreen(
|
||||
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
|
||||
while (cleanerXPos > 18) {
|
||||
draw_drawSprite(sprite, cleanerXPos, 72, smallUiElements, CLEANER_ICON, 6);
|
||||
draw_drawSprite(sprite, cleanerXPos, 120, smallUiElements, CLEANER_ICON, 6);
|
||||
while (cleanerXPos > 18 - 48) {
|
||||
draw_drawBackgroundSection(bg, cleanerXPos + 6, 72, 48, 96);
|
||||
|
||||
draw_drawSprite(sprite, cleanerXPos, 72, smallUiElements, CLEANER_ICON);
|
||||
draw_drawSprite(sprite, cleanerXPos, 120, smallUiElements, CLEANER_ICON);
|
||||
|
||||
draw_drawBackgroundSection(bg, 0, 72, 18, 96);
|
||||
|
||||
tft_drawBuffer();
|
||||
|
||||
cleanerXPos -= 6;
|
||||
delay(50);
|
||||
}
|
||||
|
||||
screenKey = HAPPY_SCREEN;
|
||||
menuKey = -1;
|
||||
charaData[currentCharacter].poopNumber = 0;
|
||||
|
||||
return;
|
||||
|
||||
@@ -13,7 +13,7 @@ uint8_t menu_poopOverlay(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData
|
||||
bool poopTop = false;
|
||||
|
||||
for (int i = 0; i < charaData[currentCharacter].poopNumber; i++) {
|
||||
draw_drawSprite(sprite, poopStartX, poopStartY - (48 * poopTop), smallUiElements, POOP_ICON, 6, poopFlip);
|
||||
draw_drawSprite(sprite, poopStartX, poopStartY - (48 * poopTop), smallUiElements, POOP_ICON, poopFlip);
|
||||
poopStartX -= (i % 2) * 48;
|
||||
poopTop = !poopTop;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ void menu_poopScreen(
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
draw_drawSprite(sprite, 72 + (animationPosition * 6), 72, spriteData, 6, 6);
|
||||
draw_drawSprite(sprite, 72 + (animationPosition * 6), 72, spriteData, 6);
|
||||
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
menu_uiOverlay(sprite, bigUiElements);
|
||||
@@ -45,13 +45,13 @@ void menu_poopScreen(
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
draw_drawSprite(sprite, 174, 120, smallUiElements, POOP_ICON, 6);
|
||||
draw_drawSprite(sprite, 174, 120, smallUiElements, POOP_ICON);
|
||||
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
menu_uiOverlay(sprite, bigUiElements);
|
||||
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
draw_drawSprite(sprite, 72, 72, spriteData, 7, 6);
|
||||
draw_drawSprite(sprite, 72, 72, spriteData, 7);
|
||||
|
||||
animationFrame++;
|
||||
animationPosition = !animationPosition;
|
||||
@@ -69,7 +69,7 @@ void menu_poopScreen(
|
||||
screenKey = MAIN_SCREEN;
|
||||
}
|
||||
|
||||
menuKey = 0;
|
||||
menuKey = -1;
|
||||
animationFrame = 0;
|
||||
animationPosition = 0;
|
||||
|
||||
|
||||
@@ -42,10 +42,10 @@ void menu_sleepingScreen(
|
||||
animate_performSleepyAnimation(sprite, mainCharaData);
|
||||
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
draw_drawSprite(sprite, 72, 72, bigUiElements, BED_SPRITE, 6);
|
||||
draw_drawSprite(sprite, 72, 72, bigUiElements, BED_SPRITE);
|
||||
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
draw_drawSprite(sprite, 172, 72, smallUIElements, ZZZ_ICON, 6);
|
||||
draw_drawSprite(sprite, 172, 72, smallUIElements, ZZZ_ICON);
|
||||
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
menu_uiOverlay(sprite, bigUiElements);
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
#include "display/display.h"
|
||||
#include "draw/draw.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
void menu_statusScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData) {
|
||||
tft_clearBuffer(sprite, TFT_TRANSPARENT);
|
||||
|
||||
@@ -23,7 +25,7 @@ void menu_statusScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData*
|
||||
|
||||
menu_statusScreen_drawStat(sprite, spriteData, 10, 10, "Hunger", charaData[currentCharacter].hunger);
|
||||
menu_statusScreen_drawStat(sprite, spriteData, 10, 80, "Strength", charaData[currentCharacter].strength);
|
||||
menu_statusScreen_drawStat(sprite, spriteData, 10, 150, "Effort", charaData[currentCharacter].effort);
|
||||
menu_statusScreen_drawStat(sprite, spriteData, 10, 150, "Effort", floor(charaData[currentCharacter].effort / 4));
|
||||
|
||||
tft_drawBuffer();
|
||||
}
|
||||
@@ -43,7 +45,6 @@ void menu_statusScreen_drawStat(TFT_eSprite &sprite, struct SpriteData* spriteDa
|
||||
y + 30,
|
||||
spriteData,
|
||||
icon,
|
||||
4,
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "defs/defs.h"
|
||||
#include "buttons/buttons.h"
|
||||
|
||||
void menu_drawTitle(TFT_eSprite &bg) {
|
||||
void menu_drawTitle(TFT_eSprite &bg, TFT_eSprite &composite) {
|
||||
uint8_t pressedButtons = buttons_getPressedButtons();
|
||||
if (pressedButtons == 8 || pressedButtons == 4) {
|
||||
screenKey = CLOCK_EDIT_SCREEN;
|
||||
@@ -18,4 +18,6 @@ void menu_drawTitle(TFT_eSprite &bg) {
|
||||
tft_drawCenteredText(VERSION, 2, 80);
|
||||
|
||||
tft_drawBuffer();
|
||||
|
||||
delay(200);
|
||||
}
|
||||
@@ -14,7 +14,7 @@ void training_screenTraining1(
|
||||
vTaskSuspend(secondLoop);
|
||||
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
draw_drawSpriteCentered(sprite, mainCharaData, 11, 6);
|
||||
draw_drawSpriteCentered(sprite, mainCharaData, 11);
|
||||
|
||||
tone(SPK_PIN, 4100, 100);
|
||||
tone(SPK_PIN, 3500, 100);
|
||||
@@ -24,7 +24,7 @@ void training_screenTraining1(
|
||||
delay(500);
|
||||
|
||||
draw_drawBackground(bg, 90, 90, 3);
|
||||
draw_drawSpriteCentered(sprite, mainCharaData, 0, 6);
|
||||
draw_drawSpriteCentered(sprite, mainCharaData, 0);
|
||||
tft_drawCenteredText("PUSH!!", 4, 190);
|
||||
|
||||
tft_drawBuffer();
|
||||
|
||||
@@ -7,5 +7,10 @@ void training_screenTraining1(
|
||||
TFT_eSprite &bg, TFT_eSprite &sprite,
|
||||
struct SpriteData* mainCharaData, struct SpriteData* attackSprites
|
||||
);
|
||||
void training_screenTraining2(
|
||||
TFT_eSprite &bg, TFT_eSprite &sprite,
|
||||
struct SpriteData* mainCharaData, struct SpriteData* attackSprites
|
||||
);
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,96 @@
|
||||
#include "menu.h"
|
||||
#include "vpet/training/training.h"
|
||||
#include "defs/defs.h"
|
||||
#include "defs/chara_data.h"
|
||||
#include "draw/draw.h"
|
||||
#include "display/display.h"
|
||||
#include "buttons/buttons.h"
|
||||
|
||||
void training_screenTraining2(
|
||||
TFT_eSprite &bg, TFT_eSprite &sprite,
|
||||
struct SpriteData* mainCharaData, struct SpriteData* attackSprites
|
||||
) {
|
||||
vTaskSuspend(secondLoop);
|
||||
|
||||
draw_drawBackground(bg, 90, 90 ,3);
|
||||
|
||||
// Player
|
||||
draw_drawSprite(sprite, 174, 72, mainCharaData, 0, false);
|
||||
draw_drawBackgroundSection(bg, 222, 72, 18, 96);
|
||||
|
||||
// Opponent
|
||||
draw_drawSprite(sprite, -30, 72, mainCharaData, 0, true);
|
||||
draw_drawBackgroundSection(bg, 0, 72, 18, 96);
|
||||
|
||||
tft_drawBuffer();
|
||||
|
||||
uint64_t inactivityTimer = esp_timer_get_time();
|
||||
while (true) {
|
||||
uint64_t currentTime = esp_timer_get_time();
|
||||
if (currentTime - lastUpdateTime > 500000) {
|
||||
tone(SPK_PIN, BEEP_FREQ_HZ, BEEP_LEN_MS);
|
||||
lastUpdateTime = currentTime;
|
||||
}
|
||||
|
||||
if (currentTime - inactivityTimer > 3000000) {
|
||||
screenKey = MAIN_SCREEN;
|
||||
submenuKey = STATUS_SCREEN_MENU;
|
||||
|
||||
vTaskResume(secondLoop);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
uint8_t randomPosition = rand() % 2;
|
||||
uint8_t projectilePosition = 0;
|
||||
|
||||
uint8_t pressedButtons = buttons_getPressedButtons();
|
||||
if (pressedButtons == K1_PRESSED || pressedButtons == K2_PRESSED) {
|
||||
projectilePosition = pressedButtons >> 3; // pressedButtons >> 4 == 1 => K1; != 1 => K2
|
||||
printf("[TRAIN] projectilePosition=%i\n", projectilePosition);
|
||||
|
||||
} else if (pressedButtons == K3_PRESSED) {
|
||||
screenKey = MAIN_SCREEN;
|
||||
submenuKey = STATUS_SCREEN_MENU;
|
||||
|
||||
vTaskResume(secondLoop);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (pressedButtons != 0) {
|
||||
inactivityTimer = esp_timer_get_time();
|
||||
|
||||
// Player attack
|
||||
draw_drawSprite(sprite, 126, 72 + 48 * projectilePosition, attackSprites, POOP_ICON);
|
||||
|
||||
// Opponent attack
|
||||
draw_drawSprite(sprite, 66, 72 + 48 * randomPosition, attackSprites, FOOD_ICON);
|
||||
|
||||
tft_drawBuffer();
|
||||
|
||||
if (projectilePosition != randomPosition) {
|
||||
delay(500);
|
||||
|
||||
draw_drawBackgroundSection(bg, 126, 72 + 48 * projectilePosition, 48, 48);
|
||||
draw_drawSprite(sprite, 66, 72 + 48 * projectilePosition, attackSprites, POOP_ICON);
|
||||
|
||||
tft_drawBuffer();
|
||||
|
||||
delay(500);
|
||||
} else {
|
||||
delay(500);
|
||||
}
|
||||
|
||||
draw_drawBackgroundSection(bg, 66, 72, 108, 96);
|
||||
|
||||
if (projectilePosition != randomPosition) {
|
||||
charaData[currentCharacter].strength++;
|
||||
menu_drawHappyScreen(bg, sprite, mainCharaData, attackSprites);
|
||||
} else {
|
||||
printf("[TRAIN] Train failed\n");
|
||||
menu_drawAngryScreen(bg, sprite, mainCharaData, attackSprites);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+17
-16
@@ -1,22 +1,23 @@
|
||||
#include "menu.h"
|
||||
#include "draw/draw.h"
|
||||
#include "display/display.h"
|
||||
#include "defs/chara_data.h"
|
||||
#include "defs/screen_defs.h"
|
||||
#include "display/display.h"
|
||||
#include "draw/draw.h"
|
||||
#include "menu.h"
|
||||
|
||||
void menu_uiOverlay(TFT_eSprite &charSprite, struct SpriteData* uiElements) {
|
||||
char hourBuffer[6];
|
||||
void menu_uiOverlay(TFT_eSprite &charSprite, struct SpriteData *uiElements) {
|
||||
char hourBuffer[6];
|
||||
|
||||
snprintf(hourBuffer, 6, "%02d:%02d", timeInfo.tm_hour, timeInfo.tm_min);
|
||||
snprintf(hourBuffer, 6, "%02d:%02d", timeInfo.tm_hour, timeInfo.tm_min);
|
||||
|
||||
composite1.fillRect(0, 0, 240, 24, TFT_BLACK);
|
||||
tft_drawText(hourBuffer, 2, 4, 4, TFT_WHITE);
|
||||
|
||||
snprintf(hourBuffer, 6, "%05d", stepCounter);
|
||||
tft_drawText(hourBuffer, 2, 176, 4, TFT_WHITE);
|
||||
|
||||
if (charaData[currentCharacter].careMistakeCallLight) {
|
||||
tft_clearBuffer(charSprite, TFT_TRANSPARENT);
|
||||
draw_drawSprite(charSprite, 192, 192, uiElements, CARE_MISTAKE_CALL_LIGHT, 2);
|
||||
}
|
||||
composite.fillRect(0, 0, 240, 24, TFT_BLACK);
|
||||
tft_drawText(hourBuffer, 2, 4, 4, TFT_WHITE);
|
||||
|
||||
snprintf(hourBuffer, 6, "%05d", stepCounter);
|
||||
tft_drawText(hourBuffer, 2, 176, 4, TFT_WHITE);
|
||||
|
||||
if (charaData[currentCharacter].careMistakeCallLight) {
|
||||
tft_clearBuffer(charSprite, TFT_TRANSPARENT);
|
||||
// draw_drawSprite(charSprite, 192, 192, uiElements,
|
||||
// CARE_MISTAKE_CALL_LIGHT, 2);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user