Esempio n. 1
0
bool World::Move(const ushort x, const ushort y, const ushort z,
		const quint8 dir)
{
	ushort newx, newy, newz;
	Active * active;
	Block * block;
	if ( !Focus(x, y, z, newx, newy, newz, dir) &&
			CanMove(x, y, z, newx, newy, newz, dir) &&
			(DOWN==dir || !(block=GetBlock(x, y, z))->Weight() ||
			!( (active=block->ActiveBlock()) &&
				active->IsFalling() &&
				AIR==Sub(x, y, z-1) &&
				AIR==Sub(newx, newy, newz-1))) )
	{
		NoCheckMove(x, y, z, newx, newy, newz, dir);
		return true;
	} else {
		return false;
	}
}