QByteArray vectorToData(UVector vec) { QByteArray data; data += floatToData(vec.x); data += floatToData(vec.y); data += floatToData(vec.z); return data; }
QByteArray quaternionToData(UQuaternion quat) { QByteArray data; data += floatToData(quat.x); data += floatToData(quat.y); data += floatToData(quat.z); data += floatToData(quat.w); return data; }
void sendMove(Player* player, float x, float y, float z) { QByteArray data(1,0); data[0] = 0xce; // Request number data += floatToData(x); data += floatToData(y); data += floatToData(z); win.logMessage(QString("UDP: Moving character")); sendMessage(player,MsgUserReliableOrdered4, data); }
void sendSetMaxStatRPC(Player* affected, Player* dest, quint8 statId, float value) { QByteArray data(4,51); data[0] = affected->pony.netviewId; data[1] = affected->pony.netviewId>>8; data[3] = statId; data += floatToData(value); sendMessage(dest, MsgUserReliableOrdered18, data); }
void sendSetStatRPC(Player *player, quint8 statId, float value) { QByteArray data(4,50); data[0] = player->pony.netviewId; data[1] = player->pony.netviewId>>8; data[3] = statId; data += floatToData(value); sendMessage(player, MsgUserReliableOrdered18, data); }
void Sync::sendSyncMessage(Player* source, Player* dest) { QByteArray data(2,0); data[0] = (quint8)(source->pony.netviewId&0xFF); data[1] = (quint8)((source->pony.netviewId>>8)&0xFF); data += floatToData(timestampNow()); //data += rangedSingleToData(source.pony.pos.x, XMIN, XMAX, PosRSSize); //data += rangedSingleToData(source.pony.pos.y, YMIN, YMAX, PosRSSize); //data += rangedSingleToData(source.pony.pos.z, ZMIN, ZMAX, PosRSSize); data += floatToData(source->pony.pos.x); data += floatToData(source->pony.pos.y); data += floatToData(source->pony.pos.z); //data += rangedSingleToData(source.pony.rot.x, ROTMIN, ROTMAX, RotRSSize); data += rangedSingleToData(source->pony.rot.y, ROTMIN, ROTMAX, RotRSSize); //data += rangedSingleToData(source.pony.rot.z, ROTMIN, ROTMAX, RotRSSize); sendMessage(dest, MsgUserUnreliable, data); //win.logMessage("UDP: Syncing "+QString().setNum(source->pony.netviewId)+" to "+QString().setNum(dest->pony.netviewId)); }
void sendMessage(Player* player,quint8 messageType, QByteArray data) { QByteArray msg(3,0); // MessageType msg[0] = messageType; // Sequence msg[1] = 0; msg[2] = 0; if (messageType == MsgPing) { msg.resize(6); // Sequence msg[1] = 0; msg[2] = 0; // Payload size msg[3] = 8; msg[4] = 0; // Ping number player->lastPingNumber++; msg[5]=(quint8)player->lastPingNumber; } else if (messageType == MsgPong) { msg.resize(6); // Payload size msg[3] = 8*5; msg[4] = 0; // Ping number msg[5]=(quint8)player->lastPingNumber; // Timestamp msg += floatToData(timestampNow()); } else if (messageType == MsgUserUnreliable) { msg.resize(5); // Sequence msg[1] = (quint8)(player->udpSequenceNumbers[32]&0xFF); msg[2] = (quint8)((player->udpSequenceNumbers[32]>>8)&0xFF); // Data size msg[3] = (quint8)((8*(data.size()))&0xFF); msg[4] = (quint8)(((8*(data.size())) >> 8)&0xFF); // Data msg += data; player->udpSequenceNumbers[32]++; //app.logMessage(QString("Sending sync data :")+msg.toHex()); }