Merge branch 'develop'
This commit is contained in:
@@ -94,8 +94,8 @@ void ClientApplication::Init(int argc, char** argv) {
|
|||||||
DEBUG_OUTPUT_VAR(REGION_WIDTH);
|
DEBUG_OUTPUT_VAR(REGION_WIDTH);
|
||||||
DEBUG_OUTPUT_VAR(REGION_HEIGHT);
|
DEBUG_OUTPUT_VAR(REGION_HEIGHT);
|
||||||
DEBUG_OUTPUT_VAR(REGION_DEPTH);
|
DEBUG_OUTPUT_VAR(REGION_DEPTH);
|
||||||
|
DEBUG_OUTPUT_VAR(REGION_TILE_FOOTPRINT);
|
||||||
DEBUG_OUTPUT_VAR(REGION_SOLID_FOOTPRINT);
|
DEBUG_OUTPUT_VAR(REGION_SOLID_FOOTPRINT);
|
||||||
DEBUG_OUTPUT_VAR(REGION_FOOTPRINT);
|
|
||||||
DEBUG_OUTPUT_VAR(PACKET_BUFFER_SIZE);
|
DEBUG_OUTPUT_VAR(PACKET_BUFFER_SIZE);
|
||||||
DEBUG_OUTPUT_VAR(MAX_PACKET_SIZE);
|
DEBUG_OUTPUT_VAR(MAX_PACKET_SIZE);
|
||||||
|
|
||||||
|
|||||||
@@ -21,11 +21,14 @@
|
|||||||
*/
|
*/
|
||||||
#include "region.hpp"
|
#include "region.hpp"
|
||||||
|
|
||||||
#include "utility.hpp"
|
|
||||||
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
#include <cmath>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
int snapToBase(int base, int x) {
|
||||||
|
return floor((double)x / base) * base;
|
||||||
|
}
|
||||||
|
|
||||||
Region::Region(int argX, int argY): x(argX), y(argY) {
|
Region::Region(int argX, int argY): x(argX), y(argY) {
|
||||||
if (x != snapToBase(REGION_WIDTH, x) || y != snapToBase(REGION_HEIGHT, y)) {
|
if (x != snapToBase(REGION_WIDTH, x) || y != snapToBase(REGION_HEIGHT, y)) {
|
||||||
throw(std::invalid_argument("Region location is off grid"));
|
throw(std::invalid_argument("Region location is off grid"));
|
||||||
|
|||||||
@@ -23,15 +23,14 @@
|
|||||||
#define REGION_HPP_
|
#define REGION_HPP_
|
||||||
|
|
||||||
#include <bitset>
|
#include <bitset>
|
||||||
#include <cmath>
|
|
||||||
|
|
||||||
//the region's storage format
|
//the region's storage format
|
||||||
constexpr int REGION_WIDTH = 20;
|
constexpr int REGION_WIDTH = 20;
|
||||||
constexpr int REGION_HEIGHT = 20;
|
constexpr int REGION_HEIGHT = 20;
|
||||||
constexpr int REGION_DEPTH = 3;
|
constexpr int REGION_DEPTH = 3;
|
||||||
|
|
||||||
//the size of the solid map
|
//utility function
|
||||||
constexpr int REGION_SOLID_FOOTPRINT = ceil(REGION_WIDTH * REGION_HEIGHT / 8.0);
|
int snapToBase(int base, int x);
|
||||||
|
|
||||||
class Region {
|
class Region {
|
||||||
public:
|
public:
|
||||||
@@ -61,7 +60,4 @@ private:
|
|||||||
std::bitset<REGION_WIDTH*REGION_HEIGHT> solid;
|
std::bitset<REGION_WIDTH*REGION_HEIGHT> solid;
|
||||||
};
|
};
|
||||||
|
|
||||||
//the memory footprint of the tile and solid data; not including any metadata
|
|
||||||
constexpr int REGION_FOOTPRINT = REGION_WIDTH * REGION_HEIGHT * REGION_DEPTH * sizeof(Region::type_t) + REGION_SOLID_FOOTPRINT;
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -24,8 +24,6 @@
|
|||||||
#include "region_pager_lua.hpp"
|
#include "region_pager_lua.hpp"
|
||||||
#include "region.hpp"
|
#include "region.hpp"
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
//DOCS: These glue functions simply wrap RegionPagerLua's methods
|
//DOCS: These glue functions simply wrap RegionPagerLua's methods
|
||||||
|
|
||||||
static int setTile(lua_State* L) {
|
static int setTile(lua_State* L) {
|
||||||
|
|||||||
@@ -21,8 +21,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "region_pager_base.hpp"
|
#include "region_pager_base.hpp"
|
||||||
|
|
||||||
#include "utility.hpp"
|
|
||||||
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
@@ -73,12 +71,12 @@ Region* RegionPagerBase::PushRegion(Region* const ptr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Region* RegionPagerBase::LoadRegion(int x, int y) {
|
Region* RegionPagerBase::LoadRegion(int x, int y) {
|
||||||
//TODO: load the region if possible
|
//EMPTY, intended for override
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Region* RegionPagerBase::SaveRegion(int x, int y) {
|
Region* RegionPagerBase::SaveRegion(int x, int y) {
|
||||||
//TODO: find & save the region
|
//EMPTY, intended for override
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,12 +21,8 @@
|
|||||||
*/
|
*/
|
||||||
#include "region_pager_lua.hpp"
|
#include "region_pager_lua.hpp"
|
||||||
|
|
||||||
#include "utility.hpp"
|
|
||||||
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
//TODO: Could I push the pager to the API functions too?
|
|
||||||
|
|
||||||
Region* RegionPagerLua::LoadRegion(int x, int y) {
|
Region* RegionPagerLua::LoadRegion(int x, int y) {
|
||||||
//get the pager's function from the registry
|
//get the pager's function from the registry
|
||||||
lua_rawgeti(lua, LUA_REGISTRYINDEX, loadRef);
|
lua_rawgeti(lua, LUA_REGISTRYINDEX, loadRef);
|
||||||
|
|||||||
@@ -27,6 +27,8 @@
|
|||||||
#include "region.hpp"
|
#include "region.hpp"
|
||||||
#include "statistics.hpp"
|
#include "statistics.hpp"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
//Primary interface functions
|
//Primary interface functions
|
||||||
void serializePacket(SerialPacketBase*, void* dest);
|
void serializePacket(SerialPacketBase*, void* dest);
|
||||||
void deserializePacket(SerialPacketBase*, void* src);
|
void deserializePacket(SerialPacketBase*, void* src);
|
||||||
@@ -53,15 +55,19 @@ void deserializeRegionContent(RegionPacket*, void*);
|
|||||||
void deserializeServer(ServerPacket*, void*);
|
void deserializeServer(ServerPacket*, void*);
|
||||||
void deserializeStatistics(Statistics*, void*);
|
void deserializeStatistics(Statistics*, void*);
|
||||||
|
|
||||||
/* DOCS: Keep PACKET_BUFFER_SIZE up to date
|
/* DOCS: PACKET_BUFFER_SIZE is the memory required to store serialized data
|
||||||
* DOCS: SerialPacketType::REGION_CONTENT is currently the largest type of packet, read more
|
* DOCS: SerialPacketType::REGION_CONTENT is currently the largest packet type
|
||||||
* The metadata used are:
|
* Serialized packet structure:
|
||||||
* SerialPacketType
|
* SerialPacketType
|
||||||
* room index
|
* room index
|
||||||
* X & Y positon
|
* X & Y position
|
||||||
* The rest is taken up by the Regions's content.
|
* tile data (3 layers)
|
||||||
|
* solid data (bitset)
|
||||||
|
* The constants declared here are used for networking ONLY
|
||||||
*/
|
*/
|
||||||
|
|
||||||
constexpr int PACKET_BUFFER_SIZE = sizeof(SerialPacketType) + sizeof(int) * 3 + REGION_FOOTPRINT;
|
constexpr int REGION_TILE_FOOTPRINT = sizeof(Region::type_t) * REGION_WIDTH * REGION_HEIGHT * REGION_DEPTH;
|
||||||
|
constexpr int REGION_SOLID_FOOTPRINT = ceil(REGION_WIDTH * REGION_HEIGHT / 8.0);
|
||||||
|
constexpr int PACKET_BUFFER_SIZE = sizeof(SerialPacketType) + sizeof(int) * 3 + REGION_TILE_FOOTPRINT + REGION_SOLID_FOOTPRINT;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -41,9 +41,9 @@ void serializeRegionContent(RegionPacket* packet, void* buffer) {
|
|||||||
SERIALIZE(buffer, &packet->y, sizeof(int));
|
SERIALIZE(buffer, &packet->y, sizeof(int));
|
||||||
|
|
||||||
//tiles
|
//tiles
|
||||||
for (register int i = 0; i < REGION_WIDTH; i++) {
|
for (int i = 0; i < REGION_WIDTH; i++) {
|
||||||
for (register int j = 0; j < REGION_HEIGHT; j++) {
|
for (int j = 0; j < REGION_HEIGHT; j++) {
|
||||||
for (register int k = 0; k < REGION_DEPTH; k++) {
|
for (int k = 0; k < REGION_DEPTH; k++) {
|
||||||
*reinterpret_cast<Region::type_t*>(buffer) = packet->region->GetTile(i, j, k);
|
*reinterpret_cast<Region::type_t*>(buffer) = packet->region->GetTile(i, j, k);
|
||||||
buffer = reinterpret_cast<char*>(buffer) + sizeof(Region::type_t);
|
buffer = reinterpret_cast<char*>(buffer) + sizeof(Region::type_t);
|
||||||
}
|
}
|
||||||
@@ -75,9 +75,9 @@ void deserializeRegionContent(RegionPacket* packet, void* buffer) {
|
|||||||
packet->region = new Region(packet->x, packet->y);
|
packet->region = new Region(packet->x, packet->y);
|
||||||
|
|
||||||
//tiles
|
//tiles
|
||||||
for (register int i = 0; i < REGION_WIDTH; i++) {
|
for (int i = 0; i < REGION_WIDTH; i++) {
|
||||||
for (register int j = 0; j < REGION_HEIGHT; j++) {
|
for (int j = 0; j < REGION_HEIGHT; j++) {
|
||||||
for (register int k = 0; k < REGION_DEPTH; k++) {
|
for (int k = 0; k < REGION_DEPTH; k++) {
|
||||||
packet->region->SetTile(i, j, k, *reinterpret_cast<Region::type_t*>(buffer));
|
packet->region->SetTile(i, j, k, *reinterpret_cast<Region::type_t*>(buffer));
|
||||||
buffer = reinterpret_cast<char*>(buffer) + sizeof(Region::type_t);
|
buffer = reinterpret_cast<char*>(buffer) + sizeof(Region::type_t);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,19 +23,6 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
int snapToBase(int base, int x) {
|
|
||||||
//snap to a grid
|
|
||||||
if (x < 0) {
|
|
||||||
++x;
|
|
||||||
return x / base * base - base;
|
|
||||||
}
|
|
||||||
return x / base * base;
|
|
||||||
}
|
|
||||||
|
|
||||||
double snapToBase(double base, double x) {
|
|
||||||
return floor(x / base) * base;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string truncatePath(std::string pathname) {
|
std::string truncatePath(std::string pathname) {
|
||||||
return std::string(
|
return std::string(
|
||||||
std::find_if(
|
std::find_if(
|
||||||
|
|||||||
@@ -24,9 +24,6 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
int snapToBase(int base, int x);
|
|
||||||
double snapToBase(double base, double x);
|
|
||||||
|
|
||||||
std::string truncatePath(std::string pathname);
|
std::string truncatePath(std::string pathname);
|
||||||
|
|
||||||
//fixing known bugs in g++
|
//fixing known bugs in g++
|
||||||
|
|||||||
@@ -3,11 +3,6 @@
|
|||||||
#MKDIR=mkdir
|
#MKDIR=mkdir
|
||||||
#RM=del /y
|
#RM=del /y
|
||||||
|
|
||||||
#CXXFLAGS+=-static-libgcc -static-libstdc++ -g -fno-inline-functions -Wall
|
|
||||||
#CXXFLAGS+=-static-libgcc -static-libstdc++
|
|
||||||
|
|
||||||
#export
|
|
||||||
|
|
||||||
OUTDIR=out
|
OUTDIR=out
|
||||||
|
|
||||||
all: $(OUTDIR)
|
all: $(OUTDIR)
|
||||||
@@ -23,7 +18,7 @@ release: clean all package
|
|||||||
|
|
||||||
#For use on my machine ONLY
|
#For use on my machine ONLY
|
||||||
package:
|
package:
|
||||||
rar a -r -ep Tortuga.rar out/*.exe out/*.dll
|
rar a -r -ep Tortuga.rar $(OUTDIR)/*.exe $(OUTDIR)/*.dll
|
||||||
rar a -r Tortuga.rar rsc/* copyright.txt
|
rar a -r Tortuga.rar rsc/* copyright.txt
|
||||||
|
|
||||||
$(OUTDIR):
|
$(OUTDIR):
|
||||||
|
|||||||
@@ -117,8 +117,8 @@ void ServerApplication::Init(int argc, char** argv) {
|
|||||||
DEBUG_OUTPUT_VAR(REGION_WIDTH);
|
DEBUG_OUTPUT_VAR(REGION_WIDTH);
|
||||||
DEBUG_OUTPUT_VAR(REGION_HEIGHT);
|
DEBUG_OUTPUT_VAR(REGION_HEIGHT);
|
||||||
DEBUG_OUTPUT_VAR(REGION_DEPTH);
|
DEBUG_OUTPUT_VAR(REGION_DEPTH);
|
||||||
|
DEBUG_OUTPUT_VAR(REGION_TILE_FOOTPRINT);
|
||||||
DEBUG_OUTPUT_VAR(REGION_SOLID_FOOTPRINT);
|
DEBUG_OUTPUT_VAR(REGION_SOLID_FOOTPRINT);
|
||||||
DEBUG_OUTPUT_VAR(REGION_FOOTPRINT);
|
|
||||||
DEBUG_OUTPUT_VAR(PACKET_BUFFER_SIZE);
|
DEBUG_OUTPUT_VAR(PACKET_BUFFER_SIZE);
|
||||||
DEBUG_OUTPUT_VAR(MAX_PACKET_SIZE);
|
DEBUG_OUTPUT_VAR(MAX_PACKET_SIZE);
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
TODO: encapsulate the data structures
|
TODO: encapsulate the data structures
|
||||||
TODO: A proper logging system
|
|
||||||
TODO: Ping-pong and keep alive system
|
TODO: Ping-pong and keep alive system
|
||||||
TODO: Move the statistics into their own SQL table, instead of duplicating the structure a dozen times
|
TODO: Move the statistics into their own SQL table, instead of duplicating the structure a dozen times
|
||||||
TODO: Get the rooms working, even if only via hotkeys
|
TODO: Get the rooms working, even if only via hotkeys
|
||||||
TODO: Rejection messages
|
TODO: Rejection messages
|
||||||
|
TODO: Move the map system into it's own namespace
|
||||||
|
TODO: The TileSheet class should implement the surface itself
|
||||||
|
|
||||||
TODO: Fix shoddy movement
|
TODO: Fix shoddy movement
|
||||||
TODO: make the whole thing more fault tolerant
|
TODO: make the whole thing more fault tolerant
|
||||||
@@ -12,3 +13,4 @@ TODO: server is slaved to the client
|
|||||||
|
|
||||||
TODO: Time delay for requesting region packets
|
TODO: Time delay for requesting region packets
|
||||||
TODO: command line parameters overriding config.cfg settings
|
TODO: command line parameters overriding config.cfg settings
|
||||||
|
TODO: A proper logging system
|
||||||
|
|||||||
Reference in New Issue
Block a user