vn/code/vn_scene_view.h

126 lines
2.3 KiB
C

/* 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