diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/connection.cpp | 152 | ||||
-rw-r--r-- | src/gui/connection.h (renamed from src/sprite.h) | 65 | ||||
-rw-r--r-- | src/properties.h | 84 | ||||
-rw-r--r-- | src/resources/iteminfo.cpp | 115 |
4 files changed, 307 insertions, 109 deletions
diff --git a/src/gui/connection.cpp b/src/gui/connection.cpp new file mode 100644 index 00000000..0e885598 --- /dev/null +++ b/src/gui/connection.cpp @@ -0,0 +1,152 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ + +#include "connection.h" + +#include <guichan/widgets/label.hpp> + +#include "button.h" +#include "progressbar.h" + +#include "../game.h" +#include "../graphics.h" +#include "../log.h" +#include "../main.h" + +#include "../net/messagein.h" +#include "../net/messageout.h" +#include "../net/network.h" +#include "../net/protocol.h" + +ConnectionDialog::ConnectionDialog(): + Window("Info"), mProgress(0), mStatus(NET_CONNECTING) +{ + setContentSize(200, 100); + mCancelButton = new Button("Cancel"); + mCancelButton->setPosition(5, 100 - 5 - mCancelButton->getHeight()); + mCancelButton->setEventId("cancel"); + mCancelButton->addActionListener(this); + mProgressBar = new ProgressBar(0.0, 5, mCancelButton->getY() - 25, + 200 - 10, 20, 128, 128, 128); + mLabel = new gcn::Label("Connecting..."); + mLabel->setPosition(5, mProgressBar->getY() - 25); + + add(mLabel); + add(mCancelButton); + add(mProgressBar); + setLocationRelativeTo(getParent()); + + const char *host = iptostring(map_address); + openConnection(host, map_port); +} + +ConnectionDialog::~ConnectionDialog() +{ +} + +void ConnectionDialog::logic() +{ + mProgress += 0.005f; + if (mProgress > 1.0f) + { + mProgress = 0.0f; + } + mProgressBar->setProgress(mProgress); + Window::logic(); + + switch (mStatus) + { + case NET_CONNECTING: + mStatus = pollConnection(); + break; + case NET_ERROR: + logger->log("Connection::Unable to connect"); + errorMessage = "Unable to connect to map server"; + state = ERROR_STATE; + closeConnection(); + break; + case NET_CONNECTED: + mapLogin(); + state = GAME_STATE; + break; + } +} + +void ConnectionDialog::action(const std::string& eventId) +{ + if (eventId == "cancel") + { + state = EXIT_STATE; + } +} + +void ConnectionDialog::mapLogin() +{ + // Send login infos + MessageOut outMsg; + outMsg.writeShort(0x0072); + outMsg.writeLong(account_ID); + outMsg.writeLong(char_ID); + outMsg.writeLong(session_ID1); + outMsg.writeLong(session_ID2); + outMsg.writeByte(sex); + + // Skip a mysterious 4 bytes + while ((in_size < 4)|| (out_size > 0)) flush(); + skip(4); + + MessageIn msg = get_next_message(); + + if (msg.getId() == SMSG_LOGIN_SUCCESS) + { + unsigned char direction; + msg.readLong(); // server tick + msg.readCoordinates(startX, startY, direction); + msg.skip(2); // unknown + logger->log("Protocol: Player start position: (%d, %d), Direction: %d", + startX, startY, direction); + } + else if (msg.getId() == 0x0081) + { + logger->log("Warning: Map server D/C"); + } + else + { + logger->error("Unknown packet: map_start"); + } + + skip(msg.getLength()); + + // Send "map loaded" + // TODO: be able to reuse the same msg + MessageOut newMsg; + newMsg.writeShort(0x007d); +} + +void connectionInputHandler(SDL_KeyboardEvent *keyEvent) +{ + if (keyEvent->keysym.sym == SDLK_ESCAPE) + { + state = EXIT_STATE; + } +} diff --git a/src/sprite.h b/src/gui/connection.h index 2950f4e8..f26c1344 100644 --- a/src/sprite.h +++ b/src/gui/connection.h @@ -21,45 +21,60 @@ * $Id$ */ -#ifndef _TMW_SPRITE_H_ -#define _TMW_SPRITE_H_ +#ifndef _TMW_CONNECTION_H +#define _TMW_CONNECTION_H -class Graphics; +#include <iosfwd> +#include <guichan/actionlistener.hpp> +#include <SDL_events.h> + +#include "window.h" + +#include "../guichanfwd.h" + +class Button; +class Label; +class ProgressBar; /** - * A sprite is some visible object on a map. This abstract class defines the - * interface used by the map to sort and display the sprite. + * The connection dialog. + * + * \ingroup Interface */ -class Sprite -{ +class ConnectionDialog : public Window, public gcn::ActionListener { public: /** - * Destructor. - */ - virtual - ~Sprite() {} - - /** - * Draws the sprite to the given graphics context. + * Constructor * - * Note: this function could be simplified if the graphics context - * would support setting a translation offset. It already does this - * partly with the clipping rectangle support. + * @see Window::Window */ - virtual void - draw(Graphics *graphics, int offsetX, int offsetY) = 0; + ConnectionDialog(); /** - * Returns the pixel Y coordinate of the sprite. + * Destructor */ - virtual int - getPixelY() const = 0; + ~ConnectionDialog(); - protected: /** - * Constructor. + * Called when receiving actions from the widgets. */ - Sprite() {} + void action(const std::string& eventId); + + void logic(); + + private: + gcn::Label *mLabel; + Button *mCancelButton; + ProgressBar *mProgressBar; + float mProgress; + int mStatus; + + void mapLogin(); }; +/** + * Handle input + */ +void connectionInputHandler(SDL_KeyboardEvent *keyEvent); + #endif diff --git a/src/properties.h b/src/properties.h deleted file mode 100644 index ccf8cd00..00000000 --- a/src/properties.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * The Mana World - * Copyright 2004 The Mana World Development Team - * - * This file is part of The Mana World. - * - * The Mana World is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * any later version. - * - * The Mana World is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with The Mana World; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id$ - */ - -#ifndef _TMW_PROPERTIES_H_ -#define _TMW_PROPERTIES_H_ - -#include <map> -#include <string> - -/** - * A class holding a set of properties. - */ -class Properties -{ - public: - virtual - ~Properties() {} - - /** - * Get a map property. - * - * @return the value of the given property or an empty string when it - * doesn't exist. - */ - const std::string& - getProperty(const std::string &name) - { - const static std::string undefined = ""; - std::map<std::string, std::string>::const_iterator i = - properties.find(name); - - if (i != properties.end()) - { - return (*i).second; - } - else - { - return undefined; - } - } - - /** - * Returns whether a certain property is available. - */ - bool - hasProperty(const std::string &name) - { - return (properties.find(name) != properties.end()); - } - - /** - * Set a map property. - */ - void - setProperty(const std::string &name, const std::string &value) - { - properties[name] = value; - } - - private: - std::map<std::string, std::string> properties; -}; - -#endif diff --git a/src/resources/iteminfo.cpp b/src/resources/iteminfo.cpp new file mode 100644 index 00000000..69090dcb --- /dev/null +++ b/src/resources/iteminfo.cpp @@ -0,0 +1,115 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ + +#include "iteminfo.h" + +ItemInfo::ItemInfo() : + image(0), name(""), + description(""), type(0), + weight(0), slot(0) +{ +} + +ItemInfo::~ItemInfo() +{ +} + +void ItemInfo::setImage(short image) +{ + this->image = image; +} + +short ItemInfo::getImage() +{ + return image; +} + +void ItemInfo::setArt(short art) +{ + this->art = art; +} + +short ItemInfo::getArt() +{ + return art; +} + +void ItemInfo::setName(const std::string &name) +{ + this->name = name; +} + +std::string ItemInfo::getName() +{ + return name; +} + +void ItemInfo::setDescription(const std::string &description) +{ + this->description = description; +} + +std::string ItemInfo::getDescription() +{ + return description; +} + +void ItemInfo::setEffect(const std::string &effect) +{ + this->effect = effect; +} + +std::string ItemInfo::getEffect() +{ + return effect; +} + +void ItemInfo::setType(short type) +{ + this->type = type; +} + +short ItemInfo::getType() +{ + return type; +} + +void ItemInfo::setWeight(short weight) +{ + this->weight = weight; +} + +short ItemInfo::getWeight() +{ + return weight; +} + +void ItemInfo::setSlot(char slot) +{ + this->slot = slot; +} + +char ItemInfo::getSlot() +{ + return slot; +} |