This hack for the collision map was a terrible idea
I'm committing these changes before undoing these, and coding it properly.
This commit is contained in:
@@ -30,11 +30,11 @@ Region::Region(int argX, int argY): x(argX), y(argY) {
|
||||
if (x != snapToBase(REGION_WIDTH, x) || y != snapToBase(REGION_HEIGHT, y)) {
|
||||
throw(std::invalid_argument("Region location is off grid"));
|
||||
}
|
||||
memset(tiles, 0, REGION_WIDTH*REGION_HEIGHT*REGION_DEPTH*sizeof(type_t));
|
||||
memset(tiles, 0, REGION_WIDTH*REGION_HEIGHT*(REGION_DEPTH+1)*sizeof(type_t));
|
||||
}
|
||||
|
||||
Region::Region(Region const& rhs): x(rhs.x), y(rhs.y) {
|
||||
memcpy(tiles, rhs.tiles, REGION_WIDTH*REGION_HEIGHT*REGION_DEPTH*sizeof(type_t));
|
||||
memcpy(tiles, rhs.tiles, REGION_WIDTH*REGION_HEIGHT*(REGION_DEPTH+1)*sizeof(type_t));
|
||||
}
|
||||
|
||||
Region::type_t Region::SetTile(int x, int y, int z, type_t v) {
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
#ifndef REGION_HPP_
|
||||
#define REGION_HPP_
|
||||
|
||||
constexpr int REGION_WIDTH = 20;
|
||||
constexpr int REGION_HEIGHT = 20;
|
||||
constexpr int REGION_WIDTH = 21;
|
||||
constexpr int REGION_HEIGHT = 21;
|
||||
constexpr int REGION_DEPTH = 3;
|
||||
|
||||
class Region {
|
||||
@@ -45,7 +45,7 @@ private:
|
||||
const int x;
|
||||
const int y;
|
||||
|
||||
type_t tiles[REGION_WIDTH][REGION_HEIGHT][REGION_DEPTH];
|
||||
type_t tiles[REGION_WIDTH][REGION_HEIGHT][REGION_DEPTH+1];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -85,6 +85,7 @@ static int onUnload(lua_State* L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
//TODO: wrappers for the collision map
|
||||
static const luaL_Reg regionLib[] = {
|
||||
{"SetTile",setTile},
|
||||
{"GetTile",getTile},
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
#include "SDL/SDL_net.h"
|
||||
|
||||
constexpr int NETWORK_VERSION = 20140607;
|
||||
constexpr int NETWORK_VERSION = 20140701;
|
||||
constexpr int PACKET_STRING_SIZE = 100;
|
||||
|
||||
struct SerialPacketBase {
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
#include "region.hpp"
|
||||
#include "statistics.hpp"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
//Primary interface functions
|
||||
void serializePacket(SerialPacketBase*, void* dest);
|
||||
void deserializePacket(SerialPacketBase*, void* src);
|
||||
@@ -53,13 +55,22 @@ void deserializeRegionContent(RegionPacket*, void*);
|
||||
void deserializeServer(ServerPacket*, void*);
|
||||
void deserializeStatistics(Statistics*, void*);
|
||||
|
||||
/* DOCS: Keep the PACKET_BUFFER_SIZE up to date
|
||||
/* DOCS: Keep these macros, including PACKET_BUFFER_SIZE up to date
|
||||
* DOCS: REGION_CONTENT is currently the largest type of packet, read more
|
||||
* map content: REGION_WIDTH * REGION_HEIGHT * REGION_DEPTH * sizoeof(region::type_t)
|
||||
* map format: sizeof(int) * 3
|
||||
* metadata: sizeof(SerialPacket::Type)
|
||||
* REGION_FORMAT
|
||||
* This is the space for the region's metadata; the X and Y position, the map index and the SerialPacketType
|
||||
* REGION_FOOTPRINT
|
||||
* This is the theoretical size of the map's tile data in memory, but it doesn't take the collision map into account
|
||||
* COLLISION_FOOTPRINT
|
||||
* This is the space in the packet for the collision map, stored as a bit array
|
||||
* PACKET_BUFFER_SIZE
|
||||
* This is the tital size of the packet being sent between the server and the clients
|
||||
*/
|
||||
|
||||
constexpr int PACKET_BUFFER_SIZE = REGION_WIDTH * REGION_HEIGHT * REGION_DEPTH * sizeof(Region::type_t) + sizeof(int) * 3 + sizeof(SerialPacketType);
|
||||
constexpr int REGION_FORMAT = sizeof(int) * 3 + sizeof(SerialPacketType);
|
||||
constexpr int REGION_FOOTPRINT = REGION_WIDTH * REGION_HEIGHT * REGION_DEPTH * sizeof(Region::type_t);
|
||||
constexpr int COLLISION_FOOTPRINT = ceil(REGION_WIDTH * REGION_HEIGHT / 8.0);
|
||||
|
||||
constexpr int PACKET_BUFFER_SIZE = REGION_FORMAT + REGION_FOOTPRINT + COLLISION_FOOTPRINT;
|
||||
|
||||
#endif
|
||||
@@ -49,6 +49,8 @@ void serializeRegionContent(RegionPacket* packet, void* buffer) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: serialize collision map
|
||||
}
|
||||
|
||||
void deserializeRegionFormat(RegionPacket* packet, void* buffer) {
|
||||
@@ -80,4 +82,6 @@ void deserializeRegionContent(RegionPacket* packet, void* buffer) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: deserialize collision map
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
print("Lua script check (./rsc)")
|
||||
print("Lua script check")
|
||||
|
||||
--uber lazy declarations
|
||||
function square(x) return x*x end
|
||||
@@ -33,10 +33,10 @@ end
|
||||
newRoom = RoomMgr.CreateRoom("overworld")
|
||||
pager = Room.GetPager(newRoom)
|
||||
regionTable = {
|
||||
RegionPager.GetRegion(pager, 0, 0),
|
||||
RegionPager.GetRegion(pager, 0, -20),
|
||||
RegionPager.GetRegion(pager, -20, 0),
|
||||
RegionPager.GetRegion(pager, -20, -20)
|
||||
RegionPager.GetRegion(pager, Region.GetWidth() * 0, Region.GetHeight() * 0),
|
||||
RegionPager.GetRegion(pager, Region.GetWidth() *-1, Region.GetHeight() * 0),
|
||||
RegionPager.GetRegion(pager, Region.GetWidth() * 0, Region.GetHeight() *-1),
|
||||
RegionPager.GetRegion(pager, Region.GetWidth() *-1, Region.GetHeight() *-1)
|
||||
}
|
||||
|
||||
print("Finished the lua script")
|
||||
@@ -113,12 +113,20 @@ void ServerApplication::Init(int argc, char** argv) {
|
||||
//debug output
|
||||
//-------------------------
|
||||
|
||||
//TODO: put these outputs into the client too
|
||||
#define OUTPUT_VAR(x) std::cout << "\t" << #x << ": " << x << std::endl;
|
||||
|
||||
std::cout << "Internal sizes:" << std::endl;
|
||||
std::cout << "\tTile Size: " << sizeof(Region::type_t) << std::endl;
|
||||
std::cout << "\tRegion Format: " << REGION_WIDTH << ", " << REGION_HEIGHT << ", " << REGION_DEPTH << std::endl;
|
||||
std::cout << "\tRegion Content Footprint: " << REGION_WIDTH * REGION_HEIGHT * REGION_DEPTH * sizeof(Region::type_t) << std::endl;
|
||||
std::cout << "\tPACKET_BUFFER_SIZE: " << PACKET_BUFFER_SIZE << std::endl;
|
||||
std::cout << "\tMAX_PACKET_SIZE: " << MAX_PACKET_SIZE << std::endl;
|
||||
|
||||
OUTPUT_VAR(sizeof(Region::type_t));
|
||||
OUTPUT_VAR(sizeof(Region));
|
||||
OUTPUT_VAR(REGION_FORMAT);
|
||||
OUTPUT_VAR(REGION_FOOTPRINT);
|
||||
OUTPUT_VAR(COLLISION_FOOTPRINT);
|
||||
OUTPUT_VAR(PACKET_BUFFER_SIZE);
|
||||
OUTPUT_VAR(MAX_PACKET_SIZE);
|
||||
|
||||
#undef OUTPUT_VAR
|
||||
|
||||
//-------------------------
|
||||
//finalize the startup
|
||||
|
||||
Reference in New Issue
Block a user