Revision: 7322
http://playerstage.svn.sourceforge.net/playerstage/?rev=7322&view=rev
Author: rtv
Date: 2009-02-09 18:53:51 +0000 (Mon, 09 Feb 2009)
Log Message:
-----------
increased effciency of charging model
Modified Paths:
--------------
code/stage/trunk/libstage/CMakeLists.txt
code/stage/trunk/libstage/canvas.cc
code/stage/trunk/libstage/model.cc
code/stage/trunk/libstage/powerpack.cc
code/stage/trunk/libstage/stage.hh
code/stage/trunk/libstage/world.cc
Modified: code/stage/trunk/libstage/CMakeLists.txt
===================================================================
--- code/stage/trunk/libstage/CMakeLists.txt 2009-02-09 03:58:32 UTC (rev
7321)
+++ code/stage/trunk/libstage/CMakeLists.txt 2009-02-09 18:53:51 UTC (rev
7322)
@@ -29,7 +29,6 @@
options_dlg.cc
options_dlg.hh
powerpack.cc
- puck.cc
region.cc
resource.cc
stage.cc
@@ -42,6 +41,10 @@
worldgui.cc
)
+# TODO
+# puck.cc
+
+
add_library(stage SHARED ${stageSrcs})
set_source_files_properties( ${stageSrcs} PROPERTIES COMPILE_FLAGS
"${FLTK_CFLAGS}" )
Modified: code/stage/trunk/libstage/canvas.cc
===================================================================
--- code/stage/trunk/libstage/canvas.cc 2009-02-09 03:58:32 UTC (rev 7321)
+++ code/stage/trunk/libstage/canvas.cc 2009-02-09 18:53:51 UTC (rev 7322)
@@ -829,7 +829,7 @@
DrawBoundingBoxes();
- LISTMETHOD( world->puck_list, Puck*, Draw );
+ //LISTMETHOD( world->puck_list, Puck*, Draw );
// TODO - finish this properly
//LISTMETHOD( models_sorted, Model*, DrawWaypoints );
Modified: code/stage/trunk/libstage/model.cc
===================================================================
--- code/stage/trunk/libstage/model.cc 2009-02-09 03:58:32 UTC (rev 7321)
+++ code/stage/trunk/libstage/model.cc 2009-02-09 18:53:51 UTC (rev 7322)
@@ -216,6 +216,7 @@
parent(parent),
pose(),
power_pack( NULL ),
+ pps_charging(NULL),
props(NULL),
rebuild_displaylist(true),
say_string(NULL),
@@ -782,8 +783,11 @@
PowerPack* mypp = FindPowerPack();
assert( mypp );
- // make sure we only charge a powerpack once
- GList* ppacks_serviced = NULL;
+ // detach charger from all the packs charged last time
+ for( GList* it = pps_charging; it; it = it->next )
+ ((PowerPack*)it->data)->charging = false;
+ g_list_free( pps_charging );
+ pps_charging = NULL;
// run through and update all appropriate touchers
for( GList* touchers = AppendTouchingModels( NULL );
@@ -807,6 +811,9 @@
// move some joules from me to him
mypp->TransferTo( hispp, amount );
hispp->charging = true;
+
+ // remember who we are charging so we can detatch next
time
+ pps_charging = g_list_prepend( pps_charging, hispp );
}
}
}
Modified: code/stage/trunk/libstage/powerpack.cc
===================================================================
--- code/stage/trunk/libstage/powerpack.cc 2009-02-09 03:58:32 UTC (rev
7321)
+++ code/stage/trunk/libstage/powerpack.cc 2009-02-09 18:53:51 UTC (rev
7322)
@@ -28,13 +28,6 @@
printf( "%s stored %.2f/%.2f joules\n", prefix, stored, capacity );
}
-// this is called every world update cycle - can we get away without doing
this?
-void PowerPack::Update()
-{
- charging = false;
-}
-
-
/** OpenGL visualization of the powerpack state */
void PowerPack::Visualize( Camera* cam )
{
Modified: code/stage/trunk/libstage/stage.hh
===================================================================
--- code/stage/trunk/libstage/stage.hh 2009-02-09 03:58:32 UTC (rev 7321)
+++ code/stage/trunk/libstage/stage.hh 2009-02-09 18:53:51 UTC (rev 7322)
@@ -732,25 +732,66 @@
record within a model and called whenever the record is set.*/
typedef int (*stg_model_callback_t)( Model* mod, void* user );
- class Puck
- {
- private:
- void BuildDisplayList();
+ // class Puck
+// {
+// private:
+// void BuildDisplayList();
- public:
- stg_color_t color;
- int displaylist;
- stg_meters_t height;
- Pose pose;
- stg_meters_t radius;
+// public:
+// stg_color_t color;
+// int displaylist;
+// stg_meters_t height;
+// Pose pose;
+// stg_meters_t radius;
- Puck();
- void Load( Worldfile* wf, int section );
- void Save( Worldfile* wf, int section );
+// Puck();
+// void Load( Worldfile* wf, int section );
+// void Save( Worldfile* wf, int section );
- void Draw();
- };
+// void Draw();
+// };
+
+ // class EventQueue
+// {
+// private:
+// GTree* future;
+
+// static gint InstantCompare( stg_usec_t a, stg_usec_t b )
+// {
+// if( a < b )
+// return -1;
+
+// if( a > b )
+// return 1;
+
+// return 0; // they are equal
+// }
+
+// public:
+// EventQueue()
+// {
+// future = g_tree_new( InstantCompare );
+// }
+
+// RunInstant() ///< Updates all events due at the next instant
+// {
+// GList* instant_list =
+// }
+
+// QueueModel( Model* mod ) ///< Adds the model to the event queue
+// {
+// g_tree_insert( mod->updatedue, g_list_prepend( g_tree_lookup(
mod->updatedue ), mod ); );
+// }
+
+// DeQueueModel( Model* mod ) ///< removes the model from the event queue
+// {
+// g_tree_insert( mod->updatedue, g_list_remove( g_tree_lookup(
mod->updatedue ), mod ));
+// }
+
+// };
+
+
// ANCESTOR CLASS
/** Base class for Model and World */
class Ancestor
@@ -825,6 +866,7 @@
GList* charge_list; ///< Models which receive charge are listed here
bool destroy;
bool dirty; ///< iff true, a gui redraw would be required
+ GList* event_list; //<
GHashTable* models_by_name; ///< the models that make up the world,
indexed by name
double ppm; ///< the resolution of the world model in pixels per meter
bool quit; ///< quit this world ASAP
@@ -1418,10 +1460,6 @@
void Print( const char* prefix )
{ printf( "%s PowerPack %.2f/%.2f J\n", prefix, stored, capacity ); }
-
- /** Called exactly once for each pack on every world update
- cycle */
- void Update();
};
class Visibility
@@ -1593,6 +1631,10 @@
/** Optional attached PowerPack, defaults to NULL */
PowerPack* power_pack;
+ /** list of powerpacks that this model is currently charging,
+ initially NULL. */
+ GList* pps_charging;
+
/** GData datalist can contain arbitrary named data items. Can be used
by derived model types to store properties, and for user code
to associate arbitrary items with a model. */
Modified: code/stage/trunk/libstage/world.cc
===================================================================
--- code/stage/trunk/libstage/world.cc 2009-02-09 03:58:32 UTC (rev 7321)
+++ code/stage/trunk/libstage/world.cc 2009-02-09 18:53:51 UTC (rev 7322)
@@ -191,12 +191,12 @@
mod->LoadBlock( wf, entity );
}
-void World::LoadPuck( Worldfile* wf, int entity, GHashTable* entitytable )
-{
- Puck* puck = new Puck();
- puck->Load( wf, entity );
- puck_list = g_list_prepend( puck_list, puck );
-}
+// void World::LoadPuck( Worldfile* wf, int entity, GHashTable* entitytable )
+// {
+// Puck* puck = new Puck();
+// puck->Load( wf, entity );
+// puck_list = g_list_prepend( puck_list, puck );
+// }
@@ -334,8 +334,8 @@
}
else if( strcmp( typestr, "block" ) == 0 )
LoadBlock( wf, entity, entitytable );
- else if( strcmp( typestr, "puck" ) == 0 )
- LoadPuck( wf, entity, entitytable );
+// else if( strcmp( typestr, "puck" ) == 0 )
+// LoadPuck( wf, entity, entitytable );
else
LoadModel( wf, entity, entitytable );
}
@@ -426,9 +426,6 @@
// upate all positions first
LISTMETHOD( velocity_list, Model*, UpdatePose );
- // upate all powerpacks
- LISTMETHOD( powerpack_list, PowerPack*, Update );
-
// test all models that supply charge to see if they are touching
// something that takes charge
LISTMETHOD( charge_list, Model*, UpdateCharge );
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM)
software. With Adobe AIR, Ajax developers can use existing skills and code to
build responsive, highly engaging applications that combine the power of local
resources and data with the reach of the web. Download the Adobe AIR SDK and
Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit