/** * Copyright (c) 2021 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #pragma once #include "../../libs.h" /** Type forwarder for timeline_t */ typedef struct _timeline_t timeline_t; /** Callback for when a timeline event occurs */ typedef void timelinecallback_t(timeline_t*); typedef struct test_t { /** * The time that this action should occur within the timeline * set to 0 or less to start immediately. */ float start; /** * The duration of the action, this will decide for how long onDuration will * be called for, and when onEnd should be called. * Set to a negative number to have this continue forever. * Set to 0 to only fire the onStart. * onStart can fire with either onDuration and onEnd on the same frame, but * onEnd and onDuration cannot fire the same frame. */ float duration; timelinecallback_t *onStart; timelinecallback_t *onDuration; timelinecallback_t *onEnd; } timelineaction_t; typedef struct _timeline_t { /** The current time as far as the timeline is concerned */ float current; /** The time of the last "frame" as far as the timeline is concerned */ float previous; /** The frame time diff, essentially current = previous + diff */ float diff; /** User pointer, allows you to point to some other data */ void *user; /** Actions within the timeline */ timelineaction_t actions[128]; uint8_t actionCount; } timeline_t;