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-e03cc46cb475master
parent
1b628ef663
commit
340b984ced
|
@ -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)
|
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.
|
- Construction calls for FPS camera changed to take speed in units/milliseconds, just as the setSpeed method does.
|
||||||
|
|
|
@ -70,6 +70,7 @@ namespace scene
|
||||||
const core::vector3df& ellipsoidRadius,
|
const core::vector3df& ellipsoidRadius,
|
||||||
const core::vector3df& ellipsoidDirectionAndSpeed,
|
const core::vector3df& ellipsoidDirectionAndSpeed,
|
||||||
core::triangle3df& triout,
|
core::triangle3df& triout,
|
||||||
|
core::vector3df& hitPosition,
|
||||||
bool& outFalling,
|
bool& outFalling,
|
||||||
f32 slidingSpeed = 0.0005f,
|
f32 slidingSpeed = 0.0005f,
|
||||||
const core::vector3df& gravityDirectionAndSpeed
|
const core::vector3df& gravityDirectionAndSpeed
|
||||||
|
|
|
@ -230,6 +230,7 @@ core::vector3df CSceneCollisionManager::getCollisionResultPosition(
|
||||||
const core::vector3df &position, const core::vector3df& radius,
|
const core::vector3df &position, const core::vector3df& radius,
|
||||||
const core::vector3df& direction,
|
const core::vector3df& direction,
|
||||||
core::triangle3df& triout,
|
core::triangle3df& triout,
|
||||||
|
core::vector3df& hitPosition,
|
||||||
bool& outFalling,
|
bool& outFalling,
|
||||||
f32 slidingSpeed,
|
f32 slidingSpeed,
|
||||||
const core::vector3df& gravity)
|
const core::vector3df& gravity)
|
||||||
|
@ -238,7 +239,7 @@ core::vector3df CSceneCollisionManager::getCollisionResultPosition(
|
||||||
return position;
|
return position;
|
||||||
|
|
||||||
return collideEllipsoidWithWorld(selector, 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,
|
const core::vector3df& radius, const core::vector3df& velocity,
|
||||||
f32 slidingSpeed,
|
f32 slidingSpeed,
|
||||||
const core::vector3df& gravity,
|
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)
|
if (!selector || radius.X == 0.0f || radius.Y == 0.0f || radius.Z == 0.0f)
|
||||||
return position;
|
return position;
|
||||||
|
@ -549,6 +552,7 @@ core::vector3df CSceneCollisionManager::collideEllipsoidWithWorld(
|
||||||
}
|
}
|
||||||
|
|
||||||
finalPos *= colData.eRadius;
|
finalPos *= colData.eRadius;
|
||||||
|
hitPosition = colData.intersectionPoint * colData.eRadius;
|
||||||
return finalPos;
|
return finalPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,7 @@ namespace scene
|
||||||
const core::vector3df &ellipsoidPosition, const core::vector3df& ellipsoidRadius,
|
const core::vector3df &ellipsoidPosition, const core::vector3df& ellipsoidRadius,
|
||||||
const core::vector3df& ellipsoidDirectionAndSpeed,
|
const core::vector3df& ellipsoidDirectionAndSpeed,
|
||||||
core::triangle3df& triout,
|
core::triangle3df& triout,
|
||||||
|
core::vector3df& hitPosition,
|
||||||
bool& outFalling,
|
bool& outFalling,
|
||||||
f32 slidingSpeed,
|
f32 slidingSpeed,
|
||||||
const core::vector3df& gravityDirectionAndSpeed);
|
const core::vector3df& gravityDirectionAndSpeed);
|
||||||
|
@ -106,6 +107,7 @@ namespace scene
|
||||||
const core::vector3df& radius, const core::vector3df& velocity,
|
const core::vector3df& radius, const core::vector3df& velocity,
|
||||||
f32 slidingSpeed,
|
f32 slidingSpeed,
|
||||||
const core::vector3df& gravity, core::triangle3df& triout,
|
const core::vector3df& gravity, core::triangle3df& triout,
|
||||||
|
core::vector3df& hitPosition,
|
||||||
bool& outFalling);
|
bool& outFalling);
|
||||||
|
|
||||||
core::vector3df collideWithWorld(s32 recursionDepth, SCollisionData &colData,
|
core::vector3df collideWithWorld(s32 recursionDepth, SCollisionData &colData,
|
||||||
|
|
|
@ -161,9 +161,10 @@ void CSceneNodeAnimatorCollisionResponse::animateNode(ISceneNode* node, u32 time
|
||||||
// TODO: divide SlidingSpeed by frame time
|
// TODO: divide SlidingSpeed by frame time
|
||||||
|
|
||||||
bool f = false;
|
bool f = false;
|
||||||
|
core::vector3df collisionPosition; // Not used.
|
||||||
pos = SceneManager->getSceneCollisionManager()->getCollisionResultPosition(
|
pos = SceneManager->getSceneCollisionManager()->getCollisionResultPosition(
|
||||||
World, LastPosition-Translation,
|
World, LastPosition-Translation,
|
||||||
Radius, vel, triangle, f, SlidingSpeed, FallingVelocity);
|
Radius, vel, triangle, collisionPosition, f, SlidingSpeed, FallingVelocity);
|
||||||
|
|
||||||
pos += Translation;
|
pos += Translation;
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@ int main(int argumentCount, char * arguments[])
|
||||||
extern bool b3dAnimation(void);
|
extern bool b3dAnimation(void);
|
||||||
extern bool guiDisabledMenu(void);
|
extern bool guiDisabledMenu(void);
|
||||||
extern bool collisionResponseAnimator(void);
|
extern bool collisionResponseAnimator(void);
|
||||||
|
extern bool sceneCollisionManager(void);
|
||||||
|
|
||||||
typedef struct _STest
|
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
|
// 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
|
// (temporarily) to the beginning of the list, since each test runs in its own
|
||||||
// process.
|
// process.
|
||||||
TEST(collisionResponseAnimator),
|
|
||||||
TEST(disambiguateTextures), // Normally you should run this first, since it validates the working directory.
|
TEST(disambiguateTextures), // Normally you should run this first, since it validates the working directory.
|
||||||
|
TEST(sceneCollisionManager),
|
||||||
|
TEST(collisionResponseAnimator),
|
||||||
TEST(exports),
|
TEST(exports),
|
||||||
TEST(testVector3d),
|
TEST(testVector3d),
|
||||||
TEST(testVector2d),
|
TEST(testVector2d),
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@
|
||||||
<Unit filename="main.cpp" />
|
<Unit filename="main.cpp" />
|
||||||
<Unit filename="md2Animation.cpp" />
|
<Unit filename="md2Animation.cpp" />
|
||||||
<Unit filename="planeMatrix.cpp" />
|
<Unit filename="planeMatrix.cpp" />
|
||||||
|
<Unit filename="sceneCollisionManager.cpp" />
|
||||||
<Unit filename="softwareDevice.cpp" />
|
<Unit filename="softwareDevice.cpp" />
|
||||||
<Unit filename="testUtils.cpp" />
|
<Unit filename="testUtils.cpp" />
|
||||||
<Unit filename="testVector2d.cpp" />
|
<Unit filename="testVector2d.cpp" />
|
||||||
|
|
|
@ -213,6 +213,10 @@
|
||||||
RelativePath=".\planeMatrix.cpp"
|
RelativePath=".\planeMatrix.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\sceneCollisionManager.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\softwareDevice.cpp"
|
RelativePath=".\softwareDevice.cpp"
|
||||||
>
|
>
|
||||||
|
|
|
@ -209,6 +209,10 @@
|
||||||
RelativePath=".\planeMatrix.cpp"
|
RelativePath=".\planeMatrix.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\sceneCollisionManager.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\softwareDevice.cpp"
|
RelativePath=".\softwareDevice.cpp"
|
||||||
>
|
>
|
||||||
|
|
Loading…
Reference in New Issue