summaryrefslogtreecommitdiff
path: root/src/scenes/collectionScene.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/scenes/collectionScene.c')
-rw-r--r--src/scenes/collectionScene.c50
1 files changed, 39 insertions, 11 deletions
diff --git a/src/scenes/collectionScene.c b/src/scenes/collectionScene.c
index fff814a..508e4d5 100644
--- a/src/scenes/collectionScene.c
+++ b/src/scenes/collectionScene.c
@@ -12,11 +12,8 @@
static const size_t ARENA_SIZE = 1024 * 64;
typedef struct {
- Arena arena;
- char *DirPath;
- char *Name;
-
CollectionElement *collection;
+ Button *backButton;
size_t count;
} CollectionSceneData;
@@ -24,9 +21,20 @@ CollectionSceneData *getData(void *self) {
return ((Scene *)self)->data;
}
+void backButton_onClick(Scene *self) {
+ DeleteSceneFromStack();
+}
+
void collectionElement_onSelect(CollectionElement *caller) {
if (caller == NULL) return;
TraceLog(LOG_INFO, "Selected element %s", caller->name);
+ switch (caller->type) {
+ case COLLECTION_ELEMENT_PUZZLE: break;
+ case COLLECTION_ELEMENT_COLLECTION: AddScene(CreatePuzzleCollectionScene(caller)); break;
+ default:
+ TraceLog(LOG_WARNING, "Invalid CollectionElement type for %s", caller->path);
+ break;
+ }
}
void DrawCollectionName(char *name) {
@@ -54,14 +62,23 @@ bool updateCollectionScene(void *self) {
for (size_t i = 0; i < data->collection->childCount; ++i) {
UpdateCollectionElement(&data->collection->children[i]);
}
+ if (data->backButton != NULL) UpdateButton(data->backButton);
+
return true;
}
bool drawCollectionScene(void *self) {
CollectionSceneData *data = getData(self);
DrawBackground();
- DrawCollectionName(data->Name);
+ DrawCollectionName(data->collection->name);
DrawPageView(GetScreenHeight() - 60, 5, 2);
+ if (data->backButton != NULL)
+ DrawButton(data->backButton, &(Rectangle) {
+ .x = 10,
+ .y = GetScreenHeight() - 60,
+ .width = 36,
+ .height = 36, // TODO: make it match the page view scale
+ });
for (size_t i = 0; i < data->collection->childCount; ++i) {
DrawCollectionElement(&data->collection->children[i], data->collection, (Rectangle) {
@@ -78,13 +95,14 @@ void deinitCollectionScene(void *self) {
TraceLog(LOG_INFO, "Deleting a collection scene");
CollectionSceneData *data = getData(self);
if (data != NULL) {
- free(data->arena.mem);
+ if (data->collection != NULL)
+ DeinitCollectionElement(data->collection);
free(data);
}
free((Scene *)self);
}
-Scene *CreatePuzzleCollectionScene(char *path, CollectionElement *el) {
+Scene *CreatePuzzleCollectionScene(CollectionElement *el) {
TraceLog(LOG_INFO, "Creating a collection scene");
Scene *outp = malloc(sizeof(Scene));
if (outp == NULL) return NULL;
@@ -98,14 +116,24 @@ Scene *CreatePuzzleCollectionScene(char *path, CollectionElement *el) {
free(outp);
return NULL;
}
- data->arena = (Arena){0};
- ArenaInit(&data->arena, ARENA_SIZE);
- data->DirPath = ArenaStrdup(&data->arena, path);
- data->Name = getCollectionName(path);
if (!el->IsInitialized) InitializeCollection(el, collectionElement_onSelect);
data->collection = el;
+ Button *backButton = malloc(sizeof(Button));
+ if (backButton != NULL) {
+ backButton->parent = outp;
+ backButton->OnClick = backButton_onClick;
+ backButton->atlas = GetButtonsAtlas();
+ backButton->textrueLocation = (Rectangle) {
+ .x = 0,
+ .y = 0,
+ .width = 32,
+ .height = 32,
+ };
+ }
+ data->backButton = backButton;
+
outp->data = data;
return outp;