Skip to content

Commit f921f92

Browse files
authored
Merge pull request #54 from OopsOverflow/Multiplayer
Multiplayer
2 parents f5011ec + c149ca4 commit f921f92

50 files changed

Lines changed: 1328 additions & 787 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

OpenGL/OpenGL/OpenGL.vcxproj

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,21 +196,22 @@
196196
<ClCompile Include="src\multiplayer\client\RealServer.cpp" />
197197
<ClCompile Include="src\multiplayer\common\NetworkError.cpp" />
198198
<ClCompile Include="src\multiplayer\common\Packet.cpp" />
199+
<ClCompile Include="src\multiplayer\terrain\BiomeMap.cpp" />
200+
<ClCompile Include="src\multiplayer\terrain\ChunkGenerator.cpp" />
201+
<ClCompile Include="src\multiplayer\terrain\PendingChunks.cpp" />
202+
<ClCompile Include="src\multiplayer\terrain\SliceMap.cpp" />
203+
<ClCompile Include="src\multiplayer\terrain\Structure.cpp" />
204+
<ClCompile Include="src\multiplayer\terrain\TerrainGenerator.cpp" />
199205
<ClCompile Include="src\noise\bitmapTex.cpp" />
200206
<ClCompile Include="src\noise\simplex.cpp" />
201207
<ClCompile Include="src\noise\value.cpp" />
202208
<ClCompile Include="src\noise\voronoi.cpp" />
203209
<ClCompile Include="src\noise\XXHash.cpp" />
204210
<ClCompile Include="src\save\SaveManager.cpp" />
205-
<ClCompile Include="src\terrain\biomes\BiomeMap.cpp" />
206211
<ClCompile Include="src\terrain\BlockArray.cpp" />
207212
<ClCompile Include="src\terrain\Chunk.cpp" />
208-
<ClCompile Include="src\terrain\ChunkGenerator.cpp" />
209213
<ClCompile Include="src\terrain\ChunkMap.cpp" />
210214
<ClCompile Include="src\terrain\SkyBox.cpp" />
211-
<ClCompile Include="src\terrain\SliceMap.cpp" />
212-
<ClCompile Include="src\terrain\Structure.cpp" />
213-
<ClCompile Include="src\terrain\TerrainGenerator.cpp" />
214215
<ClCompile Include="src\terrain\World.cpp" />
215216
<ClCompile Include="src\ui\Button.cpp" />
216217
<ClCompile Include="src\ui\Component.cpp" />
@@ -236,6 +237,7 @@
236237
<ClInclude Include="src\blocks\Block.hpp" />
237238
<ClInclude Include="src\blocks\Brick_Block.hpp" />
238239
<ClInclude Include="src\blocks\Cactus_Block.hpp" />
240+
<ClInclude Include="src\blocks\Cobalt_Block.hpp" />
239241
<ClInclude Include="src\blocks\Debug_Block.hpp" />
240242
<ClInclude Include="src\blocks\Dirt_Block.hpp" />
241243
<ClInclude Include="src\blocks\geometry\BlockGeometry.hpp" />
@@ -293,6 +295,13 @@
293295
<ClInclude Include="src\multiplayer\common\Identifier.hpp" />
294296
<ClInclude Include="src\multiplayer\common\NetworkError.hpp" />
295297
<ClInclude Include="src\multiplayer\common\Packet.hpp" />
298+
<ClInclude Include="src\multiplayer\terrain\Biome.hpp" />
299+
<ClInclude Include="src\multiplayer\terrain\BiomeMap.hpp" />
300+
<ClInclude Include="src\multiplayer\terrain\ChunkGenerator.hpp" />
301+
<ClInclude Include="src\multiplayer\terrain\PendingChunks.hpp" />
302+
<ClInclude Include="src\multiplayer\terrain\SliceMap.hpp" />
303+
<ClInclude Include="src\multiplayer\terrain\Structure.hpp" />
304+
<ClInclude Include="src\multiplayer\terrain\TerrainGenerator.hpp" />
296305
<ClInclude Include="src\noise\bitmap.hpp" />
297306
<ClInclude Include="src\noise\bitmapTex.hpp" />
298307
<ClInclude Include="src\noise\DisplayNoise.hpp" />

OpenGL/OpenGL/OpenGL.vcxproj.filters

Lines changed: 47 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,6 @@
9090
<ClCompile Include="src\terrain\ChunkMap.cpp">
9191
<Filter>Source Files</Filter>
9292
</ClCompile>
93-
<ClCompile Include="src\terrain\SliceMap.cpp">
94-
<Filter>Source Files</Filter>
95-
</ClCompile>
96-
<ClCompile Include="src\terrain\Structure.cpp">
97-
<Filter>Source Files</Filter>
98-
</ClCompile>
9993
<ClCompile Include="src\blocks\geometry\BlockGeometry.cpp">
10094
<Filter>Source Files</Filter>
10195
</ClCompile>
@@ -105,9 +99,6 @@
10599
<ClCompile Include="src\blocks\geometry\TallgrassGeometry.cpp">
106100
<Filter>Source Files</Filter>
107101
</ClCompile>
108-
<ClCompile Include="src\terrain\biomes\BiomeMap.cpp">
109-
<Filter>Source Files</Filter>
110-
</ClCompile>
111102
<ClCompile Include="src\blocks\geometry\WaterGeometry.cpp">
112103
<Filter>Source Files</Filter>
113104
</ClCompile>
@@ -171,16 +162,34 @@
171162
<ClCompile Include="src\util\Identifier.cpp">
172163
<Filter>Source Files</Filter>
173164
</ClCompile>
174-
<ClCompile Include="src\terrain\TerrainGenerator.cpp">
165+
<ClCompile Include="src\terrain\World.cpp">
175166
<Filter>Source Files</Filter>
176167
</ClCompile>
177-
<ClCompile Include="src\terrain\World.cpp">
168+
<ClCompile Include="src\entity\Entities.cpp">
178169
<Filter>Source Files</Filter>
179170
</ClCompile>
180-
<ClCompile Include="src\terrain\ChunkGenerator.cpp">
171+
<ClCompile Include="src\multiplayer\terrain\ChunkGenerator.cpp">
181172
<Filter>Source Files</Filter>
182173
</ClCompile>
183-
<ClCompile Include="src\entity\Entities.cpp">
174+
<ClCompile Include="src\multiplayer\terrain\PendingChunks.cpp">
175+
<Filter>Source Files</Filter>
176+
</ClCompile>
177+
<ClCompile Include="src\multiplayer\terrain\SliceMap.cpp">
178+
<Filter>Source Files</Filter>
179+
</ClCompile>
180+
<ClCompile Include="src\multiplayer\terrain\Structure.cpp">
181+
<Filter>Source Files</Filter>
182+
</ClCompile>
183+
<ClCompile Include="src\multiplayer\terrain\TerrainGenerator.cpp">
184+
<Filter>Source Files</Filter>
185+
</ClCompile>
186+
<ClCompile Include="src\multiplayer\terrain\BiomeMap.cpp">
187+
<Filter>Source Files</Filter>
188+
</ClCompile>
189+
<ClCompile Include="src\ui\Input.cpp">
190+
<Filter>Source Files</Filter>
191+
</ClCompile>
192+
<ClCompile Include="src\ui\Key.cpp">
184193
<Filter>Source Files</Filter>
185194
</ClCompile>
186195
<ClCompile Include="src\ui\Input.cpp">
@@ -515,6 +524,9 @@
515524
<ClInclude Include="src\terrain\BlockArray.hpp">
516525
<Filter>Header Files</Filter>
517526
</ClInclude>
527+
<ClInclude Include="src\blocks\Cobalt_Block.hpp">
528+
<Filter>Header Files</Filter>
529+
</ClInclude>
518530
<ClInclude Include="src\multiplayer\client\ClientServer.hpp">
519531
<Filter>Header Files</Filter>
520532
</ClInclude>
@@ -533,6 +545,27 @@
533545
<ClInclude Include="src\entity\Entities.hpp">
534546
<Filter>Header Files</Filter>
535547
</ClInclude>
548+
<ClInclude Include="src\multiplayer\terrain\Biome.hpp">
549+
<Filter>Header Files</Filter>
550+
</ClInclude>
551+
<ClInclude Include="src\multiplayer\terrain\BiomeMap.hpp">
552+
<Filter>Header Files</Filter>
553+
</ClInclude>
554+
<ClInclude Include="src\multiplayer\terrain\ChunkGenerator.hpp">
555+
<Filter>Header Files</Filter>
556+
</ClInclude>
557+
<ClInclude Include="src\multiplayer\terrain\PendingChunks.hpp">
558+
<Filter>Header Files</Filter>
559+
</ClInclude>
560+
<ClInclude Include="src\multiplayer\terrain\SliceMap.hpp">
561+
<Filter>Header Files</Filter>
562+
</ClInclude>
563+
<ClInclude Include="src\multiplayer\terrain\Structure.hpp">
564+
<Filter>Header Files</Filter>
565+
</ClInclude>
566+
<ClInclude Include="src\multiplayer\terrain\TerrainGenerator.hpp">
567+
<Filter>Header Files</Filter>
568+
</ClInclude>
536569
<ClInclude Include="src\ui\Input.hpp">
537570
<Filter>Header Files</Filter>
538571
</ClInclude>
@@ -670,4 +703,4 @@
670703
<None Include="src\shader\skyBox.vert" />
671704
<None Include="src\shader\skyBox.frag" />
672705
</ItemGroup>
673-
</Project>
706+
</Project>
-15.2 KB
Loading

OpenGL/OpenGL/src/Application.cpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include "multiplayer/client/ClientServer.hpp"
99
#include "multiplayer/client/RealServer.hpp"
1010
#include "multiplayer/common/Config.hpp"
11-
#include "terrain/TerrainGenerator.hpp"
11+
#include "save/SaveManager.hpp"
1212

1313
using namespace glm;
1414

@@ -50,10 +50,10 @@ void loadResources() {
5050
}
5151
}
5252

53-
std::unique_ptr<Server> createServer() {
53+
std::unique_ptr<Server> createServer(Config const& config) {
5454
std::unique_ptr<Server> server;
55-
if (!NetworkConfig::LOCAL) {
56-
server = std::make_unique<RealServer>(NetworkConfig::SERVER_ADDR, NetworkConfig::SERVER_PORT);
55+
if (config.multiplayer) {
56+
server = std::make_unique<RealServer>(config.serverAddr, config.serverPort);
5757
} else {
5858
server = std::make_unique<ClientServer>();
5959
}
@@ -62,18 +62,21 @@ std::unique_ptr<Server> createServer() {
6262

6363
int main(int argc, char* argv[]) {
6464
std::cout << "---- Main ----" << std::endl;
65+
Config config = SaveManager::getInst().getConfig();
66+
67+
// game seed
68+
std::hash<std::string> hashString;
69+
auto seed = hashString(config.seed);
70+
std::srand(seed);
71+
std::cout << "seed : " << config.seed << " (" << seed << ")" << std::endl;
6572

6673
Viewport window({800, 800});
6774
loadResources();
6875
window.createRoot();
6976

70-
auto server = createServer();
71-
TerrainGenerator gen;
77+
auto server = createServer(config);
7278
World& world = World::getInst();
7379

74-
// game seed
75-
std::hash<std::string> hashString;
76-
std::srand(hashString("Moncraft"));
7780

7881
float t = 0;
7982

@@ -116,7 +119,7 @@ int main(int argc, char* argv[]) {
116119
btn_fullscreen.setPadding({15, 10});
117120

118121
btn_vsync.onclick([&] { window.toggleVSync(); });
119-
btn_gen.onclick([&] { gen.toggleGeneration(); });
122+
// btn_gen.onclick([&] { gen.toggleGeneration(); });
120123
btn_fullscreen.onclick([&] { window.toggleFullscreen(); });
121124
btn_ping.onclick([&] { server->ping(); });
122125

@@ -143,7 +146,6 @@ int main(int argc, char* argv[]) {
143146
for (float dt = 0; window.beginFrame(dt); window.endFrame()) {
144147
t += dt;
145148

146-
gen.update(server->getPlayer()->getPosition());
147149
server->update();
148150

149151
scene.drawFrame(t, dt);
@@ -153,7 +155,7 @@ int main(int argc, char* argv[]) {
153155
text_fps.setText(text.str());
154156

155157
text.str(""); // "clears" the string stream
156-
// text << "Player Pos : " << std::fixed << std::setprecision(3) << scene.entities->player->getPosition();
158+
text << "Player Pos : " << std::fixed << std::setprecision(3) << server->getPlayer()->getPosition();
157159
text_posPlayer.setText(text.str());
158160

159161
text.str(""); // "clears" the string stream

OpenGL/OpenGL/src/MonCraftScene.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ MonCraftScene::MonCraftScene(Viewport* vp, std::shared_ptr<Character> player)
1818

1919
fogEnabled(false),
2020
sunSpeed(0.0075f), skyboxSpeed(0.0075f),
21-
captured(false)//, save("save/defaultWorld/entities")
21+
captured(false)
2222
{
2323
// load resources
2424
shader = ResourceManager::getShader("simple");

OpenGL/OpenGL/src/Server.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,23 @@
11
#include "debug/Debug.hpp"
22
#include "multiplayer/server/Server.hpp"
33
#include "multiplayer/common/Config.hpp"
4+
#include "save/SaveManager.hpp"
45

56
int main() {
67
std::cout << "---- Server ----" << std::endl;
7-
Server server(NetworkConfig::SERVER_PORT);
8+
Config config = SaveManager::getInst().getConfig();
9+
10+
// game seed
11+
std::hash<std::string> hashString;
12+
auto seed = hashString(config.seed);
13+
std::srand(seed);
14+
std::cout << "seed : " << config.seed << " (" << seed << ")" << std::endl;
15+
16+
SaveManager::configSaveDir = "save";
17+
SaveManager::configFilename = "serverConfig.txt";
18+
SaveManager::entitySaveDir = "save/serverWorld/entities";
19+
SaveManager::chunkSaveDir = "save/serverWorld/chunks";
20+
Server server(SaveManager::getInst().getConfig().serverPort);
821
server.run();
922
return 0;
1023
}

OpenGL/OpenGL/src/blocks/AllBlocks.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "Birch_Leaf_Block.hpp"
2121
#include "Gravel_Block.hpp"
2222
#include "Brick_Block.hpp"
23+
#include "Cobalt_Block.hpp"
2324

2425
#include <sstream>
2526

@@ -34,7 +35,7 @@ class AllBlocks {
3435
* correctly inserted it the array.
3536
*/
3637
static Block::unique_ptr_t create_static(BlockType type) {
37-
static std::array<Block*(*)(), 17> factories {
38+
static std::array<Block*(*)(), 18> factories {
3839
(Block*(*)())Air_Block::get,
3940
(Block*(*)())Grass_Block::get,
4041
(Block*(*)())Dirt_Block::get,
@@ -52,6 +53,7 @@ class AllBlocks {
5253
(Block*(*)())Birch_Leaf_Block::get,
5354
(Block*(*)())Gravel_Block::get,
5455
(Block*(*)())Brick_Block::get,
56+
(Block*(*)())Cobalt_Block::get,
5557
};
5658
auto index = (size_t)type;
5759
if(index > factories.size()) {

OpenGL/OpenGL/src/blocks/Block.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ enum class BlockType
2424
Birch_Wood,
2525
Birch_Leaf,
2626
Gravel,
27-
Brick
27+
Brick,
28+
Cobalt
2829
};
2930

3031
enum class BlockFace { TOP, BOTTOM, FRONT, RIGHT, BACK, LEFT };
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#pragma once
2+
3+
#include "Block.hpp"
4+
5+
class Cobalt_Block : public Block {
6+
public:
7+
static Cobalt_Block* get() {
8+
static Cobalt_Block inst;
9+
return &inst;
10+
}
11+
12+
glm::ivec2 getFaceUVs(BlockFace face) const override {
13+
return {2, 3};
14+
}
15+
16+
private:
17+
Cobalt_Block() : Block(BlockType::Cobalt) {}
18+
};

OpenGL/OpenGL/src/entity/Entity.cpp

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,20 @@ using namespace glm;
55
static const highp_dmat4 I(1.0);
66

77
Entity::Entity(Hitbox hitbox)
8-
: view(View::FIRST_PERSON), state(State::Idle),
8+
: view(View::FIRST_PERSON),
9+
state(State::Idle),
10+
uid(0),
911
maxSpeed(4.3f), maxAccel(10.f), verticalFriction(0.f), horizontalFriction(5.f),
1012
gravity(32.f), jumpSpeed(10.5f), maxFallSpeed(78.4f),
11-
playerFovY(45.0f),
13+
playerFovY(SaveManager::getInst().getConfig().fov),
14+
defaultFovY(playerFovY),
1215
speed(0), accel(0), direction(0),
1316
onFloor(false),
14-
hitbox(std::move(hitbox)),
15-
uid(0)
17+
hitbox(std::move(hitbox))
1618
{}
1719

1820
Entity::~Entity() {
19-
SaveManager save("save/defaultWorld/entities");
20-
save.saveEntity(*this);
21+
SaveManager::saveEntity(*this);
2122
}
2223

2324
void Entity::walk(vec3 dir) {
@@ -145,7 +146,12 @@ void Entity::update(float dt) {
145146
headNode.rot.y -= delta;
146147
}
147148

148-
playerFovY = playerFovY - (playerFovY - (45.0f + length(speed) / 4.0f)) * 10.0f * dt;
149+
// fov function of speed
150+
const auto maxFov = 180.0;
151+
const auto smoothing = 0.005f;
152+
const auto transition = 10.f;
153+
const auto targetFov = playerFovY - (maxFov + (defaultFovY - maxFov) * exp(-smoothing * length(speed)));
154+
playerFovY = playerFovY - targetFov * transition * dt;
149155

150156
node.update();
151157
}

0 commit comments

Comments
 (0)