/**********************************************************************
This file is part of Crack dot Com's free source code release of
Golgotha.
for
information about compiling & licensing issues visit this URL
If that doesn't help, contact Jonathan Clark at
golgotha_source@usa.net (Subject should have "GOLG" in it)
***********************************************************************/
#ifndef G1_MODEL_ID_HH
#define G1_MODEL_ID_HH
#include "arch.hh"
#include "g1_limits.hh"
#include "memory/growheap.hh"
#include "init/init.hh"
#include "error/error.hh"
#include "memory/array.hh"
class i4_str;
class g1_quad_object_class;
class r1_render_api_class;
class r1_texture_manager_class;
typedef w16 g1_model_id_type;
// G3d model repository for the game
class g1_model_list_class : public i4_init_class
{
friend g1_model_info_compare(const void *a, const void *b);
struct model_info
{
g1_quad_object_class *model;
char *name_start;
} *array;
i4_grow_heap_class *name_buffer;
int total_models;
virtual void init();
virtual void uninit();
public:
void reset(i4_array &model_names, r1_texture_manager_class *tmap);
g1_quad_object_class *get_model(w16 handle) const
{
if (handle>=total_models)
i4_error("get_model : bad handle");
return array[handle].model;
}
g1_model_id_type find_handle(const char *name) const;
void cleanup();
char *get_model_name(w16 handle) const
{
return array[handle].name_start;
}
};
extern g1_model_list_class g1_model_list_man;
class g1_model_ref
{
public:
char *name;
g1_model_id_type value;
g1_model_ref *next;
g1_model_ref(char *name=0); // assumes name is a static value (it is not copied)
void set_name(char *name);
~g1_model_ref();
g1_model_id_type id() const { return value; }
g1_quad_object_class *get() const { return g1_model_list_man.get_model(value); }
g1_quad_object_class *operator()() const { return g1_model_list_man.get_model(value); }
};
#endif