TamaTac & SfxEngine + Sprite tools (#24)
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
/**
|
||||
* @file MainView.h
|
||||
* @brief Main pet view for TamaTac
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <lvgl.h>
|
||||
#include "PetLogic.h"
|
||||
#include "Sprites.h"
|
||||
|
||||
class TamaTac;
|
||||
|
||||
class MainView {
|
||||
private:
|
||||
TamaTac* app = nullptr;
|
||||
lv_obj_t* parent = nullptr;
|
||||
|
||||
// UI elements
|
||||
lv_obj_t* mainWrapper = nullptr;
|
||||
lv_obj_t* statusLabel = nullptr;
|
||||
lv_obj_t* petArea = nullptr;
|
||||
lv_obj_t* petCanvas = nullptr;
|
||||
lv_obj_t* poopContainer = nullptr;
|
||||
lv_obj_t* poopIcons[3] = {nullptr, nullptr, nullptr};
|
||||
lv_obj_t* statIcons[4] = {nullptr, nullptr, nullptr, nullptr};
|
||||
lv_obj_t* hungerBar = nullptr;
|
||||
lv_obj_t* happinessBar = nullptr;
|
||||
lv_obj_t* healthBar = nullptr;
|
||||
lv_obj_t* energyBar = nullptr;
|
||||
lv_obj_t* feedBtn = nullptr;
|
||||
lv_obj_t* playBtn = nullptr;
|
||||
lv_obj_t* medicineBtn = nullptr;
|
||||
lv_obj_t* sleepBtn = nullptr;
|
||||
|
||||
// Refresh timer for periodic UI updates
|
||||
lv_timer_t* refreshTimer = nullptr;
|
||||
DayPhase currentDayPhase = DayPhase::Day;
|
||||
|
||||
// Animation
|
||||
lv_timer_t* animTimer = nullptr;
|
||||
uint32_t animStartTime = 0;
|
||||
SpriteId currentSpriteId = SPRITE_EGG_IDLE;
|
||||
|
||||
// Polish effects
|
||||
uint32_t evolutionFlashUntil = 0; // Millis timestamp when flash ends (0 = no flash)
|
||||
uint32_t starSeed = 0; // Seed for deterministic star positions (changes slowly)
|
||||
|
||||
// Scaling
|
||||
int spriteScale = 3;
|
||||
int petCanvasSize = 72;
|
||||
|
||||
public:
|
||||
void onStart(lv_obj_t* parentWidget, TamaTac* appInstance);
|
||||
void onStop();
|
||||
|
||||
void updateUI(PetLogic* petLogic, LifeStage& lastKnownStage);
|
||||
void updateStatBars(PetLogic* petLogic);
|
||||
void updatePetDisplay(PetLogic* petLogic, LifeStage& lastKnownStage);
|
||||
void setStatusText(const char* text);
|
||||
|
||||
private:
|
||||
void drawSprite(SpriteId spriteId, const PetStats* stats = nullptr);
|
||||
void drawOverlays(SpriteId spriteId, const PetStats* stats);
|
||||
void drawIcon(lv_obj_t* canvas, IconId iconId);
|
||||
void drawIconWithBg(lv_obj_t* canvas, IconId iconId, lv_color_t bgColor, lv_color_t fgColor);
|
||||
SpriteId getSpriteForCurrentState(const PetStats& stats) const;
|
||||
|
||||
// Static event handlers
|
||||
static void onFeedClicked(lv_event_t* e);
|
||||
static void onPlayClicked(lv_event_t* e);
|
||||
static void onMedicineClicked(lv_event_t* e);
|
||||
static void onSleepClicked(lv_event_t* e);
|
||||
static void onPetTapped(lv_event_t* e);
|
||||
static void onRefreshTimer(lv_timer_t* timer);
|
||||
static void onAnimTimer(lv_timer_t* timer);
|
||||
};
|
||||
Reference in New Issue
Block a user