/* date = August 14th 2023 5:00 pm */ #ifndef VN_SCENE_VIEW_H #define VN_SCENE_VIEW_H struct textbox { string String; s64 Capacity; r32 CharsRevealedT; r32 CharsRevealed; }; struct scene_view_character_texture_info { render_handle Texture; r32 Scale; }; struct scene_view_character_data { string Name; scene_view_character_texture_info Info; b32 Active; r32 ActiveT; b32 Talking; r32 TalkingT; r32 PctP; }; enum scene_nav_action_kind { S_NavAction_None, S_NavAction_Proc, S_NavAction_Scene, }; struct scene_nav_action { scene_nav_action_kind Kind; string Content; }; struct scene_nav_item { asset_id TextureID; r32 Scale; v2_r32 Origin; v2_r32 P; string HoverText; scene_nav_action Action; }; typedef u8 scene_nav_item_op; enum { S_NavItemOp_None = 0, S_NavItemOp_TextureID, S_NavItemOp_Scale, S_NavItemOp_Origin, S_NavItemOp_P, S_NavItemOp_HoverText, S_NavItemOp_Action, }; struct scene_nav { scene_nav_item *Items; s32 ItemCount; s32 ItemMax; }; struct scene_view { arena *SceneArena; //- sixten: state scene_runtime Runtime; textbox Textbox; //- sixten: characters s32 CharacterCount; scene_view_character_data Characters[16]; //- sixten: nav items scene_nav_item *NavItems; u64 NavItemCount; //- sixten: input per frame platform_event_list *EventList; r32 dtForFrame; //- sixten: temporary texture hub render_handle BackgroundTexture; render_handle TestHappy; render_handle TestNormal; render_handle MonikaLeaning; }; static void SV_SetState(scene_view *View); static scene_view *SV_GetState(); static void SV_NewFrame(scene_view *View, platform_event_list *EventList, r32 dtForFrame); static void SV_Reset(void); static void SV_SetCurrentSource(compiled_scene *Compiled); static void SV_Init(scene_view *View, arena *TextboxArena); static b32 SV_CurrentlyInProc(void); static scene_view_character_data *SV_FindTalkingCharacter(void); static string SV_DisplayNameFromCharacter(scene_view_character_data *Character); static void SV_DrawBackground(scene_view *SceneView, ui_box *Box, render_group *Group); static ui_signal SV_BuildNavItem(scene_nav_item * Item, r32 GlobalScale, v2_r32 GlobalDim); static void SV_BuildSceneView(vn_input *Input); static void SV_Update(arena *FrameArena); #endif //VN_SCENE_VIEW_H