The following functions will now use a "ISceneNode *" instead of a "const ISceneNode *":
ITriangleSelector::getSceneNodeForTriangle, ISceneNodeAnimatorCollisionResponse::getCollisionNode, ISceneCollisionManager::getCollisionPoint and ISceneCollisionManager::getCollisionResultPosition. As collision functions often are followed by changing node positions users where so far forced to using const_casts (found by Greenya). (This will lead once more to many post about correct getCollisionResultPosition usage, but can't be helped - those consts were too restricitive, sorry) git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@3442 dfc29bdd-3216-0410-991c-e03cc46cb475master
parent
5c3e9500f8
commit
8b71ff58b4
|
@ -1,5 +1,9 @@
|
|||
Changes in 1.8 (??.0?.2010)
|
||||
|
||||
- The following functions will now use a "ISceneNode *" instead of a "const ISceneNode *":
|
||||
ITriangleSelector::getSceneNodeForTriangle, ISceneNodeAnimatorCollisionResponse::getCollisionNode, ISceneCollisionManager::getCollisionPoint and ISceneCollisionManager::getCollisionResultPosition.
|
||||
As collision functions often are followed by changing node positions users where so far forced to using const_casts (found by Greenya).
|
||||
|
||||
- Add vector3d::getAs3Values (patch provided by slavik262)
|
||||
|
||||
- Add function to SViewFrustum to get corners of the near plane (patch provided by Matt Kline, aka slavik262)
|
||||
|
|
|
@ -1733,7 +1733,7 @@ void CQuake3EventHandler::useItem( Q3Player * player)
|
|||
line3d<f32> line(start, end);
|
||||
|
||||
// get intersection point with map
|
||||
const scene::ISceneNode* hitNode;
|
||||
scene::ISceneNode* hitNode;
|
||||
if (smgr->getSceneCollisionManager()->getCollisionPoint(
|
||||
line, Meta, end, triangle,hitNode))
|
||||
{
|
||||
|
|
|
@ -620,7 +620,7 @@ void CDemo::shoot()
|
|||
core::line3d<f32> line(start, end);
|
||||
|
||||
// get intersection point with map
|
||||
const scene::ISceneNode* hitNode;
|
||||
scene::ISceneNode* hitNode;
|
||||
if (sm->getSceneCollisionManager()->getCollisionPoint(
|
||||
line, mapSelector, end, triangle, hitNode))
|
||||
{
|
||||
|
|
|
@ -40,7 +40,7 @@ namespace scene
|
|||
\return True if a collision was detected and false if not. */
|
||||
virtual bool getCollisionPoint(const core::line3d<f32>& ray,
|
||||
ITriangleSelector* selector, core::vector3df& outCollisionPoint,
|
||||
core::triangle3df& outTriangle, const ISceneNode*& outNode) =0;
|
||||
core::triangle3df& outTriangle, ISceneNode*& outNode) =0;
|
||||
|
||||
//! Collides a moving ellipsoid with a 3d world with gravity and returns the resulting new position of the ellipsoid.
|
||||
/** This can be used for moving a character in a 3d world: The
|
||||
|
@ -73,7 +73,7 @@ namespace scene
|
|||
core::triangle3df& triout,
|
||||
core::vector3df& hitPosition,
|
||||
bool& outFalling,
|
||||
const ISceneNode*& outNode,
|
||||
ISceneNode*& outNode,
|
||||
f32 slidingSpeed = 0.0005f,
|
||||
const core::vector3df& gravityDirectionAndSpeed
|
||||
= core::vector3df(0.0f, 0.0f, 0.0f)) = 0;
|
||||
|
|
|
@ -153,7 +153,7 @@ namespace scene
|
|||
virtual const core::vector3df & getCollisionResultPosition(void) const = 0;
|
||||
|
||||
//! Returns the node that was collided with.
|
||||
virtual const ISceneNode* getCollisionNode(void) const = 0;
|
||||
virtual ISceneNode* getCollisionNode(void) const = 0;
|
||||
|
||||
//! Sets a callback interface which will be called if a collision occurs.
|
||||
/** \param callback: collision callback handler that will be called when a collision
|
||||
|
|
|
@ -110,7 +110,7 @@ public:
|
|||
the associated scene node.
|
||||
\return The scene node associated with that triangle.
|
||||
*/
|
||||
virtual const ISceneNode* getSceneNodeForTriangle(u32 triangleIndex) const = 0;
|
||||
virtual ISceneNode* getSceneNodeForTriangle(u32 triangleIndex) const = 0;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -135,7 +135,7 @@ void CMetaTriangleSelector::removeAllTriangleSelectors()
|
|||
|
||||
|
||||
//! Return the scene node associated with a given triangle.
|
||||
const ISceneNode* CMetaTriangleSelector::getSceneNodeForTriangle(u32 triangleIndex) const
|
||||
ISceneNode* CMetaTriangleSelector::getSceneNodeForTriangle(u32 triangleIndex) const
|
||||
{
|
||||
u32 totalTriangles = 0;
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ public:
|
|||
virtual void removeAllTriangleSelectors();
|
||||
|
||||
//! Return the scene node associated with a given triangle.
|
||||
virtual const ISceneNode* getSceneNodeForTriangle(u32 triangleIndex) const;
|
||||
virtual ISceneNode* getSceneNodeForTriangle(u32 triangleIndex) const;
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace scene
|
|||
|
||||
//! constructor
|
||||
COctreeTriangleSelector::COctreeTriangleSelector(const IMesh* mesh,
|
||||
const ISceneNode* node, s32 minimalPolysPerNode)
|
||||
ISceneNode* node, s32 minimalPolysPerNode)
|
||||
: CTriangleSelector(mesh, node), Root(0), NodeCount(0),
|
||||
MinimalPolysPerNode(minimalPolysPerNode)
|
||||
{
|
||||
|
|
|
@ -20,7 +20,7 @@ class COctreeTriangleSelector : public CTriangleSelector
|
|||
public:
|
||||
|
||||
//! Constructs a selector based on a mesh
|
||||
COctreeTriangleSelector(const IMesh* mesh, const ISceneNode* node, s32 minimalPolysPerNode);
|
||||
COctreeTriangleSelector(const IMesh* mesh, ISceneNode* node, s32 minimalPolysPerNode);
|
||||
|
||||
virtual ~COctreeTriangleSelector();
|
||||
|
||||
|
|
|
@ -303,7 +303,7 @@ void CSceneCollisionManager::getPickedNodeFromBBAndSelector(
|
|||
core::triangle3df candidateTriangle;
|
||||
|
||||
// do intersection test in object space
|
||||
const ISceneNode * hitNode = 0;
|
||||
ISceneNode * hitNode = 0;
|
||||
if (box.intersectsWithLine(line) &&
|
||||
getCollisionPoint(ray, selector, candidateCollisionPoint, candidateTriangle, hitNode))
|
||||
{
|
||||
|
@ -349,7 +349,7 @@ ISceneNode* CSceneCollisionManager::getSceneNodeFromCameraBB(
|
|||
bool CSceneCollisionManager::getCollisionPoint(const core::line3d<f32>& ray,
|
||||
ITriangleSelector* selector, core::vector3df& outIntersection,
|
||||
core::triangle3df& outTriangle,
|
||||
const ISceneNode*& outNode)
|
||||
ISceneNode*& outNode)
|
||||
{
|
||||
if (!selector)
|
||||
{
|
||||
|
@ -423,7 +423,7 @@ core::vector3df CSceneCollisionManager::getCollisionResultPosition(
|
|||
core::triangle3df& triout,
|
||||
core::vector3df& hitPosition,
|
||||
bool& outFalling,
|
||||
const ISceneNode*& outNode,
|
||||
ISceneNode*& outNode,
|
||||
f32 slidingSpeed,
|
||||
const core::vector3df& gravity)
|
||||
{
|
||||
|
@ -691,7 +691,7 @@ core::vector3df CSceneCollisionManager::collideEllipsoidWithWorld(
|
|||
core::triangle3df& triout,
|
||||
core::vector3df& hitPosition,
|
||||
bool& outFalling,
|
||||
const ISceneNode*& outNode)
|
||||
ISceneNode*& outNode)
|
||||
{
|
||||
if (!selector || radius.X == 0.0f || radius.Y == 0.0f || radius.Z == 0.0f)
|
||||
return position;
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace scene
|
|||
virtual bool getCollisionPoint(const core::line3d<f32>& ray,
|
||||
ITriangleSelector* selector, core::vector3df& outCollisionPoint,
|
||||
core::triangle3df& outTriangle,
|
||||
const ISceneNode* & outNode);
|
||||
ISceneNode* & outNode);
|
||||
|
||||
//! Collides a moving ellipsoid with a 3d world with gravity and returns
|
||||
//! the resulting new position of the ellipsoid.
|
||||
|
@ -57,7 +57,7 @@ namespace scene
|
|||
core::triangle3df& triout,
|
||||
core::vector3df& hitPosition,
|
||||
bool& outFalling,
|
||||
const ISceneNode*& outNode,
|
||||
ISceneNode*& outNode,
|
||||
f32 slidingSpeed,
|
||||
const core::vector3df& gravityDirectionAndSpeed);
|
||||
|
||||
|
@ -138,7 +138,7 @@ namespace scene
|
|||
const core::vector3df& gravity, core::triangle3df& triout,
|
||||
core::vector3df& hitPosition,
|
||||
bool& outFalling,
|
||||
const ISceneNode*& outNode);
|
||||
ISceneNode*& outNode);
|
||||
|
||||
core::vector3df collideWithWorld(s32 recursionDepth, SCollisionData &colData,
|
||||
core::vector3df pos, core::vector3df vel);
|
||||
|
|
|
@ -23,7 +23,7 @@ CSceneNodeAnimatorCollisionResponse::CSceneNodeAnimatorCollisionResponse(
|
|||
f32 slidingSpeed)
|
||||
: Radius(ellipsoidRadius), Gravity(gravityPerSecond), Translation(ellipsoidTranslation),
|
||||
World(world), Object(object), SceneManager(scenemanager), LastTime(0),
|
||||
SlidingSpeed(slidingSpeed), CollisionCallback(0),
|
||||
SlidingSpeed(slidingSpeed), CollisionNode(0), CollisionCallback(0),
|
||||
Falling(false), IsCamera(false), AnimateCameraTarget(true), CollisionOccurred(false),
|
||||
FirstUpdate(true)
|
||||
{
|
||||
|
|
|
@ -110,7 +110,7 @@ namespace scene
|
|||
|
||||
virtual const core::vector3df & getCollisionResultPosition(void) const { return CollisionResultPosition; }
|
||||
|
||||
virtual const ISceneNode* getCollisionNode(void) const { return CollisionNode; }
|
||||
virtual ISceneNode* getCollisionNode(void) const { return CollisionNode; }
|
||||
|
||||
|
||||
//! Sets a callback interface which will be called if a collision occurs.
|
||||
|
@ -140,7 +140,7 @@ namespace scene
|
|||
core::vector3df CollisionPoint;
|
||||
core::triangle3df CollisionTriangle;
|
||||
core::vector3df CollisionResultPosition;
|
||||
const ISceneNode * CollisionNode;
|
||||
ISceneNode * CollisionNode;
|
||||
ICollisionCallback* CollisionCallback;
|
||||
|
||||
bool Falling;
|
||||
|
|
|
@ -186,6 +186,11 @@ s32 CTerrainTriangleSelector::getTriangleCount() const
|
|||
return TrianglePatches.TotalTriangles;
|
||||
}
|
||||
|
||||
ISceneNode* CTerrainTriangleSelector::getSceneNodeForTriangle(u32 triangleIndex) const
|
||||
{
|
||||
return SceneNode;
|
||||
}
|
||||
|
||||
} // end namespace scene
|
||||
} // end namespace irr
|
||||
|
||||
|
|
|
@ -53,9 +53,7 @@ public:
|
|||
virtual s32 getTriangleCount() const;
|
||||
|
||||
//! Return the scene node associated with a given triangle.
|
||||
/** ITerrainSceneNode is an ISceneNode, we just don't know it yet. */
|
||||
virtual const ISceneNode* getSceneNodeForTriangle(u32 triangleIndex) const
|
||||
{ return (ISceneNode*)SceneNode; }
|
||||
virtual ISceneNode* getSceneNodeForTriangle(u32 triangleIndex) const;
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ namespace scene
|
|||
{
|
||||
|
||||
//! constructor
|
||||
CTriangleBBSelector::CTriangleBBSelector(const ISceneNode* node)
|
||||
CTriangleBBSelector::CTriangleBBSelector(ISceneNode* node)
|
||||
: CTriangleSelector(node)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
|
|
|
@ -18,7 +18,7 @@ class CTriangleBBSelector : public CTriangleSelector
|
|||
public:
|
||||
|
||||
//! Constructs a selector based on a mesh
|
||||
CTriangleBBSelector(const ISceneNode* node);
|
||||
CTriangleBBSelector(ISceneNode* node);
|
||||
|
||||
//! Gets all triangles.
|
||||
virtual void getTriangles(core::triangle3df* triangles, s32 arraySize, s32& outTriangleCount,
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace scene
|
|||
{
|
||||
|
||||
//! constructor
|
||||
CTriangleSelector::CTriangleSelector(const ISceneNode* node)
|
||||
CTriangleSelector::CTriangleSelector(ISceneNode* node)
|
||||
: SceneNode(node), AnimatedNode(0), LastMeshFrame(-1)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
|
@ -23,7 +23,7 @@ CTriangleSelector::CTriangleSelector(const ISceneNode* node)
|
|||
|
||||
|
||||
//! constructor
|
||||
CTriangleSelector::CTriangleSelector(const IMesh* mesh, const ISceneNode* node)
|
||||
CTriangleSelector::CTriangleSelector(const IMesh* mesh, ISceneNode* node)
|
||||
: SceneNode(node), AnimatedNode(0)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
|
@ -137,7 +137,7 @@ void CTriangleSelector::updateFromMesh(const IMesh* mesh) const
|
|||
|
||||
|
||||
//! constructor
|
||||
CTriangleSelector::CTriangleSelector(const core::aabbox3d<f32>& box, const ISceneNode* node)
|
||||
CTriangleSelector::CTriangleSelector(const core::aabbox3d<f32>& box, ISceneNode* node)
|
||||
: SceneNode(node)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
|
|
|
@ -23,17 +23,17 @@ class CTriangleSelector : public ITriangleSelector
|
|||
public:
|
||||
|
||||
//! Constructs a selector based on a mesh
|
||||
CTriangleSelector(const ISceneNode* node);
|
||||
CTriangleSelector(ISceneNode* node);
|
||||
|
||||
//! Constructs a selector based on a mesh
|
||||
CTriangleSelector(const IMesh* mesh, const ISceneNode* node);
|
||||
CTriangleSelector(const IMesh* mesh, ISceneNode* node);
|
||||
|
||||
//! Constructs a selector based on an animated mesh scene node
|
||||
//!\param node An animated mesh scene node, which must have a valid mesh
|
||||
CTriangleSelector(IAnimatedMeshSceneNode* node);
|
||||
|
||||
//! Constructs a selector based on a bounding box
|
||||
CTriangleSelector(const core::aabbox3d<f32>& box, const ISceneNode* node);
|
||||
CTriangleSelector(const core::aabbox3d<f32>& box, ISceneNode* node);
|
||||
|
||||
//! Gets all triangles.
|
||||
void getTriangles(core::triangle3df* triangles, s32 arraySize, s32& outTriangleCount,
|
||||
|
@ -52,7 +52,7 @@ public:
|
|||
virtual s32 getTriangleCount() const;
|
||||
|
||||
//! Return the scene node associated with a given triangle.
|
||||
virtual const ISceneNode* getSceneNodeForTriangle(u32 triangleIndex) const { return SceneNode; }
|
||||
virtual ISceneNode* getSceneNodeForTriangle(u32 triangleIndex) const { return SceneNode; }
|
||||
|
||||
protected:
|
||||
//! Create from a mesh
|
||||
|
@ -66,8 +66,8 @@ protected:
|
|||
//! since the last time it was updated.
|
||||
virtual void update(void) const;
|
||||
|
||||
const ISceneNode* SceneNode;
|
||||
mutable core::array<core::triangle3df> Triangles;
|
||||
ISceneNode* SceneNode;
|
||||
mutable core::array<core::triangle3df> Triangles; // (mutable for CTriangleBBSelector)
|
||||
|
||||
IAnimatedMeshSceneNode* AnimatedNode;
|
||||
mutable s32 LastMeshFrame;
|
||||
|
|
|
@ -18,7 +18,7 @@ static bool testGetCollisionResultPosition(IrrlichtDevice * device,
|
|||
triangle3df triOut;
|
||||
vector3df hitPosition;
|
||||
bool falling;
|
||||
const ISceneNode* hitNode;
|
||||
ISceneNode* hitNode;
|
||||
|
||||
vector3df resultPosition =
|
||||
collMgr->getCollisionResultPosition(cubeSelector,
|
||||
|
@ -112,7 +112,7 @@ static bool getCollisionPoint_ignoreTriangleVertices(IrrlichtDevice * device,
|
|||
line3df ray(0, 0, -5, 0, 0, 100);
|
||||
vector3df hitPosition;
|
||||
triangle3df hitTriangle;
|
||||
const ISceneNode* hitNode;
|
||||
ISceneNode* hitNode;
|
||||
|
||||
bool collision = collMgr->getCollisionPoint(ray, meta, hitPosition, hitTriangle, hitNode);
|
||||
|
||||
|
|
Loading…
Reference in New Issue