Add a hitPosition to ISceneCollisionManager::getCollisionResultPosition() as per

https://sourceforge.net/tracker2/?func=detail&aid=1339139&group_id=74339&atid=540679

This is a very small API breaking change to a method that's unlikely to be heavily used in user code. It is commented in the declaration, in changes.txt and a unit test has been added.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1958 dfc29bdd-3216-0410-991c-e03cc46cb475
master
Rogerborg 2008-12-16 16:16:35 +00:00
parent 1b628ef663
commit 340b984ced
10 changed files with 31 additions and 5 deletions

View File

@ -1,3 +1,10 @@
Changes in version 1.6
- ISceneNodeAnimatorCollisionResponse exposes the target node. Setting the node again resets the last position, allowing the node to be teleported.
- Add a hitPosition out parameter to ISceneCollisionManager::getCollisionResultPosition() - this is a (small) API breaking change.
Changes in version 1.5 (...12.2008)
- Construction calls for FPS camera changed to take speed in units/milliseconds, just as the setSpeed method does.

View File

@ -70,6 +70,7 @@ namespace scene
const core::vector3df& ellipsoidRadius,
const core::vector3df& ellipsoidDirectionAndSpeed,
core::triangle3df& triout,
core::vector3df& hitPosition,
bool& outFalling,
f32 slidingSpeed = 0.0005f,
const core::vector3df& gravityDirectionAndSpeed

View File

@ -230,6 +230,7 @@ core::vector3df CSceneCollisionManager::getCollisionResultPosition(
const core::vector3df &position, const core::vector3df& radius,
const core::vector3df& direction,
core::triangle3df& triout,
core::vector3df& hitPosition,
bool& outFalling,
f32 slidingSpeed,
const core::vector3df& gravity)
@ -238,7 +239,7 @@ core::vector3df CSceneCollisionManager::getCollisionResultPosition(
return position;
return collideEllipsoidWithWorld(selector, position,
radius, direction, slidingSpeed, gravity, triout, outFalling);
radius, direction, slidingSpeed, gravity, triout, hitPosition, outFalling);
}
@ -497,7 +498,9 @@ core::vector3df CSceneCollisionManager::collideEllipsoidWithWorld(
const core::vector3df& radius, const core::vector3df& velocity,
f32 slidingSpeed,
const core::vector3df& gravity,
core::triangle3df& triout, bool& outFalling)
core::triangle3df& triout,
core::vector3df& hitPosition,
bool& outFalling)
{
if (!selector || radius.X == 0.0f || radius.Y == 0.0f || radius.Z == 0.0f)
return position;
@ -549,6 +552,7 @@ core::vector3df CSceneCollisionManager::collideEllipsoidWithWorld(
}
finalPos *= colData.eRadius;
hitPosition = colData.intersectionPoint * colData.eRadius;
return finalPos;
}

View File

@ -52,6 +52,7 @@ namespace scene
const core::vector3df &ellipsoidPosition, const core::vector3df& ellipsoidRadius,
const core::vector3df& ellipsoidDirectionAndSpeed,
core::triangle3df& triout,
core::vector3df& hitPosition,
bool& outFalling,
f32 slidingSpeed,
const core::vector3df& gravityDirectionAndSpeed);
@ -106,6 +107,7 @@ namespace scene
const core::vector3df& radius, const core::vector3df& velocity,
f32 slidingSpeed,
const core::vector3df& gravity, core::triangle3df& triout,
core::vector3df& hitPosition,
bool& outFalling);
core::vector3df collideWithWorld(s32 recursionDepth, SCollisionData &colData,

View File

@ -161,9 +161,10 @@ void CSceneNodeAnimatorCollisionResponse::animateNode(ISceneNode* node, u32 time
// TODO: divide SlidingSpeed by frame time
bool f = false;
core::vector3df collisionPosition; // Not used.
pos = SceneManager->getSceneCollisionManager()->getCollisionResultPosition(
World, LastPosition-Translation,
Radius, vel, triangle, f, SlidingSpeed, FallingVelocity);
Radius, vel, triangle, collisionPosition, f, SlidingSpeed, FallingVelocity);
pos += Translation;

View File

@ -55,6 +55,7 @@ int main(int argumentCount, char * arguments[])
extern bool b3dAnimation(void);
extern bool guiDisabledMenu(void);
extern bool collisionResponseAnimator(void);
extern bool sceneCollisionManager(void);
typedef struct _STest
{
@ -69,8 +70,9 @@ int main(int argumentCount, char * arguments[])
// Note that to interactively debug a test, you will generally want to move it
// (temporarily) to the beginning of the list, since each test runs in its own
// process.
TEST(collisionResponseAnimator),
TEST(disambiguateTextures), // Normally you should run this first, since it validates the working directory.
TEST(sceneCollisionManager),
TEST(collisionResponseAnimator),
TEST(exports),
TEST(testVector3d),
TEST(testVector2d),

View File

@ -1,2 +1,2 @@
Test suite pass at GMT Tue Dec 16 14:56:26 2008
Test suite pass at GMT Tue Dec 16 16:13:56 2008

View File

@ -48,6 +48,7 @@
<Unit filename="main.cpp" />
<Unit filename="md2Animation.cpp" />
<Unit filename="planeMatrix.cpp" />
<Unit filename="sceneCollisionManager.cpp" />
<Unit filename="softwareDevice.cpp" />
<Unit filename="testUtils.cpp" />
<Unit filename="testVector2d.cpp" />

View File

@ -213,6 +213,10 @@
RelativePath=".\planeMatrix.cpp"
>
</File>
<File
RelativePath=".\sceneCollisionManager.cpp"
>
</File>
<File
RelativePath=".\softwareDevice.cpp"
>

View File

@ -209,6 +209,10 @@
RelativePath=".\planeMatrix.cpp"
>
</File>
<File
RelativePath=".\sceneCollisionManager.cpp"
>
</File>
<File
RelativePath=".\softwareDevice.cpp"
>