1#pragma once
2
3#include <ore/BinaryFile.h>
4#include <ore/EnumUtil.h>
5#include <ore/Types.h>
6
7namespace ore {
8struct ResEndian;
9struct ResMetaData;
10} // namespace ore
11
12namespace evfl {
13
14struct ResActor;
15
16struct ResTrigger {
17 u16 clip_index;
18 u8 trigger_type;
19};
20
21struct ResCut {
22 float start_time;
23 ore::BinTPtr<ore::BinString> name;
24 ore::BinTPtr<ore::ResMetaData> params;
25};
26
27struct ResClip {
28 float start_time;
29 float duration;
30 u16 actor_index;
31 u16 actor_action_index;
32 u8 _c;
33 ore::BinTPtr<ore::ResMetaData> params;
34};
35
36struct ResOneshot {
37 float time;
38 u16 actor_index;
39 u16 actor_action_index;
40 u32 _8;
41 u32 _c;
42 ore::BinTPtr<ore::ResMetaData> params;
43};
44
45struct ResSubtimeline {
46 ore::BinTPtr<ore::BinString> name;
47};
48
49struct ResTimeline {
50 /// 'TLIN'
51 u32 magic;
52 /// String pool offset (relative to this structure)
53 int string_pool_offset;
54 u32 reserved_8;
55 u32 reserved_c;
56 float duration;
57 u16 num_actors;
58 u16 num_actions;
59 u16 num_clips;
60 u16 num_oneshots;
61 u16 num_subtimelines;
62 u16 num_cuts;
63 ore::BinTPtr<ore::BinString> name;
64 ore::BinTPtr<ResActor> actors;
65 ore::BinTPtr<ResClip> clips;
66 ore::BinTPtr<ResOneshot> oneshots;
67 ore::BinTPtr<ResTrigger> triggers;
68 ore::BinTPtr<ResSubtimeline> subtimelines;
69 ore::BinTPtr<ResCut> cuts;
70 ore::BinTPtr<ore::ResMetaData> params;
71};
72
73void SwapEndian(ore::ResEndian* endian, ResTrigger* trigger);
74void SwapEndian(ore::ResEndian* endian, ResCut* cut);
75void SwapEndian(ore::ResEndian* endian, ResClip* clip);
76void SwapEndian(ore::ResEndian* endian, ResOneshot* oneshot);
77void SwapEndian(ore::ResEndian* endian, ResSubtimeline* subtimeline);
78void SwapEndian(ore::ResEndian* endian, ResTimeline* timeline);
79
80} // namespace evfl
81