#pragma once

enum {
	STREAM_OFFSET_MODEL = 0,
	STREAM_OFFSET_TXD = STREAM_OFFSET_MODEL+MODELINFOSIZE,
	NUMSTREAMINFO = STREAM_OFFSET_TXD+TXDSTORESIZE
};

enum StreamFlags
{
	STREAM_DONT_REMOVE = 0x01,
	STREAM_SCRIPTOWNED = 0x02,
	STREAM_DEPENDENCY  = 0x04,
	STREAM_PRIORITY    = 0x08,
	STREAM_NOFADE      = 0x10,
};

enum StreamLoadState
{
	STREAM_NOTLOADED = 0,
	STREAM_LOADED    = 1,
	STREAM_INQUEUE   = 2,
	STREAM_READING   = 3,	// what is this?
	STREAM_BIGFILE   = 4,
};

class CStreamingInfo
{
public:
	CStreamingInfo *m_next;
	CStreamingInfo *m_prev;
	uint8 m_loadState;
	uint8 m_flags;

	int16  m_nextID;
	uint32 m_position;
	uint32 m_size;

//	bool GetCdPosnAndSize(uint32 *pos, uint32 *size);
//	void SetCdPosnAndSize(uint32 pos, uint32 size);
//	void AddToList(CStreamingInfo *link);
//	void RemoveFromList(void);
};

class CStreaming
{
public:
	static bool &ms_disableStreaming;
	static int32 &ms_numModelsRequested;
	static CStreamingInfo *ms_aInfoForModel;	//[NUMSTREAMINFO]

	static void RemoveModel(int32 id);
	static void RequestModel(int32 model, int32 flags);
};
