1 ////////////////////////////////////////////////////////////////////////////////
2 // Scorched3D (c) 2000-2011
3 //
4 // This file is part of Scorched3D.
5 //
6 // Scorched3D is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 2 of the License, or
9 // (at your option) any later version.
10 //
11 // Scorched3D is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License along
17 // with this program; if not, write to the Free Software Foundation, Inc.,
18 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 ////////////////////////////////////////////////////////////////////////////////
20
21 #include <coms/ComsTankChangeMessage.h>
22
23 ComsMessageType ComsTankChangeMessage::ComsTankChangeMessageType("ComsTankChangeMessageType");
24
ComsTankChangeMessage()25 ComsTankChangeMessage::ComsTankChangeMessage() :
26 ComsMessage(ComsTankChangeMessageType)
27 {
28 }
29
ComsTankChangeMessage(ComsTankChangeMessage & other)30 ComsTankChangeMessage::ComsTankChangeMessage(ComsTankChangeMessage &other) :
31 ComsMessage(ComsTankChangeMessageType),
32 playerId_(other.playerId_),
33 playerName_(other.playerName_),
34 playerType_(other.playerType_),
35 playerColor_(other.playerColor_),
36 modelName_(other.modelName_),
37 destinationId_(other.destinationId_),
38 playerTeam_(other.playerTeam_),
39 playerIconName_(other.playerIconName_),
40 spectate_(other.spectate_),
41 tankType_(other.tankType_)
42 {
43 playerIcon_.reset();
44 playerIcon_.addDataToBuffer(other.playerIcon_.getBuffer(),
45 other.playerIcon_.getBufferUsed());
46 }
47
ComsTankChangeMessage(unsigned int playerId,const LangString & playerName,Vector playerColor,const char * tankType,const char * modelName,unsigned int destinationId,unsigned int playerTeam,const char * playerType,bool spectate)48 ComsTankChangeMessage::ComsTankChangeMessage(
49 unsigned int playerId,
50 const LangString &playerName,
51 Vector playerColor,
52 const char *tankType,
53 const char *modelName,
54 unsigned int destinationId,
55 unsigned int playerTeam,
56 const char *playerType,
57 bool spectate) :
58 ComsMessage(ComsTankChangeMessageType),
59 playerId_(playerId),
60 playerName_(playerName),
61 playerType_(playerType),
62 playerColor_(playerColor),
63 tankType_(tankType),
64 modelName_(modelName),
65 destinationId_(destinationId),
66 playerTeam_(playerTeam),
67 spectate_(spectate)
68 {
69 }
70
~ComsTankChangeMessage()71 ComsTankChangeMessage::~ComsTankChangeMessage()
72 {
73 }
74
writeMessage(NetBuffer & buffer)75 bool ComsTankChangeMessage::writeMessage(NetBuffer &buffer)
76 {
77 buffer.addToBuffer(playerName_);
78 buffer.addToBuffer(playerType_);
79 buffer.addToBuffer(tankType_);
80 buffer.addToBuffer(modelName_);
81 buffer.addToBuffer(playerId_);
82 buffer.addToBuffer(destinationId_);
83 buffer.addToBuffer(playerTeam_);
84 buffer.addToBuffer(playerColor_);
85 buffer.addToBuffer(spectate_);
86 buffer.addToBuffer(playerIcon_.getBufferUsed());
87 if (playerIcon_.getBufferUsed() > 0)
88 {
89 buffer.addToBuffer(playerIconName_);
90 buffer.addDataToBuffer(playerIcon_.getBuffer(),
91 playerIcon_.getBufferUsed());
92 }
93 return true;
94 }
95
readMessage(NetBufferReader & reader)96 bool ComsTankChangeMessage::readMessage(NetBufferReader &reader)
97 {
98 if (!reader.getFromBuffer(playerName_)) return false;
99 if (!reader.getFromBuffer(playerType_)) return false;
100 if (!reader.getFromBuffer(tankType_)) return false;
101 if (!reader.getFromBuffer(modelName_)) return false;
102 if (!reader.getFromBuffer(playerId_)) return false;
103 if (!reader.getFromBuffer(destinationId_)) return false;
104 if (!reader.getFromBuffer(playerTeam_)) return false;
105 if (!reader.getFromBuffer(playerColor_)) return false;
106 if (!reader.getFromBuffer(spectate_)) return false;
107 unsigned int used = 0;
108 if (!reader.getFromBuffer(used)) return false;
109 if (used > 0)
110 {
111 if (!reader.getFromBuffer(playerIconName_)) return false;
112 playerIcon_.allocate(used);
113 playerIcon_.setBufferUsed(used);
114 if (!reader.getDataFromBuffer(playerIcon_.getBuffer(),
115 used)) return false;
116 }
117 return true;
118 }
119