eclass_t* GetCachedModel(entity_t *pEntity, const char *pName, idVec3 &vMin, idVec3 &vMax) { eclass_t *e = NULL; if (pName == NULL || strlen(pName) == 0) { return NULL; } for (e = g_md3Cache; e ; e = e->next) { if (!strcmp (pName, e->name)) { pEntity->md3Class = e; VectorCopy(e->mins, vMin); VectorCopy(e->maxs, vMax); return e; } } e = (eclass_t*)Mem_ClearedAlloc(sizeof(*e)); memset (e, 0, sizeof(*e)); e->name = Mem_CopyString( pName ); e->color[0] = e->color[2] = 0.85f; if (LoadModel(pName, e, vMin, vMax, NULL)) { EClass_InsertSortedList(g_md3Cache, e); VectorCopy(vMin, e->mins); VectorCopy(vMax, e->maxs); pEntity->md3Class = e; return e; } return NULL; }
/* ================= Eclass_InsertAlphabetized ================= */ void Eclass_InsertAlphabetized (eclass_t *e) { #if 1 EClass_InsertSortedList(eclass, e); #else eclass_t *s; if (!eclass) { eclass = e; return; } s = eclass; if (stricmp (e->name, s->name) < 0) { e->next = s; eclass = e; return; } do { if (!s->next || stricmp (e->name, s->next->name) < 0) { e->next = s->next; s->next = e; return; } s=s->next; } while (1); #endif }
eclass_t* GetCachedModel(entity_t *pEntity, const char *pName, vec3_t &vMin, vec3_t &vMax) { eclass_t *e = NULL; if (pName == NULL || strlen(pName) == 0) { return NULL; } for (e = g_md3Cache; e ; e = e->next) { if (!strcmp (pName, e->name)) { pEntity->md3Class = e; VectorCopy(e->mins, vMin); VectorCopy(e->maxs, vMax); return e; } } e = (eclass_t*)qmalloc(sizeof(*e)); memset (e, 0, sizeof(*e)); e->name = strdup(pName); e->modelpath = strdup(pName); e->skinpath = strdup(pName); char *p = strstr(e->skinpath, ".md3"); if (p != NULL) { p++; strncpy(p, "tga", 3); } else { free(e->skinpath); e->skinpath = NULL; } e->color[0] = e->color[2] = 0.85; if (Eclass_hasModel(e, vMin, vMax)) { EClass_InsertSortedList(g_md3Cache, e); VectorCopy(vMin, e->mins); VectorCopy(vMax, e->maxs); pEntity->md3Class = e; return e; } return NULL; }
EntityClass* Eclass_InsertAlphabetized (EntityClass *e) { return EClass_InsertSortedList(g_entityClasses, e); }