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.c68
1 files changed, 59 insertions, 9 deletions
diff --git a/src/scenes/collectionScene.c b/src/scenes/collectionScene.c
index f0f91f3..b8c1bc3 100644
--- a/src/scenes/collectionScene.c
+++ b/src/scenes/collectionScene.c
@@ -22,22 +22,51 @@ static const uint8_t ARROWS_ALPHA = 128;
static const float ELEMENT_WIDTH_RATIO = 0.45f;
typedef struct {
+ /// The collection we are displaying
CollectionElement *collection;
+ /// The collection we selected. Used in the transitions
CollectionElement *selected;
Button *backButton;
- size_t count;
float blackout_state;
PopUpState state;
float scroll;
} CollectionSceneData;
+
CollectionSceneData *getData(void *self) {
return ((Scene *)self)->data;
}
+PopUpState getCollectionSceneState(void *self) {
+ if (self == NULL) return POPUP_ACTIVE;
+ CollectionSceneData *data = getData(self);
+ if (data == NULL) return POPUP_ACTIVE;
+ return data->state;
+}
+
+
+void reopenCollectionScene(void *self, PopUpState PreviousSceneState) {
+ if (self == NULL) return;
+ CollectionSceneData *data = getData(self);
+ if (data == NULL) return;
+ if (data->state != POPUP_HIDING) printf("xdx\n");
+ switch (PreviousSceneState) {
+ case POPUP_HIDING:
+ data->state = POPUP_REVEALING;
+ data->blackout_state = 1.0f;
+ break;
+ default:
+ data->state = POPUP_ACTIVE;
+ break;
+ }
+}
+
static void backButton_onClick(Scene *self) {
- // CollectionSceneData *data = getData(self);
- DeleteSceneFromStack();
+ CollectionSceneData *data = getData(self);
+ data->state = POPUP_HIDING;
+ data->selected = NULL;
+ data->blackout_state = 0;
+ // DeleteSceneFromStack();
}
void collectionElement_onSelect(CollectionElement *caller) {
@@ -46,9 +75,18 @@ void collectionElement_onSelect(CollectionElement *caller) {
switch (caller->type) {
case COLLECTION_ELEMENT_PUZZLE:
AddScene(CreatePuzzlePreview(ReadPuzzleFromFile(caller->path)));
- break;
case COLLECTION_ELEMENT_COLLECTION:
- AddScene(CreatePuzzleCollectionScene(caller, false));
+ if (caller->callbackData == NULL) {
+ TraceLog(LOG_WARNING, "The callback data is NULL. Cannot initiate the smooth transition");
+ AddScene(CreatePuzzlePreview(ReadPuzzleFromFile(caller->path)));
+ } else {
+ TraceLog(LOG_WARNING, "The callback data is not NULL");
+ CollectionSceneData *data = ((Scene *)caller->callbackData)->data;
+ data->selected = caller;
+ data->state = POPUP_HIDING;
+ data->blackout_state = 0;
+ }
+ // AddScene(CreatePuzzleCollectionScene(caller, false));
break;
default:
TraceLog(LOG_WARNING, "Invalid CollectionElement type for %s", caller->path);
@@ -77,6 +115,7 @@ char *getCollectionName(char *path) {
bool updateCollectionScene(void *self) {
CollectionSceneData *data = getData(self);
+
if (data->state == POPUP_REVEALING) {
data->blackout_state -= BLACKOUT_SPEED * GetFrameTime();
if (data->blackout_state <= 0) {
@@ -87,6 +126,18 @@ bool updateCollectionScene(void *self) {
return true;
}
+ if (data->state == POPUP_HIDING) {
+ data->blackout_state += BLACKOUT_SPEED * GetFrameTime();
+ if (data->blackout_state >= 1) {
+ TraceLog(LOG_INFO, "Done hiding");
+ if (data->selected == NULL)
+ DeleteSceneFromStack();
+ else
+ AddScene(CreatePuzzleCollectionScene(data->selected, true));
+ }
+ return true;
+ }
+
if (data->collection != NULL) {
for (size_t i = 0; i < data->collection->childCount; ++i) {
UpdateCollectionElement(&data->collection->children[i]);
@@ -101,7 +152,6 @@ bool drawCollectionScene(void *self) {
CollectionSceneData *data = getData(self);
DrawBackground();
DrawCollectionName(data->collection->name);
- DrawPageView(GetScreenHeight() - 60, 5, 2);
if (data->backButton != NULL)
DrawButton(data->backButton, &(Rectangle) {
.x = 10,
@@ -180,8 +230,8 @@ Scene *CreatePuzzleCollectionScene(CollectionElement *el, bool smooothEntry) {
outp->Deint = deinitCollectionScene;
outp->IsTransparent = false;
- outp->Reopen = NULL;
- outp->GetCurrentState = NULL;
+ outp->Reopen = reopenCollectionScene;
+ outp->GetCurrentState = getCollectionSceneState;
CollectionSceneData *data = malloc(sizeof(CollectionSceneData));
if (data == NULL) {
@@ -189,7 +239,7 @@ Scene *CreatePuzzleCollectionScene(CollectionElement *el, bool smooothEntry) {
return NULL;
}
- if (!el->IsInitialized) InitializeCollection(el, collectionElement_onSelect);
+ if (!el->IsInitialized) InitializeCollection(el, collectionElement_onSelect, outp);
data->collection = el;
data->selected = NULL;
data->state = smooothEntry? POPUP_REVEALING : POPUP_ACTIVE;