#include <irrlicht/irrlicht.h>
#include "ISceneManager.h"
+class CustomSceneNode : public irr::scene::ISceneNode
+{
+ void (*Render)();
+ irr_core_aabbox3d_f32* (*GetBoundingBox)();
+ int (*GetMaterialCount)();
+ irr_video_SMaterial* (*GetMaterial)(unsigned int i);
+
+public:
+ CustomSceneNode(irr::scene::ISceneNode* parent,
+ irr::scene::ISceneManager* smgr,
+ irr::s32 id,
+ const irr::core::vector3df& position,
+ const irr::core::vector3df& rotation,
+ const irr::core::vector3df& scale,
+ void (*render)(),
+ irr_core_aabbox3d_f32* (*getBoundingBox)(),
+ int (*getMaterialCount)(),
+ irr_video_SMaterial* (*getMaterial)(unsigned int i))
+ : irr::scene::ISceneNode(parent, smgr, id, position, rotation, scale)
+ {
+ Render = render;
+ GetBoundingBox = getBoundingBox;
+ GetMaterialCount = getMaterialCount;
+ GetMaterial = getMaterial;
+ }
+
+ virtual void OnRegisterSceneNode()
+ {
+ if (IsVisible) {
+ SceneManager->registerNodeForRendering(this);
+ }
+
+ ISceneNode::OnRegisterSceneNode();
+ }
+
+ virtual void render()
+ {
+ Render();
+ }
+
+ virtual const irr::core::aabbox3d<irr::f32>& getBoundingBox() const
+ {
+ irr_core_aabbox3d_f32* box = GetBoundingBox();
+ irr::core::aabbox3d<irr::f32>* irrBox = new irr::core::aabbox3d<irr::f32>();
+ return *irrBox;
+ }
+
+ virtual irr::u32 getMaterialCount() const
+ {
+ return GetMaterialCount();
+ }
+
+ virtual irr::video::SMaterial& getMaterial(irr::u32 i)
+ {
+ irr_video_SMaterial* material = GetMaterial(i);
+ irr::video::SMaterial* irrMaterial = new irr::video::SMaterial();
+ irrMaterial->Wireframe = material->wireframe;
+ irrMaterial->Lighting = material->lighting;
+ return *irrMaterial;
+ }
+};
+
extern "C" {
irr_scene_IAnimatedMeshSceneNode*
- irr_scene_ISceneManager_addAnimatedMeshSceneNode(irr_scene_ISceneManager* smgr,
- irr_scene_IAnimatedMesh* mesh,
- irr_scene_ISceneNode* parent,
- int32_t id,
- irr_core_vector3df* position,
- irr_core_vector3df* rotation,
- irr_core_vector3df* scale,
- bool alsoAddIfMeshPointerZero)
- {
- const irr::core::vector3df& iPosition = irr::core::vector3df(position->x,
- position->y,
- position->z);
- const irr::core::vector3df& iRotation = irr::core::vector3df(rotation->x,
- rotation->y,
- rotation->z);
- const irr::core::vector3df& iScale = irr::core::vector3df(scale->x,
- scale->y,
- scale->z);
+ irr_scene_addAnimatedMeshSceneNode(irr_scene_ISceneManager* smgr,
+ irr_scene_IAnimatedMesh* mesh,
+ irr_scene_ISceneNode* parent,
+ int id,
+ irr_core_vector3df* position,
+ irr_core_vector3df* rotation,
+ irr_core_vector3df* scale,
+ int alsoAddIfMeshPointerZero)
+ {
+ const irr::core::vector3df iPosition =
+ position ?
+ irr::core::vector3df(position->x, position->y, position->z) :
+ irr::core::vector3df(0, 0, 0);
+
+ const irr::core::vector3df iRotation =
+ rotation ?
+ irr::core::vector3df(rotation->x, rotation->y, rotation->z) :
+ irr::core::vector3df(0, 0, 0);
+
+ const irr::core::vector3df& iScale =
+ scale ?
+ irr::core::vector3df(scale->x, scale->y, scale->z) :
+ irr::core::vector3df(1, 1, 1);
+
return (irr_scene_IAnimatedMeshSceneNode*)
- ((irr::scene::ISceneManager*)smgr)->addAnimatedMeshSceneNode((irr::scene::IAnimatedMesh*)mesh,
- (irr::scene::ISceneNode*)parent,
- id,
- iPosition,
- iRotation,
- iScale,
- alsoAddIfMeshPointerZero);
+ ((irr::scene::ISceneManager*)smgr)
+ ->addAnimatedMeshSceneNode((irr::scene::IAnimatedMesh*)mesh,
+ (irr::scene::ISceneNode*)parent,
+ id,
+ iPosition,
+ iRotation,
+ iScale,
+ alsoAddIfMeshPointerZero);
}
+ irr_scene_ICameraSceneNode*
+ irr_scene_addCameraSceneNode(irr_scene_ISceneManager* smgr,
+ irr_scene_ISceneNode* parent,
+ irr_core_vector3df* position,
+ irr_core_vector3df* lookat,
+ int id,
+ int makeActive)
+ {
+ const irr::core::vector3df& iPosition =
+ position ?
+ irr::core::vector3df(position->x, position->y, position->z) :
+ irr::core::vector3df(0, 0, 0);
+
+ const irr::core::vector3df& iLookat =
+ lookat ?
+ irr::core::vector3df(lookat->x, lookat->y, lookat->z) :
+ irr::core::vector3df(0, 0, 100);
+
+ return (irr_scene_ICameraSceneNode*)
+ ((irr::scene::ISceneManager*)smgr)
+ ->addCameraSceneNode((irr::scene::ISceneNode*)parent,
+ iPosition,
+ iLookat,
+ id,
+ makeActive);
+ }
+
+ irr_scene_ICameraSceneNode*
+ irr_scene_addCameraSceneNodeFPS(irr_scene_ISceneManager* smgr,
+ irr_scene_ISceneNode* parent,
+ float rotateSpeed,
+ float moveSpeed,
+ int id,
+ irr_SkeyMap* keyMapArray,
+ int keyMapSize,
+ int noVerticalMovement,
+ float jumpSpeed,
+ int invertMouse,
+ int makeActive)
+ {
+ return ((irr::scene::ISceneManager*)smgr)
+ ->addCameraSceneNodeFPS((irr::scene::ISceneNode*)parent,
+ rotateSpeed,
+ moveSpeed,
+ id,
+ (irr::SKeyMap*)keyMapArray,
+ keyMapSize,
+ noVerticalMovement,
+ jumpSpeed,
+ invertMouse,
+ makeActive);
+ }
+
+ irr_scene_ISceneNode*
+ irr_scene_addCustomSceneNode(irr_scene_ISceneManager* smgr,
+ irr_scene_ISceneNode* parent,
+ int id,
+ irr_core_vector3df* position,
+ irr_core_vector3df* rotation,
+ irr_core_vector3df* scale,
+ void (*render)(),
+ irr_core_aabbox3d_f32* (*getBoundingBox)(),
+ int (*getMaterialCount)(),
+ irr_video_SMaterial* (*getMaterial)(unsigned int i))
+ {
+ if (parent == NULL)
+ {
+ parent = irr_scene_getRootSceneNode(smgr);
+ }
+
+ const irr::core::vector3df iPosition =
+ position ?
+ irr::core::vector3df(position->x, position->y, position->z) :
+ irr::core::vector3df(0, 0, 0);
+
+ const irr::core::vector3df iRotation =
+ rotation ?
+ irr::core::vector3df(rotation->x, rotation->y, rotation->z) :
+ irr::core::vector3df(0, 0, 0);
+
+ const irr::core::vector3df& iScale =
+ scale ?
+ irr::core::vector3df(scale->x, scale->y, scale->z) :
+ irr::core::vector3df(1, 1, 1);
+
+ CustomSceneNode *node =
+ new CustomSceneNode((irr::scene::ISceneNode*)parent,
+ (irr::scene::ISceneManager*)smgr,
+ id,
+ iPosition,
+ iRotation,
+ iScale,
+ render,
+ getBoundingBox,
+ getMaterialCount,
+ getMaterial);
+ //node->drop();
+ //node = 0;
+ //return NULL;
+ return node;
+ }
+
+ irr_scene_IMeshSceneNode*
+ irr_scene_addOctreeSceneNodeAM(irr_scene_ISceneManager* smgr,
+ irr_scene_IAnimatedMesh* mesh,
+ irr_scene_ISceneNode* parent,
+ int id,
+ int minimalPolysPerNode,
+ int alsoAddIfMeshPointerZero)
+ {
+ return ((irr::scene::ISceneManager*)smgr)
+ ->addOctreeSceneNode((irr::scene::IAnimatedMesh*)mesh,
+ (irr::scene::ISceneNode*)parent,
+ id,
+ minimalPolysPerNode,
+ alsoAddIfMeshPointerZero);
+ }
+
+ void
+ irr_scene_drawAll(irr_scene_ISceneManager* smgr)
+ {
+ ((irr::scene::ISceneManager*)smgr)->drawAll();
+ }
+
+
irr_scene_IAnimatedMesh*
- irr_scene_ISceneManager_getMesh(irr_scene_ISceneManager* smgr,
- const char* filename)
+ irr_scene_getMesh(irr_scene_ISceneManager* smgr,
+ const char* filename)
{
return (irr_scene_IAnimatedMesh*)
((irr::scene::ISceneManager*)smgr)->getMesh(filename);
}
+
+ irr_scene_ISceneNode*
+ irr_scene_getRootSceneNode(irr_scene_ISceneManager* smgr)
+ {
+ return (irr_scene_ISceneNode*)
+ ((irr::scene::ISceneManager*)smgr)->getRootSceneNode();
+ }
}