Lord Brat, thanks for your reply.
im having a hard time imagining this in my head. maybe i havent thought about it enough, but i just cant see how i could use the same class to represent the local player / non-local player.
maybe its because of the way my engine works? basically, i have a parent class called World_Update. this class has a virtual bool Update().
now, any class which needs updating (basically almost all my classes) will inherit from World Update. then, inside each class, i customize how they update themselves. then i can manage all of my objects from a "master list", calling Update() when needed, and deleting the object when his Update() call returns false. (this could be when an enemy dies, a particle's life ends, whatever..). another thing i should tell you, is that i DONT manage my Other_Players from this master list. DrEvil gave a really great suggestion that im using, and my Other_Player's are going to be stored in a std::map, instead of registering them with my Update engine, and updating them as a part of the master list, i will just loop through my map and call Update(). i guess i COULD register them with the update engine AND store them in a std::map, but this brings up other issues which i dont like, such as different list's storing the same pointers, and having to let one let the other one know when an object is no longer valid...
so, since everything is called from inside of Update(). how could i go about changing my Update() function to be different on non-local clients? heres a ruff psuedo code of what my player class's update looks like:
bool Player::Update(){ Take_Input(); Do_Collision(); Do_Other_Stuff_Only_A_Local_Player_Would_Do();}
do you see the problem here? i mean, the only way i could see this working, is if i have some sort of bool is_local flag, and then if is_local == true, then do this, if not, do that...
but thats ugly!
anyway, im hoping im missing something thats obvious, it seems like the only choice that i have, is your #3. i make a general "player" class, then have "local_player" and "remote_player" derive from it. then, i can customize how their Update() function works (the local one would take input and such, while the remote one would do much less stuff...)
what do you think? also, i dont really like the fact that a class will have members which it will never use, like the remote player having Collision() functions which he nevers uses. IMO this is worse then data duplication, but im thinking maybe this case could be an exeption?
thanks for anymore help!!!