summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfaketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6>2011-12-27 00:23:05 +0100
committerfaketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6>2011-12-27 00:23:05 +0100
commit0d8ecbeca1a93acab395326db3e90f444c8bbc18 (patch)
tree529ef281ab20829534f272157edede9d7cb087d4
parentPlayers can switch worlds on the fly with the command /gotoworld [worldName]. This uses the function cPlayer::MoveToWorld() (diff)
downloadcuberite-0d8ecbeca1a93acab395326db3e90f444c8bbc18.tar
cuberite-0d8ecbeca1a93acab395326db3e90f444c8bbc18.tar.gz
cuberite-0d8ecbeca1a93acab395326db3e90f444c8bbc18.tar.bz2
cuberite-0d8ecbeca1a93acab395326db3e90f444c8bbc18.tar.lz
cuberite-0d8ecbeca1a93acab395326db3e90f444c8bbc18.tar.xz
cuberite-0d8ecbeca1a93acab395326db3e90f444c8bbc18.tar.zst
cuberite-0d8ecbeca1a93acab395326db3e90f444c8bbc18.zip
-rw-r--r--VC2010/MCServer.vcxproj2
-rw-r--r--VC2010/MCServer.vcxproj.filters27
-rw-r--r--makefile6
-rw-r--r--source/cChunk.cpp4
-rw-r--r--source/cWorld.cpp22
-rw-r--r--source/cWorld.h6
-rw-r--r--source/cWorldGenerator_Test.cpp25
-rw-r--r--source/cWorldGenerator_Test.h10
8 files changed, 78 insertions, 24 deletions
diff --git a/VC2010/MCServer.vcxproj b/VC2010/MCServer.vcxproj
index abaa6a623..3854a376f 100644
--- a/VC2010/MCServer.vcxproj
+++ b/VC2010/MCServer.vcxproj
@@ -282,6 +282,7 @@
<ClCompile Include="..\source\cWindow.cpp" />
<ClCompile Include="..\source\cWolf.cpp" />
<ClCompile Include="..\source\cWorldGenerator.cpp" />
+ <ClCompile Include="..\source\cWorldGenerator_Test.cpp" />
<ClCompile Include="..\source\cZombie.cpp" />
<ClCompile Include="..\source\cZombiepigman.cpp" />
<ClCompile Include="..\Source\ManualBindings.cpp" />
@@ -433,6 +434,7 @@
<ClInclude Include="..\source\cWindowOwner.h" />
<ClInclude Include="..\source\cWolf.h" />
<ClInclude Include="..\source\cWorldGenerator.h" />
+ <ClInclude Include="..\source\cWorldGenerator_Test.h" />
<ClInclude Include="..\source\cZombie.h" />
<ClInclude Include="..\source\cZombiepigman.h" />
<ClInclude Include="..\source\Endianness.h" />
diff --git a/VC2010/MCServer.vcxproj.filters b/VC2010/MCServer.vcxproj.filters
index 6ca767e2a..67decbf26 100644
--- a/VC2010/MCServer.vcxproj.filters
+++ b/VC2010/MCServer.vcxproj.filters
@@ -427,6 +427,9 @@
<Filter Include="!LuaPlugins">
<UniqueIdentifier>{4b86e1cf-ea3c-40b6-82b2-82fa9e6eb35e}</UniqueIdentifier>
</Filter>
+ <Filter Include="cWorldGenerator\cWorldGenerator_Test">
+ <UniqueIdentifier>{c86f4c53-af06-4b42-97dd-ffb7035041ce}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\source\cServer.cpp">
@@ -850,6 +853,12 @@
<ClCompile Include="..\source\cWorldGenerator.cpp">
<Filter>cWorldGenerator</Filter>
</ClCompile>
+ <ClCompile Include="..\source\cSandSimulator.cpp" />
+ <ClCompile Include="..\source\cSimulator.cpp" />
+ <ClCompile Include="..\source\cSimulatorManager.cpp" />
+ <ClCompile Include="..\source\cWorldGenerator_Test.cpp">
+ <Filter>cWorldGenerator\cWorldGenerator_Test</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\source\cServer.h">
@@ -1308,6 +1317,12 @@
<ClInclude Include="..\source\cWorldGenerator.h">
<Filter>cWorldGenerator</Filter>
</ClInclude>
+ <ClInclude Include="..\source\cSandSimulator.h" />
+ <ClInclude Include="..\source\cSimulator.h" />
+ <ClInclude Include="..\source\cSimulatorManager.h" />
+ <ClInclude Include="..\source\cWorldGenerator_Test.h">
+ <Filter>cWorldGenerator\cWorldGenerator_Test</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\source\AllToLua.pkg">
@@ -1317,18 +1332,6 @@
<None Include="..\source\cNoise.inc">
<Filter>cNoise</Filter>
</None>
- <None Include="..\Plugins\ChatLog.lua">
- <Filter>!LuaPlugins</Filter>
- </None>
- <None Include="..\Plugins\Core.lua">
- <Filter>!LuaPlugins</Filter>
- </None>
- <None Include="..\Plugins\Fire.lua">
- <Filter>!LuaPlugins</Filter>
- </None>
- <None Include="..\Plugins\MagicCarpet.lua">
- <Filter>!LuaPlugins</Filter>
- </None>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="MCServer.rc" />
diff --git a/makefile b/makefile
index 50c638883..10ab38351 100644
--- a/makefile
+++ b/makefile
@@ -113,6 +113,7 @@ MCServer : \
build/cWindow.o\
build/cWorld.o\
build/cWorldGenerator.o\
+ build/cWorldGenerator_Test.o\
build/main.o\
build/ManualBindings.o\
build/Matrix4f.o\
@@ -315,6 +316,7 @@ MCServer : \
build/cWindow.o\
build/cWorld.o\
build/cWorldGenerator.o\
+ build/cWorldGenerator_Test.o\
build/main.o\
build/ManualBindings.o\
build/Matrix4f.o\
@@ -520,6 +522,7 @@ clean :
build/cWindow.o\
build/cWorld.o\
build/cWorldGenerator.o\
+ build/cWorldGenerator_Test.o\
build/main.o\
build/ManualBindings.o\
build/Matrix4f.o\
@@ -881,6 +884,9 @@ build/cWorld.o : source/cWorld.cpp
build/cWorldGenerator.o : source/cWorldGenerator.cpp
$(CC) $(CC_OPTIONS) source/cWorldGenerator.cpp -c $(INCLUDE) -o build/cWorldGenerator.o
+# Item # 40 -- cWorldGenerator_Test --
+build/cWorldGenerator_Test.o : source/cWorldGenerator_Test.cpp
+ $(CC) $(CC_OPTIONS) source/cWorldGenerator_Test.cpp -c $(INCLUDE) -o build/cWorldGenerator_Test.o
# Item # 41 -- main --
build/main.o : source/main.cpp
diff --git a/source/cChunk.cpp b/source/cChunk.cpp
index 2c915d2ef..2e6e7a633 100644
--- a/source/cChunk.cpp
+++ b/source/cChunk.cpp
@@ -1,3 +1,4 @@
+
#ifndef _WIN32
#include <cstring>
#include <cstdlib>
@@ -133,8 +134,7 @@ void cChunk::Initialize()
// Clear memory
memset( m_BlockData, 0x00, c_BlockDataSize );
- cWorldGenerator Generator;
- Generator.GenerateChunk( this );
+ m_World->GetWorldGenerator()->GenerateChunk( this );
CalculateHeightmap();
CalculateLighting();
diff --git a/source/cWorld.cpp b/source/cWorld.cpp
index 7b181c982..85f8872ec 100644
--- a/source/cWorld.cpp
+++ b/source/cWorld.cpp
@@ -37,6 +37,7 @@
#include "cMakeDir.h"
#include "cChunkGenerator.h"
#include "MersenneTwister.h"
+#include "cWorldGenerator_Test.h"
#include "packets/cPacket_TimeUpdate.h"
@@ -141,6 +142,7 @@ cWorld::cWorld( const char* a_WorldName )
, m_SpawnMonsterTime( 0.f )
, m_RSList ( 0 )
, m_Weather ( 0 )
+ , m_WorldGenerator( 0 )
{
LOG("cWorld::cWorld(%s)", a_WorldName);
m_pState->WorldName = a_WorldName;
@@ -154,6 +156,8 @@ cWorld::cWorld( const char* a_WorldName )
m_WorldSeed = r1.randInt();
m_GameMode = 0;
+ std::string WorldGeneratorName;
+
cIniFile IniFile( m_pState->WorldName + "/world.ini");
if( IniFile.ReadFile() )
{
@@ -162,6 +166,7 @@ cWorld::cWorld( const char* a_WorldName )
m_SpawnZ = IniFile.GetValueF("SpawnPosition", "Z", m_SpawnZ );
m_WorldSeed = IniFile.GetValueI("Seed", "Seed", m_WorldSeed );
m_GameMode = IniFile.GetValueI("GameMode", "GameMode", m_GameMode );
+ WorldGeneratorName = IniFile.GetValue("Generator", "GeneratorName", "Default");
}
else
{
@@ -170,6 +175,7 @@ cWorld::cWorld( const char* a_WorldName )
IniFile.SetValueF("SpawnPosition", "Z", m_SpawnZ );
IniFile.SetValueI("Seed", "Seed", m_WorldSeed );
IniFile.SetValueI("GameMode", "GameMode", m_GameMode );
+ IniFile.SetValue("Generator", "GeneratorName", "Default" );
if( !IniFile.WriteFile() )
{
LOG("WARNING: Could not write to %s/world.ini", a_WorldName);
@@ -177,6 +183,11 @@ cWorld::cWorld( const char* a_WorldName )
}
LOGINFO("Seed: %i", m_WorldSeed );
+ if( WorldGeneratorName.compare("Test") == 0 )
+ m_WorldGenerator = new cWorldGenerator_Test();
+ else // Default
+ m_WorldGenerator = new cWorldGenerator();
+
cIniFile GenSettings("terrain.ini");
if( GenSettings.ReadFile() )
{
@@ -224,20 +235,15 @@ cWorld::cWorld( const char* a_WorldName )
m_ChunksCriticalSection = new cCriticalSection();
//Simulators:
- m_SimulatorManager = new cSimulatorManager();
-
m_WaterSimulator = new cWaterSimulator( this );
- m_SimulatorManager->RegisterSimulator(m_WaterSimulator, 6);
-
m_LavaSimulator = new cLavaSimulator( this );
- m_SimulatorManager->RegisterSimulator(m_LavaSimulator, 12);
-
m_SandSimulator = new cSandSimulator(this);
+ m_SimulatorManager = new cSimulatorManager();
+ m_SimulatorManager->RegisterSimulator(m_WaterSimulator, 6);
+ m_SimulatorManager->RegisterSimulator(m_LavaSimulator, 12);
m_SimulatorManager->RegisterSimulator(m_SandSimulator, 1);
-
-
memset( g_BlockLightValue, 0x0, 128 );
memset( g_BlockSpreadLightFalloff, 0xf, 128 ); // 0xf means total falloff
memset( g_BlockTransparent, 0x0, 128 );
diff --git a/source/cWorld.h b/source/cWorld.h
index 44b89b5ab..72c6975d1 100644
--- a/source/cWorld.h
+++ b/source/cWorld.h
@@ -27,6 +27,7 @@ class cClientHandle;
class cChunk;
class cEntity;
class cBlockEntity;
+class cWorldGenerator;
class cWorld //tolua_export
@@ -154,7 +155,7 @@ public:
void SetWeather ( int ); //tolua_export
int GetWeather() { return m_Weather; }; //tolua_export
-
+ cWorldGenerator* GetWorldGenerator() { return m_WorldGenerator; }
private:
friend class cRoot;
cWorld( const char* a_WorldName );
@@ -184,10 +185,11 @@ private:
cWaterSimulator* m_WaterSimulator;
cLavaSimulator* m_LavaSimulator;
-
cCriticalSection* m_ClientHandleCriticalSection;
cCriticalSection* m_EntitiesCriticalSection;
cCriticalSection* m_ChunksCriticalSection;
+
+ cWorldGenerator* m_WorldGenerator;
std::string m_Description;
unsigned int m_MaxPlayers;
diff --git a/source/cWorldGenerator_Test.cpp b/source/cWorldGenerator_Test.cpp
new file mode 100644
index 000000000..d6cc2c00b
--- /dev/null
+++ b/source/cWorldGenerator_Test.cpp
@@ -0,0 +1,25 @@
+#include "cWorldGenerator_Test.h"
+#include "cChunk.h"
+#include "BlockID.h"
+
+void cWorldGenerator_Test::GenerateTerrain( cChunk* a_Chunk )
+{
+ char* BlockType = a_Chunk->pGetType();
+
+ for(int x = 0; x < 16; x++)
+ {
+ for(int z = 0; z < 16; z++)
+ {
+ for( int y = 1; y < 128; ++y )
+ {
+ unsigned int idx = cChunk::MakeIndex(x, y, z);
+ BlockType[idx] = E_BLOCK_DIRT;
+ }
+ }
+ }
+}
+
+void cWorldGenerator_Test::GenerateFoliage( cChunk* a_Chunk )
+{
+ (void)a_Chunk;
+} \ No newline at end of file
diff --git a/source/cWorldGenerator_Test.h b/source/cWorldGenerator_Test.h
new file mode 100644
index 000000000..cb08cf97c
--- /dev/null
+++ b/source/cWorldGenerator_Test.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#include "cWorldGenerator.h"
+
+class cWorldGenerator_Test : public cWorldGenerator
+{
+protected:
+ virtual void GenerateTerrain( cChunk* a_Chunk );
+ virtual void GenerateFoliage( cChunk* a_Chunk );
+}; \ No newline at end of file