/** * Copyright (c) 2021 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #pragma once #include "../libs.h" #include "vntextbox.h" #define VN_CONVERSATION_TEXT_COUNT_MAX 32 // Type Forwarders typedef struct _vnconversationtext_t vnconversationtext_t; typedef struct _vnconversation_t vnconversation_t; /** * Callback for conversation text events. * @param conversation Conversation this text is attached to. * @param text Text item that is being used in the callback */ typedef void vnconversationcallback_t(vnconversation_t *conversation, vnconversationtext_t *text ); typedef struct _vnconversationtext_t { /** Pointer to any custom user data for this text action. */ void *data; /** Conversation Type to decide what this data is used for */ uint8_t type; /** Pointer to the string for text to display */ char *text; /** Time in seconds to delay if type is delay */ float delay; /** Callback to fire the moment the text is active in the conversation */ vnconversationcallback_t *onStart; /** Callback to fire every update tick of this conversation element */ vnconversationcallback_t *onUpdate; /** Callback to fire when this conversation element is ended */ vnconversationcallback_t *onEnd; } vnconversationtext_t; /** Representation of a conversation, laid out similarly to a timeline. */ typedef struct _vnconversation_t { /** Internal Textbox for text elements */ vntextbox_t textbox; /** Array of text elements */ vnconversationtext_t texts[VN_CONVERSATION_TEXT_COUNT_MAX]; uint8_t textCount; /** Internal timeline tracking */ float timeline; /** When the current text was first attached */ float delayStart; /** Current index within the array of texts that is currently processing */ uint8_t textCurrent; } vnconversation_t;