summaryrefslogtreecommitdiffhomepage
path: root/nGenEx/DataLoader.h
blob: 87dbdbbc065052ade1fbd3c19df10d9d4acfcc5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*  Project nGenEx
    Destroyer Studios LLC
    Copyright © 1997-2004. All Rights Reserved.

    SUBSYSTEM:    nGenEx.lib
    FILE:         DataLoader.h
    AUTHOR:       John DiCamillo

*/

#ifndef DataLoader_h
#define DataLoader_h

#include "Types.h"
#include "List.h"
#include "Text.h"

// +--------------------------------------------------------------------+

class Bitmap;
class Sound;
class Video;

// +--------------------------------------------------------------------+

class DataLoader
{
public:
   static const char* TYPENAME() { return "DataLoader"; }

   enum { DATAFILE_OK, DATAFILE_INVALID, DATAFILE_NOTEXIST };

   DataLoader();
   
   static DataLoader*   GetLoader() { return loader; }
   static void          Initialize();
   static void          Close();

   void        Reset();
   void        UseFileSystem(bool use=true);
   void        UseVideo(Video* v);
   void        EnableMedia(bool enable=true);

   int         EnableDatafile(const char* name);
   int         DisableDatafile(const char* name);

   void        SetDataPath(const char* path);
   const char* GetDataPath() const { return datapath; }

   bool  IsFileSystemEnabled() const { return use_file_system; }
   bool  IsMediaLoadEnabled()  const { return enable_media;   }

   bool  FindFile(const char* fname);
   int   ListFiles(const char* filter, List<Text>& list, bool recurse=false);
   int   ListArchiveFiles(const char* archive, const char* filter, List<Text>& list);
   int   LoadBuffer(const char* name, BYTE*&  buf, bool null_terminate=false, bool optional=false);
   int   LoadBitmap(const char* name, Bitmap& bmp, int type=0, bool optional=false);
   int   CacheBitmap(const char* name, Bitmap*& bmp, int type=0, bool optional=false);
   int   LoadTexture(const char* name, Bitmap*& bmp, int type=0, bool preload_cache=false, bool optional=false);
   int   LoadSound(const char* fname, Sound*& snd, DWORD flags=0, bool optional=false);
   int   LoadStream(const char* fname, Sound*& snd, bool optional=false);

   void  ReleaseBuffer(BYTE*& buf);
   int   fread(void* buffer, size_t size, size_t count, BYTE*& stream);

private:
   int   LoadIndexed(const char* name, Bitmap& bmp, int type);
   int   LoadHiColor(const char* name, Bitmap& bmp, int type);
   int   LoadAlpha(  const char* name, Bitmap& bmp, int type);

   void  ListFileSystem(const char* filter, List<Text>& list, Text base_path, bool recurse);
   int   LoadPartialFile(const char* fname, BYTE*& buf, int max_load, bool optional=false);
   int   LoadOggStream(const char* fname, Sound*& snd);

   Text        datapath;
   Video*      video;
   bool        use_file_system;
   bool        enable_media;
   
   static DataLoader* loader;
};

// +--------------------------------------------------------------------+

#endif DataLoader_h