/**********************************************************************
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 M1_MAX_OBJECT_HH
#define M1_MAX_OBJECT_HH
#include "obj3d.hh"
#include "load3d.hh"
#include "memory/array.hh"
#include "loaders/dir_save.hh"
class i4_grow_heap_class;
extern i4_grow_heap_class *m1_object_heap;
// derive off of g1 quad so we can store the string texture name name
class m1_quad_class : public g1_quad_class
{
public:
char texture_name[256];
m1_quad_class() {}
m1_quad_class(w16 a, w16 b, w16 c, w16 d=0xffff) { set(a,b,c,d); flags = 0; }
i4_bool set(w16 a, w16 b, w16 c, w16 d=0xffff);
void set_texture(char *name);
void calc_texture(int reverse,
i4_array &verts, w16 vert_off,
char *texture_name);
void calc_texture_scale(i4_array &verts, w16 vert_off);
};
// derive off of g1 animation so we can store the string animation name
class m1_animation_class : public g1_quad_object_class::animation_class
{
public:
i4_str *animation_name;
i4_array vertex_a;
void set_name(const i4_const_str &animation_n)
{
if (animation_name) delete animation_name;
animation_name=new i4_str(animation_n);
}
m1_animation_class(const i4_const_str &name)
: animation_name(new i4_str(name)),
vertex_a(1,20) {}
m1_animation_class()
: animation_name(0),
vertex_a(1,20) {}
~m1_animation_class()
{
if (animation_name)
delete animation_name;
}
};
class m1_mount_point_class
{
public:
i4_str *name;
i4_3d_vector offset;
m1_mount_point_class(i4_str *name, const i4_3d_vector &offset): name(name), offset(offset) {}
~m1_mount_point_class()
{
if (name)
delete name;
}
};
class m1_poly_object_class : public g1_quad_object_class
{
void save_quads(i4_saver_class *fp);
void save_texture_names(i4_saver_class *fp);
void save_vert_animations(i4_saver_class *fp);
void save_mount_points(i4_saver_class *fp);
void calc_quad_normal(i4_array &v,
m1_quad_class &q);
void calc_vert_normals();
public:
i4_array quad_a;
i4_array anim_a;
i4_array mount_a;
void cleanup();
void save(i4_saver_class *fp);
m1_poly_object_class() : quad_a(256,10), anim_a(256,100), mount_a(10,10) {}
~m1_poly_object_class() { cleanup(); }
};
#endif