1) I am using a variant style system and it sounds like your guys aren't. My components implement a set/get property that passes a variant on the stack. Note that my components don't actually have to store the property as a variant. I did this so that C++ code could run faster. I have stuff like this:
void Sim_ComFrame::setValue( const STL_String& name, const Prop_Value& value ){ if ( Sim_IsName( "pos" ) == true ) { setMatrix( value.getMatrix4x3f() ); }}Prop_Value Sim_ComFrame::getValue( const STL_String& name ){ if ( Sim_IsName( "pos" ) == true ) { return Prop_Value( getMatrix() ); } else return Prop_Value();}
I am thinking of changing this because it's becoming a hassle to manage the code. The only real use I have left for the variant (Prop_Value), is to allow for my data layout to use XML without knowing anthying about the object. Also it allows for an object inspection editor to written pretty easy. It all works but it nags of YAGNI. I keep getting the feel like I am reinventing lua tables, which is even funnier since my scripting languga is lua and I have written bindings to setValue/getValue :)
So I am mulling over writting all the data layout and editor code by hand for each component. My engine is starting to stink of middleware instead of writing my specific game. Have you guys already dealt with this sort of stuff?
2) I did the networking part of my components using a scope flag per component. So a component is flagged as client, server or both. The problem with this is that I am finding that I need to conditionally compile some componets and this makes me feel dirty. Maybe I should spit components based on their scope?