]> git.mxchange.org Git - flightgear.git/blob - src/MultiPlayer/mpplayer.hxx
Make it compile, link and run again (pfew\!)
[flightgear.git] / src / MultiPlayer / mpplayer.hxx
1 // mpplayer.hxx -- routines for a player within a multiplayer Flightgear
2 //
3 // Written by Duncan McCreanor, started February 2003.
4 // duncan.mccreanor@airservicesaustralia.com
5 //
6 // Copyright (C) 2003  Airservices Australia
7 //
8 // This program is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU General Public License as
10 // published by the Free Software Foundation; either version 2 of the
11 // License, or (at your option) any later version.
12 //
13 // This program is distributed in the hope that it will be useful, but
14 // WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 // General Public License for more details.
17 //
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the Free Software
20 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 //
22
23
24 #ifndef MPPLAYER_H
25 #define MPPLAYER_H
26
27 #define MPPLAYER_HID "$Id$"
28
29 /****************************************************************
30 * @version $Id$
31 *
32 * Description: This class holds information about a player in a
33 * multiplayer game. The model for a remote player is loaded and
34 * added onto the aircraft branch of the scene on calling Open.
35 * The model is unloaded from the scene when Close is called
36 * or the object is deleted. The model's positioning transform is
37 * updated by calling SetPosition. The updated position transform
38 * is applied to the model on the scene by calling Draw.
39 *
40 ******************************************************************/
41
42 #include "mpmessages.hxx"
43
44 #include <plib/sg.h>
45 #include <plib/netSocket.h>
46 #include <simgear/io/sg_socket_udp.hxx>
47 #include <time.h>
48
49 #include STL_STRING
50 SG_USING_STD(string);
51
52 // Number of seconds before a player is consider to be lost
53 #define TIME_TO_LIVE 10
54
55 class ssgEntity;
56 class ssgTransform;
57
58
59 class MPPlayer {
60 public:
61
62     /** Constructor */
63     MPPlayer();
64
65     /** Destructor. */
66     ~MPPlayer();
67
68     /** Enumeration of the states for the player's data */
69     enum PlayerDataState {PLAYER_DATA_NOT_AVAILABLE = 0, PLAYER_DATA_AVAILABLE, PLAYER_DATA_EXPIRED};
70
71     /** Player data state */
72     typedef enum PlayerDataState TPlayerDataState;
73
74     /** Initialises the class.
75     * @param sIP IP address or host name for sending data to the player
76     * @param sPort Port number for sending data to the player
77     * @param sCallsign Callsign of the player (must be unique across all instances of MPPlayer).
78     * @param sModelName Path and name of the aircraft model file for the player
79     * @param bLocalPlayer True if this player is the local player, else false
80     * @return True if class opens successfully, else false
81     */
82     bool Open(const string &sIP, const int &iPort, const string &sCallsign,
83               const string &sModelName, const bool bLocalPlayer);
84
85     /** Closes the player connection */
86     void Close(void);
87
88     /** Sets the positioning matrix held for this player
89     * @param PlayerPosMat4 Matrix for positioning player's aircraft
90     */
91     void SetPosition(const sgMat4 PlayerPosMat4);
92
93     /** Transform and place model for player
94     */
95     TPlayerDataState Draw(void);
96
97     /** Returns the callsign for the player
98     * @return Aircraft's callsign
99     */
100     string Callsign(void) const;
101
102     /** Compares the player's callsign with the given callsign
103     * @param sCallsign Callsign to compare
104     * @return True if callsign matches
105     */
106     bool CompareCallsign(const char *sCallsign) const;
107
108     /** Populates a position message for the player
109     * @param MsgHdr Header to be populated
110     * @param PosMsg Position message to be populated
111     */
112     void FillPosMsg(T_MsgHdr *MsgHdr, T_PositionMsg *PosMsg);
113
114     /** Populates a mesage header with information for the player
115     * @param MsgHdr Header to be populated
116     * @param iMsgId Message type identifier to insert into header
117     */
118     void FillMsgHdr(T_MsgHdr *MsgHdr, const int iMsgId);
119
120
121 private:
122
123     /** Loads the model of the aircraft */
124     void LoadModel(void);
125
126     /** True if object is initialised */
127     bool m_bInitialised;
128
129     /** Position matrix for the player's aircraft */
130     sgMat4 m_ModelPos;
131
132     /** Used to remove player if no activity */
133     time_t m_LastUpdate;
134
135     /** Set when the player data is updated and cleared when read */
136     bool m_bUpdated;
137
138     /** Player's callsign */
139     string m_sCallsign;
140
141     /** Aircraft model name for player */
142     string m_sModelName;
143
144     /** The player's loaded model */
145     ssgEntity *m_Model;
146
147     /** Model transform */
148     ssgTransform *m_ModelTrans;
149
150     /** True if this player is the local player */
151     bool m_bLocalPlayer;
152
153     /** Address information for the player */
154     netAddress m_PlayerAddress;
155
156 };
157
158 #endif
159
160
161