Fix game crashing on NetworkingInit on Windows. Also add a 32-bit Windows build.

Also stubbed out InitSingleplayer in menu.cpp cuz this client doesn't want to work with servers correctly.
This commit is contained in:
milkwx3
2026-06-15 15:36:39 +03:00
parent 9b9e554c89
commit 0fc1cfb0aa
18 changed files with 159 additions and 77 deletions
+3 -1
View File
@@ -33,7 +33,7 @@ jobs:
rm raylib -r rm raylib -r
rm yaml-cpp -r rm yaml-cpp -r
wget https://github.com/lsalzman/enet/archive/refs/heads/master.zip wget https://github.com/zpl-c/enet/archive/refs/heads/master.zip
unzip master.zip unzip master.zip
mv enet-master enet mv enet-master enet
rm master.zip rm master.zip
@@ -64,6 +64,7 @@ jobs:
sh ${{ gitea.workspace }}/compile.sh sh ${{ gitea.workspace }}/compile.sh
zip -r release-linux.zip OUTPUT-Linux || true zip -r release-linux.zip OUTPUT-Linux || true
zip -r release-w64.zip OUTPUT-w64 || true zip -r release-w64.zip OUTPUT-w64 || true
zip -r release-w32.zip OUTPUT-w32 || true
- name: Upload artifacts - name: Upload artifacts
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
@@ -72,3 +73,4 @@ jobs:
path: | path: |
release-linux.zip release-linux.zip
release-w64.zip release-w64.zip
release-w32.zip
+2 -1
View File
@@ -7,4 +7,5 @@ android
__UTILS__ __UTILS__
snapshots snapshots
OUTPUT-Linux OUTPUT-Linux
OUTPUT-w64 OUTPUT-w64
OUTPUT-w32
+11
View File
@@ -0,0 +1,11 @@
#ifdef WIN32 // FUCK WINDOWS
#include "external/fix_win32_compatibility.h"
#undef PlaySound
#endif
#include <enet/enet.h>
#ifdef WIN32 // FUCK WINDOWS 2
#undef PlaySound
#undef Sound
#endif
+3 -25
View File
@@ -1,27 +1,5 @@
#/usr/bin/bash #/usr/bin/bash
./makeheaders/makeheaders -h src/helpers/vars.hpp src/helpers/chunks.cpp src/helpers/debug.cpp src/helpers/entities.cpp src/helpers/input.cpp src/helpers/menu.cpp src/helpers/mesher.cpp src/helpers/networking.cpp src/helpers/utils.cpp src/helpers/inlines.hpp src/helpers/inventory.cpp src/helpers/locale.cpp src/helpers/recipes.cpp src/helpers/particles.cpp src/helpers/player.cpp src/helpers/multisound.cpp src/helpers/svlib.cpp -v > src/helpers/common.hpp sh compile_linux.sh
sh compile_windows_64.sh
rm -r build sh compile_windows.sh
echo Building Linux...
cmake -B build -DUNIX=ON -DUNIX=true
cd build
make -j12
cd ..
mkdir OUTPUT-Linux
cp build/src/RCRAFT OUTPUT-Linux
cp -r data/resources OUTPUT-Linux
mkdir OUTPUT-Linux/user
mkdir OUTPUT-Linux/user/worlds
rm -r build
echo Building Windows...
cmake -DCMAKE_TOOLCHAIN_FILE=toolchains/mingw-w64.cmake -DWIN32=ON -DWIN32=true -B build
cd build
make -j12
cd ..
mkdir OUTPUT-w64
cp build/src/RCRAFT.exe OUTPUT-w64
cp -r data/resources OUTPUT-w64
mkdir OUTPUT-w64/user
mkdir OUTPUT-w64/user/worlds
+17
View File
@@ -0,0 +1,17 @@
#/usr/bin/bash
./makeheaders/makeheaders -h src/helpers/vars.hpp src/helpers/chunks.cpp src/helpers/debug.cpp src/helpers/entities.cpp src/helpers/input.cpp src/helpers/menu.cpp src/helpers/mesher.cpp src/helpers/networking.cpp src/helpers/utils.cpp src/helpers/inlines.hpp src/helpers/inventory.cpp src/helpers/locale.cpp src/helpers/recipes.cpp src/helpers/particles.cpp src/helpers/player.cpp src/helpers/multisound.cpp src/helpers/svlib.cpp -v > tmp.hpp
cat additions.hpp tmp.hpp > src/helpers/common.hpp
rm tmp.hpp
echo Building x86-64 Linux...
rm -rf build
cmake -B build -DUNIX=ON -DUNIX=true
cd build
make -j12
cd ..
mkdir OUTPUT-Linux
cp build/src/RCRAFT OUTPUT-Linux/CubeGame
cp -r data/resources OUTPUT-Linux
mkdir OUTPUT-Linux/user
mkdir OUTPUT-Linux/user/worlds
+17
View File
@@ -0,0 +1,17 @@
#/usr/bin/bash
./makeheaders/makeheaders -h src/helpers/vars.hpp src/helpers/chunks.cpp src/helpers/debug.cpp src/helpers/entities.cpp src/helpers/input.cpp src/helpers/menu.cpp src/helpers/mesher.cpp src/helpers/networking.cpp src/helpers/utils.cpp src/helpers/inlines.hpp src/helpers/inventory.cpp src/helpers/locale.cpp src/helpers/recipes.cpp src/helpers/particles.cpp src/helpers/player.cpp src/helpers/multisound.cpp src/helpers/svlib.cpp -v > tmp.hpp
cat additions.hpp tmp.hpp > src/helpers/common.hpp
rm tmp.hpp
echo Building i686 Windows...
rm -rf build
cmake -DCMAKE_TOOLCHAIN_FILE=toolchains/mingw-w32.cmake -DWIN32=ON -DWIN32=true -B build
cd build
make -j12
cd ..
mkdir OUTPUT-w32
cp build/src/RCRAFT.exe OUTPUT-w32/CubeGame.exe
cp -r data/resources OUTPUT-w32
mkdir OUTPUT-w32/user
mkdir OUTPUT-w32/user/worlds
+17
View File
@@ -0,0 +1,17 @@
#/usr/bin/bash
./makeheaders/makeheaders -h src/helpers/vars.hpp src/helpers/chunks.cpp src/helpers/debug.cpp src/helpers/entities.cpp src/helpers/input.cpp src/helpers/menu.cpp src/helpers/mesher.cpp src/helpers/networking.cpp src/helpers/utils.cpp src/helpers/inlines.hpp src/helpers/inventory.cpp src/helpers/locale.cpp src/helpers/recipes.cpp src/helpers/particles.cpp src/helpers/player.cpp src/helpers/multisound.cpp src/helpers/svlib.cpp -v > tmp.hpp
cat additions.hpp tmp.hpp > src/helpers/common.hpp
rm tmp.hpp
echo Building x86-64 Windows...
rm -rf build
cmake -DCMAKE_TOOLCHAIN_FILE=toolchains/mingw-w64.cmake -DWIN32=ON -DWIN32=true -B build
cd build
make -j12
cd ..
mkdir OUTPUT-w64
cp build/src/RCRAFT.exe OUTPUT-w64/CubeGame.exe
cp -r data/resources OUTPUT-w64
mkdir OUTPUT-w64/user
mkdir OUTPUT-w64/user/worlds
+12 -8
View File
@@ -2,24 +2,28 @@ cmake_minimum_required(VERSION 3.23)
project(RCRAFT) project(RCRAFT)
add_subdirectory(helpers) add_subdirectory(helpers)
#add_subdirectory(dedicated_server)
set(YAML_BUILD_SHARED_LIBS OFF) set(YAML_BUILD_SHARED_LIBS OFF)
set(YAML_MSVC_SHARED_RT OFF) set(YAML_MSVC_SHARED_RT OFF)
set(OPENGL_VERSION 4.3) set(OPENGL_VERSION 1.1)
add_subdirectory(libraries/raylib) add_subdirectory(libraries/raylib)
add_subdirectory(libraries/enet) add_subdirectory(libraries/enet)
add_subdirectory(libraries/yaml-cpp) add_subdirectory(libraries/yaml-cpp)
add_subdirectory(libraries/Lua) add_subdirectory(libraries/Lua)
if (WIN32)
add_compile_definitions(WIN32)
add_compile_options(-DWIN32)
link_libraries(ws2_32)
endif()
execute_process(COMMAND date +v.%yw%W OUTPUT_VARIABLE BUILD_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND date +v.%yw%W OUTPUT_VARIABLE BUILD_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
add_compile_definitions(GAME_VERSION="${BUILD_DATE}") add_compile_definitions(GAME_VERSION="${BUILD_DATE}")
add_executable(RCRAFT rcraft.cpp) add_executable(RCRAFT rcraft.cpp)
if (WIN32)
add_compile_definitions(WIN32)
add_compile_options(-DWIN32)
target_link_libraries(RCRAFT INTERFACE winmm ws2_32)
endif()
add_compile_options(-Wno-narrowing)
target_link_directories(RCRAFT PRIVATE ${CMAKE_SOURCE_DIR}/build/src/libraries/enet/)
target_include_directories(RCRAFT PRIVATE target_include_directories(RCRAFT PRIVATE
libraries/enet/include/. libraries/enet/include/.
libraries/yaml-cpp/include/. libraries/yaml-cpp/include/.
@@ -28,8 +32,8 @@ target_include_directories(RCRAFT PRIVATE
) )
target_link_libraries(RCRAFT PRIVATE target_link_libraries(RCRAFT PRIVATE
raylib raylib
enet
helpers helpers
enet
yaml-cpp yaml-cpp
lua_static lua_static
) )
+7 -1
View File
@@ -18,6 +18,12 @@ add_library(helpers STATIC
svlib.cpp svlib.cpp
) )
if (WIN32)
add_compile_definitions(WIN32)
add_compile_options(-DWIN32)
target_link_libraries(helpers INTERFACE winmm ws2_32)
endif()
execute_process(COMMAND date +v.%yw%W OUTPUT_VARIABLE BUILD_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND date +v.%yw%W OUTPUT_VARIABLE BUILD_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
add_compile_definitions(GAME_VERSION="${BUILD_DATE}") add_compile_definitions(GAME_VERSION="${BUILD_DATE}")
@@ -36,4 +42,4 @@ target_sources(helpers
FILE_SET headers TYPE HEADERS BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} FILES common.hpp FILE_SET headers TYPE HEADERS BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} FILES common.hpp
) )
target_link_libraries(helpers PRIVATE raylib yaml-cpp lua_static) target_link_libraries(helpers PRIVATE raylib yaml-cpp lua_static enet)
+10 -5
View File
@@ -1,9 +1,16 @@
#if defined(WIN32) #ifdef WIN32 // FUCK WINDOWS
#include "external/fix_win32_compatibility.h" #include "external/fix_win32_compatibility.h"
#undef PlaySound
#endif
#include <enet/enet.h>
#ifdef WIN32 // FUCK WINDOWS 2
#undef PlaySound
#undef Sound
#endif #endif
#include "glfw_keycodes_to_string.h" #include "glfw_keycodes_to_string.h"
#include "../PerlinNoise.hpp" #include "../PerlinNoise.hpp"
#include <enet/enet.h>
#include "raylib.h" #include "raylib.h"
#include "raymath.h" #include "raymath.h"
#include <stdint.h> #include <stdint.h>
@@ -371,7 +378,6 @@ extern int currentlySelected;
extern GameState state; extern GameState state;
extern Texture2D cubemap; extern Texture2D cubemap;
int TryConnect(const char *hostname); int TryConnect(const char *hostname);
void InitSingleplayer();
void GameModeCleanup(); void GameModeCleanup();
void DrawBackground(); void DrawBackground();
void InitMenu(); void InitMenu();
@@ -610,7 +616,6 @@ void SavePlayerData();
bool LoadPlayerData(); bool LoadPlayerData();
void MS_PlaySound(Sound src,float pitch,float volume,Vector3 position); void MS_PlaySound(Sound src,float pitch,float volume,Vector3 position);
void MS_Update(float dt,Camera camera); void MS_Update(float dt,Camera camera);
void StartInternalServer(bool&started);
void ServerNetworkUpdate(); void ServerNetworkUpdate();
void StopInternalServer(); void StopInternalServer();
#define INTERFACE 0 #define INTERFACE 0
+2 -2
View File
@@ -29,7 +29,7 @@ static int MakeUIPOI(int x, int y) {
std::unordered_set<uint32_t> ui_pois; std::unordered_set<uint32_t> ui_pois;
int TryConnect(const char* hostname); int TryConnect(const char* hostname);
void InitSingleplayer(); //void InitSingleplayer();
void GameModeCleanup(); void GameModeCleanup();
static int mouseX = -1; static int mouseX = -1;
@@ -503,7 +503,7 @@ void DrawWorldSelect() {
} }
if (Button(LocaleGet("create_world").c_str(), GetScreenWidth()/2+196-128, GetScreenHeight()-48, 128, 0)) { if (Button(LocaleGet("create_world").c_str(), GetScreenWidth()/2+196-128, GetScreenHeight()-48, 128, 0)) {
UIResetMousePos(); UIResetMousePos();
InitSingleplayer(); //InitSingleplayer();
return; return;
} }
if (Button(LocaleGet("create_world").c_str(), GetScreenWidth()/2+196-128, GetScreenHeight()-48-48, 128, 0)) { if (Button(LocaleGet("create_world").c_str(), GetScreenWidth()/2+196-128, GetScreenHeight()-48-48, 128, 0)) {
+1
View File
@@ -9,6 +9,7 @@
#ifndef SERVER #ifndef SERVER
#ifndef LEGACY_GL #ifndef LEGACY_GL
MeshData GenerateChunkMesh(ChunkRenderData chunkRenderData, Chunk chunk, int chunkWorldX, int chunkWorldY, uint8_t sideMask) MeshData GenerateChunkMesh(ChunkRenderData chunkRenderData, Chunk chunk, int chunkWorldX, int chunkWorldY, uint8_t sideMask)
{ {
MeshData out = {0}; MeshData out = {0};
+3 -3
View File
@@ -1,7 +1,7 @@
#include <cstdio> #include <cstdio>
#include "common.hpp" #include "common.hpp"
#include <cstring> #include <cstring>
#include <iostream>
int NetworkingStart() int NetworkingStart()
{ {
@@ -10,7 +10,7 @@ int NetworkingStart()
fprintf (stderr, "An error occurred while initializing ENet.\n"); fprintf (stderr, "An error occurred while initializing ENet.\n");
return EXIT_FAILURE; return EXIT_FAILURE;
} }
atexit(enet_deinitialize); return 0;
} }
ENetHost* StartServer() { ENetHost* StartServer() {
@@ -57,7 +57,7 @@ ENetHost* StartClient() {
void SendPacket(ENetPeer* peer, void* data, int len) void SendPacket(ENetPeer* peer, void* data, int len)
{ {
ENetPacket* packet = enet_packet_create(data, len, ENET_PACKET_FLAG_UNSEQUENCED); ENetPacket* packet = enet_packet_create(data, len, ENET_PACKET_FLAG_UNSEQUENCED);
std::cout << (packet == NULL) << std::endl;
int c = enet_peer_send(peer, 0, packet); int c = enet_peer_send(peer, 0, packet);
if(c!=0) { if(c!=0) {
printf("Failed sending packet! "); printf("Failed sending packet! ");
+1
View File
@@ -50,6 +50,7 @@ void LoadRecipes() {
{ {
Recipe _recipe; Recipe _recipe;
const std::string path = dir_entry.path().u8string(); const std::string path = dir_entry.path().u8string();
std::cout << "loading " << path << std::endl;
YAML::Node recipe = YAML::LoadFile(path); YAML::Node recipe = YAML::LoadFile(path);
_recipe.requiredStation = recipe["station"].as<std::string>(); _recipe.requiredStation = recipe["station"].as<std::string>();
for (auto s : recipe["inputs"]) { for (auto s : recipe["inputs"]) {
+12 -9
View File
@@ -8,6 +8,7 @@
#include <memory> #include <memory>
#include <filesystem> #include <filesystem>
#include <lua.hpp> #include <lua.hpp>
#include <atomic>
static std::list<NetPlayer> players; static std::list<NetPlayer> players;
static Chunk world[MAX_WORLD_AREA]; static Chunk world[MAX_WORLD_AREA];
@@ -163,6 +164,9 @@ static int PeerToPlayerID(ENetPeer* peer) {
return -1; return -1;
} }
static bool CompareAddress(NetPlayer plr, ENetPeer* peer) {
return plr.addr == peer->address.host && plr.port == (int)(peer->address.port);
}
static void ParseData(ENetPacket* packet, ENetPeer* peer) { static void ParseData(ENetPacket* packet, ENetPeer* peer) {
int len = packet->dataLength; int len = packet->dataLength;
unsigned char data[len]; unsigned char data[len];
@@ -191,7 +195,7 @@ static void ParseData(ENetPacket* packet, ENetPeer* peer) {
response[0] = NET_ARG_ECHOMOVE; response[0] = NET_ARG_ECHOMOVE;
for (NetPlayer &plr : players) for (NetPlayer &plr : players)
{ {
if(plr.addr == peer->address.host && plr.port == peer->address.port) { if(CompareAddress(plr, peer)) {
float x = DeserializeFloat(data[1], data[2]); float x = DeserializeFloat(data[1], data[2]);
float y = DeserializeFloat(data[3], data[4]); float y = DeserializeFloat(data[3], data[4]);
float z = DeserializeFloat(data[5], data[6]); float z = DeserializeFloat(data[5], data[6]);
@@ -211,7 +215,7 @@ static void ParseData(ENetPacket* packet, ENetPeer* peer) {
response[0] = NET_ARG_ECHOYAW; response[0] = NET_ARG_ECHOYAW;
for (NetPlayer &plr : players) for (NetPlayer &plr : players)
{ {
if(plr.addr == peer->address.host && plr.port == peer->address.port) { if(CompareAddress(plr, peer)) {
response[1] = plr.id; response[1] = plr.id;
plr.yaw = data[1]; plr.yaw = data[1];
response[2] = plr.yaw; response[2] = plr.yaw;
@@ -226,7 +230,7 @@ static void ParseData(ENetPacket* packet, ENetPeer* peer) {
{ {
unsigned char responseP[9]; unsigned char responseP[9];
responseP[0] = NET_ARG_PLRREG; responseP[0] = NET_ARG_PLRREG;
if(plr.addr != peer->address.host || plr.port != peer->address.port) { if(!CompareAddress(plr, peer)) {
SerializeFloat2Data(plr.x, responseP, 2); SerializeFloat2Data(plr.x, responseP, 2);
SerializeFloat2Data(plr.y, responseP, 4); SerializeFloat2Data(plr.y, responseP, 4);
SerializeFloat2Data(plr.z, responseP, 6); SerializeFloat2Data(plr.z, responseP, 6);
@@ -240,7 +244,7 @@ static void ParseData(ENetPacket* packet, ENetPeer* peer) {
response[0] = NET_ARG_BLOCK; response[0] = NET_ARG_BLOCK;
for (NetPlayer &plr : players) for (NetPlayer &plr : players)
{ {
if(plr.addr == peer->address.host || plr.port == peer->address.port) { if(CompareAddress(plr, peer)) {
unsigned char responseB[6]; unsigned char responseB[6];
responseB[0] = NET_ARG_BLOCK; responseB[0] = NET_ARG_BLOCK;
responseB[1] = plr.id; responseB[1] = plr.id;
@@ -268,7 +272,7 @@ static int FirstFreeID(const std::list<NetPlayer>& players) {
return id; return id;
} }
static bool serverStarted = false; static bool serverStarted = false;
void StartInternalServer(bool& started) { void StartInternalServer(std::atomic_bool& started) {
int worldType = 0; int worldType = 0;
InitWorldgen(worldType); InitWorldgen(worldType);
std::cout << "Building chunks..." << std::endl; std::cout << "Building chunks..." << std::endl;
@@ -290,7 +294,7 @@ void StartInternalServer(bool& started) {
void ServerNetworkUpdate() { void ServerNetworkUpdate() {
if(serverStarted) { if(serverStarted) {
ENetEvent event; ENetEvent event;
while(enet_host_service (server, &event, 1) > 0) while(enet_host_service (server, &event, 0) > 0)
{ {
switch (event.type) switch (event.type)
{ {
@@ -308,7 +312,7 @@ void ServerNetworkUpdate() {
NetPlayer netPlayer; NetPlayer netPlayer;
netPlayer.id = id; netPlayer.id = id;
netPlayer.addr = event.peer->address.host; netPlayer.addr = event.peer->address.host;
netPlayer.port = event.peer->address.port; netPlayer.port = (int)(event.peer->address.port);
netPlayer.peer = event.peer; netPlayer.peer = event.peer;
players.push_back(netPlayer); players.push_back(netPlayer);
@@ -316,7 +320,6 @@ void ServerNetworkUpdate() {
response[1] = netPlayer.id; response[1] = netPlayer.id;
BroadcastPacketR(server, response, sizeof(response)); BroadcastPacketR(server, response, sizeof(response));
} }
// notify plugins
CallPluginOnConnect(id); CallPluginOnConnect(id);
break; break;
@@ -329,7 +332,7 @@ void ServerNetworkUpdate() {
printf ("%s disconnected.\n", event.peer -> data); printf ("%s disconnected.\n", event.peer -> data);
event.peer -> data = NULL; event.peer -> data = NULL;
for (auto it = players.begin(); it != players.end(); ++it) { for (auto it = players.begin(); it != players.end(); ++it) {
if (it->addr == event.peer->address.host && it->port == event.peer->address.port) { if (CompareAddress(*it, event.peer)) {
char responseD[2]; char responseD[2];
responseD[0] = NET_ARG_PLRDCN; responseD[0] = NET_ARG_PLRDCN;
responseD[1] = it->id; responseD[1] = it->id;
+3 -6
View File
@@ -1,18 +1,15 @@
#if INTERFACE #if INTERFACE
#ifdef WIN32
#include "external/fix_win32_compatibility.h"
#endif
#ifdef Escape #ifdef Escape
#undef Escape #undef Escape
#endif #endif
#include "glfw_keycodes_to_string.h" #include "glfw_keycodes_to_string.h"
#include "../PerlinNoise.hpp" #include "../PerlinNoise.hpp"
#include <enet/enet.h> #ifdef WIN32
#ifdef PlaySound #include "external/fix_win32_compatibility.h"
#undef PlaySound
#endif #endif
#include "raylib.h" #include "raylib.h"
#include "raymath.h" #include "raymath.h"
#include <stdint.h> #include <stdint.h>
+24 -16
View File
@@ -16,6 +16,7 @@
#include <climits> #include <climits>
#include <queue> #include <queue>
#include <thread> #include <thread>
#include <atomic>
#define MAX_RAY_DISTANCE 8.0f #define MAX_RAY_DISTANCE 8.0f
struct MessageData { struct MessageData {
std::string message; std::string message;
@@ -450,7 +451,7 @@ void SetBlockNetwork(Chunk world[], int bx, int by, int bz, int t) {
data[2] = (uint8_t)by; data[2] = (uint8_t)by;
data[3] = (uint8_t)bz; data[3] = (uint8_t)bz;
data[4] = (uint8_t)t; data[4] = (uint8_t)t;
SendPacketR(peer, data, 5); SendPacketR(peer, data, sizeof(data));
} }
else { else {
SetBlock(world, bx, by, bz, t); SetBlock(world, bx, by, bz, t);
@@ -481,7 +482,7 @@ static void TickAvailableBlocks() {
} }
} }
} }
static bool serverStarted; std::atomic_bool serverStarted;
int TryConnect(const char* hostname) { int TryConnect(const char* hostname) {
client = StartClient(); client = StartClient();
@@ -506,16 +507,14 @@ int TryConnect(const char* hostname) {
"No available peers for initiating an ENet connection.\n"); "No available peers for initiating an ENet connection.\n");
return NET_ERROR_NOTFOUND; return NET_ERROR_NOTFOUND;
} }
printf("Found a host\n");
while (!serverStarted) if (enet_host_service (client, & event, 5000) > 0 &&
event.type == ENET_EVENT_TYPE_CONNECT)
{ {
if(!online) serverStarted = true;
}
if (enet_host_service (client, & event, 10000) && event.type == ENET_EVENT_TYPE_CONNECT){
puts ("Connection succeeded."); puts ("Connection succeeded.");
char data[1]; char data[1];
data[0] = NET_ARG_REQWORLD; data[0] = NET_ARG_REQWORLD;
SendPacketR(peer, data, 1); // Tell the server to send all chunks SendPacketR(peer, data, 1);
online = true; online = true;
state = GAME_STATE_LOADING; state = GAME_STATE_LOADING;
return 0; return 0;
@@ -529,22 +528,26 @@ int TryConnect(const char* hostname) {
return -1; return -1;
} }
std::thread serverThread; //std::thread serverThread;
std::atomic_bool stop_server = false;
void ServerThread(bool& started) { void StartInternalServer(std::atomic_bool& started);
/*void ServerThread(std::atomic_bool& started) {
StartInternalServer(started); StartInternalServer(started);
stop_server = false;
while(true) { while(true) {
if (stop_server)
return;
ServerNetworkUpdate(); ServerNetworkUpdate();
} }
} }*/
void InitSingleplayer() { /*void InitSingleplayer() {
online = true; online = true;
serverThread = std::thread(ServerThread, std::ref(serverStarted)); serverThread = std::thread(ServerThread, std::ref(serverStarted));
int result = TryConnect("localhost"); int result = TryConnect("localhost");
if(result == NET_ERROR_FAILED) { if(result == NET_ERROR_FAILED) {
state = GAME_STATE_MAINMENU; state = GAME_STATE_MAINMENU;
} }
} }*/
std::vector<MessageData> messages; std::vector<MessageData> messages;
bool survival = false; bool survival = false;
bool chatOpen = false; bool chatOpen = false;
@@ -1400,10 +1403,14 @@ void NetworkUpdate() {
void GameModeCleanupFull() { void GameModeCleanupFull() {
if(online) { if(online) {
enet_host_destroy(client); enet_host_destroy(client);
online = false; online = false;
} }
stop_server = true;
//serverThread.join();
for (int idx = 0; idx < MAX_WORLD_AREA; idx++) for (int idx = 0; idx < MAX_WORLD_AREA; idx++)
{ {
if(loadedChunks[idx]) { if(loadedChunks[idx]) {
@@ -1432,6 +1439,7 @@ extern void InitMenu();
int main(void) int main(void)
{ {
SetTraceLogLevel(LOG_WARNING); SetTraceLogLevel(LOG_WARNING);
NetworkingStart();
SetConfigFlags(FLAG_WINDOW_RESIZABLE); SetConfigFlags(FLAG_WINDOW_RESIZABLE);
InitWindow(WIDTH, HEIGHT, GAME_NAME); InitWindow(WIDTH, HEIGHT, GAME_NAME);
InitWorldgen(0); InitWorldgen(0);
@@ -1595,7 +1603,7 @@ int main(void)
} }
} }
enet_deinitialize();
GameModeCleanupFull(); GameModeCleanupFull();
UnloadTexture(terrain); UnloadTexture(terrain);
+14
View File
@@ -0,0 +1,14 @@
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_C_COMPILER i686-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++)
set(CMAKE_RC_COMPILER i686-w64-mingw32-windres)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_C_FLAGS "-static-libgcc -static-libstdc++ -g -O0 -fno-omit-frame-pointer ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "-static-libgcc -static-libstdc++ -g -O0 -fno-omit-frame-pointer ${CMAKE_CXX_FLAGS}")