From b1a892bd9a5e9c2807580b55cb322aa026f80149 Mon Sep 17 00:00:00 2001 From: madmaxoft Date: Wed, 14 Aug 2013 12:45:39 +0200 Subject: [PATCH] Partially fixed tonibm19's mess. --- source/Piston.cpp | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/source/Piston.cpp b/source/Piston.cpp index 161f2b38c..91b1aaa93 100644 --- a/source/Piston.cpp +++ b/source/Piston.cpp @@ -12,18 +12,16 @@ #include "Server.h" #include "Blocks/BlockHandler.h" -#ifdef _WIN32 -#include -#else -#include -#endif -//Athar from http://www.cplusplus.com/forum/unices/60161/ helped with the sleep code. extern bool g_BlockPistonBreakable[]; + + + + #define AddDir( x, y, z, dir, amount ) \ switch (dir) \ { \ @@ -128,11 +126,11 @@ void cPiston::ExtendPiston( int pistx, int pisty, int pistz ) AddDir(extx, exty, extz, pistonMeta & 7, 1) - #ifdef _WIN32 - Sleep(100); - #else - usleep(static_cast(100)*1000); - #endif + // TODO: This code needs replacing + // Sleeping here will play the piston animation on the client; however, it will block the entire server + // for the 100 ms, effectively dropping 2 game ticks per piston. This is very bad + // This needs to be handled using delayed scheduled tasks instead + cSleep::MilliSleep(100); m_World->SetBlock(extx, exty, extz, E_BLOCK_PISTON_EXTENSION, isSticky + pistonMeta & 7); } @@ -178,22 +176,23 @@ void cPiston::RetractPiston( int pistx, int pisty, int pistz ) // These cannot be moved by the sticky piston, bail out return; } - #ifdef _WIN32 - Sleep(100); - #else - usleep(static_cast(100)*1000); - #endif + + // TODO: This code needs replacing + // Sleeping here will play the piston animation on the client; however, it will block the entire server + // for the 100 ms, effectively dropping 2 game ticks per piston. This is very bad + // This needs to be handled using delayed scheduled tasks instead + cSleep::MilliSleep(100); m_World->SetBlock(pistx, pisty, pistz, tempblock, tempmeta); m_World->SetBlock(tempx, tempy, tempz, E_BLOCK_AIR, 0); } else { - #ifdef _WIN32 - Sleep(100); - #else - usleep(static_cast(100)*1000); - #endif + // TODO: This code needs replacing + // Sleeping here will play the piston animation on the client; however, it will block the entire server + // for the 100 ms, effectively dropping 2 game ticks per piston. This is very bad + // This needs to be handled using delayed scheduled tasks instead + cSleep::MilliSleep(100); m_World->SetBlock(pistx, pisty, pistz, E_BLOCK_AIR, 0); }