Sion Tower (demo técnica) 0.1
|
Clase que modela un cuerpo colisionable, compuesto de varias Shape. Más...
#include <body.h>
Métodos públicos | |
Body (GameObject *gameObject, const std::vector< Shape * > &shapes, const Ogre::Vector3 &position=Ogre::Vector3::ZERO, const Ogre::Vector3 &scale=Ogre::Vector3::UNIT_SCALE, const Ogre::Quaternion &orientation=Ogre::Quaternion::IDENTITY, int type=0) | |
Body (GameObject *gameObject=0, const Ogre::Vector3 &position=Ogre::Vector3::ZERO, const Ogre::Vector3 &scale=Ogre::Vector3::UNIT_SCALE, const Ogre::Quaternion &orientation=Ogre::Quaternion::IDENTITY, int type=0) | |
~Body () | |
GameObject * | getGameObject () |
void | setGameObject (GameObject *gameObject) |
const std::vector< Shape * > | getShapes () const |
const std::vector< Shape * > | getWorldSpaceShapes () const |
void | addShape (Shape *shape) |
bool | removeShape (Shape *shape) |
bool | removeShape (const Ogre::String &name) |
Ogre::Matrix4 | getTransform () const |
void | setTransform (const Ogre::Matrix4 &transform) |
const Ogre::Vector3 & | getPosition () const |
void | setPosition (const Ogre::Vector3 &position) |
const Ogre::Vector3 & | getScale () const |
void | setScale (const Ogre::Vector3 &scale) |
const Ogre::Quaternion & | getOrientation () const |
void | setOrientation (const Ogre::Quaternion &orientation) |
int | getType () const |
void | setType (int type) |
Métodos públicos estáticos | |
static bool | getCollision (Body *bodyA, Body *bodyB) |
Clase que modela un cuerpo colisionable, compuesto de varias Shape.
Representa un cuerpo colisionable del juego. Está compuesto de un vector de punteros a Shape y una transformación (posición, escala y orientación). Las formas que componen el cuerpo están en "parent space". Para obtener las formas que componen un cuerpos en "world space" es necesario aplicarles la transformación del cuerpo.
Proporciona un método estático para hacer un test de colisión entre dos cuerpos independientemente de las formas que los compongan.
Ejemplo:
// Creamos las formas del cuerpo A Shape* sphereA = new Sphere("sphereA", Ogre::Vector3(0, 0, 0), 5.0); Shape* aabbA = new AxisAlignedBox("aabbA", Ogre::Vector3(5, 5, 5), Ogre::Vector3(6, 6, 6)); // Creamos las formas del cuerpo B Shape* sphereB = new Sphere("sphereB", Ogre::Vector3(5, 5, 5), 5.0); Shape* aabbB = new AxisAlignedBox("aabbB", Ogre::Vector3(10, 10, 10), Ogre::Vector3(11, 11, 11)); // Creamos el cuerpo A Body bodyA; bodyA.addShape(sphereA); bodyA.addShape(aabbA); // Creamos el cuerpo B Body bodyB; bodyB.addShape(sphereB); bodyA.addShape(aabbB); // Transformamos el cuerpo B bodyB.setPosition(Ogre::Vector3(4, 4, 4); bodyB.setScale(Ogre::Vector3(1, 4, 1)); // Hacemos un test de colisión if (Body::getCollision(bodyA, bodyB)) cout << "Hay colisión entre bodyA y bodyB" << endl;
Body::Body | ( | GameObject * | gameObject, |
const std::vector< Shape * > & | shapes, | ||
const Ogre::Vector3 & | position = Ogre::Vector3::ZERO , |
||
const Ogre::Vector3 & | scale = Ogre::Vector3::UNIT_SCALE , |
||
const Ogre::Quaternion & | orientation = Ogre::Quaternion::IDENTITY , |
||
int | type = 0 |
||
) |
Constructor
gameObject | objeto de juego al que pertenece el body |
shapes | vector de punteros a formas que compondrán el cuerpo |
position | posición del cuerpo |
scale | escala del cuerpo |
orientation | orientación del cuerpo |
Body::Body | ( | GameObject * | gameObject = 0 , |
const Ogre::Vector3 & | position = Ogre::Vector3::ZERO , |
||
const Ogre::Vector3 & | scale = Ogre::Vector3::UNIT_SCALE , |
||
const Ogre::Quaternion & | orientation = Ogre::Quaternion::IDENTITY , |
||
int | type = 0 |
||
) |
Constructor
gameObject | objeto de juego al que pertenece el body |
position | posición del cuerpo |
scale | escala del cuerpo |
orientation | orientación del cuerpo |
Body::~Body | ( | ) |
Destructor.
No destruye las formas que lo componen, debe hacerse de forma manual.
void Body::addShape | ( | Shape * | shape | ) |
shape | nueva forma |
Añade la forma al vector de punteros a formas que componen el cuerpo. No hace comprobaciones de duplicidad,
bodyA | primer cuerpo del test de colisión |
bodyB | segundo cuerpo del test de colisión |
El método se encarga de aplicar las transformaciones a las formas que componen a los dos cuerpos.
GameObject * Body::getGameObject | ( | ) |
const Ogre::Quaternion & Body::getOrientation | ( | ) | const |
const Ogre::Vector3 & Body::getPosition | ( | ) | const |
const Ogre::Vector3 & Body::getScale | ( | ) | const |
const std::vector< Shape * > Body::getShapes | ( | ) | const |
Ogre::Matrix4 Body::getTransform | ( | ) | const |
int Body::getType | ( | ) | const |
const std::vector< Shape * > Body::getWorldSpaceShapes | ( | ) | const |
bool Body::removeShape | ( | Shape * | shape | ) |
shape | forma a eliminar |
Elimina la forma de la lista que compone el cuerpo si existe. No destruye la forma.
bool Body::removeShape | ( | const Ogre::String & | name | ) |
name | nombre de la forma a eliminar |
Elimina la forma del vector de formas que componen el cuerpo, no destruye la forma.
void Body::setGameObject | ( | GameObject * | gameObject | ) |
gameObject | nuevo gameObject al que pertenece el body |
void Body::setOrientation | ( | const Ogre::Quaternion & | orientation | ) |
orientation | nueva orientación del cuerpo en "world space" |
void Body::setPosition | ( | const Ogre::Vector3 & | position | ) |
position | nueva posición del cuerpo en "world space" |
void Body::setScale | ( | const Ogre::Vector3 & | scale | ) |
scale | nueva escala del cuerpo |
void Body::setTransform | ( | const Ogre::Matrix4 & | transform | ) |
nueva | matriz de transformación del cuerpo |
void Body::setType | ( | int | type | ) |
type | nuevo tipo de cuerpo, utilizado en el filtrado de colisiones |