im watching some pretty good video lectures at the moment. and one thing should be really important, its the documentation. so i fixed this and added some comments in. most of the time are comments interrupting me by reading a code. but im sure that makes sense, maybe not at a such tiny program like this, but at a huge and a very complex program, there im sure about. at the game im working, its also just a tiny one, im getting lost sometimes by searching anything. so if i had use to documented my code, i would be such faster in find the needed point.
so here is the comment version, oh and i commented out the complete node detaching.
//test rigidBODY node removing (not working)
//drh 2010 with kind supporting by drwr
#include "pandaFramework.h"
#include "pandaSystem.h"
#include "texturePool.h"
#include "PGButton.h"
#include "mouseButton.h"
#include "transparencyAttrib.h"
#include "rigidBodyCombiner.h"
PandaFramework framework;
WindowFramework *window;
GraphicsEngine *engine;
PT(ClockObject) globalClock = ClockObject::get_global_clock();
PT(AsyncTaskManager) taskMgr = AsyncTaskManager::get_global_ptr();
PT(RigidBodyCombiner) rbc = new RigidBodyCombiner("rbc");
PT(Texture) texturePARTICLE;
PT(PGButton) newINSTANCES;
NodePath camera,rigNODE[10000],obj[100000],buttonINS;
int rigNODEid = 0,partCOUNT=100,timerX;
float PARTposY = .5;
/*
opens a window, setting some things, like size, origin on the screen...
*/
void windowOPEN() {
framework.set_window_title("rigTEST");
WindowProperties *props = new WindowProperties();
props->set_size(500,500);
props->set_origin(500,10);
props->set_undecorated(true);
window = framework.open_window(*props,0);
window->get_graphics_window()->get_active_display_region(0)->set_clear_color(Colorf(1,1,1,1));
}
// get the camera and stored in var camera
void getCAMERA() {
camera = window->get_camera_group();
}
/*
paints the geometry and assign it on a rigid body
*/
void paintGEO() {
rigNODE[rigNODEid] = NodePath(rbc);
rigNODE[rigNODEid].reparent_to(window->get_aspect_2d());
float PARTposX = -.5;
int count = 0;
for (int i=0;i<partCOUNT;i++){
obj[i] = window->load_model(framework.get_models(),"box");
obj[i].set_scale(.04);
obj[i].set_pos(PARTposX,0,PARTposY);
obj[i].set_p(90);
obj[i].reparent_to(rigNODE[rigNODEid]);
PARTposX += .04;
count++;
if (count > 24) {
PARTposY -=.04;
PARTposX = -.5;
count = 0;
}
}
rbc->collect();
}
/*
detach the not needed nodes out of the rigid body and detach the rigid body completly and removes the nodes
(just to be sure that everything is deleted, its not really important, to do this thing twice)
setting some things, like add 100 new objects , getting back to the start position...
loop over all objects and set a new scale for it
*/
static void NEWINSTANCES(const Event *ev, void *data){
PGButton* CurrentButton=(PGButton *)data;
for (int i=0;i<partCOUNT;i++) {
obj[i].detach_node();
obj[i].remove_node();
}
rbc->collect();
// rigNODE[rigNODEid].detach_node();
// rigNODE[rigNODEid].remove_node();
PARTposY = .5;
partCOUNT += 100;
paintGEO();
for (int i=0;i<partCOUNT;i++) {
obj[i].set_scale(.02);
}
rigNODEid++;
}
// get a button
void button() {
newINSTANCES = new PGButton("newINSTANCES");
newINSTANCES->setup("newINSTANCES",0.2);
buttonINS = window->get_aspect_2d().attach_new_node(newINSTANCES);
buttonINS.set_scale(.05);
buttonINS.set_pos(0,0,-.5);
framework.define_key(newINSTANCES->get_click_event(MouseButton::one() ), "button press", &NEWINSTANCES, newINSTANCES);
}
// init the main program
int main(int argc, char *argv[]) {
framework.open_framework(argc, argv);
windowOPEN();
getCAMERA();
paintGEO();
button();
framework.main_loop();
framework.close_framework();
return (0);
}