- Habia un problema a la hora de los temporizadores del hambre y la fuerza
- Se me ha vuelto a romper la pantalla, asi que meti un mini hack para que funcione una pantalla de menor resolucion
- Añadida la mecanica del overfeed (la tengo que probar, no se siva)
- Añadida la mecanica de interrupción de suelo (esta, si que debería de funcionar, pero hasta que no consiga funcionar el cambio de bicho aqui no se prueba na)

COMO CAMARÓN
This commit is contained in:
Nacho
2025-05-29 03:37:46 +02:00
parent b35ff2d1b2
commit 43c10d02f5
17 changed files with 230 additions and 132 deletions
+1 -1
View File
@@ -53,7 +53,7 @@ void menu_drawClockEdit(TFT_eSprite &composite, TFT_eSprite &bg) {
// Es un dia random, nada significativo, ya pondre mas adelante que tenga dia del año
rtc.setTime(0, clockMinuteCount, clockHourCount, 1, 11, 2024);
getLocalTime(&timeInfo, 50);
dayUnixTime = mktime(&timeInfo) % 86400;
dayUnixTime = mktime(&timeInfo) % SECONDS_IN_DAY;
coldBoot = false;
+2
View File
@@ -49,6 +49,8 @@ void menu_reloadEggs(uint8_t selectedEgg) {
lines_freeEggList();
printf("[DEBUG] fileName=%s\n", fileName);
lines_getSingleLine(fileName);
lines_getLineCareMistakes(fileName);
+23 -22
View File
@@ -11,6 +11,29 @@ void menu_feedingScreen(
static int currentAnimationFrame = 0;
uint64_t currentTime = esp_timer_get_time();
if (currentTime - lastUpdateTime > ANIMATION_THRESHOLD_TIME_US) {
draw_drawBackground(composite, bg, 90, 90, 3);
tft_clearBuffer(charaSprite, TFT_TRANSPARENT);
animate_performEatingAnimation(composite, charaSprite, charaSpriteData);
tft_clearBuffer(charaSprite, TFT_TRANSPARENT);
draw_drawSprite(composite, charaSprite, 24, 120, uiSpriteData, item, 6);
lastUpdateTime = currentTime;
currentAnimationFrame++;
}
if (currentAnimationFrame > 6) {
screenKey = FOOD_SCREEN;
lastPressedButtonTime = currentTime;
currentAnimationFrame = 0;
submenuKey = -1;
}
tft_drawBuffer(composite);
uint8_t pressedButtons = buttons_getPressedButtons();
switch (pressedButtons) {
case 8:
@@ -24,26 +47,4 @@ void menu_feedingScreen(
default:
break;
}
if (currentTime - lastUpdateTime > ANIMATION_THRESHOLD_TIME_US) {
draw_drawBackground(composite, bg, 90, 90, 3);
tft_clearBuffer(charaSprite, TFT_TRANSPARENT);
animate_performEatingAnimation(composite, charaSprite, charaSpriteData);
tft_clearBuffer(charaSprite, TFT_TRANSPARENT);
draw_drawSprite(composite, charaSprite, 24, 120, uiSpriteData, item, 6);
lastUpdateTime = currentTime;
currentAnimationFrame++;
}
if (currentAnimationFrame > 6) {
screenKey = FOOD_SCREEN;
lastPressedButtonTime = currentTime;
currentAnimationFrame = 0;
submenuKey = -1;
}
tft_drawBuffer(composite);
}
+6 -2
View File
@@ -32,12 +32,14 @@ void menu_foodScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &mainC
}
if (pressedButtons == 4) {
lastUpdateTime = 0;
switch(arrowPosition) {
case 0:
if (charaData.hunger < 8) {
charaData.hungerCareMistakeTimer = charaData.initialStatsReductionTime;
charaData.hungerCareMistakeObtained = false;
charaData.weight++;
charaData.hunger++;
charaData.hungerCareMistakeTimer = charaData.initialStatsReductionTime;
screenKey = FEEDING_SCREEN;
submenuKey = FOOD_ICON;
} else {
@@ -47,18 +49,20 @@ void menu_foodScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &mainC
charaData.overfeedHappened = true;
}
}
return;
break;
case 1:
if (charaData.strength < 8) {
charaData.strengthCareMistakeTimer = charaData.initialStatsReductionTime;
charaData.strength++;
charaData.weight += 2;
charaData.strengthCareMistakeTimer = charaData.initialStatsReductionTime;
screenKey = FEEDING_SCREEN;
submenuKey = PILL_ICON;
} else {
screenKey = REFUSING_SCREEN;
}
return;
break;
default:
+3
View File
@@ -45,4 +45,7 @@ void menu_eggHatchScreen(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSprite &s
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_sleepScreen_sleepAction();
void menu_sleepScreen_recalculateSleep();
#endif
+37 -7
View File
@@ -17,11 +17,11 @@ void menu_drawCurrentMenuOption(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSp
uint8_t pressedButtons = buttons_getPressedButtons();
switch (pressedButtons) {
case 8:
case K1_PRESSED:
menuKey++;
break;
case 2:
case K3_PRESSED:
screenKey = IDLE_SCREEN;
menuKey = STATUS_SCREEN_MENU;
return;
@@ -31,7 +31,8 @@ void menu_drawCurrentMenuOption(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSp
break;
}
if (pressedButtons == 4) {
// Separaíto mas guapito
if (pressedButtons == K2_PRESSED) {
switch (menuKey) {
case STATUS_SCREEN_MENU:
screenKey = STATUS_SCREEN;
@@ -42,10 +43,7 @@ void menu_drawCurrentMenuOption(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSp
break;
case SLEEP_SCREEN_MENU:
charaData.asleep = true;
vpet_computeCallLight();
menuKey = STATUS_SCREEN;
screenKey = SLEEP_SCREEN;
menu_sleepScreen_sleepAction();
break;
case POOP_SCREEN_MENU:
@@ -107,3 +105,35 @@ void menu_drawCurrentMenuOption(TFT_eSprite &composite, TFT_eSprite &bg, TFT_eSp
tft_drawBuffer(composite);
}
void menu_sleepScreen_sleepAction() {
if (charaData.asleep && charaData.sleepy) {
menu_sleepScreen_recalculateSleep();
charaData.sleepy = false;
charaData.asleep = false;
charaData.sleepDisturbances++;
menuKey = STATUS_SCREEN;
screenKey = IDLE_SCREEN;
} else {
charaData.asleep = true;
vpet_computeCallLight(); // Lo hago por cortesia, no me gusta
menuKey = STATUS_SCREEN;
screenKey = SLEEP_SCREEN;
}
}
void menu_sleepScreen_recalculateSleep() {
uint32_t newSleepTime = (dayUnixTime + 3600) % SECONDS_IN_DAY;
uint32_t newWakeUpTime = charaData.wakeupTime + 3600;
charaData.sleepTime = newSleepTime;
charaData.wakeupTime = newWakeUpTime;
charaData.dynamicSleepDists++;
}