OSDN Git Service

reloadでmusicもリロードするように対応
authorangeart <angeart@git.sourceforge.jp>
Sat, 22 Sep 2012 12:37:34 +0000 (21:37 +0900)
committerangeart <angeart@git.sourceforge.jp>
Sat, 22 Sep 2012 12:37:34 +0000 (21:37 +0900)
リスト更新対応済み

client/Card.cpp
client/Card.hpp
client/CardManager.cpp
client/CardManager.hpp
client/Music.cpp
client/bin/cards/bgmlist/main.js
client/bin/cards/modellist/main.js
client/bin/cards/textchat/main.js

index 338c2a6..43f96c4 100644 (file)
@@ -456,6 +456,19 @@ Handle<Value> Card::Function_Model_Rebuild(const Arguments& args)
        return Undefined();\r
 }\r
 \r
+Handle<Value> Card::Function_Music_Rebuild(const Arguments& args)\r
+{\r
+       ResourceManager::music()->Init();\r
+\r
+    auto self = static_cast<Card*>(args.Holder()->GetPointerFromInternalField(0));\r
+    if (auto card_manager = self->manager_accessor_->card_manager().lock()) {\r
+               card_manager->OnMusicReload();\r
+    }\r
+\r
+       return Undefined();\r
+}\r
+\r
+\r
 \r
 Handle<Value> Card::Property_global(Local<String> property, const AccessorInfo &info)\r
 {\r
@@ -592,6 +605,22 @@ void Card::Property_set_Model_onReload(Local<String> property, Local<Value> valu
     }\r
 }\r
 \r
+Handle<Value> Card::Property_Music_onReload(Local<String> property, const AccessorInfo &info)\r
+{\r
+    assert(info.Holder()->InternalFieldCount() > 0);\r
+    auto self = static_cast<Card*>(info.Holder()->GetPointerFromInternalField(0));\r
+       return self->music.on_reload_;\r
+}\r
+\r
+void Card::Property_set_Music_onReload(Local<String> property, Local<Value> value, const AccessorInfo& info)\r
+{\r
+    if (value->IsFunction()) {\r
+        assert(info.Holder()->InternalFieldCount() > 0);\r
+        auto self = static_cast<Card*>(info.Holder()->GetPointerFromInternalField(0));\r
+        self->music.on_reload_ = Persistent<Function>::New(value.As<Function>());\r
+    }\r
+}\r
+\r
 void Card::SetFunctions()\r
 {\r
 \r
@@ -814,6 +843,15 @@ void Card::SetFunctions()
      */\r
     script_.SetFunction("Music.all", Function_Music_all);\r
 \r
+    /**\r
+     * 音楽の構造を再構築します\r
+     *\r
+     * @method rebuild\r
+     * @static\r
+     */\r
+       script_.SetFunction("Music.rebuild", Function_Music_Rebuild);\r
+\r
+    script_.SetProperty("Music.onReload", Property_Music_onReload, Property_set_Music_onReload);\r
        /**\r
      * アカウント\r
      *\r
@@ -1416,6 +1454,17 @@ void Card::OnModelReload()
     }\r
 }\r
 \r
+void Card::OnMusicReload()\r
+{\r
+    if (!music.on_reload_.IsEmpty() && music.on_reload_->IsFunction()) {\r
+        script_.TimedWith(\r
+                [&](const Handle<Context>& context)\r
+                {\r
+                    music.on_reload_->Call(context->Global(), 0, nullptr);\r
+                });\r
+    }\r
+}\r
+\r
 void Card::LoadStorage()\r
 {\r
     std::string storage_path = std::string(STORAGE_DIR) + "/"\r
index 829945c..94afe23 100644 (file)
Binary files a/client/Card.hpp and b/client/Card.hpp differ
index bf0c3cd..dc61aa4 100644 (file)
Binary files a/client/CardManager.cpp and b/client/CardManager.cpp differ
index bcdc600..6b6c833 100644 (file)
@@ -37,6 +37,7 @@ class CardManager : public std::enable_shared_from_this<CardManager> {
         void OnLogin(const PlayerPtr& player);
         void OnLogout(const PlayerPtr& player);
                void OnModelReload();
+               void OnMusicReload();
 
         bool IsGUIActive();
         void FocusPlayer();
index adb6d88..42cc447 100644 (file)
@@ -180,7 +180,7 @@ void Music::Update()
        if(CheckHandleASyncLoad(requested_bgm_) == false && requested_bgm_ != -1)
        {
                if(fade_count_ == 0)PlaySoundMem(requested_bgm_,DX_PLAYTYPE_LOOP);
-               if(fade_count_ >= 120)
+               if(fade_count_ >= 90)
                {
                        ChangeVolumeSoundMem(100,requested_bgm_);
                        StopSoundMem(present_bgm_);
@@ -190,8 +190,8 @@ void Music::Update()
                        fade_count_ = 0;
                        crossfade_now_ = false;
                }
-               ChangeVolumeSoundMem((int)(fade_count_/1.2),requested_bgm_);
-               ChangeVolumeSoundMem((int)((120-fade_count_)/1.2),present_bgm_);
+               ChangeVolumeSoundMem((int)((double)fade_count_/0.9),requested_bgm_);
+               ChangeVolumeSoundMem((int)((90.0-(double)fade_count_)/0.9),present_bgm_);
                ++fade_count_;
        }
 }
index 21016d0..70444e3 100644 (file)
@@ -14,23 +14,30 @@ list = new UI.List({
        docking: UI.DOCKING_TOP | UI.DOCKING_LEFT | UI.DOCKING_RIGHT | UI.DOCKING_BOTTOM
 });
 
-var even_line = false;
-var music_names = Music.all();
-for (var i = 0; i < music_names.length; i++) {
-    (function (music_name) {
-        list.addItem(
+Music.onReload = function () {
+
+    list.clearItems();
+
+    var even_line = false;
+    var music_names = Music.all();
+    for (var i = 0; i < music_names.length; i++) {
+        (function (music_name) {
+            list.addItem(
                                new UI.Label({
                                    docking: UI.DOCKING_TOP | UI.DOCKING_LEFT | UI.DOCKING_RIGHT,
                                    text: music_name,
                                    bgcolor: ((even_line = !even_line) ? "#EEAFEECC" : "#FFFFFFCC"),
                                    onclick: function () {
-                                       Music.play(music_name,true)
+                                       Music.play(music_name, true)
                                    }
                                })
                        );
-    })(music_names[i])
+        })(music_names[i])
+    }
 }
 
+Music.onReload();
+
 Card.board.width = 240;
 Card.board.height = 120;
 Card.board.docking = UI.DOCKING_BOTTOM | UI.DOCKING_LEFT
index 926624f..4bc76de 100644 (file)
@@ -28,7 +28,6 @@ Model.onReload = function() {
                                                text: model_name,\r
                                                bgcolor: ((even_line = !even_line) ? "#EEAFEECC" : "#FFFFFFCC"),\r
                                                onclick: function() {\r
-                                                       Player.stopMotion();\r
                                                        Account.updateModelName(model_name)\r
                                                }\r
                                        })\r
index a6bd354..5d5eab9 100644 (file)
@@ -94,68 +94,75 @@ Player.onLogout = function(player) {
 // チャットメッセージ送信
 InputBox.onEnter = function (text) {
 
-       //サイコロ用
-       var dice_parsed_text = text.match(/^\/(\d+)[Dd](\d+)/)
-       if (dice_parsed_text) {
-               var time = dice_parsed_text[1]
+    //サイコロ用
+    var dice_parsed_text = text.match(/^\/(\d+)[Dd](\d+)/)
+    if (dice_parsed_text) {
+        var time = dice_parsed_text[1]
         var size = dice_parsed_text[2]
         var msg = "【ダイス /" + time + "D" + size + "】\n "
         for (var i = 0; i < time; i++) {
-               msg += Number.random(1, size) + ", "
+            msg += Number.random(1, size) + ", "
         }
-        
+
         var msgObject = { body: msg };
         Network.sendAll(msgObject);
-               return;
-       }
+        return;
+    }
 
     // コマンドを解析
-    var parsed_text = text.match(/^\/(\w{1,8})\s?(\S*)/)
-    if (parsed_text) {
+    var parsed_text = text.split(" ");  //.match(/^\/(\w{1,8})\s?(\S*)/)
+    var command = parsed_text[0].match(/^\/(\w*)/);
+    if (command) {
 
-        var command = parsed_text[1]
-        var args = parsed_text[2]
+        var args = parsed_text[1]
 
-        switch (command) {
+        switch (command[1]) {
 
-            // ニックネームを変更       
+            // ニックネームを変更             
             case "nick":
                 Account.updateName(args.trim());
                 break;
 
-            // モデルを変更       
+            // モデルを変更             
             case "model":
                 Account.updateModelName("char:" + args.trim());
                 break;
 
-            // プレイヤー位置をリセット       
+            // プレイヤー位置をリセット             
             case "escape":
                 Player.escape();
                 break;
-                
-            // リロード
+
+            // リロード      
             case "reload":
                 Model.rebuild();
+                Music.rebuild();
                 break;
-                
-            // システム
+
+            // システム      
             case "system":
                 var msgObject = { system: args.trim() };
                 Network.sendAll(msgObject);
                 break;
-                
-            // プライベート
+
+            // プライベート      
             case "private":
-                var tok = args.split(",");
                 var msgObject = {
                     private: [
                                        Player.myself().id(),
-                                       Player.getFromName([tok[0]]).id()
+                                       Player.getFromName([args.trim()]).id()
                                 ],
-                    body: tok[1]
-                    };
+                    body: parsed_text[2].trim()
+                };
                 Network.sendAll(msgObject);
                 break;
+
+            case "dance":
+                Music.playME(parsed_text[2].trim());
+                Player.playMotion(args.trim());
+
+            case "bgm":
+                Music.play(args.trim(), true);
         }
 
     } else {