OSDN Git Service

チャンネル機能でのモデル表示切り替えを改良
authorh2so5 <h2so5@git.sourceforge.jp>
Sat, 29 Sep 2012 21:49:40 +0000 (06:49 +0900)
committerh2so5 <h2so5@git.sourceforge.jp>
Sat, 29 Sep 2012 21:49:40 +0000 (06:49 +0900)
言語切り替え機能を部分的に実装

12 files changed:
client/Core.cpp
client/Language.cpp [new file with mode: 0644]
client/Language.hpp [new file with mode: 0644]
client/PlayerManager.cpp
client/bin/system/languages/English.json [new file with mode: 0644]
client/bin/system/languages/日本語.json [new file with mode: 0644]
client/scene/Connect.cpp
client/scene/Option.cpp
client/scene/Option.hpp
client/stdafx.h
server/main.cpp
server/version.hpp

index 09b8684..f4e74bc 100644 (file)
@@ -31,6 +31,8 @@ int Core::Run()
 {
        Logger::Info(_T("%s"), unicode::ToTString(MMO_VERSION_TEXT));
 
+       Language::Initialize("\93ú\96{\8cê");
+
     if (SetUpDxLib() == -1) {
         return -1;
     }
diff --git a/client/Language.cpp b/client/Language.cpp
new file mode 100644 (file)
index 0000000..e21b700
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Language.cpp
+//
+
+#include "Language.hpp"
+#include <unordered_map>
+#include <boost/property_tree/json_parser.hpp>
+
+using namespace boost::property_tree;
+
+namespace Language {
+
+       namespace {
+               ptree text_tree;
+               std::unordered_map<std::string, tstring> text_map;
+       };
+
+       void Initialize(const std::string& lang_name)
+       {
+               read_json("./system/languages/" + lang_name + ".json", text_tree);
+               text_map.clear();
+       }
+
+       const tstring& Get(const std::string& name)
+       {
+               auto it = text_map.find(name);
+               if (it != text_map.end()) {
+                       return it->second;
+               } else {
+                       tstring text = unicode::ToTString(text_tree.get<std::string>(name, "[" + name + "]"));
+                       text_map[name] = text;
+                       return text_map[name];
+               }
+       }
+
+};
\ No newline at end of file
diff --git a/client/Language.hpp b/client/Language.hpp
new file mode 100644 (file)
index 0000000..a68ea19
--- /dev/null
@@ -0,0 +1,12 @@
+//
+// Language.hpp
+//
+
+#pragma once
+
+#define _LT(name) (Language::Get(name).c_str())
+
+namespace Language {
+       void Initialize(const std::string& lang_name);
+       const tstring& Get(const std::string& name);
+};
\ No newline at end of file
index 7dbd36a..100a934 100644 (file)
Binary files a/client/PlayerManager.cpp and b/client/PlayerManager.cpp differ
diff --git a/client/bin/system/languages/English.json b/client/bin/system/languages/English.json
new file mode 100644 (file)
index 0000000..bbcb76d
--- /dev/null
@@ -0,0 +1,42 @@
+{
+       "connect":
+               {
+                       "connecting":           "Connecting..",
+                       "cancel":                       "Cancel"
+               },
+       "option":
+               {
+                       "status":
+                               {
+                                       "name":                                 "Status",
+                                       "nickname":                             "Nickname",
+                                       "modelname":                    "Model",
+                                       "user_id":                              "UserID",
+                                       "stage":                                "Stage",
+                                       "position":                             "Position",
+                                       "receive_average":              "Received average",
+                                       "send_average":                 "Sent average"
+                               },
+                       
+                       "display":
+                               {
+                                       "name":                                 "Display",
+                                       "show_nametag":                 "Nametags and balloons",
+                                       "show_nametag_json":    "{\"ON\":1,\"OFF\":0}",
+                                       "show_modelname":               "Model names",
+                                       "show_modelname_json":  "{\"ON\":1,\"OFF\":0}"
+                               },
+                       
+                       "input":
+                               {
+                                       "name":                                 "Input",
+                                       "gamepad_type":                 "Gamepad type",
+                                       "gamepad_type_json":    "{\"Type1\":0,\"Type2\":1,\"Type3\":2}"
+                               },
+                               
+                       "others":
+                               {
+                                       "name":                                 "Others"
+                               }
+               }
+}
\ No newline at end of file
diff --git a/client/bin/system/languages/日本語.json b/client/bin/system/languages/日本語.json
new file mode 100644 (file)
index 0000000..117da67
--- /dev/null
@@ -0,0 +1,42 @@
+{\r
+       "connect":\r
+               {\r
+                       "connecting":           "接続中..",\r
+                       "cancel":                       "キャンセル"\r
+               },\r
+       "option":\r
+               {\r
+                       "status":\r
+                               {\r
+                                       "name":                                 "ステータス",\r
+                                       "nickname":                             "ニックネーム",\r
+                                       "modelname":                    "モデル名",\r
+                                       "user_id":                              "ユーザーID",\r
+                                       "stage":                                "ステージ",\r
+                                       "position":                             "座標",\r
+                                       "receive_average":              "平均受信量",\r
+                                       "send_average":                 "平均送信量"\r
+                               },\r
+                       \r
+                       "display":\r
+                               {\r
+                                       "name":                                 "表示設定",\r
+                                       "show_nametag":                 "ネームタグと吹き出し",\r
+                                       "show_nametag_json":    "{\"表示する\":1,\"表示しない\":0}",\r
+                                       "show_modelname":               "相手のモデル名",\r
+                                       "show_modelname_json":  "{\"表示する\":1,\"表示しない\":0}"\r
+                               },\r
+                       \r
+                       "input":\r
+                               {\r
+                                       "name":                                 "入力設定",\r
+                                       "gamepad_type":                 "ゲームパッドタイプ",\r
+                                       "gamepad_type_json":    "{\"タイプ1\":0,\"タイプ2\":1,\"タイプ3\":2}"\r
+                               },\r
+                               \r
+                       "others":\r
+                               {\r
+                                       "name":                                 "その他"\r
+                               }\r
+               }\r
+}
\ No newline at end of file
index 355bf1d..5d7009f 100644 (file)
@@ -33,14 +33,14 @@ void Connect::Begin()
     GetScreenState(&width, &height, nullptr);
 
     message_.set_width(450);
-    message_.set_text(_T("\90Ú\91±\92\86..."));
+    message_.set_text(_LT("connect.connecting"));
     message_.set_bgcolor(UIBase::Color(0,0,0,0));
     message_.set_textcolor(UIBase::Color(0,0,0,255));
     message_.set_left(40);
     message_.set_top(40);
 
     button_label_.set_width(100);
-    button_label_.set_text(_T("\83L\83\83\83\93\83Z\83\8b"));
+    button_label_.set_text(_LT("connect.cancel"));
     button_label_.set_bgcolor(UIBase::Color(0,0,0,0));
     button_label_.set_textcolor(UIBase::Color(0,0,0,255));
     button_label_.set_left(width - button_.width() - 40 + 15);
index 0899246..e5f260b 100644 (file)
@@ -264,50 +264,50 @@ void OptionTabBase::Draw()
 // \83X\83e\81[\83^\83X\83^\83u
 
 StatusTab::StatusTab(const ManagerAccessorPtr& manager_accessor) :
-       OptionTabBase(_T("\83X\83e\81[\83^\83X"), manager_accessor)
+       OptionTabBase(_LT("option.status.name"), manager_accessor)
 {
        auto account_manager = manager_accessor_->account_manager().lock();
        auto command_manager = manager_accessor_->command_manager().lock();
        auto player_manager = manager_accessor_->player_manager().lock();
 
-       items_.push_back(std::make_shared<TextItem>(_T("\83j\83b\83N\83l\81[\83\80"),
+       items_.push_back(std::make_shared<TextItem>(_LT("option.status.nickname"),
                std::make_shared<std::function<tstring(void)>>(
                [account_manager](){
                        return unicode::ToTString(account_manager->name());
                }), manager_accessor_));
 
-       items_.push_back(std::make_shared<TextItem>(_T("\83\82\83f\83\8b\96¼"),
+       items_.push_back(std::make_shared<TextItem>(_LT("option.status.modelname"),
                std::make_shared<std::function<tstring(void)>>(
                [account_manager](){
                        return unicode::ToTString(account_manager->model_name());
                }), manager_accessor_));
 
-       items_.push_back(std::make_shared<TextItem>(_T("\83\86\81[\83U\81[ID"),
+       items_.push_back(std::make_shared<TextItem>(_LT("option.status.user_id"),
                std::make_shared<std::function<tstring(void)>>(
                [command_manager](){
                        return (tformat(_T("%d")) % command_manager->user_id()).str();
                }), manager_accessor_));
 
-       items_.push_back(std::make_shared<TextItem>(_T("\83X\83e\81[\83W"),
+       items_.push_back(std::make_shared<TextItem>(_LT("option.status.stage"),
                std::make_shared<std::function<tstring(void)>>(
                [command_manager](){
                        return unicode::ToTString(command_manager->stage());
                }), manager_accessor_));
 
-       items_.push_back(std::make_shared<TextItem>(_T("\8dÀ\95W"),
+       items_.push_back(std::make_shared<TextItem>(_LT("option.status.position"),
                std::make_shared<std::function<tstring(void)>>(
                [player_manager]() -> tstring {
                        const auto& pos = player_manager->GetMyself()->position();
                        return (tformat(_T("X: %d     Y: %d     Z: %d")) % pos.x % pos.y % pos.z).str();
                }), manager_accessor_));
 
-       items_.push_back(std::make_shared<TextItem>(_T("\95½\8bÏ\8eó\90M\97Ê"),
+       items_.push_back(std::make_shared<TextItem>(_LT("option.status.receive_average"),
                std::make_shared<std::function<tstring(void)>>(
                [command_manager]() -> tstring {
                        return (tformat(_T("%.1lf byte/s")) % command_manager->GetReadByteAverage()).str();
                }), manager_accessor_));
 
-       items_.push_back(std::make_shared<TextItem>(_T("\95½\8bÏ\91\97\90M\97Ê"),
+       items_.push_back(std::make_shared<TextItem>(_LT("option.status.send_average"),
                std::make_shared<std::function<tstring(void)>>(
                [command_manager]() -> tstring {
                        return (tformat(_T("%.1lf byte/s")) % command_manager->GetWriteByteAverage()).str();
@@ -318,11 +318,11 @@ StatusTab::StatusTab(const ManagerAccessorPtr& manager_accessor) :
 // \95\\8e¦\90Ý\92è\83^\83u
 
 DisplayTab::DisplayTab(const ManagerAccessorPtr& manager_accessor) :
-       OptionTabBase(_T("\95\\8e¦\90Ý\92è"), manager_accessor)
+       OptionTabBase(_LT("option.display.name"), manager_accessor)
 {
        items_.push_back(std::make_shared<RadioButtonItem>(
-               _T("\83l\81[\83\80\83^\83O\82Æ\90\81\82«\8fo\82µ"),
-               _T("{\"\95\\8e¦\82·\82é\":1,\"\95\\8e¦\82µ\82È\82¢\":0}"),
+               _LT("option.display.show_nametag"),
+               _LT("option.display.show_nametag_json"),
                std::make_shared<RadioButtonItemGetter>(
                [manager_accessor]() -> int{
                        auto config_manager = 
@@ -340,8 +340,8 @@ DisplayTab::DisplayTab(const ManagerAccessorPtr& manager_accessor) :
 
 
        items_.push_back(std::make_shared<RadioButtonItem>(
-               _T("\91\8a\8eè\82Ì\83\82\83f\83\8b\96¼"),
-               _T("{\"\95\\8e¦\82·\82é\":1,\"\95\\8e¦\82µ\82È\82¢\":0}"),
+               _LT("option.display.show_modelname"),
+               _LT("option.display.show_modelname_json"),
                std::make_shared<RadioButtonItemGetter>(
                [manager_accessor]() -> int{
                        auto config_manager = 
@@ -361,11 +361,11 @@ DisplayTab::DisplayTab(const ManagerAccessorPtr& manager_accessor) :
 // \91\80\8dì\90Ý\92è\83^\83u
 
 InputTab::InputTab(const ManagerAccessorPtr& manager_accessor) :
-       OptionTabBase(_T("\91\80\8dì\90Ý\92è"), manager_accessor)
+       OptionTabBase(_LT("option.input.name"), manager_accessor)
 {
        items_.push_back(std::make_shared<RadioButtonItem>(
-               _T("\83R\83\93\83g\83\8d\81[\83\89\83^\83C\83v"),
-               _T("{\"\83^\83C\83v1\":0,\"\83^\83C\83v2\":1,\"\83^\83C\83v3\":2}"),
+               _LT("option.input.gamepad_type"),
+               _LT("option.input.gamepad_type_json"),
                std::make_shared<RadioButtonItemGetter>(
                [manager_accessor]() -> int{
                        auto config_manager = 
@@ -386,7 +386,7 @@ InputTab::InputTab(const ManagerAccessorPtr& manager_accessor) :
 // \82»\82Ì\91¼\90Ý\92è\83^\83u
 
 OtherTab::OtherTab(const ManagerAccessorPtr& manager_accessor) :
-       OptionTabBase(_T("\82»\82Ì\91¼"), manager_accessor)
+       OptionTabBase(_LT("option.others.name"), manager_accessor)
 {
        //items_.push_back(std::make_shared<RadioButtonItem>(
        //      _T("\96_\93Ç\82Ý\82¿\82á\82ñ\82Æ\98A\8cg"),
@@ -524,14 +524,14 @@ void RadioButtonItem::ProcessInput(InputManager* input)
 {
        int item_left = base_rect_.x + 192;
        int index = 0;
-       BOOST_FOREACH(const auto& item, items_) {
+       BOOST_FOREACH(auto& item, items_) {
                int left = item_left;
                int right = left + item.width;
 
-               bool hover = (left <= input->GetMouseX() && input->GetMouseX() <= right
+               item.hover = (left <= input->GetMouseX() && input->GetMouseX() <= right
                        && base_rect_.y <= input->GetMouseY() && input->GetMouseY() <= base_rect_.y + height());
 
-               if (hover && input->GetMouseLeftCount() == 1) {
+               if (item.hover && input->GetMouseLeftCount() == 1) {
                        (*setter_)(item.value);
                }
 
@@ -554,7 +554,11 @@ void RadioButtonItem::Draw()
                int right = left + item.width;
 
                if (value != item.value) {
-                       SetDrawBlendMode(DX_BLENDMODE_SUB, 40);
+                       if (item.hover) {
+                               SetDrawBlendMode(DX_BLENDMODE_ALPHA, 100);
+                       } else {
+                               SetDrawBlendMode(DX_BLENDMODE_SUB, 40);
+                       }
                }
 
                DrawGraph(left - 8, base_rect_.y - 4, *selecting_bg_image_handle_[0], TRUE);
index 78d5ca1..5b32aeb 100644 (file)
@@ -176,6 +176,7 @@ class RadioButtonItem : public OptionItemBase {
                                name(_name), value(_value), width(_width) {}
                        tstring name;
                        int value, width;
+                       bool hover;
                };
 
        private:
index 724cee9..b45033c 100644 (file)
@@ -73,4 +73,5 @@
 #include <boost/thread.hpp>
 #include <boost/foreach.hpp>
 
-#include "../common/Logger.hpp"
\ No newline at end of file
+#include "../common/Logger.hpp"
+#include "Language.hpp"
\ No newline at end of file
index 1e9f8be..ca5184d 100644 (file)
@@ -292,6 +292,7 @@ int main(int argc, char* argv[])
                                                unsigned char value;\r
                                                network::Utils::Deserialize(buffer, &value);\r
                         account.SetUserChannel(session->id(), value);\r
+                                               session->set_channel(value);\r
                     }\r
                     break;\r
                 default:\r
index 6466c3f..82fab2a 100644 (file)
@@ -11,7 +11,7 @@
 #define MMO_VERSION_MINOR 2\r
 #define MMO_VERSION_REVISION 0\r
 \r
-#define MMO_PROTOCOL_VERSION 3\r
+#define MMO_PROTOCOL_VERSION 2\r
 \r
 #ifdef MMO_VERSION_BUILD\r
 #define MMO_VERSION_BUILD_TEXT " Build " MMO_VERSION_TOSTRING(MMO_VERSION_BUILD)\r