Solved a few items on the TODO list

This commit is contained in:
Kayne Ruse
2014-05-28 22:16:36 +10:00
parent 6428b02d85
commit de7da81102
7 changed files with 74 additions and 80 deletions
+35 -21
View File
@@ -73,16 +73,8 @@ InWorld::InWorld(
//TODO: add the tilesheet to the map system? //TODO: add the tilesheet to the map system?
tileSheet.Load(config["dir.tilesets"] + "terrain.bmp", 12, 15); tileSheet.Load(config["dir.tilesets"] + "terrain.bmp", 12, 15);
//TODO: move this into it's own function
//request a sync //request a sync
SerialPacket packet; RequestSynchronize();
char buffer[PACKET_STRING_SIZE];
packet.meta.type = SerialPacket::Type::SYNCHRONIZE;
packet.clientInfo.clientIndex = clientIndex;
packet.clientInfo.accountIndex = accountIndex;
packet.clientInfo.characterIndex = characterIndex;
serialize(&packet, buffer);
network.Send(Channels::SERVER, buffer, PACKET_BUFFER_SIZE);
//debug //debug
// RequestRegion(0, 0); // RequestRegion(0, 0);
@@ -114,7 +106,6 @@ void InWorld::Update(double delta) {
for (auto& it : characterMap) { for (auto& it : characterMap) {
it.second.Update(delta); it.second.Update(delta);
} }
//TODO: sort the players and entities by Y position
//update the camera //update the camera
if(localCharacter) { if(localCharacter) {
@@ -145,6 +136,7 @@ void InWorld::Render(SDL_Surface* const screen) {
//draw characters //draw characters
for (auto& it : characterMap) { for (auto& it : characterMap) {
//TODO: drawing order according to Y position
it.second.DrawTo(screen, camera.x, camera.y); it.second.DrawTo(screen, camera.x, camera.y);
} }
@@ -316,20 +308,29 @@ void InWorld::HandleCharacterNew(SerialPacket packet) {
throw(std::runtime_error("Cannot create duplicate characters")); throw(std::runtime_error("Cannot create duplicate characters"));
} }
//TODO: set the player's handle //create the character object
//TODO: use a reference, don't use a lookup for every call CharacterData& character = characterMap[packet.characterInfo.characterIndex];
characterMap[packet.characterInfo.characterIndex].sprite.LoadSurface(config["dir.sprites"] + packet.characterInfo.avatar, 4, 4);
characterMap[packet.characterInfo.characterIndex].position = packet.characterInfo.position; //set the members
characterMap[packet.characterInfo.characterIndex].motion = packet.characterInfo.motion; character.handle = packet.characterInfo.handle;
characterMap[packet.characterInfo.characterIndex].CorrectSprite(); character.avatar = packet.characterInfo.avatar;
character.sprite.LoadSurface(config["dir.sprites"] + character.avatar, 4, 4);
character.mapIndex = packet.characterInfo.mapIndex;
character.position = packet.characterInfo.position;
character.motion = packet.characterInfo.motion;
character.stats = packet.characterInfo.stats;
character.CorrectSprite();
//catch this client's player object //catch this client's player object
if (packet.characterInfo.characterIndex == characterIndex && !localCharacter) { if (packet.characterInfo.characterIndex == characterIndex && !localCharacter) {
localCharacter = &characterMap[characterIndex]; localCharacter = &character;
//setup the camera //setup the camera
//TODO: can't change the screen size
camera.width = GetScreen()->w; camera.width = GetScreen()->w;
camera.height = GetScreen()->h; camera.height = GetScreen()->h;
//center on the player's character //center on the player's character
camera.marginX = (GetScreen()->w / 2 - localCharacter->sprite.GetImage()->GetClipW() / 2); camera.marginX = (GetScreen()->w / 2 - localCharacter->sprite.GetImage()->GetClipW() / 2);
camera.marginY = (GetScreen()->h / 2 - localCharacter->sprite.GetImage()->GetClipH() / 2); camera.marginY = (GetScreen()->h / 2 - localCharacter->sprite.GetImage()->GetClipH() / 2);
@@ -337,21 +338,34 @@ void InWorld::HandleCharacterNew(SerialPacket packet) {
} }
void InWorld::HandleCharacterDelete(SerialPacket packet) { void InWorld::HandleCharacterDelete(SerialPacket packet) {
//TODO: authenticate when own character is being deleted //TODO: authenticate when own character is being deleted (linked to a TODO in the server)
characterMap.erase(packet.characterInfo.characterIndex);
//catch this client's player object //catch this client's player object
if (packet.characterInfo.characterIndex == characterIndex) { if (packet.characterInfo.characterIndex == characterIndex) {
characterIndex = -1; characterIndex = -1;
localCharacter = nullptr; localCharacter = nullptr;
} }
characterMap.erase(packet.characterInfo.characterIndex);
} }
//------------------------- //-------------------------
//Server control //Server control
//------------------------- //-------------------------
void InWorld::RequestSynchronize() {
SerialPacket packet;
char buffer[PACKET_STRING_SIZE];
//request a sync
packet.meta.type = SerialPacket::Type::SYNCHRONIZE;
packet.clientInfo.clientIndex = clientIndex;
packet.clientInfo.accountIndex = accountIndex;
packet.clientInfo.characterIndex = characterIndex;
serialize(&packet, buffer);
network.Send(Channels::SERVER, buffer, PACKET_BUFFER_SIZE);
}
void InWorld::SendPlayerUpdate() { void InWorld::SendPlayerUpdate() {
SerialPacket packet; SerialPacket packet;
char buffer[PACKET_BUFFER_SIZE]; char buffer[PACKET_BUFFER_SIZE];
+2 -2
View File
@@ -90,6 +90,7 @@ protected:
void HandleRegionContent(SerialPacket); void HandleRegionContent(SerialPacket);
//Server control //Server control
void RequestSynchronize();
void SendPlayerUpdate(); void SendPlayerUpdate();
void RequestDisconnect(); void RequestDisconnect();
void RequestShutDown(); void RequestShutDown();
@@ -111,7 +112,6 @@ protected:
Image buttonImage; Image buttonImage;
RasterFont font; RasterFont font;
TileSheet tileSheet; TileSheet tileSheet;
//TODO: sprites
//map //map
RegionPager<BlankAllocator, DummyFormat> regionPager; RegionPager<BlankAllocator, DummyFormat> regionPager;
@@ -119,7 +119,7 @@ protected:
//UI //UI
Button disconnectButton; Button disconnectButton;
Button shutDownButton; Button shutDownButton;
//TODO: Fix the camera //TODO: Review the camera
struct { struct {
int x = 0, y = 0; int x = 0, y = 0;
int width = 0, height = 0; int width = 0, height = 0;
+2 -2
View File
@@ -100,8 +100,8 @@ void LobbyMenu::FrameEnd() {
} }
void LobbyMenu::Render(SDL_Surface* const screen) { void LobbyMenu::Render(SDL_Surface* const screen) {
//TODO: this needs rewriting
//TODO: I need a proper UI system for the entire client and the editor //TODO: I need a proper UI system for the entire client and the editor
//UI //UI
search.DrawTo(screen); search.DrawTo(screen);
join.DrawTo(screen); join.DrawTo(screen);
@@ -127,7 +127,7 @@ void LobbyMenu::Render(SDL_Surface* const screen) {
font.DrawStringTo("?", screen, listBox.x - font.GetCharW(), listBox.y + i*listBox.h); font.DrawStringTo("?", screen, listBox.x - font.GetCharW(), listBox.y + i*listBox.h);
} }
//ping? //TODO: ping/delay?
} }
} }
+25 -47
View File
@@ -1,57 +1,18 @@
--TODO: Rename the SQL's tables, for consistency CREATE TABLE IF NOT EXISTS Accounts (
-------------------------
--Server
-------------------------
CREATE TABLE IF NOT EXISTS UserAccounts (
uid INTEGER PRIMARY KEY AUTOINCREMENT, uid INTEGER PRIMARY KEY AUTOINCREMENT,
username varchar(100) UNIQUE, username varchar(100) UNIQUE,
--TODO: server-client security --TODO: server-client security
-- password varchar(100), -- password varchar(100),
blacklisted BIT DEFAULT 0, blacklisted BIT DEFAULT 0,
whitelisted BIT DEFAULT 1 whitelisted BIT DEFAULT 1,
-- TODO: moderator administrator BIT DEFAULT 0
); );
------------------------- CREATE TABLE IF NOT EXISTS Characters (
--Items
-------------------------
CREATE TABLE IF NOT EXISTS MundaneItems (
--metadata
uid INTEGER PRIMARY KEY AUTOINCREMENT,
itemID INTEGER,
stackSize INTEGER DEFAULT 0,
owner INTEGER REFERENCES PlayerCharacters(uid)
);
CREATE TABLE IF NOT EXISTS Consumables (
--metadata
uid INTEGER PRIMARY KEY AUTOINCREMENT,
itemID INTEGER,
stackSize INTEGER DEFAULT 0,
owner INTEGER REFERENCES PlayerCharacters(uid)
--holds all consumable items info (food, potions, etc.)
);
CREATE TABLE IF NOT EXISTS Equipment (
--metadata
uid INTEGER PRIMARY KEY AUTOINCREMENT,
itemID INTEGER,
owner INTEGER REFERENCES PlayerCharacters(uid)
--hold all equipment info
--stat mods, special effects, etc.
);
-------------------------
--Players
-------------------------
CREATE TABLE IF NOT EXISTS PlayerCharacters (
uid INTEGER PRIMARY KEY AUTOINCREMENT, uid INTEGER PRIMARY KEY AUTOINCREMENT,
--metadata --metadata
owner INTEGER REFERENCES UserAccounts(uid), owner INTEGER REFERENCES Accounts(uid),
handle varchar(100) UNIQUE, handle varchar(100) UNIQUE,
avatar varchar(100), avatar varchar(100),
birth timestamp NOT NULL DEFAULT (datetime()), birth timestamp NOT NULL DEFAULT (datetime()),
@@ -78,8 +39,25 @@ CREATE TABLE IF NOT EXISTS PlayerCharacters (
luck REAL DEFAULT 0.0, luck REAL DEFAULT 0.0,
--equipment --equipment
weapon INTEGER REFERENCES Equipment(uid), weapon INTEGER REFERENCES WornEquipment(uid),
helmet INTEGER REFERENCES Equipment(uid), helmet INTEGER REFERENCES WornEquipment(uid),
armour INTEGER REFERENCES Equipment(uid) armour INTEGER REFERENCES WornEquipment(uid)
--etc. --etc.
); );
CREATE TABLE IF NOT EXISTS InventoryItems (
--metadata
uid INTEGER PRIMARY KEY AUTOINCREMENT,
itemID INTEGER, --type
stackSize INTEGER DEFAULT 0,
owner INTEGER REFERENCES Characters(uid)
);
CREATE TABLE IF NOT EXISTS WornEquipment (
--metadata
uid INTEGER PRIMARY KEY AUTOINCREMENT,
itemID INTEGER, --type
owner INTEGER REFERENCES Characters(uid)
--hold all equipment info
--stat mods, special effects, etc.
);
+4 -4
View File
@@ -29,10 +29,10 @@
//Define the queries //Define the queries
//------------------------- //-------------------------
static const char* CREATE_USER_ACCOUNT = "INSERT INTO UserAccounts (username) VALUES (?);"; static const char* CREATE_USER_ACCOUNT = "INSERT INTO Accounts (username) VALUES (?);";
static const char* LOAD_USER_ACCOUNT = "SELECT * FROM UserAccounts WHERE username = ?;"; static const char* LOAD_USER_ACCOUNT = "SELECT * FROM Accounts WHERE username = ?;";
static const char* SAVE_USER_ACCOUNT = "UPDATE OR FAIL UserAccounts SET blacklisted = ?2, whitelisted = ?3 WHERE uid = ?1;"; static const char* SAVE_USER_ACCOUNT = "UPDATE OR FAIL Accounts SET blacklisted = ?2, whitelisted = ?3 WHERE uid = ?1;";
static const char* DELETE_USER_ACCOUNT = "DELETE FROM UserAccounts WHERE uid = ?;"; static const char* DELETE_USER_ACCOUNT = "DELETE FROM Accounts WHERE uid = ?;";
//------------------------- //-------------------------
//Define the methods //Define the methods
+4 -4
View File
@@ -30,10 +30,10 @@
//------------------------- //-------------------------
//TODO: save and load the statistics //TODO: save and load the statistics
static const char* CREATE_CHARACTER = "INSERT INTO PlayerCharacters (owner, handle, avatar) VALUES (?, ?, ?);"; static const char* CREATE_CHARACTER = "INSERT INTO Characters (owner, handle, avatar) VALUES (?, ?, ?);";
static const char* LOAD_CHARACTER = "SELECT * FROM PlayerCharacters WHERE handle = ?;"; static const char* LOAD_CHARACTER = "SELECT * FROM Characters WHERE handle = ?;";
static const char* SAVE_CHARACTER = "UPDATE OR FAIL PlayerCharacters SET mapIndex = ?2, positionX = ?3, positionY = ?4 WHERE uid = ?1;"; static const char* SAVE_CHARACTER = "UPDATE OR FAIL Characters SET mapIndex = ?2, positionX = ?3, positionY = ?4 WHERE uid = ?1;";
static const char* DELETE_CHARACTER = "DELETE FROM PlayerCharacters WHERE uid = ?;"; static const char* DELETE_CHARACTER = "DELETE FROM Characters WHERE uid = ?;";
//------------------------- //-------------------------
//Define the methods //Define the methods
+2
View File
@@ -106,6 +106,8 @@ void ServerApplication::HandleSynchronize(SerialPacket packet) {
newPacket.characterInfo.mapIndex = it.second.mapIndex; newPacket.characterInfo.mapIndex = it.second.mapIndex;
newPacket.characterInfo.position = it.second.position; newPacket.characterInfo.position = it.second.position;
newPacket.characterInfo.motion = it.second.motion; newPacket.characterInfo.motion = it.second.motion;
newPacket.characterInfo.stats = it.second.stats;
serialize(&newPacket, buffer); serialize(&newPacket, buffer);
network.Send(&clientMap[packet.clientInfo.clientIndex].address, buffer, PACKET_BUFFER_SIZE); network.Send(&clientMap[packet.clientInfo.clientIndex].address, buffer, PACKET_BUFFER_SIZE);
} }