#include "NetworkResponse.h" #include "Chunk.h" #include "Entity.h" #include "Game.h" NetworkResponse::NetworkResponse() { adress = 0; adressLength = 0; broadcast = 0; message = 0; msgDelete = 0; msgLength = 0; } NetworkResponse::~NetworkResponse() { if( msgDelete ) delete[] message; delete[] adress; } void NetworkResponse::adressChunck( Chunk *zChunk ) { adressLength = 14; adress = new char[ adressLength ]; adress[ 0 ] = 1; // world response *(int *)( adress + 1 ) = zChunk->getDimensionId(); adress[ 5 ] = 1; // chunck Framework::Punkt center = zChunk->getCenter(); *(int *)( adress + 6 ) = center.x; *(int *)( adress + 10 ) = center.y; minPosition = zChunk->getMin(); maxPosition = zChunk->getMax(); } void NetworkResponse::adressEntity( Entity *zEntity ) { adressLength = 10; adress = new char[ adressLength ]; adress[ 0 ] = 1; // world response *(int *)( adress + 1 ) = zEntity->getCurrentDimensionId(); adress[ 5 ] = 2; // entity *(int *)( adress + 6 ) = zEntity->getId(); minPosition = zEntity->getPosition(); maxPosition = zEntity->getPosition(); } void NetworkResponse::adressBlock( Block *zBlock ) { adressLength = 18; adress = new char[ adressLength ]; adress[ 0 ] = 1; // world response *(int *)( adress + 1 ) = zBlock->getDimensionId(); adress[ 5 ] = 3; // block Framework::Vec3 pos = zBlock->getPos(); *(int *)( adress + 6 ) = pos.x; *(int *)( adress + 10 ) = pos.y; *(int *)( adress + 14 ) = pos.z; minPosition = pos; maxPosition = pos; } void NetworkResponse::setMessage( char *msg, int length, bool deleteMsg ) { message = msg; msgLength = length; msgDelete = deleteMsg; } void NetworkResponse::sendToAll() { broadcast = true; } bool NetworkResponse::isAreaAffected( Framework::Vec3 min, Framework::Vec3 max ) const { return minPosition.x <= max.x && maxPosition.x >= min.x && minPosition.y <= max.y && maxPosition.y >= min.y && minPosition.z <= max.z && maxPosition.z >= min.z; } void NetworkResponse::writeTo( Framework::StreamWriter *zWriter ) const { int total = msgLength + adressLength; if( total ) { zWriter->schreibe( (char *)&total, 4 ); zWriter->schreibe( adress, adressLength ); zWriter->schreibe( message, msgLength ); } } bool NetworkResponse::isBroadcast() const { return broadcast; }