From 8c7371f02417bb3a9aaafb9f084b97cc89f09da8 Mon Sep 17 00:00:00 2001 From: Javier Sancho Date: Sat, 12 Oct 2019 12:32:52 +0200 Subject: [PATCH] Scene manager --- Makefile.am | 5 +++- include/ISceneManager.h | 54 +++++++++++++++++++++++++++++++++++ include/cirrlicht.h | 7 ++++- include/vector3d.h | 32 +++++++++++++++++++++ src/ISceneManager.cpp | 62 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 158 insertions(+), 2 deletions(-) create mode 100644 include/ISceneManager.h create mode 100644 include/vector3d.h create mode 100644 src/ISceneManager.cpp diff --git a/Makefile.am b/Makefile.am index 5570dfe..83bc545 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3,6 +3,7 @@ lib_LTLIBRARIES = libCIrrlicht.la libCIrrlicht_la_SOURCES = \ src/CIrrlicht.cpp \ src/IGUIEnvironment.cpp \ + src/ISceneManager.cpp \ src/IVideoDriver.cpp \ src/IrrlichtDevice.cpp libCIrrlicht_la_CPPFLAGS = -I$(top_srcdir)/include @@ -10,9 +11,11 @@ libCIrrlicht_la_LDFLAGS = -version-info 0:1 include_HEADERS = \ include/EDriverTypes.h \ include/IGUIEnvironment.h \ + include/ISceneManager.h \ include/IVideoDriver.h \ include/IrrlichtDevice.h \ include/SColor.h \ include/cirrlicht.h \ include/dimension2d.h \ - include/rect.h + include/rect.h \ + include/vector3d.h diff --git a/include/ISceneManager.h b/include/ISceneManager.h new file mode 100644 index 0000000..eca8a48 --- /dev/null +++ b/include/ISceneManager.h @@ -0,0 +1,54 @@ +/* c-irrlicht --- C bindings for Irrlicht Engine + + Copyright (C) 2019 Javier Sancho + + This file is part of c-irrlicht. + + c-irrlicht is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 3 of the + License, or (at your option) any later version. + + c-irrlicht is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with guile-irrlicht. If not, see + . +*/ + +#ifndef __C_SCENE_MANAGER_H_INCLUDED__ +#define __C_SCENE_MANAGER_H_INCLUDED__ + +#include "vector3d.h" + +typedef void irr_scene_IAnimatedMesh; +typedef void irr_scene_IAnimatedMeshSceneNode; +typedef void irr_scene_ISceneManager; +typedef void irr_scene_ISceneNode; + +#ifdef __cplusplus +extern "C" { +#endif + + 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); + + irr_scene_IAnimatedMesh* + irr_scene_ISceneManager_getMesh(irr_scene_ISceneManager* smgr, + const char* filename); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/cirrlicht.h b/include/cirrlicht.h index 9a07368..95febb1 100644 --- a/include/cirrlicht.h +++ b/include/cirrlicht.h @@ -22,10 +22,15 @@ #ifndef __C_IRRLICHT_H_INCLUDED__ #define __C_IRRLICHT_H_INCLUDED__ +#include "dimension2d.h" #include "EDriverTypes.h" #include "IGUIEnvironment.h" #include "IrrlichtDevice.h" -#include "dimension2d.h" +#include "ISceneManager.h" +#include "IVideoDriver.h" +#include "rect.h" +#include "SColor.h" +#include "vector3d.h" #ifdef __cplusplus extern "C" { diff --git a/include/vector3d.h b/include/vector3d.h new file mode 100644 index 0000000..6019d94 --- /dev/null +++ b/include/vector3d.h @@ -0,0 +1,32 @@ +/* c-irrlicht --- C bindings for Irrlicht Engine + + Copyright (C) 2019 Javier Sancho + + This file is part of c-irrlicht. + + c-irrlicht is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 3 of the + License, or (at your option) any later version. + + c-irrlicht is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with guile-irrlicht. If not, see + . +*/ + +#ifndef __C_IRR_POINT_3D_H_INCLUDED__ +#define __C_IRR_POINT_3D_H_INCLUDED__ + +typedef struct +{ + float_t x; + float_t y; + float_t z; +} irr_core_vector3df; + +#endif diff --git a/src/ISceneManager.cpp b/src/ISceneManager.cpp new file mode 100644 index 0000000..83dcda1 --- /dev/null +++ b/src/ISceneManager.cpp @@ -0,0 +1,62 @@ +/* c-irrlicht --- C bindings for Irrlicht Engine + + Copyright (C) 2019 Javier Sancho + + This file is part of c-irrlicht. + + c-irrlicht is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 3 of the + License, or (at your option) any later version. + + c-irrlicht is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with guile-irrlicht. If not, see + . +*/ + +#include +#include "ISceneManager.h" + +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); + return (irr_scene_IAnimatedMeshSceneNode*) + ((irr::scene::ISceneManager*)smgr)->addAnimatedMeshSceneNode((irr::scene::IAnimatedMesh*)mesh, + (irr::scene::ISceneNode*)parent, + id, + iPosition, + iRotation, + iScale, + alsoAddIfMeshPointerZero); + } + + irr_scene_IAnimatedMesh* + irr_scene_ISceneManager_getMesh(irr_scene_ISceneManager* smgr, + const char* filename) + { + return (irr_scene_IAnimatedMesh*) + ((irr::scene::ISceneManager*)smgr)->getMesh(filename); + } +} -- 2.39.2