]> git.jsancho.org Git - guile-irrlicht.git/blobdiff - src/scene-manager.cpp
Use SWIG for wrapping C++
[guile-irrlicht.git] / src / scene-manager.cpp
diff --git a/src/scene-manager.cpp b/src/scene-manager.cpp
deleted file mode 100644 (file)
index 31f4330..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
-/* guile-irrlicht --- GNU Guile bindings for Irrlicht Engine
-
-   Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
-
-   This file is part of guile-irrlicht.
-
-   guile-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.
-
-   guile-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
-   <http://www.gnu.org/licenses/>.
-*/
-
-#include <irrlicht/irrlicht.h>
-#include <libguile.h>
-#include "gsubr.h"
-#include "scene-manager.h"
-#include "vector3d.h"
-#include "wrapped.h"
-
-using namespace irr;
-
-template <typename TParent>
-SCM
-ISceneManager_addAnimatedMeshSceneNode (SCM scene_manager,
-                                        SCM mesh,
-                                        SCM parent,
-                                        SCM id,
-                                        SCM position,
-                                        SCM rotation,
-                                        SCM scale,
-                                        SCM also_add_if_mesh_pointer_zero)
-{
-  scene::ISceneManager* smgr = (scene::ISceneManager*) scm_to_irr_pointer (scene_manager);
-  scene::IAnimatedMeshSceneNode* node =
-    smgr->addAnimatedMeshSceneNode ((scene::IAnimatedMesh*) scm_to_irr_pointer (mesh),
-                                    (TParent) scm_to_irr_pointer (parent),
-                                    scm_to_int32 (id),
-                                    scm_to_vector3df (position),
-                                    scm_to_vector3df (rotation),
-                                    scm_to_vector3df (scale),
-                                    scm_to_bool (also_add_if_mesh_pointer_zero));
-  return scm_from_irr_pointer ("<animated-mesh-scene-node>", (void*) node);
-}
-
-template <typename TParent>
-SCM
-ISceneManager_addCameraSceneNode (SCM scene_manager,
-                                  SCM parent,
-                                  SCM position,
-                                  SCM lookat,
-                                  SCM id,
-                                  SCM make_active)
-{
-  scene::ISceneManager* smgr = (scene::ISceneManager*) scm_to_irr_pointer (scene_manager);
-  scene::ICameraSceneNode* camera =
-    smgr->addCameraSceneNode ((TParent) scm_to_irr_pointer (parent),
-                              scm_to_vector3df (position),
-                              scm_to_vector3df (lookat),
-                              scm_to_int32 (id),
-                              scm_to_bool (make_active));
-  return scm_from_irr_pointer ("<camera-scene-node>", (void*) camera);
-}
-
-template <typename TParent>
-SCM
-ISceneManager_addCameraSceneNodeFPS (SCM scene_manager,
-                                     SCM rest)
-{
-  SCM parent;
-  SCM rotate_speed;
-  SCM move_speed;
-  SCM id;
-  SCM key_map_array;
-  SCM key_map_size;
-  SCM no_vertical_movement;
-  SCM jump_speed;
-  SCM invert_mouse;
-  SCM make_active;
-
-  scm_c_bind_keyword_arguments ("scene_ISceneManager_addCameraSceneNodeFPS",
-                                rest, (scm_t_keyword_arguments_flags)0,
-                                scm_from_utf8_keyword ("parent"), &parent,
-                                scm_from_utf8_keyword ("rotate-speed"), &rotate_speed,
-                                scm_from_utf8_keyword ("move-speed"), &move_speed,
-                                scm_from_utf8_keyword ("id"), &id,
-                                scm_from_utf8_keyword ("key-map-array"), &key_map_array,
-                                scm_from_utf8_keyword ("key-map-size"), &key_map_size,
-                                scm_from_utf8_keyword ("no-vertical-movement"), &no_vertical_movement,
-                                scm_from_utf8_keyword ("jump-speed"), &jump_speed,
-                                scm_from_utf8_keyword ("invert-mouse"), &invert_mouse,
-                                scm_from_utf8_keyword ("make-active"), &make_active,
-                                SCM_UNDEFINED);
-
-  scene::ISceneManager* smgr = (scene::ISceneManager*) scm_to_irr_pointer (scene_manager);
-  scene::ICameraSceneNode* camera =
-    smgr->addCameraSceneNodeFPS ((TParent) scm_to_irr_pointer (parent),
-                                 scm_to_double (rotate_speed),
-                                 scm_to_double (move_speed),
-                                 scm_to_int32 (id),
-                                 (SKeyMap*) scm_to_irr_pointer (key_map_array),
-                                 scm_to_int32 (key_map_size),
-                                 scm_to_bool (no_vertical_movement),
-                                 scm_to_double (jump_speed),
-                                 scm_to_bool (invert_mouse),
-                                 scm_to_bool (make_active));
-  return scm_from_irr_pointer ("<camera-scene-node>", (void*) camera);
-}
-
-template <typename TParent>
-SCM
-ISceneManager_addCubeSceneNode (SCM scene_manager,
-                                SCM size,
-                                SCM parent,
-                                SCM id,
-                                SCM position,
-                                SCM rotation,
-                                SCM scale)
-{
-  scene::ISceneManager* smgr = (scene::ISceneManager*) scm_to_irr_pointer (scene_manager);
-  scene::IMeshSceneNode* node =
-    smgr->addCubeSceneNode (scm_to_double (size),
-                            (TParent) scm_to_irr_pointer (parent),
-                            scm_to_int32 (id),
-                            scm_to_vector3df (position),
-                            scm_to_vector3df (rotation),
-                            scm_to_vector3df (scale));
-  return scm_from_irr_pointer ("<mesh-scene-node>", (void*) node);
-}
-
-template <typename TParent>
-SCM
-ISceneManager_addCustomSceneNode (SCM scene_manager,
-                                  SCM proc_render,
-                                  SCM proc_get_bounding_box,
-                                  SCM proc_get_material_count,
-                                  SCM proc_get_material,
-                                  SCM parent,
-                                  SCM id,
-                                  SCM position,
-                                  SCM rotation,
-                                  SCM scale)
-{
-  class CustomSceneNode : public scene::ISceneNode
-  {
-    SCM scm_render;
-    SCM scm_get_bounding_box;
-    SCM scm_get_material_count;
-    SCM scm_get_material;
-
-  public:
-    CustomSceneNode (scene::ISceneNode* parent,
-                     scene::ISceneManager* smgr,
-                     s32 id,
-                     const core::vector3df& position,
-                     const core::vector3df& rotation,
-                     const core::vector3df& scale,
-                     SCM render,
-                     SCM get_bounding_box,
-                     SCM get_material_count,
-                     SCM get_material)
-      : scene::ISceneNode (parent, smgr, id, position, rotation, scale)
-    {
-      scm_render = render;
-      scm_get_bounding_box = get_bounding_box;
-      scm_get_material_count = get_material_count;
-      scm_get_material = get_material;
-    }
-
-    virtual void OnRegisterSceneNode ()
-    {
-      if (IsVisible)
-        {
-          SceneManager->registerNodeForRendering (this);
-        }
-      ISceneNode::OnRegisterSceneNode ();
-    }
-
-    virtual void render ()
-    {
-      scm_call_0 (scm_render);
-    }
-
-    virtual const core::aabbox3d<f32>& getBoundingBox () const
-    {
-      SCM box = scm_call_0 (scm_get_bounding_box);
-      return *((core::aabbox3d<f32>*) scm_to_irr_pointer (box));
-    }
-
-    virtual u32 getMaterialCount () const
-    {
-      return scm_to_uint32 (scm_call_0 (scm_get_material_count));
-    }
-
-    virtual video::SMaterial& getMaterial (u32 i)
-    {
-      SCM material = scm_call_1 (scm_get_material, scm_from_uint32 (i));
-      return *((video::SMaterial*) scm_to_irr_pointer (material));
-    }
-  };
-
-  CustomSceneNode* node =
-    new CustomSceneNode ((TParent) scm_to_irr_pointer (parent),
-                         (scene::ISceneManager*) scm_to_irr_pointer (scene_manager),
-                         scm_to_int32 (id),
-                         scm_to_vector3df (position),
-                         scm_to_vector3df (rotation),
-                         scm_to_vector3df (scale),
-                         proc_render,
-                         proc_get_bounding_box,
-                         proc_get_material_count,
-                         proc_get_material);
-  return scm_from_irr_pointer ("<scene-node>", (void*) node);
-}
-
-template <typename TParent, typename TMesh>
-SCM
-ISceneManager_addOctreeSceneNode (SCM scene_manager,
-                                  SCM mesh,
-                                  SCM parent,
-                                  SCM id,
-                                  SCM minimal_polys_per_node,
-                                  SCM also_add_if_mesh_pointer_zero)
-{
-  scene::ISceneManager* smgr = (scene::ISceneManager*) scm_to_irr_pointer (scene_manager);
-  scene::IMeshSceneNode* node =
-    smgr->addOctreeSceneNode ((TMesh) scm_to_irr_pointer (mesh),
-                              (TParent) scm_to_irr_pointer (parent),
-                              scm_to_int32 (id),
-                              scm_to_int32 (minimal_polys_per_node),
-                              scm_to_bool (also_add_if_mesh_pointer_zero));
-  return scm_from_irr_pointer ("<mesh-scene-node>", (void*) node);
-}
-
-template <typename TParent>
-SCM
-ISceneManager_addSphereSceneNode (SCM scene_manager,
-                                  SCM radius,
-                                  SCM poly_count,
-                                  SCM parent,
-                                  SCM id,
-                                  SCM position,
-                                  SCM rotation,
-                                  SCM scale)
-{
-  scene::ISceneManager* smgr = (scene::ISceneManager*) scm_to_irr_pointer (scene_manager);
-  scene::IMeshSceneNode* node =
-    smgr->addSphereSceneNode (scm_to_double (radius),
-                              scm_to_int32 (poly_count),
-                              (TParent) scm_to_irr_pointer (parent),
-                              scm_to_int32 (id),
-                              scm_to_vector3df (position),
-                              scm_to_vector3df (rotation),
-                              scm_to_vector3df (scale));
-  return scm_from_irr_pointer ("<mesh-scene-node>", (void*) node);
-}
-
-SCM
-ISceneManager_createFlyCircleAnimator (SCM scene_manager,
-                                       SCM center,
-                                       SCM radius,
-                                       SCM speed,
-                                       SCM direction,
-                                       SCM start_position,
-                                       SCM radius_ellipsoid)
-{
-  scene::ISceneManager* smgr = (scene::ISceneManager*) scm_to_irr_pointer (scene_manager);
-  scene::ISceneNodeAnimator* anim =
-    smgr->createFlyCircleAnimator (scm_to_vector3df (center),
-                                   scm_to_double (radius),
-                                   scm_to_double (speed),
-                                   scm_to_vector3df (direction),
-                                   scm_to_double (start_position),
-                                   scm_to_double (radius_ellipsoid));
-  return scm_from_irr_pointer ("<scene-node-animator>", (void*) anim);
-}
-
-SCM
-ISceneManager_createFlyStraightAnimator (SCM scene_manager,
-                                         SCM start_point,
-                                         SCM end_point,
-                                         SCM time_for_way,
-                                         SCM loop,
-                                         SCM pingpong)
-{
-  scene::ISceneManager* smgr = (scene::ISceneManager*) scm_to_irr_pointer (scene_manager);
-  scene::ISceneNodeAnimator* anim =
-    smgr->createFlyStraightAnimator (scm_to_vector3df (start_point),
-                                     scm_to_vector3df (end_point),
-                                     scm_to_uint32 (time_for_way),
-                                     scm_to_bool (loop),
-                                     scm_to_bool (pingpong));
-  return scm_from_irr_pointer ("<scene-node-animator>", (void*) anim);
-}
-
-SCM
-ISceneManager_createRotationAnimator (SCM scene_manager,
-                                      SCM rotation_speed)
-{
-  scene::ISceneManager* smgr = (scene::ISceneManager*) scm_to_irr_pointer (scene_manager);
-  scene::ISceneNodeAnimator* anim =
-    smgr->createRotationAnimator (scm_to_vector3df (rotation_speed));
-  return scm_from_irr_pointer ("<scene-node-animator>", (void*) anim);
-}
-
-SCM
-ISceneManager_drawAll (SCM scene_manager)
-{
-  ((scene::ISceneManager*) scm_to_irr_pointer (scene_manager))->drawAll ();
-  return SCM_UNSPECIFIED;
-}
-
-SCM
-ISceneManager_getMesh (SCM scene_manager,
-                       SCM filename)
-{
-  char* cfilename = scm_to_utf8_string (filename);
-  scene::ISceneManager* smgr = (scene::ISceneManager*) scm_to_irr_pointer (scene_manager);
-  scene::IAnimatedMesh* mesh = smgr->getMesh(cfilename);
-  free (cfilename);
-  return scm_from_irr_pointer ("<animated-mesh>", (void*) mesh);
-}
-
-SCM
-ISceneManager_getRootSceneNode (SCM scene_manager)
-{
-  scene::ISceneManager* smgr = (scene::ISceneManager*) scm_to_irr_pointer (scene_manager);
-  return scm_from_irr_pointer ("<scene-node>", (void*) smgr->getRootSceneNode ());
-}
-
-void
-init_scene_manager (void)
-{
-  DEFINE_GSUBR ("ISceneManager_addAnimatedMeshSceneNode_ISceneNode", 8, 0, 0,
-                ISceneManager_addAnimatedMeshSceneNode<scene::ISceneNode*>);
-  DEFINE_GSUBR ("ISceneManager_addCameraSceneNode_ISceneNode", 6, 0, 0,
-                ISceneManager_addCameraSceneNode<scene::ISceneNode*>);
-  DEFINE_GSUBR ("ISceneManager_addCameraSceneNodeFPS_ISceneNode", 1, 0, 1,
-                ISceneManager_addCameraSceneNodeFPS<scene::ISceneNode*>);
-  DEFINE_GSUBR ("ISceneManager_addCubeSceneNode_ISceneNode", 7, 0, 0,
-                ISceneManager_addCubeSceneNode<scene::ISceneNode*>);
-  DEFINE_GSUBR ("ISceneManager_addCustomSceneNode_ISceneNode", 10, 0, 0,
-                ISceneManager_addCustomSceneNode<scene::ISceneNode*>);
-  DEFINE_GSUBR ("ISceneManager_addOctreeSceneNode_ISceneNode_IAnimatedMesh", 6, 0, 0,
-                (ISceneManager_addOctreeSceneNode<scene::ISceneNode*, scene::IAnimatedMesh*>));
-  DEFINE_GSUBR ("ISceneManager_addOctreeSceneNode_ISceneNode_IMesh", 6, 0, 0,
-                (ISceneManager_addOctreeSceneNode<scene::ISceneNode*, scene::IMesh*>));
-  DEFINE_GSUBR ("ISceneManager_addSphereSceneNode_ISceneNode", 8, 0, 0,
-                ISceneManager_addSphereSceneNode<scene::ISceneNode*>);
-  DEFINE_GSUBR ("ISceneManager_createFlyCircleAnimator", 7, 0, 0,
-                ISceneManager_createFlyCircleAnimator);
-  DEFINE_GSUBR ("ISceneManager_createFlyStraightAnimator", 6, 0, 0,
-                ISceneManager_createFlyStraightAnimator);
-  DEFINE_GSUBR ("ISceneManager_createRotationAnimator", 2, 0, 0,
-                ISceneManager_createRotationAnimator);
-  DEFINE_GSUBR ("ISceneManager_drawAll", 1, 0, 0, ISceneManager_drawAll);
-  DEFINE_GSUBR ("ISceneManager_getMesh", 2, 0, 0, ISceneManager_getMesh);
-  DEFINE_GSUBR ("ISceneManager_getRootSceneNode", 1, 0, 0, ISceneManager_getRootSceneNode);
-}