minimal C++ collision pusher example

Hello,

simple example of the CollisionHandlerPusher in C++. I’m not sure I do everything in the right way but it works very well for me. (under MacOSX)

Clément.

#include "pandaFramework.h"
#include "collisionHandlerPusher.h"
#include "collisionNode.h"
#include "collisionSphere.h"
#include "mouseWatcher.h"

int main(int argc, char *argv[])
{
   PandaFramework framework;
   // Open a new window framework and set the title
   framework.open_framework(argc, argv);
   framework.set_window_title("Pusher");
   framework.enable_default_keys();

   // Open a window
   WindowFramework* window = framework.open_window();
   // enable key events
   window->enable_keyboard();

   // Get a MouseWatcher from the created window
   // will be used to move nodes arround
   NodePath mouseNode = window->get_mouse();

   // Set up the scene
   NodePath camera = window->get_camera_group();
   camera.set_pos(0., 0., 35.);
   camera.set_p(-90.);

   NodePath smileyNode = window->load_model(window->get_render(), "smiley");
   smileyNode.set_pos(0., 0., 0.5);
   CollisionNode* cNode = new CollisionNode("smiley");
   cNode->add_solid(new CollisionSphere(0, 0, 0, 1.0));
   NodePath smileyC = smileyNode.attach_new_node(cNode);
   // smileyC.show();

   NodePath frowneyNode = window->load_model(window->get_render(), "frowney");
   frowneyNode.set_pos(5., 0., 0.5);
   cNode = new CollisionNode("frowney");
   cNode->add_solid(new CollisionSphere(0, 0, 0, 1.0));
   NodePath frowneyC = frowneyNode.attach_new_node(cNode);
   // frowneyC.show();

   // set up collisions handler and pusher
   CollisionHandlerPusher pusher;
   CollisionTraverser* collTrav = new CollisionTraverser();

   // Smiley will be pushed if a collision is detected
   pusher.add_collider(smileyC, smileyNode);
   collTrav->add_collider(smileyC, &pusher);

   // Try also this
   // collTrav->add_collider(frowneyC, &pusher);
   // pusher.add_collider(frowneyC, frowneyNode);

   // too lazy to create a task.
   Thread *current_thread = Thread::get_current_thread();
   while (framework.do_frame(current_thread))
   {
      if(!mouseNode.is_empty())
      {
         MouseWatcher* mouseWatcher = 
                   dynamic_cast<MouseWatcher*>(mouseNode.node());
         if(mouseWatcher != NULL && mouseWatcher->has_mouse())
         {
            frowneyNode.set_x(mouseWatcher->get_mouse_x() * 10);
            frowneyNode.set_y(mouseWatcher->get_mouse_y() * 10);
         }
      }
      // check collisions, will call pusher collision handler
      // if a collision is detected
      collTrav->traverse(window->get_render());
   }

   framework.close_framework();
   return (0);
}

Thats nice!
I hope we can get more C++ examples for they are scarce for panda3d.