irrlicht/source/Irrlicht.NET/ISceneCollisionManager.cpp

121 lines
3.7 KiB
C++

// Copyright (C) 2002-2006 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#include "ISceneCollisionManager.h"
#include "NativeConverter.h"
namespace Irrlicht
{
namespace Scene
{
ISceneCollisionManager::ISceneCollisionManager(irr::scene::ISceneCollisionManager* scm)
: SCM(scm)
{
}
bool ISceneCollisionManager::GetCollisionPoint(Core::Line3D ray,
Scene::ITriangleSelector* selector,
[PARAMFLAG::Out] Core::Vector3D& outCollisionPoint,
[PARAMFLAG::Out] Core::Triangle3D& outTriangle)
{
irr::core::vector3df outCP;
irr::core::triangle3df outTr;
bool ret = SCM->getCollisionPoint(
irr::NativeConverter::getNativeLine(ray),
selector ? selector->get_NativeTriangleSelector() : 0,
outCP,
outTr);
outCollisionPoint = irr::NativeConverter::getNETVector(outCP);
outTriangle = irr::NativeConverter::getNETTriangle(outTr);
return ret;
}
Core::Vector3D ISceneCollisionManager::GetCollisionResultPosition(
Scene::ITriangleSelector* selector,
Core::Vector3D ellipsoidPosition,
Core::Vector3D ellipsoidRadius,
Core::Vector3D ellipsoidDirectionAndSpeed,
[PARAMFLAG::Out] Core::Triangle3D& triout,
[PARAMFLAG::Out] bool& outFalling,
float slidingSpeed,
Core::Vector3D gravityDirectionAndSpeed)
{
bool outF;
irr::core::triangle3df outTr;
irr::core::vector3df ret = SCM->getCollisionResultPosition(
selector ? selector->get_NativeTriangleSelector() : 0,
irr::NativeConverter::getNativeVector(ellipsoidPosition),
irr::NativeConverter::getNativeVector(ellipsoidRadius),
irr::NativeConverter::getNativeVector(ellipsoidDirectionAndSpeed),
outTr,
outF,
slidingSpeed,
irr::NativeConverter::getNativeVector(gravityDirectionAndSpeed));
triout = irr::NativeConverter::getNETTriangle(outTr);
outFalling = outF;
return irr::NativeConverter::getNETVector(ret);
}
Core::Line3D ISceneCollisionManager::GetRayFromScreenCoordinates(
Core::Position2D pos, Scene::ICameraSceneNode* camera)
{
return irr::NativeConverter::getNETLine(
SCM->getRayFromScreenCoordinates(
irr::NativeConverter::getNativePos(pos),
camera ? camera->get_NativeCameraSceneNode(): 0));
}
Core::Position2D ISceneCollisionManager::GetScreenCoordinatesFrom3DPosition(
Core::Vector3D pos, Scene::ICameraSceneNode* camera)
{
irr::core::position2d<irr::s32> p = SCM->getScreenCoordinatesFrom3DPosition(
irr::NativeConverter::getNativeVector(pos),
camera ? camera->get_NativeCameraSceneNode(): 0);
return Core::Position2D(p.X, p.Y);
}
Scene::ISceneNode* ISceneCollisionManager::GetSceneNodeFromScreenCoordinatesBB(Core::Position2D pos,
int idBitMask, bool noDebugObjects)
{
irr::scene::ISceneNode* node = SCM->getSceneNodeFromScreenCoordinatesBB(
irr::NativeConverter::getNativePos(pos), idBitMask, noDebugObjects);
if (!node)
return 0;
return new ISceneNode(node);
}
Scene::ISceneNode* ISceneCollisionManager::GetSceneNodeFromRayBB(Core::Line3D ray,
int idBitMask, bool noDebugObjects)
{
irr::scene::ISceneNode* node = SCM->getSceneNodeFromRayBB(
irr::NativeConverter::getNativeLine(ray), idBitMask, noDebugObjects);
if (!node)
return 0;
return new ISceneNode(node);
}
Scene::ISceneNode* ISceneCollisionManager::GetSceneNodeFromCameraBB(
Scene::ICameraSceneNode* camera, int idBitMask, bool noDebugObjects)
{
irr::scene::ISceneNode* node = SCM->getSceneNodeFromCameraBB(
camera ? camera->get_NativeCameraSceneNode(): 0, idBitMask, noDebugObjects);
if (!node)
return 0;
return new ISceneNode(node);
}
}
}