]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/models/models.qh
Merge branch 'master' into terencehill/tooltips_cleanup
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / models / models.qh
1 #ifndef MODELS_H
2 #define MODELS_H
3
4 #define setmodel(e, m) _setmodel((e), (m).model_str())
5
6 void RegisterModels();
7 const int MAX_MODELS = 128;
8 entity MODELS[MAX_MODELS], MODELS_first, MODELS_last;
9 int MODELS_COUNT;
10
11 CLASS(Model, Object)
12     ATTRIB(Model, m_id, int, 0)
13     ATTRIB(Model, model_str, string(), func_null)
14     CONSTRUCTOR(Model, string() path)
15     {
16         CONSTRUCT(Model);
17         this.model_str = path;
18     }
19     METHOD(Model, model_precache, void(entity this)) {
20         string s = this.model_str();
21         if (s != "" && s != "null" && !fexists(s)) {
22             LOG_WARNINGF("Missing model: \"%s\"\n", s);
23             return;
24         }
25         LOG_TRACEF("precache_model(\"%s\")\n", s);
26         precache_model(s);
27     }
28 ENDCLASS(Model)
29
30 #define MODEL(name, path) \
31     string MDL_##name##_get() { return path; } \
32     REGISTER(RegisterModels, MDL, MODELS, MODELS_COUNT, name, m_id, NEW(Model, MDL_##name##_get))
33 REGISTER_REGISTRY(RegisterModels)
34
35 STATIC_INIT(RegisterModels_precache) {
36     FOREACH(MODELS, true, LAMBDA({
37         it.model_precache(it);
38     }));
39 }
40
41 MODEL(Null, "null");
42 #include "models.inc"
43
44 #endif