Ejemplo n.º 1
0
        //導入されている全夜伽コマンドデータ用の設定ファイルを一括作成
        void CreateAllYotogiXML()
        {
            for (int cat = 0; cat < (int)Yotogi.Category.MAX; cat++)
            {
                SortedDictionary <int, Yotogi.SkillData> data = Yotogi.skill_data_list[cat];
                foreach (Yotogi.SkillData sd in data.Values)
                {
                    A10PistonConfig XML = new A10PistonConfig();
                    XML.EditInformation.EditName  = "UserName";
                    XML.EditInformation.TimeStamp = DateTime.Now.ToString("yyyyMMddHHmmss");
                    XML.EditInformation.Comment   = "";

                    XML.YotogiCXConfig.GroupName = sd.name;
                    XML.LevelList.Clear();
                    XML.LevelList.Add(PatternItem("STOP", 0, 0, 0, 0));
                    XML.LevelList.Add(PatternItem("PreSet1", 10, 30, 50, 70));
                    XML.LevelList.Add(PatternItem("PreSet2", 20, 40, 60, 80));
                    XML.LevelList.Add(PatternItem("PreSet3", 60, 80, 100, 120));

                    foreach (var comData in sd.command.data)
                    {
                        A10PistonConfig.YotogiItem YotogiListData = new A10PistonConfig.YotogiItem();

                        YotogiListData.Yotogi_Name = comData.basic.name;
                        YotogiListData.ControlData.Add(ControlItem(0f, "STOP"));

                        XML.YotogiCXConfig.YotogiList.Add(YotogiListData);
                    }

                    XMLWriter <A10PistonConfig>(XmlFileDirectory + sd.name + ".xml", XML);
                }
            }
        }
Ejemplo n.º 2
0
        private void A10PistonEvents(string yotogi_group_name, string yotogi_name, int iLastExcite, bool InsertFlg, string Personal)
        {
            //前回のコルーチンが走っている場合は停止をする
            foreach (var PistonEnum in PistonEnums)
            {
                StopCoroutine(PistonEnum);
            }
            PistonEnums.Clear();

            YotogiItem = null;
            A10PistonLevelsDict.Clear();
            if (A10PistonConfigDictionay.ContainsKey(yotogi_group_name))
            {
                //振動パターンのDictionayを生成
                foreach (A10PistonConfig.LevelItem Item in A10PistonConfigDictionay[yotogi_group_name].LevelList)
                {
                    if (!A10PistonLevelsDict.ContainsKey(Item.LvName))
                    {
                        A10PistonLevelsDict.Add(Item.LvName, Item);
                    }
                    else
                    {
                        Debug.Log("Warning : LevelNameが重複しています。[" + Item.LvName + "]");
                    }
                }
                //設定ファイルを確定する
                foreach (A10PistonConfig.YotogiItem Item in A10PistonConfigDictionay[yotogi_group_name].YotogiCXConfig.YotogiList)
                {
                    if (Item.Yotogi_Name == yotogi_name)
                    {
                        YotogiItem = Item;
                        break;
                    }
                }
                if (YotogiItem != null)
                {
                    DebugManager.Log("実行:" + YotogiItem.Yotogi_Name);

                    //コルーチンを開始する
                    foreach (var device in devices)
                    {
                        PistonEnums.Add(PistonCoroutine(iLastExcite, YotogiItem, A10PistonLevelsDict, InsertFlg, Personal, device));
                    }
                    foreach (var PistonEnum in PistonEnums)
                    {
                        StartCoroutine(PistonEnum);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private IEnumerator PistonCoroutine(int iLastExcite, A10PistonConfig.YotogiItem YotogiItem, Dictionary <string, A10PistonConfig.LevelItem> A10PistonPattanDict, bool InsertFlg, string Personal, A10PistonClass a10Piston)
        {
            // 興奮状態のステータス
            yExciteStatus = YotogiPlay.GetExcitementStatus(iLastExcite);
            int iExciteStatus = (int)yExciteStatus;

            // 指定コマンドの制御状態をループする.
            while (true)
            {
                foreach (A10PistonConfig.Control Item in YotogiItem.ControlData)
                {
                    // 性格を指定しているが不一致の場合は無視
                    if (Item.Personal != "" && Item.Personal != Personal)
                    {
                        continue;
                    }

                    // 挿入時指定をしているが挿入フラグがない場合は無視
                    if (Item.Insert && !InsertFlg)
                    {
                        continue;
                    }

                    // 接続機器を指定しているが不一致の場合は無視
                    if (Item.Device != "" && Item.Device != a10Piston.ConnectedModel.ToString())
                    {
                        continue;
                    }

                    // 興奮状態を指定しているが不一致の場合は無視
                    if (0 <= Item.Excite && Item.Excite != iExciteStatus)
                    {
                        continue;
                    }

                    //現在のPatternとLevel
                    A10PistonClass.Pattern SetPattan = a10Piston.pattern;
                    int SetLevel    = a10Piston.level;
                    int SetPosition = a10Piston.position;

                    //Patternの定義があれば更新
                    if (0 == Item.Pattern)
                    {
                        SetPattan = A10PistonClass.Pattern.ClockWise;
                    }
                    else if (1 == Item.Pattern)
                    {
                        SetPattan = A10PistonClass.Pattern.CounterClockWise;
                    }

                    //Positionの定義があれば更新
                    if (-1 < Item.Position)
                    {
                        SetPosition = Clamp(Item.Position, A10PistonClass.Position_Min, A10PistonClass.Position_Max);
                    }

                    //Levelの定義があれば更新
                    if (-1 < Item.Level)
                    {
                        SetLevel = Clamp(Item.Level, A10PistonClass.Level_Min, A10PistonClass.Level_Max);
                    }

                    //LevelNameの定義がある場合
                    if (Item.LvName != "")
                    {
                        if (A10PistonPattanDict.ContainsKey(Item.LvName))
                        {
                            //興奮値を元にLevelを更新
                            SetLevel = Clamp(GetLevel(yExciteStatus, A10PistonPattanDict[Item.LvName]), A10PistonClass.Level_Min, A10PistonClass.Level_Max);
                        }
                        else
                        {
                            DebugManager.Log("LevelNameの定義が見つかりません");
                        }
                    }

                    //ディレイ
                    if (0.0f < Item.Delay)
                    {
                        yield return(new WaitForSeconds(Item.Delay));
                    }

                    //振動を開始する
                    if (SetLevel != a10Piston.level || SetPattan != a10Piston.pattern || SetPosition != a10Piston.position)
                    {
                        //Pistonの振動処理
                        //a10Piston.SetPatternAndLevel(SetPattan, SetLevel);
                        a10Piston.SetPositionAndLevel(SetPosition, SetLevel);
                        //GUI用に更新をする。
                        NowPattern = (Int32)a10Piston.pattern;
                        NowLevel   = a10Piston.level;
                    }

                    //ログを追加
                    DebugManager.Log(a10Piston.ConnectedModel.ToString() + ": [Pattern:" + a10Piston.pattern + "][Level:" + a10Piston.level + "][Delay:" + Item.Delay + "][Time:" + Item.Time + "]");

                    //継続タイム
                    if (0.0f < Item.Time)
                    {
                        yield return(new WaitForSeconds(Item.Time));
                    }
                    else
                    {
                        // 継続時間の指定が無い場合、0.1秒毎に次の処理へ移行する
                        yield return(new WaitForSeconds(0.1f));
                    }

                    /*
                     * //性格の指定があるかどうか(未指定の場合はそのまま実行)
                     * if (Item.Personal == "" || Item.Personal == Personal)
                     * {
                     *      //挿入時に挿入フラグがあった場合もしくはそれ以外
                     *      if ((Item.Insert && InsertFlg) || Item.Insert == false)
                     *      {
                     *              // 接続機器の指定があるかどうか(未指定の場合はそのまま実行)
                     *              if ((Item.Device == "" || Item.Device == a10Piston.ConnectedModel.ToString()))
                     *              {
                     *                      // 興奮状態が指定と異なる場合は実行しない(未指定の場合はそのまま実行)
                     *                      if (0 <= Item.Excite && Item.Excite != iExciteStatus)
                     *                      {
                     *                              continue;
                     *                      }
                     *              }
                     *      }
                     * }
                     */
                }

                // 2ループ目以降の挿入フラグはオフにする
                InsertFlg = false;
            }
        }