summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/DataLoader.h
blob: 0331dcbc6018c443b4e54ff8ffeb9f04eea2b62e (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
/*  Starshatter: The Open Source Project
    Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors
    Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
    Copyright (c) 1997-2006, Destroyer Studios LLC.

    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