//導入されている全夜伽コマンドデータ用の設定ファイルを一括作成 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); } } }
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); } } } }
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; } }