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)
|
||||
|
||||
- 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& ellipsoidDirectionAndSpeed,
|
||||
core::triangle3df& triout,
|
||||
core::vector3df& hitPosition,
|
||||
bool& outFalling,
|
||||
f32 slidingSpeed = 0.0005f,
|
||||
const core::vector3df& gravityDirectionAndSpeed
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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="md2Animation.cpp" />
|
||||
<Unit filename="planeMatrix.cpp" />
|
||||
<Unit filename="sceneCollisionManager.cpp" />
|
||||
<Unit filename="softwareDevice.cpp" />
|
||||
<Unit filename="testUtils.cpp" />
|
||||
<Unit filename="testVector2d.cpp" />
|
||||
|
|
|
@ -213,6 +213,10 @@
|
|||
RelativePath=".\planeMatrix.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\sceneCollisionManager.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\softwareDevice.cpp"
|
||||
>
|
||||
|
|
|
@ -209,6 +209,10 @@
|
|||
RelativePath=".\planeMatrix.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\sceneCollisionManager.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\softwareDevice.cpp"
|
||||
>
|
||||
|
|
Loading…
Reference in New Issue