Que acaba de ocurrir?

Ah si, se ha cambiado el buffer, ocupaba todo el espacio contiguo disponible y no podía aprovecharlo para nada mas. Normal que no te dejara reservar un buffer de 240x240... Y menos ahora cuando has metido el light sleep.

Ah si, ahora hay light sleep, el micro baja hasta 4mA, lo cual lo considero suficiente para mi causa...
This commit is contained in:
Nacho 2025-05-30 00:24:36 +02:00
parent 43c10d02f5
commit 70a7144d52
36 changed files with 360 additions and 262 deletions

View File

@ -58,12 +58,12 @@ const int hatchingAnimationPositions[] = {
72, 66, 72, 78
};
void animate_performAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData, uint8_t offsetX);
void animate_performAttentionAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData);
void animate_performEatingAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData);
void animate_performRefuseAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData);
void animate_performSleepyAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData);
void animate_performHappyAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData);
void animate_performHatchingAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData);
void animate_performAnimation(TFT_eSprite &spr, struct SpriteData* spriteData, uint8_t offsetX);
void animate_performAttentionAnimation(TFT_eSprite &spr, struct SpriteData* spriteData);
void animate_performEatingAnimation(TFT_eSprite &spr, struct SpriteData* spriteData);
void animate_performRefuseAnimation(TFT_eSprite &spr, struct SpriteData* spriteData);
void animate_performSleepyAnimation(TFT_eSprite &spr, struct SpriteData* spriteData);
void animate_performHappyAnimation(TFT_eSprite &spr, struct SpriteData* spriteData);
void animate_performHatchingAnimation(TFT_eSprite &spr, struct SpriteData* spriteData);
#endif

View File

@ -8,9 +8,8 @@ const int spriteHeightOnScreen = 72;
int currentAnimationFrame = 0;
void animate_performAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData, uint8_t offsetX) {
void animate_performAnimation(TFT_eSprite &spr, struct SpriteData* spriteData, uint8_t offsetX) {
draw_drawSprite(
buffer,
spr,
animationPositions[currentAnimationFrame] - offsetX,
spriteHeightOnScreen,
@ -23,10 +22,9 @@ void animate_performAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct Spri
currentAnimationFrame = (currentAnimationFrame + 1) % numFrames;
}
void animate_performAttentionAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData) {
void animate_performAttentionAnimation(TFT_eSprite &spr, struct SpriteData* spriteData) {
currentAnimationFrame = (currentAnimationFrame + 1) % numFramesAngry;
draw_drawSprite(
buffer,
spr,
spriteHeightOnScreen,
spriteHeightOnScreen,
@ -38,10 +36,9 @@ void animate_performAttentionAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, st
}
void animate_performEatingAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData) {
void animate_performEatingAnimation(TFT_eSprite &spr, struct SpriteData* spriteData) {
currentAnimationFrame = (currentAnimationFrame + 1) % numFramesEating;
draw_drawSprite(
buffer,
spr,
spriteHeightOnScreen,
spriteHeightOnScreen,
@ -52,10 +49,9 @@ void animate_performEatingAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struc
);
}
void animate_performRefuseAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData) {
void animate_performRefuseAnimation(TFT_eSprite &spr, struct SpriteData* spriteData) {
currentAnimationFrame = (currentAnimationFrame + 1) % numFramesRefuse;
draw_drawSprite(
buffer,
spr,
spriteHeightOnScreen,
spriteHeightOnScreen,
@ -66,10 +62,9 @@ void animate_performRefuseAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struc
);
}
void animate_performSleepyAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData) {
void animate_performSleepyAnimation(TFT_eSprite &spr, struct SpriteData* spriteData) {
currentAnimationFrame = (currentAnimationFrame + 1) % numFramesSleepy;
draw_drawSprite(
buffer,
spr,
spriteHeightOnScreen,
spriteHeightOnScreen,
@ -80,10 +75,9 @@ void animate_performSleepyAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struc
);
}
void animate_performHappyAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData) {
void animate_performHappyAnimation(TFT_eSprite &spr, struct SpriteData* spriteData) {
currentAnimationFrame = (currentAnimationFrame + 1) % numFramesHappy;
draw_drawSprite(
buffer,
spr,
spriteHeightOnScreen,
spriteHeightOnScreen,
@ -94,10 +88,9 @@ void animate_performHappyAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct
);
}
void animate_performHatchingAnimation(TFT_eSprite &buffer, TFT_eSprite &spr, struct SpriteData* spriteData) {
void animate_performHatchingAnimation(TFT_eSprite &spr, struct SpriteData* spriteData) {
currentAnimationFrame = (currentAnimationFrame + 1) % numFramesHappy;
draw_drawSprite(
buffer,
spr,
hatchingAnimationPositions[currentAnimationFrame],
spriteHeightOnScreen,

View File

@ -1,5 +1,6 @@
#include "defs/defs.h"
#include "defs/chara_data.h"
#include "defs/screen_defs.h"
#include "buttons.h"
#include <Arduino.h>
@ -18,7 +19,6 @@ void buttons_checkInactivity() {
if (currentTime - lastPressedButtonTime > INACTIVITY_THRESHOLD_TIME_US && !screenOff) {
digitalWrite(BL_PIN, LOW);
screenKey = OFF_SCREEN;
screenOff = true;
} else if (currentTime - lastPressedButtonTime > LAST_PRESSED_BUTTON_THRESHOLD_TIME_US && !inactive) {
screenKey = IDLE_SCREEN;

View File

@ -17,9 +17,9 @@
#define BL_PIN 25
// BUTTONS PINOUT
#define K1_PIN 33
#define K2_PIN 35
#define K3_PIN 34
#define K1_PIN 27
#define K2_PIN 26
#define K3_PIN 33
#define K4_PIN 32
// SPEAKER PINOUT
@ -183,12 +183,4 @@ extern Line_t** currentLine;
extern struct SpriteData mainCharacterSprites;
// ALTAMENTE TEMPORAL
extern int xPos;
extern int yPos;
#include <TFT_eSPI.h>
extern TFT_eSPI tft;
#endif

14
src/defs/screen_defs.h Normal file
View File

@ -0,0 +1,14 @@
#ifndef SCREEN_DEFS_H
#define SCREEN_DEFS_H
#include <TFT_eSPI.h>
extern TFT_eSPI tft;
extern TFT_eSprite composite1;
extern TFT_eSprite composite2;
// ALTAMENTE TEMPORAL
extern int xPos;
extern int yPos;
#endif

View File

@ -1,33 +1,75 @@
#include "display.h"
#include "defs/screen_defs.h"
int xPos = 0;
int yPos = 0;
static const int BUF_W = 240;
static const int BUF_H = 120;
void tft_initDisplay(TFT_eSPI &tft, uint16_t color) {
tft.init();
tft.setRotation(1);
tft.fillScreen(color);
tft.fillScreen(TFT_RED);
}
void tft_initScreenBuffer(TFT_eSprite &buffer, uint16_t color) {
buffer.createSprite(SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1);
buffer.fillSprite(color);
buffer.setTextColor(TFT_BLACK);
buffer.setTextSize(4);
buffer.pushSprite(0, 0);
void tft_initScreenBuffer(uint16_t color) {
bool status = composite1.createSprite(240, 120);
composite1.fillSprite(TFT_BLUE);
composite1.setTextColor(TFT_BLACK);
composite1.setTextSize(4);
composite1.pushSprite(0, 0);
printf("STATUS1: %i", status);
status = composite2.createSprite(240, 120);
composite2.fillSprite(TFT_BLUE);
composite2.setTextColor(TFT_BLACK);
composite2.setTextSize(4);
composite2.pushSprite(0, 120);
}
void tft_drawBuffer(TFT_eSprite &buffer) {
buffer.pushSprite(xPos * -80, yPos * -112);
void tft_drawBuffer() {
tft.startWrite();
composite1.pushSprite(xPos * -80, yPos * -112);
composite2.pushSprite(xPos * -80, (yPos * -112) + BUF_H);
tft.endWrite();
}
void tft_clearBuffer(TFT_eSprite &buffer, uint16_t color) {
buffer.fillSprite(color);
void tft_clearBuffer(TFT_eSprite &composite, uint16_t color) {
composite.fillSprite(color);
}
void tft_drawCenteredText(TFT_eSprite &buffer, const char* text, int factor, int y) {
size_t textWidth = strlen(text) * factor * 6;
int x = (SCREEN_WIDTH - textWidth) / 2;
buffer.setTextSize(factor);
buffer.drawString(text, x, y);
void tft_clearBuffer(uint16_t color) {
composite1.fillSprite(color);
composite2.fillSprite(color);
}
void tft_drawCenteredText(const char* text, int size, int yGlobal) {
int textW = strlen(text) * size * 6;
int x = (SCREEN_WIDTH - textW) / 2;
if (yGlobal < BUF_H) {
// only top half
composite1.setTextSize(size);
composite1.setTextColor(TFT_BLACK);
composite1.drawString(text, x, yGlobal);
} else {
// only bottom half, adjust local Y
int yLocal = yGlobal - BUF_H;
composite2.setTextSize(size);
composite2.setTextColor(TFT_BLACK);
composite2.drawString(text, x, yLocal);
}
}
void tft_drawText(const char* text, uint8_t size, uint8_t x, uint8_t y, uint16_t color) {
composite1.setTextSize(size);
composite1.setTextColor(color);
composite1.drawString(text, x, y);
composite2.setTextSize(size);
composite2.setTextColor(color);
composite2.drawString(text, x, y - BUF_H);
}

View File

@ -7,9 +7,11 @@ const int SCREEN_WIDTH = 240;
const int SCREEN_HEIGHT = 240;
void tft_initDisplay(TFT_eSPI &tft, uint16_t color = TFT_WHITE);
void tft_initScreenBuffer(TFT_eSprite &spr, uint16_t color = TFT_WHITE);
void tft_drawBuffer(TFT_eSprite &buffer);
void tft_initScreenBuffer(uint16_t color = TFT_WHITE);
void tft_drawBuffer();
void tft_clearBuffer(TFT_eSprite &buffer, uint16_t color = TFT_WHITE);
void tft_drawCenteredText(TFT_eSprite &buffer, const char* text, int factor, int y);
void tft_clearBuffer(uint16_t color = TFT_WHITE);
void tft_drawCenteredText(const char* text, int factor, int y);
void tft_drawText(const char* text, uint8_t size, uint8_t x, uint8_t y, uint16_t color = TFT_BLACK);
#endif

View File

@ -4,15 +4,13 @@
#include <TFT_eSPI.h>
void draw_drawSprite(
TFT_eSprite &buffer, TFT_eSprite &tft,
int x, int y,
TFT_eSprite &tft, int x, int y,
struct SpriteData* spriteData, uint8_t spriteNumber,
uint8_t factor, bool flipHorizontal = false
);
void draw_drawBackground(TFT_eSprite &buffer, TFT_eSprite &bg, int spr_w, int spr_h, int factor);
void draw_drawBackground(TFT_eSprite &bg, int spr_w, int spr_h, int factor);
void draw_drawSpriteCentered(
TFT_eSprite &buffer, TFT_eSprite &spr,
struct SpriteData* spriteData, uint8_t spriteNumber, uint8_t factor, bool flipped = false, int y = -1
TFT_eSprite &spr, struct SpriteData* spriteData, uint8_t spriteNumber, uint8_t factor, bool flipped = false, int y = -1
);
#endif

View File

@ -1,9 +1,10 @@
#include "draw.h"
#include "defs/screen_defs.h"
const char* TAG_DB = "[DRAW BG]";
void draw_drawBackground(TFT_eSprite &buffer, TFT_eSprite &bg, int spr_w, int spr_h, int factor) {
void draw_drawBackground(TFT_eSprite &bg, int spr_w, int spr_h, int factor) {
int scaledWidth = spr_w * factor;
int scaledHeight = spr_h * factor;
@ -13,7 +14,9 @@ void draw_drawBackground(TFT_eSprite &buffer, TFT_eSprite &bg, int spr_w, int sp
int srcY = sy / factor;
uint16_t color = bg.readPixel(srcX, srcY);
buffer.drawPixel(sx, sy, color);
composite1.drawPixel(sx, sy, color);
composite2.drawPixel(sx, sy - 120, color);
}
}
}

View File

@ -1,14 +1,15 @@
#include "draw.h"
#include "defs/sprite_data.h"
#include "defs/screen_defs.h"
#define BUFFER_X 239
#define BUFFER_Y 239
#define BUFFER_X 240
#define BUFFER_Y 240
const char* TAG_D = "[DRAW]";
void draw_drawSprite(
TFT_eSprite &buffer, TFT_eSprite &spr, int x, int y,
TFT_eSprite &spr, int x, int y,
struct SpriteData* spriteData, uint8_t spriteNumber, uint8_t factor, bool flipHorizontal
) {
int scaledWidth = spriteData->spriteWidth * factor;
@ -33,13 +34,14 @@ void draw_drawSprite(
}
}
spr.pushToSprite(&buffer, x, y, TFT_TRANSPARENT);
spr.pushToSprite(&composite1, x, y, TFT_TRANSPARENT);
spr.pushToSprite(&composite2, x, y - 120, TFT_TRANSPARENT);
//printf("%s: Sprite %d drawn at (%d, %d) %s\n", TAG_D, spriteNumber, x, y, (flipHorizontal ? "flipped" : ""));
}
void draw_drawSpriteCentered(
TFT_eSprite &buffer, TFT_eSprite &spr,
TFT_eSprite &spr,
struct SpriteData* spriteData, uint8_t spriteNumber, uint8_t factor, bool flipped, int y
) {
int x = (BUFFER_X - (spriteData->spriteWidth * factor)) / 2;
@ -51,7 +53,7 @@ void draw_drawSpriteCentered(
}
draw_drawSprite(
buffer, spr, x, new_y,
spr, x, new_y,
spriteData, spriteNumber, factor, flipped
);
}

7
src/energy/energy.h Normal file
View File

@ -0,0 +1,7 @@
#ifndef ENERGY_H
#define ENERGY_H
void energy_startLightSleep();
void energy_setUpLightSleep();
#endif

View File

@ -0,0 +1,45 @@
#include "energy.h"
#include <Arduino.h>
#include "defs/defs.h"
#include "display/display.h"
#include "driver/rtc_io.h"
#include "defs/screen_defs.h"
#define SLEEP_TIME_US 15000000ull
#define BUTTON_PIN_BITMASK(GPIO) (1ULL << GPIO) // Macro for individual GPIO bitmask
void energy_setUpLightSleep() {
// Enable EXT1 wake-up source
esp_err_t result = esp_sleep_enable_ext0_wakeup(GPIO_NUM_32, 0);
if (result == ESP_OK) {
Serial.println("EXT1 Wake-Up set successfully.");
} else {
Serial.println("Failed to set EXT1 Wake-Up as wake-up source.");
}
//esp_sleep_enable_timer_wakeup(SLEEP_TIME_US);
}
void energy_startLightSleep() {
esp_light_sleep_start();
// 6) Figure out which woke you
auto cause = esp_sleep_get_wakeup_cause();
if (cause == ESP_SLEEP_WAKEUP_EXT1) {
uint64_t mask = esp_sleep_get_ext1_wakeup_status();
int pin = mask ? __builtin_ctzll(mask) : -1;
Serial.printf("Woke by button on GPIO %d\n", pin);
} else if (cause == ESP_SLEEP_WAKEUP_TIMER) {
Serial.println("Woke by timer");
} else {
Serial.printf("Other wakeup: %d\n", cause);
}
byte pinValue = digitalRead(26);
Serial.println(pinValue);
// 7) Re-init your display (SPI.begin(), tft.init(), redraw…)
}

View File

@ -11,12 +11,16 @@
#include "vpet/vpet.h"
#include "vpet/steps/steps.h"
#include "vpet/lines/lines.h"
#include "energy/energy.h"
#include "driver/rtc_io.h"
const char* TAG = "[MAIN]";
// TFT_eSPI stuff, important
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite composite = TFT_eSprite(&tft);
TFT_eSprite composite1 = TFT_eSprite(&tft);
TFT_eSprite composite2 = TFT_eSprite(&tft);
TFT_eSprite sprite = TFT_eSprite(&tft);
TFT_eSprite bg = TFT_eSprite(&tft);
@ -66,14 +70,14 @@ void secondCoreTask(void*);
void loop_readSteps(void*);
void setup() {
Serial.begin(115200);
//Serial.begin(115200);
delay(100); // Give MPU6050 and ESP32 time to power up
Wire.begin(MPU_SDA_PIN, MPU_SCL_PIN); // I2C init before MPU6050
mpu.initialize();
tft_initDisplay(tft, TFT_BLACK);
tft_initScreenBuffer(composite, TFT_BLACK);
tft_initScreenBuffer(TFT_BLACK);
storage_init();
@ -82,99 +86,106 @@ void setup() {
storage_initBackground("/bg.bin", bg);
pinMode(K1_PIN, INPUT_PULLUP);
pinMode(K2_PIN, INPUT_PULLUP);
pinMode(K3_PIN, INPUT_PULLUP);
pinMode(K4_PIN, INPUT_PULLUP);
pinMode(K1_PIN, INPUT_PULLDOWN);
pinMode(K2_PIN, INPUT_PULLDOWN);
pinMode(K3_PIN, INPUT_PULLDOWN);
pinMode(K4_PIN, INPUT_PULLDOWN);
xTaskCreatePinnedToCore(secondCoreTask, "VPET_EVAL", 4096, NULL, 0, &secondLoop, 0);
lines_initLineStorage();
vpet_initTimer();
energy_setUpLightSleep();
}
void loop() {
if (screenOff) {
printf("[TEST] Going to sleep\n");
energy_startLightSleep();
}
switch (screenKey) {
case TITLE_SCREEN:
menu_drawTitle(composite, bg);
menu_drawTitle(bg);
break;
case CLOCK_EDIT_SCREEN:
menu_drawClockEdit(composite, bg);
menu_drawClockEdit(bg);
break;
case CLOCK_SCREEN:
menu_drawClock(composite, bg, menuKey);
menu_drawClock(bg);
break;
case IDLE_SCREEN:
menu_drawIdleScreen(composite, bg, sprite, &mainCharacterSprites, &menuElementsData, &uiElementsData);
menu_drawIdleScreen(bg, sprite, &mainCharacterSprites, &menuElementsData, &uiElementsData);
break;
case MENU_SCREEN:
menu_drawCurrentMenuOption(composite, bg, sprite, &menuElementsData);
menu_drawCurrentMenuOption(bg, sprite, &menuElementsData);
break;
case STATUS_SCREEN:
menu_statusScreen(composite, bg, sprite, &uiElementsData, &charaData);
menu_statusScreen(bg, sprite, &uiElementsData, &charaData);
break;
case OFF_SCREEN:
menu_offScreen(composite);
menu_offScreen();
break;
case TIMER_FINISHED_SCREEN:
menu_timerFinishedScreen(composite, bg, sprite, &mainCharacterSprites);
menu_timerFinishedScreen(bg, sprite, &mainCharacterSprites);
break;
case FOOD_SCREEN:
menu_foodScreen(composite, bg, sprite, &uiElementsData);
menu_foodScreen(bg, sprite, &uiElementsData);
break;
case FEEDING_SCREEN:
menu_feedingScreen(composite, bg, sprite, &uiElementsData, &mainCharacterSprites, submenuKey);
menu_feedingScreen(bg, sprite, &uiElementsData, &mainCharacterSprites, submenuKey);
break;
case REFUSING_SCREEN:
menu_refuseScreen(composite, bg, sprite, &mainCharacterSprites);
menu_refuseScreen(bg, sprite, &mainCharacterSprites);
break;
case SLEEPY_SCREEN:
menu_sleepyScreen(composite, bg, sprite, &mainCharacterSprites, &menuElementsData);
menu_sleepyScreen(bg, sprite, &mainCharacterSprites, &menuElementsData);
break;
case SLEEP_SCREEN:
menu_sleepingScreen(composite, bg, sprite, &mainCharacterSprites, &menuElementsData, &uiElementsData);
menu_sleepingScreen(bg, sprite, &mainCharacterSprites, &menuElementsData, &uiElementsData);
break;
case CARE_MISTAKE_SCREEN:
menu_careMistakeScreen(composite, bg, sprite, &mainCharacterSprites, &menuElementsData);
menu_careMistakeScreen(bg, sprite, &mainCharacterSprites, &menuElementsData);
break;
case POOPING_SCREEN:
menu_poopScreen(composite, bg, sprite, &mainCharacterSprites, &uiElementsData, &menuElementsData);
menu_poopScreen(bg, sprite, &mainCharacterSprites, &uiElementsData, &menuElementsData);
break;
case CLEAR_POOP_SCREEN:
menu_clearPoopScreen(composite, bg, sprite, &mainCharacterSprites, &menuElementsData, &uiElementsData);
menu_clearPoopScreen(bg, sprite, &mainCharacterSprites, &menuElementsData, &uiElementsData);
break;
case HAPPY_SCREEN:
menu_drawHappyScreen(composite, bg, sprite, &mainCharacterSprites, &uiElementsData);
menu_drawHappyScreen(bg, sprite, &mainCharacterSprites, &uiElementsData);
break;
case EGG_HATCH_SCREEN:
menu_eggHatchScreen(composite, bg, sprite, &menuElementsData, &uiElementsData);
menu_eggHatchScreen(bg, sprite, &menuElementsData, &uiElementsData);
break;
case EGG_SELECT_SCREEN:
menu_lineSwitcher(composite, bg, sprite, &uiElementsData);
menu_lineSwitcher(bg, sprite, &uiElementsData);
break;
case EGG_EMPTY_SCREEN:
menu_drawDeathScreen(composite, bg, sprite, &menuElementsData, &uiElementsData);
menu_drawDeathScreen( bg, sprite, &menuElementsData, &uiElementsData);
break;
}

View File

@ -8,7 +8,7 @@
uint64_t lastBeepTime = esp_timer_get_time();
uint8_t beepCounter = 0;
void menu_careMistakeScreen(TFT_eSprite &composite, 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();
@ -22,13 +22,13 @@ void menu_careMistakeScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite
}
if (currentTime - lastUpdateTime > ANIMATION_THRESHOLD_TIME_US) {
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawBackground(bg, 90, 90, 3);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
animate_performAttentionAnimation(composite, sprite, spriteData);
animate_performAttentionAnimation(sprite, spriteData);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
menu_uiOverlay(composite, sprite, uiSpritesBig);
menu_uiOverlay(sprite, uiSpritesBig);
lastUpdateTime = currentTime;
}
@ -38,5 +38,5 @@ void menu_careMistakeScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite
beepCounter = 0;
}
tft_drawBuffer(composite);
tft_drawBuffer();
}

View File

@ -4,8 +4,9 @@
#include "display/display.h"
#include "buttons/buttons.h"
#include "vpet/vpet.h"
#include "defs/screen_defs.h"
void menu_drawClock(TFT_eSprite &composite, TFT_eSprite &bg, int menuOption) {
void menu_drawClock(TFT_eSprite &bg) {
uint8_t pressedButtons = buttons_getPressedButtons();
switch (pressedButtons) {
case K2_PRESSED:
@ -18,21 +19,18 @@ void menu_drawClock(TFT_eSprite &composite, TFT_eSprite &bg, int menuOption) {
char hourBuffer[6];
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawBackground(bg, 90, 90, 3);
snprintf(hourBuffer, 6, "%02d:%02d", timeInfo.tm_hour, timeInfo.tm_min);
composite.setTextSize(4);
composite.drawString(hourBuffer, 40, 90);
tft_drawText(hourBuffer, 4, 40, 90);
sniprintf(hourBuffer, 3, "%02d", timeInfo.tm_sec);
composite.setTextSize(2);
composite.drawString(hourBuffer, 170, 104);
tft_drawBuffer(composite);
tft_drawText(hourBuffer, 2, 170, 104);
tft_drawBuffer();
}
void menu_drawClockEdit(TFT_eSprite &composite, TFT_eSprite &bg) {
void menu_drawClockEdit(TFT_eSprite &bg) {
char textBuffer[6];
static int clockHourCount = 0;
@ -64,13 +62,12 @@ void menu_drawClockEdit(TFT_eSprite &composite, TFT_eSprite &bg) {
break;
}
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawBackground(bg, 90, 90, 3);
snprintf(textBuffer, 6, "%02d:%02d", clockHourCount, clockMinuteCount);
composite.setTextSize(4);
composite.drawString(textBuffer, 40, 90);
composite.drawString("SET", 40, 122);
tft_drawText(textBuffer, 4, 40, 90);
tft_drawText("SET", 4, 40, 122);
tft_drawBuffer(composite);
tft_drawBuffer();
}

View File

@ -6,7 +6,7 @@
#include "defs/sprite_data.h"
#include "vpet/lines/lines.h"
void menu_drawDeathScreen(TFT_eSprite &composite, 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();
@ -32,15 +32,15 @@ void menu_drawDeathScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &
}
if (currentTime - lastUpdateTime > ANIMATION_THRESHOLD_TIME_US) {
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawSprite(composite, sprite, 72 + (6 * (frameCounter == 0)), 72, uiBigSprite, EMPTY_EGG, 6);
draw_drawBackground(bg, 90, 90, 3);
draw_drawSprite(sprite, 72 + (6 * (frameCounter == 0)), 72, uiBigSprite, EMPTY_EGG, 6);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
menu_uiOverlay(composite, sprite, uiSmallSprite);
menu_uiOverlay(sprite, uiSmallSprite);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
frameCounter = (frameCounter + 1) % 32;
lastUpdateTime = currentTime;
}
tft_drawBuffer(composite);
tft_drawBuffer();
}

View File

@ -9,7 +9,7 @@
#include "vpet/vpet.h"
#include "vpet/lines/lines.h"
void menu_eggHatchScreen(TFT_eSprite &composite, 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 frameCounter = 0;
@ -30,13 +30,13 @@ void menu_eggHatchScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &s
uint64_t currentTime = esp_timer_get_time();
if (currentTime - lastUpdateTime > ANIMATION_THRESHOLD_TIME_US) {
if (charaData.hatchTimer <= currentLine[currentCharacter]->hatchTime) {
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawSpriteCentered(composite, sprite, &currentEgg->eggSprite, eggSpriteFrame, 6);
draw_drawBackground(bg, 90, 90, 3);
draw_drawSpriteCentered(sprite, &currentEgg->eggSprite, eggSpriteFrame, 6);
eggSpriteFrame = !eggSpriteFrame;
lastUpdateTime = currentTime;
tft_drawBuffer(composite);
tft_drawBuffer();
} else if (charaData.hatchTimer > currentLine[currentCharacter]->hatchTime && !charaData.hatched) {
@ -44,16 +44,16 @@ void menu_eggHatchScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &s
tone(SPK_PIN, 4100, 35);
tone(SPK_PIN, 3500, 35);
draw_drawBackground(composite, bg, 90, 90, 3);
animate_performHatchingAnimation(composite, sprite, &currentEgg->eggSprite);
draw_drawBackground(bg, 90, 90, 3);
animate_performHatchingAnimation(sprite, &currentEgg->eggSprite);
tft_drawBuffer(composite);
tft_drawBuffer();
}
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawSpriteCentered(composite, sprite, &currentEgg->eggSprite, 2, 6);
draw_drawBackground(bg, 90, 90, 3);
draw_drawSpriteCentered(sprite, &currentEgg->eggSprite, 2, 6);
tft_drawBuffer(composite);
tft_drawBuffer();
delay(2000);

View File

@ -9,7 +9,7 @@
#include "defs/chara_data.h"
void menu_lineSwitcher(TFT_eSprite &composite, 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();
@ -34,13 +34,13 @@ void menu_lineSwitcher(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &spr
break;
}
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawBackground(bg, 90, 90, 3);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
draw_drawSpriteCentered(composite, sprite, &eggSelection[eggCounter].eggSprite, 0, 6);
draw_drawSpriteCentered(sprite, &eggSelection[eggCounter].eggSprite, 0, 6);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
draw_drawSprite(composite, sprite, 194, 96, uiSmallSprite, ARROW_ICON, 6);
draw_drawSprite(sprite, 194, 96, uiSmallSprite, ARROW_ICON, 6);
tft_drawBuffer(composite);
tft_drawBuffer();
}
void menu_reloadEggs(uint8_t selectedEgg) {

View File

@ -5,7 +5,7 @@
#include "display/display.h"
void menu_feedingScreen(
TFT_eSprite &composite, 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;
@ -13,13 +13,13 @@ void menu_feedingScreen(
uint64_t currentTime = esp_timer_get_time();
if (currentTime - lastUpdateTime > ANIMATION_THRESHOLD_TIME_US) {
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawBackground(bg, 90, 90, 3);
tft_clearBuffer(charaSprite, TFT_TRANSPARENT);
animate_performEatingAnimation(composite, charaSprite, charaSpriteData);
animate_performEatingAnimation(charaSprite, charaSpriteData);
tft_clearBuffer(charaSprite, TFT_TRANSPARENT);
draw_drawSprite(composite, charaSprite, 24, 120, uiSpriteData, item, 6);
draw_drawSprite(charaSprite, 24, 120, uiSpriteData, item, 6);
lastUpdateTime = currentTime;
currentAnimationFrame++;
@ -32,7 +32,7 @@ void menu_feedingScreen(
submenuKey = -1;
}
tft_drawBuffer(composite);
tft_drawBuffer();
uint8_t pressedButtons = buttons_getPressedButtons();
switch (pressedButtons) {

View File

@ -5,7 +5,7 @@
#include "defs/chara_data.h"
#include "vpet/vpet.h"
void menu_foodScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &mainChara, struct SpriteData* spriteData) {
void menu_foodScreen(TFT_eSprite &bg, TFT_eSprite &mainChara, struct SpriteData* spriteData) {
if (charaData.sleepy) {
tone(SPK_PIN, BEEP_FREQ_HZ, BEEP_LEN_MS);
delay(100);
@ -72,22 +72,21 @@ void menu_foodScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &mainC
vpet_computeCallLight();
}
composite.setTextSize(4);
draw_drawBackground(composite, bg, 90, 90, 3);
menu_foodScreen_drawEntry(composite, mainChara, spriteData, 0, FOOD_ICON, "Meat");
menu_foodScreen_drawEntry(composite, mainChara, spriteData, 1, PILL_ICON, "Pill");
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(composite, mainChara, 5, (arrowPosition * 34) + 5, spriteData, ARROW_ICON, 4);
draw_drawSprite(mainChara, 5, (arrowPosition * 34) + 5, spriteData, ARROW_ICON, 4);
tft_drawBuffer(composite);
tft_drawBuffer();
}
void menu_foodScreen_drawEntry(
TFT_eSprite &composite, TFT_eSprite &mainChara, struct SpriteData* spriteData,
TFT_eSprite &mainChara, struct SpriteData* spriteData,
uint8_t entryId, uint8_t spriteNumber, const char* textEntry
) {
tft_clearBuffer(mainChara, TFT_TRANSPARENT);
draw_drawSprite(composite, mainChara, 45, (entryId * 34) + 5, spriteData, spriteNumber, 4);
composite.drawString(textEntry, 80, (entryId * 34) + 5);
draw_drawSprite(mainChara, 45, (entryId * 34) + 5, spriteData, spriteNumber, 4);
tft_drawText(textEntry, 4, 80, (entryId * 34) + 5);
}

View File

@ -6,7 +6,7 @@
#include "animations/animations.h"
void menu_drawHappyScreen(
TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite,
TFT_eSprite &bg, TFT_eSprite &sprite,
struct SpriteData* spriteData, struct SpriteData* smallUiElements
) {
uint8_t frameCounter = 0;
@ -21,10 +21,10 @@ void menu_drawHappyScreen(
return;
}
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawBackground(bg, 90, 90, 3);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
animate_performHappyAnimation(composite, sprite, spriteData);
animate_performHappyAnimation(sprite, spriteData);
if (frameCounter % 2 == 0) {
tone(SPK_PIN, 7500, 50);
@ -33,14 +33,14 @@ void menu_drawHappyScreen(
tone(SPK_PIN, 1000, 50);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
draw_drawSprite(composite, sprite, 18, 72, smallUiElements, FIREWORKS_ICON, 6);
draw_drawSprite(composite, sprite, 174, 72, smallUiElements, FIREWORKS_ICON, 6);
draw_drawSprite(sprite, 18, 72, smallUiElements, FIREWORKS_ICON, 6);
draw_drawSprite(sprite, 174, 72, smallUiElements, FIREWORKS_ICON, 6);
}
frameCounter++;
lastUpdateTime = currentTime;
}
tft_drawBuffer(composite);
tft_drawBuffer();
}
}

View File

@ -8,7 +8,7 @@
uint64_t lastUpdateTime = esp_timer_get_time();
void menu_drawIdleScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct SpriteData* bigUiElements, struct SpriteData* smallUiElements) {
void menu_drawIdleScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct SpriteData* bigUiElements, struct SpriteData* smallUiElements) {
if (coldBoot) {
screenKey = TITLE_SCREEN;
return;
@ -45,19 +45,19 @@ void menu_drawIdleScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &s
uint64_t currentTime = esp_timer_get_time();
if (currentTime - lastUpdateTime > ANIMATION_THRESHOLD_TIME_US) {
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawBackground(bg, 90, 90, 3);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
uint8_t offsetX = menu_poopOverlay(composite, sprite, smallUiElements);
uint8_t offsetX = menu_poopOverlay(sprite, smallUiElements);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
animate_performAnimation(composite, sprite, spriteData, offsetX);
animate_performAnimation(sprite, spriteData, offsetX);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
menu_uiOverlay(composite, sprite, bigUiElements);
menu_uiOverlay(sprite, bigUiElements);
lastUpdateTime = currentTime;
}
tft_drawBuffer(composite);
tft_drawBuffer();
}

View File

@ -4,46 +4,46 @@
#include <TFT_eSPI.h>
#include "defs/defs.h"
void menu_drawCurrentMenuOption(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &icon, struct SpriteData* spriteData);
void menu_drawClock(TFT_eSprite &composite, TFT_eSprite &bg, int menuOption);
void menu_drawClockEdit(TFT_eSprite &composite, TFT_eSprite &bg);
void menu_drawTitle(TFT_eSprite &composite, TFT_eSprite &bg);
void menu_drawIdleScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct SpriteData* bigUiElements, struct SpriteData* smallUiElements);
void menu_offScreen(TFT_eSprite &buffer);
void menu_statusScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct CharacterData* charaData);
void menu_statusScreen_drawStat(TFT_eSprite &composite, TFT_eSprite &sprite, struct SpriteData* spriteData, int x, int y, const char* text, uint8_t statValue);
void menu_timerFinishedScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData);
void menu_uiOverlay(TFT_eSprite &composite, TFT_eSprite &charSprite, struct SpriteData* uiElements);
void menu_foodScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &mainChara, struct SpriteData* spriteData);
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_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, struct CharacterData* charaData);
void menu_statusScreen_drawStat(TFT_eSprite &sprite, struct SpriteData* spriteData, int x, int y, const char* text, uint8_t statValue);
void menu_timerFinishedScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData);
void menu_uiOverlay(TFT_eSprite &charSprite, struct SpriteData* uiElements);
void menu_foodScreen(TFT_eSprite &bg, TFT_eSprite &mainChara, struct SpriteData* spriteData);
void menu_foodScreen_drawEntry(
TFT_eSprite &composite, TFT_eSprite &mainChara, struct SpriteData* spriteData,
TFT_eSprite &mainChara, struct SpriteData* spriteData,
uint8_t entryId, uint8_t spriteNumber, const char* textEntry
);
void menu_feedingScreen(
TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &charaSprite,
TFT_eSprite &bg, TFT_eSprite &charaSprite,
struct SpriteData* uiSpriteData, struct SpriteData* charaSpriteData, uint8_t item
);
void menu_refuseScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &mainChara, struct SpriteData* spriteData);
void menu_sleepyScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* charaSprites, struct SpriteData* uiSprites);
void menu_careMistakeScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct SpriteData* uiSpritesBig);
void menu_refuseScreen(TFT_eSprite &bg, TFT_eSprite &mainChara, struct SpriteData* spriteData);
void menu_sleepyScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* charaSprites, struct SpriteData* uiSprites);
void menu_careMistakeScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct SpriteData* uiSpritesBig);
void menu_sleepingScreen(
TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite,
TFT_eSprite &bg, TFT_eSprite &sprite,
struct SpriteData* mainCharaData, struct SpriteData* bigUiElements, struct SpriteData* smallUIElements
);
void menu_poopScreen(
TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite,
TFT_eSprite &bg, TFT_eSprite &sprite,
struct SpriteData* spriteData, struct SpriteData* smallUiElements, struct SpriteData* bigUiElements
);
uint8_t menu_poopOverlay(TFT_eSprite &composite, TFT_eSprite &sprite, struct SpriteData* smallUiElements);
void menu_clearPoopScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct SpriteData* bigUiElements, struct SpriteData* smallUiElements);
uint8_t menu_poopOverlay(TFT_eSprite &sprite, struct SpriteData* smallUiElements);
void menu_clearPoopScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct SpriteData* bigUiElements, struct SpriteData* smallUiElements);
void menu_drawHappyScreen(
TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite,
TFT_eSprite &bg, TFT_eSprite &sprite,
struct SpriteData* spriteData, struct SpriteData* smallUiElements
);
void menu_lineSwitcher(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* uiSmallSprite);
void menu_eggHatchScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* uiBigSprite, struct SpriteData* uiSmallSprite);
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);
void menu_reloadEggs(uint8_t selectedEgg);
void menu_drawDeathScreen(TFT_eSprite &composite, 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);
void menu_sleepScreen_sleepAction();
void menu_sleepScreen_recalculateSleep();

View File

@ -11,8 +11,8 @@
const int textXPos = 10;
const int textYPos = 180;
void menu_drawCurrentMenuOption(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &icon, struct SpriteData* spriteData) {
draw_drawBackground(composite, bg, 90, 90, 3);
void menu_drawCurrentMenuOption(TFT_eSprite &bg, TFT_eSprite &icon, struct SpriteData* spriteData) {
draw_drawBackground(bg, 90, 90, 3);
uint8_t pressedButtons = buttons_getPressedButtons();
@ -58,40 +58,39 @@ void menu_drawCurrentMenuOption(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSp
return;
}
composite.setTextSize(4);
draw_drawSpriteCentered(composite, icon, spriteData, menuKey % 8, 6);
draw_drawSpriteCentered(icon, spriteData, menuKey % 8, 6);
switch(menuKey % 9) {
case STATUS_SCREEN_MENU:
tft_drawCenteredText(composite, "Status", 4, textYPos);
tft_drawCenteredText("Status", 4, textYPos);
break;
case FOOD_SCREEN_MENU:
tft_drawCenteredText(composite, "Food", 4, textYPos);
tft_drawCenteredText("Food", 4, textYPos);
break;
case TRAIN_SCREEN_MENU:
tft_drawCenteredText(composite, "Train", 4, textYPos);
tft_drawCenteredText("Train", 4, textYPos);
break;
case BATTLE_SCREEN_MENU:
tft_drawCenteredText(composite, "Battle", 4, textYPos);
tft_drawCenteredText("Battle", 4, textYPos);
break;
case POOP_SCREEN_MENU:
tft_drawCenteredText(composite, "Cleanup", 4, textYPos);
tft_drawCenteredText("Cleanup", 4, textYPos);
break;
case MEDICAL_SCREEN_MENU:
tft_drawCenteredText(composite, "Medical", 4, textYPos);
tft_drawCenteredText("Medical", 4, textYPos);
break;
case SLEEP_SCREEN_MENU:
tft_drawCenteredText(composite, "Sleep", 4, textYPos);
tft_drawCenteredText("Sleep", 4, textYPos);
break;
case SETTINGS_SCREEN_MENU:
tft_drawCenteredText(composite, "Settings", 4, textYPos);
tft_drawCenteredText("Settings", 4, textYPos);
break;
case 8:
@ -101,9 +100,9 @@ void menu_drawCurrentMenuOption(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSp
break;
}
menu_uiOverlay(composite, icon, spriteData);
menu_uiOverlay(icon, spriteData);
tft_drawBuffer(composite);
tft_drawBuffer();
}
void menu_sleepScreen_sleepAction() {

View File

@ -3,11 +3,13 @@
#include "buttons/buttons.h"
#include "display/display.h"
void menu_offScreen(TFT_eSprite &buffer) {
void menu_offScreen() {
uint8_t buttons = buttons_getPressedButtons();
if (buttons != 0) {
tft_drawBuffer(buffer);
tft_drawBuffer();
digitalWrite(BL_PIN, HIGH);
screenKey = IDLE_SCREEN;
} else {
screenOff = true;
}
}

View File

@ -6,17 +6,17 @@
#include "defs/sprite_data.h"
void menu_clearPoopScreen(
TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct SpriteData* bigUiElements, struct SpriteData* smallUiElements
TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct SpriteData* bigUiElements, struct SpriteData* smallUiElements
) {
int cleanerXPos = 174;
menu_drawIdleScreen(composite, bg, sprite, spriteData, bigUiElements, smallUiElements);
menu_drawIdleScreen(bg, sprite, spriteData, bigUiElements, smallUiElements);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
while (cleanerXPos > 18) {
draw_drawSprite(composite, sprite, cleanerXPos, 72, smallUiElements, CLEANER_ICON, 6);
draw_drawSprite(composite, sprite, cleanerXPos, 120, smallUiElements, CLEANER_ICON, 6);
tft_drawBuffer(composite);
draw_drawSprite(sprite, cleanerXPos, 72, smallUiElements, CLEANER_ICON, 6);
draw_drawSprite(sprite, cleanerXPos, 120, smallUiElements, CLEANER_ICON, 6);
tft_drawBuffer();
cleanerXPos -= 6;
delay(50);
}

View File

@ -5,14 +5,14 @@
#include "defs/chara_data.h"
#include "display/display.h"
uint8_t menu_poopOverlay(TFT_eSprite &composite, TFT_eSprite &sprite, struct SpriteData* smallUiElements) {
uint8_t menu_poopOverlay(TFT_eSprite &sprite, struct SpriteData* smallUiElements) {
static bool poopFlip = false;
const uint8_t poopStartY = 120;
uint8_t poopStartX = 174;
bool poopTop = false;
for (int i = 0; i < charaData.poopNumber; i++) {
draw_drawSprite(composite, sprite, poopStartX, poopStartY - (48 * poopTop), smallUiElements, POOP_ICON, 6, poopFlip);
draw_drawSprite(sprite, poopStartX, poopStartY - (48 * poopTop), smallUiElements, POOP_ICON, 6, poopFlip);
poopStartX -= (i % 2) * 48;
poopTop = !poopTop;
}

View File

@ -7,7 +7,7 @@
#include "defs/sprite_data.h"
void menu_poopScreen(
TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite,
TFT_eSprite &bg, TFT_eSprite &sprite,
struct SpriteData* spriteData, struct SpriteData* smallUiElements, struct SpriteData* bigUiElements
) {
uint8_t animationFrame = 0;
@ -19,13 +19,13 @@ void menu_poopScreen(
uint64_t currentTime = esp_timer_get_time();
if (currentTime - lastUpdateTime > ANIMATION_THRESHOLD_TIME_US && animationFrame < 4) {
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawBackground(bg, 90, 90, 3);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
draw_drawSprite(composite, sprite, 72 + (animationPosition * 6), 72, spriteData, 6, 6);
draw_drawSprite(sprite, 72 + (animationPosition * 6), 72, spriteData, 6, 6);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
menu_uiOverlay(composite, sprite, bigUiElements);
menu_uiOverlay(sprite, bigUiElements);
animationFrame++;
animationPosition = !animationPosition;
@ -42,16 +42,16 @@ void menu_poopScreen(
beepedAlready = true;
}
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawBackground(bg, 90, 90, 3);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
draw_drawSprite(composite, sprite, 174, 120, smallUiElements, POOP_ICON, 6);
draw_drawSprite(sprite, 174, 120, smallUiElements, POOP_ICON, 6);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
menu_uiOverlay(composite, sprite, bigUiElements);
menu_uiOverlay(sprite, bigUiElements);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
draw_drawSprite(composite, sprite, 72, 72, spriteData, 7, 6);
draw_drawSprite(sprite, 72, 72, spriteData, 7, 6);
animationFrame++;
animationPosition = !animationPosition;
@ -76,6 +76,6 @@ void menu_poopScreen(
break;
}
tft_drawBuffer(composite);
tft_drawBuffer();
}
}

View File

@ -6,7 +6,7 @@
#include "defs/sprite_data.h"
#include "animations/animations.h"
void menu_refuseScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &mainChara, struct SpriteData* spriteData) {
void menu_refuseScreen(TFT_eSprite &bg, TFT_eSprite &mainChara, struct SpriteData* spriteData) {
static uint8_t currentAnimationFrame = 0;
static bool soundPlayed = false;
@ -26,8 +26,8 @@ void menu_refuseScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &mai
}
if (currentTime - lastUpdateTime > ANIMATION_THRESHOLD_TIME_US) {
draw_drawBackground(composite, bg, 90, 90, 3);
animate_performRefuseAnimation(composite, mainChara, spriteData);
draw_drawBackground(bg, 90, 90, 3);
animate_performRefuseAnimation(mainChara, spriteData);
lastUpdateTime = currentTime;
currentAnimationFrame++;
@ -46,5 +46,5 @@ void menu_refuseScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &mai
screenKey = IDLE_SCREEN;
}
tft_drawBuffer(composite);
tft_drawBuffer();
}

View File

@ -6,7 +6,7 @@
#include "animations/animations.h"
#include "defs/chara_data.h"
void menu_sleepyScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* charaSprites, struct SpriteData* uiSprites) {
void menu_sleepyScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* charaSprites, struct SpriteData* uiSprites) {
if (!charaData.asleep && !charaData.sleepy) {
screenKey = IDLE_SCREEN;
return;
@ -30,16 +30,16 @@ void menu_sleepyScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &spr
}
if (currentTime - lastUpdateTime > ANIMATION_SLEEPY_THRESHOLD_TIME_US) {
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawBackground(bg, 90, 90, 3);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
animate_performSleepyAnimation(composite, sprite, charaSprites);
animate_performSleepyAnimation(sprite, charaSprites);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
menu_uiOverlay(composite, sprite, uiSprites);
menu_uiOverlay(sprite, uiSprites);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
menu_uiOverlay(composite, sprite, uiSprites);
menu_uiOverlay(sprite, uiSprites);
lastUpdateTime = currentTime;
}
@ -53,5 +53,5 @@ void menu_sleepyScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &spr
beepCounter++;
}
tft_drawBuffer(composite);
tft_drawBuffer();
}

View File

@ -7,7 +7,7 @@
#include "defs/chara_data.h"
void menu_sleepingScreen(
TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite,
TFT_eSprite &bg, TFT_eSprite &sprite,
struct SpriteData* mainCharaData, struct SpriteData* bigUiElements, struct SpriteData* smallUIElements
) {
if (charaData.sleepy && !charaData.asleep) {
@ -36,22 +36,22 @@ void menu_sleepingScreen(
}
if (currentTime - lastUpdateTime > ANIMATION_SLEEPY_THRESHOLD_TIME_US) {
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawBackground(bg, 90, 90, 3);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
animate_performSleepyAnimation(composite, sprite, mainCharaData);
animate_performSleepyAnimation(sprite, mainCharaData);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
draw_drawSprite(composite, sprite, 72, 72, bigUiElements, BED_SPRITE, 6);
draw_drawSprite(sprite, 72, 72, bigUiElements, BED_SPRITE, 6);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
draw_drawSprite(composite, sprite, 172, 72, smallUIElements, ZZZ_ICON, 6);
draw_drawSprite(sprite, 172, 72, smallUIElements, ZZZ_ICON, 6);
tft_clearBuffer(sprite, TFT_TRANSPARENT);
menu_uiOverlay(composite, sprite, bigUiElements);
menu_uiOverlay(sprite, bigUiElements);
lastUpdateTime = currentTime;
}
tft_drawBuffer(composite);
tft_drawBuffer();
}

View File

@ -6,7 +6,7 @@
#include "display/display.h"
#include "draw/draw.h"
void menu_statusScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct CharacterData* charaData) {
void menu_statusScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData, struct CharacterData* charaData) {
tft_clearBuffer(sprite, TFT_TRANSPARENT);
uint8_t pressedButtons = buttons_getPressedButtons();
@ -19,27 +19,25 @@ void menu_statusScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &spr
break;
}
draw_drawBackground(composite, bg, 90, 90, 3);
composite.setTextSize(4);
draw_drawBackground(bg, 90, 90, 3);
menu_statusScreen_drawStat(composite, sprite, spriteData, 10, 10, "Hunger", charaData->hunger);
menu_statusScreen_drawStat(composite, sprite, spriteData, 10, 80, "Strength", charaData->strength);
menu_statusScreen_drawStat(composite, sprite, spriteData, 10, 150, "Effort", charaData->effort);
menu_statusScreen_drawStat(sprite, spriteData, 10, 10, "Hunger", charaData->hunger);
menu_statusScreen_drawStat(sprite, spriteData, 10, 80, "Strength", charaData->strength);
menu_statusScreen_drawStat(sprite, spriteData, 10, 150, "Effort", charaData->effort);
tft_drawBuffer(composite);
tft_drawBuffer();
}
void menu_statusScreen_drawStat(TFT_eSprite &composite, TFT_eSprite &sprite, struct SpriteData* spriteData, int x, int y, const char* text, uint8_t statValue) {
void menu_statusScreen_drawStat(TFT_eSprite &sprite, struct SpriteData* spriteData, int x, int y, const char* text, uint8_t statValue) {
uint8_t icon;
composite.drawString(text, x, y);
tft_drawText(text, 4, x, y);
for (int i = 0; i < 4; i++) {
if (i < statValue) { icon = FULL_HEART_ICON; }
else { icon = EMPTY_HEART_ICON; }
draw_drawSprite(
composite,
sprite,
15 + (i * 32),
y + 30,

View File

@ -2,7 +2,7 @@
int interruptKey = -1;
void menu_timerFinishedScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData) {
void menu_timerFinishedScreen(TFT_eSprite &bg, TFT_eSprite &sprite, struct SpriteData* spriteData) {
lastPressedButtonTime = esp_timer_get_time();
digitalWrite(BL_PIN, HIGH);

View File

@ -4,20 +4,18 @@
#include "defs/defs.h"
#include "buttons/buttons.h"
void menu_drawTitle(TFT_eSprite &composite, TFT_eSprite &bg) {
void menu_drawTitle(TFT_eSprite &bg) {
uint8_t pressedButtons = buttons_getPressedButtons();
if (pressedButtons == 8 || pressedButtons == 4) {
screenKey = CLOCK_EDIT_SCREEN;
return;
}
draw_drawBackground(composite, bg, 90, 90, 3);
draw_drawBackground(bg, 90, 90, 3);
composite.setTextSize(4);
tft_drawCenteredText(composite, "NacaPet", 4, 40);
tft_drawCenteredText("NacaPet", 4, 40);
composite.setTextSize(2);
tft_drawCenteredText(composite, VERSION, 2, 80);
tft_drawCenteredText(VERSION, 2, 80);
tft_drawBuffer(composite);
tft_drawBuffer();
}

View File

@ -2,27 +2,23 @@
#include "draw/draw.h"
#include "display/display.h"
#include "defs/chara_data.h"
#include "defs/screen_defs.h"
void menu_uiOverlay(TFT_eSprite &composite, TFT_eSprite &charSprite, struct SpriteData* uiElements) {
void menu_uiOverlay(TFT_eSprite &charSprite, struct SpriteData* uiElements) {
struct tm timeInfo;
char hourBuffer[6];
composite.setTextSize(2);
composite.setTextColor(TFT_WHITE);
composite.fillRect(0, 0, 240, 24, TFT_BLACK);
getLocalTime(&timeInfo, RTC_TIMEOUT_THRESHOLD_TIME_MS);
snprintf(hourBuffer, 6, "%02d:%02d", timeInfo.tm_hour, timeInfo.tm_min);
composite.drawString(hourBuffer, 4, 4);
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);
composite.drawString(hourBuffer, 176, 4);
composite.setTextColor(TFT_BLACK);
if (charaData.careMistakeCallLight) {
tft_clearBuffer(charSprite, TFT_TRANSPARENT);
draw_drawSprite(composite, charSprite, 192, 192, uiElements, CARE_MISTAKE_CALL_LIGHT, 2);
draw_drawSprite(charSprite, 192, 192, uiElements, CARE_MISTAKE_CALL_LIGHT, 2);
}
}