Mercurial > malikania
changeset 145:c8510782d40d
Client: add prototype of lobby state, #712
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 30 Sep 2017 11:32:34 +0200 |
parents | 67eac3fc099f |
children | 91e57baa2ede |
files | libclient/CMakeLists.txt libclient/malikania/client/state/lobby_state.cpp libclient/malikania/client/state/lobby_state.hpp libclient/malikania/client/state/login_state.cpp libclient/malikania/client/state/login_state.hpp |
diffstat | 5 files changed, 136 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/libclient/CMakeLists.txt Thu Sep 28 13:01:45 2017 +0200 +++ b/libclient/CMakeLists.txt Sat Sep 30 11:32:34 2017 +0200 @@ -41,6 +41,7 @@ ${libmlk-client_SOURCE_DIR}/malikania/client/sprite.hpp ${libmlk-client_SOURCE_DIR}/malikania/client/state.hpp ${libmlk-client_SOURCE_DIR}/malikania/client/state/login_state.hpp + ${libmlk-client_SOURCE_DIR}/malikania/client/state/lobby_state.hpp ${libmlk-client_SOURCE_DIR}/malikania/client/state/splashscreen_state.hpp ${libmlk-client_SOURCE_DIR}/malikania/client/theme.hpp ${libmlk-client_SOURCE_DIR}/malikania/client/unique_layout.hpp @@ -65,6 +66,7 @@ ${libmlk-client_SOURCE_DIR}/malikania/client/label.cpp ${libmlk-client_SOURCE_DIR}/malikania/client/sprite.cpp ${libmlk-client_SOURCE_DIR}/malikania/client/state/login_state.cpp + ${libmlk-client_SOURCE_DIR}/malikania/client/state/lobby_state.cpp ${libmlk-client_SOURCE_DIR}/malikania/client/state/splashscreen_state.cpp ${libmlk-client_SOURCE_DIR}/malikania/client/theme.cpp ${libmlk-client_SOURCE_DIR}/malikania/client/unique_layout.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libclient/malikania/client/state/lobby_state.cpp Sat Sep 30 11:32:34 2017 +0200 @@ -0,0 +1,71 @@ +/* + * lobby_state.cpp -- character management state + * + * Copyright (c) 2013-2017 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "client.hpp" +#include "color.hpp" +#include "lobby_state.hpp" +#include "theme.hpp" +#include "window.hpp" + +namespace mlk { + +namespace client { + +lobby_state::lobby_state(client& client) + : client_(client) + , names_{"erekin", "luna"} +{ +} + +void lobby_state::handle_key_down(const key_event& ev) +{ + if (ev.key == key::down) + index_ = index_ == names_.size() - 1 ? 0 : index_ + 1; + else if (ev.key == key::up) + index_ = index_ == 0 ? names_.size() - 1 : index_ - 1; +} + +void lobby_state::update(client&) +{ +} + +void lobby_state::draw(client& clt) +{ + auto& win = clt.window(); + + win.set_drawing_color(0xffffffff); + win.clear(); + win.set_drawing_color(0xff000000); + win.draw_text("Select your player", win.theme().font(), {20, 10}); + + std::size_t i = 0U; + for (const auto& n : names_) { + int y = 30 + (10 * i); + + if (i++ == index_) + win.draw_text("ยป", win.theme().font(), {10, y}); + + win.draw_text(n, win.theme().font(), {20, y}); + } + + win.present(); +} + +} // !client + +} // !mlk
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libclient/malikania/client/state/lobby_state.hpp Sat Sep 30 11:32:34 2017 +0200 @@ -0,0 +1,57 @@ +/* + * lobby_state.hpp -- character management state + * + * Copyright (c) 2013-2017 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef MALIKANIA_CLIENT_LOBBY_STATE_HPP +#define MALIKANIA_CLIENT_LOBBY_STATE_HPP + +/** + * \file lobby_state.hpp + * \brief Character management state. + */ + +#include <string> +#include <vector> + +#include "state.hpp" + +namespace mlk { + +namespace client { + +/** + * \brief Character management state. + */ +class lobby_state : public state { +private: + client& client_; + std::vector<std::string> names_; + std::size_t index_{0}; + +public: + lobby_state(client& client); + + void handle_key_down(const key_event& ev); + void update(client&) override; + void draw(client& clt) override; +}; + +} // !client + +} // !mlk + +#endif // !MALIKANIA_CLIENT_LOBBY_STATE_HPP
--- a/libclient/malikania/client/state/login_state.cpp Thu Sep 28 13:01:45 2017 +0200 +++ b/libclient/malikania/client/state/login_state.cpp Sat Sep 30 11:32:34 2017 +0200 @@ -19,6 +19,7 @@ #include "color.hpp" #include "client.hpp" #include "login_state.hpp" +#include "lobby_state.hpp" #include "theme.hpp" #include "unicode.hpp" #include "window.hpp" @@ -28,8 +29,9 @@ namespace client { login_state::login_state(client& clt) + : client_(clt) { - clt.window().start_edit(); + client_.window().start_edit(); } void login_state::handle_text(const text_event& ev) @@ -60,7 +62,8 @@ password_.pop_back(); break; case key::enter: - // TODO: add lobby_state when done. + if (index_ == 1) + client_.set_state(std::make_unique<lobby_state>(client_)); break; default: break;
--- a/libclient/malikania/client/state/login_state.hpp Thu Sep 28 13:01:45 2017 +0200 +++ b/libclient/malikania/client/state/login_state.hpp Sat Sep 30 11:32:34 2017 +0200 @@ -35,6 +35,7 @@ */ class login_state : public state { private: + client& client_; std::size_t index_{0}; std::u32string login_; std::u32string password_;