1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef ENGINE_MAP_H
4#define ENGINE_MAP_H
5
6#include "kernel.h"
7
8#include <base/hash.h>
9#include <base/types.h>
10
11enum
12{
13 MAX_MAP_LENGTH = 128
14};
15
16class IMap : public IInterface
17{
18 MACRO_INTERFACE("map")
19public:
20 virtual int GetDataSize(int Index) const = 0;
21 virtual void *GetData(int Index) = 0;
22 virtual void *GetDataSwapped(int Index) = 0;
23 virtual const char *GetDataString(int Index) = 0;
24 virtual void UnloadData(int Index) = 0;
25 virtual int NumData() const = 0;
26
27 virtual int GetItemSize(int Index) = 0;
28 virtual void *GetItem(int Index, int *pType = nullptr, int *pId = nullptr) = 0;
29 virtual void GetType(int Type, int *pStart, int *pNum) = 0;
30 virtual int FindItemIndex(int Type, int Id) = 0;
31 virtual void *FindItem(int Type, int Id) = 0;
32 virtual int NumItems() const = 0;
33};
34
35class IEngineMap : public IMap
36{
37 MACRO_INTERFACE("enginemap")
38public:
39 [[nodiscard]] virtual bool Load(const char *pMapName) = 0;
40 virtual void Unload() = 0;
41 virtual bool IsLoaded() const = 0;
42 virtual IOHANDLE File() const = 0;
43
44 virtual SHA256_DIGEST Sha256() const = 0;
45 virtual unsigned Crc() const = 0;
46 virtual int MapSize() const = 0;
47};
48
49extern IEngineMap *CreateEngineMap();
50
51#endif
52