]> git.lizzy.rs Git - dragonfireclient.git/blob - src/database.cpp
Add propper client initialization
[dragonfireclient.git] / src / database.cpp
1 /*
2 Minetest
3 Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #include "database.h"
21 #include "irrlichttypes.h"
22
23 static s32 unsignedToSigned(s32 i, s32 max_positive)
24 {
25         if(i < max_positive)
26                 return i;
27         else
28                 return i - 2*max_positive;
29 }
30
31 // modulo of a negative number does not work consistently in C
32 static s64 pythonmodulo(s64 i, s64 mod)
33 {
34         if(i >= 0)
35                 return i % mod;
36         return mod - ((-i) % mod);
37 }
38
39 long long Database::getBlockAsInteger(const v3s16 pos) {
40         return (unsigned long long)pos.Z*16777216 +
41                 (unsigned long long)pos.Y*4096 + 
42                 (unsigned long long)pos.X;
43 }
44
45 v3s16 Database::getIntegerAsBlock(long long i) {
46         s32 x = unsignedToSigned(pythonmodulo(i, 4096), 2048);
47         i = (i - x) / 4096;
48         s32 y = unsignedToSigned(pythonmodulo(i, 4096), 2048);
49         i = (i - y) / 4096;
50         s32 z = unsignedToSigned(pythonmodulo(i, 4096), 2048);
51         return v3s16(x,y,z);
52 }