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

137 lines
2.6 KiB
C++

#pragma once
#include <vector>
#include "animation.hpp"
#include "collision.hpp"
#include "entity.hpp"
class gxSound;
class gxChannel;
class Animator;
struct ObjCollision {
Object* with;
Vector coords;
Collision collision;
};
class Object : public Entity {
public:
typedef std::vector<const ObjCollision*> Collisions;
Object();
Object(const Object& object);
~Object();
//Entity interface
Object* getObject()
{
return this;
}
Entity* clone()
{
return new Object(*this);
}
//deep object copy!
Object* copy();
//called by user
void reset();
void setCollisionType(int type);
void setCollisionRadii(const Vector& radii);
void setCollisionBox(const Box& box);
void setOrder(int n)
{
order = n;
}
void setPickGeometry(int n)
{
pick_geom = n;
}
void setObscurer(bool t)
{
obscurer = t;
}
void setAnimation(const Animation& t)
{
anim = t;
}
void setAnimator(Animator* t);
gxChannel* emitSound(gxSound* sound);
//overridables!
virtual bool collide(const Line& line, float radius, ::Collision* curr_coll, const Transform& t)
{
return false;
}
virtual void capture();
virtual void animate(float e);
virtual bool beginRender(float tween);
virtual void endRender();
//for use by world
void beginUpdate(float elapsed);
void addCollision(const ObjCollision* c);
void endUpdate();
//accessors
int getCollisionType() const;
const Vector& getCollisionRadii() const;
const Box& getCollisionBox() const;
int getOrder() const
{
return order;
}
const Vector& getVelocity() const;
const Collisions& getCollisions() const;
const Transform& getRenderTform() const;
const Transform& getPrevWorldTform() const;
int getPickGeometry() const
{
return pick_geom;
}
int getObscurer() const
{
return obscurer;
}
Animation getAnimation() const
{
return anim;
}
Animator* getAnimator() const
{
return animator;
}
Object* getLastCopy() const
{
return last_copy;
}
private:
int coll_type;
int order;
Vector coll_radii;
Collisions colls;
bool captured;
Box coll_box;
int pick_geom;
bool obscurer;
float elapsed;
Vector velocity;
std::vector<gxChannel*> channels;
Vector capt_pos, capt_scl;
Quat capt_rot;
mutable Object* last_copy;
Transform prev_tform;
Transform captured_tform, tween_tform;
mutable Transform render_tform;
mutable bool render_tform_valid;
Animation anim;
Animator* animator;
void updateSounds();
};