Files
BlitzNext/Runtime/blitz3d/model.hpp
T
Michael Fabian 'Xaymar' Dirks 3afa84df85 runtime/blitz3d: Fixup C++ification
2019-01-18 21:26:42 +01:00

152 lines
2.5 KiB
C++

#pragma once
#include "brush.hpp"
#include "object.hpp"
#include "rendercontext.hpp"
#include "gxmesh.hpp"
class Sprite;
class Terrain;
class PlaneModel;
class Q3BSPModel;
class Model : public Object {
public:
enum { RENDER_SPACE_LOCAL = 0, RENDER_SPACE_WORLD = 1 };
enum {
COLLISION_GEOMETRY_DEFAULT = 0,
COLLISION_GEOMETRY_TRIS = 1,
COLLISION_GEOMETRY_BOX = 2,
COLLISION_GEOMETRY_SPHERE = 3
};
enum { QUEUE_OPAQUE = 0, QUEUE_TRANSPARENT = 1 };
Model();
Model(const Model& m);
//Entity interface
Model* getModel()
{
return this;
}
//Object interface
void capture();
bool beginRender(float tween);
//Model interface
virtual void setRenderBrush(const Brush& b) {}
virtual bool render(const RenderContext& rc)
{
return false;
}
virtual void renderQueue(int type);
virtual Sprite* getSprite()
{
return 0;
}
virtual Terrain* getTerrain()
{
return 0;
}
virtual PlaneModel* getPlaneModel()
{
return 0;
}
virtual MeshModel* getMeshModel()
{
return 0;
}
virtual MD2Model* getMD2Model()
{
return 0;
}
virtual Q3BSPModel* getBSPModel()
{
return 0;
}
virtual void setBrush(const Brush& b)
{
brush = b;
w_brush = true;
}
virtual void setColor(const Vector& c)
{
brush.setColor(c);
w_brush = true;
}
virtual void setAlpha(float a)
{
brush.setAlpha(a);
w_brush = true;
}
virtual void setShininess(float t)
{
brush.setShininess(t);
w_brush = true;
}
virtual void setTexture(int i, const Texture& t, int f)
{
brush.setTexture(i, t, f);
w_brush = true;
}
virtual void setBlend(int n)
{
brush.setBlend(n);
w_brush = true;
}
virtual void setFX(int n)
{
brush.setFX(n);
w_brush = true;
}
const Brush& getBrush() const
{
return brush;
}
void setRenderSpace(int n)
{
space = n;
}
int getRenderSpace() const
{
return space;
}
void setAutoFade(float nr, float fr)
{
auto_fade_nr = nr;
auto_fade_fr = fr;
auto_fade = true;
}
bool doAutoFade(const Vector& eye);
void enqueue(gxMesh* mesh, int first_vert, int vert_cnt, int first_tri, int tri_cnt);
void enqueue(gxMesh* mesh, int first_vert, int vert_cnt, int first_tri, int tri_cnt, const Brush& b);
int queueSize(int type) const
{
return queues[type].size();
}
private:
class MeshQueue;
int space;
Brush brush, render_brush;
mutable bool w_brush;
float captured_alpha, tweened_alpha;
bool auto_fade;
float auto_fade_nr, auto_fade_fr;
std::vector<MeshQueue*> queues[2];
void enqueue(MeshQueue* q);
};