Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * CM3D2.YASD.Plugin (Yet Another Soft Demosaic Plugin)+CBL Patch
- *
- * 改造者注:元の作者さんが長らくメンテされてないようなので、自力でChu-B Lip対応と新ダンス・撮影モード
- * 等への対応を行いました。しばりすのGameDataにテクスチャを置けばテクスチャ変更機能は要らなくなった
- * 思われるので外しました。
- * Chu-B Lip のシーン番号は通常版とは異なります。どうやら飛んでいる番号はレベルとしては存在するものの
- * 未使用のようです。
- *
- * 2.0.0.6 シーン番号を整理 テクスチャ変更機能を削除してスリム化 ディルドーの藻消しに対応
- * 2.0.0.5b ダンス対応版:2017/01/16 時点での未対応のダンスへ対応。01/28 act3、通常版のみ対応
- * 2.0.0.5 凡ミス。おもちゃ系藻がChu-B Lip版で外れていなかったバグを修正
- * 2.0.0.4 Ver.1.30用VRパッチからUnityバージョンがv5.3.4p4 になったため非推奨となった処理を置き換え
- * 2.0.0.3 複数メイド撮影プラグインの昼/夜メニューからの起動に対応
- * 2.0.0.2 ダンス5のシーン番号を追加 誤記の修正
- * 2.0.0.1 ダンス3、4、デスクトップカスタム、回想、メイドバトル、撮影モードのシーン番号を追加 Chu-B Lip対応を追加
- *
- *
- *
- *
- * モザイクのON/OFFを切り替えたりボディのテクスチャを変更できるUnityInjectorのプラグインです。
- *
- * モザイクはF4でメイド|メイドとおもちゃ|全部|消さないを切り替えます。
- * iniファイルを書き換えるとキーや切り替えの有効無効、モザイクを消す対象を変更できます。
- * 切り替えを無効にしてもiniで指定されたモザイクは消えます。
- * 切り替え機能がいらなければOFFにすると無駄な処理が減る分ちょっとだけ軽くなるかも。
- *
- * テクスチャ変更はメイドのボディ限定でTranslation Loaderと同じような処理をします。
- * Translation Loaderと違いReiPatcherでパッチを当てる必要がないのが強みです。
- * メイドのボディ以外のテクスチャも変更したい場合は素直にTranslation Loaderを使ってください。
- * プラグインを導入して一度ゲームを起動するとUnityInjector\Configに
- * YASD.iniファイルとYASDフォルダが作成されるのでYASDフォルダの中にテクスチャファイルを
- * コピーしてください。
- * テクスチャはpng形式のみに対応しています。
- * メイドが表示されているときにF3を押すとメイドに反映されます。
- * F3を押さずに自動で変更することもできますがデフォルトで無効になっています。
- * 自動で変更する場合はiniファイルの[ChangeTexture]セクションの[AutoChange]を
- * Trueに書き換えてください。
- *
- * 自動変更モードの仕様
- * テクスチャはゲーム起動時にリストが作成されてその中の物のみが反映されます。
- * テクスチャ変更時に何らかの理由で読み込みに失敗したファイルはリストから消去されます。
- * また、一度変更したテクスチャはファイルを入れ替えても即時反映されません。
- * ゲーム内のエディットで肌を変更後元の肌戻すと最新のファイルを読み込みます。
- * また、自動変更中にF3を押すとリストを更新し最新のファイルを強制的に適用します。
- * 要はゲーム中にテクスチャを入れ替えたらF3を押してください。
- *
- *
- * yasd.iniの内容
- * [DeMosaic]セクション
- * ChangeMode={True, False}
- * キーボードでの切り替えの有効無効を設定します。
- * True=有効 False=無効
- *
- * Target={None, Maid, MaidAndItem, All}
- * モザイクを消す対象を指定。
- * キーボード切り替えが有効な場合は押す度に切り替わります。
- * 無効の場合はiniで指定した値で固定されます。
- * None=消さない
- * Maid=女性のみ
- * MaidAndItem=女性とおもちゃ
- * All=全て(女性、おもちゃ、男性)
- *
- * HotKey
- * モザイクモード切替キーの設定。デフォルトはF4。
- * 指定するコードは下記URL参照。
- * http://docs.unity3d.com/jp/current/ScriptReference/KeyCode.html
- *
- *
- * [ChangeTexture]セクション
- * AutoChange={True, False}
- * テクスチャ自動変更機能の有効無効を設定します。
- * True=有効 False=無効
- *
- * HotKey
- * テクスチャリスト再読み込みキーの設定。デフォルトはF3
- * 自動更新が無効の場合はテクスチャリスト読み込みとテクスチャの変更を行います。
- * 指定するコードはDeMosaicセクションのURL参照。
- *
- *
- * コンパイル時の参照設定
- * /r:UnityEngine.dll /r:UnityInjector.dll /r:Assembly-CSharp.dll /r:Assembly-CSharp-firstpass.dll /r:ExINI.dll
- *
- */
- using ExIni;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.Text.RegularExpressions;
- using UnityEngine;
- using UnityInjector;
- using UnityInjector.Attributes;
- using System.Reflection;
- namespace CM3D2.YetAnotherSoftDemosaic.Plugin
- {
- static internal class LINQExt {
- public static void ForEach<T>(this IEnumerable<T> self , Action<T> act) {
- foreach(var cur in self) act(cur);
- }
- }
- public static class UnityExtensionsBridge {
- static UnityExtensionsBridge() {
- klass = Type.GetType("UnityInjector.Extensions,UnityInjector");
- }
- static Type klass = null;
- public static string UserDataPath {
- get {
- return (string)klass.GetMethod("get_UserDataPath").Invoke(null,null);
- }
- }
- }
- [PluginFilter("CM3D2x64"),
- PluginFilter("CM3D2x86"),
- PluginFilter("CM3D2VRx64"),
- PluginFilter("CM3D2OHx64"),
- PluginFilter("CM3D2OHx86"),
- PluginFilter("CM3D2OHVRx64"),
- PluginName("Yet Another Soft DeMosaic+CBL Patch"),
- PluginVersion("2.0.0.6")]
- public class YASD : PluginBase
- {
- private Coroutine deMosaicCoroutine;
- private bool runningCoroutine = false;
- private bool allowChangeMosaic = true;
- private KeyCode deMosaicHotKey = KeyCode.F4;
- private bool isChubLip = false;
- //1fで1秒
- private const float WAIT_SECOND_DEMOSAIC = 0.5f;
- /// <summary>
- /// CM3D2のシーンリスト
- /// </summary>
- private enum Scene
- {
- /// <summary>メイド選択(夜伽、品評会の前など)</summary>
- SceneCharacterSelect = 1,
- /// <summary>品評会</summary>
- SceneCompetitiveShow = 2,
- /// <summary>昼夜メニュー、仕事結果</summary>
- SceneDaily = 3,
- /// <summary>ダンス1</summary>
- SceneDance_DDFL = 4,
- /// <summary>メイドエディット</summary>
- SceneEdit = 5,
- /// <summary>メーカーロゴ</summary>
- SceneLogo = 6,
- /// <summary>メイド管理</summary>
- SceneMaidManagement = 7,
- /// <summary>ショップ</summary>
- SceneShop = 8,
- /// <summary>タイトル画面</summary>
- SceneTitle = 9,
- /// <summary>トロフィー閲覧</summary>
- SceneTrophy = 10,
- /// <summary>???</summary>
- SceneTryInfo = 11,
- /// <summary>主人公エディット</summary>
- SceneUserEdit = 12,
- /// <summary>起動時警告画面</summary>
- SceneWarning = 13,
- /// <summary>夜伽</summary>
- SceneYotogi = 14,
- /// <summary>ADVパート(kgスクリプト処理)</summary>
- SceneADV = 15,
- /// <summary>日付画面</summary>
- SceneStartDaily = 16,
- /// <summary>タイトルに戻る</summary>
- SceneToTitle = 17,
- /// <summary>MVP</summary>
- SceneSingleEffect = 18,
- /// <summary>スタッフロール</summary>
- SceneStaffRoll = 19,
- /// <summary>ダンス2</summary>
- SceneDance_ETYL = 20,
- /// <summary>ダンス選択</summary>
- SceneDance_Selector = 21,
- /// <summary>ダンス_3</summary>
- SceneDance_SL = 22,
- /// <summary>デスクトップカスタム</summary>
- SceneEditDesk = 23,
- /// <summary>回想</summary>
- SceneRecollection = 24,
- /// <summary>メイドバトル</summary>
- SceneMaidBattle = 25,
- /// <summary>ダンス_4</summary>
- SceneDance_SMT = 26,
- /// <summary>撮影モード</summary>
- ScenePoser = 27,
- /// <summary>ダンス5</summary>
- SceneDance_RTY_Release = 28,
- /// <summary>エンパイアリーグ</summary>
- SceneEmpireLeague = 29,
- /// <summary>ダンス6</summary>
- SceneDance_HHS_Release = 30,
- /// <summary>ダンス7</summary>
- SceneDance_HHSx4_Release = 31,
- /// <summary>ダンス8</summary>
- SceneDance_KNT_Release = 32,
- /// <summary>ダンス9</summary>
- SceneDance_SSE_Release = 34,
- /// <summary>ダンス10</summary>
- SceneDance_SSEx3_Release = 35
- }
- /// <summary>
- /// CM3D2CBLのシーンリスト
- /// </summary>
- private enum SceneCBL
- {
- /// <summary>CBL:メイド選択(未使用?)</summary>
- SceneCharacterSelect = 1,
- /// <summary>CBL:メニュー画面</summary>
- SceneMainMenuWithChubLip = 2,
- /// <summary>CBL:ダンス1</summary>
- SceneDance_DDFL_Release = 3,
- /// <summary>CBL:メイドエディット</summary>
- SceneEdit = 4,
- /// <summary>CBL:メーカーロゴ(未使用?)</summary>
- SceneLogo = 5,
- /// <summary>CBL:タイトル画面</summary>
- SceneTitle = 6,
- /// <summary>CBL:???(未使用?)</summary>
- SceneTryInfo = 7,
- /// <summary>CBL:主人公エディット</summary>
- SceneUserEdit = 8,
- /// <summary>CBL:起動時警告画面</summary>
- SceneWarning = 9,
- /// <summary>CBL:夜伽</summary>
- SceneYotogiWithChubLip = 10,
- /// <summary>CBL:ADVパート(kgスクリプト処理)</summary>
- SceneADV = 11,
- /// <summary>CBL:日付画面</summary>
- SceneStartDaily = 12,
- /// <summary>CBL:タイトルに戻る</summary>
- SceneToTitle = 13,
- /// <summary>CBL:MVP?(未使用?)</summary>
- SceneSingleEffect = 14,
- /// <summary>CBL:スタッフロール?(未使用?)</summary>
- SceneStaffRoll = 15,
- /// <summary>CBL:ダンス2</summary>
- SceneDance_ETYL_Release = 16,
- /// <summary>CBL:ダンス選択</summary>
- SceneDanceSelect = 17,
- /// <summary>CBL:ダンス3</summary>
- SceneDance_SCL_Release = 18,
- /// <summary>CBL:デスクトップカスタム</summary>
- SceneDeskCustomize = 19,
- /// <summary>CBL:ダンス4</summary>
- SceneDance_SMT_Release = 20,
- /// <summary>CBL:撮影モード</summary>
- ScenePhotoMode = 21,
- /// <summary>CBL:ダンス5</summary>
- SceneDance_RTY_Release = 22,
- /// <summary>CBL:ダンス6</summary>
- SceneDance_HHS_Release = 23,
- /// <summary>CBL:ダンス7</summary>
- SceneDance_HHSx4_Release = 24,
- /// <summary>CBL:ダンス8</summary>
- SceneDance_KNT_Release = 25,
- /// <summary>CBL:ダンス9</summary>
- SceneDance_SSE_Release = 26,
- /// <summary>CBL:ダンス10</summary>
- SceneDance_SSEx3_Release = 27
- }
- /// <summary>
- /// 3Dキャラが描画されるレベル
- /// </summary>
- private enum EnableLevel
- {
- /// <summary>品評会</summary>
- SceneCompetitiveShow = 2,
- /// <summary>ダンス1</summary>
- SceneDance_DDFL = 4,
- /// <summary>メイドエディット</summary>
- SceneEdit = 5,
- /// <summary>ショップ</summary>
- SceneShop = 8,
- /// <summary>夜伽</summary>
- SceneYotogi = 14,
- /// <summary>ADVパート(kgスクリプト処理)</summary>
- SceneADV = 15,
- /// <summary>MVP</summary>
- SceneSingleEffect = 18,
- /// <summary>ダンス2</summary>
- SceneDance_ETYL = 20,
- /// <summary>ダンス_3</summary>
- SceneDance_SL = 22,
- /// <summary>回想</summary>
- SceneRecollection = 24,
- /// <summary>メイドバトル</summary>
- SceneMaidBattle = 25,
- /// <summary>ダンス_4</summary>
- SceneDance_SMT = 26,
- /// <summary>撮影モード</summary>
- ScenePoser = 27,
- /// <summary>ダンス5</summary>
- SceneDance_RTY_Release = 28,
- /// <summary>エンパイアリーグ</summary>
- SceneEmpireLeague = 29,
- /// <summary>ダンス6</summary>
- SceneDance_HHS_Release = 30,
- /// <summary>ダンス7</summary>
- SceneDance_HHSx4_Release = 31,
- /// <summary>ダンス8</summary>
- SceneDance_KNT_Release = 32,
- /// <summary>ダンス9</summary>
- SceneDance_SSE_Release = 34,
- /// <summary>ダンス10</summary>
- SceneDance_SSEx3_Release = 35
- }
- /// <summary>
- /// 3Dキャラが描画されるレベル Chu-B Lip
- /// </summary>
- private enum EnableLevelCBL
- {
- /// <summary>CBL:メニュー画面</summary>
- SceneMainMenuWithChubLip = 2,
- /// <summary>CBL:ダンス1</summary>
- SceneDance_DDFL_Release = 3,
- /// <summary>CBL:メイドエディット</summary>
- SceneEdit = 4,
- /// <summary>CBL:主人公エディット</summary>
- SceneUserEdit = 8,
- /// <summary>CBL:夜伽/チュートリアル感度調整モード</summary>
- SceneYotogiWithChubLip = 10,
- /// <summary>CBL:ADVパート(kgスクリプト処理)</summary>
- SceneADV = 11,
- /// <summary>CBL:ダンス2</summary>
- SceneDance_ETYL_Release = 16,
- /// <summary>CBL:ダンス3</summary>
- SceneDance_SCL_Release = 18,
- /// <summary>CBL:ダンス4</summary>
- SceneDance_SMT_Release = 20,
- /// <summary>CBL:撮影モード</summary>
- ScenePhotoMode = 21,
- /// <summary>CBL:ダンス5</summary>
- SceneDance_RTY_Release = 22,
- /// <summary>CBL:ダンス6</summary>
- SceneDance_HHS_Release = 23,
- /// <summary>CBL:ダンス7</summary>
- SceneDance_HHSx4_Release = 24,
- /// <summary>CBL:ダンス8</summary>
- SceneDance_KNT_Release = 25,
- /// <summary>CBL:ダンス9</summary>
- SceneDance_SSE_Release = 26,
- /// <summary>CBL:ダンス10</summary>
- SceneDance_SSEx3_Release = 27
- }
- /// <summary>
- /// 男キャラやおもちゃが出現するレベル
- /// </summary>
- private enum ShowMenOrToysLevel
- {
- /// <summary>夜伽</summary>
- SceneYotogi = 14,
- /// <summary>ADVパート(kgスクリプト処理)</summary>
- SceneADV = 15,
- /// <summary>撮影モード</summary>
- ScenePoser = 27
- }
- /// <summary>
- /// 男キャラやおもちゃが出現するレベル Chu-B Lip
- /// </summary>
- private enum ShowMenOrToysLevelCBL
- {
- /// <summary>CBL:夜伽/チュートリアル感度調整モード</summary>
- SceneYotogiWithChubLip = 10,
- /// <summary>CBL:ADVパート(kgスクリプト処理)</summary>
- SceneADV = 11,
- /// <summary>CBL:撮影モード</summary>
- ScenePhotoMode = 21
- }
- /// <summary>
- /// メイドが出現するがキャラ変更や着替えを行わないレベル
- /// </summary>
- private enum NotChangeMaidsLevel
- {
- /// <summary>品評会</summary>
- SceneCompetitiveShow = 2,
- /// <summary>ダンス1</summary>
- SceneDance_DDFL = 4,
- /// <summary>MVP</summary>
- SceneSingleEffect = 18,
- /// <summary>ダンス2</summary>
- SceneDance_ETYL = 20,
- /// <summary>ダンス3</summary>
- SceneDance_SL = 22,
- /// <summary>ダンス4</summary>
- SceneDance_SMT = 26,
- /// <summary>ダンス5</summary>
- SceneDance_RTY_Release = 28,
- /// <summary>エンパイアリーグ</summary>
- SceneEmpireLeague = 29,
- /// <summary>ダンス6</summary>
- SceneDance_HHS_Release = 30,
- /// <summary>ダンス7</summary>
- SceneDance_HHSx4_Release = 31,
- /// <summary>ダンス8</summary>
- SceneDance_KNT_Release = 32,
- /// <summary>ダンス9</summary>
- SceneDance_SSE_Release = 34,
- /// <summary>ダンス10</summary>
- SceneDance_SSEx3_Release = 35
- }
- /// <summary>
- /// メイドが出現するがキャラ変更や着替えを行わないレベル Chu-B Lip
- /// </summary>
- private enum NotChangeMaidsLevelCBL
- {
- /// <summary>CBL:ダンス1</summary>
- SceneDance_DDFL_Release = 3,
- /// <summary>CBL:ダンス2</summary>
- SceneDance_ETYL_Release = 16,
- /// <summary>CBL:ダンス3</summary>
- SceneDance_SCL_Release = 18,
- /// <summary>CBL:ダンス4</summary>
- SceneDance_SMT_Release = 20,
- /// <summary>CBL:ダンス5</summary>
- SceneDance_RTY_Release = 22,
- /// <summary>CBL:ダンス6</summary>
- SceneDance_HHS_Release = 23,
- /// <summary>CBL:ダンス7</summary>
- SceneDance_HHSx4_Release = 24,
- /// <summary>CBL:ダンス8</summary>
- SceneDance_KNT_Release = 25,
- /// <summary>CBL:ダンス9</summary>
- SceneDance_SSE_Release = 26,
- /// <summary>CBL:ダンス10</summary>
- SceneDance_SSEx3_Release = 27
- }
- private DeMosaic deMosaic = new DeMosaic();
- private void LoadConfig()
- {
- IniKey changeMosaic = Preferences["DeMosaic"]["ChangeMode"];
- IniKey target = Preferences["DeMosaic"]["Target"];
- IniKey changeMosaicKey = Preferences["DeMosaic"]["HotKey"];
- string dataPath = Application.dataPath;
- isChubLip = dataPath.Contains("CM3D2OH");
- if (changeMosaic == null || string.IsNullOrEmpty(changeMosaic.Value))
- {
- changeMosaic.Value = allowChangeMosaic.ToString();
- SaveConfig();
- }
- else
- {
- if (!bool.TryParse(changeMosaic.Value, out allowChangeMosaic))
- {
- changeMosaic.Value = allowChangeMosaic.ToString();
- SaveConfig();
- }
- }
- if (target == null || string.IsNullOrEmpty(target.Value))
- {
- target.Value = deMosaic.Target.ToString();
- SaveConfig();
- }
- else
- {
- if (Enum.IsDefined(typeof(DeMosaic.Switch), target.Value))
- {
- deMosaic.Target = (DeMosaic.Switch)Enum.Parse(typeof(DeMosaic.Switch), target.Value, true);
- }
- else
- {
- target.Value = deMosaic.Target.ToString();
- SaveConfig();
- }
- }
- if (changeMosaicKey == null || string.IsNullOrEmpty(changeMosaicKey.Value))
- {
- changeMosaicKey.Value = deMosaicHotKey.ToString();
- SaveConfig();
- }
- else
- {
- if (Enum.IsDefined(typeof(KeyCode), changeMosaicKey.Value))
- {
- deMosaicHotKey = (KeyCode)Enum.Parse(typeof(KeyCode), changeMosaicKey.Value, true);
- }
- else
- {
- changeMosaicKey.Value = deMosaicHotKey.ToString();
- SaveConfig();
- }
- }
- }
- private void Awake()
- {
- GameObject.DontDestroyOnLoad(this);
- System.Diagnostics.Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));
- LoadConfig();
- StartCoroutine(GetKeyInput());
- }
- private void OnLevelWasLoaded(int level)
- {
- if (runningCoroutine)
- {
- System.Diagnostics.Debug.WriteLine("Demosaic Coroutine stop.");
- StopCoroutine(deMosaicCoroutine);
- runningCoroutine = false;
- }
- if ((isChubLip && Enum.IsDefined(typeof(EnableLevelCBL), level)) || (!isChubLip && Enum.IsDefined(typeof(EnableLevel), level)))
- {
- System.Diagnostics.Debug.WriteLine("Demosaic Coroutine start.");
- deMosaicCoroutine = StartCoroutine(DeMosaicCoroutine(level));
- runningCoroutine = true;
- }
- }
- private IEnumerator GetKeyInput()
- {
- while (true)
- {
- if (Input.GetKeyDown(deMosaicHotKey) && allowChangeMosaic)
- {
- deMosaic.Target++;
- Console.WriteLine("YADSM Target:{0}", deMosaic.Target.ToString());
- }
- yield return null;
- }
- }
- private IEnumerator DeMosaicCoroutine(int level)
- {
- while (true)
- {
- bool result = deMosaic.DeMosaicMaids();
- if (result && !allowChangeMosaic && Enum.IsDefined(typeof(NotChangeMaidsLevel), level))
- {
- System.Diagnostics.Debug.WriteLine("DeMosaic Coroutine Break.");
- runningCoroutine = false;
- yield break;
- }
- yield return null;
- if ((isChubLip && Enum.IsDefined(typeof(ShowMenOrToysLevelCBL), level)) || (!isChubLip && Enum.IsDefined(typeof(ShowMenOrToysLevel), level)))
- {
- deMosaic.DeMosaicToys();
- yield return null;
- deMosaic.DeMosaicMen();
- }
- //System.Diagnostics.Debug.WriteLine("DeMosaic Coroutine Continue.");
- yield return new WaitForSeconds(WAIT_SECOND_DEMOSAIC);
- }
- }
- public void OnApplicationQuit()
- {
- Preferences["DeMosaic"]["Target"].Value = deMosaic.Target.ToString();
- SaveConfig();
- }
- }
- public class DeMosaic
- {
- public enum Switch
- {
- None,
- Maid,
- MaidAndItem,
- All,
- Max
- }
- private Switch _target = Switch.All;
- public Switch Target
- {
- get { return _target; }
- set { _target = value == Switch.Max ? Switch.None : value; }
- }
- private Shader shaderTransparent;
- private Shader shaderMosaic;
- private bool isChubLip = false;
- public DeMosaic() {
- shaderTransparent = Shader.Find("CM3D2/Toony_Lighted_Trans");
- shaderMosaic = Shader.Find("CM3D2/Mosaic");
- }
- private string getHiraerchy(Transform t)
- {
- string hiraerchy = "/" + t.name;
- while (t.parent)
- {
- t = t.parent;
- hiraerchy = "/" + t.name + hiraerchy;
- }
- return hiraerchy;
- }
- private Renderer[] GetMosaicRenderer(string type)
- {
- GameObject alloffset = GameObject.Find("__GameMain__/Character/Active/AllOffset");
- if (!alloffset)
- {
- return null;
- }
- Renderer[] mosaic = alloffset.GetComponentsInChildren<Renderer>(true)
- .Where(_ => _.materials.Any(m => m.name.Contains("moza")))
- .ToArray();
- string s;
- if (type.Equals("toy"))
- {
- return mosaic
- .Where(_ => _.materials.Any(m => m.name != "moza"))
- .ToArray();
- }
- else if (type.Equals("man"))
- {
- s = "Man[";
- }
- else if (type.Equals("maid"))
- {
- s = "Maid[";
- }
- else
- {
- Console.WriteLine("YASD.GetMosaicRenderer: Argument error.");
- return null;
- }
- return mosaic
- .Where(_ => _.name.Equals("moza"))
- .Where(_ => getHiraerchy(_.transform).Contains(s))
- .ToArray();
- }
- private Renderer[] GetMaidsMosaicRenderer()
- {
- return GetMosaicRenderer("maid");
- }
- private Renderer[] GetMenMosaicRenderer()
- {
- return GetMosaicRenderer("man");
- }
- private Renderer[] GetToysMosaicRenderer()
- {
- return GetMosaicRenderer("toy");
- }
- public bool DeMosaicMaids()
- {
- bool result = false;
- Renderer[] maidsMosaicList = GetMaidsMosaicRenderer();
- if (maidsMosaicList != null)
- {
- result = HumanMosaicSwitcher(maidsMosaicList, (Target == DeMosaic.Switch.None));
- }
- return result;
- }
- public void DeMosaicMen()
- {
- Renderer[] menMosaicList = GetMenMosaicRenderer();
- if (menMosaicList != null)
- {
- HumanMosaicSwitcher(menMosaicList, (Target != DeMosaic.Switch.All));
- }
- }
- private bool HumanMosaicSwitcher(Renderer[] mosaic, bool enableMosaic)
- {
- bool result = false;
- if (mosaic == null)
- {
- return result;
- }
- mosaic.Where(_ => _.enabled == !enableMosaic).ForEach(_ =>
- {
- _.enabled = enableMosaic;
- System.Diagnostics.Debug.WriteLine(string.Format("{0}'s Mosaic Enable:{1}", _.name, enableMosaic));
- result = true;
- });
- return result;
- }
- public void DeMosaicToys()
- {
- Renderer[] rs = GetToysMosaicRenderer();
- if (rs != null)
- {
- foreach (Renderer r in rs)
- {
- ToyMaterialChanger(r);
- }
- }
- //GameObject boxdildo = UTY.GetChildObject(GameMain.Instance.BgMgr.current_bg_object, "ディルド&台", true);
- //if (boxdildo == null)
- // return;
- try
- {
- Renderer[] mosaic = GameMain.Instance.BgMgr.current_bg_object.GetComponentsInChildren<Renderer>(true)
- .Where(_ => _.materials.Any(m => m.name.Contains("moza")))
- .ToArray();
- if (mosaic != null)
- {
- foreach (Renderer r in mosaic)
- {
- ToyMaterialChanger(r);
- }
- }
- }
- catch { /*LogError(ex);*/ }
- }
- private void ToyMaterialChanger(Renderer mosaic)
- {
- if (mosaic.materials.Length == 1)
- {
- return;
- }
- bool mosaicDisable = Target >= DeMosaic.Switch.MaidAndItem;
- mosaic.materials
- .Where(_ => mosaicDisable ? _.shader.Equals(shaderMosaic) : _.shader.Equals(shaderTransparent))
- .ForEach(_ =>
- {
- _.shader = mosaicDisable ? shaderTransparent : shaderMosaic;
- _.color += mosaicDisable ? new Color(0f, 0f, 0f, -1f) : new Color(0f, 0f, 0f, 1f);
- });
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement