00001 #ifndef PHX_PLAYER_H 00002 #define PHX_PLAYER_H 00003 00011 namespace Phx { 00012 00030 class Player : public NamedInterface { 00031 public: 00032 class Manager; 00033 00034 /* Other attributes expected in the future: 00035 * rank() 00036 * airToAirKills() 00037 * airToGroundKills(), etc. 00038 * 00039 * Player is created from a PlayerDescription containing this 00040 * information (i.e., the "logbook"). 00041 */ 00042 00049 virtual String callsign() = 0; 00050 }; 00051 00067 class LocalPlayer : public Player { 00068 public: 00069 const static NamedInterface::Type INTERFACE_TYPE; 00070 const static String INTERFACE_TYPE_NAME; 00071 00072 class Client; 00073 00085 Ptr<Client> newClient(const String& clientName) = 0; 00086 }; 00087 00095 class LocalPlayer::Client : public LockedPtrInterface<Client> { 00096 public: 00097 virtual Ptr<LogicalInputEngine::AxisClient> newAxisClient(const String& axisName) = 0; 00098 virtual Ptr<LogicalInputEngine::ButtonClient> newButtonClient(const String& buttonName) = 0; 00099 }; 00100 00104 class RemotePlayer : public Player { 00105 public: 00106 const static NamedInterface::Type INTERFACE_TYPE; 00107 const static String INTERFACE_TYPE_NAME; 00108 00109 /* 00110 * Future attributes: 00111 * // IP-address or other identifying info? 00112 * address(), port() 00113 */ 00114 }; 00115 00116 00120 class SimulatedPlayer : public Player { 00121 public: 00122 const static NamedInterface::Type INTERFACE_TYPE; 00123 const static String INTERFACE_TYPE_NAME; 00124 }; 00125 00126 00131 class Player::Manager : public NamedInterface { 00132 public: 00133 const static NamedInterface::Type INTERFACE_TYPE; 00134 const static String INTERFACE_TYPE_NAME; 00135 }; 00136 00137 00148 class PlayerDescription { 00149 public: 00150 const static NamedInterface::Type DESCRIPTION_TYPE; 00151 const static String DESCRIPTION_TYPE_NAME; 00152 }; 00153 00154 }; // namespace Phx 00155 00156 00157 #endif /* PHX_PLAYER_H */
1.4.2