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:
@@ -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
|
||||||
|
|||||||
@@ -8,3 +8,4 @@ __UTILS__
|
|||||||
snapshots
|
snapshots
|
||||||
OUTPUT-Linux
|
OUTPUT-Linux
|
||||||
OUTPUT-w64
|
OUTPUT-w64
|
||||||
|
OUTPUT-w32
|
||||||
@@ -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
@@ -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
|
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
@@ -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
|
||||||
)
|
)
|
||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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)) {
|
||||||
|
|||||||
@@ -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};
|
||||||
|
|||||||
@@ -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! ");
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
+23
-15
@@ -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);
|
||||||
|
|||||||
@@ -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}")
|
||||||
Reference in New Issue
Block a user