1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Temporary commit; lots of test code and stuff

This commit is contained in:
Perttu Ahola 2011-02-21 00:45:14 +02:00
parent f5ff378dd0
commit c57637b4c3
25 changed files with 1917 additions and 763 deletions

View file

@ -56,10 +56,12 @@ Client::Client(
const char *playername,
MapDrawControl &control):
m_thread(this),
m_env(new ClientMap(this, control,
m_env(
new ClientMap(this, control,
device->getSceneManager()->getRootSceneNode(),
device->getSceneManager(), 666),
dout_client),
device->getSceneManager()
),
m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, this),
m_device(device),
camera_position(0,0,0),
@ -82,20 +84,25 @@ Client::Client(
m_step_dtime_mutex.Init();
m_thread.Start();
/*
Add local player
*/
{
JMutexAutoLock envlock(m_env_mutex);
//m_env.getMap().StartUpdater();
Player *player = new LocalPlayer();
player->updateName(playername);
/*f32 y = BS*2 + BS*20;
player->setPosition(v3f(0, y, 0));*/
//player->setPosition(v3f(0, y, 30900*BS)); // DEBUG
m_env.addPlayer(player);
}
// Add some active objects for testing
/*{
ClientActiveObject *obj = new TestCAO(0, v3f(0, 10*BS, 0));
m_env.addActiveObject(obj);
}*/
}
Client::~Client()
@ -493,7 +500,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
v3s16 playerpos_s16(0, BS*2+BS*20, 0);
if(datasize >= 2+1+6)
playerpos_s16 = readV3S16(&data[2+1]);
v3f playerpos_f = intToFloat(playerpos_s16) - v3f(0, BS/2, 0);
v3f playerpos_f = intToFloat(playerpos_s16, BS) - v3f(0, BS/2, 0);
{ //envlock
JMutexAutoLock envlock(m_env_mutex);
@ -1037,6 +1044,99 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
m_chat_queue.push_back(message);
}
else if(command == TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD)
{
/*
u16 command
u16 count of removed objects
for all removed objects {
u16 id
}
u16 count of added objects
for all added objects {
u16 id
u8 type
}
*/
char buf[6];
// Get all data except the command number
std::string datastring((char*)&data[2], datasize-2);
// Throw them in an istringstream
std::istringstream is(datastring, std::ios_base::binary);
// Read stuff
// Read removed objects
is.read(buf, 2);
u16 removed_count = readU16((u8*)buf);
for(u16 i=0; i<removed_count; i++)
{
is.read(buf, 2);
u16 id = readU16((u8*)buf);
// Remove it
{
JMutexAutoLock envlock(m_env_mutex);
m_env.removeActiveObject(id);
}
}
// Read added objects
is.read(buf, 2);
u16 added_count = readU16((u8*)buf);
for(u16 i=0; i<added_count; i++)
{
is.read(buf, 2);
u16 id = readU16((u8*)buf);
is.read(buf, 1);
u8 type = readU8((u8*)buf);
// Add it
{
JMutexAutoLock envlock(m_env_mutex);
m_env.addActiveObject(id, type);
}
}
}
else if(command == TOCLIENT_ACTIVE_OBJECT_MESSAGES)
{
/*
u16 command
for all objects
{
u16 id
u16 message length
string message
}
*/
char buf[6];
// Get all data except the command number
std::string datastring((char*)&data[2], datasize-2);
// Throw them in an istringstream
std::istringstream is(datastring, std::ios_base::binary);
while(is.eof() == false)
{
// Read stuff
is.read(buf, 2);
u16 id = readU16((u8*)buf);
if(is.eof())
break;
is.read(buf, 2);
u16 message_size = readU16((u8*)buf);
std::string message;
message.reserve(message_size);
for(u16 i=0; i<message_size; i++)
{
is.read(buf, 1);
message.append(buf, 1);
}
// Pass on to the environment
{
JMutexAutoLock envlock(m_env_mutex);
m_env.processActiveObjectMessage(id, message);
}
}
}
// Default to queueing it (for slow commands)
else
{
@ -1197,7 +1297,7 @@ bool Client::AsyncProcessPacket()
main thread, from which is will want to retrieve textures.
*/
m_env.getMap().updateMeshes(block->getPos(), getDayNightRatio());
m_env.getClientMap().updateMeshes(block->getPos(), getDayNightRatio());
}
else
{
@ -1464,7 +1564,7 @@ void Client::removeNode(v3s16 p)
i.atEnd() == false; i++)
{
v3s16 p = i.getNode()->getKey();
m_env.getMap().updateMeshes(p, m_env.getDayNightRatio());
m_env.getClientMap().updateMeshes(p, m_env.getDayNightRatio());
}
}
@ -1486,7 +1586,7 @@ void Client::addNode(v3s16 p, MapNode n)
i.atEnd() == false; i++)
{
v3s16 p = i.getNode()->getKey();
m_env.getMap().updateMeshes(p, m_env.getDayNightRatio());
m_env.getClientMap().updateMeshes(p, m_env.getDayNightRatio());
}
}
@ -1503,36 +1603,6 @@ MapNode Client::getNode(v3s16 p)
return m_env.getMap().getNode(p);
}
/*void Client::getNode(v3s16 p, MapNode n)
{
JMutexAutoLock envlock(m_env_mutex);
m_env.getMap().setNode(p, n);
}*/
/*f32 Client::getGroundHeight(v2s16 p)
{
JMutexAutoLock envlock(m_env_mutex);
return m_env.getMap().getGroundHeight(p);
}*/
/*bool Client::isNodeUnderground(v3s16 p)
{
JMutexAutoLock envlock(m_env_mutex);
return m_env.getMap().isNodeUnderground(p);
}*/
/*Player * Client::getLocalPlayer()
{
JMutexAutoLock envlock(m_env_mutex);
return m_env.getLocalPlayer();
}*/
/*core::list<Player*> Client::getPlayers()
{
JMutexAutoLock envlock(m_env_mutex);
return m_env.getPlayers();
}*/
v3f Client::getPlayerPosition()
{
JMutexAutoLock envlock(m_env_mutex);
@ -1597,7 +1667,7 @@ MapBlockObject * Client::getSelectedObject(
// Calculate from_pos relative to block
v3s16 block_pos_i_on_map = block->getPosRelative();
v3f block_pos_f_on_map = intToFloat(block_pos_i_on_map);
v3f block_pos_f_on_map = intToFloat(block_pos_i_on_map, BS);
v3f from_pos_f_on_block = from_pos_f_on_map - block_pos_f_on_map;
block->getObjects(from_pos_f_on_block, max_d, objects);
@ -1617,7 +1687,7 @@ MapBlockObject * Client::getSelectedObject(
// Calculate shootline relative to block
v3s16 block_pos_i_on_map = block->getPosRelative();
v3f block_pos_f_on_map = intToFloat(block_pos_i_on_map);
v3f block_pos_f_on_map = intToFloat(block_pos_i_on_map, BS);
core::line3d<f32> shootline_on_block(
shootline_on_map.start - block_pos_f_on_map,
shootline_on_map.end - block_pos_f_on_map
@ -1672,7 +1742,7 @@ u32 Client::getDayNightRatio()
v3f playerpos = player->getPosition();
v3f playerspeed = player->getSpeed();
v3s16 center_nodepos = floatToInt(playerpos);
v3s16 center_nodepos = floatToInt(playerpos, BS);
v3s16 center = getNodeBlockPos(center_nodepos);
u32 counter = 0;