Tiberian Technologies Scripts Reference Revision: 9000
Loading...
Searching...
No Matches
DefinitionMgrClass.h
1/* Renegade Scripts.dll
2 Copyright 2013 Tiberian Technologies
3
4 This file is part of the Renegade scripts.dll
5 The Renegade scripts.dll is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free
7 Software Foundation; either version 2, or (at your option) any later
8 version. See the file COPYING for more details.
9 In addition, an exemption is given to allow Run Time Dynamic Linking of this code with any closed source module that does not contain code covered by this licence.
10 Only the source code to the module(s) containing the licenced code has to be released.
11*/
12#ifndef TT_INCLUDE__DEFINITIONMGRCLASS_H
13#define TT_INCLUDE__DEFINITIONMGRCLASS_H
14
15#include "scripts.h"
16#include "engine_common.h"
17#include "engine_threading.h"
18#include "engine_string.h"
19#include "engine_vector.h"
20#include "PostLoadableClass.h"
21#include "SaveLoadSubSystemClass.h"
22#include "HashTemplateClass.h"
23class DefinitionClass;
24class ChunkSaveClass;
25class ChunkLoadClass;
26class DefinitionMgrClass : public SaveLoadSubSystemClass
27{
28private:
29#ifndef TTLE_EXPORTS
30 static HashTemplateClass<StringClass,DynamicVectorClass<DefinitionClass *> *>* DefinitionHash;
31 static int _MaxDefinitionCount;
32 SHARED_API static DefinitionClass **_SortedDefinitionArray;
33 static int _DefinitionCount;
34#endif
35public:
36 enum ID_TYPE
37 {
38 ID_CLASS = 1,
39 ID_SUPERCLASS = 2,
40 };
41 static unsigned long Get_New_ID(uint32 class_id);
42#ifndef TTLE_EXPORTS
43 SHARED_API static DefinitionClass* Find_Definition(uint32 id, bool twiddle);
44 SHARED_API static DefinitionClass* Find_Named_Definition(const char* name, bool twiddle);
45 SHARED_API static DefinitionClass* Find_Typed_Definition(const char* name, uint32 class_id, bool twiddle);
46 SHARED_API static void Register_Definition(DefinitionClass *definition);
47 SHARED_API static void Unregister_Definition(DefinitionClass *definition);
48#else
49 static DefinitionClass* Find_Definition(uint32 id, bool twiddle);
50 static DefinitionClass* Find_Named_Definition(const char* name, bool twiddle);
51 static DefinitionClass* Find_Typed_Definition(const char* name, uint32 class_id, bool twiddle);
52 static void Register_Definition(DefinitionClass *definition);
53 static void Unregister_Definition(DefinitionClass *definition);
54#endif
55 SHARED_API static DefinitionClass *Get_First(uint32 id,ID_TYPE type = ID_CLASS);
56#ifndef TTLE_EXPORTS
57 static DefinitionClass *Get_First()
58 {
59 return _SortedDefinitionArray[0];
60 }
61#endif
62 SHARED_API static DefinitionClass *Get_Next(DefinitionClass* curr_def,uint32 id,ID_TYPE type = ID_CLASS);
63 SHARED_API static DefinitionClass *Get_Next(DefinitionClass* curr_def);
64 SHARED_API static void Free_Definitions();
65 static void Prepare_Definition_Array();
66 static int fnCompareDefinitionsCallback(const void* elem1, const void* elem2);
67 DefinitionMgrClass();
68 bool Save_Objects(ChunkSaveClass& csave);
69 bool Load_Objects(ChunkLoadClass& cload);
70 bool Save_Variables(ChunkSaveClass& csave);
71 bool Load_Variables(ChunkLoadClass& cload);
72 virtual ~DefinitionMgrClass();
73 virtual uint32 Chunk_ID() const
74 {
75 return 0x101;
76 }
77 virtual bool Contains_Data() const
78 {
79 return true;
80 }
81 virtual bool Save(ChunkSaveClass& csave);
82 virtual bool Load(ChunkLoadClass& cload);
83 virtual const char* Name() const
84 {
85 return "DefinitionMgrClass";
86 }
87};
88
89#endif