denikson 5 years ago
commit
5c26623612
300 changed files with 85087 additions and 0 deletions
  1. 22 0
      Assembly-CSharp.sln
  2. 447 0
      Assembly-CSharp/ADVKagManager.cs
  3. 152 0
      Assembly-CSharp/AMAction.cs
  4. 131 0
      Assembly-CSharp/AMAnimationAction.cs
  5. 108 0
      Assembly-CSharp/AMAnimationKey.cs
  6. 145 0
      Assembly-CSharp/AMAnimationTrack.cs
  7. 111 0
      Assembly-CSharp/AMAudioAction.cs
  8. 39 0
      Assembly-CSharp/AMAudioKey.cs
  9. 213 0
      Assembly-CSharp/AMAudioTrack.cs
  10. 134 0
      Assembly-CSharp/AMBinaryDataBaseObject.cs
  11. 144 0
      Assembly-CSharp/AMBinaryMethod.cs
  12. 221 0
      Assembly-CSharp/AMBinaryProperty.cs
  13. 67 0
      Assembly-CSharp/AMBinaryRotation.cs
  14. 65 0
      Assembly-CSharp/AMBinaryTranslation.cs
  15. 1100 0
      Assembly-CSharp/AMCameraFade.cs
  16. 410 0
      Assembly-CSharp/AMCameraSwitcherAction.cs
  17. 87 0
      Assembly-CSharp/AMCameraSwitcherKey.cs
  18. 529 0
      Assembly-CSharp/AMCameraSwitcherTrack.cs
  19. 691 0
      Assembly-CSharp/AMEventAction.cs
  20. 213 0
      Assembly-CSharp/AMEventKey.cs
  21. 947 0
      Assembly-CSharp/AMEventParameter.cs
  22. 138 0
      Assembly-CSharp/AMEventTrack.cs
  23. 33 0
      Assembly-CSharp/AMGroup.cs
  24. 152 0
      Assembly-CSharp/AMKey.cs
  25. 286 0
      Assembly-CSharp/AMOrientationAction.cs
  26. 29 0
      Assembly-CSharp/AMOrientationKey.cs
  27. 335 0
      Assembly-CSharp/AMOrientationTrack.cs
  28. 45 0
      Assembly-CSharp/AMPath.cs
  29. 1409 0
      Assembly-CSharp/AMPropertyAction.cs
  30. 218 0
      Assembly-CSharp/AMPropertyKey.cs
  31. 1420 0
      Assembly-CSharp/AMPropertyTrack.cs
  32. 155 0
      Assembly-CSharp/AMRotationAction.cs
  33. 93 0
      Assembly-CSharp/AMRotationKey.cs
  34. 336 0
      Assembly-CSharp/AMRotationTrack.cs
  35. 1977 0
      Assembly-CSharp/AMTake.cs
  36. 13 0
      Assembly-CSharp/AMTarget.cs
  37. 350 0
      Assembly-CSharp/AMTrack.cs
  38. 258 0
      Assembly-CSharp/AMTranslationAction.cs
  39. 99 0
      Assembly-CSharp/AMTranslationKey.cs
  40. 383 0
      Assembly-CSharp/AMTranslationTrack.cs
  41. 6717 0
      Assembly-CSharp/AMTween.cs
  42. 169 0
      Assembly-CSharp/AMWriteBinaryData.cs
  43. 68 0
      Assembly-CSharp/AVProVideoPlayer.cs
  44. 214 0
      Assembly-CSharp/AVRController.cs
  45. 98 0
      Assembly-CSharp/AVRControllerBehavior.cs
  46. 91 0
      Assembly-CSharp/AVRControllerButtons.cs
  47. 18 0
      Assembly-CSharp/AVRTrackingObjectsMgr.cs
  48. 158 0
      Assembly-CSharp/AWReadBinaryData.cs
  49. 138 0
      Assembly-CSharp/AbstractFreeModeItem.cs
  50. 27 0
      Assembly-CSharp/AcquiredAttributeUnit.cs
  51. 40 0
      Assembly-CSharp/AcquiredSkillUnit.cs
  52. 39 0
      Assembly-CSharp/ActionCase.cs
  53. 84 0
      Assembly-CSharp/ActionDirect.cs
  54. 436 0
      Assembly-CSharp/ActiveAnimation.cs
  55. 190 0
      Assembly-CSharp/AdditionalScenario.cs
  56. 271 0
      Assembly-CSharp/AlignmentPresetWindow.cs
  57. 32 0
      Assembly-CSharp/AnimatedAlpha.cs
  58. 22 0
      Assembly-CSharp/AnimatedColor.cs
  59. 27 0
      Assembly-CSharp/AnimatedWidget.cs
  60. 11 0
      Assembly-CSharp/AnimationOrTween/Direction.cs
  61. 11 0
      Assembly-CSharp/AnimationOrTween/DisableCondition.cs
  62. 11 0
      Assembly-CSharp/AnimationOrTween/EnableCondition.cs
  63. 22 0
      Assembly-CSharp/AnimationOrTween/Trigger.cs
  64. 524 0
      Assembly-CSharp/AnimatorData.cs
  65. 18 0
      Assembly-CSharp/AnimatorPlayer.cs
  66. 1692 0
      Assembly-CSharp/AnimatorTimeline.cs
  67. 1120 0
      Assembly-CSharp/Appeal_Mgr.cs
  68. 376 0
      Assembly-CSharp/ArcTeleport.cs
  69. 1493 0
      Assembly-CSharp/Assembly-CSharp.csproj
  70. 56 0
      Assembly-CSharp/AssertHelper.cs
  71. 32 0
      Assembly-CSharp/AssetUty.cs
  72. 310 0
      Assembly-CSharp/AttachPointSubWindow.cs
  73. 6 0
      Assembly-CSharp/AttachPrefab.cs
  74. 65 0
      Assembly-CSharp/AttributeViewer.cs
  75. 107 0
      Assembly-CSharp/AttributeViewerOld.cs
  76. 119 0
      Assembly-CSharp/AudioMixerMgr.cs
  77. 547 0
      Assembly-CSharp/AudioSourceMgr.cs
  78. 39 0
      Assembly-CSharp/AudioSourceParent.cs
  79. 19 0
      Assembly-CSharp/AutoPiston.cs
  80. 213 0
      Assembly-CSharp/BGObjectWindow.cs
  81. 53 0
      Assembly-CSharp/BGPrefabLink.cs
  82. 24 0
      Assembly-CSharp/BGRenderSetting.cs
  83. 165 0
      Assembly-CSharp/BGWindow.cs
  84. 170 0
      Assembly-CSharp/BMFont.cs
  85. 90 0
      Assembly-CSharp/BMGlyph.cs
  86. 129 0
      Assembly-CSharp/BMSymbol.cs
  87. 98 0
      Assembly-CSharp/BacklogCtrl.cs
  88. 165 0
      Assembly-CSharp/BackupParamAccessor/BackupParamAccessor.cs
  89. 140 0
      Assembly-CSharp/BackupParamAccessor/Params.cs
  90. 14 0
      Assembly-CSharp/BackupParamAccessor/SCENE_ID.cs
  91. 57 0
      Assembly-CSharp/BaseCreatePanel.cs
  92. 174 0
      Assembly-CSharp/BaseCreateViewerCtrl.cs
  93. 58 0
      Assembly-CSharp/BaseInput2.cs
  94. 4480 0
      Assembly-CSharp/BaseKagManager.cs
  95. 67 0
      Assembly-CSharp/BaseMaidPhotoWindow.cs
  96. 68 0
      Assembly-CSharp/BaseMgr.cs
  97. 311 0
      Assembly-CSharp/BasePanelMgr.cs
  98. 238 0
      Assembly-CSharp/BasePhotoCustomObject.cs
  99. 248 0
      Assembly-CSharp/BasePhotoSubWindow.cs
  100. 442 0
      Assembly-CSharp/BasePhotoWindow.cs
  101. 255 0
      Assembly-CSharp/BasePhotoWindowManager.cs
  102. 35 0
      Assembly-CSharp/BattleScroll.cs
  103. 58 0
      Assembly-CSharp/BenchMarkScore.cs
  104. 198 0
      Assembly-CSharp/BenchResult.cs
  105. 615 0
      Assembly-CSharp/BenchSetting.cs
  106. 197 0
      Assembly-CSharp/BetSetUI.cs
  107. 222 0
      Assembly-CSharp/BetterList.cs
  108. 705 0
      Assembly-CSharp/BgMgr.cs
  109. 177 0
      Assembly-CSharp/BigThumbnail.cs
  110. 87 0
      Assembly-CSharp/Billboard.cs
  111. 468 0
      Assembly-CSharp/BjMotionControl.cs
  112. 422 0
      Assembly-CSharp/BjPlayer.cs
  113. 142 0
      Assembly-CSharp/BjVoiceMgr.cs
  114. 601 0
      Assembly-CSharp/BlackjackGame.cs
  115. 13 0
      Assembly-CSharp/BlendData.cs
  116. 55 0
      Assembly-CSharp/BodyStatusCtrl.cs
  117. 147 0
      Assembly-CSharp/BodyStatusMgr.cs
  118. 18 0
      Assembly-CSharp/BoneAttachPos.cs
  119. 7 0
      Assembly-CSharp/BoneDebug.cs
  120. 42 0
      Assembly-CSharp/BoneHair.cs
  121. 190 0
      Assembly-CSharp/BoneHair2.cs
  122. 94 0
      Assembly-CSharp/BoneHair3.cs
  123. 192 0
      Assembly-CSharp/BoneMorph.cs
  124. 24 0
      Assembly-CSharp/BoneMorphLocal.cs
  125. 383 0
      Assembly-CSharp/BoneMorph_.cs
  126. 30 0
      Assembly-CSharp/BoneScaleDef.cs
  127. 19 0
      Assembly-CSharp/ButtonEdit.cs
  128. 24 0
      Assembly-CSharp/ButtonMgr.cs
  129. 202 0
      Assembly-CSharp/ByteReader.cs
  130. 201 0
      Assembly-CSharp/CM3.cs
  131. 1737 0
      Assembly-CSharp/CMSystem.cs
  132. 123 0
      Assembly-CSharp/CMT.cs
  133. 415 0
      Assembly-CSharp/CacheBoneDataArray.cs
  134. 94 0
      Assembly-CSharp/CalendarTexture.cs
  135. 177 0
      Assembly-CSharp/CameraAnimationCtrl.cs
  136. 59 0
      Assembly-CSharp/CameraAnimationMgr.cs
  137. 48 0
      Assembly-CSharp/CameraChase.cs
  138. 1205 0
      Assembly-CSharp/CameraMain.cs
  139. 16 0
      Assembly-CSharp/CameraMgr.cs
  140. 196 0
      Assembly-CSharp/Card.cs
  141. 72 0
      Assembly-CSharp/CardData.cs
  142. 150 0
      Assembly-CSharp/CardDeck.cs
  143. 301 0
      Assembly-CSharp/CasinoDataMgr.cs
  144. 115 0
      Assembly-CSharp/CasinoItemUI.cs
  145. 287 0
      Assembly-CSharp/CasinoShopItem.cs
  146. 112 0
      Assembly-CSharp/ChallengeResult.cs
  147. 156 0
      Assembly-CSharp/CharaAppealData.cs
  148. 92 0
      Assembly-CSharp/CharaDumper.cs
  149. 16 0
      Assembly-CSharp/CharaSelectStatusMgr.cs
  150. 8 0
      Assembly-CSharp/CharaSelectStatusMgrForChuBLip.cs
  151. 1529 0
      Assembly-CSharp/CharacterMgr.cs
  152. 715 0
      Assembly-CSharp/CharacterSelectMain.cs
  153. 667 0
      Assembly-CSharp/CharacterSelectManager.cs
  154. 46 0
      Assembly-CSharp/ChatInput.cs
  155. 181 0
      Assembly-CSharp/ChipManager.cs
  156. 255 0
      Assembly-CSharp/ChipStack.cs
  157. 77 0
      Assembly-CSharp/ChuBlipManager.cs
  158. 239 0
      Assembly-CSharp/CircleCommandUI.cs
  159. 70 0
      Assembly-CSharp/CircleListSelectUI.cs
  160. 440 0
      Assembly-CSharp/ClassChangePanel.cs
  161. 139 0
      Assembly-CSharp/ClassUnit.cs
  162. 12 0
      Assembly-CSharp/ClickedEventArgs.cs
  163. 3 0
      Assembly-CSharp/ClickedEventHandler.cs
  164. 36 0
      Assembly-CSharp/ClipboardHelper.cs
  165. 25 0
      Assembly-CSharp/ColliderEvent.cs
  166. 455 0
      Assembly-CSharp/ColorPaletteManager.cs
  167. 282 0
      Assembly-CSharp/ColorPaletteUIManager.cs
  168. 112 0
      Assembly-CSharp/ColorPresetItem.cs
  169. 6 0
      Assembly-CSharp/ColorTypeRandomPresetButton.cs
  170. 168 0
      Assembly-CSharp/ColorrPaletteParts.cs
  171. 105 0
      Assembly-CSharp/ComboBox.cs
  172. 95 0
      Assembly-CSharp/CompetitiveShowAPI.cs
  173. 250 0
      Assembly-CSharp/CompetitiveShowMgr.cs
  174. 21 0
      Assembly-CSharp/ConfigCblManager.cs
  175. 33 0
      Assembly-CSharp/ConfigCblReactionSetting.cs
  176. 702 0
      Assembly-CSharp/ConfigCtrl.cs
  177. 347 0
      Assembly-CSharp/ConfigMgr.cs
  178. 893 0
      Assembly-CSharp/ConfigVRCtrl.cs
  179. 355 0
      Assembly-CSharp/ConfrontCutIn.cs
  180. 302 0
      Assembly-CSharp/ControllerShortcutSettingData.cs
  181. 403 0
      Assembly-CSharp/ControllerShortcutWindow.cs
  182. 32 0
      Assembly-CSharp/CopyHandRig.cs
  183. 211 0
      Assembly-CSharp/CostumePartsEnabledCtrl.cs
  184. 50 0
      Assembly-CSharp/CostumePartsEnabledMgr.cs
  185. 234 0
      Assembly-CSharp/CreateBGObjectSubWindow.cs
  186. 571 0
      Assembly-CSharp/CreativeRoomUIPlacementMaid.cs
  187. 212 0
      Assembly-CSharp/CsvImporter.cs
  188. 460 0
      Assembly-CSharp/DEMO_UOC_GUI.cs
  189. 289 0
      Assembly-CSharp/DailyCtrl.cs
  190. 210 0
      Assembly-CSharp/DailyMgr.cs
  191. 34 0
      Assembly-CSharp/Dance/SettingData.cs
  192. 128 0
      Assembly-CSharp/Dance/UndressItem.cs
  193. 355 0
      Assembly-CSharp/DanceBattle_Mgr.cs
  194. 64 0
      Assembly-CSharp/DanceData.cs
  195. 47 0
      Assembly-CSharp/DanceEnemyParam.cs
  196. 70 0
      Assembly-CSharp/DanceFpsCam.cs
  197. 52 0
      Assembly-CSharp/DanceIntervalDelete.cs
  198. 821 0
      Assembly-CSharp/DanceMain.cs
  199. 171 0
      Assembly-CSharp/DanceObjectDataBinary.cs
  200. 1192 0
      Assembly-CSharp/DanceSelect.cs
  201. 61 0
      Assembly-CSharp/DanceSelectManager.cs
  202. 58 0
      Assembly-CSharp/DanceSelectMusicInfo.cs
  203. 664 0
      Assembly-CSharp/DanceSetting.cs
  204. 420 0
      Assembly-CSharp/Dance_Note.cs
  205. 153 0
      Assembly-CSharp/Day_UI.cs
  206. 557 0
      Assembly-CSharp/DaytimeTaskCtrl.cs
  207. 184 0
      Assembly-CSharp/DealQueue.cs
  208. 233 0
      Assembly-CSharp/Dealer.cs
  209. 116 0
      Assembly-CSharp/DealerMaid.cs
  210. 70 0
      Assembly-CSharp/DebugVRStartup.cs
  211. 98 0
      Assembly-CSharp/Debug_mgr.cs
  212. 223 0
      Assembly-CSharp/DefValues.cs
  213. 187 0
      Assembly-CSharp/DescResultTraining.cs
  214. 10 0
      Assembly-CSharp/DescResultWork.cs
  215. 143 0
      Assembly-CSharp/DescResultYotogi.cs
  216. 258 0
      Assembly-CSharp/DescResulteBase.cs
  217. 205 0
      Assembly-CSharp/DescScheduleBase.cs
  218. 138 0
      Assembly-CSharp/DescScheduleTraining.cs
  219. 282 0
      Assembly-CSharp/DescScheduleWork.cs
  220. 163 0
      Assembly-CSharp/DescScheduleYotogi.cs
  221. 51 0
      Assembly-CSharp/DeskCustomize.cs
  222. 45 0
      Assembly-CSharp/DeskCustomizeMain.cs
  223. 50 0
      Assembly-CSharp/DeskCustomizeWindowManager.cs
  224. 369 0
      Assembly-CSharp/DeskItemWindow.cs
  225. 462 0
      Assembly-CSharp/DeskManager.cs
  226. 165 0
      Assembly-CSharp/DesktopDuplication.cs
  227. 65 0
      Assembly-CSharp/DesktopScreen.cs
  228. 407 0
      Assembly-CSharp/Detonator.cs
  229. 235 0
      Assembly-CSharp/DetonatorBurstEmitter.cs
  230. 94 0
      Assembly-CSharp/DetonatorCloudRing.cs
  231. 73 0
      Assembly-CSharp/DetonatorComponent.cs
  232. 219 0
      Assembly-CSharp/DetonatorFireball.cs
  233. 108 0
      Assembly-CSharp/DetonatorForce.cs
  234. 110 0
      Assembly-CSharp/DetonatorGlow.cs
  235. 106 0
      Assembly-CSharp/DetonatorHeatwave.cs
  236. 66 0
      Assembly-CSharp/DetonatorLight.cs
  237. 89 0
      Assembly-CSharp/DetonatorShockwave.cs
  238. 170 0
      Assembly-CSharp/DetonatorSmoke.cs
  239. 84 0
      Assembly-CSharp/DetonatorSound.cs
  240. 98 0
      Assembly-CSharp/DetonatorSparks.cs
  241. 81 0
      Assembly-CSharp/DetonatorSpray.cs
  242. 44 0
      Assembly-CSharp/DetonatorSprayHelper.cs
  243. 124 0
      Assembly-CSharp/DetonatorTest.cs
  244. 10 0
      Assembly-CSharp/DisableToDestroy.cs
  245. 39 0
      Assembly-CSharp/DownloadTexture.cs
  246. 547 0
      Assembly-CSharp/DummyVRCamera.cs
  247. 95 0
      Assembly-CSharp/DummyVRController.cs
  248. 91 0
      Assembly-CSharp/DummyVRControllerBehavior.cs
  249. 100 0
      Assembly-CSharp/DummyVRControllerButtons.cs
  250. 167 0
      Assembly-CSharp/DummyVRHandAnimator.cs
  251. 1097 0
      Assembly-CSharp/DynamicBone.cs
  252. 216 0
      Assembly-CSharp/DynamicBoneCollider.cs
  253. 85 0
      Assembly-CSharp/DynamicBoneColliderBase.cs
  254. 27 0
      Assembly-CSharp/DynamicBoneDemo1.cs
  255. 225 0
      Assembly-CSharp/DynamicBoneMuneCollider.cs
  256. 70 0
      Assembly-CSharp/DynamicBonePlaneCollider.cs
  257. 1304 0
      Assembly-CSharp/DynamicSkirtBone.cs
  258. 717 0
      Assembly-CSharp/Edit/MaidProfile.cs
  259. 358 0
      Assembly-CSharp/EditMod.cs
  260. 86 0
      Assembly-CSharp/EditOkCancel.cs
  261. 133 0
      Assembly-CSharp/EditViewReset.cs
  262. 123 0
      Assembly-CSharp/EffectWindow.cs
  263. 16 0
      Assembly-CSharp/EmptyWindow.cs
  264. 21 0
      Assembly-CSharp/EnableSwitch.cs
  265. 38 0
      Assembly-CSharp/Enabler.cs
  266. 57 0
      Assembly-CSharp/EnvelopContent.cs
  267. 42 0
      Assembly-CSharp/EquipItems.cs
  268. 29 0
      Assembly-CSharp/EquipRandomItem.cs
  269. 708 0
      Assembly-CSharp/EventDelegate.cs
  270. 170 0
      Assembly-CSharp/ExChangeUI.cs
  271. 30 0
      Assembly-CSharp/ExampleDragDropItem.cs
  272. 8 0
      Assembly-CSharp/ExampleDragDropSurface.cs
  273. 56 0
      Assembly-CSharp/ExtensionsDictionaryClass.cs
  274. 161 0
      Assembly-CSharp/FFNameDialog.cs
  275. 699 0
      Assembly-CSharp/FaceWindow.cs
  276. 1616 0
      Assembly-CSharp/Facility.cs
  277. 1290 0
      Assembly-CSharp/FacilityDataTable.cs
  278. 154 0
      Assembly-CSharp/FacilityFlag/DataArray.cs
  279. 254 0
      Assembly-CSharp/FacilityFlag/Util.cs
  280. 396 0
      Assembly-CSharp/FacilityInfoUI.cs
  281. 1185 0
      Assembly-CSharp/FacilityManager.cs
  282. 324 0
      Assembly-CSharp/FacilityPowerUpManager.cs
  283. 61 0
      Assembly-CSharp/FacilityUIList.cs
  284. 92 0
      Assembly-CSharp/FacilityUIPowerUpList.cs
  285. 184 0
      Assembly-CSharp/FacilityUIPowerUpMaterialList.cs
  286. 106 0
      Assembly-CSharp/FacilityUIPreviewParams.cs
  287. 87 0
      Assembly-CSharp/Fade.cs
  288. 48 0
      Assembly-CSharp/FadeImage.cs
  289. 66 0
      Assembly-CSharp/FadeInAndFadeOutOnGUI.cs
  290. 43 0
      Assembly-CSharp/FadeUI.cs
  291. 400 0
      Assembly-CSharp/Farm_Mng.cs
  292. 107 0
      Assembly-CSharp/FileHackGlobalGameManagers.cs
  293. 570 0
      Assembly-CSharp/FingerBlend.cs
  294. 29 0
      Assembly-CSharp/FinishSyncrho.cs
  295. 97 0
      Assembly-CSharp/FluctuationOfParameterUnit.cs
  296. 584 0
      Assembly-CSharp/FoveCamera.cs
  297. 207 0
      Assembly-CSharp/FoveEyeRayMgr.cs
  298. 69 0
      Assembly-CSharp/FpsCounter.cs
  299. 161 0
      Assembly-CSharp/FreeModeInit.cs
  300. 0 0
      Assembly-CSharp/FreeModeItemEveryday.cs

+ 22 - 0
Assembly-CSharp.sln

@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26228.4
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp\Assembly-CSharp.csproj", "{188ABBD5-5112-41C6-8EA9-ED44648D9E67}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{188ABBD5-5112-41C6-8EA9-ED44648D9E67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{188ABBD5-5112-41C6-8EA9-ED44648D9E67}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{188ABBD5-5112-41C6-8EA9-ED44648D9E67}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{188ABBD5-5112-41C6-8EA9-ED44648D9E67}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 447 - 0
Assembly-CSharp/ADVKagManager.cs

@@ -0,0 +1,447 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using script;
+using UnityEngine;
+
+public class ADVKagManager : BaseKagManager
+{
+	public ADVKagManager(TJSScript tjs, ScriptManager script_mgr, MessageWindowMgr message_mgr) : base(tjs, script_mgr)
+	{
+		this.message_mgr_ = message_mgr;
+		this.update_count_ = 0UL;
+	}
+
+	public override void Initialize()
+	{
+		NDebug.AssertNull(this.message_mgr_ != null);
+		base.Initialize();
+		this.kag_.AddTagCallBack("scenecall", new KagScript.KagTagCallBack(this.TagSceneCall));
+		this.kag_.AddTagCallBack("sceneunload", new KagScript.KagTagCallBack(this.TagSceneUnload));
+		this.kag_.AddTagCallBack("talk", new KagScript.KagTagCallBack(this.TagTalk));
+		this.kag_.AddTagCallBack("hitret", new KagScript.KagTagCallBack(this.TagHitRet));
+		this.kag_.AddTagCallBack("messagewindow", new KagScript.KagTagCallBack(this.TagMessageWindow));
+		this.kag_.AddTagCallBack("fade", new KagScript.KagTagCallBack(this.TagFade));
+		this.kag_.AddTagCallBack("choicesset", new KagScript.KagTagCallBack(this.TagChoicesSet));
+		this.kag_.AddTagCallBack("choicesrandomset", new KagScript.KagTagCallBack(this.TagChoicesRandomSet));
+		this.kag_.AddTagCallBack("choicesrandomselect", new KagScript.KagTagCallBack(this.TagChoicesRandomSelect));
+		this.kag_.AddTagCallBack("calldialog", new KagScript.KagTagCallBack(this.TagCallDialog));
+		this.kag_.AddTagCallBack("_choicesshow", new KagScript.KagTagCallBack(this.Tag_ChoicesShow));
+		this.kag_.LoadScenarioString("@macro name='choicesshow'\n\t@_choicesshow\n\t@s\n\t@endmacro\n");
+		this.kag_.Exec();
+	}
+
+	public override void Update()
+	{
+		base.Update();
+		if (this.vr_commu_mode)
+		{
+			return;
+		}
+		if (!GameMain.Instance.SysDlg.IsDecided)
+		{
+			return;
+		}
+		if (this.skip_mode && this.update_count_ % 2UL == 0UL && this.message_mgr_.IsClickAction())
+		{
+			if (!GameMain.Instance.CMSystem.MsgVoiceNoStop)
+			{
+				GameMain.Instance.SoundMgr.VoiceStopAll();
+			}
+			this.Exec();
+		}
+		else if (this.auto_mode)
+		{
+			int exitWaitCount = this.message_mgr_.GetExitWaitCount();
+			bool flag = GameMain.Instance.SoundMgr.isVoicePlaying();
+			if (!GameMain.Instance.CMSystem.MsgVoiceNoStop)
+			{
+				flag = false;
+			}
+			if (this.auto_wait_count <= exitWaitCount && this.message_mgr_.IsClickAction() && !flag)
+			{
+				if (!GameMain.Instance.CMSystem.MsgVoiceNoStop)
+				{
+					GameMain.Instance.SoundMgr.VoiceStopAll();
+				}
+				this.Exec();
+			}
+		}
+		this.update_count_ += 1UL;
+	}
+
+	public void OnClickEvent()
+	{
+		if (this.GetSettingSkipMode())
+		{
+			this.message_mgr_.CallEvent(MessageWindowMgr.MessageWindowUnderButton.Skip);
+			return;
+		}
+		if (!GameMain.Instance.CMSystem.MsgVoiceNoStop)
+		{
+			GameMain.Instance.SoundMgr.VoiceStopAll();
+		}
+		this.Exec();
+	}
+
+	public override bool Exec()
+	{
+		base.ClearExecWait();
+		if (this.IsExec() && this.message_mgr_.IsChAnimeEnabled())
+		{
+			this.message_mgr_.FinishChAnime();
+			return true;
+		}
+		return base.Exec();
+	}
+
+	public bool TagSceneCall(KagTagSupport tag_data)
+	{
+		base.CheckAbsolutelyNecessaryTag(tag_data, "scenecall", new string[]
+		{
+			"name"
+		});
+		this.tag_backup_ = tag_data.GetTagList();
+		if (tag_data.IsValid("add"))
+		{
+			GameMain.Instance.AddScene(tag_data.GetTagProperty("name").AsString());
+		}
+		else
+		{
+			this.script_mgr_.StopMotionScript();
+			this.script_mgr_.is_motion_blend = true;
+			this.message_mgr_.CloseMessageWindowPanel();
+			this.message_mgr_.SetMessageViewerActive(true);
+			this.message_mgr_.CancelSkipAndAuto();
+			GameMain.Instance.LoadScene(tag_data.GetTagProperty("name").AsString());
+		}
+		if (tag_data.IsValid("enabled"))
+		{
+			base.enabled = tag_data.GetTagProperty("enabled").AsBool();
+		}
+		return true;
+	}
+
+	public bool TagSceneUnload(KagTagSupport tag_data)
+	{
+		if (tag_data.IsValid("name"))
+		{
+			GameMain.Instance.UnloadScene(tag_data.GetTagProperty("name").AsString());
+		}
+		else
+		{
+			GameMain.Instance.UnloadPopScene();
+		}
+		return false;
+	}
+
+	public bool TagTalk(KagTagSupport tag_data)
+	{
+		this.message_mgr_.OpenMessageWindowPanel();
+		this.text_data_.talk_name = string.Empty;
+		if (tag_data.IsValid("name"))
+		{
+			this.text_data_.talk_name = ScriptManager.ReplaceCharaName(tag_data.GetTagProperty("name").AsString());
+		}
+		this.text_data_.vice_name = string.Empty;
+		if (tag_data.IsValid("real"))
+		{
+			this.text_data_.vice_name = tag_data.GetTagProperty("real").AsString();
+		}
+		this.text_data_.voice_file = string.Empty;
+		if (tag_data.IsValid("voice"))
+		{
+			this.text_data_.voice_maid = BaseKagManager.GetVoiceTargetMaid(tag_data);
+			if (this.text_data_.voice_maid != null)
+			{
+				this.text_data_.voice_maid.LipSyncEnabled(!tag_data.IsValid("np"));
+			}
+			this.text_data_.voice_file = tag_data.GetTagProperty("voice").AsString() + ".ogg";
+		}
+		return false;
+	}
+
+	public bool TagHitRet(KagTagSupport tag_data)
+	{
+		this.text_data_.text = this.kag_.GetText();
+		this.kag_.TextClear();
+		this.text_data_.text = ScriptManager.ReplaceCharaName(this.text_data_.text);
+		StringInfo stringInfo = new StringInfo(this.text_data_.text);
+		int lengthInTextElements = stringInfo.LengthInTextElements;
+		int num = lengthInTextElements - 1;
+		while (0 < num)
+		{
+			string value = stringInfo.SubstringByTextElements(num, 1);
+			if (0 > "| \u3000".IndexOf(value))
+			{
+				break;
+			}
+			this.text_data_.text = stringInfo.SubstringByTextElements(0, num);
+			num--;
+		}
+		this.text_data_.text = this.text_data_.text.Replace('|', '\n');
+		int voice_pitch = 50;
+		if (this.text_data_.voice_maid != null)
+		{
+			voice_pitch = this.text_data_.voice_maid.VoicePitch;
+		}
+		this.message_mgr_.SetText(this.text_data_.talk_name, this.text_data_.text, this.text_data_.voice_file, voice_pitch);
+		if (!string.IsNullOrEmpty(this.text_data_.voice_file))
+		{
+			GameMain.Instance.SoundMgr.VoiceStopAll();
+			if (!this.script_mgr_.adv_kag.skip_mode)
+			{
+				if (this.text_data_.voice_maid != null && this.text_data_.voice_maid.Visible)
+				{
+					this.text_data_.voice_maid.AudioMan.LoadPlay(this.text_data_.voice_file, 0f, false, false);
+				}
+				else
+				{
+					GameMain.Instance.SoundMgr.PlayDummyVoice(this.text_data_.voice_file, 0f, false, false, voice_pitch);
+				}
+			}
+			this.text_data_.voice_maid = null;
+		}
+		return true;
+	}
+
+	public bool TagMessageWindow(KagTagSupport tag_data)
+	{
+		if (tag_data.IsValid("on"))
+		{
+			this.message_mgr_.OpenMessageWindowPanel();
+		}
+		else if (tag_data.IsValid("off"))
+		{
+			this.message_mgr_.CloseMessageWindowPanel();
+		}
+		return false;
+	}
+
+	public bool TagFade(KagTagSupport tag_data)
+	{
+		base.CheckAbsolutelyNecessaryTag(tag_data, "fade", new string[]
+		{
+			"time"
+		});
+		int millisecond = tag_data.GetTagProperty("time").AsInteger();
+		float f_fTime = GameUty.MillisecondToSecond(millisecond);
+		bool flag = tag_data.IsValid("sync");
+		bool flag2 = tag_data.IsValid("color");
+		Color black = Color.black;
+		if (flag2)
+		{
+			string[] array = tag_data.GetTagProperty("color").AsString().Split(new char[]
+			{
+				':'
+			});
+			black.r = float.Parse(array[0]) / 255f;
+			black.g = float.Parse(array[1]) / 255f;
+			black.b = float.Parse(array[2]) / 255f;
+		}
+		if (tag_data.IsValid("in"))
+		{
+			this.script_mgr_.is_motion_blend = true;
+			GameMain.Instance.MainCamera.FadeIn(f_fTime, false, null, true, !flag2, black);
+		}
+		else
+		{
+			this.script_mgr_.is_motion_blend = false;
+			GameMain.Instance.MainCamera.FadeOut(f_fTime, false, null, true, black);
+		}
+		this.message_mgr_.ClearText();
+		if (flag)
+		{
+			base.SetFadeWait(true);
+		}
+		return flag;
+	}
+
+	public bool TagChoicesSet(KagTagSupport tag_data)
+	{
+		base.CheckAbsolutelyNecessaryTag(tag_data, "choicesset", new string[]
+		{
+			"text",
+			"label"
+		});
+		string key = this.text_data_.text = ScriptManager.ReplaceCharaName(tag_data.GetTagProperty("text").AsString());
+		bool value = true;
+		if (tag_data.IsValid("enabled"))
+		{
+			value = tag_data.GetTagProperty("enabled").AsBool();
+		}
+		this.choise_data_.Add(new KeyValuePair<string, KeyValuePair<string, bool>>(key, new KeyValuePair<string, bool>(tag_data.GetTagProperty("label").AsString(), value)));
+		return false;
+	}
+
+	public bool TagChoicesRandomSet(KagTagSupport tag_data)
+	{
+		base.CheckAbsolutelyNecessaryTag(tag_data, "choicesrandomse", new string[]
+		{
+			"text",
+			"label"
+		});
+		string key = this.text_data_.text = ScriptManager.ReplaceCharaName(tag_data.GetTagProperty("text").AsString());
+		bool value = true;
+		if (tag_data.IsValid("enabled"))
+		{
+			value = tag_data.GetTagProperty("enabled").AsBool();
+		}
+		this.choise_random_data_.Add(new KeyValuePair<string, KeyValuePair<string, bool>>(key, new KeyValuePair<string, bool>(tag_data.GetTagProperty("label").AsString(), value)));
+		return false;
+	}
+
+	public bool TagChoicesRandomSelect(KagTagSupport tag_data)
+	{
+		base.CheckAbsolutelyNecessaryTag(tag_data, "choicesrandomselect", new string[]
+		{
+			"num"
+		});
+		int num = tag_data.GetTagProperty("num").AsInteger();
+		if (this.choise_random_data_.Count < num)
+		{
+			num = this.choise_random_data_.Count;
+		}
+		System.Random random = new System.Random();
+		int i = this.choise_random_data_.Count;
+		while (i > 1)
+		{
+			i--;
+			int index = random.Next(i + 1);
+			KeyValuePair<string, KeyValuePair<string, bool>> value = this.choise_random_data_[index];
+			this.choise_random_data_[index] = this.choise_random_data_[i];
+			this.choise_random_data_[i] = value;
+		}
+		for (int j = 0; j < num; j++)
+		{
+			this.choise_data_.Add(this.choise_random_data_[j]);
+		}
+		this.choise_random_data_.Clear();
+		return false;
+	}
+
+	public bool TagCallDialog(KagTagSupport tag_data)
+	{
+		base.CheckAbsolutelyNecessaryTag(tag_data, "calldialog", new string[]
+		{
+			"text",
+			"label"
+		});
+		string label = tag_data.GetTagProperty("label").AsString();
+		GameMain.Instance.SysDlg.Show(tag_data.GetTagProperty("text").AsString(), SystemDialog.TYPE.OK, delegate
+		{
+			GameMain.Instance.SysDlg.Close();
+			this.kag_.GoToLabel(label);
+			this.kag_.Exec();
+		}, null);
+		return false;
+	}
+
+	public bool Tag_ChoicesShow(KagTagSupport tag_data)
+	{
+		Action<string, string> onClickCallBack = delegate(string choices_title, string label_name)
+		{
+			string text = "=> " + choices_title;
+			this.message_mgr_.AddBackLog(string.Empty, text, string.Empty, 0);
+			this.kag_.GoToLabel(label_name);
+			this.kag_.Exec();
+		};
+		this.message_mgr_.CreateSelectButtons(this.choise_data_, onClickCallBack);
+		this.choise_data_.Clear();
+		return false;
+	}
+
+	protected override void PlayMaidMotion(Maid maid, string fn, bool additive = false, bool loop = false, bool boAddQue = false, float val = 0.5f)
+	{
+		if (maid == null || maid.body0 == null || !maid.body0.isLoadedBody)
+		{
+			this.script_mgr_.StopMotionScript();
+			return;
+		}
+		if (!boAddQue)
+		{
+			WaitEventList waitEventList = base.GetWaitEventList("motion_script");
+			waitEventList.Clear();
+		}
+		this.script_mgr_.StopMotionScript();
+		base.PlayMaidMotion(maid, fn, additive, loop, boAddQue, val);
+	}
+
+	public void SetSettingSkipMode(bool is_skip)
+	{
+		this.skip_mode_ = is_skip;
+	}
+
+	public bool GetSettingSkipMode()
+	{
+		return this.skip_mode_;
+	}
+
+	public bool skip_mode
+	{
+		get
+		{
+			return this.skip_mode_ || GameMain.Instance.IsForceSkip();
+		}
+	}
+
+	public bool auto_mode { get; set; }
+
+	public bool vr_commu_mode { get; set; }
+
+	public int auto_wait_count
+	{
+		get
+		{
+			return (100 - GameMain.Instance.CMSystem.MsgAutoSpeed) * 30;
+		}
+	}
+
+	public Dictionary<string, string> tag_backup
+	{
+		get
+		{
+			return this.tag_backup_;
+		}
+	}
+
+	public override string GetKagClassName()
+	{
+		return "ADV kag";
+	}
+
+	public MessageWindowMgr MessageWindowMgr
+	{
+		get
+		{
+			return this.message_mgr_;
+		}
+	}
+
+	private bool skip_mode_;
+
+	private MessageWindowMgr message_mgr_;
+
+	private ADVKagManager.TextData text_data_;
+
+	private List<KeyValuePair<string, KeyValuePair<string, bool>>> choise_data_ = new List<KeyValuePair<string, KeyValuePair<string, bool>>>();
+
+	private List<KeyValuePair<string, KeyValuePair<string, bool>>> choise_random_data_ = new List<KeyValuePair<string, KeyValuePair<string, bool>>>();
+
+	private ulong update_count_;
+
+	private Dictionary<string, string> tag_backup_ = new Dictionary<string, string>();
+
+	protected struct TextData
+	{
+		public string talk_name;
+
+		public string text;
+
+		public string voice_file;
+
+		public string vice_name;
+
+		public Maid voice_maid;
+	}
+}

+ 152 - 0
Assembly-CSharp/AMAction.cs

@@ -0,0 +1,152 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[Serializable]
+public class AMAction : ScriptableObject
+{
+	public AnimationCurve easeCurve
+	{
+		get
+		{
+			if (this._cachedEaseCurve == null || this._cachedEaseCurve.keys.Length <= 0)
+			{
+				this._cachedEaseCurve = this.getCustomEaseCurve();
+			}
+			return this._cachedEaseCurve;
+		}
+	}
+
+	public virtual string ToString(int codeLanguage, int frameRate)
+	{
+		return "(Error: No override for ToString)";
+	}
+
+	public virtual void execute(int frameRate, float delayModifier, string trackId)
+	{
+		Debug.LogError("Animator: No override for execute.");
+	}
+
+	public float getWaitTime(int frameRate, float delay)
+	{
+		return ((float)this.startFrame - 1f) / (float)frameRate - delay;
+	}
+
+	public virtual int getNumberOfFrames()
+	{
+		return 1;
+	}
+
+	public void destroy()
+	{
+		UnityEngine.Object.DestroyImmediate(this);
+	}
+
+	public virtual AnimatorTimeline.JSONAction getJSONAction(int frameRate)
+	{
+		return null;
+	}
+
+	public void setCustomEase(AnimationCurve curve)
+	{
+		this.customEase = new List<float>();
+		foreach (Keyframe keyframe in curve.keys)
+		{
+			this.customEase.Add(keyframe.time);
+			this.customEase.Add(keyframe.value);
+			this.customEase.Add(keyframe.inTangent);
+			this.customEase.Add(keyframe.outTangent);
+		}
+	}
+
+	public AnimationCurve getCustomEaseCurve()
+	{
+		AnimationCurve animationCurve = new AnimationCurve();
+		if (this.customEase.Count < 0)
+		{
+			return animationCurve;
+		}
+		if (this.customEase.Count % 4 != 0)
+		{
+			Debug.LogError("Animator: Error retrieving custom ease.");
+			return animationCurve;
+		}
+		for (int i = 0; i < this.customEase.Count; i += 4)
+		{
+			animationCurve.AddKey(new Keyframe(this.customEase[i], this.customEase[i + 1], this.customEase[i + 2], this.customEase[i + 3]));
+		}
+		return animationCurve;
+	}
+
+	public bool hasCustomEase()
+	{
+		return this.easeType == 32;
+	}
+
+	public string getEaseString(int codeLanguage)
+	{
+		string text = string.Empty;
+		if (this.hasCustomEase())
+		{
+			if (codeLanguage == 0)
+			{
+				text += "\"easecurve\", AMTween.GenerateCurve(new float[]{";
+				for (int i = 0; i < this.easeCurve.keys.Length; i++)
+				{
+					text = text + this.easeCurve.keys[i].time.ToString() + "f, ";
+					text = text + this.easeCurve.keys[i].value.ToString() + "f, ";
+					text = text + this.easeCurve.keys[i].inTangent.ToString() + "f, ";
+					text = text + this.easeCurve.keys[i].outTangent.ToString() + "f";
+					if (i < this.easeCurve.keys.Length - 1)
+					{
+						text += ", ";
+					}
+				}
+				text += "})";
+			}
+			else
+			{
+				text += "\"easecurve\": AMTween.GenerateCurve([";
+				for (int j = 0; j < this.easeCurve.keys.Length; j++)
+				{
+					text = text + this.easeCurve.keys[j].time.ToString() + ", ";
+					text = text + this.easeCurve.keys[j].value.ToString() + ", ";
+					text = text + this.easeCurve.keys[j].inTangent.ToString() + ", ";
+					text += this.easeCurve.keys[j].outTangent.ToString();
+					if (j < this.easeCurve.keys.Length - 1)
+					{
+						text += ", ";
+					}
+				}
+				text += "])";
+			}
+		}
+		else
+		{
+			AMTween.EaseType easeType = (AMTween.EaseType)this.easeType;
+			text = text + "\"easetype\", \"" + easeType.ToString() + "\"";
+		}
+		return text;
+	}
+
+	public void setupJSONActionEase(AnimatorTimeline.JSONAction a)
+	{
+		a.easeType = this.easeType;
+		if (this.hasCustomEase())
+		{
+			a.customEase = this.customEase.ToArray();
+		}
+		else
+		{
+			a.customEase = new float[0];
+		}
+	}
+
+	public int startFrame;
+
+	public int easeType = 21;
+
+	public List<float> customEase = new List<float>();
+
+	private AnimationCurve _cachedEaseCurve;
+}

+ 131 - 0
Assembly-CSharp/AMAnimationAction.cs

@@ -0,0 +1,131 @@
+using System;
+using UnityEngine;
+
+[Serializable]
+public class AMAnimationAction : AMAction
+{
+	public override void execute(int frameRate, float delay, string trackId)
+	{
+		if (!this.amClip || !this.obj)
+		{
+			return;
+		}
+		AMTween.PlayAnimation(this.obj, AMTween.Hash(new object[]
+		{
+			"trackid",
+			trackId,
+			"delay",
+			base.getWaitTime(frameRate, delay),
+			"animation",
+			this.amClip.name,
+			"wrapmode",
+			this.wrapMode,
+			"crossfade",
+			this.crossfade,
+			"fadeLength",
+			this.crossfadeTime
+		}));
+	}
+
+	public override string ToString(int codeLanguage, int frameRate)
+	{
+		string text = string.Empty;
+		if (!this.amClip)
+		{
+			return null;
+		}
+		if (codeLanguage == 0)
+		{
+			string text2 = text;
+			text = string.Concat(new object[]
+			{
+				text2,
+				"AMTween.PlayAnimation(obj.gameObject, AMTween.Hash (\"delay\", ",
+				base.getWaitTime(frameRate, 0f),
+				"f, \"animation\", \"",
+				this.amClip.name,
+				"\", \"wrapmode\", WrapMode.",
+				this.wrapMode.ToString(),
+				",\"crossfade\", ",
+				this.crossfade.ToString().ToLower()
+			});
+			if (this.crossfade)
+			{
+				text = text + ", \"fadeLength\", " + this.crossfadeTime.ToString() + "f";
+			}
+			text += "));";
+		}
+		else
+		{
+			string text2 = text;
+			text = string.Concat(new object[]
+			{
+				text2,
+				"AMTween.PlayAnimation(obj.gameObject, {\"delay\": ",
+				base.getWaitTime(frameRate, 0f),
+				", \"animation\": \"",
+				this.amClip.name,
+				"\", \"wrapmode\": WrapMode.",
+				this.wrapMode.ToString(),
+				",\"crossfade\": ",
+				this.crossfade.ToString().ToLower()
+			});
+			if (this.crossfade)
+			{
+				text = text + ", \"fadeLength\": " + this.crossfadeTime.ToString();
+			}
+			text += "});";
+		}
+		return text;
+	}
+
+	public int getNumberOfFrames(int frameRate)
+	{
+		if (!this.amClip)
+		{
+			return -1;
+		}
+		if (this.wrapMode != WrapMode.Once)
+		{
+			return -1;
+		}
+		return Mathf.CeilToInt(this.amClip.length * (float)frameRate);
+	}
+
+	public override AnimatorTimeline.JSONAction getJSONAction(int frameRate)
+	{
+		if (!this.amClip || !this.obj)
+		{
+			return null;
+		}
+		return new AnimatorTimeline.JSONAction
+		{
+			method = "playanimation",
+			go = this.obj.gameObject.name,
+			delay = base.getWaitTime(frameRate, 0f),
+			strings = new string[]
+			{
+				this.amClip.name
+			},
+			floats = new float[]
+			{
+				(float)this.wrapMode,
+				this.crossfadeTime
+			},
+			bools = new bool[]
+			{
+				this.crossfade
+			}
+		};
+	}
+
+	public AnimationClip amClip;
+
+	public WrapMode wrapMode;
+
+	public GameObject obj;
+
+	public bool crossfade;
+
+	public float crossfadeTime;
+}

+ 108 - 0
Assembly-CSharp/AMAnimationKey.cs

@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[Serializable]
+public class AMAnimationKey : AMKey
+{
+	public bool setWrapMode(WrapMode wrapMode)
+	{
+		if (this.wrapMode != wrapMode)
+		{
+			this.wrapMode = wrapMode;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setAmClip(AnimationClip clip)
+	{
+		if (this.amClip != clip)
+		{
+			this.amClip = clip;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setCrossFade(bool crossfade)
+	{
+		if (this.crossfade != crossfade)
+		{
+			this.crossfade = crossfade;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setCrossfadeTime(float crossfadeTime)
+	{
+		if (this.crossfadeTime != crossfadeTime)
+		{
+			this.crossfadeTime = crossfadeTime;
+			return true;
+		}
+		return false;
+	}
+
+	public override AMKey CreateClone()
+	{
+		AMAnimationKey amanimationKey = ScriptableObject.CreateInstance<AMAnimationKey>();
+		amanimationKey.frame = this.frame;
+		amanimationKey.wrapMode = this.wrapMode;
+		amanimationKey.amClip = this.amClip;
+		amanimationKey.crossfade = this.crossfade;
+		return amanimationKey;
+	}
+
+	public override void CreateFromStringData(string data_text)
+	{
+		string[] array = data_text.Split(new char[]
+		{
+			':'
+		});
+		if (array.Length == 0 || array[0] != "Animation")
+		{
+			return;
+		}
+		NDebug.Assert(this.obj != null, "AMAnimationKey::CreateFromStringData\nobjがnullです");
+		this.amClip = null;
+		int num = 1;
+		this.frame = int.Parse(array[num++]);
+		this.wrapMode = (WrapMode)Enum.Parse(typeof(WrapMode), array[num++]);
+		bool flag = bool.Parse(array[num++]);
+		if (flag)
+		{
+			Animation[] components = this.obj.GetComponents<Animation>();
+			NDebug.Assert(components.Length != 0, "Animation取得失敗");
+			string str = array[num++];
+			NDebug.Assert(this.amClip != null, "AnimationClip[" + str + "]の取得に失敗しました");
+		}
+		this.crossfade = bool.Parse(array[num++]);
+	}
+
+	public override string ToStringData()
+	{
+		List<string> list = new List<string>();
+		list.Add("Animation");
+		list.Add(this.frame.ToString());
+		list.Add(this.wrapMode.ToString());
+		list.Add((this.amClip != null).ToString());
+		string text = list[0];
+		for (int i = 1; i < list.Count; i++)
+		{
+			text = text + ":" + list[i];
+		}
+		return text;
+	}
+
+	public WrapMode wrapMode;
+
+	public GameObject obj;
+
+	public AnimationClip amClip;
+
+	public bool crossfade = true;
+
+	public float crossfadeTime = 0.3f;
+}

+ 145 - 0
Assembly-CSharp/AMAnimationTrack.cs

@@ -0,0 +1,145 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[Serializable]
+public class AMAnimationTrack : AMTrack
+{
+	public override string getTrackType()
+	{
+		return "Animation";
+	}
+
+	public bool setObject(GameObject obj)
+	{
+		if (this.obj != obj)
+		{
+			this.obj = obj;
+			return true;
+		}
+		return false;
+	}
+
+	public void addKey(int _frame, AnimationClip _clip, WrapMode _wrapMode)
+	{
+		foreach (AMKey amkey in this.keys)
+		{
+			AMAnimationKey amanimationKey = (AMAnimationKey)amkey;
+			if (amanimationKey.frame == _frame)
+			{
+				amanimationKey.amClip = _clip;
+				amanimationKey.wrapMode = _wrapMode;
+				this.updateCache();
+				return;
+			}
+		}
+		AMAnimationKey amanimationKey2 = ScriptableObject.CreateInstance<AMAnimationKey>();
+		amanimationKey2.frame = _frame;
+		amanimationKey2.amClip = _clip;
+		amanimationKey2.wrapMode = _wrapMode;
+		this.keys.Add(amanimationKey2);
+		this.updateCache();
+	}
+
+	public override void updateCache()
+	{
+		base.destroyCache();
+		this.cache = new List<AMAction>();
+		base.sortKeys();
+		for (int i = 0; i < this.keys.Count; i++)
+		{
+			AMAnimationAction amanimationAction = ScriptableObject.CreateInstance<AMAnimationAction>();
+			amanimationAction.startFrame = this.keys[i].frame;
+			amanimationAction.obj = this.obj;
+			amanimationAction.amClip = (this.keys[i] as AMAnimationKey).amClip;
+			amanimationAction.wrapMode = (this.keys[i] as AMAnimationKey).wrapMode;
+			amanimationAction.crossfade = (this.keys[i] as AMAnimationKey).crossfade;
+			amanimationAction.crossfadeTime = (this.keys[i] as AMAnimationKey).crossfadeTime;
+			this.cache.Add(amanimationAction);
+		}
+		base.updateCache();
+	}
+
+	public void previewFrame(float frame, float frameRate)
+	{
+		if (!this.obj)
+		{
+			return;
+		}
+		if (this.cache.Count <= 0)
+		{
+			return;
+		}
+		bool flag = false;
+		for (int i = this.cache.Count - 1; i >= 0; i--)
+		{
+			if ((float)this.cache[i].startFrame <= frame)
+			{
+				AnimationClip amClip = (this.cache[i] as AMAnimationAction).amClip;
+				if (amClip)
+				{
+					amClip.wrapMode = (this.cache[i] as AMAnimationAction).wrapMode;
+					amClip.SampleAnimation(this.obj, this.getTime(frameRate, frame - (float)this.cache[i].startFrame));
+				}
+				flag = true;
+				break;
+			}
+		}
+		Animation component = this.obj.GetComponent<Animation>();
+		if (!flag && component.clip)
+		{
+			component.clip.SampleAnimation(this.obj, 0f);
+		}
+	}
+
+	public float getTime(float frameRate, float numberOfFrames)
+	{
+		return numberOfFrames / frameRate;
+	}
+
+	public override AnimatorTimeline.JSONInit getJSONInit()
+	{
+		return null;
+	}
+
+	public override List<GameObject> getDependencies()
+	{
+		List<GameObject> list = new List<GameObject>();
+		if (this.obj)
+		{
+			list.Add(this.obj);
+		}
+		return list;
+	}
+
+	public override List<GameObject> updateDependencies(List<GameObject> newReferences, List<GameObject> oldReferences)
+	{
+		List<GameObject> list = new List<GameObject>();
+		if (!this.obj)
+		{
+			return list;
+		}
+		int i = 0;
+		while (i < oldReferences.Count)
+		{
+			if (oldReferences[i] == this.obj)
+			{
+				if (!newReferences[i].GetComponent(typeof(Animation)))
+				{
+					Debug.LogWarning("Animator: Animation Track component 'Animation' not found on new reference for GameObject '" + this.obj.name + "'. Duplicate not replaced.");
+					list.Add(oldReferences[i]);
+					return list;
+				}
+				this.obj = newReferences[i];
+				break;
+			}
+			else
+			{
+				i++;
+			}
+		}
+		return list;
+	}
+
+	public GameObject obj;
+}

+ 111 - 0
Assembly-CSharp/AMAudioAction.cs

@@ -0,0 +1,111 @@
+using System;
+using UnityEngine;
+
+[Serializable]
+public class AMAudioAction : AMAction
+{
+	public override void execute(int frameRate, float delay, string trackId)
+	{
+		if (!this.audioSource || !this.audioClip)
+		{
+			return;
+		}
+		AMTween.PlayAudio(this.audioSource, AMTween.Hash(new object[]
+		{
+			"trackid",
+			trackId,
+			"delay",
+			base.getWaitTime(frameRate, delay),
+			"audioclip",
+			this.audioClip,
+			"loop",
+			this.loop
+		}));
+	}
+
+	public string ToString(int codeLanguage, int frameRate, string audioClipVarName)
+	{
+		if (this.audioClip == null || this.audioSource == null)
+		{
+			return null;
+		}
+		string text = string.Empty;
+		if (codeLanguage == 0)
+		{
+			string text2 = text;
+			text = string.Concat(new object[]
+			{
+				text2,
+				"AMTween.PlayAudio(obj.gameObject, AMTween.Hash (\"delay\", ",
+				base.getWaitTime(frameRate, 0f),
+				"f, \"audioclip\", ",
+				audioClipVarName,
+				", \"loop\", ",
+				this.loop.ToString().ToLower(),
+				"));"
+			});
+		}
+		else
+		{
+			string text2 = text;
+			text = string.Concat(new object[]
+			{
+				text2,
+				"AMTween.PlayAudio(obj.gameObject, {\"delay\": ",
+				base.getWaitTime(frameRate, 0f),
+				", \"audioclip\": ",
+				audioClipVarName,
+				", \"loop\": ",
+				this.loop.ToString().ToLower(),
+				"});"
+			});
+		}
+		return text;
+	}
+
+	public ulong getTimeInSamples(int frequency, float time)
+	{
+		return (ulong)((float)(44100 / frequency * frequency) * time);
+	}
+
+	public int getNumberOfFrames(int frameRate)
+	{
+		if (!this.audioClip)
+		{
+			return -1;
+		}
+		if (this.loop)
+		{
+			return -1;
+		}
+		return Mathf.CeilToInt(this.audioClip.length * (float)frameRate);
+	}
+
+	public override AnimatorTimeline.JSONAction getJSONAction(int frameRate)
+	{
+		if (!this.audioSource || !this.audioClip)
+		{
+			return null;
+		}
+		return new AnimatorTimeline.JSONAction
+		{
+			method = "playaudio",
+			go = this.audioSource.gameObject.name,
+			delay = base.getWaitTime(frameRate, 0f),
+			strings = new string[]
+			{
+				this.audioClip.name
+			},
+			bools = new bool[]
+			{
+				this.loop
+			}
+		};
+	}
+
+	public AudioSource audioSource;
+
+	public AudioClip audioClip;
+
+	public bool loop;
+}

+ 39 - 0
Assembly-CSharp/AMAudioKey.cs

@@ -0,0 +1,39 @@
+using System;
+using UnityEngine;
+
+[Serializable]
+public class AMAudioKey : AMKey
+{
+	public bool setAudioClip(AudioClip audioClip)
+	{
+		if (this.audioClip != audioClip)
+		{
+			this.audioClip = audioClip;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setLoop(bool loop)
+	{
+		if (this.loop != loop)
+		{
+			this.loop = loop;
+			return true;
+		}
+		return false;
+	}
+
+	public override AMKey CreateClone()
+	{
+		AMAudioKey amaudioKey = ScriptableObject.CreateInstance<AMAudioKey>();
+		amaudioKey.frame = this.frame;
+		amaudioKey.audioClip = this.audioClip;
+		amaudioKey.loop = this.loop;
+		return amaudioKey;
+	}
+
+	public AudioClip audioClip;
+
+	public bool loop;
+}

+ 213 - 0
Assembly-CSharp/AMAudioTrack.cs

@@ -0,0 +1,213 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[Serializable]
+public class AMAudioTrack : AMTrack
+{
+	public override string getTrackType()
+	{
+		return "Audio";
+	}
+
+	public bool setAudioSource(AudioSource audioSource)
+	{
+		if (this.audioSource != audioSource)
+		{
+			this.audioSource = audioSource;
+			return true;
+		}
+		return false;
+	}
+
+	public void ChangeAudioSource(AudioSource audio)
+	{
+		if (this.setAudioSource(audio))
+		{
+			for (int i = 0; i < this.keys.Count; i++)
+			{
+				(this.keys[i] as AMAudioKey).audioClip = this.audioSource.clip;
+			}
+			this.updateCache();
+		}
+	}
+
+	public override void updateCache()
+	{
+		this.asName = this.audioSource.name;
+		base.destroyCache();
+		this.cache = new List<AMAction>();
+		base.sortKeys();
+		for (int i = 0; i < this.keys.Count; i++)
+		{
+			AMAudioAction amaudioAction = ScriptableObject.CreateInstance<AMAudioAction>();
+			amaudioAction.startFrame = this.keys[i].frame;
+			amaudioAction.audioSource = this.audioSource;
+			amaudioAction.audioClip = (this.keys[i] as AMAudioKey).audioClip;
+			amaudioAction.loop = (this.keys[i] as AMAudioKey).loop;
+			this.cache.Add(amaudioAction);
+		}
+		base.updateCache();
+	}
+
+	public void addKey(int _frame, AudioClip _clip, bool _loop)
+	{
+		this.asName = this.audioSource.name;
+		foreach (AMKey amkey in this.keys)
+		{
+			AMAudioKey amaudioKey = (AMAudioKey)amkey;
+			if (amaudioKey.frame == _frame)
+			{
+				amaudioKey.audioClip = _clip;
+				amaudioKey.loop = _loop;
+				this.updateCache();
+				return;
+			}
+		}
+		AMAudioKey amaudioKey2 = ScriptableObject.CreateInstance<AMAudioKey>();
+		amaudioKey2.frame = _frame;
+		amaudioKey2.audioClip = _clip;
+		amaudioKey2.loop = _loop;
+		this.keys.Add(amaudioKey2);
+		this.updateCache();
+	}
+
+	public override void previewFrame(float frame, AMTrack extraTrack = null)
+	{
+		if (this.audioSource != null)
+		{
+			this.asName = this.audioSource.name;
+		}
+	}
+
+	public void sampleAudio(float frame, float speed, int frameRate)
+	{
+		if (!this.audioSource)
+		{
+			return;
+		}
+		int i = this.cache.Count - 1;
+		while (i >= 0)
+		{
+			if (!(this.cache[i] as AMAudioAction).audioClip)
+			{
+				return;
+			}
+			if ((float)this.cache[i].startFrame <= frame)
+			{
+				float num = (frame - (float)this.cache[i].startFrame) / (float)frameRate;
+				if (!(this.cache[i] as AMAudioAction).loop && num > (this.cache[i] as AMAudioAction).audioClip.length)
+				{
+					return;
+				}
+				num %= (this.cache[i] as AMAudioAction).audioClip.length;
+				if (this.audioSource.isPlaying)
+				{
+					this.audioSource.Stop();
+				}
+				this.audioSource.clip = null;
+				this.audioSource.clip = (this.cache[i] as AMAudioAction).audioClip;
+				this.audioSource.loop = (this.cache[i] as AMAudioAction).loop;
+				this.audioSource.time = num;
+				this.audioSource.pitch = speed;
+				this.audioSource.Play();
+				return;
+			}
+			else
+			{
+				i--;
+			}
+		}
+	}
+
+	public void sampleAudioAtFrame(int frame, float speed, int frameRate)
+	{
+		if (!this.audioSource)
+		{
+			return;
+		}
+		for (int i = this.cache.Count - 1; i >= 0; i--)
+		{
+			if (this.cache[i].startFrame == frame)
+			{
+				if (this.audioSource.isPlaying)
+				{
+					this.audioSource.Stop();
+				}
+				this.audioSource.clip = null;
+				this.audioSource.clip = (this.cache[i] as AMAudioAction).audioClip;
+				this.audioSource.time = 0f;
+				this.audioSource.loop = (this.cache[i] as AMAudioAction).loop;
+				this.audioSource.pitch = speed;
+				this.audioSource.Play();
+				return;
+			}
+		}
+	}
+
+	public void stopAudio()
+	{
+		if (!this.audioSource)
+		{
+			return;
+		}
+		if (this.audioSource.isPlaying)
+		{
+			this.audioSource.Stop();
+		}
+	}
+
+	public ulong getTimeInSamples(int frequency, float time)
+	{
+		return (ulong)((float)(44100 / frequency * frequency) * time);
+	}
+
+	public override AnimatorTimeline.JSONInit getJSONInit()
+	{
+		return null;
+	}
+
+	public override List<GameObject> getDependencies()
+	{
+		List<GameObject> list = new List<GameObject>();
+		if (this.audioSource)
+		{
+			list.Add(this.audioSource.gameObject);
+		}
+		return list;
+	}
+
+	public override List<GameObject> updateDependencies(List<GameObject> newReferences, List<GameObject> oldReferences)
+	{
+		List<GameObject> list = new List<GameObject>();
+		if (!this.audioSource)
+		{
+			return list;
+		}
+		int i = 0;
+		while (i < oldReferences.Count)
+		{
+			if (oldReferences[i] == this.audioSource.gameObject)
+			{
+				AudioSource exists = (AudioSource)newReferences[i].GetComponent(typeof(AudioSource));
+				if (!exists)
+				{
+					Debug.LogWarning("Animator: Audio Track component 'AudioSource' not found on new reference for GameObject '" + this.audioSource.gameObject.name + "'. Duplicate not replaced.");
+					list.Add(oldReferences[i]);
+					return list;
+				}
+				this.audioSource = exists;
+				break;
+			}
+			else
+			{
+				i++;
+			}
+		}
+		return list;
+	}
+
+	public AudioSource audioSource;
+
+	public string asName;
+}

+ 134 - 0
Assembly-CSharp/AMBinaryDataBaseObject.cs

@@ -0,0 +1,134 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+public abstract class AMBinaryDataBaseObject
+{
+	public abstract void Update(int frame);
+
+	public int GetIndex(int frame)
+	{
+		if (frame < this.prev_frame)
+		{
+			this.prev_loop = 0;
+			this.prev_index = 0;
+		}
+		this.prev_frame = frame;
+		int value = this.prev_index;
+		for (int i = this.prev_loop; i < this.index_array.Length; i++)
+		{
+			if (frame <= this.index_array[i].Key)
+			{
+				this.prev_loop = i;
+				break;
+			}
+			value = this.index_array[i].Value;
+		}
+		this.prev_index = value;
+		return value;
+	}
+
+	public virtual void Write(BinaryWriter binary)
+	{
+		binary.Write(this.type_name);
+		binary.Write(this.track_id);
+		binary.Write(this.total_frame);
+		binary.Write(this.object_tree_path);
+	}
+
+	public virtual void Read(BinaryReader binary)
+	{
+		this.track_id = binary.ReadInt32();
+		this.total_frame = binary.ReadInt32();
+		this.object_tree_path = binary.ReadString();
+		string[] array = this.object_tree_path.Split(new char[]
+		{
+			'/'
+		});
+		GameObject gameObject = GameObject.Find(array[0]);
+		if (gameObject == null)
+		{
+			NDebug.Assert(array[0] + " がシーン上に見つかりません。", false);
+		}
+		Transform transform = gameObject.transform;
+		for (int i = 1; i < array.Length; i++)
+		{
+			Transform transform2 = transform.Find(array[i]);
+			if (transform2 == null)
+			{
+				transform = null;
+				break;
+			}
+			transform = transform2;
+		}
+		this.obj_ = ((!(transform != null)) ? null : transform.gameObject);
+		NDebug.Assert(this.obj_, "オブジェクトが見つかりませんでした:" + this.object_tree_path);
+		this.index_array = null;
+		this.prev_frame = -1;
+		this.prev_loop = (this.prev_index = 0);
+	}
+
+	public abstract void SetGameObject(GameObject new_obj);
+
+	public bool enabled_index
+	{
+		get
+		{
+			return this.index_array != null;
+		}
+	}
+
+	public T[] Compression<T>(ref T[] val_array, out List<KeyValuePair<int, int>> dest_index_list) where T : struct
+	{
+		dest_index_list = new List<KeyValuePair<int, int>>();
+		dest_index_list.Clear();
+		dest_index_list.Add(new KeyValuePair<int, int>(0, 0));
+		int num = 0;
+		T item = val_array[0];
+		List<T> list = new List<T>();
+		list.Add(item);
+		num++;
+		for (int i = 0; i < val_array.Length; i++)
+		{
+			if (!item.Equals(val_array[i]))
+			{
+				dest_index_list.Add(new KeyValuePair<int, int>(i - 1, num));
+				item = val_array[i];
+				list.Add(item);
+				num++;
+			}
+		}
+		return list.ToArray();
+	}
+
+	public abstract string type_name { get; }
+
+	public GameObject obj
+	{
+		get
+		{
+			return this.obj_;
+		}
+		set
+		{
+			this.obj_ = value;
+		}
+	}
+
+	public string object_tree_path;
+
+	public int total_frame;
+
+	public int track_id;
+
+	public KeyValuePair<int, int>[] index_array;
+
+	private GameObject obj_;
+
+	private int prev_frame = -1;
+
+	private int prev_loop;
+
+	private int prev_index;
+}

+ 144 - 0
Assembly-CSharp/AMBinaryMethod.cs

@@ -0,0 +1,144 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using UnityEngine;
+
+public class AMBinaryMethod : AMBinaryDataBaseObject
+{
+	public static bool CheckType(AMTrack track)
+	{
+		return !(track == null) && track.getTrackType() == AMBinaryMethod.kTypeName;
+	}
+
+	public override void Update(int frame)
+	{
+		if (frame < this.prev_frame)
+		{
+			this.prev_loop = 0;
+		}
+		this.prev_frame = frame;
+		for (int i = this.prev_loop; i < this.method_data_array.Length; i++)
+		{
+			if (this.method_data_array[i].start_flame > frame)
+			{
+				this.prev_loop = i;
+				break;
+			}
+			if (!this.method_data_array[i].has_execution)
+			{
+				this.method_data_array[i].has_execution = true;
+				this.method_data_array[i].method_info.Invoke(this.method_data_array[i].component, this.method_data_array[i].object_param_array);
+			}
+		}
+	}
+
+	public override void Write(BinaryWriter binary)
+	{
+		base.Write(binary);
+		binary.Write(this.method_data_array.Length);
+		for (int i = 0; i < this.method_data_array.Length; i++)
+		{
+			binary.Write(this.method_data_array[i].start_flame);
+			binary.Write(this.method_data_array[i].component_name);
+			binary.Write(this.method_data_array[i].method_name);
+			bool flag = this.method_data_array[i].param_list != null && 0 < this.method_data_array[i].param_list.Count;
+			binary.Write(flag);
+			if (flag)
+			{
+				binary.Write(this.method_data_array[i].param_list.Count);
+				for (int j = 0; j < this.method_data_array[i].param_list.Count; j++)
+				{
+					this.method_data_array[i].param_list[j].Write(binary);
+				}
+			}
+		}
+	}
+
+	public override void Read(BinaryReader binary)
+	{
+		this.prev_frame = -1;
+		this.prev_loop = 0;
+		base.Read(binary);
+		int num = binary.ReadInt32();
+		this.method_data_array = new AMBinaryMethod.MethodData[num];
+		for (int i = 0; i < this.method_data_array.Length; i++)
+		{
+			AMBinaryMethod.MethodData methodData = default(AMBinaryMethod.MethodData);
+			methodData.start_flame = binary.ReadInt32();
+			methodData.component_name = binary.ReadString();
+			methodData.method_name = binary.ReadString();
+			methodData.component = base.obj.GetComponent(methodData.component_name);
+			methodData.method_info = methodData.component.GetType().GetMethod(methodData.method_name);
+			NDebug.AssertNull(methodData.method_info != null);
+			methodData.param_list = null;
+			methodData.object_param_array = null;
+			bool flag = binary.ReadBoolean();
+			if (flag)
+			{
+				num = binary.ReadInt32();
+				methodData.object_param_array = new object[num];
+				for (int j = 0; j < num; j++)
+				{
+					AMEventParameter ameventParameter = ScriptableObject.CreateInstance<AMEventParameter>();
+					ameventParameter.Read(binary);
+					if (!ameventParameter.isArray())
+					{
+						methodData.object_param_array[j] = ameventParameter.toObject();
+					}
+					else
+					{
+						methodData.object_param_array[j] = ameventParameter.toArray();
+					}
+				}
+			}
+			this.method_data_array[i] = methodData;
+		}
+	}
+
+	public override void SetGameObject(GameObject new_obj)
+	{
+		base.obj = new_obj;
+		for (int i = 0; i < this.method_data_array.Length; i++)
+		{
+			this.method_data_array[i].component = base.obj.GetComponent(this.method_data_array[i].component_name);
+			this.method_data_array[i].method_info = this.method_data_array[i].component.GetType().GetMethod(this.method_data_array[i].method_name);
+			NDebug.AssertNull(this.method_data_array[i].method_info != null);
+		}
+	}
+
+	public override string type_name
+	{
+		get
+		{
+			return AMBinaryMethod.kTypeName;
+		}
+	}
+
+	public static string kTypeName = "Event";
+
+	public AMBinaryMethod.MethodData[] method_data_array;
+
+	private int prev_frame = -1;
+
+	private int prev_loop;
+
+	public struct MethodData
+	{
+		public bool has_execution;
+
+		public int start_flame;
+
+		public string component_name;
+
+		public string method_name;
+
+		public MethodInfo method_info;
+
+		public Component component;
+
+		public List<AMEventParameter> param_list;
+
+		public object[] object_param_array;
+	}
+}

+ 221 - 0
Assembly-CSharp/AMBinaryProperty.cs

@@ -0,0 +1,221 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using UnityEngine;
+
+public class AMBinaryProperty : AMBinaryDataBaseObject
+{
+	public static bool CheckType(AMTrack track)
+	{
+		if (track == null)
+		{
+			return false;
+		}
+		AMPropertyTrack ampropertyTrack = track as AMPropertyTrack;
+		if (ampropertyTrack == null || ampropertyTrack.propertyInfo == null)
+		{
+			return false;
+		}
+		int[] array = new int[]
+		{
+			0,
+			2,
+			5,
+			6
+		};
+		for (int i = 0; i < array.Length; i++)
+		{
+			if (ampropertyTrack.valueType == array[i])
+			{
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public override void Update(int frame)
+	{
+		if (Application.isPlaying && GameMain.Instance.VRMode && this.property_name == "fov" && this.component is Camera)
+		{
+			return;
+		}
+		int index = base.GetIndex(frame);
+		if (this.value_type == AMPropertyTrack.ValueType.Integer)
+		{
+			this.prop_info.SetValue(this.component, this.int_val_array[index], null);
+		}
+		else if (this.value_type == AMPropertyTrack.ValueType.Float)
+		{
+			this.prop_info.SetValue(this.component, this.float_val_array[index], null);
+		}
+		else if (this.value_type == AMPropertyTrack.ValueType.Vector3)
+		{
+			this.prop_info.SetValue(this.component, this.vec3_val_array[index], null);
+		}
+		else if (this.value_type == AMPropertyTrack.ValueType.Color)
+		{
+			this.prop_info.SetValue(this.component, this.color_val_array[index], null);
+		}
+	}
+
+	public override void Write(BinaryWriter binary)
+	{
+		base.Write(binary);
+		binary.Write((int)this.value_type);
+		binary.Write(this.component_name);
+		binary.Write(this.property_name);
+		List<KeyValuePair<int, int>> list = new List<KeyValuePair<int, int>>();
+		if (this.value_type == AMPropertyTrack.ValueType.Integer)
+		{
+			this.int_val_array = base.Compression<int>(ref this.int_val_array, out list);
+			binary.Write(this.int_val_array.Length);
+			for (int i = 0; i < this.int_val_array.Length; i++)
+			{
+				binary.Write(this.int_val_array[i]);
+			}
+		}
+		else if (this.value_type == AMPropertyTrack.ValueType.Float)
+		{
+			this.float_val_array = base.Compression<float>(ref this.float_val_array, out list);
+			binary.Write(this.float_val_array.Length);
+			for (int j = 0; j < this.float_val_array.Length; j++)
+			{
+				binary.Write(this.float_val_array[j]);
+			}
+		}
+		else if (this.value_type == AMPropertyTrack.ValueType.Vector3)
+		{
+			this.vec3_val_array = base.Compression<Vector3>(ref this.vec3_val_array, out list);
+			binary.Write(this.vec3_val_array.Length);
+			for (int k = 0; k < this.vec3_val_array.Length; k++)
+			{
+				binary.Write(this.vec3_val_array[k].x);
+				binary.Write(this.vec3_val_array[k].y);
+				binary.Write(this.vec3_val_array[k].z);
+			}
+		}
+		else if (this.value_type == AMPropertyTrack.ValueType.Color)
+		{
+			this.color_val_array = base.Compression<Color>(ref this.color_val_array, out list);
+			binary.Write(this.color_val_array.Length);
+			for (int l = 0; l < this.color_val_array.Length; l++)
+			{
+				binary.Write(this.color_val_array[l].a);
+				binary.Write(this.color_val_array[l].r);
+				binary.Write(this.color_val_array[l].g);
+				binary.Write(this.color_val_array[l].b);
+			}
+		}
+		binary.Write(list.Count);
+		for (int m = 0; m < list.Count; m++)
+		{
+			KeyValuePair<int, int> keyValuePair = list[m];
+			binary.Write(keyValuePair.Key);
+			binary.Write(keyValuePair.Value);
+		}
+	}
+
+	public override void Read(BinaryReader binary)
+	{
+		this.value_type = (AMPropertyTrack.ValueType)(-1);
+		this.int_val_array = null;
+		this.float_val_array = null;
+		this.color_val_array = null;
+		this.vec3_val_array = null;
+		base.Read(binary);
+		this.value_type = (AMPropertyTrack.ValueType)binary.ReadInt32();
+		this.component_name = binary.ReadString();
+		this.property_name = binary.ReadString();
+		if (this.value_type == AMPropertyTrack.ValueType.Integer)
+		{
+			int num = binary.ReadInt32();
+			this.int_val_array = new int[num];
+			for (int i = 0; i < this.int_val_array.Length; i++)
+			{
+				this.int_val_array[i] = binary.ReadInt32();
+			}
+		}
+		else if (this.value_type == AMPropertyTrack.ValueType.Float)
+		{
+			int num2 = binary.ReadInt32();
+			this.float_val_array = new float[num2];
+			for (int j = 0; j < this.float_val_array.Length; j++)
+			{
+				this.float_val_array[j] = binary.ReadSingle();
+			}
+		}
+		else if (this.value_type == AMPropertyTrack.ValueType.Vector3)
+		{
+			int num3 = binary.ReadInt32();
+			this.vec3_val_array = new Vector3[num3];
+			for (int k = 0; k < this.vec3_val_array.Length; k++)
+			{
+				Vector3 zero = Vector3.zero;
+				zero.x = binary.ReadSingle();
+				zero.y = binary.ReadSingle();
+				zero.z = binary.ReadSingle();
+				this.vec3_val_array[k] = zero;
+			}
+		}
+		else if (this.value_type == AMPropertyTrack.ValueType.Color)
+		{
+			int num4 = binary.ReadInt32();
+			this.color_val_array = new Color[num4];
+			for (int l = 0; l < this.color_val_array.Length; l++)
+			{
+				Color color;
+				color.a = binary.ReadSingle();
+				color.r = binary.ReadSingle();
+				color.g = binary.ReadSingle();
+				color.b = binary.ReadSingle();
+				this.color_val_array[l] = color;
+			}
+		}
+		int num5 = binary.ReadInt32();
+		this.index_array = new KeyValuePair<int, int>[num5];
+		for (int m = 0; m < this.index_array.Length; m++)
+		{
+			int key = binary.ReadInt32();
+			int value = binary.ReadInt32();
+			this.index_array[m] = new KeyValuePair<int, int>(key, value);
+		}
+		this.component = base.obj.GetComponent(this.component_name);
+		this.prop_info = this.component.GetType().GetProperty(this.property_name);
+	}
+
+	public override void SetGameObject(GameObject new_obj)
+	{
+		base.obj = new_obj;
+		this.component = base.obj.GetComponent(this.component_name);
+		this.prop_info = this.component.GetType().GetProperty(this.property_name);
+	}
+
+	public override string type_name
+	{
+		get
+		{
+			return AMBinaryProperty.kTypeName;
+		}
+	}
+
+	public static string kTypeName = "Property";
+
+	public AMPropertyTrack.ValueType value_type;
+
+	public string component_name;
+
+	public string property_name;
+
+	public PropertyInfo prop_info;
+
+	public Component component;
+
+	public int[] int_val_array;
+
+	public float[] float_val_array;
+
+	public Color[] color_val_array;
+
+	public Vector3[] vec3_val_array;
+}

+ 67 - 0
Assembly-CSharp/AMBinaryRotation.cs

@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+public class AMBinaryRotation : AMBinaryDataBaseObject
+{
+	public static bool CheckType(AMTrack track)
+	{
+		return !(track == null) && track.getTrackType() == AMBinaryRotation.kTypeName;
+	}
+
+	public override void Update(int frame)
+	{
+		this.trans_.rotation = this.quaternion_array[frame];
+	}
+
+	public override void Write(BinaryWriter binary)
+	{
+		List<KeyValuePair<int, int>> list;
+		Quaternion[] array = base.Compression<Quaternion>(ref this.quaternion_array, out list);
+		base.Write(binary);
+		for (int i = 0; i < this.quaternion_array.Length; i++)
+		{
+			binary.Write(this.quaternion_array[i].x);
+			binary.Write(this.quaternion_array[i].y);
+			binary.Write(this.quaternion_array[i].z);
+			binary.Write(this.quaternion_array[i].w);
+		}
+	}
+
+	public override void Read(BinaryReader binary)
+	{
+		base.Read(binary);
+		this.quaternion_array = new Quaternion[this.total_frame];
+		for (int i = 0; i < this.quaternion_array.Length; i++)
+		{
+			Quaternion quaternion = default(Quaternion);
+			quaternion.x = binary.ReadSingle();
+			quaternion.y = binary.ReadSingle();
+			quaternion.z = binary.ReadSingle();
+			quaternion.w = binary.ReadSingle();
+			this.quaternion_array[i] = quaternion;
+		}
+		this.trans_ = base.obj.transform;
+	}
+
+	public override void SetGameObject(GameObject new_obj)
+	{
+		base.obj = new_obj;
+		this.trans_ = base.obj.transform;
+	}
+
+	public override string type_name
+	{
+		get
+		{
+			return AMBinaryRotation.kTypeName;
+		}
+	}
+
+	public static string kTypeName = "Rotation";
+
+	public Transform trans_;
+
+	public Quaternion[] quaternion_array;
+}

+ 65 - 0
Assembly-CSharp/AMBinaryTranslation.cs

@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+public class AMBinaryTranslation : AMBinaryDataBaseObject
+{
+	public static bool CheckType(AMTrack track)
+	{
+		return !(track == null) && track.getTrackType() == AMBinaryTranslation.kTypeName;
+	}
+
+	public override void Update(int frame)
+	{
+		this.trans_.position = this.pos_array[frame];
+	}
+
+	public override void Write(BinaryWriter binary)
+	{
+		List<KeyValuePair<int, int>> list = new List<KeyValuePair<int, int>>();
+		Vector3[] array = base.Compression<Vector3>(ref this.pos_array, out list);
+		base.Write(binary);
+		for (int i = 0; i < this.pos_array.Length; i++)
+		{
+			binary.Write(this.pos_array[i].x);
+			binary.Write(this.pos_array[i].y);
+			binary.Write(this.pos_array[i].z);
+		}
+	}
+
+	public override void Read(BinaryReader binary)
+	{
+		base.Read(binary);
+		this.pos_array = new Vector3[this.total_frame];
+		for (int i = 0; i < this.pos_array.Length; i++)
+		{
+			Vector3 zero = Vector3.zero;
+			zero.x = binary.ReadSingle();
+			zero.y = binary.ReadSingle();
+			zero.z = binary.ReadSingle();
+			this.pos_array[i] = zero;
+		}
+		this.trans_ = base.obj.transform;
+	}
+
+	public override void SetGameObject(GameObject new_obj)
+	{
+		base.obj = new_obj;
+		this.trans_ = base.obj.transform;
+	}
+
+	public override string type_name
+	{
+		get
+		{
+			return AMBinaryTranslation.kTypeName;
+		}
+	}
+
+	public static string kTypeName = "Translation";
+
+	public Transform trans_;
+
+	public Vector3[] pos_array;
+}

File diff suppressed because it is too large
+ 1100 - 0
Assembly-CSharp/AMCameraFade.cs


+ 410 - 0
Assembly-CSharp/AMCameraSwitcherAction.cs

@@ -0,0 +1,410 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class AMCameraSwitcherAction : AMAction
+{
+	public override string ToString(int codeLanguage, int frameRate)
+	{
+		if (this.endFrame == -1 || !this.hasStartTarget() || this.targetsAreEqual())
+		{
+			return null;
+		}
+		bool flag = this.cameraFadeType == 5;
+		string text;
+		if (codeLanguage == 0)
+		{
+			text = string.Concat(new object[]
+			{
+				"AMTween.CameraFade (AMTween.Fade.",
+				Enum.GetName(typeof(AMTween.Fade), this.cameraFadeType),
+				", ",
+				(!flag && !this.still).ToString().ToLower(),
+				", ",
+				this.getParametersString(codeLanguage),
+				", AMTween.Hash (\"delay\", ",
+				base.getWaitTime(frameRate, 0f),
+				"f, \"time\", ",
+				this.getTime(frameRate),
+				"f, "
+			});
+			if (!flag)
+			{
+				text = text + base.getEaseString(codeLanguage) + ", ";
+			}
+			if (this.isReversed())
+			{
+				text += "\"reversed\", true, ";
+			}
+			if (AMCameraFade.needsTexture(this.cameraFadeType))
+			{
+				text = text + "\"texture\", AMTween.LoadTexture2D(\"" + this.irisShape.name + "\"), ";
+			}
+			if (!flag)
+			{
+				if (this.startTargetType == 0)
+				{
+					if (this.startCamera)
+					{
+						text = text + "\"camera1\", GameObject.Find(\"" + this.startCamera.gameObject.name + "\").camera, ";
+					}
+					else
+					{
+						text += "\"camera1\", null /* Missing Camera */";
+					}
+				}
+				else
+				{
+					string text2 = text;
+					text = string.Concat(new object[]
+					{
+						text2,
+						"\"color1\", new Color(",
+						this.startColor.r,
+						"f, ",
+						this.startColor.g,
+						"f, ",
+						this.startColor.b,
+						"f, ",
+						this.startColor.a,
+						"f), "
+					});
+				}
+			}
+			if (this.endTargetType == 0)
+			{
+				if (this.endCamera)
+				{
+					text = text + "\"camera2\", GameObject.Find(\"" + this.endCamera.gameObject.name + "\").camera";
+				}
+				else
+				{
+					text += "\"camera2\", null /* Missing Camera */";
+				}
+			}
+			else
+			{
+				string text2 = text;
+				text = string.Concat(new object[]
+				{
+					text2,
+					"\"color2\", new Color(",
+					this.endColor.r,
+					"f, ",
+					this.endColor.g,
+					"f, ",
+					this.endColor.b,
+					"f, ",
+					this.endColor.a,
+					"f)"
+				});
+			}
+			if ((!flag && this.startTargetType == 0) || this.endTargetType == 0)
+			{
+				text += ", \"allcameras\", csCameras";
+			}
+			text += "));";
+		}
+		else
+		{
+			text = string.Concat(new object[]
+			{
+				"AMTween.CameraFade (AMTween.Fade.",
+				Enum.GetName(typeof(AMTween.Fade), this.cameraFadeType),
+				", ",
+				(!flag && !this.still).ToString().ToLower(),
+				", ",
+				this.getParametersString(codeLanguage),
+				", {\"delay\": ",
+				base.getWaitTime(frameRate, 0f),
+				", \"time\": ",
+				this.getTime(frameRate),
+				", "
+			});
+			if (!flag)
+			{
+				text = text + base.getEaseString(codeLanguage) + ", ";
+			}
+			if (this.isReversed())
+			{
+				text += "\"reversed\": true, ";
+			}
+			if (AMCameraFade.needsTexture(this.cameraFadeType))
+			{
+				text = text + "\"texture\": AMTween.LoadTexture2D(\"" + this.irisShape.name + "\"), ";
+			}
+			if (!flag)
+			{
+				if (this.startTargetType == 0)
+				{
+					if (this.startCamera)
+					{
+						text = text + "\"camera1\": GameObject.Find(\"" + this.startCamera.gameObject.name + "\").camera, ";
+					}
+					else
+					{
+						text += "\"camera1\", null /* Missing Camera */";
+					}
+				}
+				else
+				{
+					string text2 = text;
+					text = string.Concat(new object[]
+					{
+						text2,
+						"\"color1\": Color(",
+						this.startColor.r,
+						", ",
+						this.startColor.g,
+						", ",
+						this.startColor.b,
+						", ",
+						this.startColor.a,
+						"), "
+					});
+				}
+			}
+			if (this.endTargetType == 0)
+			{
+				if (this.endCamera)
+				{
+					text = text + "\"camera2\", GameObject.Find(\"" + this.endCamera.gameObject.name + "\").camera";
+				}
+				else
+				{
+					text += "\"camera2\", null /* Missing Camera */";
+				}
+			}
+			else
+			{
+				string text2 = text;
+				text = string.Concat(new object[]
+				{
+					text2,
+					"\"color2\": Color(",
+					this.endColor.r,
+					", ",
+					this.endColor.g,
+					", ",
+					this.endColor.b,
+					", ",
+					this.endColor.a,
+					")"
+				});
+			}
+			if ((!flag && this.startTargetType == 0) || this.endTargetType == 0)
+			{
+				text += ", \"allcameras\", csCameras";
+			}
+			text += "));";
+		}
+		return text;
+	}
+
+	public void execute(int frameRate, float delay, Camera[] allCameras)
+	{
+		if (this.endFrame == -1 || !this.hasTargets() || this.targetsAreEqual())
+		{
+			return;
+		}
+		float[] array = this.cameraFadeParameters.ToArray();
+		Hashtable hashtable = new Hashtable();
+		hashtable.Add("time", this.getTime(frameRate));
+		hashtable.Add("delay", base.getWaitTime(frameRate, delay));
+		if (this.easeType == 32)
+		{
+			hashtable.Add("easecurve", base.easeCurve);
+		}
+		else
+		{
+			hashtable.Add("easetype", (AMTween.EaseType)this.easeType);
+		}
+		hashtable.Add("reversed", AMTween.isTransitionReversed(this.cameraFadeType, array));
+		hashtable.Add("allcameras", allCameras);
+		if (this.startTargetType == 0)
+		{
+			hashtable.Add("camera1", this.startCamera);
+		}
+		else
+		{
+			hashtable.Add("color1", this.startColor);
+		}
+		if (this.endTargetType == 0)
+		{
+			hashtable.Add("camera2", this.endCamera);
+		}
+		else
+		{
+			hashtable.Add("color2", this.endColor);
+		}
+		if (AMCameraFade.needsTexture(this.cameraFadeType))
+		{
+			hashtable.Add("texture", this.irisShape);
+		}
+		AMTween.CameraFade(this.cameraFadeType, !this.still, array, hashtable);
+	}
+
+	public string getParametersString(int codeLanguage)
+	{
+		string str = string.Empty;
+		str += ((codeLanguage != 0) ? "[" : "new float[]{");
+		for (int i = 0; i < this.cameraFadeParameters.Count; i++)
+		{
+			str += this.cameraFadeParameters[i].ToString();
+			if (codeLanguage == 0)
+			{
+				str += "f";
+			}
+			if (i <= this.cameraFadeParameters.Count - 2)
+			{
+				str += ", ";
+			}
+		}
+		return str + ((codeLanguage != 0) ? "]" : "}");
+	}
+
+	public override int getNumberOfFrames()
+	{
+		return this.endFrame - this.startFrame;
+	}
+
+	public float getTime(int frameRate)
+	{
+		return (float)this.getNumberOfFrames() / (float)frameRate;
+	}
+
+	public bool hasTargets()
+	{
+		return this.hasStartTarget() && this.hasEndTarget();
+	}
+
+	public bool hasStartTarget()
+	{
+		return this.startTargetType != 0 || this.startCamera;
+	}
+
+	public bool hasEndTarget()
+	{
+		return this.endFrame != -1 && (this.endTargetType != 0 || this.endCamera);
+	}
+
+	public bool targetsAreEqual()
+	{
+		return this.startTargetType == this.endTargetType && (this.startTargetType != 0 || !(this.startCamera != this.endCamera)) && (this.startTargetType != 1 || !(this.startColor != this.endColor));
+	}
+
+	public string getStartTargetName()
+	{
+		if (this.startTargetType != 0)
+		{
+			return "Color";
+		}
+		if (this.startCamera)
+		{
+			return this.startCamera.gameObject.name;
+		}
+		return "None";
+	}
+
+	public string getEndTargetName()
+	{
+		if (this.endTargetType != 0)
+		{
+			return "Color";
+		}
+		if (this.endCamera)
+		{
+			return this.endCamera.gameObject.name;
+		}
+		return "None";
+	}
+
+	public bool isReversed()
+	{
+		return AMTween.isTransitionReversed(this.cameraFadeType, this.cameraFadeParameters.ToArray());
+	}
+
+	public override AnimatorTimeline.JSONAction getJSONAction(int frameRate)
+	{
+		if (this.endFrame == -1 || !this.hasTargets() || this.targetsAreEqual())
+		{
+			return null;
+		}
+		AnimatorTimeline.JSONAction jsonaction = new AnimatorTimeline.JSONAction();
+		jsonaction.method = "camerafade";
+		jsonaction.delay = base.getWaitTime(frameRate, 0f);
+		jsonaction.time = this.getTime(frameRate);
+		base.setupJSONActionEase(jsonaction);
+		jsonaction.ints = new int[]
+		{
+			this.cameraFadeType,
+			this.startTargetType,
+			this.endTargetType
+		};
+		List<string> list = new List<string>();
+		List<AnimatorTimeline.JSONColor> list2 = new List<AnimatorTimeline.JSONColor>();
+		if (this.startTargetType == 0)
+		{
+			list.Add(this.startCamera.gameObject.name);
+			list2.Add(null);
+		}
+		else
+		{
+			AnimatorTimeline.JSONColor jsoncolor = new AnimatorTimeline.JSONColor();
+			jsoncolor.setValue(this.startColor);
+			list2.Add(jsoncolor);
+			list.Add(null);
+		}
+		if (this.endTargetType == 0)
+		{
+			list.Add(this.endCamera.gameObject.name);
+			list2.Add(null);
+		}
+		else
+		{
+			AnimatorTimeline.JSONColor jsoncolor2 = new AnimatorTimeline.JSONColor();
+			jsoncolor2.setValue(this.endColor);
+			list2.Add(jsoncolor2);
+			list.Add(null);
+		}
+		jsonaction.strings = list.ToArray();
+		jsonaction.colors = list2.ToArray();
+		jsonaction.bools = new bool[]
+		{
+			this.isReversed(),
+			!this.still
+		};
+		if (AMCameraFade.needsTexture(this.cameraFadeType))
+		{
+			jsonaction.stringsExtra = new string[]
+			{
+				this.irisShape.name
+			};
+		}
+		jsonaction.floats = this.cameraFadeParameters.ToArray();
+		return jsonaction;
+	}
+
+	public int endFrame;
+
+	public int cameraFadeType;
+
+	public List<float> cameraFadeParameters;
+
+	public Texture2D irisShape;
+
+	public bool still;
+
+	public int startTargetType;
+
+	public int endTargetType;
+
+	public Camera startCamera;
+
+	public Camera endCamera;
+
+	public Color startColor;
+
+	public Color endColor;
+}

+ 87 - 0
Assembly-CSharp/AMCameraSwitcherKey.cs

@@ -0,0 +1,87 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[Serializable]
+public class AMCameraSwitcherKey : AMKey
+{
+	public bool setCamera(Camera camera)
+	{
+		if (camera != this.camera)
+		{
+			this.camera = camera;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setColor(Color color)
+	{
+		if (color != this.color)
+		{
+			this.color = color;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setType(int type)
+	{
+		if (type != this.type)
+		{
+			this.type = type;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setStill(bool still)
+	{
+		if (still != this.still)
+		{
+			this.still = still;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setCameraFadeType(int cameraFadeType)
+	{
+		if (cameraFadeType != this.cameraFadeType)
+		{
+			this.cameraFadeType = cameraFadeType;
+			return true;
+		}
+		return false;
+	}
+
+	public override AMKey CreateClone()
+	{
+		AMCameraSwitcherKey amcameraSwitcherKey = ScriptableObject.CreateInstance<AMCameraSwitcherKey>();
+		amcameraSwitcherKey.frame = this.frame;
+		amcameraSwitcherKey.type = this.type;
+		amcameraSwitcherKey.camera = this.camera;
+		amcameraSwitcherKey.color = this.color;
+		amcameraSwitcherKey.cameraFadeType = this.cameraFadeType;
+		amcameraSwitcherKey.cameraFadeParameters = new List<float>(this.cameraFadeParameters);
+		amcameraSwitcherKey.irisShape = this.irisShape;
+		amcameraSwitcherKey.still = this.still;
+		amcameraSwitcherKey.easeType = this.easeType;
+		amcameraSwitcherKey.customEase = new List<float>(this.customEase);
+		return amcameraSwitcherKey;
+	}
+
+	public int type;
+
+	public Camera camera;
+
+	public Color color;
+
+	public int cameraFadeType;
+
+	public List<float> cameraFadeParameters = new List<float>();
+
+	public Texture2D irisShape;
+
+	public bool still;
+}

+ 529 - 0
Assembly-CSharp/AMCameraSwitcherTrack.cs

@@ -0,0 +1,529 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using UnityEngine;
+
+[Serializable]
+public class AMCameraSwitcherTrack : AMTrack
+{
+	public Camera[] cachedAllCameras
+	{
+		get
+		{
+			if (this._cachedAllCameras == null)
+			{
+				this._cachedAllCameras = this.getAllCameras();
+			}
+			return this._cachedAllCameras;
+		}
+		set
+		{
+			this._cachedAllCameras = value;
+		}
+	}
+
+	public override string getTrackType()
+	{
+		return "Camera Switcher";
+	}
+
+	public void addKey(int _frame, Camera camera = null, AMCameraSwitcherKey keyToClone = null)
+	{
+		foreach (AMKey amkey in this.keys)
+		{
+			AMCameraSwitcherKey amcameraSwitcherKey = (AMCameraSwitcherKey)amkey;
+			if (amcameraSwitcherKey.frame == _frame)
+			{
+				if (camera != null)
+				{
+					amcameraSwitcherKey.camera = camera;
+					amcameraSwitcherKey.type = 0;
+					this.updateCache();
+				}
+				return;
+			}
+		}
+		AMCameraSwitcherKey amcameraSwitcherKey2 = ScriptableObject.CreateInstance<AMCameraSwitcherKey>();
+		if (keyToClone)
+		{
+			amcameraSwitcherKey2 = (AMCameraSwitcherKey)keyToClone.CreateClone();
+		}
+		else
+		{
+			amcameraSwitcherKey2.type = 0;
+			amcameraSwitcherKey2.still = !AMTake.isProLicense;
+			amcameraSwitcherKey2.easeType = 13;
+		}
+		amcameraSwitcherKey2.frame = _frame;
+		if (camera != null)
+		{
+			amcameraSwitcherKey2.camera = camera;
+			amcameraSwitcherKey2.type = 0;
+		}
+		this.keys.Add(amcameraSwitcherKey2);
+		this.updateCache();
+	}
+
+	public override void updateCache()
+	{
+		base.destroyCache();
+		this.cache = new List<AMAction>();
+		base.sortKeys();
+		for (int i = 0; i < this.keys.Count; i++)
+		{
+			AMCameraSwitcherAction amcameraSwitcherAction = ScriptableObject.CreateInstance<AMCameraSwitcherAction>();
+			amcameraSwitcherAction.startFrame = this.keys[i].frame;
+			if (this.keys.Count > i + 1)
+			{
+				amcameraSwitcherAction.endFrame = this.keys[i + 1].frame;
+			}
+			else
+			{
+				amcameraSwitcherAction.endFrame = -1;
+			}
+			amcameraSwitcherAction.startTargetType = (this.keys[i] as AMCameraSwitcherKey).type;
+			if (amcameraSwitcherAction.startTargetType == 0)
+			{
+				amcameraSwitcherAction.startCamera = (this.keys[i] as AMCameraSwitcherKey).camera;
+			}
+			else
+			{
+				amcameraSwitcherAction.startColor = (this.keys[i] as AMCameraSwitcherKey).color;
+			}
+			if (amcameraSwitcherAction.endFrame != -1)
+			{
+				amcameraSwitcherAction.endTargetType = (this.keys[i + 1] as AMCameraSwitcherKey).type;
+				if (amcameraSwitcherAction.endTargetType == 0)
+				{
+					amcameraSwitcherAction.endCamera = (this.keys[i + 1] as AMCameraSwitcherKey).camera;
+				}
+				else
+				{
+					amcameraSwitcherAction.endColor = (this.keys[i + 1] as AMCameraSwitcherKey).color;
+				}
+			}
+			amcameraSwitcherAction.cameraFadeType = (this.keys[i] as AMCameraSwitcherKey).cameraFadeType;
+			amcameraSwitcherAction.cameraFadeParameters = new List<float>((this.keys[i] as AMCameraSwitcherKey).cameraFadeParameters);
+			amcameraSwitcherAction.irisShape = (this.keys[i] as AMCameraSwitcherKey).irisShape;
+			amcameraSwitcherAction.still = (this.keys[i] as AMCameraSwitcherKey).still;
+			amcameraSwitcherAction.easeType = (this.keys[i] as AMCameraSwitcherKey).easeType;
+			amcameraSwitcherAction.customEase = new List<float>(this.keys[i].customEase);
+			this.cache.Add(amcameraSwitcherAction);
+		}
+		this._cachedAllCameras = this.getAllCameras();
+		base.updateCache();
+	}
+
+	public override void previewFrame(float frame, AMTrack extraTrack = null)
+	{
+		if (this.cache == null || this.cache.Count <= 0)
+		{
+			return;
+		}
+		bool isPreview = !Application.isPlaying;
+		int i = 0;
+		while (i < this.cache.Count)
+		{
+			if (frame <= (float)(this.cache[i] as AMCameraSwitcherAction).startFrame)
+			{
+				AMCameraFade.reset();
+				if (!(this.cache[i] as AMCameraSwitcherAction).hasStartTarget())
+				{
+					return;
+				}
+				if ((this.cache[i] as AMCameraSwitcherAction).startTargetType == 0)
+				{
+					AMTween.SetTopCamera((this.cache[i] as AMCameraSwitcherAction).startCamera, this.cachedAllCameras);
+				}
+				else
+				{
+					this.showColor((this.cache[i] as AMCameraSwitcherAction).startColor, isPreview);
+				}
+				return;
+			}
+			else if (frame <= (float)(this.cache[i] as AMCameraSwitcherAction).endFrame)
+			{
+				if (!(this.cache[i] as AMCameraSwitcherAction).hasStartTarget() || !(this.cache[i] as AMCameraSwitcherAction).hasEndTarget())
+				{
+					return;
+				}
+				if ((this.cache[i] as AMCameraSwitcherAction).targetsAreEqual())
+				{
+					AMCameraFade.reset();
+					if ((this.cache[i] as AMCameraSwitcherAction).startTargetType == 0)
+					{
+						AMTween.SetTopCamera((this.cache[i] as AMCameraSwitcherAction).startCamera, this.cachedAllCameras);
+					}
+					else
+					{
+						this.showColor((this.cache[i] as AMCameraSwitcherAction).startColor, isPreview);
+					}
+				}
+				else
+				{
+					AMCameraFade.clearRenderTexture();
+					this.previewCameraFade(frame, this.cache[i] as AMCameraSwitcherAction, isPreview);
+				}
+				return;
+			}
+			else if (i == this.cache.Count - 2)
+			{
+				AMCameraFade.reset();
+				if (!(this.cache[i] as AMCameraSwitcherAction).hasEndTarget())
+				{
+					return;
+				}
+				if ((this.cache[i] as AMCameraSwitcherAction).endTargetType == 0)
+				{
+					AMTween.SetTopCamera((this.cache[i] as AMCameraSwitcherAction).endCamera, this.cachedAllCameras);
+				}
+				else
+				{
+					this.showColor((this.cache[i] as AMCameraSwitcherAction).endColor, isPreview);
+				}
+				return;
+			}
+			else
+			{
+				i++;
+			}
+		}
+	}
+
+	public Camera[] getAllCameras()
+	{
+		List<Camera> list = new List<Camera>();
+		foreach (AMKey amkey in this.keys)
+		{
+			AMCameraSwitcherKey amcameraSwitcherKey = (AMCameraSwitcherKey)amkey;
+			if (amcameraSwitcherKey.type == 0 && amcameraSwitcherKey.camera)
+			{
+				list.Add(amcameraSwitcherKey.camera);
+			}
+		}
+		return list.Distinct<Camera>().ToArray<Camera>();
+	}
+
+	public Texture[] getAllTextures()
+	{
+		List<Texture> list = new List<Texture>();
+		foreach (AMKey amkey in this.keys)
+		{
+			AMCameraSwitcherKey amcameraSwitcherKey = (AMCameraSwitcherKey)amkey;
+			if (amcameraSwitcherKey.irisShape && AMCameraFade.needsTexture(amcameraSwitcherKey.cameraFadeType))
+			{
+				list.Add(amcameraSwitcherKey.irisShape);
+			}
+		}
+		return list.Distinct<Texture>().ToArray<Texture>();
+	}
+
+	private void previewCameraFade(float frame, AMCameraSwitcherAction action, bool isPreview)
+	{
+		if (action.cameraFadeType == 5)
+		{
+			if (action.endTargetType == 0)
+			{
+				if (action.endCamera)
+				{
+					AMTween.SetTopCamera(action.endCamera, this.cachedAllCameras);
+				}
+				AMCameraFade.reset();
+			}
+			else
+			{
+				this.showColor(action.endColor, isPreview);
+			}
+			return;
+		}
+		AMCameraFade cameraFade = AMCameraFade.getCameraFade(isPreview);
+		if (Application.isPlaying)
+		{
+			cameraFade.keepAlivePreview = true;
+		}
+		cameraFade.isReset = false;
+		bool flag = action.isReversed();
+		int firstTargetType = (!flag) ? action.startTargetType : action.endTargetType;
+		int secondTargetType = (!flag) ? action.endTargetType : action.startTargetType;
+		this.setRenderTexture(cameraFade, frame, firstTargetType, secondTargetType, flag, action, isPreview);
+		this.setColors(cameraFade, firstTargetType, secondTargetType, flag, action);
+		if (cameraFade.irisShape != action.irisShape)
+		{
+			cameraFade.irisShape = action.irisShape;
+		}
+		cameraFade.mode = action.cameraFadeType;
+		cameraFade.setupMaterials();
+		cameraFade.r = action.cameraFadeParameters.ToArray();
+		AnimationCurve curve = null;
+		AMTween.EasingFunction easingFunction;
+		if (action.hasCustomEase())
+		{
+			if (AMCameraSwitcherTrack.<>f__mg$cache0 == null)
+			{
+				AMCameraSwitcherTrack.<>f__mg$cache0 = new AMTween.EasingFunction(AMTween.customEase);
+			}
+			easingFunction = AMCameraSwitcherTrack.<>f__mg$cache0;
+			curve = action.easeCurve;
+		}
+		else
+		{
+			easingFunction = AMTween.GetEasingFunction((AMTween.EaseType)action.easeType);
+		}
+		float num = (frame - (float)action.startFrame) / (float)(action.endFrame - action.startFrame);
+		float value = easingFunction(1f, 0f, num, curve);
+		cameraFade.value = value;
+		cameraFade.percent = num;
+	}
+
+	private void setColors(AMCameraFade cf, int firstTargetType, int secondTargetType, bool isReversed, AMCameraSwitcherAction action)
+	{
+		Color colorTex = (!isReversed) ? action.startColor : action.endColor;
+		Color colorBG = (!isReversed) ? action.endColor : action.startColor;
+		if (firstTargetType == 1)
+		{
+			cf.colorTex = colorTex;
+			cf.hasColorTex = true;
+		}
+		else
+		{
+			cf.hasColorTex = false;
+		}
+		if (secondTargetType == 1)
+		{
+			cf.colorBG = colorBG;
+			cf.hasColorBG = true;
+		}
+		else
+		{
+			cf.hasColorBG = false;
+		}
+		if (!Application.isPlaying && (firstTargetType == 1 || secondTargetType == 1))
+		{
+			cf.transform.position = new Vector3(cf.transform.position.x, cf.transform.position.y, cf.transform.position.z);
+		}
+	}
+
+	private void setRenderTexture(AMCameraFade cf, float frame, int firstTargetType, int secondTargetType, bool isReversed, AMCameraSwitcherAction action, bool isPreview)
+	{
+		Camera camera = (!isReversed) ? action.startCamera : action.endCamera;
+		Camera top = (!isReversed) ? action.endCamera : action.startCamera;
+		if (isReversed && frame == (float)action.startFrame)
+		{
+			if (firstTargetType == 0)
+			{
+				AMTween.SetTopCamera(camera, this.cachedAllCameras);
+			}
+		}
+		else if (secondTargetType == 0)
+		{
+			AMTween.SetTopCamera(top, this.cachedAllCameras);
+		}
+		if (action.still || (firstTargetType != 0 && secondTargetType != 0))
+		{
+			return;
+		}
+		bool isProLicense = AMTake.isProLicense;
+		if (firstTargetType == 0 && (cf.shouldUpdateRenderTexture || (isProLicense && (!camera.targetTexture || !cf.isRenderTextureSetupFor(camera)))))
+		{
+			if (isProLicense)
+			{
+				cf.setupRenderTexture(camera);
+			}
+			else
+			{
+				cf.useRenderTexture = false;
+				cf.colorTex = Color.white;
+				cf.tex2d = (Texture2D)Resources.Load("am_indie_placeholder");
+				cf.hasColorTex = false;
+				if (!cf.placeholder)
+				{
+					cf.placeholder = true;
+				}
+			}
+		}
+	}
+
+	public AMCameraSwitcherTrack.cfTuple getCameraFadeTupleForFrame(int frame)
+	{
+		if (this.cache == null || this.cache.Count <= 0)
+		{
+			return new AMCameraSwitcherTrack.cfTuple(0, 0, 0, null, null, false);
+		}
+		int i = 0;
+		while (i < this.cache.Count)
+		{
+			if (frame < (this.cache[i] as AMCameraSwitcherAction).startFrame)
+			{
+				break;
+			}
+			if (frame < (this.cache[i] as AMCameraSwitcherAction).endFrame)
+			{
+				if (!(this.cache[i] as AMCameraSwitcherAction).still || (this.cache[i] as AMCameraSwitcherAction).cameraFadeType == 5 || (this.cache[i] as AMCameraSwitcherAction).targetsAreEqual())
+				{
+					break;
+				}
+				bool flag = (this.cache[i] as AMCameraSwitcherAction).isReversed();
+				AMCameraSwitcherAction amcameraSwitcherAction = this.cache[i] as AMCameraSwitcherAction;
+				if (flag)
+				{
+					return new AMCameraSwitcherTrack.cfTuple(amcameraSwitcherAction.endFrame, amcameraSwitcherAction.endTargetType, amcameraSwitcherAction.startTargetType, amcameraSwitcherAction.endCamera, amcameraSwitcherAction.startCamera, flag);
+				}
+				return new AMCameraSwitcherTrack.cfTuple(amcameraSwitcherAction.startFrame, amcameraSwitcherAction.startTargetType, amcameraSwitcherAction.endTargetType, amcameraSwitcherAction.startCamera, amcameraSwitcherAction.endCamera, flag);
+			}
+			else
+			{
+				i++;
+			}
+		}
+		return new AMCameraSwitcherTrack.cfTuple(0, 0, 0, null, null, false);
+	}
+
+	private void showColor(Color color, bool isPreview)
+	{
+		AMCameraFade cameraFade = AMCameraFade.getCameraFade(isPreview);
+		bool flag = false;
+		if (!cameraFade.hasColorTex || cameraFade.colorTex != color)
+		{
+			cameraFade.colorTex = color;
+			cameraFade.hasColorTex = true;
+			flag = true;
+		}
+		if (cameraFade.isReset)
+		{
+			cameraFade.isReset = false;
+			flag = true;
+		}
+		if (cameraFade.hasColorBG)
+		{
+			cameraFade.hasColorBG = false;
+			flag = true;
+		}
+		if (cameraFade.value != 1f)
+		{
+			cameraFade.value = 1f;
+			cameraFade.percent = 0f;
+			flag = true;
+		}
+		if (cameraFade.mode != 0)
+		{
+			cameraFade.mode = 0;
+			flag = true;
+		}
+		if (!Application.isPlaying && flag)
+		{
+			cameraFade.transform.position = new Vector3(cameraFade.transform.position.x, cameraFade.transform.position.y, cameraFade.transform.position.z);
+		}
+	}
+
+	public override AnimatorTimeline.JSONInit getJSONInit()
+	{
+		if (this.keys.Count <= 0)
+		{
+			return null;
+		}
+		string text;
+		if ((this.keys[0] as AMCameraSwitcherKey).type == 0)
+		{
+			if ((this.keys[0] as AMCameraSwitcherKey).camera == null)
+			{
+				return null;
+			}
+			text = "camera";
+		}
+		else
+		{
+			text = "color";
+		}
+		AnimatorTimeline.JSONInit jsoninit = new AnimatorTimeline.JSONInit();
+		jsoninit.type = "cameraswitcher";
+		jsoninit.typeExtra = text;
+		if (text == "camera")
+		{
+			jsoninit.go = (this.keys[0] as AMCameraSwitcherKey).camera.gameObject.name;
+		}
+		else
+		{
+			AnimatorTimeline.JSONColor jsoncolor = new AnimatorTimeline.JSONColor();
+			jsoncolor.setValue((this.keys[0] as AMCameraSwitcherKey).color);
+			jsoninit._color = jsoncolor;
+		}
+		Camera[] allCameras = this.getAllCameras();
+		jsoninit.strings = new string[allCameras.Length];
+		for (int i = 0; i < allCameras.Length; i++)
+		{
+			jsoninit.strings[i] = allCameras[i].gameObject.name;
+		}
+		return jsoninit;
+	}
+
+	public override List<GameObject> getDependencies()
+	{
+		List<GameObject> list = new List<GameObject>();
+		foreach (AMKey amkey in this.keys)
+		{
+			AMCameraSwitcherKey amcameraSwitcherKey = (AMCameraSwitcherKey)amkey;
+			if (amcameraSwitcherKey.type == 0 && amcameraSwitcherKey.camera)
+			{
+				list.Add(amcameraSwitcherKey.camera.gameObject);
+			}
+		}
+		return list;
+	}
+
+	public override List<GameObject> updateDependencies(List<GameObject> newReferences, List<GameObject> oldReferences)
+	{
+		List<GameObject> list = new List<GameObject>();
+		for (int i = 0; i < oldReferences.Count; i++)
+		{
+			foreach (AMKey amkey in this.keys)
+			{
+				AMCameraSwitcherKey amcameraSwitcherKey = (AMCameraSwitcherKey)amkey;
+				if (amcameraSwitcherKey.type == 0 && amcameraSwitcherKey.camera && oldReferences[i] == amcameraSwitcherKey.camera.gameObject)
+				{
+					Camera camera = (Camera)newReferences[i].GetComponent(typeof(Camera));
+					if (!camera)
+					{
+						Debug.LogWarning("Animator: Camera Switcher component 'Camera' not found on new reference for GameObject '" + amcameraSwitcherKey.camera.gameObject.name + "'. Duplicate not replaced.");
+						list.Add(oldReferences[i]);
+					}
+					else
+					{
+						amcameraSwitcherKey.camera = camera;
+					}
+				}
+			}
+		}
+		return list;
+	}
+
+	private Camera[] _cachedAllCameras;
+
+	[CompilerGenerated]
+	private static AMTween.EasingFunction <>f__mg$cache0;
+
+	public struct cfTuple
+	{
+		public cfTuple(int _frame, int _type1, int _type2, Camera _camera1, Camera _camera2, bool _isReversed)
+		{
+			this.frame = _frame;
+			this.type1 = _type1;
+			this.type2 = _type2;
+			this.camera1 = _camera1;
+			this.camera2 = _camera2;
+			this.isReversed = _isReversed;
+		}
+
+		public int frame;
+
+		public int type1;
+
+		public int type2;
+
+		public Camera camera1;
+
+		public Camera camera2;
+
+		public bool isReversed;
+	}
+}

+ 691 - 0
Assembly-CSharp/AMEventAction.cs

@@ -0,0 +1,691 @@
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using UnityEngine;
+
+[Serializable]
+public class AMEventAction : AMAction
+{
+	public MethodInfo methodInfo
+	{
+		get
+		{
+			if (this.component == null)
+			{
+				return null;
+			}
+			if (this.cachedMethodInfo != null)
+			{
+				return this.cachedMethodInfo;
+			}
+			if (this.methodName == null)
+			{
+				return null;
+			}
+			try
+			{
+				this.cachedMethodInfo = this.component.GetType().GetMethod(this.methodName);
+			}
+			catch
+			{
+				this.cachedMethodInfo = null;
+				Debug.LogError("MonoBehaviorでなければなりません。");
+			}
+			return this.cachedMethodInfo;
+		}
+		set
+		{
+			if (value != null)
+			{
+				this.methodName = value.Name;
+			}
+			else
+			{
+				this.methodName = null;
+			}
+			this.cachedMethodInfo = value;
+		}
+	}
+
+	public override void execute(int frameRate, float delay, string trackId)
+	{
+		if (this.useSendMessage)
+		{
+			if (this.component == null || this.methodName == null)
+			{
+				return;
+			}
+			if (this.parameters == null || this.parameters.Count <= 0)
+			{
+				AMTween.SendMessage(this.component.gameObject, AMTween.Hash(new object[]
+				{
+					"delay",
+					base.getWaitTime(frameRate, delay),
+					"methodname",
+					this.methodName
+				}));
+			}
+			else
+			{
+				AMTween.SendMessage(this.component.gameObject, AMTween.Hash(new object[]
+				{
+					"trackid",
+					trackId,
+					"delay",
+					base.getWaitTime(frameRate, delay),
+					"methodname",
+					this.methodName,
+					"parameter",
+					this.parameters[0].toObject()
+				}));
+			}
+			return;
+		}
+		else
+		{
+			if (this.component == null || this.methodInfo == null)
+			{
+				return;
+			}
+			object[] array = new object[this.parameters.Count];
+			for (int i = 0; i < this.parameters.Count; i++)
+			{
+				if (this.parameters[i].isArray())
+				{
+					this.setObjectInArray(ref array[i], this.parameters[i].lsArray);
+				}
+				else
+				{
+					array[i] = this.parameters[i].toObject();
+				}
+			}
+			if (array.Length <= 0)
+			{
+				array = null;
+			}
+			AMTween.InvokeMethod(this.component, AMTween.Hash(new object[]
+			{
+				"trackid",
+				trackId,
+				"delay",
+				base.getWaitTime(frameRate, delay),
+				"methodinfo",
+				this.methodInfo,
+				"parameters",
+				array
+			}));
+			return;
+		}
+	}
+
+	public void setObjectInArray(ref object obj, List<AMEventParameter> lsArray)
+	{
+		if (lsArray.Count <= 0)
+		{
+			return;
+		}
+		int valueType = lsArray[0].valueType;
+		if (valueType == 9)
+		{
+			string[] array = new string[lsArray.Count];
+			for (int i = 0; i < lsArray.Count; i++)
+			{
+				array[i] = (string)lsArray[i].toObject();
+			}
+			obj = array;
+			return;
+		}
+		if (valueType == 10)
+		{
+			char[] array2 = new char[lsArray.Count];
+			for (int j = 0; j < lsArray.Count; j++)
+			{
+				array2[j] = (char)lsArray[j].toObject();
+			}
+			obj = array2;
+			return;
+		}
+		if (valueType == 0 || valueType == 1)
+		{
+			int[] array3 = new int[lsArray.Count];
+			for (int k = 0; k < lsArray.Count; k++)
+			{
+				array3[k] = (int)lsArray[k].toObject();
+			}
+			obj = array3;
+			return;
+		}
+		if (valueType == 2 || valueType == 3)
+		{
+			float[] array4 = new float[lsArray.Count];
+			for (int l = 0; l < lsArray.Count; l++)
+			{
+				array4[l] = (float)lsArray[l].toObject();
+			}
+			obj = array4;
+			return;
+		}
+		if (valueType == 4)
+		{
+			Vector2[] array5 = new Vector2[lsArray.Count];
+			for (int m = 0; m < lsArray.Count; m++)
+			{
+				array5[m] = new Vector2(lsArray[m].val_vect2.x, lsArray[m].val_vect2.y);
+			}
+			obj = array5;
+			return;
+		}
+		if (valueType == 5)
+		{
+			Vector3[] array6 = new Vector3[lsArray.Count];
+			for (int n = 0; n < lsArray.Count; n++)
+			{
+				array6[n] = new Vector3(lsArray[n].val_vect3.x, lsArray[n].val_vect3.y, lsArray[n].val_vect3.z);
+			}
+			obj = array6;
+			return;
+		}
+		if (valueType == 6)
+		{
+			Vector4[] array7 = new Vector4[lsArray.Count];
+			for (int num = 0; num < lsArray.Count; num++)
+			{
+				array7[num] = new Vector4(lsArray[num].val_vect4.x, lsArray[num].val_vect4.y, lsArray[num].val_vect4.z, lsArray[num].val_vect4.w);
+			}
+			obj = array7;
+			return;
+		}
+		if (valueType == 7)
+		{
+			Color[] array8 = new Color[lsArray.Count];
+			for (int num2 = 0; num2 < lsArray.Count; num2++)
+			{
+				array8[num2] = new Color(lsArray[num2].val_color.r, lsArray[num2].val_color.g, lsArray[num2].val_color.b, lsArray[num2].val_color.a);
+			}
+			obj = array8;
+			return;
+		}
+		if (valueType == 8)
+		{
+			Rect[] array9 = new Rect[lsArray.Count];
+			for (int num3 = 0; num3 < lsArray.Count; num3++)
+			{
+				array9[num3] = new Rect(lsArray[num3].val_rect.x, lsArray[num3].val_rect.y, lsArray[num3].val_rect.width, lsArray[num3].val_rect.height);
+			}
+			obj = array9;
+			return;
+		}
+		if (valueType == 11)
+		{
+			UnityEngine.Object[] array10 = new UnityEngine.Object[lsArray.Count];
+			for (int num4 = 0; num4 < lsArray.Count; num4++)
+			{
+				array10[num4] = (UnityEngine.Object)lsArray[num4].toObject();
+			}
+			obj = array10;
+			return;
+		}
+		if (valueType == 12)
+		{
+			object[] array11 = new object[lsArray.Count];
+			for (int num5 = 0; num5 < lsArray.Count; num5++)
+			{
+				this.setObjectInArray(ref array11[num5], lsArray[num5].lsArray);
+			}
+			obj = array11;
+			return;
+		}
+		obj = null;
+	}
+
+	public string ToString(int codeLanguage, int frameRate, string methodInfoVarName)
+	{
+		if (this.component == null)
+		{
+			return null;
+		}
+		string text = string.Empty;
+		if (!this.useSendMessage)
+		{
+			if (codeLanguage == 0)
+			{
+				string text2 = text;
+				text = string.Concat(new object[]
+				{
+					text2,
+					"AMTween.InvokeMethod(",
+					methodInfoVarName,
+					"CMP, AMTween.Hash (\"delay\", ",
+					base.getWaitTime(frameRate, 0f),
+					"f, \"methodinfo\", ",
+					methodInfoVarName
+				});
+				if (this.parameters != null && this.parameters.Count > 0)
+				{
+					text = text + ", \"parameters\", new object[]{" + this.parametersToString(codeLanguage) + "}";
+				}
+				text += "));";
+			}
+			else
+			{
+				string text2 = text;
+				text = string.Concat(new object[]
+				{
+					text2,
+					"AMTween.InvokeMethod(",
+					methodInfoVarName,
+					"CMP, {\"delay\": ",
+					base.getWaitTime(frameRate, 0f),
+					", \"methodinfo\": ",
+					methodInfoVarName
+				});
+				if (this.parameters != null && this.parameters.Count > 0)
+				{
+					text = text + ", \"parameters\": [" + this.parametersToString(codeLanguage) + "]";
+				}
+				text += "});";
+			}
+			return text;
+		}
+		if (this.methodName == null)
+		{
+			return null;
+		}
+		if (codeLanguage == 0)
+		{
+			string text2 = text;
+			text = string.Concat(new object[]
+			{
+				text2,
+				"AMTween.SendMessage(obj.gameObject, AMTween.Hash (\"delay\", ",
+				base.getWaitTime(frameRate, 0f),
+				"f, \"methodname\", \"",
+				this.methodName,
+				"\""
+			});
+			if (this.parameters != null && this.parameters.Count > 0)
+			{
+				text = text + ", \"parameter\", " + this.parametersToString(codeLanguage);
+			}
+			text += "));";
+		}
+		else
+		{
+			string text2 = text;
+			text = string.Concat(new object[]
+			{
+				text2,
+				"AMTween.SendMessage(obj.gameObject, {\"delay\": ",
+				base.getWaitTime(frameRate, 0f),
+				", \"methodname\": \"",
+				this.methodName,
+				"\""
+			});
+			if (this.parameters != null && this.parameters.Count > 0)
+			{
+				text = text + ", \"parameter\": " + this.parametersToString(codeLanguage);
+			}
+			text += "});";
+		}
+		return text;
+	}
+
+	private string parametersToString(int codeLanguage)
+	{
+		string text = string.Empty;
+		for (int i = 0; i < this.parameters.Count; i++)
+		{
+			text += this.declareObjectToString(this.parameters[i].toObject(), codeLanguage);
+			if (i < this.parameters.Count - 1)
+			{
+				text += ", ";
+			}
+		}
+		return text;
+	}
+
+	private string declareObjectToString(object obj, int codeLanguage)
+	{
+		if (obj is string)
+		{
+			return "\"" + obj.ToString() + "\"";
+		}
+		if (obj is bool)
+		{
+			return obj.ToString().ToLower();
+		}
+		if (obj is char)
+		{
+			return "'" + obj.ToString() + "'";
+		}
+		if (codeLanguage == 0 && obj is decimal)
+		{
+			return obj.ToString() + "m";
+		}
+		if (codeLanguage == 0 && obj is float)
+		{
+			return obj.ToString() + "f";
+		}
+		if (obj is Vector2)
+		{
+			Vector2 vector = (Vector2)obj;
+			if (codeLanguage == 0)
+			{
+				return string.Concat(new object[]
+				{
+					"new Vector2(",
+					vector.x,
+					"f, ",
+					vector.y,
+					"f)"
+				});
+			}
+			return string.Concat(new object[]
+			{
+				"Vector2(",
+				vector.x,
+				", ",
+				vector.y,
+				")"
+			});
+		}
+		else if (obj is Vector3)
+		{
+			Vector3 vector2 = (Vector3)obj;
+			if (codeLanguage == 0)
+			{
+				return string.Concat(new object[]
+				{
+					"new Vector3(",
+					vector2.x,
+					"f, ",
+					vector2.y,
+					"f, ",
+					vector2.z,
+					"f)"
+				});
+			}
+			return string.Concat(new object[]
+			{
+				"Vector3(",
+				vector2.x,
+				", ",
+				vector2.y,
+				", ",
+				vector2.z,
+				")"
+			});
+		}
+		else if (obj is Vector4)
+		{
+			Vector4 vector3 = (Vector4)obj;
+			if (codeLanguage == 0)
+			{
+				return string.Concat(new object[]
+				{
+					"new Vector4(",
+					vector3.x,
+					"f, ",
+					vector3.y,
+					"f, ",
+					vector3.z,
+					"f, ",
+					vector3.w,
+					"f)"
+				});
+			}
+			return string.Concat(new object[]
+			{
+				"Vector4(",
+				vector3.x,
+				", ",
+				vector3.y,
+				", ",
+				vector3.z,
+				", ",
+				vector3.w,
+				")"
+			});
+		}
+		else if (obj is Color)
+		{
+			Color color = (Color)obj;
+			if (codeLanguage == 0)
+			{
+				return string.Concat(new object[]
+				{
+					"new Color(",
+					color.r,
+					"f, ",
+					color.g,
+					"f, ",
+					color.b,
+					"f, ",
+					color.a,
+					"f)"
+				});
+			}
+			return string.Concat(new object[]
+			{
+				"Color(",
+				color.r,
+				", ",
+				color.g,
+				", ",
+				color.b,
+				", ",
+				color.a,
+				")"
+			});
+		}
+		else if (obj is Rect)
+		{
+			Rect rect = (Rect)obj;
+			if (codeLanguage == 0)
+			{
+				return string.Concat(new object[]
+				{
+					"new Rect(",
+					rect.x,
+					"f, ",
+					rect.y,
+					"f, ",
+					rect.width,
+					"f, ",
+					rect.height,
+					"f)"
+				});
+			}
+			return string.Concat(new object[]
+			{
+				"Rect(",
+				rect.x,
+				", ",
+				rect.y,
+				", ",
+				rect.width,
+				", ",
+				rect.height,
+				")"
+			});
+		}
+		else
+		{
+			if (obj is GameObject)
+			{
+				return "GameObject.Find(\"" + (obj as GameObject).name + "\")";
+			}
+			if (obj is Component)
+			{
+				return string.Concat(new string[]
+				{
+					"GameObject.Find(\"",
+					(obj as Component).gameObject.name,
+					"\").GetComponent(\"",
+					(obj as Component).GetType().Name,
+					"\")"
+				});
+			}
+			if (obj is Array)
+			{
+				Type elementType = (obj as Array).GetType().GetElementType();
+				string text = string.Empty;
+				if (codeLanguage == 0)
+				{
+					text += "new ";
+					if (elementType == typeof(string))
+					{
+						text += "string";
+					}
+					else if (elementType == typeof(bool))
+					{
+						text += "bool";
+					}
+					else if (elementType == typeof(char))
+					{
+						text += "char";
+					}
+					else if (elementType == typeof(decimal))
+					{
+						text += "decimal";
+					}
+					else if (elementType == typeof(float))
+					{
+						text += "float";
+					}
+					else if (elementType == typeof(bool))
+					{
+						text += "bool";
+					}
+					else if (elementType == typeof(int))
+					{
+						text += "int";
+					}
+					else if (elementType == typeof(long))
+					{
+						text += "long";
+					}
+					else if (elementType == typeof(double))
+					{
+						text += "double";
+					}
+					else if (elementType == typeof(Vector2))
+					{
+						text += "Vector2";
+					}
+					else if (elementType == typeof(Vector3))
+					{
+						text += "Vector3";
+					}
+					else if (elementType == typeof(Color))
+					{
+						text += "Color";
+					}
+					else if (elementType == typeof(Rect))
+					{
+						text += "Rect";
+					}
+					else if (elementType == typeof(GameObject))
+					{
+						text += "GameObject";
+					}
+					else if (elementType == typeof(Component))
+					{
+						text += (obj as Component).GetType().Name;
+					}
+					else
+					{
+						text += "Object";
+					}
+					text += "[]{";
+				}
+				else
+				{
+					text += "[";
+				}
+				Array array = (Array)obj;
+				for (int i = 0; i < array.Length; i++)
+				{
+					text += this.declareObjectToString(array.GetValue(i), codeLanguage);
+					if (i < array.Length - 1)
+					{
+						text += ", ";
+					}
+				}
+				if (codeLanguage == 0)
+				{
+					text += "}";
+				}
+				else
+				{
+					text += "]";
+				}
+				return text;
+			}
+			if (obj == null)
+			{
+				return null;
+			}
+			return obj.ToString();
+		}
+	}
+
+	public override AnimatorTimeline.JSONAction getJSONAction(int frameRate)
+	{
+		if (this.component == null)
+		{
+			return null;
+		}
+		AnimatorTimeline.JSONAction jsonaction = new AnimatorTimeline.JSONAction();
+		jsonaction.delay = base.getWaitTime(frameRate, 0f);
+		jsonaction.go = this.component.gameObject.name;
+		if (this.useSendMessage)
+		{
+			if (this.methodName == null)
+			{
+				return null;
+			}
+			jsonaction.method = "sendmessage";
+			jsonaction.strings = new string[]
+			{
+				this.methodName
+			};
+			if (this.parameters != null && this.parameters.Count > 0)
+			{
+				jsonaction.eventParams = new AnimatorTimeline.JSONEventParameter[]
+				{
+					this.parameters[0].toJSON()
+				};
+			}
+		}
+		else
+		{
+			if (this.methodInfo == null)
+			{
+				return null;
+			}
+			jsonaction.method = "invokemethod";
+			jsonaction.eventParams = new AnimatorTimeline.JSONEventParameter[this.parameters.Count];
+			for (int i = 0; i < this.parameters.Count; i++)
+			{
+				jsonaction.eventParams[i] = this.parameters[i].toJSON();
+			}
+			jsonaction.strings = new string[]
+			{
+				this.component.GetType().Name,
+				this.methodInfo.Name
+			};
+		}
+		return jsonaction;
+	}
+
+	public Component component;
+
+	public bool useSendMessage;
+
+	public List<AMEventParameter> parameters;
+
+	public string methodName;
+
+	private MethodInfo cachedMethodInfo;
+}

+ 213 - 0
Assembly-CSharp/AMEventKey.cs

@@ -0,0 +1,213 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using UnityEngine;
+
+[Serializable]
+public class AMEventKey : AMKey
+{
+	public MethodInfo methodInfo
+	{
+		get
+		{
+			if (this.component == null)
+			{
+				return null;
+			}
+			if (this.cachedMethodInfo != null)
+			{
+				return this.cachedMethodInfo;
+			}
+			if (this.methodName == null)
+			{
+				return null;
+			}
+			try
+			{
+				this.cachedMethodInfo = this.component.GetType().GetMethod(this.methodName);
+			}
+			catch
+			{
+				this.cachedMethodInfo = null;
+				Debug.LogError("MonoBehaviorでなければいけません。");
+			}
+			return this.cachedMethodInfo;
+		}
+		set
+		{
+			if (value != null)
+			{
+				this.methodName = value.Name;
+			}
+			else
+			{
+				this.methodName = null;
+			}
+			this.cachedMethodInfo = value;
+		}
+	}
+
+	public bool setMethodInfo(Component component, MethodInfo methodInfo, ParameterInfo[] cachedParameterInfos)
+	{
+		if (this.methodInfo != methodInfo || this.component != component)
+		{
+			this.component = component;
+			this.methodInfo = methodInfo;
+			this.destroyParameters();
+			this.parameters = new List<AMEventParameter>();
+			for (int i = 0; i < cachedParameterInfos.Length; i++)
+			{
+				AMEventParameter ameventParameter = ScriptableObject.CreateInstance<AMEventParameter>();
+				ameventParameter.setValueType(cachedParameterInfos[i].ParameterType);
+				this.parameters.Add(ameventParameter);
+			}
+			return true;
+		}
+		return false;
+	}
+
+	public bool setUseSendMessage(bool useSendMessage)
+	{
+		if (this.useSendMessage != useSendMessage)
+		{
+			this.useSendMessage = useSendMessage;
+			return true;
+		}
+		return false;
+	}
+
+	public void destroyParameters()
+	{
+		if (this.parameters == null)
+		{
+			return;
+		}
+		foreach (AMEventParameter ameventParameter in this.parameters)
+		{
+			ameventParameter.destroy();
+		}
+	}
+
+	public override void destroy()
+	{
+		this.destroyParameters();
+		base.destroy();
+	}
+
+	public List<GameObject> getDependencies()
+	{
+		List<GameObject> list = new List<GameObject>();
+		foreach (AMEventParameter ameventParameter in this.parameters)
+		{
+			list = list.Union(ameventParameter.getDependencies()).ToList<GameObject>();
+		}
+		return list;
+	}
+
+	public bool updateDependencies(List<GameObject> newReferences, List<GameObject> oldReferences, bool didUpdateObj, GameObject obj)
+	{
+		if (didUpdateObj && this.component)
+		{
+			string name = this.component.GetType().Name;
+			this.component = obj.GetComponent(name);
+			if (!this.component)
+			{
+				Debug.LogError(string.Concat(new string[]
+				{
+					"Animator: Component '",
+					name,
+					"' not found on new reference for GameObject '",
+					obj.name,
+					"'. Some event track data may be lost."
+				}));
+			}
+			this.cachedMethodInfo = null;
+		}
+		bool flag = false;
+		foreach (AMEventParameter ameventParameter in this.parameters)
+		{
+			if (ameventParameter.updateDependencies(newReferences, oldReferences) && !flag)
+			{
+				flag = true;
+			}
+		}
+		return flag;
+	}
+
+	public override AMKey CreateClone()
+	{
+		AMEventKey ameventKey = ScriptableObject.CreateInstance<AMEventKey>();
+		ameventKey.frame = this.frame;
+		ameventKey.component = this.component;
+		ameventKey.useSendMessage = this.useSendMessage;
+		ameventKey.methodName = this.methodName;
+		ameventKey.methodInfo = this.methodInfo;
+		foreach (AMEventParameter ameventParameter in this.parameters)
+		{
+			ameventKey.parameters.Add(ameventParameter.CreateClone());
+		}
+		return ameventKey;
+	}
+
+	public override void CreateFromStringData(string data_text)
+	{
+		string[] array = data_text.Split(new char[]
+		{
+			':'
+		});
+		if (array.Length == 0 || array[0] != "Event")
+		{
+			return;
+		}
+		NDebug.Assert(this.obj != null, "AMEventKey::CreateFromStringData\nobjがnullです");
+		int num = 1;
+		this.frame = int.Parse(array[num++]);
+		this.useSendMessage = bool.Parse(array[num++]);
+		string str = array[num++];
+		this.methodName = array[num++];
+		this.component = this.obj.GetComponent<DanceMain>();
+		NDebug.Assert(this.component != null, "AMEventKey::CreateFromStringData\n" + str + "が見つかりませんでした");
+		this.methodInfo = this.component.GetType().GetMethod(this.methodName);
+		this.parameters.Clear();
+		int num2 = int.Parse(array[num++]);
+		this.parameters = new List<AMEventParameter>();
+		for (int i = 0; i < num2; i++)
+		{
+			this.parameters.Add(AMEventParameter.CreateFromStringData(array[num++]));
+		}
+	}
+
+	public override string ToStringData()
+	{
+		List<string> list = new List<string>();
+		list.Add("Event");
+		list.Add(this.frame.ToString());
+		list.Add(this.useSendMessage.ToString());
+		list.Add(this.component.name);
+		list.Add(this.methodName.ToString());
+		list.Add(this.parameters.Count.ToString());
+		for (int i = 0; i < this.parameters.Count; i++)
+		{
+			list.Add(this.parameters[i].ToStringData());
+		}
+		string text = list[0];
+		for (int j = 1; j < list.Count; j++)
+		{
+			text = text + ":" + list[j];
+		}
+		return text;
+	}
+
+	public GameObject obj;
+
+	public Component component;
+
+	public bool useSendMessage = true;
+
+	public List<AMEventParameter> parameters = new List<AMEventParameter>();
+
+	public string methodName;
+
+	private MethodInfo cachedMethodInfo;
+}

+ 947 - 0
Assembly-CSharp/AMEventParameter.cs

@@ -0,0 +1,947 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using UnityEngine;
+using wf;
+
+[Serializable]
+public class AMEventParameter : ScriptableObject
+{
+	public bool setBool(bool val_bool)
+	{
+		if (this.val_bool != val_bool)
+		{
+			this.val_bool = val_bool;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setInt(int val_int)
+	{
+		if (this.val_int != val_int)
+		{
+			this.val_int = val_int;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setFloat(float val_float)
+	{
+		if (this.val_float != val_float)
+		{
+			this.val_float = val_float;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setVector2(Vector2 val_vect2)
+	{
+		if (this.val_vect2 != val_vect2)
+		{
+			this.val_vect2 = val_vect2;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setVector3(Vector3 val_vect3)
+	{
+		if (this.val_vect3 != val_vect3)
+		{
+			this.val_vect3 = val_vect3;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setVector4(Vector4 val_vect4)
+	{
+		if (this.val_vect4 != val_vect4)
+		{
+			this.val_vect4 = val_vect4;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setColor(Color val_color)
+	{
+		if (this.val_color != val_color)
+		{
+			this.val_color = val_color;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setRect(Rect val_rect)
+	{
+		if (this.val_rect != val_rect)
+		{
+			this.val_rect = val_rect;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setString(string val_string)
+	{
+		if (this.val_string != val_string)
+		{
+			this.val_string = val_string;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setObject(UnityEngine.Object val_obj)
+	{
+		if (this.val_obj != val_obj)
+		{
+			this.val_obj = val_obj;
+			return true;
+		}
+		return false;
+	}
+
+	public Type getParamType()
+	{
+		if (this.valueType == 13)
+		{
+			return typeof(bool);
+		}
+		if (this.valueType == 0 || this.valueType == 1)
+		{
+			return typeof(int);
+		}
+		if (this.valueType == 2 || this.valueType == 3)
+		{
+			return typeof(float);
+		}
+		if (this.valueType == 4)
+		{
+			return typeof(Vector2);
+		}
+		if (this.valueType == 5)
+		{
+			return typeof(Vector3);
+		}
+		if (this.valueType == 6)
+		{
+			return typeof(Vector4);
+		}
+		if (this.valueType == 7)
+		{
+			return typeof(Color);
+		}
+		if (this.valueType == 8)
+		{
+			return typeof(Rect);
+		}
+		if (this.valueType == 11)
+		{
+			return typeof(UnityEngine.Object);
+		}
+		if (this.valueType == 12)
+		{
+			if (this.lsArray.Count <= 0)
+			{
+				return typeof(object[]);
+			}
+			return this.lsArray[0].getParamType();
+		}
+		else
+		{
+			if (this.valueType == 9)
+			{
+				return typeof(string);
+			}
+			if (this.valueType == 10)
+			{
+				return typeof(char);
+			}
+			Debug.LogError("Animator: Type not found for Event Parameter.");
+			return typeof(object);
+		}
+	}
+
+	public void destroy()
+	{
+		foreach (AMEventParameter ameventParameter in this.lsArray)
+		{
+			ameventParameter.destroy();
+		}
+		UnityEngine.Object.DestroyImmediate(this);
+	}
+
+	public string getStringValue()
+	{
+		if (this.valueType == 13)
+		{
+			return this.val_bool.ToString().ToLower();
+		}
+		if (this.valueType == 9)
+		{
+			return "\"" + this.val_string + "\"";
+		}
+		if (this.valueType == 10)
+		{
+			if (this.val_string == null || this.val_string.Length <= 0)
+			{
+				return "''";
+			}
+			return "'" + this.val_string[0] + "'";
+		}
+		else
+		{
+			if (this.valueType == 0 || this.valueType == 1)
+			{
+				return this.val_int.ToString();
+			}
+			if (this.valueType == 2 || this.valueType == 3)
+			{
+				return this.val_float.ToString();
+			}
+			if (this.valueType == 4)
+			{
+				return this.val_vect2.ToString();
+			}
+			if (this.valueType == 5)
+			{
+				return this.val_vect3.ToString();
+			}
+			if (this.valueType == 6)
+			{
+				return this.val_vect4.ToString();
+			}
+			if (this.valueType == 7)
+			{
+				return this.val_color.ToString();
+			}
+			if (this.valueType == 8)
+			{
+				return this.val_rect.ToString();
+			}
+			if (this.valueType == 11)
+			{
+				if (!this.val_obj)
+				{
+					return "None";
+				}
+				return this.val_obj.name;
+			}
+			else
+			{
+				if (this.valueType == 12)
+				{
+					return "Array";
+				}
+				Debug.LogError("Animator: Type not found for Event Parameter.");
+				return "object";
+			}
+		}
+	}
+
+	public void setValueType(Type t)
+	{
+		if (t == typeof(bool))
+		{
+			this.valueType = 13;
+		}
+		else if (t == typeof(string))
+		{
+			this.valueType = 9;
+		}
+		else if (t == typeof(char))
+		{
+			this.valueType = 10;
+		}
+		else if (t == typeof(int))
+		{
+			this.valueType = 0;
+		}
+		else if (t == typeof(long))
+		{
+			this.valueType = 1;
+		}
+		else if (t == typeof(float))
+		{
+			this.valueType = 2;
+		}
+		else if (t == typeof(double))
+		{
+			this.valueType = 3;
+		}
+		else if (t == typeof(Vector2))
+		{
+			this.valueType = 4;
+		}
+		else if (t == typeof(Vector3))
+		{
+			this.valueType = 5;
+		}
+		else if (t == typeof(Vector4))
+		{
+			this.valueType = 6;
+		}
+		else if (t == typeof(Color))
+		{
+			this.valueType = 7;
+		}
+		else if (t == typeof(Rect))
+		{
+			this.valueType = 8;
+		}
+		else if (t.IsArray)
+		{
+			this.valueType = 12;
+		}
+		else if (t.BaseType.BaseType == typeof(UnityEngine.Object))
+		{
+			this.valueType = 11;
+		}
+		else
+		{
+			this.valueType = 11;
+		}
+	}
+
+	public object toObject()
+	{
+		if (this.valueType == 13)
+		{
+			return this.val_bool;
+		}
+		if (this.valueType == 9)
+		{
+			return this.val_string;
+		}
+		if (this.valueType == 10)
+		{
+			if (this.val_string == null || this.val_string.Length <= 0)
+			{
+				return '\0';
+			}
+			return this.val_string[0];
+		}
+		else
+		{
+			if (this.valueType == 0 || this.valueType == 1)
+			{
+				return this.val_int;
+			}
+			if (this.valueType == 2 || this.valueType == 3)
+			{
+				return this.val_float;
+			}
+			if (this.valueType == 4)
+			{
+				return this.val_vect2;
+			}
+			if (this.valueType == 5)
+			{
+				return this.val_vect3;
+			}
+			if (this.valueType == 6)
+			{
+				return this.val_vect4;
+			}
+			if (this.valueType == 7)
+			{
+				return this.val_color;
+			}
+			if (this.valueType == 8)
+			{
+				return this.val_rect;
+			}
+			if (this.valueType == 11)
+			{
+				return this.val_obj;
+			}
+			if (this.valueType == 12 && this.lsArray.Count > 0)
+			{
+				if (this.lsArray[0].valueType == 13)
+				{
+					bool[] array = new bool[this.lsArray.Count];
+					for (int i = 0; i < this.lsArray.Count; i++)
+					{
+						array[i] = this.lsArray[i].val_bool;
+					}
+					return array;
+				}
+				if (this.lsArray[0].valueType == 9)
+				{
+					string[] array2 = new string[this.lsArray.Count];
+					for (int j = 0; j < this.lsArray.Count; j++)
+					{
+						array2[j] = this.lsArray[j].val_string;
+					}
+					return array2;
+				}
+				if (this.lsArray[0].valueType == 10)
+				{
+					char[] array3 = new char[this.lsArray.Count];
+					for (int k = 0; k < this.lsArray.Count; k++)
+					{
+						array3[k] = this.lsArray[k].val_string[0];
+					}
+					return array3;
+				}
+				if (this.lsArray[0].valueType == 0 || this.lsArray[0].valueType == 1)
+				{
+					int[] array4 = new int[this.lsArray.Count];
+					for (int l = 0; l < this.lsArray.Count; l++)
+					{
+						array4[l] = this.lsArray[l].val_int;
+					}
+					return array4;
+				}
+				if (this.lsArray[0].valueType == 2 || this.lsArray[0].valueType == 3)
+				{
+					float[] array5 = new float[this.lsArray.Count];
+					for (int m = 0; m < this.lsArray.Count; m++)
+					{
+						array5[m] = this.lsArray[m].val_float;
+					}
+					return array5;
+				}
+				if (this.lsArray[0].valueType == 4)
+				{
+					Vector2[] array6 = new Vector2[this.lsArray.Count];
+					for (int n = 0; n < this.lsArray.Count; n++)
+					{
+						array6[n] = this.lsArray[n].val_vect2;
+					}
+					return array6;
+				}
+				if (this.lsArray[0].valueType == 5)
+				{
+					Vector3[] array7 = new Vector3[this.lsArray.Count];
+					for (int num = 0; num < this.lsArray.Count; num++)
+					{
+						array7[num] = this.lsArray[num].val_vect3;
+					}
+					return array7;
+				}
+				if (this.lsArray[0].valueType == 6)
+				{
+					Vector4[] array8 = new Vector4[this.lsArray.Count];
+					for (int num2 = 0; num2 < this.lsArray.Count; num2++)
+					{
+						array8[num2] = this.lsArray[num2].val_vect4;
+					}
+					return array8;
+				}
+				if (this.lsArray[0].valueType == 7)
+				{
+					Color[] array9 = new Color[this.lsArray.Count];
+					for (int num3 = 0; num3 < this.lsArray.Count; num3++)
+					{
+						array9[num3] = this.lsArray[num3].val_color;
+					}
+					return array9;
+				}
+				if (this.lsArray[0].valueType == 8)
+				{
+					Rect[] array10 = new Rect[this.lsArray.Count];
+					for (int num4 = 0; num4 < this.lsArray.Count; num4++)
+					{
+						array10[num4] = this.lsArray[num4].val_rect;
+					}
+					return array10;
+				}
+				if (this.lsArray[0].valueType == 11)
+				{
+					UnityEngine.Object[] array11 = new UnityEngine.Object[this.lsArray.Count];
+					for (int num5 = 0; num5 < this.lsArray.Count; num5++)
+					{
+						array11[num5] = this.lsArray[num5].val_obj;
+					}
+					return array11;
+				}
+			}
+			Debug.LogError("Animator: Type not found for Event Parameter.");
+			return null;
+		}
+	}
+
+	public AnimatorTimeline.JSONEventParameter toJSON()
+	{
+		AnimatorTimeline.JSONEventParameter jsoneventParameter = new AnimatorTimeline.JSONEventParameter();
+		jsoneventParameter.valueType = this.valueType;
+		if (this.valueType == 13)
+		{
+			jsoneventParameter.val_bool = this.val_bool;
+		}
+		if (this.valueType == 9)
+		{
+			jsoneventParameter.val_string = this.val_string;
+		}
+		if (this.valueType == 10)
+		{
+			if (this.val_string == null || this.val_string.Length <= 0)
+			{
+				jsoneventParameter.val_string = "\0";
+			}
+			jsoneventParameter.val_string = string.Empty + this.val_string[0];
+		}
+		if (this.valueType == 0 || this.valueType == 1)
+		{
+			jsoneventParameter.val_int = this.val_int;
+		}
+		if (this.valueType == 2 || this.valueType == 3)
+		{
+			jsoneventParameter.val_float = this.val_float;
+		}
+		if (this.valueType == 4)
+		{
+			AnimatorTimeline.JSONVector2 jsonvector = new AnimatorTimeline.JSONVector2();
+			jsonvector.setValue(this.val_vect2);
+			jsoneventParameter.val_vect2 = jsonvector;
+		}
+		if (this.valueType == 5)
+		{
+			AnimatorTimeline.JSONVector3 jsonvector2 = new AnimatorTimeline.JSONVector3();
+			jsonvector2.setValue(this.val_vect3);
+			jsoneventParameter.val_vect3 = jsonvector2;
+		}
+		if (this.valueType == 6)
+		{
+			AnimatorTimeline.JSONVector4 jsonvector3 = new AnimatorTimeline.JSONVector4();
+			jsonvector3.setValue(this.val_vect4);
+			jsoneventParameter.val_vect4 = jsonvector3;
+		}
+		if (this.valueType == 7)
+		{
+			AnimatorTimeline.JSONColor jsoncolor = new AnimatorTimeline.JSONColor();
+			jsoncolor.setValue(this.val_color);
+			jsoneventParameter.val_color = jsoncolor;
+		}
+		if (this.valueType == 8)
+		{
+			AnimatorTimeline.JSONRect jsonrect = new AnimatorTimeline.JSONRect();
+			jsonrect.setValue(this.val_rect);
+			jsoneventParameter.val_rect = jsonrect;
+		}
+		if (this.valueType == 11)
+		{
+			if (this.val_obj.GetType() != typeof(GameObject))
+			{
+				jsoneventParameter.val_obj_extra = this.val_obj.name;
+				jsoneventParameter.val_obj = this.val_obj.GetType().Name;
+			}
+			else
+			{
+				jsoneventParameter.val_obj_extra = null;
+				jsoneventParameter.val_obj = this.val_obj.name;
+			}
+		}
+		if (this.valueType == 12 && this.lsArray.Count > 0)
+		{
+			AnimatorTimeline.JSONEventParameter[] array = new AnimatorTimeline.JSONEventParameter[this.lsArray.Count];
+			for (int i = 0; i < this.lsArray.Count; i++)
+			{
+				array[i] = this.lsArray[i].toJSON();
+			}
+			jsoneventParameter.array = array;
+		}
+		return jsoneventParameter;
+	}
+
+	public object[] toArray()
+	{
+		object[] array = new object[this.lsArray.Count];
+		for (int i = 0; i < this.lsArray.Count; i++)
+		{
+			array[i] = this.lsArray[i].toObject();
+		}
+		return array;
+	}
+
+	public bool isArray()
+	{
+		return this.lsArray.Count > 0;
+	}
+
+	public AMEventParameter CreateClone()
+	{
+		AMEventParameter ameventParameter = ScriptableObject.CreateInstance<AMEventParameter>();
+		ameventParameter.val_bool = this.val_bool;
+		ameventParameter.valueType = this.valueType;
+		ameventParameter.val_int = this.val_int;
+		ameventParameter.val_float = this.val_float;
+		ameventParameter.val_vect2 = this.val_vect2;
+		ameventParameter.val_vect3 = this.val_vect3;
+		ameventParameter.val_vect4 = this.val_vect4;
+		ameventParameter.val_color = this.val_color;
+		ameventParameter.val_rect = this.val_rect;
+		ameventParameter.val_string = this.val_string;
+		ameventParameter.val_obj = this.val_obj;
+		foreach (AMEventParameter ameventParameter2 in this.lsArray)
+		{
+			ameventParameter.lsArray.Add(ameventParameter2.CreateClone());
+		}
+		return ameventParameter;
+	}
+
+	public static AMEventParameter CreateFromStringData(string data_text)
+	{
+		AMEventParameter ameventParameter = ScriptableObject.CreateInstance<AMEventParameter>();
+		string @string = Encoding.GetEncoding("UTF-8").GetString(Convert.FromBase64String(data_text));
+		string[] array = @string.Split(new char[]
+		{
+			':'
+		});
+		int num = 0;
+		ameventParameter.val_bool = bool.Parse(array[num++]);
+		ameventParameter.valueType = int.Parse(array[num++]);
+		ameventParameter.val_int = int.Parse(array[num++]);
+		ameventParameter.val_float = float.Parse(array[num++]);
+		ameventParameter.val_vect2 = Parse.Vector2(array[num++]);
+		ameventParameter.val_vect3 = Parse.Vector3(array[num++]);
+		ameventParameter.val_vect4 = Parse.Vector4(array[num++]);
+		ameventParameter.val_color = Parse.Color(array[num++]);
+		ameventParameter.val_rect = default(Rect);
+		ameventParameter.val_rect.x = float.Parse(array[num++]);
+		ameventParameter.val_rect.y = float.Parse(array[num++]);
+		ameventParameter.val_rect.width = float.Parse(array[num++]);
+		ameventParameter.val_rect.height = float.Parse(array[num++]);
+		ameventParameter.val_string = array[num++];
+		ameventParameter.val_obj = null;
+		ameventParameter.lsArray.Clear();
+		int num2 = int.Parse(array[num++]);
+		for (int i = 0; i < num2; i++)
+		{
+			ameventParameter.lsArray.Add(AMEventParameter.CreateFromStringData(array[num++]));
+		}
+		return ameventParameter;
+	}
+
+	public string ToStringData()
+	{
+		List<string> list = new List<string>();
+		list.Add(this.val_bool.ToString());
+		list.Add(this.valueType.ToString());
+		list.Add(this.val_int.ToString());
+		list.Add(this.val_float.ToString());
+		list.Add(this.val_vect2.ToString("G"));
+		list.Add(this.val_vect3.ToString("G"));
+		list.Add(this.val_vect4.ToString("G"));
+		list.Add(this.val_color.ToString("G"));
+		list.Add(this.val_rect.x.ToString());
+		list.Add(this.val_rect.y.ToString());
+		list.Add(this.val_rect.width.ToString());
+		list.Add(this.val_rect.height.ToString());
+		list.Add(this.val_string);
+		if (this.val_obj != null)
+		{
+			Debug.LogError("AMEventParameter::ToStringData\nオブジェクトの引数には対応していません\nnullで処理します");
+		}
+		list.Add(this.lsArray.Count.ToString());
+		for (int i = 0; i < this.lsArray.Count; i++)
+		{
+			list.Add(this.lsArray[i].ToStringData());
+		}
+		string text = list[0];
+		for (int j = 1; j < list.Count; j++)
+		{
+			text = text + ":" + list[j];
+		}
+		return Convert.ToBase64String(Encoding.GetEncoding("UTF-8").GetBytes(text));
+	}
+
+	public List<GameObject> getDependencies()
+	{
+		List<GameObject> list = new List<GameObject>();
+		if (this.valueType == 11 && this.val_obj)
+		{
+			if (this.val_obj is GameObject)
+			{
+				list.Add((GameObject)this.val_obj);
+			}
+			else
+			{
+				list.Add((this.val_obj as Component).gameObject);
+			}
+		}
+		else if (this.valueType == 12 && this.lsArray.Count > 0 && this.lsArray[0].valueType == 11)
+		{
+			foreach (AMEventParameter ameventParameter in this.lsArray)
+			{
+				if (ameventParameter.val_obj)
+				{
+					if (ameventParameter.val_obj is GameObject)
+					{
+						list.Add((GameObject)ameventParameter.val_obj);
+					}
+					else
+					{
+						list.Add((ameventParameter.val_obj as Component).gameObject);
+					}
+				}
+			}
+		}
+		return list;
+	}
+
+	public bool updateDependencies(List<GameObject> newReferences, List<GameObject> oldReferences)
+	{
+		bool result = false;
+		if (this.valueType == 11 && this.val_obj)
+		{
+			for (int i = 0; i < oldReferences.Count; i++)
+			{
+				if (this.val_obj is GameObject)
+				{
+					if (oldReferences[i] == this.val_obj)
+					{
+						this.val_obj = newReferences[i];
+						result = true;
+						break;
+					}
+				}
+				else if (oldReferences[i] == (this.val_obj as Component).gameObject)
+				{
+					this.val_obj = newReferences[i].GetComponent(this.val_obj.GetType());
+					result = true;
+					break;
+				}
+			}
+		}
+		else if (this.valueType == 12 && this.lsArray.Count > 0 && this.lsArray[0].valueType == 11)
+		{
+			for (int j = 0; j < oldReferences.Count; j++)
+			{
+				foreach (AMEventParameter ameventParameter in this.lsArray)
+				{
+					if (ameventParameter.val_obj)
+					{
+						if (ameventParameter.val_obj is GameObject)
+						{
+							if (oldReferences[j] == ameventParameter.val_obj)
+							{
+								ameventParameter.val_obj = newReferences[j];
+								result = true;
+								break;
+							}
+						}
+						else if (oldReferences[j] == (ameventParameter.val_obj as Component).gameObject)
+						{
+							ameventParameter.val_obj = newReferences[j].GetComponent(ameventParameter.val_obj.GetType());
+							result = true;
+							break;
+						}
+					}
+				}
+			}
+		}
+		return result;
+	}
+
+	public void Write(BinaryWriter binary)
+	{
+		binary.Write(this.valueType);
+		if (this.isArray())
+		{
+			binary.Write(this.lsArray.Count);
+			for (int i = 0; i < this.lsArray.Count; i++)
+			{
+				this.lsArray[i].Write(binary);
+			}
+		}
+		else
+		{
+			AMEventParameter.ValueType valueType = (AMEventParameter.ValueType)this.valueType;
+			if (valueType == AMEventParameter.ValueType.Integer || valueType == AMEventParameter.ValueType.Long)
+			{
+				binary.Write(this.val_int);
+			}
+			else if (valueType == AMEventParameter.ValueType.Float || valueType == AMEventParameter.ValueType.Double)
+			{
+				binary.Write(this.val_float);
+			}
+			else if (valueType == AMEventParameter.ValueType.Vector2)
+			{
+				binary.Write(this.val_vect2.x);
+				binary.Write(this.val_vect2.y);
+			}
+			else if (valueType == AMEventParameter.ValueType.Vector3)
+			{
+				binary.Write(this.val_vect3.x);
+				binary.Write(this.val_vect3.y);
+				binary.Write(this.val_vect3.z);
+			}
+			else if (valueType == AMEventParameter.ValueType.Vector4)
+			{
+				binary.Write(this.val_vect4.x);
+				binary.Write(this.val_vect4.y);
+				binary.Write(this.val_vect4.z);
+				binary.Write(this.val_vect4.w);
+			}
+			else if (valueType == AMEventParameter.ValueType.Color)
+			{
+				binary.Write(this.val_color.a);
+				binary.Write(this.val_color.r);
+				binary.Write(this.val_color.g);
+				binary.Write(this.val_color.b);
+			}
+			else if (valueType == AMEventParameter.ValueType.Rect)
+			{
+				binary.Write(this.val_rect.xMin);
+				binary.Write(this.val_rect.xMax);
+				binary.Write(this.val_rect.yMin);
+				binary.Write(this.val_rect.yMax);
+			}
+			else if (valueType == AMEventParameter.ValueType.String || valueType == AMEventParameter.ValueType.Char)
+			{
+				if (this.val_string == null)
+				{
+					this.val_string = string.Empty;
+				}
+				binary.Write(this.val_string);
+			}
+			else if (valueType == AMEventParameter.ValueType.Boolean)
+			{
+				binary.Write(this.val_bool);
+			}
+			else if (valueType == AMEventParameter.ValueType.Object)
+			{
+				string value = string.Empty;
+				GameObject gameObject = this.val_obj as GameObject;
+				NDebug.Assert(gameObject != null, "AMEventParameter error type.");
+				value = UTY.GetObjectTreePath(gameObject);
+				binary.Write(value);
+			}
+		}
+	}
+
+	public void Read(BinaryReader binary)
+	{
+		this.val_bool = false;
+		this.valueType = 0;
+		this.val_int = 0;
+		this.val_float = 0f;
+		this.val_vect2 = Vector2.zero;
+		this.val_vect3 = Vector3.zero;
+		this.val_vect4 = Vector4.zero;
+		this.val_color = default(Color);
+		this.val_rect = default(Rect);
+		this.val_string = null;
+		this.val_obj = null;
+		this.lsArray.Clear();
+		this.valueType = binary.ReadInt32();
+		if (this.valueType == 12)
+		{
+			int num = binary.ReadInt32();
+			for (int i = 0; i < num; i++)
+			{
+				AMEventParameter ameventParameter = new AMEventParameter();
+				ameventParameter.Read(binary);
+				this.lsArray.Add(ameventParameter);
+			}
+		}
+		else
+		{
+			AMEventParameter.ValueType valueType = (AMEventParameter.ValueType)this.valueType;
+			if (valueType == AMEventParameter.ValueType.Integer || valueType == AMEventParameter.ValueType.Long)
+			{
+				this.val_int = binary.ReadInt32();
+			}
+			else if (valueType == AMEventParameter.ValueType.Float || valueType == AMEventParameter.ValueType.Double)
+			{
+				this.val_float = binary.ReadSingle();
+			}
+			else if (valueType == AMEventParameter.ValueType.Vector2)
+			{
+				this.val_vect2.x = binary.ReadSingle();
+				this.val_vect2.y = binary.ReadSingle();
+			}
+			else if (valueType == AMEventParameter.ValueType.Vector3)
+			{
+				this.val_vect3.x = binary.ReadSingle();
+				this.val_vect3.y = binary.ReadSingle();
+				this.val_vect3.z = binary.ReadSingle();
+			}
+			else if (valueType == AMEventParameter.ValueType.Vector4)
+			{
+				this.val_vect4.x = binary.ReadSingle();
+				this.val_vect4.y = binary.ReadSingle();
+				this.val_vect4.z = binary.ReadSingle();
+				this.val_vect4.w = binary.ReadSingle();
+			}
+			else if (valueType == AMEventParameter.ValueType.Color)
+			{
+				this.val_color.a = binary.ReadSingle();
+				this.val_color.r = binary.ReadSingle();
+				this.val_color.g = binary.ReadSingle();
+				this.val_color.b = binary.ReadSingle();
+			}
+			else if (valueType == AMEventParameter.ValueType.Rect)
+			{
+				this.val_rect.xMin = binary.ReadSingle();
+				this.val_rect.xMax = binary.ReadSingle();
+				this.val_rect.yMin = binary.ReadSingle();
+				this.val_rect.yMax = binary.ReadSingle();
+			}
+			else if (valueType == AMEventParameter.ValueType.String || valueType == AMEventParameter.ValueType.Char)
+			{
+				this.val_string = binary.ReadString();
+			}
+			else if (valueType == AMEventParameter.ValueType.Boolean)
+			{
+				this.val_bool = binary.ReadBoolean();
+			}
+			else if (valueType == AMEventParameter.ValueType.Object)
+			{
+				string name = binary.ReadString();
+				this.val_obj = GameObject.Find(name);
+			}
+		}
+	}
+
+	public bool val_bool;
+
+	public int valueType;
+
+	public int val_int;
+
+	public float val_float;
+
+	public Vector2 val_vect2;
+
+	public Vector3 val_vect3;
+
+	public Vector4 val_vect4;
+
+	public Color val_color;
+
+	public Rect val_rect;
+
+	public string val_string;
+
+	public UnityEngine.Object val_obj;
+
+	public List<AMEventParameter> lsArray = new List<AMEventParameter>();
+
+	public enum ValueType
+	{
+		Integer,
+		Long,
+		Float,
+		Double,
+		Vector2,
+		Vector3,
+		Vector4,
+		Color,
+		Rect,
+		String,
+		Char,
+		Object,
+		Array,
+		Boolean
+	}
+}

+ 138 - 0
Assembly-CSharp/AMEventTrack.cs

@@ -0,0 +1,138 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+[Serializable]
+public class AMEventTrack : AMTrack
+{
+	public override string getTrackType()
+	{
+		return "Event";
+	}
+
+	public override void updateCache()
+	{
+		base.destroyCache();
+		this.cache = new List<AMAction>();
+		base.sortKeys();
+		for (int i = 0; i < this.keys.Count; i++)
+		{
+			AMEventAction ameventAction = ScriptableObject.CreateInstance<AMEventAction>();
+			ameventAction.startFrame = this.keys[i].frame;
+			ameventAction.component = (this.keys[i] as AMEventKey).component;
+			ameventAction.methodInfo = (this.keys[i] as AMEventKey).methodInfo;
+			ameventAction.parameters = (this.keys[i] as AMEventKey).parameters;
+			ameventAction.useSendMessage = (this.keys[i] as AMEventKey).useSendMessage;
+			this.cache.Add(ameventAction);
+		}
+		base.updateCache();
+	}
+
+	public void setObject(GameObject obj)
+	{
+		this.obj = obj;
+	}
+
+	public bool isObjectUnique(GameObject obj)
+	{
+		return this.obj != obj;
+	}
+
+	public void addKey(int _frame)
+	{
+		foreach (AMKey amkey in this.keys)
+		{
+			AMEventKey ameventKey = (AMEventKey)amkey;
+			if (ameventKey.frame == _frame)
+			{
+				return;
+			}
+		}
+		AMEventKey ameventKey2 = ScriptableObject.CreateInstance<AMEventKey>();
+		ameventKey2.frame = _frame;
+		ameventKey2.component = null;
+		ameventKey2.methodName = null;
+		ameventKey2.parameters = null;
+		this.keys.Add(ameventKey2);
+		this.updateCache();
+	}
+
+	public bool hasSameEventsAs(AMEventTrack _track)
+	{
+		return _track.obj == this.obj;
+	}
+
+	public override AnimatorTimeline.JSONInit getJSONInit()
+	{
+		return null;
+	}
+
+	public override List<GameObject> getDependencies()
+	{
+		List<GameObject> list = new List<GameObject>();
+		if (this.obj)
+		{
+			list.Add(this.obj);
+		}
+		foreach (AMKey amkey in this.keys)
+		{
+			AMEventKey ameventKey = (AMEventKey)amkey;
+			list = list.Union(ameventKey.getDependencies()).ToList<GameObject>();
+		}
+		return list;
+	}
+
+	public override List<GameObject> updateDependencies(List<GameObject> newReferences, List<GameObject> oldReferences)
+	{
+		bool flag = false;
+		bool flag2 = false;
+		if (this.obj)
+		{
+			for (int i = 0; i < oldReferences.Count; i++)
+			{
+				if (oldReferences[i] == this.obj)
+				{
+					foreach (AMKey amkey in this.keys)
+					{
+						AMEventKey ameventKey = (AMEventKey)amkey;
+						string name = ameventKey.component.GetType().Name;
+						if (ameventKey.component && newReferences[i].GetComponent(name) == null)
+						{
+							Debug.LogWarning(string.Concat(new string[]
+							{
+								"Animator: Event Track component '",
+								name,
+								"' not found on new reference for GameObject '",
+								this.obj.name,
+								"'. Duplicate not replaced."
+							}));
+							return new List<GameObject>
+							{
+								oldReferences[i]
+							};
+						}
+					}
+					this.obj = newReferences[i];
+					flag = true;
+					break;
+				}
+			}
+		}
+		foreach (AMKey amkey2 in this.keys)
+		{
+			AMEventKey ameventKey2 = (AMEventKey)amkey2;
+			if (ameventKey2.updateDependencies(newReferences, oldReferences, flag, this.obj) && !flag2)
+			{
+				flag2 = true;
+			}
+		}
+		if (flag || flag2)
+		{
+			this.updateCache();
+		}
+		return new List<GameObject>();
+	}
+
+	public GameObject obj;
+}

+ 33 - 0
Assembly-CSharp/AMGroup.cs

@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[Serializable]
+public class AMGroup : ScriptableObject
+{
+	public void init(int group_id = 0, string group_name = null)
+	{
+		this.group_id = group_id;
+		if (group_name == null)
+		{
+			this.group_name = "Group" + Mathf.Abs(this.group_id);
+		}
+		else
+		{
+			this.group_name = group_name;
+		}
+	}
+
+	public void destroy()
+	{
+		UnityEngine.Object.DestroyImmediate(this);
+	}
+
+	public string group_name;
+
+	public int group_id;
+
+	public List<int> elements = new List<int>();
+
+	public bool foldout = true;
+}

+ 152 - 0
Assembly-CSharp/AMKey.cs

@@ -0,0 +1,152 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[Serializable]
+public class AMKey : ScriptableObject
+{
+	public static AMKey CreateTrackType(string track_type)
+	{
+		AMKey result = null;
+		if (track_type != null)
+		{
+			if (!(track_type == "Translation"))
+			{
+				if (!(track_type == "Rotation"))
+				{
+					if (!(track_type == "Event"))
+					{
+						if (!(track_type == "Property"))
+						{
+							if (track_type == "Animation")
+							{
+								result = new AMAnimationKey();
+							}
+						}
+						else
+						{
+							result = new AMPropertyKey();
+						}
+					}
+					else
+					{
+						result = new AMEventKey();
+					}
+				}
+				else
+				{
+					result = new AMRotationKey();
+				}
+			}
+			else
+			{
+				result = new AMTranslationKey();
+			}
+		}
+		return result;
+	}
+
+	public AnimationCurve easeCurve
+	{
+		get
+		{
+			if (this._cachedEaseCurve == null || this._cachedEaseCurve.keys.Length <= 0)
+			{
+				this._cachedEaseCurve = this.getCustomEaseCurve();
+			}
+			return this._cachedEaseCurve;
+		}
+	}
+
+	public virtual void destroy()
+	{
+		UnityEngine.Object.DestroyImmediate(this);
+	}
+
+	public virtual AMKey CreateClone()
+	{
+		AMKey result = ScriptableObject.CreateInstance<AMKey>();
+		Debug.LogError("Animator: No override for CreateClone()");
+		return result;
+	}
+
+	public virtual void CreateFromStringData(string data_text)
+	{
+		Debug.LogError("No override for CreateFromStringData()");
+	}
+
+	public virtual string ToStringData()
+	{
+		Debug.LogError("No override for ToStringData()");
+		return string.Empty;
+	}
+
+	public bool setEaseType(int easeType)
+	{
+		if (easeType != this.easeType)
+		{
+			this.easeType = easeType;
+			if (easeType == 32 && this.customEase.Count <= 0)
+			{
+				this.customEase = new List<float>
+				{
+					0f,
+					0f,
+					1f,
+					1f,
+					1f,
+					1f,
+					1f,
+					1f
+				};
+			}
+			return true;
+		}
+		return false;
+	}
+
+	public void setCustomEase(AnimationCurve curve)
+	{
+		this.customEase = new List<float>();
+		foreach (Keyframe keyframe in curve.keys)
+		{
+			this.customEase.Add(keyframe.time);
+			this.customEase.Add(keyframe.value);
+			this.customEase.Add(keyframe.inTangent);
+			this.customEase.Add(keyframe.outTangent);
+		}
+		this._cachedEaseCurve = null;
+	}
+
+	public AnimationCurve getCustomEaseCurve()
+	{
+		AnimationCurve animationCurve = new AnimationCurve();
+		if (this.customEase.Count < 0)
+		{
+			return animationCurve;
+		}
+		if (this.customEase.Count % 4 != 0)
+		{
+			Debug.LogError("Animator: Error retrieving custom ease.");
+			return animationCurve;
+		}
+		for (int i = 0; i < this.customEase.Count; i += 4)
+		{
+			animationCurve.AddKey(new Keyframe(this.customEase[i], this.customEase[i + 1], this.customEase[i + 2], this.customEase[i + 3]));
+		}
+		return animationCurve;
+	}
+
+	public bool hasCustomEase()
+	{
+		return this.easeType == 32;
+	}
+
+	public int frame;
+
+	public int easeType = 21;
+
+	public List<float> customEase = new List<float>();
+
+	private AnimationCurve _cachedEaseCurve;
+}

+ 286 - 0
Assembly-CSharp/AMOrientationAction.cs

@@ -0,0 +1,286 @@
+using System;
+using System.Runtime.CompilerServices;
+using UnityEngine;
+
+[Serializable]
+public class AMOrientationAction : AMAction
+{
+	public override string ToString(int codeLanguage, int frameRate)
+	{
+		if (this.endFrame == -1 || !this.startTarget)
+		{
+			return null;
+		}
+		string text;
+		if (this.isLookFollow())
+		{
+			if (codeLanguage == 0)
+			{
+				text = string.Concat(new object[]
+				{
+					"AMTween.LookFollow (obj.gameObject, AMTween.Hash (\"delay\", ",
+					base.getWaitTime(frameRate, 0f),
+					"f, \"time\", ",
+					this.getTime(frameRate),
+					"f, "
+				});
+				text = text + "\"looktarget\", GameObject.Find(\"" + this.startTarget.gameObject.name + "\").transform";
+				text += "));";
+			}
+			else
+			{
+				text = string.Concat(new object[]
+				{
+					"AMTween.LookFollow (obj.gameObject, {\"delay\": ",
+					base.getWaitTime(frameRate, 0f),
+					", \"time\": ",
+					this.getTime(frameRate),
+					", "
+				});
+				text = text + "\"looktarget\": GameObject.Find(\"" + this.startTarget.gameObject.name + "\").transform";
+				text += "});";
+			}
+			return text;
+		}
+		if (!this.endTarget)
+		{
+			return null;
+		}
+		if (codeLanguage == 0)
+		{
+			text = string.Concat(new object[]
+			{
+				"AMTween.LookToFollow (obj.gameObject, AMTween.Hash (\"delay\", ",
+				base.getWaitTime(frameRate, 0f),
+				"f, \"time\", ",
+				this.getTime(frameRate),
+				"f, "
+			});
+			text = text + "\"looktarget\", GameObject.Find(\"" + this.endTarget.gameObject.name + "\").transform, ";
+			if (this.isSetEndPosition)
+			{
+				string text2 = text;
+				text = string.Concat(new object[]
+				{
+					text2,
+					"\"endposition\", new Vector3(",
+					this.endPosition.x,
+					"f, ",
+					this.endPosition.y,
+					"f, ",
+					this.endPosition.z,
+					"f), "
+				});
+			}
+			text += base.getEaseString(codeLanguage);
+			text += "));";
+		}
+		else
+		{
+			text = string.Concat(new object[]
+			{
+				"AMTween.LookToFollow (obj.gameObject, {\"delay\": ",
+				base.getWaitTime(frameRate, 0f),
+				", \"time\": ",
+				this.getTime(frameRate),
+				", "
+			});
+			text = text + "\"looktarget\": GameObject.Find(\"" + this.endTarget.gameObject.name + "\").transform, ";
+			if (this.isSetEndPosition)
+			{
+				string text2 = text;
+				text = string.Concat(new object[]
+				{
+					text2,
+					"\"endposition\", Vector3(",
+					this.endPosition.x,
+					", ",
+					this.endPosition.y,
+					", ",
+					this.endPosition.z,
+					"), "
+				});
+			}
+			text += base.getEaseString(codeLanguage);
+			text += "});";
+		}
+		return text;
+	}
+
+	public override void execute(int frameRate, float delay, string trackId)
+	{
+		if (!this.obj)
+		{
+			return;
+		}
+		if (this.endFrame == -1)
+		{
+			return;
+		}
+		if (this.isLookFollow())
+		{
+			AMTween.LookFollow(this.obj.gameObject, AMTween.Hash(new object[]
+			{
+				"trackid",
+				trackId,
+				"delay",
+				base.getWaitTime(frameRate, delay),
+				"time",
+				this.getTime(frameRate),
+				"looktarget",
+				this.startTarget
+			}));
+		}
+		else if (base.hasCustomEase())
+		{
+			AMTween.LookToFollow(this.obj.gameObject, AMTween.Hash(new object[]
+			{
+				"trackid",
+				trackId,
+				"delay",
+				base.getWaitTime(frameRate, delay),
+				"time",
+				this.getTime(frameRate),
+				"looktarget",
+				this.endTarget,
+				"endposition",
+				(!this.isSetEndPosition) ? null : new Vector3?(this.endPosition),
+				"easecurve",
+				base.easeCurve
+			}));
+		}
+		else
+		{
+			AMTween.LookToFollow(this.obj.gameObject, AMTween.Hash(new object[]
+			{
+				"trackid",
+				trackId,
+				"delay",
+				base.getWaitTime(frameRate, delay),
+				"time",
+				this.getTime(frameRate),
+				"looktarget",
+				this.endTarget,
+				"endposition",
+				(!this.isSetEndPosition) ? null : new Vector3?(this.endPosition),
+				"easetype",
+				(AMTween.EaseType)this.easeType
+			}));
+		}
+	}
+
+	public override int getNumberOfFrames()
+	{
+		return this.endFrame - this.startFrame;
+	}
+
+	public float getTime(int frameRate)
+	{
+		return (float)this.getNumberOfFrames() / (float)frameRate;
+	}
+
+	public bool isLookFollow()
+	{
+		return !(this.startTarget != this.endTarget);
+	}
+
+	public Quaternion getQuaternionAtPercent(float percentage, Vector3? startVector = null, Vector3? endVector = null)
+	{
+		if (this.isLookFollow())
+		{
+			this.obj.LookAt(this.startTarget);
+			return this.obj.rotation;
+		}
+		Vector3 position = this.obj.position;
+		if (this.isSetStartPosition)
+		{
+			this.obj.position = this.startPosition;
+		}
+		this.obj.LookAt((startVector == null) ? this.startTarget.position : startVector.Value);
+		Vector3 eulerAngles = this.obj.eulerAngles;
+		if (this.isSetEndPosition)
+		{
+			this.obj.position = this.endPosition;
+		}
+		this.obj.LookAt((endVector == null) ? this.endTarget.position : endVector.Value);
+		Vector3 eulerAngles2 = this.obj.eulerAngles;
+		this.obj.position = position;
+		eulerAngles2 = new Vector3(AMTween.clerp(eulerAngles.x, eulerAngles2.x, 1f), AMTween.clerp(eulerAngles.y, eulerAngles2.y, 1f), AMTween.clerp(eulerAngles.z, eulerAngles2.z, 1f));
+		Vector3 euler = default(Vector3);
+		AnimationCurve curve = null;
+		AMTween.EasingFunction easingFunction;
+		if (base.hasCustomEase())
+		{
+			curve = base.easeCurve;
+			if (AMOrientationAction.<>f__mg$cache0 == null)
+			{
+				AMOrientationAction.<>f__mg$cache0 = new AMTween.EasingFunction(AMTween.customEase);
+			}
+			easingFunction = AMOrientationAction.<>f__mg$cache0;
+		}
+		else
+		{
+			easingFunction = AMTween.GetEasingFunction((AMTween.EaseType)this.easeType);
+		}
+		euler.x = easingFunction(eulerAngles.x, eulerAngles2.x, percentage, curve);
+		euler.y = easingFunction(eulerAngles.y, eulerAngles2.y, percentage, curve);
+		euler.z = easingFunction(eulerAngles.z, eulerAngles2.z, percentage, curve);
+		return Quaternion.Euler(euler);
+	}
+
+	public override AnimatorTimeline.JSONAction getJSONAction(int frameRate)
+	{
+		if (!this.obj || this.endFrame == -1)
+		{
+			return null;
+		}
+		AnimatorTimeline.JSONAction jsonaction = new AnimatorTimeline.JSONAction();
+		jsonaction.go = this.obj.gameObject.name;
+		jsonaction.delay = base.getWaitTime(frameRate, 0f);
+		jsonaction.time = this.getTime(frameRate);
+		if (this.isLookFollow())
+		{
+			jsonaction.method = "lookfollow";
+			jsonaction.strings = new string[]
+			{
+				this.startTarget.gameObject.name
+			};
+		}
+		else
+		{
+			jsonaction.method = "looktofollow";
+			jsonaction.strings = new string[]
+			{
+				this.endTarget.gameObject.name
+			};
+			if (this.isSetEndPosition)
+			{
+				jsonaction.setPath(new Vector3[]
+				{
+					this.endPosition
+				});
+			}
+		}
+		base.setupJSONActionEase(jsonaction);
+		return jsonaction;
+	}
+
+	public int endFrame;
+
+	public Transform obj;
+
+	public Transform startTarget;
+
+	public Transform endTarget;
+
+	public bool isSetStartPosition;
+
+	public bool isSetEndPosition;
+
+	public Vector3 startPosition;
+
+	public Vector3 endPosition;
+
+	[CompilerGenerated]
+	private static AMTween.EasingFunction <>f__mg$cache0;
+}

+ 29 - 0
Assembly-CSharp/AMOrientationKey.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[Serializable]
+public class AMOrientationKey : AMKey
+{
+	public bool setTarget(Transform target)
+	{
+		if (target != this.target)
+		{
+			this.target = target;
+			return true;
+		}
+		return false;
+	}
+
+	public override AMKey CreateClone()
+	{
+		AMOrientationKey amorientationKey = ScriptableObject.CreateInstance<AMOrientationKey>();
+		amorientationKey.frame = this.frame;
+		amorientationKey.target = this.target;
+		amorientationKey.easeType = this.easeType;
+		amorientationKey.customEase = new List<float>(this.customEase);
+		return amorientationKey;
+	}
+
+	public Transform target;
+}

+ 335 - 0
Assembly-CSharp/AMOrientationTrack.cs

@@ -0,0 +1,335 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[Serializable]
+public class AMOrientationTrack : AMTrack
+{
+	public override string getTrackType()
+	{
+		return "Orientation";
+	}
+
+	public bool setObject(Transform obj)
+	{
+		if (this.obj != obj)
+		{
+			this.obj = obj;
+			return true;
+		}
+		return false;
+	}
+
+	public void addKey(int _frame, Transform target)
+	{
+		foreach (AMKey amkey in this.keys)
+		{
+			AMOrientationKey amorientationKey = (AMOrientationKey)amkey;
+			if (amorientationKey.frame == _frame)
+			{
+				amorientationKey.target = target;
+				this.updateCache();
+				return;
+			}
+		}
+		AMOrientationKey amorientationKey2 = ScriptableObject.CreateInstance<AMOrientationKey>();
+		amorientationKey2.frame = _frame;
+		amorientationKey2.target = target;
+		amorientationKey2.easeType = 21;
+		this.keys.Add(amorientationKey2);
+		this.updateCache();
+	}
+
+	public override void updateCache()
+	{
+		this.updateOrientationCache(this.parentTake, false);
+		base.updateCache();
+	}
+
+	public void updateOrientationCache(AMTake curTake, bool restoreRotation = false)
+	{
+		Quaternion rotation = this.obj.rotation;
+		base.sortKeys();
+		base.destroyCache();
+		this.cache = new List<AMAction>();
+		AMTranslationTrack translationTrackForTransform = curTake.getTranslationTrackForTransform(this.obj);
+		for (int i = 0; i < this.keys.Count; i++)
+		{
+			AMOrientationAction amorientationAction = ScriptableObject.CreateInstance<AMOrientationAction>();
+			amorientationAction.startFrame = this.keys[i].frame;
+			if (this.keys.Count > i + 1)
+			{
+				amorientationAction.endFrame = this.keys[i + 1].frame;
+			}
+			else
+			{
+				amorientationAction.endFrame = -1;
+			}
+			amorientationAction.obj = this.obj;
+			amorientationAction.startTarget = (this.keys[i] as AMOrientationKey).target;
+			if (amorientationAction.endFrame != -1)
+			{
+				amorientationAction.endTarget = (this.keys[i + 1] as AMOrientationKey).target;
+			}
+			amorientationAction.easeType = (this.keys[i] as AMOrientationKey).easeType;
+			amorientationAction.customEase = new List<float>(this.keys[i].customEase);
+			if (translationTrackForTransform != null && !amorientationAction.isLookFollow())
+			{
+				amorientationAction.isSetStartPosition = true;
+				amorientationAction.startPosition = translationTrackForTransform.getPositionAtFrame((float)amorientationAction.startFrame);
+				amorientationAction.isSetEndPosition = true;
+				amorientationAction.endPosition = translationTrackForTransform.getPositionAtFrame((float)amorientationAction.endFrame);
+			}
+			this.cache.Add(amorientationAction);
+		}
+		if (restoreRotation)
+		{
+			this.obj.rotation = rotation;
+		}
+	}
+
+	public Transform getInitialTarget()
+	{
+		return (this.keys[0] as AMOrientationKey).target;
+	}
+
+	public override void previewFrame(float frame, AMTrack extraTrack = null)
+	{
+		if (this.cache == null || this.cache.Count <= 0)
+		{
+			return;
+		}
+		int i = 0;
+		while (i < this.cache.Count)
+		{
+			if (frame <= (float)(this.cache[i] as AMOrientationAction).startFrame)
+			{
+				if (!(this.cache[i] as AMOrientationAction).startTarget)
+				{
+					return;
+				}
+				Vector3 worldPosition;
+				if (this.cachedTranslationTrackStartTarget == null)
+				{
+					worldPosition = (this.cache[i] as AMOrientationAction).startTarget.position;
+				}
+				else
+				{
+					worldPosition = (this.cachedTranslationTrackStartTarget as AMTranslationTrack).getPositionAtFrame((float)(this.cache[i] as AMOrientationAction).startFrame);
+				}
+				this.obj.LookAt(worldPosition);
+				return;
+			}
+			else if (frame <= (float)(this.cache[i] as AMOrientationAction).endFrame)
+			{
+				if (!(this.cache[i] as AMOrientationAction).startTarget || !(this.cache[i] as AMOrientationAction).endTarget)
+				{
+					return;
+				}
+				float num = frame - (float)this.cache[i].startFrame;
+				if (num < 0f)
+				{
+					num = 0f;
+				}
+				float percentage = num / (float)this.cache[i].getNumberOfFrames();
+				if ((this.cache[i] as AMOrientationAction).isLookFollow())
+				{
+					this.obj.rotation = (this.cache[i] as AMOrientationAction).getQuaternionAtPercent(percentage, null, null);
+				}
+				else
+				{
+					Vector3? startVector = (!(this.cachedTranslationTrackStartTarget == null)) ? new Vector3?((this.cachedTranslationTrackStartTarget as AMTranslationTrack).getPositionAtFrame((float)(this.cache[i] as AMOrientationAction).startFrame)) : null;
+					Vector3? endVector = (!(this.cachedTranslationTrackEndTarget == null)) ? new Vector3?((this.cachedTranslationTrackEndTarget as AMTranslationTrack).getPositionAtFrame((float)(this.cache[i] as AMOrientationAction).endFrame)) : null;
+					this.obj.rotation = (this.cache[i] as AMOrientationAction).getQuaternionAtPercent(percentage, startVector, endVector);
+				}
+				return;
+			}
+			else if (i == this.cache.Count - 2)
+			{
+				if (!(this.cache[i] as AMOrientationAction).endTarget)
+				{
+					return;
+				}
+				Vector3 worldPosition2;
+				if (this.cachedTranslationTrackEndTarget == null)
+				{
+					worldPosition2 = (this.cache[i] as AMOrientationAction).endTarget.position;
+				}
+				else
+				{
+					worldPosition2 = (this.cachedTranslationTrackEndTarget as AMTranslationTrack).getPositionAtFrame((float)(this.cache[i] as AMOrientationAction).endFrame);
+				}
+				this.obj.LookAt(worldPosition2);
+				return;
+			}
+			else
+			{
+				i++;
+			}
+		}
+	}
+
+	public Transform getStartTargetForFrame(float frame)
+	{
+		foreach (AMAction amaction in this.cache)
+		{
+			AMOrientationAction amorientationAction = (AMOrientationAction)amaction;
+			if ((int)frame <= amorientationAction.endFrame)
+			{
+				return amorientationAction.startTarget;
+			}
+		}
+		return null;
+	}
+
+	public Transform getEndTargetForFrame(float frame)
+	{
+		if (this.cache.Count > 1)
+		{
+			return (this.cache[this.cache.Count - 2] as AMOrientationAction).endTarget;
+		}
+		return null;
+	}
+
+	public Transform getTargetForFrame(float frame)
+	{
+		if (this.isFrameBeyondLastKeyFrame(frame))
+		{
+			return this.getEndTargetForFrame(frame);
+		}
+		return this.getStartTargetForFrame(frame);
+	}
+
+	public void drawGizmos(float gizmo_size, bool inPlayMode, int frame)
+	{
+		if (!this.obj)
+		{
+			return;
+		}
+		if (!inPlayMode)
+		{
+			foreach (AMAction amaction in this.cache)
+			{
+				if ((amaction as AMOrientationAction).startFrame > frame)
+				{
+					break;
+				}
+				if (frame >= (amaction as AMOrientationAction).startFrame && frame <= (amaction as AMOrientationAction).endFrame)
+				{
+					if ((amaction as AMOrientationAction).isLookFollow() && (amaction as AMOrientationAction).startTarget)
+					{
+						Gizmos.color = new Color(0.9607843f, 0.419607848f, 0.117647059f, 0.2f);
+						Gizmos.DrawLine(this.obj.transform.position, (amaction as AMOrientationAction).startTarget.transform.position);
+					}
+					break;
+				}
+			}
+		}
+		Gizmos.color = new Color(0.9607843f, 0.419607848f, 0.117647059f, 1f);
+		Vector3 position = this.obj.transform.position;
+		float num = 1.2f * (gizmo_size / 0.1f);
+		if (num < 0.1f)
+		{
+			num = 0.1f;
+		}
+		Vector3 vector = this.obj.forward * num;
+		float num2 = 20f;
+		float d = 0.3f * num;
+		Gizmos.DrawRay(position, vector);
+		Vector3 a = Quaternion.LookRotation(vector) * Quaternion.Euler(0f, 180f + num2, 0f) * new Vector3(0f, 0f, 1f);
+		Vector3 a2 = Quaternion.LookRotation(vector) * Quaternion.Euler(0f, 180f - num2, 0f) * new Vector3(0f, 0f, 1f);
+		Gizmos.DrawRay(position + vector, a * d);
+		Gizmos.DrawRay(position + vector, a2 * d);
+	}
+
+	public bool isFrameBeyondLastKeyFrame(float frame)
+	{
+		return this.keys.Count > 0 && (int)frame > this.keys[this.keys.Count - 1].frame;
+	}
+
+	public bool hasTarget(Transform obj)
+	{
+		foreach (AMAction amaction in this.cache)
+		{
+			AMOrientationAction amorientationAction = (AMOrientationAction)amaction;
+			if (amorientationAction.startTarget == obj || amorientationAction.endTarget == obj)
+			{
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public override AnimatorTimeline.JSONInit getJSONInit()
+	{
+		if (!this.obj || this.keys.Count <= 0)
+		{
+			return null;
+		}
+		AnimatorTimeline.JSONInit jsoninit = new AnimatorTimeline.JSONInit();
+		jsoninit.type = "orientation";
+		jsoninit.go = this.obj.gameObject.name;
+		Transform initialTarget = this.getInitialTarget();
+		int frame = this.keys[0].frame;
+		AMTrack amtrack = null;
+		if (frame > 0)
+		{
+			amtrack = this.parentTake.getTranslationTrackForTransform(initialTarget);
+		}
+		Vector3 value = initialTarget.transform.position;
+		if (amtrack)
+		{
+			value = (amtrack as AMTranslationTrack).getPositionAtFrame((float)frame);
+		}
+		AnimatorTimeline.JSONVector3 jsonvector = new AnimatorTimeline.JSONVector3();
+		jsonvector.setValue(value);
+		jsoninit.position = jsonvector;
+		return jsoninit;
+	}
+
+	public override List<GameObject> getDependencies()
+	{
+		List<GameObject> list = new List<GameObject>();
+		if (this.obj)
+		{
+			list.Add(this.obj.gameObject);
+		}
+		foreach (AMKey amkey in this.keys)
+		{
+			AMOrientationKey amorientationKey = (AMOrientationKey)amkey;
+			if (amorientationKey.target)
+			{
+				list.Add(amorientationKey.target.gameObject);
+			}
+		}
+		return list;
+	}
+
+	public override List<GameObject> updateDependencies(List<GameObject> newReferences, List<GameObject> oldReferences)
+	{
+		bool flag = false;
+		for (int i = 0; i < oldReferences.Count; i++)
+		{
+			if (!flag && this.obj && oldReferences[i] == this.obj.gameObject)
+			{
+				this.obj = newReferences[i].transform;
+				flag = true;
+			}
+			foreach (AMKey amkey in this.keys)
+			{
+				AMOrientationKey amorientationKey = (AMOrientationKey)amkey;
+				if (amorientationKey.target && oldReferences[i] == amorientationKey.target.gameObject)
+				{
+					amorientationKey.target = newReferences[i].transform;
+				}
+			}
+		}
+		return new List<GameObject>();
+	}
+
+	public Transform obj;
+
+	public AMTrack cachedTranslationTrackStartTarget;
+
+	public AMTrack cachedTranslationTrackEndTarget;
+}

+ 45 - 0
Assembly-CSharp/AMPath.cs

@@ -0,0 +1,45 @@
+using System;
+using UnityEngine;
+
+[Serializable]
+public class AMPath
+{
+	public AMPath()
+	{
+	}
+
+	public AMPath(Vector3[] _path, int _interp, int _startFrame, int _endFrame)
+	{
+		this.path = _path;
+		this.interp = _interp;
+		this.startFrame = _startFrame;
+		this.endFrame = _endFrame;
+	}
+
+	public AMPath(Vector3[] _path, int _interp, int _startFrame, int _endFrame, int _startIndex, int _endIndex)
+	{
+		this.path = _path;
+		this.interp = _interp;
+		this.startFrame = _startFrame;
+		this.endFrame = _endFrame;
+		this.startIndex = _startIndex;
+		this.endIndex = _endIndex;
+	}
+
+	public int getNumberOfFrames()
+	{
+		return this.endFrame - this.startFrame;
+	}
+
+	public Vector3[] path;
+
+	public int interp;
+
+	public int startFrame;
+
+	public int endFrame;
+
+	public int startIndex;
+
+	public int endIndex;
+}

File diff suppressed because it is too large
+ 1409 - 0
Assembly-CSharp/AMPropertyAction.cs


+ 218 - 0
Assembly-CSharp/AMPropertyKey.cs

@@ -0,0 +1,218 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using wf;
+
+[Serializable]
+public class AMPropertyKey : AMKey
+{
+	public bool setValueMegaMorph(List<float> morph)
+	{
+		bool flag = false;
+		if (this.morph == null || this.morph.Count != morph.Count)
+		{
+			flag = true;
+		}
+		else
+		{
+			for (int i = 0; i < morph.Count; i++)
+			{
+				if (this.morph[i] != morph[i])
+				{
+					flag = true;
+					break;
+				}
+			}
+		}
+		if (flag)
+		{
+			this.morph = new List<float>(morph);
+			return true;
+		}
+		return false;
+	}
+
+	public bool setValue(float val)
+	{
+		if (this.val != (double)val)
+		{
+			this.val = (double)val;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setValue(Vector3 vect3)
+	{
+		if (this.vect3 != vect3)
+		{
+			this.vect3 = vect3;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setValue(Color color)
+	{
+		if (this.color != color)
+		{
+			this.color = color;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setValue(Rect rect)
+	{
+		if (this.rect != rect)
+		{
+			this.rect = rect;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setValue(Vector2 vect2)
+	{
+		if (this.vect2 != vect2)
+		{
+			this.vect2 = vect2;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setValue(double val)
+	{
+		if (this.val != val)
+		{
+			this.val = val;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setValue(int val)
+	{
+		if (this.val != (double)val)
+		{
+			this.val = (double)val;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setValue(long val)
+	{
+		if (this.val != (double)val)
+		{
+			this.val = (double)val;
+			return true;
+		}
+		return false;
+	}
+
+	public override AMKey CreateClone()
+	{
+		AMPropertyKey ampropertyKey = ScriptableObject.CreateInstance<AMPropertyKey>();
+		ampropertyKey.frame = this.frame;
+		ampropertyKey.val = this.val;
+		ampropertyKey.vect2 = this.vect2;
+		ampropertyKey.vect3 = this.vect3;
+		ampropertyKey.color = this.color;
+		ampropertyKey.rect = this.rect;
+		if (this.morph != null)
+		{
+			ampropertyKey.morph = new List<float>(this.morph);
+		}
+		ampropertyKey.easeType = this.easeType;
+		ampropertyKey.customEase = new List<float>(this.customEase);
+		return ampropertyKey;
+	}
+
+	public override void CreateFromStringData(string data_text)
+	{
+		string[] array = data_text.Split(new char[]
+		{
+			':'
+		});
+		if (array.Length == 0 || array[0] != "Property")
+		{
+			return;
+		}
+		int num = 1;
+		this.frame = int.Parse(array[num++]);
+		this.val = double.Parse(array[num++]);
+		this.vect2 = Parse.Vector2(array[num++]);
+		this.vect3 = Parse.Vector3(array[num++]);
+		this.color = Parse.Color(array[num++]);
+		this.rect.x = float.Parse(array[num++]);
+		this.rect.y = float.Parse(array[num++]);
+		this.rect.width = float.Parse(array[num++]);
+		this.rect.height = float.Parse(array[num++]);
+		this.morph = null;
+		int num2 = int.Parse(array[num++]);
+		if (0 <= num2)
+		{
+			this.morph = new List<float>();
+			for (int i = 0; i < num2; i++)
+			{
+				this.morph.Add(float.Parse(array[num++]));
+			}
+		}
+		this.easeType = int.Parse(array[num++]);
+		int num3 = int.Parse(array[num++]);
+		this.customEase = new List<float>();
+		for (int j = 0; j < num3; j++)
+		{
+			this.customEase.Add(float.Parse(array[num++]));
+		}
+	}
+
+	public override string ToStringData()
+	{
+		List<string> list = new List<string>();
+		list.Add("Property");
+		list.Add(this.frame.ToString());
+		list.Add(this.val.ToString());
+		list.Add(this.vect2.ToString("G"));
+		list.Add(this.vect3.ToString("G"));
+		list.Add(this.color.ToString("G"));
+		list.Add(this.rect.x.ToString());
+		list.Add(this.rect.y.ToString());
+		list.Add(this.rect.width.ToString());
+		list.Add(this.rect.height.ToString());
+		list.Add(((this.morph != null) ? this.morph.Count : -1).ToString());
+		if (this.morph != null)
+		{
+			foreach (float num in this.morph)
+			{
+				list.Add(num.ToString());
+			}
+		}
+		list.Add(this.easeType.ToString());
+		list.Add(this.customEase.Count.ToString());
+		foreach (float num2 in this.customEase)
+		{
+			list.Add(num2.ToString());
+		}
+		string text = list[0];
+		for (int i = 1; i < list.Count; i++)
+		{
+			text = text + ":" + list[i];
+		}
+		return text;
+	}
+
+	public double val;
+
+	public Vector2 vect2;
+
+	public Vector3 vect3;
+
+	public Color color;
+
+	public Rect rect;
+
+	public List<float> morph;
+}

File diff suppressed because it is too large
+ 1420 - 0
Assembly-CSharp/AMPropertyTrack.cs


+ 155 - 0
Assembly-CSharp/AMRotationAction.cs

@@ -0,0 +1,155 @@
+using System;
+using UnityEngine;
+
+[Serializable]
+public class AMRotationAction : AMAction
+{
+	public override string ToString(int codeLanguage, int frameRate)
+	{
+		if (this.endFrame == -1)
+		{
+			return null;
+		}
+		string text;
+		if (codeLanguage == 0)
+		{
+			text = string.Concat(new object[]
+			{
+				"AMTween.RotateTo (obj.gameObject, AMTween.Hash (\"delay\", ",
+				base.getWaitTime(frameRate, 0f),
+				"f, \"time\", ",
+				this.getTime(frameRate),
+				"f, "
+			});
+			string text2 = text;
+			text = string.Concat(new object[]
+			{
+				text2,
+				"\"rotation\", new Vector3(",
+				this.endRotation.eulerAngles.x,
+				"f, ",
+				this.endRotation.eulerAngles.y,
+				"f, ",
+				this.endRotation.eulerAngles.z,
+				"f), "
+			});
+			text = text + base.getEaseString(codeLanguage) + "));";
+		}
+		else
+		{
+			text = string.Concat(new object[]
+			{
+				"AMTween.RotateTo (obj.gameObject, {\"delay\": ",
+				base.getWaitTime(frameRate, 0f),
+				", \"time\": ",
+				this.getTime(frameRate),
+				", "
+			});
+			string text2 = text;
+			text = string.Concat(new object[]
+			{
+				text2,
+				"\"rotation\": Vector3(",
+				this.endRotation.eulerAngles.x,
+				", ",
+				this.endRotation.eulerAngles.y,
+				", ",
+				this.endRotation.eulerAngles.z,
+				"), "
+			});
+			text = text + base.getEaseString(codeLanguage) + "});";
+		}
+		return text;
+	}
+
+	public override int getNumberOfFrames()
+	{
+		return this.endFrame - this.startFrame;
+	}
+
+	public float getTime(int frameRate)
+	{
+		return (float)this.getNumberOfFrames() / (float)frameRate;
+	}
+
+	public override void execute(int frameRate, float delay, string trackId)
+	{
+		if (!this.obj)
+		{
+			return;
+		}
+		if (this.endFrame == -1)
+		{
+			return;
+		}
+		if (base.hasCustomEase())
+		{
+			AMTween.RotateTo(this.obj.gameObject, AMTween.Hash(new object[]
+			{
+				"trackid",
+				trackId,
+				"delay",
+				base.getWaitTime(frameRate, delay),
+				"time",
+				this.getTime(frameRate),
+				"rotation",
+				this.endRotation.eulerAngles,
+				"easecurve",
+				base.easeCurve
+			}));
+		}
+		else
+		{
+			AMTween.RotateTo(this.obj.gameObject, AMTween.Hash(new object[]
+			{
+				"trackid",
+				trackId,
+				"delay",
+				base.getWaitTime(frameRate, delay),
+				"time",
+				this.getTime(frameRate),
+				"rotation",
+				this.endRotation.eulerAngles,
+				"easetype",
+				(AMTween.EaseType)this.easeType
+			}));
+		}
+	}
+
+	public Quaternion getStartQuaternion()
+	{
+		return this.startRotation;
+	}
+
+	public Quaternion getEndQuaternion()
+	{
+		return this.endRotation;
+	}
+
+	public override AnimatorTimeline.JSONAction getJSONAction(int frameRate)
+	{
+		if (!this.obj || this.endFrame == -1)
+		{
+			return null;
+		}
+		AnimatorTimeline.JSONAction jsonaction = new AnimatorTimeline.JSONAction();
+		jsonaction.go = this.obj.gameObject.name;
+		jsonaction.method = "rotateto";
+		jsonaction.delay = base.getWaitTime(frameRate, 0f);
+		jsonaction.time = this.getTime(frameRate);
+		base.setupJSONActionEase(jsonaction);
+		jsonaction.setPath(new Vector3[]
+		{
+			this.endRotation.eulerAngles
+		});
+		return jsonaction;
+	}
+
+	public int endFrame;
+
+	public Transform obj;
+
+	public Quaternion startRotation;
+
+	public Quaternion endRotation;
+}

+ 93 - 0
Assembly-CSharp/AMRotationKey.cs

@@ -0,0 +1,93 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using wf;
+
+[Serializable]
+public class AMRotationKey : AMKey
+{
+	public bool setRotation(Vector3 rotation)
+	{
+		if (this.rotation != Quaternion.Euler(rotation))
+		{
+			this.rotation = Quaternion.Euler(rotation);
+			return true;
+		}
+		return false;
+	}
+
+	public Vector3 getRotation()
+	{
+		return this.rotation.eulerAngles;
+	}
+
+	public bool setRotationQuaternion(Vector4 rotation)
+	{
+		Quaternion rhs = new Quaternion(rotation.x, rotation.y, rotation.z, rotation.w);
+		if (this.rotation != rhs)
+		{
+			this.rotation = rhs;
+			return true;
+		}
+		return false;
+	}
+
+	public Vector4 getRotationQuaternion()
+	{
+		return new Vector4(this.rotation.x, this.rotation.y, this.rotation.z, this.rotation.w);
+	}
+
+	public override AMKey CreateClone()
+	{
+		AMRotationKey amrotationKey = ScriptableObject.CreateInstance<AMRotationKey>();
+		amrotationKey.frame = this.frame;
+		amrotationKey.rotation = this.rotation;
+		amrotationKey.easeType = this.easeType;
+		amrotationKey.customEase = new List<float>(this.customEase);
+		return amrotationKey;
+	}
+
+	public override void CreateFromStringData(string data_text)
+	{
+		string[] array = data_text.Split(new char[]
+		{
+			':'
+		});
+		if (array.Length == 0 || array[0] != "Rotation")
+		{
+			return;
+		}
+		int num = 1;
+		this.frame = int.Parse(array[num++]);
+		this.rotation = Parse.Quaternion(array[num++]);
+		this.easeType = int.Parse(array[num++]);
+		int num2 = int.Parse(array[num++]);
+		this.customEase = new List<float>();
+		for (int i = 0; i < num2; i++)
+		{
+			this.customEase.Add(float.Parse(array[num++]));
+		}
+	}
+
+	public override string ToStringData()
+	{
+		List<string> list = new List<string>();
+		list.Add("Rotation");
+		list.Add(this.frame.ToString());
+		list.Add(this.rotation.ToString("G"));
+		list.Add(this.easeType.ToString());
+		list.Add(this.customEase.Count.ToString());
+		foreach (float num in this.customEase)
+		{
+			list.Add(num.ToString());
+		}
+		string text = list[0];
+		for (int i = 1; i < list.Count; i++)
+		{
+			text = text + ":" + list[i];
+		}
+		return text;
+	}
+
+	public Quaternion rotation;
+}

+ 336 - 0
Assembly-CSharp/AMRotationTrack.cs

@@ -0,0 +1,336 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.CompilerServices;
+using UnityEngine;
+
+[Serializable]
+public class AMRotationTrack : AMTrack
+{
+	public Transform obj
+	{
+		get
+		{
+			return this._obj;
+		}
+		set
+		{
+			if (value != null && this.cache.Count <= 0)
+			{
+				this.cachedInitialRotation = value.rotation;
+			}
+			this._obj = value;
+			if (this._obj != null)
+			{
+				this.objName = this._obj.name;
+			}
+			else
+			{
+				this.objName = string.Empty;
+			}
+		}
+	}
+
+	public override string getTrackType()
+	{
+		return "Rotation";
+	}
+
+	public void addKey(int _frame, Quaternion _rotation)
+	{
+		foreach (AMKey amkey in this.keys)
+		{
+			AMRotationKey amrotationKey = (AMRotationKey)amkey;
+			if (amrotationKey.frame == _frame)
+			{
+				amrotationKey.rotation = _rotation;
+				this.updateCache();
+				return;
+			}
+		}
+		AMRotationKey amrotationKey2 = ScriptableObject.CreateInstance<AMRotationKey>();
+		amrotationKey2.frame = _frame;
+		amrotationKey2.rotation = _rotation;
+		amrotationKey2.easeType = 21;
+		this.keys.Add(amrotationKey2);
+		this.updateCache();
+	}
+
+	public bool changeObject(Transform _obj)
+	{
+		this.obj = _obj;
+		this.updateCache();
+		return true;
+	}
+
+	public override void updateCache()
+	{
+		if (this._obj != null)
+		{
+			this.objName = this._obj.name;
+		}
+		else
+		{
+			this.objName = string.Empty;
+		}
+		base.sortKeys();
+		base.destroyCache();
+		this.cache = new List<AMAction>();
+		for (int i = 0; i < this.keys.Count; i++)
+		{
+			AMRotationAction amrotationAction = ScriptableObject.CreateInstance<AMRotationAction>();
+			amrotationAction.startFrame = this.keys[i].frame;
+			if (this.keys.Count > i + 1)
+			{
+				amrotationAction.endFrame = this.keys[i + 1].frame;
+			}
+			else
+			{
+				amrotationAction.endFrame = -1;
+			}
+			amrotationAction.obj = this.obj;
+			amrotationAction.startRotation = (this.keys[i] as AMRotationKey).rotation;
+			if (amrotationAction.endFrame != -1)
+			{
+				amrotationAction.endRotation = (this.keys[i + 1] as AMRotationKey).rotation;
+			}
+			amrotationAction.easeType = (this.keys[i] as AMRotationKey).easeType;
+			amrotationAction.customEase = new List<float>(this.keys[i].customEase);
+			this.cache.Add(amrotationAction);
+		}
+		base.updateCache();
+	}
+
+	public override void previewFrame(float frame, AMTrack extraTrack = null)
+	{
+		if (!this.obj)
+		{
+			return;
+		}
+		if (string.IsNullOrEmpty(this.objName))
+		{
+			this.objName = this.obj.name;
+		}
+		if (this.cache.Count <= 0)
+		{
+			return;
+		}
+		if (this.cache[0] == null)
+		{
+			this.updateCache();
+		}
+		if (frame <= (float)this.cache[0].startFrame || (this.cache[0] as AMRotationAction).endFrame == -1)
+		{
+			this.obj.rotation = (this.cache[0] as AMRotationAction).getStartQuaternion();
+			return;
+		}
+		if (frame >= (float)(this.cache[this.cache.Count - 2] as AMRotationAction).endFrame)
+		{
+			this.obj.rotation = (this.cache[this.cache.Count - 2] as AMRotationAction).getEndQuaternion();
+			return;
+		}
+		foreach (AMAction amaction in this.cache)
+		{
+			AMRotationAction amrotationAction = (AMRotationAction)amaction;
+			if (frame >= (float)amrotationAction.startFrame && frame <= (float)amrotationAction.endFrame)
+			{
+				if (frame == (float)amrotationAction.startFrame)
+				{
+					this.obj.rotation = amrotationAction.getStartQuaternion();
+					break;
+				}
+				if (frame == (float)amrotationAction.endFrame)
+				{
+					this.obj.rotation = amrotationAction.getEndQuaternion();
+					break;
+				}
+				AnimationCurve curve = null;
+				AMTween.EasingFunction easingFunction;
+				if (amrotationAction.hasCustomEase())
+				{
+					if (AMRotationTrack.<>f__mg$cache0 == null)
+					{
+						AMRotationTrack.<>f__mg$cache0 = new AMTween.EasingFunction(AMTween.customEase);
+					}
+					easingFunction = AMRotationTrack.<>f__mg$cache0;
+					curve = amrotationAction.easeCurve;
+				}
+				else
+				{
+					easingFunction = AMTween.GetEasingFunction((AMTween.EaseType)amrotationAction.easeType);
+				}
+				float num = frame - (float)amrotationAction.startFrame;
+				if (num < 0f)
+				{
+					num = 0f;
+				}
+				float value = num / (float)amrotationAction.getNumberOfFrames();
+				Quaternion startQuaternion = amrotationAction.getStartQuaternion();
+				Quaternion endQuaternion = amrotationAction.getEndQuaternion();
+				Quaternion rotation = default(Quaternion);
+				rotation.x = easingFunction(startQuaternion.x, endQuaternion.x, value, curve);
+				rotation.y = easingFunction(startQuaternion.y, endQuaternion.y, value, curve);
+				rotation.z = easingFunction(startQuaternion.z, endQuaternion.z, value, curve);
+				rotation.w = easingFunction(startQuaternion.w, endQuaternion.w, value, curve);
+				this.obj.rotation = rotation;
+				break;
+			}
+		}
+	}
+
+	public bool autoKey(Transform _obj, int frame)
+	{
+		if (!this.obj)
+		{
+			return false;
+		}
+		if (this.obj != _obj)
+		{
+			return false;
+		}
+		if (this.cache.Count <= 0)
+		{
+			if (_obj.rotation != this.cachedInitialRotation)
+			{
+				this.addKey(frame, _obj.rotation);
+				return true;
+			}
+			return false;
+		}
+		else
+		{
+			Quaternion rotationAtFrame = this.getRotationAtFrame((float)frame);
+			if (_obj.rotation != rotationAtFrame)
+			{
+				this.addKey(frame, _obj.rotation);
+				return true;
+			}
+			return false;
+		}
+	}
+
+	public Quaternion getRotationAtFrame(float frame)
+	{
+		if (frame <= (float)this.cache[0].startFrame || (this.cache[0] as AMRotationAction).endFrame == -1)
+		{
+			return (this.cache[0] as AMRotationAction).getStartQuaternion();
+		}
+		if (frame >= (float)(this.cache[this.cache.Count - 2] as AMRotationAction).endFrame)
+		{
+			return (this.cache[this.cache.Count - 2] as AMRotationAction).getEndQuaternion();
+		}
+		foreach (AMAction amaction in this.cache)
+		{
+			AMRotationAction amrotationAction = (AMRotationAction)amaction;
+			if (frame >= (float)amrotationAction.startFrame && frame <= (float)amrotationAction.endFrame)
+			{
+				if (frame == (float)amrotationAction.startFrame)
+				{
+					return amrotationAction.getStartQuaternion();
+				}
+				if (frame == (float)amrotationAction.endFrame)
+				{
+					return amrotationAction.getEndQuaternion();
+				}
+				AnimationCurve curve = null;
+				AMTween.EasingFunction easingFunction;
+				if (amrotationAction.hasCustomEase())
+				{
+					if (AMRotationTrack.<>f__mg$cache1 == null)
+					{
+						AMRotationTrack.<>f__mg$cache1 = new AMTween.EasingFunction(AMTween.customEase);
+					}
+					easingFunction = AMRotationTrack.<>f__mg$cache1;
+					curve = amrotationAction.easeCurve;
+				}
+				else
+				{
+					easingFunction = AMTween.GetEasingFunction((AMTween.EaseType)amrotationAction.easeType);
+				}
+				float num = frame - (float)amrotationAction.startFrame;
+				if (num < 0f)
+				{
+					num = 0f;
+				}
+				float value = num / (float)amrotationAction.getNumberOfFrames();
+				Quaternion startQuaternion = amrotationAction.getStartQuaternion();
+				Quaternion endQuaternion = amrotationAction.getEndQuaternion();
+				return new Quaternion
+				{
+					x = easingFunction(startQuaternion.x, endQuaternion.x, value, curve),
+					y = easingFunction(startQuaternion.y, endQuaternion.y, value, curve),
+					z = easingFunction(startQuaternion.z, endQuaternion.z, value, curve),
+					w = easingFunction(startQuaternion.w, endQuaternion.w, value, curve)
+				};
+			}
+		}
+		Debug.LogError(string.Concat(new object[]
+		{
+			"Animator: Could not get ",
+			this.obj.name,
+			" rotation at frame '",
+			frame,
+			"'"
+		}));
+		return new Quaternion(0f, 0f, 0f, 0f);
+	}
+
+	public Vector4 getInitialRotation()
+	{
+		return (this.keys[0] as AMRotationKey).getRotationQuaternion();
+	}
+
+	public override AnimatorTimeline.JSONInit getJSONInit()
+	{
+		if (!this.obj || this.keys.Count <= 0)
+		{
+			return null;
+		}
+		AnimatorTimeline.JSONInit jsoninit = new AnimatorTimeline.JSONInit();
+		jsoninit.type = "rotation";
+		jsoninit.go = this.obj.gameObject.name;
+		AnimatorTimeline.JSONQuaternion jsonquaternion = new AnimatorTimeline.JSONQuaternion();
+		jsonquaternion.setValue(this.getInitialRotation());
+		jsoninit.rotation = jsonquaternion;
+		return jsoninit;
+	}
+
+	public override List<GameObject> getDependencies()
+	{
+		List<GameObject> list = new List<GameObject>();
+		if (this.obj)
+		{
+			list.Add(this.obj.gameObject);
+		}
+		return list;
+	}
+
+	public override List<GameObject> updateDependencies(List<GameObject> newReferences, List<GameObject> oldReferences)
+	{
+		if (!this.obj)
+		{
+			return new List<GameObject>();
+		}
+		for (int i = 0; i < oldReferences.Count; i++)
+		{
+			if (oldReferences[i] == this.obj.gameObject)
+			{
+				this.obj = newReferences[i].transform;
+				break;
+			}
+		}
+		return new List<GameObject>();
+	}
+
+	[SerializeField]
+	private Transform _obj;
+
+	public string objName;
+
+	public Quaternion cachedInitialRotation;
+
+	[CompilerGenerated]
+	private static AMTween.EasingFunction <>f__mg$cache0;
+
+	[CompilerGenerated]
+	private static AMTween.EasingFunction <>f__mg$cache1;
+}

File diff suppressed because it is too large
+ 1977 - 0
Assembly-CSharp/AMTake.cs


+ 13 - 0
Assembly-CSharp/AMTarget.cs

@@ -0,0 +1,13 @@
+using System;
+using UnityEngine;
+
+public class AMTarget : MonoBehaviour
+{
+	private void OnDrawGizmos()
+	{
+		Gizmos.color = new Color(0.9607843f, 0.419607848f, 0.117647059f, 1f);
+		Gizmos.DrawSphere(base.transform.position, 0.2f * (this.gizmo_size / 0.1f));
+	}
+
+	public float gizmo_size = 0.1f;
+}

+ 350 - 0
Assembly-CSharp/AMTrack.cs

@@ -0,0 +1,350 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[Serializable]
+public class AMTrack : ScriptableObject
+{
+	public void setName(int index)
+	{
+		this.name = "Track" + (index + 1);
+	}
+
+	public void setName(string name)
+	{
+		this.name = name;
+	}
+
+	public bool hasKeyOnFrame(int _frame)
+	{
+		foreach (AMKey amkey in this.keys)
+		{
+			if (amkey.frame == _frame)
+			{
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public virtual void drawGizmos(float gizmo_size)
+	{
+	}
+
+	public virtual void previewFrame(float frame, AMTrack extraTrack = null)
+	{
+	}
+
+	public virtual void updateCache()
+	{
+		AMCameraFade.doShouldUpdateStill();
+	}
+
+	public virtual AnimatorTimeline.JSONInit getJSONInit()
+	{
+		Debug.LogWarning("Animator: No override for getJSONInit()");
+		return new AnimatorTimeline.JSONInit();
+	}
+
+	public AMKey getKeyOnFrame(int _frame)
+	{
+		foreach (AMKey amkey in this.keys)
+		{
+			if (amkey.frame == _frame)
+			{
+				return amkey;
+			}
+		}
+		Debug.LogError("Animator: No key found on frame " + _frame);
+		return new AMKey();
+	}
+
+	public virtual string getTrackType()
+	{
+		return "Unknown";
+	}
+
+	public void sortKeys()
+	{
+		this.keys.Sort((AMKey c, AMKey d) => c.frame.CompareTo(d.frame));
+	}
+
+	public void deleteKeyOnFrame(int frame)
+	{
+		for (int i = 0; i < this.keys.Count; i++)
+		{
+			if (this.keys[i].frame == frame)
+			{
+				this.keys[i].destroy();
+				this.keys.RemoveAt(i);
+			}
+		}
+	}
+
+	public void deleteDuplicateKeys()
+	{
+		this.sortKeys();
+		int num = -1;
+		for (int i = 0; i < this.keys.Count; i++)
+		{
+			if (this.keys[i].frame == num)
+			{
+				this.keys[i].destroy();
+				this.keys.RemoveAt(i);
+				i--;
+			}
+			else
+			{
+				num = this.keys[i].frame;
+			}
+		}
+	}
+
+	public void deleteAllKeys()
+	{
+		foreach (AMKey amkey in this.keys)
+		{
+			amkey.destroy();
+		}
+		this.destroyCache();
+		this.keys = new List<AMKey>();
+	}
+
+	public void deleteKeysAfter(int frame)
+	{
+		for (int i = 0; i < this.keys.Count; i++)
+		{
+			if (this.keys[i].frame > frame)
+			{
+				this.keys[i].destroy();
+				this.keys.RemoveAt(i);
+				i--;
+			}
+		}
+	}
+
+	public void destroy()
+	{
+		foreach (AMKey amkey in this.keys)
+		{
+			amkey.destroy();
+		}
+		this.destroyCache();
+		UnityEngine.Object.DestroyImmediate(this);
+	}
+
+	public virtual List<GameObject> getDependencies()
+	{
+		return new List<GameObject>();
+	}
+
+	public virtual List<GameObject> updateDependencies(List<GameObject> newReferences, List<GameObject> oldReferences)
+	{
+		return new List<GameObject>();
+	}
+
+	public void destroyCache()
+	{
+		if (this.cache == null)
+		{
+			return;
+		}
+		foreach (AMAction amaction in this.cache)
+		{
+			if (!(amaction == null))
+			{
+				amaction.destroy();
+			}
+		}
+		this.cache = null;
+	}
+
+	public void offsetKeysFromBy(int frame, int amount)
+	{
+		if (this.keys.Count <= 0)
+		{
+			return;
+		}
+		for (int i = 0; i < this.keys.Count; i++)
+		{
+			if (frame <= 0 || this.keys[i].frame >= frame)
+			{
+				this.keys[i].frame += amount;
+			}
+		}
+		this.updateCache();
+	}
+
+	public int shiftOutOfBoundsKeys()
+	{
+		if (this.keys.Count <= 0)
+		{
+			return 0;
+		}
+		this.sortKeys();
+		if (this.keys[0].frame >= 1)
+		{
+			return 0;
+		}
+		int num = 0;
+		num = Mathf.Abs(this.keys[0].frame) + 1;
+		foreach (AMKey amkey in this.keys)
+		{
+			amkey.frame += num;
+		}
+		this.updateCache();
+		return num;
+	}
+
+	public AMAction getActionContainingFrame(int frame)
+	{
+		for (int i = this.cache.Count - 1; i >= 0; i--)
+		{
+			if (frame >= this.cache[i].startFrame)
+			{
+				return this.cache[i];
+			}
+		}
+		if (this.cache.Count > 0)
+		{
+			return this.cache[0];
+		}
+		Debug.LogError("Animator: No action found for frame " + frame);
+		return ScriptableObject.CreateInstance<AMAction>();
+	}
+
+	public AMAction getActionForFrame(int startFrame)
+	{
+		foreach (AMAction amaction in this.cache)
+		{
+			if (amaction.startFrame == startFrame)
+			{
+				return amaction;
+			}
+		}
+		Debug.LogError("Animator: No action found for frame " + startFrame);
+		return ScriptableObject.CreateInstance<AMAction>();
+	}
+
+	public int getActionIndexForFrame(int startFrame)
+	{
+		for (int i = 0; i < this.cache.Count; i++)
+		{
+			if (this.cache[i].startFrame == startFrame)
+			{
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	public bool hasActionOnFrame(int _frame)
+	{
+		foreach (AMAction amaction in this.cache)
+		{
+			if (amaction.startFrame == _frame)
+			{
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public int getKeyFrameAfterFrame(int frame, bool wholeTake = true)
+	{
+		foreach (AMKey amkey in this.keys)
+		{
+			if (amkey.frame > frame)
+			{
+				return amkey.frame;
+			}
+		}
+		if (!wholeTake)
+		{
+			return -1;
+		}
+		if (this.keys.Count > 0)
+		{
+			return this.keys[0].frame;
+		}
+		Debug.LogError("Animator: No key found after frame " + frame);
+		return -1;
+	}
+
+	public int getKeyFrameBeforeFrame(int frame, bool wholeTake = true)
+	{
+		for (int i = this.keys.Count - 1; i >= 0; i--)
+		{
+			if (this.keys[i].frame < frame)
+			{
+				return this.keys[i].frame;
+			}
+		}
+		if (!wholeTake)
+		{
+			return -1;
+		}
+		if (this.keys.Count > 0)
+		{
+			return this.keys[this.keys.Count - 1].frame;
+		}
+		Debug.LogError("Animator: No key found before frame " + frame);
+		return -1;
+	}
+
+	public AMKey[] getKeyFramesInBetween(int startFrame, int endFrame)
+	{
+		List<AMKey> list = new List<AMKey>();
+		if (startFrame <= 0 || endFrame <= 0 || startFrame >= endFrame || !this.hasKeyOnFrame(startFrame) || !this.hasKeyOnFrame(endFrame))
+		{
+			return list.ToArray();
+		}
+		this.sortKeys();
+		foreach (AMKey amkey in this.keys)
+		{
+			if (amkey.frame >= endFrame)
+			{
+				break;
+			}
+			if (amkey.frame > startFrame)
+			{
+				list.Add(amkey);
+			}
+		}
+		return list.ToArray();
+	}
+
+	public float[] getKeyFrameRatiosInBetween(int startFrame, int endFrame)
+	{
+		List<float> list = new List<float>();
+		if (startFrame <= 0 || endFrame <= 0 || startFrame >= endFrame || !this.hasKeyOnFrame(startFrame) || !this.hasKeyOnFrame(endFrame))
+		{
+			return list.ToArray();
+		}
+		this.sortKeys();
+		foreach (AMKey amkey in this.keys)
+		{
+			if (amkey.frame >= endFrame)
+			{
+				break;
+			}
+			if (amkey.frame > startFrame)
+			{
+				list.Add((float)(amkey.frame - startFrame) / (float)(endFrame - startFrame));
+			}
+		}
+		return list.ToArray();
+	}
+
+	public int id;
+
+	public new string name;
+
+	public List<AMKey> keys = new List<AMKey>();
+
+	public List<AMAction> cache = new List<AMAction>();
+
+	public bool foldout = true;
+
+	public AMTake parentTake;
+}

+ 258 - 0
Assembly-CSharp/AMTranslationAction.cs

@@ -0,0 +1,258 @@
+using System;
+using UnityEngine;
+
+[Serializable]
+public class AMTranslationAction : AMAction
+{
+	public override string ToString(int codeLanguage, int frameRate)
+	{
+		if (this.path.Length <= 1)
+		{
+			return null;
+		}
+		if (this.getNumberOfFrames() <= 0)
+		{
+			return null;
+		}
+		string text;
+		if (codeLanguage == 0)
+		{
+			text = string.Concat(new object[]
+			{
+				"AMTween.MoveTo (obj.gameObject, AMTween.Hash (\"delay\", ",
+				base.getWaitTime(frameRate, 0f),
+				"f, \"time\", ",
+				this.getTime(frameRate),
+				"f, "
+			});
+			if (this.path.Length == 2)
+			{
+				text += "\"position\", ";
+				string text2 = text;
+				text = string.Concat(new object[]
+				{
+					text2,
+					"new Vector3(",
+					this.path[1].x,
+					"f, ",
+					this.path[1].y,
+					"f, ",
+					this.path[1].z,
+					"f), "
+				});
+			}
+			else
+			{
+				text += "\"path\", new Vector3[]{";
+				for (int i = 0; i < this.path.Length; i++)
+				{
+					string text2 = text;
+					text = string.Concat(new object[]
+					{
+						text2,
+						"new Vector3(",
+						this.path[i].x,
+						"f, ",
+						this.path[i].y,
+						"f, ",
+						this.path[i].z,
+						"f)"
+					});
+					if (i < this.path.Length - 1)
+					{
+						text += ", ";
+					}
+				}
+				text += "}, ";
+			}
+			text = text + base.getEaseString(codeLanguage) + "));";
+		}
+		else
+		{
+			text = string.Concat(new object[]
+			{
+				"AMTween.MoveTo (obj.gameObject, {\"delay\": ",
+				base.getWaitTime(frameRate, 0f),
+				", \"time\": ",
+				this.getTime(frameRate),
+				", "
+			});
+			if (this.path.Length == 2)
+			{
+				text += "\"position\": ";
+				string text2 = text;
+				text = string.Concat(new object[]
+				{
+					text2,
+					" Vector3(",
+					this.path[1].x,
+					", ",
+					this.path[1].y,
+					", ",
+					this.path[1].z,
+					"), "
+				});
+			}
+			else
+			{
+				text += "\"path\": [";
+				for (int j = 0; j < this.path.Length; j++)
+				{
+					string text2 = text;
+					text = string.Concat(new object[]
+					{
+						text2,
+						" Vector3(",
+						this.path[j].x,
+						", ",
+						this.path[j].y,
+						", ",
+						this.path[j].z,
+						")"
+					});
+					if (j < this.path.Length - 1)
+					{
+						text += ", ";
+					}
+				}
+				text += "], ";
+			}
+			text = text + base.getEaseString(codeLanguage) + "});";
+		}
+		return text;
+	}
+
+	public override int getNumberOfFrames()
+	{
+		return this.endFrame - this.startFrame;
+	}
+
+	public float getTime(int frameRate)
+	{
+		return (float)this.getNumberOfFrames() / (float)frameRate;
+	}
+
+	public override void execute(int frameRate, float delay, string trackId)
+	{
+		if (!this.obj)
+		{
+			return;
+		}
+		if (this.path.Length <= 1)
+		{
+			return;
+		}
+		if (this.getNumberOfFrames() <= 0)
+		{
+			return;
+		}
+		if (this.path.Length == 2)
+		{
+			if (base.hasCustomEase())
+			{
+				AMTween.MoveTo(this.obj.gameObject, AMTween.Hash(new object[]
+				{
+					"trackid",
+					trackId,
+					"delay",
+					base.getWaitTime(frameRate, delay),
+					"time",
+					this.getTime(frameRate),
+					"position",
+					this.path[1],
+					"easecurve",
+					base.easeCurve
+				}));
+			}
+			else
+			{
+				AMTween.MoveTo(this.obj.gameObject, AMTween.Hash(new object[]
+				{
+					"trackid",
+					trackId,
+					"delay",
+					base.getWaitTime(frameRate, delay),
+					"time",
+					this.getTime(frameRate),
+					"position",
+					this.path[1],
+					"easetype",
+					(AMTween.EaseType)this.easeType
+				}));
+			}
+			return;
+		}
+		if (base.hasCustomEase())
+		{
+			AMTween.MoveTo(this.obj.gameObject, AMTween.Hash(new object[]
+			{
+				"trackid",
+				trackId,
+				"delay",
+				base.getWaitTime(frameRate, delay),
+				"time",
+				this.getTime(frameRate),
+				"path",
+				this.path,
+				"easecurve",
+				base.easeCurve
+			}));
+		}
+		else
+		{
+			AMTween.MoveTo(this.obj.gameObject, AMTween.Hash(new object[]
+			{
+				"trackid",
+				trackId,
+				"delay",
+				base.getWaitTime(frameRate, delay),
+				"time",
+				this.getTime(frameRate),
+				"path",
+				this.path,
+				"easetype",
+				(AMTween.EaseType)this.easeType
+			}));
+		}
+	}
+
+	public override AnimatorTimeline.JSONAction getJSONAction(int frameRate)
+	{
+		if (!this.obj)
+		{
+			return null;
+		}
+		if (this.path.Length <= 1)
+		{
+			return null;
+		}
+		if (this.getNumberOfFrames() <= 0)
+		{
+			return null;
+		}
+		AnimatorTimeline.JSONAction jsonaction = new AnimatorTimeline.JSONAction();
+		jsonaction.go = this.obj.gameObject.name;
+		jsonaction.method = "moveto";
+		jsonaction.delay = base.getWaitTime(frameRate, 0f);
+		jsonaction.time = this.getTime(frameRate);
+		base.setupJSONActionEase(jsonaction);
+		if (this.path.Length == 2)
+		{
+			jsonaction.setPath(new Vector3[]
+			{
+				this.path[1]
+			});
+		}
+		else
+		{
+			jsonaction.setPath(this.path);
+		}
+		return jsonaction;
+	}
+
+	public int endFrame;
+
+	public Transform obj;
+
+	public Vector3[] path;
+}

+ 99 - 0
Assembly-CSharp/AMTranslationKey.cs

@@ -0,0 +1,99 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using wf;
+
+[Serializable]
+public class AMTranslationKey : AMKey
+{
+	public bool setInterpolation(int _interp)
+	{
+		if (_interp != this.interp)
+		{
+			this.interp = _interp;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setPosition(Vector3 position)
+	{
+		if (position != this.position)
+		{
+			this.position = position;
+			return true;
+		}
+		return false;
+	}
+
+	public override AMKey CreateClone()
+	{
+		AMTranslationKey amtranslationKey = ScriptableObject.CreateInstance<AMTranslationKey>();
+		amtranslationKey.frame = this.frame;
+		amtranslationKey.position = this.position;
+		amtranslationKey.interp = this.interp;
+		amtranslationKey.easeType = this.easeType;
+		amtranslationKey.customEase = new List<float>(this.customEase);
+		return amtranslationKey;
+	}
+
+	public override void CreateFromStringData(string data_text)
+	{
+		string[] array = data_text.Split(new char[]
+		{
+			':'
+		});
+		if (array.Length == 0 || array[0] != "Translation")
+		{
+			return;
+		}
+		int num = 1;
+		this.frame = int.Parse(array[num++]);
+		this.position = Parse.Vector3(array[num++]);
+		this.interp = int.Parse(array[num++]);
+		this.easeType = int.Parse(array[num++]);
+		int num2 = int.Parse(array[num++]);
+		this.customEase = new List<float>();
+		for (int i = 0; i < num2; i++)
+		{
+			this.customEase.Add(float.Parse(array[num++]));
+		}
+	}
+
+	public override string ToStringData()
+	{
+		List<string> list = new List<string>();
+		list.Add("Translation");
+		list.Add(this.frame.ToString());
+		list.Add(this.position.ToString("G"));
+		list.Add(this.interp.ToString());
+		list.Add(this.easeType.ToString());
+		list.Add(this.customEase.Count.ToString());
+		foreach (float num in this.customEase)
+		{
+			list.Add(num.ToString());
+		}
+		string text = list[0];
+		for (int i = 1; i < list.Count; i++)
+		{
+			text = text + ":" + list[i];
+		}
+		return text;
+	}
+
+	public static string[] InterpolationNames = new string[]
+	{
+		"Curve",
+		"Linear"
+	};
+
+	public Vector3 position;
+
+	public int interp;
+
+	public enum Interpolation
+	{
+		Curve,
+		Linear
+	}
+}

+ 383 - 0
Assembly-CSharp/AMTranslationTrack.cs

@@ -0,0 +1,383 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.CompilerServices;
+using UnityEngine;
+
+[Serializable]
+public class AMTranslationTrack : AMTrack
+{
+	public Transform obj
+	{
+		get
+		{
+			return this._obj;
+		}
+		set
+		{
+			if (value != null && this.cache.Count <= 0)
+			{
+				this.cachedInitialPosition = value.position;
+			}
+			this._obj = value;
+			if (this._obj != null)
+			{
+				this.objName = this._obj.name;
+			}
+			else
+			{
+				this.objName = string.Empty;
+			}
+		}
+	}
+
+	public override string getTrackType()
+	{
+		return "Translation";
+	}
+
+	public void addKey(int _frame, Vector3 _position, int _interp, int _easeType)
+	{
+		foreach (AMKey amkey in this.keys)
+		{
+			AMTranslationKey amtranslationKey = (AMTranslationKey)amkey;
+			if (amtranslationKey.frame == _frame)
+			{
+				amtranslationKey.position = _position;
+				amtranslationKey.interp = _interp;
+				amtranslationKey.easeType = _easeType;
+				this.updateCache();
+				return;
+			}
+		}
+		AMTranslationKey amtranslationKey2 = ScriptableObject.CreateInstance<AMTranslationKey>();
+		amtranslationKey2.frame = _frame;
+		amtranslationKey2.position = _position;
+		amtranslationKey2.interp = _interp;
+		amtranslationKey2.easeType = _easeType;
+		this.keys.Add(amtranslationKey2);
+		this.updateCache();
+	}
+
+	public void addKey(int _frame, Vector3 _position)
+	{
+		foreach (AMKey amkey in this.keys)
+		{
+			AMTranslationKey amtranslationKey = (AMTranslationKey)amkey;
+			if (amtranslationKey.frame == _frame)
+			{
+				amtranslationKey.position = _position;
+				this.updateCache();
+				return;
+			}
+		}
+		AMTranslationKey amtranslationKey2 = ScriptableObject.CreateInstance<AMTranslationKey>();
+		amtranslationKey2.frame = _frame;
+		amtranslationKey2.position = _position;
+		this.keys.Add(amtranslationKey2);
+		this.updateCache();
+	}
+
+	public bool changeObject(Transform _obj)
+	{
+		this.obj = _obj;
+		this.updateCache();
+		return true;
+	}
+
+	public override void previewFrame(float frame, AMTrack extraTrack = null)
+	{
+		if (!this.obj)
+		{
+			return;
+		}
+		if (string.IsNullOrEmpty(this.objName))
+		{
+			this.objName = this.obj.name;
+		}
+		if (this.cache.Count <= 0)
+		{
+			return;
+		}
+		if (frame <= (float)this.cache[0].startFrame)
+		{
+			this.obj.position = (this.cache[0] as AMTranslationAction).path[0];
+			return;
+		}
+		if (frame >= (float)(this.cache[this.cache.Count - 1] as AMTranslationAction).endFrame)
+		{
+			this.obj.position = (this.cache[this.cache.Count - 1] as AMTranslationAction).path[(this.cache[this.cache.Count - 1] as AMTranslationAction).path.Length - 1];
+			return;
+		}
+		foreach (AMAction amaction in this.cache)
+		{
+			AMTranslationAction amtranslationAction = (AMTranslationAction)amaction;
+			if (frame >= (float)amtranslationAction.startFrame && frame <= (float)amtranslationAction.endFrame)
+			{
+				if (amtranslationAction.path.Length == 1)
+				{
+					this.obj.position = amtranslationAction.path[0];
+					break;
+				}
+				float num = frame - (float)amtranslationAction.startFrame;
+				if (num < 0f)
+				{
+					num = 0f;
+				}
+				AnimationCurve curve = null;
+				AMTween.EasingFunction easingFunction;
+				if (amtranslationAction.hasCustomEase())
+				{
+					if (AMTranslationTrack.<>f__mg$cache0 == null)
+					{
+						AMTranslationTrack.<>f__mg$cache0 = new AMTween.EasingFunction(AMTween.customEase);
+					}
+					easingFunction = AMTranslationTrack.<>f__mg$cache0;
+					curve = amtranslationAction.easeCurve;
+				}
+				else
+				{
+					easingFunction = AMTween.GetEasingFunction((AMTween.EaseType)amtranslationAction.easeType);
+				}
+				float value = easingFunction(0f, 1f, num / (float)amtranslationAction.getNumberOfFrames(), curve);
+				AMTween.PutOnPath(this.obj, amtranslationAction.path, Mathf.Clamp(value, 0f, 1f));
+				break;
+			}
+		}
+	}
+
+	public bool autoKey(Transform _obj, int frame)
+	{
+		if (!this.obj)
+		{
+			return false;
+		}
+		if (_obj != this.obj)
+		{
+			return false;
+		}
+		if (this.cache.Count <= 0)
+		{
+			if (_obj.position != this.cachedInitialPosition)
+			{
+				this.addKey(frame, _obj.position);
+				return true;
+			}
+			return false;
+		}
+		else
+		{
+			Vector3 positionAtFrame = this.getPositionAtFrame((float)frame);
+			if (_obj.position != positionAtFrame)
+			{
+				this.addKey(frame, _obj.position);
+				return true;
+			}
+			return false;
+		}
+	}
+
+	public Vector3 getPositionAtFrame(float frame)
+	{
+		if (this.cache.Count <= 0)
+		{
+			return this.obj.position;
+		}
+		if (frame <= (float)this.cache[0].startFrame)
+		{
+			return (this.cache[0] as AMTranslationAction).path[0];
+		}
+		if (frame >= (float)(this.cache[this.cache.Count - 1] as AMTranslationAction).endFrame)
+		{
+			return (this.cache[this.cache.Count - 1] as AMTranslationAction).path[(this.cache[this.cache.Count - 1] as AMTranslationAction).path.Length - 1];
+		}
+		foreach (AMAction amaction in this.cache)
+		{
+			AMTranslationAction amtranslationAction = (AMTranslationAction)amaction;
+			if ((int)frame >= amtranslationAction.startFrame && (int)frame <= amtranslationAction.endFrame)
+			{
+				if (amtranslationAction.path.Length == 1)
+				{
+					return amtranslationAction.path[0];
+				}
+				AnimationCurve curve = null;
+				AMTween.EasingFunction easingFunction;
+				if (amtranslationAction.hasCustomEase())
+				{
+					if (AMTranslationTrack.<>f__mg$cache1 == null)
+					{
+						AMTranslationTrack.<>f__mg$cache1 = new AMTween.EasingFunction(AMTween.customEase);
+					}
+					easingFunction = AMTranslationTrack.<>f__mg$cache1;
+					curve = amtranslationAction.easeCurve;
+				}
+				else
+				{
+					easingFunction = AMTween.GetEasingFunction((AMTween.EaseType)amtranslationAction.easeType);
+				}
+				float num = frame - (float)amtranslationAction.startFrame;
+				if (num < 0f)
+				{
+					num = 0f;
+				}
+				return AMTween.PointOnPath(amtranslationAction.path, Mathf.Clamp(easingFunction(0f, 1f, num / (float)amtranslationAction.getNumberOfFrames(), curve), 0f, 1f));
+			}
+		}
+		Debug.LogError(string.Concat(new object[]
+		{
+			"Animator: Could not get ",
+			this.obj.name,
+			" position at frame '",
+			frame,
+			"'"
+		}));
+		return new Vector3(0f, 0f, 0f);
+	}
+
+	public override void drawGizmos(float gizmo_size)
+	{
+		foreach (AMAction amaction in this.cache)
+		{
+			AMTranslationAction amtranslationAction = (AMTranslationAction)amaction;
+			if (amtranslationAction.path.Length > 1)
+			{
+				AMTween.DrawPath(amtranslationAction.path, new Color(255f, 255f, 255f, 0.5f));
+				Gizmos.color = Color.green;
+				Gizmos.DrawSphere(amtranslationAction.path[0], gizmo_size);
+				Gizmos.DrawSphere(amtranslationAction.path[amtranslationAction.path.Length - 1], gizmo_size);
+			}
+		}
+	}
+
+	private AMPath getPathFromIndex(int startIndex)
+	{
+		List<Vector3> list = new List<Vector3>();
+		int endIndex = startIndex;
+		int frame = this.keys[startIndex].frame;
+		int frame2 = this.keys[startIndex].frame;
+		list.Add((this.keys[startIndex] as AMTranslationKey).position);
+		for (int i = startIndex + 1; i < this.keys.Count; i++)
+		{
+			list.Add((this.keys[i] as AMTranslationKey).position);
+			frame2 = this.keys[i].frame;
+			endIndex = i;
+			if ((this.keys[i] as AMTranslationKey).interp == 1)
+			{
+				break;
+			}
+		}
+		return new AMPath(list.ToArray(), (this.keys[startIndex] as AMTranslationKey).interp, frame, frame2, startIndex, endIndex);
+	}
+
+	public override void updateCache()
+	{
+		if (this._obj != null)
+		{
+			this.objName = this._obj.name;
+		}
+		else
+		{
+			this.objName = string.Empty;
+		}
+		base.destroyCache();
+		this.cache = new List<AMAction>();
+		base.sortKeys();
+		for (int i = 0; i < this.keys.Count; i++)
+		{
+			AMPath pathFromIndex = this.getPathFromIndex(i);
+			AMTranslationAction amtranslationAction = ScriptableObject.CreateInstance<AMTranslationAction>();
+			amtranslationAction.startFrame = pathFromIndex.startFrame;
+			amtranslationAction.endFrame = pathFromIndex.endFrame;
+			amtranslationAction.obj = this.obj;
+			amtranslationAction.path = pathFromIndex.path;
+			amtranslationAction.easeType = (this.keys[i] as AMTranslationKey).easeType;
+			amtranslationAction.customEase = new List<float>(this.keys[i].customEase);
+			this.cache.Add(amtranslationAction);
+			if (i < this.keys.Count - 1)
+			{
+				i = pathFromIndex.endIndex - 1;
+			}
+		}
+		foreach (AMTrack amtrack in this.parentTake.trackValues)
+		{
+			if (amtrack is AMOrientationTrack && ((amtrack as AMOrientationTrack).obj == this.obj || (amtrack as AMOrientationTrack).hasTarget(this.obj)))
+			{
+				amtrack.updateCache();
+			}
+		}
+		base.updateCache();
+	}
+
+	public AMTranslationKey getActionStartKeyFor(int frame)
+	{
+		foreach (AMAction amaction in this.cache)
+		{
+			AMTranslationAction amtranslationAction = (AMTranslationAction)amaction;
+			if (frame >= amtranslationAction.startFrame && frame < amtranslationAction.endFrame)
+			{
+				return (AMTranslationKey)base.getKeyOnFrame(amtranslationAction.startFrame);
+			}
+		}
+		Debug.LogError("Animator: Action for frame " + frame + " does not exist in cache.");
+		return new AMTranslationKey();
+	}
+
+	public Vector3 getInitialPosition()
+	{
+		return (this.keys[0] as AMTranslationKey).position;
+	}
+
+	public override AnimatorTimeline.JSONInit getJSONInit()
+	{
+		if (!this.obj || this.keys.Count <= 0)
+		{
+			return null;
+		}
+		AnimatorTimeline.JSONInit jsoninit = new AnimatorTimeline.JSONInit();
+		jsoninit.type = "position";
+		jsoninit.go = this.obj.gameObject.name;
+		AnimatorTimeline.JSONVector3 jsonvector = new AnimatorTimeline.JSONVector3();
+		jsonvector.setValue(this.getInitialPosition());
+		jsoninit.position = jsonvector;
+		return jsoninit;
+	}
+
+	public override List<GameObject> getDependencies()
+	{
+		List<GameObject> list = new List<GameObject>();
+		if (this.obj)
+		{
+			list.Add(this.obj.gameObject);
+		}
+		return list;
+	}
+
+	public override List<GameObject> updateDependencies(List<GameObject> newReferences, List<GameObject> oldReferences)
+	{
+		if (!this.obj)
+		{
+			return new List<GameObject>();
+		}
+		for (int i = 0; i < oldReferences.Count; i++)
+		{
+			if (oldReferences[i] == this.obj.gameObject)
+			{
+				this.obj = newReferences[i].transform;
+				break;
+			}
+		}
+		return new List<GameObject>();
+	}
+
+	[SerializeField]
+	private Transform _obj;
+
+	public string objName;
+
+	public Vector3 cachedInitialPosition;
+
+	[CompilerGenerated]
+	private static AMTween.EasingFunction <>f__mg$cache0;
+
+	[CompilerGenerated]
+	private static AMTween.EasingFunction <>f__mg$cache1;
+}

File diff suppressed because it is too large
+ 6717 - 0
Assembly-CSharp/AMTween.cs


+ 169 - 0
Assembly-CSharp/AMWriteBinaryData.cs

@@ -0,0 +1,169 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+public class AMWriteBinaryData
+{
+	public AMWriteBinaryData(AnimatorData anime_data)
+	{
+		this.anime_data_ = anime_data;
+		NDebug.AssertNull(this.anime_data_);
+		NDebug.Assert(this.anime_data_.takes.Count == 1, "take over error.");
+		this.total_frame_ = this.anime_data_.getCurrentTake().numFrames;
+		this.frame_rate_ = this.anime_data_.getCurrentTake().frameRate;
+	}
+
+	public static bool PossibleBinaryConvert(AMTrack track)
+	{
+		return AMBinaryTranslation.CheckType(track) || AMBinaryRotation.CheckType(track) || AMBinaryProperty.CheckType(track) || AMBinaryMethod.CheckType(track);
+	}
+
+	public void CreateData(BinaryWriter binary)
+	{
+		binary.Write("BaseData");
+		binary.Write(this.total_frame_);
+		binary.Write(this.frame_rate_);
+		AMTake currentTake = this.anime_data_.getCurrentTake();
+		List<AMTrack> trackValues = currentTake.trackValues;
+		for (int i = 0; i < trackValues.Count; i++)
+		{
+			trackValues[i].updateCache();
+			if (AMBinaryTranslation.CheckType(trackValues[i]))
+			{
+				this.CreateBinaryTranslation(trackValues[i]).Write(binary);
+			}
+			else if (AMBinaryRotation.CheckType(trackValues[i]))
+			{
+				this.CreateBinaryRotation(trackValues[i]).Write(binary);
+			}
+			else if (AMBinaryProperty.CheckType(trackValues[i]))
+			{
+				this.CreateBinaryProperty(trackValues[i]).Write(binary);
+			}
+			else if (AMBinaryMethod.CheckType(trackValues[i]))
+			{
+				this.CreateBinaryMethod(trackValues[i]).Write(binary);
+			}
+		}
+		binary.Write("Finish");
+	}
+
+	public AMBinaryTranslation CreateBinaryTranslation(AMTrack track_data)
+	{
+		if (!AMBinaryTranslation.CheckType(track_data))
+		{
+			return null;
+		}
+		AMTranslationTrack amtranslationTrack = track_data as AMTranslationTrack;
+		AMBinaryTranslation ambinaryTranslation = new AMBinaryTranslation();
+		this.CreateBaseData(track_data, amtranslationTrack.obj.gameObject, ambinaryTranslation);
+		ambinaryTranslation.pos_array = new Vector3[this.total_frame_];
+		for (int i = 1; i <= this.total_frame_; i++)
+		{
+			int num = i - 1;
+			ambinaryTranslation.pos_array[num] = amtranslationTrack.getPositionAtFrame((float)i);
+		}
+		return ambinaryTranslation;
+	}
+
+	public AMBinaryRotation CreateBinaryRotation(AMTrack track_data)
+	{
+		if (!AMBinaryRotation.CheckType(track_data))
+		{
+			return null;
+		}
+		AMRotationTrack amrotationTrack = track_data as AMRotationTrack;
+		AMBinaryRotation ambinaryRotation = new AMBinaryRotation();
+		this.CreateBaseData(track_data, amrotationTrack.obj.gameObject, ambinaryRotation);
+		ambinaryRotation.quaternion_array = new Quaternion[this.total_frame_];
+		for (int i = 1; i <= this.total_frame_; i++)
+		{
+			int num = i - 1;
+			ambinaryRotation.quaternion_array[num] = amrotationTrack.getRotationAtFrame((float)i);
+		}
+		return ambinaryRotation;
+	}
+
+	public AMBinaryProperty CreateBinaryProperty(AMTrack track_data)
+	{
+		if (!AMBinaryProperty.CheckType(track_data))
+		{
+			return null;
+		}
+		AMPropertyTrack prop_track = track_data as AMPropertyTrack;
+		AMBinaryProperty ambinaryProperty = new AMBinaryProperty();
+		ambinaryProperty.component_name = prop_track.getComponentName();
+		ambinaryProperty.property_name = prop_track.propertyName;
+		ambinaryProperty.value_type = (AMPropertyTrack.ValueType)prop_track.valueType;
+		this.CreateBaseData(track_data, prop_track.obj, ambinaryProperty);
+		if (prop_track.valueType == 2)
+		{
+			this.CreateBinaryPropertyGeneric<float>(ref ambinaryProperty.float_val_array, prop_track, () => (float)prop_track.getPropertyValueNumeric());
+		}
+		else if (prop_track.valueType == 0)
+		{
+			this.CreateBinaryPropertyGeneric<int>(ref ambinaryProperty.int_val_array, prop_track, () => (int)prop_track.getPropertyValueNumeric());
+		}
+		else if (prop_track.valueType == 5)
+		{
+			this.CreateBinaryPropertyGeneric<Vector3>(ref ambinaryProperty.vec3_val_array, prop_track, new Func<Vector3>(prop_track.getPropertyValueVector3));
+		}
+		else if (prop_track.valueType == 6)
+		{
+			this.CreateBinaryPropertyGeneric<Color>(ref ambinaryProperty.color_val_array, prop_track, new Func<Color>(prop_track.getPropertyValueColor));
+		}
+		return ambinaryProperty;
+	}
+
+	private void CreateBinaryPropertyGeneric<T>(ref T[] ref_array, AMPropertyTrack prop_track, Func<T> get_prop_func) where T : struct
+	{
+		ref_array = new T[this.total_frame_];
+		for (int i = 1; i <= this.total_frame_; i++)
+		{
+			prop_track.previewFrame((float)i, false);
+			int num = i - 1;
+			ref_array[num] = get_prop_func();
+		}
+	}
+
+	public AMBinaryMethod CreateBinaryMethod(AMTrack track_data)
+	{
+		if (!AMBinaryMethod.CheckType(track_data))
+		{
+			return null;
+		}
+		AMBinaryMethod ambinaryMethod = new AMBinaryMethod();
+		List<AMBinaryMethod.MethodData> list = new List<AMBinaryMethod.MethodData>();
+		AMEventTrack ameventTrack = track_data as AMEventTrack;
+		List<AMAction> cache = ameventTrack.cache;
+		this.CreateBaseData(track_data, ameventTrack.obj, ambinaryMethod);
+		for (int i = 0; i < cache.Count; i++)
+		{
+			AMEventAction ameventAction = cache[i] as AMEventAction;
+			list.Add(new AMBinaryMethod.MethodData
+			{
+				start_flame = ameventAction.startFrame - 1,
+				component_name = ameventAction.methodInfo.DeclaringType.Name,
+				method_name = ameventAction.methodName,
+				param_list = ameventAction.parameters
+			});
+		}
+		ambinaryMethod.method_data_array = list.ToArray();
+		return ambinaryMethod;
+	}
+
+	private void CreateBaseData(AMTrack track_data, GameObject target_obj, AMBinaryDataBaseObject write_data)
+	{
+		write_data.obj = target_obj;
+		write_data.object_tree_path = UTY.GetObjectTreePath(target_obj);
+		write_data.total_frame = this.total_frame_;
+		write_data.track_id = track_data.id;
+	}
+
+	private AnimatorData anime_data_;
+
+	private int total_frame_;
+
+	private int frame_rate_;
+}

+ 68 - 0
Assembly-CSharp/AVProVideoPlayer.cs

@@ -0,0 +1,68 @@
+using System;
+using System.IO;
+using RenderHeads.Media.AVProVideo;
+using UnityEngine;
+
+public class AVProVideoPlayer : MonoBehaviour
+{
+	private void Awake()
+	{
+		this.m_player = base.GetComponent<MediaPlayer>();
+		NDebug.Assert(this.m_player != null, "MediaPlayer コンポーネントが付いてないといけません。");
+		this.m_player.m_VideoLocation = MediaPlayer.FileLocation.AbsolutePathOrURL;
+		this.m_player.m_VideoPath = Path.GetFullPath(".\\") + "GameData\\" + this.m_player.m_VideoPath;
+		string dshowFilter = GameMain.Instance.CMSystem.SConfig.DShowFilter;
+		MediaPlayer.OptionsWindows platformOptionsWindows = this.m_player.PlatformOptionsWindows;
+		if (!string.IsNullOrEmpty(dshowFilter))
+		{
+			platformOptionsWindows.preferredFilters.Add(dshowFilter);
+			Debug.Log("[VideoPlayer] preferredFilters.Add(" + dshowFilter + ").");
+		}
+		else
+		{
+			Debug.Log("[VideoPlayer] SConfig.DShowFilter\u3000には値が設定されていませんでした。");
+		}
+		platformOptionsWindows.useHardwareDecoding = true;
+		Debug.Log("[VideoPlayer] useHardwareDecoding = true.");
+		platformOptionsWindows.videoApi = Windows.VideoApi.MediaFoundation;
+		Debug.Log("[VideoPlayer] videoApi = " + platformOptionsWindows.videoApi.ToString());
+	}
+
+	private void Start()
+	{
+		bool flag = this.m_player.OpenVideoFromFile(MediaPlayer.FileLocation.AbsolutePathOrURL, this.m_player.m_VideoPath, false);
+		NDebug.Assert(flag, "ビデオファイルを開けませんでした。\n" + this.m_player.m_VideoPath);
+		if (flag && this.m_player.VideoOpened && this.m_bAutoStart)
+		{
+			this.Play();
+		}
+	}
+
+	public void Play()
+	{
+		if (this.m_player.VideoOpened)
+		{
+			this.m_player.Play();
+		}
+	}
+
+	public void Stop()
+	{
+		if (this.m_player.VideoOpened)
+		{
+			this.m_player.Stop();
+		}
+	}
+
+	public void Speed(float f_fSpeed)
+	{
+		if (this.m_player.VideoOpened)
+		{
+			this.m_player.m_PlaybackRate = f_fSpeed;
+		}
+	}
+
+	private MediaPlayer m_player;
+
+	public bool m_bAutoStart;
+}

+ 214 - 0
Assembly-CSharp/AVRController.cs

@@ -0,0 +1,214 @@
+using System;
+using UnityEngine;
+
+public abstract class AVRController : MonoBehaviour
+{
+	public bool IsControllerTypeNew
+	{
+		get
+		{
+			return this.m_bControllerModeNew;
+		}
+	}
+
+	public AVRControllerButtons VRControllerButtons
+	{
+		get
+		{
+			return this.m_CtrlBtn;
+		}
+	}
+
+	public OvrMgr.OvrObject.Controller VRControllerObj
+	{
+		get
+		{
+			return this.m_obj_controller;
+		}
+	}
+
+	public bool HandEnable
+	{
+		get
+		{
+			return this.m_bHandEnable;
+		}
+		set
+		{
+			this.m_bHandEnable = value;
+		}
+	}
+
+	public Transform UIRayTrans
+	{
+		get
+		{
+			return this.m_trUIRayTrans;
+		}
+	}
+
+	public bool UIRayEnable
+	{
+		get
+		{
+			return this.m_bUIRayEnable;
+		}
+		set
+		{
+			this.m_bUIRayEnable = value;
+		}
+	}
+
+	public abstract bool IsHandCameraMode { get; }
+
+	public abstract bool HandCameraMode { get; set; }
+
+	public abstract bool IsHandPenMode { get; }
+
+	public abstract AVRControllerBehavior.LIMIT_MODE HandLimitMode { get; set; }
+
+	public abstract bool HandModelVisible { get; set; }
+
+	public abstract bool HandDanceMode { get; set; }
+
+	public abstract bool HandVRIKMode { get; set; }
+
+	public abstract bool HandYotogiMode { get; set; }
+
+	public virtual void Init()
+	{
+		this.m_CtrlBtn = base.GetComponent<AVRControllerButtons>();
+		OvrMgr.OvrObject ovr_obj = GameMain.Instance.OvrMgr.ovr_obj;
+		if (base.gameObject.name.ToLower().Contains("left"))
+		{
+			this.m_bHandL = true;
+			this.m_obj_controller = ovr_obj.left_controller;
+		}
+		else if (base.gameObject.name.ToLower().Contains("right"))
+		{
+			this.m_bHandL = false;
+			this.m_obj_controller = ovr_obj.right_controller;
+		}
+		this.m_obj_controller.hand_trans = base.transform;
+		this.m_obj_controller.controller = this;
+		this.m_obj_controller.controller_buttons = this.m_CtrlBtn;
+		Transform transform = base.transform.Find("Grab");
+		this.m_obj_controller.grip_collider = transform.GetComponent<OvrGripCollider>();
+		this.m_obj_controller.grip_collider.Init(this.m_CtrlBtn);
+		this.m_trHandHit = base.transform.Find("HandHit");
+		NDebug.Assert(this.m_trHandHit != null);
+		this.m_obj_controller.hand_trans_hit = this.m_trHandHit;
+		this.m_trUIRayTrans = base.transform.Find("UIRay");
+		NDebug.Assert(this.m_trUIRayTrans != null, "UIRayがみつかりません。");
+		this.m_VREventGrab = base.GetComponent<VREventNotifierGrab>();
+		if (this.m_VREventGrab != null)
+		{
+			this.m_VREventGrab.Init(this.m_obj_controller);
+		}
+	}
+
+	public virtual void ChangeControllerNew(bool f_bNew)
+	{
+		if (f_bNew)
+		{
+			this.m_CtrlBehOld.enabled = false;
+			this.m_CtrlBehNew.enabled = true;
+			this.m_CtrlBehNow = this.m_CtrlBehNew;
+		}
+		else
+		{
+			this.m_CtrlBehNew.enabled = false;
+			this.m_CtrlBehOld.enabled = true;
+			this.m_CtrlBehNow = this.m_CtrlBehOld;
+		}
+		this.m_CtrlBehNow.HandCameraMode = false;
+		this.m_CtrlBehNow.HandLimitMode = AVRControllerBehavior.LIMIT_MODE.NORMAL;
+		this.m_bControllerModeNew = f_bNew;
+	}
+
+	public virtual void DefaultControllerMode(bool f_bEnable)
+	{
+		if (f_bEnable)
+		{
+			this.ChangeControllerNew(this.m_bControllerModeNew);
+		}
+		else
+		{
+			this.m_CtrlBehOld.enabled = false;
+			this.m_CtrlBehNew.enabled = false;
+		}
+	}
+
+	public virtual void OnEnable()
+	{
+		this.HandHitReset();
+	}
+
+	private void HandHitReset()
+	{
+		if (this.m_trHandHit == null)
+		{
+			return;
+		}
+		int maidCount = GameMain.Instance.CharacterMgr.GetMaidCount();
+		for (int i = 0; i < maidCount; i++)
+		{
+			Maid maid = GameMain.Instance.CharacterMgr.GetMaid(i);
+			if (maid != null && maid.body0)
+			{
+				if (this.m_bHandL)
+				{
+					maid.body0.m_trHandHitL = this.m_trHandHit;
+				}
+				else
+				{
+					maid.body0.m_trHandHitR = this.m_trHandHit;
+				}
+			}
+		}
+	}
+
+	public Vector3 GetHandMoveVelocity()
+	{
+		return this.m_CtrlBehNow.GetVelocityHand();
+	}
+
+	public float GetHandRotVelocityY()
+	{
+		return this.m_CtrlBehNow.GetRotHandY();
+	}
+
+	public Vector3 GetCamMoveVelocity()
+	{
+		return this.m_CtrlBehNow.m_vMoveCam;
+	}
+
+	public float GetCamRotVelocityY()
+	{
+		return this.m_CtrlBehNow.m_fRotCam;
+	}
+
+	public bool m_bHandL = true;
+
+	protected bool m_bHandEnable = true;
+
+	protected bool m_bControllerModeNew;
+
+	protected AVRControllerBehavior m_CtrlBehNow;
+
+	protected AVRControllerBehavior m_CtrlBehOld;
+
+	protected AVRControllerBehavior m_CtrlBehNew;
+
+	protected AVRControllerButtons m_CtrlBtn;
+
+	protected VREventNotifierGrab m_VREventGrab;
+
+	protected OvrMgr.OvrObject.Controller m_obj_controller;
+
+	protected Transform m_trUIRayTrans;
+
+	protected bool m_bUIRayEnable = true;
+
+	protected Transform m_trHandHit;
+}

+ 98 - 0
Assembly-CSharp/AVRControllerBehavior.cs

@@ -0,0 +1,98 @@
+using System;
+using UnityEngine;
+
+public abstract class AVRControllerBehavior : MonoBehaviour
+{
+	public abstract Vector3 GetVelocityHand();
+
+	public abstract float GetRotHandY();
+
+	public abstract AVRControllerBehavior.BEH_TYPE BehaviourType { get; }
+
+	public abstract bool IsHandCameraMode { get; }
+
+	public abstract bool HandCameraMode { get; set; }
+
+	public abstract bool IsHandPenMode { get; }
+
+	public abstract bool HandDanceMode { get; set; }
+
+	public abstract bool HandVRIKMode { get; set; }
+
+	public abstract bool HandYotogiMode { get; set; }
+
+	public virtual AVRControllerBehavior.LIMIT_MODE HandLimitMode
+	{
+		get
+		{
+			return this.m_eHandLimitMode;
+		}
+		set
+		{
+			this.m_eHandLimitMode = value;
+		}
+	}
+
+	public virtual bool HandModelVisible
+	{
+		get
+		{
+			return this.m_bHandModelVisible;
+		}
+		set
+		{
+			this.m_bHandModelVisible = value;
+		}
+	}
+
+	protected virtual void Awake()
+	{
+	}
+
+	public virtual void Init(AVRController f_controller)
+	{
+		this.m_controller = f_controller;
+		this.m_buttons = this.m_controller.VRControllerButtons;
+		this.m_obj_controller = this.m_controller.VRControllerObj;
+	}
+
+	public bool m_bHandL = true;
+
+	public Vector3 m_vMoveCam;
+
+	public float m_fRotCam;
+
+	protected OvrMgr.OvrObject.Controller m_obj_controller;
+
+	protected AVRController m_controller;
+
+	protected AVRControllerButtons m_buttons;
+
+	protected Transform m_trTabletPenRoot;
+
+	protected GameObject m_goTabletPen;
+
+	protected AVRControllerBehavior.LIMIT_MODE m_eHandLimitMode;
+
+	protected bool m_bHandModelVisible = true;
+
+	protected bool m_bHandDanceMode;
+
+	protected bool m_bHandVRIKMode;
+
+	protected bool m_bHandYotogiMode;
+
+	public enum BEH_TYPE
+	{
+		LEGACY,
+		NEW,
+		DUMMY
+	}
+
+	public enum LIMIT_MODE
+	{
+		NORMAL,
+		NO_WARP,
+		HAND_ONLY
+	}
+}

+ 91 - 0
Assembly-CSharp/AVRControllerButtons.cs

@@ -0,0 +1,91 @@
+using System;
+using UnityEngine;
+
+public abstract class AVRControllerButtons : MonoBehaviour
+{
+	protected virtual void Awake()
+	{
+		if (base.gameObject.name.ToLower().Contains("left"))
+		{
+			this.m_bHandL = true;
+		}
+		else if (base.gameObject.name.ToLower().Contains("right"))
+		{
+			this.m_bHandL = false;
+		}
+	}
+
+	public AVRControllerButtons.TYPE Type
+	{
+		get
+		{
+			return this.m_eType;
+		}
+	}
+
+	public virtual bool HandSide
+	{
+		get
+		{
+			return this.m_bHandL;
+		}
+		set
+		{
+			this.m_bHandL = value;
+		}
+	}
+
+	public abstract bool ShowHand { get; set; }
+
+	public abstract void Haptic(byte f_byFoce, float f_fTime);
+
+	public abstract bool GetPressDown(AVRControllerButtons.BTN f_eBtn);
+
+	public abstract bool GetPress(AVRControllerButtons.BTN f_eBtn);
+
+	public abstract bool GetPressUp(AVRControllerButtons.BTN f_eBtn);
+
+	public abstract bool GetTouchDown(AVRControllerButtons.TOUCH f_eTouch);
+
+	public abstract bool GetTouch(AVRControllerButtons.TOUCH f_eTouch);
+
+	public abstract bool GetTouchUp(AVRControllerButtons.TOUCH f_eTouch);
+
+	public abstract Vector2 GetAxis();
+
+	public abstract float GetTriggerRate();
+
+	protected bool m_bHandL = true;
+
+	protected AVRControllerButtons.TYPE m_eType = AVRControllerButtons.TYPE.TOUCH;
+
+	public enum BTN
+	{
+		VIRTUAL_MENU,
+		VIRTUAL_L_CLICK,
+		VIRTUAL_R_CLICK,
+		VIRTUAL_GRUB,
+		MENU,
+		TRIGGER,
+		STICK_PAD,
+		GRIP,
+		MAX
+	}
+
+	public enum TOUCH
+	{
+		TRIGGER,
+		STICK_PAD,
+		REST,
+		YB,
+		XA,
+		MAX
+	}
+
+	public enum TYPE
+	{
+		NON_DUMMY,
+		TOUCH,
+		VIVE
+	}
+}

+ 18 - 0
Assembly-CSharp/AVRTrackingObjectsMgr.cs

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public abstract class AVRTrackingObjectsMgr : MonoBehaviour
+{
+	public List<Transform> TrackingObjects
+	{
+		get
+		{
+			return this.m_listTrackTracker;
+		}
+	}
+
+	public abstract void Refresh();
+
+	protected List<Transform> m_listTrackTracker = new List<Transform>();
+}

+ 158 - 0
Assembly-CSharp/AWReadBinaryData.cs

@@ -0,0 +1,158 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+using wf;
+
+public class AWReadBinaryData
+{
+	public AWReadBinaryData()
+	{
+		this.file_name_ = string.Empty;
+	}
+
+	public static float FrameToTime(int frame, float frameRate)
+	{
+		return (float)System.Math.Round((double)((float)frame / frameRate), 2);
+	}
+
+	public static int TimeToFrame(float time, float frameRate)
+	{
+		return Mathf.FloorToInt(time * frameRate);
+	}
+
+	public void ReadFile(string file_name)
+	{
+		this.file_name_ = string.Empty;
+		this.binary_data_list_.Clear();
+		if (string.IsNullOrEmpty(file_name))
+		{
+			return;
+		}
+		this.file_name_ = file_name.Replace(Path.GetExtension(file_name), string.Empty);
+		if (0 <= this.file_name_.IndexOf("Assets/Resources/"))
+		{
+			this.file_name_ = this.file_name_.Replace("Assets/Resources/", string.Empty);
+		}
+		TextAsset textAsset = Resources.Load(this.file_name_) as TextAsset;
+		MemoryStream input = new MemoryStream(textAsset.bytes);
+		BinaryReader binaryReader = new BinaryReader(input);
+		string text = binaryReader.ReadString();
+		if (text != "BaseData")
+		{
+			this.file_name_ = string.Empty;
+			return;
+		}
+		this.total_frame_ = binaryReader.ReadInt32();
+		this.frame_rate_ = binaryReader.ReadInt32();
+		text = binaryReader.ReadString();
+		while (text != "Finish")
+		{
+			AMBinaryDataBaseObject ambinaryDataBaseObject = null;
+			if (AMBinaryTranslation.kTypeName == text)
+			{
+				AMBinaryTranslation ambinaryTranslation = new AMBinaryTranslation();
+				ambinaryDataBaseObject = ambinaryTranslation;
+			}
+			else if (AMBinaryRotation.kTypeName == text)
+			{
+				AMBinaryRotation ambinaryRotation = new AMBinaryRotation();
+				ambinaryDataBaseObject = ambinaryRotation;
+			}
+			else if (AMBinaryProperty.kTypeName == text)
+			{
+				AMBinaryProperty ambinaryProperty = new AMBinaryProperty();
+				ambinaryDataBaseObject = ambinaryProperty;
+			}
+			else if (AMBinaryMethod.kTypeName == text)
+			{
+				AMBinaryMethod ambinaryMethod = new AMBinaryMethod();
+				ambinaryDataBaseObject = ambinaryMethod;
+			}
+			if (ambinaryDataBaseObject != null)
+			{
+				ambinaryDataBaseObject.Read(binaryReader);
+				this.binary_data_list_.Add(ambinaryDataBaseObject);
+			}
+			text = binaryReader.ReadString();
+		}
+	}
+
+	public void Update(float time)
+	{
+		if (!this.enabled)
+		{
+			return;
+		}
+		int frame = wf.Math.RoundMinMax(AWReadBinaryData.TimeToFrame(time, (float)this.frame_rate), 0, this.total_frame - 1);
+		for (int i = 0; i < this.binary_data_list_.Count; i++)
+		{
+			this.binary_data_list_[i].Update(frame);
+		}
+	}
+
+	public List<int> GetTrackIDList()
+	{
+		List<int> list = new List<int>();
+		if (this.enabled)
+		{
+			for (int i = 0; i < this.binary_data_list_.Count; i++)
+			{
+				list.Add(this.binary_data_list_[i].track_id);
+			}
+		}
+		return list;
+	}
+
+	public bool IsExistTrackID(int track_id)
+	{
+		for (int i = 0; i < this.binary_data_list_.Count; i++)
+		{
+			if (this.binary_data_list_[i].track_id == track_id)
+			{
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public bool enabled
+	{
+		get
+		{
+			return !string.IsNullOrEmpty(this.file_name_);
+		}
+	}
+
+	public int total_frame
+	{
+		get
+		{
+			return this.total_frame_;
+		}
+	}
+
+	public int frame_rate
+	{
+		get
+		{
+			return this.frame_rate_;
+		}
+	}
+
+	public AMBinaryDataBaseObject[] binary_data_list
+	{
+		get
+		{
+			return this.binary_data_list_.ToArray();
+		}
+	}
+
+	private List<AMBinaryDataBaseObject> binary_data_list_ = new List<AMBinaryDataBaseObject>();
+
+	private string file_name_;
+
+	private int total_frame_;
+
+	private int frame_rate_;
+}

+ 138 - 0
Assembly-CSharp/AbstractFreeModeItem.cs

@@ -0,0 +1,138 @@
+using System;
+using System.Collections.Generic;
+
+public abstract class AbstractFreeModeItem
+{
+	public abstract string title { get; }
+
+	public abstract int item_id { get; }
+
+	public abstract string text { get; }
+
+	public abstract string[] condition_texts { get; }
+
+	public abstract bool is_enabled { get; }
+
+	public abstract string play_file_name { get; }
+
+	public abstract AbstractFreeModeItem.ItemType type { get; }
+
+	protected static HashSet<int> GetEnabledIdList()
+	{
+		if (AbstractFreeModeItem.enabled_id_list_ != null)
+		{
+			return AbstractFreeModeItem.enabled_id_list_;
+		}
+		AbstractFreeModeItem.enabled_id_list_ = new HashSet<int>();
+		AbstractFreeModeItem.enabled_id_list_ = AbstractFreeModeItem.ReadIdList(false);
+		return AbstractFreeModeItem.enabled_id_list_;
+	}
+
+	protected static HashSet<int> GetEnabledOldIdList()
+	{
+		if (AbstractFreeModeItem.enabledOld_id_list_ != null)
+		{
+			return AbstractFreeModeItem.enabledOld_id_list_;
+		}
+		AbstractFreeModeItem.enabledOld_id_list_ = new HashSet<int>();
+		AbstractFreeModeItem.enabledOld_id_list_ = AbstractFreeModeItem.ReadIdList(true);
+		return AbstractFreeModeItem.enabledOld_id_list_;
+	}
+
+	protected static HashSet<int> ReadIdList(bool useOld)
+	{
+		HashSet<int> enabled_id_list = new HashSet<int>();
+		AFileSystemBase fileSystemBase;
+		if (useOld)
+		{
+			fileSystemBase = GameUty.FileSystemOld;
+		}
+		else
+		{
+			fileSystemBase = GameUty.FileSystem;
+		}
+		Func<string, bool> func = delegate(string file_name)
+		{
+			file_name += ".nei";
+			if (!fileSystemBase.IsExistentFile(file_name))
+			{
+				return false;
+			}
+			using (AFileBase afileBase = fileSystemBase.FileOpen(file_name))
+			{
+				using (CsvParser csvParser = new CsvParser())
+				{
+					bool condition = csvParser.Open(afileBase);
+					NDebug.Assert(condition, file_name + "\nopen failed.");
+					for (int j = 1; j < csvParser.max_cell_y; j++)
+					{
+						if (csvParser.IsCellToExistData(0, j))
+						{
+							int cellAsInteger = csvParser.GetCellAsInteger(0, j);
+							if (!enabled_id_list.Contains(cellAsInteger))
+							{
+								enabled_id_list.Add(cellAsInteger);
+							}
+						}
+					}
+				}
+			}
+			return true;
+		};
+		List<string> list;
+		if (useOld)
+		{
+			list = GameUty.PathListOld;
+		}
+		else
+		{
+			list = GameUty.PathList;
+		}
+		if (func("recollection_enabled_id_list"))
+		{
+			for (int i = 0; i < list.Count; i++)
+			{
+				func("recollection_enabled_id_list_" + list[i]);
+			}
+		}
+		return enabled_id_list;
+	}
+
+	public static bool EmptyEnableList(bool useOld)
+	{
+		if (useOld)
+		{
+			AbstractFreeModeItem.GetEnabledOldIdList();
+			if (AbstractFreeModeItem.enabledOld_id_list_ == null || AbstractFreeModeItem.enabledOld_id_list_.Count == 0)
+			{
+				return false;
+			}
+		}
+		else
+		{
+			AbstractFreeModeItem.GetEnabledIdList();
+			if (AbstractFreeModeItem.enabled_id_list_ == null || AbstractFreeModeItem.enabled_id_list_.Count == 0)
+			{
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private static HashSet<int> enabled_id_list_;
+
+	private static HashSet<int> enabledOld_id_list_;
+
+	public enum ItemType
+	{
+		MainStory,
+		Vip,
+		Normal
+	}
+
+	public enum GameMode
+	{
+		CM3D2,
+		COM3D
+	}
+}

+ 27 - 0
Assembly-CSharp/AcquiredAttributeUnit.cs

@@ -0,0 +1,27 @@
+using System;
+using UnityEngine;
+
+public class AcquiredAttributeUnit : MonoBehaviour
+{
+	private void Awake()
+	{
+		this.label_ = UTY.GetChildObject(base.gameObject, "Name", false).GetComponent<UILabel>();
+	}
+
+	public void SetActive(bool value)
+	{
+		base.gameObject.SetActive(value);
+	}
+
+	public bool IsActive()
+	{
+		return base.gameObject.activeSelf;
+	}
+
+	public void SetText(string text)
+	{
+		this.label_.text = text;
+	}
+
+	private UILabel label_;
+}

+ 40 - 0
Assembly-CSharp/AcquiredSkillUnit.cs

@@ -0,0 +1,40 @@
+using System;
+using UnityEngine;
+
+public class AcquiredSkillUnit : MonoBehaviour
+{
+	private void Awake()
+	{
+		this.bg_sprite_ = UTY.GetChildObject(base.gameObject, "BGGray", false).GetComponent<UISprite>();
+		this.label_ = UTY.GetChildObject(base.gameObject, "Name", false).GetComponent<UILabel>();
+	}
+
+	public void SetActive(bool value)
+	{
+		base.gameObject.SetActive(value);
+	}
+
+	public bool IsActive()
+	{
+		return base.gameObject.activeSelf;
+	}
+
+	public void SetBGVisible(bool value)
+	{
+		this.bg_sprite_.enabled = value;
+	}
+
+	public bool IsBGVisible()
+	{
+		return this.bg_sprite_.enabled;
+	}
+
+	public void SetText(string text)
+	{
+		this.label_.text = text;
+	}
+
+	private UISprite bg_sprite_;
+
+	private UILabel label_;
+}

+ 39 - 0
Assembly-CSharp/ActionCase.cs

@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionCase
+{
+	public float StartTime;
+
+	public float EndTime;
+
+	public string Trigger;
+
+	public List<int> TargetMaidNo = new List<int>();
+
+	public List<ActionCase.ActionType> Action = new List<ActionCase.ActionType>();
+
+	public List<ActionCase.ReactionParam> Reaction = new List<ActionCase.ReactionParam>();
+
+	public GameObject Effect;
+
+	public float EffectTime;
+
+	public enum ActionType
+	{
+		wave,
+		up,
+		swing,
+		shake
+	}
+
+	public class ReactionParam
+	{
+		public string Name;
+
+		public float SetTime;
+
+		public bool IsFaceBlend;
+	}
+}

+ 84 - 0
Assembly-CSharp/ActionDirect.cs

@@ -0,0 +1,84 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+public class ActionDirect : MonoBehaviour
+{
+	public static ActionDirect Instance { get; private set; }
+
+	private void Start()
+	{
+		ActionDirect.Instance = this;
+		base.gameObject.SetActive(false);
+	}
+
+	private void UIMove(float time)
+	{
+		float current_time;
+		if (time <= this.m_MoveTime / 2f + this.m_StopTime)
+		{
+			current_time = Mathf.Min(time, this.m_MoveTime / 2f);
+		}
+		else
+		{
+			current_time = time - (this.m_StopTime + this.m_MoveTime / 2f);
+		}
+		float x = this.m_ParentCanvas.sizeDelta.x;
+		if (time <= this.m_MoveTime / 2f)
+		{
+			base.transform.localPosition = Vector3.Lerp(Vector3.right * x, Vector3.zero, KasaiUtility.SinRate01(current_time, this.m_MoveTime / 2f, false, false));
+		}
+		else if (time > this.m_MoveTime / 2f + this.m_StopTime)
+		{
+			base.transform.localPosition = Vector3.Lerp(Vector3.zero, Vector3.left * x, KasaiUtility.SinRate01(current_time, this.m_MoveTime / 2f, false, false));
+		}
+	}
+
+	private void MoveEnd()
+	{
+		if (this.MoveendCall != null)
+		{
+			this.MoveendCall();
+		}
+		this.MoveendCall = null;
+		base.gameObject.SetActive(false);
+	}
+
+	public void ActionStart(string action)
+	{
+		base.gameObject.SetActive(true);
+		IEnumerator enumerator = this.m_ActionImage.GetEnumerator();
+		try
+		{
+			while (enumerator.MoveNext())
+			{
+				object obj = enumerator.Current;
+				Transform transform = (Transform)obj;
+				transform.gameObject.SetActive(transform.name == action);
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+		base.StartCoroutine(KasaiUtility.TimeCroutine(this.m_MoveTime + this.m_StopTime, new Action<float>(this.UIMove), new Action(this.MoveEnd)));
+	}
+
+	[SerializeField]
+	private Transform m_ActionImage;
+
+	[SerializeField]
+	private RectTransform m_ParentCanvas;
+
+	[SerializeField]
+	private float m_MoveTime = 0.75f;
+
+	[SerializeField]
+	private float m_StopTime = 0.25f;
+
+	public Action MoveendCall;
+}

+ 436 - 0
Assembly-CSharp/ActiveAnimation.cs

@@ -0,0 +1,436 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using AnimationOrTween;
+using UnityEngine;
+
+[AddComponentMenu("NGUI/Internal/Active Animation")]
+public class ActiveAnimation : MonoBehaviour
+{
+	private float playbackTime
+	{
+		get
+		{
+			return Mathf.Clamp01(this.mAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime);
+		}
+	}
+
+	public bool isPlaying
+	{
+		get
+		{
+			if (!(this.mAnim == null))
+			{
+				IEnumerator enumerator = this.mAnim.GetEnumerator();
+				try
+				{
+					while (enumerator.MoveNext())
+					{
+						object obj = enumerator.Current;
+						AnimationState animationState = (AnimationState)obj;
+						if (this.mAnim.IsPlaying(animationState.name))
+						{
+							if (this.mLastDirection == Direction.Forward)
+							{
+								if (animationState.time < animationState.length)
+								{
+									return true;
+								}
+							}
+							else
+							{
+								if (this.mLastDirection != Direction.Reverse)
+								{
+									return true;
+								}
+								if (animationState.time > 0f)
+								{
+									return true;
+								}
+							}
+						}
+					}
+				}
+				finally
+				{
+					IDisposable disposable;
+					if ((disposable = (enumerator as IDisposable)) != null)
+					{
+						disposable.Dispose();
+					}
+				}
+				return false;
+			}
+			if (this.mAnimator != null)
+			{
+				if (this.mLastDirection == Direction.Reverse)
+				{
+					if (this.playbackTime == 0f)
+					{
+						return false;
+					}
+				}
+				else if (this.playbackTime == 1f)
+				{
+					return false;
+				}
+				return true;
+			}
+			return false;
+		}
+	}
+
+	public void Finish()
+	{
+		if (this.mAnim != null)
+		{
+			IEnumerator enumerator = this.mAnim.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					AnimationState animationState = (AnimationState)obj;
+					if (this.mLastDirection == Direction.Forward)
+					{
+						animationState.time = animationState.length;
+					}
+					else if (this.mLastDirection == Direction.Reverse)
+					{
+						animationState.time = 0f;
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+			this.mAnim.Sample();
+		}
+		else if (this.mAnimator != null)
+		{
+			this.mAnimator.Play(this.mClip, 0, (this.mLastDirection != Direction.Forward) ? 0f : 1f);
+		}
+	}
+
+	public void Reset()
+	{
+		if (this.mAnim != null)
+		{
+			IEnumerator enumerator = this.mAnim.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					AnimationState animationState = (AnimationState)obj;
+					if (this.mLastDirection == Direction.Reverse)
+					{
+						animationState.time = animationState.length;
+					}
+					else if (this.mLastDirection == Direction.Forward)
+					{
+						animationState.time = 0f;
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+		}
+		else if (this.mAnimator != null)
+		{
+			this.mAnimator.Play(this.mClip, 0, (this.mLastDirection != Direction.Reverse) ? 0f : 1f);
+		}
+	}
+
+	private void Start()
+	{
+		if (this.eventReceiver != null && EventDelegate.IsValid(this.onFinished))
+		{
+			this.eventReceiver = null;
+			this.callWhenFinished = null;
+		}
+	}
+
+	private void Update()
+	{
+		float deltaTime = RealTime.deltaTime;
+		if (deltaTime == 0f)
+		{
+			return;
+		}
+		if (this.mAnimator != null)
+		{
+			this.mAnimator.Update((this.mLastDirection != Direction.Reverse) ? deltaTime : (-deltaTime));
+			if (this.isPlaying)
+			{
+				return;
+			}
+			this.mAnimator.enabled = false;
+			base.enabled = false;
+		}
+		else
+		{
+			if (!(this.mAnim != null))
+			{
+				base.enabled = false;
+				return;
+			}
+			bool flag = false;
+			IEnumerator enumerator = this.mAnim.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					AnimationState animationState = (AnimationState)obj;
+					if (this.mAnim.IsPlaying(animationState.name))
+					{
+						float num = animationState.speed * deltaTime;
+						animationState.time += num;
+						if (num < 0f)
+						{
+							if (animationState.time > 0f)
+							{
+								flag = true;
+							}
+							else
+							{
+								animationState.time = 0f;
+							}
+						}
+						else if (animationState.time < animationState.length)
+						{
+							flag = true;
+						}
+						else
+						{
+							animationState.time = animationState.length;
+						}
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+			this.mAnim.Sample();
+			if (flag)
+			{
+				return;
+			}
+			base.enabled = false;
+		}
+		if (this.mNotify)
+		{
+			this.mNotify = false;
+			if (ActiveAnimation.current == null)
+			{
+				ActiveAnimation.current = this;
+				EventDelegate.Execute(this.onFinished);
+				if (this.eventReceiver != null && !string.IsNullOrEmpty(this.callWhenFinished))
+				{
+					this.eventReceiver.SendMessage(this.callWhenFinished, SendMessageOptions.DontRequireReceiver);
+				}
+				ActiveAnimation.current = null;
+			}
+			if (this.mDisableDirection != Direction.Toggle && this.mLastDirection == this.mDisableDirection)
+			{
+				NGUITools.SetActive(base.gameObject, false);
+			}
+		}
+	}
+
+	private void Play(string clipName, Direction playDirection)
+	{
+		if (playDirection == Direction.Toggle)
+		{
+			playDirection = ((this.mLastDirection == Direction.Forward) ? Direction.Reverse : Direction.Forward);
+		}
+		if (this.mAnim != null)
+		{
+			base.enabled = true;
+			this.mAnim.enabled = false;
+			bool flag = string.IsNullOrEmpty(clipName);
+			if (flag)
+			{
+				if (!this.mAnim.isPlaying)
+				{
+					this.mAnim.Play();
+				}
+			}
+			else if (!this.mAnim.IsPlaying(clipName))
+			{
+				this.mAnim.Play(clipName);
+			}
+			IEnumerator enumerator = this.mAnim.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					AnimationState animationState = (AnimationState)obj;
+					if (string.IsNullOrEmpty(clipName) || animationState.name == clipName)
+					{
+						float num = Mathf.Abs(animationState.speed);
+						animationState.speed = num * (float)playDirection;
+						if (playDirection == Direction.Reverse && animationState.time == 0f)
+						{
+							animationState.time = animationState.length;
+						}
+						else if (playDirection == Direction.Forward && animationState.time == animationState.length)
+						{
+							animationState.time = 0f;
+						}
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+			this.mLastDirection = playDirection;
+			this.mNotify = true;
+			this.mAnim.Sample();
+		}
+		else if (this.mAnimator != null)
+		{
+			if (base.enabled && this.isPlaying && this.mClip == clipName)
+			{
+				this.mLastDirection = playDirection;
+				return;
+			}
+			base.enabled = true;
+			this.mNotify = true;
+			this.mLastDirection = playDirection;
+			this.mClip = clipName;
+			this.mAnimator.Play(this.mClip, 0, (playDirection != Direction.Forward) ? 1f : 0f);
+		}
+	}
+
+	public static ActiveAnimation Play(Animation anim, string clipName, Direction playDirection, EnableCondition enableBeforePlay, DisableCondition disableCondition)
+	{
+		if (!NGUITools.GetActive(anim.gameObject))
+		{
+			if (enableBeforePlay != EnableCondition.EnableThenPlay)
+			{
+				return null;
+			}
+			NGUITools.SetActive(anim.gameObject, true);
+			UIPanel[] componentsInChildren = anim.gameObject.GetComponentsInChildren<UIPanel>();
+			int i = 0;
+			int num = componentsInChildren.Length;
+			while (i < num)
+			{
+				componentsInChildren[i].Refresh();
+				i++;
+			}
+		}
+		ActiveAnimation activeAnimation = anim.GetComponent<ActiveAnimation>();
+		if (activeAnimation == null)
+		{
+			activeAnimation = anim.gameObject.AddComponent<ActiveAnimation>();
+		}
+		activeAnimation.mAnim = anim;
+		activeAnimation.mDisableDirection = (Direction)disableCondition;
+		activeAnimation.onFinished.Clear();
+		activeAnimation.Play(clipName, playDirection);
+		if (activeAnimation.mAnim != null)
+		{
+			activeAnimation.mAnim.Sample();
+		}
+		else if (activeAnimation.mAnimator != null)
+		{
+			activeAnimation.mAnimator.Update(0f);
+		}
+		return activeAnimation;
+	}
+
+	public static ActiveAnimation Play(Animation anim, string clipName, Direction playDirection)
+	{
+		return ActiveAnimation.Play(anim, clipName, playDirection, EnableCondition.DoNothing, DisableCondition.DoNotDisable);
+	}
+
+	public static ActiveAnimation Play(Animation anim, Direction playDirection)
+	{
+		return ActiveAnimation.Play(anim, null, playDirection, EnableCondition.DoNothing, DisableCondition.DoNotDisable);
+	}
+
+	public static ActiveAnimation Play(Animator anim, string clipName, Direction playDirection, EnableCondition enableBeforePlay, DisableCondition disableCondition)
+	{
+		if (enableBeforePlay != EnableCondition.IgnoreDisabledState && !NGUITools.GetActive(anim.gameObject))
+		{
+			if (enableBeforePlay != EnableCondition.EnableThenPlay)
+			{
+				return null;
+			}
+			NGUITools.SetActive(anim.gameObject, true);
+			UIPanel[] componentsInChildren = anim.gameObject.GetComponentsInChildren<UIPanel>();
+			int i = 0;
+			int num = componentsInChildren.Length;
+			while (i < num)
+			{
+				componentsInChildren[i].Refresh();
+				i++;
+			}
+		}
+		ActiveAnimation activeAnimation = anim.GetComponent<ActiveAnimation>();
+		if (activeAnimation == null)
+		{
+			activeAnimation = anim.gameObject.AddComponent<ActiveAnimation>();
+		}
+		activeAnimation.mAnimator = anim;
+		activeAnimation.mDisableDirection = (Direction)disableCondition;
+		activeAnimation.onFinished.Clear();
+		activeAnimation.Play(clipName, playDirection);
+		if (activeAnimation.mAnim != null)
+		{
+			activeAnimation.mAnim.Sample();
+		}
+		else if (activeAnimation.mAnimator != null)
+		{
+			activeAnimation.mAnimator.Update(0f);
+		}
+		return activeAnimation;
+	}
+
+	public static ActiveAnimation current;
+
+	public List<EventDelegate> onFinished = new List<EventDelegate>();
+
+	[HideInInspector]
+	public GameObject eventReceiver;
+
+	[HideInInspector]
+	public string callWhenFinished;
+
+	private Animation mAnim;
+
+	private Direction mLastDirection;
+
+	private Direction mDisableDirection;
+
+	private bool mNotify;
+
+	private Animator mAnimator;
+
+	private string mClip = string.Empty;
+}

+ 190 - 0
Assembly-CSharp/AdditionalScenario.cs

@@ -0,0 +1,190 @@
+using System;
+using System.Collections;
+using MaidStatus;
+using UnityEngine;
+using wf;
+
+public class AdditionalScenario : MonoBehaviour
+{
+	public void Init(string label)
+	{
+		this.m_MyPanel = base.GetComponent<UIPanel>();
+		this.m_JumpLabel = label;
+		base.StartCoroutine(this.Fade(true));
+		ScenarioData[] addedScenario = GameMain.Instance.ScenarioSelectMgr.AddedScenario;
+		if (addedScenario.Length <= 0)
+		{
+			Debug.Log("昨日から追加されたシナリオはもうありません");
+			UnityEngine.Object.Destroy(base.gameObject);
+			return;
+		}
+		this.m_FewVer.SetActive(false);
+		this.m_ManyVer.SetActive(false);
+		int num = 0;
+		foreach (ScenarioData scenarioData in addedScenario)
+		{
+			if (!scenarioData.IsFixedMaid)
+			{
+				if (scenarioData.EventMaidCount > 0)
+				{
+					foreach (Maid maid in scenarioData.GetEventMaidList())
+					{
+						num++;
+					}
+				}
+				else
+				{
+					num++;
+				}
+			}
+			else if (!string.IsNullOrEmpty(scenarioData.Notification))
+			{
+				num++;
+			}
+			else if (scenarioData.EventMaidCount == 1)
+			{
+				if (scenarioData.GetEventMaid(0).status.heroineType == HeroineType.Sub)
+				{
+					num++;
+				}
+				else
+				{
+					num++;
+				}
+			}
+			else
+			{
+				num++;
+			}
+		}
+		GameObject gameObject = (num <= this.m_ManyModeCount) ? this.m_FewVer : this.m_ManyVer;
+		gameObject.SetActive(true);
+		this.m_UIScroll = gameObject.transform.Find("Contents").GetComponent<UIScrollView>();
+		this.m_UIGrid = gameObject.transform.Find("Contents/Grid").GetComponent<UIGrid>();
+		Action<string, string> action = delegate(string title, string chara)
+		{
+			GameObject gameObject2 = Utility.CreatePrefab(this.m_UIGrid.gameObject, "SceneScenarioSelect/Prefab/Additional", true);
+			gameObject2.transform.Find("Title").GetComponent<UILabel>().text = title;
+			gameObject2.transform.Find("Chara").GetComponent<UILabel>().text = chara;
+		};
+		foreach (ScenarioData scenarioData2 in addedScenario)
+		{
+			if (!scenarioData2.IsFixedMaid)
+			{
+				if (scenarioData2.EventMaidCount > 0)
+				{
+					foreach (Maid maid2 in scenarioData2.GetEventMaidList())
+					{
+						if (string.IsNullOrEmpty(scenarioData2.Notification))
+						{
+							action(scenarioData2.NotLineTitle, (!maid2.status.isFirstNameCall) ? maid2.status.lastName : maid2.status.firstName);
+						}
+						else
+						{
+							action(scenarioData2.NotLineTitle, scenarioData2.Notification);
+						}
+					}
+				}
+				else
+				{
+					action(scenarioData2.NotLineTitle, scenarioData2.Notification);
+				}
+			}
+			else if (!string.IsNullOrEmpty(scenarioData2.Notification))
+			{
+				action(scenarioData2.NotLineTitle, scenarioData2.Notification);
+			}
+			else if (scenarioData2.EventMaidCount == 1)
+			{
+				if (scenarioData2.GetEventMaid(0).status.heroineType == HeroineType.Sub)
+				{
+					action(scenarioData2.NotLineTitle, "NPC");
+				}
+				else
+				{
+					action(scenarioData2.NotLineTitle, GameMain.Instance.ScenarioSelectMgr.GetConvertPersonal(scenarioData2.GetEventMaid(0)));
+				}
+			}
+			else
+			{
+				action(scenarioData2.NotLineTitle, this.m_IdolNotice);
+			}
+		}
+		if (this.m_UIGrid)
+		{
+			this.m_UIGrid.repositionNow = true;
+		}
+		if (this.m_UIScroll)
+		{
+			this.m_UIScroll.ResetPosition();
+		}
+		EventDelegate.Add(this.m_MyButton.onClick, new EventDelegate.Callback(this.FadeOut));
+	}
+
+	private void FadeOut()
+	{
+		if (this.m_MyPanel.alpha > 0.9f)
+		{
+			base.StartCoroutine(this.Fade(false));
+		}
+	}
+
+	private IEnumerator Fade(bool is_fadein)
+	{
+		float timer = 0f;
+		for (;;)
+		{
+			float rate = Mathf.Sin(Mathf.Clamp01(timer / this.m_FadeTime) * 90f * 0.0174532924f);
+			if (!is_fadein)
+			{
+				rate = 1f - rate;
+			}
+			this.m_MyPanel.alpha = rate;
+			timer += Time.deltaTime;
+			if (timer >= this.m_FadeTime)
+			{
+				break;
+			}
+			yield return null;
+		}
+		if (!is_fadein)
+		{
+			UnityEngine.Object.Destroy(base.gameObject);
+			if (!string.IsNullOrEmpty(this.m_JumpLabel))
+			{
+				GameMain.Instance.ScriptMgr.adv_kag.JumpLabel(this.m_JumpLabel);
+				GameMain.Instance.ScriptMgr.adv_kag.Exec();
+			}
+		}
+		yield break;
+		yield break;
+	}
+
+	[SerializeField]
+	private float m_FadeTime = 0.5f;
+
+	[SerializeField]
+	private UIButton m_MyButton;
+
+	[SerializeField]
+	private GameObject m_FewVer;
+
+	[SerializeField]
+	private GameObject m_ManyVer;
+
+	[SerializeField]
+	[Header("この数以上で多数表示")]
+	private int m_ManyModeCount = 8;
+
+	private UIPanel m_MyPanel;
+
+	private UIScrollView m_UIScroll;
+
+	private UIGrid m_UIGrid;
+
+	[SerializeField]
+	[Header("固定3人イベントのときの呼称")]
+	private string m_IdolNotice = "アイドルルート";
+
+	private string m_JumpLabel = string.Empty;
+}

+ 271 - 0
Assembly-CSharp/AlignmentPresetWindow.cs

@@ -0,0 +1,271 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using wf;
+
+public class AlignmentPresetWindow : BaseMaidPhotoWindow
+{
+	public override void Awake()
+	{
+		base.Awake();
+		PhotoAlignmentPreset.Create();
+		this.noCharaActive = base.GetComponentInChildren<PhotoNoCharaActive>();
+	}
+
+	public override void Start()
+	{
+		base.Start();
+		this.Init();
+	}
+
+	public void Init()
+	{
+		for (int i = 0; i < PhotoAlignmentPreset.datas.Count; i++)
+		{
+			this.CreateAlignmentPresetButton(this.contentGrid.gameObject, PhotoAlignmentPreset.datas[i]);
+		}
+		Utility.ResetNGUI(this.contentGrid);
+		Utility.ResetNGUI(NGUITools.FindInParents<UIScrollView>(this.contentGrid.transform));
+		Utility.ResetNGUI(this.maidListGrid);
+		Utility.ResetNGUI(NGUITools.FindInParents<UIScrollView>(this.maidListGrid.transform));
+		this.UpdateMaidList();
+		this.noCharaActive.ChangeMode(true, true);
+		UIButton[] componentsInChildren = this.contentGrid.GetComponentsInChildren<UIButton>();
+		foreach (UIButton uibutton in componentsInChildren)
+		{
+			uibutton.isEnabled = false;
+		}
+	}
+
+	public override void OnMaidAddEvent(Maid maid, bool is_deserialize_load)
+	{
+		if (maid == null || maid.boMAN)
+		{
+			return;
+		}
+		this.activeMaidList.Add(maid);
+		this.UpdateMaidList();
+		this.noCharaActive.ChangeMode(false, true);
+	}
+
+	public void OnSelectMaid()
+	{
+		GameObject gameObject = UIButton.current.transform.parent.gameObject;
+		MaidPlate component = gameObject.GetComponent<MaidPlate>();
+		bool selected = UIWFSelectButton.selected;
+		if (selected)
+		{
+			for (int i = 0; i < this.selectMaidList.Length; i++)
+			{
+				if (this.selectMaidList[i] == null)
+				{
+					this.selectMaidList[i] = component;
+					this.selectMaidList[i].SetSelectNoVisible(i + 1, true);
+					break;
+				}
+			}
+		}
+		else
+		{
+			for (int j = 0; j < this.selectMaidList.Length; j++)
+			{
+				if (this.selectMaidList[j] == component)
+				{
+					this.selectMaidList[j].SetSelectNoVisible(j + 1, false);
+					this.selectMaidList[j] = null;
+					break;
+				}
+			}
+		}
+		bool flag = false;
+		int num = 0;
+		while (num < this.selectMaidList.Length && !flag)
+		{
+			if (this.selectMaidList[num] != null)
+			{
+				flag = true;
+			}
+			num++;
+		}
+		UIButton[] componentsInChildren = this.contentGrid.GetComponentsInChildren<UIButton>();
+		foreach (UIButton uibutton in componentsInChildren)
+		{
+			uibutton.isEnabled = flag;
+		}
+	}
+
+	public override void OnMaidRemoveEvent(Maid maid)
+	{
+		if (maid == null || maid.boMAN)
+		{
+			return;
+		}
+		this.activeMaidList.Remove(maid);
+		this.UpdateMaidList();
+		if (this.activeMaidList.Count <= 0)
+		{
+			this.noCharaActive.ChangeMode(true, true);
+		}
+	}
+
+	public override void OnDeserializeEvent()
+	{
+		AlignmentPresetWindow.SelectData = null;
+	}
+
+	public void UpdateMaidList()
+	{
+		Dictionary<Maid, int> dictionary = new Dictionary<Maid, int>();
+		for (int i = 0; i < this.selectMaidList.Length; i++)
+		{
+			if (this.selectMaidList[i] != null)
+			{
+				this.selectMaidList[i].SetSelectNoVisibleAllOff();
+				bool flag = this.activeMaidList.Contains(this.selectMaidList[i].maid);
+				if (flag)
+				{
+					dictionary.Add(this.selectMaidList[i].maid, i);
+				}
+			}
+			this.selectMaidList[i] = null;
+		}
+		MaidPlate[] array = new MaidPlate[this.selectMaidList.Length];
+		List<Transform> childList = this.maidListGrid.GetChildList();
+		for (int j = 0; j < childList.Count; j++)
+		{
+			UnityEngine.Object.DestroyImmediate(childList[j].gameObject);
+		}
+		this.maidListGrid.transform.DetachChildren();
+		List<Maid> sortedActiveMaidList = this.GetSortedActiveMaidList();
+		for (int k = 0; k < sortedActiveMaidList.Count; k++)
+		{
+			GameObject gameObject = Utility.CreatePrefab(this.maidListGrid.gameObject, "ScenePhotoMode/SimpleMaidPlate", true);
+			gameObject.GetComponent<MaidPlate>().SetMaidData(sortedActiveMaidList[k]);
+			UIWFSelectButton component = UTY.GetChildObject(gameObject, "Button", false).GetComponent<UIWFSelectButton>();
+			UIWFTabButton component2 = UTY.GetChildObject(gameObject, "Button", false).GetComponent<UIWFTabButton>();
+			UnityEngine.Object.Destroy(component2);
+			component.enabled = true;
+			EventDelegate.Add(component.onSelect, new EventDelegate.Callback(this.OnSelectMaid));
+			if (dictionary.ContainsKey(sortedActiveMaidList[k]))
+			{
+				array[dictionary[sortedActiveMaidList[k]]] = gameObject.GetComponent<MaidPlate>();
+			}
+		}
+		this.switchPanel.SetNumberOfSelected(5);
+		this.switchPanel.UpdateChildren();
+		Utility.ResetNGUI(this.maidListGrid);
+		Utility.ResetNGUI(NGUITools.FindInParents<UIScrollView>(this.maidListGrid.transform));
+		this.UpdateChildren();
+		for (int l = 0; l < array.Length; l++)
+		{
+			if (!(array[l] == null))
+			{
+				UIWFSelectButton component3 = UTY.GetChildObject(array[l].gameObject, "Button", false).GetComponent<UIWFSelectButton>();
+				this.switchPanel.Select(component3);
+			}
+		}
+		bool isEnabled = false;
+		this.selectMaidList = array;
+		for (int m = 0; m < this.selectMaidList.Length; m++)
+		{
+			if (this.selectMaidList[m] != null)
+			{
+				this.selectMaidList[m].SetSelectNoVisibleAllOff();
+				this.selectMaidList[m].SetSelectNoVisible(m + 1, true);
+				isEnabled = true;
+			}
+		}
+		UIButton[] componentsInChildren = this.contentGrid.GetComponentsInChildren<UIButton>();
+		foreach (UIButton uibutton in componentsInChildren)
+		{
+			uibutton.isEnabled = isEnabled;
+		}
+	}
+
+	public GameObject CreateAlignmentPresetButton(GameObject parentObject, PhotoAlignmentPreset.Data data)
+	{
+		GameObject gameObject = Utility.CreatePrefab(parentObject, "ScenePhotoMode/AlignmentPresetButton", true);
+		gameObject.name = data.id.ToString();
+		UI2DSprite component = UTY.GetChildObject(gameObject, "Plate/Plate/BG/ThumImage", false).GetComponent<UI2DSprite>();
+		if (!string.IsNullOrEmpty(data.thumbnailName))
+		{
+			Texture2D texture2D = ImportCM.CreateTexture(data.thumbnailName + ".tex");
+			Sprite sprite2D = Sprite.Create(texture2D, new Rect(0f, 0f, (float)texture2D.width, (float)texture2D.height), default(Vector2));
+			if (component.sprite2D != null && component.sprite2D.texture != null)
+			{
+				UnityEngine.Object.DestroyImmediate(component.sprite2D.texture);
+			}
+			component.sprite2D = sprite2D;
+			component.SetDimensions(texture2D.width, texture2D.height);
+		}
+		UIButton componentInChildren = gameObject.GetComponentInChildren<UIButton>();
+		componentInChildren.name = data.id.ToString();
+		EventDelegate.Add(componentInChildren.onClick, new EventDelegate.Callback(this.OnClickLoadBtn));
+		return gameObject;
+	}
+
+	private void OnClickLoadBtn()
+	{
+		GameObject gameObject = UIButton.current.transform.parent.parent.gameObject;
+		int id = int.Parse(gameObject.name);
+		PhotoAlignmentPreset.Data data = PhotoAlignmentPreset.GetData(id);
+		GameMain.Instance.SysDlg.Show("選択した配置に変更します。\n宜しいですか?", SystemDialog.TYPE.OK_CANCEL, delegate
+		{
+			GameMain.Instance.SysDlg.Close();
+			this.ExecAlignmentPreset(data);
+		}, null);
+	}
+
+	private void ExecAlignmentPreset(PhotoAlignmentPreset.Data data)
+	{
+		for (int i = 0; i < this.selectMaidList.Length; i++)
+		{
+			if (this.selectMaidList[i] != null)
+			{
+				this.selectMaidList[i].maid.transform.localPosition = data.positions[i];
+			}
+		}
+	}
+
+	private List<Maid> GetSortedActiveMaidList()
+	{
+		if (this.activeMaidList.Count <= 0)
+		{
+			return new List<Maid>();
+		}
+		if (this.placementWindow == null)
+		{
+			this.placementWindow = (base.mgr.GetWindow(PhotoWindowManager.WindowType.Placement) as PlacementWindow);
+		}
+		List<Maid> list = new List<Maid>();
+		List<Maid> maid_list = this.placementWindow.maid_list;
+		for (int i = 0; i < maid_list.Count; i++)
+		{
+			if (this.activeMaidList.Contains(maid_list[i]))
+			{
+				list.Add(maid_list[i]);
+			}
+		}
+		return list;
+	}
+
+	[HideInInspector]
+	public static PhotoAlignmentPreset.Data SelectData;
+
+	[SerializeField]
+	private UIGrid maidListGrid;
+
+	[SerializeField]
+	private UIWFSwitchPanel switchPanel;
+
+	[SerializeField]
+	private UIGrid contentGrid;
+
+	private MaidPlate[] selectMaidList = new MaidPlate[5];
+
+	private PhotoNoCharaActive noCharaActive;
+
+	private HashSet<Maid> activeMaidList = new HashSet<Maid>();
+
+	private PlacementWindow placementWindow;
+}

+ 32 - 0
Assembly-CSharp/AnimatedAlpha.cs

@@ -0,0 +1,32 @@
+using System;
+using UnityEngine;
+
+[ExecuteInEditMode]
+public class AnimatedAlpha : MonoBehaviour
+{
+	private void OnEnable()
+	{
+		this.mWidget = base.GetComponent<UIWidget>();
+		this.mPanel = base.GetComponent<UIPanel>();
+		this.LateUpdate();
+	}
+
+	private void LateUpdate()
+	{
+		if (this.mWidget != null)
+		{
+			this.mWidget.alpha = this.alpha;
+		}
+		if (this.mPanel != null)
+		{
+			this.mPanel.alpha = this.alpha;
+		}
+	}
+
+	[Range(0f, 1f)]
+	public float alpha = 1f;
+
+	private UIWidget mWidget;
+
+	private UIPanel mPanel;
+}

+ 22 - 0
Assembly-CSharp/AnimatedColor.cs

@@ -0,0 +1,22 @@
+using System;
+using UnityEngine;
+
+[ExecuteInEditMode]
+[RequireComponent(typeof(UIWidget))]
+public class AnimatedColor : MonoBehaviour
+{
+	private void OnEnable()
+	{
+		this.mWidget = base.GetComponent<UIWidget>();
+		this.LateUpdate();
+	}
+
+	private void LateUpdate()
+	{
+		this.mWidget.color = this.color;
+	}
+
+	public Color color = Color.white;
+
+	private UIWidget mWidget;
+}

+ 27 - 0
Assembly-CSharp/AnimatedWidget.cs

@@ -0,0 +1,27 @@
+using System;
+using UnityEngine;
+
+[ExecuteInEditMode]
+public class AnimatedWidget : MonoBehaviour
+{
+	private void OnEnable()
+	{
+		this.mWidget = base.GetComponent<UIWidget>();
+		this.LateUpdate();
+	}
+
+	private void LateUpdate()
+	{
+		if (this.mWidget != null)
+		{
+			this.mWidget.width = Mathf.RoundToInt(this.width);
+			this.mWidget.height = Mathf.RoundToInt(this.height);
+		}
+	}
+
+	public float width = 1f;
+
+	public float height = 1f;
+
+	private UIWidget mWidget;
+}

+ 11 - 0
Assembly-CSharp/AnimationOrTween/Direction.cs

@@ -0,0 +1,11 @@
+using System;
+
+namespace AnimationOrTween
+{
+	public enum Direction
+	{
+		Reverse = -1,
+		Toggle,
+		Forward
+	}
+}

+ 11 - 0
Assembly-CSharp/AnimationOrTween/DisableCondition.cs

@@ -0,0 +1,11 @@
+using System;
+
+namespace AnimationOrTween
+{
+	public enum DisableCondition
+	{
+		DisableAfterReverse = -1,
+		DoNotDisable,
+		DisableAfterForward
+	}
+}

+ 11 - 0
Assembly-CSharp/AnimationOrTween/EnableCondition.cs

@@ -0,0 +1,11 @@
+using System;
+
+namespace AnimationOrTween
+{
+	public enum EnableCondition
+	{
+		DoNothing,
+		EnableThenPlay,
+		IgnoreDisabledState
+	}
+}

+ 22 - 0
Assembly-CSharp/AnimationOrTween/Trigger.cs

@@ -0,0 +1,22 @@
+using System;
+
+namespace AnimationOrTween
+{
+	public enum Trigger
+	{
+		OnClick,
+		OnHover,
+		OnPress,
+		OnHoverTrue,
+		OnHoverFalse,
+		OnPressTrue,
+		OnPressFalse,
+		OnActivate,
+		OnActivateTrue,
+		OnActivateFalse,
+		OnDoubleClick,
+		OnSelect,
+		OnSelectTrue,
+		OnSelectFalse
+	}
+}

+ 524 - 0
Assembly-CSharp/AnimatorData.cs

@@ -0,0 +1,524 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+public class AnimatorData : MonoBehaviour
+{
+	[HideInInspector]
+	public bool isPlaying
+	{
+		get
+		{
+			return this.nowPlayingTake != null && !this.isPaused;
+		}
+	}
+
+	[HideInInspector]
+	public string takeName
+	{
+		get
+		{
+			if (this.nowPlayingTake != null)
+			{
+				return this.nowPlayingTake.name;
+			}
+			return null;
+		}
+	}
+
+	public float GetTakeTime()
+	{
+		return this.takeTime;
+	}
+
+	public object Invoker(object[] args)
+	{
+		switch ((int)args[0])
+		{
+		case 0:
+			return this.isPlaying;
+		case 1:
+			return this.takeName;
+		case 2:
+			this.Play((string)args[1], true, 0f, (bool)args[2]);
+			break;
+		case 3:
+			this.StopLoop();
+			break;
+		case 4:
+			this.PauseLoop();
+			break;
+		case 5:
+			this.ResumeLoop();
+			break;
+		case 6:
+			this.Play((string)args[1], false, (float)args[2], (bool)args[3]);
+			break;
+		case 7:
+			this.Play((string)args[1], true, (float)((int)args[2]), (bool)args[3]);
+			break;
+		case 8:
+			this.PreviewValue((string)args[1], true, (float)args[2]);
+			break;
+		case 9:
+			this.PreviewValue((string)args[1], false, (float)args[2]);
+			break;
+		case 10:
+			if (this.takeName == null)
+			{
+				return 0f;
+			}
+			return this.elapsedTime;
+		case 11:
+			if (this.takeName == null)
+			{
+				return 0f;
+			}
+			return (float)this.nowPlayingTake.numFrames / (float)this.nowPlayingTake.frameRate;
+		case 12:
+			if (this.takeName == null)
+			{
+				return false;
+			}
+			return this.isPaused;
+		}
+		return null;
+	}
+
+	private void Start()
+	{
+		if (this.playOnStart)
+		{
+			this.Play(this.playOnStart.name, true, 0f, false);
+			this.playOnStart = null;
+		}
+	}
+
+	private void OnDrawGizmos()
+	{
+		if (!this.isAnimatorOpen)
+		{
+			return;
+		}
+		this.takes[this.currentTake].drawGizmos(this.gizmo_size, this.inPlayMode);
+	}
+
+	private void Update()
+	{
+		if (this.bAutoTimeUpdate)
+		{
+			NTime.UpdateNowTime(Time.time);
+		}
+		if (RhythmAction_Mgr.Instance)
+		{
+			this.isPaused = RhythmAction_Mgr.Instance.IsPause;
+		}
+		if (this.isPaused || this.nowPlayingTake == null)
+		{
+			return;
+		}
+		this.elapsedTime = NTime.time;
+		if (this.elapsedTime >= this.takeTime)
+		{
+			this.nowPlayingTake.stopAudio();
+			if (this.isLooping)
+			{
+				this.Execute(this.nowPlayingTake, true, 0f);
+			}
+			else
+			{
+				this.nowPlayingTake = null;
+			}
+		}
+	}
+
+	public void Play(string take_name, bool isFrame, float value, bool loop)
+	{
+		this.nowPlayingTake = this.getTake(take_name);
+		if (this.nowPlayingTake)
+		{
+			this.isLooping = loop;
+			this.Execute(this.nowPlayingTake, isFrame, value);
+		}
+	}
+
+	public void Play(string take_name, bool isFrame, float value, bool loop, List<int> exclusion_track_id_list)
+	{
+		this.nowPlayingTake = this.getTake(take_name);
+		if (this.nowPlayingTake)
+		{
+			this.isLooping = loop;
+			if (exclusion_track_id_list == null || exclusion_track_id_list.Count == 0)
+			{
+				this.Execute(this.nowPlayingTake, isFrame, value);
+			}
+			else
+			{
+				this.ExecuteExclusionTrack(this.nowPlayingTake, exclusion_track_id_list, isFrame, value);
+			}
+		}
+	}
+
+	public void PreviewValue(string take_name, bool isFrame, float value)
+	{
+		AMTake take;
+		if (this.nowPlayingTake && this.nowPlayingTake.name == this.takeName)
+		{
+			take = this.nowPlayingTake;
+		}
+		else
+		{
+			take = this.getTake(take_name);
+		}
+		if (!take)
+		{
+			return;
+		}
+		float num = value;
+		if (!isFrame)
+		{
+			num *= (float)take.frameRate;
+		}
+		take.previewFrameInvoker(num);
+	}
+
+	public void Execute(AMTake take, bool isFrame = true, float value = 0f)
+	{
+		AMTween.Stop();
+		float num = value;
+		float num2 = value;
+		if (!isFrame)
+		{
+			num *= (float)take.frameRate;
+		}
+		if (isFrame)
+		{
+			num2 /= (float)take.frameRate;
+		}
+		take.executeActions(num);
+		this.elapsedTime = num2;
+		this.takeTime = (float)take.numFrames / (float)take.frameRate;
+		this.nowPlayingTake = take;
+	}
+
+	public void ExecuteExclusionTrack(AMTake take, List<int> exclusion_track_id_list, bool isFrame = true, float value = 0f)
+	{
+		AMTween.Stop();
+		float num = value;
+		float num2 = value;
+		if (!isFrame)
+		{
+			num *= (float)take.frameRate;
+		}
+		if (isFrame)
+		{
+			num2 /= (float)take.frameRate;
+		}
+		take.executeActions(exclusion_track_id_list, num);
+		this.elapsedTime = num2;
+		this.takeTime = (float)take.numFrames / (float)take.frameRate;
+		this.nowPlayingTake = take;
+	}
+
+	public void PauseLoop()
+	{
+		if (this.nowPlayingTake == null)
+		{
+			return;
+		}
+		this.isPaused = true;
+		this.nowPlayingTake.stopAudio();
+		AMTween.Pause();
+	}
+
+	public void ResumeLoop()
+	{
+		if (this.nowPlayingTake == null)
+		{
+			return;
+		}
+		AMTween.Resume();
+		this.isPaused = false;
+	}
+
+	public void StopLoop()
+	{
+		if (this.nowPlayingTake != null)
+		{
+			this.nowPlayingTake.stopAudio();
+			this.nowPlayingTake.stopAnimations();
+			this.nowPlayingTake = null;
+		}
+		this.isLooping = false;
+		this.isPaused = false;
+		AMTween.Stop();
+	}
+
+	public int getCurrentTakeValue()
+	{
+		return this.currentTake;
+	}
+
+	public int getTakeCount()
+	{
+		return this.takes.Count;
+	}
+
+	public bool setCurrentTakeValue(int _take)
+	{
+		if (_take != this.currentTake)
+		{
+			this.getCurrentTake().previewFrame(1f, false, true, false, false);
+			this.currentTake = _take;
+			return true;
+		}
+		return false;
+	}
+
+	public AMTake getCurrentTake()
+	{
+		return this.takes[this.currentTake];
+	}
+
+	public AMTake getTake(string takeName)
+	{
+		foreach (AMTake amtake in this.takes)
+		{
+			if (amtake.name == takeName)
+			{
+				return amtake;
+			}
+		}
+		Debug.LogError("Animator: Take '" + takeName + "' not found.");
+		return new AMTake(null);
+	}
+
+	public void addTake()
+	{
+		string name = "Take" + (this.takes.Count + 1);
+		AMTake amtake = ScriptableObject.CreateInstance<AMTake>();
+		amtake.name = name;
+		this.makeTakeNameUnique(amtake);
+		amtake.frameRate = 24;
+		amtake.numFrames = 1440;
+		amtake.startFrame = 1f;
+		amtake.selectedFrame = 1;
+		amtake.selectedTrack = -1;
+		amtake.playbackSpeedIndex = 2;
+		amtake.trackKeys = new List<int>();
+		amtake.trackValues = new List<AMTrack>();
+		this.takes.Add(amtake);
+		this.selectTake(this.takes.Count - 1);
+	}
+
+	public void deleteTake(int index)
+	{
+		if (this.playOnStart == this.takes[index])
+		{
+			this.playOnStart = null;
+		}
+		this.takes[index].destroy();
+		this.takes.RemoveAt(index);
+		if (this.currentTake >= index && this.currentTake > 0)
+		{
+			this.currentTake--;
+		}
+	}
+
+	public void deleteCurrentTake()
+	{
+		this.deleteTake(this.currentTake);
+	}
+
+	public void selectTake(int index)
+	{
+		this.currentTake = index;
+	}
+
+	public void selectTake(string name)
+	{
+		for (int i = 0; i < this.takes.Count; i++)
+		{
+			if (this.takes[i].name == name)
+			{
+				this.selectTake(i);
+				break;
+			}
+		}
+	}
+
+	public void makeTakeNameUnique(AMTake take)
+	{
+		bool flag = false;
+		int num = 0;
+		do
+		{
+			if (flag)
+			{
+				flag = false;
+			}
+			foreach (AMTake amtake in this.takes)
+			{
+				if (amtake != take && amtake.name == take.name)
+				{
+					if (num > 0)
+					{
+						take.name = take.name.Substring(0, take.name.Length - 3);
+					}
+					num++;
+					string name = take.name;
+					take.name = string.Concat(new object[]
+					{
+						name,
+						"(",
+						num,
+						")"
+					});
+					flag = true;
+					break;
+				}
+			}
+		}
+		while (flag);
+	}
+
+	public string[] getTakeNames()
+	{
+		string[] array = new string[this.takes.Count + 1];
+		for (int i = 0; i < this.takes.Count; i++)
+		{
+			array[i] = this.takes[i].name;
+		}
+		array[array.Length - 1] = "Create new...";
+		return array;
+	}
+
+	public int getTakeIndex(AMTake take)
+	{
+		for (int i = 0; i < this.takes.Count; i++)
+		{
+			if (this.takes[i] == take)
+			{
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	public bool setCodeLanguage(int codeLanguage)
+	{
+		if (this.codeLanguage != codeLanguage)
+		{
+			this.codeLanguage = codeLanguage;
+			return true;
+		}
+		return false;
+	}
+
+	public bool setGizmoSize(float gizmo_size)
+	{
+		if (this.gizmo_size != gizmo_size)
+		{
+			this.gizmo_size = gizmo_size;
+			foreach (UnityEngine.Object @object in UnityEngine.Object.FindObjectsOfType(typeof(AMTarget)))
+			{
+				if ((@object as AMTarget).gizmo_size != gizmo_size)
+				{
+					(@object as AMTarget).gizmo_size = gizmo_size;
+				}
+			}
+			return true;
+		}
+		return false;
+	}
+
+	public void deleteAllTakesExcept(AMTake take)
+	{
+		for (int i = 0; i < this.takes.Count; i++)
+		{
+			if (!(this.takes[i] == take))
+			{
+				this.deleteTake(i);
+				i--;
+			}
+		}
+	}
+
+	public void mergeWith(AnimatorData _aData)
+	{
+		foreach (AMTake amtake in _aData.takes)
+		{
+			this.takes.Add(amtake);
+			this.makeTakeNameUnique(amtake);
+		}
+	}
+
+	public List<GameObject> getDependencies(AMTake _take = null)
+	{
+		if (_take != null)
+		{
+			return _take.getDependencies().ToList<GameObject>();
+		}
+		List<GameObject> list = new List<GameObject>();
+		foreach (AMTake amtake in this.takes)
+		{
+			list = list.Union(amtake.getDependencies()).ToList<GameObject>();
+		}
+		return list;
+	}
+
+	public List<GameObject> updateDependencies(List<GameObject> newReferences, List<GameObject> oldReferences)
+	{
+		List<GameObject> list = new List<GameObject>();
+		foreach (AMTake amtake in this.takes)
+		{
+			list = list.Union(amtake.updateDependencies(newReferences, oldReferences)).ToList<GameObject>();
+		}
+		return list;
+	}
+
+	public List<AMTake> takes = new List<AMTake>();
+
+	public AMTake playOnStart;
+
+	[HideInInspector]
+	public bool isAnimatorOpen;
+
+	[HideInInspector]
+	public bool isInspectorOpen;
+
+	[HideInInspector]
+	public bool inPlayMode;
+
+	[HideInInspector]
+	public float zoom = 0.4f;
+
+	[HideInInspector]
+	public int currentTake;
+
+	[HideInInspector]
+	public int codeLanguage;
+
+	[HideInInspector]
+	public float gizmo_size = 0.05f;
+
+	[HideInInspector]
+	public float width_track = 150f;
+
+	[HideInInspector]
+	public bool autoKey;
+
+	[HideInInspector]
+	public float elapsedTime;
+
+	public bool bAutoTimeUpdate = true;
+
+	private AMTake nowPlayingTake;
+
+	private bool isPaused;
+
+	private bool isLooping;
+
+	private float takeTime;
+}

+ 18 - 0
Assembly-CSharp/AnimatorPlayer.cs

@@ -0,0 +1,18 @@
+using System;
+using UnityEngine;
+
+public class AnimatorPlayer : MonoBehaviour
+{
+	private void Awake()
+	{
+		this.m_anim = base.GetComponent<Animator>();
+		NDebug.Assert(this.m_anim != null, "Animator が付いていません。\n" + base.gameObject.name);
+	}
+
+	public void SetTrigger(string f_strTrigger)
+	{
+		this.m_anim.SetTrigger(f_strTrigger);
+	}
+
+	private Animator m_anim;
+}

File diff suppressed because it is too large
+ 1692 - 0
Assembly-CSharp/AnimatorTimeline.cs


File diff suppressed because it is too large
+ 1120 - 0
Assembly-CSharp/Appeal_Mgr.cs


+ 376 - 0
Assembly-CSharp/ArcTeleport.cs

@@ -0,0 +1,376 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+public class ArcTeleport : MonoBehaviour
+{
+	private void Start()
+	{
+		this.m_nBackTrailCount = this.m_nTrailCount;
+		this.m_trWarpCircle = base.transform.Find("WarpCircle");
+		NDebug.Assert(this.m_trWarpCircle != null, "WarpCircleが見つかりません。");
+		this.m_Circle_Size = this.m_trWarpCircle.localScale;
+		this.m_trWarpCircle.gameObject.SetActive(false);
+		this.m_Line_Obj = new GameObject();
+		this.m_Line_Obj.name = "Teleport_Line";
+		this.m_Line_Obj.AddComponent<SkinnedMeshRenderer>();
+		SkinnedMeshRenderer component = this.m_Line_Obj.GetComponent<SkinnedMeshRenderer>();
+		component.sharedMesh = new Mesh();
+		component.sharedMesh.name = "Line_Mesh";
+		this.Mesh_Setting(component);
+		this.Bone_Setting(component);
+		component.material = new Material(Resources.Load<Shader>(this.m_Line_Shader_Path));
+		this.m_Line_Tex = Resources.Load<Texture>(this.m_Line_Texture_Path);
+		this.m_Line_Tex_Gray = Resources.Load<Texture>(this.m_Gray_Texture_Path);
+		component.material.SetTexture("_MainTex", this.m_Line_Tex);
+		this.m_Line_Material = component.material;
+		component.sharedMesh.RecalculateNormals();
+		component.sharedMesh.RecalculateBounds();
+		this.m_Line_Obj.transform.parent = base.transform;
+		this.m_Line_Obj.SetActive(false);
+	}
+
+	private void Mesh_Setting(SkinnedMeshRenderer render)
+	{
+		Vector3[] array = new Vector3[this.m_nTrailCount * 4];
+		Vector2[] array2 = new Vector2[this.m_nTrailCount * 4];
+		List<int> list = new List<int>();
+		int i;
+		for (i = 0; i < this.m_nTrailCount; i++)
+		{
+			for (int j = 0; j < 4; j++)
+			{
+				array[i * 4 + j].x = Mathf.Cos(3.14159274f * (float)j) * this.m_Line_Width / 2f * (float)(1 - j / 2);
+				array[i * 4 + j].y = Mathf.Cos(3.14159274f * (float)j) * this.m_Line_Width / 2f * (float)(j / 2);
+				array[i * 4 + j].z = this.m_fLineLength * ((float)i / (float)(this.m_nTrailCount - 1)) - this.m_fLineLength / 2f;
+				array2[i * 4 + j].x = (float)i / (float)(this.m_nTrailCount - 1);
+				array2[i * 4 + j].y = (float)(j % 2);
+			}
+			if (i != 0)
+			{
+				int k;
+				for (k = 0; k < 2; k++)
+				{
+					int[] source = new int[]
+					{
+						0,
+						1,
+						5,
+						0,
+						5,
+						4
+					};
+					list.AddRange(from e in source
+					select e + k * 2 + (i - 1) * 4);
+				}
+			}
+		}
+		render.sharedMesh.vertices = array;
+		render.sharedMesh.uv = array2;
+		render.sharedMesh.triangles = list.ToArray();
+	}
+
+	private void Bone_Setting(SkinnedMeshRenderer render)
+	{
+		this.m_Line_Bones = new Transform[this.m_nTrailCount];
+		Matrix4x4[] array = new Matrix4x4[this.m_nTrailCount];
+		BoneWeight[] array2 = new BoneWeight[this.m_nTrailCount * 4];
+		for (int i = 0; i < this.m_nTrailCount; i++)
+		{
+			GameObject gameObject = new GameObject();
+			this.m_Line_Bones[i] = gameObject.transform;
+			this.m_Line_Bones[i].name = "Line_Bone";
+			this.m_Line_Bones[i].parent = this.m_Line_Obj.transform;
+			this.m_Line_Bones[i].position = Vector3.forward * (this.m_fLineLength * ((float)i / (float)(this.m_nBackTrailCount - 1)) - this.m_fLineLength / 2f);
+			array[i] = this.m_Line_Bones[i].worldToLocalMatrix * this.m_Line_Obj.transform.localToWorldMatrix;
+			for (int j = 0; j < 4; j++)
+			{
+				array2[i * 4 + j] = new BoneWeight
+				{
+					boneIndex0 = i,
+					weight0 = 1f
+				};
+			}
+		}
+		render.bones = this.m_Line_Bones;
+		render.sharedMesh.bindposes = array;
+		render.sharedMesh.boneWeights = array2;
+	}
+
+	public void SetCallBackOnMove(ArcTeleport.dgOnMove f_dgMove)
+	{
+		this.m_dgOnMove = f_dgMove;
+	}
+
+	public void WarpSelecting()
+	{
+		this.m_bPush = true;
+	}
+
+	public bool IsWarpSelecting()
+	{
+		return this.m_bPush;
+	}
+
+	public void WarpDicide()
+	{
+		this.m_bPush = false;
+	}
+
+	public void WarpCancel()
+	{
+		this.m_bBackPush = (this.m_bPush = false);
+	}
+
+	private void OnEnable()
+	{
+		this.WarpCancel();
+	}
+
+	private void OnDisable()
+	{
+		this.WarpCancel();
+	}
+
+	private IEnumerator Circle_Animation()
+	{
+		this.m_trWarpCircle.localScale = Vector3.forward * this.m_Circle_Size.z;
+		float timer = 0f;
+		for (;;)
+		{
+			timer += Time.deltaTime;
+			if (timer >= this.m_Anime_Time)
+			{
+				break;
+			}
+			this.m_trWarpCircle.localScale = Vector3.forward * this.m_Circle_Size.z + new Vector3(this.m_Circle_Size.x, this.m_Circle_Size.y, 0f) * timer / this.m_Anime_Time;
+			yield return null;
+		}
+		yield break;
+		yield break;
+	}
+
+	private Vector3 Circle_Angle()
+	{
+		Vector3 result = Vector3.zero;
+		Vector3 toDirection = this.m_trWarpCircle.position - GameMain.Instance.MainCamera.GetPos();
+		toDirection.y = 0f;
+		toDirection.Normalize();
+		result = Quaternion.FromToRotation(Vector3.forward, toDirection).eulerAngles;
+		result.x = (result.z = 0f);
+		return result;
+	}
+
+	private IEnumerator Line_Flash()
+	{
+		float timer = 0f;
+		Color line_color = Color.white;
+		string tex_name = this.m_Line_Tex.name;
+		for (;;)
+		{
+			timer += Time.deltaTime;
+			float time_rate = Mathf.Abs(Mathf.Cos(0.0174532924f * (180f * (timer / this.m_Flash_Time))));
+			if (!this.m_trWarpCircle.gameObject.activeSelf)
+			{
+				if (tex_name != this.m_Line_Tex_Gray.name)
+				{
+					this.m_Line_Material.SetTexture("_MainTex", this.m_Line_Tex_Gray);
+					tex_name = this.m_Line_Tex_Gray.name;
+				}
+			}
+			else if (tex_name != this.m_Line_Tex.name)
+			{
+				this.m_Line_Material.SetTexture("_MainTex", this.m_Line_Tex);
+				tex_name = this.m_Line_Tex.name;
+			}
+			line_color.a = Mathf.Lerp(1f, this.m_Min_Alpha, time_rate);
+			this.m_Line_Material.SetColor("_Color", line_color);
+			yield return null;
+		}
+		yield break;
+	}
+
+	private void Update()
+	{
+		bool flag = false;
+		if (GameMain.Instance.MainCamera.IsFadeProc())
+		{
+			this.m_bBackHit = (this.m_bBackPush = (this.m_bPush = false));
+			base.StopCoroutine("Line_Flash");
+			this.m_Line_Obj.SetActive(false);
+			return;
+		}
+		if (this.m_bPush)
+		{
+			if (this.m_nBackTrailCount != this.m_nTrailCount)
+			{
+				this.m_nBackTrailCount = this.m_nTrailCount;
+			}
+			if (!this.m_Line_Obj.activeSelf)
+			{
+				base.StartCoroutine("Line_Flash");
+			}
+			this.m_Line_Obj.SetActive(true);
+			Vector3 normalized = this.m_trParent.forward.normalized;
+			Debug.DrawLine(this.m_trParent.position, this.m_trParent.position + normalized * 1f, Color.green);
+			Vector3 vector = new Vector3(normalized.x, 0f, normalized.z);
+			Vector3 normalized2 = vector.normalized;
+			Debug.DrawLine(this.m_trParent.position, this.m_trParent.position + normalized2 * 1f, Color.cyan);
+			float num = Vector3.Angle(normalized, normalized2);
+			if (normalized.y < normalized2.y)
+			{
+				num *= -1f;
+			}
+			Vector3 zero = Vector3.zero;
+			float num2 = Vector3.Angle(Vector3.forward, normalized2);
+			if (normalized2.x < 0f)
+			{
+				num2 *= -1f;
+			}
+			Quaternion rotation = Quaternion.Euler(0f, num2, 0f);
+			Vector3 zero2 = Vector3.zero;
+			float num3 = this.m_Defo_Display_Length;
+			for (float num4 = this.m_fLineSplitLength; num4 < this.m_fLineLength; num4 += this.m_fLineSplitLength)
+			{
+				float num5 = this.m_fVelocity * Mathf.Cos(num * 0.0174532924f) * num4;
+				float num6 = this.m_fVelocity * Mathf.Sin(num * 0.0174532924f) * num4 - 0.5f * this.m_fGravity * (num4 * num4);
+				Vector3 vector2 = this.m_trParent.position + rotation * zero;
+				Vector3 vector3 = this.m_trParent.position + rotation * new Vector3(0f, num6, num5);
+				Debug.DrawLine(vector2, vector3);
+				zero.Set(0f, num6, num5);
+				if (!flag)
+				{
+					this.m_ray.origin = vector2;
+					this.m_ray.direction = vector3 - vector2;
+					if (Physics.Raycast(this.m_ray, out this.m_hit, Vector3.Distance(vector2, vector3), 512))
+					{
+						flag = true;
+						this.m_vHitPos = this.m_hit.point;
+						this.m_trWarpCircle.transform.rotation = Quaternion.Euler(this.m_Fixed_Angle);
+						if (!this.m_trWarpCircle.gameObject.activeSelf)
+						{
+							base.StartCoroutine("Circle_Animation");
+						}
+						this.m_trWarpCircle.gameObject.SetActive(true);
+						this.m_trWarpCircle.position = this.m_vHitPos;
+						num3 = num4;
+					}
+				}
+			}
+			if (this.m_nTrailCount > 0)
+			{
+				float num7 = num3 / (float)this.m_nTrailCount;
+				if (num7 <= 0f)
+				{
+					num7 = 1f;
+				}
+				zero = Vector3.zero;
+				float num8 = num7;
+				for (int i = 0; i < this.m_nTrailCount; i++)
+				{
+					num8 += num7;
+					float num9 = this.m_fVelocity * Mathf.Cos(num * 0.0174532924f) * num8;
+					float num10 = this.m_fVelocity * Mathf.Sin(num * 0.0174532924f) * num8 - 0.5f * this.m_fGravity * (num8 * num8);
+					Vector3 vector4 = this.m_trParent.position + rotation * zero;
+					Vector3 end = this.m_trParent.position + rotation * new Vector3(0f, num10, num9);
+					Debug.DrawLine(vector4, end, Color.blue);
+					zero.Set(0f, num10, num9);
+					this.m_Line_Bones[i].position = vector4;
+				}
+			}
+		}
+		else
+		{
+			if (this.m_bBackPush && this.m_bBackHit && this.m_dgOnMove != null)
+			{
+				this.m_dgOnMove(this.m_vHitPos, this.Circle_Angle());
+			}
+			base.StopCoroutine("Line_Flash");
+			this.m_Line_Obj.SetActive(false);
+		}
+		if (!flag)
+		{
+			this.m_trWarpCircle.localScale = this.m_Circle_Size;
+			this.m_trWarpCircle.gameObject.SetActive(false);
+			base.StopCoroutine("Circle_Animation");
+		}
+		this.m_bBackHit = flag;
+		this.m_bBackPush = this.m_bPush;
+	}
+
+	public bool m_bPush;
+
+	private bool m_bBackPush;
+
+	public Transform m_trParent;
+
+	public float m_fGravity = 0.98f;
+
+	public float m_fVelocity = 100f;
+
+	public float m_fLineLength = 10f;
+
+	public float m_fLineSplitLength = 0.1f;
+
+	public int m_nTrailCount = 10;
+
+	private int m_nBackTrailCount;
+
+	public ArcTeleport.dgOnMove m_dgOnMove;
+
+	private Vector3 m_vHitPos;
+
+	private Ray m_ray = default(Ray);
+
+	private RaycastHit m_hit;
+
+	private bool m_bBackHit;
+
+	private Transform m_trWarpCircle;
+
+	[SerializeField]
+	[Header("ワープサークルの固定角度")]
+	private Vector3 m_Fixed_Angle = Vector3.right * -90f;
+
+	[SerializeField]
+	[Header("サークルのアニメーション時間")]
+	private float m_Anime_Time = 0.75f;
+
+	private Vector3 m_Circle_Size;
+
+	private string m_Line_Shader_Path = "Shaders/Telepot_Line";
+
+	private GameObject m_Line_Obj;
+
+	private Transform[] m_Line_Bones;
+
+	private string m_Line_Texture_Path = "SteamVR/ArcTeleport";
+
+	private string m_Gray_Texture_Path = "SteamVR/ArcTeleport_Gray";
+
+	private Texture m_Line_Tex;
+
+	private Texture m_Line_Tex_Gray;
+
+	[SerializeField]
+	[Header("ラインの横幅")]
+	private float m_Line_Width = 0.1f;
+
+	[SerializeField]
+	[Header("表示するラインの長さの基準値")]
+	private float m_Defo_Display_Length = 5.5f;
+
+	[SerializeField]
+	[Header("点滅時間")]
+	private float m_Flash_Time = 1.5f;
+
+	[SerializeField]
+	[Range(0f, 1f)]
+	private float m_Min_Alpha = 0.4f;
+
+	private Material m_Line_Material;
+
+	public delegate void dgOnMove(Vector3 f_vPosWorld, Vector3 f_vRotWorld);
+}

File diff suppressed because it is too large
+ 1493 - 0
Assembly-CSharp/Assembly-CSharp.csproj


+ 56 - 0
Assembly-CSharp/AssertHelper.cs

@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+
+public static class AssertHelper
+{
+	[Conditional("UNITY_ASSERTIONS")]
+	public static void Implies(bool condition, bool result, string message = "")
+	{
+		if (condition)
+		{
+		}
+	}
+
+	[Conditional("UNITY_ASSERTIONS")]
+	public static void Implies(bool condition, Func<bool> result, string message = "")
+	{
+		if (condition)
+		{
+		}
+	}
+
+	[Conditional("UNITY_ASSERTIONS")]
+	public static void Implies(string conditionName, bool condition, string resultName, bool result)
+	{
+	}
+
+	[Conditional("UNITY_ASSERTIONS")]
+	public static void Implies(string conditionName, bool condition, string resultName, Func<bool> result)
+	{
+		if (condition)
+		{
+		}
+	}
+
+	[Conditional("UNITY_ASSERTIONS")]
+	public static void Contains<T>(T value, IEnumerable<T> collection, string message = "")
+	{
+		if (!collection.Contains(value))
+		{
+			string str = "The value " + value + " was not found in the collection [";
+			bool flag = true;
+			foreach (T t in collection)
+			{
+				if (!flag)
+				{
+					str += ", ";
+					flag = false;
+				}
+				str += t.ToString();
+			}
+			str = str + "]\n" + message;
+		}
+	}
+}

+ 32 - 0
Assembly-CSharp/AssetUty.cs

@@ -0,0 +1,32 @@
+using System;
+using UnityEngine;
+
+public class AssetUty
+{
+	public AssetUty(AFileSystemBase f_FileSys)
+	{
+		this.m_FileSys = f_FileSys;
+	}
+
+	public AssetBundle LoadAssetBundle(string f_strFileName)
+	{
+		NDebug.Assert(this.m_FileSys != null, "LoadAssetBundle を呼び出す前に、ファイルシステムを登録して下さい。");
+		byte[] binary;
+		using (AFileBase afileBase = this.m_FileSys.FileOpen(f_strFileName))
+		{
+			binary = afileBase.ReadAll();
+		}
+		AssetBundle assetBundle = AssetBundle.LoadFromMemory(binary);
+		NDebug.Assert(assetBundle != null && assetBundle.mainAsset != null, "メモリからアセットが読み出せません。\n" + f_strFileName);
+		return assetBundle;
+	}
+
+	public string LoadAssetBundleToString(string f_strFileName)
+	{
+		AssetBundle assetBundle = this.LoadAssetBundle(f_strFileName);
+		TextAsset textAsset = assetBundle.mainAsset as TextAsset;
+		return NUty.ConvByteToString(NUty.ENCO.SHIFT_JIS, textAsset.bytes);
+	}
+
+	private AFileSystemBase m_FileSys;
+}

+ 310 - 0
Assembly-CSharp/AttachPointSubWindow.cs

@@ -0,0 +1,310 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class AttachPointSubWindow : BasePhotoSubWindow
+{
+	public void Awake()
+	{
+		if (this.popupMaidList.onChangePopUpListValue.Count != 0)
+		{
+			return;
+		}
+		this.checkboxTransReset.check = true;
+		if (this.popupMaidList.popup_value_list == null || this.popupMaidList.popup_value_list.Count == 0)
+		{
+			this.popupMaidList.popup_value_list = this.CreatePopupList();
+		}
+		Action<WFCheckBox> item = delegate(WFCheckBox checkbox)
+		{
+			foreach (AttachPointSubWindow.AttachPointCheckBoxs clickCheckBoxData in this.checkBoxs)
+			{
+				if (clickCheckBoxData.checkBox == checkbox)
+				{
+					this.OnClickAttachCheckBox(clickCheckBoxData);
+					return;
+				}
+			}
+		};
+		foreach (AttachPointSubWindow.AttachPointCheckBoxs attachPointCheckBoxs in this.checkBoxs)
+		{
+			attachPointCheckBoxs.checkBox.check = false;
+			attachPointCheckBoxs.checkBox.onClick.Add(item);
+		}
+		this.popupMaidList.onChangePopUpListValue.Add(new Action<KeyValuePair<string, UnityEngine.Object>>(this.OnSelectPopupList));
+	}
+
+	public override void Initizalize(BasePhotoWindow parentWindow)
+	{
+		this.Awake();
+		base.Initizalize(parentWindow);
+		this.popupMaidList.SetPopupValue(this.popupMaidList.popup_value_list[0].Key);
+	}
+
+	public void OnSelectPopupList(KeyValuePair<string, UnityEngine.Object> selectedItem)
+	{
+		if (this.selectItem == null || this.selectItem.obj == null || selectedItem.Value == null || this.selectItem.type == PhotoTransTargetObject.Type.BG)
+		{
+			this.stateText = "設定不可";
+			if (this.selectItem != null && this.selectItem.obj != null)
+			{
+				this.selectItem.attachi_point = PhotoTransTargetObject.AttachPoint.Null;
+				string stateText = this.selectItem.Attach(this.selectItem.attachi_point, !this.checkboxTransReset.check, null);
+				if (this.selectItem.type != PhotoTransTargetObject.Type.BG)
+				{
+					this.stateText = stateText;
+				}
+				if (this.onStateTextChangeEvent != null)
+				{
+					this.onStateTextChangeEvent(this.stateText);
+				}
+			}
+			foreach (AttachPointSubWindow.AttachPointCheckBoxs attachPointCheckBoxs in this.checkBoxs)
+			{
+				WFCheckBox checkBox = attachPointCheckBoxs.checkBox;
+				bool flag = false;
+				attachPointCheckBoxs.checkBox.enabled = flag;
+				checkBox.check = flag;
+			}
+			return;
+		}
+		if (this.selectItem.attachi_point == PhotoTransTargetObject.AttachPoint.Null)
+		{
+			this.stateText = "設定なし";
+			if (this.onStateTextChangeEvent != null)
+			{
+				this.onStateTextChangeEvent(this.stateText);
+			}
+		}
+		foreach (AttachPointSubWindow.AttachPointCheckBoxs clickCheckBoxData in this.checkBoxs)
+		{
+			clickCheckBoxData.checkBox.enabled = true;
+			clickCheckBoxData.checkBox.check = (clickCheckBoxData.attachType == this.selectItem.attachi_point);
+			if (clickCheckBoxData.checkBox.check)
+			{
+				this.OnClickAttachCheckBox(clickCheckBoxData);
+			}
+		}
+	}
+
+	public void OnSelectItem(PhotoTransTargetObject select)
+	{
+		this.selectItem = select;
+		if (select.attachi_point == PhotoTransTargetObject.AttachPoint.Null)
+		{
+			this.popupMaidList.SetPopupValue(this.popupMaidList.popup_value_list[0].Key);
+		}
+		else
+		{
+			string text = string.Empty;
+			List<KeyValuePair<string, UnityEngine.Object>> popup_value_list = this.popupMaidList.popup_value_list;
+			for (int i = 0; i < popup_value_list.Count; i++)
+			{
+				if (popup_value_list[i].Value != null && (popup_value_list[i].Value as Maid).status.guid == select.attach_maid_guid)
+				{
+					text = popup_value_list[i].Key;
+					break;
+				}
+			}
+			if (!string.IsNullOrEmpty(text))
+			{
+				this.popupMaidList.SetPopupValue(text);
+			}
+			else
+			{
+				this.popupMaidList.SetPopupValue(this.popupMaidList.popup_value_list[0].Key);
+			}
+		}
+	}
+
+	public void OnClickAttachCheckBox(AttachPointSubWindow.AttachPointCheckBoxs clickCheckBoxData)
+	{
+		if (this.selectItem == null || this.popupMaidList.popup_select_value.Value == null)
+		{
+			return;
+		}
+		foreach (AttachPointSubWindow.AttachPointCheckBoxs attachPointCheckBoxs in this.checkBoxs)
+		{
+			if (attachPointCheckBoxs.checkBox != clickCheckBoxData.checkBox)
+			{
+				attachPointCheckBoxs.checkBox.check = false;
+			}
+		}
+		if (!clickCheckBoxData.checkBox.check)
+		{
+			this.selectItem.attachi_point = PhotoTransTargetObject.AttachPoint.Null;
+			this.stateText = this.selectItem.Attach(this.selectItem.attachi_point, !this.checkboxTransReset.check, null);
+			if (this.onStateTextChangeEvent != null)
+			{
+				this.onStateTextChangeEvent(this.stateText);
+			}
+			return;
+		}
+		this.selectItem.attachi_point = clickCheckBoxData.attachType;
+		this.stateText = this.selectItem.Attach(this.selectItem.attachi_point, !this.checkboxTransReset.check, this.popupMaidList.popup_select_value.Value as Maid);
+		if (this.onStateTextChangeEvent != null)
+		{
+			this.onStateTextChangeEvent(this.stateText);
+		}
+	}
+
+	public void OnMaidAddEvent(Maid maid, bool is_deserialize_load)
+	{
+		if (maid == null || maid.boMAN)
+		{
+			return;
+		}
+		if (this.maidList == null)
+		{
+			PlacementWindow placementWindow = (this.parent_window_.mgr as PhotoWindowManager).GetWindow(PhotoWindowManager.WindowType.Placement) as PlacementWindow;
+			this.maidList = placementWindow.maid_list;
+		}
+		this.activeMaidList.Add(maid);
+		bool flag = this.popupMaidList.popup_select_value.Value == null;
+		this.popupMaidList.popup_value_list = this.CreatePopupList();
+		if (flag)
+		{
+			this.popupMaidList.SetPopupValue(this.popupMaidList.popup_value_list[0].Key);
+		}
+	}
+
+	public void OnMaidRemoveEventPrev(Maid maid)
+	{
+		if (maid == null || maid.boMAN)
+		{
+			return;
+		}
+		Maid y = (!(this.popupMaidList.popup_select_value.Value == null)) ? (this.popupMaidList.popup_select_value.Value as Maid) : null;
+		List<KeyValuePair<string, UnityEngine.Object>> popup_value_list = this.popupMaidList.popup_value_list;
+		int num = -1;
+		int num2 = 0;
+		while (num2 < popup_value_list.Count && num == -1)
+		{
+			if (popup_value_list[num2].Value == y)
+			{
+				num = num2;
+			}
+			num2++;
+		}
+		this.activeMaidList.Remove(maid);
+		List<KeyValuePair<string, UnityEngine.Object>> list = this.CreatePopupList();
+		for (int i = 0; i < list.Count; i++)
+		{
+			Maid x = (!(list[i].Value == null)) ? (list[i].Value as Maid) : null;
+			if (x == maid)
+			{
+				list.RemoveAt(i);
+				break;
+			}
+		}
+		this.popupMaidList.popup_value_list = list;
+		if (0 <= num && num < list.Count)
+		{
+			this.popupMaidList.SetPopupValue(list[num].Key);
+		}
+		else
+		{
+			this.popupMaidList.SetPopupValue(list[0].Key);
+		}
+	}
+
+	public void Serialize(ref Dictionary<string, string> serializeData)
+	{
+		serializeData.Add("trans_reset", this.checkboxTransReset.check.ToString());
+	}
+
+	public void Deserialize(Dictionary<string, string> deserializeData)
+	{
+		if (deserializeData.ContainsKey("trans_reset"))
+		{
+			bool check = bool.Parse(deserializeData["trans_reset"]);
+			this.checkboxTransReset.check = check;
+		}
+	}
+
+	private List<KeyValuePair<string, UnityEngine.Object>> CreatePopupList()
+	{
+		List<KeyValuePair<string, UnityEngine.Object>> list = new List<KeyValuePair<string, UnityEngine.Object>>();
+		list.Add(new KeyValuePair<string, UnityEngine.Object>("アタッチポイントの指定なし", null));
+		if (this.maidList == null || this.activeMaidList.Count <= 0)
+		{
+			return list;
+		}
+		list.Clear();
+		HashSet<string> hashSet = new HashSet<string>();
+		for (int i = 0; i < this.maidList.Count; i++)
+		{
+			if (this.activeMaidList.Contains(this.maidList[i]))
+			{
+				string text = this.maidList[i].status.lastName + " " + this.maidList[i].status.firstName;
+				string text2 = text;
+				if (hashSet.Contains(text2))
+				{
+					int num = 2;
+					do
+					{
+						text2 = string.Concat(new object[]
+						{
+							text,
+							"(",
+							num,
+							")"
+						});
+						num++;
+					}
+					while (hashSet.Contains(text2));
+				}
+				hashSet.Add(text2);
+				list.Add(new KeyValuePair<string, UnityEngine.Object>(text2, this.maidList[i]));
+			}
+		}
+		return list;
+	}
+
+	public string stateText { get; private set; }
+
+	public int activeMaidListCount
+	{
+		get
+		{
+			return this.activeMaidList.Count;
+		}
+	}
+
+	public new PhotoWindowManager mgr
+	{
+		get
+		{
+			return base.mgr as PhotoWindowManager;
+		}
+	}
+
+	[SerializeField]
+	public WFCheckBox checkboxTransReset;
+
+	[SerializeField]
+	public WindowPartsPopUpList popupMaidList;
+
+	[SerializeField]
+	public AttachPointSubWindow.AttachPointCheckBoxs[] checkBoxs;
+
+	[NonSerialized]
+	public Action<string> onStateTextChangeEvent;
+
+	[NonSerialized]
+	public HashSet<Maid> activeMaidList = new HashSet<Maid>();
+
+	private PhotoTransTargetObject selectItem;
+
+	private List<Maid> maidList;
+
+	[Serializable]
+	public struct AttachPointCheckBoxs
+	{
+		[SerializeField]
+		public PhotoTransTargetObject.AttachPoint attachType;
+
+		[SerializeField]
+		public WFCheckBox checkBox;
+	}
+}

+ 6 - 0
Assembly-CSharp/AttachPrefab.cs

@@ -0,0 +1,6 @@
+using System;
+using UnityEngine;
+
+public class AttachPrefab : MonoBehaviour
+{
+}

+ 65 - 0
Assembly-CSharp/AttributeViewer.cs

@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using MaidStatus;
+using UnityEngine;
+
+public class AttributeViewer : MonoBehaviour
+{
+	public void Awake()
+	{
+		if (this.seiheki_table_ != null)
+		{
+			return;
+		}
+		this.updateStatusInfo = false;
+		this.seiheki_table_ = UTY.GetChildObject(base.gameObject, "Contents/Attribute/AttributeUnitParent", false).GetComponent<UITable>();
+		List<Transform> childList = this.seiheki_table_.GetChildList();
+		for (int i = 0; i < childList.Count; i++)
+		{
+			childList[i].gameObject.SetActive(false);
+		}
+		this.seiheki_table_.Reposition();
+	}
+
+	public void OnEnable()
+	{
+		this.UpdateStatusInfo();
+	}
+
+	public void UpdateStatusInfo()
+	{
+		this.Awake();
+		if (this.updateStatusInfo)
+		{
+			return;
+		}
+		this.updateStatusInfo = true;
+		Status status = GameMain.Instance.CharacterMgr.GetMaid(0).status;
+		List<Transform> childList = this.seiheki_table_.GetChildList();
+		for (int i = 0; i < childList.Count; i++)
+		{
+			childList[i].gameObject.SetActive(false);
+		}
+		int num = 0;
+		foreach (Propensity.Data data in status.propensitys.GetValueArray())
+		{
+			if (childList.Count <= num)
+			{
+				break;
+			}
+			childList[num].gameObject.SetActive(true);
+			UILabel componentInChildren = childList[num].gameObject.GetComponentInChildren<UILabel>();
+			if (!(componentInChildren == null))
+			{
+				componentInChildren.text = data.drawName;
+				num++;
+			}
+		}
+	}
+
+	private Maid maid_;
+
+	private UITable seiheki_table_;
+
+	private bool updateStatusInfo;
+}

+ 107 - 0
Assembly-CSharp/AttributeViewerOld.cs

@@ -0,0 +1,107 @@
+using System;
+using System.Collections.Generic;
+using MaidStatus;
+using UnityEngine;
+
+public class AttributeViewerOld : MonoBehaviour
+{
+	public void Awake()
+	{
+		if (this.seikantai_list_.Count != 0)
+		{
+			return;
+		}
+		GameObject childObject = UTY.GetChildObject(base.gameObject, "Contents/ErogenousZone/ErogenousZoneParent", false);
+		string[] array = new string[]
+		{
+			"口",
+			"喉",
+			"乳首",
+			"クリトリス"
+		};
+		for (int i = 0; i < array.Length; i++)
+		{
+			AttributeViewerOld.SeikantaiObject item = default(AttributeViewerOld.SeikantaiObject);
+			GameObject gameObject = childObject.transform.GetChild(i).gameObject;
+			item.gage = UTY.GetChildObject(gameObject, "Gauge", false).transform;
+			item.percent_label = UTY.GetChildObject(gameObject, "Number/Value", false).GetComponent<UILabel>();
+			this.seikantai_list_.Add(item);
+		}
+		this.seiheki_table_ = UTY.GetChildObject(base.gameObject, "Contents/Attribute/AttributeUnitParent", false).GetComponent<UITable>();
+		List<Transform> childList = this.seiheki_table_.GetChildList();
+		for (int j = 0; j < childList.Count; j++)
+		{
+			childList[j].gameObject.SetActive(false);
+		}
+		this.seiheki_table_.Reposition();
+	}
+
+	public void OnEnable()
+	{
+		this.Awake();
+		this.UpdateStatusInfo();
+	}
+
+	public void SetMaid(Maid maid)
+	{
+		this.maid_ = maid;
+		this.UpdateStatusInfo();
+	}
+
+	public void UpdateStatusInfo()
+	{
+		this.Awake();
+		if (this.maid_ == null)
+		{
+			return;
+		}
+		Status status = this.maid_.status;
+		int[] array = new int[]
+		{
+			status.OldStatus.sexual.mouth,
+			status.OldStatus.sexual.throat,
+			status.OldStatus.sexual.nipple,
+			status.OldStatus.sexual.curi
+		};
+		NDebug.Assert(array.Length == this.seikantai_list_.Count, "error");
+		for (int i = 0; i < this.seikantai_list_.Count; i++)
+		{
+			AttributeViewerOld.SeikantaiObject seikantaiObject = this.seikantai_list_[i];
+			seikantaiObject.gage.transform.localScale = new Vector2((float)array[i] / 1000f, 1f);
+			seikantaiObject.percent_label.text = (array[i] / 10).ToString();
+		}
+		List<Transform> childList = this.seiheki_table_.GetChildList();
+		for (int j = 0; j < childList.Count; j++)
+		{
+			childList[j].gameObject.SetActive(false);
+		}
+		int num = 0;
+		foreach (Propensity.Data data in status.propensitys.GetValueArray())
+		{
+			if (childList.Count <= num)
+			{
+				break;
+			}
+			childList[num].gameObject.SetActive(true);
+			UILabel componentInChildren = childList[num].gameObject.GetComponentInChildren<UILabel>();
+			if (!(componentInChildren == null))
+			{
+				componentInChildren.text = data.drawName;
+				num++;
+			}
+		}
+	}
+
+	private Maid maid_;
+
+	private List<AttributeViewerOld.SeikantaiObject> seikantai_list_ = new List<AttributeViewerOld.SeikantaiObject>();
+
+	private UITable seiheki_table_;
+
+	private struct SeikantaiObject
+	{
+		public Transform gage;
+
+		public UILabel percent_label;
+	}
+}

+ 119 - 0
Assembly-CSharp/AudioMixerMgr.cs

@@ -0,0 +1,119 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Audio;
+using wf;
+
+public class AudioMixerMgr : MonoBehaviour
+{
+	public AudioMixerGroup this[AudioMixerMgr.Group group]
+	{
+		get
+		{
+			return this.group_dic_[group];
+		}
+	}
+
+	public void Awake()
+	{
+		string[] array = new string[]
+		{
+			"Master",
+			"Master/BGM",
+			"Master/Dance",
+			"Master/System",
+			"Master/Voice",
+			"Master/SE",
+			"Master/Env"
+		};
+		foreach (string text in array)
+		{
+			AudioMixerGroup[] array3 = this.Mixer.FindMatchingGroups(text);
+			if (array3 == null || array3.Length <= 0)
+			{
+				Debug.Log("オーディオ初期化エラー");
+				Debug.Log(text + "が失敗");
+				NUty.WinMessageBox(NUty.GetWindowHandle(), "オーディオ機能が利用できません", "オーディオ初期化エラー", 16);
+				Application.Quit();
+				return;
+			}
+		}
+		this.group_dic_ = new Dictionary<AudioMixerMgr.Group, AudioMixerGroup>();
+		this.group_dic_.Add(AudioMixerMgr.Group.Master, this.Mixer.FindMatchingGroups("Master")[0]);
+		this.group_dic_.Add(AudioMixerMgr.Group.BGM, this.Mixer.FindMatchingGroups("Master/BGM")[0]);
+		this.group_dic_.Add(AudioMixerMgr.Group.Dance, this.Mixer.FindMatchingGroups("Master/Dance")[0]);
+		this.group_dic_.Add(AudioMixerMgr.Group.System, this.Mixer.FindMatchingGroups("Master/System")[0]);
+		this.group_dic_.Add(AudioMixerMgr.Group.Voice, this.Mixer.FindMatchingGroups("Master/Voice")[0]);
+		this.group_dic_.Add(AudioMixerMgr.Group.SE, this.Mixer.FindMatchingGroups("Master/SE")[0]);
+		this.group_dic_.Add(AudioMixerMgr.Group.Env, this.Mixer.FindMatchingGroups("Master/Env")[0]);
+	}
+
+	public void Start()
+	{
+		this.call_start = true;
+		foreach (AudioMixerMgr.VolumePropData volumePropData in this.VolumePropDatas)
+		{
+			this.Mixer.GetFloat(volumePropData.name, out volumePropData.val);
+			volumePropData.val = Utility.DecibelToVolume(volumePropData.val);
+			this.volume_prop_acc_.Add(volumePropData.group, volumePropData);
+		}
+		for (int j = 0; j < this.delay_setting_.Count; j++)
+		{
+			this.SetVolume(this.delay_setting_[j].Key, this.delay_setting_[j].Value);
+		}
+		this.delay_setting_.Clear();
+	}
+
+	public void SetVolume(AudioMixerMgr.Group group, float volume)
+	{
+		if (!this.call_start)
+		{
+			if (this.delay_setting_ == null)
+			{
+				this.delay_setting_ = new List<KeyValuePair<AudioMixerMgr.Group, float>>();
+			}
+			this.delay_setting_.Add(new KeyValuePair<AudioMixerMgr.Group, float>(group, volume));
+			return;
+		}
+		if (this.volume_prop_acc_[group].val != volume)
+		{
+			this.volume_prop_acc_[group].val = volume;
+			this.Mixer.SetFloat(this.volume_prop_acc_[group].name, Utility.VolumeToDecibel(volume));
+		}
+	}
+
+	public const int kGroupMax = 7;
+
+	public AudioMixer Mixer;
+
+	public AudioMixerMgr.VolumePropData[] VolumePropDatas;
+
+	private Dictionary<AudioMixerMgr.Group, AudioMixerMgr.VolumePropData> volume_prop_acc_ = new Dictionary<AudioMixerMgr.Group, AudioMixerMgr.VolumePropData>();
+
+	private Dictionary<AudioMixerMgr.Group, AudioMixerGroup> group_dic_ = new Dictionary<AudioMixerMgr.Group, AudioMixerGroup>();
+
+	private bool call_start;
+
+	private List<KeyValuePair<AudioMixerMgr.Group, float>> delay_setting_;
+
+	public enum Group
+	{
+		Master,
+		System,
+		BGM,
+		Dance,
+		Voice,
+		SE,
+		Env
+	}
+
+	[Serializable]
+	public class VolumePropData
+	{
+		public AudioMixerMgr.Group group;
+
+		public string name;
+
+		public float val;
+	}
+}

+ 547 - 0
Assembly-CSharp/AudioSourceMgr.cs

@@ -0,0 +1,547 @@
+using System;
+using UnityEngine;
+using UnityEngine.Audio;
+
+public class AudioSourceMgr : MonoBehaviour
+{
+	public AudioSourceMgr.Type SoundType
+	{
+		get
+		{
+			return this.m_eType;
+		}
+	}
+
+	public float FadeVolume
+	{
+		get
+		{
+			return this.m_fFadeVolume;
+		}
+	}
+
+	public string FileName { get; private set; }
+
+	public bool isLastPlayCompatibilityMode { get; private set; }
+
+	public void Init(AudioSourceMgr.Type f_eType, bool f_bThreeD, SoundMgr f_gcParent, Transform f_trDefParent)
+	{
+		this.m_eType = f_eType;
+		this.m_bThreeD = f_bThreeD;
+		this.m_bThreeDNow = f_bThreeD;
+		this.m_gcSoundMgr = f_gcParent;
+		this.m_fFadeVolume = 1f;
+		this.m_trDefParent = f_trDefParent;
+		this.m_bPlay = false;
+		base.gameObject.transform.SetParent(f_trDefParent, false);
+		if (f_trDefParent != null)
+		{
+			this.m_strLastParent = f_trDefParent.name;
+		}
+		this.audiosource = base.gameObject.GetComponentsInChildren<AudioSource>(true)[0];
+		this.audiosource.playOnAwake = false;
+		if (f_bThreeD)
+		{
+			this.audiosource.dopplerLevel = 0f;
+		}
+		this.ApplyThreeD();
+		AudioMixerGroup outputAudioMixerGroup = null;
+		switch (f_eType)
+		{
+		case AudioSourceMgr.Type.Bgm:
+			outputAudioMixerGroup = this.m_gcSoundMgr.mix_mgr[AudioMixerMgr.Group.BGM];
+			break;
+		case AudioSourceMgr.Type.Se:
+			outputAudioMixerGroup = this.m_gcSoundMgr.mix_mgr[AudioMixerMgr.Group.SE];
+			break;
+		case AudioSourceMgr.Type.System:
+			outputAudioMixerGroup = this.m_gcSoundMgr.mix_mgr[AudioMixerMgr.Group.System];
+			break;
+		case AudioSourceMgr.Type.Env:
+			outputAudioMixerGroup = this.m_gcSoundMgr.mix_mgr[AudioMixerMgr.Group.Env];
+			break;
+		case AudioSourceMgr.Type.Voice:
+			outputAudioMixerGroup = this.m_gcSoundMgr.mix_mgr[AudioMixerMgr.Group.Voice];
+			break;
+		}
+		this.audiosource.outputAudioMixerGroup = outputAudioMixerGroup;
+	}
+
+	public void Clear()
+	{
+		this.Stop();
+		if (this.audiosource != null && this.audiosource.clip != null)
+		{
+			this.audiosource.clip = null;
+		}
+		if (this.m_ogg != null)
+		{
+			this.m_ogg.Close();
+			this.m_ogg.Dispose();
+			this.m_ogg = null;
+		}
+		this.Fase = 0;
+	}
+
+	public void OnDestroy()
+	{
+		this.Clear();
+	}
+
+	public void OnPreFinalize()
+	{
+		this.Clear();
+	}
+
+	public void BackToParent()
+	{
+		base.gameObject.transform.SetParent(this.m_trDefParent, false);
+		if (this.m_trDefParent != null)
+		{
+			this.m_strLastParent = this.m_trDefParent.name;
+		}
+	}
+
+	public void SetParent(Transform f_trNewAttachParent)
+	{
+		if (f_trNewAttachParent == null)
+		{
+			return;
+		}
+		base.gameObject.transform.SetParent(f_trNewAttachParent, false);
+		if (f_trNewAttachParent != null)
+		{
+			this.m_strLastParent = f_trNewAttachParent.name;
+		}
+	}
+
+	private void ApplyVolume()
+	{
+		if (this.audiosource == null)
+		{
+			Debug.LogWarning("AudioSourceは消えています。最後の親 " + this.m_strLastParent);
+			return;
+		}
+		this.audiosource.volume = Mathf.Clamp(this.m_fFadeVolume, 0f, 1f);
+	}
+
+	public float Pitch
+	{
+		get
+		{
+			return this.audiosource.pitch;
+		}
+		set
+		{
+			this.audiosource.pitch = value;
+		}
+	}
+
+	public void ApplyThreeD()
+	{
+		if (!this.m_bThreeD)
+		{
+			return;
+		}
+		bool threeD = this.m_gcSoundMgr.GetThreeD(this.m_eType);
+		if (this.m_bThreeDNow == threeD)
+		{
+			return;
+		}
+		if (!threeD)
+		{
+			this.m_fBackPanLevel = this.audiosource.spatialBlend;
+			this.m_bBackBypassEffects = this.audiosource.bypassEffects;
+			this.m_bBackBypassListenerEffects = this.audiosource.bypassListenerEffects;
+			this.m_bBackBypassReverbZones = this.audiosource.bypassReverbZones;
+			this.audiosource.spatialBlend = 0f;
+			this.audiosource.bypassEffects = true;
+			this.audiosource.bypassListenerEffects = true;
+			this.audiosource.bypassReverbZones = true;
+		}
+		else if (threeD)
+		{
+			this.audiosource.spatialBlend = this.m_fBackPanLevel;
+			this.audiosource.bypassEffects = this.m_bBackBypassEffects;
+			this.audiosource.bypassListenerEffects = this.m_bBackBypassListenerEffects;
+			this.audiosource.bypassReverbZones = this.m_bBackBypassReverbZones;
+		}
+		this.m_bThreeDNow = threeD;
+	}
+
+	public bool LoadFromWf(AFileSystemBase fileSystem, string fileName, bool stream)
+	{
+		this.Clear();
+		this.FileName = fileName;
+		this.isLastPlayCompatibilityMode = this.m_gcSoundMgr.compatibilityMode;
+		float[] array = this.aryAmpRate;
+		float amp_late;
+		if (this.m_gcSoundMgr.compatibilityMode || fileSystem.NativePointerToInterfaceFileSystem == GameUty.FileSystemOld.NativePointerToInterfaceFileSystem)
+		{
+			amp_late = ((!this.m_bDanceBGM) ? this.aryAmpRateOld[(int)this.m_eType] : 0.8f);
+		}
+		else
+		{
+			amp_late = ((!this.m_bDanceBGM) ? this.aryAmpRate[(int)this.m_eType] : 0.8f);
+		}
+		this.m_ogg = new SoundFileOgg(fileSystem, amp_late);
+		this.m_ogg.Open(fileName, this.m_bThreeDNow, stream);
+		if (!this.m_ogg.IsOpen())
+		{
+			Debug.LogError("サウンドファイルが開けませんでした。" + fileName);
+			return false;
+		}
+		this.audiosource.clip = this.m_ogg.clip;
+		this.Fase = 3;
+		return true;
+	}
+
+	public void LoadPlayDanceBGM(string f_strFileName, float f_fFadeTime, bool f_bStreaming, bool f_bLoop = false)
+	{
+		AFileSystemBase fileSystem = GameUty.FileSystem;
+		if (string.IsNullOrEmpty(f_strFileName))
+		{
+			Debug.LogWarning("サウンドファイル名が空です。" + f_strFileName);
+			return;
+		}
+		if (!fileSystem.IsExistentFile(f_strFileName))
+		{
+			Debug.LogWarning("サウンドファイルが見つかりません。" + f_strFileName);
+			return;
+		}
+		this.m_bDanceBGM = true;
+		if (this.audiosource.outputAudioMixerGroup != this.m_gcSoundMgr.mix_mgr[AudioMixerMgr.Group.Dance])
+		{
+			this.audiosource.outputAudioMixerGroup = this.m_gcSoundMgr.mix_mgr[AudioMixerMgr.Group.Dance];
+		}
+		this.LoadFromWf(fileSystem, f_strFileName, f_bStreaming);
+		this.ApplyVolume();
+		this.Play(f_fFadeTime, f_bLoop);
+	}
+
+	public void LoadPlay(string f_strFileName, float f_fFadeTime, bool f_bStreaming, bool f_bLoop = false)
+	{
+		if (string.IsNullOrEmpty(f_strFileName))
+		{
+			Debug.LogWarning("サウンドファイル名が空です。" + f_strFileName);
+			return;
+		}
+		AFileSystemBase[] array;
+		if (this.m_eType == AudioSourceMgr.Type.Voice)
+		{
+			if (this.m_gcSoundMgr.compatibilityMode)
+			{
+				array = new AFileSystemBase[]
+				{
+					GameUty.FileSystemOld,
+					GameUty.FileSystem
+				};
+			}
+			else
+			{
+				array = new AFileSystemBase[]
+				{
+					GameUty.FileSystem,
+					GameUty.FileSystemOld
+				};
+			}
+		}
+		else if (this.m_gcSoundMgr.compatibilityMode)
+		{
+			array = new AFileSystemBase[]
+			{
+				GameUty.FileSystemOld
+			};
+		}
+		else
+		{
+			array = new AFileSystemBase[]
+			{
+				GameUty.FileSystem
+			};
+		}
+		AFileSystemBase afileSystemBase = null;
+		foreach (AFileSystemBase afileSystemBase2 in array)
+		{
+			if (afileSystemBase2.IsExistentFile(f_strFileName))
+			{
+				afileSystemBase = afileSystemBase2;
+				break;
+			}
+		}
+		if (afileSystemBase == null)
+		{
+			Debug.LogWarning("サウンドファイルが見つかりません。" + f_strFileName);
+			return;
+		}
+		this.m_bDanceBGM = false;
+		if (this.audiosource.outputAudioMixerGroup == this.m_gcSoundMgr.mix_mgr[AudioMixerMgr.Group.Dance])
+		{
+			this.audiosource.outputAudioMixerGroup = this.m_gcSoundMgr.mix_mgr[AudioMixerMgr.Group.BGM];
+		}
+		this.LoadFromWf(afileSystemBase, f_strFileName, f_bStreaming);
+		this.Play(f_fFadeTime, f_bLoop);
+	}
+
+	public void Play(float f_fFadeTime, bool loop = false)
+	{
+		this.m_bLoop = loop;
+		this.m_fNextFadeTime = f_fFadeTime;
+		if (this.Fase == 0)
+		{
+			Debug.LogError("サウンドは未だロードされていません。");
+			return;
+		}
+		if (this.Fase == 1)
+		{
+			this.m_bPlay = true;
+			this.Fase = 2;
+		}
+		else if (this.Fase == 3)
+		{
+			this.VAvgMax = 0.2f;
+			this.ApplyVolume();
+			this.Fade(1f, f_fFadeTime, false);
+			this.audiosource.loop = loop;
+			this.m_bPlay = true;
+			this.audiosource.Play();
+		}
+	}
+
+	public void PlayOneShot()
+	{
+		if (this.Fase == 0)
+		{
+			Debug.LogError("PlayOneShot サウンドは未だロードされていません。");
+		}
+		if (this.Fase == 1 || this.Fase == 2)
+		{
+			Debug.LogError("PlayOneShot サウンドがロード中です。待つ必要があります。");
+			return;
+		}
+		this.VAvgMax = 0.2f;
+		this.ApplyVolume();
+		this.Fade(1f, 0f, false);
+		this.audiosource.loop = false;
+		this.m_bPlay = true;
+		this.audiosource.PlayOneShot(this.audiosource.clip);
+	}
+
+	public void Stop()
+	{
+		this.VAvgMax = 1f;
+		if (this.audiosource != null)
+		{
+			this.audiosource.Stop();
+		}
+		this.m_bFadeNow = false;
+		this.m_fFadeVolume = 0f;
+		this.m_bPlay = false;
+	}
+
+	public void Stop(float f_fFadeTime)
+	{
+		this.m_bPlay = false;
+		this.Fade(0f, f_fFadeTime, true);
+	}
+
+	public void Fade(float f_fTargetVol, float f_fTime, bool f_bToStop)
+	{
+		if (f_fTime <= 0.01f)
+		{
+			this.m_fFadeVolume = f_fTargetVol;
+			if (f_bToStop)
+			{
+				this.Stop();
+			}
+			this.ApplyVolume();
+			return;
+		}
+		this.m_fFadeSubVolume = f_fTargetVol - this.m_fFadeVolume;
+		if (this.m_fFadeSubVolume == 0f)
+		{
+			return;
+		}
+		this.m_fFadeTargetVolume = f_fTargetVol;
+		this.m_fFadeTime = f_fTime;
+		this.m_bFadeToStop = f_bToStop;
+		this.m_bFadeNow = true;
+	}
+
+	public float GetVol()
+	{
+		this.audiosource.GetSpectrumData(this.vals, 0, FFTWindow.Blackman);
+		float num = 0f;
+		for (int i = 0; i < 256; i++)
+		{
+			num += this.vals[i];
+			this.avgs[i] = this.avgs[i] * 0.9f + this.vals[i] * 0.1f;
+		}
+		this.VAvg = this.VAvg * 0.5f + num * 0.5f;
+		this.VAvgMax *= 0.95f;
+		if (this.VAvgMax < this.VAvg)
+		{
+			this.VAvgMax = this.VAvg;
+		}
+		return num * 17f;
+	}
+
+	public float GetLength()
+	{
+		if (this.m_ogg == null)
+		{
+			return 0f;
+		}
+		return this.m_ogg.GetLength();
+	}
+
+	public bool isPlay()
+	{
+		return this.Fase == 1 || (this.audiosource.isPlaying && this.m_bPlay);
+	}
+
+	public bool isLoop()
+	{
+		return this.audiosource.loop;
+	}
+
+	private void Update()
+	{
+		if ((this.Fase == 1 || this.Fase == 2) && this.Fase == 2)
+		{
+			if (this.www.isDone)
+			{
+				this.Fase = 3;
+				UnityEngine.Object.Destroy(this.audiosource.clip);
+				this.audiosource.clip = this.www.GetAudioClip(this.m_bThreeDNow, true);
+				this.www.Dispose();
+				this.Play(this.m_fNextFadeTime, this.m_bLoop);
+			}
+			else if (this.www.error != null)
+			{
+				this.Fase = 0;
+				Debug.LogError("err audio " + this.url_);
+			}
+		}
+		if (this.Fase == 3 && this.m_bFadeNow)
+		{
+			this.m_fFadeVolume += this.m_fFadeSubVolume * (Time.deltaTime / this.m_fFadeTime);
+			if (this.m_fFadeSubVolume < 0f)
+			{
+				if (this.m_fFadeVolume <= this.m_fFadeTargetVolume)
+				{
+					this.m_fFadeVolume = this.m_fFadeTargetVolume;
+					this.m_bFadeNow = false;
+					if (this.m_bFadeToStop)
+					{
+						this.Stop();
+					}
+				}
+			}
+			else if (this.m_fFadeSubVolume > 0f && this.m_fFadeVolume >= this.m_fFadeTargetVolume)
+			{
+				this.m_fFadeVolume = this.m_fFadeTargetVolume;
+				this.m_bFadeNow = false;
+				if (this.m_bFadeToStop)
+				{
+					this.Stop();
+				}
+			}
+			this.ApplyVolume();
+		}
+	}
+
+	private void OnValidate()
+	{
+		if (this.m_ogg != null)
+		{
+			this.m_ogg.AmpRate = ((!this.m_bDanceBGM) ? this.aryAmpRate[(int)this.m_eType] : 0.8f);
+		}
+	}
+
+	public float[] aryAmpRate = new float[]
+	{
+		1f,
+		1f,
+		1f,
+		1f,
+		1f
+	};
+
+	public float[] aryAmpRateOld = new float[]
+	{
+		0.3f,
+		0.8f,
+		0.5f,
+		0.15f,
+		2.8f
+	};
+
+	private AudioSourceMgr.Type m_eType;
+
+	private SoundMgr m_gcSoundMgr;
+
+	public AudioSource audiosource;
+
+	private bool m_bFadeNow;
+
+	private float m_fFadeVolume;
+
+	private float m_fFadeTargetVolume;
+
+	private float m_fFadeSubVolume;
+
+	private float m_fFadeTime;
+
+	private bool m_bFadeToStop;
+
+	private bool m_bThreeD;
+
+	private float m_fBackPanLevel = 1f;
+
+	private bool m_bBackBypassEffects;
+
+	private bool m_bBackBypassListenerEffects;
+
+	private bool m_bBackBypassReverbZones;
+
+	private bool m_bDanceBGM;
+
+	private bool m_bThreeDNow;
+
+	private WWW www;
+
+	private int Fase;
+
+	private string url_;
+
+	public float[] vals = new float[256];
+
+	public float[] avgs = new float[256];
+
+	public float VAvg;
+
+	public float VAvgMax = 1f;
+
+	private SoundFileOgg m_ogg;
+
+	private Transform m_trDefParent;
+
+	private bool m_bLoop = true;
+
+	private float m_fNextFadeTime;
+
+	private string m_strLastParent = string.Empty;
+
+	private bool m_bPlay;
+
+	public enum Type
+	{
+		Bgm,
+		Se,
+		System,
+		Env,
+		Voice,
+		Max
+	}
+}

+ 39 - 0
Assembly-CSharp/AudioSourceParent.cs

@@ -0,0 +1,39 @@
+using System;
+using UnityEngine;
+
+public class AudioSourceParent : MonoBehaviour
+{
+	private AudioSourceMgr AudioMan
+	{
+		get
+		{
+			return this.m_AudioMan;
+		}
+	}
+
+	public void AttachVoice(Transform f_trParent, AudioSourceParent.dgOnDettach f_dgDetattchCallBack)
+	{
+		this.m_dgOnDetattch = f_dgDetattchCallBack;
+		this.m_AudioMan = GameMain.Instance.SoundMgr.AllocVoice(f_trParent, true);
+	}
+
+	public void OnDestroy()
+	{
+		if (this.m_dgOnDetattch != null)
+		{
+			this.m_dgOnDetattch(this);
+			this.m_dgOnDetattch = null;
+		}
+		if (this.m_AudioMan != null)
+		{
+			GameMain.Instance.SoundMgr.FreeVoice(this.m_AudioMan, false);
+			this.m_AudioMan = null;
+		}
+	}
+
+	public AudioSourceMgr m_AudioMan;
+
+	private AudioSourceParent.dgOnDettach m_dgOnDetattch;
+
+	public delegate void dgOnDettach(AudioSourceParent f_asp);
+}

+ 19 - 0
Assembly-CSharp/AutoPiston.cs

@@ -0,0 +1,19 @@
+using System;
+using UnityEngine;
+
+public class AutoPiston : MonoBehaviour
+{
+	private float insertDepth;
+
+	private int pistonDir = 1;
+
+	private bool pistonFlag;
+
+	private float insertStart;
+
+	private float insertEnd = 0.95f;
+
+	private float pistonSpeed = 1f;
+
+	private float autoSpeedMultiple;
+}

+ 213 - 0
Assembly-CSharp/BGObjectWindow.cs

@@ -0,0 +1,213 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using wf;
+
+public class BGObjectWindow : BaseMaidPhotoWindow
+{
+	public override void Awake()
+	{
+		base.Awake();
+		PhotoBGObjectData.Create();
+		this.scroll_view_ = NGUITools.FindInParents<UIScrollView>(this.Grid.transform);
+		this.add_scroll_view_ = NGUITools.FindInParents<UIScrollView>(this.AddGrid.transform);
+		for (int i = 0; i < PhotoBGObjectData.data.Count; i++)
+		{
+			PhotoBGObjectData photoBGObjectData = PhotoBGObjectData.data[i];
+			GameObject gameObject = Utility.CreatePrefab(this.Grid.gameObject, "ScenePhotoMode/WindowListItemNormalButton", true);
+			gameObject.name = photoBGObjectData.id.ToString();
+			gameObject.GetComponentInChildren<UILabel>().text = photoBGObjectData.name;
+			EventDelegate.Add(gameObject.GetComponent<UIButton>().onClick, new EventDelegate.Callback(this.OnClickAdd));
+		}
+		NGUITools.FindInParents<UIScrollView>(this.Grid.transform).ResetPosition();
+		this.Grid.Reposition();
+		this.UpdateChildren();
+	}
+
+	public override void Start()
+	{
+		base.Start();
+	}
+
+	public void OnDestroy()
+	{
+		if (GameMain.Instance == null || GameMain.Instance.BgMgr == null || GameMain.Instance.BgMgr.bg_parent_object == null)
+		{
+			return;
+		}
+		foreach (BGObjectWindow.BgObject bgObject in this.create_obj_list_)
+		{
+			if (this.mgr != null && this.mgr.GetWindow(PhotoWindowManager.WindowType.ObjectManager) != null)
+			{
+				ObjectManagerWindow objectManagerWindow = this.mgr.GetWindow(PhotoWindowManager.WindowType.ObjectManager) as ObjectManagerWindow;
+				objectManagerWindow.RemoveTransTargetObject(bgObject.game_object);
+			}
+			UnityEngine.Object.DestroyImmediate(bgObject.game_object);
+		}
+		this.create_obj_list_.Clear();
+	}
+
+	public void OnClickAdd()
+	{
+		this.AddObject(PhotoBGObjectData.Get(long.Parse(UIButton.current.name)), string.Empty);
+	}
+
+	public void OnClickRemove()
+	{
+		string name = UIButton.current.name;
+		for (int i = 0; i < this.create_obj_list_.Count; i++)
+		{
+			if (this.create_obj_list_[i].create_time == name)
+			{
+				ObjectManagerWindow objectManagerWindow = this.mgr.GetWindow(PhotoWindowManager.WindowType.ObjectManager) as ObjectManagerWindow;
+				objectManagerWindow.RemoveTransTargetObject(this.create_obj_list_[i].game_object);
+				UnityEngine.Object.DestroyImmediate(this.create_obj_list_[i].game_object);
+				this.create_obj_list_.RemoveAt(i);
+				UnityEngine.Object.DestroyImmediate(UIButton.current.gameObject);
+				this.AddGrid.Reposition();
+				this.add_scroll_view_.UpdateScrollbars();
+				break;
+			}
+		}
+	}
+
+	public override void OnSerializeEvent()
+	{
+		base.OnSerializeEvent();
+		Dictionary<string, Dictionary<string, string>> woldStoreData = base.GetWoldStoreData();
+		woldStoreData.Clear();
+		for (int i = 0; i < this.create_obj_list_.Count; i++)
+		{
+			Dictionary<string, string> dictionary = new Dictionary<string, string>();
+			BGObjectWindow.BgObject bgObject = this.create_obj_list_[i];
+			Transform transform = bgObject.game_object.transform;
+			dictionary["id"] = bgObject.data.id.ToString();
+			dictionary["position"] = transform.position.ToString("G9");
+			dictionary["rotation"] = transform.rotation.ToString("G9");
+			dictionary["scale"] = transform.localScale.ToString("G9");
+			dictionary["visible"] = transform.gameObject.activeSelf.ToString();
+			woldStoreData.Add(bgObject.create_time, dictionary);
+		}
+	}
+
+	public override void OnDeserializeEvent()
+	{
+		UIButton current = UIButton.current;
+		List<Transform> childList = this.AddGrid.GetChildList();
+		for (int i = 0; i < childList.Count; i++)
+		{
+			UIButton.current = childList[i].GetComponentInChildren<UIButton>();
+			this.OnClickRemove();
+		}
+		UIButton.current = current;
+		this.OnDestroy();
+		this.create_obj_list_.Clear();
+		List<string> list = new List<string>();
+		Dictionary<string, Dictionary<string, string>> woldStoreData = base.GetWoldStoreData();
+		foreach (KeyValuePair<string, Dictionary<string, string>> keyValuePair in woldStoreData)
+		{
+			Dictionary<string, string> value = keyValuePair.Value;
+			long id = long.Parse(value["id"]);
+			string key = keyValuePair.Key;
+			BGObjectWindow.BgObject bgObject = this.AddObject(PhotoBGObjectData.Get(id), key);
+			if (bgObject != null && bgObject.game_object != null)
+			{
+				Transform transform = bgObject.game_object.transform;
+				transform.position = Parse.Vector3(value["position"]);
+				transform.rotation = Parse.Quaternion(value["rotation"]);
+				transform.localScale = Parse.Vector3(value["scale"]);
+				bgObject.game_object.SetActive(bool.Parse(value["visible"]));
+			}
+			else
+			{
+				list.Add(keyValuePair.Key);
+			}
+		}
+		for (int j = 0; j < list.Count; j++)
+		{
+			woldStoreData.Remove(list[j]);
+		}
+		this.Grid.Reposition();
+		this.AddGrid.Reposition();
+		this.scroll_view_.ResetPosition();
+		this.add_scroll_view_.ResetPosition();
+	}
+
+	private BGObjectWindow.BgObject AddObject(PhotoBGObjectData add_bg_data, string create_time = "")
+	{
+		if (add_bg_data == null)
+		{
+			return null;
+		}
+		BGObjectWindow.BgObject bgObject = new BGObjectWindow.BgObject();
+		bgObject.data = add_bg_data;
+		if (!string.IsNullOrEmpty(create_time))
+		{
+			bgObject.create_time = create_time;
+		}
+		for (int i = 0; i < this.create_obj_list_.Count; i++)
+		{
+			if (this.create_obj_list_[i].create_time == bgObject.create_time)
+			{
+				return null;
+			}
+		}
+		bgObject.game_object = bgObject.data.Instantiate(bgObject.create_time);
+		if (bgObject.game_object == null)
+		{
+			return null;
+		}
+		this.create_obj_list_.Add(bgObject);
+		this.create_obj_list_.Sort();
+		ObjectManagerWindow objectManagerWindow = this.mgr.GetWindow(PhotoWindowManager.WindowType.ObjectManager) as ObjectManagerWindow;
+		objectManagerWindow.AddTransTargetObject(bgObject.game_object, bgObject.data.name, PhotoTransTargetObject.Type.Prefab);
+		GameObject gameObject = Utility.CreatePrefab(this.AddGrid.gameObject, "ScenePhotoMode/WindowListItemNormalButton", true);
+		gameObject.name = bgObject.create_time.ToString();
+		gameObject.GetComponentInChildren<UILabel>().text = bgObject.data.name;
+		EventDelegate.Add(gameObject.GetComponent<UIButton>().onClick, new EventDelegate.Callback(this.OnClickRemove));
+		this.AddGrid.Reposition();
+		this.add_scroll_view_.UpdateScrollbars();
+		return bgObject;
+	}
+
+	public new PhotoWindowManager mgr
+	{
+		get
+		{
+			return base.mgr;
+		}
+	}
+
+	public UIGrid Grid;
+
+	public UIGrid AddGrid;
+
+	private UIScrollView scroll_view_;
+
+	private UIScrollView add_scroll_view_;
+
+	private List<BGObjectWindow.BgObject> create_obj_list_ = new List<BGObjectWindow.BgObject>();
+
+	private class BgObject : IComparable<BGObjectWindow.BgObject>
+	{
+		public BgObject()
+		{
+			this.create_time = DateTime.Now.ToString("yyyyMMddHHmmssfff");
+		}
+
+		public int CompareTo(BGObjectWindow.BgObject obj)
+		{
+			if (obj == null)
+			{
+				return 1;
+			}
+			return long.Parse(this.create_time).CompareTo(long.Parse(obj.create_time));
+		}
+
+		public string create_time;
+
+		public GameObject game_object;
+
+		public PhotoBGObjectData data;
+	}
+}

+ 53 - 0
Assembly-CSharp/BGPrefabLink.cs

@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class BGPrefabLink : PartsMgrBase
+{
+	protected override void Start()
+	{
+		base.Start();
+		base.IsActive = true;
+	}
+
+	public override void StartAction()
+	{
+		if (!this.m_GimicSetting.Gimic)
+		{
+			Debug.LogError("BGPrefabLink:大元のギミックが設定されてません");
+			return;
+		}
+		foreach (string text in this.m_GimicSetting.PrefabName)
+		{
+			GameObject prefabFromBg = GameMain.Instance.BgMgr.GetPrefabFromBg(text);
+			if (!prefabFromBg)
+			{
+				Debug.LogErrorFormat("現在の背景に{0}は存在しません", new object[]
+				{
+					text
+				});
+			}
+			else
+			{
+				prefabFromBg.transform.SetParent(this.m_GimicSetting.Gimic.transform, this.m_IsworldStay);
+			}
+		}
+	}
+
+	[SerializeField]
+	private BGPrefabLink.GimicData m_GimicSetting;
+
+	[SerializeField]
+	[Header("位置・回転をそのままにしておくか")]
+	private bool m_IsworldStay = true;
+
+	[Serializable]
+	private class GimicData
+	{
+		[Header("大元のギミック")]
+		public GameObject Gimic;
+
+		[Header("紐付けるプレハブ名")]
+		public List<string> PrefabName = new List<string>();
+	}
+}

+ 24 - 0
Assembly-CSharp/BGRenderSetting.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class BGRenderSetting : MonoBehaviour
+{
+	public void Awake()
+	{
+		if (this.RenderDataList == null || this.RenderDataList.Count <= 0)
+		{
+			return;
+		}
+		for (int i = 0; i < this.RenderDataList.Count; i++)
+		{
+			RenderData renderData = this.RenderDataList[i];
+			if (renderData != null && !(renderData.Mesh == null) && !(renderData.Mesh.material == null))
+			{
+				renderData.Mesh.material.renderQueue = renderData.RenderQueue;
+			}
+		}
+	}
+
+	public List<RenderData> RenderDataList;
+}

+ 165 - 0
Assembly-CSharp/BGWindow.cs

@@ -0,0 +1,165 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using wf;
+
+public class BGWindow : BaseMaidPhotoWindow
+{
+	public override void Awake()
+	{
+		base.Awake();
+		PhotoBGData.Create();
+		Dictionary<string, List<KeyValuePair<string, object>>> dictionary = new Dictionary<string, List<KeyValuePair<string, object>>>();
+		foreach (KeyValuePair<string, List<PhotoBGData>> keyValuePair in PhotoBGData.category_list)
+		{
+			if (!dictionary.ContainsKey(keyValuePair.Key))
+			{
+				dictionary.Add(keyValuePair.Key, new List<KeyValuePair<string, object>>());
+			}
+			for (int i = 0; i < keyValuePair.Value.Count; i++)
+			{
+				dictionary[keyValuePair.Key].Add(new KeyValuePair<string, object>(keyValuePair.Value[i].name, keyValuePair.Value[i]));
+			}
+		}
+		this.PopupAndTabList.SetData(dictionary, false);
+		this.PopupAndTabList.onChangePopUpListValue.Add(new Action<KeyValuePair<string, UnityEngine.Object>>(this.OnChangePopUpList));
+		this.PopupAndTabList.onSelect.Add(new Action<object>(this.OnSelectItem));
+		this.PopupAndTabList.popup_value_list = PhotoBGData.popup_category_list;
+		this.CheckSolidColor.onClick.Add(new Action<WFCheckBox>(this.OnClickCheckSolidColorCheckBox));
+		this.ColorInput.onChangeValue.Add(new Action<WindowPartsInputColorrPalette, Color>(this.OnChangeValueColorInput));
+	}
+
+	public override void Start()
+	{
+		base.Start();
+		this.UpdateChildren();
+		this.PopupAndTabList.SetPopupValue(PhotoBGData.popup_category_list[0].Key);
+		this.PopupAndTabList.SetSelectButton(PhotoBGData.init_data, true);
+		this.CheckSolidColor.check = false;
+		this.ColorInput.visible = false;
+		this.ColorInput.ResetNum = GameMain.Instance.MainCamera.camera.backgroundColor;
+		this.ColorInput.OnReset();
+	}
+
+	private void OnSelectItem(object select_data_obj)
+	{
+		if (select_data_obj == null)
+		{
+			return;
+		}
+		PhotoBGData photoBGData = select_data_obj as PhotoBGData;
+		Dictionary<string, Dictionary<string, string>> woldStoreData = base.GetWoldStoreData();
+		if (!woldStoreData.ContainsKey("ベース背景"))
+		{
+			woldStoreData["ベース背景"] = new Dictionary<string, string>();
+		}
+		woldStoreData["ベース背景"]["id"] = photoBGData.id;
+		this.SetBg(photoBGData);
+	}
+
+	private void OnChangeValueColorInput(WindowPartsInputColorrPalette obj, Color color)
+	{
+		this.Apply();
+	}
+
+	protected void OnChangePopUpList(KeyValuePair<string, UnityEngine.Object> popup_val)
+	{
+	}
+
+	private void SetBg(PhotoBGData bg_data)
+	{
+		ObjectManagerWindow objectManagerWindow = base.mgr.GetWindow(PhotoWindowManager.WindowType.ObjectManager) as ObjectManagerWindow;
+		objectManagerWindow.RemoveTransTargetObject(GameMain.Instance.BgMgr.current_bg_object);
+		bg_data.Apply();
+		List<GameObject> list = new List<GameObject>();
+		Transform transform = GameMain.Instance.BgMgr.current_bg_object.transform;
+		for (int i = 0; i < transform.childCount; i++)
+		{
+			if (!transform.GetChild(i).gameObject.activeSelf)
+			{
+				list.Add(transform.GetChild(i).gameObject);
+			}
+		}
+		foreach (GameObject obj in list)
+		{
+			UnityEngine.Object.DestroyImmediate(obj);
+		}
+		objectManagerWindow.AddTransTargetObject(GameMain.Instance.BgMgr.current_bg_object, bg_data.name, PhotoTransTargetObject.Type.BG);
+	}
+
+	public override void OnReset()
+	{
+	}
+
+	public void OnClickCheckSolidColorCheckBox(WFCheckBox check_box)
+	{
+		this.Apply();
+	}
+
+	public void Apply()
+	{
+		Dictionary<string, Dictionary<string, string>> woldStoreData = base.GetWoldStoreData();
+		Dictionary<string, string> dictionary = woldStoreData["ベース背景"];
+		Transform transform = GameMain.Instance.BgMgr.current_bg_object.transform;
+		transform.gameObject.SetActive(!this.CheckSolidColor.check);
+		if (!transform.gameObject.activeSelf)
+		{
+			this.ColorInput.visible = true;
+			this.PopupAndTabList.gameObject.SetActive(false);
+		}
+		else
+		{
+			this.ColorInput.visible = false;
+			this.PopupAndTabList.gameObject.SetActive(true);
+		}
+		GameMain.Instance.MainCamera.camera.backgroundColor = this.ColorInput.value;
+	}
+
+	public override void OnSerializeEvent()
+	{
+		base.OnSerializeEvent();
+		Dictionary<string, Dictionary<string, string>> woldStoreData = base.GetWoldStoreData();
+		Dictionary<string, string> dictionary = woldStoreData["ベース背景"];
+		Transform transform = GameMain.Instance.BgMgr.current_bg_object.transform;
+		dictionary["position"] = transform.position.ToString("G9");
+		dictionary["rotation"] = transform.rotation.ToString("G9");
+		dictionary["scale"] = transform.localScale.ToString("G9");
+		dictionary["visible"] = transform.gameObject.activeSelf.ToString();
+		dictionary["背景色"] = GameMain.Instance.MainCamera.camera.backgroundColor.ToString("G9");
+	}
+
+	public override void OnDeserializeEvent()
+	{
+		this.ColorInput.visible = true;
+		this.PopupAndTabList.gameObject.SetActive(true);
+		Dictionary<string, Dictionary<string, string>> woldStoreData = base.GetWoldStoreData();
+		Dictionary<string, string> dictionary = woldStoreData["ベース背景"];
+		PhotoBGData photoBGData = PhotoBGData.Get(dictionary["id"]);
+		if (photoBGData == null)
+		{
+			photoBGData = PhotoBGData.init_data;
+		}
+		string categoryNameFromSelectButton = this.PopupAndTabList.GetCategoryNameFromSelectButton(photoBGData);
+		if (!string.IsNullOrEmpty(categoryNameFromSelectButton))
+		{
+			this.PopupAndTabList.SetPopupValue(categoryNameFromSelectButton);
+			this.PopupAndTabList.SetSelectButton(photoBGData, true);
+		}
+		Transform transform = GameMain.Instance.BgMgr.current_bg_object.transform;
+		transform.position = Parse.Vector3(dictionary["position"]);
+		transform.rotation = Parse.Quaternion(dictionary["rotation"]);
+		transform.localScale = Parse.Vector3(dictionary["scale"]);
+		this.CheckSolidColor.check = !bool.Parse(dictionary["visible"]);
+		if (!dictionary.ContainsKey("背景色"))
+		{
+			dictionary["背景色"] = Color.black.ToString("G9");
+		}
+		this.ColorInput.value = Parse.Color(dictionary["背景色"]);
+	}
+
+	public PopupAndTabList PopupAndTabList;
+
+	public WFCheckBox CheckSolidColor;
+
+	public WindowPartsInputColorrPalette ColorInput;
+}

+ 170 - 0
Assembly-CSharp/BMFont.cs

@@ -0,0 +1,170 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[Serializable]
+public class BMFont
+{
+	public bool isValid
+	{
+		get
+		{
+			return this.mSaved.Count > 0;
+		}
+	}
+
+	public int charSize
+	{
+		get
+		{
+			return this.mSize;
+		}
+		set
+		{
+			this.mSize = value;
+		}
+	}
+
+	public int baseOffset
+	{
+		get
+		{
+			return this.mBase;
+		}
+		set
+		{
+			this.mBase = value;
+		}
+	}
+
+	public int texWidth
+	{
+		get
+		{
+			return this.mWidth;
+		}
+		set
+		{
+			this.mWidth = value;
+		}
+	}
+
+	public int texHeight
+	{
+		get
+		{
+			return this.mHeight;
+		}
+		set
+		{
+			this.mHeight = value;
+		}
+	}
+
+	public int glyphCount
+	{
+		get
+		{
+			return (!this.isValid) ? 0 : this.mSaved.Count;
+		}
+	}
+
+	public string spriteName
+	{
+		get
+		{
+			return this.mSpriteName;
+		}
+		set
+		{
+			this.mSpriteName = value;
+		}
+	}
+
+	public List<BMGlyph> glyphs
+	{
+		get
+		{
+			return this.mSaved;
+		}
+	}
+
+	public BMGlyph GetGlyph(int index, bool createIfMissing)
+	{
+		BMGlyph bmglyph = null;
+		if (this.mDict.Count == 0)
+		{
+			int i = 0;
+			int count = this.mSaved.Count;
+			while (i < count)
+			{
+				BMGlyph bmglyph2 = this.mSaved[i];
+				this.mDict.Add(bmglyph2.index, bmglyph2);
+				i++;
+			}
+		}
+		if (!this.mDict.TryGetValue(index, out bmglyph) && createIfMissing)
+		{
+			bmglyph = new BMGlyph();
+			bmglyph.index = index;
+			this.mSaved.Add(bmglyph);
+			this.mDict.Add(index, bmglyph);
+		}
+		return bmglyph;
+	}
+
+	public BMGlyph GetGlyph(int index)
+	{
+		return this.GetGlyph(index, false);
+	}
+
+	public void Clear()
+	{
+		this.mDict.Clear();
+		this.mSaved.Clear();
+	}
+
+	public void Trim(int xMin, int yMin, int xMax, int yMax)
+	{
+		if (this.isValid)
+		{
+			int i = 0;
+			int count = this.mSaved.Count;
+			while (i < count)
+			{
+				BMGlyph bmglyph = this.mSaved[i];
+				if (bmglyph != null)
+				{
+					bmglyph.Trim(xMin, yMin, xMax, yMax);
+				}
+				i++;
+			}
+		}
+	}
+
+	[HideInInspector]
+	[SerializeField]
+	private int mSize = 16;
+
+	[HideInInspector]
+	[SerializeField]
+	private int mBase;
+
+	[HideInInspector]
+	[SerializeField]
+	private int mWidth;
+
+	[HideInInspector]
+	[SerializeField]
+	private int mHeight;
+
+	[HideInInspector]
+	[SerializeField]
+	private string mSpriteName;
+
+	[HideInInspector]
+	[SerializeField]
+	private List<BMGlyph> mSaved = new List<BMGlyph>();
+
+	private Dictionary<int, BMGlyph> mDict = new Dictionary<int, BMGlyph>();
+}

+ 90 - 0
Assembly-CSharp/BMGlyph.cs

@@ -0,0 +1,90 @@
+using System;
+using System.Collections.Generic;
+
+[Serializable]
+public class BMGlyph
+{
+	public int GetKerning(int previousChar)
+	{
+		if (this.kerning != null && previousChar != 0)
+		{
+			int i = 0;
+			int count = this.kerning.Count;
+			while (i < count)
+			{
+				if (this.kerning[i] == previousChar)
+				{
+					return this.kerning[i + 1];
+				}
+				i += 2;
+			}
+		}
+		return 0;
+	}
+
+	public void SetKerning(int previousChar, int amount)
+	{
+		if (this.kerning == null)
+		{
+			this.kerning = new List<int>();
+		}
+		for (int i = 0; i < this.kerning.Count; i += 2)
+		{
+			if (this.kerning[i] == previousChar)
+			{
+				this.kerning[i + 1] = amount;
+				return;
+			}
+		}
+		this.kerning.Add(previousChar);
+		this.kerning.Add(amount);
+	}
+
+	public void Trim(int xMin, int yMin, int xMax, int yMax)
+	{
+		int num = this.x + this.width;
+		int num2 = this.y + this.height;
+		if (this.x < xMin)
+		{
+			int num3 = xMin - this.x;
+			this.x += num3;
+			this.width -= num3;
+			this.offsetX += num3;
+		}
+		if (this.y < yMin)
+		{
+			int num4 = yMin - this.y;
+			this.y += num4;
+			this.height -= num4;
+			this.offsetY += num4;
+		}
+		if (num > xMax)
+		{
+			this.width -= num - xMax;
+		}
+		if (num2 > yMax)
+		{
+			this.height -= num2 - yMax;
+		}
+	}
+
+	public int index;
+
+	public int x;
+
+	public int y;
+
+	public int width;
+
+	public int height;
+
+	public int offsetX;
+
+	public int offsetY;
+
+	public int advance;
+
+	public int channel;
+
+	public List<int> kerning;
+}

+ 129 - 0
Assembly-CSharp/BMSymbol.cs

@@ -0,0 +1,129 @@
+using System;
+using UnityEngine;
+
+[Serializable]
+public class BMSymbol
+{
+	public int length
+	{
+		get
+		{
+			if (this.mLength == 0)
+			{
+				this.mLength = this.sequence.Length;
+			}
+			return this.mLength;
+		}
+	}
+
+	public int offsetX
+	{
+		get
+		{
+			return this.mOffsetX;
+		}
+	}
+
+	public int offsetY
+	{
+		get
+		{
+			return this.mOffsetY;
+		}
+	}
+
+	public int width
+	{
+		get
+		{
+			return this.mWidth;
+		}
+	}
+
+	public int height
+	{
+		get
+		{
+			return this.mHeight;
+		}
+	}
+
+	public int advance
+	{
+		get
+		{
+			return this.mAdvance;
+		}
+	}
+
+	public Rect uvRect
+	{
+		get
+		{
+			return this.mUV;
+		}
+	}
+
+	public void MarkAsChanged()
+	{
+		this.mIsValid = false;
+	}
+
+	public bool Validate(UIAtlas atlas)
+	{
+		if (atlas == null)
+		{
+			return false;
+		}
+		if (!this.mIsValid)
+		{
+			if (string.IsNullOrEmpty(this.spriteName))
+			{
+				return false;
+			}
+			this.mSprite = ((!(atlas != null)) ? null : atlas.GetSprite(this.spriteName));
+			if (this.mSprite != null)
+			{
+				Texture texture = atlas.texture;
+				if (texture == null)
+				{
+					this.mSprite = null;
+				}
+				else
+				{
+					this.mUV = new Rect((float)this.mSprite.x, (float)this.mSprite.y, (float)this.mSprite.width, (float)this.mSprite.height);
+					this.mUV = NGUIMath.ConvertToTexCoords(this.mUV, texture.width, texture.height);
+					this.mOffsetX = this.mSprite.paddingLeft;
+					this.mOffsetY = this.mSprite.paddingTop;
+					this.mWidth = this.mSprite.width;
+					this.mHeight = this.mSprite.height;
+					this.mAdvance = this.mSprite.width + (this.mSprite.paddingLeft + this.mSprite.paddingRight);
+					this.mIsValid = true;
+				}
+			}
+		}
+		return this.mSprite != null;
+	}
+
+	public string sequence;
+
+	public string spriteName;
+
+	private UISpriteData mSprite;
+
+	private bool mIsValid;
+
+	private int mLength;
+
+	private int mOffsetX;
+
+	private int mOffsetY;
+
+	private int mWidth;
+
+	private int mHeight;
+
+	private int mAdvance;
+
+	private Rect mUV;
+}

+ 98 - 0
Assembly-CSharp/BacklogCtrl.cs

@@ -0,0 +1,98 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class BacklogCtrl : MonoBehaviour
+{
+	public void CreateBacklog(List<BacklogCtrl.BacklogUnit> dicBacklog, UnityEngine.Object backlogPrefab)
+	{
+		this.ClearExistBacklog();
+		if (dicBacklog != null)
+		{
+			foreach (BacklogCtrl.BacklogUnit backlogUnit in dicBacklog)
+			{
+				GameObject gameObject = UnityEngine.Object.Instantiate(backlogPrefab) as GameObject;
+				GameObject childObject = UTY.GetChildObject(gameObject, "Voice", false);
+				UIButton component = childObject.GetComponent<UIButton>();
+				if (backlogUnit.m_voiceId != string.Empty)
+				{
+					childObject.SetActive(true);
+					EventDelegate.Add(component.onClick, new EventDelegate.Callback(this.ClickVoiceButton));
+					component.name = backlogUnit.m_voiceId;
+					if (!string.IsNullOrEmpty(component.name))
+					{
+						UIButton uibutton = component;
+						uibutton.name = uibutton.name + "|" + backlogUnit.m_voicePitch;
+					}
+				}
+				else
+				{
+					childObject.SetActive(false);
+				}
+				gameObject.transform.parent = base.transform;
+				gameObject.transform.localScale = Vector3.one;
+				gameObject.transform.localPosition = Vector3.zero;
+				gameObject.transform.rotation = Quaternion.identity;
+				UILabel component2 = UTY.GetChildObject(gameObject, "SpeakerName", false).GetComponent<UILabel>();
+				component2.text = backlogUnit.m_speakerName;
+				UILabel component3 = UTY.GetChildObject(gameObject, "Message", false).GetComponent<UILabel>();
+				component3.text = backlogUnit.m_msg;
+			}
+		}
+		base.GetComponent<UIGrid>().Reposition();
+	}
+
+	private void ClearExistBacklog()
+	{
+		IEnumerator enumerator = base.transform.GetEnumerator();
+		try
+		{
+			while (enumerator.MoveNext())
+			{
+				object obj = enumerator.Current;
+				Transform transform = (Transform)obj;
+				UnityEngine.Object.Destroy(transform.gameObject);
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+	}
+
+	private void ClickVoiceButton()
+	{
+		string name = UIButton.current.name;
+		if (!string.IsNullOrEmpty(name))
+		{
+			string[] array = name.Split(new char[]
+			{
+				'|'
+			});
+			GameMain.Instance.SoundMgr.VoiceStopAll();
+			GameMain.Instance.SoundMgr.PlayDummyVoice(array[0], 0f, false, false, int.Parse(array[1]));
+		}
+		Debug.Log(string.Format("ボイスボタン ボイスID={0}がクリックされました。", name));
+	}
+
+	public class BacklogUnit
+	{
+		public string m_speakerName { get; set; }
+
+		public string m_msg { get; set; }
+
+		public string m_voiceId { get; set; }
+
+		public int m_voicePitch { get; set; }
+
+		public override string ToString()
+		{
+			return string.Format("BacklogUnit=[m_speakerName={1}, m_msg={2}, m_voiceId={3}]", this.m_speakerName, this.m_msg, this.m_voiceId);
+		}
+	}
+}

+ 165 - 0
Assembly-CSharp/BackupParamAccessor/BackupParamAccessor.cs

@@ -0,0 +1,165 @@
+using System;
+using PlayerStatus;
+
+namespace BackupParamAccessor
+{
+	public static class BackupParamAccessor
+	{
+		public static void BackupParam(int? slotId, SCENE_ID sceneId_f)
+		{
+			if (slotId == null)
+			{
+				for (int i = 0; i < 40; i++)
+				{
+					BackupParamAccessor.BackupParam(new int?(i), sceneId_f);
+				}
+			}
+			int num = (slotId == null) ? 0 : slotId.Value;
+			string str = sceneId_f.ToString();
+			Params @params = new Params();
+			Maid scheduleSlot = GameMain.Instance.CharacterMgr.status.GetScheduleSlot(num);
+			if (scheduleSlot != null)
+			{
+				@params.salon_cleanliness = 0;
+				@params.salon_gorgeous = 0;
+				@params.salon_evaluation = GameMain.Instance.CharacterMgr.status.clubEvaluation;
+				@params.money = GameMain.Instance.CharacterMgr.status.money;
+				@params.clubEvaluation = GameMain.Instance.CharacterMgr.status.clubEvaluation;
+				@params.clubMoney = (int)GameMain.Instance.CharacterMgr.status.money;
+				@params.evaluation = scheduleSlot.status.evaluation;
+				@params.sales = scheduleSlot.status.sales;
+				@params.study_rate = scheduleSlot.status.studyRate;
+				@params.reception = scheduleSlot.status.reception;
+				@params.care = scheduleSlot.status.care;
+				@params.lovely = scheduleSlot.status.lovely;
+				@params.elegance = scheduleSlot.status.elegance;
+				@params.charm = scheduleSlot.status.charm;
+				@params.teach_rate = scheduleSlot.status.teachRate;
+				@params.cooking = scheduleSlot.status.cooking;
+				@params.vocal = scheduleSlot.status.vocal;
+				@params.dance = scheduleSlot.status.dance;
+				@params.appealPoint = scheduleSlot.status.appealPoint;
+				@params.inyoku = scheduleSlot.status.inyoku;
+				@params.m_value = scheduleSlot.status.mvalue;
+				@params.hentai = scheduleSlot.status.hentai;
+				@params.housi = scheduleSlot.status.housi;
+				if (scheduleSlot.status.selectedJobClass != null)
+				{
+					@params.maidClassLv = scheduleSlot.status.selectedJobClass.level;
+					@params.maidClassExp = scheduleSlot.status.selectedJobClass.expSystem.GetTotalExp();
+				}
+				if (scheduleSlot.status.selectedYotogiClass != null)
+				{
+					@params.yotogiClassLv = scheduleSlot.status.selectedYotogiClass.level;
+					@params.yotogiClassExp = scheduleSlot.status.selectedYotogiClass.expSystem.GetTotalExp();
+				}
+				@params.yotogi_play_count = scheduleSlot.status.playCountYotogi;
+				@params.others_play_count = scheduleSlot.status.playCountNightWork;
+				@params.likability = scheduleSlot.status.likability;
+			}
+			BackupParamAccessor.slots = GameMain.Instance.CharacterMgr.status.scheduleSlot;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_clubMoney"] = @params.clubMoney;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_clubEvaluation"] = @params.clubEvaluation;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_salon_cleanliness"] = @params.salon_cleanliness;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_salon_gorgeous"] = @params.salon_gorgeous;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_salon_evaluation"] = @params.salon_evaluation;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_money_top0"] = @params.money_top0;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_money_top10"] = @params.money_top10;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_evaluation"] = @params.evaluation;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_sales_top0"] = @params.sales_top0;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_sales_top10"] = @params.sales_top10;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_study_rate"] = @params.study_rate;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_reception"] = @params.reception;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_care"] = @params.care;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_lovely"] = @params.lovely;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_elegance"] = @params.elegance;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_charm"] = @params.charm;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_teach_rate"] = @params.teach_rate;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_cooking"] = @params.cooking;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_vocal"] = @params.vocal;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_dance"] = @params.dance;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_appealPoint"] = @params.appealPoint;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_inyoku"] = @params.inyoku;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_m_value"] = @params.m_value;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_hentai"] = @params.hentai;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_housi"] = @params.housi;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_maidClassLv"] = @params.maidClassLv;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_maidClassExp"] = @params.maidClassExp;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_yotogiClassLv"] = @params.yotogiClassLv;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_yotogiClassExp"] = @params.yotogiClassExp;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_yotogi_play_count"] = @params.yotogi_play_count;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_others_play_count"] = @params.others_play_count;
+			BackupParamAccessor.slots[num].backup_status_dic[str + "_likability"] = @params.likability;
+		}
+
+		public static void Clear(int? slotId = null)
+		{
+			if (slotId == null)
+			{
+				for (int i = 0; i < 40; i++)
+				{
+					BackupParamAccessor.Clear(new int?(i));
+				}
+			}
+			int num = (slotId == null) ? 0 : slotId.Value;
+			BackupParamAccessor.slots[num].backup_status_dic.Clear();
+		}
+
+		public static Params GetBackupParams(int slotId, SCENE_ID sceneId)
+		{
+			return new Params
+			{
+				clubMoney = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "clubMoney"),
+				clubEvaluation = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "clubEvaluation"),
+				salon_cleanliness = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "salon_cleanliness"),
+				salon_gorgeous = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "salon_gorgeous"),
+				salon_evaluation = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "salon_evaluation"),
+				money_top0 = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "money_top0"),
+				money_top10 = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "money_top10"),
+				evaluation = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "evaluation"),
+				sales_top0 = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "sales_top0"),
+				sales_top10 = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "sales_top10"),
+				study_rate = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "study_rate"),
+				teach_rate = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "teach_rate"),
+				reception = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "reception"),
+				care = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "care"),
+				lovely = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "lovely"),
+				elegance = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "elegance"),
+				charm = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "charm"),
+				cooking = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "cooking"),
+				vocal = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "vocal"),
+				dance = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "dance"),
+				appealPoint = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "appealPoint"),
+				inyoku = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "inyoku"),
+				m_value = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "m_value"),
+				hentai = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "hentai"),
+				housi = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "housi"),
+				maidClassLv = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "maidClassLv"),
+				maidClassExp = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "maidClassExp"),
+				yotogiClassLv = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "yotogiClassLv"),
+				yotogiClassExp = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "yotogiClassExp"),
+				yotogi_play_count = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "yotogi_play_count"),
+				others_play_count = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "others_play_count"),
+				likability = BackupParamAccessor.GetBackupParamsParts(slotId, sceneId, "likability")
+			};
+		}
+
+		public static int GetBackupParamsParts(int slotId, SCENE_ID sceneId_f, string name)
+		{
+			BackupParamAccessor.slots = GameMain.Instance.CharacterMgr.status.scheduleSlot;
+			string str = sceneId_f.ToString();
+			if (BackupParamAccessor.slots[slotId].backup_status_dic.ContainsKey(str + "_" + name))
+			{
+				return BackupParamAccessor.slots[slotId].backup_status_dic[str + "_" + name];
+			}
+			return 0;
+		}
+
+		public static bool YotogiPlayed(int slotId, SCENE_ID baseId)
+		{
+			return (BackupParamAccessor.GetBackupParams(slotId, baseId + 1) - BackupParamAccessor.GetBackupParams(slotId, baseId - 1)).yotogi_play_count > 0;
+		}
+
+		public static ScheduleData[] slots = GameMain.Instance.CharacterMgr.status.scheduleSlot;
+	}
+}

+ 140 - 0
Assembly-CSharp/BackupParamAccessor/Params.cs

@@ -0,0 +1,140 @@
+using System;
+
+namespace BackupParamAccessor
+{
+	public class Params
+	{
+		public long money
+		{
+			get
+			{
+				return (long)(this.money_top10 * 1000000000 + this.money_top0);
+			}
+			set
+			{
+				this.money_top0 = (int)(value % 1000000000L);
+				this.money_top10 = (int)(value / 1000000000L);
+			}
+		}
+
+		public long sales
+		{
+			get
+			{
+				return (long)(this.sales_top10 * 1000000000 + this.sales_top0);
+			}
+			set
+			{
+				this.sales_top0 = (int)(value % 1000000000L);
+				this.sales_top10 = (int)(value / 1000000000L);
+			}
+		}
+
+		public static Params operator -(Params a, Params b)
+		{
+			return new Params
+			{
+				clubEvaluation = a.clubEvaluation - b.clubEvaluation,
+				clubMoney = a.clubMoney - b.clubMoney,
+				salon_cleanliness = a.salon_cleanliness - b.salon_cleanliness,
+				salon_gorgeous = a.salon_gorgeous - b.salon_gorgeous,
+				salon_evaluation = a.salon_evaluation - b.salon_evaluation,
+				money_top0 = a.money_top0 - b.money_top0,
+				money_top10 = a.money_top10 - b.money_top10,
+				evaluation = a.evaluation - b.evaluation,
+				sales_top0 = a.sales_top0 - b.sales_top0,
+				sales_top10 = a.sales_top10 - b.sales_top10,
+				study_rate = a.study_rate - b.study_rate,
+				likability = a.likability - b.likability,
+				maidClassLv = a.maidClassLv - b.maidClassLv,
+				maidClassExp = a.maidClassExp - b.maidClassExp,
+				reception = a.reception - b.reception,
+				care = a.care - b.care,
+				lovely = a.lovely - b.lovely,
+				elegance = a.elegance - b.elegance,
+				charm = a.charm - b.charm,
+				cooking = a.cooking - b.cooking,
+				vocal = a.vocal - b.vocal,
+				dance = a.dance - b.dance,
+				appealPoint = a.appealPoint - b.appealPoint,
+				inyoku = a.inyoku - b.inyoku,
+				m_value = a.m_value - b.m_value,
+				hentai = a.hentai - b.hentai,
+				housi = a.housi - b.housi,
+				teach_rate = a.teach_rate - b.teach_rate,
+				yotogiClassLv = a.yotogiClassLv - b.yotogiClassLv,
+				yotogiClassExp = a.yotogiClassExp - b.yotogiClassExp,
+				yotogi_play_count = a.yotogi_play_count - b.yotogi_play_count,
+				others_play_count = a.others_play_count - b.others_play_count
+			};
+		}
+
+		public int salon_cleanliness;
+
+		public int salon_gorgeous;
+
+		public int clubEvaluation;
+
+		public int clubMoney;
+
+		public int salon_evaluation;
+
+		public int money_top0;
+
+		public int money_top10;
+
+		public int cleanliness;
+
+		public int gorgeous;
+
+		public int evaluation;
+
+		public int sales_top0;
+
+		public int sales_top10;
+
+		public int study_rate;
+
+		public int likability;
+
+		public int maidClassLv;
+
+		public int maidClassExp;
+
+		public int teach_rate;
+
+		public int reception;
+
+		public int care;
+
+		public int lovely;
+
+		public int elegance;
+
+		public int charm;
+
+		public int cooking;
+
+		public int vocal;
+
+		public int dance;
+
+		public int appealPoint;
+
+		public int inyoku;
+
+		public int m_value;
+
+		public int hentai;
+
+		public int housi;
+
+		public int yotogiClassLv;
+
+		public int yotogiClassExp;
+
+		public int yotogi_play_count;
+
+		public int others_play_count;
+	}
+}

+ 14 - 0
Assembly-CSharp/BackupParamAccessor/SCENE_ID.cs

@@ -0,0 +1,14 @@
+using System;
+
+namespace BackupParamAccessor
+{
+	public enum SCENE_ID
+	{
+		Start,
+		Morning,
+		Noon,
+		NoonBonus,
+		Night,
+		NightBonus
+	}
+}

+ 57 - 0
Assembly-CSharp/BaseCreatePanel.cs

@@ -0,0 +1,57 @@
+using System;
+using UnityEngine;
+
+public abstract class BaseCreatePanel : BasePanelMgr
+{
+	protected GameObject GetPanel(string panelName)
+	{
+		return this.GetPanel(panelName, this.m_uiRootPath);
+	}
+
+	protected GameObject GetPanel(string panelName, string rootPath)
+	{
+		this.m_goUIRoot = this.GetUIRoot(rootPath);
+		NDebug.Assert(this.m_goUIRoot != null, string.Format("{0}が見つかりませんでした。", "UI Root"));
+		this.m_goPanel = this.m_goUIRoot.transform.Find(panelName).gameObject;
+		NDebug.Assert(this.m_goPanel != null, string.Format("{0}が見つかりませんでした。", panelName));
+		return this.m_goPanel;
+	}
+
+	private GameObject GetUIRoot(string uiRootPath)
+	{
+		return (!(this.m_goUIRoot == null)) ? this.m_goUIRoot : GameObject.Find(uiRootPath);
+	}
+
+	protected Type GetCtrl<Type>() where Type : Component
+	{
+		Type component = this.m_goPanel.GetComponent<Type>();
+		NDebug.Assert(component != null, string.Format("{0}が見つかりませんでした。", typeof(Type) + "コンポーネント"));
+		return component;
+	}
+
+	public bool IsValidateButton<T>(string clickButtonName)
+	{
+		if (!Enum.IsDefined(typeof(T), clickButtonName))
+		{
+			Debug.LogError(string.Format("不適切なボタンがクリックされました。クリックされたボタン名={0}", clickButtonName));
+			return false;
+		}
+		return true;
+	}
+
+	public bool IsValidatePopupValue<T>(string value)
+	{
+		if (!Enum.IsDefined(typeof(T), value))
+		{
+			Debug.LogError(string.Format("ポップアップリストから不適切な値が選択されました。選択されたボタン名={0}", value));
+			return false;
+		}
+		return true;
+	}
+
+	protected GameObject m_goPanel;
+
+	protected string m_uiRootPath = "/UI Root";
+
+	private GameObject m_goUIRoot;
+}

+ 174 - 0
Assembly-CSharp/BaseCreateViewerCtrl.cs

@@ -0,0 +1,174 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public abstract class BaseCreateViewerCtrl : MonoBehaviour
+{
+	protected void CreateViewer<K, V>(Dictionary<K, V> dicData)
+	{
+		this.CreateViewer<K, V>(dicData, false);
+	}
+
+	public void CreateViewerWhenDataNotExist<K, V>(Dictionary<K, V> dicData)
+	{
+		this.CreateViewer<K, V>(dicData, true);
+	}
+
+	private void CreateViewer<K, V>(Dictionary<K, V> dicData, bool CanCreateWhenDataNotExist)
+	{
+		if (!CanCreateWhenDataNotExist && !this.HasDicData<K, V>(dicData))
+		{
+			return;
+		}
+		this.ExecuteTemplateOperation();
+	}
+
+	public void CreateViewer<T>(List<T> listData)
+	{
+		if (listData == null || listData.Count == 0)
+		{
+			return;
+		}
+		this.ExecuteTemplateOperation();
+	}
+
+	public void CreateViewer<T>(T data)
+	{
+		if (data == null)
+		{
+			return;
+		}
+		this.ExecuteTemplateOperation();
+	}
+
+	private void ExecuteTemplateOperation()
+	{
+		this.DelChildGameObject(this.m_goUnitParent);
+		this.ValidateData();
+		this.m_goUnitPrefab = this.GetUnitPrefab(this.m_unitPrefabPath);
+		this.SetDataForViewer();
+		this.Reposition();
+	}
+
+	private GameObject GetUnitPrefab(string unitPrefabPath)
+	{
+		this.m_goUnitPrefab = (this.m_goUnitPrefab ?? (Resources.Load(unitPrefabPath) as GameObject));
+		return this.m_goUnitPrefab;
+	}
+
+	protected void DelChildGameObject(GameObject goParent)
+	{
+		IEnumerator enumerator = goParent.transform.GetEnumerator();
+		try
+		{
+			while (enumerator.MoveNext())
+			{
+				object obj = enumerator.Current;
+				Transform transform = (Transform)obj;
+				UnityEngine.Object.Destroy(transform.gameObject);
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+		goParent.transform.DetachChildren();
+	}
+
+	protected void DelChildGameObject()
+	{
+		IEnumerator enumerator = this.m_goUnitParent.transform.GetEnumerator();
+		try
+		{
+			while (enumerator.MoveNext())
+			{
+				object obj = enumerator.Current;
+				Transform transform = (Transform)obj;
+				UnityEngine.Object.Destroy(transform.gameObject);
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+		this.m_goUnitParent.transform.DetachChildren();
+	}
+
+	protected void Reposition()
+	{
+		UITable component = this.m_goUnitParent.GetComponent<UITable>();
+		if (component)
+		{
+			component.Reposition();
+			return;
+		}
+		UIGrid component2 = this.m_goUnitParent.GetComponent<UIGrid>();
+		if (component2)
+		{
+			component2.Reposition();
+			return;
+		}
+	}
+
+	public static void Reposition(GameObject parent)
+	{
+		UITable component = parent.GetComponent<UITable>();
+		if (component)
+		{
+			component.Reposition();
+			return;
+		}
+		UIGrid component2 = parent.GetComponent<UIGrid>();
+		if (component2)
+		{
+			component2.Reposition();
+			return;
+		}
+	}
+
+	protected virtual void ValidateData()
+	{
+	}
+
+	protected void SetTransformInfo(GameObject copyPrefab)
+	{
+		this.SetTransformInfo(this.m_goUnitParent, copyPrefab);
+	}
+
+	protected void SetTransformInfo(GameObject parent, GameObject copyPrefabs)
+	{
+		copyPrefabs.transform.parent = parent.transform;
+		copyPrefabs.transform.localScale = Vector3.one;
+		copyPrefabs.transform.localPosition = Vector3.zero;
+		copyPrefabs.transform.rotation = Quaternion.identity;
+	}
+
+	public bool HasDicData<K, V>(Dictionary<K, V> dicData)
+	{
+		return dicData != null && dicData.Count != 0;
+	}
+
+	public bool HasListData<T>(List<T> listData)
+	{
+		return listData != null && listData.Count > 0;
+	}
+
+	protected abstract void SetDataForViewer();
+
+	protected GameObject m_goUnitParent;
+
+	protected GameObject m_goUnitPrefab;
+
+	protected string m_unitPrefabPath;
+
+	private const float DURATION_TO_FADE = 0.5f;
+}

+ 58 - 0
Assembly-CSharp/BaseInput2.cs

@@ -0,0 +1,58 @@
+using System;
+using UnityEngine;
+using UnityEngine.EventSystems;
+
+public class BaseInput2 : BaseInput
+{
+	public override bool GetMouseButtonDown(int button)
+	{
+		return NInput.GetMouseButtonDown(button);
+	}
+
+	public override bool GetMouseButtonUp(int button)
+	{
+		return NInput.GetMouseButtonUp(button);
+	}
+
+	public override bool GetMouseButton(int button)
+	{
+		return NInput.GetMouseButton(button);
+	}
+
+	public override Vector2 mousePosition
+	{
+		get
+		{
+			return GameMain.Instance.OvrMgr.SystemUICamera.GetOvrVirtualMouseCurrentSidePos();
+		}
+	}
+
+	public override Vector2 mouseScrollDelta
+	{
+		get
+		{
+			return new Vector2(0f, NInput.GetAxis("Mouse ScrollWheel") * 10f);
+		}
+	}
+
+	public override bool touchSupported
+	{
+		get
+		{
+			return false;
+		}
+	}
+
+	public override int touchCount
+	{
+		get
+		{
+			return 0;
+		}
+	}
+
+	public override float GetAxisRaw(string axisName)
+	{
+		return NInput.GetAxis(axisName);
+	}
+}

File diff suppressed because it is too large
+ 4480 - 0
Assembly-CSharp/BaseKagManager.cs


+ 67 - 0
Assembly-CSharp/BaseMaidPhotoWindow.cs

@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+
+public abstract class BaseMaidPhotoWindow : PhotoWindow, InterfaceMaidPhotoWindow
+{
+	public override void SetWindowManager(BasePhotoWindowManager mgr)
+	{
+		NDebug.Assert(mgr as PhotoWindowManager != null, "windowマネージャーはPhotoWindowManager限定です");
+		base.SetWindowManager(mgr);
+	}
+
+	public virtual void OnMaidChangeEvent(Maid maid)
+	{
+	}
+
+	public virtual void OnMaidAddEvent(Maid maid, bool is_deserialize_load)
+	{
+	}
+
+	public virtual void OnFinishMaidDeserializeLoad()
+	{
+	}
+
+	public virtual void OnMaidRemoveEvent(Maid maid)
+	{
+	}
+
+	public virtual void OnMaidRemoveEventPrev(Maid maid)
+	{
+	}
+
+	public virtual void OnReset()
+	{
+	}
+
+	public virtual void OnSerializeEvent()
+	{
+	}
+
+	public abstract void OnDeserializeEvent();
+
+	public Dictionary<string, string> GetMaidStoreData(Maid maid)
+	{
+		return this.mgr.GetMaidStoreData(maid, this);
+	}
+
+	public Dictionary<string, string> GetMaidStoreData(string maid_guid)
+	{
+		return this.mgr.GetMaidStoreData(maid_guid, this);
+	}
+
+	public PhotoWindowManager.WindowType window_type
+	{
+		get
+		{
+			return this.Type;
+		}
+	}
+
+	public new PhotoWindowManager mgr
+	{
+		get
+		{
+			return base.mgr as PhotoWindowManager;
+		}
+	}
+}

+ 68 - 0
Assembly-CSharp/BaseMgr.cs

@@ -0,0 +1,68 @@
+using System;
+using UnityEngine;
+
+public class BaseMgr<T> : MonoBehaviour where T : MonoBehaviour
+{
+	public static T Instance
+	{
+		get
+		{
+			if (BaseMgr<T>.instance == null)
+			{
+				BaseMgr<T>.instance = (T)((object)UnityEngine.Object.FindObjectOfType(typeof(T)));
+				if (BaseMgr<T>.instance == null)
+				{
+					Debug.LogWarning("An instance of " + typeof(T) + " is needed in the scene, but there is none.");
+				}
+			}
+			return BaseMgr<T>.instance;
+		}
+	}
+
+	protected GameObject GetPanel(string panelName, string rootPath)
+	{
+		GameObject gameObject = GameObject.Find(rootPath);
+		NDebug.Assert(gameObject != null, string.Format("{0}が見つかりませんでした。", "UI Root"));
+		this.m_goPanel = gameObject.transform.Find(panelName).gameObject;
+		NDebug.Assert(this.m_goPanel != null, string.Format("{0}が見つかりませんでした。", panelName));
+		return this.m_goPanel;
+	}
+
+	protected GameObject GetPanel(string panelName)
+	{
+		return this.GetPanel(panelName, this.m_uiRootPath);
+	}
+
+	protected Type GetCtrl<Type>() where Type : Component
+	{
+		Type component = this.m_goPanel.GetComponent<Type>();
+		NDebug.Assert(component != null, string.Format("{0}が見つかりませんでした。", typeof(Type) + "コンポーネント"));
+		return component;
+	}
+
+	public bool IsValidateButton<T>(string clickButtonName)
+	{
+		if (!Enum.IsDefined(typeof(T), clickButtonName))
+		{
+			Debug.LogError(string.Format("不適切なボタンがクリックされました。クリックされたボタン名={0}", clickButtonName));
+			return false;
+		}
+		return true;
+	}
+
+	public bool IsValidatePopupValue<T>(string value)
+	{
+		if (!Enum.IsDefined(typeof(T), value))
+		{
+			Debug.LogError(string.Format("ポップアップリストから不適切な値が選択されました。選択されたボタン名={0}", value));
+			return false;
+		}
+		return true;
+	}
+
+	protected GameObject m_goPanel;
+
+	private string m_uiRootPath = "/UI Root";
+
+	protected static T instance;
+}

+ 311 - 0
Assembly-CSharp/BasePanelMgr.cs

@@ -0,0 +1,311 @@
+using System;
+using com.workman.cm3d2.scene.dailyEtc;
+using UnityEngine;
+
+public abstract class BasePanelMgr : MonoBehaviour
+{
+	public abstract void Init();
+
+	public void SetDurationToFadeIn(float duration)
+	{
+		this.durationToFadeIn_ = duration;
+	}
+
+	public void SetDurationToFadeOut(float duration)
+	{
+		this.durationToFadeOut_ = duration;
+	}
+
+	protected virtual void SetFadeTargetPanel()
+	{
+	}
+
+	protected virtual void OpenPanel()
+	{
+	}
+
+	protected virtual void OpenPanel(string openType)
+	{
+	}
+
+	protected virtual void ClosePanel()
+	{
+	}
+
+	protected virtual void BeforeFadeOut()
+	{
+	}
+
+	protected virtual void BeforeFadeIn()
+	{
+	}
+
+	private float durationToFadeIn
+	{
+		get
+		{
+			return this.durationToFadeIn_;
+		}
+	}
+
+	private float durationToFadeOut
+	{
+		get
+		{
+			return this.durationToFadeOut_;
+		}
+	}
+
+	protected virtual void Start()
+	{
+		GameObject f_goParent = GameObject.Find("/UI Root");
+		GameObject childObject = UTY.GetChildObject(f_goParent, "Manager", false);
+		if (childObject != null)
+		{
+			this.sceneMgr = childObject.GetComponent<SceneMgr>();
+		}
+		this.SetDurationToFadeIn(0.25f);
+		this.SetDurationToFadeOut(0.25f);
+		this.ChangeFadeState(BasePanelMgr.FadeState.None);
+	}
+
+	private void ChangeFadeState(BasePanelMgr.FadeState fadeState)
+	{
+		this.currentFadeState = fadeState;
+	}
+
+	protected T GetManager<T>() where T : BasePanelMgr
+	{
+		return this.sceneMgr.GetManager<T>();
+	}
+
+	public void BaseInit()
+	{
+		this.Init();
+		this.SetFadeTargetPanel();
+	}
+
+	public void BaseOpenPanel()
+	{
+		this.BeforeOpen();
+		this.OpenPanel();
+		this.FadeInPanel();
+	}
+
+	public void BaseOpenPanel(string openType)
+	{
+		this.BeforeOpen();
+		this.OpenPanel(openType);
+		this.FadeInPanel();
+	}
+
+	public void BaseClosePanel()
+	{
+		this.BeforeClose();
+		this.ClosePanel();
+		this.FadeOutPanel();
+	}
+
+	public void BaseClosePanel(Action OnFinished)
+	{
+		this.BeforeClose();
+		this.ClosePanel();
+		this.FadeOutPanel(OnFinished);
+	}
+
+	public void BaseClosePanel<T>(Action<T> OnFinished, T param)
+	{
+		this.BeforeClose();
+		this.ClosePanel();
+		this.FadeOutPanel<T>(OnFinished, param);
+	}
+
+	protected void FadeInPanel()
+	{
+		this.fadeTargetPanel.SetActive(true);
+		this.BeforeFadeIn();
+		this.ChangeFadeState(BasePanelMgr.FadeState.StartFadeIn);
+		TweenAlpha tweenAlpha = this.fadeTargetPanel.GetComponent<TweenAlpha>();
+		if (tweenAlpha)
+		{
+			UnityEngine.Object.Destroy(tweenAlpha);
+		}
+		if (this.durationToFadeIn <= 0f)
+		{
+			UIRect uirect = this.fadeTargetPanel.GetComponent<UIRect>();
+			SpriteRenderer component = this.fadeTargetPanel.GetComponent<SpriteRenderer>();
+			Material material = null;
+			if (uirect == null && component == null)
+			{
+				Renderer component2 = this.fadeTargetPanel.GetComponent<Renderer>();
+				if (component2 != null)
+				{
+					material = component2.material;
+				}
+				if (material == null)
+				{
+					uirect = this.fadeTargetPanel.GetComponentInChildren<UIRect>();
+				}
+			}
+			float num = 1f;
+			if (uirect != null)
+			{
+				uirect.alpha = num;
+			}
+			else if (component != null)
+			{
+				Color color = component.color;
+				color.a = num;
+				component.color = color;
+			}
+			else if (material != null)
+			{
+				Color color2 = material.color;
+				color2.a = num;
+				material.color = color2;
+			}
+			this.ChangeFadeState(BasePanelMgr.FadeState.EndFadeIn);
+			this.AfterFadeIn();
+			return;
+		}
+		tweenAlpha = this.fadeTargetPanel.AddComponent<TweenAlpha>();
+		tweenAlpha.from = 0f;
+		tweenAlpha.to = 1f;
+		tweenAlpha.duration = this.durationToFadeIn;
+		EventDelegate.Set(tweenAlpha.onFinished, delegate
+		{
+			this.ChangeFadeState(BasePanelMgr.FadeState.EndFadeIn);
+			this.AfterFadeIn();
+		});
+		tweenAlpha.PlayForward();
+	}
+
+	protected void FadeOutPanel()
+	{
+		this.BeforeFadeOut();
+		this.ChangeFadeState(BasePanelMgr.FadeState.StartFadeOut);
+		if (this.durationToFadeOut <= 0f)
+		{
+			UIRect uirect = this.fadeTargetPanel.GetComponent<UIRect>();
+			SpriteRenderer component = this.fadeTargetPanel.GetComponent<SpriteRenderer>();
+			Material material = null;
+			if (uirect == null && component == null)
+			{
+				Renderer component2 = this.fadeTargetPanel.GetComponent<Renderer>();
+				if (component2 != null)
+				{
+					material = component2.material;
+				}
+				if (material == null)
+				{
+					uirect = this.fadeTargetPanel.GetComponentInChildren<UIRect>();
+				}
+			}
+			float num = 0f;
+			if (uirect != null)
+			{
+				uirect.alpha = num;
+			}
+			else if (component != null)
+			{
+				Color color = component.color;
+				color.a = num;
+				component.color = color;
+			}
+			else if (material != null)
+			{
+				Color color2 = material.color;
+				color2.a = num;
+				material.color = color2;
+			}
+			this.fadeTargetPanel.SetActive(false);
+			this.ChangeFadeState(BasePanelMgr.FadeState.EndFadeOut);
+			this.AfterFadeOut();
+			return;
+		}
+		TweenAlpha tweenAlpha = TweenAlpha.Begin(this.fadeTargetPanel, this.durationToFadeOut, 0f);
+		EventDelegate.Set(tweenAlpha.onFinished, delegate
+		{
+			this.fadeTargetPanel.SetActive(false);
+			this.ChangeFadeState(BasePanelMgr.FadeState.EndFadeOut);
+			this.AfterFadeOut();
+		});
+	}
+
+	protected void FadeOutPanel(Action OnFinished)
+	{
+		this.BeforeFadeOut();
+		this.ChangeFadeState(BasePanelMgr.FadeState.StartFadeOut);
+		TweenAlpha tweenAlpha = TweenAlpha.Begin(this.fadeTargetPanel, this.durationToFadeOut, 0f);
+		EventDelegate.Set(tweenAlpha.onFinished, delegate
+		{
+			this.fadeTargetPanel.SetActive(false);
+			this.ChangeFadeState(BasePanelMgr.FadeState.EndFadeOut);
+			this.AfterFadeOut();
+			OnFinished();
+		});
+	}
+
+	protected void FadeOutPanel<T>(Action<T> OnFinished, T param)
+	{
+		this.BeforeFadeOut();
+		this.ChangeFadeState(BasePanelMgr.FadeState.StartFadeOut);
+		TweenAlpha tweenAlpha = TweenAlpha.Begin(this.fadeTargetPanel, this.durationToFadeOut, 0f);
+		EventDelegate.Set(tweenAlpha.onFinished, delegate
+		{
+			this.fadeTargetPanel.SetActive(false);
+			this.ChangeFadeState(BasePanelMgr.FadeState.EndFadeOut);
+			this.AfterFadeOut();
+			OnFinished(param);
+		});
+	}
+
+	protected virtual void AfterFadeIn()
+	{
+		this.AfterOpen();
+	}
+
+	protected virtual void AfterFadeOut()
+	{
+		this.AfterClose();
+	}
+
+	protected virtual void BeforeOpen()
+	{
+	}
+
+	protected virtual void AfterOpen()
+	{
+	}
+
+	protected virtual void BeforeClose()
+	{
+	}
+
+	protected virtual void AfterClose()
+	{
+	}
+
+	protected GameObject fadeTargetPanel;
+
+	protected SceneMgr sceneMgr;
+
+	protected BasePanelMgr.FadeState currentFadeState;
+
+	private float durationToFadeIn_;
+
+	private float durationToFadeOut_;
+
+	private const string uiRootPath = "/UI Root";
+
+	private const float DURATION_TO_FADE = 0.25f;
+
+	public enum FadeState
+	{
+		None,
+		StartFadeIn,
+		EndFadeIn,
+		StartFadeOut,
+		EndFadeOut
+	}
+}

+ 238 - 0
Assembly-CSharp/BasePhotoCustomObject.cs

@@ -0,0 +1,238 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+using wf;
+
+public abstract class BasePhotoCustomObject : MonoBehaviour, IComparable<BasePhotoCustomObject>
+{
+	public static BasePhotoCustomObject CreatePrefab(GameObject parent, BasePhotoCustomObject.Type createType)
+	{
+		if (createType == BasePhotoCustomObject.Type.Plane)
+		{
+			GameObject gameObject = Utility.CreatePrefab(parent, "ScenePhotoMode/CustomObject/Plane", false);
+			return gameObject.GetComponent<BasePhotoCustomObject>();
+		}
+		if (createType == BasePhotoCustomObject.Type.Sphere)
+		{
+			GameObject gameObject2 = Utility.CreatePrefab(parent, "ScenePhotoMode/CustomObject/Sphere", false);
+			return gameObject2.GetComponent<BasePhotoCustomObject>();
+		}
+		return null;
+	}
+
+	public static BasePhotoCustomObject InstantiateFromFile(GameObject parent, string fileFullPath)
+	{
+		KeyValuePair<bool, BasePhotoCustomObject.Type> typeFromFile = BasePhotoCustomObject.GetTypeFromFile(fileFullPath);
+		if (!typeFromFile.Key)
+		{
+			return null;
+		}
+		BasePhotoCustomObject.Type value = typeFromFile.Value;
+		BasePhotoCustomObject basePhotoCustomObject = BasePhotoCustomObject.CreatePrefab(parent, value);
+		basePhotoCustomObject.Desilialize(File.ReadAllBytes(fileFullPath));
+		return basePhotoCustomObject;
+	}
+
+	public static KeyValuePair<bool, BasePhotoCustomObject.Type> GetTypeFromFile(string fileFullPath)
+	{
+		bool key = false;
+		if (string.IsNullOrEmpty(fileFullPath) || !File.Exists(fileFullPath))
+		{
+			return new KeyValuePair<bool, BasePhotoCustomObject.Type>(key, BasePhotoCustomObject.Type.Plane);
+		}
+		KeyValuePair<bool, BasePhotoCustomObject.Type> result;
+		using (FileStream fileStream = new FileStream(fileFullPath, FileMode.Open, FileAccess.Read))
+		{
+			using (BinaryReader binaryReader = new BinaryReader(fileStream))
+			{
+				string a = binaryReader.ReadString();
+				if (a != "COM3D2_PHOTO_CUSTOM_OBJECT")
+				{
+					result = new KeyValuePair<bool, BasePhotoCustomObject.Type>(key, BasePhotoCustomObject.Type.Plane);
+				}
+				else
+				{
+					int num = binaryReader.ReadInt32();
+					BasePhotoCustomObject.Type value = (BasePhotoCustomObject.Type)Enum.Parse(typeof(BasePhotoCustomObject.Type), binaryReader.ReadString());
+					key = true;
+					result = new KeyValuePair<bool, BasePhotoCustomObject.Type>(key, value);
+				}
+			}
+		}
+		return result;
+	}
+
+	public abstract byte[] imageBinarys { get; }
+
+	public abstract BasePhotoCustomObject.Type type { get; }
+
+	public abstract Texture2D mainTexture { get; }
+
+	public float scale
+	{
+		get
+		{
+			return this.scale_;
+		}
+		set
+		{
+			this.scale_ = value;
+			this.SetScale(this.scale_);
+		}
+	}
+
+	public bool enabledTextureColor
+	{
+		get
+		{
+			return this.enabledTextureColor_;
+		}
+		set
+		{
+			this.enabledTextureColor_ = value;
+			this.SetTextureColor((!value) ? Color.white : this.textureColor);
+		}
+	}
+
+	public Color textureColor
+	{
+		get
+		{
+			return this.textureColor_;
+		}
+		set
+		{
+			bool flag = this.textureColor_ != value && this.enabledTextureColor;
+			this.textureColor_ = value;
+			if (flag)
+			{
+				this.enabledTextureColor = true;
+			}
+		}
+	}
+
+	public bool visible
+	{
+		get
+		{
+			return base.gameObject.activeSelf;
+		}
+		set
+		{
+			base.gameObject.SetActive(value);
+		}
+	}
+
+	public virtual void Awake()
+	{
+		this.Clear();
+	}
+
+	public virtual void OnDestroy()
+	{
+	}
+
+	public bool SetTexture(string imageFilePath)
+	{
+		if (string.IsNullOrEmpty(imageFilePath))
+		{
+			return false;
+		}
+		if (!File.Exists(imageFilePath))
+		{
+			return false;
+		}
+		byte[] array = File.ReadAllBytes(imageFilePath);
+		return array != null && array.Length != 0 && this.SetTexture(array);
+	}
+
+	public bool SetTexture(byte[] imageFileBinary)
+	{
+		return imageFileBinary != null && imageFileBinary.Length > 0 && this.CreateTexture2D(imageFileBinary);
+	}
+
+	public virtual void Clear()
+	{
+		this.scale = 1f;
+		this.enabledTextureColor = true;
+		this.textureColor = Color.white;
+	}
+
+	public virtual int CompareTo(BasePhotoCustomObject comp_obj)
+	{
+		return ((int)comp_obj.type).CompareTo((int)this.type);
+	}
+
+	public byte[] Serialize()
+	{
+		byte[] result = null;
+		NDebug.Assert(this.mainTexture != null, "BasePhotoCustomObject::Serialize error.\nmainTextureがnullです");
+		using (MemoryStream memoryStream = new MemoryStream())
+		{
+			using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
+			{
+				binaryWriter.Write("COM3D2_PHOTO_CUSTOM_OBJECT");
+				binaryWriter.Write(1130);
+				binaryWriter.Write(this.type.ToString());
+				binaryWriter.Write(this.scale_);
+				binaryWriter.Write(this.enabledTextureColor_);
+				binaryWriter.Write(this.textureColor_.a);
+				binaryWriter.Write(this.textureColor_.r);
+				binaryWriter.Write(this.textureColor_.g);
+				binaryWriter.Write(this.textureColor_.b);
+				this.OnSerialize(binaryWriter);
+				result = memoryStream.ToArray();
+			}
+		}
+		return result;
+	}
+
+	public bool Desilialize(byte[] binary)
+	{
+		this.Clear();
+		using (MemoryStream memoryStream = new MemoryStream(binary))
+		{
+			using (BinaryReader binaryReader = new BinaryReader(memoryStream))
+			{
+				string a = binaryReader.ReadString();
+				NDebug.Assert(a == "COM3D2_PHOTO_CUSTOM_OBJECT", "BasePhotoCustomObject::Desilialize error.\nヘッダーが不正です");
+				int gameVersion = binaryReader.ReadInt32();
+				BasePhotoCustomObject.Type type = (BasePhotoCustomObject.Type)Enum.Parse(typeof(BasePhotoCustomObject.Type), binaryReader.ReadString());
+				this.scale = binaryReader.ReadSingle();
+				this.enabledTextureColor = binaryReader.ReadBoolean();
+				this.textureColor = new Color
+				{
+					a = binaryReader.ReadSingle(),
+					r = binaryReader.ReadSingle(),
+					g = binaryReader.ReadSingle(),
+					b = binaryReader.ReadSingle()
+				};
+				this.OnDesilialize(gameVersion, type, binaryReader);
+			}
+		}
+		return true;
+	}
+
+	protected abstract void OnSerialize(BinaryWriter writer);
+
+	protected abstract bool OnDesilialize(int gameVersion, BasePhotoCustomObject.Type type, BinaryReader reader);
+
+	protected abstract bool CreateTexture2D(byte[] imageFileBinary);
+
+	protected abstract void SetTextureColor(Color setColor);
+
+	protected abstract void SetScale(float scale);
+
+	protected float scale_;
+
+	protected bool enabledTextureColor_;
+
+	protected Color textureColor_;
+
+	public enum Type
+	{
+		Plane,
+		Sphere
+	}
+}

+ 248 - 0
Assembly-CSharp/BasePhotoSubWindow.cs

@@ -0,0 +1,248 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class BasePhotoSubWindow : MonoBehaviour
+{
+	protected void ResizeWindow()
+	{
+		int num = (int)this.WindowSize.x;
+		int num2 = (int)this.WindowSize.y;
+		this.WindowSize.x = (float)num;
+		this.WindowSize.y = (float)num2;
+		UTY.GetChildObject(base.gameObject, "Parent", false).GetComponent<BoxCollider>().size = new Vector3((float)num, (float)num2, 1f);
+		UTY.GetChildObject(base.gameObject, "Parent", false).GetComponent<BoxCollider>().center = new Vector3((float)(num - 200) / 2f, (float)(num2 - 200) / -2f, 1f);
+		UTY.GetChildObject(base.gameObject, "Parent/BG", false).GetComponent<UIWidget>().width = num;
+		UTY.GetChildObject(base.gameObject, "Parent/BG", false).GetComponent<UIWidget>().height = num2;
+		UTY.GetChildObject(base.gameObject, "Parent/BG2", false).GetComponent<UIWidget>().width = num;
+		UTY.GetChildObject(base.gameObject, "Parent/BG2", false).GetComponent<UIWidget>().height = num2 - 20;
+		UTY.GetChildObject(base.gameObject, "Parent/BG2", false).transform.localPosition = new Vector3(-100f, (float)((num2 - 100) * -1), 0f);
+		UTY.GetChildObject(base.gameObject, "Parent/BG/TitleBar", false).GetComponent<UIWidget>().width = num;
+		UTY.GetChildObject(base.gameObject, "Parent/BG/TitleBar/Btn", false).transform.localPosition = new Vector3((float)(num - 10), -10f, 0f);
+		UTY.GetChildObject(base.gameObject, "Parent/BG/TitleBar/Text", false).GetComponent<UILabel>().text = this.InitTitle;
+	}
+
+	public virtual void Initizalize(BasePhotoWindow parentWindow)
+	{
+		if (this.content_game_object_ != null)
+		{
+			return;
+		}
+		this.parent_window_ = parentWindow;
+		this.ResizeWindow();
+		this.content_game_object_ = UTY.GetChildObject(base.gameObject, "Parent/ContentParent", false);
+		GameObject childObject = UTY.GetChildObject(base.gameObject, "Parent/BG/TitleBar", false);
+		if (this.panel_ == null)
+		{
+			this.panel_ = base.GetComponentInChildren<UIPanel>();
+		}
+		this.title_bar_label_ = UTY.GetChildObject(childObject, "Text", false).GetComponent<UILabel>();
+		Dictionary<BasePhotoSubWindow.BtnType, string> dictionary = new Dictionary<BasePhotoSubWindow.BtnType, string>();
+		dictionary.Add(BasePhotoSubWindow.BtnType.Help, "ヘルプ");
+		dictionary.Add(BasePhotoSubWindow.BtnType.Min, "最小化");
+		dictionary.Add(BasePhotoSubWindow.BtnType.Reset, "UI位置初期化");
+		dictionary.Add(BasePhotoSubWindow.BtnType.End, "閉じる");
+		this.btn_dic_ = new Dictionary<BasePhotoSubWindow.BtnType, KeyValuePair<UIButton, List<Action>>>();
+		for (int i = 0; i <= 3; i++)
+		{
+			BasePhotoSubWindow.BtnType key = (BasePhotoSubWindow.BtnType)i;
+			this.btn_dic_.Add(key, new KeyValuePair<UIButton, List<Action>>(UTY.GetChildObject(childObject, "Btn/" + key.ToString(), false).GetComponent<UIButton>(), new List<Action>()));
+			EventDelegate.Add(this.btn_dic_[key].Key.onClick, new EventDelegate.Callback(this.OnButtonClickEvent));
+			this.mini_btn_init_pos_.Add(key, this.btn_dic_[key].Key.transform.localPosition);
+			if (dictionary.ContainsKey(key))
+			{
+				UIButton key2 = this.btn_dic_[key].Key;
+				EventDelegate eventDelegate = new EventDelegate(this, "OnBtnMouseHoverIn");
+				eventDelegate.parameters[0].value = dictionary[key];
+				key2.gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate);
+				EventDelegate.Add(key2.gameObject.GetComponent<UIEventTrigger>().onHoverOut, new EventDelegate.Callback(this.OnMouseHoverOut));
+			}
+		}
+		this.window_active_delegate_ = new EventDelegate(new EventDelegate.Callback(parentWindow.ActiveWindow));
+		this.init_pos_ = base.transform.localPosition;
+		for (int j = 0; j <= 3; j++)
+		{
+			this.SetButtonEnabled((BasePhotoSubWindow.BtnType)j, false, false);
+		}
+		this.GetButtonOnClickEventList(BasePhotoSubWindow.BtnType.Reset).Add(delegate
+		{
+			this.ResetPosition();
+		});
+		if (!this.InitVisible)
+		{
+			this.visible = false;
+		}
+	}
+
+	public void SetButtonEnabled(BasePhotoSubWindow.BtnType type, bool enabled, bool force_update = false)
+	{
+		this.btn_dic_[type].Key.gameObject.SetActive(enabled);
+		foreach (KeyValuePair<BasePhotoSubWindow.BtnType, KeyValuePair<UIButton, List<Action>>> keyValuePair in this.btn_dic_)
+		{
+			keyValuePair.Value.Key.transform.localPosition = this.mini_btn_init_pos_[keyValuePair.Key];
+		}
+		UIGrid component = this.btn_dic_[BasePhotoSubWindow.BtnType.Help].Key.transform.parent.gameObject.GetComponent<UIGrid>();
+		if (component != null)
+		{
+			if (force_update)
+			{
+				component.Reposition();
+			}
+			else
+			{
+				component.repositionNow = true;
+			}
+		}
+	}
+
+	public List<Action> GetButtonOnClickEventList(BasePhotoSubWindow.BtnType type)
+	{
+		return this.btn_dic_[type].Value;
+	}
+
+	public virtual void OnButtonClickEvent()
+	{
+		int instanceID = UIButton.current.GetInstanceID();
+		foreach (KeyValuePair<BasePhotoSubWindow.BtnType, KeyValuePair<UIButton, List<Action>>> keyValuePair in this.btn_dic_)
+		{
+			if (instanceID == keyValuePair.Value.Key.GetInstanceID())
+			{
+				List<Action> value = keyValuePair.Value.Value;
+				for (int i = 0; i < value.Count; i++)
+				{
+					value[i]();
+				}
+			}
+		}
+	}
+
+	public virtual void ResetPosition()
+	{
+		base.transform.localPosition = this.init_pos_;
+	}
+
+	public virtual void OnActiveChangeWindowEvent(bool is_active)
+	{
+	}
+
+	public string title
+	{
+		get
+		{
+			return this.title_bar_label_.text;
+		}
+		set
+		{
+			this.title_bar_label_.text = value;
+		}
+	}
+
+	public int depth
+	{
+		get
+		{
+			return this.panel.GetComponentInChildren<UIPanel>().depth / 10;
+		}
+		set
+		{
+			int num = value * 10;
+			UIPanel[] componentsInChildren = this.panel.gameObject.GetComponentsInChildren<UIPanel>(true);
+			for (int i = 0; i < componentsInChildren.Length; i++)
+			{
+				componentsInChildren[i].depth = num++;
+			}
+		}
+	}
+
+	public bool visible
+	{
+		get
+		{
+			return this.panel.alpha != 0f;
+		}
+		set
+		{
+			this.panel.alpha = (float)((!value) ? 0 : 1);
+		}
+	}
+
+	public UIPanel panel
+	{
+		get
+		{
+			if (this.panel_ == null)
+			{
+				this.panel_ = base.GetComponentInChildren<UIPanel>();
+			}
+			return this.panel_;
+		}
+	}
+
+	public EventDelegate window_active_delegate
+	{
+		get
+		{
+			return this.window_active_delegate_;
+		}
+	}
+
+	public virtual GameObject content_game_object
+	{
+		get
+		{
+			return this.content_game_object_;
+		}
+	}
+
+	public BasePhotoWindowManager mgr
+	{
+		get
+		{
+			return this.parent_window_.mgr;
+		}
+	}
+
+	protected void OnBtnMouseHoverIn(string text)
+	{
+		MouseExposition @object = MouseExposition.GetObject();
+		@object.text = text;
+	}
+
+	protected void OnMouseHoverOut()
+	{
+		MouseExposition @object = MouseExposition.GetObject();
+		@object.text = string.Empty;
+	}
+
+	public string InitTitle = "キャラクター";
+
+	public Vector2 WindowSize;
+
+	public bool InitVisible = true;
+
+	protected BasePhotoWindow parent_window_;
+
+	protected UILabel title_bar_label_;
+
+	protected UIPanel panel_;
+
+	protected BasePhotoWindowManager mgr_;
+
+	protected Dictionary<BasePhotoSubWindow.BtnType, KeyValuePair<UIButton, List<Action>>> btn_dic_;
+
+	protected EventDelegate window_active_delegate_;
+
+	protected GameObject content_game_object_;
+
+	protected Vector3 init_pos_;
+
+	private Dictionary<BasePhotoSubWindow.BtnType, Vector3> mini_btn_init_pos_ = new Dictionary<BasePhotoSubWindow.BtnType, Vector3>();
+
+	public enum BtnType
+	{
+		Help,
+		Reset,
+		Min,
+		End
+	}
+}

+ 442 - 0
Assembly-CSharp/BasePhotoWindow.cs

@@ -0,0 +1,442 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public abstract class BasePhotoWindow : MonoBehaviour
+{
+	public void ResizeWindow()
+	{
+		int num = (int)this.WindowSize.x;
+		int num2 = (int)this.WindowSize.y;
+		this.WindowSize.x = (float)num;
+		this.WindowSize.y = (float)num2;
+		UTY.GetChildObject(base.gameObject, "Parent", false).GetComponent<BoxCollider>().size = new Vector3((float)num, (float)num2, 1f);
+		UTY.GetChildObject(base.gameObject, "Parent", false).GetComponent<BoxCollider>().center = new Vector3((float)(num - 200) / 2f, (float)(num2 - 200) / -2f, 1f);
+		UTY.GetChildObject(base.gameObject, "Parent/BG", false).GetComponent<UIWidget>().width = num;
+		UTY.GetChildObject(base.gameObject, "Parent/BG", false).GetComponent<UIWidget>().height = num2;
+		UTY.GetChildObject(base.gameObject, "Parent/BG2", false).GetComponent<UIWidget>().width = num;
+		UTY.GetChildObject(base.gameObject, "Parent/BG2", false).GetComponent<UIWidget>().height = num2 - 20;
+		UTY.GetChildObject(base.gameObject, "Parent/BG2", false).transform.localPosition = new Vector3(-100f, (float)((num2 - 100) * -1), 0f);
+		UTY.GetChildObject(base.gameObject, "Parent/BG/TitleBar", false).GetComponent<UIWidget>().width = num;
+		UTY.GetChildObject(base.gameObject, "Parent/BG/TitleBar/Btn", false).transform.localPosition = new Vector3((float)(num - 10), -10f, 0f);
+		(this.windowTitle = UTY.GetChildObject(base.gameObject, "Parent/BG/TitleBar/Text", false).GetComponent<UILabel>()).text = this.InitTitle;
+	}
+
+	public virtual void SetWindowTitle(string title)
+	{
+		this.windowTitle.text = title;
+	}
+
+	public virtual void Awake()
+	{
+		GameObject gameObject = GameObject.Find("/UI Root");
+		NDebug.Assert(gameObject != null, "BasePhotoWindow\nRootを見つけられませんでした");
+		this.uiCamera = gameObject.GetComponent<UIRoot>().GetComponentInChildren<Camera>();
+		this.ResizeWindow();
+		base.transform.parent.GetComponent<BasePhotoWindowManager>().Reset();
+		this.bgWidget = UTY.GetChildObject(base.gameObject, "Parent/BG", false).GetComponent<UIWidget>();
+		this.bgWidget2 = UTY.GetChildObject(base.gameObject, "Parent/BG2", false).GetComponent<UIWidget>();
+		this.content_game_object_ = UTY.GetChildObject(base.gameObject, "Parent/ContentParent", false);
+		GameObject childObject = UTY.GetChildObject(base.gameObject, "Parent/BG/TitleBar", false);
+		if (this.panel_ == null)
+		{
+			this.panel_ = base.GetComponentInChildren<UIPanel>();
+		}
+		this.title_bar_label_ = UTY.GetChildObject(childObject, "Text", false).GetComponent<UILabel>();
+		Dictionary<BasePhotoWindow.BtnType, string> dictionary = new Dictionary<BasePhotoWindow.BtnType, string>();
+		dictionary.Add(BasePhotoWindow.BtnType.Help, "ヘルプ");
+		dictionary.Add(BasePhotoWindow.BtnType.Min, "最小化");
+		dictionary.Add(BasePhotoWindow.BtnType.Reset, "UI位置初期化");
+		dictionary.Add(BasePhotoWindow.BtnType.End, "閉じる");
+		this.btn_dic_ = new Dictionary<BasePhotoWindow.BtnType, KeyValuePair<UIButton, List<Action>>>();
+		for (int i = 0; i <= 3; i++)
+		{
+			BasePhotoWindow.BtnType key = (BasePhotoWindow.BtnType)i;
+			this.btn_dic_.Add(key, new KeyValuePair<UIButton, List<Action>>(UTY.GetChildObject(childObject, "Btn/" + key.ToString(), false).GetComponent<UIButton>(), new List<Action>()));
+			EventDelegate.Add(this.btn_dic_[key].Key.onClick, new EventDelegate.Callback(this.OnButtonClickEvent));
+			this.mini_btn_init_pos_.Add(key, this.btn_dic_[key].Key.transform.localPosition);
+			if (dictionary.ContainsKey(key))
+			{
+				UIButton key2 = this.btn_dic_[key].Key;
+				EventDelegate eventDelegate = new EventDelegate(this, "OnBtnMouseHoverIn");
+				eventDelegate.parameters[0].value = dictionary[key];
+				key2.gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate);
+				EventDelegate.Add(key2.gameObject.GetComponent<UIEventTrigger>().onHoverOut, new EventDelegate.Callback(this.OnMouseHoverOut));
+				EventDelegate.Add(key2.gameObject.GetComponent<UIEventTrigger>().onDragStart, new EventDelegate.Callback(this.OnMouseHoverOut));
+			}
+		}
+		this.window_active_delegate_ = new EventDelegate(new EventDelegate.Callback(this.ActiveWindow));
+		this.init_pos_ = base.transform.localPosition;
+		for (int j = 0; j <= 3; j++)
+		{
+			this.SetButtonEnabled((BasePhotoWindow.BtnType)j, false, false);
+		}
+		this.GetButtonOnClickEventList(BasePhotoWindow.BtnType.Reset).Add(delegate
+		{
+			this.ResetPosition();
+		});
+		this.SetButtonEnabled(BasePhotoWindow.BtnType.Reset, true, false);
+		if (!this.InitVisible)
+		{
+			this.visible = false;
+		}
+		if (this.subWindows == null)
+		{
+			this.subWindows = new BasePhotoSubWindow[0];
+		}
+		foreach (BasePhotoSubWindow basePhotoSubWindow in this.subWindows)
+		{
+			basePhotoSubWindow.Initizalize(this);
+		}
+	}
+
+	public virtual void Start()
+	{
+	}
+
+	public virtual void OnEnable()
+	{
+		if (this.visible && !this.IsWindowInTheScreen())
+		{
+			this.ResetPosition();
+			this.panelDirty = 6;
+		}
+	}
+
+	public virtual void Update()
+	{
+		if (0 < this.panelDirty)
+		{
+			this.panelDirty--;
+			if (this.panel_ != null && this.panelDirty % 2 == 0)
+			{
+				UIPanel[] componentsInChildren = base.GetComponentsInChildren<UIPanel>();
+				if (componentsInChildren != null)
+				{
+					foreach (UIPanel uipanel in componentsInChildren)
+					{
+						uipanel.SetDirty();
+					}
+				}
+			}
+		}
+	}
+
+	public virtual void UpdateChildren()
+	{
+		UIEventTrigger[] componentsInChildren = base.GetComponentsInChildren<UIEventTrigger>(true);
+		for (int i = 0; i < componentsInChildren.Length; i++)
+		{
+			if (componentsInChildren[i].onPress.IndexOf(this.window_active_delegate_) < 0)
+			{
+				componentsInChildren[i].onPress.Add(this.window_active_delegate_);
+			}
+		}
+	}
+
+	public virtual void ActiveWindow()
+	{
+		this.mgr_.ActiveWindow(this);
+	}
+
+	public void SetButtonEnabled(BasePhotoWindow.BtnType type, bool enabled, bool force_update = false)
+	{
+		this.btn_dic_[type].Key.gameObject.SetActive(enabled);
+		foreach (KeyValuePair<BasePhotoWindow.BtnType, KeyValuePair<UIButton, List<Action>>> keyValuePair in this.btn_dic_)
+		{
+			keyValuePair.Value.Key.transform.localPosition = this.mini_btn_init_pos_[keyValuePair.Key];
+		}
+		UIGrid component = this.btn_dic_[BasePhotoWindow.BtnType.Help].Key.transform.parent.gameObject.GetComponent<UIGrid>();
+		if (component != null)
+		{
+			if (force_update)
+			{
+				component.Reposition();
+			}
+			else
+			{
+				component.repositionNow = true;
+			}
+		}
+	}
+
+	public List<Action> GetButtonOnClickEventList(BasePhotoWindow.BtnType type)
+	{
+		return this.btn_dic_[type].Value;
+	}
+
+	public virtual void OnButtonClickEvent()
+	{
+		int instanceID = UIButton.current.GetInstanceID();
+		foreach (KeyValuePair<BasePhotoWindow.BtnType, KeyValuePair<UIButton, List<Action>>> keyValuePair in this.btn_dic_)
+		{
+			if (instanceID == keyValuePair.Value.Key.GetInstanceID())
+			{
+				List<Action> value = keyValuePair.Value.Value;
+				for (int i = 0; i < value.Count; i++)
+				{
+					value[i]();
+				}
+			}
+		}
+	}
+
+	public virtual void ResetPosition()
+	{
+		base.transform.localPosition = this.init_pos_;
+	}
+
+	public virtual bool IsWindowInTheScreen()
+	{
+		if (this.uiCamera == null)
+		{
+			return true;
+		}
+		int margin = -30;
+		Rect windowRectFromScreenPoint = this.GetWindowRectFromScreenPoint(margin);
+		Rect rect = new Rect(0f, 0f, (float)Screen.width, (float)Screen.height);
+		windowRectFromScreenPoint.position = new Vector3(windowRectFromScreenPoint.position.x, windowRectFromScreenPoint.y, 0f);
+		bool flag = rect.Overlaps(windowRectFromScreenPoint);
+		return rect.Overlaps(windowRectFromScreenPoint);
+	}
+
+	public virtual void OnActiveChangeWindowEvent(bool is_active)
+	{
+	}
+
+	public virtual void SetWindowManager(BasePhotoWindowManager mgr)
+	{
+		this.mgr_ = mgr;
+	}
+
+	public string title
+	{
+		get
+		{
+			return this.title_bar_label_.text;
+		}
+		set
+		{
+			this.title_bar_label_.text = value;
+		}
+	}
+
+	public int depth
+	{
+		get
+		{
+			return this.panel.GetComponentInChildren<UIPanel>().depth / 10;
+		}
+		set
+		{
+			int num = value * 10;
+			UIPanel[] componentsInChildren = this.panel.gameObject.GetComponentsInChildren<UIPanel>(true);
+			for (int i = 0; i < componentsInChildren.Length; i++)
+			{
+				componentsInChildren[i].depth = num++;
+			}
+		}
+	}
+
+	public virtual bool baseDraw
+	{
+		get
+		{
+			return this.bgWidget.alpha != 0f;
+		}
+		set
+		{
+			UIRect uirect = this.bgWidget;
+			float alpha = (float)((!value) ? 0 : 1);
+			this.bgWidget2.alpha = alpha;
+			uirect.alpha = alpha;
+		}
+	}
+
+	public virtual bool visible
+	{
+		get
+		{
+			return this.panel.alpha != 0f;
+		}
+		set
+		{
+			this.panel.alpha = (float)((!value) ? 0 : 1);
+			if (value && !this.IsWindowInTheScreen())
+			{
+				this.ResetPosition();
+				this.panelDirty = 6;
+			}
+		}
+	}
+
+	public UIPanel panel
+	{
+		get
+		{
+			if (this.panel_ == null)
+			{
+				this.panel_ = base.GetComponentInChildren<UIPanel>();
+			}
+			return this.panel_;
+		}
+	}
+
+	public EventDelegate window_active_delegate
+	{
+		get
+		{
+			return this.window_active_delegate_;
+		}
+	}
+
+	public virtual GameObject content_game_object
+	{
+		get
+		{
+			return this.content_game_object_;
+		}
+	}
+
+	public Dictionary<string, Dictionary<string, string>> GetWoldStoreData()
+	{
+		return this.mgr.GetWoldStoreData(this.windowName);
+	}
+
+	public virtual KeyValuePair<string, Dictionary<string, string>> Serialize()
+	{
+		string key = base.gameObject.name + "title";
+		Dictionary<string, string> dictionary = new Dictionary<string, string>();
+		Vector3 localPosition = base.transform.localPosition;
+		dictionary.Add("pos", string.Concat(new string[]
+		{
+			localPosition.x.ToString("G9"),
+			",",
+			localPosition.y.ToString("G9"),
+			",",
+			localPosition.z.ToString("G9")
+		}));
+		dictionary.Add("visible", this.visible.ToString());
+		for (int i = 0; i < this.subWindows.Length; i++)
+		{
+			dictionary.Add(i.ToString() + ":visible", this.subWindows[i].visible.ToString());
+		}
+		return new KeyValuePair<string, Dictionary<string, string>>(key, dictionary);
+	}
+
+	public virtual void Deserialize(Dictionary<string, Dictionary<string, string>> data)
+	{
+		string key = base.gameObject.name + "title";
+		if (!data.ContainsKey(key))
+		{
+			return;
+		}
+		Dictionary<string, string> dictionary = data[key];
+		string[] array = dictionary["pos"].Split(new char[]
+		{
+			','
+		});
+		base.transform.localPosition = new Vector3(float.Parse(array[0]), float.Parse(array[1]), float.Parse(array[2]));
+		if (dictionary.ContainsKey("visible"))
+		{
+			this.visible = bool.Parse(dictionary["visible"]);
+		}
+		for (int i = 0; i < this.subWindows.Length; i++)
+		{
+			string key2 = i.ToString() + ":visible";
+			if (dictionary.ContainsKey(key2))
+			{
+				this.subWindows[i].visible = bool.Parse(dictionary[key2]);
+			}
+		}
+	}
+
+	public Rect GetWindowRectFromScreenPoint()
+	{
+		return this.GetWindowRectFromScreenPoint(0);
+	}
+
+	public Rect GetWindowRectFromScreenPoint(int margin)
+	{
+		Vector3 position = this.bgWidget.transform.position;
+		this.bgWidget.transform.localPosition = new Vector3(this.bgWidget.transform.localPosition.x - (float)margin, this.bgWidget.transform.localPosition.y + (float)margin, 0f);
+		Vector2 vector = new Vector2(this.WindowSize.x + (float)(margin * 2), this.WindowSize.y + (float)(margin * 2));
+		Vector3 vector2 = this.uiCamera.WorldToScreenPoint(this.bgWidget.transform.position);
+		Rect result = default(Rect);
+		result.position = new Vector2(vector2.x, (float)Screen.height - vector2.y);
+		Vector3 position2 = this.bgWidget.transform.position;
+		Vector3 vector3 = this.uiCamera.WorldToScreenPoint(this.bgWidget.transform.position);
+		this.bgWidget.transform.localPosition = this.bgWidget.transform.localPosition + new Vector3(vector.x, -vector.y, 0f);
+		Vector3 vector4 = this.uiCamera.WorldToScreenPoint(this.bgWidget.transform.position);
+		this.bgWidget.transform.position = position2;
+		float x = vector4.x - vector3.x;
+		float y = (float)Screen.height - vector4.y - ((float)Screen.height - vector3.y);
+		result.size = new Vector2(x, y);
+		this.bgWidget.transform.position = position;
+		return result;
+	}
+
+	public BasePhotoWindowManager mgr
+	{
+		get
+		{
+			return this.mgr_;
+		}
+	}
+
+	public abstract string windowName { get; }
+
+	protected void OnBtnMouseHoverIn(string text)
+	{
+		MouseExposition @object = MouseExposition.GetObject();
+		@object.text = text;
+	}
+
+	protected void OnMouseHoverOut()
+	{
+		MouseExposition @object = MouseExposition.GetObject();
+		@object.text = string.Empty;
+	}
+
+	public string InitTitle = "キャラクター";
+
+	public Vector2 WindowSize;
+
+	public bool InitVisible = true;
+
+	public BasePhotoSubWindow[] subWindows;
+
+	private UIWidget bgWidget;
+
+	private UIWidget bgWidget2;
+
+	private int panelDirty;
+
+	private UILabel windowTitle;
+
+	protected Camera uiCamera;
+
+	protected UILabel title_bar_label_;
+
+	protected UIPanel panel_;
+
+	protected BasePhotoWindowManager mgr_;
+
+	protected Dictionary<BasePhotoWindow.BtnType, KeyValuePair<UIButton, List<Action>>> btn_dic_;
+
+	protected EventDelegate window_active_delegate_;
+
+	protected GameObject content_game_object_;
+
+	protected Vector3 init_pos_;
+
+	private Dictionary<BasePhotoWindow.BtnType, Vector3> mini_btn_init_pos_ = new Dictionary<BasePhotoWindow.BtnType, Vector3>();
+
+	public enum BtnType
+	{
+		Help,
+		Reset,
+		Min,
+		End
+	}
+}

+ 255 - 0
Assembly-CSharp/BasePhotoWindowManager.cs

@@ -0,0 +1,255 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+public abstract class BasePhotoWindowManager : MonoBehaviour
+{
+	public static void SetCopyData(string title, string value)
+	{
+		if (!BasePhotoWindowManager.clipboard_.ContainsKey(title))
+		{
+			BasePhotoWindowManager.clipboard_.Add(title, value);
+		}
+		else
+		{
+			BasePhotoWindowManager.clipboard_[title] = value;
+		}
+	}
+
+	public static string GetCopyData(string title)
+	{
+		if (!BasePhotoWindowManager.clipboard_.ContainsKey(title))
+		{
+			return string.Empty;
+		}
+		return BasePhotoWindowManager.clipboard_[title];
+	}
+
+	public void Reset()
+	{
+		int panelDepth = this.PanelDepth;
+		Transform transform = base.gameObject.transform;
+		for (int i = 0; i < transform.childCount; i++)
+		{
+			BasePhotoWindow component = transform.GetChild(i).gameObject.GetComponent<BasePhotoWindow>();
+			if (!(component == null))
+			{
+				component.depth = panelDepth++;
+				component.SetWindowManager(this);
+			}
+		}
+	}
+
+	public virtual void Awake()
+	{
+		BasePhotoWindowManager.clipboard_ = new Dictionary<string, string>();
+		this.Reset();
+		int panelDepth = this.PanelDepth;
+		this.front_depth_ = -1;
+		Transform transform = base.gameObject.transform;
+		for (int i = 0; i < transform.childCount; i++)
+		{
+			BasePhotoWindow component = transform.GetChild(i).gameObject.GetComponent<BasePhotoWindow>();
+			if (!(component == null) && component.enabled)
+			{
+				component.gameObject.SetActive(true);
+				this.OnAddWindow(component);
+				this.front_depth_ = Math.Max(this.front_depth_, component.depth);
+				this.window_dic_.Add(new KeyValuePair<BasePhotoWindow, int>(component, component.depth));
+				component.SetWindowManager(this);
+			}
+		}
+	}
+
+	public virtual void Start()
+	{
+		this.Deserialize();
+	}
+
+	protected virtual bool OnAddWindow(BasePhotoWindow add_win)
+	{
+		return true;
+	}
+
+	public BasePhotoWindow GetWindow(string title)
+	{
+		foreach (KeyValuePair<BasePhotoWindow, int> keyValuePair in this.window_dic_)
+		{
+			if (keyValuePair.Key.title == title)
+			{
+				return keyValuePair.Key;
+			}
+		}
+		return null;
+	}
+
+	public virtual void ResetPosition()
+	{
+		foreach (KeyValuePair<BasePhotoWindow, int> keyValuePair in this.window_dic_)
+		{
+			keyValuePair.Key.ResetPosition();
+		}
+	}
+
+	public void ActiveWindow(BasePhotoWindow window)
+	{
+		if (window.depth != this.front_depth_)
+		{
+			window.depth = ++this.front_depth_;
+		}
+		if (40 <= this.front_depth_)
+		{
+			SortedList<int, BasePhotoWindow> sortedList = new SortedList<int, BasePhotoWindow>();
+			foreach (KeyValuePair<BasePhotoWindow, int> keyValuePair in this.window_dic_)
+			{
+				sortedList.Add(keyValuePair.Key.depth, keyValuePair.Key);
+			}
+			this.front_depth_ = -1;
+			foreach (KeyValuePair<int, BasePhotoWindow> keyValuePair2 in sortedList)
+			{
+				keyValuePair2.Value.depth = ++this.front_depth_;
+			}
+		}
+	}
+
+	public void OnDestroy()
+	{
+		this.Serialize();
+	}
+
+	public Dictionary<string, Dictionary<string, string>> GetWoldStoreData(BasePhotoWindow photo_window)
+	{
+		return this.GetWoldStoreData(photo_window.name);
+	}
+
+	public Dictionary<string, Dictionary<string, string>> GetWoldStoreData(string name)
+	{
+		if (!this.world_store_data_.ContainsKey(name))
+		{
+			this.world_store_data_.Add(name, new Dictionary<string, Dictionary<string, string>>());
+		}
+		return this.world_store_data_[name];
+	}
+
+	public void Serialize()
+	{
+		string name = base.gameObject.name;
+		Dictionary<string, Dictionary<string, string>> dictionary = new Dictionary<string, Dictionary<string, string>>();
+		foreach (KeyValuePair<BasePhotoWindow, int> keyValuePair in this.window_dic_)
+		{
+			KeyValuePair<string, Dictionary<string, string>> keyValuePair2 = keyValuePair.Key.Serialize();
+			dictionary.Add(keyValuePair2.Key, keyValuePair2.Value);
+		}
+		if (this.save_data_.ContainsKey(name))
+		{
+			this.save_data_.Remove(name);
+		}
+		this.save_data_.Add(name, dictionary);
+		string save_fullpath_uidata = this.save_fullpath_uidata;
+		Directory.CreateDirectory(save_fullpath_uidata.Replace(Path.GetFileName(save_fullpath_uidata), string.Empty));
+		using (MemoryStream memoryStream = new MemoryStream())
+		{
+			using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
+			{
+				binaryWriter.Write(this.save_header_uidata);
+				binaryWriter.Write(1130);
+				binaryWriter.Write(this.save_data_.Count);
+				foreach (KeyValuePair<string, Dictionary<string, Dictionary<string, string>>> keyValuePair3 in this.save_data_)
+				{
+					binaryWriter.Write(keyValuePair3.Key);
+					binaryWriter.Write(keyValuePair3.Value.Count);
+					foreach (KeyValuePair<string, Dictionary<string, string>> keyValuePair4 in keyValuePair3.Value)
+					{
+						binaryWriter.Write(keyValuePair4.Key);
+						binaryWriter.Write(keyValuePair4.Value.Count);
+						foreach (KeyValuePair<string, string> keyValuePair5 in keyValuePair4.Value)
+						{
+							binaryWriter.Write(keyValuePair5.Key);
+							binaryWriter.Write(keyValuePair5.Value);
+						}
+					}
+				}
+			}
+			File.WriteAllBytes(save_fullpath_uidata, memoryStream.ToArray());
+		}
+	}
+
+	public void Deserialize()
+	{
+		this.save_data_ = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();
+		string save_fullpath_uidata = this.save_fullpath_uidata;
+		Directory.CreateDirectory(save_fullpath_uidata.Replace(Path.GetFileName(save_fullpath_uidata), string.Empty));
+		if (!File.Exists(save_fullpath_uidata))
+		{
+			return;
+		}
+		using (FileStream fileStream = new FileStream(save_fullpath_uidata, FileMode.Open))
+		{
+			if (fileStream == null)
+			{
+				return;
+			}
+			byte[] buffer = new byte[fileStream.Length];
+			fileStream.Read(buffer, 0, (int)fileStream.Length);
+			using (BinaryReader binaryReader = new BinaryReader(new MemoryStream(buffer)))
+			{
+				if (binaryReader.ReadString() != this.save_header_uidata)
+				{
+					NDebug.Assert(this.save_header_uidata + "ファイルのヘッダーが不正です。", false);
+					return;
+				}
+				int num = binaryReader.ReadInt32();
+				int num2 = binaryReader.ReadInt32();
+				for (int i = 0; i < num2; i++)
+				{
+					string key = binaryReader.ReadString();
+					int num3 = binaryReader.ReadInt32();
+					Dictionary<string, Dictionary<string, string>> dictionary = new Dictionary<string, Dictionary<string, string>>();
+					for (int j = 0; j < num3; j++)
+					{
+						string key2 = binaryReader.ReadString();
+						int num4 = binaryReader.ReadInt32();
+						Dictionary<string, string> dictionary2 = new Dictionary<string, string>();
+						for (int k = 0; k < num4; k++)
+						{
+							string key3 = binaryReader.ReadString();
+							string value = binaryReader.ReadString();
+							dictionary2.Add(key3, value);
+						}
+						dictionary.Add(key2, dictionary2);
+					}
+					this.save_data_.Add(key, dictionary);
+				}
+			}
+		}
+		string name = base.gameObject.name;
+		if (this.save_data_.ContainsKey(name))
+		{
+			Dictionary<string, Dictionary<string, string>> dictionary3 = this.save_data_[name];
+			if (dictionary3 != null && 0 < dictionary3.Count)
+			{
+				foreach (KeyValuePair<BasePhotoWindow, int> keyValuePair in this.window_dic_)
+				{
+					keyValuePair.Key.Deserialize(dictionary3);
+				}
+			}
+		}
+	}
+
+	protected abstract string save_fullpath_uidata { get; }
+
+	protected abstract string save_header_uidata { get; }
+
+	public int PanelDepth;
+
+	protected List<KeyValuePair<BasePhotoWindow, int>> window_dic_ = new List<KeyValuePair<BasePhotoWindow, int>>();
+
+	protected Dictionary<string, Dictionary<string, Dictionary<string, string>>> world_store_data_ = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();
+
+	private static Dictionary<string, string> clipboard_ = new Dictionary<string, string>();
+
+	private int front_depth_;
+
+	private Dictionary<string, Dictionary<string, Dictionary<string, string>>> save_data_;
+}

+ 35 - 0
Assembly-CSharp/BattleScroll.cs

@@ -0,0 +1,35 @@
+using System;
+using UnityEngine;
+
+public class BattleScroll : UIRuleControler
+{
+	public void Awake()
+	{
+	}
+
+	public void Start()
+	{
+		if (this.Image == null)
+		{
+			return;
+		}
+		this.Image.onRender = delegate(Material mat)
+		{
+			mat.mainTexture.wrapMode = TextureWrapMode.Repeat;
+			mat.SetFloat("_UvScaleX", (float)this.RepetitionCount);
+			mat.SetFloat("_TexOffsetX", this.scroll_val_ += this.Speed);
+			mat.SetFloat("_Cutoff", this.m_fCutoff);
+			float value = -this.m_fCutoff + (1f + this.m_fCutoff) * this.m_fStep;
+			mat.SetFloat("_Step", value);
+			mat.SetTexture("_RuleTex", this.m_texRule);
+		};
+	}
+
+	public UI2DSprite Image;
+
+	public float Speed;
+
+	public int RepetitionCount;
+
+	private float scroll_val_;
+}

+ 58 - 0
Assembly-CSharp/BenchMarkScore.cs

@@ -0,0 +1,58 @@
+using System;
+using UnityEngine;
+using wf;
+
+public class BenchMarkScore : PartsMgrBase
+{
+	public static int BenchScore { get; private set; }
+
+	protected override void Start()
+	{
+		base.Start();
+		base.gameObject.SetActive(base.IsActive);
+	}
+
+	private void Update()
+	{
+		if (this.m_CountStart)
+		{
+			this.m_BenchScore++;
+		}
+		this.m_ScoreLabel.text = Utility.ConvertMoneyText(this.m_BenchScore);
+	}
+
+	public override void StartAction()
+	{
+		this.m_CountStart = true;
+	}
+
+	public override void EndAction()
+	{
+		BenchMarkScore.BenchScore = this.m_BenchScore;
+		Func<bool, string> func = (bool condition) => (!condition) ? "Off" : "On";
+		Result_Display.SetResultData("BenchScore", Utility.ConvertMoneyText(this.m_BenchScore), Result_Display.ResultType.String);
+		string str = (!BenchSetting.Setting.IsFullScreen) ? "Window" : "FullScreen";
+		Result_Display.SetResultData("Screen", "スクリーンモード:" + str, Result_Display.ResultType.String);
+		Result_Display.SetResultData("Resolution", string.Concat(new object[]
+		{
+			"画面解像度:",
+			BenchSetting.Setting.ResolutionX,
+			"x",
+			BenchSetting.Setting.ResolutionY
+		}), Result_Display.ResultType.String);
+		Result_Display.SetResultData("Antialiasing", "アンチエイリアス:" + BenchSetting.Setting.Antialiasing.ToString(), Result_Display.ResultType.String);
+		Result_Display.SetResultData("ShadowQuality", "影のクオリティ:" + BenchSetting.Setting.ShadowQuality.ToString(), Result_Display.ResultType.String);
+		Result_Display.SetResultData("TextureQuality", "テクスチャクオリティ:" + BenchSetting.Setting.TextureQuality.ToString(), Result_Display.ResultType.String);
+		Result_Display.SetResultData("Bloom", "ブルーム:" + BenchSetting.Setting.BloomValue.ToString(), Result_Display.ResultType.String);
+		Result_Display.SetResultData("DepthofField", "被写界深度:" + func(BenchSetting.Setting.DepthFieldOn), Result_Display.ResultType.String);
+		Result_Display.SetResultData("CutinProduct", "カットイン演出:" + Appeal_Mgr.GradeTostring(BenchSetting.Setting.CutInGrade), Result_Display.ResultType.String);
+		Result_Display.SetResultData("NoteSePlay", "ノートSE再生:" + func(BenchSetting.Setting.NoteSePlay), Result_Display.ResultType.String);
+	}
+
+	[SerializeField]
+	private UILabel m_ScoreLabel;
+
+	private bool m_CountStart;
+
+	private int m_BenchScore;
+}

+ 198 - 0
Assembly-CSharp/BenchResult.cs

@@ -0,0 +1,198 @@
+using System;
+using System.Collections;
+using System.Linq;
+using UnityEngine;
+
+public class BenchResult : Result_Display
+{
+	private void Awake()
+	{
+		base.Initialize();
+		this.m_ButtonUI.SetActive(true);
+		GameMain.Instance.BgMgr.ChangeBg("LiveStage");
+		this.m_LoopModeFlag = BenchSetting.Setting.IsLoopMode;
+		bool flag = false;
+		this.m_OSLabel.text = SystemInfo.operatingSystem;
+		this.m_CPULabel.text = string.Concat(new object[]
+		{
+			SystemInfo.processorType,
+			" : ",
+			SystemInfo.processorCount,
+			"Core"
+		});
+		this.m_MemoryLabel.text = SystemInfo.systemMemorySize + " MB System Memory ";
+		this.m_GraphicsLabel.text = string.Concat(new object[]
+		{
+			SystemInfo.graphicsDeviceName,
+			" : ",
+			SystemInfo.graphicsMemorySize,
+			"MB : ",
+			SystemInfo.graphicsDeviceType
+		});
+		string text = "benchmark_setting.nei";
+		if (!GameUty.FileSystem.IsExistentFile(text))
+		{
+			NDebug.Assert("表がありません。" + text, false);
+		}
+		using (AFileBase afileBase = GameUty.FileSystem.FileOpen(text))
+		{
+			using (CsvParser csvParser = new CsvParser())
+			{
+				bool condition = csvParser.Open(afileBase);
+				NDebug.Assert(condition, text + "\nopen failed.");
+				for (int i = 1; i < csvParser.max_cell_y; i++)
+				{
+					this.m_BenchNotation[i - 1].BenchScore = csvParser.GetCellAsInteger(1, i);
+				}
+			}
+		}
+		foreach (BenchResult.BenchParam benchParam in this.m_BenchNotation)
+		{
+			benchParam.ScoreImage.SetActive(true);
+			if (benchParam.BenchScore > BenchMarkScore.BenchScore || flag)
+			{
+				benchParam.ScoreImage.SetActive(false);
+			}
+			else
+			{
+				flag = true;
+			}
+		}
+		this.m_FPSLabel.gameObject.SetActive(Application.targetFrameRate != 60);
+		this.m_FPSLabel.text = "TargetFPS:";
+		UILabel fpslabel = this.m_FPSLabel;
+		fpslabel.text += ((Application.targetFrameRate > 0) ? Application.targetFrameRate.ToString() : "No limit");
+		if (!flag)
+		{
+			this.m_BenchNotation.Last<BenchResult.BenchParam>().ScoreImage.SetActive(true);
+		}
+		this.m_LoopSupplement.SetActive(this.m_LoopModeFlag);
+		if (this.m_LoopModeFlag)
+		{
+			base.StartCoroutine(this.LoopWait());
+		}
+	}
+
+	private IEnumerator LoopWait()
+	{
+		while (this.m_LoopModeFlag)
+		{
+			if (!BaseMgr<ConfigMgr>.Instance.IsOpenConfigPanel())
+			{
+				this.m_WaitTimer += Time.deltaTime;
+			}
+			this.m_NextLoopLabel.text = string.Format("次のループまであと:{0}秒", Mathf.Max(this.m_NextLoopWait - Mathf.Floor(this.m_WaitTimer), 0f));
+			if (this.m_WaitTimer >= this.m_NextLoopWait)
+			{
+				this.m_EndLabel = this.m_LoopLabel;
+				base.StartCoroutine(base.FadeOut());
+				yield break;
+			}
+			yield return null;
+		}
+		yield break;
+		yield break;
+	}
+
+	private void FadeEnd()
+	{
+		BenchSetting.SettingApplay();
+		DanceSelect.BenchMarkInit();
+		ShootCutInTex.SetEnemyCutInTex(false);
+		ShootCutInTex.SetPlayerCutInTex();
+		base.ResultEnd();
+	}
+
+	public override void ClickButton()
+	{
+		if (this.m_LoopModeFlag)
+		{
+			if (this.m_WaitTimer >= this.m_NextLoopWait)
+			{
+				return;
+			}
+			this.m_LoopModeFlag = false;
+			BenchSetting.SettingRecet();
+		}
+		base.ClickButton();
+	}
+
+	protected override void ResultEnd()
+	{
+		if (this.m_LoopModeFlag)
+		{
+			GameMain.Instance.MainCamera.FadeOut(0.5f, false, new CameraMain.dgOnCompleteFade(this.FadeEnd), false, default(Color));
+		}
+		else
+		{
+			base.ResultEnd();
+		}
+	}
+
+	protected override void Update()
+	{
+		base.Update();
+	}
+
+	protected override void UIInit(Transform child)
+	{
+	}
+
+	[SerializeField]
+	[Header("システム情報")]
+	private UILabel m_OSLabel;
+
+	[SerializeField]
+	private UILabel m_CPULabel;
+
+	[SerializeField]
+	private UILabel m_MemoryLabel;
+
+	[SerializeField]
+	private UILabel m_GraphicsLabel;
+
+	[SerializeField]
+	[Header("各評価の表記")]
+	private BenchResult.BenchParam[] m_BenchNotation;
+
+	[SerializeField]
+	[Header("次のループに行くまでの待機時間")]
+	private float m_NextLoopWait = 10f;
+
+	[SerializeField]
+	private GameObject m_LoopSupplement;
+
+	[SerializeField]
+	private UILabel m_NextLoopLabel;
+
+	private float m_WaitTimer;
+
+	[SerializeField]
+	[Header("ループモード時に飛ぶラベル")]
+	private string m_LoopLabel = "*ダンススタート";
+
+	[SerializeField]
+	private UILabel m_FPSLabel;
+
+	private bool m_LoopModeFlag;
+
+	private enum BenchEvalue
+	{
+		VeryComfort,
+		Comfort,
+		Normal,
+		Strict,
+		VeryStrict
+	}
+
+	[Serializable]
+	private class BenchParam
+	{
+		public BenchResult.BenchEvalue Evalue;
+
+		public GameObject ScoreImage;
+
+		[HideInInspector]
+		public int BenchScore;
+	}
+}

+ 615 - 0
Assembly-CSharp/BenchSetting.cs

@@ -0,0 +1,615 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using UnityEngine;
+
+public class BenchSetting : MonoBehaviour
+{
+	public static BenchSetting.SettingItems Setting
+	{
+		get
+		{
+			return BenchSetting.m_UseSetting;
+		}
+	}
+
+	private void Start()
+	{
+		Transform transform = GameObject.Find("SystemUI Root").transform.Find("ConfigPanel/OK");
+		this.m_ConfigOK = transform.GetComponent<UIButton>();
+		EventDelegate.Add(this.m_ConfigOK.onClick, new EventDelegate.Callback(this.LoadOrijinData));
+		GameMain.Instance.MainLight.Reset();
+		GameMain.Instance.MainCamera.Reset(CameraMain.CameraType.Target, this.m_CamControll);
+		GameMain.Instance.CharacterMgr.DeactivateCharaAll();
+		for (int i = 0; i < GameMain.Instance.CharacterMgr.GetMaidCount(); i++)
+		{
+			if (GameMain.Instance.CharacterMgr.GetMaid(i))
+			{
+				GameMain.Instance.CharacterMgr.Deactivate(i, false);
+			}
+		}
+		GameMain.Instance.SoundMgr.PlayBGM(this.m_BGM, 0f, true);
+		GameMain.Instance.BgMgr.ChangeBg(this.m_BGname);
+		ShootCutInTex.TextureClear(DanceBattle_Mgr.CharaType.Player);
+		ShootCutInTex.TextureClear(DanceBattle_Mgr.CharaType.Enemy);
+		RhythmAction_Mgr.SetDanceType(RhythmAction_Mgr.DanceType.BenchMark);
+		DanceSelect.BenchMarkInit();
+		this.UIInit();
+		this.LoadOrijinData();
+		Action<string> action = delegate(string file_path)
+		{
+			string text = string.Empty;
+			float num = -1f;
+			FileInfo fileInfo = new FileInfo(file_path);
+			try
+			{
+				using (StreamReader streamReader = new StreamReader(fileInfo.OpenRead(), Encoding.UTF8))
+				{
+					text = streamReader.ReadLine();
+					if (text == "@Bench_Setting")
+					{
+						string text2 = streamReader.ReadLine();
+						if (text2.IndexOf(":") >= 0)
+						{
+							text2 = text2.Split(new char[]
+							{
+								':'
+							})[1];
+						}
+						else
+						{
+							text2 = 1.1f.ToString();
+						}
+						float.TryParse(text2, out num);
+						string json = streamReader.ReadLine();
+						BenchSetting.m_UseSetting = JsonUtility.FromJson<BenchSetting.SettingItems>(json);
+					}
+					streamReader.Close();
+				}
+			}
+			catch (Exception ex)
+			{
+				if (string.IsNullOrEmpty(text) || text != "@Bench_Setting")
+				{
+					Debug.Log("ヘッダー書き込み前のデータです");
+				}
+				else if (num > 0f)
+				{
+					if (num == 1f)
+					{
+						Debug.Log("2017/11/22以前の設定データです");
+					}
+				}
+				else
+				{
+					Debug.LogError("DanceSetting.cs:ファイル読み込みエラー。エラー箇所:" + ex.StackTrace);
+				}
+			}
+			this.UpdateSettingUI(BenchSetting.m_UseSetting);
+		};
+		string fullPath = Path.GetFullPath(".\\benchmark_setting.dat");
+		if (File.Exists(fullPath))
+		{
+			action(fullPath);
+		}
+		else
+		{
+			string fullPath2 = Path.GetFullPath(".\\benchmark_setting.set");
+			if (File.Exists(fullPath2))
+			{
+				action(fullPath2);
+				File.Delete(fullPath2);
+			}
+		}
+		NDebug.Assert(GameMain.Instance.ScriptMgr.adv_kag.tag_backup.ContainsKey("label"), "実行時に飛ぶラベルが未指定です");
+		this.m_StartLabel = GameMain.Instance.ScriptMgr.adv_kag.tag_backup["label"];
+		this.m_LoopCheckmark.SetActive(BenchSetting.m_UseSetting.IsLoopMode);
+		EventDelegate.Add(this.m_LoopModeUI.onClick, new EventDelegate.Callback(this.SwitchLoopMode));
+		GameMain.Instance.MainCamera.FadeIn(0.5f, false, null, false, true, default(Color));
+	}
+
+	private void OnDestroy()
+	{
+		EventDelegate.Remove(this.m_ConfigOK.onClick, new EventDelegate.Callback(this.LoadOrijinData));
+		if (this.m_JumpLabel == this.m_StartLabel)
+		{
+			DanceSetting.Settings.IsDepthOfFieldOn = BenchSetting.m_UseSetting.DepthFieldOn;
+			DanceSetting.Settings.CutInGrade = BenchSetting.m_UseSetting.CutInGrade;
+			DanceSetting.Settings.IsSEPlay = BenchSetting.m_UseSetting.NoteSePlay;
+			Dance_Note.IsAutoPlay = true;
+			ShootCutInTex.SetEnemyCutInTex(false);
+			ShootCutInTex.SetPlayerCutInTex();
+		}
+		else
+		{
+			BenchSetting.SettingRecet();
+		}
+		FileInfo fileInfo = new FileInfo(Path.GetFullPath(".\\benchmark_setting.dat"));
+		using (StreamWriter streamWriter = new StreamWriter(fileInfo.Create()))
+		{
+			streamWriter.WriteLine("@Bench_Setting");
+			streamWriter.WriteLine("Ver:" + 1.1f);
+			streamWriter.WriteLine(JsonUtility.ToJson(BenchSetting.m_UseSetting));
+			streamWriter.Close();
+		}
+	}
+
+	private void SwitchLoopMode()
+	{
+		BenchSetting.m_UseSetting.IsLoopMode = !BenchSetting.m_UseSetting.IsLoopMode;
+		this.m_LoopCheckmark.SetActive(BenchSetting.m_UseSetting.IsLoopMode);
+	}
+
+	private void UIInit()
+	{
+		EventDelegate.Add(this.m_FullScreenOn.OnButton.onClick, new EventDelegate.Callback(this.SetFullScreen));
+		EventDelegate.Add(this.m_FullScreenOn.OffButton.onClick, new EventDelegate.Callback(this.SetFullScreen));
+		foreach (Size<int> size in this.GetResolutions())
+		{
+			this.m_Resolution.items.Add(this.ToResolutionOption(size));
+		}
+		EventDelegate.Add(this.m_Resolution.onChange, new EventDelegate.Callback(this.SetResolution));
+		this.PopupLabelLink(this.m_Resolution);
+		IEnumerator enumerator2 = Enum.GetValues(typeof(CMSystem.AntiAliasType)).GetEnumerator();
+		try
+		{
+			while (enumerator2.MoveNext())
+			{
+				object obj = enumerator2.Current;
+				if ((CMSystem.AntiAliasType)obj != CMSystem.AntiAliasType.MAX)
+				{
+					this.m_Antialiasing.items.Add(obj.ToString());
+				}
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator2 as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+		EventDelegate.Add(this.m_Antialiasing.onChange, new EventDelegate.Callback(this.SetAntialiasing));
+		this.PopupLabelLink(this.m_Antialiasing);
+		IEnumerator enumerator3 = Enum.GetValues(typeof(CMSystem.ShadowQualityType)).GetEnumerator();
+		try
+		{
+			while (enumerator3.MoveNext())
+			{
+				object obj2 = enumerator3.Current;
+				this.m_ShadowQuality.items.Add(obj2.ToString());
+			}
+		}
+		finally
+		{
+			IDisposable disposable2;
+			if ((disposable2 = (enumerator3 as IDisposable)) != null)
+			{
+				disposable2.Dispose();
+			}
+		}
+		EventDelegate.Add(this.m_ShadowQuality.onChange, new EventDelegate.Callback(this.SetShadowQuality));
+		this.PopupLabelLink(this.m_ShadowQuality);
+		IEnumerator enumerator4 = Enum.GetValues(typeof(CMSystem.TextureQualityType)).GetEnumerator();
+		try
+		{
+			while (enumerator4.MoveNext())
+			{
+				object obj3 = enumerator4.Current;
+				this.m_TextureQuality.items.Add(obj3.ToString());
+			}
+		}
+		finally
+		{
+			IDisposable disposable3;
+			if ((disposable3 = (enumerator4 as IDisposable)) != null)
+			{
+				disposable3.Dispose();
+			}
+		}
+		EventDelegate.Add(this.m_TextureQuality.onChange, new EventDelegate.Callback(this.SetTextureQuality));
+		this.PopupLabelLink(this.m_TextureQuality);
+		EventDelegate.Add(this.m_BloomValue.onChange, new EventDelegate.Callback(this.SetBloomValue));
+		EventDelegate.Add(this.m_DepthFieldOn.OnButton.onClick, new EventDelegate.Callback(this.SetDepthField));
+		EventDelegate.Add(this.m_DepthFieldOn.OffButton.onClick, new EventDelegate.Callback(this.SetDepthField));
+		IEnumerator enumerator5 = Enum.GetValues(typeof(Appeal_Mgr.CutInGrade)).GetEnumerator();
+		try
+		{
+			while (enumerator5.MoveNext())
+			{
+				object obj4 = enumerator5.Current;
+				Appeal_Mgr.CutInGrade grade = (Appeal_Mgr.CutInGrade)obj4;
+				this.m_CutInGrade.items.Add(Appeal_Mgr.GradeTostring(grade));
+			}
+		}
+		finally
+		{
+			IDisposable disposable4;
+			if ((disposable4 = (enumerator5 as IDisposable)) != null)
+			{
+				disposable4.Dispose();
+			}
+		}
+		EventDelegate.Add(this.m_CutInGrade.onChange, new EventDelegate.Callback(this.SetCutInGrade));
+		this.PopupLabelLink(this.m_CutInGrade);
+		EventDelegate.Add(this.m_NoteSePlay.OnButton.onClick, new EventDelegate.Callback(this.SetNoteSEPlay));
+		EventDelegate.Add(this.m_NoteSePlay.OffButton.onClick, new EventDelegate.Callback(this.SetNoteSEPlay));
+		EventDelegate.Add(this.m_StartButton.onClick, new EventDelegate.Callback(this.BenchStart));
+		EventDelegate.Add(this.m_BackButton.onClick, new EventDelegate.Callback(this.TitleBack));
+	}
+
+	private void BenchStart()
+	{
+		this.m_JumpNextScene = true;
+		UICamera.InputEnable = false;
+		this.m_JumpLabel = this.m_StartLabel;
+		GameMain.Instance.MainCamera.FadeOut(0.5f, false, delegate
+		{
+			UICamera.InputEnable = true;
+			GameMain.Instance.ScriptMgr.adv_kag.JumpLabel(this.m_JumpLabel);
+			GameMain.Instance.ScriptMgr.adv_kag.Exec();
+		}, true, default(Color));
+	}
+
+	private void TitleBack()
+	{
+		this.m_JumpNextScene = true;
+		UICamera.InputEnable = false;
+		GameMain.Instance.MainCamera.FadeOut(0.5f, false, delegate
+		{
+			UICamera.InputEnable = true;
+			GameMain.Instance.LoadScene("SceneToTitle");
+		}, true, default(Color));
+	}
+
+	private void PopupLabelLink(UIPopupList popup)
+	{
+		if (!this.m_PopupLabelPair.ContainsKey(popup))
+		{
+			this.m_PopupLabelPair.Add(popup, popup.transform.Find("Label").GetComponent<UILabel>());
+		}
+	}
+
+	private List<Size<int>> GetResolutions()
+	{
+		List<Size<int>> screenSizeList = GameMain.Instance.CMSystem.GetScreenSizeList();
+		Size<int> screenSizeNow = GameMain.Instance.CMSystem.GetScreenSizeNow();
+		if (!screenSizeList.Contains(screenSizeNow))
+		{
+			screenSizeList.Add(screenSizeNow);
+		}
+		return screenSizeList;
+	}
+
+	private string ToResolutionOption(Size<int> size)
+	{
+		return string.Format("{0}x{1}", size.width, size.height);
+	}
+
+	private void UpdateSettingUI(BenchSetting.SettingItems setting_data)
+	{
+		BenchSetting.m_UseSetting.IsFullScreen = setting_data.IsFullScreen;
+		this.SwitchUIActive(this.m_FullScreenOn, setting_data.IsFullScreen);
+		this.m_Resolution.value = this.ToResolutionOption(new Size<int>(setting_data.ResolutionX, setting_data.ResolutionY));
+		this.m_Antialiasing.value = setting_data.Antialiasing.ToString();
+		this.m_ShadowQuality.value = setting_data.ShadowQuality.ToString();
+		this.m_TextureQuality.value = setting_data.TextureQuality.ToString();
+		this.m_BloomValue.value = (float)setting_data.BloomValue / 100f;
+		BenchSetting.m_UseSetting.DepthFieldOn = setting_data.DepthFieldOn;
+		this.SwitchUIActive(this.m_DepthFieldOn, setting_data.DepthFieldOn);
+		this.m_CutInGrade.value = Appeal_Mgr.GradeTostring(setting_data.CutInGrade);
+		BenchSetting.m_UseSetting.NoteSePlay = setting_data.NoteSePlay;
+		this.SwitchUIActive(this.m_NoteSePlay, setting_data.NoteSePlay);
+	}
+
+	private void LoadOrijinData()
+	{
+		BenchSetting.OrijinSetting.IsFullScreen = GameMain.Instance.CMSystem.FullScreen;
+		BenchSetting.OrijinSetting.ResolutionX = GameMain.Instance.CMSystem.GetScreenSizeNow().width;
+		BenchSetting.OrijinSetting.ResolutionY = GameMain.Instance.CMSystem.GetScreenSizeNow().height;
+		BenchSetting.OrijinSetting.Antialiasing = GameMain.Instance.CMSystem.Antialias;
+		BenchSetting.OrijinSetting.ShadowQuality = GameMain.Instance.CMSystem.ShadowQuality;
+		BenchSetting.OrijinSetting.TextureQuality = GameMain.Instance.CMSystem.TextureQuality;
+		BenchSetting.OrijinSetting.BloomValue = GameMain.Instance.CMSystem.BloomValue;
+		BenchSetting.OrijinSetting.DepthFieldOn = DanceSetting.Settings.IsDepthOfFieldOn;
+		BenchSetting.OrijinSetting.CutInGrade = DanceSetting.Settings.CutInGrade;
+		BenchSetting.OrijinSetting.NoteSePlay = DanceSetting.Settings.IsSEPlay;
+		this.UpdateSettingUI(BenchSetting.OrijinSetting);
+	}
+
+	private void SwitchUIActive(BenchSetting.Buttonpair pair)
+	{
+		if (UIButton.current == pair.OnButton)
+		{
+			this.SwitchUIActive(pair.OnButton, pair.OffButton);
+		}
+		else if (UIButton.current == pair.OffButton)
+		{
+			this.SwitchUIActive(pair.OffButton, pair.OnButton);
+		}
+	}
+
+	private void SwitchUIActive(BenchSetting.Buttonpair pair, bool active_on)
+	{
+		this.SwitchUIActive(pair.OnButton, pair.OffButton, active_on);
+	}
+
+	private void SwitchUIActive(UIButton active, UIButton diactive)
+	{
+		active.defaultColor = this.m_ButtonActive;
+		diactive.defaultColor = this.m_ButtonDiactive;
+	}
+
+	private void SwitchUIActive(UIButton active, UIButton diactive, bool active_on)
+	{
+		if (active_on)
+		{
+			this.SwitchUIActive(active, diactive);
+		}
+		else
+		{
+			this.SwitchUIActive(diactive, active);
+		}
+	}
+
+	private void SetFullScreen()
+	{
+		if (UIButton.current != this.m_FullScreenOn.OnButton && UIButton.current != this.m_FullScreenOn.OffButton)
+		{
+			return;
+		}
+		BenchSetting.m_UseSetting.IsFullScreen = (UIButton.current == this.m_FullScreenOn.OnButton);
+		this.SwitchUIActive(this.m_FullScreenOn);
+		GameMain.Instance.CMSystem.FullScreen = BenchSetting.m_UseSetting.IsFullScreen;
+		GameMain.Instance.CMSystem.ConfigScreenApply();
+	}
+
+	private void SetResolution()
+	{
+		if (UIPopupList.current != this.m_Resolution)
+		{
+			return;
+		}
+		string[] array = UIPopupList.current.value.Split(new char[]
+		{
+			'x'
+		});
+		BenchSetting.m_UseSetting.ResolutionX = int.Parse(array[0]);
+		BenchSetting.m_UseSetting.ResolutionY = int.Parse(array[1]);
+		this.m_PopupLabelPair[UIPopupList.current].text = UIPopupList.current.value;
+		GameMain.Instance.CMSystem.SetScreenSize(new Size<int>(BenchSetting.m_UseSetting.ResolutionX, BenchSetting.m_UseSetting.ResolutionY));
+		GameMain.Instance.CMSystem.ConfigScreenApply();
+	}
+
+	private void SetAntialiasing()
+	{
+		if (UIPopupList.current != this.m_Antialiasing)
+		{
+			return;
+		}
+		BenchSetting.m_UseSetting.Antialiasing = (CMSystem.AntiAliasType)Enum.Parse(typeof(CMSystem.AntiAliasType), UIPopupList.current.value);
+		this.m_PopupLabelPair[UIPopupList.current].text = UIPopupList.current.value;
+		GameMain.Instance.CMSystem.Antialias = BenchSetting.m_UseSetting.Antialiasing;
+		GameMain.Instance.CMSystem.ConfigScreenApply();
+	}
+
+	private void SetShadowQuality()
+	{
+		if (UIPopupList.current != this.m_ShadowQuality)
+		{
+			return;
+		}
+		BenchSetting.m_UseSetting.ShadowQuality = (CMSystem.ShadowQualityType)Enum.Parse(typeof(CMSystem.ShadowQualityType), UIPopupList.current.value);
+		this.m_PopupLabelPair[UIPopupList.current].text = UIPopupList.current.value;
+		GameMain.Instance.CMSystem.ShadowQuality = BenchSetting.m_UseSetting.ShadowQuality;
+		GameMain.Instance.CMSystem.ConfigScreenApply();
+	}
+
+	private void SetTextureQuality()
+	{
+		if (UIPopupList.current != this.m_TextureQuality)
+		{
+			return;
+		}
+		BenchSetting.m_UseSetting.TextureQuality = (CMSystem.TextureQualityType)Enum.Parse(typeof(CMSystem.TextureQualityType), UIPopupList.current.value);
+		this.m_PopupLabelPair[UIPopupList.current].text = UIPopupList.current.value;
+		GameMain.Instance.CMSystem.TextureQuality = BenchSetting.m_UseSetting.TextureQuality;
+		GameMain.Instance.CMSystem.ConfigScreenApply();
+	}
+
+	private void SetBloomValue()
+	{
+		if (UIProgressBar.current != this.m_BloomValue)
+		{
+			return;
+		}
+		BenchSetting.m_UseSetting.BloomValue = Mathf.FloorToInt(UIProgressBar.current.value * 100f);
+		this.m_BloomFacter.text = BenchSetting.m_UseSetting.BloomValue.ToString();
+		GameMain.Instance.CMSystem.BloomValue = BenchSetting.m_UseSetting.BloomValue;
+		GameMain.Instance.CMSystem.ConfigScreenApply();
+	}
+
+	private void SetDepthField()
+	{
+		if (UIButton.current != this.m_DepthFieldOn.OnButton && UIButton.current != this.m_DepthFieldOn.OffButton)
+		{
+			return;
+		}
+		BenchSetting.m_UseSetting.DepthFieldOn = (UIButton.current == this.m_DepthFieldOn.OnButton);
+		this.SwitchUIActive(this.m_DepthFieldOn);
+	}
+
+	private void SetCutInGrade()
+	{
+		if (UIPopupList.current != this.m_CutInGrade)
+		{
+			return;
+		}
+		BenchSetting.m_UseSetting.CutInGrade = Appeal_Mgr.ParseGrade(UIPopupList.current.value);
+		this.m_PopupLabelPair[UIPopupList.current].text = UIPopupList.current.value;
+	}
+
+	private void SetNoteSEPlay()
+	{
+		if (UIButton.current != this.m_NoteSePlay.OnButton && UIButton.current != this.m_NoteSePlay.OffButton)
+		{
+			return;
+		}
+		BenchSetting.m_UseSetting.NoteSePlay = (UIButton.current == this.m_NoteSePlay.OnButton);
+		this.SwitchUIActive(this.m_NoteSePlay);
+	}
+
+	public static void SettingRecet()
+	{
+		GameMain.Instance.CMSystem.FullScreen = BenchSetting.OrijinSetting.IsFullScreen;
+		GameMain.Instance.CMSystem.SetScreenSize(new Size<int>(BenchSetting.OrijinSetting.ResolutionX, BenchSetting.OrijinSetting.ResolutionY));
+		GameMain.Instance.CMSystem.Antialias = BenchSetting.OrijinSetting.Antialiasing;
+		GameMain.Instance.CMSystem.ShadowQuality = BenchSetting.OrijinSetting.ShadowQuality;
+		GameMain.Instance.CMSystem.TextureQuality = BenchSetting.OrijinSetting.TextureQuality;
+		GameMain.Instance.CMSystem.BloomValue = BenchSetting.OrijinSetting.BloomValue;
+		GameMain.Instance.CMSystem.ConfigScreenApply();
+		DanceSetting.Settings.IsDepthOfFieldOn = BenchSetting.OrijinSetting.DepthFieldOn;
+		DanceSetting.Settings.CutInGrade = BenchSetting.OrijinSetting.CutInGrade;
+		DanceSetting.Settings.IsSEPlay = BenchSetting.OrijinSetting.NoteSePlay;
+		Dance_Note.IsAutoPlay = false;
+	}
+
+	public static void SettingApplay()
+	{
+		GameMain.Instance.CMSystem.FullScreen = BenchSetting.m_UseSetting.IsFullScreen;
+		GameMain.Instance.CMSystem.SetScreenSize(new Size<int>(BenchSetting.m_UseSetting.ResolutionX, BenchSetting.m_UseSetting.ResolutionY));
+		GameMain.Instance.CMSystem.Antialias = BenchSetting.m_UseSetting.Antialiasing;
+		GameMain.Instance.CMSystem.ShadowQuality = BenchSetting.m_UseSetting.ShadowQuality;
+		GameMain.Instance.CMSystem.TextureQuality = BenchSetting.m_UseSetting.TextureQuality;
+		GameMain.Instance.CMSystem.BloomValue = BenchSetting.m_UseSetting.BloomValue;
+		GameMain.Instance.CMSystem.ConfigScreenApply();
+		DanceSetting.Settings.IsDepthOfFieldOn = BenchSetting.m_UseSetting.DepthFieldOn;
+		DanceSetting.Settings.CutInGrade = BenchSetting.m_UseSetting.CutInGrade;
+		DanceSetting.Settings.IsSEPlay = BenchSetting.m_UseSetting.NoteSePlay;
+		Dance_Note.IsAutoPlay = true;
+	}
+
+	private const string m_SettingHeader = "@Bench_Setting";
+
+	private const float m_SettingVer = 1.1f;
+
+	[SerializeField]
+	private bool m_CamControll = true;
+
+	[SerializeField]
+	private string m_BGM = "BGM020.ogg";
+
+	[SerializeField]
+	private string m_BGname = "LiveStage";
+
+	[SerializeField]
+	private Color m_ButtonActive = Color.white;
+
+	[SerializeField]
+	private Color m_ButtonDiactive = Color.white;
+
+	[SerializeField]
+	[Header("スクリーンモード")]
+	private BenchSetting.Buttonpair m_FullScreenOn;
+
+	[SerializeField]
+	[Header("画面解像度")]
+	private UIPopupList m_Resolution;
+
+	[SerializeField]
+	[Header("アンチエイリアス")]
+	private UIPopupList m_Antialiasing;
+
+	[SerializeField]
+	[Header("影のクオリティ")]
+	private UIPopupList m_ShadowQuality;
+
+	[SerializeField]
+	[Header("テクスチャクオリティ")]
+	private UIPopupList m_TextureQuality;
+
+	[SerializeField]
+	[Header("ブルーム")]
+	private UISlider m_BloomValue;
+
+	[SerializeField]
+	private UILabel m_BloomFacter;
+
+	[SerializeField]
+	[Header("被写界深度")]
+	private BenchSetting.Buttonpair m_DepthFieldOn;
+
+	[SerializeField]
+	[Header("カットイン演出段階")]
+	private UIPopupList m_CutInGrade;
+
+	[SerializeField]
+	[Header("ノートSE再生")]
+	private BenchSetting.Buttonpair m_NoteSePlay;
+
+	[SerializeField]
+	[Header("開始ボタン")]
+	private UIButton m_StartButton;
+
+	[SerializeField]
+	[Header("戻るボタン")]
+	private UIButton m_BackButton;
+
+	[SerializeField]
+	[Header("ループモード用UI")]
+	private UIButton m_LoopModeUI;
+
+	[SerializeField]
+	private GameObject m_LoopCheckmark;
+
+	private static BenchSetting.SettingItems m_UseSetting = new BenchSetting.SettingItems();
+
+	private Dictionary<UIPopupList, UILabel> m_PopupLabelPair = new Dictionary<UIPopupList, UILabel>();
+
+	private string m_JumpLabel = string.Empty;
+
+	private string m_StartLabel = string.Empty;
+
+	private static BenchSetting.SettingItems OrijinSetting = new BenchSetting.SettingItems();
+
+	private UIButton m_ConfigOK;
+
+	private bool m_JumpNextScene;
+
+	[Serializable]
+	private class Buttonpair
+	{
+		public UIButton OnButton;
+
+		public UIButton OffButton;
+	}
+
+	[Serializable]
+	public class SettingItems
+	{
+		public bool IsFullScreen;
+
+		public int ResolutionX;
+
+		public int ResolutionY;
+
+		public CMSystem.AntiAliasType Antialiasing;
+
+		public CMSystem.ShadowQualityType ShadowQuality;
+
+		public CMSystem.TextureQualityType TextureQuality;
+
+		public int BloomValue;
+
+		public bool DepthFieldOn;
+
+		public Appeal_Mgr.CutInGrade CutInGrade;
+
+		public bool NoteSePlay;
+
+		public bool IsLoopMode;
+	}
+}

+ 197 - 0
Assembly-CSharp/BetSetUI.cs

@@ -0,0 +1,197 @@
+using System;
+using UnityEngine;
+using UnityEngine.UI;
+using wf;
+
+public class BetSetUI : MonoBehaviour
+{
+	public bool IsDoBet { get; private set; }
+
+	public MoneySetttingUI MoneySetting
+	{
+		get
+		{
+			return this.m_MoneySetting;
+		}
+	}
+
+	public bool Active
+	{
+		get
+		{
+			return base.gameObject.activeSelf;
+		}
+	}
+
+	public long BetMoneyMax { get; private set; }
+
+	public static BetSetUI Instance { get; private set; }
+
+	private void Awake()
+	{
+		BetSetUI.Instance = this;
+		this.m_MyCanvas = base.GetComponent<CanvasGroup>();
+		MoneySetttingUI moneySetting = this.m_MoneySetting;
+		moneySetting.ValueUpdateAction = (MoneySetttingUI.ValueUpdateMethod)Delegate.Combine(moneySetting.ValueUpdateAction, new MoneySetttingUI.ValueUpdateMethod(this.UpdateUIState));
+		this.BetMoneyMax = this.m_MoneySetting.MaxValue;
+		this.m_DialogCheck.isOn = (GameMain.Instance.CharacterMgr.status.GetFlag("ベット額警告非表示") == 1);
+		this.m_MoneySetting.SetMoneyUI(this.m_MoneySetting.MinValue, true);
+		base.gameObject.SetActive(false);
+	}
+
+	private void Start()
+	{
+		ExChangeUI instance = ExChangeUI.Instance;
+		instance.FadeInStartAction = (Action)Delegate.Combine(instance.FadeInStartAction, new Action(this.FadeOut));
+		ExChangeUI instance2 = ExChangeUI.Instance;
+		instance2.FadeOutEndAction = (Action)Delegate.Combine(instance2.FadeOutEndAction, new Action(this.UpdateUIState));
+	}
+
+	private void DoBet()
+	{
+		UIStates.Instance.SetEnabled(false);
+		BjVoiceMgr.Instance.PlayVoice("ブラックジャック開始", null, 0f);
+		BjMotionControl.Instance.PlayMotion("*頷く", new Action(this.DealStart), true, false);
+	}
+
+	private void DealStart()
+	{
+		BjPlayer.Instance.SetBet(this.m_MoneySetting.MoneyValue);
+		ChipManager instance = ChipManager.Instance;
+		instance.StackEndCallBack = (Action)Delegate.Combine(instance.StackEndCallBack, new Action(BlackjackGame.Instance.Deal));
+		ChipManager.Instance.UpdateStacks();
+	}
+
+	private void BetFadeOut()
+	{
+		GameMain.Instance.SysDlg.Close();
+		UIStates.Instance.SetEnabled(false);
+		this.IsDoBet = true;
+		base.StartCoroutine(KasaiUtility.FadeCoroutine(this.m_MyCanvas, true, this.m_FadeTime, new Action(this.DoBet), true, true));
+	}
+
+	public void SetBetMax()
+	{
+		long num = wf.Math.RoundMinMax(GameMain.Instance.CharacterMgr.status.casinoCoin, this.m_MoneySetting.MinValue, this.BetMoneyMax);
+		num /= (long)Mathf.Pow(10f, (float)this.m_MoneySetting.DisableDigit);
+		num *= (long)Mathf.Pow(10f, (float)this.m_MoneySetting.DisableDigit);
+		this.m_MoneySetting.SetMaxValue(num);
+	}
+
+	public void StateRecet()
+	{
+		this.IsDoBet = false;
+	}
+
+	public void UpdateUIState()
+	{
+		this.m_CreditText.text = Translations.Instance.CREDITS + (GameMain.Instance.CharacterMgr.status.casinoCoin - this.m_MoneySetting.MoneyValue);
+	}
+
+	public void PushOKButton()
+	{
+		if (GameMain.Instance.CharacterMgr.status.GetFlag("ベット額警告非表示") == 0)
+		{
+			bool flag = this.m_MoneySetting.MoneyValue >= (long)this.m_WarningMoney;
+			string warning_message = string.Format("{0:#,##0}枚以上賭けようとしています。\n本当に賭けますか?", this.m_WarningMoney);
+			bool flag2 = this.m_MoneySetting.MoneyValue * 2L > GameMain.Instance.CharacterMgr.status.casinoCoin;
+			string f_strMsg = "現在の賭け額と所持コインの枚数では\nダブルダウン・スプリットは行えません\n本当に賭けますか?";
+			if (flag2)
+			{
+				if (flag)
+				{
+					SystemDialog.OnClick f_dgOk = delegate
+					{
+						GameMain.Instance.SysDlg.Show(warning_message, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BetFadeOut), null);
+					};
+					GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK_CANCEL, f_dgOk, null);
+				}
+				else
+				{
+					GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BetFadeOut), null);
+				}
+			}
+			else if (flag)
+			{
+				GameMain.Instance.SysDlg.Show(warning_message, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BetFadeOut), null);
+			}
+			else
+			{
+				this.BetFadeOut();
+			}
+		}
+		else
+		{
+			this.BetFadeOut();
+		}
+	}
+
+	public void PushCancelButton()
+	{
+		base.StartCoroutine(KasaiUtility.FadeCoroutine(this.m_MyCanvas, true, this.m_FadeTime, this.CancelCall, true, true));
+	}
+
+	public void PushResetButton()
+	{
+		this.m_MoneySetting.SetMoneyUI(this.m_MoneySetting.MinValue, false);
+	}
+
+	public void PushMaxButton()
+	{
+		this.m_MoneySetting.SetMoneyUI(this.m_MoneySetting.MaxValue, false);
+	}
+
+	public void SetDialogFlag()
+	{
+		if (this.m_DialogCheck.isOn)
+		{
+			GameMain.Instance.CharacterMgr.status.SetFlag("ベット額警告非表示", 1);
+		}
+		else
+		{
+			GameMain.Instance.CharacterMgr.status.SetFlag("ベット額警告非表示", 0);
+		}
+	}
+
+	public void FadeIn()
+	{
+		base.gameObject.SetActive(true);
+		base.StartCoroutine(KasaiUtility.FadeCoroutine(this.m_MyCanvas, false, this.m_FadeTime, null, true, true));
+	}
+
+	public void FadeOut()
+	{
+		if (!base.gameObject.activeSelf)
+		{
+			return;
+		}
+		base.StartCoroutine(KasaiUtility.FadeCoroutine(this.m_MyCanvas, true, this.m_FadeTime, null, true, true));
+	}
+
+	private CanvasGroup m_MyCanvas;
+
+	[SerializeField]
+	private float m_FadeTime = 0.5f;
+
+	[SerializeField]
+	[Header("この金額以上賭けたら警告")]
+	private int m_WarningMoney = 10000;
+
+	[SerializeField]
+	[HideInInspector]
+	private Text m_CreditText;
+
+	[SerializeField]
+	[HideInInspector]
+	private MoneySetttingUI m_MoneySetting;
+
+	[SerializeField]
+	[HideInInspector]
+	private Button m_OKButton;
+
+	[SerializeField]
+	[HideInInspector]
+	private Toggle m_DialogCheck;
+
+	public Action CancelCall;
+}

+ 222 - 0
Assembly-CSharp/BetterList.cs

@@ -0,0 +1,222 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using UnityEngine;
+
+public class BetterList<T>
+{
+	public IEnumerator<T> GetEnumerator()
+	{
+		if (this.buffer != null)
+		{
+			for (int i = 0; i < this.size; i++)
+			{
+				yield return this.buffer[i];
+			}
+		}
+		yield break;
+	}
+
+	[DebuggerHidden]
+	public T this[int i]
+	{
+		get
+		{
+			return this.buffer[i];
+		}
+		set
+		{
+			this.buffer[i] = value;
+		}
+	}
+
+	private void AllocateMore()
+	{
+		T[] array = (this.buffer == null) ? new T[32] : new T[Mathf.Max(this.buffer.Length << 1, 32)];
+		if (this.buffer != null && this.size > 0)
+		{
+			this.buffer.CopyTo(array, 0);
+		}
+		this.buffer = array;
+	}
+
+	private void Trim()
+	{
+		if (this.size > 0)
+		{
+			if (this.size < this.buffer.Length)
+			{
+				T[] array = new T[this.size];
+				for (int i = 0; i < this.size; i++)
+				{
+					array[i] = this.buffer[i];
+				}
+				this.buffer = array;
+			}
+		}
+		else
+		{
+			this.buffer = null;
+		}
+	}
+
+	public void Clear()
+	{
+		this.size = 0;
+	}
+
+	public void Release()
+	{
+		this.size = 0;
+		this.buffer = null;
+	}
+
+	public void Add(T item)
+	{
+		if (this.buffer == null || this.size == this.buffer.Length)
+		{
+			this.AllocateMore();
+		}
+		this.buffer[this.size++] = item;
+	}
+
+	public void Insert(int index, T item)
+	{
+		if (this.buffer == null || this.size == this.buffer.Length)
+		{
+			this.AllocateMore();
+		}
+		if (index > -1 && index < this.size)
+		{
+			for (int i = this.size; i > index; i--)
+			{
+				this.buffer[i] = this.buffer[i - 1];
+			}
+			this.buffer[index] = item;
+			this.size++;
+		}
+		else
+		{
+			this.Add(item);
+		}
+	}
+
+	public bool Contains(T item)
+	{
+		if (this.buffer == null)
+		{
+			return false;
+		}
+		for (int i = 0; i < this.size; i++)
+		{
+			if (this.buffer[i].Equals(item))
+			{
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public int IndexOf(T item)
+	{
+		if (this.buffer == null)
+		{
+			return -1;
+		}
+		for (int i = 0; i < this.size; i++)
+		{
+			if (this.buffer[i].Equals(item))
+			{
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	public bool Remove(T item)
+	{
+		if (this.buffer != null)
+		{
+			EqualityComparer<T> @default = EqualityComparer<T>.Default;
+			for (int i = 0; i < this.size; i++)
+			{
+				if (@default.Equals(this.buffer[i], item))
+				{
+					this.size--;
+					this.buffer[i] = default(T);
+					for (int j = i; j < this.size; j++)
+					{
+						this.buffer[j] = this.buffer[j + 1];
+					}
+					this.buffer[this.size] = default(T);
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	public void RemoveAt(int index)
+	{
+		if (this.buffer != null && index > -1 && index < this.size)
+		{
+			this.size--;
+			this.buffer[index] = default(T);
+			for (int i = index; i < this.size; i++)
+			{
+				this.buffer[i] = this.buffer[i + 1];
+			}
+			this.buffer[this.size] = default(T);
+		}
+	}
+
+	public T Pop()
+	{
+		if (this.buffer != null && this.size != 0)
+		{
+			T result = this.buffer[--this.size];
+			this.buffer[this.size] = default(T);
+			return result;
+		}
+		return default(T);
+	}
+
+	public T[] ToArray()
+	{
+		this.Trim();
+		return this.buffer;
+	}
+
+	[DebuggerHidden]
+	[DebuggerStepThrough]
+	public void Sort(BetterList<T>.CompareFunc comparer)
+	{
+		int num = 0;
+		int num2 = this.size - 1;
+		bool flag = true;
+		while (flag)
+		{
+			flag = false;
+			for (int i = num; i < num2; i++)
+			{
+				if (comparer(this.buffer[i], this.buffer[i + 1]) > 0)
+				{
+					T t = this.buffer[i];
+					this.buffer[i] = this.buffer[i + 1];
+					this.buffer[i + 1] = t;
+					flag = true;
+				}
+				else if (!flag)
+				{
+					num = ((i != 0) ? (i - 1) : 0);
+				}
+			}
+		}
+	}
+
+	public T[] buffer;
+
+	public int size;
+
+	public delegate int CompareFunc(T left, T right);
+}

+ 705 - 0
Assembly-CSharp/BgMgr.cs

@@ -0,0 +1,705 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using MyRoomCustom;
+using UnityEngine;
+using UnityEngine.Rendering;
+
+public class BgMgr : MonoBehaviour
+{
+	public GameObject Parent
+	{
+		get
+		{
+			return this.m_goParent;
+		}
+	}
+
+	public GameObject BgObject
+	{
+		get
+		{
+			return this.m_goBg;
+		}
+	}
+
+	private void Awake()
+	{
+		this.m_goParent = UTY.GetChildObject(base.gameObject, "BG", false);
+		NDebug.Assert(this.m_goParent != null, "__GameMain__/BG が見つかりません");
+	}
+
+	public void OnDestroy()
+	{
+		foreach (KeyValuePair<string, BgMgr.AssetBundleObj> keyValuePair in this.asset_bundle_dic)
+		{
+			keyValuePair.Value.ab.Unload(true);
+		}
+		this.asset_bundle_dic.Clear();
+	}
+
+	public void ChangeBg(string f_strPrefubName)
+	{
+		if (!string.IsNullOrEmpty(f_strPrefubName) && 0 <= f_strPrefubName.IndexOf("?"))
+		{
+			f_strPrefubName = ScriptManager.ReplacePersonal(GameMain.Instance.CharacterMgr.GetMaid(0), f_strPrefubName);
+		}
+		base.StopCoroutine("CoWaitMovePrefabToChara");
+		this.SetPos(Vector3.zero);
+		this.SetRot(Vector3.zero);
+		this.DelPrefabFromBgAll();
+		if (this.m_goBg != null)
+		{
+			UnityEngine.Object.Destroy(this.m_goBg);
+			DeskManager.OnChangeBG(string.Empty, null);
+			this.m_goBg = null;
+			this.SaveOvrDDPos(true);
+		}
+		this.m_strBGName = string.Empty;
+		if (!string.IsNullOrEmpty(f_strPrefubName))
+		{
+			UnityEngine.Object @object = this.CreateAssetBundle(f_strPrefubName);
+			if (@object == null)
+			{
+				@object = Resources.Load("BG/" + f_strPrefubName);
+				if (@object == null)
+				{
+					@object = Resources.Load("BG/2_0/" + f_strPrefubName);
+				}
+			}
+			if (@object != null)
+			{
+				this.m_strBGName = f_strPrefubName;
+				this.m_goBg = (UnityEngine.Object.Instantiate(@object) as GameObject);
+				MeshRenderer[] componentsInChildren = this.m_goBg.GetComponentsInChildren<MeshRenderer>();
+				for (int i = 0; i < componentsInChildren.Length; i++)
+				{
+					if (componentsInChildren[i] != null && componentsInChildren[i].gameObject.name.ToLower().IndexOf("castshadow") < 0)
+					{
+						componentsInChildren[i].shadowCastingMode = ShadowCastingMode.Off;
+					}
+				}
+				this.m_goBg.transform.SetParent(this.m_goParent.transform, false);
+				if (GameMain.Instance.VRMode && Application.isPlaying && this.AddHitToBg(f_strPrefubName + "_hit") == null && this.AddPrefabToBg(f_strPrefubName + "_Hit", f_strPrefubName + "_Hit", null, Vector3.zero, Vector3.zero) == null)
+				{
+					this.AddPrefabToBg(f_strPrefubName + "_hit", f_strPrefubName + "_hit", null, Vector3.zero, Vector3.zero);
+				}
+				this.ShowOvrDD(false);
+				DeskManager.OnChangeBG(f_strPrefubName.ToLower(), this.m_goBg);
+			}
+			else
+			{
+				Debug.LogError("BGプレハブが見つかりませんでした。BG/" + f_strPrefubName);
+			}
+		}
+		Resources.UnloadUnusedAssets();
+	}
+
+	public void ChangeBgMyRoom(string guid)
+	{
+		base.StopCoroutine("CoWaitMovePrefabToChara");
+		this.SetPos(Vector3.zero);
+		this.SetRot(Vector3.zero);
+		this.DelPrefabFromBgAll();
+		if (this.m_goBg != null)
+		{
+			UnityEngine.Object.Destroy(this.m_goBg);
+			DeskManager.OnChangeBG(string.Empty, null);
+			this.m_goBg = null;
+			this.SaveOvrDDPos(true);
+		}
+		this.m_strBGName = string.Empty;
+		if (!string.IsNullOrEmpty(guid) && CreativeRoomManager.IsExistSaveData(guid))
+		{
+			this.m_strBGName = "マイルーム:" + guid;
+			this.m_goBg = CreativeRoomManager.InstantiateRoom(guid);
+			MeshRenderer[] componentsInChildren = this.m_goBg.GetComponentsInChildren<MeshRenderer>();
+			for (int i = 0; i < componentsInChildren.Length; i++)
+			{
+				if (componentsInChildren[i] != null && componentsInChildren[i].gameObject.name.ToLower().IndexOf("castshadow") < 0)
+				{
+					componentsInChildren[i].shadowCastingMode = ShadowCastingMode.Off;
+				}
+			}
+			this.m_goBg.transform.SetParent(this.m_goParent.transform, false);
+			DeskManager.OnChangeBG(this.m_strBGName.ToLower(), this.m_goBg);
+		}
+		Resources.UnloadUnusedAssets();
+	}
+
+	public GameObject CreateAssetBundle(string name)
+	{
+		if (string.IsNullOrEmpty(name))
+		{
+			return null;
+		}
+		name = name.ToLower();
+		bool flag = false;
+		string text = string.Empty;
+		AFileSystemBase afileSystemBase = null;
+		if (GameUty.BgFiles.ContainsKey(name + ".asset_bg"))
+		{
+			flag = true;
+			text = name + ".asset_bg";
+			afileSystemBase = GameUty.BgFiles[name + ".asset_bg"];
+		}
+		UnityEngine.Object @object = null;
+		if (flag && !string.IsNullOrEmpty(text))
+		{
+			if (!this.asset_bundle_dic.ContainsKey(text))
+			{
+				using (AFileBase afileBase = afileSystemBase.FileOpen(text))
+				{
+					byte[] binary = afileBase.ReadAll();
+					AssetBundle assetBundle = AssetBundle.LoadFromMemory(binary);
+					BgMgr.AssetBundleObj value = default(BgMgr.AssetBundleObj);
+					if (assetBundle.mainAsset != null)
+					{
+						value.obj = assetBundle.mainAsset;
+					}
+					else
+					{
+						value.obj = assetBundle.LoadAllAssets<GameObject>()[0];
+					}
+					value.ab = assetBundle;
+					this.asset_bundle_dic.Add(text, value);
+					@object = value.obj;
+					string f_strFileName = name + ".asset_bg_shader";
+					AFileSystemBase afileSystemBase2 = null;
+					if (GameUty.FileSystem.IsExistentFile(f_strFileName))
+					{
+						afileSystemBase2 = GameUty.FileSystem;
+					}
+					else if (GameUty.FileSystemOld.IsExistentFile(f_strFileName))
+					{
+						afileSystemBase2 = GameUty.FileSystemOld;
+					}
+					if (afileSystemBase2 != null)
+					{
+						byte[] array = null;
+						using (AFileBase afileBase2 = afileSystemBase2.FileOpen(f_strFileName))
+						{
+							array = afileBase2.ReadAll();
+						}
+						if (array != null)
+						{
+							this.LoadAssetBgShaderData(@object as GameObject, array);
+						}
+					}
+				}
+			}
+			else
+			{
+				@object = this.asset_bundle_dic[text].obj;
+			}
+		}
+		return (!(@object == null)) ? (@object as GameObject) : null;
+	}
+
+	private void LoadAssetBgShaderData(GameObject bgObject, byte[] binary)
+	{
+		if (binary == null || binary.Length <= 0)
+		{
+			return;
+		}
+		using (MemoryStream memoryStream = new MemoryStream(binary))
+		{
+			using (BinaryReader binaryReader = new BinaryReader(memoryStream))
+			{
+				int num = binaryReader.ReadInt32();
+				List<Shader> list = new List<Shader>();
+				Dictionary<string, List<int>> dictionary = new Dictionary<string, List<int>>();
+				int num2 = (int)binaryReader.ReadInt16();
+				for (int i = 0; i < num2; i++)
+				{
+					string text = binaryReader.ReadString();
+					Shader shader = Shader.Find(text);
+					if (shader == null)
+					{
+						Debug.LogError("shader名[" + text + "]からshaderを特定できませんでした");
+					}
+					else
+					{
+						list.Add(shader);
+					}
+				}
+				num2 = (int)binaryReader.ReadInt16();
+				for (int j = 0; j < num2; j++)
+				{
+					string key = binaryReader.ReadString();
+					List<int> list2 = new List<int>();
+					int num3 = (int)binaryReader.ReadInt16();
+					for (int k = 0; k < num3; k++)
+					{
+						list2.Add(binaryReader.ReadInt32());
+					}
+					dictionary.Add(key, list2);
+				}
+				Renderer[] componentsInChildren = bgObject.GetComponentsInChildren<Renderer>(true);
+				foreach (Renderer renderer in componentsInChildren)
+				{
+					List<int> list3 = dictionary[renderer.gameObject.name];
+					int num4 = 0;
+					foreach (Material material in renderer.sharedMaterials)
+					{
+						if (!(material == null))
+						{
+							int index = list3[num4];
+							material.shader = list[index];
+							num4++;
+						}
+					}
+				}
+			}
+		}
+	}
+
+	public void SetPos(Vector3 f_vWorldPos)
+	{
+		this.m_goParent.transform.position = f_vWorldPos;
+	}
+
+	public void SetRot(Vector3 f_vWorldRot)
+	{
+		this.m_goParent.transform.rotation = Quaternion.Euler(f_vWorldRot);
+	}
+
+	public void DeleteBg()
+	{
+		this.ChangeBg(null);
+	}
+
+	public string GetBGName()
+	{
+		return this.m_strBGName;
+	}
+
+	public GameObject AddHitToBg(string f_strSrc)
+	{
+		UnityEngine.Object @object = Resources.Load("BG_Hit/" + f_strSrc);
+		if (@object == null)
+		{
+			@object = this.CreateAssetBundle(f_strSrc);
+		}
+		if (@object == null)
+		{
+			return null;
+		}
+		GameObject gameObject = UnityEngine.Object.Instantiate(@object) as GameObject;
+		gameObject.name = f_strSrc;
+		if (this.m_goBg != null)
+		{
+			gameObject.transform.SetParent(this.m_goBg.transform, false);
+		}
+		else
+		{
+			gameObject.transform.SetParent(this.m_goParent.transform, false);
+		}
+		return gameObject;
+	}
+
+	public GameObject AddPrefabToBg(string f_strSrc, string f_strName, string f_strDest, Vector3 f_vPos, Vector3 f_vRot)
+	{
+		GameObject gameObject = null;
+		if (!this.m_dicAttachObj.TryGetValue(f_strName, out gameObject))
+		{
+			UnityEngine.Object @object = Resources.Load("Prefab/" + f_strSrc);
+			if (@object == null)
+			{
+				@object = this.CreateAssetBundle(f_strSrc);
+			}
+			if (@object == null)
+			{
+				return null;
+			}
+			gameObject = (UnityEngine.Object.Instantiate(@object) as GameObject);
+			gameObject.name = f_strName;
+			this.m_dicAttachObj.Add(f_strName, gameObject);
+		}
+		if (gameObject == null)
+		{
+			Debug.Log("指定のプレハブが見つかりませんでした。[" + f_strSrc + "]");
+			return null;
+		}
+		GameObject gameObject2;
+		if (this.m_goBg != null)
+		{
+			if (!string.IsNullOrEmpty(f_strDest))
+			{
+				gameObject2 = UTY.GetChildObject(this.m_goBg, f_strDest, false);
+			}
+			else
+			{
+				gameObject2 = this.m_goBg;
+			}
+		}
+		else
+		{
+			gameObject2 = this.m_goParent;
+		}
+		gameObject.transform.SetParent(gameObject2.transform, false);
+		gameObject.transform.localPosition = f_vPos;
+		gameObject.transform.localRotation = Quaternion.Euler(f_vRot);
+		return gameObject;
+	}
+
+	public GameObject AddAssetsBundleToBg(string f_strSrc, string f_strName, string f_strDest, Vector3 f_vPos, Vector3 f_vRot)
+	{
+		GameObject gameObject = null;
+		if (!this.m_dicAttachObj.TryGetValue(f_strName, out gameObject))
+		{
+			UnityEngine.Object @object = this.CreateAssetBundle(f_strSrc);
+			if (@object == null)
+			{
+				Debug.Log("指定のAssetsBundle見つかりませんでした。[" + f_strSrc + "]");
+				return null;
+			}
+			gameObject = (UnityEngine.Object.Instantiate(@object) as GameObject);
+			gameObject.name = f_strName;
+			this.m_dicAttachObj.Add(f_strName, gameObject);
+		}
+		GameObject gameObject2;
+		if (this.m_goBg != null)
+		{
+			if (!string.IsNullOrEmpty(f_strDest))
+			{
+				gameObject2 = UTY.GetChildObject(this.m_goBg, f_strDest, false);
+			}
+			else
+			{
+				gameObject2 = this.m_goBg;
+			}
+		}
+		else
+		{
+			gameObject2 = this.m_goParent;
+		}
+		gameObject.transform.SetParent(gameObject2.transform, false);
+		gameObject.transform.localPosition = f_vPos;
+		gameObject.transform.localRotation = Quaternion.Euler(f_vRot);
+		return gameObject;
+	}
+
+	public void PrefabAnimatorSetParam<T>(string f_strName, string f_strParam, T f_value) where T : IConvertible
+	{
+		GameObject gameObject = null;
+		if (this.m_dicAttachObj.TryGetValue(f_strName, out gameObject))
+		{
+			Animator component = gameObject.GetComponent<Animator>();
+			if (component != null)
+			{
+				if (f_value.GetType() == typeof(int))
+				{
+					component.SetInteger(f_strParam, f_value.ToInt32(null));
+				}
+				else if (f_value.GetType() == typeof(float))
+				{
+					component.SetFloat(f_strParam, (float)f_value.ToDouble(null));
+				}
+				else if (f_value.GetType() == typeof(bool))
+				{
+					component.SetBool(f_strParam, f_value.ToBoolean(null));
+				}
+			}
+		}
+		else
+		{
+			Debug.LogWarning("プレハブが見つかりません。" + f_strName);
+		}
+	}
+
+	public void PrefabAnimatorTrigger(string f_strName, string f_strParam, bool f_bReset)
+	{
+		GameObject gameObject = null;
+		if (this.m_dicAttachObj.TryGetValue(f_strName, out gameObject))
+		{
+			Animator component = gameObject.GetComponent<Animator>();
+			if (component != null)
+			{
+				if (f_bReset)
+				{
+					component.ResetTrigger(f_strParam);
+				}
+				else
+				{
+					component.SetTrigger(f_strParam);
+				}
+			}
+		}
+		else
+		{
+			Debug.LogWarning("プレハブが見つかりません。" + f_strName);
+		}
+	}
+
+	public void MovePrefabToChara(string f_strPrefabName, Maid f_maid, string f_strDestBone, Vector3 f_vOffsPos, Vector3 f_vOffsRot, float f_fTime)
+	{
+		BgMgr.MovePfefab value = new BgMgr.MovePfefab(f_strPrefabName, f_maid, f_strDestBone, f_vOffsPos, f_vOffsRot, f_fTime);
+		base.StartCoroutine("CoWaitMovePrefabToChara", value);
+	}
+
+	private IEnumerator CoWaitMovePrefabToChara(BgMgr.MovePfefab f_mp)
+	{
+		float fNowTime = 0f;
+		if (f_mp.maid == null || f_mp.maid.body0 == null)
+		{
+			yield break;
+		}
+		GameObject objTarget = null;
+		Transform trTarget = CMT.SearchObjName(f_mp.maid.body0.m_trBones, f_mp.strDestBone, true);
+		if (trTarget != null)
+		{
+			this.m_dicAttachObj.TryGetValue(f_mp.strPrefabName, out objTarget);
+		}
+		if (objTarget == null)
+		{
+			yield break;
+		}
+		while (!(trTarget == null))
+		{
+			objTarget.transform.position = trTarget.position + f_mp.vOffsPos;
+			yield return null;
+			if ((fNowTime += Time.deltaTime) > f_mp.fTime)
+			{
+				yield break;
+			}
+		}
+		yield break;
+	}
+
+	public GameObject GetPrefabFromBg(string f_strName)
+	{
+		if (!this.m_dicAttachObj.ContainsKey(f_strName))
+		{
+			return null;
+		}
+		return this.m_dicAttachObj[f_strName];
+	}
+
+	public void DelPrefabFromBg(string f_strName)
+	{
+		GameObject obj = null;
+		if (this.m_dicAttachObj.TryGetValue(f_strName, out obj))
+		{
+			this.m_dicAttachObj.Remove(f_strName);
+			UnityEngine.Object.Destroy(obj);
+		}
+	}
+
+	public void DelPrefabFromBgAll()
+	{
+		base.StopCoroutine("CoWaitMovePrefabToChara");
+		foreach (KeyValuePair<string, GameObject> keyValuePair in this.m_dicAttachObj)
+		{
+			if (keyValuePair.Value != null)
+			{
+				UnityEngine.Object.DestroyImmediate(keyValuePair.Value);
+			}
+		}
+		this.m_dicAttachObj.Clear();
+	}
+
+	public void OnConnectedToServer()
+	{
+		this.SetPos(Vector3.zero);
+		this.SetRot(Vector3.zero);
+	}
+
+	public void OnSaveDD()
+	{
+		this.SaveOvrDDPos(true);
+	}
+
+	private void ShowOvrDD(bool f_bShowForce)
+	{
+		if (this.m_goParent == null)
+		{
+			return;
+		}
+		string text = this.GetBGName();
+		if (string.IsNullOrEmpty(text))
+		{
+			text = "__NoBG";
+		}
+		if (!GameMain.Instance.CMSystem.SConfig.OvrDDtoBG)
+		{
+			text = "__NoDDtoBG";
+		}
+		if (!f_bShowForce)
+		{
+			CMSystem.TransDD transDD;
+			if (!GameMain.Instance.CMSystem.OvrDDBG.TryGetValue(text, out transDD))
+			{
+				if (this.desktop_screen_ != null)
+				{
+					UnityEngine.Object.DestroyImmediate(this.desktop_screen_);
+					this.desktop_screen_ = null;
+				}
+				return;
+			}
+			if (!transDD.m_bShow)
+			{
+				if (this.desktop_screen_ != null)
+				{
+					UnityEngine.Object.DestroyImmediate(this.desktop_screen_);
+					this.desktop_screen_ = null;
+				}
+				return;
+			}
+		}
+		if (this.desktop_screen_ == null)
+		{
+			UnityEngine.Object @object = Resources.Load("Prefab/DesktopScreen");
+			if (@object != null)
+			{
+				this.desktop_screen_ = (UnityEngine.Object.Instantiate(@object) as GameObject);
+			}
+		}
+		if (this.desktop_screen_ != null)
+		{
+			this.desktop_screen_.transform.SetParent(this.m_goParent.transform);
+			this.desktop_screen_.transform.localPosition = new Vector3(0f, 2f, 1f);
+			this.desktop_screen_.transform.localRotation = Quaternion.identity;
+			this.desktop_screen_.transform.localScale = Vector3.one;
+			CMSystem.TransDD transDD2;
+			if (GameMain.Instance.CMSystem.OvrDDBG.TryGetValue(text, out transDD2))
+			{
+				this.desktop_screen_.transform.localPosition = transDD2.m_vPos;
+				this.desktop_screen_.transform.localRotation = transDD2.m_qRot;
+				this.desktop_screen_.transform.localScale = transDD2.m_vScale;
+			}
+		}
+	}
+
+	private void SaveOvrDDPos(bool f_bShowing)
+	{
+		if (this.desktop_screen_ == null)
+		{
+			return;
+		}
+		string text = this.GetBGName();
+		if (string.IsNullOrEmpty(text))
+		{
+			text = "__NoBG";
+		}
+		if (!GameMain.Instance.CMSystem.SConfig.OvrDDtoBG)
+		{
+			text = "__NoDDtoBG";
+		}
+		CMSystem.TransDD transDD = null;
+		if (!GameMain.Instance.CMSystem.OvrDDBG.TryGetValue(text, out transDD))
+		{
+			transDD = new CMSystem.TransDD();
+			GameMain.Instance.CMSystem.OvrDDBG.Add(text, transDD);
+		}
+		transDD.m_vPos = this.desktop_screen_.transform.localPosition;
+		transDD.m_qRot = this.desktop_screen_.transform.localRotation;
+		transDD.m_vScale = this.desktop_screen_.transform.localScale;
+		transDD.m_bShow = f_bShowing;
+	}
+
+	public void Update()
+	{
+		if (Input.GetKeyDown(KeyCode.F10) && NInput.GetKey(KeyCode.LeftShift))
+		{
+			this.SetShowDesktopScreen(!this.isShowDesktopScreen);
+		}
+		else if (Input.GetKey(KeyCode.F11) && NInput.GetKey(KeyCode.LeftShift))
+		{
+			if (this.desktop_screen_ != null)
+			{
+				this.desktop_screen_.transform.localScale += new Vector3(0.1f, 0.1f, 0.1f) * Time.deltaTime;
+			}
+		}
+		else if (Input.GetKey(KeyCode.F12) && NInput.GetKey(KeyCode.LeftShift) && this.desktop_screen_ != null)
+		{
+			this.desktop_screen_.transform.localScale += new Vector3(0.1f, 0.1f, 0.1f) * -Time.deltaTime;
+		}
+	}
+
+	public bool isShowDesktopScreen
+	{
+		get
+		{
+			return this.desktop_screen_ != null;
+		}
+	}
+
+	public void SetShowDesktopScreen(bool isShow)
+	{
+		if (isShow)
+		{
+			if (this.desktop_screen_ == null)
+			{
+				this.ShowOvrDD(true);
+			}
+		}
+		else if (this.desktop_screen_ != null)
+		{
+			this.SaveOvrDDPos(false);
+			UnityEngine.Object.DestroyImmediate(this.desktop_screen_);
+			this.desktop_screen_ = null;
+		}
+	}
+
+	public GameObject current_bg_object
+	{
+		get
+		{
+			return this.m_goBg;
+		}
+	}
+
+	public GameObject bg_parent_object
+	{
+		get
+		{
+			return this.m_goParent;
+		}
+	}
+
+	private GameObject m_goParent;
+
+	private GameObject m_goBg;
+
+	private Dictionary<string, BgMgr.AssetBundleObj> asset_bundle_dic = new Dictionary<string, BgMgr.AssetBundleObj>();
+
+	private string m_strBGName = string.Empty;
+
+	private Dictionary<string, GameObject> m_dicAttachObj = new Dictionary<string, GameObject>();
+
+	private GameObject desktop_screen_;
+
+	private struct AssetBundleObj
+	{
+		public AssetBundle ab;
+
+		public UnityEngine.Object obj;
+	}
+
+	private class MovePfefab
+	{
+		public MovePfefab(string f_strPrefabName, Maid f_maid, string f_strDestBone, Vector3 f_vOffsPos, Vector3 f_vOffsRot, float f_fTime)
+		{
+			this.strPrefabName = f_strPrefabName;
+			this.maid = f_maid;
+			this.strDestBone = f_strDestBone;
+			this.vOffsPos = f_vOffsPos;
+			this.vOffsRot = f_vOffsRot;
+			this.fTime = f_fTime;
+		}
+
+		public string strPrefabName;
+
+		public Maid maid;
+
+		public string strDestBone;
+
+		public Vector3 vOffsPos;
+
+		public Vector3 vOffsRot;
+
+		public float fTime;
+	}
+}

+ 177 - 0
Assembly-CSharp/BigThumbnail.cs

@@ -0,0 +1,177 @@
+using System;
+using System.IO;
+using UnityEngine;
+
+public class BigThumbnail : MonoBehaviour
+{
+	public void Awake()
+	{
+		this.isEnabled = true;
+		this.Init();
+	}
+
+	private void Init()
+	{
+		if (this.sprite_ == null)
+		{
+			this.CheckCreateFrame();
+			this.sprite_ = UTY.GetChildObject(base.gameObject, "Image", false).GetComponent<UI2DSprite>();
+			this.bg_sprite_ = base.gameObject.GetComponent<UI2DSprite>();
+			this.frame_sprite_ = UTY.GetChildObject(base.gameObject, "Frame", false).GetComponent<UI2DSprite>();
+			this.alpha = 0f;
+		}
+	}
+
+	public void OnDestroy()
+	{
+		if (this.sprite_.sprite2D != null && this.sprite_.sprite2D.texture != null)
+		{
+			UnityEngine.Object.DestroyImmediate(this.sprite_.sprite2D.texture);
+		}
+		if (this.bg_sprite_.sprite2D != null && this.bg_sprite_.sprite2D.texture != null)
+		{
+			UnityEngine.Object.DestroyImmediate(this.bg_sprite_.sprite2D.texture);
+		}
+		if (this.frame_sprite_.sprite2D != null && this.frame_sprite_.sprite2D.texture != null)
+		{
+			UnityEngine.Object.DestroyImmediate(this.frame_sprite_.sprite2D.texture);
+		}
+		this.sprite_.sprite2D = null;
+		this.bg_sprite_.sprite2D = null;
+		this.frame_sprite_.sprite2D = null;
+		this.draw_tex_ = null;
+	}
+
+	public void SetMaid(Maid maid)
+	{
+		if (!this.isEnabled)
+		{
+			return;
+		}
+		this.Init();
+		this.alpha = 0f;
+		if (this.sprite_.sprite2D != null && this.sprite_.sprite2D.texture != null)
+		{
+			UnityEngine.Object.DestroyImmediate(this.sprite_.sprite2D.texture);
+		}
+		this.sprite_.sprite2D = null;
+		this.draw_tex_ = null;
+		if (maid == null)
+		{
+			return;
+		}
+		this.draw_tex_ = maid.GetThumCard();
+		if (this.draw_tex_ == null)
+		{
+			return;
+		}
+		this.LoadFrameAndBG();
+		Sprite sprite = Sprite.Create(this.draw_tex_, new Rect(0f, 0f, (float)this.draw_tex_.width, (float)this.draw_tex_.height), default(Vector2));
+		sprite.name = maid.status.lastName + maid.status.firstName;
+		this.sprite_.sprite2D = sprite;
+		this.sprite_.SetDimensions(this.draw_tex_.width, this.draw_tex_.height);
+		this.alpha = 1f;
+	}
+
+	public float alpha
+	{
+		get
+		{
+			this.Init();
+			return this.bg_sprite_.alpha;
+		}
+		set
+		{
+			this.Init();
+			this.bg_sprite_.alpha = value;
+		}
+	}
+
+	public bool Visible
+	{
+		get
+		{
+			return base.gameObject.activeSelf;
+		}
+		set
+		{
+			base.gameObject.SetActive(value);
+		}
+	}
+
+	public bool isEnabled { get; set; }
+
+	private Texture2D draw_tex
+	{
+		get
+		{
+			return this.draw_tex_;
+		}
+	}
+
+	private void CheckCreateFrame()
+	{
+		string fullPath = Path.GetFullPath(".\\");
+		string text = fullPath + "Thumb";
+		if (!Directory.Exists(text))
+		{
+			Directory.CreateDirectory(text);
+		}
+		string path = text + "/frame_single.png";
+		if (!File.Exists(path))
+		{
+			Texture2D texture2D = Resources.Load<Texture2D>("CharacterSelect/Atlas/DefaultFrame");
+			File.WriteAllBytes(path, texture2D.EncodeToPNG());
+			Resources.UnloadAsset(texture2D);
+		}
+		path = text + "/frame_back.png";
+		if (!File.Exists(path))
+		{
+			Texture2D texture2D2 = Resources.Load<Texture2D>("CharacterSelect/Atlas/DefaultFrameBack");
+			File.WriteAllBytes(path, texture2D2.EncodeToPNG());
+			Resources.UnloadAsset(texture2D2);
+		}
+	}
+
+	private void LoadFrameAndBG()
+	{
+		this.CheckCreateFrame();
+		string str = Path.GetFullPath(".\\") + "Thumb";
+		string f_strFileName = str + "/frame_back.png";
+		if (this.bg_sprite_.sprite2D == null)
+		{
+			Texture2D texture2D = UTY.LoadTexture(f_strFileName);
+			if (texture2D != null)
+			{
+				int width = this.bg_sprite_.width;
+				int height = this.bg_sprite_.height;
+				Sprite sprite = Sprite.Create(texture2D, new Rect(0f, 0f, (float)width, (float)height), default(Vector2));
+				sprite.name = "frame_back";
+				this.bg_sprite_.sprite2D = sprite;
+				this.bg_sprite_.SetDimensions(width, height);
+			}
+		}
+		if (this.frame_sprite_.sprite2D == null)
+		{
+			f_strFileName = str + "/frame_single.png";
+			Texture2D texture2D2 = UTY.LoadTexture(f_strFileName);
+			if (texture2D2 != null)
+			{
+				int width2 = this.frame_sprite_.width;
+				int height2 = this.frame_sprite_.height;
+				Sprite sprite2 = Sprite.Create(texture2D2, new Rect(0f, 0f, (float)width2, (float)height2), default(Vector2));
+				sprite2.name = "frame_back";
+				this.frame_sprite_.sprite2D = sprite2;
+				this.frame_sprite_.SetDimensions(width2, height2);
+			}
+		}
+	}
+
+	private Texture2D draw_tex_;
+
+	private UI2DSprite sprite_;
+
+	private UI2DSprite bg_sprite_;
+
+	private UI2DSprite frame_sprite_;
+}

+ 87 - 0
Assembly-CSharp/Billboard.cs

@@ -0,0 +1,87 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+public class Billboard : MonoBehaviour
+{
+	private void Start()
+	{
+		base.StartCoroutine(this.CoGetTargetCam());
+	}
+
+	private IEnumerator CoGetTargetCam()
+	{
+		while (this.m_targetCamera == null)
+		{
+			if (GameMain.Instance.VRMode && Application.isPlaying)
+			{
+				if (GameMain.Instance.OvrMgr != null)
+				{
+					this.m_targetCamera = GameMain.Instance.OvrMgr.EyeAnchor;
+				}
+			}
+			else if (GameMain.Instance.MainCamera != null)
+			{
+				this.m_targetCamera = GameMain.Instance.MainCamera.transform;
+			}
+			yield return null;
+		}
+		this.m_bEnableTargetCam = true;
+		yield break;
+	}
+
+	private void Update()
+	{
+		if (!this.m_bEnableTargetCam)
+		{
+			return;
+		}
+		Vector3 position = this.m_targetCamera.position;
+		if (this.m_eLockLocal != Billboard.LOCK.NON)
+		{
+			Vector3 a = base.transform.InverseTransformPoint(position);
+			if (this.m_eLockLocal == Billboard.LOCK.LOCK_X)
+			{
+				a.x = base.transform.localPosition.x;
+			}
+			else if (this.m_eLockLocal == Billboard.LOCK.LOCK_Y)
+			{
+				a.y = base.transform.localPosition.y;
+			}
+			else if (this.m_eLockLocal == Billboard.LOCK.LOCK_Z)
+			{
+				a.z = base.transform.localPosition.z;
+			}
+			Vector3 normalized = (a - base.transform.localPosition).normalized;
+			base.transform.localRotation *= Quaternion.LookRotation(normalized);
+		}
+		else if (this.m_bUseUpVector)
+		{
+			base.transform.LookAt(position, this.m_vUpVector);
+		}
+		else
+		{
+			base.transform.LookAt(position);
+		}
+	}
+
+	public Transform m_targetCamera;
+
+	[Header("Up方向を固定する(World系)")]
+	public bool m_bUseUpVector;
+
+	public Vector3 m_vUpVector = new Vector3(0f, 1f, 0f);
+
+	[Header("回転軸を指定する(Local系)")]
+	public Billboard.LOCK m_eLockLocal;
+
+	private bool m_bEnableTargetCam;
+
+	public enum LOCK
+	{
+		NON,
+		LOCK_X,
+		LOCK_Y,
+		LOCK_Z
+	}
+}

+ 468 - 0
Assembly-CSharp/BjMotionControl.cs

@@ -0,0 +1,468 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class BjMotionControl : MonoBehaviour
+{
+	public Maid TargetMaid
+	{
+		get
+		{
+			return this.m_TargetMaid;
+		}
+	}
+
+	public string nMotionName { get; private set; }
+
+	public static BjMotionControl Instance { get; private set; }
+
+	public bool IsWait { get; private set; }
+
+	public bool DoLeaveMotion
+	{
+		get
+		{
+			return this.m_DoLeaveMotion;
+		}
+		set
+		{
+			this.m_DoLeaveMotion = value;
+			if (value)
+			{
+				this.m_WaitCoroutine = this.LeaveMotion();
+				base.StartCoroutine(this.m_WaitCoroutine);
+			}
+			else if (this.m_WaitCoroutine != null)
+			{
+				base.StopCoroutine(this.m_WaitCoroutine);
+			}
+		}
+	}
+
+	public Transform RightHand
+	{
+		get
+		{
+			return this.m_RightBone;
+		}
+	}
+
+	public Transform Lefthand
+	{
+		get
+		{
+			return this.m_LeftBone;
+		}
+	}
+
+	private ScriptManager m_ScriptMgr
+	{
+		get
+		{
+			return GameMain.Instance.ScriptMgr;
+		}
+	}
+
+	private void Awake()
+	{
+		BjMotionControl.Instance = this;
+		this.m_WaitMotionList.Add(BjMotionControl.WaitType.Normal, this.m_BaseWaitMotion);
+		this.m_WaitMotionList.Add(BjMotionControl.WaitType.Split1, this.m_StandardChoiseWait);
+		this.m_WaitMotionList.Add(BjMotionControl.WaitType.Split2, this.m_SplitChoiseWait);
+		this.m_WaitMotionList.Add(BjMotionControl.WaitType.Muku, this.m_MukuWin);
+		this.m_WaitMotionList.Add(BjMotionControl.WaitType.Majime, this.m_MajimeWin);
+		this.m_WaitMotionList.Add(BjMotionControl.WaitType.Rindere, this.m_RindereWin);
+	}
+
+	private void Start()
+	{
+		string text = "bjmotion_data.nei";
+		if (!GameUty.FileSystem.IsExistentFile(text))
+		{
+			NDebug.Assert("表がありません。" + text, false);
+		}
+		using (AFileBase afileBase = GameUty.FileSystem.FileOpen(text))
+		{
+			using (CsvParser csvParser = new CsvParser())
+			{
+				bool condition = csvParser.Open(afileBase);
+				NDebug.Assert(condition, text + "\nopen failed.");
+				for (int i = 1; i < csvParser.max_cell_y; i++)
+				{
+					if (csvParser.IsCellToExistData(0, i))
+					{
+						this.m_LabelMotpair.Add(csvParser.GetCellAsString(1, i), (csvParser.GetCellAsString(2, i) + ".anm").ToLower());
+					}
+				}
+			}
+		}
+		KasaiUtility.CsvReadY("bj_winmotion_data.nei", new Action<CsvParser, int>(this.ReadWinMotion), 1, new Action(this.SetDefaultWinMotion));
+	}
+
+	private void ReadWinMotion(CsvParser csv, int cy)
+	{
+		BjMotionControl.WaitType value = (BjMotionControl.WaitType)Enum.Parse(typeof(BjMotionControl.WaitType), csv.GetCellAsString(0, cy));
+		string[] array = csv.GetCellAsString(1, cy).Split(new char[]
+		{
+			'\n'
+		});
+		foreach (string key in array)
+		{
+			this.m_PersonalWinMotionPair.Add(key, value);
+		}
+	}
+
+	private void SetDefaultWinMotion()
+	{
+		this.m_PersonalWinMotionPair.Add("Muku", BjMotionControl.WaitType.Muku);
+		this.m_PersonalWinMotionPair.Add("Pure", BjMotionControl.WaitType.Muku);
+		this.m_PersonalWinMotionPair.Add("Majime", BjMotionControl.WaitType.Majime);
+		this.m_PersonalWinMotionPair.Add("Pride", BjMotionControl.WaitType.Majime);
+		this.m_PersonalWinMotionPair.Add("Rindere", BjMotionControl.WaitType.Rindere);
+		this.m_PersonalWinMotionPair.Add("Cool", BjMotionControl.WaitType.Rindere);
+	}
+
+	private IEnumerator LeaveMotion()
+	{
+		float timer = 0f;
+		int wait_time = UnityEngine.Random.Range(this.m_WaitMinTime, this.m_WaitMaxTime);
+		Action end_action = delegate
+		{
+			this.$this.m_DoLeaveMotion = true;
+		};
+		for (;;)
+		{
+			if (this.m_DoLeaveMotion && this.IsWait && !BjVoiceMgr.Instance.isPlay)
+			{
+				timer += Time.deltaTime;
+				if (timer > (float)wait_time)
+				{
+					timer = 0f;
+					this.m_DoLeaveMotion = false;
+					wait_time = UnityEngine.Random.Range(this.m_WaitMinTime, this.m_WaitMaxTime);
+					if (!BlackjackGame.Instance.isZoom)
+					{
+						this.PlayMotion("*覗き込む", end_action, false, false);
+						BjVoiceMgr.Instance.PlayVoice("行動選択放置", null, 0f);
+					}
+					else
+					{
+						BjVoiceMgr.Instance.PlayVoice("行動選択放置", end_action, 0f);
+					}
+				}
+			}
+			else
+			{
+				timer = 0f;
+			}
+			yield return null;
+		}
+		yield break;
+	}
+
+	private IEnumerator MotionEndCall(string motion_name, Action end_action = null)
+	{
+		yield return null;
+		float last_time = -1f;
+		while (this.m_IsVoiceWait && this.m_IsVoiceAfter && this.m_TargetMaid.AudioMan.isPlay())
+		{
+			yield return null;
+		}
+		for (;;)
+		{
+			bool motion_end = false;
+			IEnumerator enumerator = this.m_AnimationChache.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					AnimationState animationState = (AnimationState)obj;
+					if (animationState.name == motion_name)
+					{
+						motion_end = (animationState.normalizedTime < last_time);
+						last_time = animationState.normalizedTime;
+						break;
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+			if (motion_end)
+			{
+				break;
+			}
+			yield return null;
+		}
+		while (this.m_IsVoiceWait && !this.m_IsVoiceAfter && this.m_TargetMaid.AudioMan.isPlay())
+		{
+			yield return null;
+		}
+		if (end_action != null)
+		{
+			end_action();
+		}
+		this.IsWait = !this.ForceWaitStop;
+		yield break;
+	}
+
+	private IEnumerator ToNextMotion(string motion_name, string next_label, Action end_action1 = null, Action end_action2 = null)
+	{
+		yield return null;
+		float last_time = -1f;
+		for (;;)
+		{
+			bool motion_end = false;
+			IEnumerator enumerator = this.m_AnimationChache.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					AnimationState animationState = (AnimationState)obj;
+					if (animationState.name == motion_name)
+					{
+						motion_end = (animationState.normalizedTime < last_time);
+						last_time = animationState.normalizedTime;
+						break;
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+			if (motion_end)
+			{
+				break;
+			}
+			yield return null;
+		}
+		if (end_action1 != null)
+		{
+			end_action1();
+		}
+		this.MotionFade(next_label, end_action2);
+		yield break;
+	}
+
+	private void MotionFade(string label, Action end_action = null)
+	{
+		if (!this.m_TargetMaid)
+		{
+			return;
+		}
+		this.nMotionName = label;
+		this.m_ScriptMgr.StopMotionScript();
+		this.m_ScriptMgr.is_motion_blend = this.m_IsMotionBlend;
+		this.m_ScriptMgr.LoadMotionScript(0, false, "work_002.ks", label, string.Empty, string.Empty, false, true);
+		this.m_IsMotionBlend = true;
+		if (!this.IsWait)
+		{
+			if (this.m_nMotionEndCall != null)
+			{
+				base.StopCoroutine(this.m_nMotionEndCall);
+			}
+			this.m_nMotionEndCall = this.MotionEndCall(this.m_LabelMotpair[label], end_action);
+			base.StartCoroutine(this.m_nMotionEndCall);
+		}
+		BlackjackGame.Instance.SetDealerPos();
+	}
+
+	private void MotionToMotion(string first_label, string next_label, Action action1 = null, Action action2 = null)
+	{
+		if (!this.m_TargetMaid)
+		{
+			return;
+		}
+		this.nMotionName = first_label;
+		this.m_ScriptMgr.StopMotionScript();
+		this.m_ScriptMgr.is_motion_blend = this.m_IsMotionBlend;
+		this.m_ScriptMgr.LoadMotionScript(0, false, "work_002.ks", first_label, string.Empty, string.Empty, false, true);
+		this.m_IsMotionBlend = true;
+		if (!this.IsWait)
+		{
+			if (this.m_nToNextMotion != null)
+			{
+				base.StopCoroutine(this.m_nToNextMotion);
+			}
+			this.m_nToNextMotion = this.ToNextMotion(this.m_LabelMotpair[first_label], next_label, action1, action2);
+			base.StartCoroutine(this.m_nToNextMotion);
+		}
+		BlackjackGame.Instance.SetDealerPos();
+	}
+
+	public void Init()
+	{
+		this.m_TargetMaid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		this.m_TargetMaid.EyeToCamera(Maid.EyeMoveType.無視する, 0f);
+		this.m_AnimationChache = this.m_TargetMaid.body0.GetAnimation();
+		this.m_IsMotionBlend = false;
+		this.PlayWaitMotion(BjMotionControl.WaitType.Normal);
+		this.m_LeftBone = this.m_TargetMaid.body0.GetBone("_IK_handL");
+		this.m_RightBone = this.m_TargetMaid.body0.GetBone("_IK_handR");
+	}
+
+	public void PlayMotion(string motion_label, Action end_action = null, bool voice_wait = false, bool voice_after = false)
+	{
+		bool isWait = this.IsWait;
+		this.IsWait = false;
+		this.m_IsVoiceWait = voice_wait;
+		this.m_IsVoiceAfter = voice_after;
+		if (isWait && !this.ForceWaitStop && this.m_WaitMotionList[this.m_WaitMotion].IsStartandEnd)
+		{
+			this.MotionToMotion(this.m_WaitMotionList[this.m_WaitMotion].WaitEndLabel, motion_label, null, end_action);
+		}
+		else
+		{
+			this.MotionFade(motion_label, end_action);
+		}
+	}
+
+	public void PlayWinMotion(Maid maid)
+	{
+		this.PlayWaitMotion(this.m_PersonalWinMotionPair[maid.status.personal.uniqueName]);
+	}
+
+	public void PlayWaitMotion(BjMotionControl.WaitType motion)
+	{
+		if (!this.m_TargetMaid)
+		{
+			return;
+		}
+		if (this.ForceWaitStop)
+		{
+			return;
+		}
+		this.SetWaitMotion(motion);
+		this.IsWait = true;
+		this.MotionFade(this.m_WaitMotionList[motion].WaitStartLabel, null);
+	}
+
+	public void PlayWaitMotion()
+	{
+		this.PlayWaitMotion(this.m_WaitMotion);
+	}
+
+	public void SetWaitMotion(BjMotionControl.WaitType motion)
+	{
+		this.m_WaitMotion = motion;
+		this.IsWait = false;
+	}
+
+	public string GetHaihuMotion()
+	{
+		if (BjPlayer.Instance.IsSplitGame() && BjPlayer.Instance.IsNowSplitHand)
+		{
+			return "*スプリットで配布" + BjPlayer.Instance.splitHand.CardNum.ToString();
+		}
+		return "*プレイヤーに配布" + BjPlayer.Instance.standardHand.CardNum.ToString();
+	}
+
+	public Vector3 RightHandPos()
+	{
+		return this.m_RightBone.position;
+	}
+
+	public Vector3 LeftHandPos()
+	{
+		return this.m_LeftBone.position;
+	}
+
+	private Maid m_TargetMaid;
+
+	[HideInInspector]
+	public bool ForceWaitStop;
+
+	private const string m_MotionScriptName = "work_002.ks";
+
+	private Animation m_AnimationChache;
+
+	[SerializeField]
+	private int m_WaitMinTime = 5;
+
+	[SerializeField]
+	private int m_WaitMaxTime = 15;
+
+	[SerializeField]
+	private BjMotionControl.Motion3Part m_BaseWaitMotion;
+
+	[SerializeField]
+	private BjMotionControl.Motion3Part m_StandardChoiseWait;
+
+	[SerializeField]
+	private BjMotionControl.Motion3Part m_SplitChoiseWait;
+
+	[Header("各性格勝利時モーション")]
+	[SerializeField]
+	private BjMotionControl.Motion3Part m_MukuWin;
+
+	[SerializeField]
+	private BjMotionControl.Motion3Part m_MajimeWin;
+
+	[SerializeField]
+	private BjMotionControl.Motion3Part m_RindereWin;
+
+	private BjMotionControl.WaitType m_WaitMotion;
+
+	private Dictionary<BjMotionControl.WaitType, BjMotionControl.Motion3Part> m_WaitMotionList = new Dictionary<BjMotionControl.WaitType, BjMotionControl.Motion3Part>();
+
+	private IEnumerator m_nMotionEndCall;
+
+	private IEnumerator m_nToNextMotion;
+
+	private IEnumerator m_WaitCoroutine;
+
+	private bool m_DoLeaveMotion;
+
+	private Transform m_RightBone;
+
+	private Transform m_LeftBone;
+
+	private Dictionary<string, string> m_LabelMotpair = new Dictionary<string, string>();
+
+	private Dictionary<string, BjMotionControl.WaitType> m_PersonalWinMotionPair = new Dictionary<string, BjMotionControl.WaitType>();
+
+	private bool m_IsMotionBlend = true;
+
+	private bool m_IsVoiceWait;
+
+	private bool m_IsVoiceAfter;
+
+	public enum WaitType
+	{
+		Normal,
+		Split1,
+		Split2,
+		Muku,
+		Majime,
+		Rindere
+	}
+
+	[Serializable]
+	private class Motion3Part
+	{
+		public bool IsStartandEnd
+		{
+			get
+			{
+				return !string.IsNullOrEmpty(this.WaitStartLabel) && !string.IsNullOrEmpty(this.WaitEndLabel);
+			}
+		}
+
+		public string WaitStartLabel;
+
+		public string WaitEndLabel;
+	}
+}

+ 422 - 0
Assembly-CSharp/BjPlayer.cs

@@ -0,0 +1,422 @@
+using System;
+using UnityEngine;
+
+public class BjPlayer : MonoBehaviour
+{
+	public static BjPlayer Instance { get; private set; }
+
+	public long CurrentBet { get; private set; }
+
+	public long SplitBet { get; private set; }
+
+	public long TotalWinnings { get; private set; }
+
+	public PlayerHand standardHand
+	{
+		get
+		{
+			return this.m_StandardHand;
+		}
+	}
+
+	public PlayerHand splitHand
+	{
+		get
+		{
+			return this.m_SplitHand;
+		}
+	}
+
+	public PlayerHand CurrentHand { get; private set; }
+
+	public long OrijinCredit { get; private set; }
+
+	public bool IsDecrease { get; private set; }
+
+	public long MoneyDifference
+	{
+		get
+		{
+			return this.OrijinCredit - GameMain.Instance.CharacterMgr.status.casinoCoin;
+		}
+	}
+
+	public long FactMoneyDifference { get; private set; }
+
+	public bool NotEnoughCredit
+	{
+		get
+		{
+			return GameMain.Instance.CharacterMgr.status.casinoCoin < BetSetUI.Instance.MoneySetting.MinValue;
+		}
+	}
+
+	public bool IsNowSplitHand
+	{
+		get
+		{
+			return this.CurrentHand == this.splitHand;
+		}
+	}
+
+	private void Awake()
+	{
+		BjPlayer.Instance = this;
+		this.m_Playerhands = new PlayerHand[]
+		{
+			this.standardHand,
+			this.splitHand
+		};
+	}
+
+	private void Start()
+	{
+		this.m_StartingBet = BetSetUI.Instance.MoneySetting.MinValue;
+	}
+
+	public void SubtractBet()
+	{
+		this.OrijinCredit = GameMain.Instance.CharacterMgr.status.casinoCoin;
+		GameMain.Instance.CharacterMgr.status.casinoCoin -= this.CurrentBet;
+		UIStates.Instance.OnStateChange();
+	}
+
+	public void AwardWinnings(int dealerScore)
+	{
+		this.TotalWinnings = 0L;
+		this.ShowOutcomes(dealerScore, Dealer.Instance.IsNatural21());
+		foreach (PlayerHand playerHand in this.m_Playerhands)
+		{
+			long num = 0L;
+			if (playerHand.IsEnded() && !playerHand.IsBust())
+			{
+				if (playerHand.IsSurrender)
+				{
+					num = this.GetPushWinnings(playerHand) / 2L;
+				}
+				else if (playerHand.IsEven)
+				{
+					num = this.GetPushWinnings(playerHand);
+				}
+				else if (playerHand.IsWin)
+				{
+					num = this.GetWinnings(playerHand);
+				}
+			}
+			this.TotalWinnings += num;
+			foreach (ChipStack chipStack in ChipManager.Instance.ChipStacks)
+			{
+				if ((chipStack.IsSplitBetStack && playerHand == this.splitHand) || (!chipStack.IsSplitBetStack && playerHand != this.splitHand))
+				{
+					chipStack.IsSurrender = playerHand.IsSurrender;
+					chipStack.IsWinningStack = (num > 0L);
+					chipStack.IsEven = playerHand.IsEven;
+					chipStack.IsBlackJack = playerHand.IsNatural21();
+				}
+			}
+		}
+		bool flag = GameMain.Instance.CharacterMgr.status.casinoCoin + this.TotalWinnings > 999999L;
+		GameMain.Instance.CharacterMgr.status.casinoCoin += this.TotalWinnings;
+		if (flag)
+		{
+			this.FactMoneyDifference = this.TotalWinnings - (this.SplitBet + this.CurrentBet);
+		}
+		else
+		{
+			this.FactMoneyDifference = -this.MoneyDifference;
+		}
+		this.IsDecrease = (GameMain.Instance.CharacterMgr.status.casinoCoin < this.OrijinCredit);
+		UIStates.Instance.OnStateChange();
+		UIStates.Instance.ShowOutcomeText();
+		ChipManager.Instance.UpdateStacks();
+	}
+
+	private long GetWinnings(PlayerHand hand)
+	{
+		long num = this.CurrentBet;
+		if (hand == this.splitHand)
+		{
+			num = this.SplitBet;
+		}
+		long result = num * 2L;
+		if (hand.IsNatural21())
+		{
+			result = (long)Mathf.FloorToInt((float)num * 2.5f);
+		}
+		return result;
+	}
+
+	private long GetPushWinnings(PlayerHand hand)
+	{
+		return (!(hand == this.splitHand)) ? this.CurrentBet : this.SplitBet;
+	}
+
+	public void SetBet(long bet)
+	{
+		if (this.CurrentHand == this.splitHand)
+		{
+			this.SplitBet = bet;
+		}
+		else
+		{
+			this.CurrentBet = bet;
+		}
+		UIStates.Instance.OnStateChange();
+	}
+
+	public void ClearBet()
+	{
+		this.CurrentBet = BetSetUI.Instance.MoneySetting.MinValue;
+		UIStates.Instance.OnStateChange();
+	}
+
+	public bool IsDoubleDown()
+	{
+		return this.CurrentHand.IsDoubleDown;
+	}
+
+	public bool IsStandardDoubleDown()
+	{
+		return this.standardHand.IsDoubleDown;
+	}
+
+	public bool IsSplitDoubleDown()
+	{
+		return this.splitHand.IsDoubleDown;
+	}
+
+	public void Surrender()
+	{
+		this.CurrentHand.IsSurrender = true;
+	}
+
+	public void DoubleDown()
+	{
+		this.SubtractDoubleDownBet();
+		this.CurrentHand.IsDoubleDown = true;
+		this.CurrentHand.Stand();
+	}
+
+	public GameObject DealCard(CardData card)
+	{
+		if (this.IsPlacingBet())
+		{
+			this.m_StartingBet = this.CurrentBet;
+		}
+		return this.CurrentHand.DealCard(card);
+	}
+
+	public void UpdateScore()
+	{
+		this.standardHand.UpdateScoreView();
+		this.splitHand.UpdateScoreView();
+	}
+
+	public void ResetScore()
+	{
+		this.standardHand.ResetScore();
+		this.splitHand.ResetScore();
+	}
+
+	public void ResetTable()
+	{
+		this.CurrentBet = this.m_StartingBet;
+		this.OrijinCredit = GameMain.Instance.CharacterMgr.status.casinoCoin;
+		this.TotalWinnings = 0L;
+		this.m_DoubleDownBet = 0L;
+		this.SplitBet = 0L;
+		this.standardHand.ResetHand();
+		this.splitHand.ResetHand();
+		this.CurrentHand = this.standardHand;
+		this.m_SplitGame = false;
+		this.EndingGame = false;
+		this.IsDecrease = false;
+		this.IsturnEnd = false;
+		UIStates.Instance.StateReset();
+	}
+
+	public bool IsSplitGame()
+	{
+		return this.m_SplitGame;
+	}
+
+	public bool IsIdle()
+	{
+		return this.CurrentHand.CurrentScore == 0 && this.splitHand.CurrentScore == 0 && !BetSetUI.Instance.IsDoBet;
+	}
+
+	public bool IsPlacingBet()
+	{
+		return this.CurrentHand.CurrentScore == 0 && this.splitHand.CurrentScore == 0 && BetSetUI.Instance.IsDoBet;
+	}
+
+	public bool CanHit()
+	{
+		return this.CurrentHand.CanHit();
+	}
+
+	public bool CanDoubleDown()
+	{
+		return this.CurrentHand == this.splitHand && this.splitHand.DoubleDownAvailable();
+	}
+
+	public bool HandIsEnded()
+	{
+		return this.CurrentHand.IsEnded();
+	}
+
+	public bool IsNatural21()
+	{
+		return this.standardHand.IsNatural21();
+	}
+
+	public bool IsEnded()
+	{
+		if (this.m_SplitGame)
+		{
+			return this.standardHand.IsEnded() && this.splitHand.IsEnded();
+		}
+		return this.CurrentHand.IsEnded();
+	}
+
+	public bool DoubleDownEnoughMoney()
+	{
+		if (this.CurrentHand == this.splitHand)
+		{
+			return GameMain.Instance.CharacterMgr.status.casinoCoin - this.SplitBet >= 0L;
+		}
+		return GameMain.Instance.CharacterMgr.status.casinoCoin - this.CurrentBet >= 0L;
+	}
+
+	public bool DoubleDownAvailable()
+	{
+		return !this.EndingGame && this.CurrentHand.DoubleDownAvailable() && this.DoubleDownEnoughMoney();
+	}
+
+	public bool SplitEnoughMoney()
+	{
+		return GameMain.Instance.CharacterMgr.status.casinoCoin - this.CurrentBet >= 0L;
+	}
+
+	public bool SplitAvailable()
+	{
+		return !this.m_SplitGame && this.CurrentHand.SplitAvailable() && this.SplitEnoughMoney();
+	}
+
+	public void StandOnCurrentHand()
+	{
+		this.CurrentHand.Stand();
+	}
+
+	private void SubtractDoubleDownBet()
+	{
+		this.m_DoubleDownBet = this.CurrentBet;
+		GameMain.Instance.CharacterMgr.status.casinoCoin -= this.m_DoubleDownBet;
+		if (this.CurrentHand == this.splitHand)
+		{
+			this.SplitBet += this.m_DoubleDownBet;
+		}
+		else
+		{
+			this.CurrentBet += this.m_DoubleDownBet;
+		}
+	}
+
+	private void SubtractSplitBet()
+	{
+		this.SplitBet = this.CurrentBet;
+		GameMain.Instance.CharacterMgr.status.casinoCoin -= this.SplitBet;
+	}
+
+	public void Split()
+	{
+		this.m_SplitGame = true;
+		this.SubtractSplitBet();
+		this.CurrentHand = this.splitHand;
+	}
+
+	public void NextHand()
+	{
+		if (this.m_SplitGame)
+		{
+			this.CurrentHand = this.standardHand;
+			this.CurrentHand.ResetPositionForSplit();
+		}
+	}
+
+	public bool CanSurrender()
+	{
+		return !this.IsSplitGame() && this.CurrentHand.CanSurrender() && !this.EndingGame && Dealer.Instance.HasFacedownCard();
+	}
+
+	private void ShowOutcomes(int dealerScore, bool dealerBlackjack)
+	{
+		foreach (PlayerHand playerHand in this.m_Playerhands)
+		{
+			playerHand.ShowOutcome(dealerScore, dealerBlackjack);
+		}
+	}
+
+	public long GetCurrentBet()
+	{
+		if (this.CurrentHand == this.splitHand)
+		{
+			return this.SplitBet;
+		}
+		return this.CurrentBet;
+	}
+
+	public bool IsEven()
+	{
+		if (this.m_SplitGame)
+		{
+			return this.standardHand.IsEven && this.splitHand.IsEven;
+		}
+		return this.standardHand.IsEven;
+	}
+
+	public bool ExistDoubleDownwWin()
+	{
+		return this.standardHand.DoubleDownWin() || this.splitHand.DoubleDownWin();
+	}
+
+	public bool ExistWinHand()
+	{
+		return this.standardHand.IsWin || this.splitHand.IsWin;
+	}
+
+	public bool OnesideWin()
+	{
+		return (!this.standardHand.IsWin || !this.splitHand.IsWin) && (this.standardHand.IsWin || this.splitHand.IsWin);
+	}
+
+	public bool ExistSurrenderHand()
+	{
+		return this.standardHand.IsSurrender;
+	}
+
+	public bool ExistBlackJack()
+	{
+		return this.standardHand.IsNatural21() || this.splitHand.IsNatural21();
+	}
+
+	private long m_DoubleDownBet;
+
+	[HideInInspector]
+	public bool EndingGame;
+
+	private long m_StartingBet;
+
+	[SerializeField]
+	private PlayerHand m_StandardHand;
+
+	[SerializeField]
+	private PlayerHand m_SplitHand;
+
+	private PlayerHand[] m_Playerhands;
+
+	private bool m_SplitGame;
+
+	[HideInInspector]
+	public bool IsturnEnd;
+}

+ 142 - 0
Assembly-CSharp/BjVoiceMgr.cs

@@ -0,0 +1,142 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class BjVoiceMgr : MonoBehaviour
+{
+	public static BjVoiceMgr Instance { get; private set; }
+
+	private Maid m_TargetMaid
+	{
+		get
+		{
+			return GameMain.Instance.CharacterMgr.GetMaid(0);
+		}
+	}
+
+	public bool isPlay
+	{
+		get
+		{
+			return this.m_TargetMaid.AudioMan.isPlay();
+		}
+	}
+
+	private void Awake()
+	{
+		BjVoiceMgr.Instance = this;
+		KasaiUtility.CsvReadY("bj_voice_data.nei", new Action<CsvParser, int>(this.ReadVoiceData), 1, null);
+	}
+
+	private void Start()
+	{
+		if (CasinoDataMgr.Instance.DealerMaid)
+		{
+			string label_name = string.Empty;
+			if (GameMain.Instance.ScriptMgr.adv_kag.tag_backup.ContainsKey("voice_label"))
+			{
+				label_name = GameMain.Instance.ScriptMgr.adv_kag.tag_backup["voice_label"];
+			}
+			GameMain.Instance.ScriptMgr.adv_kag.JumpLabel(label_name);
+		}
+		else
+		{
+			string file_name = ScriptManager.ReplacePersonal(this.m_TargetMaid, this.m_VoiceScript);
+			GameMain.Instance.ScriptMgr.LoadAdvScenarioScript(file_name, string.Empty);
+		}
+		GameMain.Instance.ScriptMgr.adv_kag.Exec();
+	}
+
+	private void ReadVoiceData(CsvParser csv, int cy)
+	{
+		this.m_VoiceData.Add(csv.GetCellAsString(0, cy), csv.GetCellAsString(1, cy));
+	}
+
+	private IEnumerator VoiceWait(Action end_call)
+	{
+		yield return null;
+		while (this.m_TargetMaid.AudioMan.isPlay())
+		{
+			yield return null;
+		}
+		if (end_call != null)
+		{
+			end_call();
+		}
+		yield break;
+	}
+
+	private void Recet()
+	{
+		this.m_TargetMaid.FaceBlend("無し");
+		this.m_TargetMaid.FaceAnime("通常", 1f, 0);
+		GameMain.Instance.ScriptMgr.adv_kag.ClearExecWait();
+	}
+
+	public void PlayScoreVoice(Action end_call = null, float fade_time = 0f)
+	{
+		if (Dealer.Instance.IsNatural21())
+		{
+			this.PlayVoice("ディーラーBJ", end_call, fade_time);
+		}
+		else if (Dealer.Instance.IsBust())
+		{
+			this.PlayVoice("ディーラーバースト", end_call, fade_time);
+		}
+		else
+		{
+			this.PlayVoice(Dealer.Instance.CurrentScore.ToString(), end_call, fade_time);
+		}
+	}
+
+	public void PlayVoice(string voice_category, Action end_call = null, float fade_time = 0f)
+	{
+		if (!this.m_VoiceData.ContainsKey(voice_category))
+		{
+			return;
+		}
+		GameMain.Instance.ScriptMgr.adv_kag.ClearExecWait();
+		GameMain.Instance.ScriptMgr.adv_kag.JumpLabel(this.m_VoiceData[voice_category]);
+		GameMain.Instance.ScriptMgr.adv_kag.Exec();
+		if (end_call != null)
+		{
+			base.StartCoroutine(this.VoiceWait(end_call));
+		}
+	}
+
+	public void VoiceToVoice(string first_voice, string second_voice, Action end_call, float first_fade = 0f, float second_fade = 0f)
+	{
+		this.PlayVoice(first_voice, delegate
+		{
+			this.PlayVoice(second_voice, end_call, second_fade);
+		}, first_fade);
+	}
+
+	public void Stop()
+	{
+		this.Recet();
+		base.StopAllCoroutines();
+		if (this.m_TargetMaid && this.m_TargetMaid.AudioMan)
+		{
+			this.m_TargetMaid.AudioMan.Stop();
+		}
+	}
+
+	public void VoiceEnd()
+	{
+		this.Recet();
+		GameMain.Instance.ScriptMgr.adv_kag.JumpLabel(this.m_EndLabel);
+		GameMain.Instance.ScriptMgr.adv_kag.Exec();
+	}
+
+	private Dictionary<string, string> m_VoiceData = new Dictionary<string, string>();
+
+	[SerializeField]
+	[Header("ボイス再生用のスクリプトファイル")]
+	private string m_VoiceScript = "?_casino_0001.ks";
+
+	[SerializeField]
+	[Header(" ボイス用スクリプトから抜けるときのラベル")]
+	private string m_EndLabel = "*カジノうひょー";
+}

+ 601 - 0
Assembly-CSharp/BlackjackGame.cs

@@ -0,0 +1,601 @@
+using System;
+using System.Collections;
+using PlayerStatus;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class BlackjackGame : MonoBehaviour
+{
+	public static BlackjackGame Instance { get; private set; }
+
+	public bool isZoom
+	{
+		get
+		{
+			return this.m_IsZoom;
+		}
+	}
+
+	public AudioSource CardSe
+	{
+		get
+		{
+			return this.m_CardSe;
+		}
+	}
+
+	public DealQueue DealQueue
+	{
+		get
+		{
+			return this.m_DealQueue;
+		}
+	}
+
+	private void Awake()
+	{
+		BlackjackGame.Instance = this;
+		uGUIUtility.GetEventSystem();
+		if (GameMain.Instance.ScriptMgr.adv_kag.tag_backup.ContainsKey("cancel_label"))
+		{
+			this.m_CancelLabel = GameMain.Instance.ScriptMgr.adv_kag.tag_backup["cancel_label"];
+		}
+	}
+
+	private void Start()
+	{
+		GameMain.Instance.SysShortcut.strSceneHelpName = "SceneBlackJack";
+		this.m_DealQueue = new DealQueue();
+		this.m_DealQueue.Init();
+		this.ResetTable();
+		base.StartCoroutine(this.CharaLoadWait());
+	}
+
+	private IEnumerator CharaLoadWait()
+	{
+		GameMain.Instance.BgMgr.DeleteBg();
+		GameMain.Instance.SoundMgr.PlayBGM(this.m_BGMName, 0.5f, true);
+		this.m_MainCamType = GameMain.Instance.MainCamera.GetCameraType();
+		GameMain.Instance.MainCamera.SetTargetPos(this.m_NormalCamSetting.TatgetPos, true);
+		GameMain.Instance.MainCamera.SetDistance(this.m_NormalCamSetting.Distance, true);
+		GameMain.Instance.MainCamera.SetAroundAngle(this.m_NormalCamSetting.TargetAngle, true);
+		GameMain.Instance.MainLight.Reset();
+		GameMain.Instance.MainCamera.FadeOut(0f, false, null, true, default(Color));
+		this.m_ControlEnable = GameMain.Instance.MainCamera.GetControl();
+		GameMain.Instance.MainCamera.SetControl(false);
+		this.m_UIRaycaster.enabled = false;
+		if (CasinoDataMgr.Instance.DealerMaid)
+		{
+			GameMain.Instance.CharacterMgr.SetActiveMaid(CasinoDataMgr.Instance.DealerMaid, 0);
+			CasinoDataMgr.Instance.DealerMaid.AllProcPropSeqStart();
+			CasinoDataMgr.Instance.DealerMaid.Visible = true;
+		}
+		else
+		{
+			GameMain.Instance.CharacterMgr.status.casinoCoin = 499999L;
+			ExChangeUI.Instance.TextUIUpdate();
+		}
+		bool need_costumeload = CasinoDataMgr.Instance.DealerMaid && CasinoDataMgr.Instance.CurrentCasino.typeCostume != Facility.CostumeType.Heroine;
+		Action load_end = delegate
+		{
+			BjMotionControl.Instance.Init();
+			this.$this.m_ChaOffsetRot = GameMain.Instance.CharacterMgr.GetCharaAllOfsetRot();
+			GameMain.Instance.CharacterMgr.CharaAllOfsetRot(this.$this.m_DealerMaidAngle);
+			this.$this.m_UIRaycaster.enabled = true;
+			GameMain.Instance.MainCamera.FadeIn(0.5f, false, null, false, true, default(Color));
+		};
+		while (GameMain.Instance.CharacterMgr.IsBusy())
+		{
+			yield return null;
+		}
+		if (!need_costumeload)
+		{
+			yield return null;
+			load_end();
+			yield break;
+		}
+		Maid dealerMaid = CasinoDataMgr.Instance.DealerMaid;
+		Facility.CostumeType typeCostume = CasinoDataMgr.Instance.CurrentCasino.typeCostume;
+		if (typeCostume != Facility.CostumeType.Default)
+		{
+			if (typeCostume == Facility.CostumeType.Edit)
+			{
+				CasinoDataMgr.Instance.CurrentCasino.UpdateMaidCostumeToEditCostume(dealerMaid, false);
+			}
+		}
+		else
+		{
+			CasinoDataMgr.Instance.CurrentCasino.UpdateMaidCostumeToDefaultCostume(dealerMaid);
+		}
+		dealerMaid.AllProcPropSeqStart();
+		while (GameMain.Instance.CharacterMgr.IsBusy())
+		{
+			yield return null;
+		}
+		yield return null;
+		load_end();
+		yield break;
+	}
+
+	public void SetDealerPos()
+	{
+		this.m_ChaOffsetPos = GameMain.Instance.CharacterMgr.GetCharaAllOfsetPos();
+		GameMain.Instance.CharacterMgr.CharaAllOfsetPos(this.m_DealerMaidPos);
+	}
+
+	public void AngleChange()
+	{
+		UIStates.Instance.AngleDisabled();
+		this.m_IsZoom = !this.m_IsZoom;
+		base.StartCoroutine(KasaiUtility.TimeCroutine(this.m_AngleChange, new Action<float>(this.SetCamAngle), new Action(UIStates.Instance.AngleAbled)));
+	}
+
+	private void OnceAngleChange()
+	{
+		UIStates.Instance.AngleDisabled();
+		BjMotionControl.Instance.DoLeaveMotion = false;
+		this.m_IsZoom = !this.m_IsZoom;
+		base.StartCoroutine(KasaiUtility.TimeCroutine(this.m_AngleChange, new Action<float>(this.SetCamAngle), null));
+	}
+
+	private void SetCamAngle(float time)
+	{
+		float t = (!this.m_IsZoom) ? (1f - Mathf.Clamp01(time / this.m_AngleChange)) : Mathf.Clamp01(time / this.m_AngleChange);
+		GameMain.Instance.MainCamera.SetTargetPos(Vector3.Lerp(this.m_NormalCamSetting.TatgetPos, this.m_ZoomCamSetting.TatgetPos, t), true);
+		GameMain.Instance.MainCamera.SetAroundAngle(Vector2.Lerp(this.m_NormalCamSetting.TargetAngle, this.m_ZoomCamSetting.TargetAngle, t), true);
+		GameMain.Instance.MainCamera.SetDistance(Mathf.Lerp(this.m_NormalCamSetting.Distance, this.m_ZoomCamSetting.Distance, t), true);
+	}
+
+	public void Deal()
+	{
+		UIStates.Instance.SetEnabled(false);
+		UIStates.Instance.AngleAbled();
+		if (BjPlayer.Instance.IsPlacingBet())
+		{
+			BjMotionControl.Instance.PlayMotion("*初期配布", new Action(this.FinishedDealing), false, false);
+			if (GameMain.Instance.CharacterMgr.status.casinoCoin >= BjPlayer.Instance.CurrentBet)
+			{
+				this.InitialDeal();
+			}
+		}
+	}
+
+	public void Hit()
+	{
+		BjPlayer.Instance.CurrentHand.IsHit = true;
+		ActionDirect.Instance.ActionStart(Translations.Instance.HIT);
+		UIStates.Instance.SetEnabled(false);
+		BjMotionControl.Instance.DoLeaveMotion = false;
+		Action end_action = delegate
+		{
+			BjMotionControl.Instance.PlayMotion(BjMotionControl.Instance.GetHaihuMotion(), new Action(this.FinishedDealing), false, false);
+			if (!BjPlayer.Instance.IsPlacingBet())
+			{
+				this.DealPlayer();
+			}
+		};
+		BjVoiceMgr.Instance.PlayVoice("ヒット", null, 0f);
+		BjMotionControl.Instance.PlayMotion("*頷く", end_action, true, false);
+	}
+
+	public void DoubleDown()
+	{
+		ActionDirect.Instance.ActionStart(Translations.Instance.DOUBLE_DOWN);
+		UIStates.Instance.SetEnabled(false);
+		BjMotionControl.Instance.DoLeaveMotion = false;
+		Action end_action = delegate
+		{
+			ChipManager instance = ChipManager.Instance;
+			instance.StackEndCallBack = (Action)Delegate.Combine(instance.StackEndCallBack, new Action(delegate
+			{
+				BjVoiceMgr.Instance.PlayVoice("ダブルダウンオープン", new Action(this.DoDoubleDown), 0f);
+			}));
+			ChipManager instance2 = ChipManager.Instance;
+			instance2.StackEndCallBack = (Action)Delegate.Combine(instance2.StackEndCallBack, new Action(UIStates.Instance.OnStateChange));
+			BjPlayer.Instance.DoubleDown();
+			ChipManager.Instance.UpdateStacks();
+			BjMotionControl.Instance.SetWaitMotion(BjMotionControl.WaitType.Normal);
+		};
+		BjVoiceMgr.Instance.PlayVoice("ダブルダウン", null, 0f);
+		BjMotionControl.Instance.PlayMotion("*頷く", end_action, true, false);
+	}
+
+	private void DoDoubleDown()
+	{
+		BjMotionControl.Instance.PlayMotion(BjMotionControl.Instance.GetHaihuMotion(), new Action(this.FinishedDealing), false, false);
+		CardData card = CardDeck.Instance.GetCard();
+		this.m_DealQueue.DealCard(BjPlayer.Instance.DealCard(card));
+	}
+
+	public void Stand()
+	{
+		ActionDirect.Instance.ActionStart(Translations.Instance.STAND);
+		UIStates.Instance.SetEnabled(false);
+		BjMotionControl.Instance.DoLeaveMotion = false;
+		Action end_action = delegate
+		{
+			if (!BjPlayer.Instance.IsSplitGame())
+			{
+				BjMotionControl.Instance.SetWaitMotion(BjMotionControl.WaitType.Normal);
+			}
+			else
+			{
+				BjMotionControl.Instance.SetWaitMotion(BjMotionControl.WaitType.Split2);
+			}
+			BjPlayer.Instance.StandOnCurrentHand();
+			this.CheckIfEnded();
+		};
+		BjVoiceMgr.Instance.PlayVoice("スタンド", null, 0f);
+		BjMotionControl.Instance.PlayMotion("*頷く", end_action, true, false);
+	}
+
+	public void Split()
+	{
+		ActionDirect.Instance.ActionStart(Translations.Instance.SPLIT);
+		BjMotionControl.Instance.DoLeaveMotion = false;
+		UIStates.Instance.SetEnabled(false);
+		Action end_action = delegate
+		{
+			ChipManager instance = ChipManager.Instance;
+			instance.StackEndCallBack = (Action)Delegate.Combine(instance.StackEndCallBack, new Action(delegate
+			{
+				GameMain.Instance.MainCamera.FadeOut(0.5f, false, new CameraMain.dgOnCompleteFade(this.SplitFadeIn), false, default(Color));
+			}));
+			ChipManager instance2 = ChipManager.Instance;
+			instance2.StackEndCallBack = (Action)Delegate.Combine(instance2.StackEndCallBack, new Action(UIStates.Instance.OnStateChange));
+			BjPlayer.Instance.Split();
+			ChipManager.Instance.UpdateStacks();
+		};
+		BjVoiceMgr.Instance.PlayVoice("スプリット", null, 0f);
+		BjMotionControl.Instance.PlayMotion("*頷く", end_action, true, false);
+	}
+
+	private void SplitFadeIn()
+	{
+		GameObject card = BjPlayer.Instance.standardHand.TakeCard(1);
+		BjPlayer.Instance.splitHand.StartSplit(card);
+		BjPlayer.Instance.UpdateScore();
+		GameMain.Instance.MainCamera.FadeIn(0.5f, false, new CameraMain.dgOnCompleteFade(this.DoSplit), false, true, default(Color));
+	}
+
+	private void DoSplit()
+	{
+		BjMotionControl.Instance.PlayMotion(BjMotionControl.Instance.GetHaihuMotion(), new Action(this.FinishedDealing), false, false);
+		this.DealPlayer();
+		BjMotionControl.Instance.SetWaitMotion(BjMotionControl.WaitType.Split2);
+	}
+
+	public void Surrender()
+	{
+		ActionDirect.Instance.ActionStart(Translations.Instance.SURRENDER);
+		UIStates.Instance.SetEnabled(false);
+		BjMotionControl.Instance.DoLeaveMotion = false;
+		Action end_action = delegate
+		{
+			BjPlayer.Instance.Surrender();
+			this.CheckIfEnded();
+		};
+		BjVoiceMgr.Instance.PlayVoice("サレンダー", null, 0f);
+		BjMotionControl.Instance.PlayMotion("*頷く", end_action, true, false);
+	}
+
+	private void InitialDeal()
+	{
+		BjPlayer.Instance.SubtractBet();
+		for (int i = 0; i < 2; i++)
+		{
+			this.DealPlayer();
+			this.DealDealer();
+		}
+	}
+
+	private void DealDealer()
+	{
+		UIStates.Instance.SetEnabled(false);
+		BjMotionControl.Instance.SetWaitMotion(BjMotionControl.WaitType.Normal);
+		if (Dealer.Instance.HasFacedownCard())
+		{
+			Action end_call = delegate
+			{
+				BjMotionControl.Instance.PlayMotion("*カード開く", new Action(this.FinishedAnimating), false, false);
+				this.m_DealQueue.CardOpen(Dealer.Instance.GetFacedownCard());
+			};
+			BjVoiceMgr.Instance.PlayVoice("ディーラーオープン", end_call, 0f);
+		}
+		else if (Dealer.Instance.NeedCardMove)
+		{
+			BjMotionControl.Instance.PlayMotion("*カード移動", new Action(this.DealDealer), false, false);
+			Dealer.Instance.CardMove();
+		}
+		else
+		{
+			if (BjPlayer.Instance.IsturnEnd)
+			{
+				BjMotionControl.Instance.PlayMotion("*ディーラーに配布", new Action(this.FinishedAnimating), false, false);
+			}
+			CardData card = CardDeck.Instance.GetCard();
+			this.m_DealQueue.DealCard(Dealer.Instance.DealCard(card));
+		}
+	}
+
+	private void DealPlayer()
+	{
+		UIStates.Instance.SetEnabled(false);
+		CardData card = CardDeck.Instance.GetCard();
+		this.m_DealQueue.DealCard(BjPlayer.Instance.DealCard(card));
+	}
+
+	private void FinishedAnimating()
+	{
+		Dealer.Instance.CheckSurrender();
+		Dealer.Instance.CalculateScore();
+		this.FinishedDealing();
+	}
+
+	private void FinishedDealing()
+	{
+		BjMotionControl.Instance.ForceWaitStop = false;
+		UIStates.Instance.SetEnabled(true);
+		UIStates.Instance.OnStateChange();
+		BjPlayer.Instance.UpdateScore();
+		Dealer.Instance.UpdateScoreView();
+		this.CheckIfEnded();
+		if (BetSetUI.Instance.IsDoBet && !BjPlayer.Instance.IsEnded() && !BjPlayer.Instance.IsSplitGame())
+		{
+			BjMotionControl.Instance.DoLeaveMotion = true;
+		}
+		BjMotionControl.Instance.PlayWaitMotion();
+	}
+
+	private void CheckIfEnded()
+	{
+		if (BjPlayer.Instance.IsEnded())
+		{
+			this.PlayerIsFinished();
+		}
+		else if (BjPlayer.Instance.IsSplitGame() && BjPlayer.Instance.HandIsEnded() && BjPlayer.Instance.CurrentHand == BjPlayer.Instance.splitHand)
+		{
+			bool is_bust = BjPlayer.Instance.CurrentHand.IsBust();
+			Action action = delegate
+			{
+				BjPlayer.Instance.NextHand();
+				BjMotionControl.Instance.PlayMotion(BjMotionControl.Instance.GetHaihuMotion(), new Action(this.FinishedDealing), is_bust, true);
+				this.DealPlayer();
+				BjMotionControl.Instance.SetWaitMotion(BjMotionControl.WaitType.Split1);
+			};
+			if (is_bust)
+			{
+				if (BjPlayer.Instance.CurrentHand.IsDoubleDown)
+				{
+					BjVoiceMgr.Instance.PlayVoice("ダブルダウン慰め", action, 0f);
+				}
+				else
+				{
+					BjVoiceMgr.Instance.PlayVoice("バースト慰め", action, 0f);
+				}
+				this.m_BustSe.Play();
+				ActionDirect.Instance.ActionStart(Translations.Instance.BUST);
+				BjMotionControl.Instance.SetWaitMotion(BjMotionControl.WaitType.Normal);
+			}
+			else
+			{
+				BjMotionControl.Instance.ForceWaitStop = true;
+				action();
+			}
+		}
+		else if (BjPlayer.Instance.CurrentHand.IsHit)
+		{
+			BjVoiceMgr.Instance.PlayVoice("ヒット後選択", null, 0f);
+		}
+		else if (BjPlayer.Instance.IsSplitGame())
+		{
+			BjVoiceMgr.Instance.PlayVoice("スプリット選択", null, 0f);
+		}
+		else
+		{
+			BjVoiceMgr.Instance.PlayVoice("行動選択", null, 0f);
+		}
+	}
+
+	private void PlayerIsFinished()
+	{
+		if (!BjPlayer.Instance.IsEnded())
+		{
+			return;
+		}
+		if (!Dealer.Instance.IsEnded())
+		{
+			BjPlayer.Instance.IsturnEnd = true;
+			UIStates.Instance.SetEnabled(false);
+			if (Dealer.Instance.HasFacedownCard())
+			{
+				if (BjPlayer.Instance.CurrentHand.IsNatural21())
+				{
+					BjVoiceMgr.Instance.PlayVoice("ブラックジャック", new Action(this.DealDealer), 0f);
+					GameMain.Instance.SoundMgr.PlaySe("casino_SE002.ogg", false);
+					ActionDirect.Instance.ActionStart(Translations.Instance.BLACKJACK);
+				}
+				else if (BjPlayer.Instance.CurrentHand.IsBust())
+				{
+					if (BjPlayer.Instance.CurrentHand.IsDoubleDown)
+					{
+						BjVoiceMgr.Instance.PlayVoice("ダブルダウン慰め", new Action(this.DealDealer), 0f);
+					}
+					else
+					{
+						BjVoiceMgr.Instance.PlayVoice("バースト慰め", new Action(this.DealDealer), 0f);
+					}
+					this.m_BustSe.Play();
+					ActionDirect.Instance.ActionStart(Translations.Instance.BUST);
+					BjMotionControl.Instance.SetWaitMotion(BjMotionControl.WaitType.Normal);
+				}
+				else
+				{
+					this.DealDealer();
+				}
+			}
+			else
+			{
+				BjVoiceMgr.Instance.PlayScoreVoice(new Action(this.DealDealer), 0f);
+			}
+		}
+		else
+		{
+			BjVoiceMgr.Instance.PlayScoreVoice(new Action(this.EndGame), 0f);
+		}
+	}
+
+	private void EndGame()
+	{
+		if (!BjPlayer.Instance.EndingGame)
+		{
+			UIStates.Instance.AngleDisabled();
+			if (this.m_IsZoom)
+			{
+				this.OnceAngleChange();
+			}
+			BjPlayer.Instance.EndingGame = true;
+			BjMotionControl.Instance.ForceWaitStop = false;
+			BjMotionControl.Instance.DoLeaveMotion = false;
+			BjPlayer.Instance.AwardWinnings(Dealer.Instance.CurrentScore);
+		}
+	}
+
+	public void ResetTable()
+	{
+		BjVoiceMgr.Instance.Stop();
+		UIStates.Instance.HideResultText();
+		BjPlayer.Instance.ResetScore();
+		Dealer.Instance.ResetScore();
+		BjMotionControl.Instance.PlayWaitMotion(BjMotionControl.WaitType.Normal);
+		this.HardResetTable();
+	}
+
+	private void HardResetTable()
+	{
+		BetSetUI.Instance.StateRecet();
+		CardDeck.Instance.Shuffle(this.m_DeckCount);
+		BjPlayer.Instance.ResetTable();
+		Dealer.Instance.ResetHand();
+		ChipManager.Instance.HardReset();
+		ChipManager.Instance.UpdateStacks();
+	}
+
+	public static string BlackJackResource(string behind_path)
+	{
+		return "SceneBlackJack/" + behind_path;
+	}
+
+	public Vector3 DeckPos()
+	{
+		return this.m_DeckObj.transform.position;
+	}
+
+	public void PushEndButton()
+	{
+		GameMain.Instance.SysDlg.Show("カジノ画面に戻ります", SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BJEnd), null);
+	}
+
+	public void BJStart()
+	{
+		Status status = GameMain.Instance.CharacterMgr.status;
+		if (status.casinoCoin >= BetSetUI.Instance.MoneySetting.MinValue)
+		{
+			BetSetUI.Instance.FadeIn();
+			UIStates.Instance.OnStateChange();
+		}
+		else
+		{
+			string f_strMsg = string.Format("ブラックジャックをするには最低でも\nコインが{0:#,##0}枚必用です", BetSetUI.Instance.MoneySetting.MinValue);
+			GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK, null, null);
+		}
+	}
+
+	public void BJEnd()
+	{
+		this.m_UIRaycaster.enabled = false;
+		GameMain.Instance.SysDlg.Close();
+		BetSetUI.Instance.FadeOut();
+		GameMain.Instance.MainCamera.FadeOut(0.5f, false, delegate
+		{
+			BjVoiceMgr.Instance.VoiceEnd();
+			GameMain.Instance.CharacterMgr.ResetCharaPosAll();
+			GameMain.Instance.CharacterMgr.CharaAllOfsetRot(Vector3.zero);
+			GameMain.Instance.ScriptMgr.is_motion_blend = false;
+			GameMain.Instance.ScriptMgr.ClearForcExecWaitEvent();
+			GameMain.Instance.ScriptMgr.StopMotionScript();
+			GameMain.Instance.ScriptMgr.adv_kag.JumpLabel(this.m_CancelLabel);
+			GameMain.Instance.ScriptMgr.adv_kag.Exec();
+		}, true, default(Color));
+	}
+
+	public const float DeskHeight = 0.755f;
+
+	[SerializeField]
+	private string m_BGMName = "BGM009.ogg";
+
+	[SerializeField]
+	[Header("ディーラーとなるメイドの位置")]
+	private Vector3 m_DealerMaidPos;
+
+	[SerializeField]
+	[Header("ディーラーとなるメイドの角度")]
+	private Vector3 m_DealerMaidAngle;
+
+	[SerializeField]
+	private float m_AngleChange = 0.5f;
+
+	[SerializeField]
+	[Header("カメラ設定(通常時)")]
+	private BlackjackGame.CamSetting m_NormalCamSetting;
+
+	[SerializeField]
+	[Header("カメラ設定(切り替え時)")]
+	private BlackjackGame.CamSetting m_ZoomCamSetting;
+
+	private bool m_IsZoom;
+
+	[SerializeField]
+	[Header("デッキの個数")]
+	private int m_DeckCount = 1;
+
+	[SerializeField]
+	[Header("デッキオブジェクト")]
+	private GameObject m_DeckObj;
+
+	[SerializeField]
+	[Header("UIの当たり判定クラス")]
+	private GraphicRaycaster m_UIRaycaster;
+
+	[SerializeField]
+	[Header("独自のSe再生用")]
+	private AudioSource m_CardSe;
+
+	[SerializeField]
+	private AudioSource m_BustSe;
+
+	private DealQueue m_DealQueue;
+
+	private bool m_ControlEnable;
+
+	private CameraMain.CameraType m_MainCamType;
+
+	private Vector3 m_ChaOffsetPos;
+
+	private Vector3 m_ChaOffsetRot;
+
+	private string m_CancelLabel;
+
+	[Serializable]
+	private class CamSetting
+	{
+		[Header("カメラのターゲット位置")]
+		public Vector3 TatgetPos;
+
+		[Header("カメラの相対角度")]
+		public Vector2 TargetAngle;
+
+		[Header("ターゲットに対するカメラの距離")]
+		public float Distance;
+	}
+}

+ 13 - 0
Assembly-CSharp/BlendData.cs

@@ -0,0 +1,13 @@
+using System;
+using UnityEngine;
+
+public class BlendData
+{
+	public string name;
+
+	public int[] v_index;
+
+	public Vector3[] vert;
+
+	public Vector3[] norm;
+}

+ 55 - 0
Assembly-CSharp/BodyStatusCtrl.cs

@@ -0,0 +1,55 @@
+using System;
+using UnityEngine;
+
+public class BodyStatusCtrl : MonoBehaviour
+{
+	public void Init(BodyStatusMgr mgr, GameObject m_goPanel)
+	{
+		GameObject childObject = UTY.GetChildObject(m_goPanel, "BodySize", false);
+		this.m_lHeight = UTY.GetChildObject(childObject, "Height/Value", false).GetComponent<UILabel>();
+		this.m_lWeight = UTY.GetChildObject(childObject, "Weight/Value", false).GetComponent<UILabel>();
+		this.m_lBust = UTY.GetChildObject(childObject, "Bust/Value", false).GetComponent<UILabel>();
+		this.m_lCup = UTY.GetChildObject(childObject, "Bust/Cup/Value", false).GetComponent<UILabel>();
+		this.m_lWaist = UTY.GetChildObject(childObject, "Waist/Value", false).GetComponent<UILabel>();
+		this.m_lHip = UTY.GetChildObject(childObject, "Hip/Value", false).GetComponent<UILabel>();
+		UIButton component = UTY.GetChildObject(m_goPanel, "Close", false).GetComponent<UIButton>();
+		EventDelegate.Add(component.onClick, new EventDelegate.Callback(mgr.CloseBodyPanel));
+	}
+
+	public void SetData(BodyStatusCtrl.Status status)
+	{
+		this.m_lHeight.text = status.height.ToString();
+		this.m_lWeight.text = status.weight.ToString();
+		this.m_lBust.text = status.bust.ToString();
+		this.m_lCup.text = status.cup;
+		this.m_lWaist.text = status.waist.ToString();
+		this.m_lHip.text = status.hip.ToString();
+	}
+
+	private UILabel m_lHeight;
+
+	private UILabel m_lWeight;
+
+	private UILabel m_lBust;
+
+	private UILabel m_lCup;
+
+	private UILabel m_lWaist;
+
+	private UILabel m_lHip;
+
+	public class Status
+	{
+		public int height;
+
+		public int weight;
+
+		public int bust;
+
+		public string cup;
+
+		public int waist;
+
+		public int hip;
+	}
+}

+ 147 - 0
Assembly-CSharp/BodyStatusMgr.cs

@@ -0,0 +1,147 @@
+using System;
+using System.Collections.Generic;
+using MaidStatus;
+using SceneEditWindow;
+using UnityEngine;
+using wf;
+
+public class BodyStatusMgr : BaseMgr<BodyStatusMgr>
+{
+	private void Start()
+	{
+		this.Init();
+	}
+
+	private void OnDestroy()
+	{
+		foreach (KeyValuePair<string, Texture2D> keyValuePair in this.texDic)
+		{
+			UnityEngine.Object.DestroyImmediate(keyValuePair.Value);
+		}
+		this.texDic.Clear();
+	}
+
+	private void Init()
+	{
+		this.m_goPanel = base.GetComponentInParent<UIRoot>().transform.Find("BodyStatusPanel").gameObject;
+		this.m_BodyPanel = UTY.GetChildObject(this.m_goPanel, "Panel1", false);
+		this.m_MotionPanel = UTY.GetChildObject(this.m_goPanel, "Panel2", false);
+		EventDelegate.Add(UTY.GetChildObject(this.m_MotionPanel, "Close", false).GetComponent<UIButton>().onClick, new EventDelegate.Callback(this.CloseMotionPanel));
+		EventDelegate.Add(this.CreateItemObject(UTY.GetChildObject(this.m_MotionPanel, "Grid", false), "com3d2_poseicon0001.tex").onClick, new EventDelegate.Callback(this.PlayMotionYure1));
+		EventDelegate.Add(this.CreateItemObject(UTY.GetChildObject(this.m_MotionPanel, "Grid", false), "com3d2_poseicon0002.tex").onClick, new EventDelegate.Callback(this.PlayMotionYure2));
+		EventDelegate.Add(this.CreateItemObject(UTY.GetChildObject(this.m_MotionPanel, "Grid", false), "cm3d2_poseicon01.tex").onClick, new EventDelegate.Callback(this.PlayMotionNormal));
+		UTY.GetChildObject(this.m_MotionPanel, "Grid", false).GetComponent<UIGrid>().Reposition();
+		this.m_ctrl = base.GetCtrl<BodyStatusCtrl>();
+		this.m_ctrl.Init(this, this.m_BodyPanel);
+		this.ClosePanel();
+	}
+
+	public void OpenPanel(bool muneYurePanel)
+	{
+		this.UpdateBodyStatus();
+		this.m_goPanel.SetActive(true);
+		this.m_BodyPanel.SetActive(true);
+		if (muneYurePanel)
+		{
+			this.m_MotionPanel.SetActive(true);
+		}
+	}
+
+	public void UpdateBodyStatus()
+	{
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		BodyStatusCtrl.Status data = this.LoadData(maid);
+		this.m_ctrl.SetData(data);
+	}
+
+	private BodyStatusCtrl.Status LoadData(Maid maid)
+	{
+		Status status = maid.status;
+		status.UpdateBodyParam();
+		return new BodyStatusCtrl.Status
+		{
+			height = status.body.height,
+			weight = status.body.weight,
+			bust = status.body.bust,
+			cup = status.body.cup,
+			waist = status.body.waist,
+			hip = status.body.hip
+		};
+	}
+
+	public void PlayMotionNormal()
+	{
+		WindowManager component = base.GetComponentInParent<UIRoot>().transform.Find("Window").gameObject.GetComponent<WindowManager>();
+		PoseIconWindow component2 = component.GetWindow("ポーズ").GetComponent<PoseIconWindow>();
+		bool visibleAutoCam = SceneEdit.Instance.viewReset.GetVisibleAutoCam();
+		SceneEdit.Instance.viewReset.SetVisibleAutoCam(false);
+		component2.Exec(this.normalPoseId);
+		SceneEdit.Instance.viewReset.SetVisibleAutoCam(visibleAutoCam);
+	}
+
+	public void PlayMotionYure1()
+	{
+		WindowManager component = base.GetComponentInParent<UIRoot>().transform.Find("Window").gameObject.GetComponent<WindowManager>();
+		PoseIconWindow component2 = component.GetWindow("ポーズ").GetComponent<PoseIconWindow>();
+		bool visibleAutoCam = SceneEdit.Instance.viewReset.GetVisibleAutoCam();
+		SceneEdit.Instance.viewReset.SetVisibleAutoCam(false);
+		component2.Exec(this.yure1PoseId);
+		SceneEdit.Instance.viewReset.SetVisibleAutoCam(visibleAutoCam);
+	}
+
+	public void PlayMotionYure2()
+	{
+		WindowManager component = base.GetComponentInParent<UIRoot>().transform.Find("Window").gameObject.GetComponent<WindowManager>();
+		PoseIconWindow component2 = component.GetWindow("ポーズ").GetComponent<PoseIconWindow>();
+		bool visibleAutoCam = SceneEdit.Instance.viewReset.GetVisibleAutoCam();
+		SceneEdit.Instance.viewReset.SetVisibleAutoCam(false);
+		component2.Exec(this.yure2PoseId);
+		SceneEdit.Instance.viewReset.SetVisibleAutoCam(visibleAutoCam);
+	}
+
+	public void CloseBodyPanel()
+	{
+		this.m_BodyPanel.SetActive(false);
+	}
+
+	public void CloseMotionPanel()
+	{
+		this.m_MotionPanel.SetActive(false);
+	}
+
+	public void ClosePanel()
+	{
+		this.m_BodyPanel.SetActive(false);
+		this.m_MotionPanel.SetActive(false);
+		this.m_goPanel.SetActive(false);
+	}
+
+	protected UIWFTabButton CreateItemObject(GameObject parent, string iconTexName)
+	{
+		GameObject gameObject = Utility.CreatePrefab(parent, "SceneEdit/WindowParts/PoseIconItem", true);
+		if (!this.texDic.ContainsKey(iconTexName))
+		{
+			this.texDic.Add(iconTexName, ImportCM.CreateTexture(iconTexName));
+		}
+		UITexture component = gameObject.GetComponent<UITexture>();
+		component.mainTexture = this.texDic[iconTexName];
+		return gameObject.GetComponent<UIWFTabButton>();
+	}
+
+	[SerializeField]
+	private int normalPoseId = 100;
+
+	[SerializeField]
+	private int yure1PoseId = 1000;
+
+	[SerializeField]
+	private int yure2PoseId = 1010;
+
+	private BodyStatusCtrl m_ctrl;
+
+	private GameObject m_BodyPanel;
+
+	private GameObject m_MotionPanel;
+
+	private Dictionary<string, Texture2D> texDic = new Dictionary<string, Texture2D>();
+}

+ 18 - 0
Assembly-CSharp/BoneAttachPos.cs

@@ -0,0 +1,18 @@
+using System;
+
+public class BoneAttachPos
+{
+	public BoneAttachPos()
+	{
+	}
+
+	public BoneAttachPos(BoneAttachPos bap)
+	{
+		this.bEnable = bap.bEnable;
+		this.pss = new PosRotScale(bap.pss);
+	}
+
+	public bool bEnable;
+
+	public PosRotScale pss = new PosRotScale();
+}

+ 7 - 0
Assembly-CSharp/BoneDebug.cs

@@ -0,0 +1,7 @@
+using System;
+using UnityEngine;
+
+public class BoneDebug : MonoBehaviour
+{
+	public bool m_bDrawGizmo;
+}

+ 42 - 0
Assembly-CSharp/BoneHair.cs

@@ -0,0 +1,42 @@
+using System;
+using UnityEngine;
+
+public class BoneHair : MonoBehaviour
+{
+	private void Start()
+	{
+		if (this.TOOL)
+		{
+			this.bonehair = new TBoneHair_(null);
+			this.bonehair.SaveData(this.rootBody_Jyou, this.SaveName_Jyou);
+			this.bonehair2 = new TBoneHair_(null);
+			this.bonehair2.SaveData(this.rootBody_Kahan, this.SaveName_Kahan);
+			this.bonehair = new TBoneHair_(null);
+			this.bonehair2.SaveData(this.rootBody_Uwagi, "Uwagi");
+			this.bonehair = new TBoneHair_(null);
+			this.bonehair2.SaveData(this.rootBody_SKIRT, "SKIRT");
+			this.bonehair = new TBoneHair_(null);
+			this.bonehair2.SaveData(this.rootBody_IK, "IK");
+		}
+	}
+
+	public bool TOOL;
+
+	private TBoneHair_ bonehair;
+
+	private TBoneHair_ bonehair2;
+
+	public Transform rootBody_Jyou;
+
+	public string SaveName_Jyou;
+
+	public Transform rootBody_Kahan;
+
+	public string SaveName_Kahan;
+
+	public Transform rootBody_Uwagi;
+
+	public Transform rootBody_SKIRT;
+
+	public Transform rootBody_IK;
+}

+ 190 - 0
Assembly-CSharp/BoneHair2.cs

@@ -0,0 +1,190 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class BoneHair2
+{
+	public BoneHair2(TBodySkin bodyskin)
+	{
+		this.m_BodySkin = bodyskin;
+	}
+
+	public void Init()
+	{
+	}
+
+	public void Uninit()
+	{
+		if (this.m_listCollders != null)
+		{
+			for (int i = 0; i < this.m_listCollders.Count; i++)
+			{
+				if (this.m_listCollders[i] != null)
+				{
+					UnityEngine.Object.DestroyImmediate(this.m_listCollders[i].gameObject);
+				}
+			}
+			this.m_listCollders.Clear();
+		}
+	}
+
+	public bool InitGameObject(GameObject f_goRoot, MPN f_mpn)
+	{
+		BoneHair2.YureType yureType = BoneHair2.YureType.Non;
+		Transform transform = this.SearchYureBone(f_goRoot.transform, out yureType);
+		if (transform == null || yureType == BoneHair2.YureType.Non || yureType == BoneHair2.YureType.Skirt)
+		{
+			return false;
+		}
+		Transform parent = transform.parent;
+		if (parent == null)
+		{
+			NDebug.Assert(transform.name + " の親が不正です。", false);
+		}
+		if (yureType == BoneHair2.YureType.Hair && parent.name.ToLower().IndexOf("hair") != 0)
+		{
+			NDebug.Assert("髪ボーン" + transform.name + " の親が不正です。", false);
+		}
+		string text = f_goRoot.name.Replace("_SM_", string.Empty);
+		float[] f_aryDefStiffness = null;
+		if (f_mpn == MPN.hairf)
+		{
+			f_aryDefStiffness = new float[]
+			{
+				0.95f,
+				0.9f,
+				0.7f
+			};
+		}
+		DynamicBone dynamicBone = ImportCM.TryLoadDynamicBone(f_goRoot, parent, text, this.m_BodySkin.body, f_aryDefStiffness);
+		if (dynamicBone == null)
+		{
+			string f_strFileName = string.Empty;
+			if (yureType == BoneHair2.YureType.Hair)
+			{
+				f_strFileName = "default_hair";
+				if (f_mpn == MPN.hairf)
+				{
+					if (GameUty.IsExistFile("default_hairf.phy", null))
+					{
+						f_strFileName = "default_hairf";
+					}
+				}
+				else if (f_mpn == MPN.hairr)
+				{
+					if (GameUty.IsExistFile("default_hairr.phy", null))
+					{
+						f_strFileName = "default_hairr";
+					}
+				}
+				else if (f_mpn == MPN.hairs)
+				{
+					if (GameUty.IsExistFile("default_hairs.phy", null))
+					{
+						f_strFileName = "default_hairs";
+					}
+				}
+				else if (f_mpn == MPN.hairt && GameUty.IsExistFile("default_hairt.phy", null))
+				{
+					f_strFileName = "default_hairt";
+				}
+			}
+			else if (yureType == BoneHair2.YureType.Yure)
+			{
+				if (f_mpn != MPN.hairaho)
+				{
+					return false;
+				}
+				f_strFileName = "default_haira";
+			}
+			else if (yureType == BoneHair2.YureType.Skirt)
+			{
+				f_strFileName = "default_yure";
+			}
+			dynamicBone = ImportCM.TryLoadDynamicBone(f_goRoot, parent, f_strFileName, this.m_BodySkin.body, f_aryDefStiffness);
+			if (dynamicBone == null)
+			{
+				return false;
+			}
+		}
+		if (!string.IsNullOrEmpty(dynamicBone.m_ColliderFileName))
+		{
+			ImportCM.LoadDynamicCollilder(dynamicBone, dynamicBone.m_ColliderFileName, this.m_BodySkin.body.m_trBones, this.m_BodySkin.body.maid);
+		}
+		else if (GameUty.IsExistFile(text + ".col", null))
+		{
+			ImportCM.LoadDynamicCollilder(dynamicBone, text, this.m_BodySkin.body.m_trBones, this.m_BodySkin.body.maid);
+		}
+		else
+		{
+			string text2 = string.Empty;
+			if (f_mpn == MPN.hairf)
+			{
+				text2 = "default_hairf";
+			}
+			else if (f_mpn == MPN.hairr)
+			{
+				text2 = "default_hairr";
+			}
+			else if (f_mpn == MPN.hairt)
+			{
+				text2 = "default_hairt";
+			}
+			else if (f_mpn == MPN.hairs)
+			{
+				text2 = "default_hairs";
+			}
+			else if (f_mpn == MPN.hairaho)
+			{
+				text2 = "default_haira";
+			}
+			if (!string.IsNullOrEmpty(text2))
+			{
+				ImportCM.LoadDynamicCollilder(dynamicBone, text2, this.m_BodySkin.body.m_trBones, this.m_BodySkin.body.maid);
+			}
+		}
+		this.m_listCollders = dynamicBone.m_Colliders;
+		return true;
+	}
+
+	private Transform SearchYureBone(Transform f_goParent, out BoneHair2.YureType f_eYureType)
+	{
+		if (f_goParent.name.Contains("_yure_hair_"))
+		{
+			f_eYureType = BoneHair2.YureType.Hair;
+			return f_goParent;
+		}
+		if (f_goParent.name.Contains("_yure_skirt_"))
+		{
+			f_eYureType = BoneHair2.YureType.Skirt;
+			return f_goParent;
+		}
+		if (f_goParent.name.Contains("_yure_"))
+		{
+			f_eYureType = BoneHair2.YureType.Yure;
+			return f_goParent;
+		}
+		for (int i = 0; i < f_goParent.childCount; i++)
+		{
+			Transform transform = this.SearchYureBone(f_goParent.GetChild(i), out f_eYureType);
+			if (transform != null)
+			{
+				return transform;
+			}
+		}
+		f_eYureType = BoneHair2.YureType.Non;
+		return null;
+	}
+
+	private TBodySkin m_BodySkin;
+
+	private List<DynamicBoneColliderBase> m_listCollders;
+
+	private enum YureType
+	{
+		Non,
+		Hair,
+		Skirt,
+		Yure
+	}
+}

+ 94 - 0
Assembly-CSharp/BoneHair3.cs

@@ -0,0 +1,94 @@
+using System;
+using UnityEngine;
+
+public class BoneHair3
+{
+	public BoneHair3(TBodySkin bodyskin)
+	{
+		this.m_BodySkin = bodyskin;
+		this.m_Body = bodyskin.body;
+	}
+
+	public void WarpInit()
+	{
+		if (this.m_SkirtBone != null)
+		{
+			this.m_SkirtBone.m_bResetPos = true;
+		}
+	}
+
+	public void Init()
+	{
+	}
+
+	public void Uninit()
+	{
+		if (this.m_SkirtBone != null)
+		{
+			this.m_SkirtBone.Uninit();
+			UnityEngine.Object.DestroyImmediate(this.m_SkirtBone);
+			this.m_SkirtBone = null;
+		}
+	}
+
+	public bool InitGameObject(GameObject f_goRoot, MPN f_mpn)
+	{
+		if (!this.m_Body.m_bNewSkirtPhyscs)
+		{
+			return false;
+		}
+		Transform transform = this.SearchSkirtBone(f_goRoot.transform);
+		if (transform == null)
+		{
+			return false;
+		}
+		Transform parent = transform.parent;
+		NDebug.Assert(this.m_SkirtBone == null, () => "DynamicSkirtBoneコンポーネントが二重に付けられました。");
+		string f_strFileName = f_goRoot.name.Replace("_SM_", string.Empty);
+		DynamicSkirtBone dynamicSkirtBone = ImportCM.TryLoadDynamicSkirtBone(f_goRoot, parent, f_strFileName, this.m_BodySkin.body);
+		if (dynamicSkirtBone == null)
+		{
+			string f_strFileName2 = "default_skirt";
+			dynamicSkirtBone = ImportCM.TryLoadDynamicSkirtBone(f_goRoot, parent, f_strFileName2, this.m_BodySkin.body);
+			if (dynamicSkirtBone == null)
+			{
+				return false;
+			}
+		}
+		this.m_SkirtBone = dynamicSkirtBone;
+		this.m_SkirtBone.InitGameObject(f_goRoot, this.m_BodySkin, parent);
+		this.WarpInit();
+		return true;
+	}
+
+	private Transform SearchSkirtBone(Transform f_goParent)
+	{
+		if (f_goParent.name.Contains("_yure_skirt_"))
+		{
+			return f_goParent;
+		}
+		for (int i = 0; i < f_goParent.childCount; i++)
+		{
+			Transform transform = this.SearchSkirtBone(f_goParent.GetChild(i));
+			if (transform != null)
+			{
+				return transform;
+			}
+		}
+		return null;
+	}
+
+	public void UpdateSelf()
+	{
+		if (this.m_SkirtBone != null)
+		{
+			this.m_SkirtBone.UpdateSelf();
+		}
+	}
+
+	private TBody m_Body;
+
+	private TBodySkin m_BodySkin;
+
+	private DynamicSkirtBone m_SkirtBone;
+}

+ 192 - 0
Assembly-CSharp/BoneMorph.cs

@@ -0,0 +1,192 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class BoneMorph
+{
+	public static void Init()
+	{
+		BoneMorph.dic = new Dictionary<string, Vector3>();
+		BoneMorph.SetPosition("KubiScl", "Bip01 Neck", 0.95f, 1f, 1f, 1.05f, 1f, 1f);
+		BoneMorph.SetPosition("KubiScl", "Bip01 Head", 0.8f, 1f, 1f, 1.2f, 1f, 1f);
+		BoneMorph.SetScale("UdeScl", "Bip01 ? UpperArm", 0.85f, 1f, 1f, 1.15f, 1f, 1f);
+		BoneMorph.SetScale("EyeSclX", "Eyepos_L", 1f, 1f, 0.92f, 1f, 1f, 1.08f);
+		BoneMorph.SetScale("EyeSclX", "Eyepos_R", 1f, 1f, 0.92f, 1f, 1f, 1.08f);
+		BoneMorph.SetScale("EyeSclY", "Eyepos_L", 1f, 0.92f, 1f, 1f, 1.08f, 1f);
+		BoneMorph.SetScale("EyeSclY", "Eyepos_R", 1f, 0.92f, 1f, 1f, 1.08f, 1f);
+		BoneMorph.SetPosition("EyePosX", "Eyepos_R", 1f, 1f, 0.9f, 1f, 1f, 1.1f);
+		BoneMorph.SetPosition("EyePosX", "Eyepos_L", 1f, 1f, 0.9f, 1f, 1f, 1.1f);
+		BoneMorph.SetPosition("EyePosY", "Eyepos_R", 1f, 0.93f, 1f, 1f, 1.07f, 1f);
+		BoneMorph.SetPosition("EyePosY", "Eyepos_L", 1f, 0.93f, 1f, 1f, 1.07f, 1f);
+		BoneMorph.SetScale("HeadX", "Bip01 Head", 1f, 0.9f, 0.8f, 1f, 1.1f, 1.2f);
+		BoneMorph.SetScale("HeadY", "Bip01 Head", 0.8f, 0.9f, 1f, 1.2f, 1.1f, 1f);
+		BoneMorph.SetPosition("DouPer", "Bip01 Spine", 1f, 1f, 0.94f, 1f, 1f, 1.06f);
+		BoneMorph.SetPosition("DouPer", "Bip01 Spine0a", 0.88f, 1f, 1f, 1.12f, 1f, 1f);
+		BoneMorph.SetPosition("DouPer", "Bip01 Spine1", 0.88f, 1f, 1f, 1.12f, 1f, 1f);
+		BoneMorph.SetPosition("DouPer", "Bip01 Spine1a", 0.88f, 1f, 1f, 1.12f, 1f, 1f);
+		BoneMorph.SetPosition("DouPer", "Bip01 Neck", 1.03f, 1f, 1f, 0.97f, 1f, 1f);
+		BoneMorph.SetPosition("DouPer", "Bip01 ? Calf", 0.87f, 1f, 1f, 1.13f, 1f, 1f);
+		BoneMorph.SetPosition("DouPer", "Bip01 ? Foot", 0.87f, 1f, 1f, 1.13f, 1f, 1f);
+		BoneMorph.SetScale("DouPer", "Bip01 ? Thigh_SCL_", 0.87f, 1f, 1f, 1.13f, 1f, 1f);
+		BoneMorph.SetScale("DouPer", "momotwist_?", 0.87f, 1f, 1f, 1.13f, 1f, 1f);
+		BoneMorph.SetScale("DouPer", "Bip01 ? Calf_SCL_", 0.87f, 1f, 1f, 1.13f, 1f, 1f);
+		BoneMorph.SetScale("DouPer", "Bip01 ? UpperArm", 0.98f, 1f, 1f, 1.02f, 1f, 1f);
+		BoneMorph.SetPosition("sintyou", "Bip01 Spine", 1f, 1f, 0.85f, 1f, 1f, 1.15f);
+		BoneMorph.SetPosition("sintyou", "Bip01 Spine0a", 0.88f, 1f, 1f, 1.12f, 1f, 1f);
+		BoneMorph.SetPosition("sintyou", "Bip01 Spine1", 0.88f, 1f, 1f, 1.12f, 1f, 1f);
+		BoneMorph.SetPosition("sintyou", "Bip01 Spine1a", 0.88f, 1f, 1f, 1.12f, 1f, 1f);
+		BoneMorph.SetPosition("sintyou", "Bip01 Neck", 0.97f, 1f, 1f, 1.03f, 1f, 1f);
+		BoneMorph.SetPosition("sintyou", "Bip01 Head", 0.9f, 1f, 1f, 1.1f, 1f, 1f);
+		BoneMorph.SetPosition("sintyou", "Bip01 ? Calf", 0.87f, 1f, 1f, 1.13f, 1f, 1f);
+		BoneMorph.SetPosition("sintyou", "Bip01 ? Foot", 0.87f, 1f, 1f, 1.13f, 1f, 1f);
+		BoneMorph.SetScale("sintyou", "Bip01 ? UpperArm", 0.9f, 1f, 1f, 1.1f, 1f, 1f);
+		BoneMorph.SetScale("sintyou", "Bip01 ? Thigh_SCL_", 0.87f, 1f, 1f, 1.13f, 1f, 1f);
+		BoneMorph.SetScale("sintyou", "momotwist_?", 0.87f, 1f, 1f, 1.13f, 1f, 1f);
+		BoneMorph.SetScale("sintyou", "Bip01 ? Calf_SCL_", 0.87f, 1f, 1f, 1.13f, 1f, 1f);
+		BoneMorph.SetScale("koshi", "Bip01 Pelvis_SCL_", 1f, 0.8f, 0.92f, 1f, 1.2f, 1.08f);
+		BoneMorph.SetScale("koshi", "Bip01 Spine_SCL_", 1f, 1f, 1f, 1f, 1f, 1f);
+		BoneMorph.SetScale("koshi", "Hip_?", 1f, 0.96f, 0.9f, 1f, 1.04f, 1.1f);
+		BoneMorph.SetScale("koshi", "Skirt", 1f, 0.85f, 0.88f, 1f, 1.2f, 1.12f);
+		BoneMorph.SetPosition("kata", "Bip01 ? Clavicle", 0.98f, 1f, 0.5f, 1.02f, 1f, 1.5f);
+		BoneMorph.SetScale("kata", "Bip01 Spine1a_SCL_", 1f, 1f, 0.95f, 1f, 1f, 1.05f);
+		BoneMorph.SetScale("west", "Bip01 Spine_SCL_", 1f, 0.95f, 0.9f, 1f, 1.05f, 1.1f);
+		BoneMorph.SetScale("west", "Bip01 Spine0a_SCL_", 1f, 0.85f, 0.7f, 1f, 1.15f, 1.3f);
+		BoneMorph.SetScale("west", "Bip01 Spine1_SCL_", 1f, 0.9f, 0.85f, 1f, 1.1f, 1.15f);
+		BoneMorph.SetScale("west", "Bip01 Spine1a_SCL_", 1f, 0.95f, 0.95f, 1f, 1.05f, 1.05f);
+		BoneMorph.SetScale("west", "Skirt", 1f, 0.92f, 0.88f, 1f, 1.08f, 1.12f);
+	}
+
+	private static void SetScale(string tag, string bname, float x, float y, float z, float x2, float y2, float z2)
+	{
+		string text = bname;
+		List<BoneMorph.BoneProp> list;
+		BoneMorph.BoneProp boneProp;
+		if (bname.Contains("?"))
+		{
+			text = text.Replace('?', 'L');
+			bname = bname.Replace('?', 'R');
+			if (!BoneMorph.dic2.TryGetValue(bname, out list))
+			{
+				List<BoneMorph.BoneProp> list2 = new List<BoneMorph.BoneProp>();
+				BoneMorph.dic2[bname] = list2;
+				list = list2;
+			}
+			boneProp = list.Find((BoneMorph.BoneProp a) => a.strProp == tag);
+			if (boneProp == null)
+			{
+				boneProp = new BoneMorph.BoneProp();
+				list.Add(boneProp);
+			}
+			boneProp.strProp = tag;
+			boneProp.nIndex = Array.FindIndex<string>(BoneMorph.PropNames, (string a) => a == tag);
+			boneProp.bExistM = true;
+			BoneMorph.dic["min+" + tag + "*" + bname] = (boneProp.vMinM = new Vector3(x, y, z));
+			BoneMorph.dic["max+" + tag + "*" + bname] = (boneProp.vMaxM = new Vector3(x2, y2, z2));
+		}
+		if (!BoneMorph.dic2.TryGetValue(text, out list))
+		{
+			List<BoneMorph.BoneProp> list2 = new List<BoneMorph.BoneProp>();
+			BoneMorph.dic2[text] = list2;
+			list = list2;
+		}
+		boneProp = list.Find((BoneMorph.BoneProp a) => a.strProp == tag);
+		if (boneProp == null)
+		{
+			boneProp = new BoneMorph.BoneProp();
+			list.Add(boneProp);
+		}
+		boneProp.strProp = tag;
+		boneProp.nIndex = Array.FindIndex<string>(BoneMorph.PropNames, (string a) => a == tag);
+		boneProp.bExistM = true;
+		BoneMorph.dic["min+" + tag + "*" + text] = (boneProp.vMinM = new Vector3(x, y, z));
+		BoneMorph.dic["max+" + tag + "*" + text] = (boneProp.vMaxM = new Vector3(x2, y2, z2));
+	}
+
+	private static void SetPosition(string tag, string bname, float x, float y, float z, float x2, float y2, float z2)
+	{
+		string text = bname;
+		List<BoneMorph.BoneProp> list;
+		BoneMorph.BoneProp boneProp;
+		if (bname.Contains("?"))
+		{
+			text = text.Replace('?', 'L');
+			bname = bname.Replace('?', 'R');
+			if (!BoneMorph.dic2.TryGetValue(bname, out list))
+			{
+				List<BoneMorph.BoneProp> list2 = new List<BoneMorph.BoneProp>();
+				BoneMorph.dic2[bname] = list2;
+				list = list2;
+			}
+			boneProp = list.Find((BoneMorph.BoneProp a) => a.strProp == tag);
+			if (boneProp == null)
+			{
+				boneProp = new BoneMorph.BoneProp();
+				list.Add(boneProp);
+			}
+			boneProp.strProp = tag;
+			boneProp.nIndex = Array.FindIndex<string>(BoneMorph.PropNames, (string a) => a == tag);
+			boneProp.bExistP = true;
+			BoneMorph.dic["min+" + tag + "+" + bname] = (boneProp.vMinP = new Vector3(x, y, z));
+			BoneMorph.dic["max+" + tag + "+" + bname] = (boneProp.vMaxP = new Vector3(x2, y2, z2));
+		}
+		if (!BoneMorph.dic2.TryGetValue(text, out list))
+		{
+			List<BoneMorph.BoneProp> list2 = new List<BoneMorph.BoneProp>();
+			BoneMorph.dic2[text] = list2;
+			list = list2;
+		}
+		boneProp = list.Find((BoneMorph.BoneProp a) => a.strProp == tag);
+		if (boneProp == null)
+		{
+			boneProp = new BoneMorph.BoneProp();
+			list.Add(boneProp);
+		}
+		boneProp.strProp = tag;
+		boneProp.nIndex = Array.FindIndex<string>(BoneMorph.PropNames, (string a) => a == tag);
+		boneProp.bExistP = true;
+		BoneMorph.dic["min+" + tag + "+" + text] = (boneProp.vMinP = new Vector3(x, y, z));
+		BoneMorph.dic["max+" + tag + "+" + text] = (boneProp.vMaxP = new Vector3(x2, y2, z2));
+	}
+
+	public static Dictionary<string, Vector3> dic = null;
+
+	public static Dictionary<string, List<BoneMorph.BoneProp>> dic2 = new Dictionary<string, List<BoneMorph.BoneProp>>();
+
+	public static string[] PropNames = new string[]
+	{
+		"KubiScl",
+		"UdeScl",
+		"EyeSclX",
+		"EyeSclY",
+		"EyePosX",
+		"EyePosY",
+		"HeadX",
+		"HeadY",
+		"DouPer",
+		"sintyou",
+		"koshi",
+		"kata",
+		"west",
+		"MuneUpDown",
+		"MuneYori"
+	};
+
+	public class BoneProp
+	{
+		public string strProp;
+
+		public int nIndex;
+
+		public bool bExistP;
+
+		public bool bExistM;
+
+		public Vector3 vMinP;
+
+		public Vector3 vMaxP;
+
+		public Vector3 vMinM;
+
+		public Vector3 vMaxM;
+	}
+}

+ 24 - 0
Assembly-CSharp/BoneMorphLocal.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class BoneMorphLocal
+{
+	public int type;
+
+	public Vector3 pos;
+
+	public Vector3 defpos;
+
+	public Transform linkT;
+
+	public long atr;
+
+	public float Kahanshin;
+
+	public List<string> props = new List<string>();
+
+	public Vector3[] vecs_min = new Vector3[64];
+
+	public Vector3[] vecs_max = new Vector3[64];
+}

+ 383 - 0
Assembly-CSharp/BoneMorph_.cs

@@ -0,0 +1,383 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using UnityEngine;
+
+public class BoneMorph_
+{
+	public void Init()
+	{
+		if (this.bones != null)
+		{
+			for (int i = this.bones.Count - 1; i >= 0; i--)
+			{
+				BoneMorphLocal boneMorphLocal = this.bones[i];
+				if (boneMorphLocal.linkT != null)
+				{
+					boneMorphLocal.linkT.localPosition = boneMorphLocal.pos;
+				}
+			}
+		}
+		this.bones = new List<BoneMorphLocal>();
+	}
+
+	public void Uninit()
+	{
+		this.m_listBoneMorphPos.Clear();
+		this.m_listBoneMorphScl.Clear();
+	}
+
+	public void InitBoneMorphEdit(Transform t, MPN f_mpn, TBody.SlotID f_slot)
+	{
+		if (f_mpn == MPN.head && f_slot == TBody.SlotID.head)
+		{
+			Transform transform = CMT.SearchObjName(t, "Mayupos", false);
+			if (transform != null)
+			{
+				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "MayuY");
+				this.m_listBoneMorphPos.Add(new BoneMorph_.BoneMorphPos("MayuY", transform));
+			}
+			Transform transform2 = CMT.SearchObjName(t, "Eye_L", false);
+			if (transform2 != null)
+			{
+				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosXL");
+				this.m_listBoneMorphPos.Add(new BoneMorph_.BoneMorphPos("EyeBallPosXL", transform2));
+				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosYL");
+				this.m_listBoneMorphPos.Add(new BoneMorph_.BoneMorphPos("EyeBallPosYL", transform2, new Vector3(0.00325f, -0.005f, 0f), new Vector3(0f, 0.004f, 0f)));
+				this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclXL");
+				this.m_listBoneMorphScl.Add(new BoneMorph_.BoneMorphScl("EyeBallSclXL", transform2, new Vector3(0f, -0.3f, -0.3f), new Vector3(0f, 0.1f, 0.1f)));
+				this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclYL");
+				this.m_listBoneMorphScl.Add(new BoneMorph_.BoneMorphScl("EyeBallSclYL", transform2, new Vector3(0f, -0.3f, -0.3f), new Vector3(0f, 0.1f, 0.1f)));
+			}
+			Transform transform3 = CMT.SearchObjName(t, "Eye_R", false);
+			if (transform3 != null)
+			{
+				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosXR");
+				this.m_listBoneMorphPos.Add(new BoneMorph_.BoneMorphPos("EyeBallPosXR", transform3));
+				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosYR");
+				this.m_listBoneMorphPos.Add(new BoneMorph_.BoneMorphPos("EyeBallPosYR", transform3, new Vector3(0.00325f, 0.005f, 0f), new Vector3(0f, -0.004f, 0f)));
+				this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclXR");
+				this.m_listBoneMorphScl.Add(new BoneMorph_.BoneMorphScl("EyeBallSclXR", transform3, new Vector3(0f, -0.3f, -0.3f), new Vector3(0f, 0.1f, 0.1f)));
+				this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclYR");
+				this.m_listBoneMorphScl.Add(new BoneMorph_.BoneMorphScl("EyeBallSclYR", transform3, new Vector3(0f, -0.3f, -0.3f), new Vector3(0f, 0.1f, 0.1f)));
+			}
+		}
+	}
+
+	public void DelBoneMorphEdit(MPN f_mpn, TBody.SlotID f_slot)
+	{
+		if (f_mpn == MPN.head && f_slot == TBody.SlotID.head)
+		{
+			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "MayuY");
+			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosXL");
+			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosYL");
+			this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclXL");
+			this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclXR");
+			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosXR");
+			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosYR");
+			this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclYL");
+			this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclYR");
+		}
+	}
+
+	private void AddRoot_lp(Transform t, int level = 0, float Kahanshin = 0f)
+	{
+		string name = t.name;
+		if (name.Contains("Thigh"))
+		{
+			Kahanshin = 1f;
+		}
+		BoneMorphLocal boneMorphLocal = null;
+		List<BoneMorph.BoneProp> list = null;
+		if (BoneMorph.dic2.TryGetValue(name, out list))
+		{
+			for (int i = 0; i < list.Count; i++)
+			{
+				BoneMorph.BoneProp boneProp = list[i];
+				if (boneMorphLocal == null)
+				{
+					boneMorphLocal = new BoneMorphLocal();
+					boneMorphLocal.atr = 0L;
+					boneMorphLocal.linkT = t;
+					boneMorphLocal.pos = t.localPosition;
+					boneMorphLocal.Kahanshin = Kahanshin;
+				}
+				int nIndex = boneProp.nIndex;
+				if (boneProp.bExistM)
+				{
+					boneMorphLocal.atr |= 1L << nIndex;
+					boneMorphLocal.vecs_min[nIndex] = boneProp.vMinM;
+					boneMorphLocal.vecs_max[nIndex] = boneProp.vMaxM;
+				}
+				if (boneProp.bExistP)
+				{
+					boneMorphLocal.atr |= 1L << nIndex + 32;
+					boneMorphLocal.vecs_min[nIndex + 32] = boneProp.vMinP;
+					boneMorphLocal.vecs_max[nIndex + 32] = boneProp.vMaxP;
+				}
+				boneMorphLocal.props.Add(boneProp.strProp);
+			}
+		}
+		if (boneMorphLocal != null)
+		{
+			this.bones.Add(boneMorphLocal);
+		}
+		for (int j = 0; j < t.childCount; j++)
+		{
+			this.AddRoot_lp(t.GetChild(j), level + 1, Kahanshin);
+		}
+	}
+
+	public void AddRoot(Transform root)
+	{
+		this.AddRoot_lp(root, 0, 0f);
+	}
+
+	public void ChangeMorphPosValue(string strPropName, string f_strBoneName, Vector3 f_fAddMin, Vector3 f_fAddMax)
+	{
+		BoneMorph_.BoneMorphPos boneMorphPos = this.m_listBoneMorphPos.Find((BoneMorph_.BoneMorphPos f) => f.strPropName == strPropName && f.trBone.name == f_strBoneName);
+		if (boneMorphPos != null)
+		{
+			boneMorphPos.m_vAddMin = boneMorphPos.trBone.localPosition + f_fAddMin;
+			boneMorphPos.m_vAddMax = boneMorphPos.trBone.localPosition + f_fAddMax;
+		}
+	}
+
+	public void ChangeMorphSclValue(string strPropName, string f_strBoneName, Vector3 f_fAddMin, Vector3 f_fAddMax)
+	{
+		BoneMorph_.BoneMorphScl boneMorphScl = this.m_listBoneMorphScl.Find((BoneMorph_.BoneMorphScl f) => f.strPropName == strPropName && f.trBone.name == f_strBoneName);
+		if (boneMorphScl != null)
+		{
+			boneMorphScl.m_vAddMin = boneMorphScl.trBone.localScale + f_fAddMin;
+			boneMorphScl.m_vAddMax = boneMorphScl.trBone.localScale + f_fAddMax;
+		}
+	}
+
+	public void Blend()
+	{
+		for (int i = this.bones.Count - 1; i >= 0; i--)
+		{
+			BoneMorphLocal boneMorphLocal = this.bones[i];
+			Vector3 vector = new Vector3(1f, 1f, 1f);
+			Vector3 vector2 = boneMorphLocal.pos;
+			for (int j = 0; j < BoneMorph.PropNames.Length; j++)
+			{
+				float num = 1f;
+				if (j == 0)
+				{
+					num = this.SCALE_Kubi;
+				}
+				if (j == 1)
+				{
+					num = this.SCALE_Ude;
+				}
+				if (j == 2)
+				{
+					num = this.SCALE_EyeX;
+				}
+				if (j == 3)
+				{
+					num = this.SCALE_EyeY;
+				}
+				if (j == 4)
+				{
+					num = this.Postion_EyeX * (0.5f + this.Postion_EyeY * 0.5f);
+				}
+				if (j == 5)
+				{
+					num = this.Postion_EyeY;
+				}
+				if (j == 6)
+				{
+					num = this.SCALE_HeadX;
+				}
+				if (j == 7)
+				{
+					num = this.SCALE_HeadY;
+				}
+				if (j == 8)
+				{
+					num = this.SCALE_DouPer;
+					if (boneMorphLocal.Kahanshin == 0f)
+					{
+						num = 1f - num;
+					}
+				}
+				if (j == 9)
+				{
+					num = this.SCALE_Sintyou;
+				}
+				if (j == 10)
+				{
+					num = this.SCALE_Koshi;
+				}
+				if (j == 11)
+				{
+					num = this.SCALE_Kata;
+				}
+				if (j == 12)
+				{
+					num = this.SCALE_West;
+				}
+				if ((boneMorphLocal.atr & 1L << j) != 0L)
+				{
+					vector = Vector3.Scale(vector, Vector3.Lerp(boneMorphLocal.vecs_min[j], boneMorphLocal.vecs_max[j], num));
+				}
+				if ((boneMorphLocal.atr & 1L << 32 + j) != 0L)
+				{
+					vector2 = Vector3.Scale(vector2, Vector3.Lerp(boneMorphLocal.vecs_min[j + 32], boneMorphLocal.vecs_max[j + 32], num));
+				}
+			}
+			if (boneMorphLocal.linkT.name.Contains("Thigh_SCL_"))
+			{
+				this.SnityouOutScale = Mathf.Pow(vector.x, 0.9f);
+			}
+			boneMorphLocal.linkT.localPosition = vector2;
+			boneMorphLocal.linkT.localScale = vector;
+		}
+		for (int k = 0; k < this.m_listBoneMorphPos.Count; k++)
+		{
+			BoneMorph_.BoneMorphPos boneMorphPos = this.m_listBoneMorphPos[k];
+			if (boneMorphPos.strPropName == "MayuY")
+			{
+				boneMorphPos.trBone.localPosition = ((this.POS_MayuY > 0.5f) ? Vector3.Lerp(boneMorphPos.m_vDefPos, boneMorphPos.m_vAddMax, (this.POS_MayuY - 0.5f) / 0.5f) : Vector3.Lerp(boneMorphPos.m_vAddMin, boneMorphPos.m_vDefPos, this.POS_MayuY / 0.5f));
+			}
+			else if (boneMorphPos.strPropName == "EyeBallPosYL" || boneMorphPos.strPropName == "EyeBallPosYR")
+			{
+				boneMorphPos.trBone.localPosition = ((this.EyeBallPosY > 0.5f) ? Vector3.Lerp(boneMorphPos.m_vDefPos, boneMorphPos.m_vAddMax, (this.EyeBallPosY - 0.5f) / 0.5f) : Vector3.Lerp(boneMorphPos.m_vAddMin, boneMorphPos.m_vDefPos, this.EyeBallPosY / 0.5f));
+			}
+		}
+		for (int l = 0; l < this.m_listBoneMorphScl.Count; l++)
+		{
+			BoneMorph_.BoneMorphScl boneMorphScl = this.m_listBoneMorphScl[l];
+			if (boneMorphScl.strPropName == "EyeBallSclXL" || boneMorphScl.strPropName == "EyeBallSclXR")
+			{
+				float z = (this.EyeBallSclX >= 0.5f) ? Mathf.Lerp(boneMorphScl.m_vDefScl.z, boneMorphScl.m_vAddMax.z, (this.EyeBallSclX - 0.5f) / 0.5f) : Mathf.Lerp(boneMorphScl.m_vAddMin.z, boneMorphScl.m_vDefScl.z, this.EyeBallSclX / 0.5f);
+				Vector3 localScale = boneMorphScl.trBone.localScale;
+				localScale.z = z;
+				boneMorphScl.trBone.localScale = localScale;
+			}
+			else if (boneMorphScl.strPropName == "EyeBallSclYL" || boneMorphScl.strPropName == "EyeBallSclYR")
+			{
+				float y = (this.EyeBallSclY >= 0.5f) ? Mathf.Lerp(boneMorphScl.m_vDefScl.y, boneMorphScl.m_vAddMax.y, (this.EyeBallSclY - 0.5f) / 0.5f) : Mathf.Lerp(boneMorphScl.m_vAddMin.y, boneMorphScl.m_vDefScl.y, this.EyeBallSclY / 0.5f);
+				Vector3 localScale2 = boneMorphScl.trBone.localScale;
+				localScale2.y = y;
+				boneMorphScl.trBone.localScale = localScale2;
+			}
+		}
+	}
+
+	private TextAsset textUserDef1;
+
+	public float SCALE_Sintyou = 1f;
+
+	public float SCALE_Koshi = 1f;
+
+	public float SCALE_DouPer;
+
+	public float SCALE_Kata = 1f;
+
+	public float SCALE_West = 1f;
+
+	public float SCALE_EyeX = 1f;
+
+	public float SCALE_EyeY = 1f;
+
+	public float Postion_EyeX = 1f;
+
+	public float Postion_EyeY = 1f;
+
+	public float EyeBallPosX = 0.5f;
+
+	public float EyeBallPosY = 0.5f;
+
+	public float EyeBallSclX = 0.5f;
+
+	public float EyeBallSclY = 0.5f;
+
+	public float SCALE_Kubi = 1f;
+
+	public float SCALE_Ude = 1f;
+
+	public float SCALE_HeadX = 1f;
+
+	public float SCALE_HeadY = 1f;
+
+	public float POS_MayuY = 0.5f;
+
+	public List<BoneMorphLocal> bones;
+
+	public float SnityouOutScale = 1f;
+
+	private bool m_bMayuOffs;
+
+	private List<BoneMorph_.BoneMorphPos> m_listBoneMorphPos = new List<BoneMorph_.BoneMorphPos>();
+
+	private List<BoneMorph_.BoneMorphScl> m_listBoneMorphScl = new List<BoneMorph_.BoneMorphScl>();
+
+	private static StringBuilder sbMinM = new StringBuilder(32);
+
+	private static StringBuilder sbMinP = new StringBuilder(32);
+
+	private static StringBuilder sbMaxM = new StringBuilder(32);
+
+	private static StringBuilder sbMaxP = new StringBuilder(32);
+
+	private class BoneMorphPos
+	{
+		public BoneMorphPos(string f_strPropName, Transform f_trBone)
+		{
+			this.strPropName = f_strPropName;
+			this.trBone = f_trBone;
+			this.m_vAddMin = (this.m_vAddMax = (this.m_vDefPos = f_trBone.localPosition));
+		}
+
+		public BoneMorphPos(string f_strPropName, Transform f_trBone, Vector3 f_vAddMin, Vector3 f_vAddMax)
+		{
+			this.strPropName = f_strPropName;
+			this.trBone = f_trBone;
+			this.m_vDefPos = f_trBone.localPosition;
+			this.m_vAddMin = this.m_vDefPos + f_vAddMin;
+			this.m_vAddMax = this.m_vDefPos + f_vAddMax;
+		}
+
+		public string strPropName;
+
+		public Transform trBone;
+
+		public Vector3 m_vDefPos;
+
+		public Vector3 m_vAddMin;
+
+		public Vector3 m_vAddMax;
+	}
+
+	private class BoneMorphScl
+	{
+		public BoneMorphScl(string f_strPropName, Transform f_trBone)
+		{
+			this.strPropName = f_strPropName;
+			this.trBone = f_trBone;
+			this.m_vAddMin = (this.m_vAddMax = (this.m_vDefScl = f_trBone.localScale));
+		}
+
+		public BoneMorphScl(string f_strPropName, Transform f_trBone, Vector3 f_vAddMin, Vector3 f_vAddMax)
+		{
+			this.strPropName = f_strPropName;
+			this.trBone = f_trBone;
+			this.m_vDefScl = f_trBone.localScale;
+			this.m_vAddMin = this.m_vDefScl + f_vAddMin;
+			this.m_vAddMax = this.m_vDefScl + f_vAddMax;
+		}
+
+		public string strPropName;
+
+		public Transform trBone;
+
+		public Vector3 m_vDefScl;
+
+		public Vector3 m_vAddMin;
+
+		public Vector3 m_vAddMax;
+	}
+}

+ 30 - 0
Assembly-CSharp/BoneScaleDef.cs

@@ -0,0 +1,30 @@
+using System;
+using UnityEngine;
+
+public class BoneScaleDef
+{
+	public BoneScaleDef(Transform trTarg, Vector3 vPos, Quaternion qRot, Vector3 vScale)
+	{
+		this.trTarget = trTarg;
+		this.vBackPos = vPos;
+		this.vDefPos = vPos;
+		this.qBackRot = qRot;
+		this.qDefRot = qRot;
+		this.vDefScale = vScale;
+		this.vBackScale = Vector3.one;
+	}
+
+	public Transform trTarget;
+
+	public Vector3 vDefScale;
+
+	public Quaternion qDefRot;
+
+	public Vector3 vDefPos;
+
+	public Vector3 vBackScale;
+
+	public Quaternion qBackRot;
+
+	public Vector3 vBackPos;
+}

+ 19 - 0
Assembly-CSharp/ButtonEdit.cs

@@ -0,0 +1,19 @@
+using System;
+using UnityEngine;
+
+public class ButtonEdit : MonoBehaviour
+{
+	public SceneEdit.SMenuItem m_MenuItem;
+
+	public SceneEdit.SPartsType m_PartsType;
+
+	public SceneEdit.SCategory m_Category;
+
+	public SceneEdit.SMenuItem m_SliderItem;
+
+	[HideInInspector]
+	public GameObject m_goFrame;
+
+	[HideInInspector]
+	public Color m_colBtnDefault;
+}

+ 24 - 0
Assembly-CSharp/ButtonMgr.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ButtonMgr : MonoBehaviour
+{
+	private void Start()
+	{
+	}
+
+	private void Update()
+	{
+		if ((UICamera.selectedObject == null || (UICamera.selectedObject.tag != "ButtonCate" && UICamera.selectedObject.tag != "ButtonPartsType" && UICamera.selectedObject.tag != "ButtonMenuItem")) && UIKeyNavigation2.listCate != null && UIKeyNavigation2.listCate.size > 0)
+		{
+			UICamera.selectedObject = UIKeyNavigation2.listCate[0].gameObject;
+		}
+	}
+
+	public List<GameObject> m_goCategory = new List<GameObject>();
+
+	public List<GameObject> m_goPartsType = new List<GameObject>();
+
+	public List<GameObject> m_goMenuItem = new List<GameObject>();
+}

+ 202 - 0
Assembly-CSharp/ByteReader.cs

@@ -0,0 +1,202 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using UnityEngine;
+
+public class ByteReader
+{
+	public ByteReader(byte[] bytes)
+	{
+		this.mBuffer = bytes;
+	}
+
+	public ByteReader(TextAsset asset)
+	{
+		this.mBuffer = asset.bytes;
+	}
+
+	public static ByteReader Open(string path)
+	{
+		FileStream fileStream = File.OpenRead(path);
+		if (fileStream != null)
+		{
+			fileStream.Seek(0L, SeekOrigin.End);
+			byte[] array = new byte[fileStream.Position];
+			fileStream.Seek(0L, SeekOrigin.Begin);
+			fileStream.Read(array, 0, array.Length);
+			fileStream.Close();
+			return new ByteReader(array);
+		}
+		return null;
+	}
+
+	public bool canRead
+	{
+		get
+		{
+			return this.mBuffer != null && this.mOffset < this.mBuffer.Length;
+		}
+	}
+
+	private static string ReadLine(byte[] buffer, int start, int count)
+	{
+		return Encoding.UTF8.GetString(buffer, start, count);
+	}
+
+	public string ReadLine()
+	{
+		return this.ReadLine(true);
+	}
+
+	public string ReadLine(bool skipEmptyLines)
+	{
+		int num = this.mBuffer.Length;
+		if (skipEmptyLines)
+		{
+			while (this.mOffset < num && this.mBuffer[this.mOffset] < 32)
+			{
+				this.mOffset++;
+			}
+		}
+		int i = this.mOffset;
+		if (i < num)
+		{
+			while (i < num)
+			{
+				int num2 = (int)this.mBuffer[i++];
+				if (num2 == 10 || num2 == 13)
+				{
+					IL_87:
+					string result = ByteReader.ReadLine(this.mBuffer, this.mOffset, i - this.mOffset - 1);
+					this.mOffset = i;
+					return result;
+				}
+			}
+			i++;
+			goto IL_87;
+		}
+		this.mOffset = num;
+		return null;
+	}
+
+	public Dictionary<string, string> ReadDictionary()
+	{
+		Dictionary<string, string> dictionary = new Dictionary<string, string>();
+		char[] separator = new char[]
+		{
+			'='
+		};
+		while (this.canRead)
+		{
+			string text = this.ReadLine();
+			if (text == null)
+			{
+				break;
+			}
+			if (!text.StartsWith("//"))
+			{
+				string[] array = text.Split(separator, 2, StringSplitOptions.RemoveEmptyEntries);
+				if (array.Length == 2)
+				{
+					string key = array[0].Trim();
+					string value = array[1].Trim().Replace("\\n", "\n");
+					dictionary[key] = value;
+				}
+			}
+		}
+		return dictionary;
+	}
+
+	public BetterList<string> ReadCSV()
+	{
+		ByteReader.mTemp.Clear();
+		string text = string.Empty;
+		bool flag = false;
+		int num = 0;
+		while (this.canRead)
+		{
+			if (flag)
+			{
+				string text2 = this.ReadLine(false);
+				if (text2 == null)
+				{
+					return null;
+				}
+				text2 = text2.Replace("\\n", "\n");
+				text = text + "\n" + text2;
+			}
+			else
+			{
+				text = this.ReadLine(true);
+				if (text == null)
+				{
+					return null;
+				}
+				text = text.Replace("\\n", "\n");
+				num = 0;
+			}
+			int i = num;
+			int length = text.Length;
+			while (i < length)
+			{
+				char c = text[i];
+				if (c == ',')
+				{
+					if (!flag)
+					{
+						ByteReader.mTemp.Add(text.Substring(num, i - num));
+						num = i + 1;
+					}
+				}
+				else if (c == '"')
+				{
+					if (flag)
+					{
+						if (i + 1 >= length)
+						{
+							ByteReader.mTemp.Add(text.Substring(num, i - num).Replace("\"\"", "\""));
+							return ByteReader.mTemp;
+						}
+						if (text[i + 1] != '"')
+						{
+							ByteReader.mTemp.Add(text.Substring(num, i - num).Replace("\"\"", "\""));
+							flag = false;
+							if (text[i + 1] == ',')
+							{
+								i++;
+								num = i + 1;
+							}
+						}
+						else
+						{
+							i++;
+						}
+					}
+					else
+					{
+						num = i + 1;
+						flag = true;
+					}
+				}
+				i++;
+			}
+			if (num < text.Length)
+			{
+				if (flag)
+				{
+					continue;
+				}
+				ByteReader.mTemp.Add(text.Substring(num, text.Length - num));
+			}
+			return ByteReader.mTemp;
+		}
+		return null;
+	}
+
+	private byte[] mBuffer;
+
+	private int mOffset;
+
+	private static BetterList<string> mTemp = new BetterList<string>();
+}

+ 201 - 0
Assembly-CSharp/CM3.cs

@@ -0,0 +1,201 @@
+using System;
+using System.Collections.Generic;
+
+public static class CM3
+{
+	public static Dictionary<MPN, string> dicDelItem = new Dictionary<MPN, string>
+	{
+		{
+			MPN.hairt,
+			"_I_hairt_del.menu"
+		},
+		{
+			MPN.hairs,
+			"_I_hairs_del.menu"
+		},
+		{
+			MPN.acctatoo,
+			"_I_acctatoo_del.menu"
+		},
+		{
+			MPN.accnail,
+			"_I_accnail_del.menu"
+		},
+		{
+			MPN.underhair,
+			"_I_underhair_del.menu"
+		},
+		{
+			MPN.hokuro,
+			"_I_hokuro_del.menu"
+		},
+		{
+			MPN.lip,
+			"_I_lip_del.menu"
+		},
+		{
+			MPN.wear,
+			"_I_wear_del.menu"
+		},
+		{
+			MPN.skirt,
+			"_I_skirt_del.menu"
+		},
+		{
+			MPN.mizugi,
+			"_I_mizugi_del.menu"
+		},
+		{
+			MPN.bra,
+			"_I_bra_del.menu"
+		},
+		{
+			MPN.panz,
+			"_I_panz_del.menu"
+		},
+		{
+			MPN.stkg,
+			"_I_stkg_del.menu"
+		},
+		{
+			MPN.shoes,
+			"_I_shoes_del.menu"
+		},
+		{
+			MPN.headset,
+			"_I_headset_del.menu"
+		},
+		{
+			MPN.glove,
+			"_I_glove_del.menu"
+		},
+		{
+			MPN.acchead,
+			"_I_acchead_del.menu"
+		},
+		{
+			MPN.hairaho,
+			"_I_hairaho_del.menu"
+		},
+		{
+			MPN.accha,
+			"_I_accha_del.menu"
+		},
+		{
+			MPN.acchana,
+			"_I_acchana_del.menu"
+		},
+		{
+			MPN.acckamisub,
+			"_I_acckamisub_del.menu"
+		},
+		{
+			MPN.acckami,
+			"_I_acckami_del.menu"
+		},
+		{
+			MPN.accmimi,
+			"_I_accmimi_del.menu"
+		},
+		{
+			MPN.accnip,
+			"_I_accnip_del.menu"
+		},
+		{
+			MPN.acckubi,
+			"_I_acckubi_del.menu"
+		},
+		{
+			MPN.acckubiwa,
+			"_I_acckubiwa_del.menu"
+		},
+		{
+			MPN.accheso,
+			"_I_accheso_del.menu"
+		},
+		{
+			MPN.accude,
+			"_I_accude_del.menu"
+		},
+		{
+			MPN.accashi,
+			"_I_accashi_del.menu"
+		},
+		{
+			MPN.accsenaka,
+			"_I_accsenaka_del.menu"
+		},
+		{
+			MPN.accshippo,
+			"_I_accshippo_del.menu"
+		},
+		{
+			MPN.accanl,
+			"_I_accanl_del.menu"
+		},
+		{
+			MPN.accvag,
+			"_I_accvag_del.menu"
+		},
+		{
+			MPN.megane,
+			"_I_megane_del.menu"
+		},
+		{
+			MPN.accxxx,
+			"_I_accxxx_del.menu"
+		},
+		{
+			MPN.handitem,
+			"_I_handitem_del.menu"
+		},
+		{
+			MPN.acchat,
+			"_I_acchat_del.menu"
+		},
+		{
+			MPN.onepiece,
+			"_I_onepiece_del.menu"
+		},
+		{
+			MPN.folder_underhair,
+			"_I_underhair_folder_del.menu"
+		},
+		{
+			MPN.kousoku_upper,
+			"_I_KousokuU_del.menu"
+		},
+		{
+			MPN.kousoku_lower,
+			"_I_KousokuL_del.menu"
+		},
+		{
+			MPN.seieki_naka,
+			string.Empty
+		},
+		{
+			MPN.seieki_hara,
+			string.Empty
+		},
+		{
+			MPN.seieki_face,
+			string.Empty
+		},
+		{
+			MPN.seieki_mune,
+			string.Empty
+		},
+		{
+			MPN.seieki_hip,
+			string.Empty
+		},
+		{
+			MPN.seieki_ude,
+			string.Empty
+		},
+		{
+			MPN.seieki_ashi,
+			string.Empty
+		}
+	};
+}

File diff suppressed because it is too large
+ 1737 - 0
Assembly-CSharp/CMSystem.cs


+ 123 - 0
Assembly-CSharp/CMT.cs

@@ -0,0 +1,123 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class CMT
+{
+	public static Transform SearchObjName(Transform t, string name, bool boSMPass = true)
+	{
+		string name2 = t.name;
+		if (boSMPass && name2.Contains("_SM_"))
+		{
+			return null;
+		}
+		if (name == "_ROOT_")
+		{
+			return t;
+		}
+		if (name2 == name)
+		{
+			return t;
+		}
+		for (int i = 0; i < t.childCount; i++)
+		{
+			Transform child = t.GetChild(i);
+			Transform transform = CMT.SearchObjName(child, name, boSMPass);
+			if (transform != null)
+			{
+				return transform;
+			}
+		}
+		return null;
+	}
+
+	public static void SearchAndAddObj(Transform t, Dictionary<string, Transform> dic)
+	{
+		string name = t.name;
+		if (name.Contains("_SM_"))
+		{
+			return;
+		}
+		dic[name] = t;
+		for (int i = 0; i < t.childCount; i++)
+		{
+			CMT.SearchAndAddObj(t.GetChild(i), dic);
+		}
+	}
+
+	public static Transform SearchObjObj(Transform tParent, Transform tSearch)
+	{
+		if (tParent == tSearch)
+		{
+			return tSearch;
+		}
+		for (int i = 0; i < tParent.childCount; i++)
+		{
+			Transform child = tParent.GetChild(i);
+			Transform transform = CMT.SearchObjObj(child, tSearch);
+			if (transform != null)
+			{
+				return transform;
+			}
+		}
+		return null;
+	}
+
+	public static void BindTrans(List<Transform> listPosRot, List<Transform> listScl, Dictionary<string, Transform> body1, Transform t)
+	{
+		Transform item;
+		if (body1.TryGetValue(t.name, out item))
+		{
+			listPosRot.Add(t);
+			listPosRot.Add(item);
+			if (t.name == "Mune_L" || t.name == "Mune_R")
+			{
+				listScl.Add(t);
+				listScl.Add(item);
+			}
+		}
+		for (int i = 0; i < t.childCount; i++)
+		{
+			CMT.BindTrans(listPosRot, listScl, body1, t.GetChild(i));
+		}
+	}
+
+	public static void TestTrans(Transform t)
+	{
+		t.localRotation = Quaternion.identity;
+		for (int i = 0; i < t.childCount; i++)
+		{
+			CMT.TestTrans(t.GetChild(i));
+		}
+	}
+
+	public static void SetActiveFlag(Transform t, bool bo)
+	{
+		for (int i = 0; i < t.childCount; i++)
+		{
+			Transform child = t.GetChild(i);
+			CMT.SetActiveFlag(child, bo);
+			child.gameObject.SetActive(bo);
+		}
+		t.gameObject.SetActive(bo);
+	}
+
+	public static Transform SearchObjNameContainsLower(Transform t, string name, bool bIgnoreCase = false)
+	{
+		string name2 = t.name;
+		if ((!bIgnoreCase) ? name2.Contains(name) : name2.ToLower().Contains(name))
+		{
+			return t;
+		}
+		for (int i = 0; i < t.childCount; i++)
+		{
+			Transform child = t.GetChild(i);
+			Transform transform = CMT.SearchObjNameContainsLower(child, name, bIgnoreCase);
+			if (transform != null)
+			{
+				return transform;
+			}
+		}
+		return null;
+	}
+}

+ 415 - 0
Assembly-CSharp/CacheBoneDataArray.cs

@@ -0,0 +1,415 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+public class CacheBoneDataArray : MonoBehaviour
+{
+	public void CreateCache(Transform root)
+	{
+		if (CacheBoneDataArray.save_bone_path_set_ == null)
+		{
+			CacheBoneDataArray.save_bone_path_set_ = new HashSet<string>();
+			string[] saveBonePathArray = CacheBoneDataArray.GetSaveBonePathArray();
+			for (int i = 0; i < saveBonePathArray.Length; i++)
+			{
+				CacheBoneDataArray.save_bone_path_set_.Add(saveBonePathArray[i]);
+			}
+		}
+		this.path_dic_ = new Dictionary<string, CacheBoneDataArray.BoneData>();
+		this.bone_data = new CacheBoneDataArray.BoneData(root, null);
+		this.bip_root_trans_ = this.bone_data.transform;
+		this.bust_trans_ = new Transform[2];
+		Action<CacheBoneDataArray.BoneData> bust_search = null;
+		bust_search = delegate(CacheBoneDataArray.BoneData target_bone_data)
+		{
+			if (this.bust_trans_[0] != null && this.bust_trans_[1] != null)
+			{
+				return;
+			}
+			string name = target_bone_data.transform.gameObject.name;
+			if (name == "Mune_L")
+			{
+				this.bust_trans_[0] = target_bone_data.transform;
+			}
+			else if (name == "Mune_R")
+			{
+				this.bust_trans_[1] = target_bone_data.transform;
+			}
+			for (int j = 0; j < target_bone_data.child_bone_array.Length; j++)
+			{
+				bust_search(target_bone_data.child_bone_array[j]);
+			}
+		};
+		bust_search(this.bone_data);
+		NDebug.Assert(this.bust_trans_[0] != null && this.bust_trans_[1] != null, "胸ボーンのサーチに失敗しました");
+		Action<CacheBoneDataArray.BoneData> create_path_dic = null;
+		create_path_dic = delegate(CacheBoneDataArray.BoneData target_bone_data)
+		{
+			if (!this.path_dic_.ContainsKey(target_bone_data.path))
+			{
+				this.path_dic_.Add(target_bone_data.path, target_bone_data);
+			}
+			for (int j = 0; j < target_bone_data.child_bone_array.Length; j++)
+			{
+				create_path_dic(target_bone_data.child_bone_array[j]);
+			}
+		};
+		create_path_dic(this.bone_data);
+	}
+
+	public byte[] GetAnmBinary(bool use_bust_keyL, bool use_bust_keyR)
+	{
+		if (this.bone_data == null)
+		{
+			NDebug.Assert("ボーンデータがありません", false);
+			return null;
+		}
+		Action<BinaryWriter, CacheBoneDataArray.BoneData> write_bone_data = null;
+		write_bone_data = delegate(BinaryWriter w, CacheBoneDataArray.BoneData target_bone_data)
+		{
+			if (CacheBoneDataArray.save_bone_path_set_.Contains(target_bone_data.path))
+			{
+				int num = 2;
+				w.Write(1);
+				w.Write(target_bone_data.path);
+				Vector3 localPosition = target_bone_data.transform.localPosition;
+				Quaternion localRotation = target_bone_data.transform.localRotation;
+				float[] array = new float[]
+				{
+					localRotation.x,
+					localRotation.y,
+					localRotation.z,
+					localRotation.w
+				};
+				if (target_bone_data.transform == this.bip_root_trans_)
+				{
+					array = new float[]
+					{
+						localRotation.x,
+						localRotation.y,
+						localRotation.z,
+						localRotation.w,
+						localPosition.x,
+						localPosition.y,
+						localPosition.z
+					};
+				}
+				for (int i = 0; i < array.Length; i++)
+				{
+					w.Write((byte)(100 + i));
+					w.Write(num);
+					for (int j = 0; j < num; j++)
+					{
+						w.Write((float)j);
+						w.Write(array[i]);
+						w.Write(0);
+						w.Write(0);
+					}
+				}
+			}
+			for (int k = 0; k < target_bone_data.child_bone_array.Length; k++)
+			{
+				write_bone_data(w, target_bone_data.child_bone_array[k]);
+			}
+		};
+		MemoryStream memoryStream = new MemoryStream();
+		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
+		binaryWriter.Write("CM3D2_ANIM");
+		binaryWriter.Write(1001);
+		write_bone_data(binaryWriter, this.bone_data);
+		binaryWriter.Write(0);
+		binaryWriter.Write((!use_bust_keyL) ? 0 : 1);
+		binaryWriter.Write((!use_bust_keyR) ? 0 : 1);
+		binaryWriter.Close();
+		memoryStream.Close();
+		byte[] result = memoryStream.ToArray();
+		memoryStream.Dispose();
+		return result;
+	}
+
+	public List<KeyValuePair<string, KeyValuePair<Quaternion, Vector3>>> GetTest()
+	{
+		List<KeyValuePair<string, KeyValuePair<Quaternion, Vector3>>> result = new List<KeyValuePair<string, KeyValuePair<Quaternion, Vector3>>>();
+		Action<List<KeyValuePair<string, KeyValuePair<Quaternion, Vector3>>>, CacheBoneDataArray.BoneData> write_bone_data = null;
+		write_bone_data = delegate(List<KeyValuePair<string, KeyValuePair<Quaternion, Vector3>>> dest, CacheBoneDataArray.BoneData target_bone_data)
+		{
+			if (CacheBoneDataArray.save_bone_path_set_.Contains(target_bone_data.path))
+			{
+				string path = target_bone_data.path;
+				KeyValuePair<Quaternion, Vector3> value = new KeyValuePair<Quaternion, Vector3>(target_bone_data.transform.localRotation, target_bone_data.transform.localPosition);
+				KeyValuePair<string, KeyValuePair<Quaternion, Vector3>> item = new KeyValuePair<string, KeyValuePair<Quaternion, Vector3>>(path, value);
+				dest.Add(item);
+			}
+			for (int i = 0; i < target_bone_data.child_bone_array.Length; i++)
+			{
+				write_bone_data(result, target_bone_data.child_bone_array[i]);
+			}
+		};
+		write_bone_data(result, this.bone_data);
+		return result;
+	}
+
+	public byte[] GetFrameBinary(bool use_bust_keyL, bool use_bust_keyR)
+	{
+		if (this.bone_data == null)
+		{
+			NDebug.Assert("ボーンデータがありません", false);
+			return null;
+		}
+		Action<BinaryWriter, CacheBoneDataArray.BoneData> write_bone_data = null;
+		write_bone_data = delegate(BinaryWriter w, CacheBoneDataArray.BoneData target_bone_data)
+		{
+			if (CacheBoneDataArray.save_bone_path_set_.Contains(target_bone_data.path))
+			{
+				w.Write(1);
+				w.Write(target_bone_data.path);
+				Vector3 localPosition = target_bone_data.transform.localPosition;
+				Quaternion localRotation = target_bone_data.transform.localRotation;
+				float[] array = new float[]
+				{
+					localRotation.x,
+					localRotation.y,
+					localRotation.z,
+					localRotation.w
+				};
+				if (target_bone_data.transform == this.bip_root_trans_)
+				{
+					array = new float[]
+					{
+						localRotation.x,
+						localRotation.y,
+						localRotation.z,
+						localRotation.w,
+						localPosition.x,
+						localPosition.y,
+						localPosition.z
+					};
+				}
+				for (int i = 0; i < array.Length; i++)
+				{
+					w.Write(array[i]);
+				}
+			}
+			for (int j = 0; j < target_bone_data.child_bone_array.Length; j++)
+			{
+				write_bone_data(w, target_bone_data.child_bone_array[j]);
+			}
+		};
+		MemoryStream memoryStream = new MemoryStream();
+		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
+		binaryWriter.Write("CM3D2_FRAME_ANIM");
+		binaryWriter.Write(1001);
+		write_bone_data(binaryWriter, this.bone_data);
+		binaryWriter.Write(0);
+		binaryWriter.Write((!use_bust_keyL) ? 0 : 1);
+		binaryWriter.Write((!use_bust_keyR) ? 0 : 1);
+		binaryWriter.Close();
+		memoryStream.Close();
+		byte[] result = memoryStream.ToArray();
+		memoryStream.Dispose();
+		return result;
+	}
+
+	public KeyValuePair<bool, bool> SetFrameBinary(byte[] binary)
+	{
+		if (this.bone_data == null)
+		{
+			NDebug.Assert("ボーンデータがありません", false);
+			return new KeyValuePair<bool, bool>(false, false);
+		}
+		MemoryStream memoryStream = new MemoryStream(binary);
+		BinaryReader binaryReader = new BinaryReader(memoryStream);
+		string a = binaryReader.ReadString();
+		if (a != "CM3D2_FRAME_ANIM")
+		{
+			binaryReader.Close();
+			memoryStream.Close();
+			memoryStream.Dispose();
+			return new KeyValuePair<bool, bool>(false, false);
+		}
+		int num = binaryReader.ReadInt32();
+		bool flag = false;
+		if (1001 <= num)
+		{
+			flag = true;
+		}
+		Dictionary<int, KeyValuePair<Transform, float[]>> dictionary = new Dictionary<int, KeyValuePair<Transform, float[]>>();
+		while (binaryReader.ReadByte() != 0)
+		{
+			string key = binaryReader.ReadString();
+			CacheBoneDataArray.BoneData boneData = this.path_dic_[key];
+			float[] array = new float[4];
+			if (boneData.transform == this.bip_root_trans_)
+			{
+				array = new float[7];
+			}
+			for (int i = 0; i < array.Length; i++)
+			{
+				array[i] = binaryReader.ReadSingle();
+			}
+			if (flag && (boneData.transform == this.bust_trans_[0] || boneData.transform == this.bust_trans_[1]))
+			{
+				int key2 = 0;
+				if (boneData.transform == this.bust_trans_[1])
+				{
+					key2 = 1;
+				}
+				KeyValuePair<Transform, float[]> value = new KeyValuePair<Transform, float[]>(boneData.transform, array);
+				dictionary.Add(key2, value);
+			}
+			else
+			{
+				boneData.transform.localRotation = new Quaternion(array[0], array[1], array[2], array[3]);
+				if (4 < array.Length)
+				{
+					boneData.transform.localPosition = new Vector3(array[4], array[5], array[6]);
+				}
+			}
+		}
+		bool flag2 = false;
+		bool value2 = false;
+		if (flag)
+		{
+			flag2 = (binaryReader.ReadByte() != 0);
+			value2 = (binaryReader.ReadByte() != 0);
+			List<KeyValuePair<Transform, float[]>> list = new List<KeyValuePair<Transform, float[]>>();
+			if (flag2)
+			{
+				list.Add(dictionary[0]);
+			}
+			else if (flag2)
+			{
+				list.Add(dictionary[1]);
+			}
+			foreach (KeyValuePair<Transform, float[]> keyValuePair in list)
+			{
+				float[] value3 = keyValuePair.Value;
+				keyValuePair.Key.localRotation = new Quaternion(value3[0], value3[1], value3[2], value3[3]);
+				if (4 < value3.Length)
+				{
+					keyValuePair.Key.transform.localPosition = new Vector3(value3[4], value3[5], value3[6]);
+				}
+			}
+		}
+		binaryReader.Close();
+		memoryStream.Close();
+		memoryStream.Dispose();
+		return new KeyValuePair<bool, bool>(flag2, value2);
+	}
+
+	public CacheBoneDataArray.BoneData bone_data { get; private set; }
+
+	private static string[] GetSaveBonePathArray()
+	{
+		return new string[]
+		{
+			"Bip01",
+			"Bip01/Bip01 Footsteps",
+			"Bip01/Bip01 Pelvis",
+			"Bip01/Bip01 Pelvis/Bip01 L Thigh",
+			"Bip01/Bip01 Pelvis/Bip01 L Thigh/Bip01 L Calf",
+			"Bip01/Bip01 Pelvis/Bip01 L Thigh/Bip01 L Calf/Bip01 L Foot",
+			"Bip01/Bip01 Pelvis/Bip01 L Thigh/Bip01 L Calf/Bip01 L Foot/Bip01 L Toe0",
+			"Bip01/Bip01 Pelvis/Bip01 L Thigh/Bip01 L Calf/Bip01 L Foot/Bip01 L Toe0/Bip01 L Toe01",
+			"Bip01/Bip01 Pelvis/Bip01 L Thigh/Bip01 L Calf/Bip01 L Foot/Bip01 L Toe1",
+			"Bip01/Bip01 Pelvis/Bip01 L Thigh/Bip01 L Calf/Bip01 L Foot/Bip01 L Toe1/Bip01 L Toe11",
+			"Bip01/Bip01 Pelvis/Bip01 L Thigh/Bip01 L Calf/Bip01 L Foot/Bip01 L Toe2",
+			"Bip01/Bip01 Pelvis/Bip01 L Thigh/Bip01 L Calf/Bip01 L Foot/Bip01 L Toe2/Bip01 L Toe21",
+			"Bip01/Bip01 Pelvis/Bip01 R Thigh",
+			"Bip01/Bip01 Pelvis/Bip01 R Thigh/Bip01 R Calf",
+			"Bip01/Bip01 Pelvis/Bip01 R Thigh/Bip01 R Calf/Bip01 R Foot",
+			"Bip01/Bip01 Pelvis/Bip01 R Thigh/Bip01 R Calf/Bip01 R Foot/Bip01 R Toe0",
+			"Bip01/Bip01 Pelvis/Bip01 R Thigh/Bip01 R Calf/Bip01 R Foot/Bip01 R Toe0/Bip01 R Toe01",
+			"Bip01/Bip01 Pelvis/Bip01 R Thigh/Bip01 R Calf/Bip01 R Foot/Bip01 R Toe1",
+			"Bip01/Bip01 Pelvis/Bip01 R Thigh/Bip01 R Calf/Bip01 R Foot/Bip01 R Toe1/Bip01 R Toe11",
+			"Bip01/Bip01 Pelvis/Bip01 R Thigh/Bip01 R Calf/Bip01 R Foot/Bip01 R Toe2",
+			"Bip01/Bip01 Pelvis/Bip01 R Thigh/Bip01 R Calf/Bip01 R Foot/Bip01 R Toe2/Bip01 R Toe21",
+			"Bip01/Bip01 Spine",
+			"Bip01/Bip01 Spine/Bip01 Spine0a",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 Neck",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 Neck/Bip01 Head",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger0",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger0/Bip01 L Finger01",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger0/Bip01 L Finger01/Bip01 L Finger02",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger1",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger1/Bip01 L Finger11",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger1/Bip01 L Finger11/Bip01 L Finger12",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger2",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger2/Bip01 L Finger21",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger2/Bip01 L Finger21/Bip01 L Finger22",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger3",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger3/Bip01 L Finger31",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger3/Bip01 L Finger31/Bip01 L Finger32",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger4",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger4/Bip01 L Finger41",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 L Clavicle/Bip01 L UpperArm/Bip01 L Forearm/Bip01 L Hand/Bip01 L Finger4/Bip01 L Finger41/Bip01 L Finger42",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger0",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger0/Bip01 R Finger01",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger0/Bip01 R Finger01/Bip01 R Finger02",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger1",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger1/Bip01 R Finger11",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger1/Bip01 R Finger11/Bip01 R Finger12",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger2",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger2/Bip01 R Finger21",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger2/Bip01 R Finger21/Bip01 R Finger22",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger3",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger3/Bip01 R Finger31",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger3/Bip01 R Finger31/Bip01 R Finger32",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger4",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger4/Bip01 R Finger41",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Bip01 R Clavicle/Bip01 R UpperArm/Bip01 R Forearm/Bip01 R Hand/Bip01 R Finger4/Bip01 R Finger41/Bip01 R Finger42",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Mune_L",
+			"Bip01/Bip01 Spine/Bip01 Spine0a/Bip01 Spine1/Bip01 Spine1a/Mune_R"
+		};
+	}
+
+	private Transform bip_root_trans_;
+
+	private Transform[] bust_trans_;
+
+	private Dictionary<string, CacheBoneDataArray.BoneData> path_dic_;
+
+	private static HashSet<string> save_bone_path_set_;
+
+	public class BoneData
+	{
+		public BoneData(Transform trans, string hierarchy_path)
+		{
+			this.transform = trans;
+			this.path = hierarchy_path;
+			if (!string.IsNullOrEmpty(this.path))
+			{
+				this.path += "/";
+			}
+			this.path += trans.gameObject.name;
+			List<CacheBoneDataArray.BoneData> list = new List<CacheBoneDataArray.BoneData>();
+			for (int i = 0; i < this.transform.childCount; i++)
+			{
+				Transform child = this.transform.GetChild(i);
+				string name = child.name;
+				if (0 > name.IndexOf("_IK") && 0 > name.IndexOf("_SCL") && 0 > name.IndexOf("nub"))
+				{
+					list.Add(new CacheBoneDataArray.BoneData(child, this.path));
+				}
+			}
+			this.child_bone_array = list.ToArray();
+		}
+
+		public Transform transform { get; private set; }
+
+		public CacheBoneDataArray.BoneData[] child_bone_array { get; private set; }
+
+		public string path { get; private set; }
+	}
+}

+ 94 - 0
Assembly-CSharp/CalendarTexture.cs

@@ -0,0 +1,94 @@
+using System;
+using UnityEngine;
+
+public class CalendarTexture : MonoBehaviour
+{
+	public void Start()
+	{
+		this.Init();
+	}
+
+	public virtual void Init()
+	{
+		if (this.Year == 0)
+		{
+			this.Year = 2017;
+		}
+		DateTime now = DateTime.Now;
+		if (now.Year != this.Year)
+		{
+			this.SetFrontPage();
+		}
+		else
+		{
+			this.SetPage(now.Month);
+		}
+	}
+
+	public void SetFrontPage()
+	{
+		if (this.TargetMaterial == null || this.FrontPage == null)
+		{
+			return;
+		}
+		this.TargetMaterial.mainTexture = this.FrontPage;
+	}
+
+	public void SetPage(int month)
+	{
+		if (1 > month || month > 12 || this.TargetMaterial == null)
+		{
+			return;
+		}
+		Texture[] array = new Texture[]
+		{
+			this.January,
+			this.February,
+			this.March,
+			this.April,
+			this.May,
+			this.June,
+			this.July,
+			this.August,
+			this.September,
+			this.October,
+			this.November,
+			this.December
+		};
+		if (array[month - 1] == null)
+		{
+			return;
+		}
+		this.TargetMaterial.mainTexture = array[month - 1];
+	}
+
+	public int Year;
+
+	public Material TargetMaterial;
+
+	public Texture FrontPage;
+
+	public Texture January;
+
+	public Texture February;
+
+	public Texture March;
+
+	public Texture April;
+
+	public Texture May;
+
+	public Texture June;
+
+	public Texture July;
+
+	public Texture August;
+
+	public Texture September;
+
+	public Texture October;
+
+	public Texture November;
+
+	public Texture December;
+}

+ 177 - 0
Assembly-CSharp/CameraAnimationCtrl.cs

@@ -0,0 +1,177 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class CameraAnimationCtrl : MonoBehaviour
+{
+	public void Play(GameObject goRoot, string animationName)
+	{
+		this.PlayByPath(goRoot, "Debug/CameraAnimation/Prefab/AnimationObject/" + animationName);
+	}
+
+	public void PlayByPath(GameObject goRoot, string animePrefabPath)
+	{
+		this.m_goRoot = goRoot;
+		this.ClearExistAnimationObject(goRoot);
+		this.m_goCamera = goRoot.transform.Find("Camera").gameObject;
+		GameObject gameObject = Resources.Load(animePrefabPath) as GameObject;
+		NDebug.Assert(gameObject != null, string.Format("アニメーションを保持する指定のプレハブがみつかりませんでした。パス={0}", animePrefabPath));
+		GameObject gameObject2 = UnityEngine.Object.Instantiate<GameObject>(gameObject);
+		gameObject2.GetComponent<Renderer>().enabled = false;
+		gameObject2.transform.parent = goRoot.transform;
+		this.m_goCamera.transform.parent = gameObject2.transform;
+		this.m_animationClip = gameObject2.GetComponent<Animation>();
+		List<string> list = new List<string>();
+		IEnumerator enumerator = this.m_animationClip.GetEnumerator();
+		try
+		{
+			while (enumerator.MoveNext())
+			{
+				object obj = enumerator.Current;
+				AnimationState animationState = (AnimationState)obj;
+				list.Add(animationState.name);
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+		if (list.Count > 0)
+		{
+			base.StartCoroutine(this.Play(list));
+		}
+		else
+		{
+			Debug.LogError(string.Format("再生するアニメーションが存在しません。パス={0}", animePrefabPath));
+		}
+	}
+
+	private IEnumerator Play(List<string> listClip)
+	{
+		this.m_pressStop = false;
+		this.m_pressPause = false;
+		this.m_pressResume = false;
+		bool isPausing = false;
+		int clipNum = 0;
+		string playingAnimationClipName = listClip[0];
+		this.m_goCamera.SetActive(true);
+		for (;;)
+		{
+			while (this.m_animationClip.isPlaying && !isPausing)
+			{
+				if (this.m_pressStop)
+				{
+					goto Block_1;
+				}
+				if (this.m_pressPause)
+				{
+					this.m_animationClip[playingAnimationClipName].speed = 0f;
+					isPausing = true;
+				}
+				yield return null;
+			}
+			while (this.m_pressPause)
+			{
+				if (this.m_pressResume)
+				{
+					this.m_animationClip[playingAnimationClipName].speed = 1f;
+					isPausing = false;
+					this.m_pressPause = false;
+				}
+				if (this.m_pressStop)
+				{
+					goto Block_5;
+				}
+				yield return null;
+			}
+			if (this.m_pressResume)
+			{
+				this.m_pressResume = false;
+			}
+			else
+			{
+				if (listClip.Count <= clipNum)
+				{
+					goto Block_8;
+				}
+				playingAnimationClipName = listClip[clipNum];
+				this.m_animationClip.Play(playingAnimationClipName);
+				clipNum++;
+			}
+		}
+		Block_1:
+		this.m_animationClip.Stop();
+		UnityEngine.Object.Destroy(this.m_goRoot);
+		yield break;
+		Block_5:
+		this.m_animationClip.Stop();
+		UnityEngine.Object.Destroy(this.m_goRoot);
+		yield break;
+		Block_8:
+		UnityEngine.Object.Destroy(this.m_goRoot);
+		yield break;
+		yield break;
+	}
+
+	private void ClearExistAnimationObject(GameObject go)
+	{
+		IEnumerator enumerator = go.transform.GetEnumerator();
+		try
+		{
+			while (enumerator.MoveNext())
+			{
+				object obj = enumerator.Current;
+				Transform transform = (Transform)obj;
+				if (transform.name != "Camera")
+				{
+					UnityEngine.Object.Destroy(transform.gameObject);
+				}
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+	}
+
+	public void Pause()
+	{
+		this.m_pressPause = true;
+	}
+
+	public void Resume()
+	{
+		if (this.m_pressPause)
+		{
+			this.m_pressResume = true;
+		}
+	}
+
+	public void Stop()
+	{
+		this.m_pressStop = true;
+	}
+
+	private GameObject m_goRoot;
+
+	private GameObject m_goCamera;
+
+	private Animation m_animationClip;
+
+	private bool m_pressStop;
+
+	private bool m_pressPause;
+
+	private bool m_pressResume;
+
+	private const string ANIMATION_PREFAB_ROOT_PATH = "Debug/CameraAnimation/Prefab/AnimationObject/";
+}

+ 59 - 0
Assembly-CSharp/CameraAnimationMgr.cs

@@ -0,0 +1,59 @@
+using System;
+using UnityEngine;
+
+public class CameraAnimationMgr : BaseMgr<CameraAnimationMgr>
+{
+	public void Play(string cameraAnimationName)
+	{
+		this.ClearCameraAnimationRoot();
+		GameObject cameraAnimationRoot = this.GetCameraAnimationRoot();
+		this.m_cameraAnimeCtrl = cameraAnimationRoot.GetComponent<CameraAnimationCtrl>();
+		this.m_cameraAnimeCtrl.Play(cameraAnimationRoot, cameraAnimationName);
+	}
+
+	public void PlayByPath(string animePrefabPath)
+	{
+		this.ClearCameraAnimationRoot();
+		GameObject cameraAnimationRoot = this.GetCameraAnimationRoot();
+		this.m_cameraAnimeCtrl = cameraAnimationRoot.GetComponent<CameraAnimationCtrl>();
+		this.m_cameraAnimeCtrl.PlayByPath(cameraAnimationRoot, animePrefabPath);
+	}
+
+	private void ClearCameraAnimationRoot()
+	{
+		GameObject gameObject = GameObject.Find("CameraAnimationRoot");
+		if (gameObject != null)
+		{
+			UnityEngine.Object.Destroy(gameObject);
+		}
+	}
+
+	private GameObject GetCameraAnimationRoot()
+	{
+		GameObject original = Resources.Load("Debug/CameraAnimation/Prefab/CameraAnimationRoot") as GameObject;
+		GameObject gameObject = UnityEngine.Object.Instantiate<GameObject>(original);
+		gameObject.name = "CameraAnimationRoot";
+		return gameObject;
+	}
+
+	public void Pause()
+	{
+		this.m_cameraAnimeCtrl.Pause();
+	}
+
+	public void Resume()
+	{
+		this.m_cameraAnimeCtrl.Resume();
+	}
+
+	public void Stop()
+	{
+		this.m_cameraAnimeCtrl.Stop();
+	}
+
+	private CameraAnimationCtrl m_cameraAnimeCtrl;
+
+	private const string CAMERA_ANIMATION_ROOT_NAME = "CameraAnimationRoot";
+
+	private const string CAMERA_ANIMATION_PREFAB_PATH = "Debug/CameraAnimation/Prefab/CameraAnimationRoot";
+}

+ 48 - 0
Assembly-CSharp/CameraChase.cs

@@ -0,0 +1,48 @@
+using System;
+using UnityEngine;
+
+public class CameraChase : MonoBehaviour
+{
+	public void StartChase(bool f_bOnece, float f_fTime, Vector3 f_vWorldOffset)
+	{
+		this.m_bOnece = f_bOnece;
+		this.m_fTime = f_fTime;
+		this.m_fNowTime = 0f;
+		this.m_camMain = GameMain.Instance.MainCamera;
+		this.m_trMy = base.gameObject.transform;
+		this.m_vWorldOffset = f_vWorldOffset;
+		if (this.m_camMain != null)
+		{
+			this.m_camMain.SetTargetPos(this.m_trMy.position + this.m_vWorldOffset, true);
+		}
+	}
+
+	public void OnDisable()
+	{
+		UnityEngine.Object.Destroy(this);
+	}
+
+	private void Update()
+	{
+		if (this.m_camMain != null)
+		{
+			this.m_camMain.SetTargetPos(this.m_trMy.position + this.m_vWorldOffset, true);
+		}
+		if (this.m_bOnece && this.m_fTime <= (this.m_fNowTime += Time.deltaTime))
+		{
+			UnityEngine.Object.Destroy(this);
+		}
+	}
+
+	private bool m_bOnece = true;
+
+	private float m_fTime;
+
+	private float m_fNowTime;
+
+	private CameraMain m_camMain;
+
+	private Transform m_trMy;
+
+	private Vector3 m_vWorldOffset;
+}

File diff suppressed because it is too large
+ 1205 - 0
Assembly-CSharp/CameraMain.cs


+ 16 - 0
Assembly-CSharp/CameraMgr.cs

@@ -0,0 +1,16 @@
+using System;
+using UnityEngine;
+
+public class CameraMgr : MonoBehaviour
+{
+	private void Start()
+	{
+	}
+
+	private void Update()
+	{
+		Vector3 a = new Vector3(NInput.GetAxis("Horizontal"), NInput.GetAxis("FrontBack"), NInput.GetAxis("Vertical")) * 5f;
+		base.gameObject.transform.position += a * Time.deltaTime;
+		base.gameObject.transform.eulerAngles += new Vector3(0f, NInput.GetAxis("Side") * 100f * Time.deltaTime, 0f);
+	}
+}

+ 196 - 0
Assembly-CSharp/Card.cs

@@ -0,0 +1,196 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+public class Card : MonoBehaviour
+{
+	public bool IsMoveend
+	{
+		get
+		{
+			return this.m_IsMoveend;
+		}
+	}
+
+	private void Reset()
+	{
+		this.m_MyRenderer = base.GetComponent<MeshRenderer>();
+	}
+
+	private void PosYFixed()
+	{
+		Vector3 position = base.transform.position;
+		position.y = this.EndPosition.y;
+		base.transform.position = position;
+	}
+
+	private IEnumerator CardMove()
+	{
+		this.m_MyRenderer.enabled = false;
+		float timer = this.InitTime;
+		while (timer <= this.StartTime)
+		{
+			timer += Time.deltaTime;
+			yield return null;
+		}
+		this.m_MyRenderer.enabled = true;
+		BlackjackGame.Instance.CardSe.Play();
+		bool is_player = base.transform.parent == BjPlayer.Instance.CurrentHand.transform;
+		Vector3 orijin_pos = base.transform.position;
+		bool hand_switch = false;
+		for (;;)
+		{
+			timer += Time.deltaTime;
+			if (!hand_switch)
+			{
+				hand_switch = (timer > this.SwitchTime);
+				base.transform.position = BjMotionControl.Instance.LeftHandPos();
+				float num = this.StartTime + (this.SwitchTime - this.StartTime) / 2f;
+				float t = KasaiUtility.SinRate01(timer - num, this.SwitchTime - num, false, false);
+				this.m_OpenTime = this.SwitchTime - num;
+				if (this.CurrentState == Card.CardState.FlipUp)
+				{
+					base.transform.eulerAngles = Vector3.Lerp(CardDeck.Instance.FlipdownAngle, CardDeck.Instance.FlipupAngle, t);
+				}
+			}
+			else
+			{
+				Vector3 position = BjMotionControl.Instance.RightHandPos();
+				float num2 = KasaiUtility.SinRate01(timer - this.SwitchTime, this.CardSetTime - this.SwitchTime, false, false);
+				this.m_IsMoveend = (timer > this.CardSetTime);
+				if (is_player)
+				{
+					position.x -= CardDeck.Instance.RightOffset * num2;
+				}
+				else if (BjPlayer.Instance.IsturnEnd)
+				{
+					this.m_IsMoveend = (Dealer.Instance.LastCardPos.z < position.z);
+					position.z = Mathf.Min(Dealer.Instance.LastCardPos.z, position.z);
+				}
+				base.transform.position = position;
+				if (this.m_IsMoveend)
+				{
+					break;
+				}
+			}
+			this.PosYFixed();
+			yield return null;
+		}
+		this.PosYFixed();
+		BlackjackGame.Instance.DealQueue.CardTimer = timer;
+		this.MovingCallback(base.gameObject);
+		yield break;
+		yield break;
+	}
+
+	private IEnumerator CardOpen()
+	{
+		float timer = this.InitTime;
+		if (this.CurrentState != Card.CardState.Open)
+		{
+			yield break;
+		}
+		bool near_hand = false;
+		for (;;)
+		{
+			if (!near_hand)
+			{
+				near_hand = (timer > this.StartTime);
+				if (near_hand)
+				{
+					BlackjackGame.Instance.CardSe.Play();
+				}
+			}
+			else
+			{
+				base.transform.position = BjMotionControl.Instance.LeftHandPos();
+				float t = KasaiUtility.SinRate01(timer - this.StartTime, this.m_OpenTime, false, false);
+				base.transform.eulerAngles = Vector3.Lerp(CardDeck.Instance.FlipdownAngle, CardDeck.Instance.FlipupAngle, t);
+				if (timer > this.CardSetTime)
+				{
+					break;
+				}
+			}
+			this.PosYFixed();
+			yield return null;
+			timer += Time.deltaTime;
+		}
+		this.PosYFixed();
+		Dealer.Instance.SetCardOffset();
+		if (this.OpenCallback != null)
+		{
+			this.OpenCallback(base.gameObject);
+		}
+		yield break;
+		yield break;
+	}
+
+	public void MoveToPosition(Card.FinishedMoving callback)
+	{
+		if (this.m_IsMoveend)
+		{
+			return;
+		}
+		base.transform.eulerAngles = CardDeck.Instance.FlipdownAngle;
+		this.MovingCallback = callback;
+		base.StartCoroutine(this.CardMove());
+	}
+
+	public void Open(Card.FinishedOpen callback)
+	{
+		this.OpenCallback = callback;
+		this.CurrentState = Card.CardState.Open;
+		base.StartCoroutine(this.CardOpen());
+	}
+
+	public const float m_CardWidth = 0.035f;
+
+	public const float m_CardHeight = 0.05f;
+
+	private Card.FinishedOpen OpenCallback;
+
+	private Card.FinishedMoving MovingCallback;
+
+	private bool m_IsMoveend;
+
+	[HideInInspector]
+	public Card.CardState CurrentState;
+
+	[HideInInspector]
+	public Vector3 EndPosition;
+
+	[HideInInspector]
+	public Transform CardSet;
+
+	[HideInInspector]
+	public CardData CardData;
+
+	[SerializeField]
+	[HideInInspector]
+	private MeshRenderer m_MyRenderer;
+
+	[HideInInspector]
+	public float InitTime;
+
+	[HideInInspector]
+	public float StartTime;
+
+	[HideInInspector]
+	public float CardSetTime;
+
+	[HideInInspector]
+	public float SwitchTime;
+
+	private float m_OpenTime;
+
+	public enum CardState
+	{
+		FlipUp,
+		FlipDown,
+		Open
+	}
+
+	public delegate void FinishedMoving(GameObject card);
+
+	public delegate void FinishedOpen(GameObject card);
+}

+ 72 - 0
Assembly-CSharp/CardData.cs

@@ -0,0 +1,72 @@
+using System;
+
+[Serializable]
+public class CardData
+{
+	public CardData(CardData.Suit suit, CardData.Rank rank)
+	{
+		this.m_Suit = suit;
+		this.m_Rank = rank;
+	}
+
+	public CardData.Suit CardSuit
+	{
+		get
+		{
+			return this.m_Suit;
+		}
+	}
+
+	public CardData.Rank CardRank
+	{
+		get
+		{
+			return this.m_Rank;
+		}
+	}
+
+	public int GetValue()
+	{
+		if (this.m_Rank < CardData.Rank.Jack)
+		{
+			return (int)(this.m_Rank + 1);
+		}
+		return 10;
+	}
+
+	public string GetAssetName()
+	{
+		return this.m_Rank.ToString().ToLower() + this.m_Suit.ToString().ToLower();
+	}
+
+	private const int m_MaxCardValue = 10;
+
+	private CardData.Suit m_Suit;
+
+	private CardData.Rank m_Rank;
+
+	public enum Suit
+	{
+		Hearts,
+		Diamonds,
+		Spades,
+		Clubs
+	}
+
+	public enum Rank
+	{
+		Ace,
+		Two,
+		Three,
+		Four,
+		Five,
+		Six,
+		Seven,
+		Eight,
+		Nine,
+		Ten,
+		Jack,
+		Queen,
+		King
+	}
+}

+ 150 - 0
Assembly-CSharp/CardDeck.cs

@@ -0,0 +1,150 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class CardDeck : MonoBehaviour
+{
+	public static CardDeck Instance { get; private set; }
+
+	public float RightOffset
+	{
+		get
+		{
+			return this.m_RightOffset;
+		}
+	}
+
+	public Vector3 FlipupAngle
+	{
+		get
+		{
+			return this.m_UpAngle;
+		}
+	}
+
+	public Vector3 FlipdownAngle
+	{
+		get
+		{
+			return this.m_DownAngle;
+		}
+	}
+
+	private void Awake()
+	{
+		CardDeck.Instance = this;
+		if (CardDeck.m_CardObjData == null)
+		{
+			CardDeck.m_CardObjData = new Dictionary<CardData.Suit, Dictionary<CardData.Rank, GameObject>>
+			{
+				{
+					CardData.Suit.Spades,
+					new Dictionary<CardData.Rank, GameObject>()
+				},
+				{
+					CardData.Suit.Diamonds,
+					new Dictionary<CardData.Rank, GameObject>()
+				},
+				{
+					CardData.Suit.Hearts,
+					new Dictionary<CardData.Rank, GameObject>()
+				},
+				{
+					CardData.Suit.Clubs,
+					new Dictionary<CardData.Rank, GameObject>()
+				}
+			};
+			CardData.Suit[] array = (CardData.Suit[])Enum.GetValues(typeof(CardData.Suit));
+			CardData.Rank[] array2 = (CardData.Rank[])Enum.GetValues(typeof(CardData.Rank));
+			foreach (CardData.Suit key in array)
+			{
+				foreach (CardData.Rank key2 in array2)
+				{
+					GameObject gameObject = Resources.Load<GameObject>(BlackjackGame.BlackJackResource("Prefab/Cards/" + key.ToString()));
+					gameObject = gameObject.transform.Find(key2.ToString().ToLower() + key.ToString().ToLower()).gameObject;
+					CardDeck.m_CardObjData[key].Add(key2, gameObject);
+				}
+			}
+		}
+	}
+
+	public void Shuffle(int deckCount)
+	{
+		this.m_CardDeck = new List<CardData>(52 * deckCount);
+		while (deckCount > 0)
+		{
+			this.AddDeck();
+			deckCount--;
+		}
+		this.RandomiseDeck();
+	}
+
+	public CardData GetCard()
+	{
+		CardData result = this.m_CardDeck[0];
+		this.m_CardDeck.RemoveAt(0);
+		return result;
+	}
+
+	private void AddDeck()
+	{
+		CardData.Suit[] array = (CardData.Suit[])Enum.GetValues(typeof(CardData.Suit));
+		CardData.Rank[] array2 = (CardData.Rank[])Enum.GetValues(typeof(CardData.Rank));
+		for (int i = 0; i < array2.Length; i++)
+		{
+			for (int j = 0; j < array.Length; j++)
+			{
+				this.m_CardDeck.Add(new CardData(array[j], array2[i]));
+			}
+		}
+	}
+
+	private void RandomiseDeck()
+	{
+		this.FisherYatesCardDeckShuffle(this.m_CardDeck);
+	}
+
+	private List<CardData> FisherYatesCardDeckShuffle(List<CardData> aList)
+	{
+		System.Random random = new System.Random();
+		int count = aList.Count;
+		for (int i = 0; i < count; i++)
+		{
+			int index = i + (int)(random.NextDouble() * (double)(count - i));
+			CardData value = aList[index];
+			aList[index] = aList[i];
+			aList[i] = value;
+		}
+		return aList;
+	}
+
+	public GameObject GetCardObj(CardData.Suit suit, CardData.Rank rank)
+	{
+		return CardDeck.m_CardObjData[suit][rank];
+	}
+
+	[SerializeField]
+	private bool m_ForceSplit;
+
+	[SerializeField]
+	private bool m_ForceBJ;
+
+	[SerializeField]
+	private bool m_NotShufflue;
+
+	[SerializeField]
+	[Header("右手に持たせたときのオフセット値")]
+	private float m_RightOffset;
+
+	[SerializeField]
+	[Header("表向きの時のカードのワールド角度")]
+	private Vector3 m_UpAngle = Vector3.up * 90f;
+
+	[SerializeField]
+	[Header("裏向きの時のカードのワールド角度")]
+	private Vector3 m_DownAngle = Vector3.up * 90f;
+
+	private List<CardData> m_CardDeck = new List<CardData>();
+
+	private static Dictionary<CardData.Suit, Dictionary<CardData.Rank, GameObject>> m_CardObjData;
+}

+ 301 - 0
Assembly-CSharp/CasinoDataMgr.cs

@@ -0,0 +1,301 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using UnityEngine;
+
+public class CasinoDataMgr
+{
+	public static CasinoDataMgr Instance
+	{
+		get
+		{
+			return CasinoDataMgr.m_Instance;
+		}
+	}
+
+	public Facility CurrentCasino
+	{
+		get
+		{
+			return this.m_SelectCasino;
+		}
+	}
+
+	public Maid DealerMaid
+	{
+		get
+		{
+			return (!this.m_SelectCasino || !this.m_FacilityDealerPair.ContainsKey(this.m_SelectCasino)) ? null : this.m_FacilityDealerPair[this.m_SelectCasino].Maid;
+		}
+	}
+
+	public int CasinoID
+	{
+		get
+		{
+			return FacilityDataTable.GetFacilityTypeID("カジノ");
+		}
+	}
+
+	public int UpwardCasinoID
+	{
+		get
+		{
+			return FacilityDataTable.GetFacilityTypeID("高級カジノ");
+		}
+	}
+
+	private void WriteDealerData(BinaryWriter bw, bool is_upward)
+	{
+		Facility casinoFacility = this.GetCasinoFacility(is_upward);
+		bool flag = casinoFacility != null;
+		string value = (!is_upward) ? "Low" : "High";
+		bw.Write(value);
+		if (flag)
+		{
+			if (!this.m_FacilityDealerPair.ContainsKey(casinoFacility))
+			{
+				this.m_FacilityDealerPair.Add(casinoFacility, new DealerMaid());
+			}
+			this.m_FacilityDealerPair[casinoFacility].Serialize(bw);
+		}
+	}
+
+	private void ReadDealerData(BinaryReader br, bool is_upward)
+	{
+		string text = br.ReadString();
+		bool condition = (!is_upward) ? (text == "Low") : (text == "High");
+		string message = string.Format((!is_upward) ? "下位施設の情報を読み込もうとしましたが、文字「{0}」が検出されました" : "上位", text[0]);
+		NDebug.Assert(condition, message);
+		Facility casinoFacility = this.GetCasinoFacility(is_upward);
+		bool flag = casinoFacility != null;
+		if (flag)
+		{
+			this.m_FacilityDealerPair.Add(casinoFacility, new DealerMaid());
+			this.m_FacilityDealerPair[casinoFacility].Deserialize(br);
+		}
+	}
+
+	public Facility GetCasinoFacility(bool is_upward = false)
+	{
+		Facility result = null;
+		Facility[] array;
+		bool flag = (!is_upward) ? GameMain.Instance.FacilityMgr.IsExistTypeFacility(this.CasinoID, out array) : GameMain.Instance.FacilityMgr.IsExistTypeFacility(this.UpwardCasinoID, out array);
+		if (flag)
+		{
+			result = array[0];
+		}
+		return result;
+	}
+
+	public void InitDealerMaid()
+	{
+		this.m_FacilityDealerPair[this.m_SelectCasino].Init();
+	}
+
+	public void SetDealerMaid(Maid maid)
+	{
+		this.m_FacilityDealerPair[this.m_SelectCasino].SetDealerMaid(maid);
+	}
+
+	public void Serialize(BinaryWriter bw)
+	{
+		bw.Write("COM3D2_CASINO");
+		bw.Write("Ver:" + 1.1f);
+		this.WriteDealerData(bw, false);
+		this.WriteDealerData(bw, true);
+		bw.Write("COM3D2_CASINOSHOP_ID");
+		foreach (CasinoShopItem casinoShopItem in this.m_CasinoShopData.Values)
+		{
+			bw.Write(casinoShopItem.ID.ToString());
+		}
+		bw.Write("COM3D2_CASINOSHOP_ID_END");
+		foreach (CasinoShopItem casinoShopItem2 in this.m_CasinoShopData.Values)
+		{
+			casinoShopItem2.Serialize(bw);
+		}
+	}
+
+	public void Deserialize(BinaryReader br, int save_version)
+	{
+		this.m_FacilityDealerPair.Clear();
+		foreach (CasinoShopItem casinoShopItem in this.m_CasinoShopData.Values)
+		{
+			casinoShopItem.Recet();
+		}
+		if (save_version < 210)
+		{
+			return;
+		}
+		string text = br.ReadString();
+		float num = float.Parse(br.ReadString().Split(new char[]
+		{
+			':'
+		})[1]);
+		this.ReadDealerData(br, false);
+		this.ReadDealerData(br, true);
+		if (num >= 1.1f)
+		{
+			List<int> list = new List<int>();
+			string text2 = br.ReadString();
+			string text3 = br.ReadString();
+			while (text3 != "COM3D2_CASINOSHOP_ID_END")
+			{
+				list.Add(int.Parse(text3));
+				text3 = br.ReadString();
+			}
+			foreach (int key in list)
+			{
+				if (this.m_CasinoShopData.ContainsKey(key))
+				{
+					this.m_CasinoShopData[key].Deserialize(br);
+				}
+				else
+				{
+					CasinoShopItem casinoShopItem2 = new CasinoShopItem();
+					casinoShopItem2.Deserialize(br);
+				}
+			}
+		}
+		else
+		{
+			foreach (CasinoShopItem casinoShopItem3 in this.m_CasinoShopData.Values)
+			{
+				casinoShopItem3.Deserialize(br);
+			}
+		}
+	}
+
+	public void CasinoSelect(bool is_upward)
+	{
+		this.m_SelectCasino = this.GetCasinoFacility(is_upward);
+		if (this.m_SelectCasino == null)
+		{
+			Debug.LogError("該当するカジノ施設が見つかりませんでした");
+		}
+		else if (!this.m_FacilityDealerPair.ContainsKey(this.m_SelectCasino))
+		{
+			this.m_FacilityDealerPair.Add(this.m_SelectCasino, new DealerMaid());
+		}
+	}
+
+	public void InitShopData()
+	{
+		if (this.m_CasinoShopData.Count > 0)
+		{
+			return;
+		}
+		HashSet<int> enabled_id_list = new HashSet<int>();
+		Action<string> action = delegate(string file_name)
+		{
+			file_name += ".nei";
+			if (!GameUty.FileSystem.IsExistentFile(file_name))
+			{
+				return;
+			}
+			using (AFileBase afileBase2 = GameUty.FileSystem.FileOpen(file_name))
+			{
+				using (CsvParser csvParser2 = new CsvParser())
+				{
+					bool condition2 = csvParser2.Open(afileBase2);
+					NDebug.Assert(condition2, file_name + "\nopen failed.");
+					for (int k = 1; k < csvParser2.max_cell_y; k++)
+					{
+						if (csvParser2.IsCellToExistData(0, k))
+						{
+							int cellAsInteger2 = csvParser2.GetCellAsInteger(0, k);
+							if (!enabled_id_list.Contains(cellAsInteger2))
+							{
+								enabled_id_list.Add(cellAsInteger2);
+							}
+						}
+					}
+				}
+			}
+		};
+		action("casinoshop_enable_id");
+		for (int i = 0; i < GameUty.PathList.Count; i++)
+		{
+			action("casinoshop_enable_id_" + GameUty.PathList[i]);
+		}
+		using (AFileBase afileBase = GameUty.FileSystem.FileOpen("casinoshop_data.nei"))
+		{
+			using (CsvParser csvParser = new CsvParser())
+			{
+				bool condition = csvParser.Open(afileBase);
+				NDebug.Assert(condition, "casinoshop_data.nei]");
+				for (int j = 1; j < csvParser.max_cell_y; j++)
+				{
+					if (csvParser.IsCellToExistData(0, j))
+					{
+						int cellAsInteger = csvParser.GetCellAsInteger(0, j);
+						if (enabled_id_list.Contains(cellAsInteger))
+						{
+							if (!this.m_CasinoShopData.ContainsKey(cellAsInteger))
+							{
+								this.m_CasinoShopData.Add(cellAsInteger, new CasinoShopItem(csvParser, j));
+							}
+							CasinoShopItem casinoShopItem = this.m_CasinoShopData[cellAsInteger];
+							if (!this.m_CategoryItemData.ContainsKey(casinoShopItem.MyCategory))
+							{
+								this.m_CategoryItemData.Add(casinoShopItem.MyCategory, new List<CasinoShopItem>());
+							}
+							if (!this.m_CategoryItemData[casinoShopItem.MyCategory].Contains(casinoShopItem))
+							{
+								this.m_CategoryItemData[casinoShopItem.MyCategory].Add(casinoShopItem);
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	public List<CasinoShopItem> GetShopItem()
+	{
+		return this.m_CasinoShopData.Values.ToList<CasinoShopItem>();
+	}
+
+	public List<CasinoShopItem> GetShopItem(CasinoShopItem.Category category)
+	{
+		return this.m_CategoryItemData[category];
+	}
+
+	public void AddTotalCoin(int add_value)
+	{
+		if (add_value < 0)
+		{
+			return;
+		}
+		GameMain.Instance.CharacterMgr.status.AddFlag("コイン入手総額", add_value);
+		if (GameMain.Instance.CharacterMgr.status.GetFlag("コイン入手総額") >= 10000)
+		{
+			GameMain.Instance.CharacterMgr.status.AddHaveTrophy(1120);
+		}
+	}
+
+	private const int m_CheckMiscVer = 210;
+
+	private const string m_SaveHeader = "COM3D2_CASINO";
+
+	private const float m_SaveVer = 1.1f;
+
+	private const string m_FacilityName = "カジノ";
+
+	private const string m_UpwardFacilityName = "高級カジノ";
+
+	public const int GetTrophyCoin = 10000;
+
+	private static CasinoDataMgr m_Instance = new CasinoDataMgr();
+
+	private Dictionary<Facility, DealerMaid> m_FacilityDealerPair = new Dictionary<Facility, DealerMaid>();
+
+	private Facility m_SelectCasino;
+
+	public bool IsChangeCostume;
+
+	private Dictionary<int, CasinoShopItem> m_CasinoShopData = new Dictionary<int, CasinoShopItem>();
+
+	private Dictionary<CasinoShopItem.Category, List<CasinoShopItem>> m_CategoryItemData = new Dictionary<CasinoShopItem.Category, List<CasinoShopItem>>();
+}

+ 115 - 0
Assembly-CSharp/CasinoItemUI.cs

@@ -0,0 +1,115 @@
+using System;
+using UnityEngine;
+using wf;
+
+public class CasinoItemUI : MonoBehaviour
+{
+	private void IconHoverOver()
+	{
+		KasaSceneMgr<SceneCasinoShop>.Instance.ShowItenInfo(this.m_ItemData, base.transform);
+	}
+
+	private void IconHoverOut()
+	{
+		KasaSceneMgr<SceneCasinoShop>.Instance.HideItemInfo();
+	}
+
+	private void IconClick()
+	{
+		if (KasaSceneMgr<SceneCasinoShop>.Instance.SelectTrywear != this.m_ItemData)
+		{
+			KasaSceneMgr<SceneCasinoShop>.Instance.SetTrywearItem(this.m_ItemData);
+		}
+		else
+		{
+			KasaSceneMgr<SceneCasinoShop>.Instance.RecetTrywearItem();
+		}
+	}
+
+	private void ItemBuy()
+	{
+		if (!this.m_ItemData.IsCanBuy)
+		{
+			GameMain.Instance.SysDlg.Show("カジノコインが不足しています。", SystemDialog.TYPE.OK, null, null);
+			return;
+		}
+		string f_strMsg = this.m_ItemData.Name + "\nを購入しますか?\nカジノコイン -" + Utility.ConvertMoneyText(this.m_ItemData.Price) + "枚";
+		GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK_CANCEL, delegate
+		{
+			KasaSceneMgr<SceneCasinoShop>.Instance.ItemBuy(this.m_ItemData);
+		}, null);
+	}
+
+	public void Init(CasinoShopItem item_data)
+	{
+		this.m_ItemData = item_data;
+		this.m_NameLabel.text = item_data.Name;
+		this.m_PriceLabel.text = Utility.ConvertMoneyText(item_data.Price);
+		this.m_ItemIcon = this.m_ItemIconObj.GetComponent<UI2DSprite>();
+		this.m_IconButton = this.m_ItemIconObj.GetComponent<UIButton>();
+		this.m_IconButton.enabled = item_data.IsCategoryCostume;
+		this.m_IconEvent = this.m_ItemIconObj.GetComponent<UIEventTrigger>();
+		this.m_IconFrame = this.m_ItemIconObj.transform.GetChild(0).gameObject;
+		this.m_ItemIcon.sprite2D = item_data.Icon;
+		EventDelegate.Add(this.m_IconEvent.onHoverOut, new EventDelegate.Callback(this.IconHoverOut));
+		EventDelegate.Add(this.m_IconEvent.onHoverOver, new EventDelegate.Callback(this.IconHoverOver));
+		if (this.m_ItemData.IsCategoryCostume)
+		{
+			EventDelegate.Add(this.m_IconButton.onClick, new EventDelegate.Callback(this.IconClick));
+		}
+		this.m_BuyButton = this.m_BuyButtonObj.GetComponent<UIButton>();
+		this.m_BuyButtonIcon = this.m_BuyButtonObj.GetComponent<UISprite>();
+		EventDelegate.Add(this.m_BuyButton.onClick, new EventDelegate.Callback(this.ItemBuy));
+		this.UIUpdate();
+	}
+
+	public void UIUpdate()
+	{
+		this.m_BuyButton.isEnabled = !this.m_ItemData.IsSoldOut;
+		this.m_PriceLabel.color = ((!this.m_ItemData.IsCanBuy && !this.m_ItemData.IsSoldOut) ? this.m_CannotBuyCol : this.m_CanBuyCol);
+		this.m_BuyButtonIcon.spriteName = ((!this.m_ItemData.IsSoldOut) ? this.m_BuySprite : this.m_SoldSprite);
+	}
+
+	public void SwitchFrame()
+	{
+		this.m_IconFrame.SetActive(KasaSceneMgr<SceneCasinoShop>.Instance.SelectTrywear == this.m_ItemData);
+	}
+
+	private CasinoShopItem m_ItemData;
+
+	[SerializeField]
+	private UILabel m_NameLabel;
+
+	[SerializeField]
+	private UILabel m_PriceLabel;
+
+	[SerializeField]
+	private Color m_CanBuyCol = Color.white;
+
+	[SerializeField]
+	private Color m_CannotBuyCol = Color.red;
+
+	[SerializeField]
+	private GameObject m_BuyButtonObj;
+
+	[SerializeField]
+	private GameObject m_ItemIconObj;
+
+	[SerializeField]
+	private string m_BuySprite;
+
+	[SerializeField]
+	private string m_SoldSprite;
+
+	private UIButton m_IconButton;
+
+	private UI2DSprite m_ItemIcon;
+
+	private UIEventTrigger m_IconEvent;
+
+	private GameObject m_IconFrame;
+
+	private UIButton m_BuyButton;
+
+	private UISprite m_BuyButtonIcon;
+}

+ 287 - 0
Assembly-CSharp/CasinoShopItem.cs

@@ -0,0 +1,287 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using PlayerStatus;
+using UnityEngine;
+
+public class CasinoShopItem
+{
+	public CasinoShopItem(CsvParser csv, int cy)
+	{
+		for (int i = 0; i < csv.max_cell_x; i++)
+		{
+			switch (i)
+			{
+			case 0:
+				this.ID = csv.GetCellAsInteger(i, cy);
+				break;
+			case 1:
+				this.Name = csv.GetCellAsString(i, cy);
+				break;
+			case 2:
+				this.Price = csv.GetCellAsInteger(i, cy);
+				break;
+			case 3:
+				this.MyCategory = ((!(csv.GetCellAsString(i, cy) == "衣装")) ? CasinoShopItem.Category.FacilityItem : CasinoShopItem.Category.Costume);
+				break;
+			case 4:
+			{
+				string text = csv.GetCellAsString(i, cy);
+				if (text.IndexOf(".tex") < 0)
+				{
+					text += ".tex";
+				}
+				if (!GameUty.FileSystem.IsExistentFile(text))
+				{
+					Debug.LogError("アイコンファイル[" + text + "]が見つかりませんでした");
+				}
+				Texture2D texture2D = ImportCM.CreateTexture(text);
+				this.Icon = Sprite.Create(texture2D, new Rect(0f, 0f, (float)texture2D.width, (float)texture2D.height), Vector2.one * 0.5f);
+				break;
+			}
+			case 5:
+				this.Document = csv.GetCellAsString(i, cy);
+				break;
+			}
+		}
+		if (this.IsCategoryCostume)
+		{
+			this.ReadMenuFile();
+		}
+		else
+		{
+			this.ReadFacilityID();
+		}
+	}
+
+	public CasinoShopItem()
+	{
+	}
+
+	public bool IsSoldOut
+	{
+		get
+		{
+			return this.m_IsSoldOut;
+		}
+	}
+
+	public bool IsCategoryCostume
+	{
+		get
+		{
+			return this.MyCategory == CasinoShopItem.Category.Costume;
+		}
+	}
+
+	public bool IsCanBuy
+	{
+		get
+		{
+			return (long)this.Price <= GameMain.Instance.CharacterMgr.status.casinoCoin;
+		}
+	}
+
+	public void ItemBuy()
+	{
+		this.m_IsSoldOut = true;
+		CasinoShopItem.Category myCategory = this.MyCategory;
+		if (myCategory != CasinoShopItem.Category.Costume)
+		{
+			if (myCategory == CasinoShopItem.Category.FacilityItem)
+			{
+				FacilityManager facilityMgr = GameMain.Instance.FacilityMgr;
+				facilityMgr.SetHavePowerUpMaterial(this.m_FacilytyItemID, true);
+			}
+		}
+		else
+		{
+			Status status = GameMain.Instance.CharacterMgr.status;
+			foreach (List<CasinoShopItem.MenuData> list in this.m_WearDataList)
+			{
+				foreach (CasinoShopItem.MenuData menuData in list)
+				{
+					status.AddHavePartsItem(menuData.FileName);
+				}
+			}
+		}
+	}
+
+	public void Serialize(BinaryWriter bw)
+	{
+		bw.Write(this.m_IsSoldOut);
+	}
+
+	public void Deserialize(BinaryReader br)
+	{
+		this.m_IsSoldOut = br.ReadBoolean();
+	}
+
+	public void Recet()
+	{
+		this.m_IsSoldOut = false;
+	}
+
+	private void ReadMenuFile()
+	{
+		Action<string[], List<CasinoShopItem.MenuData>> action = delegate(string[] file_array, List<CasinoShopItem.MenuData> list)
+		{
+			foreach (string text in file_array)
+			{
+				if (text.IndexOf(".menu") < 0)
+				{
+					this.ReadMenuDetail(text + ".menu", list);
+				}
+				else
+				{
+					this.ReadMenuDetail(text, list);
+				}
+			}
+		};
+		using (AFileBase afileBase = GameUty.FileSystem.FileOpen("casinoshop_costume_data.nei"))
+		{
+			using (CsvParser csvParser = new CsvParser())
+			{
+				bool condition = csvParser.Open(afileBase);
+				NDebug.Assert(condition, "casinoshop_costume_data.nei]");
+				for (int i = 1; i < csvParser.max_cell_y; i++)
+				{
+					if (csvParser.IsCellToExistData(0, i) && csvParser.GetCellAsInteger(0, i) == this.ID)
+					{
+						for (int j = 0; j < csvParser.max_cell_x; j++)
+						{
+							if (csvParser.IsCellToExistData(j, i))
+							{
+								switch (j)
+								{
+								case 0:
+								case 1:
+									break;
+								case 2:
+									this.m_WearMask = (TBody.MaskMode)Enum.Parse(typeof(TBody.MaskMode), csvParser.GetCellAsString(j, i));
+									break;
+								case 3:
+								{
+									string[] arg = csvParser.GetCellAsString(j, i).Split(new char[]
+									{
+										'\n'
+									});
+									action(arg, this.m_TrywearData);
+									break;
+								}
+								default:
+								{
+									this.m_WearDataList.Add(new List<CasinoShopItem.MenuData>());
+									string[] arg2 = csvParser.GetCellAsString(j, i).Split(new char[]
+									{
+										'\n'
+									});
+									action(arg2, this.m_WearDataList.Last<List<CasinoShopItem.MenuData>>());
+									break;
+								}
+								}
+							}
+						}
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	private void ReadMenuDetail(string menu_file, List<CasinoShopItem.MenuData> menu_list)
+	{
+		byte[] buffer = null;
+		using (AFileBase afileBase = GameUty.FileSystem.FileOpen(menu_file))
+		{
+			NDebug.Assert(afileBase.IsValid(), menu_file + "\nnot file open.");
+			buffer = afileBase.ReadAll();
+		}
+		BinaryReader binaryReader = new BinaryReader(new MemoryStream(buffer), Encoding.UTF8);
+		string text = binaryReader.ReadString();
+		NDebug.Assert(text == "CM3D2_MENU", "ProcScriptBin 例外 : ヘッダーファイルが不正です。" + text);
+		int num = binaryReader.ReadInt32();
+		string text2 = binaryReader.ReadString();
+		string text3 = binaryReader.ReadString();
+		string mpn = binaryReader.ReadString();
+		binaryReader.Close();
+		buffer = null;
+		menu_list.Add(new CasinoShopItem.MenuData(mpn, menu_file));
+	}
+
+	public void TryWear(Maid maid)
+	{
+		if (!this.IsCategoryCostume)
+		{
+			return;
+		}
+		foreach (CasinoShopItem.MenuData menuData in this.m_TrywearData)
+		{
+			maid.SetProp(menuData.Mpn, menuData.FileName, 0, false, false);
+		}
+		maid.body0.SetMaskMode(this.m_WearMask);
+	}
+
+	private void ReadFacilityID()
+	{
+		using (AFileBase afileBase = GameUty.FileSystem.FileOpen("casinoshop_facilityitem_data.nei"))
+		{
+			using (CsvParser csvParser = new CsvParser())
+			{
+				bool condition = csvParser.Open(afileBase);
+				NDebug.Assert(condition, "casinoshop_facility_data.nei]");
+				for (int i = 1; i < csvParser.max_cell_y; i++)
+				{
+					if (csvParser.IsCellToExistData(0, i) && csvParser.GetCellAsInteger(0, i) == this.ID)
+					{
+						this.m_FacilytyItemID = csvParser.GetCellAsInteger(2, i);
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	public readonly int ID;
+
+	public readonly string Name;
+
+	public readonly int Price;
+
+	public readonly Sprite Icon;
+
+	public readonly string Document;
+
+	public readonly CasinoShopItem.Category MyCategory;
+
+	private bool m_IsSoldOut;
+
+	private List<CasinoShopItem.MenuData> m_TrywearData = new List<CasinoShopItem.MenuData>();
+
+	private TBody.MaskMode m_WearMask;
+
+	private List<List<CasinoShopItem.MenuData>> m_WearDataList = new List<List<CasinoShopItem.MenuData>>();
+
+	private int m_FacilytyItemID = -1;
+
+	public enum Category
+	{
+		Costume,
+		FacilityItem
+	}
+
+	private class MenuData
+	{
+		public MenuData(string mpn, string file_name)
+		{
+			this.Mpn = mpn;
+			this.FileName = file_name;
+		}
+
+		public readonly string Mpn;
+
+		public readonly string FileName;
+	}
+}

+ 112 - 0
Assembly-CSharp/ChallengeResult.cs

@@ -0,0 +1,112 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+public class ChallengeResult : Result_Display
+{
+	private void Awake()
+	{
+		this.m_RankUIPanel = this.m_RankUI.GetComponent<UIPanel>();
+		this.m_RankUIPanel.alpha = 0f;
+		this.m_RankValueEnd = this.m_RankUI.localPosition;
+		this.m_RankUI.localPosition += Vector3.down * this.m_RankUIPosDawn;
+		this.m_RankValueStart = this.m_RankUI.localPosition;
+		base.Initialize();
+		base.StartCoroutine(this.UISlideIn());
+	}
+
+	protected override void Update()
+	{
+		base.Update();
+	}
+
+	protected override void UIInit(Transform child)
+	{
+		UISprite component = child.GetComponent<UISprite>();
+		Vector3 localPosition = child.localPosition;
+		localPosition.x = UI_ScreenFitBase.PointToScreenPos(Vector3.right * (float)UICamera.ScreenWidth).x;
+		if (component)
+		{
+			localPosition.x += (float)(component.width / 2);
+		}
+		this.m_GroupEnd.Add(child.localPosition);
+		this.m_GroupStart.Add(localPosition);
+		child.localPosition = localPosition;
+	}
+
+	private IEnumerator UISlideIn()
+	{
+		float timer = 0f;
+		int count = 0;
+		GameMain.Instance.SoundMgr.PlaySe(this.m_SlideSEName, false);
+		for (;;)
+		{
+			timer += base.m_MydeltaTime;
+			this.m_ResultGroup.GetChild(count).localPosition = Vector3.Lerp(this.m_GroupStart[count], this.m_GroupEnd[count], base.SinRate01(timer, this.m_UISlide));
+			if (timer > this.m_UISlide)
+			{
+				count++;
+				timer = 0f;
+				if (count == this.m_ResultGroup.childCount)
+				{
+					break;
+				}
+				yield return new WaitForSeconds(this.m_UISlideRug / (float)this.m_TimeSpeed);
+				GameMain.Instance.SoundMgr.PlaySe(this.m_SlideSEName, false);
+			}
+			yield return null;
+		}
+		yield return new WaitForSeconds(this.m_RankWait / (float)this.m_TimeSpeed);
+		base.StartCoroutine(this.RankFadeIn());
+		yield break;
+		yield break;
+	}
+
+	private IEnumerator RankFadeIn()
+	{
+		float timer = 0f;
+		for (;;)
+		{
+			timer += base.m_MydeltaTime;
+			this.m_RankUIPanel.alpha = base.SinRate01(timer, this.m_RankFade);
+			this.m_RankUI.localPosition = Vector3.Lerp(this.m_RankValueStart, this.m_RankValueEnd, base.SinRate01(timer, this.m_RankFade));
+			if (timer > this.m_RankFade)
+			{
+				break;
+			}
+			yield return null;
+		}
+		this.m_ButtonUI.SetActive(true);
+		yield break;
+		yield break;
+	}
+
+	[SerializeField]
+	[Header("UIのスライド時間")]
+	private float m_UISlide = 0.15f;
+
+	[SerializeField]
+	[Header("UI表示終了後の待機時間")]
+	private float m_UISlideRug = 0.0625f;
+
+	[SerializeField]
+	[Header("評定表示UIのフェードイン時間")]
+	private float m_RankFade = 0.5f;
+
+	[SerializeField]
+	[Header("評定表示UIの表示開始までの待機時間")]
+	private float m_RankWait = 0.25f;
+
+	[SerializeField]
+	private float m_RankUIPosDawn = 1f;
+
+	[SerializeField]
+	[Header("評定表示UI")]
+	private Transform m_RankUI;
+
+	private UIPanel m_RankUIPanel;
+
+	private Vector3 m_RankValueStart;
+
+	private Vector3 m_RankValueEnd;
+}

+ 156 - 0
Assembly-CSharp/CharaAppealData.cs

@@ -0,0 +1,156 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class CharaAppealData
+{
+	public bool IsCanApplel
+	{
+		get
+		{
+			return !this.IsAppealNow && !this.IsAppealCoolNow && this.m_GaugeValue >= 200;
+		}
+	}
+
+	public GameObject AppealCutInpanel
+	{
+		get
+		{
+			return this.m_CutInPanel;
+		}
+		set
+		{
+			if (this.m_CutInPanel == value)
+			{
+				return;
+			}
+			this.m_CutInPanel = value;
+			if (this.AppealCutInEffect)
+			{
+				this.AppealCutInEffect.transform.SetParent(this.m_CutInPanel.transform.parent, false);
+			}
+		}
+	}
+
+	public int CutInEffectOrder
+	{
+		get
+		{
+			return this.m_EffectOrder;
+		}
+		set
+		{
+			if (this.m_EffectOrder == value)
+			{
+				return;
+			}
+			this.m_EffectOrder = value;
+			for (int i = 0; i < this.EffectRender.Count; i++)
+			{
+				this.EffectRender[i].sortingOrder = this.m_EffectRenderOrder[i] + this.m_EffectOrder;
+			}
+		}
+	}
+
+	public int GaugeCount
+	{
+		get
+		{
+			return this.AppealValue / 200;
+		}
+	}
+
+	public int AppealGauge
+	{
+		get
+		{
+			return this.m_GaugeValue;
+		}
+		set
+		{
+			if (this.m_GaugeValue == value)
+			{
+				return;
+			}
+			this.m_GaugeValue = value;
+			for (int i = 0; i < this.AllGaugeList.Count; i++)
+			{
+				this.AllGaugeList[i].fillAmount = (float)(this.m_GaugeValue - i * 200) / 200f;
+				if (this.AllGaugeList[i].fillAmount <= 0f)
+				{
+					break;
+				}
+			}
+		}
+	}
+
+	public int AppealValue;
+
+	public int AppealMax;
+
+	public bool IsAppealNow;
+
+	public bool IsAppealCoolNow;
+
+	private GameObject m_CutInPanel;
+
+	private int m_EffectOrder;
+
+	public List<ParticleSystem> AllCutInEffect = new List<ParticleSystem>();
+
+	public List<ParticleSystemRenderer> EffectRender = new List<ParticleSystemRenderer>();
+
+	public List<int> m_EffectRenderOrder = new List<int>();
+
+	public UI2DSprite AppealCutIn;
+
+	public UI2DSprite ReversalCutIn;
+
+	public UIBasicSprite CoolTimeGauge;
+
+	public UIBasicSprite AppelCoolFlash;
+
+	public bool IsCutInNow;
+
+	public bool IsRevarsalNow;
+
+	public GameObject AppealGaugeEffect;
+
+	public GameObject AppealCutInEffect;
+
+	public GameObject ReversalCutInEffect;
+
+	public Appeal_Mgr.CutInMove CutInType;
+
+	public Transform GaugeGroup;
+
+	public List<UISprite> AllGaugeList = new List<UISprite>();
+
+	private int m_GaugeValue;
+
+	public UIBasicSprite AppealFlashGauge;
+
+	public AudioSource AudioSE;
+
+	public string strPersonalVoice1;
+
+	public string strPersonalVoice2;
+
+	public string strJobVoice;
+
+	public string strReversalVoice;
+
+	public GameObject ReversalObj;
+
+	public UIBasicSprite TimerGauge;
+
+	public GameObject SweatEffect;
+
+	public GameObject AuraEffect;
+
+	public int AppealCombo;
+
+	public AudioSourceMgr AudioVoice;
+
+	public AudioSourceMgr ReversalVoice;
+}

+ 92 - 0
Assembly-CSharp/CharaDumper.cs

@@ -0,0 +1,92 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+[ExecuteInEditMode]
+public class CharaDumper : MonoBehaviour
+{
+	private void Awake()
+	{
+		if (!Application.isPlaying)
+		{
+			return;
+		}
+		GameObject gameObject = GameObject.Find("_DanceMain_");
+		NDebug.Assert(gameObject != null, "_DanceMain_ が見つかりませんでした。");
+		this.m_DanceMain = gameObject.GetComponent<DanceMain>();
+		NDebug.Assert(this.m_DanceMain != null, "DanceMain コンポーネントが見つかりませんでした。");
+		this.m_nMaidNo = this.m_CharaNo - 1;
+		int count = this.m_DanceMain.m_listDummyAnimChara.Count;
+		NDebug.Assert(this.m_nMaidNo >= 0 && this.m_nMaidNo < count, string.Concat(new object[]
+		{
+			"キャラクター番号:",
+			this.m_CharaNo,
+			"は不正です。キャラクター番号は1~",
+			count,
+			"の間でなければいけません"
+		}));
+		this.m_goDummyBody = this.m_DanceMain.m_listDummyAnimChara[this.m_nMaidNo];
+	}
+
+	private void Start()
+	{
+		if (!Application.isPlaying)
+		{
+			return;
+		}
+		this.m_bDebug = this.m_DanceMain.m_boDebugDummyBody;
+		if (!this.m_bDebug)
+		{
+			base.StartCoroutine(this.CoCharaLoadWait());
+		}
+	}
+
+	private void OnDestroy()
+	{
+		if (this.m_trMaid)
+		{
+			this.m_trMaid.position = Vector3.zero;
+		}
+	}
+
+	private IEnumerator CoCharaLoadWait()
+	{
+		Maid maid = null;
+		while (maid == null)
+		{
+			maid = GameMain.Instance.CharacterMgr.GetMaid(this.m_nMaidNo);
+			yield return null;
+		}
+		this.m_trMaid = maid.transform;
+		yield break;
+	}
+
+	private void Update()
+	{
+		if (this.m_bDebug || !Application.isPlaying)
+		{
+			if (this.m_goDummyBody != null)
+			{
+				this.m_goDummyBody.transform.position = base.transform.position;
+			}
+		}
+		else if (this.m_trMaid != null)
+		{
+			this.m_trMaid.position = base.transform.position;
+		}
+	}
+
+	[SerializeField]
+	[Header("移動させるキャラクターの番号")]
+	private int m_CharaNo;
+
+	private GameObject m_goDummyBody;
+
+	private DanceMain m_DanceMain;
+
+	private bool m_bDebug = true;
+
+	private int m_nMaidNo;
+
+	private Transform m_trMaid;
+}

+ 16 - 0
Assembly-CSharp/CharaSelectStatusMgr.cs

@@ -0,0 +1,16 @@
+using System;
+using UnityEngine;
+
+public class CharaSelectStatusMgr : StatusMgr
+{
+	public override void Init()
+	{
+		this.m_goPanel = this.statusCtrl.gameObject;
+		this.m_ctrl = this.statusCtrl;
+		this.m_ctrl.Init(this, this.m_goPanel);
+		this.m_goPanel.SetActive(false);
+	}
+
+	[SerializeField]
+	public StatusCtrl statusCtrl;
+}

+ 8 - 0
Assembly-CSharp/CharaSelectStatusMgrForChuBLip.cs

@@ -0,0 +1,8 @@
+using System;
+
+public class CharaSelectStatusMgrForChuBLip : StatusMgrForChuBLip
+{
+	public override void Init()
+	{
+	}
+}

File diff suppressed because it is too large
+ 1529 - 0
Assembly-CSharp/CharacterMgr.cs


+ 715 - 0
Assembly-CSharp/CharacterSelectMain.cs

@@ -0,0 +1,715 @@
+using System;
+using System.Collections.Generic;
+using com.workman.cm3d2.scene.dailyEtc;
+using MaidStatus;
+using PlayerStatus;
+using Schedule;
+using UnityEngine;
+
+public class CharacterSelectMain : WfScreenChildren
+{
+	public static bool compatibilityMode
+	{
+		get
+		{
+			return DailyMgr.IsLegacy;
+		}
+	}
+
+	public override void Awake()
+	{
+		base.Awake();
+		this.explanatory_label_ = UTY.GetChildObject(base.root_obj, "ExplanatoryText/Value", false).GetComponent<UILabel>();
+		GameObject childObject = UTY.GetChildObject(base.root_obj, "ButtonParent/Tower/Grid", false);
+		this.button_dic_.Add("全選択", UTY.GetChildObject(childObject, "全選択", false).GetComponent<UIButton>());
+		EventDelegate.Add(this.button_dic_["全選択"].onClick, new EventDelegate.Callback(this.OnSelectAllChara));
+		this.button_dic_.Add("全解除", UTY.GetChildObject(childObject, "全解除", false).GetComponent<UIButton>());
+		EventDelegate.Add(this.button_dic_["全解除"].onClick, new EventDelegate.Callback(this.OnSelectAllReleaseChara));
+		this.button_dic_.Add("OK", UTY.GetChildObject(base.root_obj, "ButtonParent/OK", false).GetComponent<UIButton>());
+		this.button_dic_.Add("Cancel", UTY.GetChildObject(base.root_obj, "ButtonParent/Cancel", false).GetComponent<UIButton>());
+		this.button_dic_["Cancel"].gameObject.SetActive(false);
+		foreach (KeyValuePair<string, UIButton> keyValuePair in this.button_dic_)
+		{
+			EventDelegate.Add(keyValuePair.Value.onClick, new EventDelegate.Callback(this.OnClickButton));
+		}
+		this.chara_select_mgr_ = UTY.GetChildObject(base.root_obj, "CharacterSelectPanel", false).GetComponent<CharacterSelectManager>();
+	}
+
+	protected override void OnCall()
+	{
+		this.auto_select_ = false;
+		this.wait_count_ = 0;
+		this.loaded_check_maid_.Clear();
+		this.select_maid_ = null;
+		this.chara_mgr_ = GameMain.Instance.CharacterMgr;
+		this.scene_chara_select_ = (base.parent_mgr as SceneCharacterSelect);
+		NDebug.AssertNull(this.scene_chara_select_);
+		this.button_dic_["全選択"].gameObject.SetActive(false);
+		this.button_dic_["全解除"].gameObject.SetActive(false);
+		if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Additional)
+		{
+			this.OnCallAdditionalType();
+			return;
+		}
+		for (int i = 0; i < this.chara_mgr_.GetMaidCount(); i++)
+		{
+			if (this.chara_mgr_.GetMaid(i) != null)
+			{
+				this.chara_mgr_.Deactivate(i, false);
+			}
+		}
+		if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Communication)
+		{
+			NDebug.Assert("コミュキャラ選択は廃止されました", false);
+			GameMain.Instance.BgMgr.ChangeBg("Syosai");
+			GameMain.Instance.MainCamera.SetFromScriptOnTarget(new Vector3(-2.526511f, 1.715126f, -2.023701f), 7.999995f, new Vector2(-128.2036f, -6.149067f));
+			this.chara_select_mgr_.SetCallBackMaidList(delegate(List<Maid> draw_maid_list)
+			{
+				List<Maid> list3 = ScheduleAPI.CanCommunicationMaids(true);
+				for (int m = 0; m < list3.Count; m++)
+				{
+					draw_maid_list.Add(list3[m]);
+				}
+			});
+			this.chara_select_mgr_.SetCallBackCallBackOnSelect(new CharacterSelectManager.CallBackOnSelect(this.OnSelectChara));
+			this.chara_select_mgr_.Create(CharacterSelectManager.Type.Select, 3, true);
+			if (this.chara_select_mgr_.maid_list_count == 1)
+			{
+				this.auto_select_ = true;
+			}
+			if (!this.auto_select_)
+			{
+				GameMain.Instance.SoundMgr.PlayBGM("BGM015.ogg", 0.5f, true);
+			}
+			this.explanatory_label_.text = "コミュニケーションを行うメイドを選択してください。";
+		}
+		else if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Yotogi || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Vip || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Facility)
+		{
+			if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Yotogi || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Vip)
+			{
+				if (!CharacterSelectMain.compatibilityMode)
+				{
+					GameMain.Instance.BgMgr.ChangeBg("Theater");
+					GameMain.Instance.MainCamera.SetFromScriptOnTarget(new Vector3(12.39468f, 5.495444f, 22.72065f), 0.1f, new Vector2(-6.047941f, 14.65832f));
+				}
+				else
+				{
+					GameMain.Instance.BgMgr.ChangeBg("Salon");
+					GameMain.Instance.MainCamera.SetFromScriptOnTarget(new Vector3(1.485176f, 0.5354422f, 1.606312f), 13.60001f, new Vector2(-208.1436f, -0.869565f));
+				}
+			}
+			else
+			{
+				GameMain.Instance.BgMgr.ChangeBg("EmpireClub_Rotary");
+				GameMain.Instance.MainCamera.SetFromScriptOnTarget(new Vector3(6.673284f, 3.031431f, 20.00305f), 0.2f, new Vector2(562.5145f, -4.906824f));
+			}
+			this.chara_select_mgr_.SetCallBackMaidList(delegate(List<Maid> draw_maid_list)
+			{
+				List<string> chara_guid_stock_list = SceneCharacterSelect.chara_guid_stock_list;
+				for (int m = 0; m < chara_guid_stock_list.Count; m++)
+				{
+					Maid stockMaid2 = GameMain.Instance.CharacterMgr.GetStockMaid(chara_guid_stock_list[m]);
+					if (stockMaid2 != null)
+					{
+						if (!CharacterSelectMain.compatibilityMode)
+						{
+							draw_maid_list.Add(stockMaid2);
+						}
+						else if (stockMaid2.status.heroineType == HeroineType.Transfer)
+						{
+							draw_maid_list.Add(stockMaid2);
+						}
+					}
+				}
+			});
+			this.chara_select_mgr_.SetCallBackCallBackOnSelect(new CharacterSelectManager.CallBackOnSelect(this.OnSelectChara));
+			this.chara_select_mgr_.Create(CharacterSelectManager.Type.Select, 3, true);
+			if (this.chara_select_mgr_.maid_list_count == 1 && this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Vip)
+			{
+				this.auto_select_ = true;
+			}
+			if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Yotogi)
+			{
+				this.explanatory_label_.text = "夜伽を行うメイドを選択してください。";
+			}
+			else if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Vip)
+			{
+				this.explanatory_label_.text = "Hイベントを行うメイドを選択してください。";
+			}
+			else
+			{
+				this.explanatory_label_.text = "施設強化を行うメイドを選択してください。";
+			}
+			if (!this.auto_select_)
+			{
+				if (!CharacterSelectMain.compatibilityMode)
+				{
+					GameMain.Instance.SoundMgr.PlayBGM("BGM015.ogg", 0.5f, true);
+				}
+				else
+				{
+					GameMain.Instance.SoundMgr.PlayBGMLegacy("BGM014.ogg", 0.5f, true);
+				}
+			}
+		}
+		else if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.CompetitiveShow)
+		{
+			if (!CharacterSelectMain.compatibilityMode)
+			{
+				GameMain.Instance.BgMgr.ChangeBg("Theater");
+				GameMain.Instance.MainCamera.SetFromScriptOnTarget(new Vector3(6.502444f, 1.154878f, 27.09383f), 0.1f, new Vector2(200.2396f, -12.36027f));
+			}
+			else
+			{
+				GameMain.Instance.BgMgr.ChangeBg("Salon_Day");
+				GameMain.Instance.MainCamera.SetFromScriptOnTarget(new Vector3(1.485176f, 0.5354422f, 1.606312f), 13.60001f, new Vector2(-208.1436f, -0.869565f));
+			}
+			this.chara_select_mgr_.SetCallBackMaidList(delegate(List<Maid> draw_maid_list)
+			{
+				List<Maid> list3 = new List<Maid>();
+				CharacterSelectManager.DefaultMaidList(list3);
+				for (int m = 0; m < list3.Count; m++)
+				{
+					if (!CharacterSelectMain.compatibilityMode && (list3[m].status.heroineType == HeroineType.Original || list3[m].status.heroineType == HeroineType.Transfer))
+					{
+						draw_maid_list.Add(list3[m]);
+					}
+					else if (CharacterSelectMain.compatibilityMode && list3[m].status.heroineType == HeroineType.Transfer)
+					{
+						draw_maid_list.Add(list3[m]);
+					}
+				}
+			});
+			this.chara_select_mgr_.SetCallBackOnMultiSelect(new CharacterSelectManager.CallBackOnMultiSelect(this.OnMultiSelectChara));
+			this.chara_select_mgr_.Create(CharacterSelectManager.Type.Multiple, this.chara_mgr_.GetStockMaidCount(), false);
+			this.button_dic_["OK"].isEnabled = false;
+			if (this.chara_select_mgr_.maid_list_count == 1)
+			{
+				Maid[] array = new Maid[1];
+				List<Maid> list = new List<Maid>();
+				List<Maid> list2 = new List<Maid>();
+				CharacterSelectManager.DefaultMaidList(list2);
+				for (int j = 0; j < list2.Count; j++)
+				{
+					if (!CharacterSelectMain.compatibilityMode && list2[j].status.heroineType == HeroineType.Original)
+					{
+						list.Add(list2[j]);
+					}
+					else if (CharacterSelectMain.compatibilityMode && list2[j].status.heroineType == HeroineType.Transfer)
+					{
+						list.Add(list2[j]);
+					}
+				}
+				if (0 < list.Count)
+				{
+					array[0] = list[0];
+				}
+				if (array[0] != null)
+				{
+					this.OnMultiSelectChara(array);
+					this.auto_select_ = true;
+				}
+			}
+			if (!this.auto_select_)
+			{
+				if (!CharacterSelectMain.compatibilityMode)
+				{
+					GameMain.Instance.SoundMgr.PlayBGM("BGM006.ogg", 0.5f, true);
+				}
+				else
+				{
+					GameMain.Instance.SoundMgr.PlayBGMLegacy("BGM021.ogg", 0.5f, true);
+				}
+			}
+			this.button_dic_["全選択"].gameObject.SetActive(true);
+			this.button_dic_["全解除"].gameObject.SetActive(true);
+			this.button_dic_["全選択"].isEnabled = true;
+			this.button_dic_["全解除"].isEnabled = false;
+			this.explanatory_label_.text = "品評会を行うメイドを選択してください。";
+		}
+		else if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Free)
+		{
+			if (!CharacterSelectMain.compatibilityMode)
+			{
+				GameMain.Instance.BgMgr.ChangeBg("Theater");
+				GameMain.Instance.MainCamera.SetFromScriptOnTarget(new Vector3(12.39468f, 5.495444f, 22.72065f), 0.1f, new Vector2(-6.047941f, 14.65832f));
+			}
+			else
+			{
+				GameMain.Instance.BgMgr.ChangeBg("Syosai");
+			}
+			this.chara_select_mgr_.SetCallBackMaidList(delegate(List<Maid> draw_maid_list)
+			{
+				List<Maid> list3 = new List<Maid>();
+				CharacterSelectManager.DefaultMaidList(list3);
+				for (int m = 0; m < list3.Count; m++)
+				{
+					if (!CharacterSelectMain.compatibilityMode)
+					{
+						draw_maid_list.Add(list3[m]);
+					}
+					else if (list3[m].status.heroineType == HeroineType.Transfer)
+					{
+						draw_maid_list.Add(list3[m]);
+					}
+				}
+			});
+			this.explanatory_label_.text = "メイドを選択してください。";
+			this.chara_select_mgr_.SetCallBackCallBackOnSelect(new CharacterSelectManager.CallBackOnSelect(this.OnSelectChara));
+			this.chara_select_mgr_.Create(CharacterSelectManager.Type.Select, 3, true);
+			if (this.chara_select_mgr_.maid_list_count == 1)
+			{
+				this.auto_select_ = true;
+			}
+		}
+		else if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.TouchCharaSelect)
+		{
+			if (GameMain.Instance.CharacterMgr.status.isDaytime)
+			{
+				GameMain.Instance.BgMgr.ChangeBg(DailyAPI.dayBg);
+			}
+			else
+			{
+				GameMain.Instance.BgMgr.ChangeBg(DailyAPI.nightBg);
+			}
+			GameMain.Instance.MainCamera.SetFromScriptOnTarget(new Vector3(1.32781f, 1.400725f, -0.06648348f), 0.1f, new Vector2(214.6109f, 8.136656f));
+			this.chara_select_mgr_.SetCallBackMaidList(delegate(List<Maid> draw_maid_list)
+			{
+				List<Maid> list3 = new List<Maid>();
+				CharacterSelectManager.DefaultMaidList(list3);
+				for (int m = 0; m < list3.Count; m++)
+				{
+					if (!CharacterSelectMain.compatibilityMode)
+					{
+						draw_maid_list.Add(list3[m]);
+					}
+					else if (list3[m].status.heroineType == HeroineType.Transfer)
+					{
+						draw_maid_list.Add(list3[m]);
+					}
+				}
+			});
+			this.chara_select_mgr_.SetCallBackCallBackOnSelect(new CharacterSelectManager.CallBackOnSelect(this.OnSelectChara));
+			this.chara_select_mgr_.Create(CharacterSelectManager.Type.Select, 3, true);
+			if (this.chara_select_mgr_.maid_list_count == 1)
+			{
+				this.auto_select_ = true;
+			}
+			if (!this.auto_select_)
+			{
+				GameMain.Instance.SoundMgr.PlayBGM("BGM015.ogg", 0.5f, true);
+			}
+			this.explanatory_label_.text = "おさわりを行うメイドを選択してください。";
+		}
+		else if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.VRComSelect)
+		{
+			this.chara_select_mgr_.SetCallBackMaidList(delegate(List<Maid> draw_maid_list)
+			{
+				List<Maid> list3 = new List<Maid>();
+				CharacterSelectManager.DefaultMaidList(list3);
+				for (int m = 0; m < list3.Count; m++)
+				{
+					if (!CharacterSelectMain.compatibilityMode)
+					{
+						draw_maid_list.Add(list3[m]);
+					}
+					else if (list3[m].status.heroineType == HeroineType.Transfer)
+					{
+						draw_maid_list.Add(list3[m]);
+					}
+				}
+			});
+			this.chara_select_mgr_.SetCallBackCallBackOnSelect(new CharacterSelectManager.CallBackOnSelect(this.OnSelectChara));
+			this.chara_select_mgr_.Create(CharacterSelectManager.Type.Select, 3, true);
+			if (this.chara_select_mgr_.maid_list_count == 1)
+			{
+				this.auto_select_ = true;
+			}
+			this.explanatory_label_.text = "バカンスに連れていくメイドを選択してください。";
+		}
+		else if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.VRKaraokeSelect)
+		{
+			this.chara_select_mgr_.SetCallBackMaidList(delegate(List<Maid> draw_maid_list)
+			{
+				List<Maid> list3 = new List<Maid>();
+				CharacterSelectManager.DefaultMaidList(list3);
+				for (int m = 0; m < list3.Count; m++)
+				{
+					Maid maid = list3[m];
+					if (maid.status.heroineType != HeroineType.Sub)
+					{
+						draw_maid_list.Add(maid);
+					}
+				}
+			});
+			this.chara_select_mgr_.SetCallBackCallBackOnSelect(new CharacterSelectManager.CallBackOnSelect(this.OnSelectChara));
+			this.chara_select_mgr_.Create(CharacterSelectManager.Type.Select, 3, true);
+			if (this.chara_select_mgr_.maid_list_count == 1)
+			{
+				this.auto_select_ = true;
+			}
+			this.explanatory_label_.text = "カラオケに連れていくメイドを選択してください。";
+		}
+		else if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Recollection)
+		{
+			if (!CharacterSelectMain.compatibilityMode)
+			{
+				GameMain.Instance.BgMgr.ChangeBg("ShinShitsumu_ChairRot");
+				GameMain.Instance.MainCamera.SetFromScriptOnTarget(new Vector3(-0.4103856f, 1.075485f, 0.775088f), 1.6f, new Vector2(321.3178f, 3.478252f));
+			}
+			else
+			{
+				GameMain.Instance.BgMgr.ChangeBg("Syosai");
+			}
+			string text = "recollection_subheroine.nei";
+			List<int> subMaidList = new List<int>();
+			using (AFileBase afileBase = GameUty.FileSystem.FileOpen(text))
+			{
+				using (CsvParser csvParser = new CsvParser())
+				{
+					bool condition = csvParser.Open(afileBase);
+					NDebug.Assert(condition, text + "\nopen failed.");
+					for (int k = 1; k < csvParser.max_cell_y; k++)
+					{
+						if (csvParser.IsCellToExistData(0, k))
+						{
+							int cellAsInteger = csvParser.GetCellAsInteger(0, k);
+							int cellAsInteger2 = csvParser.GetCellAsInteger(2, k);
+							subMaidList.Add(cellAsInteger2);
+						}
+					}
+				}
+			}
+			this.chara_select_mgr_.SetCallBackMaidList(delegate(List<Maid> draw_maid_list)
+			{
+				List<Maid> list3 = new List<Maid>();
+				CharacterSelectManager.DefaultMaidList(list3);
+				for (int m = 0; m < list3.Count; m++)
+				{
+					Maid maid = list3[m];
+					if (maid.status.subCharaData == null || subMaidList.Contains(maid.status.subCharaData.id))
+					{
+						if (!CharacterSelectMain.compatibilityMode || maid.status.heroineType == HeroineType.Transfer)
+						{
+							draw_maid_list.Add(list3[m]);
+						}
+					}
+				}
+			});
+			this.explanatory_label_.text = "メイドを選択してください。";
+			this.chara_select_mgr_.SetCallBackCallBackOnSelect(new CharacterSelectManager.CallBackOnSelect(this.OnSelectChara));
+			this.chara_select_mgr_.Create(CharacterSelectManager.Type.Select, 3, true);
+			if (this.chara_select_mgr_.maid_list_count == 1)
+			{
+				this.auto_select_ = true;
+			}
+		}
+		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
+		for (int l = 0; l < characterMgr.GetStockMaidCount(); l++)
+		{
+			Maid stockMaid = characterMgr.GetStockMaid(l);
+			if (stockMaid != null)
+			{
+				stockMaid.FaceAnime("通常", 0f, 0);
+				stockMaid.FaceBlend("無し");
+			}
+		}
+		GameMain.Instance.CharacterMgr.DeactivateCharaAll();
+	}
+
+	private void OnCallAdditionalType()
+	{
+		Debug.Log("メイドをアクティブ化させるスロット : " + this.scene_chara_select_.select_maid_slot);
+		this.chara_select_mgr_.SetCallBackMaidList(delegate(List<Maid> draw_maid_list)
+		{
+			List<Maid> list = new List<Maid>();
+			CharacterSelectManager.DefaultMaidList(list);
+			for (int j = 0; j < list.Count; j++)
+			{
+				Maid maid = list[j];
+				if (maid.status.heroineType != HeroineType.Sub)
+				{
+					if (maid.ActiveSlotNo == -1)
+					{
+						draw_maid_list.Add(maid);
+					}
+				}
+			}
+		});
+		this.chara_select_mgr_.SetCallBackCallBackOnSelect(new CharacterSelectManager.CallBackOnSelect(this.OnSelectChara));
+		this.chara_select_mgr_.Create(CharacterSelectManager.Type.Select, 3, true);
+		if (this.chara_select_mgr_.maid_list_count == 1)
+		{
+			this.auto_select_ = true;
+		}
+		this.explanatory_label_.text = "*メイドの追加呼び出し*";
+		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
+		for (int i = 0; i < characterMgr.GetStockMaidCount(); i++)
+		{
+			Maid stockMaid = characterMgr.GetStockMaid(i);
+			if (stockMaid != null)
+			{
+				stockMaid.FaceAnime("通常", 0f, 0);
+				stockMaid.FaceBlend("無し");
+			}
+		}
+	}
+
+	protected override bool IsCallFadeIn()
+	{
+		if (this.auto_select_)
+		{
+			base.SetFadeStatus(WfScreenChildren.FadeStatus.Wait);
+			float fade_time = base.fade_time;
+			base.SetFadeTime(0f);
+			this.Finish();
+			base.SetFadeTime(fade_time);
+			return false;
+		}
+		this.wait_count_++;
+		return 2 < this.wait_count_;
+	}
+
+	public void SetCancelLabel(string cancel_call_label)
+	{
+		this.cancel_call_label_ = cancel_call_label;
+		this.button_dic_["Cancel"].gameObject.SetActive(!string.IsNullOrEmpty(this.cancel_call_label_));
+	}
+
+	private void OnSelectAllChara()
+	{
+		this.chara_select_mgr_.SelectAllMaid();
+	}
+
+	private void OnSelectAllReleaseChara()
+	{
+		this.chara_select_mgr_.SelectAllReleaseMaid();
+	}
+
+	private void OnSelectChara(Maid select_maid)
+	{
+		this.select_maid_ = select_maid;
+	}
+
+	private void OnSingleDanceSelectChara(Maid select_maid)
+	{
+		this.loaded_check_maid_.Clear();
+		this.loaded_check_maid_.Add(select_maid);
+	}
+
+	private void OnMultiDanceSelectChara(Maid[] maid_array)
+	{
+		this.loaded_check_maid_.Clear();
+		for (int i = 0; i < maid_array.Length; i++)
+		{
+			this.loaded_check_maid_.Add(maid_array[i]);
+		}
+	}
+
+	private void OnMultiSelectChara(Maid[] maid_array)
+	{
+		this.loaded_check_maid_.Clear();
+		bool isEnabled = false;
+		bool flag = true;
+		bool flag2 = true;
+		for (int i = 0; i < maid_array.Length; i++)
+		{
+			if (maid_array[i] == null)
+			{
+				flag = false;
+			}
+			else
+			{
+				flag2 = false;
+				isEnabled = true;
+				this.loaded_check_maid_.Add(maid_array[i]);
+			}
+		}
+		this.button_dic_["OK"].isEnabled = isEnabled;
+		this.button_dic_["全選択"].isEnabled = !flag;
+		this.button_dic_["全解除"].isEnabled = !flag2;
+	}
+
+	private void OnClickButton()
+	{
+		string text = string.Empty;
+		foreach (KeyValuePair<string, UIButton> keyValuePair in this.button_dic_)
+		{
+			if (keyValuePair.Value == UIButton.current)
+			{
+				text = keyValuePair.Key;
+				break;
+			}
+		}
+		if (string.IsNullOrEmpty(text))
+		{
+			return;
+		}
+		if (text == "OK")
+		{
+			this.Finish();
+		}
+		else if (text == "Cancel")
+		{
+			if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Yotogi)
+			{
+				string f_strMsg = "まだ夜伽を実行していないメイドがいます。\n夜伽を終了しますか?";
+				GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK_CANCEL, delegate
+				{
+					GameMain.Instance.SysDlg.Close();
+					this.select_maid_ = null;
+					this.scene_chara_select_.move_screen.SetNextLabel(this.cancel_call_label_);
+					this.Finish();
+				}, null);
+			}
+			else
+			{
+				this.select_maid_ = null;
+				this.scene_chara_select_.move_screen.SetNextLabel(this.cancel_call_label_);
+				this.Finish();
+			}
+		}
+	}
+
+	private void OnOvrCamFree()
+	{
+		GameMain.Instance.CMSystem.SetTmpGenericFlag("ダンスOVRカメラタイプ", 0);
+		this.Finish();
+	}
+
+	private void OnOvrCamMove()
+	{
+		GameMain.Instance.CMSystem.SetTmpGenericFlag("ダンスOVRカメラタイプ", 1);
+		this.Finish();
+	}
+
+	public override bool Finish()
+	{
+		bool flag = base.Finish();
+		if (flag && 0 < this.loaded_check_maid_.Count)
+		{
+			GameMain.Instance.SoundMgr.StopBGM(1.5f);
+		}
+		return flag;
+	}
+
+	protected override void OnFinish()
+	{
+		this.button_dic_["Cancel"].gameObject.SetActive(false);
+		if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Communication && this.select_maid_ != null)
+		{
+			int noonWorkId = this.select_maid_.status.noonWorkId;
+			this.loaded_check_maid_.Add(this.select_maid_);
+			ScheduleData[] scheduleSlot = GameMain.Instance.CharacterMgr.status.scheduleSlot;
+			for (int i = 0; i < scheduleSlot.Length; i++)
+			{
+				if (scheduleSlot[i].maid_guid == this.select_maid_.status.guid)
+				{
+					scheduleSlot[i].noon_communication = true;
+					break;
+				}
+			}
+			if (noonWorkId == ScheduleAPI.GetNoonTrainerWorkId())
+			{
+				Maid noonTraineeMaid = ScheduleAPI.GetNoonTraineeMaid();
+				NDebug.Assert(noonTraineeMaid != null, "研修生を特定できませんでした");
+				this.loaded_check_maid_.Add(noonTraineeMaid);
+			}
+			else if (noonWorkId == ScheduleAPI.GetTraineeWorkId())
+			{
+				Maid noonTrainerMaid = ScheduleAPI.GetNoonTrainerMaid();
+				NDebug.Assert(noonTrainerMaid != null, "研修官を特定できませんでした");
+				this.loaded_check_maid_.Add(noonTrainerMaid);
+			}
+		}
+		if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Yotogi || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Vip || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Facility || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Free || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Recollection)
+		{
+			if (this.select_maid_ != null)
+			{
+				this.loaded_check_maid_.Add(this.select_maid_);
+				SceneCharacterSelect.chara_guid_stock_list.Remove(this.select_maid_.status.guid);
+			}
+			else
+			{
+				SceneCharacterSelect.chara_guid_stock_list.Clear();
+			}
+		}
+		if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.CompetitiveShow)
+		{
+			CompetitiveShowMgr.check_maid_list.Clear();
+			SceneCharacterSelect.select_maid_list.Clear();
+			for (int j = 0; j < this.loaded_check_maid_.Count; j++)
+			{
+				SceneCharacterSelect.select_maid_list.Add(this.loaded_check_maid_[j]);
+			}
+			this.loaded_check_maid_.Clear();
+		}
+		if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.TouchCharaSelect && this.select_maid_ != null)
+		{
+			this.loaded_check_maid_.Add(this.select_maid_);
+		}
+		if ((this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.VRComSelect || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.VRKaraokeSelect) && this.select_maid_ != null)
+		{
+			this.loaded_check_maid_.Add(this.select_maid_);
+		}
+		if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Additional)
+		{
+			this.chara_mgr_.SetActiveMaid(this.select_maid_, this.scene_chara_select_.select_maid_slot);
+		}
+		for (int k = 0; k < this.loaded_check_maid_.Count; k++)
+		{
+			this.chara_mgr_.SetActiveMaid(this.loaded_check_maid_[k], k);
+			this.loaded_check_maid_[k].Visible = true;
+			this.loaded_check_maid_[k].AllProcPropSeqStart();
+		}
+		GameMain.Instance.LoadIcon.NextLoadIcontImmediatelyDisplay();
+		if (this.loaded_check_maid_.Count == 0)
+		{
+			base.parent_mgr.CallScreen("Move");
+		}
+	}
+
+	protected override void OnFadeEnd()
+	{
+		if (this.loaded_check_maid_.Count == 0)
+		{
+			return;
+		}
+		bool flag = true;
+		for (int i = 0; i < this.loaded_check_maid_.Count; i++)
+		{
+			if (this.loaded_check_maid_[i].IsBusy)
+			{
+				flag = false;
+				break;
+			}
+		}
+		if (flag)
+		{
+			base.parent_mgr.CallScreen("Move");
+			this.loaded_check_maid_.Clear();
+		}
+	}
+
+	private SceneCharacterSelect scene_chara_select_;
+
+	private Maid select_maid_;
+
+	private CharacterMgr chara_mgr_;
+
+	private CharacterSelectManager chara_select_mgr_;
+
+	private Dictionary<string, UIButton> button_dic_ = new Dictionary<string, UIButton>();
+
+	private List<Maid> loaded_check_maid_ = new List<Maid>();
+
+	private UILabel explanatory_label_;
+
+	private string cancel_call_label_ = string.Empty;
+
+	private int wait_count_;
+
+	private bool auto_select_;
+
+	private FFNameDialog ovr_dance_cam_dlg_;
+}

+ 667 - 0
Assembly-CSharp/CharacterSelectManager.cs

@@ -0,0 +1,667 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Runtime.CompilerServices;
+using PlayerStatus;
+using UnityEngine;
+using wf;
+
+public class CharacterSelectManager : MonoBehaviour
+{
+	public static void DefaultMaidList(List<Maid> draw_list)
+	{
+		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
+		for (int i = 0; i < characterMgr.GetStockMaidCount(); i++)
+		{
+			draw_list.Add(characterMgr.GetStockMaid(i));
+		}
+	}
+
+	public static int SortMaidStandardNoSchedule(Maid maid_a, Maid maid_b)
+	{
+		if (maid_a.status.leader && !maid_b.status.leader)
+		{
+			return -1;
+		}
+		if (!maid_a.status.leader && maid_b.status.leader)
+		{
+			return 1;
+		}
+		Status status = GameMain.Instance.CharacterMgr.status;
+		if (maid_a.status.creationTimeNum < maid_b.status.creationTimeNum)
+		{
+			return -1;
+		}
+		if (maid_a.status.creationTimeNum != maid_b.status.creationTimeNum)
+		{
+			return 1;
+		}
+		return string.Compare(maid_b.status.guid, maid_a.status.guid);
+	}
+
+	public static int SortMaidStandard(Maid maid_a, Maid maid_b)
+	{
+		if (maid_a.status.leader && !maid_b.status.leader)
+		{
+			return -1;
+		}
+		if (!maid_a.status.leader && maid_b.status.leader)
+		{
+			return 1;
+		}
+		Status status = GameMain.Instance.CharacterMgr.status;
+		int scheduleMaidSetting = status.GetScheduleMaidSetting(maid_a);
+		int scheduleMaidSetting2 = status.GetScheduleMaidSetting(maid_b);
+		if (scheduleMaidSetting != -1 && scheduleMaidSetting2 == -1)
+		{
+			return -1;
+		}
+		if (scheduleMaidSetting == -1 && scheduleMaidSetting2 != -1)
+		{
+			return 1;
+		}
+		if (scheduleMaidSetting < scheduleMaidSetting2)
+		{
+			return -1;
+		}
+		if (scheduleMaidSetting > scheduleMaidSetting2)
+		{
+			return 1;
+		}
+		if (maid_a.status.creationTimeNum < maid_b.status.creationTimeNum)
+		{
+			return -1;
+		}
+		if (maid_a.status.creationTimeNum != maid_b.status.creationTimeNum)
+		{
+			return 1;
+		}
+		return string.Compare(maid_b.status.guid, maid_a.status.guid);
+	}
+
+	public static int SortMaidStandard(Transform a, Transform b)
+	{
+		Maid maid = a.gameObject.GetComponent<MaidPlate>().maid;
+		Maid maid2 = b.gameObject.GetComponent<MaidPlate>().maid;
+		return CharacterSelectManager.SortMaidStandard(maid, maid2);
+	}
+
+	public static int SortMaidRanking(Maid maid_a, Maid maid_b)
+	{
+		if (maid_a.status.popularRank != 0 && maid_b.status.popularRank == 0)
+		{
+			return -1;
+		}
+		if (maid_a.status.popularRank == 0 && maid_b.status.popularRank != 0)
+		{
+			return 1;
+		}
+		if (maid_a.status.popularRank < maid_b.status.popularRank)
+		{
+			return -1;
+		}
+		if (maid_a.status.popularRank != maid_b.status.popularRank)
+		{
+			return 1;
+		}
+		return CharacterSelectManager.SortMaidStandard(maid_a, maid_b);
+	}
+
+	public static int SortMaidRanking(Transform a, Transform b)
+	{
+		Maid maid = a.gameObject.GetComponent<MaidPlate>().maid;
+		Maid maid2 = b.gameObject.GetComponent<MaidPlate>().maid;
+		return CharacterSelectManager.SortMaidRanking(maid, maid2);
+	}
+
+	public void Awake()
+	{
+		NDebug.AssertNull(this.MaidPlateParentGrid != null);
+		this.switch_panel_ = this.MaidPlateParentGrid.gameObject.GetComponent<UIWFSwitchPanel>();
+		this.tab_panel_ = this.MaidPlateParentGrid.gameObject.GetComponent<UIWFTabPanel>();
+		this.scroll_view_ = UTY.GetChildObject(base.gameObject, "Contents", false).GetComponent<UIScrollView>();
+		this.scroll_bar_ = UTY.GetChildObject(base.gameObject, "Scroll Bar", false).GetComponent<UIScrollBar>();
+		Transform transform = base.gameObject.transform.Find("BigThumbnail");
+		if (transform != null)
+		{
+			this.big_thumbnail_ = transform.gameObject.GetComponent<BigThumbnail>();
+		}
+		this.SetSortType(CharacterSelectManager.SortType.Normal);
+	}
+
+	public void Create(CharacterSelectManager.Type type, int slect_max = 3, bool select_no_draw = true)
+	{
+		this.thumbnail_load_ = true;
+		this.select_no_draw_ = select_no_draw;
+		Stopwatch stopwatch = new Stopwatch();
+		stopwatch.Start();
+		if (this.big_thumbnail_ != null)
+		{
+			this.big_thumbnail_.Visible = true;
+		}
+		this.type_ = type;
+		if (this.callback_maid_list_ == null)
+		{
+			if (CharacterSelectManager.<>f__mg$cache0 == null)
+			{
+				CharacterSelectManager.<>f__mg$cache0 = new CharacterSelectManager.CallBackMaidList(CharacterSelectManager.DefaultMaidList);
+			}
+			this.callback_maid_list_ = CharacterSelectManager.<>f__mg$cache0;
+		}
+		Transform transform = this.MaidPlateParentGrid.transform;
+		for (int i = 0; i < transform.childCount; i++)
+		{
+			UnityEngine.Object.Destroy(transform.GetChild(i).gameObject);
+		}
+		transform.DetachChildren();
+		List<Maid> list = new List<Maid>();
+		this.callback_maid_list_(list);
+		this.maid_list_count_ = list.Count;
+		this.select_list_ = null;
+		for (int j = 0; j < list.Count; j++)
+		{
+			GameObject gameObject = Utility.CreatePrefab(this.MaidPlateParentGrid.gameObject, "CharacterSelect/Prefab/MaidPlateSimple", true);
+			gameObject.GetComponent<MaidPlate>().SetMaidData(list[j]);
+			UIWFSelectButton component = UTY.GetChildObject(gameObject, "Button", false).GetComponent<UIWFSelectButton>();
+			UIWFTabButton component2 = UTY.GetChildObject(gameObject, "Button", false).GetComponent<UIWFTabButton>();
+			if (type == CharacterSelectManager.Type.Select)
+			{
+				UnityEngine.Object.Destroy(component);
+				component2.enabled = true;
+				EventDelegate.Add(component2.onSelect, new EventDelegate.Callback(this.OnSelect));
+			}
+			else if (type == CharacterSelectManager.Type.Multiple)
+			{
+				UnityEngine.Object.Destroy(component2);
+				component.enabled = true;
+				EventDelegate.Add(component.onSelect, new EventDelegate.Callback(this.OnSelect));
+			}
+			else if (type == CharacterSelectManager.Type.Click)
+			{
+				UnityEngine.Object.Destroy(component);
+				component2.enabled = true;
+				EventDelegate.Add(component2.onClick, new EventDelegate.Callback(this.OnClick));
+			}
+		}
+		if (type == CharacterSelectManager.Type.Select)
+		{
+			UnityEngine.Object.Destroy(this.switch_panel_);
+			this.switch_panel_ = null;
+			if (this.tab_panel_ == null)
+			{
+				this.tab_panel_ = this.MaidPlateParentGrid.gameObject.AddComponent<UIWFTabPanel>();
+			}
+			this.tab_panel_.enabled = true;
+			this.tab_panel_.UpdateChildren();
+		}
+		else if (type == CharacterSelectManager.Type.Multiple)
+		{
+			UnityEngine.Object.Destroy(this.tab_panel_);
+			this.tab_panel_ = null;
+			if (this.switch_panel_ == null)
+			{
+				this.switch_panel_ = this.MaidPlateParentGrid.gameObject.AddComponent<UIWFSwitchPanel>();
+			}
+			this.switch_panel_.SetNumberOfSelected(slect_max);
+			this.switch_panel_.enabled = true;
+			this.select_list_ = new MaidPlate[slect_max];
+			this.switch_panel_.UpdateChildren();
+		}
+		this.Reposition();
+		this.scroll_view_.ResetPosition();
+		if (this.type_ == CharacterSelectManager.Type.Select && this.MaidPlateParentGrid.GetChildList().Count != 0)
+		{
+			UIWFTabButton component3 = UTY.GetChildObject(this.MaidPlateParentGrid.GetChild(0).gameObject, "Button", false).GetComponent<UIWFTabButton>();
+			this.tab_panel_.Select(component3);
+		}
+		stopwatch.Stop();
+	}
+
+	public void SetSortType(CharacterSelectManager.SortType type)
+	{
+		if (type == CharacterSelectManager.SortType.Normal)
+		{
+			UIGrid maidPlateParentGrid = this.MaidPlateParentGrid;
+			if (CharacterSelectManager.<>f__mg$cache1 == null)
+			{
+				CharacterSelectManager.<>f__mg$cache1 = new Comparison<Transform>(CharacterSelectManager.SortMaidStandard);
+			}
+			maidPlateParentGrid.onCustomSort = CharacterSelectManager.<>f__mg$cache1;
+		}
+		else
+		{
+			UIGrid maidPlateParentGrid2 = this.MaidPlateParentGrid;
+			if (CharacterSelectManager.<>f__mg$cache2 == null)
+			{
+				CharacterSelectManager.<>f__mg$cache2 = new Comparison<Transform>(CharacterSelectManager.SortMaidRanking);
+			}
+			maidPlateParentGrid2.onCustomSort = CharacterSelectManager.<>f__mg$cache2;
+		}
+		this.Reposition();
+	}
+
+	public void SelectMaid(Maid maid)
+	{
+		if (this.type_ != CharacterSelectManager.Type.Select || maid == null)
+		{
+			return;
+		}
+		List<Transform> childList = this.MaidPlateParentGrid.GetChildList();
+		for (int i = 0; i < childList.Count; i++)
+		{
+			if (childList[i].gameObject.GetComponent<MaidPlate>().maid == maid)
+			{
+				UIWFTabButton component = UTY.GetChildObject(childList[i].gameObject, "Button", false).GetComponent<UIWFTabButton>();
+				this.tab_panel_.Select(component);
+				return;
+			}
+		}
+	}
+
+	public void SelectAllMaid()
+	{
+		if (this.type_ != CharacterSelectManager.Type.Multiple || this.select_list_ == null || this.select_no_draw_)
+		{
+			return;
+		}
+		this.thumbnail_load_ = false;
+		CharacterSelectManager.CallBackOnMultiSelect callBackOnMultiSelect = this.callback_on_multi_select_;
+		this.callback_on_multi_select_ = null;
+		this.switch_panel_.SelectAll();
+		this.callback_on_multi_select_ = callBackOnMultiSelect;
+		if (this.callback_on_multi_select_ != null)
+		{
+			Maid[] array = new Maid[this.select_list_.Length];
+			for (int i = 0; i < this.select_list_.Length; i++)
+			{
+				if (this.select_list_[i] != null)
+				{
+					array[i] = this.select_list_[i].maid;
+				}
+			}
+			this.callback_on_multi_select_(array);
+		}
+		this.thumbnail_load_ = true;
+	}
+
+	public void SelectAllReleaseMaid()
+	{
+		if (this.type_ != CharacterSelectManager.Type.Multiple || this.select_list_ == null || this.select_no_draw_)
+		{
+			return;
+		}
+		this.thumbnail_load_ = false;
+		CharacterSelectManager.CallBackOnMultiSelect callBackOnMultiSelect = this.callback_on_multi_select_;
+		this.callback_on_multi_select_ = null;
+		this.switch_panel_.SelectAllRelease();
+		this.callback_on_multi_select_ = callBackOnMultiSelect;
+		if (this.callback_on_multi_select_ != null)
+		{
+			Maid[] array = new Maid[this.select_list_.Length];
+			for (int i = 0; i < this.select_list_.Length; i++)
+			{
+				if (this.select_list_[i] != null)
+				{
+					array[i] = this.select_list_[i].maid;
+				}
+			}
+			this.callback_on_multi_select_(array);
+		}
+		this.thumbnail_load_ = true;
+	}
+
+	public void UpdateMaidPlate(Maid maid)
+	{
+		Transform transform = this.MaidPlateParentGrid.transform;
+		for (int i = 0; i < transform.childCount; i++)
+		{
+			MaidPlate component = transform.GetChild(i).GetComponent<MaidPlate>();
+			if (component.maid == maid)
+			{
+				component.SetMaidData(maid);
+				return;
+			}
+		}
+		transform = this.NoDrawArea.transform;
+		for (int j = 0; j < transform.childCount; j++)
+		{
+			MaidPlate component2 = transform.GetChild(j).GetComponent<MaidPlate>();
+			if (component2.maid == maid)
+			{
+				component2.SetMaidData(maid);
+				return;
+			}
+		}
+	}
+
+	public void RemoveMaidPlate(Maid maid)
+	{
+		List<Transform> childList = this.MaidPlateParentGrid.GetChildList();
+		MaidPlate maidPlate = null;
+		MaidPlate maidPlate2 = null;
+		bool flag = false;
+		for (int i = 0; i < childList.Count; i++)
+		{
+			maidPlate = childList[i].gameObject.GetComponent<MaidPlate>();
+			if (maidPlate.maid == maid)
+			{
+				if (i + 1 < childList.Count)
+				{
+					maidPlate2 = childList[i + 1].gameObject.GetComponent<MaidPlate>();
+				}
+				flag = true;
+				break;
+			}
+			maidPlate2 = maidPlate;
+		}
+		if (!flag)
+		{
+			NDebug.Assert("error.", false);
+			return;
+		}
+		if (this.type_ == CharacterSelectManager.Type.Select && maidPlate2 != null && maidPlate2.maid != maid)
+		{
+			UIWFTabButton component = UTY.GetChildObject(maidPlate2.gameObject, "Button", false).GetComponent<UIWFTabButton>();
+			this.tab_panel_.Select(component);
+		}
+		this.MoveNoDrawArea(maid);
+		maidPlate.SetMaidData(null);
+		this.Reposition();
+	}
+
+	public bool MoveNoDrawArea(Maid maid)
+	{
+		MaidPlate maidPlate = null;
+		Transform transform = this.MaidPlateParentGrid.transform;
+		for (int i = 0; i < transform.childCount; i++)
+		{
+			MaidPlate component = transform.GetChild(i).GetComponent<MaidPlate>();
+			if (component.maid == maid)
+			{
+				maidPlate = component;
+				break;
+			}
+		}
+		if (maidPlate == null)
+		{
+			return false;
+		}
+		maidPlate.gameObject.transform.SetParent(this.NoDrawArea.transform, false);
+		this.Reposition();
+		return true;
+	}
+
+	public bool MoveGridArea(Maid maid)
+	{
+		MaidPlate maidPlate = null;
+		Transform transform = this.NoDrawArea.transform;
+		for (int i = 0; i < transform.childCount; i++)
+		{
+			MaidPlate component = transform.GetChild(i).GetComponent<MaidPlate>();
+			if (component.maid == maid)
+			{
+				maidPlate = component;
+				break;
+			}
+		}
+		if (maidPlate == null)
+		{
+			return false;
+		}
+		maidPlate.gameObject.transform.SetParent(this.MaidPlateParentGrid.transform, false);
+		this.Reposition();
+		return true;
+	}
+
+	public void SetRightVisible(bool is_visible)
+	{
+		Transform transform = this.MaidPlateParentGrid.transform;
+		UISprite component = UTY.GetChildObject(base.gameObject, "BG", false).GetComponent<UISprite>();
+		Transform transform2 = UTY.GetChildObject(base.gameObject, "Scroll Bar", false).transform;
+		UIWidget component2 = UTY.GetChildObject(base.gameObject, "DragMat", false).GetComponent<UIWidget>();
+		this.right_visible_ = is_visible;
+		if (is_visible)
+		{
+			for (int i = 0; i < transform.childCount; i++)
+			{
+				MaidPlate component3 = transform.GetChild(i).gameObject.GetComponent<MaidPlate>();
+				component3.SetRightPlateVisible(true);
+			}
+			component.transform.localPosition = new Vector3(145f, 0f, 0f);
+			component.width = 792;
+			transform2.localPosition = new Vector3(354f, 0f, 0f);
+			component2.transform.localPosition = new Vector3(140f, 0f, 0f);
+			component2.width = 784;
+			component2.ResizeCollider();
+		}
+		else
+		{
+			for (int j = 0; j < transform.childCount; j++)
+			{
+				MaidPlate component4 = transform.GetChild(j).gameObject.GetComponent<MaidPlate>();
+				component4.SetRightPlateVisible(false);
+			}
+			component.transform.localPosition = Vector3.zero;
+			component.width = 502;
+			transform2.localPosition = new Vector3(64f, 0f, 0f);
+			component2.transform.localPosition = new Vector3(-5f, 0f, 0f);
+			component2.width = 492;
+			component2.ResizeCollider();
+		}
+	}
+
+	public void SetCallBackMaidList(CharacterSelectManager.CallBackMaidList callback)
+	{
+		this.callback_maid_list_ = callback;
+	}
+
+	public void SetCallBackOnClick(CharacterSelectManager.CallBackOnClick callback)
+	{
+		this.callback_on_click_ = callback;
+	}
+
+	public void SetCallBackOnMultiSelect(CharacterSelectManager.CallBackOnMultiSelect callback)
+	{
+		this.callback_on_multi_select_ = callback;
+	}
+
+	public void SetCallBackCallBackOnSelect(CharacterSelectManager.CallBackOnSelect callback)
+	{
+		this.callback_on_select_ = callback;
+	}
+
+	public void Reposition()
+	{
+		this.MaidPlateParentGrid.Reposition();
+		this.scroll_view_.UpdatePosition();
+	}
+
+	public bool IsRightVisible()
+	{
+		return this.right_visible_;
+	}
+
+	public UIScrollView scroll_view
+	{
+		get
+		{
+			return this.scroll_view_;
+		}
+	}
+
+	public UIScrollBar scroll_bar
+	{
+		get
+		{
+			return this.scroll_bar_;
+		}
+	}
+
+	public BigThumbnail big_thumbnail
+	{
+		get
+		{
+			return this.big_thumbnail_;
+		}
+	}
+
+	public int maid_list_count
+	{
+		get
+		{
+			return this.maid_list_count_;
+		}
+	}
+
+	private void OnSelect()
+	{
+		GameObject gameObject = UIButton.current.transform.parent.gameObject;
+		MaidPlate component = gameObject.GetComponent<MaidPlate>();
+		bool selected = UIWFSelectButton.selected;
+		if (this.type_ == CharacterSelectManager.Type.Select)
+		{
+			if (selected && this.callback_on_select_ != null)
+			{
+				if (this.big_thumbnail_ != null && this.thumbnail_load_)
+				{
+					this.big_thumbnail_.SetMaid(component.maid);
+				}
+				this.callback_on_select_(component.maid);
+			}
+		}
+		else if (this.type_ == CharacterSelectManager.Type.Multiple)
+		{
+			if (selected)
+			{
+				for (int i = 0; i < this.select_list_.Length; i++)
+				{
+					if (this.select_list_[i] == null)
+					{
+						if (this.big_thumbnail_ != null && this.thumbnail_load_)
+						{
+							this.big_thumbnail_.SetMaid(component.maid);
+						}
+						this.select_list_[i] = component;
+						if (this.select_no_draw_)
+						{
+							this.select_list_[i].SetSelectNoVisible(i + 1, true);
+						}
+						break;
+					}
+				}
+			}
+			else
+			{
+				for (int j = 0; j < this.select_list_.Length; j++)
+				{
+					if (this.select_list_[j] == component)
+					{
+						if (this.big_thumbnail_ != null && this.thumbnail_load_)
+						{
+							this.big_thumbnail_.SetMaid(component.maid);
+						}
+						if (this.select_no_draw_)
+						{
+							this.select_list_[j].SetSelectNoVisible(j + 1, false);
+						}
+						this.select_list_[j] = null;
+						break;
+					}
+				}
+			}
+			if (this.callback_on_multi_select_ != null)
+			{
+				Maid[] array = new Maid[this.select_list_.Length];
+				for (int k = 0; k < this.select_list_.Length; k++)
+				{
+					if (this.select_list_[k] != null)
+					{
+						array[k] = this.select_list_[k].maid;
+					}
+				}
+				this.callback_on_multi_select_(array);
+			}
+		}
+	}
+
+	private void OnClick()
+	{
+		MaidPlate component = UIButton.current.transform.parent.GetComponent<MaidPlate>();
+		if (this.callback_on_click_ != null)
+		{
+			this.callback_on_click_(component.maid);
+		}
+	}
+
+	public int select_max
+	{
+		get
+		{
+			return (this.select_list_ != null) ? this.select_list_.Length : 0;
+		}
+	}
+
+	public UIGrid MaidPlateParentGrid;
+
+	public GameObject NoDrawArea;
+
+	private CharacterSelectManager.CallBackMaidList callback_maid_list_;
+
+	private CharacterSelectManager.CallBackOnClick callback_on_click_;
+
+	private CharacterSelectManager.CallBackOnMultiSelect callback_on_multi_select_;
+
+	private CharacterSelectManager.CallBackOnSelect callback_on_select_;
+
+	private BigThumbnail big_thumbnail_;
+
+	private UIScrollView scroll_view_;
+
+	private UIScrollBar scroll_bar_;
+
+	private UIWFSwitchPanel switch_panel_;
+
+	private UIWFTabPanel tab_panel_;
+
+	private CharacterSelectManager.Type type_;
+
+	private MaidPlate[] select_list_;
+
+	private bool right_visible_;
+
+	private bool select_no_draw_;
+
+	private int maid_list_count_;
+
+	private bool thumbnail_load_;
+
+	[CompilerGenerated]
+	private static CharacterSelectManager.CallBackMaidList <>f__mg$cache0;
+
+	[CompilerGenerated]
+	private static Comparison<Transform> <>f__mg$cache1;
+
+	[CompilerGenerated]
+	private static Comparison<Transform> <>f__mg$cache2;
+
+	public enum Type
+	{
+		Click,
+		Select,
+		Multiple
+	}
+
+	public enum SortType
+	{
+		Normal,
+		Ranking
+	}
+
+	public delegate void CallBackMaidList(List<Maid> draw_list);
+
+	public delegate void CallBackOnClick(Maid select_maid);
+
+	public delegate void CallBackOnSelect(Maid select_maid);
+
+	public delegate void CallBackOnMultiSelect(Maid[] select_maid);
+}

+ 46 - 0
Assembly-CSharp/ChatInput.cs

@@ -0,0 +1,46 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(UIInput))]
+[AddComponentMenu("NGUI/Examples/Chat Input")]
+public class ChatInput : MonoBehaviour
+{
+	private void Start()
+	{
+		this.mInput = base.GetComponent<UIInput>();
+		this.mInput.label.maxLineCount = 1;
+		if (this.fillWithDummyData && this.textList != null)
+		{
+			for (int i = 0; i < 30; i++)
+			{
+				this.textList.Add(string.Concat(new object[]
+				{
+					(i % 2 != 0) ? "[AAAAAA]" : "[FFFFFF]",
+					"This is an example paragraph for the text list, testing line ",
+					i,
+					"[-]"
+				}));
+			}
+		}
+	}
+
+	public void OnSubmit()
+	{
+		if (this.textList != null)
+		{
+			string text = NGUIText.StripSymbols(this.mInput.value);
+			if (!string.IsNullOrEmpty(text))
+			{
+				this.textList.Add(text);
+				this.mInput.value = string.Empty;
+				this.mInput.isSelected = false;
+			}
+		}
+	}
+
+	public UITextList textList;
+
+	public bool fillWithDummyData;
+
+	private UIInput mInput;
+}

+ 181 - 0
Assembly-CSharp/ChipManager.cs

@@ -0,0 +1,181 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+public class ChipManager : MonoBehaviour
+{
+	public static ChipManager Instance { get; private set; }
+
+	public float ChipSetSpace
+	{
+		get
+		{
+			return this.m_ChipSetSpace;
+		}
+	}
+
+	public Vector3 ChipStackSpace
+	{
+		get
+		{
+			return this.m_ChipStackSpace;
+		}
+	}
+
+	public float FallingLength
+	{
+		get
+		{
+			return this.m_FallingLength;
+		}
+	}
+
+	public float FallingTime
+	{
+		get
+		{
+			return this.m_FallingTime;
+		}
+	}
+
+	public int StackCount
+	{
+		get
+		{
+			return this.m_StackCount;
+		}
+	}
+
+	public float TimeOffset
+	{
+		get
+		{
+			return this.m_TimeOffset;
+		}
+	}
+
+	public List<ChipManager.Chip> ChipList
+	{
+		get
+		{
+			return this.m_ChipDataList;
+		}
+	}
+
+	public ChipStack[] ChipStacks
+	{
+		get
+		{
+			return this.m_ChipStack;
+		}
+	}
+
+	private void Awake()
+	{
+		ChipManager.Instance = this;
+		this.m_ChipDataList = (from chip in this.ChipList
+		orderby chip.value descending
+		select chip).ToList<ChipManager.Chip>();
+		foreach (ChipManager.Chip chip2 in this.m_ChipDataList)
+		{
+			chip2.chip_obj = Resources.Load<GameObject>(BlackjackGame.BlackJackResource("Prefab/Coin/" + chip2.chipname));
+		}
+	}
+
+	private void StackCall()
+	{
+		if (this.StackEndCallBack != null)
+		{
+			this.StackEndCallBack();
+		}
+		this.StackEndCallBack = null;
+	}
+
+	public void StackEndAction()
+	{
+		if (this.m_ChipStack.Any((ChipStack chip) => !chip.ChipUpdateEnd))
+		{
+			return;
+		}
+		base.Invoke("StackCall", this.m_StackEndPause);
+	}
+
+	public void ClearBet()
+	{
+		BjPlayer.Instance.ClearBet();
+		this.ResetStacks();
+	}
+
+	public void UpdateStacks()
+	{
+		foreach (ChipStack chipStack in this.ChipStacks)
+		{
+			chipStack.UpdateChips();
+		}
+		this.StackEndAction();
+	}
+
+	public void HardReset()
+	{
+		foreach (ChipStack chipStack in this.ChipStacks)
+		{
+			chipStack.IsWinningStack = false;
+		}
+	}
+
+	public void ResetStacks()
+	{
+		foreach (ChipStack chipStack in this.ChipStacks)
+		{
+			chipStack.ResetChips();
+		}
+	}
+
+	[SerializeField]
+	private float m_StackEndPause = 0.5f;
+
+	[SerializeField]
+	[Header("チップの設置間隔(アニメーション開始時)")]
+	private float m_ChipSetSpace = 0.5f;
+
+	[SerializeField]
+	[Header("チップの設置間隔(通常時)")]
+	private Vector3 m_ChipStackSpace = Vector3.zero;
+
+	[SerializeField]
+	[Header("チップは最低この高さから落とす")]
+	private float m_FallingLength = 2.75f;
+
+	[SerializeField]
+	[Header("チップのアニメーション所要時間")]
+	private float m_FallingTime = 0.7f;
+
+	[SerializeField]
+	[Header("チップのアニメーションラグ時間")]
+	private float m_TimeOffset = 0.05f;
+
+	[SerializeField]
+	[Header("この枚数毎にスタック")]
+	private int m_StackCount = 10;
+
+	[SerializeField]
+	private List<ChipManager.Chip> m_ChipDataList = new List<ChipManager.Chip>();
+
+	public Action StackEndCallBack;
+
+	[SerializeField]
+	[Header("チップを載せておく場所")]
+	private ChipStack[] m_ChipStack = new ChipStack[4];
+
+	[Serializable]
+	public class Chip
+	{
+		public int value;
+
+		public string chipname;
+
+		[HideInInspector]
+		public GameObject chip_obj;
+	}
+}

+ 255 - 0
Assembly-CSharp/ChipStack.cs

@@ -0,0 +1,255 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ChipStack : MonoBehaviour
+{
+	public bool IsSplitBetStack
+	{
+		get
+		{
+			return this.m_IsSplitBetStack;
+		}
+	}
+
+	public bool ChipUpdateEnd { get; private set; }
+
+	public void UpdateChips()
+	{
+		this.ChipUpdateEnd = false;
+		this.m_IsStack = false;
+		long stackBet = this.m_StackBet;
+		if (!this.CheckStackBet() && BetSetUI.Instance.IsDoBet)
+		{
+			this.ChipUpdateEnd = true;
+			return;
+		}
+		if (!BetSetUI.Instance.IsDoBet)
+		{
+			this.ResetChips();
+			this.m_StackBet = 0L;
+			return;
+		}
+		this.m_NotNeedAnimation = (stackBet > this.m_StackBet);
+		if (this.m_NotNeedAnimation)
+		{
+			this.ResetChips();
+		}
+		this.m_StackDifference = this.m_StackBet - stackBet;
+		this.RefreshCoinAmounts();
+	}
+
+	private bool CheckStackBet()
+	{
+		long num = (!this.IsSplitBetStack) ? BjPlayer.Instance.CurrentBet : BjPlayer.Instance.SplitBet;
+		if (this.IsWinningStack && !this.IsEven && !this.IsSurrender)
+		{
+			if (this.IsBlackJack)
+			{
+				num = (long)Mathf.FloorToInt((float)num * 2.5f);
+			}
+			else
+			{
+				num *= 2L;
+			}
+			this.m_IsStack = true;
+			this.m_Stackline = 5;
+		}
+		else if (this.IsSurrender)
+		{
+			num = (long)Mathf.FloorToInt((float)(num / 2L));
+		}
+		if (num == this.m_StackBet)
+		{
+			return false;
+		}
+		this.m_StackBet = num;
+		return true;
+	}
+
+	private void RefreshCoinAmounts()
+	{
+		this.IsEven = false;
+		this.IsBlackJack = false;
+		this.IsSurrender = false;
+		long num = 0L;
+		int num2 = 0;
+		int num3 = 0;
+		bool flag = this.m_IsStack && this.m_ChipFallingHigh.Count > 0;
+		int num4 = (!this.m_IsStack) ? 0 : this.m_ChipStackList.Count;
+		PlayerHand playerHand = (!this.m_IsSplitBetStack) ? BjPlayer.Instance.standardHand : BjPlayer.Instance.splitHand;
+		int num5 = (!this.m_IsStack || !playerHand.IsDoubleDown) ? 1 : 2;
+		for (int i = 0; i < num5; i++)
+		{
+			num += this.m_StackDifference / (long)num5;
+			foreach (ChipManager.Chip chip in ChipManager.Instance.ChipList)
+			{
+				int num6 = Mathf.FloorToInt((float)(num / (long)chip.value));
+				for (int j = 0; j < num6; j++)
+				{
+					GameObject gameObject = UnityEngine.Object.Instantiate<GameObject>(chip.chip_obj);
+					gameObject.transform.SetParent(base.transform, false);
+					int num7 = this.m_ChipStackList.Count - num4;
+					int num8 = num7 / ChipManager.Instance.StackCount;
+					if ((num8 + 1 - num3) / 2 == this.m_Stackline)
+					{
+						this.m_Stackline -= 2;
+						num3 = num8;
+						num2 = num8 - (5 - this.m_Stackline);
+					}
+					int num9 = (!this.m_IsSplitBetStack) ? -1 : 1;
+					Vector3 zero = Vector3.zero;
+					zero.x = (float)(num8 - num2) / 2f * (float)num9 * ChipManager.Instance.ChipStackSpace.x;
+					zero.z = (float)((num8 - num2) % 2 + 5 - this.m_Stackline) * ChipManager.Instance.ChipStackSpace.z;
+					if (this.m_NotNeedAnimation)
+					{
+						zero.y = ChipManager.Instance.ChipStackSpace.y * (float)(num7 % ChipManager.Instance.StackCount);
+					}
+					else
+					{
+						zero.y = ChipManager.Instance.FallingLength + ChipManager.Instance.ChipSetSpace * (float)(num7 % ChipManager.Instance.StackCount);
+						if (flag && this.m_ChipFallingHigh.ContainsKey(num8))
+						{
+							zero.y += this.m_ChipFallingHigh[num8];
+						}
+						this.m_ChipMoveList.Add(gameObject);
+					}
+					gameObject.transform.localPosition = zero;
+					this.m_ChipStackList.Add(gameObject);
+				}
+				num %= (long)chip.value;
+			}
+		}
+		if (!this.m_NotNeedAnimation)
+		{
+			base.StartCoroutine(this.CoinFallDown());
+		}
+	}
+
+	private IEnumerator CoinFallDown()
+	{
+		float timer = 0f;
+		bool exist_chip = this.m_IsStack && this.m_ChipFallingHigh.Count > 0;
+		List<Vector3> start_pos = new List<Vector3>();
+		foreach (GameObject gameObject in this.m_ChipMoveList)
+		{
+			start_pos.Add(gameObject.transform.localPosition);
+		}
+		int chip_index = (!this.m_IsStack) ? (this.m_ChipStackList.Count - this.m_ChipMoveList.Count) : 0;
+		int part_count = this.m_ChipMoveList.Count / ChipManager.Instance.StackCount;
+		int index_remaind = (this.m_IsStack || chip_index <= 0) ? 0 : (chip_index % ChipManager.Instance.StackCount);
+		bool sound_play = false;
+		for (;;)
+		{
+			timer += Time.deltaTime;
+			bool move_end = true;
+			for (int i = 0; i < this.m_ChipMoveList.Count; i++)
+			{
+				float current_time = Mathf.Max(timer - (float)((i + index_remaind) / ChipManager.Instance.StackCount) * ChipManager.Instance.TimeOffset, 0f);
+				float num = KasaiUtility.SinRate01(current_time, ChipManager.Instance.FallingTime, false, false);
+				move_end = (num == 1f);
+				if (num == 0f)
+				{
+					break;
+				}
+				if (move_end && !sound_play)
+				{
+					GameMain.Instance.SoundMgr.PlaySe("casino_SE004.ogg", false);
+					sound_play = true;
+				}
+				Vector3 localPosition = this.m_ChipMoveList[i].transform.localPosition;
+				localPosition.y = ChipManager.Instance.ChipStackSpace.y * (float)((i + chip_index) % ChipManager.Instance.StackCount);
+				if (exist_chip && this.m_ChipFallingHigh.ContainsKey(i / ChipManager.Instance.StackCount))
+				{
+					localPosition.y += this.m_ChipFallingHigh[i / ChipManager.Instance.StackCount];
+				}
+				this.m_ChipMoveList[i].transform.localPosition = Vector3.Lerp(start_pos[i], localPosition, num);
+			}
+			if (move_end)
+			{
+				break;
+			}
+			yield return null;
+		}
+		this.ChipUpdateEnd = true;
+		int num2 = this.m_ChipStackList.Count / ChipManager.Instance.StackCount;
+		if (this.m_ChipStackList.Count % ChipManager.Instance.StackCount != 0)
+		{
+			num2++;
+		}
+		for (int j = 0; j < num2; j++)
+		{
+			int index = Mathf.Min((j + 1) * ChipManager.Instance.StackCount - 1, this.m_ChipStackList.Count - 1);
+			float value = this.m_ChipStackList[index].transform.localPosition.y + ChipManager.Instance.ChipStackSpace.y;
+			if (this.m_ChipFallingHigh.ContainsKey(j))
+			{
+				this.m_ChipFallingHigh[j] = value;
+			}
+			else
+			{
+				this.m_ChipFallingHigh.Add(j, value);
+			}
+		}
+		this.m_ChipMoveList.Clear();
+		ChipManager.Instance.StackEndAction();
+		yield break;
+		yield break;
+	}
+
+	public bool ContainsChip(GameObject chip)
+	{
+		return this.m_ChipStackList.Contains(chip);
+	}
+
+	public void ResetChips()
+	{
+		if (this.m_ChipStackList != null && this.m_ChipStackList.Count > 0)
+		{
+			foreach (GameObject obj in this.m_ChipStackList)
+			{
+				UnityEngine.Object.Destroy(obj);
+			}
+		}
+		this.m_ChipFallingHigh.Clear();
+		this.m_ChipStackList.Clear();
+		this.m_Stackline = 5;
+		this.m_IsStack = false;
+	}
+
+	private const int m_BaseStackLine = 5;
+
+	[SerializeField]
+	[Header("スプリット用かどうか")]
+	private bool m_IsSplitBetStack;
+
+	[HideInInspector]
+	public bool IsWinningStack;
+
+	[HideInInspector]
+	public bool IsSurrender;
+
+	[HideInInspector]
+	public bool IsBlackJack;
+
+	[HideInInspector]
+	public bool IsEven;
+
+	private long m_StackBet;
+
+	private long m_StackDifference;
+
+	private List<GameObject> m_ChipStackList = new List<GameObject>();
+
+	private List<GameObject> m_ChipMoveList = new List<GameObject>();
+
+	private bool m_NotNeedAnimation;
+
+	private bool m_IsStack;
+
+	private bool m_ChipUp;
+
+	private int m_Stackline = 5;
+
+	private Dictionary<int, float> m_ChipFallingHigh = new Dictionary<int, float>();
+}

+ 77 - 0
Assembly-CSharp/ChuBlipManager.cs

@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ChuBlipManager : MonoBehaviour
+{
+	public Dictionary<string, OnaholeCharaManager> OnahoCharaDic
+	{
+		get
+		{
+			return this.onahoCharaDic;
+		}
+	}
+
+	public OnaholeEstrusMode EstrusMode
+	{
+		get
+		{
+			return this.estrusMode;
+		}
+	}
+
+	private YotogiManager yotogiMgr;
+
+	private YotogiPlayManagerWithChubLip yotogiPlayMgr;
+
+	private ChuBlipManager.ControlMode mode = ChuBlipManager.ControlMode.AUTO;
+
+	private OnaholeMotion.MODE motionMode = OnaholeMotion.MODE.WAIT;
+
+	private float touchCount;
+
+	private string touchPointStr = string.Empty;
+
+	private OnaholeChuBlipDevice holeDevice;
+
+	private AutoPiston autoPiston;
+
+	private OnaholeEstrusMode estrusMode;
+
+	private FinishSyncrho finishSyncrho;
+
+	private GameObject rayHitObj;
+
+	private float dot;
+
+	private MaidTouch.POINT sexMode;
+
+	private MaidTouch.POINT reserveSexMode;
+
+	[SerializeField]
+	private float insertDepth;
+
+	private bool insertLerpFlag;
+
+	public bool debugMode;
+
+	public bool charaEnable;
+
+	private string setOsawariText = string.Empty;
+
+	private float osawariWait = 1f;
+
+	private Dictionary<string, OnaholeCharaManager> onahoCharaDic = new Dictionary<string, OnaholeCharaManager>();
+
+	private Dictionary<string, List<string>> syaseiPointExpDic = new Dictionary<string, List<string>>();
+
+	private const float autoPistonSpeedRatio = 10f;
+
+	private const float in_or_out = 0.5f;
+
+	private enum ControlMode
+	{
+		DEVICE,
+		AUTO
+	}
+}

+ 239 - 0
Assembly-CSharp/CircleCommandUI.cs

@@ -0,0 +1,239 @@
+using System;
+using UnityEngine;
+using UnityEngine.Events;
+
+public class CircleCommandUI : MonoBehaviour
+{
+	public bool isClockwise
+	{
+		get
+		{
+			return this.m_IsClockwise;
+		}
+		set
+		{
+			this.m_IsClockwise = value;
+			this.UpdateItemPosition();
+		}
+	}
+
+	public uGUIListViewer listViewer
+	{
+		get
+		{
+			return this.m_ListViewer;
+		}
+	}
+
+	public float circleRadius
+	{
+		get
+		{
+			return this.m_CircleRadius;
+		}
+		set
+		{
+			this.m_CircleRadius = value;
+			this.UpdateItemPosition();
+		}
+	}
+
+	public float offsetAngle
+	{
+		get
+		{
+			return this.m_OffsetAngle;
+		}
+		set
+		{
+			this.m_OffsetAngle = value;
+			this.UpdateItemPosition();
+		}
+	}
+
+	public CircleCommandUI.OnSelect onSelect
+	{
+		get
+		{
+			return this.m_OnSelect;
+		}
+	}
+
+	public CircleCommandUI.OnDeselect onDeselect
+	{
+		get
+		{
+			return this.m_OnDeselect;
+		}
+	}
+
+	public CircleCommandUI.OnDecide onDecide
+	{
+		get
+		{
+			return this.m_OnDecide;
+		}
+	}
+
+	public Func<bool> funcDecide { get; set; }
+
+	public GameObject lastSelectItem
+	{
+		get
+		{
+			return this.m_LastSelectItem;
+		}
+		private set
+		{
+			this.m_LastSelectItem = value;
+		}
+	}
+
+	public GameObject nowSelectItem
+	{
+		get
+		{
+			return this.m_NowSelectItem;
+		}
+		private set
+		{
+			this.m_NowSelectItem = value;
+		}
+	}
+
+	private void OnValidate()
+	{
+		if (!Application.isPlaying)
+		{
+			return;
+		}
+		if (this.isApplicationQuit)
+		{
+			return;
+		}
+		this.UpdateItemPosition();
+	}
+
+	private void OnApplicationQuit()
+	{
+		this.isApplicationQuit = true;
+	}
+
+	public void Show<T>(int itemCount, Action<int, T> callbackSetUp = null) where T : Component
+	{
+		this.m_ListViewer.Show<T>(itemCount, callbackSetUp);
+		this.UpdateItemPosition();
+	}
+
+	private void UpdateItemPosition()
+	{
+		GameObject[] itemArray = this.m_ListViewer.ItemArray;
+		if (itemArray == null)
+		{
+			return;
+		}
+		Transform parentItemArea = this.m_ListViewer.parentItemArea;
+		float num = 360f / (float)itemArray.Length;
+		float num2 = this.offsetAngle;
+		if (this.isClockwise)
+		{
+			num *= -1f;
+		}
+		foreach (GameObject gameObject in itemArray)
+		{
+			Transform transform = gameObject.transform;
+			Vector3 vector = Vector3.zero;
+			vector.x = Mathf.Cos(num2 * 0.0174532924f);
+			vector.y = Mathf.Sin(num2 * 0.0174532924f) * 0.75f;
+			vector.Normalize();
+			vector *= this.circleRadius;
+			transform.localPosition = vector;
+			num2 += num;
+		}
+	}
+
+	private void Update()
+	{
+		if (this.funcDecide == null)
+		{
+			return;
+		}
+		if (this.funcDecide())
+		{
+			this.onDecide.Invoke(this.nowSelectItem);
+			this.nowSelectItem = null;
+			this.lastSelectItem = null;
+		}
+	}
+
+	public void UpdateSelect(Vector2 axis)
+	{
+		GameObject[] itemArray = this.m_ListViewer.ItemArray;
+		if (itemArray == null)
+		{
+			return;
+		}
+		Transform parentItemArea = this.m_ListViewer.parentItemArea;
+		GameObject gameObject = null;
+		Vector2 vector = Vector2.one * float.PositiveInfinity;
+		foreach (GameObject gameObject2 in itemArray)
+		{
+			Vector2 a = gameObject2.transform.localPosition;
+			Vector2 vector2 = a - axis;
+			if (vector2.sqrMagnitude < vector.sqrMagnitude)
+			{
+				vector = vector2;
+				gameObject = gameObject2;
+			}
+		}
+		if (this.nowSelectItem != gameObject)
+		{
+			this.lastSelectItem = this.nowSelectItem;
+			this.nowSelectItem = gameObject;
+			this.onDeselect.Invoke(this.lastSelectItem);
+			this.onSelect.Invoke(this.nowSelectItem);
+		}
+	}
+
+	[SerializeField]
+	private bool m_IsClockwise;
+
+	[SerializeField]
+	private uGUIListViewer m_ListViewer;
+
+	[SerializeField]
+	private float m_CircleRadius;
+
+	[SerializeField]
+	private float m_OffsetAngle;
+
+	[SerializeField]
+	private CircleCommandUI.OnSelect m_OnSelect = new CircleCommandUI.OnSelect();
+
+	[SerializeField]
+	private CircleCommandUI.OnDeselect m_OnDeselect = new CircleCommandUI.OnDeselect();
+
+	[SerializeField]
+	private CircleCommandUI.OnDecide m_OnDecide = new CircleCommandUI.OnDecide();
+
+	private GameObject m_LastSelectItem;
+
+	private GameObject m_NowSelectItem;
+
+	private bool isApplicationQuit;
+
+	[Serializable]
+	public class OnSelect : UnityEvent<GameObject>
+	{
+	}
+
+	[Serializable]
+	public class OnDeselect : UnityEvent<GameObject>
+	{
+	}
+
+	[Serializable]
+	public class OnDecide : UnityEvent<GameObject>
+	{
+	}
+}

+ 70 - 0
Assembly-CSharp/CircleListSelectUI.cs

@@ -0,0 +1,70 @@
+using System;
+using UnityEngine;
+
+public class CircleListSelectUI : MonoBehaviour
+{
+	public AVRController controller { get; set; }
+
+	public CircleCommandUI circleCommandUI
+	{
+		get
+		{
+			return this.m_CircleCommandUI;
+		}
+	}
+
+	private void Start()
+	{
+		CircleCommandUI circleCommandUI = this.m_CircleCommandUI;
+		circleCommandUI.funcDecide = (Func<bool>)Delegate.Combine(circleCommandUI.funcDecide, new Func<bool>(this.CallbackDecide));
+	}
+
+	private void Update()
+	{
+		if (this.controller == null)
+		{
+			return;
+		}
+		AVRControllerButtons vrcontrollerButtons = this.controller.VRControllerButtons;
+		Vector2 axis = vrcontrollerButtons.GetAxis();
+		if (axis.sqrMagnitude >= 0.2f)
+		{
+			this.m_CircleCommandUI.UpdateSelect(axis);
+			this.SetActiveUI(true);
+		}
+		if (vrcontrollerButtons.GetPressDown(AVRControllerButtons.BTN.VIRTUAL_R_CLICK))
+		{
+			this.SetActiveUI(false);
+		}
+	}
+
+	private void SetActiveUI(GameObject UI, bool active)
+	{
+		if (UI.activeSelf && !active)
+		{
+			UI.SetActive(false);
+		}
+		else if (!UI.activeSelf && active)
+		{
+			UI.SetActive(true);
+		}
+	}
+
+	public void SetActiveUI(bool active)
+	{
+		this.SetActiveUI(this.m_CircleCommandUI.gameObject, active);
+	}
+
+	private bool CallbackDecide()
+	{
+		if (this.controller == null)
+		{
+			return false;
+		}
+		AVRControllerButtons vrcontrollerButtons = this.controller.VRControllerButtons;
+		return vrcontrollerButtons.GetPressDown(AVRControllerButtons.BTN.VIRTUAL_L_CLICK);
+	}
+
+	[SerializeField]
+	private CircleCommandUI m_CircleCommandUI;
+}

+ 440 - 0
Assembly-CSharp/ClassChangePanel.cs

@@ -0,0 +1,440 @@
+using System;
+using System.Collections.Generic;
+using MaidStatus;
+using MaidStatus.CsvData;
+using UnityEngine;
+using wf;
+using Yotogis;
+
+public class ClassChangePanel : MonoBehaviour
+{
+	public static void CreateClassText()
+	{
+		if (ClassChangePanel.job_class_special_skill_list_.Count != 0)
+		{
+			return;
+		}
+		foreach (JobClass.Data data in JobClass.GetAllDatas(false))
+		{
+			ClassChangePanel.job_class_special_skill_list_.Add(data.id, new SortedList<int, List<Skill.Data>>());
+		}
+	}
+
+	public void Awake()
+	{
+		if (this.job_class_unit_dic_.Count != 0)
+		{
+			return;
+		}
+		this.class_type_tab_panel_ = UTY.GetChildObject(base.gameObject, "ClassViewer/TabButton", false).GetComponent<UIWFTabPanel>();
+		this.job_class_button_ = UTY.GetChildObject(base.gameObject, "ClassViewer/TabButton/MaidClass", false).GetComponent<UIWFTabButton>();
+		this.info_panel_item_.class_name = UTY.GetChildObject(base.gameObject, "ClassViewer/Common/ClassDescription/ClassName", false).GetComponent<UILabel>();
+		this.info_panel_item_.class_level = UTY.GetChildObject(base.gameObject, "ClassViewer/Common/ClassDescription/LevelGroup/Level/Value", false).GetComponent<UILabel>();
+		this.info_panel_item_.current_exp = UTY.GetChildObject(base.gameObject, "ClassViewer/Common/ClassDescription/LevelGroup/Exp/Value", false).GetComponent<UILabel>();
+		this.info_panel_item_.next_exp = UTY.GetChildObject(base.gameObject, "ClassViewer/Common/ClassDescription/LevelGroup/RequiredExp/Value", false).GetComponent<UILabel>();
+		this.info_panel_item_.info_text = UTY.GetChildObject(base.gameObject, "ClassViewer/Common/ClassDescription/Description", false).GetComponent<UILabel>();
+		this.info_panel_item_.special_skill = new List<UILabel>();
+		GameObject childObject = UTY.GetChildObject(base.gameObject, "ClassViewer/Yotogi/SkillList/Contents/UnitParent", false);
+		int childCount = childObject.transform.childCount;
+		for (int i = 0; i < childCount; i++)
+		{
+			this.info_panel_item_.special_skill.Add(childObject.transform.GetChild(i).gameObject.GetComponent<UILabel>());
+		}
+		this.jobUIs = new ClassChangePanel.UISet();
+		this.jobUIs.selectButton = UTY.GetChildObject(this.class_type_tab_panel_.gameObject, "MaidClass", false).GetComponent<UIWFTabButton>();
+		this.jobUIs.classListObject = UTY.GetChildObject(base.gameObject, "ClassViewer/Common/ClassListMaid", false);
+		this.jobUIs.itemGrid = UTY.GetChildObject(this.jobUIs.classListObject, "Contents/UnitParent", false).GetComponent<UIGrid>();
+		this.jobUIs.scrollView = UTY.GetChildObject(this.jobUIs.classListObject, "Contents", false).GetComponent<UIScrollView>();
+		this.jobUIs.tabPanel = this.jobUIs.classListObject.GetComponentInChildren<UIWFTabPanel>();
+		this.jobUIs.classListObject.SetActive(true);
+		List<JobClass.Data> allDatas = JobClass.GetAllDatas(true);
+		allDatas.Sort();
+		foreach (JobClass.Data data in allDatas)
+		{
+			ClassUnit component = Utility.CreatePrefab(this.jobUIs.itemGrid.gameObject, "SceneCompetitiveShow/Prefab/ClassUnit", true).GetComponent<ClassUnit>();
+			component.SetJobClassType(data.id);
+			component.SetClassChangePanel(this);
+			component.SetOnSelectEvent(new Action<ClassUnit>(this.OnSelectClassUnitEvent));
+			UIEventTrigger[] componentsInChildren = component.GetComponentsInChildren<UIEventTrigger>();
+			EventDelegate eventDelegate = new EventDelegate(this, "OnUnitMouseHoverIn");
+			eventDelegate.parameters[0].value = component;
+			foreach (UIEventTrigger uieventTrigger in componentsInChildren)
+			{
+				EventDelegate.Add(uieventTrigger.onHoverOver, eventDelegate);
+				EventDelegate.Add(uieventTrigger.onHoverOut, new EventDelegate.Callback(this.OnUnitMouseHoverOut));
+			}
+			this.job_class_unit_dic_.Add(data.id, component);
+		}
+		this.jobUIs.tabPanel.UpdateChildren();
+		this.jobUIs.itemGrid.repositionNow = true;
+		EventDelegate.Add(this.jobUIs.selectButton.onSelect, new EventDelegate.Callback(this.OnSelectType));
+		this.jobUIs.classListObject.SetActive(false);
+		this.yotogiUIs = new ClassChangePanel.UISet();
+		this.yotogiUIs.selectButton = UTY.GetChildObject(this.class_type_tab_panel_.gameObject, "YotogiClass", false).GetComponent<UIWFTabButton>();
+		this.yotogiUIs.classListObject = UTY.GetChildObject(base.gameObject, "ClassViewer/Common/ClassListYotogi", false);
+		this.yotogiUIs.itemGrid = UTY.GetChildObject(this.yotogiUIs.classListObject, "Contents/UnitParent", false).GetComponent<UIGrid>();
+		this.yotogiUIs.scrollView = UTY.GetChildObject(this.yotogiUIs.classListObject, "Contents", false).GetComponent<UIScrollView>();
+		this.yotogiUIs.tabPanel = this.yotogiUIs.classListObject.GetComponentInChildren<UIWFTabPanel>();
+		this.yotogiUIs.classListObject.SetActive(true);
+		foreach (YotogiClass.Data data2 in YotogiClass.GetAllDatas(true))
+		{
+			ClassUnit component2 = Utility.CreatePrefab(this.yotogiUIs.itemGrid.gameObject, "SceneCompetitiveShow/Prefab/ClassUnit", true).GetComponent<ClassUnit>();
+			component2.SetYotogiClassType(data2.id);
+			component2.SetClassChangePanel(this);
+			component2.SetOnSelectEvent(new Action<ClassUnit>(this.OnSelectClassUnitEvent));
+			UIEventTrigger[] componentsInChildren2 = component2.GetComponentsInChildren<UIEventTrigger>();
+			EventDelegate eventDelegate2 = new EventDelegate(this, "OnUnitMouseHoverIn");
+			eventDelegate2.parameters[0].value = component2;
+			foreach (UIEventTrigger uieventTrigger2 in componentsInChildren2)
+			{
+				EventDelegate.Add(uieventTrigger2.onHoverOver, eventDelegate2);
+				EventDelegate.Add(uieventTrigger2.onHoverOut, new EventDelegate.Callback(this.OnUnitMouseHoverOut));
+			}
+			this.yotogi_class_unit_dic_.Add(data2.id, component2);
+		}
+		this.yotogiUIs.tabPanel.UpdateChildren();
+		this.yotogiUIs.itemGrid.repositionNow = true;
+		EventDelegate.Add(this.yotogiUIs.selectButton.onSelect, new EventDelegate.Callback(this.OnSelectType));
+		this.yotogiUIs.classListObject.SetActive(false);
+		ClassChangePanel.CreateClassText();
+		this.class_type_tab_panel_.gameObject.SetActive(false);
+	}
+
+	public void OnEnable()
+	{
+		this.jobUIs.Reset();
+		this.yotogiUIs.Reset();
+	}
+
+	public void SetTargetMaid(Maid maid)
+	{
+		if (this.job_class_unit_dic_.Count == 0)
+		{
+			bool activeSelf = base.gameObject.activeSelf;
+			base.gameObject.SetActive(true);
+			this.Awake();
+			base.gameObject.SetActive(activeSelf);
+		}
+		this.maid_ = maid;
+		Status status = this.maid_.status;
+		foreach (KeyValuePair<int, ClassUnit> keyValuePair in this.job_class_unit_dic_)
+		{
+			keyValuePair.Value.UpdateMaidData(this.maid_);
+		}
+		this.jobUIs.tabPanel.ResetSelect();
+		foreach (KeyValuePair<int, ClassUnit> keyValuePair2 in this.job_class_unit_dic_)
+		{
+			ClassUnit value = keyValuePair2.Value;
+			value.button.SetSelect(false);
+			value.button.isEnabled = status.jobClass.Contains(value.maid_class_type);
+			JobClass.Data data = JobClass.GetData(value.maid_class_type);
+			if (MaidManagement.compatibilityMode)
+			{
+				value.gameObject.SetActive(data.classType != AbstractClassData.ClassType.New);
+			}
+			else
+			{
+				value.gameObject.SetActive(data.classType != AbstractClassData.ClassType.Old);
+			}
+			if (value.gameObject.activeSelf)
+			{
+				value.gameObject.SetActive(data.learnConditions.isLearnPossiblePersonal(maid.status.personal));
+			}
+		}
+		GameObject gameObject = this.yotogiUIs.itemGrid.gameObject;
+		while (gameObject.transform.parent != null && !gameObject.transform.gameObject.activeInHierarchy)
+		{
+			gameObject = ((!(gameObject.transform.parent != null)) ? null : gameObject.transform.parent.gameObject);
+		}
+		if (gameObject != null)
+		{
+			gameObject.SetActive(true);
+		}
+		this.jobUIs.Reset();
+		int num = (status.selectedJobClass == null) ? int.MinValue : status.selectedJobClass.data.id;
+		if (num != -2147483648)
+		{
+			this.jobUIs.tabPanel.Select(this.job_class_unit_dic_[num].button);
+			if (this.jobUIs.classListObject.activeSelf)
+			{
+				this.job_class_unit_dic_[num].UpdateInfo();
+			}
+		}
+		foreach (KeyValuePair<int, ClassUnit> keyValuePair3 in this.yotogi_class_unit_dic_)
+		{
+			keyValuePair3.Value.UpdateMaidData(this.maid_);
+		}
+		this.yotogiUIs.tabPanel.ResetSelect();
+		foreach (KeyValuePair<int, ClassUnit> keyValuePair4 in this.yotogi_class_unit_dic_)
+		{
+			ClassUnit value2 = keyValuePair4.Value;
+			value2.button.SetSelect(false);
+			value2.button.isEnabled = status.yotogiClass.Contains(value2.yotogi_class_type);
+			YotogiClass.Data data2 = YotogiClass.GetData(value2.yotogi_class_type);
+			value2.gameObject.SetActive(data2.learnConditions.isLearnPossiblePersonal(maid.status.personal));
+		}
+		gameObject = this.yotogiUIs.itemGrid.gameObject;
+		while (gameObject.transform.parent != null && !gameObject.transform.gameObject.activeInHierarchy)
+		{
+			gameObject = ((!(gameObject.transform.parent != null)) ? null : gameObject.transform.parent.gameObject);
+		}
+		if (gameObject != null)
+		{
+			gameObject.SetActive(true);
+		}
+		this.yotogiUIs.Reset();
+		num = ((status.selectedYotogiClass == null) ? int.MinValue : status.selectedYotogiClass.data.id);
+		if (num != -2147483648)
+		{
+			this.yotogiUIs.tabPanel.Select(this.yotogi_class_unit_dic_[num].button);
+			if (this.yotogiUIs.classListObject.activeSelf)
+			{
+				this.yotogi_class_unit_dic_[num].UpdateInfo();
+			}
+		}
+		if (this.class_type_tab_panel_.GetSelectButtonObject() == null)
+		{
+			this.class_type_tab_panel_.Select(this.job_class_button_);
+		}
+	}
+
+	private void OnSelectType()
+	{
+		if (!UIWFSelectButton.current.isSelected)
+		{
+			return;
+		}
+		this.jobUIs.classListObject.SetActive(true);
+		this.yotogiUIs.classListObject.SetActive(false);
+		this.jobUIs.Reset();
+		if (this.maid_ != null && this.maid_.status.selectedJobClass != null)
+		{
+			this.job_class_unit_dic_[this.maid_.status.selectedJobClass.data.id].UpdateInfo();
+		}
+	}
+
+	public void SetInfoData(int maid_class_type)
+	{
+		if (this.maid_ == null)
+		{
+			return;
+		}
+		JobClass.Data data = JobClass.GetData(maid_class_type);
+		ClassData<JobClass.Data> classData = this.maid_.status.jobClass.Get(maid_class_type);
+		this.info_panel_item_.class_name.text = data.drawName;
+		this.info_panel_item_.info_text.text = data.explanatoryText;
+		if (classData != null)
+		{
+			this.info_panel_item_.class_level.text = classData.level.ToString();
+			this.info_panel_item_.current_exp.text = classData.cur_exp.ToString();
+			this.info_panel_item_.next_exp.text = classData.next_exp.ToString();
+		}
+		else
+		{
+			this.info_panel_item_.class_level.text = "-";
+			this.info_panel_item_.current_exp.text = "-";
+			this.info_panel_item_.next_exp.text = "-";
+		}
+		string[] array = new string[this.info_panel_item_.special_skill.Count];
+		int num = 0;
+		foreach (KeyValuePair<int, List<Skill.Data>> keyValuePair in ClassChangePanel.job_class_special_skill_list_[maid_class_type])
+		{
+			foreach (Skill.Data data2 in keyValuePair.Value)
+			{
+				if (num < array.Length)
+				{
+					array[num++] = data2.name;
+					if (array.Length == num)
+					{
+						array[num - 1] = "etc...";
+					}
+				}
+				if (array.Length == num)
+				{
+					break;
+				}
+			}
+			if (array.Length == num)
+			{
+				break;
+			}
+		}
+		for (int i = 0; i < array.Length; i++)
+		{
+			if (string.IsNullOrEmpty(array[i]))
+			{
+				this.info_panel_item_.special_skill[i].gameObject.SetActive(false);
+			}
+			else
+			{
+				this.info_panel_item_.special_skill[i].gameObject.SetActive(true);
+				this.info_panel_item_.special_skill[i].text = array[i];
+			}
+		}
+	}
+
+	public void SetInfoDataYotogi(int yotogi_class_type)
+	{
+		if (this.maid_ == null)
+		{
+			return;
+		}
+		YotogiClass.Data data = YotogiClass.GetData(yotogi_class_type);
+		ClassData<YotogiClass.Data> classData = this.maid_.status.yotogiClass.Get(yotogi_class_type);
+		this.info_panel_item_.class_name.text = data.drawName;
+		this.info_panel_item_.info_text.text = data.explanatoryText;
+		if (classData != null)
+		{
+			this.info_panel_item_.class_level.text = classData.level.ToString();
+			this.info_panel_item_.current_exp.text = classData.cur_exp.ToString();
+			this.info_panel_item_.next_exp.text = classData.next_exp.ToString();
+		}
+		else
+		{
+			this.info_panel_item_.class_level.text = "-";
+			this.info_panel_item_.current_exp.text = "-";
+			this.info_panel_item_.next_exp.text = "-";
+		}
+		string[] array = new string[this.info_panel_item_.special_skill.Count];
+		int num = 0;
+		foreach (KeyValuePair<int, List<Skill.Data>> keyValuePair in YotogiClass.GetLearnSkillList(yotogi_class_type))
+		{
+			foreach (Skill.Data data2 in keyValuePair.Value)
+			{
+				if (num < array.Length)
+				{
+					array[num++] = data2.name;
+					if (array.Length == num)
+					{
+						array[num - 1] = "etc...";
+					}
+				}
+				if (array.Length == num)
+				{
+					break;
+				}
+			}
+			if (array.Length == num)
+			{
+				break;
+			}
+		}
+		for (int i = 0; i < array.Length; i++)
+		{
+			if (string.IsNullOrEmpty(array[i]))
+			{
+				this.info_panel_item_.special_skill[i].gameObject.SetActive(false);
+			}
+			else
+			{
+				this.info_panel_item_.special_skill[i].gameObject.SetActive(true);
+				this.info_panel_item_.special_skill[i].text = array[i];
+			}
+		}
+	}
+
+	private void OnSelectClassUnitEvent(ClassUnit unit)
+	{
+		if (this.maid_ == null)
+		{
+			return;
+		}
+		if (unit.maid_class_type != -2147483648)
+		{
+			if (this.maid_.status.selectedJobClass.data.id != unit.maid_class_type)
+			{
+				this.maid_.status.ChangeJobClass(unit.maid_class_type);
+			}
+		}
+		else if (unit.yotogi_class_type != -2147483648 && this.maid_.status.selectedYotogiClass.data.id != unit.yotogi_class_type)
+		{
+			this.maid_.status.ChangeYotogiClass(unit.yotogi_class_type);
+		}
+	}
+
+	private void OnUnitMouseHoverIn(ClassUnit class_unit)
+	{
+		class_unit.UpdateInfo();
+	}
+
+	private void OnUnitMouseHoverOut()
+	{
+		if (this.jobUIs.classListObject.activeSelf)
+		{
+			if (this.maid_ != null && this.maid_.status.selectedJobClass != null && this.job_class_unit_dic_.ContainsKey(this.maid_.status.selectedJobClass.data.id))
+			{
+				this.job_class_unit_dic_[this.maid_.status.selectedJobClass.data.id].UpdateInfo();
+			}
+		}
+		else if (this.maid_ != null && this.maid_.status.selectedYotogiClass != null && this.yotogi_class_unit_dic_.ContainsKey(this.maid_.status.selectedYotogiClass.data.id))
+		{
+			this.yotogi_class_unit_dic_[this.maid_.status.selectedYotogiClass.data.id].UpdateInfo();
+		}
+	}
+
+	public static Dictionary<int, SortedList<int, List<Skill.Data>>> job_class_special_skill_list
+	{
+		get
+		{
+			return ClassChangePanel.job_class_special_skill_list_;
+		}
+	}
+
+	private static Dictionary<int, SortedList<int, List<Skill.Data>>> job_class_special_skill_list_ = new Dictionary<int, SortedList<int, List<Skill.Data>>>();
+
+	private Maid maid_;
+
+	private UIWFTabPanel class_type_tab_panel_;
+
+	private UIWFTabButton job_class_button_;
+
+	private ClassChangePanel.UISet yotogiUIs;
+
+	private ClassChangePanel.UISet jobUIs;
+
+	private Dictionary<int, ClassUnit> job_class_unit_dic_ = new Dictionary<int, ClassUnit>();
+
+	private Dictionary<int, ClassUnit> yotogi_class_unit_dic_ = new Dictionary<int, ClassUnit>();
+
+	private ClassChangePanel.InfoPanelItem info_panel_item_ = default(ClassChangePanel.InfoPanelItem);
+
+	private struct InfoPanelItem
+	{
+		public UILabel class_name;
+
+		public UILabel class_level;
+
+		public UILabel current_exp;
+
+		public UILabel next_exp;
+
+		public UILabel info_text;
+
+		public List<UILabel> special_skill;
+	}
+
+	private class UISet
+	{
+		public void Reset()
+		{
+			if (this.itemGrid != null)
+			{
+				Utility.ResetNGUI(this.itemGrid);
+			}
+			if (this.scrollView)
+			{
+				Utility.ResetNGUI(this.scrollView);
+			}
+		}
+
+		public GameObject classListObject;
+
+		public UIWFTabButton selectButton;
+
+		public UIGrid itemGrid;
+
+		public UIWFTabPanel tabPanel;
+
+		public UIScrollView scrollView;
+	}
+}

+ 139 - 0
Assembly-CSharp/ClassUnit.cs

@@ -0,0 +1,139 @@
+using System;
+using MaidStatus;
+using UnityEngine;
+
+public class ClassUnit : MonoBehaviour
+{
+	public void Awake()
+	{
+		this.button_ = base.GetComponentInChildren<UIWFTabButton>();
+		this.class_name_ = UTY.GetChildObject(base.gameObject, "ClassName", false).GetComponent<UILabel>();
+		this.class_level_ = UTY.GetChildObject(base.gameObject, "Level/Value", false).GetComponent<UILabel>();
+		EventDelegate.Add(this.button_.onSelect, new EventDelegate.Callback(this.OnSelect));
+		this.job_class_type_ = (this.yotogi_class_type_ = int.MinValue);
+	}
+
+	public void SetOnSelectEvent(Action<ClassUnit> event_delgate)
+	{
+		this.select_event_ = event_delgate;
+	}
+
+	public void SetClassChangePanel(ClassChangePanel class_change_panel)
+	{
+		this.class_change_panel_ = class_change_panel;
+	}
+
+	public void UpdateMaidData(Maid maid)
+	{
+		if (this.job_class_type_ != -2147483648)
+		{
+			if (maid.status.jobClass.Contains(this.job_class_type_))
+			{
+				ClassData<JobClass.Data> classData = maid.status.jobClass.Get(this.job_class_type_);
+				this.class_level_.text = classData.level.ToString();
+				this.class_level_.transform.parent.gameObject.SetActive(true);
+			}
+			else
+			{
+				this.class_level_.transform.parent.gameObject.SetActive(false);
+			}
+		}
+		else if (this.yotogi_class_type_ != -2147483648)
+		{
+			if (maid.status.yotogiClass.Contains(this.yotogi_class_type_))
+			{
+				ClassData<YotogiClass.Data> classData2 = maid.status.yotogiClass.Get(this.yotogi_class_type_);
+				this.class_level_.text = classData2.level.ToString();
+				this.class_level_.transform.parent.gameObject.SetActive(true);
+			}
+			else
+			{
+				this.class_level_.transform.parent.gameObject.SetActive(false);
+			}
+		}
+	}
+
+	public void SetJobClassType(int class_type)
+	{
+		this.yotogi_class_type_ = int.MinValue;
+		this.job_class_type_ = class_type;
+		this.class_name_.text = JobClass.GetData(class_type).drawName;
+		this.class_level_.text = "0";
+	}
+
+	public void SetYotogiClassType(int class_type)
+	{
+		this.job_class_type_ = int.MinValue;
+		this.yotogi_class_type_ = class_type;
+		this.class_name_.text = YotogiClass.GetData(class_type).drawName;
+		this.class_level_.text = "0";
+	}
+
+	public void UpdateInfo()
+	{
+		if (this.job_class_type_ != -2147483648)
+		{
+			this.class_change_panel_.SetInfoData(this.job_class_type_);
+		}
+		else if (this.yotogi_class_type_ != -2147483648)
+		{
+			this.class_change_panel_.SetInfoDataYotogi(this.yotogi_class_type_);
+		}
+	}
+
+	private void OnSelect()
+	{
+		if (this.select_event_ != null && this.button_.isSelected)
+		{
+			this.select_event_(this);
+		}
+	}
+
+	public int maid_class_type
+	{
+		get
+		{
+			return this.job_class_type_;
+		}
+	}
+
+	public int yotogi_class_type
+	{
+		get
+		{
+			return this.yotogi_class_type_;
+		}
+	}
+
+	public UIWFTabButton button
+	{
+		get
+		{
+			return this.button_;
+		}
+	}
+
+	public UIWFTabPanel tab_panel
+	{
+		get
+		{
+			return this.tab_panel_;
+		}
+	}
+
+	private Action<ClassUnit> select_event_;
+
+	private UIWFTabPanel tab_panel_;
+
+	private UIWFTabButton button_;
+
+	private UILabel class_name_;
+
+	private UILabel class_level_;
+
+	private int job_class_type_;
+
+	private int yotogi_class_type_;
+
+	private ClassChangePanel class_change_panel_;
+}

+ 12 - 0
Assembly-CSharp/ClickedEventArgs.cs

@@ -0,0 +1,12 @@
+using System;
+
+public struct ClickedEventArgs
+{
+	public uint controllerIndex;
+
+	public uint flags;
+
+	public float padX;
+
+	public float padY;
+}

+ 3 - 0
Assembly-CSharp/ClickedEventHandler.cs

@@ -0,0 +1,3 @@
+using System;
+
+public delegate void ClickedEventHandler(object sender, ClickedEventArgs e);

+ 36 - 0
Assembly-CSharp/ClipboardHelper.cs

@@ -0,0 +1,36 @@
+using System;
+using System.Reflection;
+using UnityEngine;
+
+public class ClipboardHelper
+{
+	private static PropertyInfo GetSystemCopyBufferProperty()
+	{
+		if (ClipboardHelper.m_systemCopyBufferProperty == null)
+		{
+			Type typeFromHandle = typeof(GUIUtility);
+			ClipboardHelper.m_systemCopyBufferProperty = typeFromHandle.GetProperty("systemCopyBuffer", BindingFlags.Static | BindingFlags.NonPublic);
+			if (ClipboardHelper.m_systemCopyBufferProperty == null)
+			{
+				throw new Exception("Can't access internal member 'GUIUtility.systemCopyBuffer' it may have been removed / renamed");
+			}
+		}
+		return ClipboardHelper.m_systemCopyBufferProperty;
+	}
+
+	public static string clipBoard
+	{
+		get
+		{
+			PropertyInfo systemCopyBufferProperty = ClipboardHelper.GetSystemCopyBufferProperty();
+			return (string)systemCopyBufferProperty.GetValue(null, null);
+		}
+		set
+		{
+			PropertyInfo systemCopyBufferProperty = ClipboardHelper.GetSystemCopyBufferProperty();
+			systemCopyBufferProperty.SetValue(null, value, null);
+		}
+	}
+
+	private static PropertyInfo m_systemCopyBufferProperty;
+}

+ 25 - 0
Assembly-CSharp/ColliderEvent.cs

@@ -0,0 +1,25 @@
+using System;
+using UnityEngine;
+
+public class ColliderEvent : MonoBehaviour
+{
+	private void OnMouseDown()
+	{
+		if (this.onMouseDown != null)
+		{
+			this.onMouseDown();
+		}
+	}
+
+	private void OnMouseUp()
+	{
+		if (this.onMouseUp != null)
+		{
+			this.onMouseUp();
+		}
+	}
+
+	public Action onMouseDown;
+
+	public Action onMouseUp;
+}

+ 455 - 0
Assembly-CSharp/ColorPaletteManager.cs

@@ -0,0 +1,455 @@
+using System;
+using System.Collections.Generic;
+using MaidStatus;
+using UnityEngine;
+using wf;
+
+public class ColorPaletteManager : EmptyWindow
+{
+	private EyePartsTab selectEyeType
+	{
+		get
+		{
+			return this.maid.status.eyePartsTab;
+		}
+		set
+		{
+			this.maid.status.eyePartsTab = value;
+		}
+	}
+
+	public override void Awake()
+	{
+		base.Awake();
+		this.init_pos_ = this.resetWindowPos;
+		this.uiManager.onChangeValue = new Action<ColorPaletteUIManager>(this.OnChangeUIValue);
+		this.categoryTabPanel.Start();
+		UIWFTabButton[] componentsInChildren = this.categoryTabPanel.GetComponentsInChildren<UIWFTabButton>(false);
+		foreach (UIWFTabButton uiwftabButton in componentsInChildren)
+		{
+			EventDelegate.Add(uiwftabButton.onSelect, new EventDelegate.Callback(this.OnSelectCategory));
+		}
+		this.eyeTypeTabPanel.Start();
+		componentsInChildren = this.eyeTypeTabPanel.GetComponentsInChildren<UIWFTabButton>(false);
+		foreach (UIWFTabButton uiwftabButton2 in componentsInChildren)
+		{
+			EventDelegate.Add(uiwftabButton2.onSelect, new EventDelegate.Callback(this.OnSelectEyeType));
+		}
+		if (this.colorPresetGrid != null)
+		{
+			for (int k = 0; k < this.colorPresetNum; k++)
+			{
+				GameObject gameObject = Utility.CreatePrefab(this.colorPresetGrid.gameObject, "SceneEdit\\ColorPalette\\Prefabs\\ColorPresetItem", true);
+				ColorPresetItem component = gameObject.GetComponent<ColorPresetItem>();
+				component.slotNo = k;
+				component.onSaveColorPresetEvent = new Func<ColorPaletteManager.ColorData>(this.OnSaveColorPreset);
+				component.onLoadColorPresetEvent = new Action<Dictionary<string, int>>(this.OnLoadColorPreset);
+			}
+			Utility.ResetNGUI(this.colorPresetGrid);
+		}
+		this.UpdateChildren();
+		this.baseDraw = false;
+	}
+
+	public void Call(int maidNo, MaidParts.PARTS_COLOR colorType)
+	{
+		base.gameObject.SetActive(true);
+		this.visible = true;
+		this.maid = GameMain.Instance.CharacterMgr.GetMaid(maidNo);
+		this.category = ColorPaletteManager.Category.Main;
+		this.colorData = ColorPaletteManager.ColorData.Create(this.maid, colorType);
+		UIWFTabButton[] componentsInChildren = this.categoryTabPanel.GetComponentsInChildren<UIWFTabButton>(true);
+		componentsInChildren[2].gameObject.SetActive(this.colorData.enabledOutLine);
+		if (this.colorData.enabledOutLine)
+		{
+			componentsInChildren[0].pixelSnap = true;
+			componentsInChildren[0].normalSprite = "colorpalette_tab_s_basecolor";
+			componentsInChildren[1].pixelSnap = true;
+			componentsInChildren[1].normalSprite = "colorpalette_tab_s_shadowcolor";
+		}
+		else
+		{
+			componentsInChildren[0].pixelSnap = true;
+			componentsInChildren[0].normalSprite = "colorpalette_tab_basecolor";
+			componentsInChildren[1].pixelSnap = true;
+			componentsInChildren[1].normalSprite = "colorpalette_tab_shadowcolor";
+		}
+		Vector3 localPosition = componentsInChildren[1].transform.localPosition;
+		Vector3 localPosition2 = new Vector3(componentsInChildren[0].transform.localPosition.x + (float)componentsInChildren[0].GetComponent<UIWidget>().width, localPosition.y, localPosition.z);
+		componentsInChildren[1].transform.localPosition = localPosition2;
+		componentsInChildren = this.eyeTypeTabPanel.GetComponentsInChildren<UIWFTabButton>(true);
+		foreach (UIWFTabButton uiwftabButton in componentsInChildren)
+		{
+			uiwftabButton.gameObject.SetActive(colorType == MaidParts.PARTS_COLOR.EYE_L || colorType == MaidParts.PARTS_COLOR.EYE_R);
+		}
+		if ((colorType == MaidParts.PARTS_COLOR.EYE_L || colorType == MaidParts.PARTS_COLOR.EYE_R) && this.selectEyeType == EyePartsTab.LR)
+		{
+			ColorPaletteManager.ColorData obj;
+			if (colorType == MaidParts.PARTS_COLOR.EYE_L)
+			{
+				obj = ColorPaletteManager.ColorData.Create(this.maid, MaidParts.PARTS_COLOR.EYE_R);
+			}
+			else
+			{
+				obj = ColorPaletteManager.ColorData.Create(this.maid, MaidParts.PARTS_COLOR.EYE_L);
+			}
+			if (!this.colorData.EqualsData(obj))
+			{
+				this.maid.status.eyePartsTab = EyePartsTab.R;
+			}
+		}
+		if (colorType == MaidParts.PARTS_COLOR.EYE_L || colorType == MaidParts.PARTS_COLOR.EYE_R)
+		{
+			this.SetEyeSelect(this.selectEyeType);
+		}
+		else
+		{
+			this.SetCategory(this.category);
+		}
+	}
+
+	public void Close()
+	{
+		this.visible = false;
+		base.gameObject.SetActive(false);
+	}
+
+	public void ResetUIPos()
+	{
+		this.ResetPosition();
+	}
+
+	public void SetCategory(ColorPaletteManager.Category category)
+	{
+		UIWFTabButton[] componentsInChildren = this.categoryTabPanel.GetComponentsInChildren<UIWFTabButton>(false);
+		if (category == ColorPaletteManager.Category.OutLine && componentsInChildren.Length < 3)
+		{
+			category = (this.category = ColorPaletteManager.Category.Main);
+		}
+		this.categoryTabPanel.Select(componentsInChildren[(int)category]);
+	}
+
+	public void SetEyeSelect(EyePartsTab eyeType)
+	{
+		UIWFTabButton[] componentsInChildren = this.eyeTypeTabPanel.GetComponentsInChildren<UIWFTabButton>(false);
+		this.eyeTypeTabPanel.Select(componentsInChildren[this.PartsTypeToIndex(eyeType)]);
+	}
+
+	private void UpdateUI()
+	{
+		ColorPaletteManager.ColorData.CommonItem commonItem;
+		if (this.category == ColorPaletteManager.Category.Main)
+		{
+			commonItem = this.colorData.main;
+		}
+		else if (this.category == ColorPaletteManager.Category.Shadow)
+		{
+			commonItem = this.colorData.shadow;
+		}
+		else
+		{
+			commonItem = this.colorData.outline;
+		}
+		this.uiManager.visibleShadowRate = (this.category == ColorPaletteManager.Category.Main || this.category == ColorPaletteManager.Category.Shadow);
+		int shadowRate = (!this.uiManager.visibleShadowRate) ? 0 : this.colorData.shadowRate;
+		this.uiManager.hue = commonItem.hue;
+		this.uiManager.chroma = commonItem.chroma;
+		this.uiManager.brightness = commonItem.brightness;
+		this.uiManager.contrast = commonItem.contrast;
+		this.uiManager.shadowRate = shadowRate;
+	}
+
+	private void OnChangeUIValue(ColorPaletteUIManager mgr)
+	{
+		if (this.maid == null)
+		{
+			return;
+		}
+		if (this.category == ColorPaletteManager.Category.Main)
+		{
+			this.colorData.main.hue = this.uiManager.hue;
+			this.colorData.main.chroma = this.uiManager.chroma;
+			this.colorData.main.brightness = this.uiManager.brightness;
+			this.colorData.main.contrast = this.uiManager.contrast;
+			this.colorData.shadowRate = this.uiManager.shadowRate;
+		}
+		else if (this.category == ColorPaletteManager.Category.Shadow)
+		{
+			this.colorData.shadow.hue = this.uiManager.hue;
+			this.colorData.shadow.chroma = this.uiManager.chroma;
+			this.colorData.shadow.brightness = this.uiManager.brightness;
+			this.colorData.shadow.contrast = this.uiManager.contrast;
+			this.colorData.shadowRate = this.uiManager.shadowRate;
+		}
+		else if (this.category == ColorPaletteManager.Category.OutLine)
+		{
+			this.colorData.outline.hue = this.uiManager.hue;
+			this.colorData.outline.chroma = this.uiManager.chroma;
+			this.colorData.outline.brightness = this.uiManager.brightness;
+			this.colorData.outline.contrast = this.uiManager.contrast;
+		}
+		ColorPaletteManager.ColorData.Apply(this.maid, this.colorData);
+		if ((this.colorData.colorType == MaidParts.PARTS_COLOR.EYE_L || this.colorData.colorType == MaidParts.PARTS_COLOR.EYE_R) && this.selectEyeType == EyePartsTab.LR)
+		{
+			ColorPaletteManager.ColorData data = ColorPaletteManager.ColorData.Create(this.maid, MaidParts.PARTS_COLOR.EYE_L);
+			data.colorType = MaidParts.PARTS_COLOR.EYE_R;
+			ColorPaletteManager.ColorData.Apply(this.maid, data);
+		}
+	}
+
+	private void OnSelectCategory()
+	{
+		if (!UIWFSelectButton.selected)
+		{
+			return;
+		}
+		UIWFTabButton[] componentsInChildren = this.categoryTabPanel.GetComponentsInChildren<UIWFTabButton>(true);
+		ColorPaletteManager.Category category = ColorPaletteManager.Category.Main;
+		for (int i = 0; i < componentsInChildren.Length; i++)
+		{
+			if (componentsInChildren[i] == UIWFSelectButton.current)
+			{
+				category = (ColorPaletteManager.Category)i;
+				break;
+			}
+		}
+		this.category = category;
+		this.UpdateUI();
+	}
+
+	private void OnSelectEyeType()
+	{
+		if (!UIWFSelectButton.selected)
+		{
+			return;
+		}
+		UIWFTabButton[] componentsInChildren = this.eyeTypeTabPanel.GetComponentsInChildren<UIWFTabButton>(true);
+		int index = 0;
+		for (int i = 0; i < componentsInChildren.Length; i++)
+		{
+			if (componentsInChildren[i] == UIWFSelectButton.current)
+			{
+				index = i;
+				break;
+			}
+		}
+		this.selectEyeType = this.IndexToEyePartsType(index);
+		if (this.selectEyeType == EyePartsTab.LR)
+		{
+			ColorPaletteManager.ColorData data = ColorPaletteManager.ColorData.Create(this.maid, MaidParts.PARTS_COLOR.EYE_L);
+			data.colorType = MaidParts.PARTS_COLOR.EYE_R;
+			ColorPaletteManager.ColorData.Apply(this.maid, data);
+		}
+		MaidParts.PARTS_COLOR colorType = MaidParts.PARTS_COLOR.EYE_L;
+		if (this.selectEyeType == EyePartsTab.R)
+		{
+			colorType = MaidParts.PARTS_COLOR.EYE_R;
+		}
+		this.colorData = ColorPaletteManager.ColorData.Create(this.maid, colorType);
+		this.SetCategory(this.category);
+	}
+
+	private EyePartsTab IndexToEyePartsType(int index)
+	{
+		return (index != 0) ? ((index != 1) ? EyePartsTab.LR : EyePartsTab.R) : EyePartsTab.L;
+	}
+
+	private int PartsTypeToIndex(EyePartsTab tab)
+	{
+		return (tab != EyePartsTab.L) ? ((tab != EyePartsTab.R) ? 2 : 1) : 0;
+	}
+
+	private ColorPaletteManager.ColorData OnSaveColorPreset()
+	{
+		return this.colorData;
+	}
+
+	private void OnLoadColorPreset(Dictionary<string, int> data)
+	{
+		this.colorData = ColorPaletteManager.ColorData.RestoreData(this.colorData.colorType, data);
+		ColorPaletteManager.ColorData.Apply(this.maid, this.colorData);
+		if (this.colorData.colorType == MaidParts.PARTS_COLOR.EYE_L || this.colorData.colorType == MaidParts.PARTS_COLOR.EYE_R)
+		{
+			this.SetEyeSelect(this.selectEyeType);
+		}
+		else
+		{
+			this.SetCategory(this.category);
+		}
+	}
+
+	[SerializeField]
+	private ColorPaletteUIManager uiManager;
+
+	[SerializeField]
+	private UIWFTabPanel categoryTabPanel;
+
+	[SerializeField]
+	private UIWFTabPanel eyeTypeTabPanel;
+
+	[SerializeField]
+	private UIGrid colorPresetGrid;
+
+	[SerializeField]
+	private int colorPresetNum;
+
+	[SerializeField]
+	private Vector3 resetWindowPos;
+
+	private ColorPaletteManager.Category category;
+
+	private Maid maid;
+
+	private ColorPaletteManager.ColorData colorData;
+
+	public enum Category
+	{
+		Main,
+		Shadow,
+		OutLine
+	}
+
+	public struct ColorData
+	{
+		public bool EqualsData(ColorPaletteManager.ColorData obj)
+		{
+			return this.enabledOutLine == obj.enabledOutLine && this.shadowRate == obj.shadowRate && this.shadowRate == obj.shadowRate && this.main.Equals(obj.main) && this.shadow.Equals(obj.shadow) && this.outline.Equals(obj.outline);
+		}
+
+		public Dictionary<string, int> GetStoreData()
+		{
+			Dictionary<string, int> result = new Dictionary<string, int>();
+			Action<string, ColorPaletteManager.ColorData.CommonItem> action = delegate(string connectName, ColorPaletteManager.ColorData.CommonItem writeData)
+			{
+				result.Add(connectName + "_hue", writeData.hue);
+				result.Add(connectName + "_chroma", writeData.chroma);
+				result.Add(connectName + "_brightness", writeData.brightness);
+				result.Add(connectName + "_contrast", writeData.contrast);
+			};
+			action("main", this.main);
+			action("shadow", this.shadow);
+			result.Add("shadowRate", this.shadowRate);
+			result.Add("existOutLineData", (!this.enabledOutLine) ? 0 : 1);
+			if (this.enabledOutLine)
+			{
+				action("outline", this.outline);
+			}
+			return result;
+		}
+
+		public static ColorPaletteManager.ColorData RestoreData(MaidParts.PARTS_COLOR colorType, Dictionary<string, int> storeData)
+		{
+			ColorPaletteManager.ColorData result = default(ColorPaletteManager.ColorData);
+			result.colorType = colorType;
+			result.enabledOutLine = (colorType == MaidParts.PARTS_COLOR.HAIR || colorType == MaidParts.PARTS_COLOR.SKIN);
+			Func<string, ColorPaletteManager.ColorData.CommonItem> func = (string connectName) => new ColorPaletteManager.ColorData.CommonItem
+			{
+				hue = storeData[connectName + "_hue"],
+				chroma = storeData[connectName + "_chroma"],
+				brightness = storeData[connectName + "_brightness"],
+				contrast = storeData[connectName + "_contrast"]
+			};
+			result.main = func("main");
+			result.shadow = func("shadow");
+			result.shadowRate = storeData["shadowRate"];
+			if (result.enabledOutLine && storeData["existOutLineData"] == 1)
+			{
+				result.outline = func("outline");
+			}
+			return result;
+		}
+
+		public static ColorPaletteManager.ColorData Create(Maid maid, MaidParts.PARTS_COLOR colorType)
+		{
+			ColorPaletteManager.ColorData result = default(ColorPaletteManager.ColorData);
+			if (colorType == MaidParts.PARTS_COLOR.HAIR || colorType == MaidParts.PARTS_COLOR.HAIR_OUTLINE)
+			{
+				colorType = MaidParts.PARTS_COLOR.HAIR;
+			}
+			else if (colorType == MaidParts.PARTS_COLOR.SKIN || colorType == MaidParts.PARTS_COLOR.SKIN_OUTLINE)
+			{
+				colorType = MaidParts.PARTS_COLOR.SKIN;
+			}
+			result.colorType = colorType;
+			result.enabledOutLine = (colorType == MaidParts.PARTS_COLOR.HAIR || colorType == MaidParts.PARTS_COLOR.HAIR_OUTLINE || colorType == MaidParts.PARTS_COLOR.SKIN || colorType == MaidParts.PARTS_COLOR.SKIN_OUTLINE);
+			MaidParts.PartsColor partsColor = maid.Parts.GetPartsColor(colorType);
+			result.main.hue = partsColor.m_nMainHue;
+			result.main.chroma = partsColor.m_nMainChroma;
+			result.main.brightness = partsColor.m_nMainBrightness;
+			result.main.contrast = partsColor.m_nMainContrast;
+			result.shadow.hue = partsColor.m_nShadowHue;
+			result.shadow.chroma = partsColor.m_nShadowChroma;
+			result.shadow.brightness = partsColor.m_nShadowBrightness;
+			result.shadow.contrast = partsColor.m_nShadowContrast;
+			result.shadowRate = partsColor.m_nShadowRate;
+			if (result.enabledOutLine)
+			{
+				MaidParts.PartsColor partsColor2 = (colorType != MaidParts.PARTS_COLOR.HAIR && colorType != MaidParts.PARTS_COLOR.HAIR_OUTLINE) ? maid.Parts.GetPartsColor(MaidParts.PARTS_COLOR.SKIN_OUTLINE) : maid.Parts.GetPartsColor(MaidParts.PARTS_COLOR.HAIR_OUTLINE);
+				result.outline.hue = partsColor2.m_nMainHue;
+				result.outline.chroma = partsColor2.m_nMainChroma;
+				result.outline.brightness = partsColor2.m_nMainBrightness;
+				result.outline.contrast = partsColor2.m_nMainContrast;
+			}
+			return result;
+		}
+
+		public static void Apply(Maid maid, ColorPaletteManager.ColorData data)
+		{
+			MaidParts.PartsColor f_cColor = default(MaidParts.PartsColor);
+			f_cColor.m_nMainHue = data.main.hue;
+			f_cColor.m_nMainChroma = data.main.chroma;
+			f_cColor.m_nMainBrightness = data.main.brightness;
+			f_cColor.m_nMainContrast = data.main.contrast;
+			f_cColor.m_nShadowHue = data.shadow.hue;
+			f_cColor.m_nShadowChroma = data.shadow.chroma;
+			f_cColor.m_nShadowBrightness = data.shadow.brightness;
+			f_cColor.m_nShadowContrast = data.shadow.contrast;
+			f_cColor.m_nShadowRate = data.shadowRate;
+			if (data.enabledOutLine)
+			{
+				MaidParts.PartsColor f_cColor2 = default(MaidParts.PartsColor);
+				f_cColor2.m_nMainHue = data.outline.hue;
+				f_cColor2.m_nMainChroma = data.outline.chroma;
+				f_cColor2.m_nMainBrightness = data.outline.brightness;
+				f_cColor2.m_nMainContrast = data.outline.contrast;
+				if (data.colorType == MaidParts.PARTS_COLOR.HAIR)
+				{
+					maid.Parts.SetPartsColor(MaidParts.PARTS_COLOR.HAIR_OUTLINE, f_cColor2);
+				}
+				else
+				{
+					maid.Parts.SetPartsColor(MaidParts.PARTS_COLOR.SKIN_OUTLINE, f_cColor2);
+				}
+			}
+			maid.Parts.SetPartsColor(data.colorType, f_cColor);
+		}
+
+		public MaidParts.PARTS_COLOR colorType;
+
+		public bool enabledOutLine;
+
+		public int shadowRate;
+
+		public ColorPaletteManager.ColorData.CommonItem main;
+
+		public ColorPaletteManager.ColorData.CommonItem shadow;
+
+		public ColorPaletteManager.ColorData.CommonItem outline;
+
+		public struct CommonItem
+		{
+			public bool Equals(ColorPaletteManager.ColorData.CommonItem obj)
+			{
+				return this.hue == obj.hue && this.chroma == obj.chroma && this.brightness == obj.brightness && this.contrast == obj.contrast;
+			}
+
+			public int hue;
+
+			public int chroma;
+
+			public int brightness;
+
+			public int contrast;
+		}
+	}
+}

+ 282 - 0
Assembly-CSharp/ColorPaletteUIManager.cs

@@ -0,0 +1,282 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using wf;
+
+public class ColorPaletteUIManager : MonoBehaviour
+{
+	public int hue
+	{
+		get
+		{
+			return (int)System.Math.Round((double)(this.sliderHue.value * 255f), MidpointRounding.AwayFromZero);
+		}
+		set
+		{
+			List<EventDelegate> onChange = this.sliderHue.onChange;
+			this.sliderHue.onChange = null;
+			value = wf.Math.RoundMinMax(value, 0, 255);
+			this.sliderHue.value = (float)System.Math.Round((double)((float)value / 255f), 2, MidpointRounding.AwayFromZero);
+			this.sliderHue.onChange = onChange;
+			UTY.ConvertColorHue(this.hue, this.byteArrayPickerGray, ref this.tmpTxt2dColoField);
+		}
+	}
+
+	public int chroma
+	{
+		get
+		{
+			return (int)System.Math.Round((double)(this.sliderChroma.value * 255f), MidpointRounding.AwayFromZero);
+		}
+		set
+		{
+			List<EventDelegate> onChange = this.sliderChroma.onChange;
+			this.sliderChroma.onChange = null;
+			value = wf.Math.RoundMinMax(value, 0, 255);
+			this.sliderChroma.value = (float)System.Math.Round((double)((float)value / 255f), 2, MidpointRounding.AwayFromZero);
+			this.sliderChroma.onChange = onChange;
+			this.labelChroma.text = this.chroma.ToString();
+			this.UpdatePickerPosition();
+		}
+	}
+
+	public int brightness
+	{
+		get
+		{
+			return (int)System.Math.Round((double)(this.sliderBrightness.value * 510f), MidpointRounding.AwayFromZero);
+		}
+		set
+		{
+			List<EventDelegate> onChange = this.sliderBrightness.onChange;
+			this.sliderBrightness.onChange = null;
+			value = wf.Math.RoundMinMax(value, 0, 510);
+			this.sliderBrightness.value = (float)System.Math.Round((double)((float)value / 510f), 2, MidpointRounding.AwayFromZero);
+			this.sliderBrightness.onChange = onChange;
+			this.labelBrightness.text = this.brightness.ToString();
+			this.UpdatePickerPosition();
+		}
+	}
+
+	public int contrast
+	{
+		get
+		{
+			return (int)System.Math.Round((double)(this.sliderContrast.value * 200f), MidpointRounding.AwayFromZero);
+		}
+		set
+		{
+			List<EventDelegate> onChange = this.sliderContrast.onChange;
+			this.sliderContrast.onChange = null;
+			value = wf.Math.RoundMinMax(value, 0, 200);
+			this.sliderContrast.value = (float)System.Math.Round((double)((float)value / 200f), 2, MidpointRounding.AwayFromZero);
+			this.sliderContrast.onChange = onChange;
+			this.labelContrast.text = this.contrast.ToString();
+		}
+	}
+
+	public int shadowRate
+	{
+		get
+		{
+			return (int)System.Math.Round((double)(this.sliderShadowRate.value * 255f), MidpointRounding.AwayFromZero);
+		}
+		set
+		{
+			List<EventDelegate> onChange = this.sliderShadowRate.onChange;
+			this.sliderShadowRate.onChange = null;
+			value = wf.Math.RoundMinMax(value, 0, 255);
+			this.sliderShadowRate.value = (float)System.Math.Round((double)((float)value / 255f), 2, MidpointRounding.AwayFromZero);
+			this.sliderShadowRate.onChange = onChange;
+			this.labelShadowRate.text = this.shadowRate.ToString();
+		}
+	}
+
+	public bool visibleShadowRate
+	{
+		get
+		{
+			return this.shadowRateObject.activeSelf;
+		}
+		set
+		{
+			this.shadowRateObject.SetActive(value);
+		}
+	}
+
+	public bool visible
+	{
+		get
+		{
+			return base.gameObject.activeSelf;
+		}
+		set
+		{
+			base.gameObject.SetActive(value);
+		}
+	}
+
+	private void Awake()
+	{
+		this.shadowRateObject = UTY.GetChildObject(base.gameObject, "ColorAdjustment/ShadowRate", false);
+		this.sliderHue = UTY.GetChildObject(base.gameObject, "PickerPalette/HueSlider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.sliderHue.onChange, new EventDelegate.Callback(this.OnChangeValueSlider));
+		this.sliderChroma = UTY.GetChildObject(base.gameObject, "ColorAdjustment/Saturation/SatSlider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.sliderChroma.onChange, new EventDelegate.Callback(this.OnChangeValueSlider));
+		this.sliderBrightness = UTY.GetChildObject(base.gameObject, "ColorAdjustment/Brightness/BriSlider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.sliderBrightness.onChange, new EventDelegate.Callback(this.OnChangeValueSlider));
+		this.sliderContrast = UTY.GetChildObject(base.gameObject, "ColorAdjustment/Contrast/ContrastSlider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.sliderContrast.onChange, new EventDelegate.Callback(this.OnChangeValueSlider));
+		this.sliderShadowRate = UTY.GetChildObject(base.gameObject, "ColorAdjustment/ShadowRate/ShadowRateSlider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.sliderShadowRate.onChange, new EventDelegate.Callback(this.OnChangeValueSlider));
+		this.labelChroma = UTY.GetChildObject(base.gameObject, "ColorAdjustment/Saturation/Number", false).GetComponent<UILabel>();
+		this.labelBrightness = UTY.GetChildObject(base.gameObject, "ColorAdjustment/Brightness/Number", false).GetComponent<UILabel>();
+		this.labelContrast = UTY.GetChildObject(base.gameObject, "ColorAdjustment/Contrast/Number", false).GetComponent<UILabel>();
+		this.labelShadowRate = UTY.GetChildObject(base.gameObject, "ColorAdjustment/ShadowRate/Number", false).GetComponent<UILabel>();
+		this.m_palettePanel = UTY.GetChildObject(base.gameObject, "PickerPalette/PalettePanel", false).GetComponent<UIPanel>();
+		this.m_spSelector = UTY.GetChildObject(this.m_palettePanel.gameObject, "Palette/Selecter", false).GetComponent<UISprite>();
+		this.uiMainCamera = this.m_palettePanel.root.transform.Find("Camera").GetComponent<Camera>();
+		this.txtColorField = UTY.GetChildObject(this.m_palettePanel.gameObject, "Palette", false).GetComponent<UITexture>();
+		Texture2D texture2D = Resources.Load("SceneEdit/ColorPalette/Texture/cm3d2_ColorPalette_PickerGray 1") as Texture2D;
+		this.byteArrayPickerGray = UTY.GetPixelArray(texture2D);
+		this.tmpTxt2dColoField = new Texture2D(texture2D.width, texture2D.height, TextureFormat.RGBA32, false, true);
+		this.txtColorField.mainTexture = this.tmpTxt2dColoField;
+		UIEventTrigger component = this.m_palettePanel.GetComponent<UIEventTrigger>();
+		EventDelegate.Add(component.onPress, new EventDelegate.Callback(this.OnMouseDownPalettePanel));
+		EventDelegate.Add(component.onRelease, new EventDelegate.Callback(this.OnMouseUpPalettePanel));
+	}
+
+	private void Update()
+	{
+		if (this.ispickerDrag)
+		{
+			this.MovePalettePanelClickPos(UICamera.lastTouchPosition);
+		}
+	}
+
+	public void UpdatePickerPosition()
+	{
+		this.m_spSelector.transform.localPosition = new Vector3((float)this.txtColorField.width * this.sliderChroma.value, -((float)this.txtColorField.height * (1f - this.sliderBrightness.value)));
+	}
+
+	public void MovePalettePanelClickPos(Vector3 clickPos)
+	{
+		Vector3 position = this.uiMainCamera.ScreenToWorldPoint(clickPos);
+		Vector3 vector = this.m_palettePanel.transform.InverseTransformPoint(position);
+		Vector3 size = this.m_palettePanel.GetComponent<BoxCollider>().size;
+		Vector2 vector2 = new Vector2((float)this.m_spSelector.width, (float)this.m_spSelector.height);
+		int num = (int)(this.m_palettePanel.width / 2f + vector.x - vector2.x / 2f);
+		int num2 = (int)(this.m_palettePanel.height / 2f - vector.y - vector2.y / 2f);
+		num = wf.Math.RoundMinMax(num, 0, (int)size.x);
+		num2 = wf.Math.RoundMinMax(num2, 0, (int)size.y);
+		int num3 = this.SelectorPosToMainChromaNum(num);
+		int num4 = this.SelectorPosToMainBrightness(num2);
+		this.sliderChroma.value = (float)num3 / 255f;
+		this.sliderBrightness.value = (float)num4 / 510f;
+		this.labelChroma.text = num3.ToString();
+		this.labelBrightness.text = num4.ToString();
+		if (this.onChangeValue != null)
+		{
+			this.onChangeValue(this);
+		}
+	}
+
+	private void OnMouseDownPalettePanel()
+	{
+		int num = -1;
+		if (UICamera.currentTouchID == num)
+		{
+			if (!GameMain.Instance.VRMode)
+			{
+				this.MovePalettePanelClickPos(Input.mousePosition);
+			}
+			else
+			{
+				this.MovePalettePanelClickPos(GameMain.Instance.OvrMgr.SystemUICamera.GetOvrVirtualMouseCurrentSidePos());
+			}
+			this.ispickerDrag = true;
+		}
+	}
+
+	private void OnMouseUpPalettePanel()
+	{
+		this.ispickerDrag = false;
+	}
+
+	private void OnChangeValueSlider()
+	{
+		if (UIProgressBar.current == this.sliderHue)
+		{
+			UTY.ConvertColorHue(this.hue, this.byteArrayPickerGray, ref this.tmpTxt2dColoField);
+		}
+		else if (UIProgressBar.current == this.sliderChroma)
+		{
+			this.labelChroma.text = this.chroma.ToString();
+		}
+		else if (UIProgressBar.current == this.sliderBrightness)
+		{
+			this.labelBrightness.text = this.brightness.ToString();
+		}
+		else if (UIProgressBar.current == this.sliderContrast)
+		{
+			this.labelContrast.text = this.contrast.ToString();
+		}
+		else if (UIProgressBar.current == this.sliderShadowRate)
+		{
+			this.labelShadowRate.text = this.shadowRate.ToString();
+		}
+		this.UpdatePickerPosition();
+		if (this.onChangeValue != null)
+		{
+			this.onChangeValue(this);
+		}
+	}
+
+	private int SelectorPosToMainChromaNum(int texturePosX)
+	{
+		int num = texturePosX * 255 / this.txtColorField.width;
+		return wf.Math.RoundMinMax(num, 0, 255);
+	}
+
+	private int SelectorPosToMainBrightness(int texturePosY)
+	{
+		int num = (this.txtColorField.height - System.Math.Abs(texturePosY)) * 510 / this.txtColorField.height;
+		return wf.Math.RoundMinMax(num, 0, 510);
+	}
+
+	public Action<ColorPaletteUIManager> onChangeValue;
+
+	private GameObject shadowRateObject;
+
+	private UISlider sliderHue;
+
+	private UISlider sliderChroma;
+
+	private UISlider sliderBrightness;
+
+	private UISlider sliderContrast;
+
+	private UISlider sliderShadowRate;
+
+	private UILabel labelChroma;
+
+	private UILabel labelBrightness;
+
+	private UILabel labelContrast;
+
+	private UILabel labelShadowRate;
+
+	private UIPanel m_palettePanel;
+
+	private UISprite m_spSelector;
+
+	private Camera uiMainCamera;
+
+	private UITexture txtColorField;
+
+	private Texture2D tmpTxt2dColoField;
+
+	private byte[] byteArrayPickerGray;
+
+	private bool ispickerDrag;
+}

+ 112 - 0
Assembly-CSharp/ColorPresetItem.cs

@@ -0,0 +1,112 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[RequireComponent(typeof(UITexture))]
+[RequireComponent(typeof(UIButton))]
+public class ColorPresetItem : MonoBehaviour
+{
+	public int slotNo
+	{
+		get
+		{
+			return this.slotNo_;
+		}
+		set
+		{
+			if (this.slotNo_ != value)
+			{
+				this.slotNo_ = value;
+				this.UpdateData();
+			}
+		}
+	}
+
+	private void Start()
+	{
+		this.UpdateData();
+	}
+
+	private void Awake()
+	{
+		if (this.uiTex == null)
+		{
+			this.uiTex = base.GetComponent<UITexture>();
+		}
+		this.grayTexArray = UTY.GetPixelArray(this.greyTex);
+		this.colorChangeTex = new Texture2D(this.greyTex.width, this.greyTex.height, TextureFormat.RGBA32, false, true);
+		EventDelegate.Add(base.GetComponent<UIButton>().onClick, new EventDelegate.Callback(this.OnButtonClick));
+	}
+
+	public void UpdateData()
+	{
+		Dictionary<string, int> editColorPresetData = GameMain.Instance.CMSystem.GetEditColorPresetData(this.slotNo);
+		if (editColorPresetData == null)
+		{
+			this.uiTex.mainTexture = this.emptyTex;
+		}
+		else
+		{
+			ColorPaletteManager.ColorData colorData = ColorPaletteManager.ColorData.RestoreData(MaidParts.PARTS_COLOR.EYE_L, editColorPresetData);
+			UTY.ConvertColor(new MaidParts.PartsColor
+			{
+				m_nMainHue = colorData.main.hue,
+				m_nMainChroma = colorData.main.chroma,
+				m_nMainBrightness = colorData.main.brightness,
+				m_nMainContrast = colorData.main.contrast,
+				m_nShadowHue = colorData.shadow.hue,
+				m_nShadowChroma = colorData.shadow.chroma,
+				m_nShadowBrightness = colorData.shadow.brightness,
+				m_nShadowContrast = colorData.shadow.contrast,
+				m_nShadowRate = colorData.shadowRate
+			}, this.grayTexArray, ref this.colorChangeTex);
+			this.uiTex.mainTexture = this.colorChangeTex;
+		}
+		this.uiTex.SetDimensions(this.uiTex.mainTexture.width, this.uiTex.mainTexture.height);
+	}
+
+	private void OnButtonClick()
+	{
+		int num = -1;
+		int num2 = -2;
+		if (UICamera.currentTouchID == num2)
+		{
+			GameMain.Instance.CMSystem.RemoveEditColorPresetData(this.slotNo);
+			this.UpdateData();
+		}
+		else if (UICamera.currentTouchID == num)
+		{
+			if (this.uiTex.mainTexture == this.emptyTex)
+			{
+				if (this.onSaveColorPresetEvent != null)
+				{
+					Dictionary<string, int> storeData = this.onSaveColorPresetEvent().GetStoreData();
+					GameMain.Instance.CMSystem.SetEditColorPresetData(this.slotNo, storeData);
+					this.UpdateData();
+				}
+			}
+			else if (this.onLoadColorPresetEvent != null)
+			{
+				this.onLoadColorPresetEvent(GameMain.Instance.CMSystem.GetEditColorPresetData(this.slotNo));
+			}
+		}
+	}
+
+	[SerializeField]
+	private Texture2D emptyTex;
+
+	[SerializeField]
+	private Texture2D greyTex;
+
+	public Func<ColorPaletteManager.ColorData> onSaveColorPresetEvent;
+
+	public Action<Dictionary<string, int>> onLoadColorPresetEvent;
+
+	private Texture2D colorChangeTex;
+
+	private UITexture uiTex;
+
+	private int slotNo_;
+
+	private byte[] grayTexArray;
+}

+ 6 - 0
Assembly-CSharp/ColorTypeRandomPresetButton.cs

@@ -0,0 +1,6 @@
+using System;
+
+public class ColorTypeRandomPresetButton : RandomPresetButton
+{
+	public override UITexture m_txtColor { get; set; }
+}

+ 168 - 0
Assembly-CSharp/ColorrPaletteParts.cs

@@ -0,0 +1,168 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using wf;
+
+public class ColorrPaletteParts : MonoBehaviour
+{
+	private void Awake()
+	{
+		Transform transform = base.transform;
+		while (this.ui_camera_ == null && transform != null)
+		{
+			UIRoot component = transform.parent.GetComponent<UIRoot>();
+			if (component != null)
+			{
+				this.ui_camera_ = component.GetComponentInChildren<Camera>();
+			}
+			transform = transform.parent;
+		}
+		Texture2D texture2D = Resources.Load("SceneEdit/ColorPalette/Texture/cm3d2_ColorPalette_PickerGray 2") as Texture2D;
+		UIEventTrigger uieventTrigger = this.PaletteHitArea.GetComponent<UIEventTrigger>();
+		if (uieventTrigger == null)
+		{
+			uieventTrigger = this.PaletteHitArea.gameObject.AddComponent<UIEventTrigger>();
+		}
+		EventDelegate.Add(uieventTrigger.onPress, new EventDelegate.Callback(this.OnMouseDownPalettePanel));
+		EventDelegate.Add(uieventTrigger.onRelease, new EventDelegate.Callback(this.OnMouseUpPalettePanel));
+		EventDelegate.Add(this.HueSlider.onChange, new EventDelegate.Callback(this.OnChangeHue));
+		this.hsv_color_.s = 0f;
+		this.hsv_color_.v = 1f;
+	}
+
+	public void SetColor(Color color)
+	{
+		this.hsv_color_ = new HSVColor(color);
+		float num = this.hsv_color_.h / 360f;
+		if (this.HueSlider.value != num)
+		{
+			this.HueSlider.value = num;
+		}
+		else
+		{
+			this.UIUpdate();
+		}
+	}
+
+	public Color GetColor()
+	{
+		return this.hsv_color_.ToColor();
+	}
+
+	public void Update()
+	{
+		if (this.is_drag_pic_)
+		{
+			Vector3 position = this.ui_camera_.ScreenToWorldPoint(UICamera.lastTouchPosition);
+			Vector3 v = this.PaletteHitArea.transform.InverseTransformPoint(position);
+			Vector2 vector = this.ConvertToSelectorPos(v);
+			Vector3 size = this.PaletteHitArea.size;
+			this.hsv_color_.s = vector.x / size.x;
+			this.hsv_color_.v = (size.y - vector.y) / size.y;
+			this.UIUpdate();
+		}
+	}
+
+	public void UIUpdate()
+	{
+		Vector3 size = this.PaletteHitArea.size;
+		Vector2 v;
+		v.x = size.x * this.hsv_color_.s;
+		v.y = size.y * (1f - this.hsv_color_.v) * -1f;
+		this.PaletteColorPic.transform.localPosition = v;
+		float s = this.hsv_color_.s;
+		float v2 = this.hsv_color_.v;
+		this.hsv_color_.s = (this.hsv_color_.v = 1f);
+		this.PaletteColorField.color = this.hsv_color_.ToColor();
+		this.hsv_color_.s = s;
+		this.hsv_color_.v = v2;
+		if (this.onChangeValue != null && 0 < this.onChangeValue.Count)
+		{
+			for (int i = 0; i < this.onChangeValue.Count; i++)
+			{
+				this.onChangeValue[i](this.hsv_color_.ToColor());
+			}
+		}
+	}
+
+	private void OnMouseDownPalettePanel()
+	{
+		if (UICamera.currentTouchID == -1)
+		{
+			this.is_drag_pic_ = true;
+		}
+	}
+
+	private void OnMouseUpPalettePanel()
+	{
+		this.is_drag_pic_ = false;
+	}
+
+	private void OnChangeHue()
+	{
+		this.hsv_color_.h = 360f * this.HueSlider.value;
+		this.UIUpdate();
+	}
+
+	private Vector2 ConvertToSelectorPos(Vector2 pos)
+	{
+		Vector2 localSize = this.PaletteColorField.localSize;
+		Vector2 localSize2 = this.PaletteColorPic.localSize;
+		Vector2 zero = Vector2.zero;
+		zero.x = (localSize.x + localSize2.x) / 2f + pos.x - localSize2.x / 2f;
+		zero.y = (localSize.y + localSize2.y) / 2f - pos.y - localSize2.y / 2f;
+		zero.x = Mathf.Clamp(zero.x, 0f, localSize.x);
+		zero.y = Mathf.Clamp(zero.y, 0f, localSize.y);
+		return zero;
+	}
+
+	public new bool enabled
+	{
+		get
+		{
+			return this.PaletteHitArea.enabled;
+		}
+		set
+		{
+			this.PaletteHitArea.enabled = value;
+			UIButton[] componentsInChildren = base.GetComponentsInChildren<UIButton>();
+			foreach (UIButton uibutton in componentsInChildren)
+			{
+				uibutton.isEnabled = value;
+			}
+			UISlider[] componentsInChildren2 = base.GetComponentsInChildren<UISlider>();
+			foreach (UISlider uislider in componentsInChildren2)
+			{
+				uislider.enabled = value;
+			}
+		}
+	}
+
+	public bool visible
+	{
+		get
+		{
+			return base.gameObject.activeSelf;
+		}
+		set
+		{
+			base.gameObject.SetActive(value);
+		}
+	}
+
+	public BoxCollider PaletteHitArea;
+
+	public UISprite PaletteColorField;
+
+	public UISprite PaletteColorPic;
+
+	public UISlider HueSlider;
+
+	public List<Action<Color>> onChangeValue = new List<Action<Color>>();
+
+	private Camera ui_camera_;
+
+	private bool is_drag_pic_;
+
+	private HSVColor hsv_color_;
+}

+ 105 - 0
Assembly-CSharp/ComboBox.cs

@@ -0,0 +1,105 @@
+using System;
+using UnityEngine;
+
+public class ComboBox
+{
+	public ComboBox(Rect rect, GUIContent buttonContent, GUIContent[] listContent, GUIStyle listStyle)
+	{
+		this.rect = rect;
+		this.buttonContent = buttonContent;
+		this.listContent = listContent;
+		this.buttonStyle = "button";
+		this.boxStyle = "box";
+		this.listStyle = listStyle;
+	}
+
+	public ComboBox(Rect rect, GUIContent buttonContent, GUIContent[] listContent, string buttonStyle, string boxStyle, GUIStyle listStyle)
+	{
+		this.rect = rect;
+		this.buttonContent = buttonContent;
+		this.listContent = listContent;
+		this.buttonStyle = buttonStyle;
+		this.boxStyle = boxStyle;
+		this.listStyle = listStyle;
+	}
+
+	public int Show()
+	{
+		if (ComboBox.forceToUnShow)
+		{
+			ComboBox.forceToUnShow = false;
+			this.isClickedComboButton = false;
+		}
+		bool flag = false;
+		int controlID = GUIUtility.GetControlID(FocusType.Passive);
+		EventType typeForControl = Event.current.GetTypeForControl(controlID);
+		if (typeForControl == EventType.MouseUp)
+		{
+			if (this.isClickedComboButton)
+			{
+				flag = true;
+			}
+		}
+		if (GUI.Button(this.rect, this.buttonContent, this.buttonStyle))
+		{
+			if (ComboBox.useControlID == -1)
+			{
+				ComboBox.useControlID = controlID;
+				this.isClickedComboButton = false;
+			}
+			if (ComboBox.useControlID != controlID)
+			{
+				ComboBox.forceToUnShow = true;
+				ComboBox.useControlID = controlID;
+			}
+			this.isClickedComboButton = true;
+		}
+		if (this.isClickedComboButton)
+		{
+			Rect position = new Rect(this.rect.x, this.rect.y + this.listStyle.CalcHeight(this.listContent[0], 1f), this.rect.width, this.listStyle.CalcHeight(this.listContent[0], 1f) * (float)this.listContent.Length);
+			GUI.Box(position, string.Empty, this.boxStyle);
+			int num = GUI.SelectionGrid(position, this.selectedItemIndex, this.listContent, 1, this.listStyle);
+			if (num != this.selectedItemIndex)
+			{
+				this.selectedItemIndex = num;
+			}
+		}
+		if (flag)
+		{
+			this.isClickedComboButton = false;
+		}
+		return this.selectedItemIndex;
+	}
+
+	public int SelectedItemIndex
+	{
+		get
+		{
+			return this.selectedItemIndex;
+		}
+		set
+		{
+			this.selectedItemIndex = value;
+		}
+	}
+
+	private static bool forceToUnShow;
+
+	private static int useControlID = -1;
+
+	private bool isClickedComboButton;
+
+	private int selectedItemIndex;
+
+	private Rect rect;
+
+	private GUIContent buttonContent;
+
+	private GUIContent[] listContent;
+
+	private string buttonStyle;
+
+	private string boxStyle;
+
+	private GUIStyle listStyle;
+}

+ 95 - 0
Assembly-CSharp/CompetitiveShowAPI.cs

@@ -0,0 +1,95 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+public class CompetitiveShowAPI
+{
+	public void SceneStart(MonoBehaviour f_parent, Maid visible_maid, CompetitiveShowAPI.dgOnSceneStartCallBack f_dgLoadedFinish)
+	{
+		this.m_dgStart = f_dgLoadedFinish;
+		GameMain.Instance.MainCamera.FadeOut(0f, false, null, true, default(Color));
+		GameMain.Instance.ScriptMgr.adv_kag.MessageWindowMgr.CloseMessageWindowPanel();
+		GameMain.Instance.MainLight.Reset();
+		GameMain.Instance.MainLight.SetRotation(new Vector3(28.99218f, 178.2424f, 16.81662f));
+		GameMain.Instance.MainLight.SetIntensity(0.95f);
+		GameMain.Instance.MainCamera.Reset(CameraMain.CameraType.Target, true);
+		GameMain.Instance.MainCamera.SetTargetPos(new Vector3(0.08306749f, 1.299064f, 0.0249091f), true);
+		GameMain.Instance.MainCamera.SetDistance(2.2f, true);
+		GameMain.Instance.MainCamera.SetAroundAngle(new Vector2(177.9044f, 2.546583f), true);
+		GameMain.Instance.MainCamera.SetTargetOffset(Vector3.zero, false);
+		GameMain.Instance.SoundMgr.VoiceStopAll();
+		if (CompetitiveShowMgr.compatibilityMode)
+		{
+			GameMain.Instance.BgMgr.ChangeBg("Salon");
+		}
+		else
+		{
+			GameMain.Instance.BgMgr.ChangeBg("Theater");
+		}
+		GameMain.Instance.CharacterMgr.DeactivateCharaAll();
+		if (visible_maid == null)
+		{
+			visible_maid = GameMain.Instance.CharacterMgr.GetStockMaid(0);
+		}
+		GameMain.Instance.CharacterMgr.SetActiveMaid(visible_maid, 0);
+		visible_maid.Visible = true;
+		f_parent.StartCoroutine(this.CoCharaLoad());
+	}
+
+	private IEnumerator CoCharaLoad()
+	{
+		while (GameMain.Instance.CharacterMgr.IsBusy())
+		{
+			yield return null;
+		}
+		GameMain.Instance.CharacterMgr.ResetCharaPosAll();
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		ScriptManager script_mgr = GameMain.Instance.ScriptMgr;
+		script_mgr.is_motion_blend = false;
+		script_mgr.LoadMotionScript(0, false, "h_kaiwa_tati_001.ks", "*会話立ち待機", string.Empty, string.Empty, false, true);
+		script_mgr.is_motion_blend = true;
+		maid.FaceAnime("通常", 1f, 0);
+		maid.FaceBlend("無し");
+		maid.EyeToCamera(Maid.EyeMoveType.目と顔を向ける, 0f);
+		GameMain.Instance.MainCamera.FadeIn(1f, false, null, true, true, default(Color));
+		if (this.m_dgStart != null)
+		{
+			this.m_dgStart();
+		}
+		yield break;
+	}
+
+	public void EndNextScene(CompetitiveShowAPI.dgOnSceneFinalCallBack f_dgEnd)
+	{
+		this.m_dgFinal = f_dgEnd;
+		GameMain.Instance.MainCamera.FadeOut(1f, false, new CameraMain.dgOnCompleteFade(this.OnFinishFadeOut), true, default(Color));
+	}
+
+	private void OnFinishFadeOut()
+	{
+		if (this.m_dgFinal != null)
+		{
+			this.m_dgFinal();
+		}
+	}
+
+	public void SceneFinish()
+	{
+		if (GameMain.Instance.MainCamera != null)
+		{
+			GameMain.Instance.MainCamera.SetTargetOffset(Vector3.zero, false);
+		}
+		if (GameMain.Instance.CharacterMgr != null)
+		{
+			GameMain.Instance.CharacterMgr.DeactivateCharaAll();
+		}
+	}
+
+	private CompetitiveShowAPI.dgOnSceneStartCallBack m_dgStart;
+
+	private CompetitiveShowAPI.dgOnSceneFinalCallBack m_dgFinal;
+
+	public delegate void dgOnSceneStartCallBack();
+
+	public delegate void dgOnSceneFinalCallBack();
+}

+ 250 - 0
Assembly-CSharp/CompetitiveShowMgr.cs

@@ -0,0 +1,250 @@
+using System;
+using System.Collections.Generic;
+using MaidStatus;
+using MaidStatus.CsvData;
+using UnityEngine;
+using wf;
+
+public class CompetitiveShowMgr : BasePanelMgr
+{
+	public static bool compatibilityMode
+	{
+		get
+		{
+			return DailyMgr.IsLegacy;
+		}
+	}
+
+	public static bool IsCompetitiveShowChara()
+	{
+		return 0 < CompetitiveShowMgr.check_maid_list.Count;
+	}
+
+	public override void Init()
+	{
+		if (CompetitiveShowMgr.check_maid_list.Count <= 0)
+		{
+			for (int i = 0; i < SceneCharacterSelect.select_maid_list.Count; i++)
+			{
+				CompetitiveShowMgr.check_maid_list.Add(SceneCharacterSelect.select_maid_list[i]);
+			}
+			SceneCharacterSelect.select_maid_list.Clear();
+			if (1 < CompetitiveShowMgr.check_maid_list.Count)
+			{
+				GameMain.Instance.MainCamera.FadeOutNoUI(0f, true);
+				GameMain.Instance.MainCamera.FadeIn(0f, false, null, true, true, default(Color));
+				GameMain.Instance.SysDlg.Show("演出を簡略化しますか?", SystemDialog.TYPE.YES_NO, delegate
+				{
+					CompetitiveShowMgr.is_effect_ones = true;
+					GameMain.Instance.CMSystem.SetTmpGenericFlag("品評会_演出省略", 1);
+					GameMain.Instance.SysDlg.Close();
+					GameMain.Instance.MainCamera.FadeInNoUI(0f, true);
+					GameMain.Instance.MainCamera.FadeOut(0f, false, null, true, default(Color));
+					this.Start2();
+				}, delegate
+				{
+					CompetitiveShowMgr.is_effect_ones = false;
+					GameMain.Instance.CMSystem.SetTmpGenericFlag("品評会_演出省略", 0);
+					GameMain.Instance.SysDlg.Close();
+					GameMain.Instance.MainCamera.FadeInNoUI(0f, true);
+					GameMain.Instance.MainCamera.FadeOut(0f, false, null, true, default(Color));
+					this.Start2();
+				});
+			}
+			else
+			{
+				CompetitiveShowMgr.is_effect_ones = false;
+				GameMain.Instance.CMSystem.SetTmpGenericFlag("品評会_演出省略", 0);
+				this.Start2();
+			}
+		}
+		else
+		{
+			this.Start2();
+		}
+	}
+
+	protected override void Start()
+	{
+		NDebug.AssertNull(this.ClassEffect != null);
+		this.ClassEffect.SetActive(false);
+		this.is_success = false;
+		base.Start();
+		this.Init();
+	}
+
+	private void Start2()
+	{
+		Dictionary<int, string> dictionary = new Dictionary<int, string>();
+		Dictionary<int, string> dictionary2 = new Dictionary<int, string>();
+		List<JobClass.Data> allDatas = JobClass.GetAllDatas(true);
+		List<YotogiClass.Data> allDatas2 = YotogiClass.GetAllDatas(true);
+		bool lockNTRPlay = GameMain.Instance.CharacterMgr.status.lockNTRPlay;
+		Maid maid = null;
+		int num = 0;
+		while (num < CompetitiveShowMgr.check_maid_list.Count && !this.is_success)
+		{
+			if (!CompetitiveShowMgr.is_effect_ones && 1 <= num)
+			{
+				break;
+			}
+			Maid maid2 = CompetitiveShowMgr.check_maid_list[num];
+			AbstractClassData.ClassType classType = AbstractClassData.ClassType.Share;
+			classType |= ((!CompetitiveShowMgr.compatibilityMode) ? AbstractClassData.ClassType.New : AbstractClassData.ClassType.Old);
+			bool flag = maid2.status.jobClass.GetLearnPossibleClassDatas(true, classType).Count != 0;
+			if (!flag)
+			{
+				List<YotogiClass.Data> learnPossibleClassDatas = maid2.status.yotogiClass.GetLearnPossibleClassDatas(true, classType);
+				if (lockNTRPlay)
+				{
+					List<YotogiClass.Data> list = new List<YotogiClass.Data>();
+					foreach (YotogiClass.Data data in learnPossibleClassDatas)
+					{
+						if (YotogiClass.IsNTRClass(data.id, CompetitiveShowMgr.compatibilityMode))
+						{
+							list.Add(data);
+						}
+					}
+					foreach (YotogiClass.Data item in list)
+					{
+						learnPossibleClassDatas.Remove(item);
+					}
+				}
+				flag = (learnPossibleClassDatas.Count != 0);
+			}
+			if (flag)
+			{
+				this.is_success = true;
+				if (maid == null)
+				{
+					maid = maid2;
+					break;
+				}
+			}
+			num++;
+		}
+		if (maid == null && 0 < CompetitiveShowMgr.check_maid_list.Count)
+		{
+			maid = CompetitiveShowMgr.check_maid_list[0];
+		}
+		if (CompetitiveShowMgr.is_effect_ones)
+		{
+			this.sceneMgr.GetManager<MaidExaminationMgr>().OpenMaidExaminationPanel(maid, CompetitiveShowMgr.check_maid_list, new CompetitiveShowAPI.dgOnSceneStartCallBack(this.OnFadeInEnd));
+		}
+		else
+		{
+			this.sceneMgr.GetManager<MaidExaminationMgr>().OpenMaidExaminationPanel(maid, new List<Maid>
+			{
+				CompetitiveShowMgr.check_maid_list[0]
+			}, new CompetitiveShowAPI.dgOnSceneStartCallBack(this.OnFadeInEnd));
+		}
+	}
+
+	private void OnFadeInEnd()
+	{
+		GameMain.Instance.SoundMgr.PlaySe("SE005.ogg", false);
+		CameraMain mainCamera = GameMain.Instance.MainCamera;
+		mainCamera.SetControl(false);
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		Transform bone = maid.body0.GetBone("Bip01 Head");
+		Vector3 position = bone.position;
+		Vector3 vector = new Vector3(0.03583635f, 0.3097733f, -0.4142513f);
+		Vector2 vector2 = new Vector2(-18.80226f, 11.24228f);
+		mainCamera.SetTargetPos(vector, true);
+		mainCamera.SetAroundAngle(vector2, true);
+		mainCamera.SetDistance(0.7f, true);
+		Vector3 f_vCenter = new Vector3(position.x - 0.0343059041f, position.y - 0.3253325f, position.z - 0.48361522f);
+		Vector2 f_vRotate = new Vector2(-182.2753f, 11.24231f);
+		float f_fRadius = 2.8f;
+		float num = 5.5f;
+		mainCamera.StartAnimationTo(true, vector, 0.7f, vector2, f_vCenter, f_fRadius, f_vRotate, num, "easeOutCubic", false, 0.5f);
+		this.wait_time = Time.time + num + 1f;
+		this.phase_status_ = CompetitiveShowMgr.PhaseStatus.CameraAction;
+	}
+
+	protected virtual void Update()
+	{
+		if (this.phase_status_ == CompetitiveShowMgr.PhaseStatus.CameraAction && this.wait_time < Time.time)
+		{
+			Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+			if (this.is_success)
+			{
+				if (UnityEngine.Random.Range(0, 1) == 0)
+				{
+					maid.FaceAnime("にっこり", 0f, 0);
+				}
+				else
+				{
+					maid.FaceAnime("笑顔", 0f, 0);
+				}
+				maid.FaceBlend("頬1涙0");
+				GameMain.Instance.SoundMgr.PlaySe("SE007.ogg", false);
+				GameMain.Instance.SoundMgr.PlaySe("SE008.ogg", false);
+				if (CompetitiveShowMgr.compatibilityMode)
+				{
+					GameMain.Instance.SoundMgr.PlayBGMLegacy("BGM021.ogg", 0f, true);
+				}
+				else
+				{
+					GameMain.Instance.SoundMgr.PlayBGM("BGM007.ogg", 0f, true);
+				}
+				GameObject bgObject = GameMain.Instance.BgMgr.BgObject;
+				if (bgObject != null)
+				{
+					GameObject gameObject = Utility.CreatePrefab(bgObject, "Prefab/Particle/PKamihubuki", true);
+					Vector3 localPosition = new Vector3(-1.08f, 4.06f, 0.2f);
+					gameObject.transform.localPosition = localPosition;
+					ParticleSystem[] componentsInChildren = gameObject.GetComponentsInChildren<ParticleSystem>();
+					foreach (ParticleSystem particleSystem in componentsInChildren)
+					{
+						particleSystem.shape.angle = 25f;
+					}
+				}
+				KeyValuePair<string, string> competitiveMotionFileVictory = maid.status.personal.competitiveMotionFileVictory;
+				this.ClassEffect.SetActive(true);
+				GameMain.Instance.ScriptMgr.LoadMotionScript(0, false, competitiveMotionFileVictory.Key, competitiveMotionFileVictory.Value, string.Empty, string.Empty, false, true);
+			}
+			else
+			{
+				if (UnityEngine.Random.Range(0, 1) == 0)
+				{
+					maid.FaceAnime("泣き", 0f, 0);
+				}
+				else
+				{
+					maid.FaceAnime("困った", 0f, 0);
+				}
+				KeyValuePair<string, string> competitiveMotionFileDefeat = maid.status.personal.competitiveMotionFileDefeat;
+				GameMain.Instance.SoundMgr.PlaySe("SE021.ogg", false);
+				GameMain.Instance.ScriptMgr.LoadMotionScript(0, false, competitiveMotionFileDefeat.Key, competitiveMotionFileDefeat.Value, string.Empty, string.Empty, false, true);
+			}
+			this.wait_time = Time.time + 3f;
+			this.phase_status_ = CompetitiveShowMgr.PhaseStatus.MotionPlay;
+		}
+		else if (this.phase_status_ == CompetitiveShowMgr.PhaseStatus.MotionPlay && this.wait_time < Time.time)
+		{
+			this.sceneMgr.GetManager<MaidExaminationMgr>().BaseOpenPanel();
+			this.phase_status_ = CompetitiveShowMgr.PhaseStatus.ResultDraw;
+		}
+	}
+
+	public GameObject ClassEffect;
+
+	public static List<Maid> check_maid_list = new List<Maid>();
+
+	public static bool is_effect_ones = true;
+
+	private bool is_success;
+
+	private CompetitiveShowMgr.PhaseStatus phase_status_;
+
+	private float wait_time;
+
+	private enum PhaseStatus
+	{
+		Null,
+		CameraAction,
+		MotionPlay,
+		ResultDraw
+	}
+}

+ 21 - 0
Assembly-CSharp/ConfigCblManager.cs

@@ -0,0 +1,21 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(UIWidget))]
+public class ConfigCblManager : MonoBehaviour
+{
+	public void OnClose()
+	{
+	}
+
+	[SerializeField]
+	private ConfigCblReactionSetting[] reactionSettings;
+
+	public bool visible;
+
+	[SerializeField]
+	private UIPopupList freeHandFinishTimePopUp;
+
+	[SerializeField]
+	private UIWFTabPanel finishButtonDrawTab;
+}

+ 33 - 0
Assembly-CSharp/ConfigCblReactionSetting.cs

@@ -0,0 +1,33 @@
+using System;
+using UnityEngine;
+
+public class ConfigCblReactionSetting : MonoBehaviour
+{
+	public ConfigCblReactionSetting.Buttons highlightHeart;
+
+	public ConfigCblReactionSetting.Buttons highlightHide;
+
+	public ConfigCblReactionSetting.Buttons runnyNoseEffect;
+
+	public ConfigCblReactionSetting.Buttons saladEffect;
+
+	public ConfigCblReactionSetting.Buttons sweatEffect;
+
+	public ConfigCblReactionSetting.Buttons breatheEffect;
+
+	[Serializable]
+	public class Buttons
+	{
+		public void AddOnSelectEvent(EventDelegate.Callback callBack)
+		{
+			EventDelegate.Add(this.buttonOn.onSelect, callBack);
+			EventDelegate.Add(this.buttonOff.onSelect, callBack);
+		}
+
+		public UIWFTabPanel tabPanel;
+
+		public UIWFTabButton buttonOn;
+
+		public UIWFTabButton buttonOff;
+	}
+}

+ 702 - 0
Assembly-CSharp/ConfigCtrl.cs

@@ -0,0 +1,702 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text.RegularExpressions;
+using UnityEngine;
+
+public class ConfigCtrl : MonoBehaviour
+{
+	public void Init(GameObject configPanel)
+	{
+		this.m_sysBtnShowAlwaysOn = UTY.GetChildObject(configPanel, "System/SysButtonShowAlways/On", false).GetComponent<UIButton>();
+		this.m_sysBtnShowAlwaysOff = UTY.GetChildObject(configPanel, "System/SysButtonShowAlways/Off", false).GetComponent<UIButton>();
+		EventDelegate.Add(this.m_sysBtnShowAlwaysOn.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnSysButtonShowAlwaysEnabled));
+		EventDelegate.Add(this.m_sysBtnShowAlwaysOff.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnSysButtonShowAlwaysDisabled));
+		UTY.GetChildObject(configPanel, "CategorySwitch", false).SetActive(false);
+		GameObject childObject = UTY.GetChildObject(configPanel, "Screen", false);
+		this.m_fullScreenOn = UTY.GetChildObject(childObject, "FullScreen/On", false).GetComponent<UIButton>();
+		this.m_fullScreenOff = UTY.GetChildObject(childObject, "FullScreen/Off", false).GetComponent<UIButton>();
+		EventDelegate.Add(this.m_fullScreenOn.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnFullScreenEnabled));
+		EventDelegate.Add(this.m_fullScreenOff.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnFullScreenDisabled));
+		this.m_plResolution = UTY.GetChildObject(childObject, "Resolution/PopupList", false).GetComponent<UIPopupList>();
+		List<Size<int>> list = this.MakeResolutionPopupList();
+		foreach (Size<int> size in list)
+		{
+			this.m_plResolution.items.Add(this.ToResolutionOption(size));
+		}
+		EventDelegate.Add(this.m_plResolution.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnResolutionChange));
+		this.m_plAntiAlias = UTY.GetChildObject(childObject, "AntiAlias/PopupList", false).GetComponent<UIPopupList>();
+		IEnumerator enumerator2 = Enum.GetValues(typeof(CMSystem.AntiAliasType)).GetEnumerator();
+		try
+		{
+			while (enumerator2.MoveNext())
+			{
+				object obj = enumerator2.Current;
+				this.MakePopupListOption(this.m_plAntiAlias, obj.ToString());
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator2 as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+		EventDelegate.Add(this.m_plAntiAlias.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnAntiAliasChange));
+		this.m_plShadowQuality = UTY.GetChildObject(childObject, "ShadowQuality/PopupList", false).GetComponent<UIPopupList>();
+		IEnumerator enumerator3 = Enum.GetValues(typeof(CMSystem.ShadowQualityType)).GetEnumerator();
+		try
+		{
+			while (enumerator3.MoveNext())
+			{
+				object obj2 = enumerator3.Current;
+				this.MakePopupListOption(this.m_plShadowQuality, obj2.ToString());
+			}
+		}
+		finally
+		{
+			IDisposable disposable2;
+			if ((disposable2 = (enumerator3 as IDisposable)) != null)
+			{
+				disposable2.Dispose();
+			}
+		}
+		EventDelegate.Add(this.m_plShadowQuality.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnShadowQualityChange));
+		this.m_plTextureQuality = UTY.GetChildObject(childObject, "TextureQuality/PopupList", false).GetComponent<UIPopupList>();
+		IEnumerator enumerator4 = Enum.GetValues(typeof(CMSystem.TextureQualityType)).GetEnumerator();
+		try
+		{
+			while (enumerator4.MoveNext())
+			{
+				object obj3 = enumerator4.Current;
+				this.MakePopupListOption(this.m_plTextureQuality, obj3.ToString());
+			}
+		}
+		finally
+		{
+			IDisposable disposable3;
+			if ((disposable3 = (enumerator4 as IDisposable)) != null)
+			{
+				disposable3.Dispose();
+			}
+		}
+		EventDelegate.Add(this.m_plTextureQuality.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnTextureQualityChange));
+		this.m_fpsDisplayOn = UTY.GetChildObject(childObject, "FpsDisplay/On", false).GetComponent<UIButton>();
+		this.m_fpsDisplayOff = UTY.GetChildObject(childObject, "FpsDisplay/Off", false).GetComponent<UIButton>();
+		EventDelegate.Add(this.m_fpsDisplayOn.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnFpsDisplayEnabled));
+		EventDelegate.Add(this.m_fpsDisplayOff.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnFpsDisplayDisabled));
+		this.m_slBloom = UTY.GetChildObject(childObject, "Bloom/Slider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.m_slBloom.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnBloomChange));
+		this.m_plCaptureMagnification = UTY.GetChildObject(childObject, "CaptureMagnification/PopupList", false).GetComponent<UIPopupList>();
+		IEnumerator enumerator5 = Enum.GetValues(typeof(CMSystem.SSSuperSizeType)).GetEnumerator();
+		try
+		{
+			while (enumerator5.MoveNext())
+			{
+				object obj4 = enumerator5.Current;
+				this.MakePopupListOption(this.m_plCaptureMagnification, obj4.ToString());
+			}
+		}
+		finally
+		{
+			IDisposable disposable4;
+			if ((disposable4 = (enumerator5 as IDisposable)) != null)
+			{
+				disposable4.Dispose();
+			}
+		}
+		EventDelegate.Add(this.m_plCaptureMagnification.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnCaptureMagnificationChange));
+		this.m_slPlayerModelTransparency = UTY.GetChildObject(childObject, "PlayerModelTransparency/Slider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.m_slPlayerModelTransparency.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnPlayerModelTransparencyChange));
+		GameObject childObject2 = UTY.GetChildObject(configPanel, "Message", false);
+		this.m_slMessageWindowTransparency = UTY.GetChildObject(childObject2, "MessageWindowTransparency/Slider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.m_slMessageWindowTransparency.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnMessageWindowTransparencyChange));
+		this.m_slTextSpeed = UTY.GetChildObject(childObject2, "TextSpeed/Slider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.m_slTextSpeed.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnTextSpeedChange));
+		this.m_slAutoSpeed = UTY.GetChildObject(childObject2, "AutoSpeed/Slider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.m_slAutoSpeed.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnAutoSpeedChange));
+		this.m_sequentialVoiceOn = UTY.GetChildObject(childObject2, "SequentialVoice/On", false).GetComponent<UIButton>();
+		this.m_sequentialVoiceOff = UTY.GetChildObject(childObject2, "SequentialVoice/Off", false).GetComponent<UIButton>();
+		EventDelegate.Add(this.m_sequentialVoiceOn.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnSequentialVoiceEnabled));
+		EventDelegate.Add(this.m_sequentialVoiceOff.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnSequentialVoiceDisabled));
+		GameObject childObject3 = UTY.GetChildObject(configPanel, "Sound", false);
+		this.m_slMasterVolume = UTY.GetChildObject(childObject3, "MasterVolume/Slider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.m_slMasterVolume.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnMasterVolumeChange));
+		this.m_slSystemVolume = UTY.GetChildObject(childObject3, "SystemVolume/Slider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.m_slSystemVolume.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnSystemVolumeChange));
+		this.m_slMusicVolume = UTY.GetChildObject(childObject3, "MusicVolume/Slider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.m_slMusicVolume.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnMusicVolumeChange));
+		this.m_slDanceVolume = UTY.GetChildObject(childObject3, "DanceVolume/Slider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.m_slDanceVolume.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnDanceVolumeChange));
+		this.m_music3d = UTY.GetChildObject(childObject3, "MusicVolume/3D", false).GetComponent<UIButton>();
+		EventDelegate.Add(this.m_music3d.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnMusic3DActive));
+		this.m_slVoiceVolume = UTY.GetChildObject(childObject3, "VoiceVolume/Slider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.m_slVoiceVolume.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnVoiceVolumeChange));
+		this.m_voice3d = UTY.GetChildObject(childObject3, "VoiceVolume/3D", false).GetComponent<UIButton>();
+		EventDelegate.Add(this.m_voice3d.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnVoice3DActive));
+		this.m_slSoundEffectVolume = UTY.GetChildObject(childObject3, "SoundEffectVolume/Slider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.m_slSoundEffectVolume.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnSoundEffectVolumeChange));
+		this.m_soundEffect3d = UTY.GetChildObject(childObject3, "SoundEffectVolume/3D", false).GetComponent<UIButton>();
+		EventDelegate.Add(this.m_soundEffect3d.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnSoundEffect3DActive));
+		this.m_slSoundEnvironmentVolume = UTY.GetChildObject(childObject3, "SoundEnvironmentVolume/Slider", false).GetComponent<UISlider>();
+		EventDelegate.Add(this.m_slSoundEnvironmentVolume.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnSoundEnvironmentVolumeChange));
+		this.m_soundEnvironment3d = UTY.GetChildObject(childObject3, "SoundEnvironmentVolume/3D", false).GetComponent<UIButton>();
+		EventDelegate.Add(this.m_soundEnvironment3d.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnSoundEnvironment3DActive));
+		this.m_ejaculationSeEnabledOn = UTY.GetChildObject(childObject3, "EjaculationSeEnabled/On", false).GetComponent<UIButton>();
+		this.m_ejaculationSeEnabledOff = UTY.GetChildObject(childObject3, "EjaculationSeEnabled/Off", false).GetComponent<UIButton>();
+		EventDelegate.Add(this.m_ejaculationSeEnabledOn.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.SetEjaculationSeEnabled));
+		EventDelegate.Add(this.m_ejaculationSeEnabledOff.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.SetEjaculationSeDisabled));
+		this.m_okButton = UTY.GetChildObject(configPanel, "OK", false).GetComponent<UIButton>();
+		EventDelegate.Add(this.m_okButton.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.CloseConfigPanel));
+		this.m_changeVRConfigButton = UTY.GetChildObject(configPanel, "Change VR", false).GetComponent<UIButton>();
+		EventDelegate.Add(this.m_changeVRConfigButton.onClick, delegate
+		{
+			BaseMgr<ConfigMgr>.Instance.CloseConfigPanel();
+			ConfigVRCtrl.Open(null);
+		});
+		this.activeColor = new Color(this.m_sysBtnShowAlwaysOn.defaultColor.r, this.m_sysBtnShowAlwaysOn.defaultColor.g, this.m_sysBtnShowAlwaysOn.defaultColor.b, 1f);
+		this.inActiveColor = this.m_sysBtnShowAlwaysOn.defaultColor;
+		this.LoadConfigData();
+	}
+
+	private void MakePopupListOption(UIPopupList popupList, string option)
+	{
+		if (option != "MAX")
+		{
+			popupList.items.Add(option);
+		}
+	}
+
+	private List<Size<int>> MakeResolutionPopupList()
+	{
+		List<Size<int>> screenSizeList = GameMain.Instance.CMSystem.GetScreenSizeList();
+		Size<int> screenSizeNow = GameMain.Instance.CMSystem.GetScreenSizeNow();
+		if (!screenSizeList.Contains(screenSizeNow))
+		{
+			screenSizeList.Add(screenSizeNow);
+		}
+		return screenSizeList;
+	}
+
+	public void LoadConfigData()
+	{
+		bool sysButtonShowAlways = GameMain.Instance.CMSystem.SysButtonShowAlways;
+		this.SetButtonActive(this.m_sysBtnShowAlwaysOn, this.m_sysBtnShowAlwaysOff, sysButtonShowAlways);
+		Debug.Log("Load sysButtonShowAlwaysEnabled=" + sysButtonShowAlways);
+		bool fullScreen = GameMain.Instance.CMSystem.FullScreen;
+		this.SetButtonActive(this.m_fullScreenOn, this.m_fullScreenOff, fullScreen);
+		Debug.Log("Load fullScreenEnabled=" + fullScreen);
+		Size<int> screenSizeNow = GameMain.Instance.CMSystem.GetScreenSizeNow();
+		this.m_plResolution.value = this.ToResolutionOption(screenSizeNow);
+		CMSystem.AntiAliasType antialias = GameMain.Instance.CMSystem.Antialias;
+		this.m_plAntiAlias.value = antialias.ToString();
+		CMSystem.ShadowQualityType shadowQuality = GameMain.Instance.CMSystem.ShadowQuality;
+		this.m_plShadowQuality.value = shadowQuality.ToString();
+		CMSystem.TextureQualityType textureQuality = GameMain.Instance.CMSystem.TextureQuality;
+		this.m_plTextureQuality.value = textureQuality.ToString();
+		bool viewFps = GameMain.Instance.CMSystem.ViewFps;
+		this.SetButtonActive(this.m_fpsDisplayOn, this.m_fpsDisplayOff, viewFps);
+		Debug.Log("Load viewFpsEnabled=" + viewFps);
+		int bloomValue = GameMain.Instance.CMSystem.BloomValue;
+		float num = (float)Math.Round((double)((float)bloomValue / 100f), 2, MidpointRounding.AwayFromZero);
+		this.m_slBloom.value = num;
+		Debug.Log(string.Concat(new object[]
+		{
+			"Load bloom Value=",
+			bloomValue,
+			" sliderValue=",
+			num
+		}));
+		CMSystem.SSSuperSizeType screenShotSuperSize = GameMain.Instance.CMSystem.ScreenShotSuperSize;
+		this.m_plCaptureMagnification.value = screenShotSuperSize.ToString();
+		int manAlpha = GameMain.Instance.CMSystem.ManAlpha;
+		num = (float)Math.Round((double)((float)manAlpha / 100f), 2, MidpointRounding.AwayFromZero);
+		this.m_slPlayerModelTransparency.value = num;
+		Debug.Log(string.Concat(new object[]
+		{
+			"Load playerModelTransparency Value=",
+			manAlpha,
+			" sliderValue=",
+			num
+		}));
+		int msgWndAlpha = GameMain.Instance.CMSystem.MsgWndAlpha;
+		num = (float)Math.Round((double)((float)msgWndAlpha / 100f), 2, MidpointRounding.AwayFromZero);
+		this.m_slMessageWindowTransparency.value = num;
+		Debug.Log(string.Concat(new object[]
+		{
+			"Load messageWindowTransparency Value :",
+			msgWndAlpha,
+			" sliderValue=",
+			num
+		}));
+		int msgTextSpeed = GameMain.Instance.CMSystem.MsgTextSpeed;
+		num = (float)Math.Round((double)((float)msgTextSpeed / 100f), 2, MidpointRounding.AwayFromZero);
+		this.m_slTextSpeed.value = num;
+		Debug.Log(string.Concat(new object[]
+		{
+			"Load textSpeed Value :",
+			msgTextSpeed,
+			" sliderValue=",
+			num
+		}));
+		int msgAutoSpeed = GameMain.Instance.CMSystem.MsgAutoSpeed;
+		num = (float)Math.Round((double)((float)msgAutoSpeed / 100f), 2, MidpointRounding.AwayFromZero);
+		this.m_slAutoSpeed.value = num;
+		Debug.Log(string.Concat(new object[]
+		{
+			"Load autoSpeed Value :",
+			msgAutoSpeed,
+			" sliderValue=",
+			num
+		}));
+		bool msgVoiceNoStop = GameMain.Instance.CMSystem.MsgVoiceNoStop;
+		Debug.Log("Load alreadyReadSkipEnabled:" + msgVoiceNoStop);
+		this.SetButtonActive(this.m_sequentialVoiceOn, this.m_sequentialVoiceOff, msgVoiceNoStop);
+		int volumeAll = GameMain.Instance.SoundMgr.GetVolumeAll();
+		num = (float)Math.Round((double)((float)volumeAll / 100f), 2, MidpointRounding.AwayFromZero);
+		this.m_slMasterVolume.value = num;
+		Debug.Log(string.Concat(new object[]
+		{
+			"Load masterVolume Value :",
+			volumeAll,
+			" sliderValue=",
+			num
+		}));
+		int volume = GameMain.Instance.SoundMgr.GetVolume(AudioSourceMgr.Type.System);
+		num = (float)Math.Round((double)((float)volume / 100f), 2, MidpointRounding.AwayFromZero);
+		this.m_slSystemVolume.value = num;
+		Debug.Log(string.Concat(new object[]
+		{
+			"Load systemVolume Value :",
+			volume,
+			" sliderValue=",
+			num
+		}));
+		int volume2 = GameMain.Instance.SoundMgr.GetVolume(AudioSourceMgr.Type.Bgm);
+		num = (float)Math.Round((double)((float)volume2 / 100f), 2, MidpointRounding.AwayFromZero);
+		this.m_slMusicVolume.value = num;
+		Debug.Log(string.Concat(new object[]
+		{
+			"Load musicVolume Value :",
+			volume2,
+			" sliderValue=",
+			num
+		}));
+		int volumeDance = GameMain.Instance.SoundMgr.GetVolumeDance();
+		num = (float)Math.Round((double)((float)volumeDance / 100f), 2, MidpointRounding.AwayFromZero);
+		this.m_slDanceVolume.value = num;
+		Debug.Log(string.Concat(new object[]
+		{
+			"Load danceVolume Value :",
+			volumeDance,
+			" sliderValue=",
+			num
+		}));
+		int volume3 = GameMain.Instance.SoundMgr.GetVolume(AudioSourceMgr.Type.Voice);
+		num = (float)Math.Round((double)((float)volume3 / 100f), 2, MidpointRounding.AwayFromZero);
+		this.m_slVoiceVolume.value = num;
+		Debug.Log(string.Concat(new object[]
+		{
+			"Load voiceVolume Value :",
+			volume3,
+			" sliderValue=",
+			num
+		}));
+		int volume4 = GameMain.Instance.SoundMgr.GetVolume(AudioSourceMgr.Type.Se);
+		num = (float)Math.Round((double)((float)volume4 / 100f), 2, MidpointRounding.AwayFromZero);
+		this.m_slSoundEffectVolume.value = num;
+		Debug.Log(string.Concat(new object[]
+		{
+			"Load soundEffectVolume Value :",
+			volume4,
+			" sliderValue=",
+			num
+		}));
+		int volume5 = GameMain.Instance.SoundMgr.GetVolume(AudioSourceMgr.Type.Env);
+		num = (float)Math.Round((double)((float)volume5 / 100f), 2, MidpointRounding.AwayFromZero);
+		this.m_slSoundEnvironmentVolume.value = num;
+		Debug.Log(string.Concat(new object[]
+		{
+			"Load soundEnvironmentVolume Value :",
+			volume5,
+			" sliderValue=",
+			num
+		}));
+		bool threeD = GameMain.Instance.SoundMgr.GetThreeD(AudioSourceMgr.Type.Voice);
+		Debug.Log("Load voice3dEnabled:" + threeD);
+		this.SetToggleButtonActive(this.m_voice3d, threeD);
+		bool threeD2 = GameMain.Instance.SoundMgr.GetThreeD(AudioSourceMgr.Type.Se);
+		Debug.Log("Load soundEffect3dEnabled:" + threeD2);
+		this.SetToggleButtonActive(this.m_soundEffect3d, threeD2);
+		bool threeD3 = GameMain.Instance.SoundMgr.GetThreeD(AudioSourceMgr.Type.Env);
+		Debug.Log("Load soundEnvironment3dEnabled:" + threeD3);
+		this.SetToggleButtonActive(this.m_soundEnvironment3d, threeD3);
+		bool ejaculationSeEnabled = GameMain.Instance.CMSystem.EjaculationSeEnabled;
+		Debug.Log("Load EjaculationSeEnabled:" + ejaculationSeEnabled);
+		this.SetButtonActive(this.m_ejaculationSeEnabledOn, this.m_ejaculationSeEnabledOff, ejaculationSeEnabled);
+	}
+
+	private void SetButtonActive(UIButton ActiveButton, UIButton InActiveButton, bool active)
+	{
+		if (active)
+		{
+			this.SetButtonActive(ActiveButton, InActiveButton);
+		}
+		else
+		{
+			this.SetButtonActive(InActiveButton, ActiveButton);
+		}
+	}
+
+	private string ToResolutionOption(Size<int> size)
+	{
+		return string.Format("{0}x{1}", size.width, size.height);
+	}
+
+	private void SetButtonActive(UIButton activeButton, UIButton inActiveButton)
+	{
+		activeButton.defaultColor = this.activeColor;
+		inActiveButton.defaultColor = this.inActiveColor;
+	}
+
+	private void InvertButtonActive(UIButton toggleButton, bool wasActive)
+	{
+		if (wasActive)
+		{
+			toggleButton.defaultColor = this.inActiveColor;
+		}
+		else
+		{
+			toggleButton.defaultColor = this.activeColor;
+		}
+	}
+
+	private void SetToggleButtonActive(UIButton toggleButton, bool active)
+	{
+		if (active)
+		{
+			toggleButton.defaultColor = this.activeColor;
+		}
+		else
+		{
+			toggleButton.defaultColor = this.inActiveColor;
+		}
+	}
+
+	public void SetButtonShowAlwaysEnabled(bool enabled)
+	{
+		this.SetButtonActive(this.m_sysBtnShowAlwaysOn, this.m_sysBtnShowAlwaysOff, enabled);
+		GameMain.Instance.CMSystem.SysButtonShowAlways = enabled;
+		GameMain.Instance.CMSystem.ConfigSystemApply();
+		Debug.Log(string.Format("{0}に{1}を設定しました。", "SysButtonShowAlways", enabled));
+	}
+
+	public void SetFullScreenEnabled(bool enabled)
+	{
+		this.SetButtonActive(this.m_fullScreenOn, this.m_fullScreenOff, enabled);
+		GameMain.Instance.CMSystem.FullScreen = enabled;
+		GameMain.Instance.CMSystem.ConfigScreenApply();
+		Debug.Log(string.Format("{0}に{1}を設定しました。", "FullScreen", enabled));
+	}
+
+	public void SetFpsDisplayEnabled(bool enabled)
+	{
+		this.SetButtonActive(this.m_fpsDisplayOn, this.m_fpsDisplayOff, enabled);
+		GameMain.Instance.CMSystem.ViewFps = enabled;
+		GameMain.Instance.CMSystem.ConfigScreenApply();
+		Debug.Log(string.Format("{0}に{1}を設定しました。", "ViewFps", enabled));
+	}
+
+	public void SetAlreadyReadSkipEnabled(bool enabled)
+	{
+		this.SetButtonActive(this.m_alreadyReadSkipOn, this.m_alreadyReadSkipOff, enabled);
+		GameMain.Instance.CMSystem.MsgAlreadySkip = enabled;
+		GameMain.Instance.CMSystem.ConfigSystemApply();
+		Debug.Log(string.Format("{0}に{1}を設定しました。", "MsgAlreadySkip", enabled));
+	}
+
+	public void SetSequentialVoiceEnabled(bool enabled)
+	{
+		this.SetButtonActive(this.m_sequentialVoiceOn, this.m_sequentialVoiceOff, enabled);
+		GameMain.Instance.CMSystem.MsgVoiceNoStop = enabled;
+		GameMain.Instance.CMSystem.ConfigSystemApply();
+		Debug.Log(string.Format("{0}に{1}を設定しました。", "MsgVoiceNoStop", enabled));
+	}
+
+	public void SetEjaculationSeEnabled(bool enabled)
+	{
+		this.SetButtonActive(this.m_ejaculationSeEnabledOn, this.m_ejaculationSeEnabledOff, enabled);
+		GameMain.Instance.CMSystem.EjaculationSeEnabled = enabled;
+		GameMain.Instance.CMSystem.ConfigSystemApply();
+		Debug.Log(string.Format("{0}に{1}を設定しました。", "EjaculationSeEnabled", enabled));
+	}
+
+	public void SetMusic3DActive()
+	{
+		this.SetSound3DActive(this.m_music3d, AudioSourceMgr.Type.Bgm);
+	}
+
+	public void SetVoice3DActive()
+	{
+		this.SetSound3DActive(this.m_voice3d, AudioSourceMgr.Type.Voice);
+	}
+
+	public void SetSoundEffect3DActive()
+	{
+		this.SetSound3DActive(this.m_soundEffect3d, AudioSourceMgr.Type.Se);
+	}
+
+	public void SetSoundEnvironment3DActive()
+	{
+		this.SetSound3DActive(this.m_soundEnvironment3d, AudioSourceMgr.Type.Env);
+	}
+
+	private void SetSound3DActive(UIButton button, AudioSourceMgr.Type soundType)
+	{
+		bool threeD = GameMain.Instance.SoundMgr.GetThreeD(soundType);
+		this.InvertButtonActive(button, threeD);
+		GameMain.Instance.SoundMgr.SetThreeD(soundType, !threeD);
+		GameMain.Instance.SoundMgr.Apply();
+		Debug.Log(string.Format("{0}[3D]に{1}を設定しました。", soundType, !threeD));
+	}
+
+	public void ChangePopupListResolutionValue(string value)
+	{
+		value = this.DelNewlineOfSentenceEnd(value);
+		Size<int> screenSize = this.ToSize(value);
+		GameMain.Instance.CMSystem.SetScreenSize(screenSize);
+		GameMain.Instance.CMSystem.ConfigScreenApply();
+		Debug.Log(string.Format("{0}に{1}を設定しました。", "解像度", value));
+	}
+
+	private Size<int> ToSize(string value)
+	{
+		Size<int> result = default(Size<int>);
+		int num = value.IndexOf("x");
+		if (num < 0)
+		{
+			Debug.LogError(string.Format("不適切な解像度が設定されています。設定された解像度={0}", value));
+		}
+		string s = value.Substring(0, num);
+		int width;
+		if (int.TryParse(s, out width))
+		{
+			result.width = width;
+		}
+		else
+		{
+			Debug.LogError(string.Format("不適切な解像度が設定されています。設定された解像度={0}", value));
+		}
+		string s2 = value.Substring(num + 1);
+		int height;
+		if (int.TryParse(s2, out height))
+		{
+			result.height = height;
+		}
+		else
+		{
+			Debug.LogError(string.Format("不適切な解像度が設定されています。設定された解像度={0}", value));
+		}
+		return result;
+	}
+
+	public void ChangePopupListValue<PopupListType>(string value)
+	{
+		value = this.DelNewlineOfSentenceEnd(value);
+		if (typeof(PopupListType) == typeof(CMSystem.AntiAliasType))
+		{
+			GameMain.Instance.CMSystem.Antialias = (CMSystem.AntiAliasType)Enum.Parse(typeof(CMSystem.AntiAliasType), value);
+		}
+		else if (typeof(PopupListType) == typeof(CMSystem.ShadowQualityType))
+		{
+			GameMain.Instance.CMSystem.ShadowQuality = (CMSystem.ShadowQualityType)Enum.Parse(typeof(CMSystem.ShadowQualityType), value);
+		}
+		else if (typeof(PopupListType) == typeof(CMSystem.TextureQualityType))
+		{
+			GameMain.Instance.CMSystem.TextureQuality = (CMSystem.TextureQualityType)Enum.Parse(typeof(CMSystem.TextureQualityType), value);
+		}
+		else if (typeof(PopupListType) == typeof(CMSystem.SSSuperSizeType))
+		{
+			GameMain.Instance.CMSystem.ScreenShotSuperSize = (CMSystem.SSSuperSizeType)Enum.Parse(typeof(CMSystem.SSSuperSizeType), value);
+		}
+		GameMain.Instance.CMSystem.ConfigScreenApply();
+		Debug.Log(string.Format("{0}に[{1}]が設定されました。", typeof(PopupListType).ToString(), value));
+	}
+
+	public void ChangeSliderValue(ConfigMgr.SliderType sliderType, float value)
+	{
+		int num = (int)Math.Ceiling((double)(value * 100f));
+		switch (sliderType)
+		{
+		case ConfigMgr.SliderType.Bloom:
+			GameMain.Instance.CMSystem.BloomValue = num;
+			GameMain.Instance.CMSystem.ConfigScreenApply();
+			break;
+		case ConfigMgr.SliderType.PlayerModelTransparency:
+			GameMain.Instance.CMSystem.ManAlpha = num;
+			GameMain.Instance.CMSystem.ConfigScreenApply();
+			break;
+		case ConfigMgr.SliderType.MessageWindowTransparency:
+			GameMain.Instance.CMSystem.MsgWndAlpha = num;
+			GameMain.Instance.CMSystem.ConfigSystemApply();
+			break;
+		case ConfigMgr.SliderType.TextSpeed:
+			GameMain.Instance.CMSystem.MsgTextSpeed = num;
+			GameMain.Instance.CMSystem.ConfigSystemApply();
+			break;
+		case ConfigMgr.SliderType.AutoSpeed:
+			GameMain.Instance.CMSystem.MsgAutoSpeed = num;
+			GameMain.Instance.CMSystem.ConfigSystemApply();
+			break;
+		case ConfigMgr.SliderType.MasterVolume:
+			GameMain.Instance.SoundMgr.SetVolumeAll(num);
+			GameMain.Instance.SoundMgr.Apply();
+			break;
+		case ConfigMgr.SliderType.SystemVolume:
+			GameMain.Instance.SoundMgr.SetVolume(AudioSourceMgr.Type.System, num);
+			GameMain.Instance.SoundMgr.Apply();
+			break;
+		case ConfigMgr.SliderType.MusicVolume:
+			GameMain.Instance.SoundMgr.SetVolume(AudioSourceMgr.Type.Bgm, num);
+			GameMain.Instance.SoundMgr.Apply();
+			break;
+		case ConfigMgr.SliderType.DanceVolume:
+			GameMain.Instance.SoundMgr.SetVolumeDance(num);
+			GameMain.Instance.SoundMgr.Apply();
+			break;
+		case ConfigMgr.SliderType.VoiceVolume:
+			GameMain.Instance.SoundMgr.SetVolume(AudioSourceMgr.Type.Voice, num);
+			GameMain.Instance.SoundMgr.Apply();
+			break;
+		case ConfigMgr.SliderType.SoundEffectVolume:
+			GameMain.Instance.SoundMgr.SetVolume(AudioSourceMgr.Type.Se, num);
+			GameMain.Instance.SoundMgr.Apply();
+			break;
+		case ConfigMgr.SliderType.SoundEnvironmentVolume:
+			GameMain.Instance.SoundMgr.SetVolume(AudioSourceMgr.Type.Env, num);
+			GameMain.Instance.SoundMgr.Apply();
+			break;
+		default:
+			Debug.LogError(string.Format("不適切な項目が変更されました。変更しようとした項目={0}", sliderType));
+			break;
+		}
+		Debug.Log(string.Format("{0}の値に[{1}]が設定されました。", sliderType.ToString(), num));
+	}
+
+	public void SetOKButtonActive(bool active)
+	{
+		this.m_okButton.enabled = active;
+	}
+
+	public void SetContentsVisible(bool value)
+	{
+		string[] array = new string[]
+		{
+			"System",
+			"Screen",
+			"Message",
+			"Sound"
+		};
+		foreach (string f_strObjName in array)
+		{
+			UTY.GetChildObject(base.gameObject, f_strObjName, false).SetActive(value);
+		}
+	}
+
+	private string DelNewlineOfSentenceEnd(string str)
+	{
+		return Regex.Replace(str, "[\\r\\n]+$", string.Empty);
+	}
+
+	private UIPopupList m_resolution;
+
+	private UIPopupList m_plResolution;
+
+	private UIPopupList m_plAntiAlias;
+
+	private UIPopupList m_plShadowQuality;
+
+	private UIPopupList m_plTextureQuality;
+
+	private UIPopupList m_plCaptureMagnification;
+
+	private UISlider m_volume;
+
+	private UISlider m_slSystemVolume;
+
+	private UISlider m_slBloom;
+
+	private UISlider m_slPlayerModelTransparency;
+
+	private UISlider m_slMessageWindowTransparency;
+
+	private UISlider m_slTextSpeed;
+
+	private UISlider m_slAutoSpeed;
+
+	private UISlider m_slMasterVolume;
+
+	private UISlider m_slMusicVolume;
+
+	private UISlider m_slDanceVolume;
+
+	private UISlider m_slVoiceVolume;
+
+	private UISlider m_slSoundEffectVolume;
+
+	private UISlider m_slSoundEnvironmentVolume;
+
+	private UIButton m_sysBtnShowAlwaysOn;
+
+	private UIButton m_sysBtnShowAlwaysOff;
+
+	private UIButton m_fullScreenOn;
+
+	private UIButton m_fullScreenOff;
+
+	private UIButton m_fpsDisplayOn;
+
+	private UIButton m_fpsDisplayOff;
+
+	private UIButton m_alreadyReadSkipOn;
+
+	private UIButton m_alreadyReadSkipOff;
+
+	private UIButton m_sequentialVoiceOn;
+
+	private UIButton m_sequentialVoiceOff;
+
+	private UIButton m_ejaculationSeEnabledOn;
+
+	private UIButton m_ejaculationSeEnabledOff;
+
+	private UIButton m_music3d;
+
+	private UIButton m_voice3d;
+
+	private UIButton m_soundEffect3d;
+
+	private UIButton m_soundEnvironment3d;
+
+	private UIButton m_okButton;
+
+	private UIButton m_changeVRConfigButton;
+
+	private Color activeColor;
+
+	private Color inActiveColor;
+
+	private const string RESOLUTION_MARK = "x";
+
+	private const string ENUM_MAX_MARK = "MAX";
+
+	private const int COEFFICIENT = 100;
+
+	private class Resolution
+	{
+		public int width;
+
+		public int height;
+	}
+}

+ 347 - 0
Assembly-CSharp/ConfigMgr.cs

@@ -0,0 +1,347 @@
+using System;
+using UnityEngine;
+
+public class ConfigMgr : BaseMgr<ConfigMgr>
+{
+	private void Start()
+	{
+	}
+
+	private void Init()
+	{
+		string rootPath = "__GameMain__/SystemUI Root";
+		this.m_goPanel = base.GetPanel("ConfigPanel", rootPath);
+		this.m_configCtrl = base.GetCtrl<ConfigCtrl>();
+		this.m_configCtrl.Init(this.m_goPanel);
+		this.m_uiPanel = this.m_goPanel.GetComponent<UIPanel>();
+		this.m_goPanel.SetActive(false);
+		this.m_bInited = true;
+		this.ChangeNormalConfig();
+	}
+
+	public bool IsOpenConfigPanel()
+	{
+		return !(this.m_goPanel == null) && this.m_goPanel.activeSelf;
+	}
+
+	public void OnSysButtonShowAlwaysEnabled()
+	{
+		this.m_configCtrl.SetButtonShowAlwaysEnabled(true);
+	}
+
+	public void OnSysButtonShowAlwaysDisabled()
+	{
+		this.m_configCtrl.SetButtonShowAlwaysEnabled(false);
+	}
+
+	public void OnFullScreenEnabled()
+	{
+		this.m_configCtrl.SetFullScreenEnabled(true);
+	}
+
+	public void OnFullScreenDisabled()
+	{
+		this.m_configCtrl.SetFullScreenEnabled(false);
+	}
+
+	public void OnResolutionChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		string value = UIPopupList.current.value;
+		this.m_configCtrl.ChangePopupListResolutionValue(value);
+	}
+
+	public void OnAntiAliasChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		string value = UIPopupList.current.value;
+		base.IsValidatePopupValue<CMSystem.AntiAliasType>(value);
+		this.m_configCtrl.ChangePopupListValue<CMSystem.AntiAliasType>(value);
+	}
+
+	public void OnShadowQualityChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		string value = UIPopupList.current.value;
+		base.IsValidatePopupValue<CMSystem.ShadowQualityType>(value);
+		this.m_configCtrl.ChangePopupListValue<CMSystem.ShadowQualityType>(value);
+	}
+
+	public void OnTextureQualityChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		string value = UIPopupList.current.value;
+		base.IsValidatePopupValue<CMSystem.TextureQualityType>(value);
+		this.m_configCtrl.ChangePopupListValue<CMSystem.TextureQualityType>(value);
+	}
+
+	public void OnFpsDisplayEnabled()
+	{
+		this.m_configCtrl.SetFpsDisplayEnabled(true);
+	}
+
+	public void OnFpsDisplayDisabled()
+	{
+		this.m_configCtrl.SetFpsDisplayEnabled(false);
+	}
+
+	public void OnCaptureMagnificationChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		string value = UIPopupList.current.value;
+		base.IsValidatePopupValue<CMSystem.SSSuperSizeType>(value);
+		this.m_configCtrl.ChangePopupListValue<CMSystem.SSSuperSizeType>(value);
+	}
+
+	public void OnBloomChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		float value = UIProgressBar.current.value;
+		this.m_configCtrl.ChangeSliderValue(ConfigMgr.SliderType.Bloom, value);
+	}
+
+	public void OnPlayerModelTransparencyChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		float value = UIProgressBar.current.value;
+		this.m_configCtrl.ChangeSliderValue(ConfigMgr.SliderType.PlayerModelTransparency, value);
+	}
+
+	public void OnMessageWindowTransparencyChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		float value = UIProgressBar.current.value;
+		this.m_configCtrl.ChangeSliderValue(ConfigMgr.SliderType.MessageWindowTransparency, value);
+	}
+
+	public void OnTextSpeedChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		float value = UIProgressBar.current.value;
+		this.m_configCtrl.ChangeSliderValue(ConfigMgr.SliderType.TextSpeed, value);
+	}
+
+	public void OnAutoSpeedChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		float value = UIProgressBar.current.value;
+		this.m_configCtrl.ChangeSliderValue(ConfigMgr.SliderType.AutoSpeed, value);
+	}
+
+	public void OnMasterVolumeChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		float value = UIProgressBar.current.value;
+		this.m_configCtrl.ChangeSliderValue(ConfigMgr.SliderType.MasterVolume, value);
+	}
+
+	public void OnSystemVolumeChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		float value = UIProgressBar.current.value;
+		this.m_configCtrl.ChangeSliderValue(ConfigMgr.SliderType.SystemVolume, value);
+	}
+
+	public void OnMusicVolumeChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		float value = UIProgressBar.current.value;
+		this.m_configCtrl.ChangeSliderValue(ConfigMgr.SliderType.MusicVolume, value);
+	}
+
+	public void OnDanceVolumeChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		float value = UIProgressBar.current.value;
+		this.m_configCtrl.ChangeSliderValue(ConfigMgr.SliderType.DanceVolume, value);
+	}
+
+	public void OnVoiceVolumeChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		float value = UIProgressBar.current.value;
+		this.m_configCtrl.ChangeSliderValue(ConfigMgr.SliderType.VoiceVolume, value);
+	}
+
+	public void OnSoundEffectVolumeChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		float value = UIProgressBar.current.value;
+		this.m_configCtrl.ChangeSliderValue(ConfigMgr.SliderType.SoundEffectVolume, value);
+	}
+
+	public void OnSoundEnvironmentVolumeChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		float value = UIProgressBar.current.value;
+		this.m_configCtrl.ChangeSliderValue(ConfigMgr.SliderType.SoundEnvironmentVolume, value);
+	}
+
+	public void OnAlreadyReadSkipEnabled()
+	{
+		this.m_configCtrl.SetAlreadyReadSkipEnabled(true);
+	}
+
+	public void OnAlreadyReadSkipDisabled()
+	{
+		this.m_configCtrl.SetAlreadyReadSkipEnabled(false);
+	}
+
+	public void OnSequentialVoiceEnabled()
+	{
+		this.m_configCtrl.SetSequentialVoiceEnabled(true);
+	}
+
+	public void OnSequentialVoiceDisabled()
+	{
+		this.m_configCtrl.SetSequentialVoiceEnabled(false);
+	}
+
+	public void SetEjaculationSeEnabled()
+	{
+		this.m_configCtrl.SetEjaculationSeEnabled(true);
+	}
+
+	public void SetEjaculationSeDisabled()
+	{
+		this.m_configCtrl.SetEjaculationSeEnabled(false);
+	}
+
+	public void OnMusic3DActive()
+	{
+		this.m_configCtrl.SetMusic3DActive();
+	}
+
+	public void OnVoice3DActive()
+	{
+		this.m_configCtrl.SetVoice3DActive();
+	}
+
+	public void OnSoundEffect3DActive()
+	{
+		this.m_configCtrl.SetSoundEffect3DActive();
+	}
+
+	public void OnSoundEnvironment3DActive()
+	{
+		this.m_configCtrl.SetSoundEnvironment3DActive();
+	}
+
+	public void OpenConfigPanel()
+	{
+		if (!this.m_bInited)
+		{
+			this.Init();
+		}
+		this.m_configCtrl.LoadConfigData();
+		this.m_configCtrl.SetOKButtonActive(true);
+		this.m_goPanel.SetActive(true);
+		TweenAlpha tweenAlpha = this.m_goPanel.AddComponent<TweenAlpha>();
+		tweenAlpha.from = 0f;
+		tweenAlpha.to = 1f;
+		tweenAlpha.duration = 0.3f;
+		tweenAlpha.PlayForward();
+	}
+
+	public void CloseConfigPanel()
+	{
+		this.m_configCtrl.SetOKButtonActive(false);
+		this.cblConfig.OnClose();
+		TweenAlpha tweenAlpha = TweenAlpha.Begin(this.m_goPanel, 0.3f, 0f);
+		EventDelegate.Set(tweenAlpha.onFinished, delegate
+		{
+			this.m_goPanel.SetActive(false);
+		});
+		GameMain.Instance.BroadcastMessage("OnChangeScreenSizeOrAA", SendMessageOptions.DontRequireReceiver);
+	}
+
+	public void ChangeNormalConfig()
+	{
+		this.m_configCtrl.SetContentsVisible(true);
+		this.cblConfig.visible = false;
+	}
+
+	public void ChangeCBLConfig()
+	{
+		this.m_configCtrl.SetContentsVisible(false);
+		this.cblConfig.visible = true;
+	}
+
+	[SerializeField]
+	public ConfigCblManager cblConfig;
+
+	private ConfigCtrl m_configCtrl;
+
+	private const float DURATION_TO_FADE = 0.3f;
+
+	private UIPanel m_uiPanel;
+
+	private bool m_bInited;
+
+	public enum SliderType
+	{
+		Bloom,
+		PlayerModelTransparency,
+		MessageWindowTransparency,
+		TextSpeed,
+		AutoSpeed,
+		MasterVolume,
+		SystemVolume,
+		MusicVolume,
+		DanceVolume,
+		VoiceVolume,
+		SoundEffectVolume,
+		SoundEnvironmentVolume
+	}
+}

+ 893 - 0
Assembly-CSharp/ConfigVRCtrl.cs

@@ -0,0 +1,893 @@
+using System;
+using System.Collections.Generic;
+using Kasizuki;
+using UnityEngine;
+
+public class ConfigVRCtrl : NGUIWindow
+{
+	public static ConfigVRCtrl instance
+	{
+		get
+		{
+			Transform transform = null;
+			GameObject gameObject = GameObject.Find("SystemUI Root");
+			if (gameObject)
+			{
+				transform = gameObject.transform;
+			}
+			else
+			{
+				NDebug.Assert("SystemUI Rootが見つかりません", false);
+			}
+			if (ConfigVRCtrl.m_Instance == null)
+			{
+				Transform transform2 = transform.Find("ConfigVR");
+				if (transform2 != null)
+				{
+					ConfigVRCtrl.m_Instance = transform2.GetComponent<ConfigVRCtrl>();
+				}
+			}
+			if (ConfigVRCtrl.m_Instance == null)
+			{
+				string path = "SystemUI/Config/Prefab/ConfigVR";
+				GameObject gameObject2 = Resources.Load<GameObject>(path);
+				if (gameObject2 == null)
+				{
+					NDebug.Assert("[ConfigVRCtrl] VRコンフィグUIのプレハブが存在しません", false);
+				}
+				ConfigVRCtrl.m_Instance = UnityEngine.Object.Instantiate<GameObject>(gameObject2).GetComponent<ConfigVRCtrl>();
+				ConfigVRCtrl.m_Instance.transform.SetParent(transform, false);
+				ConfigVRCtrl.m_Instance.transform.localPosition = new Vector3(0f, -11f, 0f);
+				ConfigVRCtrl.m_Instance.transform.localRotation = Quaternion.identity;
+				ConfigVRCtrl.m_Instance.transform.localScale = Vector3.one;
+			}
+			if (ConfigVRCtrl.m_Instance == null)
+			{
+				NDebug.Assert("[ConfigVRCtrl] VRコンフィグUIのインスタンス取得に失敗しました", false);
+			}
+			return ConfigVRCtrl.m_Instance;
+		}
+	}
+
+	public static bool IsOpen()
+	{
+		return ConfigVRCtrl.instance != null && ConfigVRCtrl.instance.gameObject.activeSelf;
+	}
+
+	public static void Open(Action onClickOK = null)
+	{
+		if (ConfigVRCtrl.IsOpen())
+		{
+			Debug.Log("[ConfigVRCtrl] VRConfigは既に開かれています。");
+			return;
+		}
+		ConfigVRCtrl component = ConfigVRCtrl.instance.GetComponent<ConfigVRCtrl>();
+		NGUIWindow component2 = ConfigVRCtrl.instance.GetComponent<NGUIWindow>();
+		component.onClickOK = onClickOK;
+		component.LoadConfigData();
+		component2.Open(0.25f, null);
+	}
+
+	public static void Close(bool isExecutionOK = true)
+	{
+		ConfigVRCtrl component = ConfigVRCtrl.instance.GetComponent<ConfigVRCtrl>();
+		NGUIWindow component2 = ConfigVRCtrl.instance.GetComponent<NGUIWindow>();
+		component2.Close(0.25f, delegate
+		{
+			UnityEngine.Object.Destroy(ConfigVRCtrl.instance.gameObject);
+		});
+		if (isExecutionOK && component.onClickOK != null)
+		{
+			component.onClickOK();
+		}
+	}
+
+	private Dictionary<ConfigVRCtrl.TypeItem, ConfigVRCtrl.ParentItem> dicItem
+	{
+		get
+		{
+			return this.m_DicItem;
+		}
+		set
+		{
+			this.m_DicItem = value;
+		}
+	}
+
+	private CMSystem cmSystem
+	{
+		get
+		{
+			return GameMain.Instance.CMSystem;
+		}
+	}
+
+	private void Log(object message)
+	{
+		Debug.Log(message);
+	}
+
+	public Action onClickOK { get; set; }
+
+	public Action onClickChangeConfig { get; set; }
+
+	protected override void Awake()
+	{
+		base.Awake();
+		this.SetupAllUI();
+		this.LoadConfigData();
+		this.ItemSwitchingOfDevice();
+	}
+
+	private void SetupAllUI()
+	{
+		base.cachedObjectDic.CacheChildObject<UIButton>(base.gameObject, "OK", "ButtonOK");
+		EventDelegate.Add(base.cachedObjectDic.GetCache<UIButton>("ButtonOK").onClick, delegate
+		{
+			ConfigVRCtrl.Close(true);
+		});
+		base.cachedObjectDic.CacheChildObject<UIButton>(base.gameObject, "Change Normal", "ButtonChange");
+		EventDelegate.Add(base.cachedObjectDic.GetCache<UIButton>("ButtonChange").onClick, delegate
+		{
+			ConfigVRCtrl.Close(true);
+			BaseMgr<ConfigMgr>.Instance.OpenConfigPanel();
+		});
+		base.cachedObjectDic.CacheChildObject<UISprite>(base.gameObject, "BG", "Background");
+		base.cachedObjectDic.CacheChildObject<UILabel>(base.gameObject, "label notes", "注意書き");
+		base.cachedObjectDic.GetCache<UILabel>("注意書き").gameObject.SetActive(!GameMain.Instance.VRMode);
+		UIGrid uigrid = base.cachedObjectDic.CacheChildObject<UIGrid>(base.gameObject, "DataList/ScrollView/Grid", "Parent Grid");
+		this.dicItem = new Dictionary<ConfigVRCtrl.TypeItem, ConfigVRCtrl.ParentItem>();
+		this.SetupCommonUI(uigrid.gameObject);
+		this.SetupViveUI(uigrid.gameObject);
+		this.SetupOculusTouchUI(uigrid.gameObject);
+		this.SetupHMDOnlyUI(uigrid.gameObject);
+		this.Setup2DModeUI(uigrid.gameObject);
+	}
+
+	private void SetupCommonUI(GameObject parentItem)
+	{
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.CommonEyeHeight, this.SetupSlider(parentItem, "common eye height", ConfigVRCtrl.COMMON_EYE_HEIGHT_VALUE.x, ConfigVRCtrl.COMMON_EYE_HEIGHT_VALUE.y, delegate(float value)
+		{
+			this.cmSystem.VRCameraHeightStand = value;
+			this.Log("身長 : " + this.cmSystem.VRCameraHeightStand);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.CommonSitHeight, this.SetupSlider(parentItem, "common sitting height", ConfigVRCtrl.COMMON_SITTING_HEIGHT_VALUE.x, ConfigVRCtrl.COMMON_SITTING_HEIGHT_VALUE.y, delegate(float value)
+		{
+			this.cmSystem.VRCameraHeightSit = value;
+			this.Log("座高 : " + this.cmSystem.VRCameraHeightSit);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.CommonCameraMoveSpeed, this.SetupSlider(parentItem, "common camera move speed", ConfigVRCtrl.COMMON_CAMERA_MOVE_VALUE.x, ConfigVRCtrl.COMMON_CAMERA_MOVE_VALUE.y, delegate(float value)
+		{
+			this.cmSystem.VRCameraMoveSpeedKey = value;
+			this.Log("カメラ移動速度(キーボード) : " + this.cmSystem.VRCameraMoveSpeedKey);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.CommonCameraRotSpeed, this.SetupSlider(parentItem, "common camera rot speed", ConfigVRCtrl.COMMON_CAMERA_ROT_VALUE.x, ConfigVRCtrl.COMMON_CAMERA_ROT_VALUE.y, delegate(float value)
+		{
+			this.cmSystem.VRCameraRotSpeedKey = value;
+			this.Log("カメラ回転速度(キーボード) : " + this.cmSystem.VRCameraRotSpeedKey);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.CommonShowDesktopScreen, this.SetupButton(parentItem, "common show desktop screen", delegate(bool isLeft)
+		{
+			if (isLeft && !GameMain.Instance.BgMgr.isShowDesktopScreen)
+			{
+				GameMain.Instance.BgMgr.SetShowDesktopScreen(true);
+			}
+			else if (!isLeft && GameMain.Instance.BgMgr.isShowDesktopScreen)
+			{
+				GameMain.Instance.BgMgr.SetShowDesktopScreen(false);
+			}
+			this.Log("デスクトップスクリーンの表示 + " + GameMain.Instance.BgMgr.isShowDesktopScreen);
+		}));
+	}
+
+	private void SetupViveUI(GameObject parentItem)
+	{
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.ViveFloorHeightType, this.SetupButton(parentItem, "vive floor height", delegate(bool isLeft)
+		{
+			this.cmSystem.OvrCameraHeightType = ((!isLeft) ? CMSystem.OVR_CAM_HEIGHT_TYPE.VR : CMSystem.OVR_CAM_HEIGHT_TYPE.REAL);
+			this.Log("Vive\u3000床の高さ検出法 : " + this.cmSystem.OvrCameraHeightType.ToString());
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.ViveMoveMode, this.SetupButton(parentItem, "vive move mode", delegate(bool isLeft)
+		{
+			this.cmSystem.SConfig.OvrMoveType = ((!isLeft) ? CMSystem.SerializeConfig.OVR_MOVE_TYPE.DIRECTION : CMSystem.SerializeConfig.OVR_MOVE_TYPE.WARP_DRAW_STEPROT);
+			this.Log("Vive\u3000移動方法 : " + this.cmSystem.SConfig.OvrMoveType);
+			if (isLeft)
+			{
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.ViveSnapRotateEnable, true);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.ViveSnapRotateRate, true);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.ViveOldRotatePad, false);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.ViveOldMovePad, false);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.ViveOldMoveRotatePadAriaRate, false);
+			}
+			else
+			{
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.ViveSnapRotateEnable, false);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.ViveSnapRotateRate, false);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.ViveOldRotatePad, true);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.ViveOldMovePad, true);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.ViveOldMoveRotatePadAriaRate, true);
+			}
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.ViveSnapRotateEnable, this.SetupButton(parentItem, "vive use snap rotate", delegate(bool isLeft)
+		{
+			this.cmSystem.OvrUseSnapRotate = isLeft;
+			this.Log("Vive\u3000パッド端で回転 : " + this.cmSystem.OvrUseSnapRotate);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.ViveSnapRotateRate, this.SetupSlider(parentItem, "vive use snap rotate rate", ConfigVRCtrl.VR_CAMERA_SNAP_ROT_VALUE.x, ConfigVRCtrl.VR_CAMERA_SNAP_ROT_VALUE.y, delegate(float value)
+		{
+			this.cmSystem.OvrUseSnapRotateRate = (int)value;
+			this.Log("Vive\u3000パッド端の回転量 : " + this.cmSystem.OvrUseSnapRotateRate);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.ViveOldRotatePad, this.SetupButton(parentItem, "vive old rotate pad", delegate(bool isLeft)
+		{
+			this.cmSystem.SConfig.OvrViveSmoothRotatePadAreaUse = isLeft;
+			this.Log("Vive\u3000(スムーズ移動)パッド左右端で回転 : " + this.cmSystem.SConfig.OvrViveSmoothRotatePadAreaUse);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.ViveOldMovePad, this.SetupButton(parentItem, "vive old move pad", delegate(bool isLeft)
+		{
+			this.cmSystem.SConfig.OvrViveSmoothupDownPadAreaUse = isLeft;
+			this.Log("Vive\u3000(スムーズ移動)パッド上下端で上下 : " + this.cmSystem.SConfig.OvrViveSmoothupDownPadAreaUse);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.ViveOldMoveRotatePadAriaRate, this.SetupSlider(parentItem, "vive old rotate pad aria rate", 10f, 80f, delegate(float value)
+		{
+			this.cmSystem.SConfig.OvrViveSmoothRotatePadAriaRate = value;
+			this.Log("Vive\u3000(スムーズ移動)端の領域 : " + this.cmSystem.SConfig.OvrViveSmoothRotatePadAriaRate);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.ViveDDTouchToClick, this.SetupButton(parentItem, "vive dd touch to click", delegate(bool isLeft)
+		{
+			this.cmSystem.SConfig.OvrDDTouchToClick = isLeft;
+			this.Log("Vive\u3000デスクトップスクリーンに触れるとクリック : " + this.cmSystem.SConfig.OvrDDTouchToClick);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.ViveOvrTabletFrameHideWhenMsgWndVisible, this.SetupButton(parentItem, "vive OvrTabletFrameHideWhenMsgWndVisible", delegate(bool isLeft)
+		{
+			this.cmSystem.SConfig.OvrTabletFrameHideWhenMsgWndVisible = isLeft;
+			this.Log("Vive\u3000メッセージ中タブレット枠を非表示 : " + this.cmSystem.SConfig.OvrTabletFrameHideWhenMsgWndVisible);
+		}));
+	}
+
+	private void SetupOculusTouchUI(GameObject parentItem)
+	{
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.TouchMoveMode, this.SetupButton(parentItem, "touch move mode", delegate(bool isLeft)
+		{
+			this.cmSystem.SConfig.OvrMoveType = ((!isLeft) ? CMSystem.SerializeConfig.OVR_MOVE_TYPE.DIRECTION : CMSystem.SerializeConfig.OVR_MOVE_TYPE.WARP_DRAW_STEPROT);
+			this.Log("Touch\u3000移動方法 : " + this.cmSystem.SConfig.OvrMoveType);
+			if (isLeft)
+			{
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.TouchSnapRotateEnable, true);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.TouchSnapRotateRate, true);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.TouchOldMoveStick, false);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.TouchOldRotateStick, false);
+			}
+			else
+			{
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.TouchSnapRotateEnable, false);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.TouchSnapRotateRate, false);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.TouchOldMoveStick, true);
+				this.SetItemShowFlag(ConfigVRCtrl.TypeItem.TouchOldRotateStick, true);
+			}
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.TouchSnapRotateEnable, this.SetupButton(parentItem, "touch use snap rotate", delegate(bool isLeft)
+		{
+			this.cmSystem.OvrUseSnapRotate = isLeft;
+			this.Log("Touch\u3000スティック傾けで回転 : " + this.cmSystem.OvrUseSnapRotate);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.TouchSnapRotateRate, this.SetupSlider(parentItem, "touch use snap rotate rate", ConfigVRCtrl.VR_CAMERA_SNAP_ROT_VALUE.x, ConfigVRCtrl.VR_CAMERA_SNAP_ROT_VALUE.y, delegate(float value)
+		{
+			this.cmSystem.OvrUseSnapRotateRate = (int)value;
+			this.Log("Touch\u3000スティック傾けの回転量 : " + this.cmSystem.OvrUseSnapRotateRate);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.TouchOldMoveStick, this.SetupButton(parentItem, "touch old move stick", delegate(bool isLeft)
+		{
+			this.cmSystem.SConfig.OvrRiftTriggerStickUpDown = isLeft;
+			this.Log("Touch\u3000(スムーズ移動)グリップとスティックで回転 : " + this.cmSystem.SConfig.OvrRiftTriggerStickUpDown);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.TouchOldRotateStick, this.SetupButton(parentItem, "touch old rotate stick", delegate(bool isLeft)
+		{
+			this.cmSystem.SConfig.OvrRiftGripStickRotate = isLeft;
+			this.Log("Touch\u3000(スムーズ移動)トリガーとスティックで上下 : " + this.cmSystem.SConfig.OvrRiftGripStickRotate);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.TouchDDTouchToClick, this.SetupButton(parentItem, "touch dd touch to click", delegate(bool isLeft)
+		{
+			this.cmSystem.SConfig.OvrDDTouchToClick = isLeft;
+			this.Log("Touch\u3000デスクトップスクリーンに触れるとクリック : " + this.cmSystem.SConfig.OvrDDTouchToClick);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.TouchOvrTabletFrameHideWhenMsgWndVisible, this.SetupButton(parentItem, "touch OvrTabletFrameHideWhenMsgWndVisible", delegate(bool isLeft)
+		{
+			this.cmSystem.SConfig.OvrTabletFrameHideWhenMsgWndVisible = isLeft;
+			this.Log("Touch\u3000メッセージ中タブレット枠を非表示 : " + this.cmSystem.SConfig.OvrTabletFrameHideWhenMsgWndVisible);
+		}));
+	}
+
+	private void SetupHMDOnlyUI(GameObject parentItem)
+	{
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.HMDOnlyCameraPlaneMovement, this.SetupButton(parentItem, "no touch plane movement", delegate(bool isLeft)
+		{
+			this.cmSystem.VRCameraPlaneMove = isLeft;
+			this.Log("HMDのみ\u3000カメラの平行移動 : " + this.cmSystem.VRCameraPlaneMove);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.HMDOnlyMouseRotateEnable, this.SetupButton(parentItem, "no touch mouse rot enable", delegate(bool isLeft)
+		{
+			this.cmSystem.OvrMouseRot = isLeft;
+			this.Log("HMDのみ\u3000マウスでカメラ回転 : " + this.cmSystem.OvrMouseRot);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.HMDOnlyMouseRotateSpeed, this.SetupSlider(parentItem, "no touch mouse rot speed", ConfigVRCtrl.VR_CAMERA_MOUSE_ROT_VALUE.x, ConfigVRCtrl.VR_CAMERA_MOUSE_ROT_VALUE.y, delegate(float value)
+		{
+			this.cmSystem.VRCameraRotSpeedMouse = value;
+			this.Log("HMDのみ\u3000マウスのカメラ回転速度 : " + this.cmSystem.VRCameraRotSpeedMouse);
+		}));
+	}
+
+	private void Setup2DModeUI(GameObject parentItem)
+	{
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.DummyMouseRotateSpeed, this.SetupSlider(parentItem, "2d mouse rot speed", ConfigVRCtrl.VR_CAMERA_MOUSE_ROT_VALUE.x, ConfigVRCtrl.VR_CAMERA_MOUSE_ROT_VALUE.y, delegate(float value)
+		{
+			this.cmSystem.VRCameraRotSpeedMouse = value;
+			this.Log("2Dモード\u3000マウスのカメラ回転速度 : " + this.cmSystem.VRCameraRotSpeedMouse);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.DummyMouseRotateInverse, this.SetupButton(parentItem, "2d mouse rot inverse", delegate(bool isLeft)
+		{
+			this.cmSystem.VRCamRotDownUp = isLeft;
+			this.Log("2Dモード\u3000マウスのカメラ反転 : " + this.cmSystem.VRCamRotDownUp);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.DummyCameraPlaneMovement, this.SetupButton(parentItem, "2d plane movement", delegate(bool isLeft)
+		{
+			this.cmSystem.VRCameraPlaneMove = isLeft;
+			this.Log("2Dモード\u3000カメラの平行移動 : " + this.cmSystem.VRCameraPlaneMove);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.DummyShowMan, this.SetupButton(parentItem, "2d show man", delegate(bool isLeft)
+		{
+			this.cmSystem.VRManShow = isLeft;
+			this.Log("2Dモード\u3000男の表示 : " + this.cmSystem.VRManShow);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.DummyCameraFov, this.SetupSlider(parentItem, "2d camera field of view", ConfigVRCtrl.VR2D_CAMERA_FOV_VALUE.x, ConfigVRCtrl.VR2D_CAMERA_FOV_VALUE.y, delegate(float value)
+		{
+			this.cmSystem.VRCameraFov = value;
+			this.Log("2Dモード\u3000カメラの画角 : " + this.cmSystem.VRCameraFov);
+		}));
+		Collider[] componentsInChildren = this.dicItem[ConfigVRCtrl.TypeItem.DummyCameraFov].GetComponentsInChildren<Collider>();
+		foreach (Collider collider in componentsInChildren)
+		{
+			UIEventTrigger uieventTrigger = collider.gameObject.AddComponent<UIEventTrigger>();
+			EventDelegate.Add(uieventTrigger.onPress, delegate
+			{
+				UISprite cache = base.cachedObjectDic.GetCache<UISprite>("Background");
+				TweenAlpha.Begin(cache.gameObject, 0.25f, 0.25f);
+			});
+			EventDelegate.Add(uieventTrigger.onRelease, delegate
+			{
+				UISprite cache = base.cachedObjectDic.GetCache<UISprite>("Background");
+				TweenAlpha.Begin(cache.gameObject, 0.25f, 1f);
+			});
+		}
+	}
+
+	private ConfigVRCtrl.ParentSlider SetupSlider(GameObject parent, string objName, float min, float max, Action<float> onValueChanged)
+	{
+		ConfigVRCtrl.ParentSlider parentSlider = UTY.GetChildObject(parent, objName, false).AddComponent<ConfigVRCtrl.ParentSlider>();
+		parentSlider.min = min;
+		parentSlider.max = max;
+		ConfigVRCtrl.ParentSlider parentSlider2 = parentSlider;
+		parentSlider2.onValueChanged = (Action<float>)Delegate.Combine(parentSlider2.onValueChanged, onValueChanged);
+		return parentSlider;
+	}
+
+	private ConfigVRCtrl.ParentButton SetupButton(GameObject parent, string objName, Action<bool> onClickIsLeft)
+	{
+		ConfigVRCtrl.ParentButton parentButton = UTY.GetChildObject(parent, objName, false).AddComponent<ConfigVRCtrl.ParentButton>();
+		ConfigVRCtrl.ParentButton parentButton2 = parentButton;
+		parentButton2.onClickIsLeft = (Action<bool>)Delegate.Combine(parentButton2.onClickIsLeft, onClickIsLeft);
+		return parentButton;
+	}
+
+	private void ItemSwitchingOfDevice()
+	{
+		if (this.dicItem == null)
+		{
+			Debug.Log("[ConfigVRCtrl] まだ項目の初期化は行っていません");
+			return;
+		}
+		GameMain.VRDeviceType vrdeviceTypeID = GameMain.Instance.VRDeviceTypeID;
+		Dictionary<ConfigVRCtrl.TypeItem, bool> dictionary = new Dictionary<ConfigVRCtrl.TypeItem, bool>();
+		Array values = Enum.GetValues(typeof(ConfigVRCtrl.TypeItem));
+		for (int i = 0; i < values.Length; i++)
+		{
+			dictionary.Add((ConfigVRCtrl.TypeItem)values.GetValue(i), false);
+		}
+		dictionary[ConfigVRCtrl.TypeItem.CommonCameraMoveSpeed] = true;
+		dictionary[ConfigVRCtrl.TypeItem.CommonCameraRotSpeed] = true;
+		dictionary[ConfigVRCtrl.TypeItem.CommonEyeHeight] = true;
+		dictionary[ConfigVRCtrl.TypeItem.CommonSitHeight] = true;
+		dictionary[ConfigVRCtrl.TypeItem.CommonShowDesktopScreen] = true;
+		if (vrdeviceTypeID == GameMain.VRDeviceType.NON)
+		{
+			dictionary[ConfigVRCtrl.TypeItem.DummyCameraFov] = true;
+			dictionary[ConfigVRCtrl.TypeItem.DummyCameraPlaneMovement] = true;
+			dictionary[ConfigVRCtrl.TypeItem.DummyMouseRotateInverse] = true;
+			dictionary[ConfigVRCtrl.TypeItem.DummyMouseRotateSpeed] = true;
+			dictionary[ConfigVRCtrl.TypeItem.DummyShowMan] = true;
+		}
+		else if (vrdeviceTypeID == GameMain.VRDeviceType.RIFT)
+		{
+			dictionary[ConfigVRCtrl.TypeItem.HMDOnlyCameraPlaneMovement] = true;
+			dictionary[ConfigVRCtrl.TypeItem.HMDOnlyMouseRotateEnable] = true;
+			dictionary[ConfigVRCtrl.TypeItem.HMDOnlyMouseRotateSpeed] = true;
+		}
+		else if (vrdeviceTypeID == GameMain.VRDeviceType.FOVE)
+		{
+			dictionary[ConfigVRCtrl.TypeItem.HMDOnlyCameraPlaneMovement] = true;
+			dictionary[ConfigVRCtrl.TypeItem.HMDOnlyMouseRotateEnable] = true;
+			dictionary[ConfigVRCtrl.TypeItem.HMDOnlyMouseRotateSpeed] = true;
+		}
+		else if (vrdeviceTypeID == GameMain.VRDeviceType.VIVE)
+		{
+			dictionary[ConfigVRCtrl.TypeItem.ViveFloorHeightType] = true;
+			dictionary[ConfigVRCtrl.TypeItem.ViveMoveMode] = true;
+			dictionary[ConfigVRCtrl.TypeItem.ViveSnapRotateEnable] = (this.cmSystem.SConfig.OvrMoveType == CMSystem.SerializeConfig.OVR_MOVE_TYPE.WARP_DRAW_STEPROT);
+			dictionary[ConfigVRCtrl.TypeItem.ViveSnapRotateRate] = (this.cmSystem.SConfig.OvrMoveType == CMSystem.SerializeConfig.OVR_MOVE_TYPE.WARP_DRAW_STEPROT);
+			dictionary[ConfigVRCtrl.TypeItem.ViveOldRotatePad] = (this.cmSystem.SConfig.OvrMoveType == CMSystem.SerializeConfig.OVR_MOVE_TYPE.DIRECTION);
+			dictionary[ConfigVRCtrl.TypeItem.ViveOldMovePad] = (this.cmSystem.SConfig.OvrMoveType == CMSystem.SerializeConfig.OVR_MOVE_TYPE.DIRECTION);
+			dictionary[ConfigVRCtrl.TypeItem.ViveOldMoveRotatePadAriaRate] = (this.cmSystem.SConfig.OvrMoveType == CMSystem.SerializeConfig.OVR_MOVE_TYPE.DIRECTION);
+			dictionary[ConfigVRCtrl.TypeItem.ViveDDTouchToClick] = false;
+			dictionary[ConfigVRCtrl.TypeItem.ViveOvrTabletFrameHideWhenMsgWndVisible] = true;
+		}
+		else if (vrdeviceTypeID == GameMain.VRDeviceType.RIFT_TOUCH)
+		{
+			dictionary[ConfigVRCtrl.TypeItem.TouchMoveMode] = true;
+			dictionary[ConfigVRCtrl.TypeItem.TouchSnapRotateEnable] = (this.cmSystem.SConfig.OvrMoveType == CMSystem.SerializeConfig.OVR_MOVE_TYPE.WARP_DRAW_STEPROT);
+			dictionary[ConfigVRCtrl.TypeItem.TouchSnapRotateRate] = (this.cmSystem.SConfig.OvrMoveType == CMSystem.SerializeConfig.OVR_MOVE_TYPE.WARP_DRAW_STEPROT);
+			dictionary[ConfigVRCtrl.TypeItem.TouchOldRotateStick] = (this.cmSystem.SConfig.OvrMoveType == CMSystem.SerializeConfig.OVR_MOVE_TYPE.DIRECTION);
+			dictionary[ConfigVRCtrl.TypeItem.TouchOldMoveStick] = (this.cmSystem.SConfig.OvrMoveType == CMSystem.SerializeConfig.OVR_MOVE_TYPE.DIRECTION);
+			dictionary[ConfigVRCtrl.TypeItem.TouchDDTouchToClick] = false;
+			dictionary[ConfigVRCtrl.TypeItem.TouchOvrTabletFrameHideWhenMsgWndVisible] = true;
+		}
+		dictionary[ConfigVRCtrl.TypeItem.DummyShowMan] = false;
+		foreach (KeyValuePair<ConfigVRCtrl.TypeItem, bool> keyValuePair in dictionary)
+		{
+			this.dicItem[keyValuePair.Key].gameObject.SetActive(keyValuePair.Value);
+		}
+		UIGrid cache = base.cachedObjectDic.GetCache<UIGrid>("Parent Grid");
+		cache.Reposition();
+	}
+
+	private void SetItemShowFlag(ConfigVRCtrl.TypeItem type, bool isShow)
+	{
+		if (this.dicItem == null)
+		{
+			Debug.Log("[ConfigVRCtrl] まだ項目の初期化は行っていません");
+			return;
+		}
+		if (this.dicItem[type].gameObject.activeSelf == isShow)
+		{
+			return;
+		}
+		this.dicItem[type].gameObject.SetActive(isShow);
+		UIGrid cache = base.cachedObjectDic.GetCache<UIGrid>("Parent Grid");
+		cache.Reposition();
+	}
+
+	private void LoadConfigData()
+	{
+		if (this.dicItem == null)
+		{
+			Debug.Log("[ConfigVRCtrl] まだ項目の初期化は行っていません");
+			return;
+		}
+		foreach (KeyValuePair<ConfigVRCtrl.TypeItem, ConfigVRCtrl.ParentItem> keyValuePair in this.dicItem)
+		{
+			switch (keyValuePair.Key)
+			{
+			case ConfigVRCtrl.TypeItem.CommonEyeHeight:
+				keyValuePair.Value.Set(this.cmSystem.VRCameraHeightStand);
+				break;
+			case ConfigVRCtrl.TypeItem.CommonSitHeight:
+				keyValuePair.Value.Set(this.cmSystem.VRCameraHeightSit);
+				break;
+			case ConfigVRCtrl.TypeItem.CommonCameraMoveSpeed:
+				keyValuePair.Value.Set(this.cmSystem.VRCameraMoveSpeedKey);
+				break;
+			case ConfigVRCtrl.TypeItem.CommonCameraRotSpeed:
+				keyValuePair.Value.Set(this.cmSystem.VRCameraRotSpeedKey);
+				break;
+			case ConfigVRCtrl.TypeItem.CommonShowDesktopScreen:
+				keyValuePair.Value.Set(GameMain.Instance.BgMgr.isShowDesktopScreen);
+				break;
+			case ConfigVRCtrl.TypeItem.ViveFloorHeightType:
+				keyValuePair.Value.Set(this.cmSystem.OvrCameraHeightType == CMSystem.OVR_CAM_HEIGHT_TYPE.REAL);
+				break;
+			case ConfigVRCtrl.TypeItem.ViveSnapRotateEnable:
+				keyValuePair.Value.Set(this.cmSystem.OvrUseSnapRotate);
+				break;
+			case ConfigVRCtrl.TypeItem.ViveSnapRotateRate:
+				keyValuePair.Value.Set((float)this.cmSystem.OvrUseSnapRotateRate);
+				break;
+			case ConfigVRCtrl.TypeItem.ViveMoveMode:
+				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrMoveType == CMSystem.SerializeConfig.OVR_MOVE_TYPE.WARP_DRAW_STEPROT);
+				break;
+			case ConfigVRCtrl.TypeItem.ViveOldRotatePad:
+				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrViveSmoothRotatePadAreaUse);
+				break;
+			case ConfigVRCtrl.TypeItem.ViveOldMovePad:
+				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrViveSmoothupDownPadAreaUse);
+				break;
+			case ConfigVRCtrl.TypeItem.ViveOldMoveRotatePadAriaRate:
+				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrViveSmoothRotatePadAriaRate);
+				break;
+			case ConfigVRCtrl.TypeItem.ViveDDTouchToClick:
+				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrDDTouchToClick);
+				break;
+			case ConfigVRCtrl.TypeItem.ViveOvrTabletFrameHideWhenMsgWndVisible:
+				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrTabletFrameHideWhenMsgWndVisible);
+				break;
+			case ConfigVRCtrl.TypeItem.TouchSnapRotateEnable:
+				keyValuePair.Value.Set(this.cmSystem.OvrUseSnapRotate);
+				break;
+			case ConfigVRCtrl.TypeItem.TouchSnapRotateRate:
+				keyValuePair.Value.Set((float)this.cmSystem.OvrUseSnapRotateRate);
+				break;
+			case ConfigVRCtrl.TypeItem.TouchMoveMode:
+				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrMoveType == CMSystem.SerializeConfig.OVR_MOVE_TYPE.WARP_DRAW_STEPROT);
+				break;
+			case ConfigVRCtrl.TypeItem.TouchOldRotateStick:
+				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrRiftGripStickRotate);
+				break;
+			case ConfigVRCtrl.TypeItem.TouchOldMoveStick:
+				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrRiftTriggerStickUpDown);
+				break;
+			case ConfigVRCtrl.TypeItem.TouchDDTouchToClick:
+				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrDDTouchToClick);
+				break;
+			case ConfigVRCtrl.TypeItem.TouchOvrTabletFrameHideWhenMsgWndVisible:
+				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrTabletFrameHideWhenMsgWndVisible);
+				break;
+			case ConfigVRCtrl.TypeItem.HMDOnlyCameraPlaneMovement:
+				keyValuePair.Value.Set(this.cmSystem.VRCameraPlaneMove);
+				break;
+			case ConfigVRCtrl.TypeItem.HMDOnlyMouseRotateEnable:
+				keyValuePair.Value.Set(this.cmSystem.OvrMouseRot);
+				break;
+			case ConfigVRCtrl.TypeItem.HMDOnlyMouseRotateSpeed:
+				keyValuePair.Value.Set(this.cmSystem.VRCameraRotSpeedMouse);
+				break;
+			case ConfigVRCtrl.TypeItem.DummyMouseRotateSpeed:
+				keyValuePair.Value.Set(this.cmSystem.VRCameraRotSpeedMouse);
+				break;
+			case ConfigVRCtrl.TypeItem.DummyMouseRotateInverse:
+				keyValuePair.Value.Set(this.cmSystem.VRCamRotDownUp);
+				break;
+			case ConfigVRCtrl.TypeItem.DummyCameraPlaneMovement:
+				keyValuePair.Value.Set(this.cmSystem.VRCameraPlaneMove);
+				break;
+			case ConfigVRCtrl.TypeItem.DummyShowMan:
+				keyValuePair.Value.Set(this.cmSystem.VRManShow);
+				break;
+			case ConfigVRCtrl.TypeItem.DummyCameraFov:
+				keyValuePair.Value.Set(this.cmSystem.VRCameraFov);
+				break;
+			default:
+				Debug.LogError("[ConfigVRCtrl] 種類「" + keyValuePair.Key + "」のセッターがない");
+				NDebug.Assert("[ConfigVRCtrl] 種類「" + keyValuePair.Key + "」のセッターがない", false);
+				break;
+			}
+		}
+	}
+
+	private void OnApplicationQuit()
+	{
+		this.m_IsQuittingApplication = true;
+	}
+
+	private void OnDestroy()
+	{
+		if (this.m_IsQuittingApplication)
+		{
+			return;
+		}
+		if (ConfigVRCtrl.instance != null && ConfigVRCtrl.instance == this)
+		{
+			ConfigVRCtrl.m_Instance = null;
+		}
+		if (this.dicItem != null)
+		{
+			this.dicItem.Clear();
+			this.dicItem = null;
+		}
+		this.onClickOK = null;
+	}
+
+	private static ConfigVRCtrl m_Instance;
+
+	private static readonly Vector2 COMMON_EYE_HEIGHT_VALUE = new Vector2(1.5f, 1.8f);
+
+	private static readonly Vector2 COMMON_SITTING_HEIGHT_VALUE = new Vector2(0.7f, 1f);
+
+	private static readonly Vector2 COMMON_CAMERA_MOVE_VALUE = new Vector2(0f, 1f);
+
+	private static readonly Vector2 COMMON_CAMERA_ROT_VALUE = new Vector2(0f, 1f);
+
+	private static readonly Vector2 VR_CAMERA_SNAP_ROT_VALUE = new Vector2(10f, 80f);
+
+	private static readonly Vector2 VR_CAMERA_MOUSE_ROT_VALUE = new Vector2(0f, 1f);
+
+	private static readonly Vector2 VR2D_CAMERA_FOV_VALUE = new Vector2(30f, 60f);
+
+	private Dictionary<ConfigVRCtrl.TypeItem, ConfigVRCtrl.ParentItem> m_DicItem;
+
+	private bool m_IsQuittingApplication;
+
+	private abstract class ParentItem : MonoBehaviour
+	{
+		public UILabel label
+		{
+			get
+			{
+				return this.m_Label;
+			}
+		}
+
+		protected virtual void Awake()
+		{
+			this.m_Label = UTY.GetChildObject(base.gameObject, "name", false).GetComponent<UILabel>();
+			if (this.m_Label == null)
+			{
+				string message = "[ConfigVRCtrl] " + base.gameObject.name + "/nameに、\nUILabel のコンポーネントがありませんでした";
+				NDebug.Assert(message, false);
+				Debug.LogError(message);
+			}
+		}
+
+		public abstract void Set(object value);
+
+		private UILabel m_Label;
+	}
+
+	private class ParentSlider : ConfigVRCtrl.ParentItem
+	{
+		public UISlider slider
+		{
+			get
+			{
+				return this.m_Slider;
+			}
+			private set
+			{
+				this.m_Slider = value;
+			}
+		}
+
+		public float normalizedValue
+		{
+			get
+			{
+				return this.slider.value;
+			}
+			set
+			{
+				this.slider.value = value;
+			}
+		}
+
+		public float min
+		{
+			get
+			{
+				return this.m_Min;
+			}
+			set
+			{
+				this.m_Min = value;
+			}
+		}
+
+		public float max
+		{
+			get
+			{
+				return this.m_Max;
+			}
+			set
+			{
+				this.m_Max = value;
+			}
+		}
+
+		public float value
+		{
+			get
+			{
+				return Mathf.Lerp(this.min, this.max, this.normalizedValue);
+			}
+			set
+			{
+				this.normalizedValue = Mathf.InverseLerp(this.min, this.max, value);
+			}
+		}
+
+		public Action<float> onValueChanged { get; set; }
+
+		public Action onDragFinished { get; set; }
+
+		protected override void Awake()
+		{
+			base.Awake();
+			GameObject childObject = UTY.GetChildObject(base.gameObject, "slider", false);
+			this.slider = childObject.GetComponent<UISlider>();
+			if (this.slider == null)
+			{
+				string message = string.Concat(new string[]
+				{
+					"[ConfigVRCtrl] ",
+					base.gameObject.name,
+					"/",
+					childObject.name,
+					"に、\nUISlider のコンポーネントがありませんでした"
+				});
+				NDebug.Assert(message, false);
+				Debug.LogError(message);
+			}
+			EventDelegate.Add(this.slider.onChange, delegate
+			{
+				if (this.onValueChanged != null)
+				{
+					this.onValueChanged(this.value);
+				}
+			});
+			UISlider slider = this.slider;
+			slider.onDragFinished = (UIProgressBar.OnDragFinished)Delegate.Combine(slider.onDragFinished, new UIProgressBar.OnDragFinished(delegate
+			{
+				if (this.onDragFinished != null)
+				{
+					this.onDragFinished();
+				}
+			}));
+		}
+
+		public override void Set(object value)
+		{
+			this.value = (float)value;
+		}
+
+		private UISlider m_Slider;
+
+		private float m_Min;
+
+		private float m_Max = 1f;
+	}
+
+	private class ParentButton : ConfigVRCtrl.ParentItem
+	{
+		public UIButton buttonRight
+		{
+			get
+			{
+				return this.m_ButtonRight;
+			}
+			private set
+			{
+				this.m_ButtonRight = value;
+			}
+		}
+
+		public UIButton buttonLeft
+		{
+			get
+			{
+				return this.m_ButtonLeft;
+			}
+			private set
+			{
+				this.m_ButtonLeft = value;
+			}
+		}
+
+		public Action<bool> onClickIsLeft { get; set; }
+
+		protected override void Awake()
+		{
+			base.Awake();
+			GameObject childObject = UTY.GetChildObject(base.gameObject, "button right", false);
+			this.buttonRight = childObject.GetComponent<UIButton>();
+			if (this.buttonRight == null)
+			{
+				string message = string.Concat(new string[]
+				{
+					"[ConfigVRCtrl] ",
+					base.gameObject.name,
+					"/",
+					childObject.name,
+					"に、\nUIButton のコンポーネントがありませんでした"
+				});
+				NDebug.Assert(message, false);
+				Debug.LogError(message);
+			}
+			childObject = UTY.GetChildObject(base.gameObject, "button left", false);
+			this.buttonLeft = childObject.GetComponent<UIButton>();
+			if (this.buttonLeft == null)
+			{
+				string message2 = string.Concat(new string[]
+				{
+					"[ConfigVRCtrl] ",
+					base.gameObject.name,
+					"/",
+					childObject.name,
+					"に、\nUIButton のコンポーネントがありませんでした"
+				});
+				NDebug.Assert(message2, false);
+				Debug.LogError(message2);
+			}
+			EventDelegate.Add(this.buttonRight.onClick, delegate
+			{
+				if (this.onClickIsLeft != null)
+				{
+					this.onClickIsLeft(false);
+				}
+				this.OnClickButton(false);
+			});
+			EventDelegate.Add(this.buttonLeft.onClick, delegate
+			{
+				if (this.onClickIsLeft != null)
+				{
+					this.onClickIsLeft(true);
+				}
+				this.OnClickButton(true);
+			});
+		}
+
+		private void OnClickButton(bool isLeft)
+		{
+			this.buttonLeft.defaultColor = ((!isLeft) ? ConfigVRCtrl.ParentButton.ButtonDefaultColor : ConfigVRCtrl.ParentButton.ButtonClickedColor);
+			this.buttonRight.defaultColor = (isLeft ? ConfigVRCtrl.ParentButton.ButtonDefaultColor : ConfigVRCtrl.ParentButton.ButtonClickedColor);
+		}
+
+		public void Emulate(bool isLeft)
+		{
+			UIButton uibutton = (!isLeft) ? this.buttonRight : this.buttonLeft;
+			EventDelegate.Execute(uibutton.onClick);
+		}
+
+		public override void Set(object value)
+		{
+			this.Emulate((bool)value);
+		}
+
+		private static Color ButtonDefaultColor = new Color(1f, 1f, 1f, 0.5f);
+
+		private static Color ButtonClickedColor = Color.white;
+
+		private UIButton m_ButtonRight;
+
+		private UIButton m_ButtonLeft;
+	}
+
+	private enum TypeItem
+	{
+		CommonEyeHeight,
+		CommonSitHeight,
+		CommonCameraMoveSpeed,
+		CommonCameraRotSpeed,
+		CommonShowDesktopScreen,
+		ViveFloorHeightType,
+		ViveSnapRotateEnable,
+		ViveSnapRotateRate,
+		ViveMoveMode,
+		ViveOldRotatePad,
+		ViveOldMovePad,
+		ViveOldMoveRotatePadAriaRate,
+		ViveDDTouchToClick,
+		ViveOvrTabletFrameHideWhenMsgWndVisible,
+		TouchSnapRotateEnable,
+		TouchSnapRotateRate,
+		TouchMoveMode,
+		TouchOldRotateStick,
+		TouchOldMoveStick,
+		TouchDDTouchToClick,
+		TouchOvrTabletFrameHideWhenMsgWndVisible,
+		HMDOnlyCameraPlaneMovement,
+		HMDOnlyMouseRotateEnable,
+		HMDOnlyMouseRotateSpeed,
+		DummyMouseRotateSpeed,
+		DummyMouseRotateInverse,
+		DummyCameraPlaneMovement,
+		DummyShowMan,
+		DummyCameraFov
+	}
+}

+ 355 - 0
Assembly-CSharp/ConfrontCutIn.cs

@@ -0,0 +1,355 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConfrontCutIn : MonoBehaviour
+{
+	private float m_FadeAlpha
+	{
+		get
+		{
+			return this.m_FadeSprite.color.a;
+		}
+		set
+		{
+			Color color = this.m_FadeSprite.color;
+			color.a = value;
+			this.m_FadeSprite.color = color;
+		}
+	}
+
+	private float m_MydeltaTime
+	{
+		get
+		{
+			return Time.deltaTime * (float)this.m_TimeSpeed;
+		}
+	}
+
+	private void Init(string end_label)
+	{
+		this.m_CutinBG.enabled = GameMain.Instance.VRMode;
+		GameMain.Instance.SoundMgr.StopBGM(0f);
+		GameMain.Instance.MainCamera.FadeIn(0.5f, false, null, true, true, default(Color));
+		UICamera.InputEnable = false;
+		GameMain.Instance.BgMgr.DeleteBg();
+		this.m_EndJumpLabel = end_label;
+		GameMain.Instance.CharacterMgr.VisibleAll(false);
+		this.m_VSText.gameObject.SetActive(false);
+		foreach (ParticleSystem particleSystem in this.m_CutInEffect)
+		{
+			particleSystem.gameObject.SetActive(false);
+		}
+		this.m_FadeAlpha = 0f;
+		this.m_PlayerSprite.sprite2D = ShootCutInTex.GetCutInTex(DanceBattle_Mgr.CharaType.Player, ShootCutInTex.CutInName.対峙演出);
+		this.m_EnemySprite.sprite2D = ShootCutInTex.GetCutInTex(DanceBattle_Mgr.CharaType.Enemy, ShootCutInTex.CutInName.対峙演出);
+		base.StartCoroutine(this.SpriteCutIn());
+	}
+
+	private void CheckJinglePlay(ConfrontCutIn.CutinEvent cutin_event, bool first)
+	{
+		if (cutin_event == this.m_JingleTiming && first == this.m_IsBeginPlay)
+		{
+			if (this.m_DelayTime > 0f)
+			{
+				base.Invoke("PlayJingle", this.m_DelayTime);
+			}
+			else
+			{
+				this.PlayJingle();
+			}
+		}
+	}
+
+	private void PlayJingle()
+	{
+		GameMain.Instance.SoundMgr.PlaySe(this.m_JingleSe, false);
+	}
+
+	private void Update()
+	{
+		this.m_EnemySprite.transform.localPosition = Vector3.right * (float)this.m_EnemySprite.width / 2f;
+		this.m_TimeSpeed = ((!Input.GetKey(KeyCode.LeftControl) && !Input.GetKey(KeyCode.RightControl)) ? 1 : 2);
+	}
+
+	private IEnumerator SpriteCutIn()
+	{
+		float timer = 0f;
+		bool enemy_cut = false;
+		Vector3 player_first = Vector3.zero;
+		Vector3 enemy_first = Vector3.zero;
+		if (GameMain.Instance.VRMode)
+		{
+			player_first.x = (float)(-(float)this.m_UIRect_Width / 2);
+			enemy_first.x = (float)(this.m_UIRect_Width / 2);
+		}
+		else
+		{
+			player_first.y = (enemy_first.y = (float)(Screen.height / 2));
+			enemy_first.x = (float)(Screen.width * 2);
+			enemy_first = UI_ScreenFitBase.PointToScreenPos(enemy_first);
+			player_first.x = (float)(-(float)Screen.width);
+			player_first = UI_ScreenFitBase.PointToScreenPos(player_first);
+		}
+		while (GameMain.Instance.MainCamera.IsFadeOut())
+		{
+			yield return null;
+		}
+		yield return new WaitForSeconds(this.m_CutInStart / (float)this.m_TimeSpeed);
+		this.CheckJinglePlay(ConfrontCutIn.CutinEvent.PlayerCut, true);
+		for (;;)
+		{
+			timer += this.m_MydeltaTime;
+			if (!enemy_cut)
+			{
+				this.m_PlayerSprite.transform.parent.localPosition = Vector3.Lerp(player_first, Vector3.zero, this.TimeRate01(timer, this.m_CutInTime));
+			}
+			else
+			{
+				this.m_EnemySprite.transform.parent.localPosition = Vector3.Lerp(enemy_first, Vector3.zero, this.TimeRate01(timer, this.m_CutInTime));
+			}
+			this.m_CutinBG.transform.position = this.m_PlayerSprite.transform.position;
+			if (timer > this.m_CutInTime)
+			{
+				if (!enemy_cut)
+				{
+					this.CheckJinglePlay(ConfrontCutIn.CutinEvent.PlayerCut, false);
+				}
+				else
+				{
+					this.CheckJinglePlay(ConfrontCutIn.CutinEvent.EnemyCut, false);
+				}
+				yield return new WaitForSeconds(this.m_CutInWait / (float)this.m_TimeSpeed);
+				if (enemy_cut)
+				{
+					break;
+				}
+				this.CheckJinglePlay(ConfrontCutIn.CutinEvent.EnemyCut, true);
+				enemy_cut = true;
+				timer = 0f;
+			}
+			yield return null;
+		}
+		base.StartCoroutine(this.TextScaling());
+		yield break;
+		yield break;
+	}
+
+	private IEnumerator TextScaling()
+	{
+		this.m_VSText.gameObject.SetActive(true);
+		float timer = 0f;
+		Vector3 first = Vector3.zero;
+		if (GameMain.Instance.VRMode)
+		{
+			first.y = (float)(this.m_UIRect_Width / 2);
+		}
+		else
+		{
+			first.x = (float)(Screen.width / 2);
+			first.y = (float)(Screen.width / 2);
+			first = UI_ScreenFitBase.PointToScreenPos(first);
+			first.y *= -1f;
+		}
+		this.CheckJinglePlay(ConfrontCutIn.CutinEvent.TextZoom, true);
+		for (;;)
+		{
+			timer += this.m_MydeltaTime;
+			this.m_VSText.transform.localPosition = Vector3.Lerp(first, Vector3.zero, Mathf.Clamp01(timer / this.m_TextScaling));
+			UIWidget vstext = this.m_VSText;
+			int num = (int)Mathf.Lerp((float)this.m_TextMax, (float)this.m_TextMin, Mathf.Clamp01(timer / this.m_TextScaling));
+			this.m_VSText.height = num;
+			vstext.width = num;
+			if (timer > this.m_TextScaling)
+			{
+				break;
+			}
+			yield return null;
+		}
+		this.CheckJinglePlay(ConfrontCutIn.CutinEvent.TextZoom, false);
+		base.StartCoroutine(this.TextVibrate());
+		yield break;
+		yield break;
+	}
+
+	private IEnumerator TextVibrate()
+	{
+		float timer = 0f;
+		this.CheckJinglePlay(ConfrontCutIn.CutinEvent.TextVibrate, true);
+		for (;;)
+		{
+			timer += this.m_MydeltaTime;
+			Vector3 vibe_vec = Vector3.zero;
+			vibe_vec.x = (float)UnityEngine.Random.Range(-1, 1);
+			vibe_vec.y = (float)UnityEngine.Random.Range(-1, 1);
+			vibe_vec = vibe_vec.normalized * UnityEngine.Random.Range(0f, 1f) * this.m_VibrateRange;
+			this.m_VSText.transform.localPosition = vibe_vec;
+			if (timer > this.m_VibrateTime)
+			{
+				break;
+			}
+			yield return null;
+		}
+		this.CheckJinglePlay(ConfrontCutIn.CutinEvent.TextVibrate, false);
+		this.m_VSText.transform.localPosition = Vector3.zero;
+		base.StartCoroutine(this.FadeEffect());
+		yield break;
+		yield break;
+	}
+
+	private IEnumerator FadeEffect()
+	{
+		float timer = 0f;
+		this.CheckJinglePlay(ConfrontCutIn.CutinEvent.ScreenFlash, true);
+		for (;;)
+		{
+			timer += this.m_MydeltaTime;
+			this.m_FadeAlpha = Mathf.Sin(Mathf.Clamp01(timer / this.m_FadeTime) * 180f * 0.0174532924f);
+			if (timer > this.m_FadeTime)
+			{
+				break;
+			}
+			if (timer > this.m_FadeTime / 2f)
+			{
+				foreach (ParticleSystem particleSystem in this.m_CutInEffect)
+				{
+					particleSystem.gameObject.SetActive(true);
+					if (!particleSystem.main.loop && !particleSystem.isPlaying)
+					{
+						particleSystem.Play();
+					}
+				}
+				this.m_VSText.gameObject.SetActive(false);
+			}
+			yield return null;
+		}
+		this.CheckJinglePlay(ConfrontCutIn.CutinEvent.ScreenFlash, false);
+		this.CheckJinglePlay(ConfrontCutIn.CutinEvent.EffectPlay, true);
+		yield return new WaitForSeconds(this.m_EndWait / (float)this.m_TimeSpeed);
+		NDebug.Assert(!string.IsNullOrEmpty(this.m_EndJumpLabel), "ConfrontCutIn.cs:対峙演出終了後に飛ぶラベルが設定されてません");
+		this.CheckJinglePlay(ConfrontCutIn.CutinEvent.EffectPlay, false);
+		GameMain.Instance.MainCamera.FadeOut(0.5f, false, new CameraMain.dgOnCompleteFade(this.CutInEnd), true, default(Color));
+		yield break;
+		yield break;
+	}
+
+	private void CutInEnd()
+	{
+		UnityEngine.Object.Destroy(base.gameObject);
+		GameMain.Instance.ScriptMgr.adv_kag.JumpLabel(this.m_EndJumpLabel);
+		GameMain.Instance.ScriptMgr.adv_kag.Exec();
+	}
+
+	private float TimeRate01(float timer, float time_max)
+	{
+		return Mathf.Sin(Mathf.Clamp01(timer / time_max) * 90f * 0.0174532924f);
+	}
+
+	public static void CutInStart(string end_label)
+	{
+		GameObject gameObject = UnityEngine.Object.Instantiate<GameObject>(Resources.Load<GameObject>("SceneDance/Rhythm_Action/Prefab/ConfrontCutIn"));
+		gameObject.GetComponentInChildren<ConfrontCutIn>().Init(end_label);
+	}
+
+	private const string m_ConfrontObjPath = "SceneDance/Rhythm_Action/Prefab/ConfrontCutIn";
+
+	private const int m_Magnification = 2;
+
+	[SerializeField]
+	[Header("ジングル再生するタイミング")]
+	private ConfrontCutIn.CutinEvent m_JingleTiming;
+
+	[SerializeField]
+	[Header("イベントの開始時にならすかどうか")]
+	private bool m_IsBeginPlay;
+
+	[SerializeField]
+	[Header("ジングルのSE名")]
+	private string m_JingleSe;
+
+	[SerializeField]
+	[Header("ジングル再生時のDelay")]
+	private float m_DelayTime;
+
+	[SerializeField]
+	[Header("")]
+	private int m_UIRect_Width = 1920;
+
+	[SerializeField]
+	private UI2DSprite m_VSText;
+
+	[SerializeField]
+	[Header("プレイヤー画像")]
+	private UI2DSprite m_PlayerSprite;
+
+	[SerializeField]
+	[Header("敵画像")]
+	private UI2DSprite m_EnemySprite;
+
+	[SerializeField]
+	[Header("カットインエフェクト")]
+	private List<ParticleSystem> m_CutInEffect = new List<ParticleSystem>();
+
+	[SerializeField]
+	[Header("フェード用画像")]
+	private UISprite m_FadeSprite;
+
+	[SerializeField]
+	[Header("カットイン画像背景")]
+	private UI2DSprite m_CutinBG;
+
+	[SerializeField]
+	[Header("全てのアニメーションが開始されるまでの待機時間")]
+	private float m_CutInStart = 1f;
+
+	[SerializeField]
+	[Header("カットイン時間")]
+	private float m_CutInTime = 0.5f;
+
+	[SerializeField]
+	[Header("カットイン後次の演出に行くまでの待機時間")]
+	private float m_CutInWait = 0.5f;
+
+	[SerializeField]
+	[Header("テキストの拡縮時間")]
+	private float m_TextScaling = 0.5f;
+
+	[SerializeField]
+	[Header("テキスト最大サイズ")]
+	private int m_TextMax = 1024;
+
+	[SerializeField]
+	[Header("テキスト最小サイズ")]
+	private int m_TextMin = 100;
+
+	[SerializeField]
+	[Header("テキスト振動量")]
+	private float m_VibrateRange = 2.25f;
+
+	[SerializeField]
+	[Header("テキスト振動時間")]
+	private float m_VibrateTime = 1f;
+
+	[SerializeField]
+	[Header("フェード時間")]
+	private float m_FadeTime = 0.75f;
+
+	[SerializeField]
+	[Header("フェード終了後次の画面に行くまでの待機時間")]
+	private float m_EndWait = 1f;
+
+	private string m_EndJumpLabel = string.Empty;
+
+	private int m_TimeSpeed = 1;
+
+	private enum CutinEvent
+	{
+		PlayerCut,
+		EnemyCut,
+		TextZoom,
+		TextVibrate,
+		ScreenFlash,
+		EffectPlay
+	}
+}

+ 302 - 0
Assembly-CSharp/ControllerShortcutSettingData.cs

@@ -0,0 +1,302 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+public static class ControllerShortcutSettingData
+{
+	public static ControllerShortcutSettingData.OvrControllerShortcutConfig config
+	{
+		get
+		{
+			ControllerShortcutSettingData.LoadDefault();
+			return ControllerShortcutSettingData.m_Config;
+		}
+	}
+
+	public static void LoadDefault()
+	{
+		if (ControllerShortcutSettingData.m_IsLoadedDefault)
+		{
+			return;
+		}
+		ControllerShortcutSettingData.m_IsLoadedDefault = true;
+		ControllerShortcutSettingData.m_Config = ControllerShortcutSettingData.m_Config.ReadAndSet();
+	}
+
+	private static ControllerShortcutSettingData.OvrControllerShortcutConfig m_Config = new ControllerShortcutSettingData.OvrControllerShortcutConfig();
+
+	private static bool m_IsLoadedDefault = false;
+
+	[Serializable]
+	public class OvrControllerShortcutConfig : ISerializationCallbackReceiver
+	{
+		public void OnBeforeSerialize()
+		{
+			this.m_nVersion = 1130;
+		}
+
+		public void OnAfterDeserialize()
+		{
+		}
+
+		public bool Write()
+		{
+			string contents = JsonUtility.ToJson(this, true);
+			string path = Path.GetFullPath(".\\") + "OvrControllerShortcutConfig.json";
+			try
+			{
+				File.WriteAllText(path, contents);
+			}
+			catch
+			{
+				Debug.LogError("OvrControllerShortcutConfig.json の書き込みに失敗。");
+				return false;
+			}
+			return true;
+		}
+
+		public ControllerShortcutSettingData.OvrControllerShortcutConfig ReadAndSet()
+		{
+			string path = Path.GetFullPath(".\\") + "OvrControllerShortcutConfig.json";
+			if (!File.Exists(path))
+			{
+				this.CreateDefaultData();
+				this.Write();
+			}
+			string json;
+			try
+			{
+				json = File.ReadAllText(path);
+			}
+			catch
+			{
+				Debug.LogError("OvrControllerShortcutConfig.json の読込に失敗。");
+				return this;
+			}
+			return JsonUtility.FromJson<ControllerShortcutSettingData.OvrControllerShortcutConfig>(json);
+		}
+
+		private void CreateDefaultData()
+		{
+			this.FaceListRight = new List<PhotoFaceDataShortcut.FaceData>();
+			List<PhotoFaceData> list = new List<PhotoFaceData>();
+			list.Add(PhotoFaceData.Get((long)PhotoFaceDataShortcut.ItemData.photoFaceDataNameDic["通常"]));
+			list.Add(PhotoFaceData.Get((long)PhotoFaceDataShortcut.ItemData.photoFaceDataNameDic["微笑み"]));
+			list.Add(PhotoFaceData.Get((long)PhotoFaceDataShortcut.ItemData.photoFaceDataNameDic["にっこり"]));
+			list.Add(PhotoFaceData.Get((long)PhotoFaceDataShortcut.ItemData.photoFaceDataNameDic["優しさ"]));
+			list.Add(PhotoFaceData.Get((long)PhotoFaceDataShortcut.ItemData.photoFaceDataNameDic["ぷんすか"]));
+			list.Add(PhotoFaceData.Get((long)PhotoFaceDataShortcut.ItemData.photoFaceDataNameDic["むー"]));
+			list.Add(PhotoFaceData.Get((long)PhotoFaceDataShortcut.ItemData.photoFaceDataNameDic["泣き"]));
+			list.Add(PhotoFaceData.Get((long)PhotoFaceDataShortcut.ItemData.photoFaceDataNameDic["ダンスジト目"]));
+			for (int i = 0; i < list.Count; i++)
+			{
+				PhotoFaceDataShortcut.FaceData faceData = new PhotoFaceDataShortcut.FaceData();
+				faceData.data = list[i];
+				this.FaceListRight.Add(faceData);
+			}
+			this.FaceListLeft = new List<PhotoFaceDataShortcut.FaceData>();
+			for (int j = 0; j < list.Count; j++)
+			{
+				PhotoFaceDataShortcut.FaceData faceData2 = new PhotoFaceDataShortcut.FaceData();
+				faceData2.data = list[j];
+				this.FaceListLeft.Add(faceData2);
+			}
+			this.isDirectMode = true;
+			this.isEveryShowMode = true;
+			this.maintainPelvisPosition = 0.3f;
+			this.bodyPosStiffness = 0.55f;
+			this.bodyRotStiffness = 0.1f;
+			this.chestRotationWeight = 0.3f;
+			this.selfCameraFOV = 0.5f;
+			this.use1TrackerForHead = false;
+			this.use23TrackerForFoot = false;
+			this.use12TrackerForFoot = false;
+		}
+
+		public bool isDirectMode
+		{
+			get
+			{
+				return this.IsDirectShortcutMode;
+			}
+			set
+			{
+				this.IsDirectShortcutMode = value;
+			}
+		}
+
+		public bool isEveryShowMode
+		{
+			get
+			{
+				return this.IsEveryShowMode;
+			}
+			set
+			{
+				this.IsEveryShowMode = value;
+			}
+		}
+
+		public List<PhotoFaceDataShortcut.FaceData> faceListRight
+		{
+			get
+			{
+				return this.FaceListRight;
+			}
+			set
+			{
+				this.FaceListRight = value;
+			}
+		}
+
+		public List<PhotoFaceDataShortcut.FaceData> faceListLeft
+		{
+			get
+			{
+				return this.FaceListLeft;
+			}
+			set
+			{
+				this.FaceListLeft = value;
+			}
+		}
+
+		public float maintainPelvisPosition
+		{
+			get
+			{
+				return this.MaintainPelvisPosition;
+			}
+			set
+			{
+				this.MaintainPelvisPosition = Mathf.Clamp(value, 0f, 1f);
+			}
+		}
+
+		public float bodyPosStiffness
+		{
+			get
+			{
+				return this.BodyPosStiffness;
+			}
+			set
+			{
+				this.BodyPosStiffness = Mathf.Clamp(value, 0f, 1f);
+			}
+		}
+
+		public float bodyRotStiffness
+		{
+			get
+			{
+				return this.BodyRotStiffness;
+			}
+			set
+			{
+				this.BodyRotStiffness = Mathf.Clamp(value, 0f, 1f);
+			}
+		}
+
+		public float chestRotationWeight
+		{
+			get
+			{
+				return this.ChestRotationWeight;
+			}
+			set
+			{
+				this.ChestRotationWeight = Mathf.Clamp(value, 0f, 1f);
+			}
+		}
+
+		public float selfCameraFOV
+		{
+			get
+			{
+				return this.SelfCameraFOV;
+			}
+			set
+			{
+				this.SelfCameraFOV = Mathf.Clamp(value, 0f, 1f);
+			}
+		}
+
+		public bool use1TrackerForHead
+		{
+			get
+			{
+				return this.Use1TrackerForHead;
+			}
+			set
+			{
+				this.Use1TrackerForHead = value;
+			}
+		}
+
+		public bool use23TrackerForFoot
+		{
+			get
+			{
+				return this.Use23TrackerForFoot;
+			}
+			set
+			{
+				this.Use23TrackerForFoot = value;
+			}
+		}
+
+		public bool use12TrackerForFoot
+		{
+			get
+			{
+				return this.Use12TrackerForFoot;
+			}
+			set
+			{
+				this.Use12TrackerForFoot = value;
+			}
+		}
+
+		private const string CONF_NAME = "OvrControllerShortcutConfig.json";
+
+		[SerializeField]
+		private int m_nVersion = 1130;
+
+		[SerializeField]
+		private bool IsDirectShortcutMode = true;
+
+		[SerializeField]
+		private bool IsEveryShowMode = true;
+
+		[SerializeField]
+		private List<PhotoFaceDataShortcut.FaceData> FaceListRight = new List<PhotoFaceDataShortcut.FaceData>();
+
+		[SerializeField]
+		private List<PhotoFaceDataShortcut.FaceData> FaceListLeft = new List<PhotoFaceDataShortcut.FaceData>();
+
+		[SerializeField]
+		private float MaintainPelvisPosition = 0.3f;
+
+		[SerializeField]
+		private float BodyPosStiffness = 0.55f;
+
+		[SerializeField]
+		private float BodyRotStiffness = 0.1f;
+
+		[SerializeField]
+		private float ChestRotationWeight = 0.3f;
+
+		[SerializeField]
+		private float SelfCameraFOV = 0.5f;
+
+		[SerializeField]
+		private bool Use1TrackerForHead;
+
+		[SerializeField]
+		private bool Use23TrackerForFoot;
+
+		[SerializeField]
+		private bool Use12TrackerForFoot;
+	}
+}

+ 403 - 0
Assembly-CSharp/ControllerShortcutWindow.cs

@@ -0,0 +1,403 @@
+using System;
+using System.Collections;
+using Kasizuki;
+using UnityEngine;
+using UnityEngine.SceneManagement;
+
+public class ControllerShortcutWindow : MonoBehaviour
+{
+	public float fadeSpeed
+	{
+		get
+		{
+			return this.m_FadeSpeed;
+		}
+		set
+		{
+			this.m_FadeSpeed = Mathf.Clamp(value, 0.001f, 1f);
+		}
+	}
+
+	private bool IsEnableTypeVR()
+	{
+		GameMain instance = GameMain.Instance;
+		if (!instance.VRMode)
+		{
+			return false;
+		}
+		GameMain.VRFamilyType vrfamily = instance.VRFamily;
+		return vrfamily != GameMain.VRFamilyType.FOVE;
+	}
+
+	private void Awake()
+	{
+		if (!this.IsEnableTypeVR())
+		{
+			Debug.Log("[ControllerShortcutWindow] ハンドコントローラが存在しない操作系だったので、UIを無効化します。");
+			base.gameObject.SetActive(false);
+		}
+		this.m_ButtonDic = new ObjectCacheDic();
+	}
+
+	public void Init(PhotoFaceDataShortcutParent rightHandUI, PhotoFaceDataShortcutParent leftHandUI)
+	{
+		PhotoFaceDataShortcutSetter component = this.m_FadeWindowFaceShortcut.GetComponent<PhotoFaceDataShortcutSetter>();
+		component.Init(rightHandUI.handUI, leftHandUI.handUI);
+	}
+
+	private void Start()
+	{
+		UIWFTabButton uiwftabButton = this.m_ButtonDic.CacheChildObject<UIWFTabButton>(this.m_ParentButtonMainMenu.gameObject, "button config", "コンフィグ");
+		UIWFTabButton uiwftabButton2 = this.m_ButtonDic.CacheChildObject<UIWFTabButton>(this.m_ParentButtonMainMenu.gameObject, "button calibration", "キャリブレーション");
+		UIWFTabButton uiwftabButton3 = this.m_ButtonDic.CacheChildObject<UIWFTabButton>(this.m_ParentButtonMainMenu.gameObject, "button face", "表情");
+		UIWFTabButton uiwftabButton4 = this.m_ButtonDic.CacheChildObject<UIWFTabButton>(this.m_ParentButtonMainMenu.gameObject, "button hand", "ハンドサイン");
+		UIWFTabButton uiwftabButton5 = this.m_ButtonDic.CacheChildObject<UIWFTabButton>(this.m_ParentButtonMainMenu.gameObject, "button motion", "モーション");
+		UIWFTabButton uiwftabButton6 = this.m_ButtonDic.CacheChildObject<UIWFTabButton>(this.m_ParentButtonMainMenu.gameObject, "button general object", "一般オブジェクト");
+		uiwftabButton5.gameObject.SetActive(false);
+		uiwftabButton4.gameObject.SetActive(false);
+		Debug.Log("メインメニューのうち、モーション登録ボタンを隠します。");
+		this.m_ParentButtonMainMenu.GetComponent<UIGrid>().Reposition();
+		EventDelegate.Add(uiwftabButton.onClick, new EventDelegate.Callback(this.OpenWindowConfig));
+		EventDelegate.Add(uiwftabButton2.onClick, new EventDelegate.Callback(this.OpenWindowCalibration));
+		EventDelegate.Add(uiwftabButton3.onClick, new EventDelegate.Callback(this.OpenWindowFaceShortcut));
+		EventDelegate.Add(uiwftabButton4.onClick, new EventDelegate.Callback(this.OpenWindowHandShortcut));
+		EventDelegate.Add(uiwftabButton5.onClick, new EventDelegate.Callback(this.OpenWindowMotionShortcut));
+		EventDelegate.Add(uiwftabButton6.onClick, new EventDelegate.Callback(this.OpenWindowGeneralObject));
+		this.m_FadeWindowHideButton = UTY.GetChildObject(this.m_FadeWindowParent.gameObject, "parent button/Button Hide", false).GetComponent<UIButton>();
+		EventDelegate.Add(this.m_FadeWindowHideButton.onClick, delegate
+		{
+			this.m_FadeWindowParent.Close(0.25f, null);
+		});
+		this.SetupCaribWindow();
+		this.m_ParentButtonMainMenu.Select(uiwftabButton2);
+		uiwftabButton2.SetSelect(true);
+		NGUIWindow fadeWindowParent = this.m_FadeWindowParent;
+		fadeWindowParent.OnOpen = (Action)Delegate.Combine(fadeWindowParent.OnOpen, new Action(this.OnOpenFadeWindowParent));
+		this.ChangeLayout();
+		SceneManager.activeSceneChanged += this.OnActiveSceneChanged;
+	}
+
+	private void SetupCaribWindow()
+	{
+		this.m_FadeWindowCalibration.CacheChildObject<NGUIWindow>("Window Start", "FadeWindow Start");
+		this.m_FadeWindowCalibration.CacheChildObject<NGUIWindow>("Window Countdown", "FadeWindow Countdown");
+		this.m_FadeWindowCalibration.CacheChildObject<UILabel>("Window Countdown/label countdown", "countdown");
+		this.m_FadeWindowCalibration.CacheChildObject<UILabel>("Window Countdown/label description", "label count desc");
+		this.m_FadeWindowCalibration.CacheChildObject<UILabel>("Window Start/label", "label start desc");
+		UIButton uibutton = this.m_FadeWindowCalibration.CacheChildObject<UIButton>("Window Start/button start", "startButton");
+		UIButton uibutton2 = this.m_FadeWindowCalibration.CacheChildObject<UIButton>("Window Start/button end", "endButton");
+		NGUIWindow fadeWindowCalibration = this.m_FadeWindowCalibration;
+		fadeWindowCalibration.OnOpen = (Action)Delegate.Combine(fadeWindowCalibration.OnOpen, new Action(delegate
+		{
+			NGUIWindow cache = this.m_FadeWindowCalibration.GetCache<NGUIWindow>("FadeWindow Start");
+			NGUIWindow cache2 = this.m_FadeWindowCalibration.GetCache<NGUIWindow>("FadeWindow Countdown");
+			cache.Open(0.001f, null);
+			cache2.Close(0.001f, null);
+			cache.gameObject.SetActive(true);
+			cache2.gameObject.SetActive(false);
+			this.ChangeLayout();
+		}));
+		EventDelegate.Add(uibutton.onClick, new EventDelegate.Callback(this.OnClickCalibrationStart));
+		EventDelegate.Add(uibutton2.onClick, new EventDelegate.Callback(this.OnClickCalibrationEnd));
+		this.m_FadeWindowCalibration.GetCache<UILabel>("label count desc").text = ControllerShortcutWindow.STR_LABEL_DESC_COUNT_DOWN;
+		this.m_FadeWindowCalibration.GetCache<UILabel>("label start desc").supportEncoding = true;
+	}
+
+	private void OnOpenFadeWindowParent()
+	{
+		this.ChangeLayout();
+	}
+
+	private void ChangeLayout()
+	{
+		UILabel cache = this.m_FadeWindowCalibration.GetCache<UILabel>("label start desc");
+		UIButton cache2 = this.m_FadeWindowCalibration.GetCache<UIButton>("startButton");
+		UIButton cache3 = this.m_FadeWindowCalibration.GetCache<UIButton>("endButton");
+		UIWFTabButton cache4 = this.m_ButtonDic.GetCache<UIWFTabButton>("表情");
+		UIWFTabButton cache5 = this.m_ButtonDic.GetCache<UIWFTabButton>("モーション");
+		UIWFTabButton cache6 = this.m_ButtonDic.GetCache<UIWFTabButton>("ハンドサイン");
+		UIWFTabButton cache7 = this.m_ButtonDic.GetCache<UIWFTabButton>("一般オブジェクト");
+		if (!OvrIK.IsVRIKMode)
+		{
+			Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+			if (maid == null || !maid.Visible || maid.IsBusy || !maid.body0.isLoadedBody)
+			{
+				cache.text = ControllerShortcutWindow.STR_LABEL_DESC_MISSING_MAID;
+				cache2.gameObject.SetActive(false);
+				cache3.gameObject.SetActive(false);
+				Debug.Log("OvrIK\u3000メイドの準備がまだ行われていません。");
+			}
+			else
+			{
+				bool flag = false;
+				try
+				{
+					string nowSceneName = GameMain.Instance.GetNowSceneName();
+					if (!string.IsNullOrEmpty(nowSceneName) && nowSceneName.IndexOf("SceneDance_") == 0)
+					{
+						DanceMain danceMain = UnityEngine.Object.FindObjectOfType<DanceMain>();
+						if (danceMain != null && danceMain.OvrCamTrans != null)
+						{
+							flag = true;
+						}
+					}
+				}
+				catch
+				{
+					Debug.Log("シーン名の取得に失敗しました");
+				}
+				if (!GameMain.Instance.CMSystem.SConfig.OvrIkAllSceneEnable && flag)
+				{
+					cache.text = ControllerShortcutWindow.STR_LABEL_DESC_NOT_SUPPORT_MOVE_CAMERA;
+					cache2.gameObject.SetActive(false);
+					cache3.gameObject.SetActive(false);
+				}
+				else
+				{
+					cache.text = ControllerShortcutWindow.STR_LABEL_DESC_START;
+					cache2.gameObject.SetActive(true);
+					cache3.gameObject.SetActive(false);
+					if (GameMain.Instance.VRDeviceTypeID == GameMain.VRDeviceType.VIVE && ControllerShortcutSettingData.config.use1TrackerForHead)
+					{
+						UILabel uilabel = cache;
+						uilabel.text = uilabel.text + "\n" + ControllerShortcutWindow.STR_LABEL_DESC_START_NOTES_TRACKER;
+					}
+				}
+			}
+			cache4.isEnabled = false;
+			cache5.isEnabled = false;
+			cache6.isEnabled = false;
+			cache7.isEnabled = false;
+		}
+		else
+		{
+			cache.text = ControllerShortcutWindow.STR_LABEL_DESC_END;
+			cache2.gameObject.SetActive(false);
+			cache3.gameObject.SetActive(true);
+			cache4.isEnabled = true;
+			cache5.isEnabled = true;
+			cache6.isEnabled = true;
+			cache7.isEnabled = true;
+		}
+	}
+
+	private void OpenWindowConfig()
+	{
+		this.m_FadeWindowCalibration.Close(this.fadeSpeed, null);
+		this.m_FadeWindowFaceShortcut.Close(this.fadeSpeed, null);
+		this.m_FadeWindowMotionShortcut.Close(this.fadeSpeed, null);
+		this.m_FadeWindowGeneralObject.Close(this.fadeSpeed, null);
+		this.WaitTime(this.fadeSpeed, delegate
+		{
+			this.m_FadeWindowConfig.Open(this.fadeSpeed, null);
+		});
+	}
+
+	private void OpenWindowCalibration()
+	{
+		this.m_FadeWindowFaceShortcut.Close(this.fadeSpeed, null);
+		this.m_FadeWindowMotionShortcut.Close(this.fadeSpeed, null);
+		this.m_FadeWindowConfig.Close(this.fadeSpeed, null);
+		this.m_FadeWindowGeneralObject.Close(this.fadeSpeed, null);
+		this.WaitTime(this.fadeSpeed, delegate
+		{
+			this.m_FadeWindowCalibration.Open(this.fadeSpeed, null);
+		});
+	}
+
+	private void OpenWindowFaceShortcut()
+	{
+		this.m_FadeWindowCalibration.Close(this.fadeSpeed, null);
+		this.m_FadeWindowMotionShortcut.Close(this.fadeSpeed, null);
+		this.m_FadeWindowConfig.Close(this.fadeSpeed, null);
+		this.m_FadeWindowGeneralObject.Close(this.fadeSpeed, null);
+		this.WaitTime(this.fadeSpeed, delegate
+		{
+			this.m_FadeWindowFaceShortcut.Open(this.fadeSpeed, null);
+		});
+	}
+
+	private void OpenWindowHandShortcut()
+	{
+	}
+
+	private void OpenWindowMotionShortcut()
+	{
+		this.m_FadeWindowCalibration.Close(this.fadeSpeed, null);
+		this.m_FadeWindowFaceShortcut.Close(this.fadeSpeed, null);
+		this.m_FadeWindowConfig.Close(this.fadeSpeed, null);
+		this.m_FadeWindowGeneralObject.Close(this.fadeSpeed, null);
+		this.WaitTime(this.fadeSpeed, delegate
+		{
+			this.m_FadeWindowMotionShortcut.Open(this.fadeSpeed, null);
+		});
+	}
+
+	private void OpenWindowGeneralObject()
+	{
+		this.m_FadeWindowCalibration.Close(this.fadeSpeed, null);
+		this.m_FadeWindowFaceShortcut.Close(this.fadeSpeed, null);
+		this.m_FadeWindowConfig.Close(this.fadeSpeed, null);
+		this.m_FadeWindowMotionShortcut.Close(this.fadeSpeed, null);
+		this.WaitTime(this.fadeSpeed, delegate
+		{
+			this.m_FadeWindowGeneralObject.Open(this.fadeSpeed, null);
+		});
+	}
+
+	private void OnClickCalibrationStart()
+	{
+		NGUIWindow cache = this.m_FadeWindowCalibration.GetCache<NGUIWindow>("FadeWindow Start");
+		NGUIWindow windowCount = this.m_FadeWindowCalibration.GetCache<NGUIWindow>("FadeWindow Countdown");
+		this.m_FadeWindowCalibration.GetCache<UILabel>("countdown").text = 5.ToString("f2");
+		cache.Close(this.fadeSpeed, null);
+		this.m_FadeWindowMainMenu.Close(this.fadeSpeed, null);
+		this.WaitTime(this.fadeSpeed, delegate
+		{
+			windowCount.Open(this.fadeSpeed, null);
+		});
+		this.WaitTime(this.fadeSpeed + 1f, delegate
+		{
+			if (!OvrIK.IsVRIKMode)
+			{
+				OvrIK.InitStart();
+			}
+			this.StartCoroutine(this.CoCalibrationCountdown(delegate
+			{
+				this.m_FadeWindowCalibration.GetCache<NGUIWindow>("FadeWindow Countdown").Close(this.fadeSpeed, null);
+				this.WaitTime(this.fadeSpeed, delegate
+				{
+					this.m_FadeWindowCalibration.GetCache<NGUIWindow>("FadeWindow Start").Open(this.fadeSpeed, null);
+					this.m_FadeWindowMainMenu.Open(this.fadeSpeed, null);
+					this.ChangeLayout();
+				});
+			}));
+		});
+	}
+
+	private void OnClickCalibrationEnd()
+	{
+		this.m_FadeWindowParent.Close(this.fadeSpeed, delegate
+		{
+			if (OvrIK.IsVRIKMode)
+			{
+				OvrIK.UninitEnd();
+			}
+		});
+	}
+
+	private IEnumerator CoCalibrationCountdown(Action onEnd)
+	{
+		Debug.Log("キャリブレーション開始");
+		float nowTime = 0f;
+		float maxTime = 5f;
+		UILabel textCountdown = this.m_FadeWindowCalibration.GetCache<UILabel>("countdown");
+		while (nowTime <= maxTime)
+		{
+			textCountdown.text = (maxTime - nowTime).ToString("f2");
+			nowTime += Time.deltaTime;
+			yield return null;
+		}
+		textCountdown.text = 0.ToString("f2");
+		if (onEnd != null)
+		{
+			onEnd();
+		}
+		Debug.Log("キャリブレーション完了");
+		yield break;
+	}
+
+	private void WaitTime(float time, Action onFinish)
+	{
+		base.StartCoroutine(this.CoWaitTime(time, onFinish));
+	}
+
+	private IEnumerator CoWaitTime(float time, Action onFinish)
+	{
+		yield return new WaitForSeconds(time);
+		if (onFinish != null)
+		{
+			onFinish();
+		}
+		yield break;
+	}
+
+	public void Open()
+	{
+		this.m_FadeWindowParent.Open(this.fadeSpeed, null);
+	}
+
+	public void Close()
+	{
+		this.m_FadeWindowParent.Close(this.fadeSpeed, null);
+	}
+
+	public bool isOpen
+	{
+		get
+		{
+			return this.m_FadeWindowParent.gameObject.activeSelf;
+		}
+	}
+
+	private void OnActiveSceneChanged(Scene beforeScene, Scene activeScene)
+	{
+		if (this.m_IsDestroyed)
+		{
+			return;
+		}
+		UnityEngine.Object.Destroy(base.gameObject);
+		Debug.Log("VRIK用UIを削除しました : シーン切り替え");
+	}
+
+	private void OnDestroy()
+	{
+		this.m_IsDestroyed = true;
+	}
+
+	[SerializeField]
+	[Range(0.001f, 1f)]
+	private float m_FadeSpeed = 0.25f;
+
+	[SerializeField]
+	private NGUIWindow m_FadeWindowFaceShortcut;
+
+	[SerializeField]
+	private NGUIWindow m_FadeWindowMotionShortcut;
+
+	[SerializeField]
+	private NGUIWindow m_FadeWindowCalibration;
+
+	[SerializeField]
+	private NGUIWindow m_FadeWindowConfig;
+
+	[SerializeField]
+	private NGUIWindow m_FadeWindowGeneralObject;
+
+	[SerializeField]
+	private NGUIWindow m_FadeWindowMainMenu;
+
+	[SerializeField]
+	private NGUIWindow m_FadeWindowParent;
+
+	private UIButton m_FadeWindowHideButton;
+
+	[SerializeField]
+	private UIWFTabPanel m_ParentButtonMainMenu;
+
+	private ObjectCacheDic m_ButtonDic;
+
+	private static readonly string STR_LABEL_DESC_MISSING_MAID = "メイドの準備ができていません。";
+
+	private static readonly string STR_LABEL_DESC_NOT_SUPPORT_MOVE_CAMERA = "移動カメラモードでは実行できません。";
+
+	private static readonly string STR_LABEL_DESC_START = "「スタート」ボタンを押して、キャリブレーションを開始します。\r\n\r\nキャリブレーション中は、\r\nHDMを装着して、正面を向いて足を肩幅に開いて直立し、\r\nコントローラを持った手を肩幅で胸の前に出してお待ち下さい。";
+
+	private static readonly string STR_LABEL_DESC_START_NOTES_TRACKER = "[FF8000]HMDを顔に装着した状態で、\r\n頭のトラッカーを装着予定位置に固定して下さい。[-]";
+
+	private static readonly string STR_LABEL_DESC_COUNT_DOWN = "手を前に出し、\r\n足を肩幅に広げ、\r\n正面を向いて、\r\n背筋を伸ばして下さい。\r\n";
+
+	private static readonly string STR_LABEL_DESC_END = "バーチャルアバタースタジオ機能を終了します。\r\n\r\n(終了後にキャラクターに不具合がある場合は\r\n\u3000シーンに入り直して下さい。)";
+
+	private bool m_IsDestroyed;
+}

+ 32 - 0
Assembly-CSharp/CopyHandRig.cs

@@ -0,0 +1,32 @@
+using System;
+using UnityEngine;
+
+public class CopyHandRig : MonoBehaviour
+{
+	private void Start()
+	{
+	}
+
+	private void Update()
+	{
+		this.m_trDestRoot.position = this.m_trSrcRoot.position;
+		this.m_trDestRoot.rotation = this.m_trSrcRoot.rotation;
+		this.m_trDestPalm.rotation = this.m_trSrcPalm.rotation;
+		for (int i = 0; i < this.m_trSrcFinger.Length; i++)
+		{
+			this.m_trDestFinger[i].rotation = this.m_trSrcFinger[i].rotation;
+		}
+	}
+
+	public Transform m_trSrcRoot;
+
+	public Transform m_trDestRoot;
+
+	public Transform m_trSrcPalm;
+
+	public Transform m_trDestPalm;
+
+	public Transform[] m_trSrcFinger;
+
+	public Transform[] m_trDestFinger;
+}

+ 211 - 0
Assembly-CSharp/CostumePartsEnabledCtrl.cs

@@ -0,0 +1,211 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using wf;
+
+public class CostumePartsEnabledCtrl : MonoBehaviour
+{
+	public void Init(GameObject goCostumePartsEnabledPanel)
+	{
+		if (this.m_sceneEdit != null)
+		{
+			return;
+		}
+		this.m_sceneEdit = GameObject.Find("__SceneEdit__").GetComponent<SceneEdit>();
+		foreach (MPN key in this.m_sceneEdit.enabledMpns)
+		{
+			this.testForced.Add(key, true);
+		}
+		this.m_notSettingIcon = (Resources.Load("SceneEdit/RandomPreset/Texture/_I_del") as Texture2D);
+		this.CreateRandomItem(goCostumePartsEnabledPanel);
+		this.LoadMaidPropData();
+	}
+
+	public void CreateRandomItem(GameObject goRandomPresetPanel)
+	{
+		Dictionary<MPN, SceneEditInfo.CCateNameType> dicPartsTypePair = SceneEditInfo.m_dicPartsTypePair;
+		this.m_dicItemBtn = new Dictionary<string, RandomPresetButton>();
+		bool flag = false;
+		foreach (KeyValuePair<MPN, SceneEditInfo.CCateNameType> keyValuePair in dicPartsTypePair)
+		{
+			RandomPresetContent.MPNMapping mpnmapping;
+			if (RandomPresetContent.m_dicMPNMapping.TryGetValue(keyValuePair.Key, out mpnmapping))
+			{
+				string text;
+				if (RandomPresetContent.m_dicCategoryMapping.TryGetValue(keyValuePair.Value.m_eMenuCate, out text))
+				{
+					GameObject childObject = UTY.GetChildObject(goRandomPresetPanel, "Contents/Buttons/" + mpnmapping.m_buttonName, true);
+					if (!(childObject == null))
+					{
+						childObject.SetActive(false);
+						NDebug.Assert(childObject != null, string.Concat(new string[]
+						{
+							"ランダムプリセットのボタン[",
+							mpnmapping.m_buttonTitle,
+							"]のオブジェクト、[",
+							mpnmapping.m_buttonName,
+							"]が見つかりませんでした"
+						}));
+						if (keyValuePair.Value.m_eType == SceneEditInfo.CCateNameType.EType.Item)
+						{
+							if (this.m_sceneEdit.enabledMpns.Contains(keyValuePair.Key))
+							{
+								if (keyValuePair.Key != MPN.acckamisub)
+								{
+									childObject.SetActive(true);
+									UTY.GetChildObject(childObject, "Title", false).GetComponent<UILabel>().text = mpnmapping.m_buttonTitle;
+									if (keyValuePair.Key == MPN.hairt)
+									{
+										UILabel component = UTY.GetChildObject(childObject, "Title", false).GetComponent<UILabel>();
+										component.text += " &\nリボン";
+									}
+									UIButton component2 = childObject.GetComponent<UIButton>();
+									if (!flag)
+									{
+										this.activeColor = new Color(component2.defaultColor.r, component2.defaultColor.g, component2.defaultColor.b, 1f);
+										this.inActiveColor = component2.defaultColor;
+										flag = true;
+									}
+									SceneEditInfo.CCateNameType.EType eType = keyValuePair.Value.m_eType;
+									ItemTypeRandomPresetButton itemTypeRandomPresetButton = new ItemTypeRandomPresetButton();
+									itemTypeRandomPresetButton.m_menuCategory = keyValuePair.Value.m_eMenuCate;
+									itemTypeRandomPresetButton.m_eButtonType = eType;
+									itemTypeRandomPresetButton.m_name = mpnmapping.m_buttonName;
+									itemTypeRandomPresetButton.m_mpn = keyValuePair.Key;
+									itemTypeRandomPresetButton.m_btnButton = component2;
+									itemTypeRandomPresetButton.m_bBtnActive = false;
+									itemTypeRandomPresetButton.m_executionOrder = mpnmapping.m_executionOrder;
+									itemTypeRandomPresetButton.m_txtItem = UTY.GetChildObject(childObject, "Item", false).GetComponent<UITexture>();
+									this.m_dicItemBtn.Add(itemTypeRandomPresetButton.m_name, itemTypeRandomPresetButton);
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		UITable component3 = UTY.GetChildObject(goRandomPresetPanel, "Contents/Buttons", false).GetComponent<UITable>();
+		Utility.ResetNGUI(component3);
+		component3.repositionNow = true;
+	}
+
+	public void LoadMaidPropData()
+	{
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		Action<SceneEditInfo.EMenuCategory, MPN, UITexture> action = delegate(SceneEditInfo.EMenuCategory category, MPN mpn, UITexture tex)
+		{
+			int num = maid.GetProp(mpn).nTempFileNameRID;
+			foreach (SceneEdit.SubPropMpnData subPropMpnData in this.m_sceneEdit.subPropDatas)
+			{
+				if (mpn == subPropMpnData.mpn)
+				{
+					if (subPropMpnData.manager.sloatItems != null && subPropMpnData.manager.sloatItems[0].menuItem != null)
+					{
+						num = subPropMpnData.manager.sloatItems[0].menuItem.m_nMenuFileRID;
+					}
+					break;
+				}
+			}
+			Texture2D mainTexture;
+			if (num == 0)
+			{
+				mainTexture = this.m_notSettingIcon;
+			}
+			else
+			{
+				mainTexture = this.GetTextureByRid(category, mpn, num);
+			}
+			tex.mainTexture = mainTexture;
+		};
+		Facility tempSelectFacility = GameMain.Instance.FacilityMgr.tempSelectFacility;
+		NDebug.Assert(tempSelectFacility != null, "現在選択中の施設がnullです");
+		foreach (KeyValuePair<string, RandomPresetButton> keyValuePair in this.m_dicItemBtn)
+		{
+			RandomPresetButton value = keyValuePair.Value;
+			action(value.m_menuCategory, value.m_mpn, value.m_txtItem);
+			bool costumeForced = tempSelectFacility.GetCostumeForced(value.m_mpn);
+			this.SetButtonActive(value, costumeForced);
+			if (value.m_mpn == MPN.hairt)
+			{
+				UITexture component = UTY.GetChildObject(value.m_btnButton.gameObject, "Item2", false).GetComponent<UITexture>();
+				action(SceneEditInfo.EMenuCategory.アクセサリ, MPN.acckamisub, component);
+			}
+		}
+	}
+
+	public void OnButtonClick(string clickBtnName)
+	{
+		RandomPresetButton randomPresetButton = this.m_dicItemBtn[clickBtnName];
+		this.SetButtonActive(randomPresetButton, !randomPresetButton.m_bBtnActive);
+	}
+
+	public void OnAllButtonClick(bool active)
+	{
+		foreach (KeyValuePair<string, RandomPresetButton> keyValuePair in this.m_dicItemBtn)
+		{
+			this.SetButtonActive(keyValuePair.Value, active);
+		}
+	}
+
+	public void SetButtonActive(RandomPresetButton itemData, bool active)
+	{
+		Facility tempSelectFacility = GameMain.Instance.FacilityMgr.tempSelectFacility;
+		tempSelectFacility.SetCostumeForced(itemData.m_mpn, active);
+		if (itemData.m_mpn == MPN.hairt)
+		{
+			this.testForced[MPN.acckamisub] = active;
+		}
+		tempSelectFacility.SetCostumeForced(MPN.acckamisub, active);
+		itemData.m_bBtnActive = active;
+		if (itemData.m_bBtnActive)
+		{
+			itemData.m_btnButton.defaultColor = this.activeColor;
+		}
+		else
+		{
+			itemData.m_btnButton.defaultColor = this.inActiveColor;
+		}
+	}
+
+	private Texture2D GetTextureByRid(SceneEditInfo.EMenuCategory eMenuCategory, MPN btnMpn, int rid)
+	{
+		List<SceneEdit.SCategory> categoryList = this.m_sceneEdit.CategoryList;
+		foreach (SceneEdit.SCategory scategory in categoryList)
+		{
+			if (scategory.m_eCategory == eMenuCategory)
+			{
+				foreach (SceneEdit.SPartsType spartsType in scategory.m_listPartsType)
+				{
+					if (spartsType.m_mpn == btnMpn)
+					{
+						foreach (SceneEdit.SMenuItem smenuItem in spartsType.m_listMenu)
+						{
+							if (smenuItem.m_nMenuFileRID == rid)
+							{
+								if (smenuItem.m_boDelOnly)
+								{
+									return smenuItem.m_texIcon;
+								}
+								return smenuItem.m_texIcon;
+							}
+						}
+						return this.m_notSettingIcon;
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	private SceneEdit m_sceneEdit;
+
+	private Dictionary<string, RandomPresetButton> m_dicItemBtn;
+
+	private Color activeColor;
+
+	private Color inActiveColor;
+
+	private Texture2D m_notSettingIcon;
+
+	private Dictionary<MPN, bool> testForced = new Dictionary<MPN, bool>();
+}

+ 50 - 0
Assembly-CSharp/CostumePartsEnabledMgr.cs

@@ -0,0 +1,50 @@
+using System;
+using UnityEngine;
+
+public class CostumePartsEnabledMgr : BaseMgr<CostumePartsEnabledMgr>
+{
+	private void Start()
+	{
+		UIRoot componentInParent = base.GetComponentInParent<UIRoot>();
+		this.m_goCostumePartsEnabledPanel = componentInParent.transform.Find("CostumePartsEnabledPanel").gameObject;
+		if (this.m_goCostumePartsEnabledPanel == null)
+		{
+			Debug.LogError(string.Format("{0}が見つかりませんでした", "CostumePartsEnabledPanel"));
+			return;
+		}
+		this.m_costumePartsEnabledCtrl = this.m_goCostumePartsEnabledPanel.GetComponent<CostumePartsEnabledCtrl>();
+		this.m_goCostumePartsEnabledPanel.SetActive(false);
+	}
+
+	public void OnButtonClick()
+	{
+		string name = UIButton.current.name;
+		this.m_costumePartsEnabledCtrl.OnButtonClick(name);
+	}
+
+	public void OnAllButtonClick()
+	{
+		this.m_costumePartsEnabledCtrl.OnAllButtonClick(true);
+	}
+
+	public void OnAllButtonCancelClick()
+	{
+		this.m_costumePartsEnabledCtrl.OnAllButtonClick(false);
+	}
+
+	public void OpenRandomPresetPanel()
+	{
+		this.m_costumePartsEnabledCtrl.Init(this.m_goCostumePartsEnabledPanel);
+		this.m_costumePartsEnabledCtrl.LoadMaidPropData();
+		this.m_goCostumePartsEnabledPanel.SetActive(true);
+	}
+
+	public void CloseRandomPresetPanel()
+	{
+		this.m_goCostumePartsEnabledPanel.SetActive(false);
+	}
+
+	private GameObject m_goCostumePartsEnabledPanel;
+
+	private CostumePartsEnabledCtrl m_costumePartsEnabledCtrl;
+}

+ 234 - 0
Assembly-CSharp/CreateBGObjectSubWindow.cs

@@ -0,0 +1,234 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+using wf;
+
+public class CreateBGObjectSubWindow : BasePhotoSubWindow
+{
+	public void Awake()
+	{
+		PhotoBGObjectData.Create();
+		if (this.addButtonList.popup_value_list != null)
+		{
+			return;
+		}
+		Dictionary<string, List<KeyValuePair<string, object>>> dictionary = new Dictionary<string, List<KeyValuePair<string, object>>>();
+		foreach (KeyValuePair<string, List<PhotoBGObjectData>> keyValuePair in PhotoBGObjectData.category_list)
+		{
+			if (!dictionary.ContainsKey(keyValuePair.Key))
+			{
+				dictionary.Add(keyValuePair.Key, new List<KeyValuePair<string, object>>());
+			}
+			for (int i = 0; i < keyValuePair.Value.Count; i++)
+			{
+				dictionary[keyValuePair.Key].Add(new KeyValuePair<string, object>(keyValuePair.Value[i].name, keyValuePair.Value[i]));
+			}
+		}
+		this.addButtonList.SetData(dictionary, false);
+		this.addButtonList.onClickEventList.Add(new Action<object>(this.OnClickItem));
+		this.addButtonList.popup_value_list = PhotoBGObjectData.popup_category_list;
+	}
+
+	public override void Initizalize(BasePhotoWindow parentWindow)
+	{
+		this.Awake();
+		base.Initizalize(parentWindow);
+		parentWindow.UpdateChildren();
+		this.addButtonList.SetPopupValue(PhotoBGObjectData.popup_category_list[0].Key);
+	}
+
+	public void OnDestroy()
+	{
+		if (GameMain.Instance == null || GameMain.Instance.BgMgr == null || GameMain.Instance.BgMgr.bg_parent_object == null)
+		{
+			return;
+		}
+		foreach (CreateBGObjectSubWindow.BgObject bgObject in this.create_obj_list_)
+		{
+			if (this.mgr != null && this.mgr.GetWindow(PhotoWindowManager.WindowType.ObjectManager) != null)
+			{
+				ObjectManagerWindow objectManagerWindow = this.mgr.GetWindow(PhotoWindowManager.WindowType.ObjectManager) as ObjectManagerWindow;
+				objectManagerWindow.RemoveTransTargetObject(bgObject.game_object);
+			}
+			UnityEngine.Object.DestroyImmediate(bgObject.game_object);
+		}
+		this.create_obj_list_.Clear();
+	}
+
+	private void OnClickItem(object select_data_obj)
+	{
+		if (select_data_obj == null)
+		{
+			return;
+		}
+		PhotoBGObjectData add_bg_data = select_data_obj as PhotoBGObjectData;
+		this.AddObject(add_bg_data, string.Empty);
+	}
+
+	public void AddMyObject(string filePath)
+	{
+		PhotoBGObjectData photoBGObjectData = PhotoBGObjectData.AddMyObject(filePath);
+		this.addButtonList.AddData("マイオブジェクト", new KeyValuePair<string, object>(photoBGObjectData.name, photoBGObjectData));
+	}
+
+	public void UpdateMyObject(string filePath)
+	{
+		foreach (CreateBGObjectSubWindow.BgObject bgObject in this.create_obj_list_)
+		{
+			if (!string.IsNullOrEmpty(bgObject.data.direct_file))
+			{
+				if (filePath == bgObject.data.direct_file)
+				{
+					PhotoCustomObjectPlane component = bgObject.game_object.GetComponent<PhotoCustomObjectPlane>();
+					component.Desilialize(File.ReadAllBytes(filePath));
+				}
+			}
+		}
+	}
+
+	private CreateBGObjectSubWindow.BgObject AddObject(PhotoBGObjectData add_bg_data, string create_time = "")
+	{
+		if (add_bg_data == null)
+		{
+			return null;
+		}
+		CreateBGObjectSubWindow.BgObject bgObject = new CreateBGObjectSubWindow.BgObject();
+		bgObject.data = add_bg_data;
+		if (!string.IsNullOrEmpty(create_time))
+		{
+			bgObject.create_time = create_time;
+		}
+		for (int i = 0; i < this.create_obj_list_.Count; i++)
+		{
+			if (this.create_obj_list_[i].create_time == bgObject.create_time)
+			{
+				return null;
+			}
+		}
+		bgObject.game_object = bgObject.data.Instantiate(bgObject.create_time);
+		if (bgObject.game_object == null)
+		{
+			return null;
+		}
+		this.create_obj_list_.Add(bgObject);
+		this.create_obj_list_.Sort();
+		ObjectManagerWindow objectManagerWindow = this.mgr.GetWindow(PhotoWindowManager.WindowType.ObjectManager) as ObjectManagerWindow;
+		objectManagerWindow.AddTransTargetObject(bgObject.game_object, bgObject.data.name, PhotoTransTargetObject.Type.Prefab);
+		return bgObject;
+	}
+
+	public void RemoveObject(GameObject removeObject)
+	{
+		if (removeObject == null)
+		{
+			return;
+		}
+		CreateBGObjectSubWindow.BgObject bgObject = null;
+		foreach (CreateBGObjectSubWindow.BgObject bgObject2 in this.create_obj_list_)
+		{
+			if (bgObject2.game_object == removeObject)
+			{
+				bgObject = bgObject2;
+				break;
+			}
+		}
+		if (bgObject != null)
+		{
+			this.RemoveObject(bgObject);
+		}
+	}
+
+	private void RemoveObject(CreateBGObjectSubWindow.BgObject removeObject)
+	{
+		if (removeObject == null)
+		{
+			return;
+		}
+		ObjectManagerWindow objectManagerWindow = this.mgr.GetWindow(PhotoWindowManager.WindowType.ObjectManager) as ObjectManagerWindow;
+		objectManagerWindow.RemoveTransTargetObject(removeObject.game_object);
+		UnityEngine.Object.DestroyImmediate(removeObject.game_object);
+		this.create_obj_list_.Remove(removeObject);
+	}
+
+	public void OnSerializeEvent(ref Dictionary<string, Dictionary<string, string>> storeData)
+	{
+		for (int i = 0; i < this.create_obj_list_.Count; i++)
+		{
+			Dictionary<string, string> dictionary = new Dictionary<string, string>();
+			CreateBGObjectSubWindow.BgObject bgObject = this.create_obj_list_[i];
+			Transform transform = bgObject.game_object.transform;
+			dictionary["id"] = bgObject.data.id.ToString();
+			dictionary["position"] = transform.position.ToString("G9");
+			dictionary["rotation"] = transform.rotation.ToString("G9");
+			dictionary["scale"] = transform.localScale.ToString("G9");
+			dictionary["visible"] = transform.gameObject.activeSelf.ToString();
+			storeData.Add(bgObject.create_time, dictionary);
+		}
+	}
+
+	public void OnDeserializeEvent(ref Dictionary<string, Dictionary<string, string>> storeData)
+	{
+		this.OnDestroy();
+		List<string> list = new List<string>();
+		foreach (KeyValuePair<string, Dictionary<string, string>> keyValuePair in storeData)
+		{
+			Dictionary<string, string> value = keyValuePair.Value;
+			long id = long.Parse(value["id"]);
+			string key = keyValuePair.Key;
+			CreateBGObjectSubWindow.BgObject bgObject = this.AddObject(PhotoBGObjectData.Get(id), key);
+			if (bgObject != null && bgObject.game_object != null)
+			{
+				Transform transform = bgObject.game_object.transform;
+				transform.position = Parse.Vector3(value["position"]);
+				transform.rotation = Parse.Quaternion(value["rotation"]);
+				transform.localScale = Parse.Vector3(value["scale"]);
+				bgObject.game_object.SetActive(bool.Parse(value["visible"]));
+			}
+			else
+			{
+				list.Add(keyValuePair.Key);
+			}
+		}
+		for (int i = 0; i < list.Count; i++)
+		{
+			storeData.Remove(list[i]);
+		}
+		Utility.ResetNGUI(this.addButtonList.ScrollView);
+	}
+
+	public new PhotoWindowManager mgr
+	{
+		get
+		{
+			return base.mgr as PhotoWindowManager;
+		}
+	}
+
+	public PopupAndButtonList addButtonList;
+
+	private List<CreateBGObjectSubWindow.BgObject> create_obj_list_ = new List<CreateBGObjectSubWindow.BgObject>();
+
+	private class BgObject : IComparable<CreateBGObjectSubWindow.BgObject>
+	{
+		public BgObject()
+		{
+			this.create_time = DateTime.Now.ToString("yyyyMMddHHmmssfff");
+		}
+
+		public int CompareTo(CreateBGObjectSubWindow.BgObject obj)
+		{
+			if (obj == null)
+			{
+				return 1;
+			}
+			return long.Parse(this.create_time).CompareTo(long.Parse(obj.create_time));
+		}
+
+		public string create_time;
+
+		public GameObject game_object;
+
+		public PhotoBGObjectData data;
+	}
+}

+ 571 - 0
Assembly-CSharp/CreativeRoomUIPlacementMaid.cs

@@ -0,0 +1,571 @@
+using System;
+using System.Collections;
+using System.Collections.Specialized;
+using UnityEngine;
+using UnityEngine.EventSystems;
+using UnityEngine.UI;
+
+public class CreativeRoomUIPlacementMaid : MonoBehaviour
+{
+	private Maid targetMaid
+	{
+		get
+		{
+			if (this.m_TargetMaid == null)
+			{
+				this.m_TargetMaid = this.GetMaid(true);
+				if (this.m_TargetMaid == null)
+				{
+					this.m_TargetMaid = this.GetMaid(false);
+				}
+				if (this.m_TargetMaid)
+				{
+					this.m_TargetMaid.body0.SetBoneHitHeightY(-1000f);
+				}
+			}
+			return this.m_TargetMaid;
+		}
+	}
+
+	private Maid GetMaid(bool searchLeader = true)
+	{
+		if (this.m_CharaMgr == null)
+		{
+			return null;
+		}
+		Maid maid = null;
+		foreach (Maid maid2 in this.m_CharaMgr.GetStockMaidList())
+		{
+			if (maid2 != null)
+			{
+				if (!searchLeader || maid2.status.leader)
+				{
+					maid = maid2;
+					break;
+				}
+			}
+		}
+		if (maid == null)
+		{
+			int maidCount = this.m_CharaMgr.GetMaidCount();
+			for (int i = 0; i < maidCount; i++)
+			{
+				Maid maid3 = this.m_CharaMgr.GetMaid(i);
+				if (maid3 != null)
+				{
+					if (!searchLeader || maid3.status.leader)
+					{
+						maid = maid3;
+						break;
+					}
+				}
+			}
+		}
+		return maid;
+	}
+
+	public float snapValuePosition
+	{
+		set
+		{
+			if (this.m_GizmoObject == null)
+			{
+				return;
+			}
+			this.m_GizmoObject.snapValuePosition = value;
+		}
+	}
+
+	private void Awake()
+	{
+		this.m_CharaMgr = GameMain.Instance.CharacterMgr;
+		GameObject gameObject;
+		if (!(gameObject = GameObject.Find("[CreativeRoomUI Placement Maid] GizmoControlObject")))
+		{
+			gameObject = new GameObject("[CreativeRoomUI Placement Maid] GizmoControlObject");
+			GizmoObject gizmoObject = gameObject.AddComponent<GizmoObject>();
+			gizmoObject.activeAxis = true;
+			gizmoObject.activeRot = false;
+			gizmoObject.snapValuePosition = 0.5f;
+			gizmoObject.snapValueAngles = 15f;
+			gizmoObject.snapValueScale = 0.1f;
+			gameObject.SetActive(false);
+		}
+		this.m_GizmoObject = gameObject.GetComponent<GizmoObject>();
+		GizmoObject gizmoObject2 = this.m_GizmoObject;
+		gizmoObject2.onChangePosition = (Action<Vector3>)Delegate.Combine(gizmoObject2.onChangePosition, new Action<Vector3>(this.OnUpdateGizmoPosition));
+		GizmoObject gizmoObject3 = this.m_GizmoObject;
+		gizmoObject3.onChangeRotation = (Action<Quaternion>)Delegate.Combine(gizmoObject3.onChangeRotation, new Action<Quaternion>(this.OnUpdateGizmoRotation));
+		GizmoObject gizmoObject4 = this.m_GizmoObject;
+		gizmoObject4.onChangeScale = (Action<Vector3>)Delegate.Combine(gizmoObject4.onChangeScale, new Action<Vector3>(this.OnUpdateGizmoScale));
+		this.SetUpUI();
+	}
+
+	private void SetUpUI()
+	{
+		this.m_CachedTransformDataDic = new StringDictionary();
+		this.m_InputFieldPosX.contentType = InputField.ContentType.DecimalNumber;
+		this.m_InputFieldPosY.contentType = InputField.ContentType.DecimalNumber;
+		this.m_InputFieldPosZ.contentType = InputField.ContentType.DecimalNumber;
+		this.m_InputFieldRotX.contentType = InputField.ContentType.DecimalNumber;
+		this.m_InputFieldRotY.contentType = InputField.ContentType.DecimalNumber;
+		this.m_InputFieldRotZ.contentType = InputField.ContentType.DecimalNumber;
+		this.m_InputFieldScale.contentType = InputField.ContentType.DecimalNumber;
+		this.m_InputFieldPosX.text = this.m_GizmoObject.position.x.ToString("f3");
+		this.m_InputFieldPosY.text = this.m_GizmoObject.position.y.ToString("f3");
+		this.m_InputFieldPosZ.text = this.m_GizmoObject.position.z.ToString("f3");
+		this.m_InputFieldRotX.text = this.m_GizmoObject.eulerAngles.x.ToString("f3");
+		this.m_InputFieldRotY.text = this.m_GizmoObject.eulerAngles.y.ToString("f3");
+		this.m_InputFieldRotZ.text = this.m_GizmoObject.eulerAngles.z.ToString("f3");
+		this.m_InputFieldScale.text = this.m_GizmoObject.scale.x.ToString("f3");
+		this.m_SliderScale.value = this.m_GizmoObject.scale.x;
+		Action<InputField, Action<float>, Action> action = delegate(InputField input, Action<float> act_change, Action act_end)
+		{
+			input.onValueChanged.AddListener(delegate(string str)
+			{
+				float obj;
+				if (float.TryParse(str, out obj))
+				{
+					act_change(obj);
+				}
+			});
+			input.onEndEdit.AddListener(delegate(string str)
+			{
+				act_end();
+			});
+		};
+		action(this.m_InputFieldPosX, delegate(float value)
+		{
+			Vector3 position = this.m_GizmoObject.position;
+			position.x = value;
+			this.m_GizmoObject.position = position;
+		}, delegate
+		{
+			this.m_InputFieldPosX.text = this.m_GizmoObject.position.x.ToString("f3");
+		});
+		action(this.m_InputFieldPosY, delegate(float value)
+		{
+			Vector3 position = this.m_GizmoObject.position;
+			position.y = value;
+			this.m_GizmoObject.position = position;
+		}, delegate
+		{
+			this.m_InputFieldPosY.text = this.m_GizmoObject.position.y.ToString("f3");
+		});
+		action(this.m_InputFieldPosZ, delegate(float value)
+		{
+			Vector3 position = this.m_GizmoObject.position;
+			position.z = value;
+			this.m_GizmoObject.position = position;
+		}, delegate
+		{
+			this.m_InputFieldPosZ.text = this.m_GizmoObject.position.z.ToString("f3");
+		});
+		action(this.m_InputFieldRotX, delegate(float value)
+		{
+			Vector3 eulerAngles = this.m_GizmoObject.eulerAngles;
+			eulerAngles.x = value;
+			this.m_GizmoObject.eulerAngles = eulerAngles;
+		}, delegate
+		{
+			this.m_InputFieldRotX.text = this.m_GizmoObject.eulerAngles.x.ToString("f3");
+		});
+		action(this.m_InputFieldRotY, delegate(float value)
+		{
+			Vector3 eulerAngles = this.m_GizmoObject.eulerAngles;
+			eulerAngles.y = value;
+			this.m_GizmoObject.eulerAngles = eulerAngles;
+		}, delegate
+		{
+			this.m_InputFieldRotY.text = this.m_GizmoObject.eulerAngles.y.ToString("f3");
+		});
+		action(this.m_InputFieldRotZ, delegate(float value)
+		{
+			Vector3 eulerAngles = this.m_GizmoObject.eulerAngles;
+			eulerAngles.z = value;
+			this.m_GizmoObject.eulerAngles = eulerAngles;
+		}, delegate
+		{
+			this.m_InputFieldRotZ.text = this.m_GizmoObject.eulerAngles.z.ToString("f3");
+		});
+		action(this.m_InputFieldScale, delegate(float value)
+		{
+			Vector3 scale = this.m_GizmoObject.scale;
+			value = Mathf.Clamp(value, this.m_SliderScale.minValue, this.m_SliderScale.maxValue);
+			if (Mathf.Approximately(scale.x, value))
+			{
+				return;
+			}
+			scale.x = (scale.y = (scale.z = value));
+			this.m_GizmoObject.scale = scale;
+			this.m_SliderScale.value = value;
+		}, delegate
+		{
+			this.m_InputFieldScale.text = this.m_GizmoObject.scale.x.ToString("f3");
+		});
+		this.m_SliderScale.onValueChanged.AddListener(delegate(float value)
+		{
+			if (Mathf.Approximately(this.m_GizmoObject.cachedSnapScale.x, value))
+			{
+				return;
+			}
+			this.m_GizmoObject.nonCallbackScale = Vector3.one * value;
+			float x = this.m_GizmoObject.cachedSnapScale.x;
+			this.m_SliderScale.value = x;
+			if (!this.m_InputFieldScale.isFocused)
+			{
+				this.m_InputFieldScale.text = x.ToString("f3");
+			}
+		});
+	}
+
+	private void Update()
+	{
+		if (this.targetMaid == null || !this.targetMaid.Visible)
+		{
+			this.m_GizmoObject.gameObject.SetActive(false);
+			return;
+		}
+		if (EventSystem.current != null)
+		{
+			if (NInput.GetMouseButtonDown(0))
+			{
+				GameObject currentSelectedGameObject = EventSystem.current.currentSelectedGameObject;
+				if (EventSystem.current.IsPointerOverGameObject() && currentSelectedGameObject && currentSelectedGameObject.GetComponent<RectTransform>())
+				{
+					this.m_GizmoObject.gameObject.SetActive(false);
+				}
+			}
+			else if (NInput.GetMouseButtonUp(0))
+			{
+				this.m_GizmoObject.gameObject.SetActive(true);
+			}
+		}
+	}
+
+	private void OnUpdateGizmoPosition(Vector3 position)
+	{
+		if (this.targetMaid != null)
+		{
+			this.targetMaid.transform.position = position;
+			if (!this.m_InputFieldPosX.isFocused)
+			{
+				this.m_InputFieldPosX.text = position.x.ToString("f3");
+			}
+			if (!this.m_InputFieldPosY.isFocused)
+			{
+				this.m_InputFieldPosY.text = position.y.ToString("f3");
+			}
+			if (!this.m_InputFieldPosZ.isFocused)
+			{
+				this.m_InputFieldPosZ.text = position.z.ToString("f3");
+			}
+		}
+	}
+
+	private void OnUpdateGizmoRotation(Quaternion rotation)
+	{
+		if (this.targetMaid != null)
+		{
+			this.targetMaid.transform.rotation = rotation;
+			Vector3 eulerAngles = rotation.eulerAngles;
+			if (!this.m_InputFieldRotX.isFocused)
+			{
+				this.m_InputFieldRotX.text = eulerAngles.x.ToString("f3");
+			}
+			if (!this.m_InputFieldRotY.isFocused)
+			{
+				this.m_InputFieldRotY.text = eulerAngles.y.ToString("f3");
+			}
+			if (!this.m_InputFieldRotZ.isFocused)
+			{
+				this.m_InputFieldRotZ.text = eulerAngles.z.ToString("f3");
+			}
+		}
+	}
+
+	private void OnUpdateGizmoScale(Vector3 scale)
+	{
+		if (this.targetMaid != null)
+		{
+			this.targetMaid.transform.localScale = scale;
+			if (!this.m_InputFieldScale.isFocused)
+			{
+				this.m_InputFieldScale.text = scale.x.ToString("f3");
+			}
+			this.m_SliderScale.value = scale.x;
+		}
+	}
+
+	public void ButtonEvent_GizmoEnableMove()
+	{
+		GizmoObject gizmoObject = this.m_GizmoObject;
+		gizmoObject.activeAxis = true;
+		gizmoObject.activeRot = false;
+	}
+
+	public void ButtonEvent_GizmoEnableRot()
+	{
+		GizmoObject gizmoObject = this.m_GizmoObject;
+		gizmoObject.activeAxis = false;
+		gizmoObject.activeRot = true;
+	}
+
+	public void ButtonEvent_GizmoDisable()
+	{
+		GizmoObject gizmoObject = this.m_GizmoObject;
+		gizmoObject.activeAxis = false;
+		gizmoObject.activeRot = false;
+	}
+
+	public void ButtonEvent_CopyPosition()
+	{
+		Vector3 position = this.m_GizmoObject.position;
+		string text = string.Format("{0},{1},{2}", position.x, position.y, position.z);
+		this.m_CachedTransformDataDic["position"] = text.ToString();
+	}
+
+	public void ButtonEvent_PastePosition()
+	{
+		string text = this.m_CachedTransformDataDic["position"];
+		if (string.IsNullOrEmpty(text))
+		{
+			Debug.Log("座標データはまだない");
+			return;
+		}
+		string[] array = text.Split(new char[]
+		{
+			','
+		});
+		if (array.Length != 3)
+		{
+			Debug.LogError("position の文字数が" + array.Length + "でした");
+			return;
+		}
+		this.m_GizmoObject.position = new Vector3(float.Parse(array[0]), float.Parse(array[1]), float.Parse(array[2]));
+	}
+
+	public void ButtonEvent_ResetPosition()
+	{
+		this.m_GizmoObject.position = Vector3.zero;
+	}
+
+	public void ButtonEvent_CopyRotation()
+	{
+		Quaternion rotation = this.m_GizmoObject.rotation;
+		string text = string.Format("{0},{1},{2},{3}", new object[]
+		{
+			rotation.x,
+			rotation.y,
+			rotation.z,
+			rotation.w
+		});
+		this.m_CachedTransformDataDic["rotation"] = text.ToString();
+	}
+
+	public void ButtonEvent_PasteRotation()
+	{
+		string text = this.m_CachedTransformDataDic["rotation"];
+		if (string.IsNullOrEmpty(text))
+		{
+			Debug.Log("回転データはまだない");
+			return;
+		}
+		string[] array = text.Split(new char[]
+		{
+			','
+		});
+		if (array.Length != 4)
+		{
+			Debug.LogError("rotation の文字数が" + array.Length + "でした");
+			return;
+		}
+		this.m_GizmoObject.rotation = new Quaternion(float.Parse(array[0]), float.Parse(array[1]), float.Parse(array[2]), float.Parse(array[3]));
+	}
+
+	public void ButtonEvent_ResetRotation()
+	{
+		this.m_GizmoObject.rotation = Quaternion.identity;
+	}
+
+	public void ButtonEvent_CopyScale()
+	{
+		Vector3 scale = this.m_GizmoObject.scale;
+		string text = string.Format("{0},{1},{2}", scale.x, scale.y, scale.z);
+		this.m_CachedTransformDataDic["scale"] = text.ToString();
+	}
+
+	public void ButtonEvent_PasteScale()
+	{
+		string text = this.m_CachedTransformDataDic["scale"];
+		if (string.IsNullOrEmpty(text))
+		{
+			Debug.Log("スケールデータはまだない");
+			return;
+		}
+		string[] array = text.Split(new char[]
+		{
+			','
+		});
+		if (array.Length != 3)
+		{
+			Debug.LogError("scale の文字数が" + array.Length + "でした");
+			return;
+		}
+		this.m_GizmoObject.scale = new Vector3(float.Parse(array[0]), float.Parse(array[1]), float.Parse(array[2]));
+	}
+
+	public void ButtonEvent_ResetScale()
+	{
+		this.m_GizmoObject.scale = Vector3.one;
+	}
+
+	public void ButtonEvent_CameraFocus()
+	{
+		Maid targetMaid = this.targetMaid;
+		if (!targetMaid)
+		{
+			return;
+		}
+		if (!targetMaid.Visible)
+		{
+			return;
+		}
+		Transform bone = targetMaid.body0.GetBone("Bip01 Head");
+		WfCameraMoveSupport wfCameraMoveSupport = base.GetComponent<WfCameraMoveSupport>();
+		if (wfCameraMoveSupport == null)
+		{
+			wfCameraMoveSupport = base.gameObject.AddComponent<WfCameraMoveSupport>();
+		}
+		Vector3 position = bone.position;
+		float distance = Mathf.Sqrt(5f) * 2f;
+		Vector2 aroundAngle = new Vector2(-135f, 45f);
+		wfCameraMoveSupport.StartCameraPosition(position, distance, aroundAngle);
+	}
+
+	public void ButtonEvent_VisibleMaid(bool isVisible)
+	{
+		if (this.m_CharaMgr.IsBusy())
+		{
+			return;
+		}
+		if (this.targetMaid == null)
+		{
+			return;
+		}
+		if (this.targetMaid.ActiveSlotNo == -1)
+		{
+			this.m_CharaMgr.SetActiveMaid(this.targetMaid, 0);
+			this.targetMaid.AllProcPropSeqStart();
+		}
+		this.targetMaid.Visible = isVisible;
+		if (isVisible && this.targetMaid.IsBusy)
+		{
+			uGUIUtility.SetActiveEventSystem(false);
+			GameMain.Instance.MainCamera.FadeOut(0f, false, null, true, default(Color));
+			base.StartCoroutine(this.CorMaidLoad(this.targetMaid, new Action(this.OnMaidLoadEnd)));
+		}
+	}
+
+	public void ButtonEvent_ToggleSnap(bool isEnable)
+	{
+		if (this.m_GizmoObject)
+		{
+			if (isEnable)
+			{
+				this.m_GizmoObject.controlType = GizmoObject.ControlType.Snap;
+			}
+			else
+			{
+				this.m_GizmoObject.controlType = GizmoObject.ControlType.Default;
+			}
+		}
+	}
+
+	private IEnumerator CorMaidLoad(Maid targetMaid, Action actLoadEnd)
+	{
+		targetMaid.Visible = true;
+		while (targetMaid.IsBusy)
+		{
+			yield return null;
+		}
+		actLoadEnd();
+		yield break;
+	}
+
+	private void OnMaidLoadEnd()
+	{
+		GameMain.Instance.MainCamera.FadeIn(0.3f, false, null, true, true, default(Color));
+		this.targetMaid.CrossFade("maid_stand01.anm", false, true, false, 0.5f, 1f);
+		this.targetMaid.FaceAnime("通常", 0f, 0);
+		this.targetMaid.EyeToCamera(Maid.EyeMoveType.目と顔を向ける, 0f);
+		uGUIUtility.SetActiveEventSystem(true);
+	}
+
+	private void OnDisable()
+	{
+		if (this.m_GizmoObject)
+		{
+			this.m_GizmoObject.gameObject.SetActive(false);
+		}
+	}
+
+	private void OnEnable()
+	{
+		if (this.m_GizmoObject && this.targetMaid != null && this.targetMaid.Visible)
+		{
+			this.m_GizmoObject.gameObject.SetActive(true);
+		}
+	}
+
+	private void OnDestroy()
+	{
+		if (this.m_GizmoObject)
+		{
+			UnityEngine.Object.Destroy(this.m_GizmoObject);
+		}
+		if (this.targetMaid)
+		{
+			this.targetMaid.transform.position = Vector3.zero;
+			this.targetMaid.transform.rotation = Quaternion.identity;
+			this.targetMaid.transform.localScale = Vector3.one;
+			this.targetMaid.ResetAll();
+			this.targetMaid.Visible = false;
+		}
+	}
+
+	[Header("座標入力欄")]
+	[SerializeField]
+	private InputField m_InputFieldPosX;
+
+	[SerializeField]
+	private InputField m_InputFieldPosY;
+
+	[SerializeField]
+	private InputField m_InputFieldPosZ;
+
+	[Header("回転入力欄")]
+	[SerializeField]
+	private InputField m_InputFieldRotX;
+
+	[SerializeField]
+	private InputField m_InputFieldRotY;
+
+	[SerializeField]
+	private InputField m_InputFieldRotZ;
+
+	[Header("スケール入力欄")]
+	[SerializeField]
+	private InputField m_InputFieldScale;
+
+	[SerializeField]
+	private Slider m_SliderScale;
+
+	private CharacterMgr m_CharaMgr;
+
+	private GizmoObject m_GizmoObject;
+
+	private Maid m_TargetMaid;
+
+	private StringDictionary m_CachedTransformDataDic;
+}

+ 212 - 0
Assembly-CSharp/CsvImporter.cs

@@ -0,0 +1,212 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class CsvImporter : MonoBehaviour
+{
+	private void Start()
+	{
+	}
+
+	public int GetCsvDataMs(string fileName)
+	{
+		if (!GameUty.FileSystem.IsExistentFile(fileName))
+		{
+			NDebug.Assert("表がありません。" + fileName, false);
+		}
+		using (AFileBase afileBase = GameUty.FileSystem.FileOpen(fileName))
+		{
+			using (CsvParser csvParser = new CsvParser())
+			{
+				bool condition = csvParser.Open(afileBase);
+				NDebug.Assert(condition, fileName + "\nopen failed.");
+				int i = 0;
+				List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();
+				for (i = 1; i < csvParser.max_cell_y; i++)
+				{
+					if (csvParser.IsCellToExistData(0, i))
+					{
+						string cellAsString = csvParser.GetCellAsString(0, i);
+						Debug.Log("cell = " + cellAsString);
+						return int.Parse(cellAsString);
+					}
+				}
+			}
+		}
+		return -1;
+	}
+
+	public void GetCsvData(string fileName)
+	{
+		if (!GameUty.FileSystem.IsExistentFile(fileName))
+		{
+			NDebug.Assert("表がありません。" + fileName, false);
+		}
+		using (AFileBase afileBase = GameUty.FileSystem.FileOpen(fileName))
+		{
+			using (CsvParser csvParser = new CsvParser())
+			{
+				bool condition = csvParser.Open(afileBase);
+				NDebug.Assert(condition, fileName + "\nopen failed.");
+				int i = 0;
+				List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();
+				for (i = 1; i < csvParser.max_cell_y; i++)
+				{
+					if (csvParser.IsCellToExistData(0, i))
+					{
+						int j = 0;
+						int num = 0;
+						for (j = 0; j < csvParser.max_cell_x; j++)
+						{
+							if (csvParser.IsCellToExistData(j, i))
+							{
+								switch (j)
+								{
+								case 1:
+								{
+									string cellAsString = csvParser.GetCellAsString(j, i);
+									if (cellAsString == null)
+									{
+										goto IL_1B1;
+									}
+									if (CsvImporter.<>f__switch$map5 == null)
+									{
+										CsvImporter.<>f__switch$map5 = new Dictionary<string, int>(7)
+										{
+											{
+												"スリーセブン",
+												0
+											},
+											{
+												"BAR",
+												1
+											},
+											{
+												"ピエロ",
+												2
+											},
+											{
+												"ベル",
+												3
+											},
+											{
+												"メダル",
+												4
+											},
+											{
+												"ぶどう",
+												5
+											},
+											{
+												"チェリー",
+												6
+											}
+										};
+									}
+									int num2;
+									if (!CsvImporter.<>f__switch$map5.TryGetValue(cellAsString, out num2))
+									{
+										goto IL_1B1;
+									}
+									switch (num2)
+									{
+									case 0:
+										num = 0;
+										break;
+									case 1:
+										num = 1;
+										break;
+									case 2:
+										num = 2;
+										break;
+									case 3:
+										num = 3;
+										break;
+									case 4:
+										num = 4;
+										break;
+									case 5:
+										num = 5;
+										break;
+									case 6:
+										num = 6;
+										break;
+									case 7:
+										goto IL_1B1;
+									default:
+										goto IL_1B1;
+									}
+									break;
+									IL_1B1:
+									num = -1;
+									break;
+								}
+								case 2:
+									if (num != -1)
+									{
+										this.payDividend[num] = int.Parse(csvParser.GetCellAsString(j, i));
+									}
+									break;
+								case 3:
+									if (num != -1)
+									{
+										this.normalDividend[num] = int.Parse(csvParser.GetCellAsString(j, i));
+										this.normalMaxProb += int.Parse(csvParser.GetCellAsString(j, i));
+									}
+									break;
+								case 4:
+									if (num != -1)
+									{
+										this.chanceDividend[num] = int.Parse(csvParser.GetCellAsString(j, i));
+										this.chanceMaxProb += int.Parse(csvParser.GetCellAsString(j, i));
+									}
+									break;
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	public int GetCsvDataParse(int id)
+	{
+		if (id == 0)
+		{
+			return this.normalMaxProb;
+		}
+		if (id != 1)
+		{
+			return -1;
+		}
+		return this.chanceMaxProb;
+	}
+
+	public int[] GetCsvDataParseList(int id)
+	{
+		if (id == 0)
+		{
+			return this.payDividend;
+		}
+		if (id == 1)
+		{
+			return this.normalDividend;
+		}
+		if (id != 2)
+		{
+			return null;
+		}
+		return this.chanceDividend;
+	}
+
+	public int[] normalDividend = new int[8];
+
+	public int[] chanceDividend = new int[8];
+
+	public int[] payDividend = new int[8];
+
+	public int normalMaxProb;
+
+	public int chanceMaxProb;
+}

+ 460 - 0
Assembly-CSharp/DEMO_UOC_GUI.cs

@@ -0,0 +1,460 @@
+using System;
+using UnityEngine;
+
+public class DEMO_UOC_GUI : MonoBehaviour
+{
+	private void Start()
+	{
+	}
+
+	private void Update()
+	{
+		if (this.target.invertAxisX)
+		{
+			this.target.invertXValue = -1;
+		}
+		else
+		{
+			this.target.invertXValue = 1;
+		}
+		if (this.target.invertAxisY)
+		{
+			this.target.invertYValue = -1;
+		}
+		else
+		{
+			this.target.invertYValue = 1;
+		}
+		if (this.target.invertAxisZoom)
+		{
+			this.target.invertZoomValue = -1;
+		}
+		else
+		{
+			this.target.invertZoomValue = 1;
+		}
+		if (this.target.autoRotateReverse)
+		{
+			this.target.autoRotateReverseValue = -1;
+		}
+		else
+		{
+			this.target.autoRotateReverseValue = 1;
+		}
+	}
+
+	private void OnGUI()
+	{
+		this.height = 204;
+		if (this.showOrbitOptions)
+		{
+			this.height += 570;
+		}
+		if (this.showMouseOptions)
+		{
+			this.height += 130;
+		}
+		if (this.showKeyboardOptions)
+		{
+			this.height += 40;
+		}
+		if (this.showAutoRotateOptions)
+		{
+			this.height += 80;
+		}
+		if (this.showSpinOptions)
+		{
+			this.height += 100;
+		}
+		if (this.showCollisionOptions)
+		{
+			this.height += 80;
+		}
+		if (GUI.Button(new Rect((float)(Screen.width - 105), 5f, 100f, 50f), "Reset"))
+		{
+			Application.LoadLevel(Application.loadedLevel);
+		}
+		GUI.Box(new Rect(10f, 10f, 340f, (float)Mathf.Min(this.height, Screen.height - 20)), string.Empty);
+		GUILayout.BeginArea(new Rect(12f, 12f, 336f, (float)Mathf.Min(this.height - 4, Screen.height - 24)));
+		this.scrollPos = GUILayout.BeginScrollView(this.scrollPos, new GUILayoutOption[0]);
+		this.showOrbitOptions = GUILayout.Toggle(this.showOrbitOptions, " Show Orbit Options", new GUILayoutOption[0]);
+		GUILayout.Space(4f);
+		if (this.showOrbitOptions)
+		{
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Axis X Speed", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.xSpeed = GUILayout.HorizontalSlider(this.target.xSpeed, 0f, 2f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			});
+			GUILayout.Label(this.target.xSpeed.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Axis Y Speed", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.ySpeed = GUILayout.HorizontalSlider(this.target.ySpeed, 0f, 2f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			});
+			GUILayout.Label(this.target.ySpeed.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Zoom Sensitivity", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.zoomSpeed = GUILayout.HorizontalSlider(this.target.zoomSpeed, 0f, 50f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			});
+			GUILayout.Label(this.target.zoomSpeed.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Axis X Dampening", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.dampeningX = GUILayout.HorizontalSlider(this.target.dampeningX, 0.01f, 0.99f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			});
+			GUILayout.Label(this.target.dampeningX.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Axis Y Dampening", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.dampeningY = GUILayout.HorizontalSlider(this.target.dampeningY, 0.01f, 0.99f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			});
+			GUILayout.Label(this.target.dampeningY.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Zoom Smoothing", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.smoothingZoom = GUILayout.HorizontalSlider(this.target.smoothingZoom, 0.01f, 1f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			});
+			GUILayout.Label(this.target.smoothingZoom.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Min Distance", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.minDistance = Mathf.Min(this.target.maxDistance, GUILayout.HorizontalSlider(this.target.minDistance, 1f, 50f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			}));
+			GUILayout.Label(this.target.minDistance.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("MaxDistance", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.maxDistance = Mathf.Max(this.target.minDistance, GUILayout.HorizontalSlider(this.target.maxDistance, 1f, 50f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			}));
+			GUILayout.Label(this.target.maxDistance.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Limit Angle X", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.limitX = GUILayout.Toggle(this.target.limitX, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			if (!this.target.limitX)
+			{
+				GUI.color = new Color(0.5f, 0.5f, 0.5f);
+			}
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Min Angle X", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.xMinLimit = Mathf.Min(this.target.xMaxLimit, GUILayout.HorizontalSlider(this.target.xMinLimit, -180f, 180f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			}));
+			GUILayout.Label(this.target.xMinLimit.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Max Angle X", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.xMaxLimit = Mathf.Max(this.target.xMinLimit, GUILayout.HorizontalSlider(this.target.xMaxLimit, -180f, 180f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			}));
+			GUILayout.Label(this.target.xMaxLimit.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("X Limit Offset", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.xLimitOffset = GUILayout.HorizontalSlider(this.target.xLimitOffset, 0f, 360f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			});
+			GUILayout.Label(this.target.xLimitOffset.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUI.color = new Color(1f, 1f, 1f);
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Limit Angle Y", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.limitY = GUILayout.Toggle(this.target.limitY, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			if (!this.target.limitY)
+			{
+				GUI.color = new Color(0.5f, 0.5f, 0.5f);
+			}
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Min Angle Y", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.yMinLimit = Mathf.Min(this.target.yMaxLimit, GUILayout.HorizontalSlider(this.target.yMinLimit, -180f, 180f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			}));
+			GUILayout.Label(this.target.yMinLimit.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Max Angle Y", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.yMaxLimit = Mathf.Max(this.target.yMinLimit, GUILayout.HorizontalSlider(this.target.yMaxLimit, -180f, 180f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			}));
+			GUILayout.Label(this.target.yMaxLimit.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Y Limit Offset", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.yLimitOffset = GUILayout.HorizontalSlider(this.target.yLimitOffset, 0f, 360f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			});
+			GUILayout.Label(this.target.yLimitOffset.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUI.color = new Color(1f, 1f, 1f);
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Invert Axis X", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.invertAxisX = GUILayout.Toggle(this.target.invertAxisX, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Invert Axis Y", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.invertAxisY = GUILayout.Toggle(this.target.invertAxisY, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Invert Zoom", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.invertAxisZoom = GUILayout.Toggle(this.target.invertAxisZoom, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+		}
+		GUILayout.Space(8f);
+		this.showMouseOptions = GUILayout.Toggle(this.showMouseOptions, " Show Mouse Input Options", new GUILayoutOption[0]);
+		GUILayout.Space(4f);
+		if (this.showMouseOptions)
+		{
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Mouse Controls", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.mouseControl = GUILayout.Toggle(this.target.mouseControl, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			if (!this.target.mouseControl)
+			{
+				GUI.color = new Color(0.5f, 0.5f, 0.5f);
+			}
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Click To Rotate", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.clickToRotate = GUILayout.Toggle(this.target.clickToRotate, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			if (!this.target.clickToRotate)
+			{
+				GUI.color = new Color(0.5f, 0.5f, 0.5f);
+			}
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Left Click", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.leftClickToRotate = GUILayout.Toggle(this.target.leftClickToRotate, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Right Click", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.rightClickToRotate = GUILayout.Toggle(this.target.rightClickToRotate, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUI.color = new Color(1f, 1f, 1f);
+		}
+		GUILayout.Space(8f);
+		this.showKeyboardOptions = GUILayout.Toggle(this.showKeyboardOptions, " Show Keyboard Input Options", new GUILayoutOption[0]);
+		GUILayout.Space(4f);
+		if (this.showKeyboardOptions)
+		{
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Keyboard Controls", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.keyboardControl = GUILayout.Toggle(this.target.keyboardControl, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+		}
+		GUILayout.Space(8f);
+		this.showAutoRotateOptions = GUILayout.Toggle(this.showAutoRotateOptions, " Show Auto-Rotate Options", new GUILayoutOption[0]);
+		GUILayout.Space(4f);
+		if (this.showAutoRotateOptions)
+		{
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Auto Rotate", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.autoRotateOn = GUILayout.Toggle(this.target.autoRotateOn, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			if (!this.target.autoRotateOn)
+			{
+				GUI.color = new Color(0.5f, 0.5f, 0.5f);
+			}
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Reverse", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.autoRotateReverse = GUILayout.Toggle(this.target.autoRotateReverse, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Rotate Speed", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.autoRotateSpeed = GUILayout.HorizontalSlider(this.target.autoRotateSpeed, 0.01f, 20f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			});
+			GUILayout.Label(this.target.autoRotateSpeed.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUI.color = new Color(1f, 1f, 1f);
+		}
+		GUILayout.Space(8f);
+		this.showSpinOptions = GUILayout.Toggle(this.showSpinOptions, " Show Spin Options", new GUILayoutOption[0]);
+		GUILayout.Space(4f);
+		if (this.showSpinOptions)
+		{
+			GUILayout.Label("Hold Left-CTRL and throw to spin.", new GUILayoutOption[0]);
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Spin Enabled", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.SpinEnabled = GUILayout.Toggle(this.target.SpinEnabled, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			if (!this.target.SpinEnabled)
+			{
+				GUI.color = new Color(0.5f, 0.5f, 0.5f);
+			}
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Max Spin Speed", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.maxSpinSpeed = GUILayout.HorizontalSlider(this.target.maxSpinSpeed, 0.01f, 5f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			});
+			GUILayout.Label(this.target.maxSpinSpeed.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUI.color = new Color(1f, 1f, 1f);
+		}
+		GUILayout.Space(8f);
+		this.showCollisionOptions = GUILayout.Toggle(this.showCollisionOptions, " Show Collision Options", new GUILayoutOption[0]);
+		GUILayout.Space(4f);
+		if (this.showCollisionOptions)
+		{
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Collision Enabled", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.cameraCollision = GUILayout.Toggle(this.target.cameraCollision, string.Empty, new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			if (!this.target.cameraCollision)
+			{
+				GUI.color = new Color(0.5f, 0.5f, 0.5f);
+			}
+			GUILayout.BeginHorizontal(new GUILayoutOption[0]);
+			GUILayout.Label("Collision Radius", new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.LabelWidth)
+			});
+			this.target.collisionRadius = GUILayout.HorizontalSlider(this.target.collisionRadius, 0.01f, 1f, new GUILayoutOption[]
+			{
+				GUILayout.Width((float)this.SliderWidth)
+			});
+			GUILayout.Label(this.target.collisionRadius.ToString("F"), new GUILayoutOption[0]);
+			GUILayout.EndHorizontal();
+			GUI.color = new Color(1f, 1f, 1f);
+		}
+		GUILayout.EndScrollView();
+		GUILayout.EndArea();
+	}
+
+	public UltimateOrbitCamera target;
+
+	private int height;
+
+	private bool showOrbitOptions;
+
+	private bool showMouseOptions;
+
+	private bool showKeyboardOptions;
+
+	private bool showAutoRotateOptions;
+
+	private bool showSpinOptions;
+
+	private bool showCollisionOptions;
+
+	private int LabelWidth = 80;
+
+	private int SliderWidth = 180;
+
+	private Vector2 scrollPos = new Vector2(0f, 0f);
+}

+ 289 - 0
Assembly-CSharp/DailyCtrl.cs

@@ -0,0 +1,289 @@
+using System;
+using System.Collections.Generic;
+using com.workman.cm3d2.button;
+using MaidStatus;
+using PlayerStatus;
+using Schedule;
+using UnityEngine;
+using wf;
+
+public class DailyCtrl : MonoBehaviour
+{
+	public void Init(DailyMgr mgr, GameObject goPanel)
+	{
+		this.m_mgr = mgr;
+		this.m_goPanel = goPanel;
+	}
+
+	public void DisplayViewer(DailyMgr.Daily daily)
+	{
+		if (!this.m_bInit)
+		{
+			this.m_bInit = true;
+			foreach (DailyCtrl.ButtonData buttonData in this.menuButtons)
+			{
+				EventDelegate.Add(buttonData.button.onClick, new EventDelegate.Callback(this.m_mgr.OnClickMenuButton));
+			}
+		}
+		foreach (DailyCtrl.ButtonData buttonData2 in this.menuButtons)
+		{
+			buttonData2.active = true;
+		}
+		DailyCtrl.ButtonType[] array3;
+		if (daily == DailyMgr.Daily.Daytime)
+		{
+			if (DailyMgr.IsLegacy)
+			{
+				array3 = new DailyCtrl.ButtonType[]
+				{
+					DailyCtrl.ButtonType.Dance,
+					DailyCtrl.ButtonType.FacilityManagement,
+					DailyCtrl.ButtonType.Casino,
+					DailyCtrl.ButtonType.Trophy,
+					DailyCtrl.ButtonType.PhotoMode,
+					DailyCtrl.ButtonType.DeskCustomize,
+					DailyCtrl.ButtonType.MyRoomCustom,
+					DailyCtrl.ButtonType.Casino,
+					DailyCtrl.ButtonType.Shop,
+					DailyCtrl.ButtonType.FacilityManagement,
+					DailyCtrl.ButtonType.LegacyMode,
+					DailyCtrl.ButtonType.Karaoke,
+					DailyCtrl.ButtonType.EventScenario,
+					DailyCtrl.ButtonType.ManEdit,
+					DailyCtrl.ButtonType.Credit
+				};
+			}
+			else
+			{
+				array3 = new DailyCtrl.ButtonType[]
+				{
+					DailyCtrl.ButtonType.Dance,
+					DailyCtrl.ButtonType.Casino,
+					DailyCtrl.ButtonType.CompetitiveShow
+				};
+			}
+		}
+		else if (DailyMgr.IsLegacy)
+		{
+			array3 = new DailyCtrl.ButtonType[]
+			{
+				DailyCtrl.ButtonType.Schedule,
+				DailyCtrl.ButtonType.CompetitiveShow,
+				DailyCtrl.ButtonType.Trophy,
+				DailyCtrl.ButtonType.PhotoMode,
+				DailyCtrl.ButtonType.DeskCustomize,
+				DailyCtrl.ButtonType.MyRoomCustom,
+				DailyCtrl.ButtonType.Casino,
+				DailyCtrl.ButtonType.Shop,
+				DailyCtrl.ButtonType.FacilityManagement,
+				DailyCtrl.ButtonType.LegacyMode,
+				DailyCtrl.ButtonType.Karaoke,
+				DailyCtrl.ButtonType.EventScenario,
+				DailyCtrl.ButtonType.ManEdit,
+				DailyCtrl.ButtonType.Credit,
+				DailyCtrl.ButtonType.Dance
+			};
+		}
+		else
+		{
+			array3 = new DailyCtrl.ButtonType[]
+			{
+				DailyCtrl.ButtonType.Schedule,
+				DailyCtrl.ButtonType.CompetitiveShow,
+				DailyCtrl.ButtonType.LegacyMode
+			};
+		}
+		foreach (DailyCtrl.ButtonType type in array3)
+		{
+			this.GetMenuButton(type).active = false;
+		}
+		PlayerStatus.Status status = GameMain.Instance.CharacterMgr.status;
+		if (!status.isAvailableDance)
+		{
+			this.GetMenuButton(DailyCtrl.ButtonType.Dance).active = false;
+		}
+		if (!status.isAvailableCompetitiveShow)
+		{
+			this.GetMenuButton(DailyCtrl.ButtonType.CompetitiveShow).active = false;
+		}
+		if (!status.isAvailableShop)
+		{
+			this.GetMenuButton(DailyCtrl.ButtonType.Shop).active = false;
+		}
+		if (!KaraokeDataManager.IsExistKaraokeData(false))
+		{
+			this.GetMenuButton(DailyCtrl.ButtonType.Karaoke).active = false;
+		}
+		this.m_goPanel.SetActive(true);
+		this.SetAllButtonEnable(true);
+		if (!CasinoDataMgr.Instance.GetCasinoFacility(true) && !CasinoDataMgr.Instance.GetCasinoFacility(false))
+		{
+			this.GetMenuButton(DailyCtrl.ButtonType.Casino).button.isEnabled = false;
+		}
+		if (!DailyMgr.IsLegacy && daily == DailyMgr.Daily.Daytime)
+		{
+			UIButton button = this.GetMenuButton(DailyCtrl.ButtonType.LegacyMode).button;
+			if (GameUty.IsEnabledCompatibilityMode && PluginData.IsEnabled("Legacy"))
+			{
+				EventDelegate.Add(button.onClick, new EventDelegate.Callback(this.BackUpScheduleSlot));
+				this.GetMenuButton(DailyCtrl.ButtonType.LegacyMode).button.isEnabled = this.IsEnabledLegacyMode();
+			}
+			else
+			{
+				this.GetMenuButton(DailyCtrl.ButtonType.LegacyMode).active = false;
+			}
+		}
+		foreach (UITable table in this.m_goPanel.GetComponentsInChildren<UITable>())
+		{
+			Utility.ResetNGUI(table);
+		}
+		foreach (UIGrid grid in this.m_goPanel.GetComponentsInChildren<UIGrid>())
+		{
+			Utility.ResetNGUI(grid);
+		}
+		StatusViewer component = UTY.GetChildObject(this.m_goPanel, "StatusViewer", false).GetComponent<StatusViewer>();
+		component.isEnabledClubNameChangeButton = true;
+		component.isEnabledMainBusinessChangeButton = false;
+	}
+
+	public DailyCtrl.ButtonData GetMenuButton(DailyCtrl.ButtonType type)
+	{
+		foreach (DailyCtrl.ButtonData buttonData in this.menuButtons)
+		{
+			if (buttonData.type == type)
+			{
+				return buttonData;
+			}
+		}
+		return new DailyCtrl.ButtonData
+		{
+			button = null,
+			type = type
+		};
+	}
+
+	public DailyCtrl.ButtonData GetMenuButton(UIButton button)
+	{
+		foreach (DailyCtrl.ButtonData buttonData in this.menuButtons)
+		{
+			if (buttonData.button == button)
+			{
+				return buttonData;
+			}
+		}
+		return new DailyCtrl.ButtonData
+		{
+			button = null,
+			type = DailyCtrl.ButtonType.Next
+		};
+	}
+
+	private bool IsEnabledCompetitiveShow()
+	{
+		return this.m_mgr.GetCurrentDaily() == DailyMgr.Daily.Daytime && GameMain.Instance.CharacterMgr.status.isAvailableCompetitiveShow;
+	}
+
+	private bool IsEnabledShop()
+	{
+		return GameMain.Instance.CharacterMgr.status.isAvailableShop;
+	}
+
+	private bool IsEnabledDance()
+	{
+		return this.m_mgr.GetCurrentDaily() == DailyMgr.Daily.Night && GameMain.Instance.CharacterMgr.status.isAvailableDance;
+	}
+
+	private bool IsEnabledVRCom()
+	{
+		return this.m_mgr.GetCurrentDaily() == DailyMgr.Daily.Daytime && false;
+	}
+
+	private bool IsEnabledLegacyMode()
+	{
+		List<Maid> stockMaidList = GameMain.Instance.CharacterMgr.GetStockMaidList();
+		bool result = false;
+		foreach (Maid maid in stockMaidList)
+		{
+			if (maid != null && maid.status.heroineType == HeroineType.Transfer)
+			{
+				result = true;
+			}
+		}
+		return result;
+	}
+
+	public void SetAllButtonEnable(bool enable)
+	{
+		foreach (DailyCtrl.ButtonData buttonData in this.menuButtons)
+		{
+			if (buttonData.button.gameObject.activeSelf)
+			{
+				buttonData.button.isEnabled = enable;
+			}
+		}
+	}
+
+	public void BackUpScheduleSlot()
+	{
+		ScheduleAPI.BackUpScheduleSlot();
+	}
+
+	[SerializeField]
+	private DailyCtrl.ButtonData[] menuButtons;
+
+	private DailyMgr m_mgr;
+
+	private Dictionary<DailyCtrl.ButtonType, GameObject> m_dicRank;
+
+	private GameObject m_goPanel;
+
+	private ButtonEnable m_btnEnable;
+
+	private bool m_bInit;
+
+	public enum ButtonType
+	{
+		Dance,
+		Schedule,
+		MaidManagement,
+		EventScenario,
+		Shop,
+		FacilityManagement,
+		CompetitiveShow,
+		Casino,
+		Save,
+		Load,
+		Trophy,
+		FreeMode,
+		PhotoMode,
+		DeskCustomize,
+		ManEdit,
+		LegacyMode,
+		Karaoke,
+		Credit,
+		Next,
+		MyRoomCustom
+	}
+
+	[Serializable]
+	public class ButtonData
+	{
+		public bool active
+		{
+			get
+			{
+				return this.button.gameObject.activeSelf;
+			}
+			set
+			{
+				this.button.gameObject.SetActive(value);
+			}
+		}
+
+		[SerializeField]
+		public DailyCtrl.ButtonType type;
+
+		[SerializeField]
+		public UIButton button;
+	}
+}

+ 210 - 0
Assembly-CSharp/DailyMgr.cs

@@ -0,0 +1,210 @@
+using System;
+using System.Collections.Generic;
+using BackupParamAccessor;
+using com.workman.cm3d2.scene.dailyEtc;
+using Schedule;
+using UnityEngine;
+
+public class DailyMgr : BaseCreatePanel
+{
+	public DailyMgr.Daily GetCurrentDaily()
+	{
+		return this.currentDaily;
+	}
+
+	public static bool IsLegacy
+	{
+		get
+		{
+			return GameMain.Instance.CharacterMgr.status.GetFlag("2.0モード") == 1;
+		}
+	}
+
+	public override void Init()
+	{
+		this.m_goPanel = base.GetPanel("DailyPanel");
+		this.m_ctrl = base.GetCtrl<DailyCtrl>();
+		this.m_ctrl.Init(this, this.m_goPanel);
+		if (this.sceneMgr == null)
+		{
+			this.sceneMgr = base.transform.parent.gameObject.GetComponent<SceneMgr>();
+		}
+		this.m_api = new DailyAPI(this.sceneMgr);
+		this.m_goPanel.SetActive(false);
+	}
+
+	public void OpenDaytimePanel()
+	{
+		this.m_api.SceneStart(true, this, new DailyAPI.dgOnSceneStartCallBack(this.OpenDaytimeCallBack));
+	}
+
+	public void OpenDaytimeCallBack()
+	{
+		base.BaseOpenPanel(DailyMgr.Daily.Daytime.ToString());
+	}
+
+	public void OpenNightPanel()
+	{
+		this.m_api.SceneStart(false, this, new DailyAPI.dgOnSceneStartCallBack(this.OpenNightCallBack));
+	}
+
+	public void OpenNightCallBack()
+	{
+		base.BaseOpenPanel(DailyMgr.Daily.Night.ToString());
+	}
+
+	protected override void OpenPanel(string openType)
+	{
+		DailyMgr.Daily daily = (DailyMgr.Daily)Enum.Parse(typeof(DailyMgr.Daily), openType);
+		if (daily != DailyMgr.Daily.Daytime)
+		{
+			if (daily == DailyMgr.Daily.Night)
+			{
+				this.DisplayNightPanel();
+			}
+		}
+		else
+		{
+			this.DisplayDaytimePanel();
+		}
+	}
+
+	private void DisplayDaytimePanel()
+	{
+		this.currentDaily = DailyMgr.Daily.Daytime;
+		Debug.Log("昼パートメインをオープンしました。");
+		GameMain.Instance.TutorialPanel.SetImage(TutorialPanel.ImageSet.MainMenu, false);
+		this.m_ctrl.DisplayViewer(DailyMgr.Daily.Daytime);
+		GameMain.Instance.FacilityMgr.ClearCacheFacilityPowerUpResult();
+		Debug.Log("メイドによる施設強化のキャッシュをクリアしました。");
+		this.m_api.SetupTutorial();
+		if (!DailyMgr.IsLegacy)
+		{
+			GameMain.Instance.CharacterMgr.status.CheckTrophyMainMenu();
+		}
+		ScheduleAPI.ErrorCheck();
+	}
+
+	private void DisplayNightPanel()
+	{
+		this.currentDaily = DailyMgr.Daily.Night;
+		Debug.Log("夜パートメインをオープンしました。");
+		this.m_ctrl.DisplayViewer(DailyMgr.Daily.Night);
+		GameMain.Instance.FacilityMgr.ClearCacheFacilityPowerUpResult();
+		Debug.Log("メイドによる施設強化のキャッシュをクリアしました。");
+		this.m_api.SetupTutorial();
+		if (!DailyMgr.IsLegacy)
+		{
+			GameMain.Instance.CharacterMgr.status.CheckTrophyMainMenu();
+		}
+	}
+
+	public void CloseDailyPanel()
+	{
+		if (this.currentDaily == DailyMgr.Daily.Daytime)
+		{
+			ScheduleAPI.BackupParam(SCENE_ID.Morning);
+			ScheduleAPI.BackUpScheduleSlot();
+		}
+		if (!DailyMgr.IsLegacy)
+		{
+			GameMain.Instance.FacilityMgr.UpdateFacilityAssignedMaidData();
+		}
+		base.BaseClosePanel();
+	}
+
+	public void OnClickMenuButton()
+	{
+		DailyCtrl.ButtonData menuButton = this.m_ctrl.GetMenuButton(UIButton.current);
+		if (menuButton.type == DailyCtrl.ButtonType.Schedule)
+		{
+			base.BaseClosePanel(new Action(base.GetManager<ScheduleMgr>().BaseOpenPanel));
+		}
+		else if (menuButton.type == DailyCtrl.ButtonType.Save)
+		{
+			base.BaseClosePanel(new Action(base.GetManager<SaveAndLoadMgr>().OpenSavePanel));
+		}
+		else if (menuButton.type == DailyCtrl.ButtonType.Load)
+		{
+			base.BaseClosePanel(new Action(base.GetManager<SaveAndLoadMgr>().OpenLoadPanel));
+		}
+		else if (menuButton.type == DailyCtrl.ButtonType.Next)
+		{
+			this.m_pressingNext = true;
+			this.CloseDailyPanel();
+		}
+		else
+		{
+			Dictionary<DailyCtrl.ButtonType, string> dictionary = new Dictionary<DailyCtrl.ButtonType, string>();
+			dictionary.Add(DailyCtrl.ButtonType.Dance, "label_dance");
+			dictionary.Add(DailyCtrl.ButtonType.MaidManagement, "label_maidmanagement");
+			dictionary.Add(DailyCtrl.ButtonType.EventScenario, "label_eventscenario");
+			dictionary.Add(DailyCtrl.ButtonType.Shop, "label_shop");
+			dictionary.Add(DailyCtrl.ButtonType.FacilityManagement, "label_facilitymanagement");
+			dictionary.Add(DailyCtrl.ButtonType.CompetitiveShow, "label_competitiveshow");
+			dictionary.Add(DailyCtrl.ButtonType.Casino, "label_casino");
+			dictionary.Add(DailyCtrl.ButtonType.Trophy, "label_trophy");
+			dictionary.Add(DailyCtrl.ButtonType.FreeMode, "label_free");
+			dictionary.Add(DailyCtrl.ButtonType.PhotoMode, "label_photomode");
+			dictionary.Add(DailyCtrl.ButtonType.DeskCustomize, "label_deskcustomize");
+			dictionary.Add(DailyCtrl.ButtonType.MyRoomCustom, "label_myroom");
+			dictionary.Add(DailyCtrl.ButtonType.ManEdit, "label_useredit");
+			dictionary.Add(DailyCtrl.ButtonType.LegacyMode, "label_legacymode");
+			dictionary.Add(DailyCtrl.ButtonType.Karaoke, "label_karaoke");
+			dictionary.Add(DailyCtrl.ButtonType.Credit, "label_credit");
+			if (dictionary.ContainsKey(menuButton.type))
+			{
+				DailyAPI.EndType f_eEndType = DailyAPI.EndType.NormalSceneChange;
+				if (menuButton.type == DailyCtrl.ButtonType.FreeMode)
+				{
+					f_eEndType = DailyAPI.EndType.ToFreeMode;
+				}
+				else if (menuButton.type == DailyCtrl.ButtonType.Trophy || menuButton.type == DailyCtrl.ButtonType.PhotoMode || menuButton.type == DailyCtrl.ButtonType.DeskCustomize || menuButton.type == DailyCtrl.ButtonType.MaidManagement || menuButton.type == DailyCtrl.ButtonType.FacilityManagement)
+				{
+					f_eEndType = DailyAPI.EndType.TakeOver;
+				}
+				this.m_api.EndNextScene(f_eEndType, dictionary[menuButton.type]);
+			}
+			else
+			{
+				Debug.LogWarning("ボタン種類[" + menuButton.type.ToString() + "]は未実装です");
+			}
+		}
+	}
+
+	protected override void BeforeClose()
+	{
+		this.m_ctrl.SetAllButtonEnable(false);
+	}
+
+	protected override void AfterClose()
+	{
+		if (this.m_ctrl != null)
+		{
+			this.m_ctrl.SetAllButtonEnable(true);
+		}
+		if (this.m_pressingNext && this.sceneMgr != null && this.m_api != null)
+		{
+			this.m_api.EndNextScene(DailyAPI.EndType.NormalSceneChange, "label");
+		}
+	}
+
+	protected override void SetFadeTargetPanel()
+	{
+		this.fadeTargetPanel = this.m_goPanel;
+	}
+
+	private DailyAPI m_api;
+
+	private DailyCtrl m_ctrl;
+
+	private DailyMgr.Daily currentDaily;
+
+	private bool m_pressingNext;
+
+	public enum Daily
+	{
+		Daytime,
+		Night
+	}
+}

+ 34 - 0
Assembly-CSharp/Dance/SettingData.cs

@@ -0,0 +1,34 @@
+using System;
+
+namespace Dance
+{
+	[Serializable]
+	public class SettingData
+	{
+		public int Voltage = 3;
+
+		public Product_Mgr.AudienceState Audience = Product_Mgr.AudienceState.Many;
+
+		public Product_Mgr.ProductRank Product = Product_Mgr.ProductRank.Normal;
+
+		public bool IsSEPlay = true;
+
+		public Appeal_Mgr.CutInGrade CutInGrade;
+
+		public bool IsDepthOfFieldOn = true;
+
+		public bool IsblackBGon;
+
+		public int NoteOccurTiming;
+
+		public bool IsNoteEffectLight;
+
+		public bool UndressFaceOn = true;
+
+		public float NoteJudgeTiming;
+
+		public bool FPSCamMode;
+
+		public bool AllRelease;
+	}
+}

+ 128 - 0
Assembly-CSharp/Dance/UndressItem.cs

@@ -0,0 +1,128 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace Dance
+{
+	public class UndressItem : MonoBehaviour
+	{
+		private UndressDance_Mgr.PartsData m_MyPartsData
+		{
+			get
+			{
+				return UndressDance_Mgr.Instance.GetPartsData(this.m_MyMpn);
+			}
+		}
+
+		public bool IsUndress
+		{
+			get
+			{
+				return this.m_MaidPartsiconPair[UndressDance_Mgr.Instance.SelectMaid].IsUndress;
+			}
+		}
+
+		public bool IsEnable
+		{
+			get
+			{
+				return this.m_MyButton.isEnabled;
+			}
+		}
+
+		public void Init(MPN mpn)
+		{
+			this.m_MyButton = base.GetComponent<UIButton>();
+			this.m_MyIcon = base.GetComponent<UITexture>();
+			this.m_MyMpn = mpn;
+			this.m_MyIcon.mainTexture = this.m_MyPartsData.DefaultIcon;
+			EventDelegate.Add(this.m_MyButton.onClick, new EventDelegate.Callback(this.SwitchMask));
+		}
+
+		public void AddMaidData(Maid maid)
+		{
+			if (this.m_MaidPartsiconPair.ContainsKey(maid))
+			{
+				return;
+			}
+			MaidProp prop = maid.GetProp(this.m_MyMpn);
+			SceneEdit.SMenuItem smenuItem = new SceneEdit.SMenuItem();
+			SceneEdit.InitMenuItemScript(smenuItem, prop.strFileName, false);
+			if (smenuItem.m_texIcon)
+			{
+				this.m_MaidPartsiconPair.Add(maid, new UndressItem.MaidInfo(smenuItem.m_texIcon, false));
+			}
+		}
+
+		public void UpdateState(Maid maid)
+		{
+			string strFileName = maid.GetProp(this.m_MyMpn).strFileName;
+			this.m_MyButton.isEnabled = (!string.IsNullOrEmpty(strFileName) && strFileName.IndexOf("_del") < 0 && this.m_MaidPartsiconPair.ContainsKey(maid));
+			if (!this.m_MyButton.isEnabled)
+			{
+				this.m_MyIcon.mainTexture = this.m_MyPartsData.DefaultIcon;
+			}
+			else
+			{
+				this.m_MyIcon.mainTexture = this.m_MaidPartsiconPair[maid].ItemIcon;
+				this.m_MyButton.defaultColor = (this.m_MyButton.hover = ((!this.m_MaidPartsiconPair[maid].IsUndress) ? this.m_DefaultColor : this.m_UndressColor));
+			}
+		}
+
+		public void SetMaidMask(Maid maid, bool is_mask_on)
+		{
+			if (!this.IsEnable)
+			{
+				return;
+			}
+			if (!this.m_MaidPartsiconPair.ContainsKey(maid))
+			{
+				return;
+			}
+			if (this.m_MaidPartsiconPair[maid].IsUndress == is_mask_on)
+			{
+				return;
+			}
+			this.m_MaidPartsiconPair[maid].IsUndress = is_mask_on;
+			foreach (TBody.SlotID f_eSlot in this.m_MyPartsData.SlotIDlist)
+			{
+				maid.body0.SetMask(f_eSlot, !is_mask_on);
+			}
+			this.UpdateState(maid);
+			UndressDance_Mgr.Instance.ChangeSexsualPoint(this.m_MyMpn);
+		}
+
+		public void SwitchMask()
+		{
+			Maid selectMaid = UndressDance_Mgr.Instance.SelectMaid;
+			this.SetMaidMask(selectMaid, !this.m_MaidPartsiconPair[selectMaid].IsUndress);
+		}
+
+		[SerializeField]
+		private Color m_DefaultColor = Color.white;
+
+		[SerializeField]
+		private Color m_UndressColor = Color.white;
+
+		private UIButton m_MyButton;
+
+		private UITexture m_MyIcon;
+
+		private MPN m_MyMpn;
+
+		private Dictionary<Maid, UndressItem.MaidInfo> m_MaidPartsiconPair = new Dictionary<Maid, UndressItem.MaidInfo>();
+
+		private class MaidInfo
+		{
+			public MaidInfo(Texture icon, bool is_undress)
+			{
+				this.ItemIcon = icon;
+				this.IsUndress = is_undress;
+			}
+
+			public bool IsUndress;
+
+			public Texture ItemIcon;
+		}
+	}
+}

+ 355 - 0
Assembly-CSharp/DanceBattle_Mgr.cs

@@ -0,0 +1,355 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using PlayerStatus;
+using UnityEngine;
+
+public class DanceBattle_Mgr : PartsMgrBase
+{
+	private float m_OneVSGaugeValue
+	{
+		get
+		{
+			return 1f / (float)this.m_GaugeList.Count;
+		}
+	}
+
+	private float m_GaugeValue
+	{
+		get
+		{
+			return this.m_GaugeFillAmount;
+		}
+		set
+		{
+			this.m_GaugeFillAmount = Mathf.Clamp01(value);
+			for (int i = 0; i < this.m_GaugeList.Count; i++)
+			{
+				this.m_GaugeList[i].fillAmount = (this.m_GaugeFillAmount - (float)i * this.m_OneVSGaugeValue) / this.m_OneVSGaugeValue;
+				if (this.m_GaugeList[i].fillAmount > 0f && this.m_GaugeList[i].fillAmount <= 1f)
+				{
+					this.m_EffectUIFit.FitImage = this.m_GaugeList[i];
+				}
+				else if (this.m_GaugeFillAmount <= 0f)
+				{
+					this.m_EffectUIFit.FitImage = this.m_GaugeList[0];
+				}
+			}
+		}
+	}
+
+	public static DanceEnemyParam EnemyData
+	{
+		get
+		{
+			return VsDanceDataMgr.Instance.GetCurrentEnemy(RhythmAction_Mgr.NowState == RhythmAction_Mgr.DanceState.Dance_Second);
+		}
+	}
+
+	public static DanceBattle_Mgr Instance { get; private set; }
+
+	protected override void Start()
+	{
+		GameMain.Instance.CharacterMgr.status.SetFlag("ダンス勝敗", 0);
+		if (RhythmAction_Mgr.NowDance == RhythmAction_Mgr.DanceType.VS_Skip)
+		{
+			GameMain.Instance.CharacterMgr.status.SetFlag("ダンス勝敗", 1);
+		}
+		base.Start();
+		DanceBattle_Mgr.Instance = this;
+		if (!base.IsActive)
+		{
+			base.gameObject.SetActive(false);
+			return;
+		}
+		this.m_PlayerLineArray = this.m_PlayerLineGroup.GetComponentsInChildren<UISprite>();
+		this.m_EnemyLineArray = this.m_EnemyLineGroup.GetComponentsInChildren<UISprite>();
+		this.m_EffectUIFit = this.m_GaugeEffect.GetComponent<UI_ImageFitPos>();
+		ParticleSystem[] componentsInChildren = this.m_GaugeEffect.GetComponentsInChildren<ParticleSystem>();
+		foreach (ParticleSystem particle in componentsInChildren)
+		{
+			RhythmAction_Mgr.Instance.AddParticleSystem(particle);
+		}
+		IEnumerator enumerator = this.m_PlayerVSGauge.GetEnumerator();
+		try
+		{
+			while (enumerator.MoveNext())
+			{
+				object obj = enumerator.Current;
+				Transform transform = (Transform)obj;
+				UISprite component = transform.GetComponent<UISprite>();
+				if (component)
+				{
+					this.m_GaugeList.Add(component);
+					component.fillAmount = 0f;
+				}
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+		this.m_GaugeSetSpace = Mathf.Abs((this.m_GaugeList[0].transform.position - this.m_GaugeList[1].transform.position).x);
+		this.m_GaugeValue = 0.5f;
+	}
+
+	private IEnumerator CheckBattleSituation()
+	{
+		float appeal_timer = 0f;
+		for (;;)
+		{
+			if (!RhythmAction_Mgr.Instance.IsPause)
+			{
+				if (Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Player) != 0L || Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Enemy) != 0L)
+				{
+					this.m_GaugeValue = this.GetScoreRate(DanceBattle_Mgr.CharaType.Player, false);
+				}
+				if (RhythmAction_Mgr.Instance.DanceTimer > this.m_CanReversalTime)
+				{
+					switch (this.m_SuperiorityChara)
+					{
+					case DanceBattle_Mgr.CharaType.Player:
+						if (Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Player) < Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Enemy))
+						{
+							this.m_SuperiorityChara = DanceBattle_Mgr.CharaType.Enemy;
+							Appeal_Mgr.Instance.ReversalCutIn(this.m_SuperiorityChara);
+						}
+						break;
+					case DanceBattle_Mgr.CharaType.Enemy:
+						if (Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Player) > Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Enemy))
+						{
+							this.m_SuperiorityChara = DanceBattle_Mgr.CharaType.Player;
+							Appeal_Mgr.Instance.ReversalCutIn(this.m_SuperiorityChara);
+						}
+						break;
+					case DanceBattle_Mgr.CharaType.None:
+						if (Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Player) < Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Enemy))
+						{
+							this.m_SuperiorityChara = DanceBattle_Mgr.CharaType.Enemy;
+						}
+						else
+						{
+							this.m_SuperiorityChara = DanceBattle_Mgr.CharaType.Player;
+						}
+						break;
+					}
+					if (RhythmAction_Mgr.NowDance != RhythmAction_Mgr.DanceType.BenchMark && Appeal_Mgr.Instance.GetAppealData(DanceBattle_Mgr.CharaType.Enemy).IsCanApplel && !Note_Mgr.Instance.IsNoteEnd(DanceBattle_Mgr.CharaType.Enemy))
+					{
+						appeal_timer += RhythmAction_Mgr.Instance.DanceDeltaTime;
+						if (appeal_timer >= this.m_AppealCheckTime)
+						{
+							if (UnityEngine.Random.Range(0, 100) < DanceBattle_Mgr.EnemyData.ApeealRate)
+							{
+								Appeal_Mgr.Instance.AppealCutIn(DanceBattle_Mgr.CharaType.Enemy);
+							}
+							appeal_timer = 0f;
+						}
+					}
+				}
+			}
+			yield return null;
+		}
+		yield break;
+	}
+
+	private IEnumerator GaugeLineAnime()
+	{
+		float timer = 0f;
+		Vector3 gauge_first = this.m_GaugeList.First<UISprite>().transform.position;
+		Vector3 gauge_last = this.m_GaugeList.Last<UISprite>().transform.position;
+		Vector3 start_pos = Vector3.zero;
+		Vector3 end_pos = Vector3.zero;
+		Action<UISprite[], Color> line_setting = delegate(UISprite[] line_array, Color line_col)
+		{
+			float num = (float)line_array.Count<UISprite>() * this.$this.m_LineRate;
+			for (int i = 0; i < line_array.Count<UISprite>(); i++)
+			{
+				float num2 = Mathf.Max(timer - this.$this.m_LineRate * (float)i, 0f);
+				float num3 = num2 - (float)Mathf.FloorToInt(num2 / num) * num;
+				float num4 = Mathf.Clamp01(num3 / num);
+				if (num4 > 0f && !line_array[i].gameObject.activeSelf)
+				{
+					line_array[i].gameObject.SetActive(true);
+				}
+				Color color = line_col;
+				color.a = 1f - num4;
+				line_array[i].color = color;
+				line_array[i].transform.position = Vector3.Lerp(start_pos, end_pos, num4);
+				line_array[i].transform.localScale = Vector3.one * this.$this.m_LineMaxSize * (1f - num4);
+			}
+		};
+		for (;;)
+		{
+			if (!RhythmAction_Mgr.Instance.IsPause)
+			{
+				this.m_PlayerGlitterEffect.SizeRateX = this.GetScoreRate(DanceBattle_Mgr.CharaType.Player, false);
+				this.m_EnemyGlitterEffect.SizeRateX = this.GetScoreRate(DanceBattle_Mgr.CharaType.Enemy, false);
+				timer += RhythmAction_Mgr.Instance.DanceDeltaTime;
+				start_pos = this.m_PlayerLineGroup.position;
+				float d = Mathf.Min(this.m_GaugeSetSpace * (float)(this.m_PlayerLineArray.Count<UISprite>() - 1), start_pos.x - gauge_first.x);
+				end_pos = start_pos + Vector3.left * d;
+				line_setting(this.m_PlayerLineArray, Color.green);
+				start_pos = this.m_EnemyLineGroup.position;
+				d = Mathf.Min(this.m_GaugeSetSpace * (float)(this.m_EnemyLineArray.Count<UISprite>() - 1), gauge_last.x - start_pos.x);
+				end_pos = start_pos + Vector3.right * d;
+				line_setting(this.m_EnemyLineArray, Color.magenta);
+			}
+			yield return null;
+		}
+		yield break;
+	}
+
+	public override void StartAction()
+	{
+		base.StartCoroutine(this.CheckBattleSituation());
+		base.StartCoroutine(this.GaugeLineAnime());
+	}
+
+	public override void EndAction()
+	{
+		RhythmAction_Mgr.DanceState nowState = RhythmAction_Mgr.NowState;
+		if (nowState != RhythmAction_Mgr.DanceState.Dance_First)
+		{
+			if (nowState == RhythmAction_Mgr.DanceState.Dance_Second)
+			{
+				Result_Display.SetResultData("BattleCount", "2nd", Result_Display.ResultType.Image);
+				if (this.IsWin() && RhythmAction_Mgr.Instance.IsTakeEnd)
+				{
+					Result_Display.SetResultData("BattleResult", "WIN", Result_Display.ResultType.Image);
+					GameMain.Instance.CharacterMgr.status.SetFlag("ダンス勝敗", 1);
+				}
+				else
+				{
+					Result_Display.SetResultData("BattleResult", "LOSE", Result_Display.ResultType.Image);
+					GameMain.Instance.CharacterMgr.status.SetFlag("ダンス勝敗", 0);
+				}
+			}
+		}
+		else
+		{
+			Result_Display.SetResultData("BattleCount", "1st", Result_Display.ResultType.Image);
+			if (this.IsWin() && RhythmAction_Mgr.Instance.IsTakeEnd)
+			{
+				Result_Display.SetResultData("BattleResult", "WIN", Result_Display.ResultType.Image);
+				GameMain.Instance.CharacterMgr.status.SetFlag("ダンス勝敗", 1);
+			}
+			else
+			{
+				Result_Display.SetResultData("BattleResult", "LOSE", Result_Display.ResultType.Image);
+				GameMain.Instance.CharacterMgr.status.SetFlag("ダンス勝敗", 0);
+			}
+		}
+	}
+
+	public float GetScoreRate(DanceBattle_Mgr.CharaType chara_type, bool is_percentage = false)
+	{
+		float num = (float)Score_Mgr.Instance.GetScore(chara_type) / (float)(Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Player) + Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Enemy));
+		if (Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Player) + Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Enemy) == 0L)
+		{
+			num = 0.5f;
+		}
+		if (is_percentage)
+		{
+			num *= 100f;
+		}
+		return num;
+	}
+
+	public bool IsWin()
+	{
+		return base.IsActive && Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Player) >= Score_Mgr.Instance.GetScore(DanceBattle_Mgr.CharaType.Enemy);
+	}
+
+	public bool IsEven()
+	{
+		return base.IsActive && this.GetScoreRate(DanceBattle_Mgr.CharaType.Player, true) >= this.m_MinAntagonism && this.GetScoreRate(DanceBattle_Mgr.CharaType.Player, true) <= this.m_MaxAntagonism;
+	}
+
+	public static DanceBattle_Mgr.CharaType GetOpponentType(DanceBattle_Mgr.CharaType chara_type)
+	{
+		if (chara_type == DanceBattle_Mgr.CharaType.Player)
+		{
+			return DanceBattle_Mgr.CharaType.Enemy;
+		}
+		return DanceBattle_Mgr.CharaType.Player;
+	}
+
+	public static bool IsAllBattleWin()
+	{
+		if (RhythmAction_Mgr.NowDance != RhythmAction_Mgr.DanceType.VS)
+		{
+			return false;
+		}
+		Status status = GameMain.Instance.CharacterMgr.status;
+		return status.GetFlag("ダンス勝敗") == 1 && status.GetFlag("バトル回数") == 2;
+	}
+
+	[SerializeField]
+	private float m_MinAntagonism = 40f;
+
+	[SerializeField]
+	private float m_MaxAntagonism = 60f;
+
+	[SerializeField]
+	[Header("アピールを行うかの抽選を行う時間")]
+	private float m_AppealCheckTime = 5f;
+
+	[SerializeField]
+	[Header("逆転カットイン可能になる時間")]
+	private float m_CanReversalTime = 15f;
+
+	[SerializeField]
+	[Header("プレイヤーのVSゲージの親")]
+	private Transform m_PlayerVSGauge;
+
+	private List<UISprite> m_GaugeList = new List<UISprite>();
+
+	private float m_GaugeFillAmount;
+
+	[SerializeField]
+	private GameObject m_GaugeEffect;
+
+	[SerializeField]
+	[Header("ライン発生間隔")]
+	private float m_LineRate = 0.3f;
+
+	[SerializeField]
+	private float m_LineMaxSize = 1.25f;
+
+	[SerializeField]
+	private Transform m_PlayerLineGroup;
+
+	[SerializeField]
+	private Transform m_EnemyLineGroup;
+
+	[Header("ゲージ上に粒子がかかるようなエフェクト")]
+	[SerializeField]
+	private UI_ParticleImageFit m_PlayerGlitterEffect;
+
+	[SerializeField]
+	private UI_ParticleImageFit m_EnemyGlitterEffect;
+
+	private UISprite[] m_PlayerLineArray;
+
+	private UISprite[] m_EnemyLineArray;
+
+	private UI_ImageFitPos m_EffectUIFit;
+
+	private DanceBattle_Mgr.CharaType m_SuperiorityChara = DanceBattle_Mgr.CharaType.None;
+
+	private float m_GaugeSetSpace;
+
+	private bool m_readEnd;
+
+	public enum CharaType
+	{
+		Player,
+		Enemy,
+		None
+	}
+}

+ 64 - 0
Assembly-CSharp/DanceData.cs

@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+
+public class DanceData
+{
+	public void Recet()
+	{
+		this.IsPlayable = this.InitialPlayable;
+	}
+
+	public int ID;
+
+	public string title;
+
+	public int title_font_size;
+
+	public int title_offset_y;
+
+	public string scene_name;
+
+	public int select_chara_num;
+
+	public string sample_image_name;
+
+	public string commentary_text;
+
+	public string bgm_file_name;
+
+	public List<string> preset_name;
+
+	public int scenario_progress;
+
+	public DanceData.DanceTerm Term = DanceData.DanceTerm.None;
+
+	public string AppealCutinName;
+
+	public string ReversalCutinName;
+
+	public string danceshow_scene;
+
+	public string danceshow_image;
+
+	public List<int> maid_order = new List<int>();
+
+	public DanceData.BgType bgType;
+
+	public bool InitialPlayable;
+
+	public bool IsPlayable;
+
+	public enum BgType
+	{
+		LiveStage,
+		Theater
+	}
+
+	public enum DanceTerm
+	{
+		クラブ,
+		レストラン,
+		VS外,
+		None
+	}
+}

+ 47 - 0
Assembly-CSharp/DanceEnemyParam.cs

@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[Serializable]
+public class DanceEnemyParam
+{
+	public int ID;
+
+	public string Name = string.Empty;
+
+	public int UseVoltage;
+
+	public int PushRate;
+
+	public Dictionary<Dance_Note.Evaluation, int> EvalueRate = new Dictionary<Dance_Note.Evaluation, int>();
+
+	public int InitialAppeal;
+
+	public int ApeealRate;
+
+	public int ApeealMax;
+
+	public GameObject AppealCutInEffect;
+
+	public GameObject ReversalCutInEffect;
+
+	public string PersonalVoice1;
+
+	public string PersonalVoice2;
+
+	public string JobVoice;
+
+	public string ReversalVoice;
+
+	public Sprite ConfrontCutin;
+
+	public Sprite PersonalCutin1;
+
+	public Sprite PersonalCutin2;
+
+	public Sprite JobCutin;
+
+	public Sprite ReversalCutin;
+
+	public Sprite Icon;
+}

+ 70 - 0
Assembly-CSharp/DanceFpsCam.cs

@@ -0,0 +1,70 @@
+using System;
+using UnityEngine;
+
+public class DanceFpsCam : PartsMgrBase
+{
+	protected override void Start()
+	{
+		base.Start();
+		base.IsActive &= (!GameMain.Instance.VRMode && DanceSetting.Settings.FPSCamMode);
+		if (!base.IsActive)
+		{
+			base.enabled = false;
+			return;
+		}
+		this.m_OrijinFov = GameMain.Instance.MainCamera.camera.fieldOfView;
+		GameMain.Instance.VRDummyMode = true;
+		GameMain.Instance.OvrInit();
+		UICamera.isDisableRightClick = true;
+		GameMain.Instance.OvrMgr.OvrCamera.ChangeControllerNew(true);
+		GameMain.Instance.OvrMgr.OvrCamera.IsForceRightClickUiToggle = true;
+		GameMain.Instance.MainCamera.SetTargetPos(this.m_InitCamPos, true);
+		GameMain.Instance.MainCamera.SetAroundAngle(this.m_InitCamRot, true);
+		GameMain.Instance.MainCamera.SetDistance(this.m_InitDistance, true);
+		GameMain.Instance.MainCamera.Reset(CameraMain.CameraType.Free, false);
+	}
+
+	private void OnDestroy()
+	{
+		if (base.IsActive)
+		{
+			UICamera.isDisableRightClick = false;
+			GameMain.Instance.OvrMgr.OvrCamera.ChangeControllerNew(false);
+			GameMain.Instance.OvrMgr.OvrCamera.IsForceRightClickUiToggle = false;
+			GameMain.Instance.VRDummyMode = false;
+			GameMain.Instance.OvrUninit();
+			GameMain.Instance.MainCamera.camera.fieldOfView = this.m_OrijinFov;
+		}
+	}
+
+	public override void EndAction()
+	{
+		GameMain.Instance.MainCamera.Reset(CameraMain.CameraType.Target, true);
+	}
+
+	[SerializeField]
+	[Header("移動")]
+	private float m_MoveSpeed = 5f;
+
+	[SerializeField]
+	[Header("回転")]
+	private float m_RotSpeed = 30f;
+
+	[SerializeField]
+	[Header("X角度制限")]
+	private float m_AngleXMax = 45f;
+
+	[SerializeField]
+	[Header("カメラ初期設定")]
+	private Vector3 m_InitCamPos;
+
+	[SerializeField]
+	private Vector2 m_InitCamRot;
+
+	[SerializeField]
+	private float m_InitDistance;
+
+	private Vector3 m_RotAngle;
+
+	private float m_OrijinFov;
+}

+ 52 - 0
Assembly-CSharp/DanceIntervalDelete.cs

@@ -0,0 +1,52 @@
+using System;
+using UnityEngine;
+
+public class DanceIntervalDelete : MonoBehaviour
+{
+	public bool IsEnd
+	{
+		get
+		{
+			return this.m_IsEnd;
+		}
+	}
+
+	protected virtual void Start()
+	{
+		RhythmAction_Mgr.Instance.AddParticleSystem(this.particleArray);
+		RhythmAction_Mgr.Instance.AddAudioMgr(this.audioArray);
+		base.StartCoroutine(RhythmAction_Mgr.Instance.DanceTimeCoroutine(this.DeleteTime, new Action<float>(this.UpdataCall), new Action(this.EndCall)));
+	}
+
+	protected virtual void OnDestroy()
+	{
+		this.EndCall();
+	}
+
+	protected virtual void UpdataCall(float timer)
+	{
+	}
+
+	public virtual void EndCall()
+	{
+		if (this.m_IsEnd)
+		{
+			return;
+		}
+		if (RhythmAction_Mgr.Instance)
+		{
+			RhythmAction_Mgr.Instance.RemoveParticleSystem(this.particleArray);
+			RhythmAction_Mgr.Instance.RemoveAudioMgr(this.audioArray);
+		}
+		this.m_IsEnd = true;
+		UnityEngine.Object.Destroy(base.gameObject);
+	}
+
+	public float DeleteTime = 3f;
+
+	public ParticleSystem[] particleArray;
+
+	public AudioSource[] audioArray;
+
+	protected bool m_IsEnd;
+}

+ 821 - 0
Assembly-CSharp/DanceMain.cs

@@ -0,0 +1,821 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text.RegularExpressions;
+using UnityEngine;
+using UnityEngine.Rendering;
+
+public class DanceMain : MonoBehaviour
+{
+	public static string RecetJumpLabel { private get; set; }
+
+	public List<Maid> DanceMaid
+	{
+		get
+		{
+			return this.m_listMaid;
+		}
+	}
+
+	public Maid UserMaid
+	{
+		get
+		{
+			return this.m_maidUser;
+		}
+	}
+
+	public bool IsDanceEnd { get; private set; }
+
+	public Transform OvrCamTrans
+	{
+		get
+		{
+			return this.m_trOvrDummyCam;
+		}
+	}
+
+	public float DepthFocalSize
+	{
+		get
+		{
+			return this.m_DepthFocalSize;
+		}
+		set
+		{
+			this.m_DepthFocalSize = value;
+			if (RhythmAction_Mgr.Instance)
+			{
+				RhythmAction_Mgr.Instance.SetFocalSize(value);
+			}
+		}
+	}
+
+	public string GetFolderPathToBinaryData()
+	{
+		string binaryFolderName = this.BinaryFolderName;
+		string text = Path.GetFileNameWithoutExtension(this.BinaryFolderName).ToLower();
+		return "Assets/Resources/SceneDance/" + Path.GetFileNameWithoutExtension(this.BinaryFolderName).ToLower() + "/";
+	}
+
+	private void Awake()
+	{
+		this.m_boDebugDummyBody = false;
+		NTime.Reset();
+		Dictionary<string, string> tag_backup = GameMain.Instance.ScriptMgr.adv_kag.tag_backup;
+		string strScriptLabel;
+		if (tag_backup != null && tag_backup.TryGetValue("label", out strScriptLabel))
+		{
+			this.m_strScriptLabel = strScriptLabel;
+		}
+		NDebug.Assert(this.m_listDummyAnimChara.Count == this.m_listAnimName.Count, "m_listDummyAnimChara と m_listAnimName の数は同一でないといけません。");
+		NDebug.Assert(this.m_AnimatorData != null, "AnimatorDataが外れています。");
+		NDebug.Assert(this.m_listTestPreset.Count == this.m_listAnimName.Count, "プリセット数が不正です。");
+		NDebug.Assert(!string.IsNullOrEmpty(this.m_strMasterAudioFileName), "マスター用MasterAudioFileNameが必要です。");
+		bool flag = DanceMain.IsDanceRecet;
+		flag |= (RhythmAction_Mgr.NowState == RhythmAction_Mgr.DanceState.Dance_Second);
+		flag |= (RhythmAction_Mgr.NowDance == RhythmAction_Mgr.DanceType.Encore);
+		flag |= RhythmAction_Mgr.IsVSDance;
+		if (flag && !DanceMain.KaraokeMode)
+		{
+			DanceSelect.SelectMaidActive(DanceMain.SelectDanceData);
+			DanceMain.IsDanceRecet = false;
+		}
+		if (this.time_line_binary_ == null)
+		{
+			this.maid_data_binary_ = new DanceObjectDataBinary();
+			this.maid_item_binary_ = new DanceObjectDataBinary();
+			this.maid_event_binary_ = new DanceObjectDataBinary();
+			this.time_line_binary_ = new AWReadBinaryData();
+			if (this.UseBinaryData)
+			{
+				string file_name = this.GetFolderPathToBinaryData() + "item_data.bytes";
+				this.maid_item_binary_.ReadData(file_name);
+				NDebug.Assert(this.m_listItemObject.Count == this.maid_item_binary_.datas.Length, "アイテム数がバイナリデータと不一致");
+				this.maid_item_binary_.Restoration(false);
+				for (int i = 0; i < this.m_listItemObject.Count; i++)
+				{
+					if (!(this.m_listItemObject[i] != null))
+					{
+						this.m_listItemObject[i] = this.maid_item_binary_.datas[i].obj;
+					}
+				}
+				file_name = this.GetFolderPathToBinaryData() + "event_data.bytes";
+				this.maid_event_binary_.ReadData(file_name);
+				NDebug.Assert(this.m_listEventObject.Count == this.maid_event_binary_.datas.Length, "イベント数がバイナリデータと不一致");
+				this.maid_event_binary_.Restoration(false);
+				for (int j = 0; j < this.m_listEventObject.Count; j++)
+				{
+					if (!(this.m_listEventObject[j] != null))
+					{
+						this.m_listEventObject[j] = this.maid_event_binary_.datas[j].obj;
+					}
+				}
+				file_name = this.GetFolderPathToBinaryData() + "maid_data.bytes";
+				this.maid_data_binary_.ReadData(file_name);
+				NDebug.Assert(this.m_listDummyAnimChara.Count == this.maid_data_binary_.datas.Length, "メイド数がバイナリデータと不一致");
+				this.maid_data_binary_.Restoration(true);
+				for (int k = 0; k < this.m_listDummyAnimChara.Count; k++)
+				{
+					if (!(this.m_listDummyAnimChara[k] != null))
+					{
+						this.m_listDummyAnimChara[k] = this.maid_data_binary_.datas[k].obj;
+						this.m_listDebugObj.Add(this.m_listDummyAnimChara[k]);
+					}
+				}
+				file_name = this.GetFolderPathToBinaryData() + "timeline_data.bytes";
+				this.time_line_binary_.ReadFile(file_name);
+				this.maid_item_binary_.AttachObject(this.m_AnimatorData.getTake(this.m_strPlayTakeName));
+				this.maid_event_binary_.AttachObject(this.m_AnimatorData.getTake(this.m_strPlayTakeName));
+			}
+		}
+		foreach (string str in this.m_listKuchiPakuFile)
+		{
+			TextAsset textAsset = Resources.Load("SceneDance/" + str) as TextAsset;
+			NDebug.Assert(textAsset != null, "口パクパターンテキストファイルが開けません。" + str);
+			string text = textAsset.text;
+			NDebug.Assert(text.Length != 0, "口パクパターンファイル内が空です。" + str);
+			text = Regex.Replace(text, "(\\r|\\n| )", string.Empty);
+			this.m_listKuchiPattern.Add(text);
+		}
+		this.m_AnimatorData.playOnStart = null;
+		this.m_AnimatorData.bAutoTimeUpdate = false;
+		bool flag2 = this.m_strMasterAudioFileName == "happy_happy_scandal1.ogg" && this.m_listKuchiPakuFile.Count == 4;
+		if (flag2)
+		{
+			Transform transform = GameObject.Find("effect").transform;
+			transform.Find("FloorTile").GetComponent<Renderer>().material.shader = Shader.Find("BetterDiffuse");
+		}
+		if (GameMain.Instance.VRMode && GameMain.Instance.CMSystem.GetTmpGenericFlag("ダンスOVRカメラタイプ") == 1)
+		{
+			this.m_trOvrDummyCam = new GameObject("OvrDummyDanceCam").transform;
+			this.m_trOvrDummyCam.gameObject.AddComponent<Camera>().enabled = false;
+			this.m_OvrCam = GameMain.Instance.OvrMgr.OvrCamera;
+		}
+		GameObject gameObject = GameObject.Find("RhythmAction_Mgr");
+		if (!gameObject)
+		{
+			gameObject = UnityEngine.Object.Instantiate<GameObject>(Resources.Load<GameObject>("SceneDance/Rhythm_Action/Prefab/RhythmAction_Mgr"));
+		}
+		if (!RhythmAction_Mgr.Instance)
+		{
+			gameObject.GetComponent<RhythmAction_Mgr>().InstanceInit();
+		}
+		for (int l = 0; l < this.m_listTestPreset.Count; l++)
+		{
+			Maid maid = GameMain.Instance.CharacterMgr.GetMaid(l);
+			if (!maid)
+			{
+				maid = GameMain.Instance.CharacterMgr.AddStockMaid();
+				GameMain.Instance.CharacterMgr.SetActiveMaid(maid, l);
+				CharacterMgr.Preset preset;
+				if (DanceMain.SelectDanceData != null && !string.IsNullOrEmpty(DanceMain.SelectDanceData.preset_name[l]))
+				{
+					preset = GameMain.Instance.CharacterMgr.PresetLoadFromResources(DanceMain.SelectDanceData.preset_name[l]);
+				}
+				else
+				{
+					preset = GameMain.Instance.CharacterMgr.PresetLoadFromResources(this.m_listTestPreset[l]);
+				}
+				if (preset != null)
+				{
+					GameMain.Instance.CharacterMgr.PresetSet(maid, preset);
+				}
+				this.m_listTempMaid.Add(maid);
+				maid.Visible = true;
+			}
+			else
+			{
+				if (!this.m_maidUser)
+				{
+					this.m_maidUser = DanceSelect.SelectTopMaid;
+				}
+				maid.Visible = true;
+			}
+		}
+		if (!this.m_maidUser)
+		{
+			this.m_maidUser = GameMain.Instance.CharacterMgr.GetMaid(0);
+		}
+		if (DanceMain.KaraokeMode)
+		{
+			return;
+		}
+		GameMain.Instance.CharacterMgr.ResetCharaPosAll();
+		if (DanceMain.SelectDanceData != null)
+		{
+			for (int m = 0; m < DanceMain.SelectDanceData.select_chara_num; m++)
+			{
+				RhythmAction_Mgr.Instance.FactOrderList.Add(GameMain.Instance.CharacterMgr.GetMaid(m));
+			}
+		}
+		if (RhythmAction_Mgr.NowDance != RhythmAction_Mgr.DanceType.BenchMark && DanceMain.SelectDanceData != null && DanceMain.SelectDanceData.maid_order.Count > 0)
+		{
+			List<Maid> list = new List<Maid>();
+			for (int n = 0; n < DanceMain.SelectDanceData.maid_order.Count; n++)
+			{
+				list.Add(GameMain.Instance.CharacterMgr.GetMaid(n));
+			}
+			for (int num = 0; num < DanceMain.SelectDanceData.maid_order.Count; num++)
+			{
+				if (!(GameMain.Instance.CharacterMgr.GetMaid(num) == list[DanceMain.SelectDanceData.maid_order[num]]))
+				{
+					GameMain.Instance.CharacterMgr.DeactivateMaid(num);
+					GameMain.Instance.CharacterMgr.SetActiveMaid(list[DanceMain.SelectDanceData.maid_order[num]], num);
+					list[num].Visible = true;
+				}
+			}
+		}
+	}
+
+	private void Start()
+	{
+		if (GameMain.Instance.VRMode)
+		{
+			GameObject gameObject = GameObject.Find("effect");
+			if (gameObject != null)
+			{
+				ParticleSystem[] componentsInChildren = gameObject.GetComponentsInChildren<ParticleSystem>(true);
+				foreach (ParticleSystem particleSystem in componentsInChildren)
+				{
+					Renderer component = particleSystem.GetComponent<Renderer>();
+					if (component != null)
+					{
+						component.shadowCastingMode = ShadowCastingMode.Off;
+						component.receiveShadows = false;
+					}
+				}
+			}
+		}
+		if (!DanceMain.KaraokeMode)
+		{
+			GameMain.Instance.BgMgr.DeleteBg();
+		}
+		GameMain.Instance.MainLight.Reset();
+		GameMain.Instance.SoundMgr.StopBGM(0f);
+		GameMain.Instance.MainCamera.gameObject.SetActive(true);
+		if (!DanceMain.KaraokeMode)
+		{
+			GameMain.Instance.MainCamera.Reset(CameraMain.CameraType.Target, false);
+		}
+		for (int j = 0; j < this.m_listEventObject.Count; j++)
+		{
+			GameObject gameObject2 = this.m_listEventObject[j];
+			NDebug.Assert(!this.m_htEventObj.ContainsKey(gameObject2.name), "listEventObjectに複数同じObjectを追加しようとしました。" + this.m_listEventObject[j].name);
+			this.m_htEventObj.Add(gameObject2.name, gameObject2);
+		}
+		this.m_takeNow = this.m_AnimatorData.getTake(this.m_strPlayTakeName);
+		NDebug.Assert(this.m_takeNow != null, "再生するテイク名PlayTakeNameが不正です。" + this.m_strPlayTakeName);
+	}
+
+	public void SetFace(int f_nMaidNo, string f_strFace)
+	{
+		RhythmAction_Mgr.Instance.SetTimeLineFace(f_nMaidNo, f_strFace);
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(f_nMaidNo);
+		if (RhythmAction_Mgr.Instance.GetMaidFaceStop(f_nMaidNo))
+		{
+			return;
+		}
+		maid.FaceAnime(f_strFace, 1f, 0);
+	}
+
+	public void SetFaceBlend(int f_nMaidNo, string f_strFace)
+	{
+		RhythmAction_Mgr.Instance.SetTimeLineFaceBlend(f_nMaidNo, f_strFace);
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(f_nMaidNo);
+		if (RhythmAction_Mgr.Instance.GetMaidFaceBlendStop(f_nMaidNo))
+		{
+			return;
+		}
+		maid.FaceBlend(f_strFace);
+	}
+
+	public void SetMaidVisible(int f_nMaidNo, bool visible)
+	{
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(f_nMaidNo);
+		maid.transform.localScale = ((!visible) ? Vector3.zero : Vector3.one);
+	}
+
+	public void SwitchObject(string f_strObjName, bool bEnable)
+	{
+		(this.m_htEventObj[f_strObjName] as GameObject).SetActive(bEnable);
+	}
+
+	public void EyeToCam(int f_nMaidNo, string f_strType)
+	{
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(f_nMaidNo);
+		try
+		{
+			maid.EyeToCamera((Maid.EyeMoveType)Enum.Parse(typeof(Maid.EyeMoveType), f_strType), 0f);
+		}
+		catch (Exception ex)
+		{
+			NDebug.Assert("EyeToCam 目線タイプ " + f_strType + " は不正です。\n" + ex.Message, false);
+		}
+	}
+
+	public void FadeOut(float f_fTime)
+	{
+		GameMain.Instance.MainCamera.FadeOut(f_fTime, false, null, false, default(Color));
+	}
+
+	public void FadeIn(float f_fTime)
+	{
+		GameMain.Instance.MainCamera.FadeIn(f_fTime, false, null, false, true, default(Color));
+	}
+
+	private void ChangeObj(AMTake f_take, string f_strOldObjName, GameObject f_goNew)
+	{
+		AMTranslationTrack[] array = f_take.findTranslationTrack(f_strOldObjName);
+		for (int i = 0; i < array.Length; i++)
+		{
+			array[i].changeObject(f_goNew.transform);
+		}
+		AMRotationTrack[] array2 = f_take.findRotationTrack(f_strOldObjName);
+		for (int j = 0; j < array2.Length; j++)
+		{
+			array2[j].changeObject(f_goNew.transform);
+		}
+		AMPropertyTrack[] array3 = f_take.findPropertyTrack(f_strOldObjName);
+		for (int k = 0; k < array3.Length; k++)
+		{
+			array3[k].changeObject(f_goNew);
+		}
+	}
+
+	public void OnDestroy()
+	{
+		this.Uninit();
+		Debug.Log("DanceMain::OnDestroy");
+	}
+
+	private void Uninit()
+	{
+		if (this.m_bFinished)
+		{
+			return;
+		}
+		if (RhythmAction_Mgr.Instance && DanceMain.KaraokeMode)
+		{
+			RhythmAction_Mgr.Instance.KaraokeEnd();
+		}
+		Debug.Log("DanceMain::Uninit");
+		this.m_AnimatorData.StopLoop();
+		if (GameMain.Instance.MainLight != null)
+		{
+			GameMain.Instance.MainLight.Reset();
+		}
+		if (GameMain.Instance.MainCamera != null)
+		{
+			GameMain.Instance.MainCamera.Reset(CameraMain.CameraType.Target, true);
+			GameMain.Instance.MainCamera.FadeOut(0f, false, null, true, default(Color));
+		}
+		if (GameMain.Instance.SoundMgr != null)
+		{
+			GameMain.Instance.SoundMgr.StopBGM(0f);
+		}
+		if (GameMain.Instance.CharacterMgr != null)
+		{
+			GameMain.Instance.CharacterMgr.ResetCharaPosAll();
+		}
+		for (int i = 0; i < this.m_listMaid.Count; i++)
+		{
+			if (this.m_listMaid[i] != null)
+			{
+				this.m_listMaid[i].transform.localScale = Vector3.one;
+				this.m_listMaid[i].StopKuchipakuPattern();
+				this.m_listMaid[i].EyeToCamera(Maid.EyeMoveType.目と顔を向ける, 0f);
+			}
+		}
+		for (int j = 0; j < this.m_listItemObject.Count; j++)
+		{
+			if (this.m_listItemObject[j] != null)
+			{
+				UnityEngine.Object.DestroyImmediate(this.m_listItemObject[j]);
+			}
+		}
+		this.m_listItemObject.Clear();
+		for (int k = 0; k < this.m_listTempMaid.Count; k++)
+		{
+			GameMain.Instance.CharacterMgr.BanishmentMaid(this.m_listTempMaid[k]);
+		}
+		if (!DanceMain.KaraokeMode)
+		{
+			if (this.DanceMaid.Any((Maid maid) => maid != null))
+			{
+				GameMain.Instance.CharacterMgr.DeactivateCharaAll();
+			}
+			if (this.m_maidUser != null && this.m_maidUser != GameMain.Instance.CharacterMgr.GetMaid(0))
+			{
+				GameMain.Instance.CharacterMgr.DeactivateMaid(0);
+				GameMain.Instance.CharacterMgr.SetActiveMaid(this.m_maidUser, 0);
+			}
+		}
+		this.m_eMode = DanceMain.Mode.Finish;
+		this.m_bFinished = true;
+	}
+
+	private void ToFinish()
+	{
+		this.IsDanceEnd = !this.IsForceDanceEnd;
+		RhythmAction_Mgr.Instance.RhythmGame_End();
+		this.Uninit();
+		if (!DanceMain.IsDanceRecet)
+		{
+			DanceSelect.SetNextDance();
+		}
+		else
+		{
+			NDebug.Assert(!string.IsNullOrEmpty(DanceMain.RecetJumpLabel), "やりなおし時に飛ぶラベルが設定されてません");
+		}
+		Debug.Log("Dance ToFinish Script");
+		if (!string.IsNullOrEmpty(this.m_strScriptLabel))
+		{
+			if (DanceMain.IsDanceRecet)
+			{
+				Debug.Log("OnEndScene JumpTo " + DanceMain.RecetJumpLabel);
+				GameMain.Instance.ScriptMgr.adv_kag.JumpLabel(DanceMain.RecetJumpLabel);
+			}
+			else
+			{
+				if (DanceMain.SelectDanceData != null)
+				{
+					GameMain.Instance.ScriptMgr.EvalScript("tf['dance_scene_name'] = '" + DanceMain.SelectDanceData.scene_name + "';");
+				}
+				Debug.Log("OnEndScene JumpTo " + this.m_strScriptLabel);
+				GameMain.Instance.ScriptMgr.adv_kag.JumpLabel(this.m_strScriptLabel);
+			}
+			GameMain.Instance.ScriptMgr.adv_kag.Exec();
+		}
+		Debug.Log("Dance Finish!!");
+	}
+
+	private IEnumerator LoadMotionScript()
+	{
+		if (this.m_AdjustScript.IndexOf(".ks") < 0)
+		{
+			this.m_AdjustScript += ".ks";
+		}
+		NDebug.Assert(!string.IsNullOrEmpty(this.m_ScriptLabel), string.Format("{0}の飛び先が未指定です。", this.m_AdjustScript));
+		if (this.m_ScriptLabel.IndexOf("*") < 0)
+		{
+			this.m_ScriptLabel = "*" + this.m_ScriptLabel;
+		}
+		ScriptManager script_mgr = GameMain.Instance.ScriptMgr;
+		script_mgr.StopMotionScript();
+		script_mgr.is_motion_blend = true;
+		script_mgr.LoadMotionScript(0, false, this.m_AdjustScript, this.m_ScriptLabel, string.Empty, string.Empty, false, true);
+		float timer = 0f;
+		while (timer <= this.m_LoadScriptTime)
+		{
+			timer += Time.deltaTime;
+			yield return null;
+		}
+		script_mgr.StopMotionScript();
+		this.m_eMode = DanceMain.Mode.LoadAnim;
+		yield break;
+	}
+
+	private void Update()
+	{
+		if (this.m_eMode == DanceMain.Mode.ActiveCam)
+		{
+			if (GameMain.Instance.MainCamera.gameObject.activeSelf)
+			{
+				GameMain.Instance.MainCamera.FadeOut(0f, false, null, true, default(Color));
+				GameMain.Instance.MainCamera.SetCameraType(CameraMain.CameraType.Free);
+				GameMain.Instance.MainCamera.SetControl(false);
+				if (this.m_camDummyCamera != null)
+				{
+					if (!GameMain.Instance.VRMode)
+					{
+						AMTranslationTrack amtranslationTrack = this.m_takeNow.findTranslationTrack(this.m_camDummyCamera.gameObject.transform);
+						amtranslationTrack.obj = GameMain.Instance.MainCamera.gameObject.transform;
+						foreach (AMAction amaction in amtranslationTrack.cache)
+						{
+							AMTranslationAction amtranslationAction = (AMTranslationAction)amaction;
+							amtranslationAction.obj = GameMain.Instance.MainCamera.gameObject.transform;
+						}
+						AMRotationTrack amrotationTrack = this.m_takeNow.findRotationTrack(this.m_camDummyCamera.gameObject.transform);
+						amrotationTrack.obj = GameMain.Instance.MainCamera.gameObject.transform;
+						foreach (AMAction amaction2 in amrotationTrack.cache)
+						{
+							AMRotationAction amrotationAction = (AMRotationAction)amaction2;
+							amrotationAction.obj = GameMain.Instance.MainCamera.gameObject.transform;
+						}
+					}
+					else if (GameMain.Instance.CMSystem.GetTmpGenericFlag("ダンスOVRカメラタイプ") != 0)
+					{
+						AMTranslationTrack amtranslationTrack2 = this.m_takeNow.findTranslationTrack(this.m_camDummyCamera.gameObject.transform);
+						amtranslationTrack2.obj = this.m_trOvrDummyCam;
+						foreach (AMAction amaction3 in amtranslationTrack2.cache)
+						{
+							AMTranslationAction amtranslationAction2 = (AMTranslationAction)amaction3;
+							amtranslationAction2.obj = this.m_trOvrDummyCam;
+						}
+						AMRotationTrack amrotationTrack2 = this.m_takeNow.findRotationTrack(this.m_camDummyCamera.gameObject.transform);
+						amrotationTrack2.obj = this.m_trOvrDummyCam;
+						foreach (AMAction amaction4 in amrotationTrack2.cache)
+						{
+							AMRotationAction amrotationAction2 = (AMRotationAction)amaction4;
+							amrotationAction2.obj = this.m_trOvrDummyCam;
+						}
+					}
+					this.m_camDummyCamera.gameObject.SetActive(false);
+				}
+				if (!GameMain.Instance.VRMode)
+				{
+					this.ChangeObj(this.m_takeNow, "CameraMain", GameMain.Instance.MainCamera.gameObject);
+				}
+				else if (GameMain.Instance.CMSystem.GetTmpGenericFlag("ダンスOVRカメラタイプ") == 0)
+				{
+					if (!DanceMain.KaraokeMode)
+					{
+						GameMain.Instance.MainCamera.SetTargetPos(new Vector3(0f, 1.16f, 0f), true);
+						GameMain.Instance.MainCamera.SetAroundAngle(new Vector2(180f, 0f), true);
+						GameMain.Instance.MainCamera.SetDistance(5f, true);
+					}
+				}
+				else
+				{
+					GameObject y = GameObject.Find("__GameMain__/Camera/CameraMain/CameraMain");
+					AMBinaryDataBaseObject[] binary_data_list = this.time_line_binary_.binary_data_list;
+					if (binary_data_list != null)
+					{
+						for (int i = 0; i < binary_data_list.Length; i++)
+						{
+							if (binary_data_list[i].obj == y)
+							{
+								binary_data_list[i].SetGameObject(this.m_trOvrDummyCam.gameObject);
+							}
+						}
+					}
+				}
+				this.ChangeObj(this.m_takeNow, "MainDirectionalLight", GameMain.Instance.MainLight.gameObject);
+				if (DanceMain.SelectDanceData == null || string.IsNullOrEmpty(DanceMain.SelectDanceData.bgm_file_name))
+				{
+					GameMain.Instance.SoundMgr.PlayDanceBGM(this.m_strMasterAudioFileName, 0f, true);
+				}
+				else
+				{
+					GameMain.Instance.SoundMgr.PlayDanceBGM(DanceMain.SelectDanceData.bgm_file_name + ".ogg", 0f, true);
+				}
+				AudioSource audioSourceBgm = GameMain.Instance.SoundMgr.GetAudioSourceBgm();
+				audioSourceBgm.Stop();
+				AMAudioTrack[] array = this.m_takeNow.findAudioTrack(this.m_strDummyAudioObjectName);
+				foreach (AMAudioTrack amaudioTrack in array)
+				{
+					amaudioTrack.ChangeAudioSource(audioSourceBgm);
+				}
+				this.m_audioNew = audioSourceBgm;
+				if (!this.m_boDebugDummyBody)
+				{
+					for (int k = 0; k < this.m_listAnimName.Count; k++)
+					{
+						this.m_listMaid.Add(GameMain.Instance.CharacterMgr.GetMaid(k));
+					}
+					for (int l = 0; l < this.m_listMaid.Count; l++)
+					{
+						this.m_listMaid[l].EyeToCamera(Maid.EyeMoveType.目だけ向ける, 0f);
+					}
+					NDebug.Assert(this.m_listKuchiPattern.Count == this.m_listMaid.Count, "メイド数と口パクパターン数が異なります。");
+					for (int m = 0; m < this.m_listMaid.Count; m++)
+					{
+						this.m_listMaid[m].StartKuchipakuPattern(0f, this.m_listKuchiPattern[m], true);
+					}
+				}
+				this.m_eMode = DanceMain.Mode.LoadChara;
+			}
+		}
+		else if (this.m_eMode == DanceMain.Mode.LoadChara)
+		{
+			if (!GameMain.Instance.CharacterMgr.IsBusy() || this.m_listMaid.Count == 0)
+			{
+				if (!this.m_boDebugDummyBody)
+				{
+					int num = 1;
+					for (;;)
+					{
+						string arg = "f";
+						AMAnimationTrack amanimationTrack = this.m_takeNow.findAnimationTrack(arg + num);
+						if (amanimationTrack == null)
+						{
+							break;
+						}
+						int num2 = num - 1;
+						Maid maid = GameMain.Instance.CharacterMgr.GetMaid(num2);
+						string name = maid.CrossFade(this.m_listAnimName[num2] + ".anm", false, false, false, 0f, 1f);
+						Animation component = maid.body0.m_Bones.GetComponent<Animation>();
+						component.Stop();
+						amanimationTrack.obj = maid.body0.m_Bones;
+						NDebug.Assert(amanimationTrack.cache.Count == 1, "キャラアニメーショントラックにはアクションを一つしか使えません。(開始と終了キーひとつのみ)");
+						foreach (AMAction amaction5 in amanimationTrack.cache)
+						{
+							AMAnimationAction amanimationAction = (AMAnimationAction)amaction5;
+							amanimationAction.amClip = component.GetClip(name);
+							amanimationAction.obj = maid.body0.m_Bones;
+						}
+						if (this.UseFloorHitY)
+						{
+							maid.body0.SetBoneHitHeightY(this.m_fFloorY);
+						}
+						num++;
+					}
+					for (int n = 0; n < this.m_listDummyAnimChara.Count; n++)
+					{
+						Maid maid2 = GameMain.Instance.CharacterMgr.GetMaid(n);
+						for (int num3 = 0; num3 < this.m_listItemObject.Count; num3++)
+						{
+							Transform transform = CMT.SearchObjObj(this.m_listDummyAnimChara[n].transform, this.m_listItemObject[num3].transform);
+							if (transform != null)
+							{
+								Transform transform2 = transform;
+								string name2 = transform2.parent.name;
+								Transform parent = CMT.SearchObjName(maid2.gameObject.transform, name2, true);
+								transform2.SetParent(parent, false);
+							}
+						}
+					}
+					for (int num4 = 0; num4 < this.m_listDebugObj.Count; num4++)
+					{
+						UnityEngine.Object.DestroyImmediate(this.m_listDebugObj[num4]);
+					}
+					this.m_listDebugObj.Clear();
+				}
+				if (string.IsNullOrEmpty(this.m_AdjustScript))
+				{
+					this.m_eMode = DanceMain.Mode.LoadAnim;
+				}
+				else
+				{
+					base.StartCoroutine(this.LoadMotionScript());
+					this.m_eMode = DanceMain.Mode.LoadScript;
+				}
+			}
+		}
+		else if (this.m_eMode == DanceMain.Mode.LoadAnim)
+		{
+			this.m_AnimatorData.Play(this.m_takeNow.name, true, 0f, false, this.time_line_binary_.GetTrackIDList());
+			this.m_fTakeStartRealTime = Time.realtimeSinceStartup;
+			this.m_fNowRealTime = this.m_fTakeStartRealTime;
+			this.m_eMode = DanceMain.Mode.Exec;
+		}
+		else if (this.m_eMode == DanceMain.Mode.Exec)
+		{
+			if (!RhythmAction_Mgr.Instance.IsPause)
+			{
+				float num5 = RhythmAction_Mgr.Instance.DanceDeltaTime;
+				if (this.m_audioNew != null && this.m_audioNew.isPlaying)
+				{
+					float time = this.m_audioNew.time;
+					for (int num6 = 0; num6 < this.m_listMaid.Count; num6++)
+					{
+						this.m_listMaid[num6].FoceKuchipakuUpdate(time);
+					}
+					if (this.m_bAudioFirst)
+					{
+						float num7 = time;
+						num5 = Time.realtimeSinceStartup - this.m_fTakeStartRealTime;
+						this.m_bAudioFirst = false;
+						this.m_fOffsetTime = num7 - num5;
+						RhythmAction_Mgr.Instance.RhythmGame_Start();
+					}
+				}
+				this.m_fNowRealTime += num5;
+			}
+			if (this.IsForceDanceEnd || this.m_AnimatorData.takeName == null || this.IsDanceSkip || (DanceMain.KaraokeMode && Input.GetKeyDown(KeyCode.Return)))
+			{
+				this.ToFinish();
+			}
+		}
+		else if (this.m_eMode == DanceMain.Mode.Finish)
+		{
+		}
+		if (this.m_AnimatorData.takeName != null)
+		{
+			NTime.UpdateNowTime(this.m_fNowRealTime - this.m_fTakeStartRealTime + this.m_fOffsetTime);
+			this.time_line_binary_.Update(NTime.time);
+		}
+		if (GameMain.Instance.VRMode && this.m_trOvrDummyCam != null && this.m_OvrCam != null)
+		{
+			this.m_OvrCam.SetPos(this.m_trOvrDummyCam.position);
+			this.m_OvrCam.SetRotation(this.m_trOvrDummyCam.rotation.eulerAngles);
+		}
+	}
+
+	private const string m_RhythmMgr_Path = "SceneDance/Rhythm_Action/Prefab/RhythmAction_Mgr";
+
+	public static bool IsDanceRecet;
+
+	public static DanceData SelectDanceData;
+
+	public static bool KaraokeMode;
+
+	private DanceMain.Mode m_eMode;
+
+	public bool m_boDebugDummyBody;
+
+	public Camera m_camDummyCamera;
+
+	public List<GameObject> m_listDebugObj;
+
+	public AnimatorData m_AnimatorData;
+
+	public List<GameObject> m_listDummyAnimChara;
+
+	public List<string> m_listAnimName;
+
+	public List<GameObject> m_listEventObject;
+
+	private Hashtable m_htEventObj = new Hashtable();
+
+	public List<string> m_listTestPreset;
+
+	public List<GameObject> m_listItemObject = new List<GameObject>();
+
+	public List<string> m_listKuchiPakuFile = new List<string>();
+
+	private List<string> m_listKuchiPattern = new List<string>();
+
+	private List<Maid> m_listMaid = new List<Maid>();
+
+	public string m_strDummyAudioObjectName;
+
+	private AudioSource m_audioNew;
+
+	public string m_strMasterAudioFileName;
+
+	public string m_strPlayTakeName = "Take1";
+
+	private AMTake m_takeNow;
+
+	private string m_strScriptLabel = string.Empty;
+
+	private List<Maid> m_listTempMaid = new List<Maid>();
+
+	private Maid m_maidUser;
+
+	[HideInInspector]
+	public bool IsForceDanceEnd;
+
+	[HideInInspector]
+	public bool IsDanceSkip;
+
+	private OvrCamera m_OvrCam;
+
+	private Transform m_trOvrDummyCam;
+
+	public bool UseBinaryData;
+
+	public string BinaryFolderName;
+
+	private DanceObjectDataBinary maid_data_binary_;
+
+	private DanceObjectDataBinary maid_item_binary_;
+
+	private DanceObjectDataBinary maid_event_binary_;
+
+	private AWReadBinaryData time_line_binary_;
+
+	[Header("物理境界を変更するか?")]
+	public bool UseFloorHitY;
+
+	public float m_fFloorY;
+
+	[SerializeField]
+	[Header("被写界深度の焦点")]
+	private float m_DepthFocalSize = 1.2f;
+
+	[SerializeField]
+	[Header("マイク位置調整等に使うモーションスクリプト名")]
+	private string m_AdjustScript = string.Empty;
+
+	[SerializeField]
+	private string m_ScriptLabel = string.Empty;
+
+	[SerializeField]
+	[Header("AdjustScript読み込みに要する時間")]
+	private float m_LoadScriptTime = 3f;
+
+	private bool m_bFinished;
+
+	private float m_fNowRealTime;
+
+	private float m_fTakeStartRealTime;
+
+	private float m_fOffsetTime;
+
+	private bool m_bAudioFirst = true;
+
+	private enum Mode
+	{
+		ActiveCam,
+		LoadChara,
+		LoadAnim,
+		Exec,
+		Finish,
+		LoadScript
+	}
+}

+ 171 - 0
Assembly-CSharp/DanceObjectDataBinary.cs

@@ -0,0 +1,171 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+internal class DanceObjectDataBinary
+{
+	public void ReadData(string file_name)
+	{
+		file_name = file_name.Replace(Path.GetExtension(file_name), string.Empty);
+		if (0 <= file_name.IndexOf("Assets/Resources/"))
+		{
+			file_name = file_name.Replace("Assets/Resources/", string.Empty);
+		}
+		TextAsset textAsset = Resources.Load(file_name) as TextAsset;
+		if (textAsset == null)
+		{
+			return;
+		}
+		MemoryStream input = new MemoryStream(textAsset.bytes);
+		BinaryReader binaryReader = new BinaryReader(input);
+		int num = binaryReader.ReadInt32();
+		this.datas = new DanceObjectDataBinary.Data[num];
+		for (int i = 0; i < this.datas.Length; i++)
+		{
+			DanceObjectDataBinary.Data data = new DanceObjectDataBinary.Data();
+			data.target_maid_no = binaryReader.ReadInt32();
+			data.object_name = binaryReader.ReadString();
+			data.top_object_name = binaryReader.ReadString();
+			data.resources_path = binaryReader.ReadString();
+			data.tree_path = binaryReader.ReadString();
+			data.object_reference_track_id_list = new List<int>();
+			int num2 = binaryReader.ReadInt32();
+			for (int j = 0; j < num2; j++)
+			{
+				data.object_reference_track_id_list.Add(binaryReader.ReadInt32());
+			}
+			this.datas[i] = data;
+		}
+	}
+
+	public List<GameObject> Restoration(bool create_empty_obj)
+	{
+		List<GameObject> list = new List<GameObject>();
+		if (this.datas == null)
+		{
+			return list;
+		}
+		foreach (DanceObjectDataBinary.Data data in this.datas)
+		{
+			List<string> list2 = new List<string>();
+			if (!string.IsNullOrEmpty(data.tree_path))
+			{
+				string[] array2 = data.tree_path.Split(new char[]
+				{
+					'/'
+				});
+				foreach (string item in array2)
+				{
+					list2.Add(item);
+				}
+			}
+			GameObject gameObject = null;
+			if (!string.IsNullOrEmpty(data.top_object_name))
+			{
+				gameObject = GameObject.Find(data.top_object_name);
+				if (gameObject == null)
+				{
+					gameObject = new GameObject(data.top_object_name);
+					list.Add(gameObject);
+				}
+				foreach (string text in list2)
+				{
+					GameObject gameObject2 = UTY.GetChildObjectNoError(gameObject, text, false);
+					if (gameObject2 == null)
+					{
+						gameObject2 = new GameObject(text);
+						gameObject2.transform.parent = gameObject.transform;
+					}
+					gameObject = gameObject2;
+				}
+			}
+			GameObject gameObject3;
+			if (gameObject == null)
+			{
+				gameObject3 = GameObject.Find(data.object_name);
+			}
+			else
+			{
+				gameObject3 = UTY.GetChildObjectNoError(gameObject, data.object_name, false);
+			}
+			if (gameObject3 == null)
+			{
+				if (create_empty_obj)
+				{
+					gameObject3 = new GameObject(data.object_name);
+				}
+				else
+				{
+					GameObject gameObject4 = Resources.Load<GameObject>(data.resources_path);
+					if (!gameObject4)
+					{
+						Debug.LogErrorFormat("{0}が見つかりません", new object[]
+						{
+							data.object_name
+						});
+					}
+					gameObject3 = UnityEngine.Object.Instantiate<GameObject>(gameObject4);
+					gameObject3.name = data.object_name;
+				}
+				if (gameObject != null)
+				{
+					gameObject3.transform.SetParent(gameObject.transform, false);
+				}
+			}
+			data.obj = gameObject3;
+		}
+		return list;
+	}
+
+	public void AttachObject(AMTake take_data)
+	{
+		if (this.datas == null || this.datas.Length <= 0)
+		{
+			return;
+		}
+		Dictionary<int, GameObject> dictionary = new Dictionary<int, GameObject>();
+		for (int i = 0; i < this.datas.Length; i++)
+		{
+			foreach (int key in this.datas[i].object_reference_track_id_list)
+			{
+				if (!dictionary.ContainsKey(key))
+				{
+					dictionary.Add(key, this.datas[i].obj);
+				}
+			}
+		}
+		List<AMTrack> trackValues = take_data.trackValues;
+		for (int j = 0; j < trackValues.Count; j++)
+		{
+			if (dictionary.ContainsKey(trackValues[j].id) && trackValues[j] is AMAnimationTrack)
+			{
+				AMAnimationTrack amanimationTrack = trackValues[j] as AMAnimationTrack;
+				if (amanimationTrack.obj == null)
+				{
+					amanimationTrack.obj = dictionary[trackValues[j].id];
+				}
+				amanimationTrack.updateCache();
+			}
+		}
+	}
+
+	public DanceObjectDataBinary.Data[] datas;
+
+	public class Data
+	{
+		public GameObject obj;
+
+		public int target_maid_no;
+
+		public string object_name;
+
+		public string top_object_name;
+
+		public string resources_path;
+
+		public string tree_path;
+
+		public List<int> object_reference_track_id_list;
+	}
+}

File diff suppressed because it is too large
+ 1192 - 0
Assembly-CSharp/DanceSelect.cs


+ 61 - 0
Assembly-CSharp/DanceSelectManager.cs

@@ -0,0 +1,61 @@
+using System;
+using System.Collections.Generic;
+
+public class DanceSelectManager : WfScreenManager
+{
+	public void Awake()
+	{
+		this.adv_kag_ = GameMain.Instance.ScriptMgr.adv_kag;
+	}
+
+	public override void Start()
+	{
+		base.Start();
+		GameMain.Instance.MainLight.Reset();
+		GameMain.Instance.CharacterMgr.ResetCharaPosAll();
+		GameMain.Instance.MainCamera.Reset(CameraMain.CameraType.Target, true);
+		GameMain.Instance.SoundMgr.VoiceStopAll();
+		this.move_screen_ = base.children_dic["Move"].GetComponent<WfScreenMoveChildren>();
+		string empty = string.Empty;
+		string empty2 = string.Empty;
+		if (this.adv_kag_.tag_backup != null && 0 < this.adv_kag_.tag_backup.Count && this.adv_kag_.tag_backup["name"] == "SceneDanceSelect")
+		{
+			NDebug.Assert(this.adv_kag_.tag_backup.ContainsKey("label"), "SceneDanceSelectにlabelの設定がされていませんでした");
+			this.move_screen_.SetNextLabel(this.adv_kag_.tag_backup["label"]);
+			DanceMain.RecetJumpLabel = this.move_screen_.next_label;
+			if (this.adv_kag_.tag_backup.ContainsKey("cancel_label"))
+			{
+				DanceSelect component = base.children_dic["Main"].GetComponent<DanceSelect>();
+				component.SetCancelLabel(this.adv_kag_.tag_backup["cancel_label"]);
+			}
+		}
+		this.CallScreen("Main");
+	}
+
+	protected override void SettingChildrenList(Dictionary<string, WfScreenChildren> children_dic)
+	{
+		string[] array = new string[]
+		{
+			"Main",
+			"Move"
+		};
+		for (int i = 0; i < array.Length; i++)
+		{
+			WfScreenChildren component = UTY.GetChildObject(base.gameObject, array[i], false).GetComponent<WfScreenChildren>();
+			component.parent_mgr = this;
+			children_dic.Add(array[i], component);
+		}
+	}
+
+	public WfScreenMoveChildren move_screen
+	{
+		get
+		{
+			return this.move_screen_;
+		}
+	}
+
+	private WfScreenMoveChildren move_screen_;
+
+	private ADVKagManager adv_kag_;
+}

+ 58 - 0
Assembly-CSharp/DanceSelectMusicInfo.cs

@@ -0,0 +1,58 @@
+using System;
+using UnityEngine;
+
+public class DanceSelectMusicInfo
+{
+	public DanceSelectMusicInfo(GameObject root_obj)
+	{
+		this.root_obj_ = root_obj;
+		this.title_label_ = UTY.GetChildObject(this.root_obj_, "BG/TitleFrame/Value", false).GetComponent<UILabel>();
+		Transform transform = this.root_obj_.transform.Find("BG/InfoFrame/Value");
+		if (transform)
+		{
+			this.info_label_ = transform.GetComponent<UILabel>();
+		}
+		this.dance_num_label_ = UTY.GetChildObject(this.root_obj_, "BG/InfoFrame/Value2", false).GetComponent<UILabel>();
+		this.image_sprite_ = UTY.GetChildObject(this.root_obj_, "BG/Image", false).GetComponent<UI2DSprite>();
+	}
+
+	public void Release()
+	{
+		this.image_sprite_.sprite2D = null;
+	}
+
+	public void SetDanceData(DanceData data)
+	{
+		this.title_label_.text = data.title.Replace("\n", string.Empty);
+		if (this.info_label_)
+		{
+			this.info_label_.text = data.commentary_text;
+		}
+		this.dance_num_label_.text = "ダンス人数 : " + data.select_chara_num + "人";
+		this.Release();
+		string text = (RhythmAction_Mgr.NowDance != RhythmAction_Mgr.DanceType.Challenge) ? data.sample_image_name : data.danceshow_image;
+		Texture2D texture2D = Resources.Load<Texture2D>("SceneDanceSelect/Atlas/" + text);
+		Sprite sprite = Sprite.Create(texture2D, new Rect(0f, 0f, (float)texture2D.width, (float)texture2D.height), default(Vector2));
+		sprite.name = text;
+		this.image_sprite_.sprite2D = sprite;
+		GameMain.Instance.CharacterMgr.status.SetFlag("_ライブ背景", (data.bgType != DanceData.BgType.LiveStage) ? 0 : 1);
+	}
+
+	public GameObject InfoUI
+	{
+		get
+		{
+			return this.root_obj_;
+		}
+	}
+
+	private GameObject root_obj_;
+
+	private UILabel title_label_;
+
+	private UILabel info_label_;
+
+	private UILabel dance_num_label_;
+
+	private UI2DSprite image_sprite_;
+}

+ 664 - 0
Assembly-CSharp/DanceSetting.cs

@@ -0,0 +1,664 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Text;
+using Dance;
+using UnityEngine;
+
+public class DanceSetting : MonoBehaviour
+{
+	private void Awake()
+	{
+		this.m_OrijinBgheight = this.m_SettingUIBg.height;
+		if (!DanceSetting.m_IsFileCheck)
+		{
+			Action<string, bool> action = delegate(string file_path, bool binary_ver)
+			{
+				float num = -1f;
+				FileInfo fileInfo = new FileInfo(file_path);
+				try
+				{
+					if (binary_ver)
+					{
+						using (FileStream fileStream = new FileStream(file_path, FileMode.Open, FileAccess.Read))
+						{
+							BinaryFormatter binaryFormatter = new BinaryFormatter();
+							string text = (string)binaryFormatter.Deserialize(fileStream);
+							string text2 = (string)binaryFormatter.Deserialize(fileStream);
+							float.TryParse(text2.Split(new char[]
+							{
+								':'
+							})[1], out num);
+							DanceSetting.Settings = (SettingData)binaryFormatter.Deserialize(fileStream);
+							fileStream.Close();
+						}
+					}
+					else
+					{
+						using (StreamReader streamReader = new StreamReader(fileInfo.OpenRead(), Encoding.UTF8))
+						{
+							string text3 = streamReader.ReadLine();
+							if (text3 == "@Dance_Setting")
+							{
+								string s = streamReader.ReadLine().Split(new char[]
+								{
+									':'
+								})[1];
+								float.TryParse(s, out num);
+								text3 = streamReader.ReadLine();
+							}
+							DanceSetting.Settings = JsonUtility.FromJson<SettingData>(text3);
+							streamReader.Close();
+						}
+					}
+				}
+				catch (Exception ex)
+				{
+					if (num > 0f)
+					{
+						if (num == 1f)
+						{
+							Debug.Log("2017/11/22以前の設定データです");
+						}
+					}
+					else
+					{
+						DanceSetting.Settings = new SettingData();
+						File.Delete(file_path);
+						Debug.LogWarning("ダンス設定読み込みに失敗したので初期化します。エラー箇所:" + ex.StackTrace);
+					}
+				}
+			};
+			string fullPath = Path.GetFullPath(".\\dance_setting_br.dat");
+			DanceSetting.m_IsFileExist = File.Exists(fullPath);
+			if (DanceSetting.m_IsFileExist)
+			{
+				action(fullPath, true);
+			}
+			else
+			{
+				string fullPath2 = Path.GetFullPath(".\\dance_setting.set");
+				string fullPath3 = Path.GetFullPath(".\\dance_setting.dat");
+				if (File.Exists(fullPath2))
+				{
+					action(fullPath2, false);
+					File.Delete(fullPath2);
+				}
+				else if (File.Exists(fullPath3))
+				{
+					action(fullPath3, false);
+					File.Delete(fullPath3);
+				}
+			}
+			DanceSetting.m_IsFileCheck = true;
+		}
+	}
+
+	private void Start()
+	{
+		EventDelegate.Callback callback = delegate
+		{
+			GameObject gameObject = GameObject.Find("Drop-down List");
+			if (gameObject)
+			{
+				int width = gameObject.GetComponentInChildren<UISprite>().width;
+				gameObject.transform.position = UIButton.current.transform.TransformPoint(Vector3.down * this.m_PopUpOffset + Vector3.left * (float)width / 2f);
+			}
+		};
+		IEnumerator enumerator = this.m_ButtonGroup.GetEnumerator();
+		try
+		{
+			while (enumerator.MoveNext())
+			{
+				object obj = enumerator.Current;
+				Transform transform = (Transform)obj;
+				UIPopupList componentInChildren = transform.GetComponentInChildren<UIPopupList>();
+				if (componentInChildren)
+				{
+					DanceSetting.NeedData needData = new DanceSetting.NeedData();
+					if (transform.Find("Label"))
+					{
+						needData.Label = transform.Find("Label").GetComponent<UILabel>();
+					}
+					needData.Button = transform.GetComponentInChildren<UIButton>();
+					EventDelegate.Add(needData.Button.onClick, callback);
+					needData.Collider = transform.GetComponentInChildren<BoxCollider>();
+					this.m_SettingUIList.Add(componentInChildren, needData);
+					EventDelegate.Add(componentInChildren.onChange, new EventDelegate.Callback(this.ValueSetting));
+					this.SetUIValue(componentInChildren);
+				}
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+	}
+
+	private void SetUIValue(UIPopupList list)
+	{
+		DanceSetting.UIInspectorSetting uiinspectorSetting = this.m_SettingList.SingleOrDefault((DanceSetting.UIInspectorSetting e) => e.PopUpUI == list);
+		if (uiinspectorSetting == null)
+		{
+			return;
+		}
+		foreach (string text in list.items)
+		{
+			bool flag = false;
+			switch (uiinspectorSetting.MyType)
+			{
+			case DanceSetting.SettingType.Product:
+				flag = this.IsProductMatch(text);
+				break;
+			case DanceSetting.SettingType.Audience:
+				flag = this.IsAudienceMatch(text);
+				break;
+			case DanceSetting.SettingType.DepthofField:
+				flag = this.IsSettingOn(text, DanceSetting.Settings.IsDepthOfFieldOn);
+				break;
+			case DanceSetting.SettingType.SePlay:
+				flag = this.IsSettingOn(text, DanceSetting.Settings.IsSEPlay);
+				break;
+			case DanceSetting.SettingType.Voltage:
+				flag = this.IsVoltageMatch(text);
+				break;
+			case DanceSetting.SettingType.BlackBg:
+				flag = this.IsSettingOn(text, DanceSetting.Settings.IsblackBGon);
+				break;
+			case DanceSetting.SettingType.NoteEffect:
+				flag = this.IsEffectLigthtMatch(text);
+				break;
+			case DanceSetting.SettingType.NoteTiming:
+				flag = this.IsTimingMatch(text);
+				break;
+			case DanceSetting.SettingType.JudgeTiming:
+				flag = this.IsJudgeTimingMatch(text);
+				break;
+			case DanceSetting.SettingType.FpsCam:
+				flag = this.IsSettingOn(text, DanceSetting.Settings.FPSCamMode);
+				break;
+			case DanceSetting.SettingType.Cutin:
+				flag = this.IsCutinMatch(text);
+				break;
+			case DanceSetting.SettingType.Undress:
+				flag = this.IsUndressFaceMatch(text);
+				break;
+			}
+			if (flag)
+			{
+				list.value = text;
+				break;
+			}
+		}
+	}
+
+	private bool IsProductMatch(string text)
+	{
+		bool result = false;
+		switch (DanceSetting.Settings.Product)
+		{
+		case Product_Mgr.ProductRank.Low:
+			result = (text == "下位");
+			break;
+		case Product_Mgr.ProductRank.Special:
+			result = (text == "上位");
+			break;
+		case Product_Mgr.ProductRank.Normal:
+			result = (text == "通常");
+			break;
+		}
+		return result;
+	}
+
+	private bool IsAudienceMatch(string text)
+	{
+		bool result = false;
+		switch (DanceSetting.Settings.Audience)
+		{
+		case Product_Mgr.AudienceState.Few:
+			result = (text == "小");
+			break;
+		case Product_Mgr.AudienceState.Normal:
+			result = (text == "中");
+			break;
+		case Product_Mgr.AudienceState.Many:
+			result = (text == "大");
+			break;
+		}
+		return result;
+	}
+
+	private bool IsSettingOn(string text, bool condition)
+	{
+		if (condition)
+		{
+			return text == "ON";
+		}
+		return text == "OFF";
+	}
+
+	private bool IsVoltageMatch(string text)
+	{
+		int num = 0;
+		if (int.TryParse(text, out num))
+		{
+			return DanceSetting.Settings.Voltage == num;
+		}
+		if (text == "普通")
+		{
+			return DanceSetting.Settings.Voltage == 3;
+		}
+		return text == "難しい" && DanceSetting.Settings.Voltage == 4;
+	}
+
+	private bool IsCutinMatch(string text)
+	{
+		return DanceSetting.Settings.CutInGrade == Appeal_Mgr.ParseGrade(text);
+	}
+
+	private bool IsTimingMatch(string text)
+	{
+		return DanceSetting.Settings.NoteOccurTiming.ToString() == text.Replace("+", string.Empty).Replace("秒", string.Empty);
+	}
+
+	private bool IsEffectLigthtMatch(string text)
+	{
+		if (text == "軽量")
+		{
+			return DanceSetting.Settings.IsNoteEffectLight;
+		}
+		return !DanceSetting.Settings.IsNoteEffectLight;
+	}
+
+	private bool IsUndressFaceMatch(string text)
+	{
+		if (text == "通常")
+		{
+			return DanceSetting.Settings.UndressFaceOn;
+		}
+		return !DanceSetting.Settings.UndressFaceOn;
+	}
+
+	private bool IsJudgeTimingMatch(string text)
+	{
+		return DanceSetting.Settings.NoteJudgeTiming == float.Parse(text.Replace("秒", string.Empty));
+	}
+
+	private void OnDestroy()
+	{
+		using (FileStream fileStream = new FileStream(Path.GetFullPath(".\\dance_setting_br.dat"), FileMode.Create, FileAccess.Write))
+		{
+			BinaryFormatter binaryFormatter = new BinaryFormatter();
+			binaryFormatter.Serialize(fileStream, "@Dance_Setting");
+			binaryFormatter.Serialize(fileStream, string.Format("Ver:{0}", 1.7f));
+			binaryFormatter.Serialize(fileStream, DanceSetting.Settings);
+			fileStream.Close();
+		}
+		DanceSetting.m_IsFileExist = true;
+	}
+
+	private void SwitchFlag(string value_text, ref bool swtch_flag)
+	{
+		if (value_text != null)
+		{
+			if (!(value_text == "ON"))
+			{
+				if (value_text == "OFF")
+				{
+					swtch_flag = false;
+				}
+			}
+			else
+			{
+				swtch_flag = true;
+			}
+		}
+	}
+
+	private void SetProduct(string value_text)
+	{
+		Product_Mgr.ProductRank product = Product_Mgr.ProductRank.Low;
+		if (value_text != null)
+		{
+			if (!(value_text == "下位"))
+			{
+				if (!(value_text == "通常"))
+				{
+					if (value_text == "上位")
+					{
+						product = Product_Mgr.ProductRank.Special;
+					}
+				}
+				else
+				{
+					product = Product_Mgr.ProductRank.Normal;
+				}
+			}
+			else
+			{
+				product = Product_Mgr.ProductRank.Low;
+			}
+		}
+		DanceSetting.Settings.Product = product;
+	}
+
+	private void SetAudience(string value_text)
+	{
+		Product_Mgr.AudienceState audience = Product_Mgr.AudienceState.Normal;
+		if (value_text != null)
+		{
+			if (!(value_text == "小"))
+			{
+				if (!(value_text == "中"))
+				{
+					if (value_text == "大")
+					{
+						audience = Product_Mgr.AudienceState.Many;
+					}
+				}
+				else
+				{
+					audience = Product_Mgr.AudienceState.Normal;
+				}
+			}
+			else
+			{
+				audience = Product_Mgr.AudienceState.Few;
+			}
+		}
+		DanceSetting.Settings.Audience = audience;
+	}
+
+	private void SetVoltage(string value_text)
+	{
+		int voltage = 0;
+		if (int.TryParse(value_text, out voltage))
+		{
+			DanceSetting.Settings.Voltage = voltage;
+		}
+		else if (value_text != null)
+		{
+			if (!(value_text == "普通"))
+			{
+				if (value_text == "難しい")
+				{
+					DanceSetting.Settings.Voltage = 4;
+				}
+			}
+			else
+			{
+				DanceSetting.Settings.Voltage = 3;
+			}
+		}
+	}
+
+	private void SetCutInGrade(string value_text)
+	{
+		DanceSetting.Settings.CutInGrade = Appeal_Mgr.ParseGrade(value_text);
+	}
+
+	private void SetNoteTiming(string value_text)
+	{
+		DanceSetting.Settings.NoteOccurTiming = int.Parse(value_text.Replace("+", string.Empty));
+	}
+
+	private void SetEffectLight(string value_text)
+	{
+		if (value_text != null)
+		{
+			if (!(value_text == "通常"))
+			{
+				if (value_text == "軽量")
+				{
+					DanceSetting.Settings.IsNoteEffectLight = true;
+				}
+			}
+			else
+			{
+				DanceSetting.Settings.IsNoteEffectLight = false;
+			}
+		}
+	}
+
+	private void SetUndressFace(string value_text)
+	{
+		if (value_text != null)
+		{
+			if (!(value_text == "通常"))
+			{
+				if (value_text == "我慢")
+				{
+					DanceSetting.Settings.UndressFaceOn = false;
+				}
+			}
+			else
+			{
+				DanceSetting.Settings.UndressFaceOn = true;
+			}
+		}
+	}
+
+	private void SetJudgeTiming(string value_text)
+	{
+		DanceSetting.Settings.NoteJudgeTiming = float.Parse(value_text);
+	}
+
+	private void ValueSetting()
+	{
+		string value = UIPopupList.current.value;
+		DanceSetting.UIInspectorSetting uiinspectorSetting = this.m_SettingList.SingleOrDefault((DanceSetting.UIInspectorSetting e) => e.PopUpUI == UIPopupList.current);
+		if (uiinspectorSetting == null)
+		{
+			return;
+		}
+		switch (uiinspectorSetting.MyType)
+		{
+		case DanceSetting.SettingType.Product:
+			this.SetProduct(value);
+			break;
+		case DanceSetting.SettingType.Audience:
+			this.SetAudience(value);
+			break;
+		case DanceSetting.SettingType.DepthofField:
+			this.SwitchFlag(value, ref DanceSetting.Settings.IsDepthOfFieldOn);
+			break;
+		case DanceSetting.SettingType.SePlay:
+			this.SwitchFlag(value, ref DanceSetting.Settings.IsSEPlay);
+			break;
+		case DanceSetting.SettingType.Voltage:
+			this.SetVoltage(value);
+			break;
+		case DanceSetting.SettingType.BlackBg:
+			this.SwitchFlag(value, ref DanceSetting.Settings.IsblackBGon);
+			break;
+		case DanceSetting.SettingType.NoteEffect:
+			this.SetEffectLight(value);
+			break;
+		case DanceSetting.SettingType.NoteTiming:
+			this.SetNoteTiming(value);
+			break;
+		case DanceSetting.SettingType.JudgeTiming:
+			this.SetJudgeTiming(value);
+			break;
+		case DanceSetting.SettingType.FpsCam:
+			this.SwitchFlag(value, ref DanceSetting.Settings.FPSCamMode);
+			break;
+		case DanceSetting.SettingType.Cutin:
+			this.SetCutInGrade(value);
+			break;
+		case DanceSetting.SettingType.Undress:
+			this.SetUndressFace(value);
+			break;
+		}
+		if (this.m_SettingUIList[UIPopupList.current].Label)
+		{
+			this.m_IsSettingChange = (this.m_SettingUIList[UIPopupList.current].Label.text != UIPopupList.current.value);
+			this.m_SettingUIList[UIPopupList.current].Label.text = UIPopupList.current.value;
+		}
+	}
+
+	public void DisSelectable()
+	{
+		foreach (KeyValuePair<UIPopupList, DanceSetting.NeedData> keyValuePair in this.m_SettingUIList)
+		{
+			if (keyValuePair.Value.Collider)
+			{
+				keyValuePair.Value.Collider.enabled = false;
+			}
+		}
+	}
+
+	public void SetUIMode(string mode = "")
+	{
+		RhythmAction_Mgr.DanceType nowDance = RhythmAction_Mgr.NowDance;
+		if (nowDance != RhythmAction_Mgr.DanceType.Challenge)
+		{
+			if (nowDance != RhythmAction_Mgr.DanceType.VS)
+			{
+				if (mode.IndexOf("モード") >= 0)
+				{
+					this.m_ModeLabel.text = mode + "設定";
+				}
+				else
+				{
+					this.m_ModeLabel.text = mode + "モード設定";
+				}
+			}
+			else
+			{
+				this.m_ModeLabel.text = "VSダンス設定";
+			}
+		}
+		else
+		{
+			this.m_ModeLabel.text = "ダンスショー設定";
+		}
+		int num = 0;
+		foreach (DanceSetting.UIInspectorSetting uiinspectorSetting in this.m_SettingList)
+		{
+			GameObject gameObject = uiinspectorSetting.PopUpUI.transform.parent.gameObject;
+			bool flag = uiinspectorSetting.OnDanceList.Contains(RhythmAction_Mgr.NowDance);
+			if (GameMain.Instance.VRMode)
+			{
+				flag &= uiinspectorSetting.UseVR;
+			}
+			gameObject.SetActive(flag);
+			if (flag)
+			{
+				gameObject.transform.localPosition = Vector3.up * (this.m_FirstUIposY - this.m_UISetInterval * (float)num);
+				num++;
+			}
+		}
+		this.m_SettingUIBg.height = this.m_OrijinBgheight + num * Mathf.FloorToInt(this.m_UISetInterval);
+	}
+
+	private const string m_SettingHeader = "@Dance_Setting";
+
+	private const float m_SettingVer = 1.7f;
+
+	[SerializeField]
+	[Header("設定項目設置間隔")]
+	private float m_UISetInterval;
+
+	[SerializeField]
+	private float m_FirstUIposY;
+
+	[SerializeField]
+	[Header("ポップアップ表示オフセット")]
+	private float m_PopUpOffset = 27.47f;
+
+	[SerializeField]
+	[Header("ボタンUIグループ")]
+	private Transform m_ButtonGroup;
+
+	[SerializeField]
+	private UILabel m_ModeLabel;
+
+	private Dictionary<UIPopupList, DanceSetting.NeedData> m_SettingUIList = new Dictionary<UIPopupList, DanceSetting.NeedData>();
+
+	[SerializeField]
+	[Header("各UI設定")]
+	private List<DanceSetting.UIInspectorSetting> m_SettingList = new List<DanceSetting.UIInspectorSetting>
+	{
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.Product),
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.Audience),
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.DepthofField),
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.SePlay),
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.Voltage),
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.BlackBg),
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.NoteEffect),
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.NoteTiming),
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.JudgeTiming),
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.FpsCam),
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.Cutin),
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.Undress)
+	};
+
+	private bool m_IsSettingChange;
+
+	[SerializeField]
+	[Header("設定UI背景")]
+	private UISprite m_SettingUIBg;
+
+	private int m_OrijinBgheight;
+
+	public static SettingData Settings = new SettingData();
+
+	private static bool m_IsFileExist = false;
+
+	private static bool m_IsFileCheck = false;
+
+	private class NeedData
+	{
+		public UILabel Label;
+
+		public UIButton Button;
+
+		public BoxCollider Collider;
+
+		public string DefoValue;
+	}
+
+	public enum SettingType
+	{
+		Product,
+		Audience,
+		DepthofField,
+		SePlay,
+		Voltage,
+		BlackBg,
+		NoteEffect,
+		NoteTiming,
+		JudgeTiming,
+		FpsCam,
+		Cutin,
+		Undress,
+		AllRelease
+	}
+
+	[Serializable]
+	private class UIInspectorSetting
+	{
+		public UIInspectorSetting(DanceSetting.SettingType type)
+		{
+			this.MyType = type;
+		}
+
+		public DanceSetting.SettingType MyType;
+
+		public UIPopupList PopUpUI;
+
+		public List<RhythmAction_Mgr.DanceType> OnDanceList = new List<RhythmAction_Mgr.DanceType>();
+
+		public bool UsePublic = true;
+
+		public bool UseVR = true;
+	}
+}

+ 420 - 0
Assembly-CSharp/Dance_Note.cs

@@ -0,0 +1,420 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+public class Dance_Note : NoteBase
+{
+	public bool IsAppealNow
+	{
+		get
+		{
+			return this.m_IsAppealNow;
+		}
+	}
+
+	public float NotJudgeTime
+	{
+		get
+		{
+			return this.m_BaseTiming + this.m_AddTiming * (float)DanceSetting.Settings.NoteOccurTiming;
+		}
+	}
+
+	protected override void Start()
+	{
+		base.Start();
+		this.m_IsAppealNow = Note_Mgr.Instance.CanNoteAppeal(this.m_MyType);
+		Note_Mgr.Instance.AddNote(this, this.m_MyType);
+		foreach (ParticleSystem particleSystem in this.m_SpecialEffect)
+		{
+			particleSystem.gameObject.SetActive(false);
+		}
+		this.m_IsMySpecial = Note_Mgr.Instance.IsNoteSpecial(this.m_MyType);
+		if (this.m_IsMySpecial)
+		{
+			if (this.m_MyType == DanceBattle_Mgr.CharaType.Player)
+			{
+				foreach (ParticleSystem particleSystem2 in this.m_SpecialEffect)
+				{
+					particleSystem2.gameObject.SetActive(true);
+					RhythmAction_Mgr.Instance.AddParticleSystem(particleSystem2);
+				}
+			}
+			Note_Mgr.Instance.SetSpecialFlag(this.m_MyType, false);
+		}
+		if (this.m_MyType == DanceBattle_Mgr.CharaType.Enemy)
+		{
+			for (int k = 0; k < this.m_NoteUIList.Count<Dance_Note.NoteUIInfo>(); k++)
+			{
+				this.m_NoteUIList[k].NoteSprite.enabled = false;
+			}
+			this.m_RingSprite.enabled = false;
+			this.CheckNote();
+			return;
+		}
+		this.m_RingWidth = (float)this.m_RingSprite.width;
+		this.m_RingHeight = (float)this.m_RingSprite.height;
+		float num = this.m_RingWidth - this.m_RingFitNote.x;
+		float num2 = this.m_RingHeight - this.m_RingFitNote.y;
+		this.m_JudgeStartTime = this.GetBeforeJudge(Dance_Note.Evaluation.BAD) + this.NotJudgeTime;
+		this.m_JudgeEndtTime = this.GetAfterJudge(Dance_Note.Evaluation.BAD);
+		this.m_nTime = this.m_JudgeStartTime;
+		this.m_WidthSpeed = num / this.m_JudgeStartTime;
+		this.m_HeightSpeed = num2 / this.m_JudgeStartTime;
+		if (this.m_IsAppealNow)
+		{
+			this.m_RingSprite.color = this.m_Appeal_RingColor;
+		}
+		else
+		{
+			this.m_RingSprite.color = this.m_Normal_RingColor;
+		}
+		base.StartCoroutine(this.NoteScaling());
+	}
+
+	private IEnumerator NoteScaling()
+	{
+		float timer = 0f;
+		for (;;)
+		{
+			if (!RhythmAction_Mgr.Instance.IsPause)
+			{
+				timer += RhythmAction_Mgr.Instance.DanceDeltaTime;
+				float d = Mathf.Sin(Mathf.Clamp01(timer / this.m_ScalingTime) * 90f * 0.0174532924f);
+				base.transform.localScale = Vector3.one * d;
+				this.m_RingSprite.transform.localScale = Vector3.one / d;
+				if (timer > this.m_ScalingTime)
+				{
+					break;
+				}
+			}
+			yield return null;
+		}
+		yield break;
+		yield break;
+	}
+
+	protected override void Update()
+	{
+		base.Update();
+		if (!RhythmAction_Mgr.Instance.IsPause)
+		{
+			for (int i = 0; i < this.m_NoteUIList.Count<Dance_Note.NoteUIInfo>(); i++)
+			{
+				if (!this.m_NoteUIList[i].IsRotate)
+				{
+					this.m_NoteUIList[i].NoteSprite.fillAmount = Mathf.Clamp01(1f - this.m_nTime / this.m_JudgeStartTime) / 2f;
+				}
+				else
+				{
+					float d = this.m_RotateSpeed * (float)(1 - i % 2 * 2);
+					this.m_NoteUIList[i].NoteSprite.transform.eulerAngles += Vector3.forward * d * RhythmAction_Mgr.Instance.DanceDeltaTime;
+				}
+			}
+			if (!this.m_IsAppealNow && !Note_Mgr.Instance.CanNoteAppeal(this.m_MyType))
+			{
+				if (this.m_nTime < -this.m_JudgeEndtTime)
+				{
+					this.NoteEnd(Dance_Note.Evaluation.MISS);
+				}
+			}
+			else
+			{
+				if (this.m_nTime <= 0f)
+				{
+					this.NoteEnd(Dance_Note.Evaluation.PERFECT);
+				}
+				if (this.m_RingSprite.color != this.m_Appeal_RingColor)
+				{
+					this.m_RingSprite.color = this.m_Appeal_RingColor;
+					this.m_IsAppealNow = true;
+					Note_Mgr.Instance.AddAppealNoteCount(this.m_MyType);
+				}
+			}
+			this.m_RingWidth -= this.m_WidthSpeed * RhythmAction_Mgr.Instance.DanceDeltaTime;
+			this.m_RingHeight -= this.m_HeightSpeed * RhythmAction_Mgr.Instance.DanceDeltaTime;
+			this.m_RingSprite.width = Mathf.Max((int)this.m_RingWidth, 0);
+			this.m_RingSprite.height = Mathf.Max((int)this.m_RingHeight, 0);
+			this.m_nTime -= RhythmAction_Mgr.Instance.DanceDeltaTime;
+			if (this.m_nTime <= 0f && Dance_Note.IsAutoPlay)
+			{
+				this.NoteEnd(Dance_Note.Evaluation.PERFECT);
+			}
+		}
+	}
+
+	public float GetBeforeJudge(Dance_Note.Evaluation evalue)
+	{
+		return this.m_EvalueJudge.SingleOrDefault((Dance_Note.EvalueJadge e) => e.Evalue == evalue).BeforeJudge;
+	}
+
+	public float GetAfterJudge(Dance_Note.Evaluation evalue)
+	{
+		return this.m_EvalueJudge.SingleOrDefault((Dance_Note.EvalueJadge e) => e.Evalue == evalue).AfterJudge;
+	}
+
+	private void NoteEnd(Dance_Note.Evaluation evalue)
+	{
+		Score_Mgr.Instance.AddScore(evalue, this.m_MyType, this.m_IsMySpecial);
+		if (Appeal_Mgr.Instance.IsActive && (evalue == Dance_Note.Evaluation.GREAT || evalue == Dance_Note.Evaluation.PERFECT) && !this.m_IsAppealNow)
+		{
+			Appeal_Mgr.Instance.AddAppealValue(this.m_MyType, this.m_AddAppeal);
+		}
+		if (this.m_MyType == DanceBattle_Mgr.CharaType.Player)
+		{
+			if (DanceSetting.Settings.IsSEPlay && evalue != Dance_Note.Evaluation.MISS)
+			{
+				Note_Mgr.Instance.NoteSEPlay(null);
+			}
+			if (Voltage_Mgr.Instance.IsActive)
+			{
+				Voltage_Mgr.Instance.DownVoltage(evalue);
+			}
+			RhythmAction_Mgr.Instance.RemoveParticleSystem(this.m_SpecialEffect);
+			GameObject gameObject = UnityEngine.Object.Instantiate<GameObject>(Note_Mgr.Instance.NoteEffectPrefab);
+			gameObject.transform.parent = base.transform.parent;
+			gameObject.transform.localPosition = base.transform.localPosition;
+			gameObject.transform.localScale = Vector3.one;
+			gameObject.GetComponent<NoteEffect>().Initialize(evalue, this.m_IsAppealNow, this.m_MyDotX, this.m_MyDotY, this.m_effectType);
+		}
+		Note_Mgr.Instance.RemoveNote(this.m_MyType);
+		UnityEngine.Object.Destroy(base.gameObject);
+	}
+
+	public void SetTargetNote()
+	{
+		if (!this.m_IsAppealNow)
+		{
+			this.m_RingSprite.color = this.m_TargetMarkColor;
+			for (int i = 0; i < this.m_NoteUIList.Count<Dance_Note.NoteUIInfo>(); i++)
+			{
+				if (this.m_NoteUIList[i].IsRotate)
+				{
+					this.m_NoteUIList[i].NoteSprite.color = this.m_TargetNoteColor;
+				}
+			}
+		}
+	}
+
+	public void CheckNote()
+	{
+		Dance_Note.Evaluation evalue = Dance_Note.Evaluation.MISS;
+		if (this.m_MyType == DanceBattle_Mgr.CharaType.Player)
+		{
+			if (Dance_Note.IsAutoPlay)
+			{
+				return;
+			}
+			if (this.m_IsAppealNow)
+			{
+				return;
+			}
+			if (this.m_nTime > this.GetBeforeJudge(Dance_Note.Evaluation.BAD))
+			{
+				return;
+			}
+			bool flag = true;
+			foreach (Dance_Note.EvalueJadge evalueJadge in this.m_EvalueJudge)
+			{
+				if (!flag)
+				{
+					bool flag2 = false;
+					if (this.m_nTime >= 0f)
+					{
+						if (evalueJadge.BeforeJudge < this.m_nTime)
+						{
+							flag2 = true;
+						}
+					}
+					else if (evalueJadge.AfterJudge < Mathf.Abs(this.m_nTime))
+					{
+						flag2 = true;
+					}
+					if (flag2)
+					{
+						break;
+					}
+					evalue = evalueJadge.Evalue;
+				}
+				flag = false;
+			}
+		}
+		else if (this.m_MyType == DanceBattle_Mgr.CharaType.Enemy)
+		{
+			if (this.m_IsAppealNow)
+			{
+				evalue = Dance_Note.Evaluation.PERFECT;
+			}
+			else if (UnityEngine.Random.Range(0, 100) >= DanceBattle_Mgr.EnemyData.PushRate)
+			{
+				evalue = Dance_Note.Evaluation.MISS;
+			}
+			else
+			{
+				int num = UnityEngine.Random.Range(0, 100);
+				int num2 = 0;
+				bool flag3 = false;
+				foreach (KeyValuePair<Dance_Note.Evaluation, int> keyValuePair in DanceBattle_Mgr.EnemyData.EvalueRate)
+				{
+					int num3 = num2 + keyValuePair.Value;
+					if (num3 > num && num >= num2)
+					{
+						flag3 = true;
+						evalue = keyValuePair.Key;
+						break;
+					}
+					num2 += keyValuePair.Value;
+				}
+				if (!flag3)
+				{
+					evalue = Dance_Note.Evaluation.BAD;
+				}
+			}
+		}
+		this.NoteEnd(evalue);
+	}
+
+	public void Init(Note_Mgr.NoteData data, DanceBattle_Mgr.CharaType setType, int note_count)
+	{
+		this.m_MyDotX = data.DotX;
+		this.m_MyDotY = data.DotY;
+		this.m_MyType = setType;
+		this.m_effectType = data.effectType;
+		if (data.RingSize > 0f)
+		{
+			this.m_RingSprite.width = Mathf.FloorToInt((float)this.m_RingSprite.width * data.RingSize);
+			this.m_RingSprite.height = Mathf.FloorToInt((float)this.m_RingSprite.height * data.RingSize);
+		}
+		UIBasicSprite[] componentsInChildren = base.GetComponentsInChildren<UIBasicSprite>();
+		foreach (UIBasicSprite uibasicSprite in componentsInChildren)
+		{
+			uibasicSprite.depth -= (note_count - 1) * componentsInChildren.Count<UIBasicSprite>();
+		}
+	}
+
+	public static bool IsAutoPlay;
+
+	[SerializeField]
+	[Header("輪がノートと完全に重なるサイズ")]
+	private Vector2 m_RingFitNote;
+
+	[SerializeField]
+	[Header("判定中の輪の色")]
+	private Color m_TargetMarkColor = Color.white;
+
+	[SerializeField]
+	private UI2DSprite m_RingSprite;
+
+	[SerializeField]
+	[Header("通常時の輪の色")]
+	private Color m_Normal_RingColor = Color.white;
+
+	[SerializeField]
+	[Header("アピール時の輪の色")]
+	private Color m_Appeal_RingColor = Color.white;
+
+	[SerializeField]
+	[Header("判定中のノートの色")]
+	private Color m_TargetNoteColor = Color.white;
+
+	[SerializeField]
+	[Header("SE名")]
+	private string m_Sound_Name = "PUSH_SE.ogg";
+
+	private float m_RingWidth;
+
+	private float m_RingHeight;
+
+	private float m_nTime;
+
+	private float m_JudgeStartTime;
+
+	private float m_JudgeEndtTime;
+
+	private float m_WidthSpeed;
+
+	private float m_HeightSpeed;
+
+	private bool m_IsAppealNow;
+
+	[SerializeField]
+	private float m_ScalingTime = 0.25f;
+
+	[SerializeField]
+	[Header("回転速度")]
+	private float m_RotateSpeed;
+
+	[SerializeField]
+	private Dance_Note.NoteUIInfo[] m_NoteUIList;
+
+	[SerializeField]
+	[Header("各評定の設定")]
+	private Dance_Note.EvalueJadge[] m_EvalueJudge = new Dance_Note.EvalueJadge[]
+	{
+		new Dance_Note.EvalueJadge(Dance_Note.Evaluation.MISS, 0),
+		new Dance_Note.EvalueJadge(Dance_Note.Evaluation.BAD, 0),
+		new Dance_Note.EvalueJadge(Dance_Note.Evaluation.GOOD, 0),
+		new Dance_Note.EvalueJadge(Dance_Note.Evaluation.GREAT, 0),
+		new Dance_Note.EvalueJadge(Dance_Note.Evaluation.PERFECT, 0)
+	};
+
+	[SerializeField]
+	[Header("アピール増加量")]
+	private int m_AddAppeal = 2;
+
+	[SerializeField]
+	[Header("基底タイミング時間")]
+	private float m_BaseTiming = 0.5f;
+
+	[SerializeField]
+	private float m_AddTiming = 0.05f;
+
+	[SerializeField]
+	[Header("コンボ一定数毎に出すエフェクト")]
+	private ParticleSystem[] m_SpecialEffect;
+
+	private DanceBattle_Mgr.CharaType m_MyType;
+
+	private bool m_IsMySpecial;
+
+	private Note_Mgr.EffecctType m_effectType;
+
+	public enum Evaluation
+	{
+		MISS,
+		BAD,
+		GOOD,
+		GREAT,
+		PERFECT
+	}
+
+	[Serializable]
+	private class EvalueJadge
+	{
+		public EvalueJadge(Dance_Note.Evaluation evalue, int time)
+		{
+			this.Evalue = evalue;
+			this.BeforeJudge = (float)time;
+			this.AfterJudge = (float)time;
+		}
+
+		[Header("評価")]
+		public Dance_Note.Evaluation Evalue;
+
+		[Header("判定時間(0秒までの判定時間)")]
+		public float BeforeJudge;
+
+		[Header("判定時間(0秒以降の判定時間)")]
+		public float AfterJudge;
+	}
+
+	[Serializable]
+	private class NoteUIInfo
+	{
+		public UISprite NoteSprite;
+
+		public bool IsRotate;
+	}
+}

+ 153 - 0
Assembly-CSharp/Day_UI.cs

@@ -0,0 +1,153 @@
+using System;
+using System.Collections;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class Day_UI : MonoBehaviour
+{
+	public static void Day_UI_Start(Action action = null)
+	{
+		if (action != null)
+		{
+			Day_UI.m_End_Action = action;
+		}
+		if (Day_UI.UI_Obj)
+		{
+			UnityEngine.Object.Destroy(Day_UI.UI_Obj);
+		}
+		Day_UI.UI_Obj = Resources.Load<GameObject>(Day_UI.UI_Obj_Path);
+		Day_UI.UI_Obj = UnityEngine.Object.Instantiate<GameObject>(Day_UI.UI_Obj);
+		Day_UI.UI_Obj.GetComponent<Day_UI>().Start_Set();
+	}
+
+	private void Start_Set()
+	{
+		this.m_My_Rect = base.GetComponent<RectTransform>();
+		this.m_My_Child = this.m_My_Rect.GetChild(0);
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		this.m_My_Child.GetComponent<Text>().text = maid.status.GetFlag("VRイベント日数").ToString() + "日目";
+		if (GameMain.Instance.VRDeviceTypeID == GameMain.VRDeviceType.NON)
+		{
+			base.GetComponent<Canvas>().renderMode = RenderMode.ScreenSpaceOverlay;
+			this.m_My_Rect = this.m_My_Child.gameObject.GetComponent<RectTransform>();
+			this.m_My_Child.GetComponent<Text>().fontSize = this.m_2D_Text;
+			this.m_My_Rect.localPosition = Vector3.up * (float)(Screen.height + this.m_2D_Text / 2);
+			this.m_Start_Pos = (this.m_Goal_Pos = this.m_My_Rect.localPosition);
+			this.m_Goal_Pos.y = 0f;
+			this.m_Down_Speed = (float)(Screen.height + this.m_2D_Text / 2);
+		}
+		else
+		{
+			Vector3 eulerAngles = GameMain.Instance.MainCamera.GetRealHeadTransform().eulerAngles;
+			Vector3 a = GameMain.Instance.MainCamera.GetRealHeadTransform().TransformDirection(Vector3.forward);
+			a.y = 0f;
+			a.Normalize();
+			Vector3 position = GameMain.Instance.MainCamera.GetRealHeadTransform().position;
+			this.m_My_Rect.eulerAngles = Vector3.up * eulerAngles.y;
+			this.m_My_Child.GetComponent<Text>().fontSize = this.m_Text_Size;
+			this.m_My_Rect.position = position + a * this.m_Forwordlength + Vector3.up * this.m_First_High;
+			this.m_My_Child.GetComponent<RectTransform>().localPosition = Vector3.down * this.m_Down_Length;
+			this.m_Start_Pos = (this.m_Goal_Pos = this.m_My_Rect.position);
+			this.m_Goal_Pos.y = position.y;
+			this.m_Down_Speed = this.m_First_High;
+		}
+		base.StartCoroutine("UI_Animation");
+	}
+
+	private IEnumerator UI_Animation()
+	{
+		float timer = 0f;
+		for (;;)
+		{
+			timer += Time.deltaTime;
+			float angle = 90f * (timer / this.m_Anime_Time);
+			float rate = Mathf.Sin(0.0174532924f * angle);
+			this.m_My_Rect.localPosition = this.m_Start_Pos * (1f - rate) + this.m_Goal_Pos * rate;
+			if (timer >= this.m_Anime_Time)
+			{
+				break;
+			}
+			yield return null;
+		}
+		GameMain.Instance.SoundMgr.PlaySe(this.m_Sound_Name, false);
+		yield return new WaitForSeconds(this.m_Wait_Time);
+		base.StartCoroutine("UI_Fade");
+		yield break;
+		yield break;
+	}
+
+	private IEnumerator UI_Fade()
+	{
+		Text child_text = this.m_My_Child.GetComponent<Text>();
+		Color text_color = child_text.color;
+		float timer = 0f;
+		for (;;)
+		{
+			timer += Time.deltaTime;
+			text_color.a = 1f - timer / this.m_Fade_Time;
+			child_text.color = text_color;
+			if (timer >= this.m_Fade_Time)
+			{
+				break;
+			}
+			yield return null;
+		}
+		if (Day_UI.m_End_Action != null)
+		{
+			Day_UI.m_End_Action();
+		}
+		UnityEngine.Object.Destroy(base.gameObject);
+		yield break;
+		yield break;
+	}
+
+	private static string UI_Obj_Path = "Prefab/Day_Display_UI";
+
+	private static GameObject UI_Obj;
+
+	[SerializeField]
+	[Header("アニメーション時間")]
+	private float m_Anime_Time = 1f;
+
+	[SerializeField]
+	[Header("アニメーションとフェードの間時間")]
+	private float m_Wait_Time = 2f;
+
+	[SerializeField]
+	[Header("フェード時間")]
+	private float m_Fade_Time = 0.5f;
+
+	[SerializeField]
+	[Header("UIとカメラの距離(前方向)")]
+	private float m_Forwordlength = 1.7f;
+
+	[SerializeField]
+	[Header("UIの最初の高さ")]
+	private float m_First_High = 3f;
+
+	[SerializeField]
+	private int m_Text_Size = 100;
+
+	[SerializeField]
+	private float m_Down_Length = 40f;
+
+	[SerializeField]
+	[Header("2Dモード時の文字サイズ")]
+	private int m_2D_Text = 75;
+
+	[SerializeField]
+	[Header("SEファイル")]
+	private string m_Sound_Name = "SE021.ogg";
+
+	private RectTransform m_My_Rect;
+
+	private Transform m_My_Child;
+
+	private float m_Down_Speed;
+
+	private static Action m_End_Action;
+
+	private Vector3 m_Start_Pos;
+
+	private Vector3 m_Goal_Pos;
+}

+ 557 - 0
Assembly-CSharp/DaytimeTaskCtrl.cs

@@ -0,0 +1,557 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Schedule;
+using UnityEngine;
+
+public class DaytimeTaskCtrl : BaseCreateViewerCtrl
+{
+	public void Init(ScheduleMgr scheduleMgr, ScheduleCtrl scheduleCtrl, GameObject goPanel)
+	{
+		this.m_scheduleMgr = scheduleMgr;
+		this.m_scheduleCtrl = scheduleCtrl;
+		this.m_goDaytimeTaskViewer = UTY.GetChildObject(goPanel, "DaytimeTaskViewer", false);
+	}
+
+	private void InitViewer()
+	{
+		this.m_unitPrefabPath = "SceneDaily/Schedule/Prefab/DaytimeTaskUnit";
+		GameObject childObject = UTY.GetChildObject(this.m_goDaytimeTaskViewer, "TaskViewer", false);
+		this.m_goUnitParent = UTY.GetChildObject(childObject, "Contents/TaskUnitParent", false);
+		this.m_content = UTY.GetChildObject(childObject, "Contents", false);
+		this.m_contentPosY = this.m_content.transform.localPosition.y;
+		this.m_taskScrollView = UTY.GetChildObject(childObject, "Contents", false).GetComponent<UIScrollView>();
+		this.m_goParameterViewer = UTY.GetChildObject(this.m_goDaytimeTaskViewer, "ParameterViewer", false);
+		this.m_goMaidParameterParent = UTY.GetChildObject(this.m_goDaytimeTaskViewer, "ParameterViewer/MaidParameter/ParameterParent", false);
+		GameObject childObject2 = UTY.GetChildObject(this.m_goMaidParameterParent, "StudyRate", false);
+		this.m_lStudyRate = UTY.GetChildObject(childObject2, "Value", false).GetComponent<UILabel>();
+		this.m_lCurrentStudyRate = UTY.GetChildObject(childObject2, "CurrentValue", false).GetComponent<UILabel>();
+		GameObject childObject3 = UTY.GetChildObject(this.m_goMaidParameterParent, "Reception", false);
+		this.m_lReception = UTY.GetChildObject(childObject3, "Value", false).GetComponent<UILabel>();
+		this.m_lCurrentReception = UTY.GetChildObject(childObject3, "CurrentValue", false).GetComponent<UILabel>();
+		GameObject childObject4 = UTY.GetChildObject(this.m_goMaidParameterParent, "Care", false);
+		this.m_lCare = UTY.GetChildObject(childObject4, "Value", false).GetComponent<UILabel>();
+		this.m_lCurrentCare = UTY.GetChildObject(childObject4, "CurrentValue", false).GetComponent<UILabel>();
+		GameObject childObject5 = UTY.GetChildObject(this.m_goMaidParameterParent, "Lovely", false);
+		this.m_lLovely = UTY.GetChildObject(childObject5, "Value", false).GetComponent<UILabel>();
+		this.m_lCurrentLovely = UTY.GetChildObject(childObject5, "CurrentValue", false).GetComponent<UILabel>();
+		GameObject childObject6 = UTY.GetChildObject(this.m_goMaidParameterParent, "Elegance", false);
+		this.m_lElegance = UTY.GetChildObject(childObject6, "Value", false).GetComponent<UILabel>();
+		this.m_lCurrentElegance = UTY.GetChildObject(childObject6, "CurrentValue", false).GetComponent<UILabel>();
+		GameObject childObject7 = UTY.GetChildObject(this.m_goMaidParameterParent, "Charm", false);
+		this.m_lCharm = UTY.GetChildObject(childObject7, "Value", false).GetComponent<UILabel>();
+		this.m_lCurrentCharm = UTY.GetChildObject(childObject7, "CurrentValue", false).GetComponent<UILabel>();
+		GameObject childObject8 = UTY.GetChildObject(this.m_goMaidParameterParent, "TeachRate", false);
+		this.m_lTeachRate = UTY.GetChildObject(childObject8, "Value", false).GetComponent<UILabel>();
+		this.m_lCurrentTeachRate = UTY.GetChildObject(childObject8, "CurrentValue", false).GetComponent<UILabel>();
+		GameObject childObject9 = UTY.GetChildObject(this.m_goMaidParameterParent, "MaidClassExp", false);
+		this.m_lMaidClassExp = UTY.GetChildObject(childObject9, "Value", false).GetComponent<UILabel>();
+		this.m_lCurrentMaidClassExp = UTY.GetChildObject(childObject9, "CurrentValue", false).GetComponent<UILabel>();
+		this.m_listMaidParameter = new List<ScheduleCtrl.VariableItem>
+		{
+			new ScheduleCtrl.VariableItem(childObject2, this.m_lStudyRate),
+			new ScheduleCtrl.VariableItem(childObject3, this.m_lReception),
+			new ScheduleCtrl.VariableItem(childObject4, this.m_lCare),
+			new ScheduleCtrl.VariableItem(childObject5, this.m_lLovely),
+			new ScheduleCtrl.VariableItem(childObject6, this.m_lElegance),
+			new ScheduleCtrl.VariableItem(childObject7, this.m_lCharm),
+			new ScheduleCtrl.VariableItem(childObject8, this.m_lTeachRate),
+			new ScheduleCtrl.VariableItem(childObject9, this.m_lMaidClassExp)
+		};
+		this.m_goSalonParameter = UTY.GetChildObject(this.m_goDaytimeTaskViewer, "ParameterViewer/SalonParameter", false);
+		this.m_goSalonParameterParent = UTY.GetChildObject(this.m_goDaytimeTaskViewer, "ParameterViewer/SalonParameter/ParameterParent", false);
+		GameObject childObject10 = UTY.GetChildObject(this.m_goSalonParameterParent, "Cleanliness", false);
+		this.m_lCleanliness = UTY.GetChildObject(childObject10, "Value", false).GetComponent<UILabel>();
+		GameObject childObject11 = UTY.GetChildObject(this.m_goSalonParameterParent, "Brilliant", false);
+		this.m_lBrilliant = UTY.GetChildObject(childObject11, "Value", false).GetComponent<UILabel>();
+		GameObject childObject12 = UTY.GetChildObject(this.m_goSalonParameterParent, "Income", false);
+		this.m_lIncome = UTY.GetChildObject(childObject12, "Value", false).GetComponent<UILabel>();
+		this.m_listSalonParameter = new List<ScheduleCtrl.VariableItem>
+		{
+			new ScheduleCtrl.VariableItem(childObject10, this.m_lCleanliness),
+			new ScheduleCtrl.VariableItem(childObject11, this.m_lBrilliant),
+			new ScheduleCtrl.VariableItem(childObject12, this.m_lIncome)
+		};
+		this.m_taskScrollBar = UTY.GetChildObject(childObject, "Scroll Bar", false).GetComponent<UIScrollBar>();
+		this.m_spBGOfParameterViewer = UTY.GetChildObject(this.m_goDaytimeTaskViewer, "ParameterViewer/BG", false).GetComponent<UISprite>();
+		this.m_goTitleOfMaidParameter = UTY.GetChildObject(this.m_goDaytimeTaskViewer, "ParameterViewer/MaidParameter/Title", false);
+		this.m_heightOfMaidParameterTitle = this.m_goTitleOfMaidParameter.GetComponent<UISprite>().height;
+		this.m_goTitleOfSalonParameter = UTY.GetChildObject(this.m_goDaytimeTaskViewer, "ParameterViewer/SalonParameter/Title", false);
+		this.m_heightOfSalonParameterTitle = this.m_goTitleOfSalonParameter.GetComponent<UISprite>().height;
+	}
+
+	public void CreateTaskViewer(string buttonName)
+	{
+		if (!this.m_bInit)
+		{
+			this.InitViewer();
+			this.m_bInit = true;
+		}
+		this.m_scheduleCtrl.SetMaidIdByButtonName(buttonName);
+		this.m_scheduleCtrl.SetSelectedRowActive(buttonName);
+		string maidId = this.m_scheduleCtrl.GetMaidId();
+		this.m_currentActiveSlotNo = ScheduleCtrl.GetSlotNoByButtonName(buttonName);
+		this.m_listDaytimeTask = this.LoadData(this.m_currentActiveSlotNo);
+		base.CreateViewer<DaytimeTaskCtrl.DaytimeTaskButton>(this.m_listDaytimeTask);
+		string daytimeTaskId = this.GetDaytimeTaskId();
+		this.SetDaytimeTaskButtonActive(daytimeTaskId);
+		this.m_scheduleMgr.SetCurrentDaytimeTaskActiveButton(daytimeTaskId);
+		this.LoadDaytimeTaskData(daytimeTaskId);
+		this.ResetPosition();
+	}
+
+	private void ResetPosition()
+	{
+		this.m_taskScrollView.ResetPosition();
+		this.m_content.transform.localPosition = new Vector2(this.m_content.transform.localPosition.x, this.m_contentPosY);
+	}
+
+	protected override void SetDataForViewer()
+	{
+		this.m_dicDaytimeTask = new Dictionary<string, DaytimeTaskCtrl.DaytimeTaskButton>();
+		int num = 0;
+		foreach (DaytimeTaskCtrl.DaytimeTaskButton daytimeTaskButton in this.m_listDaytimeTask)
+		{
+			GameObject gameObject = UnityEngine.Object.Instantiate<GameObject>(this.m_goUnitPrefab);
+			gameObject.name = daytimeTaskButton.id;
+			GameObject childObject = UTY.GetChildObject(gameObject, "Main", false);
+			childObject.name = daytimeTaskButton.id;
+			base.SetTransformInfo(gameObject);
+			UILabel component = UTY.GetChildObject(gameObject, "Title", false).GetComponent<UILabel>();
+			component.text = daytimeTaskButton.name;
+			UITexture component2 = childObject.GetComponent<UITexture>();
+			component2.mainTexture = daytimeTaskButton.txtTaskIcon;
+			this.SetDaytimeTaskRank(gameObject, daytimeTaskButton.rank);
+			this.SetExpRatio(gameObject, daytimeTaskButton.expRatio);
+			if (daytimeTaskButton.type == ScheduleCSVData.TrainingType.Travel)
+			{
+				UTY.GetChildObject(gameObject, "Stars", false).SetActive(false);
+				UTY.GetChildObject(gameObject, "ExpRatio", false).SetActive(false);
+				Transform transform = UTY.GetChildObject(gameObject, "Title", false).transform;
+				Vector3 localPosition = transform.localPosition;
+				localPosition.y = -55f;
+				transform.localPosition = localPosition;
+			}
+			GameObject childObject2 = UTY.GetChildObject(childObject, "SelectCursor", false);
+			childObject2.SetActive(false);
+			daytimeTaskButton.selectCursor = childObject2;
+			daytimeTaskButton.order = num;
+			UIButton component3 = childObject.GetComponent<UIButton>();
+			daytimeTaskButton.btnTask = component3;
+			if (!daytimeTaskButton.enableTask)
+			{
+				Debug.Log(string.Format("選択できないタスクです。タスクID={0}, タスク名={1}", daytimeTaskButton.id, daytimeTaskButton.name));
+			}
+			this.m_dicDaytimeTask.Add(daytimeTaskButton.id, daytimeTaskButton);
+			num++;
+		}
+	}
+
+	private void LoadDaytimeTaskData(string taskId)
+	{
+		int num = int.Parse(taskId);
+		foreach (ScheduleBase scheduleBase in this.worksData)
+		{
+			if (scheduleBase.workType == ScheduleType.Training)
+			{
+				ScheduleTraining scheduleTraining = (ScheduleTraining)scheduleBase;
+				if (scheduleTraining.id == num)
+				{
+					MaidParams simulateeMaidParams = scheduleTraining.simulateeMaidParams;
+					this.m_lStudyRate.text = this.Sign(simulateeMaidParams.study_rate, null);
+					this.m_lReception.text = this.Sign(simulateeMaidParams.reception, null);
+					this.m_lCare.text = this.Sign(simulateeMaidParams.care, null);
+					this.m_lLovely.text = this.Sign(simulateeMaidParams.lovely, null);
+					this.m_lElegance.text = this.Sign(simulateeMaidParams.elegance, null);
+					this.m_lCharm.text = this.Sign(simulateeMaidParams.charm, null);
+					this.m_lTeachRate.text = this.Sign(simulateeMaidParams.teach_rate, null);
+					this.m_lMaidClassExp.text = this.Sign(simulateeMaidParams.exp, null);
+					SalonParams simulateeSalonMaidParams = scheduleTraining.simulateeSalonMaidParams;
+					this.m_lIncome.text = this.Sign(simulateeMaidParams.income, "#,0");
+				}
+			}
+		}
+		this.ExamineDisplayItem();
+	}
+
+	private string Sign(int input, string format = null)
+	{
+		if (input <= 0)
+		{
+			return input.ToString();
+		}
+		if (format != null)
+		{
+			return "+" + input.ToString(format);
+		}
+		return "+" + input.ToString();
+	}
+
+	private void ExamineDisplayItem()
+	{
+		int num = ScheduleCtrl.SetActiveExceptForNothing(this.m_listMaidParameter, "0");
+		bool flag = num > 0;
+		this.m_goTitleOfMaidParameter.SetActive(flag);
+		int num2 = ScheduleCtrl.SetActiveExceptForNothing(this.m_listSalonParameter, "0");
+		bool flag2 = num2 > 0;
+		this.m_goTitleOfSalonParameter.SetActive(flag2);
+		if (!flag && !flag2)
+		{
+			this.m_goParameterViewer.SetActive(false);
+			return;
+		}
+		this.m_goParameterViewer.SetActive(true);
+		BaseCreateViewerCtrl.Reposition(this.m_goMaidParameterParent);
+		BaseCreateViewerCtrl.Reposition(this.m_goSalonParameterParent);
+		this.AdjustParameterViewer(num, num2);
+	}
+
+	private void AdjustParameterViewer(int displayMaidParameterCount, int displaySalonParameterCount)
+	{
+		float num = 15f;
+		float num2 = 25f;
+		float num3 = 0f;
+		if (displayMaidParameterCount > 0)
+		{
+			num3 += (float)this.m_heightOfMaidParameterTitle + num;
+			float y = this.m_goMaidParameterParent.GetComponent<UITable>().padding.y;
+			IEnumerator enumerator = this.m_goMaidParameterParent.transform.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					Transform transform = (Transform)obj;
+					if (transform.gameObject.activeSelf)
+					{
+						UILabel component = transform.GetComponent<UILabel>();
+						num3 += (float)component.height + y * 2f;
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+			num3 += num2;
+		}
+		float num4 = 0f;
+		if (displaySalonParameterCount > 0)
+		{
+			num4 += (float)this.m_heightOfSalonParameterTitle + num;
+			float y = this.m_goSalonParameterParent.GetComponent<UITable>().padding.y;
+			IEnumerator enumerator2 = this.m_goSalonParameterParent.transform.GetEnumerator();
+			try
+			{
+				while (enumerator2.MoveNext())
+				{
+					object obj2 = enumerator2.Current;
+					Transform transform2 = (Transform)obj2;
+					if (transform2.gameObject.activeSelf)
+					{
+						UILabel component2 = transform2.GetComponent<UILabel>();
+						num4 += (float)component2.height + y * 2f;
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable2;
+				if ((disposable2 = (enumerator2 as IDisposable)) != null)
+				{
+					disposable2.Dispose();
+				}
+			}
+			num4 += num2;
+		}
+		if (num3 + num4 > 0f)
+		{
+			this.m_spBGOfParameterViewer.height = (int)(num3 + num4);
+			float y2 = (num3 <= 0f) ? (-(num3 + num * 2f)) : (-(num3 + num));
+			this.m_goSalonParameter.transform.localPosition = new Vector3(this.m_goSalonParameter.transform.localPosition.x, y2, 0f);
+		}
+	}
+
+	private void SetDaytimeTaskRank(GameObject go, int rank)
+	{
+		List<GameObject> list = new List<GameObject>();
+		GameObject childObject = UTY.GetChildObject(go, "Stars/Icon", false);
+		IEnumerator enumerator = childObject.transform.GetEnumerator();
+		try
+		{
+			while (enumerator.MoveNext())
+			{
+				object obj = enumerator.Current;
+				Transform transform = (Transform)obj;
+				list.Add(transform.gameObject);
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+		int count = list.Count;
+		for (int i = 0; i < count; i++)
+		{
+			if (rank > i)
+			{
+				list[i].SetActive(true);
+			}
+			else
+			{
+				list[i].SetActive(false);
+			}
+		}
+	}
+
+	private void SetExpRatio(GameObject go, int expRatio)
+	{
+		List<GameObject> list = new List<GameObject>();
+		GameObject childObject = UTY.GetChildObject(go, "ExpRatio/ValueGroup", false);
+		IEnumerator enumerator = childObject.transform.GetEnumerator();
+		try
+		{
+			while (enumerator.MoveNext())
+			{
+				object obj = enumerator.Current;
+				Transform transform = (Transform)obj;
+				list.Add(transform.gameObject);
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+		int count = list.Count;
+		for (int i = 0; i < count; i++)
+		{
+			if (expRatio > i)
+			{
+				list[i].SetActive(true);
+			}
+			else
+			{
+				list[i].SetActive(false);
+			}
+		}
+	}
+
+	private string GetDaytimeTaskId()
+	{
+		ScheduleCtrl.MaidStatusAndTaskUnit maidStatusAndTaskUnit = null;
+		Dictionary<string, ScheduleCtrl.MaidStatusAndTaskUnit> dicMaidStatusAndTask = this.m_scheduleCtrl.GetDicMaidStatusAndTask();
+		if (dicMaidStatusAndTask.TryGetValue(this.m_scheduleCtrl.GetActiveSlotNo(), out maidStatusAndTaskUnit))
+		{
+			return maidStatusAndTaskUnit.daytimeTaskId;
+		}
+		return null;
+	}
+
+	public void UpdateTaskViewer(string taskId)
+	{
+		this.LoadDaytimeTaskData(taskId);
+		this.SetDaytimeTaskButtonActive(taskId);
+	}
+
+	public void UpdateSelectedMaidTask(string taskId)
+	{
+		this.UpdatePersistentData(int.Parse(taskId));
+		string currentActiveButton = this.m_scheduleMgr.CurrentActiveButton;
+		this.m_scheduleMgr.UpdateMaidStatus();
+		this.CreateTaskViewer(currentActiveButton);
+		this.m_scheduleMgr.CurrentActiveButton = currentActiveButton;
+	}
+
+	private void UpdatePersistentData(int taskId)
+	{
+		this.m_scheduleApi.SetNoonWorkSlot_Safe(ScheduleMgr.ScheduleTime.DayTime, this.m_currentActiveSlotNo, taskId);
+	}
+
+	public void SetDaytimeTaskButtonActive(string taskId)
+	{
+		foreach (KeyValuePair<string, DaytimeTaskCtrl.DaytimeTaskButton> keyValuePair in this.m_dicDaytimeTask)
+		{
+			string key = keyValuePair.Key;
+			DaytimeTaskCtrl.DaytimeTaskButton value = keyValuePair.Value;
+			if (key == taskId)
+			{
+				if (value.enableTask)
+				{
+					value.btnTask.defaultColor = this.m_scheduleCtrl.GetActiveColor();
+				}
+				else
+				{
+					value.btnTask.defaultColor = this.m_scheduleCtrl.GetDisableColor();
+				}
+				value.selectCursor.SetActive(true);
+			}
+			else
+			{
+				value.selectCursor.SetActive(false);
+				value.btnTask.defaultColor = this.m_scheduleCtrl.GetInActiveColor();
+			}
+		}
+	}
+
+	private List<DaytimeTaskCtrl.DaytimeTaskButton> LoadData(int slotNo)
+	{
+		this.m_scheduleApi = this.m_scheduleMgr.GetScheduleApi();
+		this.worksData = this.m_scheduleApi.slot[slotNo].noonWorksData;
+		this.m_currentSlotInfo = this.m_scheduleApi.slot[slotNo];
+		List<DaytimeTaskCtrl.DaytimeTaskButton> list = new List<DaytimeTaskCtrl.DaytimeTaskButton>();
+		foreach (ScheduleBase scheduleBase in this.worksData)
+		{
+			if (scheduleBase.workType == ScheduleType.Training)
+			{
+				ScheduleTraining scheduleTraining = (ScheduleTraining)scheduleBase;
+				if (scheduleTraining.visible)
+				{
+					list.Add(new DaytimeTaskCtrl.DaytimeTaskButton
+					{
+						id = scheduleTraining.id.ToString(),
+						name = scheduleTraining.name,
+						rank = scheduleTraining.lv,
+						expRatio = scheduleTraining.expRatioFrom0To10,
+						txtTaskIcon = scheduleTraining.icon,
+						enableTask = scheduleTraining.enabled,
+						type = scheduleTraining.type
+					});
+				}
+			}
+		}
+		return list;
+	}
+
+	private ScheduleMgr m_scheduleMgr;
+
+	private ScheduleCtrl m_scheduleCtrl;
+
+	private ScheduleScene m_scheduleApi;
+
+	private Slot m_currentSlotInfo;
+
+	private Dictionary<string, DaytimeTaskCtrl.DaytimeTaskButton> m_dicDaytimeTask;
+
+	private List<ScheduleCtrl.VariableItem> m_listMaidParameter;
+
+	private List<ScheduleCtrl.VariableItem> m_listSalonParameter;
+
+	private List<DaytimeTaskCtrl.DaytimeTaskButton> m_listDaytimeTask;
+
+	private List<ScheduleBase> worksData;
+
+	private GameObject m_goDaytimeTaskViewer;
+
+	private GameObject m_goParameterViewer;
+
+	private GameObject m_goRoomViewer;
+
+	private GameObject m_goMaidParameterParent;
+
+	private GameObject m_goSalonParameter;
+
+	private GameObject m_goSalonParameterParent;
+
+	private GameObject m_goTitleOfMaidParameter;
+
+	private GameObject m_goTitleOfSalonParameter;
+
+	private GameObject m_content;
+
+	private UISprite m_spBGOfParameterViewer;
+
+	private UIScrollView m_taskScrollView;
+
+	private UIScrollBar m_taskScrollBar;
+
+	private UILabel m_lStudyRate;
+
+	private UILabel m_lReception;
+
+	private UILabel m_lCare;
+
+	private UILabel m_lLovely;
+
+	private UILabel m_lElegance;
+
+	private UILabel m_lCharm;
+
+	private UILabel m_lTeachRate;
+
+	private UILabel m_lMaidClassExp;
+
+	private UILabel m_lCleanliness;
+
+	private UILabel m_lBrilliant;
+
+	private UILabel m_lIncome;
+
+	private UILabel m_lCurrentStudyRate;
+
+	private UILabel m_lCurrentReception;
+
+	private UILabel m_lCurrentCare;
+
+	private UILabel m_lCurrentLovely;
+
+	private UILabel m_lCurrentElegance;
+
+	private UILabel m_lCurrentCharm;
+
+	private UILabel m_lCurrentTeachRate;
+
+	private UILabel m_lCurrentMaidClassExp;
+
+	private UILabel m_lRoomName;
+
+	private bool m_bInit;
+
+	private float m_contentPosY;
+
+	private int m_heightOfSalonParameterTitle;
+
+	private int m_heightOfMaidParameterTitle;
+
+	private int m_currentActiveSlotNo;
+
+	private const string DAYTIME_TASK_UNIT_PATH = "SceneDaily/Schedule/Prefab/DaytimeTaskUnit";
+
+	private const string NOTHING = "0";
+
+	public class DaytimeTaskButton
+	{
+		public string id;
+
+		public string name;
+
+		public int rank;
+
+		public int expRatio;
+
+		public UIButton btnTask;
+
+		public Texture2D txtTaskIcon;
+
+		public GameObject selectCursor;
+
+		public List<GameObject> listRank;
+
+		public int order;
+
+		public bool enableTask;
+
+		public ScheduleCSVData.TrainingType type;
+	}
+}

+ 184 - 0
Assembly-CSharp/DealQueue.cs

@@ -0,0 +1,184 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+[Serializable]
+public class DealQueue
+{
+	public DealQueue.CardAnimeData nCardAnimData
+	{
+		get
+		{
+			if (this.m_CardAnimeDic.ContainsKey(BjMotionControl.Instance.nMotionName))
+			{
+				return this.m_CardAnimeDic[BjMotionControl.Instance.nMotionName];
+			}
+			return null;
+		}
+	}
+
+	public void Init()
+	{
+		string text = "cardanime_data.nei";
+		if (!GameUty.FileSystem.IsExistentFile(text))
+		{
+			NDebug.Assert("表がありません。" + text, false);
+		}
+		using (AFileBase afileBase = GameUty.FileSystem.FileOpen(text))
+		{
+			using (CsvParser csvParser = new CsvParser())
+			{
+				bool condition = csvParser.Open(afileBase);
+				NDebug.Assert(condition, text + "\nopen failed.");
+				for (int i = 1; i < csvParser.max_cell_y; i++)
+				{
+					if (csvParser.IsCellToExistData(0, i))
+					{
+						string cellAsString = csvParser.GetCellAsString(0, i);
+						for (int j = 0; j < csvParser.max_cell_x; j++)
+						{
+							switch (j)
+							{
+							case 0:
+								this.m_CardAnimeDic.Add(cellAsString, new DealQueue.CardAnimeData());
+								this.m_CardAnimeDic[cellAsString].MotionName = cellAsString;
+								break;
+							case 1:
+								this.m_CardAnimeDic[cellAsString].StartTime = (from ch in csvParser.GetCellAsString(j, i).Split(new char[]
+								{
+									'\n'
+								})
+								select GameUty.MillisecondToSecond(int.Parse(ch))).ToList<float>();
+								break;
+							case 2:
+								this.m_CardAnimeDic[cellAsString].CardSetTime = (from ch in csvParser.GetCellAsString(j, i).Split(new char[]
+								{
+									'\n'
+								})
+								select GameUty.MillisecondToSecond(int.Parse(ch))).ToList<float>();
+								break;
+							case 3:
+								if (csvParser.IsCellToExistData(j, i))
+								{
+									this.m_CardAnimeDic[cellAsString].SwitchTime = (from ch in csvParser.GetCellAsString(j, i).Split(new char[]
+									{
+										'\n'
+									})
+									select GameUty.MillisecondToSecond(int.Parse(ch))).ToList<float>();
+								}
+								break;
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private Card GetCard(GameObject card_obj)
+	{
+		if (!this.m_CardobjPair.ContainsKey(card_obj))
+		{
+			Card component = card_obj.GetComponent<Card>();
+			NDebug.Assert(component, string.Format("オブジェクト:{0}にCardコンポーネントが付いてません", card_obj.name));
+			this.m_CardobjPair.Add(card_obj, component);
+		}
+		return this.m_CardobjPair[card_obj];
+	}
+
+	public void DealCard(GameObject card)
+	{
+		if (this.m_ProcessList.Any((GameObject obj) => !obj))
+		{
+			this.m_ProcessList.Clear();
+		}
+		this.Queue(card);
+		if (this.m_ProcessList.Count == 1)
+		{
+			this.ProcessNow(card);
+		}
+	}
+
+	private void ProcessNow(GameObject card)
+	{
+		card.SetActive(true);
+		this.CardMove(card);
+	}
+
+	private void Queue(GameObject card)
+	{
+		if (this.nCardAnimData != null)
+		{
+			int value = (!BjPlayer.Instance.IsturnEnd) ? this.m_ProcessList.Count : (Dealer.Instance.CardNum - 3);
+			Card card2 = this.GetCard(card);
+			card2.StartTime = this.nCardAnimData.StartTime[Mathf.Clamp(value, 0, this.nCardAnimData.StartTime.Count - 1)];
+			card2.CardSetTime = this.nCardAnimData.CardSetTime[Mathf.Clamp(value, 0, this.nCardAnimData.CardSetTime.Count - 1)];
+			if (this.nCardAnimData.SwitchTime.Count > 0)
+			{
+				card2.SwitchTime = this.nCardAnimData.SwitchTime[Mathf.Clamp(value, 0, this.nCardAnimData.SwitchTime.Count - 1)];
+			}
+		}
+		this.m_ProcessList.Add(card);
+	}
+
+	public void CardOpen(GameObject cardGameObject)
+	{
+		Card card = this.GetCard(cardGameObject);
+		card.InitTime = this.CardTimer;
+		this.DealCard(cardGameObject);
+		card.Open(new Card.FinishedOpen(this.OnFinishedMoving));
+	}
+
+	private void CardMove(GameObject cardGameobject)
+	{
+		Card card = this.GetCard(cardGameobject);
+		if (card.IsMoveend)
+		{
+			return;
+		}
+		card.InitTime = this.CardTimer;
+		card.MoveToPosition(new Card.FinishedMoving(this.OnFinishedMoving));
+	}
+
+	private void OnFinishedMoving(GameObject card)
+	{
+		this.DistributeCard();
+	}
+
+	public void DistributeCard()
+	{
+		if (this.m_ProcessList.Count > 0)
+		{
+			this.m_ProcessList.RemoveAt(0);
+		}
+		if (this.m_ProcessList.Count > 0)
+		{
+			this.ProcessNow(this.m_ProcessList[0]);
+		}
+		else
+		{
+			this.CardTimer = 0f;
+			this.m_CardobjPair.Clear();
+		}
+	}
+
+	public List<GameObject> m_ProcessList = new List<GameObject>();
+
+	private Dictionary<string, DealQueue.CardAnimeData> m_CardAnimeDic = new Dictionary<string, DealQueue.CardAnimeData>();
+
+	public float CardTimer;
+
+	private Dictionary<GameObject, Card> m_CardobjPair = new Dictionary<GameObject, Card>();
+
+	public class CardAnimeData
+	{
+		public string MotionName = string.Empty;
+
+		public List<float> StartTime = new List<float>();
+
+		public List<float> CardSetTime = new List<float>();
+
+		public List<float> SwitchTime = new List<float>();
+	}
+}

+ 233 - 0
Assembly-CSharp/Dealer.cs

@@ -0,0 +1,233 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+public class Dealer : Hand
+{
+	public static Dealer Instance { get; private set; }
+
+	public bool NeedCardMove
+	{
+		get
+		{
+			return !this.m_IsCardMove && this.m_TableCards.Count >= 3;
+		}
+	}
+
+	public Vector3 LastCardPos
+	{
+		get
+		{
+			if (this.m_TableCards.Count == 4)
+			{
+				return base.transform.position;
+			}
+			int num = this.m_TableCards.Count - 1;
+			return this.m_TableCards[num - 1].transform.position + this.m_CardOffset;
+		}
+	}
+
+	private void Awake()
+	{
+		Dealer.Instance = this;
+	}
+
+	private void OnDestroy()
+	{
+		foreach (GameObject gameObject in this.m_TableCards)
+		{
+			if (gameObject)
+			{
+				UnityEngine.Object.DestroyImmediate(gameObject);
+			}
+		}
+	}
+
+	public void CheckSurrender()
+	{
+		this.m_IsForceWin = false;
+	}
+
+	public override void ResetHand()
+	{
+		base.ResetHand();
+		this.m_IsForceWin = false;
+		this.m_IsCardMove = false;
+	}
+
+	public void CardMove()
+	{
+		this.m_IsCardMove = true;
+		base.StartCoroutine(this.CardMoveCoroutine());
+	}
+
+	private IEnumerator CardMoveCoroutine()
+	{
+		yield return null;
+		Func<Vector3, Vector3> maid_local = (Vector3 pos) => BjMotionControl.Instance.TargetMaid.transform.InverseTransformPoint(pos);
+		Vector3 last_hand = maid_local(BjMotionControl.Instance.RightHandPos());
+		bool move_start = false;
+		int lap_count = 1;
+		List<Transform> move_card = new List<Transform>();
+		List<Vector3> orijin_pos = new List<Vector3>();
+		Transform target = this.m_TableCards[this.m_TableCards.Count - lap_count].transform;
+		Vector3 next_pos = target.position;
+		float length = 0f;
+		for (;;)
+		{
+			Vector3 now_hand = maid_local(BjMotionControl.Instance.RightHandPos());
+			Vector3 card_local = (move_card.Count == 0) ? Vector3.zero : maid_local(move_card.Last<Transform>().position);
+			if (!move_start)
+			{
+				if (last_hand.x < now_hand.x)
+				{
+					move_start = true;
+					lap_count++;
+					move_card.Add(target);
+					orijin_pos.Add(target.position);
+					target.SetParent(BjMotionControl.Instance.RightHand, true);
+					target = this.m_TableCards[this.m_TableCards.Count - lap_count].transform;
+					next_pos = target.position + base.transform.TransformDirection(Vector3.right) * this.m_RecetCardX;
+					length = maid_local(next_pos).x - maid_local(move_card.Last<Transform>().position).x;
+					BlackjackGame.Instance.CardSe.Play();
+				}
+			}
+			else
+			{
+				for (int i = 0; i < move_card.Count; i++)
+				{
+					move_card[i].eulerAngles = CardDeck.Instance.FlipupAngle;
+				}
+				if (lap_count <= this.m_TableCards.Count)
+				{
+					float num = 1f - Mathf.Clamp01(Mathf.Max(maid_local(next_pos).x - card_local.x, 0f) / length);
+					for (int j = 0; j < move_card.Count; j++)
+					{
+						Vector3 position = move_card[j].position;
+						position.x = orijin_pos[j].x;
+						position.y = Mathf.Lerp(orijin_pos[j].y, orijin_pos[j].y + 0.001f, num);
+						position.z = Mathf.Min(next_pos.z, position.z);
+						move_card[j].position = position;
+					}
+					if (num == 1f)
+					{
+						lap_count++;
+						for (int k = 0; k < orijin_pos.Count; k++)
+						{
+							orijin_pos[k] = move_card[k].position;
+						}
+						move_card.Add(target);
+						orijin_pos.Add(target.position);
+						target.SetParent(BjMotionControl.Instance.RightHand, true);
+						if (lap_count <= this.m_TableCards.Count)
+						{
+							target = this.m_TableCards[this.m_TableCards.Count - lap_count].transform;
+							next_pos = target.position + base.transform.TransformDirection(Vector3.right) * this.m_RecetCardX;
+							length = maid_local(next_pos).x - card_local.x;
+							BlackjackGame.Instance.CardSe.Play();
+						}
+					}
+				}
+				else
+				{
+					for (int l = 0; l < move_card.Count; l++)
+					{
+						Vector3 position2 = move_card[l].position;
+						position2.x = orijin_pos[l].x;
+						position2.y = orijin_pos[l].y;
+						if (l + 1 < move_card.Count)
+						{
+							position2.z = Mathf.Min(position2.z, move_card[l + 1].position.z - this.m_RecetCardX);
+						}
+						move_card[l].position = position2;
+					}
+					if (now_hand.x > maid_local(base.transform.TransformPoint(Vector3.left * this.m_MaxMoveX)).x)
+					{
+						break;
+					}
+				}
+			}
+			last_hand = now_hand;
+			yield return null;
+		}
+		base.ResetNextPosition();
+		foreach (Transform transform in move_card)
+		{
+			transform.SetParent(base.transform, true);
+		}
+		yield break;
+		yield break;
+	}
+
+	public bool IsEnded()
+	{
+		return base.CurrentScore > 16 || this.m_IsForceWin || this.m_TableCards.Count >= 7;
+	}
+
+	protected override Card.CardState GetCardState()
+	{
+		if (this.m_TableCards.Count == 0 || this.m_TableCards.Count > 1)
+		{
+			return Card.CardState.FlipUp;
+		}
+		return Card.CardState.FlipDown;
+	}
+
+	public bool HasFacedownCard()
+	{
+		return this.m_TableCards.Count == 2 && this.m_HandCardData[this.m_TableCards[1]].CurrentState == Card.CardState.FlipDown;
+	}
+
+	public GameObject GetFacedownCard()
+	{
+		GameObject result = null;
+		if (this.HasFacedownCard())
+		{
+			result = this.m_TableCards[1];
+		}
+		return result;
+	}
+
+	public bool IsNatural21()
+	{
+		bool flag = this.m_HandCardData[this.m_TableCards[0]].CardData.GetValue() + this.m_HandCardData[this.m_TableCards[1]].CardData.GetValue() == 11;
+		bool flag2 = this.m_HandCardData[this.m_TableCards[0]].CardData.CardRank == CardData.Rank.Ace || this.m_HandCardData[this.m_TableCards[1]].CardData.CardRank == CardData.Rank.Ace;
+		return this.m_TableCards.Count == 2 && flag && flag2;
+	}
+
+	public bool MayHaveNatural21()
+	{
+		return this.HasFacedownCard() && this.m_HandCardData[this.m_TableCards[0]].CardData.CardRank == CardData.Rank.Ace;
+	}
+
+	public bool HasBlackjack()
+	{
+		Card card = this.m_HandCardData[this.GetFacedownCard()];
+		return card.CardData.GetValue() == 10;
+	}
+
+	public void SetCardOffset()
+	{
+		this.m_CardOffset = this.m_TableCards[1].transform.position - this.m_TableCards[0].transform.position;
+	}
+
+	private const int m_CardMax = 7;
+
+	private const float m_Cardlap = 0.001f;
+
+	public const int CardRecetNum = 3;
+
+	public const int SetOffsetNum = 5;
+
+	private bool m_IsForceWin;
+
+	private bool m_IsCardMove;
+
+	[SerializeField]
+	private float m_MaxMoveX = 0.5f;
+
+	[SerializeField]
+	private float m_RecetCardX = 0.02f;
+}

+ 116 - 0
Assembly-CSharp/DealerMaid.cs

@@ -0,0 +1,116 @@
+using System;
+using System.IO;
+
+public class DealerMaid
+{
+	public Maid Maid
+	{
+		get
+		{
+			return this.m_DealerMaid;
+		}
+	}
+
+	private void Init(bool is_active)
+	{
+		if (this.m_DealerMaid)
+		{
+			return;
+		}
+		int num = (!is_active) ? GameMain.Instance.CharacterMgr.GetStockMaidCount() : GameMain.Instance.CharacterMgr.GetMaidCount();
+		for (int i = 0; i < num; i++)
+		{
+			Maid maid;
+			if (is_active)
+			{
+				maid = GameMain.Instance.CharacterMgr.GetMaid(i);
+			}
+			else
+			{
+				maid = GameMain.Instance.CharacterMgr.GetStockMaid(i);
+			}
+			if (maid)
+			{
+				bool flag = maid.status.personal.uniqueName == "Muku" && maid.status.mainChara;
+				if (flag)
+				{
+					this.m_DealerMaid = maid;
+					if (is_active)
+					{
+						this.m_ActiveNo = maid.ActiveSlotNo;
+						this.m_StockNo = -1;
+					}
+					else
+					{
+						this.m_ActiveNo = -1;
+						this.m_StockNo = i;
+					}
+					break;
+				}
+			}
+		}
+	}
+
+	public void Init()
+	{
+		if (this.m_DealerMaid)
+		{
+			this.SetDealerMaid(this.m_DealerMaid);
+		}
+		else
+		{
+			this.Init(true);
+			this.Init(false);
+		}
+	}
+
+	public void SetDealerMaid(Maid maid)
+	{
+		this.m_DealerMaid = maid;
+		this.m_ActiveNo = maid.ActiveSlotNo;
+		if (this.m_ActiveNo >= 0)
+		{
+			this.m_StockNo = -1;
+		}
+		else
+		{
+			for (int i = 0; i < GameMain.Instance.CharacterMgr.GetStockMaidCount(); i++)
+			{
+				if (maid == GameMain.Instance.CharacterMgr.GetStockMaid(i))
+				{
+					this.m_StockNo = i;
+					break;
+				}
+			}
+		}
+	}
+
+	public void Serialize(BinaryWriter bw)
+	{
+		this.Init();
+		bw.Write(this.m_ActiveNo);
+		bw.Write(this.m_StockNo);
+	}
+
+	public void Deserialize(BinaryReader br)
+	{
+		this.m_ActiveNo = br.ReadInt32();
+		this.m_StockNo = br.ReadInt32();
+		this.m_DealerMaid = null;
+		if (this.m_ActiveNo >= 0)
+		{
+			this.m_DealerMaid = GameMain.Instance.CharacterMgr.GetMaid(this.m_ActiveNo);
+		}
+		else if (this.m_StockNo >= 0)
+		{
+			this.m_DealerMaid = GameMain.Instance.CharacterMgr.GetStockMaid(this.m_StockNo);
+		}
+		this.Init();
+	}
+
+	private int m_ActiveNo = -1;
+
+	private int m_StockNo = -1;
+
+	private Maid m_DealerMaid;
+}

+ 70 - 0
Assembly-CSharp/DebugVRStartup.cs

@@ -0,0 +1,70 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+public class DebugVRStartup : MonoBehaviour
+{
+	public bool IsReady
+	{
+		get
+		{
+			return DebugVRStartup.m_bReady;
+		}
+	}
+
+	private void Awake()
+	{
+		DebugVRStartup.m_bReady = false;
+		DebugVRStartup.m_bReady = true;
+		this.EnableObjects();
+	}
+
+	private void EnableObjects()
+	{
+		if (this.m_bForceCamPos)
+		{
+			GameMain.Instance.MainCamera.SetPos(new Vector3(0f, 1.7f, 0f));
+		}
+		if (this.m_bForceFadeIn)
+		{
+			GameMain.Instance.MainCamera.FadeIn(1f, false, null, true, true, default(Color));
+		}
+		if (this.m_goEnableObject != null)
+		{
+			this.m_goEnableObject.SetActive(true);
+		}
+		for (int i = 0; i < this.m_aryEnableObjects.Length; i++)
+		{
+			this.m_aryEnableObjects[i].SetActive(true);
+		}
+	}
+
+	private IEnumerator CoWaitOvrLoad()
+	{
+		Debug.Log(Time.frameCount);
+		float fTimeBef = Time.realtimeSinceStartup;
+		while (GameMain.Instance.OvrMgr == null || !GameMain.Instance.IsVRDeviceReady)
+		{
+			yield return null;
+			if (Time.realtimeSinceStartup - fTimeBef > 6f)
+			{
+				NDebug.Assert("DebugVRStartup Time Out!:VRデバイスを認識できませんでした。", false);
+			}
+		}
+		DebugVRStartup.m_bReady = true;
+		this.EnableObjects();
+		yield break;
+	}
+
+	public GameObject m_goEnableObject;
+
+	public GameObject[] m_aryEnableObjects;
+
+	[Header("強制フェードイン(リリース時も有効)")]
+	public bool m_bForceFadeIn;
+
+	[Header("強制カメラ位置 0.0f, 1.7f, 0.0f (リリース時も有効)")]
+	public bool m_bForceCamPos = true;
+
+	public static bool m_bReady;
+}

+ 98 - 0
Assembly-CSharp/Debug_mgr.cs

@@ -0,0 +1,98 @@
+using System;
+using com.workman.cm3d2.scene.dailyEtc;
+using Schedule;
+using UnityEngine;
+
+public class Debug_mgr : MonoBehaviour
+{
+	private void Start()
+	{
+		GameObject f_goParent = GameObject.Find("/UI Root");
+		this.mgr = UTY.GetChildObject(f_goParent, "Manager", false).GetComponent<SceneMgr>();
+	}
+
+	public void OpenDaytimePanel()
+	{
+		ScheduleAPI.DayStartManage();
+		int[] facilityPowerUpMaterialIDArray = FacilityDataTable.GetFacilityPowerUpMaterialIDArray();
+		foreach (int materialID in facilityPowerUpMaterialIDArray)
+		{
+			GameMain.Instance.FacilityMgr.SetHavePowerUpMaterial(materialID, true);
+		}
+		this.mgr.GetManager<DailyMgr>().OpenDaytimePanel();
+	}
+
+	public void OpenNightPanel()
+	{
+		this.mgr.GetManager<DailyMgr>().OpenNightPanel();
+	}
+
+	public void CloseDailyPanel()
+	{
+		this.mgr.GetManager<DailyMgr>().CloseDailyPanel();
+	}
+
+	public void OpenResultDaytimePanel()
+	{
+		this.mgr.GetManager<ResultWorkMgr>().OpenResultDaytimePanel();
+	}
+
+	public void OpenResultNightPanel()
+	{
+		this.mgr.GetManager<ResultWorkMgr>().OpenResultNightPanel();
+	}
+
+	public void OpenResultIncomePanel()
+	{
+		this.mgr.GetManager<ResultIncomeMgr>().OpenResultIncomePanel();
+	}
+
+	public void OpenStatusPanel()
+	{
+	}
+
+	public void OpenUserEditPanel()
+	{
+		this.mgr.GetManager<UserEditMgr>().OpenUserEditPanel();
+	}
+
+	public void OpenStartDailyPanel()
+	{
+		this.mgr.GetManager<StartDailyMgr>().OpenStartDailyPanel();
+	}
+
+	public void OpenMaidExaminationPanel()
+	{
+		this.mgr.GetManager<MaidExaminationMgr>().OpenMaidExaminationPanel(null, null, null);
+	}
+
+	public void CloseMaidExaminationPanel()
+	{
+		this.mgr.GetManager<MaidExaminationMgr>().CloseMaidExaminationPanel();
+	}
+
+	public void OpenStaffRollPanel()
+	{
+		this.mgr.GetManager<StaffRollMgr>().OpenStaffRollPanel();
+	}
+
+	public void OpenStatusPanelForChuBLip()
+	{
+	}
+
+	public void UpdateStatusPanelForChuBLip()
+	{
+	}
+
+	public void OpenProfilePanelForChuBLip()
+	{
+	}
+
+	public void CloseProfilePanelForChuBLip()
+	{
+	}
+
+	private const string uiRootPath = "/UI Root";
+
+	private SceneMgr mgr;
+}

+ 223 - 0
Assembly-CSharp/DefValues.cs

@@ -0,0 +1,223 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class DefValues : MonoBehaviour
+{
+	public static void SetUP()
+	{
+		DefValues.dicDefVal = new Dictionary<string, int>();
+		foreach (string sss in DefValues.DefVal)
+		{
+			string[] stringList = UTY.GetStringList(sss);
+			string text = stringList[0];
+			int value = int.Parse(stringList[1]);
+			if (DefValues.dicDefVal.ContainsKey(text))
+			{
+				Debug.LogError("DefVal 二回定義しました -> " + text);
+			}
+			DefValues.dicDefVal[text] = value;
+		}
+		foreach (string sss2 in DefValues.WindowVal)
+		{
+			string[] stringList2 = UTY.GetStringList(sss2);
+			string key = stringList2[0];
+			DefValues.dicWindowVal[key] = 0;
+		}
+	}
+
+	public static string[] WindowVal = new string[]
+	{
+		"メイド長",
+		"カス野",
+		"カス美",
+		"メイ野",
+		"メイ子",
+		"タム野",
+		"タム代",
+		"カスミン",
+		"メイコン",
+		"タムヨン",
+		"俺",
+		"モノローグ",
+		"別名",
+		"叔母",
+		"オーナーメイド",
+		"オーナー",
+		"織田",
+		"一郎",
+		"イチロー",
+		"主人公",
+		"メイド4呼称",
+		"メイド4苗字",
+		"メイド4",
+		"豊臣",
+		"二郎",
+		"ジロー",
+		"徳川",
+		"三郎",
+		"サブロー"
+	};
+
+	public static string[] DefVal = new string[]
+	{
+		"カス美 0",
+		"メイド長 1",
+		"メイ子 2",
+		"タム代 3",
+		"メイド4 4",
+		"メイド5 5",
+		"メイド6 6",
+		"メイド7 7",
+		"メイド8 8",
+		"メイド9 9",
+		"俺 10",
+		"ジロー 11",
+		"サブロー 12",
+		"オーナーメイド 13",
+		"叔母 14",
+		"オーナー 15",
+		"カス野 0",
+		"メイ野 2",
+		"タム野 3",
+		"カスミン 0",
+		"メイコン 2",
+		"タムヨン 3",
+		"メイド4苗字 4",
+		"メイド4呼称 4",
+		"助さん 11",
+		"格さん 12",
+		"null 0",
+		"空 0",
+		"何もない 0",
+		"解除 0",
+		"モノローグ 10",
+		"別名 11",
+		"小 25",
+		"中 50",
+		"大 100",
+		"女  0",
+		"男  1",
+		"いいえ  0",
+		"はい  1",
+		"無効  0",
+		"有効  1",
+		"不許可 0",
+		"許可 1",
+		"オフ  0",
+		"オン  1",
+		"off  0",
+		"on  1",
+		"no  0",
+		"yes  1",
+		"false  0",
+		"true  1",
+		"ツンデレ   0",
+		"クーデレ\t1",
+		"甘えん坊   2",
+		"純真       3",
+		"通常 0",
+		"前に行かないようにする 1",
+		"恋人属性 1",
+		"奉仕属性 2",
+		"被虐属性 4",
+		"羞恥属性 8",
+		"魅力属性 16",
+		"性具属性 32",
+		"安心属性 64",
+		"興奮プレイ  0",
+		"無関心プレイ  1",
+		"嫌いプレイ  2",
+		"安心プレイ  3",
+		"興奮から興奮     0",
+		"興奮から無関心   1",
+		"興奮から嫌い     2",
+		"興奮から安心     3",
+		"無関心から興奮     4",
+		"無関心から無関心   5",
+		"無関心から嫌い     6",
+		"無関心から安心     7",
+		"嫌いから興奮     8",
+		"嫌いから無関心   9",
+		"嫌いから嫌い     10",
+		"嫌いから安心     11",
+		"安心から興奮     12",
+		"安心から無関心   13",
+		"安心から嫌い     14",
+		"安心から安心     15",
+		"無し 0",
+		"髪 1",
+		"耳 2",
+		"舌 4",
+		"首 8",
+		"胸 16",
+		"腹 32",
+		"背中 64",
+		"上膊部 128",
+		"掌 256",
+		"お尻 512",
+		"クリトリス 1024",
+		"局部 2048",
+		"アナル 4096",
+		"太もも 8192",
+		"脚 16384",
+		"日曜日 0",
+		"月曜日 1",
+		"火曜日 2",
+		"水曜日 3",
+		"木曜日 4",
+		"金曜日 5",
+		"土曜日 6",
+		"ユーザー属性ブルジョアパック    1",
+		"ユーザー属性スターターパック    2",
+		"TestScene1 1",
+		"オーダー 2",
+		"サロンホール 3",
+		"サロンホール演出1 4",
+		"サロン中庭・夜 5",
+		"ドレスルーム 6",
+		"ベッドルーム 7",
+		"玄関 8",
+		"自宅マイルーム 9",
+		"自宅玄関外 10",
+		"自宅玄関内 11",
+		"自宅執務室 12",
+		"執務室 13",
+		"執務室・夜 14",
+		"叔母ハウス 15",
+		"書斎・昼 16",
+		"天真爛漫雀の往来 17",
+		"箱部屋 18",
+		"ドレスルーム夜 19",
+		"ドレスルーム昼 20",
+		"ドレスルーム夜鏡 21",
+		"ドレスルーム昼鏡 22",
+		"サロンホールエロ 23",
+		"ベッドルームエロ 24",
+		"書斎・昼エロ 25",
+		"スクショ背景 26",
+		"自宅ダイニング 27",
+		"ドレスルーム鏡 28",
+		"サロンホール演出2 29",
+		"サロン玄関 30",
+		"サロンロビー 31",
+		"サロン談話室 32",
+		"サロンホール舞台袖 33",
+		"プレイルームソープ 34",
+		"野外ステージ 35",
+		"自宅地下室 36",
+		"野外ステージ通常 37",
+		"プレイルーム電車 38",
+		"プレイルーム教室 39",
+		"サロン中庭・夜エロ 40",
+		"自宅マイルーム夜 41",
+		"品評会会場 42",
+		"プレイルーム教室2 43",
+		"野外ステージ・メイクミー 44",
+		"END   999"
+	};
+
+	public static Dictionary<string, int> dicDefVal = new Dictionary<string, int>();
+
+	public static Dictionary<string, int> dicWindowVal = new Dictionary<string, int>();
+}

+ 187 - 0
Assembly-CSharp/DescResultTraining.cs

@@ -0,0 +1,187 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class DescResultTraining : DescResulteBase
+{
+	public override void Init(ResultWorkMgr resultWorkMgr, ResultWorkCtrl ctrl, GameObject goPanel)
+	{
+		base.Init(resultWorkMgr, ctrl, goPanel);
+		this.m_lMaidClassExp = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "MaidClassExp");
+		this.m_lMaidClassLv = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "MaidClassLevel");
+		this.m_listMaidItem.Add(this.m_lMaidClassExp.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lMaidClassLv.GetVariableItem());
+		this.m_listAnimationTarget.Add(this.m_lMaidClassExp.ValueObj);
+		this.m_listAnimationTarget.Add(this.m_lMaidClassLv.ValueObj);
+		this.SettingSalon();
+		this.m_goCommuBonus = UTY.GetChildObject(this.m_goMaidStatus, "CommuBonus", false);
+		this.m_commuBonusIcon = this.m_goCommuBonus.GetComponent<UITexture>();
+		this.m_goCommuBonus.SetActive(false);
+		this.m_goPerfectSuccess = UTY.GetChildObject(this.m_goMaidStatus, "PerfectSuccess", false);
+		this.m_perfectSuccessIcon = this.m_goPerfectSuccess.GetComponent<UITexture>();
+		this.m_goCommuBonus.SetActive(false);
+		base.gameObject.SetActive(false);
+	}
+
+	private void SettingSalon()
+	{
+		this.m_goSalonStatus = UTY.GetChildObject(this.viewPanel, "SalonStatus", false);
+		this.m_goSalonParameterParent = UTY.GetChildObject(this.m_goSalonStatus, "ParameterParent", false);
+		this.m_lWorkingFunds = new DescResulteBase.ParamSet(this.m_goSalonParameterParent, "WorkingFunds");
+		this.m_listSalonStatus = new List<ScheduleCtrl.VariableItem>
+		{
+			this.m_lWorkingFunds.GetVariableItem()
+		};
+		this.m_spBGOfSalonParameterViewer = UTY.GetChildObject(this.m_goSalonStatus, "BG", false).GetComponent<UISprite>();
+		this.m_heightOfSalonParameterTitle = UTY.GetChildObject(this.m_goSalonStatus, "Title", false).GetComponent<UISprite>().height;
+	}
+
+	public override void UpdateView(string buttonName)
+	{
+		this.m_resultWorkCtrl.SetSelectedRowActive(buttonName);
+		int slotNoByButtonName = ScheduleCtrl.GetSlotNoByButtonName(buttonName);
+		ResultWorkCtrl.ResultWork resultWorkBySlotNo = this.m_resultWorkCtrl.GetResultWorkBySlotNo(slotNoByButtonName);
+		if (resultWorkBySlotNo.hasResult)
+		{
+			this.SetAcquiredSalonStatusPoints(slotNoByButtonName);
+			this.SetAcquiredMaidStatusPoints(slotNoByButtonName);
+		}
+		else
+		{
+			Debug.LogWarning(string.Format("スロットNo={0}には仕事の結果データが存在しません。", slotNoByButtonName));
+		}
+		base.ActivePanel(true);
+		this.ExamineMaidStatusDisplayItem();
+	}
+
+	protected override void UpdateAddValue(ResultWorkCtrl.UpperMaidStatus maidStatus)
+	{
+		base.UpdateAddValue(maidStatus);
+		this.m_lMaidClassExp.AddValueText = base.Sign(maidStatus.maidClassExp);
+		this.m_lMaidClassLv.AddValueText = base.Sign(maidStatus.maidClassLevel);
+	}
+
+	public void SetAcquiredSalonStatusPoints(int slotNo)
+	{
+		ResultWorkCtrl.UpperMaidStatus maidStatusBySlotNo = base.GetMaidStatusBySlotNo(slotNo);
+		if (maidStatusBySlotNo != null)
+		{
+			this.m_lWorkingFunds.AddValueText = base.Sign(maidStatusBySlotNo.workingFunds, "#,0");
+			bool active = this.ExamineSalonStatusDisplayItem();
+			this.m_goSalonStatus.SetActive(active);
+		}
+		else
+		{
+			this.m_goSalonStatus.SetActive(false);
+		}
+	}
+
+	public void SetAcquiredMaidStatusPoints(int slotNo)
+	{
+		ResultWorkCtrl.UpperMaidStatus maidStatusBySlotNo = base.GetMaidStatusBySlotNo(slotNo);
+		if (maidStatusBySlotNo != null)
+		{
+			this.SetMaidStatusValue(maidStatusBySlotNo);
+			this.SetMaxMaidClassLevelIcon(slotNo, maidStatusBySlotNo.maidLvCompletion);
+			this.m_goCommuBonus.SetActive(false);
+			if (maidStatusBySlotNo.givenPerfectSucces)
+			{
+				this.m_goPerfectSuccess.SetActive(true);
+				this.m_perfectSuccessIcon.mainTexture = maidStatusBySlotNo.perfectSuccessIcon;
+			}
+			else
+			{
+				this.m_goPerfectSuccess.SetActive(false);
+				this.m_perfectSuccessIcon.mainTexture = null;
+			}
+			if (maidStatusBySlotNo.givenCommuBonus)
+			{
+				this.m_goCommuBonus.SetActive(true);
+				this.m_commuBonusIcon.mainTexture = maidStatusBySlotNo.bonusIcon;
+				base.TweenAnimation(this.m_playedAnimation);
+			}
+			else
+			{
+				this.m_commuBonusIcon.mainTexture = null;
+				this.m_goCommuBonus.SetActive(false);
+				base.TweenAnimation(false);
+			}
+			this.m_goMaidStatus.SetActive(true);
+		}
+		else
+		{
+			this.m_goMaidStatus.SetActive(false);
+		}
+	}
+
+	private void SetMaxMaidClassLevelIcon(int slotNo, bool reachMaxLevel)
+	{
+		string key = slotNo.ToString();
+		if (this.m_dicResultWork.ContainsKey(key))
+		{
+			ResultWorkCtrl.ResultWork resultWork = this.m_dicResultWork[key];
+			resultWork.goIconMaidClassMax.SetActive(reachMaxLevel);
+		}
+		else
+		{
+			Debug.LogError(string.Format("不適切なスロットNoが選択されました。選択されたスロットNo=", slotNo + 1));
+		}
+	}
+
+	private void SetMaidStatusValue(ResultWorkCtrl.UpperMaidStatus maidStatus)
+	{
+		this.UpdateAddValue(maidStatus);
+	}
+
+	private bool ExamineSalonStatusDisplayItem()
+	{
+		int num = ScheduleCtrl.SetActiveExceptForNothing(this.m_listSalonStatus, "0");
+		if (num == 0)
+		{
+			return false;
+		}
+		BaseCreateViewerCtrl.Reposition(this.m_goSalonParameterParent);
+		this.m_resultWorkCtrl.AdjustParameterViewer(this.m_goSalonParameterParent, num, this.m_heightOfSalonParameterTitle, this.m_spBGOfSalonParameterViewer);
+		return true;
+	}
+
+	private void ExamineMaidStatusDisplayItem()
+	{
+		int num = ScheduleCtrl.SetActiveExceptForNothing(this.m_listMaidItem, "0");
+		if (num == 0)
+		{
+			this.m_spBGOfMaidParameterViewer.height = 133;
+			return;
+		}
+		BaseCreateViewerCtrl.Reposition(this.m_goMaidParameterParent);
+		this.m_resultWorkCtrl.AdjustParameterViewer(this.m_goMaidParameterParent, num, this.m_heightOfMaidParameterTitle, this.m_spBGOfMaidParameterViewer);
+	}
+
+	private Dictionary<int, GameObject> m_dicMaxLevelMaidClassIcon;
+
+	private List<ScheduleCtrl.VariableItem> m_listSalonStatus;
+
+	private GameObject m_goSalonStatus;
+
+	private GameObject m_goSalonParameterParent;
+
+	private GameObject m_goCommuBonus;
+
+	private GameObject m_goPerfectSuccess;
+
+	private UITexture m_commuBonusIcon;
+
+	private UITexture m_perfectSuccessIcon;
+
+	private UISprite m_spBGOfSalonParameterViewer;
+
+	private int m_heightOfSalonParameterTitle;
+
+	private const int NO_PARAM_HEIGHT = 133;
+
+	protected DescResulteBase.ParamSet m_lMaidClassLv;
+
+	protected DescResulteBase.ParamSet m_lMaidClassExp;
+
+	protected DescResulteBase.ParamSet m_lWorkingFunds;
+}

+ 10 - 0
Assembly-CSharp/DescResultWork.cs

@@ -0,0 +1,10 @@
+using System;
+using UnityEngine;
+
+public class DescResultWork : DescResultTraining
+{
+	public override void Init(ResultWorkMgr resultWorkMgr, ResultWorkCtrl ctrl, GameObject goPanel)
+	{
+		base.Init(resultWorkMgr, ctrl, goPanel);
+	}
+}

+ 143 - 0
Assembly-CSharp/DescResultYotogi.cs

@@ -0,0 +1,143 @@
+using System;
+using UnityEngine;
+
+public class DescResultYotogi : DescResulteBase
+{
+	public override void Init(ResultWorkMgr resultWorkMgr, ResultWorkCtrl ctrl, GameObject goPanel)
+	{
+		base.Init(resultWorkMgr, ctrl, goPanel);
+		GameObject gameObject = base.gameObject;
+		this.m_goResultYotogi = UTY.GetChildObject(gameObject, "MaidStatus", false);
+		this.m_lHousi = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "Housi");
+		this.m_lInran = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "Inran");
+		this.m_lMValue = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "MValue");
+		this.m_lHentai = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "Hentai");
+		this.m_lYotogiClassLevel = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "YotogiClassLevel");
+		this.m_lYotogiClassExp = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "YotogiClassExp");
+		this.m_lYotogiPlayCount = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "YotogiPlayCount");
+		this.m_lOthersPlayCount = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "OthersPlayCount");
+		this.m_goIndividualEvaluation = UTY.GetChildObject(gameObject, "IndividualEvaluation", false);
+		this.m_lAcquisitionOfClientEvaluation = new DescResulteBase.ParamSet(this.m_goIndividualEvaluation, "AcquisitionOfClientEvaluation");
+		this.m_lAcquisitionOfWorkingFunds = new DescResulteBase.ParamSet(this.m_goIndividualEvaluation, "AcquisitionOfWorkingFunds");
+		this.m_listMaidItem.Add(this.m_lHousi.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lInran.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lMValue.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lHentai.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lYotogiClassLevel.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lYotogiClassExp.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lYotogiPlayCount.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lOthersPlayCount.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lAcquisitionOfClientEvaluation.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lAcquisitionOfWorkingFunds.GetVariableItem());
+		this.m_spBGOfParameterViewer = UTY.GetChildObject(this.m_goResultYotogi, "BG", false).GetComponent<UISprite>();
+		GameObject childObject = UTY.GetChildObject(this.m_goResultYotogi, "Title", false);
+		this.m_heightOfMaidParameterTitle = childObject.GetComponent<UISprite>().height;
+		base.gameObject.SetActive(false);
+	}
+
+	public override void UpdateView(string buttonName)
+	{
+		this.m_resultWorkCtrl.SetSelectedRowActive(buttonName);
+		int slotNoByButtonName = ScheduleCtrl.GetSlotNoByButtonName(buttonName);
+		ResultWorkCtrl.ResultWork resultWorkBySlotNo = this.m_resultWorkCtrl.GetResultWorkBySlotNo(slotNoByButtonName);
+		if (resultWorkBySlotNo.hasResult)
+		{
+			this.LoadResultNightStatus(slotNoByButtonName);
+		}
+		else
+		{
+			Debug.LogWarning(string.Format("スロットNo={0}には仕事の結果データが存在しません。", slotNoByButtonName));
+		}
+		base.ActivePanel(true);
+	}
+
+	private void LoadResultNightStatus(int slotNo)
+	{
+		this.SetStatusViewer(true);
+		ResultWorkCtrl.UpperMaidStatus maidStatusBySlotNo = base.GetMaidStatusBySlotNo(slotNo);
+		if (maidStatusBySlotNo != null)
+		{
+			this.SetMaxYotogiClassLevelIcon(slotNo, maidStatusBySlotNo.yotogiLvCompletion);
+			this.UpdateAddValue(maidStatusBySlotNo);
+			bool active = this.ExamineDisplayItem();
+			this.m_goResultYotogi.SetActive(active);
+		}
+		else
+		{
+			this.SetStatusViewer(false);
+		}
+	}
+
+	protected override void UpdateAddValue(ResultWorkCtrl.UpperMaidStatus maidStatus)
+	{
+		base.UpdateAddValue(maidStatus);
+		this.m_lAcquisitionOfClientEvaluation.AddValueText = base.Sign(maidStatus.evaluation);
+		this.m_lAcquisitionOfWorkingFunds.AddValueText = base.Sign(maidStatus.income, "#,0");
+		this.m_lInran.AddValueText = base.Sign(maidStatus.inyoku);
+		this.m_lMValue.AddValueText = base.Sign(maidStatus.m_value);
+		this.m_lHentai.AddValueText = base.Sign(maidStatus.hentai);
+		this.m_lHousi.AddValueText = base.Sign(maidStatus.housi);
+		this.m_lYotogiClassLevel.AddValueText = base.Sign(maidStatus.yotogiClassLevel);
+		this.m_lYotogiClassExp.AddValueText = base.Sign(maidStatus.yotogiClassExp);
+		this.m_lYotogiPlayCount.AddValueText = base.Sign(maidStatus.yotogiPlayCount);
+		this.m_lOthersPlayCount.AddValueText = base.Sign(maidStatus.othersPlayCount);
+	}
+
+	private void SetMaxYotogiClassLevelIcon(int slotNo, bool reachMaxLevel)
+	{
+		string key = slotNo.ToString();
+		if (this.m_dicResultWork.ContainsKey(key))
+		{
+			ResultWorkCtrl.ResultWork resultWork = this.m_dicResultWork[key];
+			resultWork.goIconYotogiClassMax.SetActive(reachMaxLevel);
+		}
+		else
+		{
+			Debug.LogError(string.Format("不適切なスロットNoが選択されました。選択されたスロットNo=", slotNo + 1));
+		}
+	}
+
+	private bool ExamineDisplayItem()
+	{
+		int num = ScheduleCtrl.SetActiveExceptForNothing(this.m_listMaidItem, "0");
+		if (num == 0)
+		{
+			return false;
+		}
+		BaseCreateViewerCtrl.Reposition(this.m_goMaidParameterParent);
+		this.m_resultWorkCtrl.AdjustParameterViewer(this.m_goMaidParameterParent, num, this.m_heightOfMaidParameterTitle, this.m_spBGOfParameterViewer);
+		return true;
+	}
+
+	private void SetStatusViewer(bool active)
+	{
+		this.m_goIndividualEvaluation.SetActive(active);
+		this.m_goResultYotogi.SetActive(active);
+	}
+
+	private GameObject m_goIndividualEvaluation;
+
+	private GameObject m_goResultYotogi;
+
+	private UISprite m_spBGOfParameterViewer;
+
+	private DescResulteBase.ParamSet m_lHousi;
+
+	private DescResulteBase.ParamSet m_lInran;
+
+	private DescResulteBase.ParamSet m_lMValue;
+
+	private DescResulteBase.ParamSet m_lHentai;
+
+	private DescResulteBase.ParamSet m_lYotogiClassLevel;
+
+	private DescResulteBase.ParamSet m_lYotogiClassExp;
+
+	private DescResulteBase.ParamSet m_lYotogiPlayCount;
+
+	private DescResulteBase.ParamSet m_lOthersPlayCount;
+
+	private DescResulteBase.ParamSet m_lAcquisitionOfClientEvaluation;
+
+	private DescResulteBase.ParamSet m_lAcquisitionOfWorkingFunds;
+}

+ 258 - 0
Assembly-CSharp/DescResulteBase.cs

@@ -0,0 +1,258 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class DescResulteBase : MonoBehaviour
+{
+	public virtual void Init(ResultWorkMgr resultWorkMgr, ResultWorkCtrl ctrl, GameObject goPanel)
+	{
+		this.m_resultWorkMgr = resultWorkMgr;
+		this.m_resultWorkCtrl = ctrl;
+		this.m_goPanel = goPanel;
+		this.viewPanel = base.gameObject;
+		this.m_goMaidStatus = UTY.GetChildObject(this.viewPanel, "MaidStatus", false);
+		this.m_goMaidParameterParent = UTY.GetChildObject(this.m_goMaidStatus, "ParameterParent", false);
+		this.m_spBGOfMaidParameterViewer = UTY.GetChildObject(this.m_goMaidStatus, "BG", false).GetComponent<UISprite>();
+		this.m_heightOfMaidParameterTitle = UTY.GetChildObject(this.m_goMaidStatus, "Title", false).GetComponent<UISprite>().height;
+		this.m_lStudyRate = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "StudyRate");
+		this.m_lReception = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "Reception");
+		this.m_lCare = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "Care");
+		this.m_lLovely = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "Lovely");
+		this.m_lElegance = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "Elegance");
+		this.m_lCharm = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "Charm");
+		this.m_lTeachRate = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "TeachRate");
+		this.m_lCooking = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "Cooking");
+		this.m_lVocal = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "Vocal");
+		this.m_lDance = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "Dance");
+		this.m_lAppealPoint = new DescResulteBase.ParamSet(this.m_goMaidParameterParent, "AP");
+		this.m_listMaidItem = new List<ScheduleCtrl.VariableItem>();
+		this.m_listMaidItem.Add(this.m_lStudyRate.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lReception.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lCare.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lLovely.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lElegance.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lCharm.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lTeachRate.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lCooking.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lVocal.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lDance.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lAppealPoint.GetVariableItem());
+		this.m_listAnimationTarget = new List<GameObject>();
+		this.m_listAnimationTarget.Add(this.m_lStudyRate.ValueObj);
+		this.m_listAnimationTarget.Add(this.m_lReception.ValueObj);
+		this.m_listAnimationTarget.Add(this.m_lCare.ValueObj);
+		this.m_listAnimationTarget.Add(this.m_lLovely.ValueObj);
+		this.m_listAnimationTarget.Add(this.m_lElegance.ValueObj);
+		this.m_listAnimationTarget.Add(this.m_lCharm.ValueObj);
+		this.m_listAnimationTarget.Add(this.m_lTeachRate.ValueObj);
+		this.m_listAnimationTarget.Add(this.m_lCooking.ValueObj);
+		this.m_listAnimationTarget.Add(this.m_lVocal.ValueObj);
+		this.m_listAnimationTarget.Add(this.m_lDance.ValueObj);
+		this.m_listAnimationTarget.Add(this.m_lAppealPoint.ValueObj);
+	}
+
+	public virtual void UpdateView(string buttonName)
+	{
+	}
+
+	protected virtual void UpdateAddValue(ResultWorkCtrl.UpperMaidStatus maidStatus)
+	{
+		this.m_lStudyRate.AddValueText = this.Sign(maidStatus.studyRate);
+		this.m_lReception.AddValueText = this.Sign(maidStatus.reception);
+		this.m_lCare.AddValueText = this.Sign(maidStatus.care);
+		this.m_lLovely.AddValueText = this.Sign(maidStatus.lovely);
+		this.m_lElegance.AddValueText = this.Sign(maidStatus.elegance);
+		this.m_lCharm.AddValueText = this.Sign(maidStatus.charm);
+		this.m_lTeachRate.AddValueText = this.Sign(maidStatus.teach);
+		this.m_lCooking.AddValueText = this.Sign(maidStatus.cooking);
+		this.m_lVocal.AddValueText = this.Sign(maidStatus.vocal);
+		this.m_lDance.AddValueText = this.Sign(maidStatus.dance);
+		this.m_lAppealPoint.AddValueText = this.Sign(maidStatus.appealPoint);
+	}
+
+	public void ActivePanel(bool active)
+	{
+		base.gameObject.SetActive(active);
+	}
+
+	public void SetResultWorkDic(Dictionary<string, ResultWorkCtrl.ResultWork> dicResultWork)
+	{
+		this.m_dicResultWork = dicResultWork;
+	}
+
+	protected ResultWorkCtrl.UpperMaidStatus GetMaidStatusBySlotNo(int slotNo)
+	{
+		ResultWorkCtrl.ResultWork resultWorkBySlotNo = this.m_resultWorkCtrl.GetResultWorkBySlotNo(slotNo);
+		if (resultWorkBySlotNo.upperMaidStatus != null)
+		{
+			return resultWorkBySlotNo.upperMaidStatus;
+		}
+		return null;
+	}
+
+	protected string Sign(int input)
+	{
+		if (input > 0)
+		{
+			return "+" + input.ToString();
+		}
+		return input.ToString();
+	}
+
+	protected string Sign(long input, string format)
+	{
+		if (input > 0L)
+		{
+			return "+" + input.ToString(format);
+		}
+		return input.ToString(format);
+	}
+
+	protected void TweenAnimation(bool play)
+	{
+		foreach (GameObject gameObject in this.m_listAnimationTarget)
+		{
+			if (!(gameObject == null))
+			{
+				GameObject gameObject2 = gameObject.transform.parent.gameObject;
+				if (gameObject2.activeSelf)
+				{
+					TweenScale tweenScale = gameObject.GetComponent<TweenScale>();
+					if (tweenScale)
+					{
+						UnityEngine.Object.Destroy(tweenScale);
+					}
+					tweenScale = gameObject.AddComponent<TweenScale>();
+					TweenColor tweenColor = gameObject.GetComponent<TweenColor>();
+					if (tweenColor)
+					{
+						UnityEngine.Object.Destroy(tweenColor);
+					}
+					tweenColor = gameObject.AddComponent<TweenColor>();
+					if (play)
+					{
+						tweenScale.from = Vector2.one;
+						tweenScale.to = Vector2.one * this.scaleSizeCommuBonus;
+						tweenScale.duration = this.scaleDurationCommuBonus;
+						EventDelegate.Set(tweenScale.onFinished, new EventDelegate.Callback(tweenScale.PlayReverse));
+						tweenScale.PlayForward();
+						tweenColor.from = Color.white;
+						tweenColor.to = Color.yellow;
+						tweenColor.duration = this.colorDurationCommuBonus;
+						EventDelegate.Set(tweenColor.onFinished, new EventDelegate.Callback(tweenColor.PlayReverse));
+						tweenColor.PlayForward();
+					}
+					else
+					{
+						tweenScale.ResetToBeginning();
+						tweenColor.ResetToBeginning();
+					}
+				}
+			}
+		}
+	}
+
+	[SerializeField]
+	protected float scaleSizeCommuBonus = 1.3f;
+
+	[SerializeField]
+	protected float scaleDurationCommuBonus = 0.5f;
+
+	[SerializeField]
+	protected float colorDurationCommuBonus = 0.5f;
+
+	public bool m_playedAnimation;
+
+	protected ResultWorkMgr m_resultWorkMgr;
+
+	protected ResultWorkCtrl m_resultWorkCtrl;
+
+	protected GameObject m_goPanel;
+
+	protected GameObject viewPanel;
+
+	protected GameObject m_goMaidStatus;
+
+	protected GameObject m_goMaidParameterParent;
+
+	protected UISprite m_spBGOfMaidParameterViewer;
+
+	protected List<ScheduleCtrl.VariableItem> m_listMaidItem;
+
+	protected List<GameObject> m_listAnimationTarget;
+
+	protected int m_heightOfMaidParameterTitle;
+
+	protected bool m_bInit;
+
+	protected Dictionary<string, ResultWorkCtrl.ResultWork> m_dicResultWork;
+
+	protected DescResulteBase.ParamSet m_lCare;
+
+	protected DescResulteBase.ParamSet m_lReception;
+
+	protected DescResulteBase.ParamSet m_lStudyRate;
+
+	protected DescResulteBase.ParamSet m_lTeachRate;
+
+	protected DescResulteBase.ParamSet m_lLovely;
+
+	protected DescResulteBase.ParamSet m_lElegance;
+
+	protected DescResulteBase.ParamSet m_lCharm;
+
+	protected DescResulteBase.ParamSet m_lCooking;
+
+	protected DescResulteBase.ParamSet m_lVocal;
+
+	protected DescResulteBase.ParamSet m_lDance;
+
+	protected DescResulteBase.ParamSet m_lAppealPoint;
+
+	public class ParamSet
+	{
+		public ParamSet(GameObject parent, string childObjName)
+		{
+			this.baseObj = UTY.GetChildObject(parent, childObjName, true);
+			if (this.baseObj == null)
+			{
+				return;
+			}
+			this.valueObj = UTY.GetChildObject(this.baseObj, "Value", true);
+			if (this.valueObj != null)
+			{
+				this.addValue = this.valueObj.GetComponent<UILabel>();
+			}
+		}
+
+		public GameObject ValueObj
+		{
+			get
+			{
+				return this.valueObj;
+			}
+		}
+
+		public string AddValueText
+		{
+			set
+			{
+				if (this.addValue != null)
+				{
+					this.addValue.text = value;
+				}
+			}
+		}
+
+		public ScheduleCtrl.VariableItem GetVariableItem()
+		{
+			return new ScheduleCtrl.VariableItem(this.baseObj, this.addValue);
+		}
+
+		private GameObject baseObj;
+
+		private GameObject valueObj;
+
+		private UILabel addValue;
+	}
+}

+ 205 - 0
Assembly-CSharp/DescScheduleBase.cs

@@ -0,0 +1,205 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Schedule;
+using UnityEngine;
+
+public class DescScheduleBase : MonoBehaviour
+{
+	public virtual void Init(ScheduleTaskCtrl taskCtrl)
+	{
+		this.taskCtrl = taskCtrl;
+		this.m_goMaidParameter = UTY.GetChildObject(base.gameObject, "MaidParameter", false);
+		this.m_goMaidParameterParent = UTY.GetChildObject(base.gameObject, "MaidParameter/ParameterParent", false);
+		this.m_listMaidItem = new List<ScheduleCtrl.VariableItem>();
+		this.m_spBGOfParameterViewer = UTY.GetChildObject(base.gameObject, "MaidParameter/BG", false).GetComponent<UISprite>();
+		this.m_goTitleOfMaidParameter = UTY.GetChildObject(base.gameObject, "MaidParameter/Title", false);
+		this.m_heightOfMaidParameterTitle = this.m_goTitleOfMaidParameter.GetComponent<UISprite>().height;
+	}
+
+	public void UpdateViewCommon(ScheduleCSVData.ScheduleBase work_data)
+	{
+		if (work_data == null || !int.TryParse(work_data.id.ToString(), out this.intTaskInd))
+		{
+			this.Active(false);
+			return;
+		}
+		this.UpdateView(work_data);
+	}
+
+	protected virtual void UpdateView(ScheduleCSVData.ScheduleBase work_data)
+	{
+	}
+
+	protected virtual void UpdateCurentValue()
+	{
+	}
+
+	protected virtual void UpdateAddValue(MaidParams maidParam)
+	{
+	}
+
+	protected void Active(bool active)
+	{
+		base.gameObject.SetActive(active);
+	}
+
+	protected string Sign(int input, string format = null)
+	{
+		if (input <= 0)
+		{
+			return input.ToString();
+		}
+		if (format != null)
+		{
+			return "+" + input.ToString(format);
+		}
+		return "+" + input.ToString();
+	}
+
+	public static void Reposition(GameObject parent)
+	{
+		UITable component = parent.GetComponent<UITable>();
+		if (component)
+		{
+			component.Reposition();
+			return;
+		}
+		UIGrid component2 = parent.GetComponent<UIGrid>();
+		if (component2)
+		{
+			component2.Reposition();
+			return;
+		}
+	}
+
+	protected void ExamineDisplayItem()
+	{
+		int num = ScheduleCtrl.SetActiveExceptForNothing(this.m_listMaidItem, "0");
+		bool flag = num > 0;
+		this.m_goTitleOfMaidParameter.SetActive(flag);
+		if (!flag)
+		{
+			this.Active(false);
+			return;
+		}
+		this.Active(true);
+		DescScheduleBase.Reposition(this.m_goMaidParameterParent);
+		this.AdjustParameterViewer(num);
+	}
+
+	protected void AdjustParameterViewer(int displayMaidParameterCount)
+	{
+		float num = 15f;
+		float num2 = 25f;
+		float num3 = 0f;
+		if (displayMaidParameterCount > 0)
+		{
+			num3 += (float)this.m_heightOfMaidParameterTitle + num;
+			float y = this.m_goMaidParameterParent.GetComponent<UITable>().padding.y;
+			IEnumerator enumerator = this.m_goMaidParameterParent.transform.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					Transform transform = (Transform)obj;
+					if (transform.gameObject.activeSelf)
+					{
+						UILabel component = transform.GetComponent<UILabel>();
+						num3 += (float)component.height + y * 2f;
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+			num3 += num2;
+		}
+		if (num3 > 0f)
+		{
+			this.m_spBGOfParameterViewer.height = (int)num3;
+		}
+	}
+
+	protected int m_heightOfMaidParameterTitle;
+
+	protected GameObject m_goTitleOfMaidParameter;
+
+	protected UISprite m_spBGOfParameterViewer;
+
+	protected const string NOTHING = "0";
+
+	protected ScheduleTaskCtrl taskCtrl;
+
+	protected List<ScheduleCtrl.VariableItem> m_listMaidItem;
+
+	protected GameObject m_goMaidParameter;
+
+	protected GameObject m_goMaidParameterParent;
+
+	protected int intTaskInd;
+
+	public class ParamSet
+	{
+		public ParamSet(GameObject parent, string childObjName, bool useCurrentValue = true)
+		{
+			this.baseObj = UTY.GetChildObject(parent, childObjName, false);
+			if (this.baseObj == null)
+			{
+				return;
+			}
+			GameObject childObject = UTY.GetChildObject(this.baseObj, "Value", false);
+			if (childObject != null)
+			{
+				this.addValue = childObject.GetComponent<UILabel>();
+			}
+			if (useCurrentValue)
+			{
+				GameObject childObject2 = UTY.GetChildObject(this.baseObj, "CurrentValue", false);
+				if (childObject2 != null)
+				{
+					this.currentValue = childObject2.GetComponent<UILabel>();
+				}
+			}
+		}
+
+		public string AddValueText
+		{
+			set
+			{
+				if (this.addValue != null)
+				{
+					this.addValue.text = value;
+				}
+			}
+		}
+
+		public string CurrentValueText
+		{
+			set
+			{
+				if (this.currentValue != null)
+				{
+					this.currentValue.text = value;
+				}
+			}
+		}
+
+		public ScheduleCtrl.VariableItem GetVariableItem()
+		{
+			return new ScheduleCtrl.VariableItem(this.baseObj, this.addValue);
+		}
+
+		private GameObject baseObj;
+
+		private UILabel addValue;
+
+		private UILabel currentValue;
+	}
+}

+ 138 - 0
Assembly-CSharp/DescScheduleTraining.cs

@@ -0,0 +1,138 @@
+using System;
+using Schedule;
+
+public class DescScheduleTraining : DescScheduleBase
+{
+	public override void Init(ScheduleTaskCtrl taskCtrl)
+	{
+		base.Init(taskCtrl);
+		this.m_lReception = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Reception", true);
+		this.m_lCare = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Care", true);
+		this.m_lLovely = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Lovely", true);
+		this.m_lElegance = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Elegance", true);
+		this.m_lCharm = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Charm", true);
+		this.m_lTeachRate = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "TeachRate", true);
+		this.m_lMaidClassExp = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "MaidClassExp", true);
+		this.m_lCooking = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Cooking", true);
+		this.m_lVocal = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Vocal", true);
+		this.m_lDance = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Dance", true);
+		this.m_lAppealPoint = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "AP", true);
+		this.m_listMaidItem.Add(this.m_lReception.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lCare.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lLovely.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lElegance.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lCharm.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lTeachRate.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lMaidClassExp.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lCooking.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lVocal.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lDance.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lAppealPoint.GetVariableItem());
+	}
+
+	private void ResetPosition()
+	{
+		this.m_taskScrollView.ResetPosition();
+	}
+
+	protected override void UpdateView(ScheduleCSVData.ScheduleBase work_data)
+	{
+		this.UpdateCurentValue();
+		this.UpdateAddValue(this.GetAddValue_Trainig());
+		base.ExamineDisplayItem();
+	}
+
+	protected override void UpdateCurentValue()
+	{
+		Slot slot = this.taskCtrl.ScheduleMgr.GetScheduleApi().slot[this.taskCtrl.CurrentActiveSlotNo];
+		Maid maid = slot.maid;
+		if (maid == null)
+		{
+			return;
+		}
+		this.m_lReception.CurrentValueText = maid.status.reception.ToString();
+		this.m_lCare.CurrentValueText = maid.status.care.ToString();
+		this.m_lLovely.CurrentValueText = maid.status.lovely.ToString();
+		this.m_lElegance.CurrentValueText = maid.status.elegance.ToString();
+		this.m_lCharm.CurrentValueText = maid.status.charm.ToString();
+		this.m_lTeachRate.CurrentValueText = (maid.status.teachRate / 10).ToString();
+		this.m_lMaidClassExp.CurrentValueText = maid.status.selectedJobClass.cur_exp.ToString();
+		this.m_lCooking.CurrentValueText = maid.status.cooking.ToString();
+		this.m_lVocal.CurrentValueText = maid.status.vocal.ToString();
+		this.m_lDance.CurrentValueText = maid.status.dance.ToString();
+		this.m_lAppealPoint.CurrentValueText = maid.status.appealPoint.ToString();
+	}
+
+	protected override void UpdateAddValue(MaidParams maidParam)
+	{
+		this.m_lReception.AddValueText = base.Sign(maidParam.reception, null);
+		this.m_lCare.AddValueText = base.Sign(maidParam.care, null);
+		this.m_lLovely.AddValueText = base.Sign(maidParam.lovely, null);
+		this.m_lElegance.AddValueText = base.Sign(maidParam.elegance, null);
+		this.m_lCharm.AddValueText = base.Sign(maidParam.charm, null);
+		this.m_lTeachRate.AddValueText = base.Sign(maidParam.teach_rate, null);
+		this.m_lMaidClassExp.AddValueText = base.Sign(maidParam.exp, null);
+		this.m_lCooking.AddValueText = base.Sign(maidParam.cooking, null);
+		this.m_lVocal.AddValueText = base.Sign(maidParam.vocal, null);
+		this.m_lDance.AddValueText = base.Sign(maidParam.dance, null);
+		this.m_lAppealPoint.AddValueText = base.Sign(maidParam.Ap, null);
+		Slot slot = this.taskCtrl.ScheduleMgr.GetScheduleApi().slot[this.taskCtrl.CurrentActiveSlotNo];
+		Maid maid = slot.maid;
+		if (maid == null)
+		{
+			return;
+		}
+		if (maid.status.selectedJobClass.next_exp == 0)
+		{
+			this.m_lMaidClassExp.AddValueText = base.Sign(0, null);
+		}
+	}
+
+	private MaidParams GetAddValue_Trainig()
+	{
+		foreach (ScheduleBase scheduleBase in this.taskCtrl.GetWorksData(ScheduleTaskCtrl.TaskType.Training))
+		{
+			if (scheduleBase.workType == ScheduleType.Training)
+			{
+				ScheduleTraining scheduleTraining = (ScheduleTraining)scheduleBase;
+				if (scheduleTraining.id == this.intTaskInd)
+				{
+					MaidParams simulateeMaidParams = scheduleTraining.simulateeMaidParams;
+					SalonParams simulateeSalonMaidParams = scheduleTraining.simulateeSalonMaidParams;
+					return simulateeMaidParams;
+				}
+			}
+		}
+		return null;
+	}
+
+	protected Slot m_currentSlotInfo;
+
+	protected float m_contentPosY;
+
+	protected UIScrollView m_taskScrollView;
+
+	protected UIScrollBar m_taskScrollBar;
+
+	protected DescScheduleBase.ParamSet m_lCare;
+
+	protected DescScheduleBase.ParamSet m_lReception;
+
+	protected DescScheduleBase.ParamSet m_lTeachRate;
+
+	protected DescScheduleBase.ParamSet m_lLovely;
+
+	protected DescScheduleBase.ParamSet m_lElegance;
+
+	protected DescScheduleBase.ParamSet m_lCharm;
+
+	protected DescScheduleBase.ParamSet m_lCooking;
+
+	protected DescScheduleBase.ParamSet m_lVocal;
+
+	protected DescScheduleBase.ParamSet m_lDance;
+
+	protected DescScheduleBase.ParamSet m_lAppealPoint;
+
+	protected DescScheduleBase.ParamSet m_lMaidClassExp;
+}

+ 282 - 0
Assembly-CSharp/DescScheduleWork.cs

@@ -0,0 +1,282 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Schedule;
+using TextureBank;
+using UnityEngine;
+
+public class DescScheduleWork : DescScheduleTraining
+{
+	public ScheduleMgr ScheduleMgr
+	{
+		set
+		{
+			this.scheduleMgr = value;
+		}
+	}
+
+	public WorkTaskUnit TaskUnit
+	{
+		set
+		{
+			this.taskUnit = value;
+		}
+	}
+
+	public override void Init(ScheduleTaskCtrl taskCtrl)
+	{
+		if (taskCtrl == null)
+		{
+			return;
+		}
+		base.Init(taskCtrl);
+		this.m_FacillityPanel.TaskViewr = taskCtrl.TaskViewer;
+		this.m_goTitleOfSalonParameter = UTY.GetChildObject(base.gameObject, "SalonParameter/Title", false);
+		this.m_heightOfSalonParameterTitle = this.m_goTitleOfSalonParameter.GetComponent<UISprite>().height;
+		this.m_goSalonParameter = UTY.GetChildObject(base.gameObject, "SalonParameter", false);
+		this.m_goSalonParameterParent = UTY.GetChildObject(base.gameObject, "SalonParameter/ParameterParent", false);
+		this.m_lIncome = new DescScheduleBase.ParamSet(this.m_goSalonParameterParent, "Income", false);
+		this.m_listClubParameter = new List<ScheduleCtrl.VariableItem>
+		{
+			this.m_lIncome.GetVariableItem()
+		};
+		this.m_goFacilityMiniPanel = UTY.GetChildObject(base.gameObject, "FacilityMiniPanel", false);
+		GameObject childObject = UTY.GetChildObject(this.m_goFacilityMiniPanel, "Grid_Value/FacilityLevel", false);
+		this.m_lFacilityLevel = childObject.GetComponent<UILabel>();
+		GameObject childObject2 = UTY.GetChildObject(this.m_goFacilityMiniPanel, "Sprite_Thumbnail", false);
+		this.m_lFacilitThumbnaily = childObject2.GetComponent<UITexture>();
+		GameObject childObject3 = UTY.GetChildObject(this.m_goFacilityMiniPanel, "TitleBar/Title_Name", false);
+		this.m_lFacilityTitleName = childObject3.GetComponent<UILabel>();
+		this.m_lFacilityRankStarParent = UTY.GetChildObject(this.m_goFacilityMiniPanel, "Grid_Value/Parent_Rank/Grid_Star", false);
+		GameObject childObject4 = UTY.GetChildObject(base.gameObject, "Btn_Start", false);
+		this.m_lFacilityButton = childObject4.GetComponent<UIButton>();
+	}
+
+	public void EnableFacillityPanel_Button()
+	{
+		TaskUnit selectedTaskUnit = this.taskCtrl.TaskViewer.GetSelectedTaskUnit();
+		if (selectedTaskUnit.taskType == ScheduleTaskCtrl.TaskType.Work)
+		{
+			this.taskUnit = (WorkTaskUnit)selectedTaskUnit;
+		}
+		this.EnableFacillityPanel();
+	}
+
+	public void EnableFacillityPanel()
+	{
+		this.m_FacillityPanel.TaskUnit = this.taskUnit;
+		this.m_FacillityPanel.WorkData = this.work_data;
+		this.m_FacillityPanel.SelectMaid = this.taskCtrl.ScheduleCtrl.SelectedMaid;
+		this.m_FacillityPanel.ScheduleTime = ScheduleTaskViewer.ScheduleTime;
+		this.m_FacillityPanel.Active(true);
+	}
+
+	public void DisableFacillityPanel()
+	{
+		this.m_FacillityPanel.Active(false);
+	}
+
+	public void AddFacillity(FacilityInfoUI info)
+	{
+		int facilityCountMax = GameMain.Instance.FacilityMgr.FacilityCountMax;
+		info.SetFacilityInfo(info.facility, true);
+	}
+
+	protected override void UpdateView(ScheduleCSVData.ScheduleBase work_data)
+	{
+		this.work_data = (ScheduleCSVData.Work)work_data;
+		if (this.work_data.workTyp == ScheduleCSVData.WorkType.Basic)
+		{
+			this.UpdateFacilityMiniPanel();
+			this.UpdateCurentValue();
+			MaidParams addValue_Work = this.GetAddValue_Work();
+			this.UpdateAddValue(addValue_Work);
+			this.m_lIncome.AddValueText = "0";
+			this.m_goMaidParameter.SetActive(true);
+			this.m_goFacilityMiniPanel.SetActive(true);
+			this.m_goSalonParameter.SetActive(true);
+			this.m_lFacilityButton.gameObject.SetActive(true);
+			this.ExamineDisplayItem();
+			Slot slot = this.taskCtrl.ScheduleMgr.GetScheduleApi().slot[this.taskCtrl.CurrentActiveSlotNo];
+			Maid maid = slot.maid;
+			ScheduleCSVData.ScheduleBase schedule = ScheduleAPI.GetSchedule(maid, ScheduleTaskViewer.ScheduleTime);
+			this.m_lFacilityButton.gameObject.SetActive(schedule == work_data);
+		}
+		else if (this.work_data.workTyp == ScheduleCSVData.WorkType.PowerUp)
+		{
+			this.m_goMaidParameter.SetActive(false);
+			this.m_goFacilityMiniPanel.SetActive(false);
+			this.m_goSalonParameter.SetActive(false);
+			this.m_lFacilityButton.gameObject.SetActive(false);
+		}
+	}
+
+	private void UpdateFacilityMiniPanel()
+	{
+		this.m_lFacilityTitleName.text = this.work_data.name;
+		Sprite facilityThumbnail = FacilityDataTable.GetFacilityThumbnail(this.work_data.facility.ID, true);
+		if (facilityThumbnail != null)
+		{
+			this.m_lFacilitThumbnaily.mainTexture = facilityThumbnail.texture;
+		}
+		this.m_lFacilitThumbnaily.gameObject.SetActive(facilityThumbnail != null);
+		int facilityLevel = GameMain.Instance.FacilityMgr.GetFacilityLevel(this.work_data.facility.ID);
+		this.m_lFacilityLevel.text = "Lv." + facilityLevel.ToString();
+		int rank = this.work_data.facility.rank;
+		Transform transform = this.m_lFacilityRankStarParent.transform;
+		for (int i = 0; i < transform.childCount; i++)
+		{
+			Transform child = transform.GetChild(i);
+			child.gameObject.SetActive(i < rank);
+		}
+	}
+
+	private MaidParams GetAddValue_Work()
+	{
+		foreach (ScheduleBase scheduleBase in this.taskCtrl.GetWorksData(ScheduleTaskCtrl.TaskType.Work))
+		{
+			if (scheduleBase.workType == ScheduleType.Work)
+			{
+				ScheduleWork scheduleWork = (ScheduleWork)scheduleBase;
+				if (scheduleWork.id == this.intTaskInd)
+				{
+					MaidParams simulateeMaidParams = scheduleWork.simulateeMaidParams;
+					SalonParams simulateeSalonMaidParams = scheduleWork.simulateeSalonMaidParams;
+					return simulateeMaidParams;
+				}
+			}
+		}
+		return null;
+	}
+
+	private new void ExamineDisplayItem()
+	{
+		int num = ScheduleCtrl.SetActiveExceptForNothing(this.m_listMaidItem, "0");
+		bool flag = num > 0;
+		this.m_goTitleOfMaidParameter.SetActive(flag);
+		int num2 = ScheduleCtrl.SetActiveExceptForNothing(this.m_listClubParameter, "0");
+		bool flag2 = num2 > 0;
+		this.m_goTitleOfSalonParameter.SetActive(flag2);
+		if (!flag && !flag2)
+		{
+			base.Active(false);
+			return;
+		}
+		base.Active(true);
+		DescScheduleBase.Reposition(this.m_goMaidParameterParent);
+		DescScheduleBase.Reposition(this.m_goSalonParameterParent);
+		this.AdjustParameterViewer(num, num2);
+	}
+
+	private void AdjustParameterViewer(int displayMaidParameterCount, int displaySalonParameterCount)
+	{
+		float num = 15f;
+		float num2 = 25f;
+		float num3 = 0f;
+		if (displayMaidParameterCount > 0)
+		{
+			num3 += (float)this.m_heightOfMaidParameterTitle + num;
+			float y = this.m_goMaidParameterParent.GetComponent<UITable>().padding.y;
+			IEnumerator enumerator = this.m_goMaidParameterParent.transform.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					Transform transform = (Transform)obj;
+					if (transform.gameObject.activeSelf)
+					{
+						UILabel component = transform.GetComponent<UILabel>();
+						num3 += (float)component.height + y * 2f;
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+			num3 += num2;
+		}
+		float num4 = 0f;
+		if (displaySalonParameterCount > 0)
+		{
+			num4 += (float)this.m_heightOfSalonParameterTitle + num;
+			float y = this.m_goSalonParameterParent.GetComponent<UITable>().padding.y;
+			IEnumerator enumerator2 = this.m_goSalonParameterParent.transform.GetEnumerator();
+			try
+			{
+				while (enumerator2.MoveNext())
+				{
+					object obj2 = enumerator2.Current;
+					Transform transform2 = (Transform)obj2;
+					if (transform2.gameObject.activeSelf)
+					{
+						UILabel component2 = transform2.GetComponent<UILabel>();
+						num4 += (float)component2.height + y * 2f;
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable2;
+				if ((disposable2 = (enumerator2 as IDisposable)) != null)
+				{
+					disposable2.Dispose();
+				}
+			}
+			num4 += num2;
+		}
+		if (num3 + num4 > 0f)
+		{
+			this.m_spBGOfParameterViewer.height = (int)(num3 + num4);
+			float num5 = (num3 <= 0f) ? (-(num3 + num * 2f)) : (-(num3 + num));
+			num5 -= 125f;
+			this.m_goSalonParameter.transform.localPosition = new Vector3(this.m_goSalonParameter.transform.localPosition.x, num5, 0f);
+		}
+	}
+
+	private ScheduleMgr scheduleMgr;
+
+	private UIButton roomSettingStartBtn;
+
+	private GameObject m_goTitleOfSalonParameter;
+
+	private int m_heightOfSalonParameterTitle;
+
+	private UIPanel currentRoomPanel;
+
+	private UITexture spriteThumbnail;
+
+	protected List<ScheduleCtrl.VariableItem> m_listClubParameter;
+
+	private GameObject m_goSalonParameter;
+
+	private GameObject m_goSalonParameterParent;
+
+	private WorkTaskUnit taskUnit;
+
+	private ScheduleCSVData.Work work_data;
+
+	private DescScheduleBase.ParamSet m_lIncome;
+
+	private GameObject m_goFacilityMiniPanel;
+
+	private UILabel m_lFacilityLevel;
+
+	private UITexture m_lFacilitThumbnaily;
+
+	private UILabel m_lFacilityTitleName;
+
+	private UIButton m_lFacilityButton;
+
+	private GameObject m_lFacilityRankStarParent;
+
+	public TextureBank textureBank;
+
+	[SerializeField]
+	private ScheduleFacillityPanelCtrl m_FacillityPanel;
+}

+ 163 - 0
Assembly-CSharp/DescScheduleYotogi.cs

@@ -0,0 +1,163 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Schedule;
+using UnityEngine;
+using wf;
+
+public class DescScheduleYotogi : DescScheduleBase
+{
+	public override void Init(ScheduleTaskCtrl taskCtrl)
+	{
+		base.Init(taskCtrl);
+		this.m_lReception = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Reception", true);
+		this.m_lCare = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Care", true);
+		this.m_lTeachRate = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "TeachRate", true);
+		this.m_lInyoku = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Inyoku", true);
+		this.m_lMvalue = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Mvalue", true);
+		this.m_lHentai = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Hentai", true);
+		this.m_lHousi = new DescScheduleBase.ParamSet(this.m_goMaidParameterParent, "Housi", true);
+		this.m_listMaidItem.Add(this.m_lReception.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lCare.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lTeachRate.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lInyoku.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lMvalue.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lHentai.GetVariableItem());
+		this.m_listMaidItem.Add(this.m_lHousi.GetVariableItem());
+		this.explanation_label_ = UTY.GetChildObject(base.gameObject, "Description/Message", false).GetComponent<UILabel>();
+		this.condition_parent = UTY.GetChildObject(base.gameObject, "Condition/ConditionParent", false);
+		for (int i = 0; i < 9; i++)
+		{
+			GameObject gameObject = Utility.CreatePrefab(this.condition_parent, "SceneDaily/Schedule/Prefab/ConditionUnit", true);
+			gameObject.transform.localPosition = new Vector3(0f, (float)(i * 10), 0f);
+			UTY.GetChildObject(gameObject, "No", false).GetComponent<UILabel>().text = (i + 1).ToString();
+			KeyValuePair<GameObject, UILabel> item = new KeyValuePair<GameObject, UILabel>(gameObject, UTY.GetChildObject(gameObject, "Message", false).GetComponent<UILabel>());
+			this.condition_unit_label_.Add(item);
+		}
+		DescScheduleBase.Reposition(this.condition_parent);
+	}
+
+	protected override void UpdateCurentValue()
+	{
+		Slot slot = this.taskCtrl.ScheduleMgr.GetScheduleApi().slot[this.taskCtrl.CurrentActiveSlotNo];
+		Maid maid = slot.maid;
+		if (maid == null)
+		{
+			return;
+		}
+		this.m_lReception.CurrentValueText = maid.status.reception.ToString();
+		this.m_lCare.CurrentValueText = maid.status.care.ToString();
+		this.m_lTeachRate.CurrentValueText = (maid.status.teachRate / 10).ToString();
+		this.m_lInyoku.CurrentValueText = maid.status.inyoku.ToString();
+		this.m_lMvalue.CurrentValueText = maid.status.mvalue.ToString();
+		this.m_lHentai.CurrentValueText = maid.status.hentai.ToString();
+		this.m_lHousi.CurrentValueText = maid.status.housi.ToString();
+	}
+
+	private void UpdateAddValue(ScheduleCSVData.Yotogi data)
+	{
+		this.m_lReception.AddValueText = base.Sign(data.easyYotogi.reception, null);
+		this.m_lCare.AddValueText = base.Sign(data.easyYotogi.care, null);
+		this.m_lTeachRate.AddValueText = base.Sign(data.easyYotogi.teach_rate, null);
+		this.m_lInyoku.AddValueText = base.Sign(data.easyYotogi.inyoku, null);
+		this.m_lMvalue.AddValueText = base.Sign(data.easyYotogi.msei, null);
+		this.m_lHentai.AddValueText = base.Sign(data.easyYotogi.hentai, null);
+		this.m_lHousi.AddValueText = base.Sign(data.easyYotogi.housi, null);
+	}
+
+	protected override void UpdateView(ScheduleCSVData.ScheduleBase work_data)
+	{
+		ScheduleCSVData.Yotogi yotogi = (ScheduleCSVData.Yotogi)work_data;
+		base.Active(true);
+		this.explanation_label_.text = yotogi.information;
+		int num = 0;
+		for (int i = 0; i < this.condition_unit_label_.Count; i++)
+		{
+			if (i < yotogi.condInfo.Count)
+			{
+				this.condition_unit_label_[i].Key.SetActive(true);
+				this.condition_unit_label_[i].Value.text = yotogi.condInfo[i];
+				num++;
+			}
+			else
+			{
+				this.condition_unit_label_[i].Key.SetActive(false);
+			}
+		}
+		float num2 = 260f;
+		float num3 = 10f;
+		float num4 = 25f;
+		float num5 = 4f;
+		float num6 = 0f;
+		GameObject childObject = UTY.GetChildObject(base.gameObject, "Condition/Title", false);
+		if (0 < num)
+		{
+			childObject.SetActive(true);
+			num6 += (float)(childObject.GetComponent<UISprite>().height / 2) + num3;
+			float y = UTY.GetChildObject(base.gameObject, "Condition/ConditionParent", false).GetComponent<UITable>().padding.y;
+			Transform parent = this.condition_unit_label_[0].Key.transform.parent;
+			IEnumerator enumerator = parent.transform.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					Transform transform = (Transform)obj;
+					if (transform.gameObject.activeSelf)
+					{
+						UILabel component = transform.Find("Message").GetComponent<UILabel>();
+						num6 += (float)component.height + y * 2f + num5;
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+			num6 += num4;
+		}
+		else
+		{
+			childObject.SetActive(false);
+		}
+		DescScheduleBase.Reposition(this.condition_parent);
+		UTY.GetChildObject(base.gameObject, "BG", false).GetComponent<UISprite>().height = (int)(num2 + num6);
+		if (yotogi.easyYotogi != null)
+		{
+			this.m_goMaidParameter.SetActive(true);
+			this.UpdateCurentValue();
+			this.UpdateAddValue(yotogi);
+			base.ExamineDisplayItem();
+		}
+		else
+		{
+			this.m_goMaidParameter.SetActive(false);
+		}
+	}
+
+	private UILabel explanation_label_;
+
+	private List<KeyValuePair<GameObject, UILabel>> condition_unit_label_ = new List<KeyValuePair<GameObject, UILabel>>();
+
+	private GameObject condition_parent;
+
+	protected DescScheduleBase.ParamSet m_lCare;
+
+	protected DescScheduleBase.ParamSet m_lReception;
+
+	protected DescScheduleBase.ParamSet m_lTeachRate;
+
+	protected DescScheduleBase.ParamSet m_lInyoku;
+
+	protected DescScheduleBase.ParamSet m_lMvalue;
+
+	protected DescScheduleBase.ParamSet m_lHentai;
+
+	protected DescScheduleBase.ParamSet m_lHousi;
+
+	protected DescScheduleBase.ParamSet m_lYotogiCnt;
+}

+ 51 - 0
Assembly-CSharp/DeskCustomize.cs

@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+
+public class DeskCustomize : WfScreenManager
+{
+	public void Awake()
+	{
+		this.adv_kag_ = GameMain.Instance.ScriptMgr.adv_kag;
+	}
+
+	public override void Start()
+	{
+		base.Start();
+		this.move_screen_ = base.children_dic["Move"].GetComponent<WfScreenMoveChildren>();
+		string empty = string.Empty;
+		string empty2 = string.Empty;
+		if (this.adv_kag_.tag_backup != null && 0 < this.adv_kag_.tag_backup.Count && this.adv_kag_.tag_backup["name"] == "SceneDeskCustomize")
+		{
+			NDebug.Assert(this.adv_kag_.tag_backup.ContainsKey("label"), "SceneCallにlabelの設定がされていませんでした");
+			this.move_screen_.SetNextLabel(this.adv_kag_.tag_backup["label"]);
+		}
+		this.CallScreen("Main");
+	}
+
+	protected override void SettingChildrenList(Dictionary<string, WfScreenChildren> children_dic)
+	{
+		string[] array = new string[]
+		{
+			"Main",
+			"Move"
+		};
+		for (int i = 0; i < array.Length; i++)
+		{
+			WfScreenChildren component = UTY.GetChildObject(base.gameObject, array[i], false).GetComponent<WfScreenChildren>();
+			component.parent_mgr = this;
+			children_dic.Add(array[i], component);
+		}
+	}
+
+	public WfScreenMoveChildren move_screen
+	{
+		get
+		{
+			return this.move_screen_;
+		}
+	}
+
+	private WfScreenMoveChildren move_screen_;
+
+	private ADVKagManager adv_kag_;
+}

+ 45 - 0
Assembly-CSharp/DeskCustomizeMain.cs

@@ -0,0 +1,45 @@
+using System;
+
+public class DeskCustomizeMain : WfScreenChildren
+{
+	public override void Awake()
+	{
+		base.Awake();
+	}
+
+	protected override void OnCall()
+	{
+		uGUITutorialPanel.OpenTutorial("SceneDeskCustomize", null, false);
+		GameMain.Instance.SysShortcut.strSceneHelpName = "SceneDeskCustomize";
+	}
+
+	public void OnClickOK()
+	{
+		if (GameMain.Instance.CharacterMgr.status.GetFlag("desk_customize_savedata_warning") == 1)
+		{
+			if (GameMain.Instance.SysDlg.IsDecided)
+			{
+				GameMain.Instance.SysDlg.Show("デスクトップカスタムの設定データがシステムから個々のセーブデータ依存に変更になりました\nセーブをせず終了すると、データは失われますのでご注意ください", SystemDialog.TYPE.OK, new SystemDialog.OnClick(this.OnEndOk), null);
+			}
+		}
+		else
+		{
+			this.OnEndOk();
+		}
+	}
+
+	public void OnEndOk()
+	{
+		GameMain.Instance.CharacterMgr.status.SetFlag("desk_customize_savedata_warning", 0);
+		GameMain.Instance.SysDlg.Close();
+		if ((base.parent_mgr.children_dic["Move"] as WfScreenMoveChildren).IsExistNextLabel())
+		{
+			this.Finish();
+		}
+	}
+
+	protected override void OnFinish()
+	{
+		base.parent_mgr.CallScreen("Move");
+	}
+}

+ 50 - 0
Assembly-CSharp/DeskCustomizeWindowManager.cs

@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+public class DeskCustomizeWindowManager : BasePhotoWindowManager
+{
+	public override void Awake()
+	{
+		base.Awake();
+	}
+
+	public override void Start()
+	{
+		base.Start();
+	}
+
+	public void Save()
+	{
+		List<DeskManager.InstansData> item_inst_data = DeskManager.item_inst_data;
+		for (int i = 0; i < item_inst_data.Count; i++)
+		{
+			if (!(item_inst_data[i].item_object == null))
+			{
+				Transform transform = item_inst_data[i].item_object.transform;
+				item_inst_data[i].position = transform.position;
+				item_inst_data[i].rotation = transform.rotation.eulerAngles;
+				item_inst_data[i].scale = transform.localScale;
+			}
+		}
+	}
+
+	protected override string save_fullpath_uidata
+	{
+		get
+		{
+			string fullPath = Path.GetFullPath(".\\");
+			string str = fullPath + "SaveData";
+			return str + "/CustomizeUISetting.save";
+		}
+	}
+
+	protected override string save_header_uidata
+	{
+		get
+		{
+			return "CM3D2_CustomizeUISetting";
+		}
+	}
+}

+ 369 - 0
Assembly-CSharp/DeskItemWindow.cs

@@ -0,0 +1,369 @@
+using System;
+using System.Collections.Generic;
+using com.workman.cm3d2.scene.dailyEtc;
+using UnityEngine;
+using wf;
+
+public class DeskItemWindow : BasePhotoWindow
+{
+	public override string windowName
+	{
+		get
+		{
+			return this.InitTitle;
+		}
+	}
+
+	public override void Awake()
+	{
+		base.Awake();
+		this.camera_move_support_ = base.gameObject.AddComponent<WfCameraMoveSupport>();
+		this.PartsPopUpList.onChangePopUpListValue.Add(new Action<KeyValuePair<string, UnityEngine.Object>>(this.OnChangePopUpList));
+		this.PartsTransForm.onChangeAxisVisibleType.Add(new Action(this.OnChangeAxisVisibleType));
+		this.CheckBoxVisible.onClick.Add(new Action<WFCheckBox>(this.OnClickVisible));
+		this.CheckBoxSeasonalVisible.onClick.Add(new Action<WFCheckBox>(this.OnClickSeasonalVisible));
+	}
+
+	public override void Start()
+	{
+		base.Start();
+		base.SetButtonEnabled(BasePhotoWindow.BtnType.Help, true, false);
+		base.GetButtonOnClickEventList(BasePhotoWindow.BtnType.Help).Add(new Action(this.OnClickHelp));
+		if (string.IsNullOrEmpty(GameMain.Instance.BgMgr.GetBGName()))
+		{
+			GameMain.Instance.BgMgr.ChangeBg(DailyAPI.dayBg);
+		}
+		List<DeskManager.InstansData> item_inst_data = DeskManager.item_inst_data;
+		int num = 0;
+		foreach (DeskManager.InstansData instansData in item_inst_data)
+		{
+			if (instansData.item_data != null && instansData.IsPossessing() && !(instansData.item_object == null))
+			{
+				int category_id = instansData.item_data.category_id;
+				if (!this.category_dic_.ContainsKey(category_id))
+				{
+					this.category_dic_.Add(category_id, new List<DeskManager.InstansData>());
+				}
+				this.category_dic_[category_id].Add(instansData);
+				num = System.Math.Max(num, this.category_dic_[category_id].Count);
+				DeskItemWindow.UIObject uiobject = DeskItemWindow.UIObject.Create(instansData.item_object);
+				uiobject.axis_obj.offsetScale = instansData.item_data.init_ui_position_scale;
+				uiobject.axis_obj.ScaleMinMax = new Vector2(this.PartsTransForm.ScaleInput.SliderMin, this.PartsTransForm.ScaleInput.SliderMax);
+				if (GameMain.Instance.VRMode)
+				{
+					MeshRenderer componentInChildren = uiobject.axis_obj.GetComponentInChildren<MeshRenderer>();
+					if (componentInChildren != null)
+					{
+						componentInChildren.enabled = false;
+					}
+					BoxCollider[] componentsInChildren = uiobject.axis_obj.GetComponentsInChildren<BoxCollider>();
+					foreach (BoxCollider boxCollider in componentsInChildren)
+					{
+						boxCollider.enabled = false;
+					}
+				}
+				uiobject.rotate_obj.offsetScale = instansData.item_data.init_ui_position_scale;
+				this.uiobject_dic_.Add(instansData.item_object, uiobject);
+			}
+		}
+		foreach (KeyValuePair<int, List<DeskManager.InstansData>> keyValuePair in this.category_dic_)
+		{
+			keyValuePair.Value.Sort((DeskManager.InstansData a, DeskManager.InstansData b) => a.id - b.id);
+		}
+		for (int j = 0; j < num; j++)
+		{
+			GameObject gameObject = Utility.CreatePrefab(this.PartsTabPabel.gameObject, "ScenePhotoMode/WindowListItemBig", true);
+		}
+		List<KeyValuePair<string, UnityEngine.Object>> list = new List<KeyValuePair<string, UnityEngine.Object>>();
+		foreach (KeyValuePair<int, List<DeskManager.InstansData>> keyValuePair2 in this.category_dic_)
+		{
+			list.Add(new KeyValuePair<string, UnityEngine.Object>(DeskManager.item_category_data_dic[keyValuePair2.Key], null));
+		}
+		this.PartsPopUpList.popup_value_list = list;
+		if (0 < this.PartsPopUpList.popup_value_list.Count)
+		{
+			this.PartsPopUpList.SetPopupValue(this.PartsPopUpList.popup_value_list[0].Key);
+		}
+		if (2 <= list.Count)
+		{
+			this.WindowSize.y = this.WindowSize.y + 30f;
+			base.ResizeWindow();
+			Transform transform = UTY.GetChildObject(base.gameObject, "Parent/ContentParent", false).transform;
+			Vector3 localPosition = transform.localPosition;
+			localPosition.y -= 30f;
+			transform.localPosition = localPosition;
+			transform = UTY.GetChildObject(base.gameObject, "Parent/ListParent", false).transform;
+			localPosition = transform.localPosition;
+			localPosition.y -= 30f;
+			transform.localPosition = localPosition;
+		}
+	}
+
+	protected void OnChangePopUpList(KeyValuePair<string, UnityEngine.Object> popup_val)
+	{
+		if (this.select_pop_up_value_name_ == popup_val.Key)
+		{
+			return;
+		}
+		this.select_pop_up_value_name_ = popup_val.Key;
+		int num = -1;
+		foreach (KeyValuePair<int, string> keyValuePair in DeskManager.item_category_data_dic)
+		{
+			if (keyValuePair.Value == popup_val.Key)
+			{
+				num = keyValuePair.Key;
+				break;
+			}
+		}
+		if (num < 0)
+		{
+			return;
+		}
+		List<DeskManager.InstansData> list = null;
+		if (this.category_dic_.ContainsKey(num))
+		{
+			list = this.category_dic_[num];
+		}
+		if (list == null)
+		{
+			return;
+		}
+		Transform transform = this.PartsTabPabel.gameObject.transform;
+		for (int i = 0; i < transform.childCount; i++)
+		{
+			if (i < list.Count)
+			{
+				DeskManager.InstansData instansData = list[i];
+				GameObject gameObject = transform.GetChild(i).gameObject;
+				gameObject.SetActive(true);
+				string name = instansData.item_data.name;
+				gameObject.name = instansData.id.ToString();
+				UILabel componentInChildren = gameObject.GetComponentInChildren<UILabel>();
+				componentInChildren.text = name;
+				int j = componentInChildren.width;
+				componentInChildren.width = 0;
+				componentInChildren.MakePixelPerfect();
+				while (j < componentInChildren.width)
+				{
+					componentInChildren.fontSize--;
+					componentInChildren.width = 0;
+					componentInChildren.MakePixelPerfect();
+				}
+				componentInChildren.width = j;
+				UIWFTabButton component = gameObject.GetComponent<UIWFTabButton>();
+				component.onSelect.Clear();
+				EventDelegate.Add(component.onSelect, new EventDelegate.Callback(this.OnSelectItem));
+			}
+			else
+			{
+				transform.GetChild(i).gameObject.SetActive(false);
+			}
+		}
+		UIGrid component2 = this.PartsTabPabel.GetComponent<UIGrid>();
+		this.PartsTabPabel.UpdateChildren();
+		Utility.ResetNGUI(component2);
+		Utility.ResetNGUI(this.PartsScrollView);
+		this.PartsTabPabel.Select(component2.GetChild(0).GetComponentInChildren<UIWFTabButton>());
+		if (this.category_dic_.Count <= 1)
+		{
+			this.PartsPopUpList.gameObject.SetActive(false);
+		}
+	}
+
+	protected void OnSelectItem()
+	{
+		if (!UIWFSelectButton.current.isSelected)
+		{
+			return;
+		}
+		int num = int.Parse(UIWFSelectButton.current.name);
+		GameObject gameObject = null;
+		DeskManager.InstansData instansData = null;
+		List<DeskManager.InstansData> item_inst_data = DeskManager.item_inst_data;
+		int num2 = 0;
+		while (num2 < item_inst_data.Count && gameObject == null)
+		{
+			if (item_inst_data[num2].id == num)
+			{
+				gameObject = item_inst_data[num2].item_object;
+				instansData = item_inst_data[num2];
+			}
+			num2++;
+		}
+		KeyValuePair<string, UnityEngine.Object> keyValuePair = new KeyValuePair<string, UnityEngine.Object>(string.Empty, gameObject);
+		this.select_item_ = null;
+		GameObject target_object = (!(keyValuePair.Value == null)) ? (keyValuePair.Value as GameObject) : null;
+		this.CheckBoxVisible.enabled = false;
+		this.CheckBoxSeasonalVisible.visible = false;
+		if (keyValuePair.Value == null)
+		{
+			this.PartsTransForm.SetObject(null);
+			return;
+		}
+		if (instansData == null)
+		{
+			return;
+		}
+		this.PartsTransForm.SetObject(target_object, instansData.item_data.init_position, instansData.item_data.init_rotation, instansData.item_data.init_scale);
+		this.select_item_ = instansData;
+		if (this.select_item_.item_data.seasonal)
+		{
+			this.CheckBoxSeasonalVisible.text = "特定期間のみ表示する(" + this.select_item_.item_data.seasonal_month[0].ToString() + "月)";
+		}
+		this.UpdateUI();
+	}
+
+	public void UpdateVisible()
+	{
+		if (this.select_item_ == null)
+		{
+			this.CheckBoxVisible.enabled = false;
+			this.CheckBoxSeasonalVisible.visible = false;
+			return;
+		}
+		this.CheckBoxVisible.enabled = true;
+		this.CheckBoxVisible.check = this.select_item_.visible;
+		if (this.select_item_.item_data.seasonal)
+		{
+			this.CheckBoxSeasonalVisible.visible = true;
+			this.CheckBoxSeasonalVisible.check = this.select_item_.only_season_visible;
+		}
+		else
+		{
+			this.CheckBoxSeasonalVisible.visible = false;
+		}
+		List<DeskManager.InstansData> item_inst_data = DeskManager.item_inst_data;
+		for (int i = 0; i < item_inst_data.Count; i++)
+		{
+			if (!(item_inst_data[i].item_object == null))
+			{
+				if (!item_inst_data[i].item_data.seasonal || !item_inst_data[i].visible || item_inst_data[i] == this.select_item_)
+				{
+					item_inst_data[i].item_object.SetActive(item_inst_data[i].visible);
+				}
+				else if (item_inst_data[i].only_season_visible)
+				{
+					item_inst_data[i].item_object.SetActive(item_inst_data[i].IsNowMonthSeason());
+				}
+			}
+		}
+	}
+
+	public void UpdateUI()
+	{
+		this.UpdateVisible();
+		this.OnChangeAxisVisibleType();
+	}
+
+	protected void OnChangeAxisVisibleType()
+	{
+		if (this.select_item_ == null)
+		{
+			return;
+		}
+		GameObject item_object = this.select_item_.item_object;
+		WindowPartsTransform.AxisVisibleType axis_visible_type = this.PartsTransForm.axis_visible_type;
+		foreach (KeyValuePair<GameObject, DeskItemWindow.UIObject> keyValuePair in this.uiobject_dic_)
+		{
+			DeskItemWindow.UIObject value = keyValuePair.Value;
+			if (axis_visible_type == WindowPartsTransform.AxisVisibleType.UnVisible || item_object != keyValuePair.Key || !item_object.activeSelf)
+			{
+				value.axis_obj.Visible = false;
+				value.rotate_obj.Visible = false;
+			}
+			else if (axis_visible_type == WindowPartsTransform.AxisVisibleType.Position)
+			{
+				value.axis_obj.Visible = true;
+				value.rotate_obj.Visible = false;
+			}
+			else if (axis_visible_type == WindowPartsTransform.AxisVisibleType.Rotate)
+			{
+				value.axis_obj.Visible = false;
+				value.rotate_obj.Visible = true;
+			}
+		}
+	}
+
+	public void OnClickCameraFocus()
+	{
+		if (this.select_item_ == null || this.select_item_.item_object == null)
+		{
+			return;
+		}
+		Transform transform = this.select_item_.item_object.transform;
+		Vector3 position = transform.position;
+		float distance = 1.6f;
+		Vector2 aroundAngle = new Vector2(-90f, 4.7f);
+		this.camera_move_support_.StartCameraPosition(position, distance, aroundAngle);
+	}
+
+	protected void OnClickVisible(WFCheckBox checkbox)
+	{
+		if (this.select_item_ == null)
+		{
+			return;
+		}
+		this.select_item_.visible = checkbox.check;
+		this.UpdateUI();
+	}
+
+	protected void OnClickSeasonalVisible(WFCheckBox checkbox)
+	{
+		if (this.select_item_ == null || !this.select_item_.item_data.seasonal)
+		{
+			return;
+		}
+		this.select_item_.only_season_visible = checkbox.check;
+		this.UpdateUI();
+	}
+
+	protected void OnClickHelp()
+	{
+		uGUITutorialPanel.OpenTutorial("SceneDeskCustomize", null, true);
+	}
+
+	public WFCheckBox CheckBoxVisible;
+
+	public WFCheckBox CheckBoxSeasonalVisible;
+
+	public WindowPartsPopUpList PartsPopUpList;
+
+	public WindowPartsTransform PartsTransForm;
+
+	public UIWFTabPanel PartsTabPabel;
+
+	public UIScrollView PartsScrollView;
+
+	private SortedDictionary<int, List<DeskManager.InstansData>> category_dic_ = new SortedDictionary<int, List<DeskManager.InstansData>>();
+
+	private Dictionary<GameObject, DeskItemWindow.UIObject> uiobject_dic_ = new Dictionary<GameObject, DeskItemWindow.UIObject>();
+
+	private DeskManager.InstansData select_item_;
+
+	private string select_pop_up_value_name_ = string.Empty;
+
+	private WfCameraMoveSupport camera_move_support_;
+
+	public class UIObject
+	{
+		private UIObject()
+		{
+		}
+
+		public static DeskItemWindow.UIObject Create(GameObject target_obj)
+		{
+			return new DeskItemWindow.UIObject
+			{
+				target_obj = target_obj,
+				rotate_obj = PhotoWindowManager.CreateWorldTransformRotate(target_obj, false),
+				axis_obj = PhotoWindowManager.CreateWorldTransformAxis(target_obj, false, false)
+			};
+		}
+
+		public WorldTransformAxis axis_obj;
+
+		public GizmoRender rotate_obj;
+
+		public GameObject target_obj;
+	}
+}

+ 462 - 0
Assembly-CSharp/DeskManager.cs

@@ -0,0 +1,462 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+using UnityEngine.Rendering;
+using wf;
+
+internal class DeskManager
+{
+	public static void CreateCsvData()
+	{
+		using (AFileBase afileBase = GameUty.FileSystem.FileOpen("desk_item_category.nei"))
+		{
+			using (CsvParser csvParser = new CsvParser())
+			{
+				bool condition = csvParser.Open(afileBase);
+				NDebug.Assert(condition, "desk_item_category.nei\nopen failed.");
+				for (int i = 1; i < csvParser.max_cell_y; i++)
+				{
+					if (!csvParser.IsCellToExistData(0, i))
+					{
+						break;
+					}
+					int cellAsInteger = csvParser.GetCellAsInteger(0, i);
+					string cellAsString = csvParser.GetCellAsString(1, i);
+					if (!DeskManager.item_category_data_dic_.ContainsKey(cellAsInteger))
+					{
+						DeskManager.item_category_data_dic_.Add(cellAsInteger, cellAsString);
+					}
+				}
+			}
+		}
+		HashSet<int> hashSet = new HashSet<int>();
+		CsvCommonIdManager.ReadEnabledIdList(CsvCommonIdManager.FileSystemType.Normal, true, "desk_item_enabled_id", ref hashSet);
+		CsvCommonIdManager.ReadEnabledIdList(CsvCommonIdManager.FileSystemType.Old, true, "desk_item_enabled_id", ref hashSet);
+		using (AFileBase afileBase2 = GameUty.FileSystem.FileOpen("desk_item_detail.nei"))
+		{
+			using (CsvParser csvParser2 = new CsvParser())
+			{
+				bool condition2 = csvParser2.Open(afileBase2);
+				NDebug.Assert(condition2, "desk_item_detail.nei\nopen failed.");
+				for (int j = 1; j < csvParser2.max_cell_y; j++)
+				{
+					if (csvParser2.IsCellToExistData(0, j))
+					{
+						int cellAsInteger2 = csvParser2.GetCellAsInteger(0, j);
+						if (hashSet.Contains(cellAsInteger2))
+						{
+							DeskManager.ItemData itemData = new DeskManager.ItemData(csvParser2, j);
+							DeskManager.item_detail_data_dic_.Add(itemData.id, itemData);
+						}
+					}
+				}
+			}
+		}
+		DeskManager.item_inst_data_.Clear();
+		DeskManager.init_item_data_.Clear();
+		foreach (KeyValuePair<int, DeskManager.ItemData> keyValuePair in DeskManager.item_detail_data_dic_)
+		{
+			DeskManager.InstansData instansData = new DeskManager.InstansData(keyValuePair.Value);
+			DeskManager.init_item_data_.Add(instansData.id, instansData);
+			DeskManager.item_inst_data_.Add(new DeskManager.InstansData(instansData));
+		}
+	}
+
+	public static void OnChangeBG(string bg_name, GameObject bg_object)
+	{
+		if (bg_object == null)
+		{
+			for (int i = 0; i < DeskManager.item_inst_data_.Count; i++)
+			{
+				DeskManager.item_inst_data_[i].item_object = null;
+			}
+			return;
+		}
+		string[] array = new string[]
+		{
+			"ShinShitsumu_ChairRot",
+			"ShinShitsumu_ChairRot_Night",
+			"ShinShitsumu",
+			"ShinShitsumu_Night"
+		};
+		for (int j = 0; j < array.Length; j++)
+		{
+			array[j] = array[j].ToLower();
+		}
+		if (0 <= Array.IndexOf<string>(array, bg_name))
+		{
+			for (int k = 0; k < DeskManager.item_inst_data_.Count; k++)
+			{
+				DeskManager.InstansData instansData = DeskManager.item_inst_data_[k];
+				if (instansData.IsPossessing())
+				{
+					GameObject gameObject = null;
+					if (!string.IsNullOrEmpty(instansData.item_data.prefab_name))
+					{
+						gameObject = Utility.CreatePrefab(bg_object, "Prefab/" + instansData.item_data.prefab_name, true);
+					}
+					else if (!string.IsNullOrEmpty(instansData.item_data.asset_name))
+					{
+						gameObject = GameMain.Instance.BgMgr.CreateAssetBundle(instansData.item_data.asset_name);
+						if (gameObject != null)
+						{
+							gameObject = UnityEngine.Object.Instantiate<GameObject>(gameObject);
+							MeshRenderer[] componentsInChildren = gameObject.GetComponentsInChildren<MeshRenderer>();
+							for (int l = 0; l < componentsInChildren.Length; l++)
+							{
+								if (componentsInChildren[l] != null)
+								{
+									componentsInChildren[l].shadowCastingMode = ShadowCastingMode.Off;
+								}
+							}
+						}
+					}
+					if (gameObject != null)
+					{
+						gameObject.name = gameObject.name.Replace("(Clone)", string.Empty);
+						gameObject.transform.SetParent(bg_object.transform, false);
+						instansData.Apply(gameObject, true);
+						instansData.item_object = gameObject;
+						if (instansData.item_object.GetComponentInChildren<BoxCollider>() == null)
+						{
+							MeshRenderer componentInChildren = instansData.item_object.GetComponentInChildren<MeshRenderer>(true);
+							if (componentInChildren != null)
+							{
+								componentInChildren.gameObject.AddComponent<BoxCollider>();
+							}
+						}
+					}
+					else if (!string.IsNullOrEmpty(instansData.item_data.prefab_name))
+					{
+						Debug.LogError("Prefab[" + instansData.item_data.prefab_name + "]を読み込めませんでした");
+					}
+					else
+					{
+						Debug.LogError("Asset[" + instansData.item_data.asset_name + "]を読み込めませんでした");
+					}
+				}
+			}
+		}
+	}
+
+	public static void SerializeSingleSaveData(BinaryWriter binary)
+	{
+		binary.Write("CM3D2_DeskCustomize");
+		binary.Write(1130);
+		binary.Write(DeskManager.item_inst_data_.Count);
+		for (int i = 0; i < DeskManager.item_inst_data_.Count; i++)
+		{
+			binary.Write(DeskManager.item_inst_data_[i].id);
+			DeskManager.item_inst_data_[i].Serialize(binary);
+		}
+	}
+
+	public static void Deserialize()
+	{
+		string fullPath = Path.GetFullPath(".\\");
+		string text = fullPath + "SaveData";
+		if (!Directory.Exists(text))
+		{
+			Directory.CreateDirectory(text);
+		}
+		DeskManager.old_item_data_from_system_.Clear();
+		string path = text + "/DeskCustomize.save";
+		if (!File.Exists(path))
+		{
+			return;
+		}
+		using (FileStream fileStream = new FileStream(path, FileMode.Open))
+		{
+			if (fileStream != null)
+			{
+				byte[] buffer = new byte[fileStream.Length];
+				fileStream.Read(buffer, 0, (int)fileStream.Length);
+				using (BinaryReader binaryReader = new BinaryReader(new MemoryStream(buffer)))
+				{
+					if (binaryReader.ReadString() != "CM3D2_DeskCustomize")
+					{
+						NDebug.Assert("DeskCustomizeファイルのヘッダーが不正です。", false);
+					}
+					else
+					{
+						int game_ver = binaryReader.ReadInt32();
+						int num = binaryReader.ReadInt32();
+						for (int i = 0; i < num; i++)
+						{
+							int num2 = binaryReader.ReadInt32();
+							DeskManager.InstansData instansData = new DeskManager.InstansData(binaryReader, game_ver);
+							if (instansData.item_data != null)
+							{
+								if (!DeskManager.old_item_data_from_system_.ContainsKey(instansData.item_data.id))
+								{
+									DeskManager.old_item_data_from_system_.Add(instansData.item_data.id, instansData);
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	public static void DeserializeSingleSaveData(BinaryReader binary, int version)
+	{
+		DeskManager.item_inst_data_.Clear();
+		Dictionary<int, DeskManager.InstansData> dictionary = new Dictionary<int, DeskManager.InstansData>();
+		foreach (KeyValuePair<int, DeskManager.InstansData> keyValuePair in DeskManager.init_item_data_)
+		{
+			dictionary.Add(keyValuePair.Key, new DeskManager.InstansData(keyValuePair.Value));
+		}
+		if (version <= 145)
+		{
+			foreach (KeyValuePair<int, DeskManager.InstansData> keyValuePair2 in DeskManager.old_item_data_from_system_)
+			{
+				if (!dictionary.ContainsKey(keyValuePair2.Key))
+				{
+					dictionary.Add(keyValuePair2.Key, null);
+				}
+				dictionary[keyValuePair2.Key] = new DeskManager.InstansData(keyValuePair2.Value);
+			}
+			GameMain.Instance.CharacterMgr.status.SetFlag("desk_customize_savedata_warning", 1);
+		}
+		else
+		{
+			string a = binary.ReadString();
+			NDebug.Assert(a == "CM3D2_DeskCustomize", "セーブデータ\nデスクカスタマイズのヘッダーが正しくありません");
+			int game_ver = binary.ReadInt32();
+			int num = binary.ReadInt32();
+			for (int i = 0; i < num; i++)
+			{
+				int key = binary.ReadInt32();
+				DeskManager.InstansData value = new DeskManager.InstansData(binary, game_ver);
+				if (dictionary.ContainsKey(key))
+				{
+					dictionary[key] = value;
+				}
+			}
+		}
+		foreach (KeyValuePair<int, DeskManager.InstansData> keyValuePair3 in dictionary)
+		{
+			DeskManager.item_inst_data_.Add(new DeskManager.InstansData(keyValuePair3.Value));
+		}
+	}
+
+	public static List<DeskManager.InstansData> item_inst_data
+	{
+		get
+		{
+			return DeskManager.item_inst_data_;
+		}
+	}
+
+	public static Dictionary<int, string> item_category_data_dic
+	{
+		get
+		{
+			return DeskManager.item_category_data_dic_;
+		}
+	}
+
+	public static Dictionary<int, DeskManager.ItemData> item_detail_data_dic
+	{
+		get
+		{
+			return DeskManager.item_detail_data_dic_;
+		}
+	}
+
+	private static List<DeskManager.InstansData> item_inst_data_ = new List<DeskManager.InstansData>();
+
+	private static Dictionary<int, DeskManager.InstansData> init_item_data_ = new Dictionary<int, DeskManager.InstansData>();
+
+	private static Dictionary<int, DeskManager.InstansData> old_item_data_from_system_ = new Dictionary<int, DeskManager.InstansData>();
+
+	private static Dictionary<int, string> item_category_data_dic_ = new Dictionary<int, string>();
+
+	private static Dictionary<int, DeskManager.ItemData> item_detail_data_dic_ = new Dictionary<int, DeskManager.ItemData>();
+
+	public class ItemData
+	{
+		public ItemData(CsvParser csv, int csv_y)
+		{
+			int num = 0;
+			this.id = csv.GetCellAsInteger(num++, csv_y);
+			this.name = csv.GetCellAsString(num++, csv_y);
+			this.category_id = csv.GetCellAsInteger(num++, csv_y);
+			this.prefab_name = csv.GetCellAsString(num++, csv_y);
+			this.asset_name = csv.GetCellAsString(num++, csv_y);
+			this.possession_flag = csv.GetCellAsString(num++, csv_y);
+			string cellAsString = csv.GetCellAsString(num++, csv_y);
+			this.seasonal = !string.IsNullOrEmpty(cellAsString);
+			if (this.seasonal)
+			{
+				string[] array = cellAsString.Split(new char[]
+				{
+					','
+				});
+				this.seasonal_month = new int[array.Length];
+				for (int i = 0; i < array.Length; i++)
+				{
+					this.seasonal_month[i] = int.Parse(array[i]);
+				}
+			}
+			else
+			{
+				this.seasonal_month = new int[0];
+			}
+			this.init_visible = (csv.GetCellAsString(num++, csv_y) == "○");
+			this.init_position = csv.GetCellAsVector3(num++, csv_y, ',');
+			this.init_rotation = csv.GetCellAsVector3(num++, csv_y, ',');
+			this.init_scale = csv.GetCellAsVector3(num++, csv_y, ',');
+			this.init_ui_position_scale = csv.GetCellAsReal(num++, csv_y);
+			this.init_ui_rotation_scale = csv.GetCellAsReal(num++, csv_y);
+		}
+
+		public readonly int id;
+
+		public readonly string name;
+
+		public readonly int category_id;
+
+		public readonly string prefab_name;
+
+		public readonly string asset_name;
+
+		public readonly bool seasonal;
+
+		public readonly string possession_flag;
+
+		public readonly int[] seasonal_month;
+
+		public readonly bool init_visible;
+
+		public readonly Vector3 init_position;
+
+		public readonly Vector3 init_rotation;
+
+		public readonly Vector3 init_scale;
+
+		public readonly float init_ui_position_scale;
+
+		public readonly float init_ui_rotation_scale;
+	}
+
+	public class InstansData
+	{
+		public InstansData(DeskManager.ItemData data)
+		{
+			this.id = data.id;
+			this.visible = true;
+			this.only_season_visible = data.seasonal;
+			this.visible = data.init_visible;
+			this.position = data.init_position;
+			this.rotation = data.init_rotation;
+			this.scale = data.init_scale;
+			this.item_data = data;
+		}
+
+		public InstansData(BinaryReader binary, int game_ver)
+		{
+			this.Deserialize(binary, game_ver);
+		}
+
+		public InstansData(DeskManager.InstansData instans_data)
+		{
+			this.id = instans_data.id;
+			this.visible = instans_data.visible;
+			this.only_season_visible = instans_data.only_season_visible;
+			this.position = instans_data.position;
+			this.rotation = instans_data.rotation;
+			this.scale = instans_data.scale;
+			this.item_data = instans_data.item_data;
+			this.item_object = instans_data.item_object;
+		}
+
+		public void Apply(GameObject apply_object, bool season_visible_setting)
+		{
+			if (apply_object == null)
+			{
+				return;
+			}
+			Transform transform = apply_object.transform;
+			transform.position = this.position;
+			transform.rotation = Quaternion.Euler(this.rotation);
+			transform.localScale = this.scale;
+			apply_object.SetActive(this.visible);
+			if (this.visible && season_visible_setting && this.only_season_visible && !this.IsNowMonthSeason())
+			{
+				apply_object.SetActive(false);
+			}
+		}
+
+		public bool IsNowMonthSeason()
+		{
+			if (!this.item_data.seasonal)
+			{
+				return false;
+			}
+			DateTime now = DateTime.Now;
+			return 0 <= Array.IndexOf<int>(this.item_data.seasonal_month, now.Month);
+		}
+
+		public bool IsPossessing()
+		{
+			return string.IsNullOrEmpty(this.item_data.possession_flag) || GameMain.Instance.CharacterMgr.status.GetFlag(this.item_data.possession_flag) == 1;
+		}
+
+		public void Serialize(BinaryWriter binary)
+		{
+			Action<Vector3> action = delegate(Vector3 data)
+			{
+				binary.Write(data.x);
+				binary.Write(data.y);
+				binary.Write(data.z);
+			};
+			binary.Write(this.id);
+			binary.Write(this.visible);
+			binary.Write(this.only_season_visible);
+			action(this.position);
+			action(this.rotation);
+			action(this.scale);
+		}
+
+		public void Deserialize(BinaryReader binary, int game_ver)
+		{
+			Func<Vector3> func = delegate
+			{
+				Vector3 zero = Vector3.zero;
+				zero.x = binary.ReadSingle();
+				zero.y = binary.ReadSingle();
+				zero.z = binary.ReadSingle();
+				return zero;
+			};
+			this.id = binary.ReadInt32();
+			this.visible = binary.ReadBoolean();
+			this.only_season_visible = binary.ReadBoolean();
+			this.position = func();
+			this.rotation = func();
+			this.scale = func();
+			if (DeskManager.item_detail_data_dic.ContainsKey(this.id))
+			{
+				this.item_data = DeskManager.item_detail_data_dic[this.id];
+			}
+		}
+
+		public int id;
+
+		public bool visible;
+
+		public bool only_season_visible;
+
+		public Vector3 position;
+
+		public Vector3 rotation;
+
+		public Vector3 scale;
+
+		public DeskManager.ItemData item_data;
+
+		public GameObject item_object;
+	}
+}

+ 165 - 0
Assembly-CSharp/DesktopDuplication.cs

@@ -0,0 +1,165 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class DesktopDuplication : MonoBehaviour
+{
+	public bool CreateDesktopDuplication(string display_device_name)
+	{
+		NDebug.Assert(this.class_pointer_ == IntPtr.Zero, "CreateDesktopDuplication二重に作成しようとしました。");
+		if (!global::DesktopDuplication.class_pointer_cache_.TryGetValue(display_device_name, out this.class_pointer_))
+		{
+			this.class_pointer_ = DLLDesktopDuplication.CreateDesktopDuplication(display_device_name);
+			if (this.class_pointer_ == IntPtr.Zero)
+			{
+				return false;
+			}
+			global::DesktopDuplication.class_pointer_cache_.Add(display_device_name, this.class_pointer_);
+		}
+		this.render_event_func_ptr_ = DLLDesktopDuplication.GetDesktopDuplicationRenderEventFunc();
+		this.render_event_id_ = DLLDesktopDuplication.GetDesktopDuplicationRenderID(this.class_pointer_);
+		this.routine_ = this.CallPluginAtEndOfFrames();
+		NDebug.Assert(this.render_coroutine_ == null, "CreateDesktopDuplication Coroutine 二重に作成しようとしました。");
+		this.render_coroutine_ = base.StartCoroutine(this.routine_);
+		return true;
+	}
+
+	private void OnEnable()
+	{
+		if (this.routine_ != null && this.render_coroutine_ == null)
+		{
+			this.render_coroutine_ = base.StartCoroutine(this.routine_);
+		}
+	}
+
+	private void OnDisable()
+	{
+		if (this.routine_ != null && this.render_coroutine_ != null)
+		{
+			base.StopCoroutine(this.render_coroutine_);
+			this.render_coroutine_ = null;
+		}
+	}
+
+	private void OnDestroy()
+	{
+		if (this.routine_ != null && this.render_coroutine_ != null)
+		{
+			base.StopCoroutine(this.render_coroutine_);
+			this.render_coroutine_ = null;
+		}
+		if (this.is_valid)
+		{
+		}
+		this.class_pointer_ = IntPtr.Zero;
+	}
+
+	public void OnApplicationQuit()
+	{
+		foreach (KeyValuePair<string, IntPtr> keyValuePair in global::DesktopDuplication.class_pointer_cache_)
+		{
+			if (keyValuePair.Value != IntPtr.Zero)
+			{
+				DLLDesktopDuplication.DeleteDesktopDuplication(keyValuePair.Value);
+			}
+		}
+		global::DesktopDuplication.class_pointer_cache_.Clear();
+		this.class_pointer_ = IntPtr.Zero;
+	}
+
+	public Texture2D render_texture
+	{
+		get
+		{
+			return this.render_tex_;
+		}
+		set
+		{
+			if (!this.is_valid)
+			{
+				return;
+			}
+			this.render_tex_ = value;
+			if (this.render_tex_ != null)
+			{
+				DLLDesktopDuplication.SetDesktopDuplicationDrawTex(this.class_pointer_, this.render_tex_.GetNativeTexturePtr());
+			}
+		}
+	}
+
+	public int width
+	{
+		get
+		{
+			return (!this.is_valid) ? 0 : DLLDesktopDuplication.GetDesktopDuplicationRenderWidth(this.class_pointer_);
+		}
+	}
+
+	public int height
+	{
+		get
+		{
+			return (!this.is_valid) ? 0 : DLLDesktopDuplication.GetDesktopDuplicationRenderHeight(this.class_pointer_);
+		}
+	}
+
+	public bool is_mouse_pointer_visible
+	{
+		get
+		{
+			return this.is_valid && DLLDesktopDuplication.GetDesktopDuplicationIsMousePointerVisible(this.class_pointer_) != 0;
+		}
+	}
+
+	public int mouse_pointer_x
+	{
+		get
+		{
+			return (!this.is_valid) ? 0 : DLLDesktopDuplication.GetDesktopDuplicationGetMousePointerX(this.class_pointer_);
+		}
+	}
+
+	public int mouse_pointer_y
+	{
+		get
+		{
+			return (!this.is_valid) ? 0 : DLLDesktopDuplication.GetDesktopDuplicationGetMousePointerY(this.class_pointer_);
+		}
+	}
+
+	public bool is_valid
+	{
+		get
+		{
+			return this.class_pointer_ != IntPtr.Zero;
+		}
+	}
+
+	private IEnumerator CallPluginAtEndOfFrames()
+	{
+		for (;;)
+		{
+			yield return new WaitForEndOfFrame();
+			if (this.is_valid && this.render_texture != null)
+			{
+				GL.IssuePluginEvent(this.render_event_func_ptr_, this.render_event_id_);
+			}
+		}
+		yield break;
+	}
+
+	private static Dictionary<string, IntPtr> class_pointer_cache_ = new Dictionary<string, IntPtr>();
+
+	private IntPtr class_pointer_ = IntPtr.Zero;
+
+	private Texture2D render_tex_;
+
+	private int render_event_id_ = -1;
+
+	private IEnumerator routine_;
+
+	private Coroutine render_coroutine_;
+
+	private IntPtr render_event_func_ptr_;
+}

+ 65 - 0
Assembly-CSharp/DesktopScreen.cs

@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class DesktopScreen : MonoBehaviour
+{
+	private void Start()
+	{
+		this.m_nDisplayNo = GameMain.Instance.CMSystem.DesktopCaptureMonitorNo;
+		Material sharedMaterial = base.GetComponent<Renderer>().sharedMaterial;
+		sharedMaterial.mainTexture = Resources.Load<Texture2D>("System/Texture/unsupported");
+		this.m_dup = base.gameObject.AddComponent<global::DesktopDuplication>();
+		bool flag = this.m_dup.CreateDesktopDuplication("\\\\.\\DISPLAY" + this.m_nDisplayNo.ToString());
+		Size<float> size;
+		if (flag && this.m_dup.width != 0 && this.m_dup.height != 0)
+		{
+			Debug.Log("ディスプレイクラス生成成功:DISPLAY" + this.m_nDisplayNo.ToString());
+			Texture2D texture2D = new Texture2D(this.m_dup.width, this.m_dup.height, TextureFormat.BGRA32, false);
+			this.m_dup.render_texture = texture2D;
+			sharedMaterial.mainTextureScale = new Vector2(-1f, 1f);
+			sharedMaterial.mainTexture = texture2D;
+			size.width = (float)this.m_dup.width;
+			size.height = (float)this.m_dup.height;
+			this.m_trCursor = base.transform.Find("Cursor");
+			this.m_trCursorBack = base.transform.Find("Screen_back/CursorBack");
+		}
+		else
+		{
+			Debug.Log("ディスプレイクラス生成失敗:DISPLAY" + this.m_nDisplayNo.ToString());
+			List<Monitor.InfoData> info_data_list = Monitor.info_data_list;
+			if (0 < this.m_nDisplayNo && this.m_nDisplayNo <= info_data_list.Count)
+			{
+				Monitor.InfoData infoData = info_data_list[this.m_nDisplayNo - 1];
+				size.width = (float)infoData.width;
+				size.height = (float)infoData.height;
+			}
+			else
+			{
+				Debug.Log("ディスプレイ番号無し:DISPLAY" + this.m_nDisplayNo.ToString());
+				size.width = 1600f;
+				size.height = 900f;
+			}
+		}
+		base.transform.localScale = new Vector3(this.m_fSize, 1f, size.height * this.m_fSize / size.width);
+	}
+
+	private void Update()
+	{
+		if (this.m_trCursor != null && this.m_dup.is_mouse_pointer_visible)
+		{
+			this.m_trCursor.localPosition = new Vector3((float)this.m_dup.mouse_pointer_x / (float)this.m_dup.width * 10f - 5f, 0.005f, (float)this.m_dup.mouse_pointer_y / (float)this.m_dup.height * -10f + 5f);
+			this.m_trCursorBack.localPosition = this.m_trCursor.localPosition;
+		}
+	}
+
+	public int m_nDisplayNo = 1;
+
+	public float m_fSize = 0.3f;
+
+	private global::DesktopDuplication m_dup;
+
+	private Transform m_trCursor;
+
+	private Transform m_trCursorBack;
+}

+ 407 - 0
Assembly-CSharp/Detonator.cs

@@ -0,0 +1,407 @@
+using System;
+using UnityEngine;
+
+[AddComponentMenu("Detonator/Detonator")]
+public class Detonator : MonoBehaviour
+{
+	private void Awake()
+	{
+		this.FillDefaultMaterials();
+		this.components = base.GetComponents(typeof(DetonatorComponent));
+		foreach (DetonatorComponent detonatorComponent in this.components)
+		{
+			if (detonatorComponent is DetonatorFireball)
+			{
+				this._fireball = (detonatorComponent as DetonatorFireball);
+			}
+			if (detonatorComponent is DetonatorSparks)
+			{
+				this._sparks = (detonatorComponent as DetonatorSparks);
+			}
+			if (detonatorComponent is DetonatorShockwave)
+			{
+				this._shockwave = (detonatorComponent as DetonatorShockwave);
+			}
+			if (detonatorComponent is DetonatorSmoke)
+			{
+				this._smoke = (detonatorComponent as DetonatorSmoke);
+			}
+			if (detonatorComponent is DetonatorGlow)
+			{
+				this._glow = (detonatorComponent as DetonatorGlow);
+			}
+			if (detonatorComponent is DetonatorLight)
+			{
+				this._light = (detonatorComponent as DetonatorLight);
+			}
+			if (detonatorComponent is DetonatorForce)
+			{
+				this._force = (detonatorComponent as DetonatorForce);
+			}
+			if (detonatorComponent is DetonatorHeatwave)
+			{
+				this._heatwave = (detonatorComponent as DetonatorHeatwave);
+			}
+		}
+		if (!this._fireball && this.autoCreateFireball)
+		{
+			this._fireball = base.gameObject.AddComponent<DetonatorFireball>();
+			this._fireball.Reset();
+		}
+		if (!this._smoke && this.autoCreateSmoke)
+		{
+			this._smoke = base.gameObject.AddComponent<DetonatorSmoke>();
+			this._smoke.Reset();
+		}
+		if (!this._sparks && this.autoCreateSparks)
+		{
+			this._sparks = base.gameObject.AddComponent<DetonatorSparks>();
+			this._sparks.Reset();
+		}
+		if (!this._shockwave && this.autoCreateShockwave)
+		{
+			this._shockwave = base.gameObject.AddComponent<DetonatorShockwave>();
+			this._shockwave.Reset();
+		}
+		if (!this._glow && this.autoCreateGlow)
+		{
+			this._glow = base.gameObject.AddComponent<DetonatorGlow>();
+			this._glow.Reset();
+		}
+		if (!this._light && this.autoCreateLight)
+		{
+			this._light = base.gameObject.AddComponent<DetonatorLight>();
+			this._light.Reset();
+		}
+		if (!this._force && this.autoCreateForce)
+		{
+			this._force = base.gameObject.AddComponent<DetonatorForce>();
+			this._force.Reset();
+		}
+		if (!this._heatwave && this.autoCreateHeatwave && SystemInfo.supportsImageEffects)
+		{
+			this._heatwave = base.gameObject.AddComponent<DetonatorHeatwave>();
+			this._heatwave.Reset();
+		}
+		this.components = base.GetComponents(typeof(DetonatorComponent));
+	}
+
+	private void FillDefaultMaterials()
+	{
+		if (!this.fireballAMaterial)
+		{
+			this.fireballAMaterial = Detonator.DefaultFireballAMaterial();
+		}
+		if (!this.fireballBMaterial)
+		{
+			this.fireballBMaterial = Detonator.DefaultFireballBMaterial();
+		}
+		if (!this.smokeAMaterial)
+		{
+			this.smokeAMaterial = Detonator.DefaultSmokeAMaterial();
+		}
+		if (!this.smokeBMaterial)
+		{
+			this.smokeBMaterial = Detonator.DefaultSmokeBMaterial();
+		}
+		if (!this.shockwaveMaterial)
+		{
+			this.shockwaveMaterial = Detonator.DefaultShockwaveMaterial();
+		}
+		if (!this.sparksMaterial)
+		{
+			this.sparksMaterial = Detonator.DefaultSparksMaterial();
+		}
+		if (!this.glowMaterial)
+		{
+			this.glowMaterial = Detonator.DefaultGlowMaterial();
+		}
+		if (!this.heatwaveMaterial)
+		{
+			this.heatwaveMaterial = Detonator.DefaultHeatwaveMaterial();
+		}
+	}
+
+	private void Start()
+	{
+		if (this.explodeOnStart)
+		{
+			this.UpdateComponents();
+			this.Explode();
+		}
+	}
+
+	private void Update()
+	{
+		if (this.destroyTime > 0f && this._lastExplosionTime + this.destroyTime <= Time.time)
+		{
+			UnityEngine.Object.Destroy(base.gameObject);
+		}
+	}
+
+	private void UpdateComponents()
+	{
+		if (this._firstComponentUpdate)
+		{
+			foreach (DetonatorComponent detonatorComponent in this.components)
+			{
+				detonatorComponent.Init();
+				detonatorComponent.SetStartValues();
+			}
+			this._firstComponentUpdate = false;
+		}
+		if (!this._firstComponentUpdate)
+		{
+			float num = this.size / Detonator._baseSize;
+			Vector3 vector = new Vector3(this.direction.x * num, this.direction.y * num, this.direction.z * num);
+			float timeScale = this.duration / Detonator._baseDuration;
+			foreach (DetonatorComponent detonatorComponent2 in this.components)
+			{
+				if (detonatorComponent2.detonatorControlled)
+				{
+					detonatorComponent2.size = detonatorComponent2.startSize * num;
+					detonatorComponent2.timeScale = timeScale;
+					detonatorComponent2.detail = detonatorComponent2.startDetail * this.detail;
+					detonatorComponent2.force = new Vector3(detonatorComponent2.startForce.x * num + vector.x, detonatorComponent2.startForce.y * num + vector.y, detonatorComponent2.startForce.z * num + vector.z);
+					detonatorComponent2.velocity = new Vector3(detonatorComponent2.startVelocity.x * num + vector.x, detonatorComponent2.startVelocity.y * num + vector.y, detonatorComponent2.startVelocity.z * num + vector.z);
+					detonatorComponent2.color = Color.Lerp(detonatorComponent2.startColor, this.color, this.color.a);
+				}
+			}
+		}
+	}
+
+	public void Explode()
+	{
+		this._lastExplosionTime = Time.time;
+		foreach (DetonatorComponent detonatorComponent in this.components)
+		{
+			this.UpdateComponents();
+			detonatorComponent.Explode();
+		}
+	}
+
+	public void Reset()
+	{
+		this.size = 10f;
+		this.color = Detonator._baseColor;
+		this.duration = Detonator._baseDuration;
+		this.FillDefaultMaterials();
+	}
+
+	public static Material DefaultFireballAMaterial()
+	{
+		if (Detonator.defaultFireballAMaterial != null)
+		{
+			return Detonator.defaultFireballAMaterial;
+		}
+		Detonator.defaultFireballAMaterial = new Material(Shader.Find("Particles/Additive"));
+		Detonator.defaultFireballAMaterial.name = "FireballA-Default";
+		Texture2D mainTexture = Resources.Load("Detonator/Textures/Fireball") as Texture2D;
+		Detonator.defaultFireballAMaterial.SetColor("_TintColor", Color.white);
+		Detonator.defaultFireballAMaterial.mainTexture = mainTexture;
+		Detonator.defaultFireballAMaterial.mainTextureScale = new Vector2(0.5f, 1f);
+		return Detonator.defaultFireballAMaterial;
+	}
+
+	public static Material DefaultFireballBMaterial()
+	{
+		if (Detonator.defaultFireballBMaterial != null)
+		{
+			return Detonator.defaultFireballBMaterial;
+		}
+		Detonator.defaultFireballBMaterial = new Material(Shader.Find("Particles/Additive"));
+		Detonator.defaultFireballBMaterial.name = "FireballB-Default";
+		Texture2D mainTexture = Resources.Load("Detonator/Textures/Fireball") as Texture2D;
+		Detonator.defaultFireballBMaterial.SetColor("_TintColor", Color.white);
+		Detonator.defaultFireballBMaterial.mainTexture = mainTexture;
+		Detonator.defaultFireballBMaterial.mainTextureScale = new Vector2(0.5f, 1f);
+		Detonator.defaultFireballBMaterial.mainTextureOffset = new Vector2(0.5f, 0f);
+		return Detonator.defaultFireballBMaterial;
+	}
+
+	public static Material DefaultSmokeAMaterial()
+	{
+		if (Detonator.defaultSmokeAMaterial != null)
+		{
+			return Detonator.defaultSmokeAMaterial;
+		}
+		Detonator.defaultSmokeAMaterial = new Material(Shader.Find("Particles/Alpha Blended"));
+		Detonator.defaultSmokeAMaterial.name = "SmokeA-Default";
+		Texture2D mainTexture = Resources.Load("Detonator/Textures/Smoke") as Texture2D;
+		Detonator.defaultSmokeAMaterial.SetColor("_TintColor", Color.white);
+		Detonator.defaultSmokeAMaterial.mainTexture = mainTexture;
+		Detonator.defaultSmokeAMaterial.mainTextureScale = new Vector2(0.5f, 1f);
+		return Detonator.defaultSmokeAMaterial;
+	}
+
+	public static Material DefaultSmokeBMaterial()
+	{
+		if (Detonator.defaultSmokeBMaterial != null)
+		{
+			return Detonator.defaultSmokeBMaterial;
+		}
+		Detonator.defaultSmokeBMaterial = new Material(Shader.Find("Particles/Alpha Blended"));
+		Detonator.defaultSmokeBMaterial.name = "SmokeB-Default";
+		Texture2D mainTexture = Resources.Load("Detonator/Textures/Smoke") as Texture2D;
+		Detonator.defaultSmokeBMaterial.SetColor("_TintColor", Color.white);
+		Detonator.defaultSmokeBMaterial.mainTexture = mainTexture;
+		Detonator.defaultSmokeBMaterial.mainTextureScale = new Vector2(0.5f, 1f);
+		Detonator.defaultSmokeBMaterial.mainTextureOffset = new Vector2(0.5f, 0f);
+		return Detonator.defaultSmokeBMaterial;
+	}
+
+	public static Material DefaultSparksMaterial()
+	{
+		if (Detonator.defaultSparksMaterial != null)
+		{
+			return Detonator.defaultSparksMaterial;
+		}
+		Detonator.defaultSparksMaterial = new Material(Shader.Find("Particles/Additive"));
+		Detonator.defaultSparksMaterial.name = "Sparks-Default";
+		Texture2D mainTexture = Resources.Load("Detonator/Textures/GlowDot") as Texture2D;
+		Detonator.defaultSparksMaterial.SetColor("_TintColor", Color.white);
+		Detonator.defaultSparksMaterial.mainTexture = mainTexture;
+		return Detonator.defaultSparksMaterial;
+	}
+
+	public static Material DefaultShockwaveMaterial()
+	{
+		if (Detonator.defaultShockwaveMaterial != null)
+		{
+			return Detonator.defaultShockwaveMaterial;
+		}
+		Detonator.defaultShockwaveMaterial = new Material(Shader.Find("Particles/Additive"));
+		Detonator.defaultShockwaveMaterial.name = "Shockwave-Default";
+		Texture2D mainTexture = Resources.Load("Detonator/Textures/Shockwave") as Texture2D;
+		Detonator.defaultShockwaveMaterial.SetColor("_TintColor", new Color(0.1f, 0.1f, 0.1f, 1f));
+		Detonator.defaultShockwaveMaterial.mainTexture = mainTexture;
+		return Detonator.defaultShockwaveMaterial;
+	}
+
+	public static Material DefaultGlowMaterial()
+	{
+		if (Detonator.defaultGlowMaterial != null)
+		{
+			return Detonator.defaultGlowMaterial;
+		}
+		Detonator.defaultGlowMaterial = new Material(Shader.Find("Particles/Additive"));
+		Detonator.defaultGlowMaterial.name = "Glow-Default";
+		Texture2D mainTexture = Resources.Load("Detonator/Textures/Glow") as Texture2D;
+		Detonator.defaultGlowMaterial.SetColor("_TintColor", Color.white);
+		Detonator.defaultGlowMaterial.mainTexture = mainTexture;
+		return Detonator.defaultGlowMaterial;
+	}
+
+	public static Material DefaultHeatwaveMaterial()
+	{
+		if (!SystemInfo.supportsImageEffects)
+		{
+			return null;
+		}
+		if (Detonator.defaultHeatwaveMaterial != null)
+		{
+			return Detonator.defaultHeatwaveMaterial;
+		}
+		Detonator.defaultHeatwaveMaterial = new Material(Shader.Find("HeatDistort"));
+		Detonator.defaultHeatwaveMaterial.name = "Heatwave-Default";
+		Texture2D value = Resources.Load("Detonator/Textures/Heatwave") as Texture2D;
+		Detonator.defaultHeatwaveMaterial.SetTexture("_BumpMap", value);
+		return Detonator.defaultHeatwaveMaterial;
+	}
+
+	private static float _baseSize = 30f;
+
+	private static Color _baseColor = new Color(1f, 0.423f, 0f, 0.5f);
+
+	private static float _baseDuration = 3f;
+
+	public float size = 10f;
+
+	public Color color = Detonator._baseColor;
+
+	public bool explodeOnStart = true;
+
+	public float duration = Detonator._baseDuration;
+
+	public float detail = 1f;
+
+	public float upwardsBias;
+
+	public float destroyTime = 7f;
+
+	public bool useWorldSpace = true;
+
+	public Vector3 direction = Vector3.zero;
+
+	public Material fireballAMaterial;
+
+	public Material fireballBMaterial;
+
+	public Material smokeAMaterial;
+
+	public Material smokeBMaterial;
+
+	public Material shockwaveMaterial;
+
+	public Material sparksMaterial;
+
+	public Material glowMaterial;
+
+	public Material heatwaveMaterial;
+
+	private Component[] components;
+
+	private DetonatorFireball _fireball;
+
+	private DetonatorSparks _sparks;
+
+	private DetonatorShockwave _shockwave;
+
+	private DetonatorSmoke _smoke;
+
+	private DetonatorGlow _glow;
+
+	private DetonatorLight _light;
+
+	private DetonatorForce _force;
+
+	private DetonatorHeatwave _heatwave;
+
+	public bool autoCreateFireball = true;
+
+	public bool autoCreateSparks = true;
+
+	public bool autoCreateShockwave = true;
+
+	public bool autoCreateSmoke = true;
+
+	public bool autoCreateGlow = true;
+
+	public bool autoCreateLight = true;
+
+	public bool autoCreateForce = true;
+
+	public bool autoCreateHeatwave;
+
+	private float _lastExplosionTime = 1000f;
+
+	private bool _firstComponentUpdate = true;
+
+	private Component[] _subDetonators;
+
+	public static Material defaultFireballAMaterial;
+
+	public static Material defaultFireballBMaterial;
+
+	public static Material defaultSmokeAMaterial;
+
+	public static Material defaultSmokeBMaterial;
+
+	public static Material defaultShockwaveMaterial;
+
+	public static Material defaultSparksMaterial;
+
+	public static Material defaultGlowMaterial;
+
+	public static Material defaultHeatwaveMaterial;
+}

+ 235 - 0
Assembly-CSharp/DetonatorBurstEmitter.cs

@@ -0,0 +1,235 @@
+using System;
+using UnityEngine;
+
+public class DetonatorBurstEmitter : DetonatorComponent
+{
+	public override void Init()
+	{
+		MonoBehaviour.print("UNUSED");
+	}
+
+	public void Awake()
+	{
+		this._particleEmitter = base.gameObject.AddComponent<EllipsoidParticleEmitter>();
+		this._particleRenderer = base.gameObject.AddComponent<ParticleRenderer>();
+		this._particleAnimator = base.gameObject.AddComponent<ParticleAnimator>();
+		this._particleEmitter.hideFlags = HideFlags.HideAndDontSave;
+		this._particleRenderer.hideFlags = HideFlags.HideAndDontSave;
+		this._particleAnimator.hideFlags = HideFlags.HideAndDontSave;
+		this._particleAnimator.damping = this._baseDamping;
+		this._particleEmitter.emit = false;
+		this._particleRenderer.maxParticleSize = this.maxScreenSize;
+		this._particleRenderer.material = this.material;
+		this._particleRenderer.material.color = Color.white;
+		this._particleAnimator.sizeGrow = this.sizeGrow;
+		if (this.explodeOnAwake)
+		{
+			this.Explode();
+		}
+	}
+
+	private void Update()
+	{
+		if (this.exponentialGrowth)
+		{
+			float num = Time.time - this._emitTime;
+			float num2 = this.SizeFunction(num - DetonatorBurstEmitter.epsilon);
+			float num3 = this.SizeFunction(num);
+			float num4 = (num3 / num2 - 1f) / DetonatorBurstEmitter.epsilon;
+			this._particleAnimator.sizeGrow = num4;
+		}
+		else
+		{
+			this._particleAnimator.sizeGrow = this.sizeGrow;
+		}
+		if (this._delayedExplosionStarted)
+		{
+			this._explodeDelay -= Time.deltaTime;
+			if (this._explodeDelay <= 0f)
+			{
+				this.Explode();
+			}
+		}
+	}
+
+	private float SizeFunction(float elapsedTime)
+	{
+		float num = 1f - 1f / (1f + elapsedTime * this.speed);
+		return this.initFraction + (1f - this.initFraction) * num;
+	}
+
+	public void Reset()
+	{
+		this.size = this._baseSize;
+		this.color = this._baseColor;
+		this.damping = this._baseDamping;
+	}
+
+	public override void Explode()
+	{
+		if (this.on)
+		{
+			this._particleEmitter.useWorldSpace = this.useWorldSpace;
+			this._scaledDuration = this.timeScale * this.duration;
+			this._scaledDurationVariation = this.timeScale * this.durationVariation;
+			this._scaledStartRadius = this.size * this.startRadius;
+			this._particleRenderer.particleRenderMode = this.renderMode;
+			if (!this._delayedExplosionStarted)
+			{
+				this._explodeDelay = this.explodeDelayMin + UnityEngine.Random.value * (this.explodeDelayMax - this.explodeDelayMin);
+			}
+			if (this._explodeDelay <= 0f)
+			{
+				Color[] array = this._particleAnimator.colorAnimation;
+				if (this.useExplicitColorAnimation)
+				{
+					array[0] = this.colorAnimation[0];
+					array[1] = this.colorAnimation[1];
+					array[2] = this.colorAnimation[2];
+					array[3] = this.colorAnimation[3];
+					array[4] = this.colorAnimation[4];
+				}
+				else
+				{
+					array[0] = new Color(this.color.r, this.color.g, this.color.b, this.color.a * 0.7f);
+					array[1] = new Color(this.color.r, this.color.g, this.color.b, this.color.a * 1f);
+					array[2] = new Color(this.color.r, this.color.g, this.color.b, this.color.a * 0.5f);
+					array[3] = new Color(this.color.r, this.color.g, this.color.b, this.color.a * 0.3f);
+					array[4] = new Color(this.color.r, this.color.g, this.color.b, this.color.a * 0f);
+				}
+				this._particleAnimator.colorAnimation = array;
+				this._particleRenderer.material = this.material;
+				this._particleAnimator.force = this.force;
+				this._tmpCount = this.count * this.detail;
+				if (this._tmpCount < 1f)
+				{
+					this._tmpCount = 1f;
+				}
+				if (this._particleEmitter.useWorldSpace)
+				{
+					this._thisPos = base.gameObject.transform.position;
+				}
+				else
+				{
+					this._thisPos = new Vector3(0f, 0f, 0f);
+				}
+				int num = 1;
+				while ((float)num <= this._tmpCount)
+				{
+					this._tmpPos = Vector3.Scale(UnityEngine.Random.insideUnitSphere, new Vector3(this._scaledStartRadius, this._scaledStartRadius, this._scaledStartRadius));
+					this._tmpPos = this._thisPos + this._tmpPos;
+					this._tmpDir = Vector3.Scale(UnityEngine.Random.insideUnitSphere, new Vector3(this.velocity.x, this.velocity.y, this.velocity.z));
+					this._tmpDir.y = this._tmpDir.y + 2f * (Mathf.Abs(this._tmpDir.y) * this.upwardsBias);
+					if (this.randomRotation)
+					{
+						this._randomizedRotation = UnityEngine.Random.Range(-1f, 1f);
+						this._tmpAngularVelocity = UnityEngine.Random.Range(-1f, 1f) * this.angularVelocity;
+					}
+					else
+					{
+						this._randomizedRotation = 0f;
+						this._tmpAngularVelocity = this.angularVelocity;
+					}
+					this._tmpDir = Vector3.Scale(this._tmpDir, new Vector3(this.size, this.size, this.size));
+					this._tmpParticleSize = this.size * (this.particleSize + UnityEngine.Random.value * this.sizeVariation);
+					this._tmpDuration = this._scaledDuration + UnityEngine.Random.value * this._scaledDurationVariation;
+					this._particleEmitter.Emit(this._tmpPos, this._tmpDir, this._tmpParticleSize, this._tmpDuration, this.color, this._randomizedRotation, this._tmpAngularVelocity);
+					num++;
+				}
+				this._emitTime = Time.time;
+				this._delayedExplosionStarted = false;
+				this._explodeDelay = 0f;
+			}
+			else
+			{
+				this._delayedExplosionStarted = true;
+			}
+		}
+	}
+
+	private ParticleEmitter _particleEmitter;
+
+	private ParticleRenderer _particleRenderer;
+
+	private ParticleAnimator _particleAnimator;
+
+	private float _baseDamping = 0.1300004f;
+
+	private float _baseSize = 1f;
+
+	private Color _baseColor = Color.white;
+
+	public float damping = 1f;
+
+	public float startRadius = 1f;
+
+	public float maxScreenSize = 2f;
+
+	public bool explodeOnAwake;
+
+	public bool oneShot = true;
+
+	public float sizeVariation;
+
+	public float particleSize = 1f;
+
+	public float count = 1f;
+
+	public float sizeGrow = 20f;
+
+	public bool exponentialGrowth = true;
+
+	public float durationVariation;
+
+	public bool useWorldSpace = true;
+
+	public float upwardsBias;
+
+	public float angularVelocity = 20f;
+
+	public bool randomRotation = true;
+
+	public ParticleRenderMode renderMode;
+
+	public bool useExplicitColorAnimation;
+
+	public Color[] colorAnimation = new Color[5];
+
+	private bool _delayedExplosionStarted;
+
+	private float _explodeDelay;
+
+	public Material material;
+
+	private float _emitTime;
+
+	private float speed = 3f;
+
+	private float initFraction = 0.1f;
+
+	private static float epsilon = 0.01f;
+
+	private float _tmpParticleSize;
+
+	private Vector3 _tmpPos;
+
+	private Vector3 _tmpDir;
+
+	private Vector3 _thisPos;
+
+	private float _tmpDuration;
+
+	private float _tmpCount;
+
+	private float _scaledDuration;
+
+	private float _scaledDurationVariation;
+
+	private float _scaledStartRadius;
+
+	private float _scaledColor;
+
+	private float _randomizedRotation;
+
+	private float _tmpAngularVelocity;
+}

+ 94 - 0
Assembly-CSharp/DetonatorCloudRing.cs

@@ -0,0 +1,94 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(Detonator))]
+public class DetonatorCloudRing : DetonatorComponent
+{
+	public override void Init()
+	{
+		this.FillMaterials(false);
+		this.BuildCloudRing();
+	}
+
+	public void FillMaterials(bool wipe)
+	{
+		if (!this.cloudRingMaterial || wipe)
+		{
+			this.cloudRingMaterial = base.MyDetonator().smokeBMaterial;
+		}
+	}
+
+	public void BuildCloudRing()
+	{
+		this._cloudRing = new GameObject("CloudRing");
+		this._cloudRingEmitter = this._cloudRing.AddComponent<DetonatorBurstEmitter>();
+		this._cloudRing.transform.parent = base.transform;
+		this._cloudRing.transform.localPosition = this.localPosition;
+		this._cloudRingEmitter.material = this.cloudRingMaterial;
+		this._cloudRingEmitter.useExplicitColorAnimation = true;
+	}
+
+	public void UpdateCloudRing()
+	{
+		this._cloudRing.transform.localPosition = Vector3.Scale(this.localPosition, new Vector3(this.size, this.size, this.size));
+		this._cloudRingEmitter.color = this.color;
+		this._cloudRingEmitter.duration = this.duration;
+		this._cloudRingEmitter.durationVariation = this.duration / 4f;
+		this._cloudRingEmitter.count = (float)((int)(this.detail * 50f));
+		this._cloudRingEmitter.particleSize = 10f;
+		this._cloudRingEmitter.sizeVariation = 2f;
+		this._cloudRingEmitter.velocity = this.velocity;
+		this._cloudRingEmitter.startRadius = 3f;
+		this._cloudRingEmitter.size = this.size;
+		this._cloudRingEmitter.force = this.force;
+		this._cloudRingEmitter.explodeDelayMin = this.explodeDelayMin;
+		this._cloudRingEmitter.explodeDelayMax = this.explodeDelayMax;
+		Color color = Color.Lerp(this.color, new Color(0.2f, 0.2f, 0.2f, 0.6f), 0.5f);
+		Color color2 = new Color(0.2f, 0.2f, 0.2f, 0.5f);
+		Color color3 = new Color(0.2f, 0.2f, 0.2f, 0.3f);
+		Color color4 = new Color(0.2f, 0.2f, 0.2f, 0f);
+		this._cloudRingEmitter.colorAnimation[0] = color;
+		this._cloudRingEmitter.colorAnimation[1] = color2;
+		this._cloudRingEmitter.colorAnimation[2] = color2;
+		this._cloudRingEmitter.colorAnimation[3] = color3;
+		this._cloudRingEmitter.colorAnimation[4] = color4;
+	}
+
+	public void Reset()
+	{
+		this.FillMaterials(true);
+		this.on = true;
+		this.size = this._baseSize;
+		this.duration = this._baseDuration;
+		this.explodeDelayMin = 0f;
+		this.explodeDelayMax = 0f;
+		this.color = this._baseColor;
+		this.velocity = this._baseVelocity;
+		this.force = this._baseForce;
+	}
+
+	public override void Explode()
+	{
+		if (this.on)
+		{
+			this.UpdateCloudRing();
+			this._cloudRingEmitter.Explode();
+		}
+	}
+
+	private float _baseSize = 1f;
+
+	private float _baseDuration = 5f;
+
+	private Vector3 _baseVelocity = new Vector3(155f, 5f, 155f);
+
+	private Color _baseColor = Color.white;
+
+	private Vector3 _baseForce = new Vector3(0.162f, 2.56f, 0f);
+
+	private GameObject _cloudRing;
+
+	private DetonatorBurstEmitter _cloudRingEmitter;
+
+	public Material cloudRingMaterial;
+}

+ 73 - 0
Assembly-CSharp/DetonatorComponent.cs

@@ -0,0 +1,73 @@
+using System;
+using UnityEngine;
+
+public abstract class DetonatorComponent : MonoBehaviour
+{
+	public abstract void Explode();
+
+	public abstract void Init();
+
+	public void SetStartValues()
+	{
+		this.startSize = this.size;
+		this.startForce = this.force;
+		this.startVelocity = this.velocity;
+		this.startDuration = this.duration;
+		this.startDetail = this.detail;
+		this.startColor = this.color;
+		this.startLocalPosition = this.localPosition;
+	}
+
+	public Detonator MyDetonator()
+	{
+		return base.GetComponent("Detonator") as Detonator;
+	}
+
+	public bool on = true;
+
+	public bool detonatorControlled = true;
+
+	[HideInInspector]
+	public float startSize = 1f;
+
+	public float size = 1f;
+
+	public float explodeDelayMin;
+
+	public float explodeDelayMax;
+
+	[HideInInspector]
+	public float startDuration = 2f;
+
+	public float duration = 2f;
+
+	[HideInInspector]
+	public float timeScale = 1f;
+
+	[HideInInspector]
+	public float startDetail = 1f;
+
+	public float detail = 1f;
+
+	[HideInInspector]
+	public Color startColor = Color.white;
+
+	public Color color = Color.white;
+
+	[HideInInspector]
+	public Vector3 startLocalPosition = Vector3.zero;
+
+	public Vector3 localPosition = Vector3.zero;
+
+	[HideInInspector]
+	public Vector3 startForce = Vector3.zero;
+
+	public Vector3 force = Vector3.zero;
+
+	[HideInInspector]
+	public Vector3 startVelocity = Vector3.zero;
+
+	public Vector3 velocity = Vector3.zero;
+
+	public float detailThreshold;
+}

+ 219 - 0
Assembly-CSharp/DetonatorFireball.cs

@@ -0,0 +1,219 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(Detonator))]
+[AddComponentMenu("Detonator/Fireball")]
+public class DetonatorFireball : DetonatorComponent
+{
+	public override void Init()
+	{
+		this.FillMaterials(false);
+		this.BuildFireballA();
+		this.BuildFireballB();
+		this.BuildFireShadow();
+	}
+
+	public void FillMaterials(bool wipe)
+	{
+		if (!this.fireballAMaterial || wipe)
+		{
+			this.fireballAMaterial = base.MyDetonator().fireballAMaterial;
+		}
+		if (!this.fireballBMaterial || wipe)
+		{
+			this.fireballBMaterial = base.MyDetonator().fireballBMaterial;
+		}
+		if (!this.fireShadowMaterial || wipe)
+		{
+			if ((double)UnityEngine.Random.value > 0.5)
+			{
+				this.fireShadowMaterial = base.MyDetonator().smokeAMaterial;
+			}
+			else
+			{
+				this.fireShadowMaterial = base.MyDetonator().smokeBMaterial;
+			}
+		}
+	}
+
+	public void BuildFireballA()
+	{
+		this._fireballA = new GameObject("FireballA");
+		this._fireballAEmitter = this._fireballA.AddComponent<DetonatorBurstEmitter>();
+		this._fireballA.transform.parent = base.transform;
+		this._fireballA.transform.localRotation = Quaternion.identity;
+		this._fireballAEmitter.material = this.fireballAMaterial;
+		this._fireballAEmitter.useWorldSpace = base.MyDetonator().useWorldSpace;
+		this._fireballAEmitter.upwardsBias = base.MyDetonator().upwardsBias;
+	}
+
+	public void UpdateFireballA()
+	{
+		this._fireballA.transform.localPosition = Vector3.Scale(this.localPosition, new Vector3(this.size, this.size, this.size));
+		this._fireballAEmitter.color = this.color;
+		this._fireballAEmitter.duration = this.duration * 0.5f;
+		this._fireballAEmitter.durationVariation = this.duration * 0.5f;
+		this._fireballAEmitter.count = 2f;
+		this._fireballAEmitter.timeScale = this.timeScale;
+		this._fireballAEmitter.detail = this.detail;
+		this._fireballAEmitter.particleSize = 14f;
+		this._fireballAEmitter.sizeVariation = 3f;
+		this._fireballAEmitter.velocity = this.velocity;
+		this._fireballAEmitter.startRadius = 4f;
+		this._fireballAEmitter.size = this.size;
+		this._fireballAEmitter.useExplicitColorAnimation = true;
+		Color b = new Color(1f, 1f, 1f, 0.5f);
+		Color b2 = new Color(0.6f, 0.15f, 0.15f, 0.3f);
+		Color color = new Color(0.1f, 0.2f, 0.45f, 0f);
+		this._fireballAEmitter.colorAnimation[0] = Color.Lerp(this.color, b, 0.8f);
+		this._fireballAEmitter.colorAnimation[1] = Color.Lerp(this.color, b, 0.5f);
+		this._fireballAEmitter.colorAnimation[2] = this.color;
+		this._fireballAEmitter.colorAnimation[3] = Color.Lerp(this.color, b2, 0.7f);
+		this._fireballAEmitter.colorAnimation[4] = color;
+		this._fireballAEmitter.explodeDelayMin = this.explodeDelayMin;
+		this._fireballAEmitter.explodeDelayMax = this.explodeDelayMax;
+	}
+
+	public void BuildFireballB()
+	{
+		this._fireballB = new GameObject("FireballB");
+		this._fireballBEmitter = this._fireballB.AddComponent<DetonatorBurstEmitter>();
+		this._fireballB.transform.parent = base.transform;
+		this._fireballB.transform.localRotation = Quaternion.identity;
+		this._fireballBEmitter.material = this.fireballBMaterial;
+		this._fireballBEmitter.useWorldSpace = base.MyDetonator().useWorldSpace;
+		this._fireballBEmitter.upwardsBias = base.MyDetonator().upwardsBias;
+	}
+
+	public void UpdateFireballB()
+	{
+		this._fireballB.transform.localPosition = Vector3.Scale(this.localPosition, new Vector3(this.size, this.size, this.size));
+		this._fireballBEmitter.color = this.color;
+		this._fireballBEmitter.duration = this.duration * 0.5f;
+		this._fireballBEmitter.durationVariation = this.duration * 0.5f;
+		this._fireballBEmitter.count = 2f;
+		this._fireballBEmitter.timeScale = this.timeScale;
+		this._fireballBEmitter.detail = this.detail;
+		this._fireballBEmitter.particleSize = 10f;
+		this._fireballBEmitter.sizeVariation = 6f;
+		this._fireballBEmitter.velocity = this.velocity;
+		this._fireballBEmitter.startRadius = 4f;
+		this._fireballBEmitter.size = this.size;
+		this._fireballBEmitter.useExplicitColorAnimation = true;
+		Color b = new Color(1f, 1f, 1f, 0.5f);
+		Color b2 = new Color(0.6f, 0.15f, 0.15f, 0.3f);
+		Color color = new Color(0.1f, 0.2f, 0.45f, 0f);
+		this._fireballBEmitter.colorAnimation[0] = Color.Lerp(this.color, b, 0.8f);
+		this._fireballBEmitter.colorAnimation[1] = Color.Lerp(this.color, b, 0.5f);
+		this._fireballBEmitter.colorAnimation[2] = this.color;
+		this._fireballBEmitter.colorAnimation[3] = Color.Lerp(this.color, b2, 0.7f);
+		this._fireballBEmitter.colorAnimation[4] = color;
+		this._fireballBEmitter.explodeDelayMin = this.explodeDelayMin;
+		this._fireballBEmitter.explodeDelayMax = this.explodeDelayMax;
+	}
+
+	public void BuildFireShadow()
+	{
+		this._fireShadow = new GameObject("FireShadow");
+		this._fireShadowEmitter = this._fireShadow.AddComponent<DetonatorBurstEmitter>();
+		this._fireShadow.transform.parent = base.transform;
+		this._fireShadow.transform.localRotation = Quaternion.identity;
+		this._fireShadowEmitter.material = this.fireShadowMaterial;
+		this._fireShadowEmitter.useWorldSpace = base.MyDetonator().useWorldSpace;
+		this._fireShadowEmitter.upwardsBias = base.MyDetonator().upwardsBias;
+	}
+
+	public void UpdateFireShadow()
+	{
+		this._fireShadow.transform.localPosition = Vector3.Scale(this.localPosition, new Vector3(this.size, this.size, this.size));
+		this._fireShadow.transform.LookAt(Camera.main.transform);
+		this._fireShadow.transform.localPosition = -(Vector3.forward * 1f);
+		this._fireShadowEmitter.color = new Color(0.1f, 0.1f, 0.1f, 0.6f);
+		this._fireShadowEmitter.duration = this.duration * 0.5f;
+		this._fireShadowEmitter.durationVariation = this.duration * 0.5f;
+		this._fireShadowEmitter.timeScale = this.timeScale;
+		this._fireShadowEmitter.detail = 1f;
+		this._fireShadowEmitter.particleSize = 13f;
+		this._fireShadowEmitter.velocity = this.velocity;
+		this._fireShadowEmitter.sizeVariation = 1f;
+		this._fireShadowEmitter.count = 4f;
+		this._fireShadowEmitter.startRadius = 6f;
+		this._fireShadowEmitter.size = this.size;
+		this._fireShadowEmitter.explodeDelayMin = this.explodeDelayMin;
+		this._fireShadowEmitter.explodeDelayMax = this.explodeDelayMax;
+	}
+
+	public void Reset()
+	{
+		this.FillMaterials(true);
+		this.on = true;
+		this.size = this._baseSize;
+		this.duration = this._baseDuration;
+		this.explodeDelayMin = 0f;
+		this.explodeDelayMax = 0f;
+		this.color = this._baseColor;
+		this.velocity = this._baseVelocity;
+	}
+
+	public override void Explode()
+	{
+		if (this.detailThreshold > this.detail)
+		{
+			return;
+		}
+		if (this.on)
+		{
+			this.UpdateFireballA();
+			this.UpdateFireballB();
+			this.UpdateFireShadow();
+			if (this.drawFireballA)
+			{
+				this._fireballAEmitter.Explode();
+			}
+			if (this.drawFireballB)
+			{
+				this._fireballBEmitter.Explode();
+			}
+			if (this.drawFireShadow)
+			{
+				this._fireShadowEmitter.Explode();
+			}
+		}
+	}
+
+	private float _baseSize = 1f;
+
+	private float _baseDuration = 3f;
+
+	private Color _baseColor = new Color(1f, 0.423f, 0f, 0.5f);
+
+	private Vector3 _baseVelocity = new Vector3(60f, 60f, 60f);
+
+	private float _scaledDuration;
+
+	private GameObject _fireballA;
+
+	private DetonatorBurstEmitter _fireballAEmitter;
+
+	public Material fireballAMaterial;
+
+	private GameObject _fireballB;
+
+	private DetonatorBurstEmitter _fireballBEmitter;
+
+	public Material fireballBMaterial;
+
+	private GameObject _fireShadow;
+
+	private DetonatorBurstEmitter _fireShadowEmitter;
+
+	public Material fireShadowMaterial;
+
+	public bool drawFireballA = true;
+
+	public bool drawFireballB = true;
+
+	public bool drawFireShadow = true;
+
+	private Color _detailAdjustedColor;
+}

+ 108 - 0
Assembly-CSharp/DetonatorForce.cs

@@ -0,0 +1,108 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(Detonator))]
+[AddComponentMenu("Detonator/Force")]
+public class DetonatorForce : DetonatorComponent
+{
+	public override void Init()
+	{
+	}
+
+	private void Update()
+	{
+		if (this._delayedExplosionStarted)
+		{
+			this._explodeDelay -= Time.deltaTime;
+			if (this._explodeDelay <= 0f)
+			{
+				this.Explode();
+			}
+		}
+	}
+
+	public override void Explode()
+	{
+		if (!this.on)
+		{
+			return;
+		}
+		if (this.detailThreshold > this.detail)
+		{
+			return;
+		}
+		if (!this._delayedExplosionStarted)
+		{
+			this._explodeDelay = this.explodeDelayMin + UnityEngine.Random.value * (this.explodeDelayMax - this.explodeDelayMin);
+		}
+		if (this._explodeDelay <= 0f)
+		{
+			this._explosionPosition = base.transform.position;
+			this._colliders = Physics.OverlapSphere(this._explosionPosition, this.radius);
+			foreach (Collider collider in this._colliders)
+			{
+				if (collider)
+				{
+					if (collider.GetComponent<Rigidbody>())
+					{
+						collider.GetComponent<Rigidbody>().AddExplosionForce(this.power * this.size, this._explosionPosition, this.radius * this.size, 4f * base.MyDetonator().upwardsBias * this.size);
+						collider.gameObject.SendMessage("OnDetonatorForceHit", null, SendMessageOptions.DontRequireReceiver);
+						if (this.fireObject)
+						{
+							if (collider.transform.Find(this.fireObject.name + "(Clone)"))
+							{
+								return;
+							}
+							this._tempFireObject = UnityEngine.Object.Instantiate<GameObject>(this.fireObject, base.transform.position, base.transform.rotation);
+							this._tempFireObject.transform.parent = collider.transform;
+							this._tempFireObject.transform.localPosition = new Vector3(0f, 0f, 0f);
+							if (this._tempFireObject.GetComponent<ParticleEmitter>())
+							{
+								this._tempFireObject.GetComponent<ParticleEmitter>().emit = true;
+								UnityEngine.Object.Destroy(this._tempFireObject, this.fireObjectLife);
+							}
+						}
+					}
+				}
+			}
+			this._delayedExplosionStarted = false;
+			this._explodeDelay = 0f;
+		}
+		else
+		{
+			this._delayedExplosionStarted = true;
+		}
+	}
+
+	public void Reset()
+	{
+		this.radius = this._baseRadius;
+		this.power = this._basePower;
+	}
+
+	private float _baseRadius = 50f;
+
+	private float _basePower = 4000f;
+
+	private float _scaledRange;
+
+	private float _scaledIntensity;
+
+	private bool _delayedExplosionStarted;
+
+	private float _explodeDelay;
+
+	public float radius;
+
+	public float power;
+
+	public GameObject fireObject;
+
+	public float fireObjectLife;
+
+	private Collider[] _colliders;
+
+	private GameObject _tempFireObject;
+
+	private Vector3 _explosionPosition;
+}

+ 110 - 0
Assembly-CSharp/DetonatorGlow.cs

@@ -0,0 +1,110 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(Detonator))]
+[AddComponentMenu("Detonator/Glow")]
+public class DetonatorGlow : DetonatorComponent
+{
+	public override void Init()
+	{
+		this.FillMaterials(false);
+		this.BuildGlow();
+	}
+
+	public void FillMaterials(bool wipe)
+	{
+		if (!this.glowMaterial || wipe)
+		{
+			this.glowMaterial = base.MyDetonator().glowMaterial;
+		}
+	}
+
+	public void BuildGlow()
+	{
+		this._glow = new GameObject("Glow");
+		this._glowEmitter = this._glow.AddComponent<DetonatorBurstEmitter>();
+		this._glow.transform.parent = base.transform;
+		this._glow.transform.localPosition = this.localPosition;
+		this._glowEmitter.material = this.glowMaterial;
+		this._glowEmitter.exponentialGrowth = false;
+		this._glowEmitter.useExplicitColorAnimation = true;
+		this._glowEmitter.useWorldSpace = base.MyDetonator().useWorldSpace;
+	}
+
+	public void UpdateGlow()
+	{
+		this._glow.transform.localPosition = Vector3.Scale(this.localPosition, new Vector3(this.size, this.size, this.size));
+		this._glowEmitter.color = this.color;
+		this._glowEmitter.duration = this.duration;
+		this._glowEmitter.timeScale = this.timeScale;
+		this._glowEmitter.count = 1f;
+		this._glowEmitter.particleSize = 65f;
+		this._glowEmitter.randomRotation = false;
+		this._glowEmitter.sizeVariation = 0f;
+		this._glowEmitter.velocity = new Vector3(0f, 0f, 0f);
+		this._glowEmitter.startRadius = 0f;
+		this._glowEmitter.sizeGrow = 0f;
+		this._glowEmitter.size = this.size;
+		this._glowEmitter.explodeDelayMin = this.explodeDelayMin;
+		this._glowEmitter.explodeDelayMax = this.explodeDelayMax;
+		Color color = Color.Lerp(this.color, new Color(0.5f, 0.1f, 0.1f, 1f), 0.5f);
+		color.a = 0.9f;
+		Color color2 = Color.Lerp(this.color, new Color(0.6f, 0.3f, 0.3f, 1f), 0.5f);
+		color2.a = 0.8f;
+		Color color3 = Color.Lerp(this.color, new Color(0.7f, 0.3f, 0.3f, 1f), 0.5f);
+		color3.a = 0.5f;
+		Color color4 = Color.Lerp(this.color, new Color(0.4f, 0.3f, 0.4f, 1f), 0.5f);
+		color4.a = 0.2f;
+		Color color5 = new Color(0.1f, 0.1f, 0.4f, 0f);
+		this._glowEmitter.colorAnimation[0] = color;
+		this._glowEmitter.colorAnimation[1] = color2;
+		this._glowEmitter.colorAnimation[2] = color3;
+		this._glowEmitter.colorAnimation[3] = color4;
+		this._glowEmitter.colorAnimation[4] = color5;
+	}
+
+	private void Update()
+	{
+	}
+
+	public void Reset()
+	{
+		this.FillMaterials(true);
+		this.on = true;
+		this.size = this._baseSize;
+		this.duration = this._baseDuration;
+		this.explodeDelayMin = 0f;
+		this.explodeDelayMax = 0f;
+		this.color = this._baseColor;
+		this.velocity = this._baseVelocity;
+	}
+
+	public override void Explode()
+	{
+		if (this.detailThreshold > this.detail)
+		{
+			return;
+		}
+		if (this.on)
+		{
+			this.UpdateGlow();
+			this._glowEmitter.Explode();
+		}
+	}
+
+	private float _baseSize = 1f;
+
+	private float _baseDuration = 1f;
+
+	private Vector3 _baseVelocity = new Vector3(0f, 0f, 0f);
+
+	private Color _baseColor = Color.black;
+
+	private float _scaledDuration;
+
+	private GameObject _glow;
+
+	private DetonatorBurstEmitter _glowEmitter;
+
+	public Material glowMaterial;
+}

+ 106 - 0
Assembly-CSharp/DetonatorHeatwave.cs

@@ -0,0 +1,106 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(Detonator))]
+[AddComponentMenu("Detonator/Heatwave (Pro Only)")]
+public class DetonatorHeatwave : DetonatorComponent
+{
+	public override void Init()
+	{
+	}
+
+	private void Update()
+	{
+		if (this._delayedExplosionStarted)
+		{
+			this._explodeDelay -= Time.deltaTime;
+			if (this._explodeDelay <= 0f)
+			{
+				this.Explode();
+			}
+		}
+		if (this._heatwave)
+		{
+			this._heatwave.transform.rotation = Quaternion.FromToRotation(Vector3.up, Camera.main.transform.position - this._heatwave.transform.position);
+			this._heatwave.transform.localPosition = this.localPosition + Vector3.forward * this.zOffset;
+			this._elapsedTime += Time.deltaTime;
+			this._normalizedTime = this._elapsedTime / this.duration;
+			this.s = Mathf.Lerp(this._startSize, this._maxSize, this._normalizedTime);
+			this._heatwave.GetComponent<Renderer>().material.SetFloat("_BumpAmt", (1f - this._normalizedTime) * this.distortion);
+			this._heatwave.gameObject.transform.localScale = new Vector3(this.s, this.s, this.s);
+			if (this._elapsedTime > this.duration)
+			{
+				UnityEngine.Object.Destroy(this._heatwave.gameObject);
+			}
+		}
+	}
+
+	public override void Explode()
+	{
+		if (SystemInfo.supportsImageEffects)
+		{
+			if (this.detailThreshold > this.detail || !this.on)
+			{
+				return;
+			}
+			if (!this._delayedExplosionStarted)
+			{
+				this._explodeDelay = this.explodeDelayMin + UnityEngine.Random.value * (this.explodeDelayMax - this.explodeDelayMin);
+			}
+			if (this._explodeDelay <= 0f)
+			{
+				this._startSize = 0f;
+				this._maxSize = this.size * 10f;
+				this._material = new Material(Shader.Find("HeatDistort"));
+				this._heatwave = GameObject.CreatePrimitive(PrimitiveType.Plane);
+				this._heatwave.name = "Heatwave";
+				this._heatwave.transform.parent = base.transform;
+				UnityEngine.Object.Destroy(this._heatwave.GetComponent(typeof(MeshCollider)));
+				if (!this.heatwaveMaterial)
+				{
+					this.heatwaveMaterial = base.MyDetonator().heatwaveMaterial;
+				}
+				this._material.CopyPropertiesFromMaterial(this.heatwaveMaterial);
+				this._heatwave.GetComponent<Renderer>().material = this._material;
+				this._heatwave.transform.parent = base.transform;
+				this._delayedExplosionStarted = false;
+				this._explodeDelay = 0f;
+			}
+			else
+			{
+				this._delayedExplosionStarted = true;
+			}
+		}
+	}
+
+	public void Reset()
+	{
+		this.duration = this._baseDuration;
+	}
+
+	private GameObject _heatwave;
+
+	private float s;
+
+	private float _startSize;
+
+	private float _maxSize;
+
+	private float _baseDuration = 0.25f;
+
+	private bool _delayedExplosionStarted;
+
+	private float _explodeDelay;
+
+	public float zOffset = 0.5f;
+
+	public float distortion = 64f;
+
+	private float _elapsedTime;
+
+	private float _normalizedTime;
+
+	public Material heatwaveMaterial;
+
+	private Material _material;
+}

+ 66 - 0
Assembly-CSharp/DetonatorLight.cs

@@ -0,0 +1,66 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(Detonator))]
+[AddComponentMenu("Detonator/Light")]
+public class DetonatorLight : DetonatorComponent
+{
+	public override void Init()
+	{
+		this._light = new GameObject("Light");
+		this._light.transform.parent = base.transform;
+		this._light.transform.localPosition = this.localPosition;
+		this._lightComponent = this._light.AddComponent<Light>();
+		this._lightComponent.type = LightType.Point;
+		this._lightComponent.enabled = false;
+	}
+
+	private void Update()
+	{
+		if (this._explodeTime + this._scaledDuration > Time.time && this._lightComponent.intensity > 0f)
+		{
+			this._reduceAmount = this.intensity * (Time.deltaTime / this._scaledDuration);
+			this._lightComponent.intensity -= this._reduceAmount;
+		}
+		else if (this._lightComponent)
+		{
+			this._lightComponent.enabled = false;
+		}
+	}
+
+	public override void Explode()
+	{
+		if (this.detailThreshold > this.detail)
+		{
+			return;
+		}
+		this._lightComponent.color = this.color;
+		this._lightComponent.range = this.size * 50f;
+		this._scaledDuration = this.duration * this.timeScale;
+		this._lightComponent.enabled = true;
+		this._lightComponent.intensity = this.intensity;
+		this._explodeTime = Time.time;
+	}
+
+	public void Reset()
+	{
+		this.color = this._baseColor;
+		this.intensity = this._baseIntensity;
+	}
+
+	private float _baseIntensity = 1f;
+
+	private Color _baseColor = Color.white;
+
+	private float _scaledDuration;
+
+	private float _explodeTime = -1000f;
+
+	private GameObject _light;
+
+	private Light _lightComponent;
+
+	public float intensity;
+
+	private float _reduceAmount;
+}

+ 89 - 0
Assembly-CSharp/DetonatorShockwave.cs

@@ -0,0 +1,89 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(Detonator))]
+[AddComponentMenu("Detonator/Shockwave")]
+public class DetonatorShockwave : DetonatorComponent
+{
+	public override void Init()
+	{
+		this.FillMaterials(false);
+		this.BuildShockwave();
+	}
+
+	public void FillMaterials(bool wipe)
+	{
+		if (!this.shockwaveMaterial || wipe)
+		{
+			this.shockwaveMaterial = base.MyDetonator().shockwaveMaterial;
+		}
+	}
+
+	public void BuildShockwave()
+	{
+		this._shockwave = new GameObject("Shockwave");
+		this._shockwaveEmitter = this._shockwave.AddComponent<DetonatorBurstEmitter>();
+		this._shockwave.transform.parent = base.transform;
+		this._shockwave.transform.localRotation = Quaternion.identity;
+		this._shockwave.transform.localPosition = this.localPosition;
+		this._shockwaveEmitter.material = this.shockwaveMaterial;
+		this._shockwaveEmitter.exponentialGrowth = false;
+		this._shockwaveEmitter.useWorldSpace = base.MyDetonator().useWorldSpace;
+	}
+
+	public void UpdateShockwave()
+	{
+		this._shockwave.transform.localPosition = Vector3.Scale(this.localPosition, new Vector3(this.size, this.size, this.size));
+		this._shockwaveEmitter.color = this.color;
+		this._shockwaveEmitter.duration = this.duration;
+		this._shockwaveEmitter.durationVariation = this.duration * 0.1f;
+		this._shockwaveEmitter.count = 1f;
+		this._shockwaveEmitter.detail = 1f;
+		this._shockwaveEmitter.particleSize = 25f;
+		this._shockwaveEmitter.sizeVariation = 0f;
+		this._shockwaveEmitter.velocity = new Vector3(0f, 0f, 0f);
+		this._shockwaveEmitter.startRadius = 0f;
+		this._shockwaveEmitter.sizeGrow = 202f;
+		this._shockwaveEmitter.size = this.size;
+		this._shockwaveEmitter.explodeDelayMin = this.explodeDelayMin;
+		this._shockwaveEmitter.explodeDelayMax = this.explodeDelayMax;
+		this._shockwaveEmitter.renderMode = this.renderMode;
+	}
+
+	public void Reset()
+	{
+		this.FillMaterials(true);
+		this.on = true;
+		this.size = this._baseSize;
+		this.duration = this._baseDuration;
+		this.explodeDelayMin = 0f;
+		this.explodeDelayMax = 0f;
+		this.color = this._baseColor;
+		this.velocity = this._baseVelocity;
+	}
+
+	public override void Explode()
+	{
+		if (this.on)
+		{
+			this.UpdateShockwave();
+			this._shockwaveEmitter.Explode();
+		}
+	}
+
+	private float _baseSize = 1f;
+
+	private float _baseDuration = 0.25f;
+
+	private Vector3 _baseVelocity = new Vector3(0f, 0f, 0f);
+
+	private Color _baseColor = Color.white;
+
+	private GameObject _shockwave;
+
+	private DetonatorBurstEmitter _shockwaveEmitter;
+
+	public Material shockwaveMaterial;
+
+	public ParticleRenderMode renderMode;
+}

+ 170 - 0
Assembly-CSharp/DetonatorSmoke.cs

@@ -0,0 +1,170 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(Detonator))]
+[AddComponentMenu("Detonator/Smoke")]
+public class DetonatorSmoke : DetonatorComponent
+{
+	public override void Init()
+	{
+		this.FillMaterials(false);
+		this.BuildSmokeA();
+		this.BuildSmokeB();
+	}
+
+	public void FillMaterials(bool wipe)
+	{
+		if (!this.smokeAMaterial || wipe)
+		{
+			this.smokeAMaterial = base.MyDetonator().smokeAMaterial;
+		}
+		if (!this.smokeBMaterial || wipe)
+		{
+			this.smokeBMaterial = base.MyDetonator().smokeBMaterial;
+		}
+	}
+
+	public void BuildSmokeA()
+	{
+		this._smokeA = new GameObject("SmokeA");
+		this._smokeAEmitter = this._smokeA.AddComponent<DetonatorBurstEmitter>();
+		this._smokeA.transform.parent = base.transform;
+		this._smokeA.transform.localPosition = this.localPosition;
+		this._smokeA.transform.localRotation = Quaternion.identity;
+		this._smokeAEmitter.material = this.smokeAMaterial;
+		this._smokeAEmitter.exponentialGrowth = false;
+		this._smokeAEmitter.sizeGrow = 0.095f;
+		this._smokeAEmitter.useWorldSpace = base.MyDetonator().useWorldSpace;
+		this._smokeAEmitter.upwardsBias = base.MyDetonator().upwardsBias;
+	}
+
+	public void UpdateSmokeA()
+	{
+		this._smokeA.transform.localPosition = Vector3.Scale(this.localPosition, new Vector3(this.size, this.size, this.size));
+		this._smokeA.transform.LookAt(Camera.main.transform);
+		this._smokeA.transform.localPosition = -(Vector3.forward * -1.5f);
+		this._smokeAEmitter.color = this.color;
+		this._smokeAEmitter.duration = this.duration * 0.5f;
+		this._smokeAEmitter.durationVariation = 0f;
+		this._smokeAEmitter.timeScale = this.timeScale;
+		this._smokeAEmitter.count = 4f;
+		this._smokeAEmitter.particleSize = 25f;
+		this._smokeAEmitter.sizeVariation = 3f;
+		this._smokeAEmitter.velocity = this.velocity;
+		this._smokeAEmitter.startRadius = 10f;
+		this._smokeAEmitter.size = this.size;
+		this._smokeAEmitter.useExplicitColorAnimation = true;
+		this._smokeAEmitter.explodeDelayMin = this.explodeDelayMin;
+		this._smokeAEmitter.explodeDelayMax = this.explodeDelayMax;
+		Color color = new Color(0.2f, 0.2f, 0.2f, 0.4f);
+		Color color2 = new Color(0.2f, 0.2f, 0.2f, 0.7f);
+		Color color3 = new Color(0.2f, 0.2f, 0.2f, 0.4f);
+		Color color4 = new Color(0.2f, 0.2f, 0.2f, 0f);
+		this._smokeAEmitter.colorAnimation[0] = color;
+		this._smokeAEmitter.colorAnimation[1] = color2;
+		this._smokeAEmitter.colorAnimation[2] = color2;
+		this._smokeAEmitter.colorAnimation[3] = color3;
+		this._smokeAEmitter.colorAnimation[4] = color4;
+	}
+
+	public void BuildSmokeB()
+	{
+		this._smokeB = new GameObject("SmokeB");
+		this._smokeBEmitter = this._smokeB.AddComponent<DetonatorBurstEmitter>();
+		this._smokeB.transform.parent = base.transform;
+		this._smokeB.transform.localPosition = this.localPosition;
+		this._smokeB.transform.localRotation = Quaternion.identity;
+		this._smokeBEmitter.material = this.smokeBMaterial;
+		this._smokeBEmitter.exponentialGrowth = false;
+		this._smokeBEmitter.sizeGrow = 0.095f;
+		this._smokeBEmitter.useWorldSpace = base.MyDetonator().useWorldSpace;
+		this._smokeBEmitter.upwardsBias = base.MyDetonator().upwardsBias;
+	}
+
+	public void UpdateSmokeB()
+	{
+		this._smokeB.transform.localPosition = Vector3.Scale(this.localPosition, new Vector3(this.size, this.size, this.size));
+		this._smokeB.transform.LookAt(Camera.main.transform);
+		this._smokeB.transform.localPosition = -(Vector3.forward * -1f);
+		this._smokeBEmitter.color = this.color;
+		this._smokeBEmitter.duration = this.duration * 0.5f;
+		this._smokeBEmitter.durationVariation = 0f;
+		this._smokeBEmitter.count = 2f;
+		this._smokeBEmitter.particleSize = 25f;
+		this._smokeBEmitter.sizeVariation = 3f;
+		this._smokeBEmitter.velocity = this.velocity;
+		this._smokeBEmitter.startRadius = 10f;
+		this._smokeBEmitter.size = this.size;
+		this._smokeBEmitter.useExplicitColorAnimation = true;
+		this._smokeBEmitter.explodeDelayMin = this.explodeDelayMin;
+		this._smokeBEmitter.explodeDelayMax = this.explodeDelayMax;
+		Color color = new Color(0.2f, 0.2f, 0.2f, 0.4f);
+		Color color2 = new Color(0.2f, 0.2f, 0.2f, 0.7f);
+		Color color3 = new Color(0.2f, 0.2f, 0.2f, 0.4f);
+		Color color4 = new Color(0.2f, 0.2f, 0.2f, 0f);
+		this._smokeBEmitter.colorAnimation[0] = color;
+		this._smokeBEmitter.colorAnimation[1] = color2;
+		this._smokeBEmitter.colorAnimation[2] = color2;
+		this._smokeBEmitter.colorAnimation[3] = color3;
+		this._smokeBEmitter.colorAnimation[4] = color4;
+	}
+
+	public void Reset()
+	{
+		this.FillMaterials(true);
+		this.on = true;
+		this.size = 1f;
+		this.duration = 8f;
+		this.explodeDelayMin = 0f;
+		this.explodeDelayMax = 0f;
+		this.color = this._baseColor;
+		this.velocity = new Vector3(3f, 3f, 3f);
+	}
+
+	public override void Explode()
+	{
+		if (this.detailThreshold > this.detail)
+		{
+			return;
+		}
+		if (this.on)
+		{
+			this.UpdateSmokeA();
+			this.UpdateSmokeB();
+			if (this.drawSmokeA)
+			{
+				this._smokeAEmitter.Explode();
+			}
+			if (this.drawSmokeB)
+			{
+				this._smokeBEmitter.Explode();
+			}
+		}
+	}
+
+	private const float _baseSize = 1f;
+
+	private const float _baseDuration = 8f;
+
+	private Color _baseColor = new Color(0.5f, 0.5f, 0.5f, 0.5f);
+
+	private const float _baseDamping = 0.1300004f;
+
+	private float _scaledDuration;
+
+	private GameObject _smokeA;
+
+	private DetonatorBurstEmitter _smokeAEmitter;
+
+	public Material smokeAMaterial;
+
+	private GameObject _smokeB;
+
+	private DetonatorBurstEmitter _smokeBEmitter;
+
+	public Material smokeBMaterial;
+
+	public bool drawSmokeA = true;
+
+	public bool drawSmokeB = true;
+}

+ 84 - 0
Assembly-CSharp/DetonatorSound.cs

@@ -0,0 +1,84 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(Detonator))]
+[AddComponentMenu("Detonator/Sound")]
+public class DetonatorSound : DetonatorComponent
+{
+	public override void Init()
+	{
+		this._soundComponent = base.gameObject.AddComponent<AudioSource>();
+	}
+
+	private void Update()
+	{
+		if (this._soundComponent == null)
+		{
+			return;
+		}
+		this._soundComponent.pitch = Time.timeScale;
+		if (this._delayedExplosionStarted)
+		{
+			this._explodeDelay -= Time.deltaTime;
+			if (this._explodeDelay <= 0f)
+			{
+				this.Explode();
+			}
+		}
+	}
+
+	public override void Explode()
+	{
+		if (this.detailThreshold > this.detail)
+		{
+			return;
+		}
+		if (!this._delayedExplosionStarted)
+		{
+			this._explodeDelay = this.explodeDelayMin + UnityEngine.Random.value * (this.explodeDelayMax - this.explodeDelayMin);
+		}
+		if (this._explodeDelay <= 0f)
+		{
+			if (Vector3.Distance(Camera.main.transform.position, base.transform.position) < this.distanceThreshold)
+			{
+				this._idx = (int)(UnityEngine.Random.value * (float)this.nearSounds.Length);
+				this._soundComponent.PlayOneShot(this.nearSounds[this._idx]);
+			}
+			else
+			{
+				this._idx = (int)(UnityEngine.Random.value * (float)this.farSounds.Length);
+				this._soundComponent.PlayOneShot(this.farSounds[this._idx]);
+			}
+			this._delayedExplosionStarted = false;
+			this._explodeDelay = 0f;
+		}
+		else
+		{
+			this._delayedExplosionStarted = true;
+		}
+	}
+
+	public void Reset()
+	{
+	}
+
+	public AudioClip[] nearSounds;
+
+	public AudioClip[] farSounds;
+
+	public float distanceThreshold = 50f;
+
+	public float minVolume = 0.4f;
+
+	public float maxVolume = 1f;
+
+	public float rolloffFactor = 0.5f;
+
+	private AudioSource _soundComponent;
+
+	private bool _delayedExplosionStarted;
+
+	private float _explodeDelay;
+
+	private int _idx;
+}

+ 98 - 0
Assembly-CSharp/DetonatorSparks.cs

@@ -0,0 +1,98 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(Detonator))]
+[AddComponentMenu("Detonator/Sparks")]
+public class DetonatorSparks : DetonatorComponent
+{
+	public override void Init()
+	{
+		this.FillMaterials(false);
+		this.BuildSparks();
+	}
+
+	public void FillMaterials(bool wipe)
+	{
+		if (!this.sparksMaterial || wipe)
+		{
+			this.sparksMaterial = base.MyDetonator().sparksMaterial;
+		}
+	}
+
+	public void BuildSparks()
+	{
+		this._sparks = new GameObject("Sparks");
+		this._sparksEmitter = this._sparks.AddComponent<DetonatorBurstEmitter>();
+		this._sparks.transform.parent = base.transform;
+		this._sparks.transform.localPosition = this.localPosition;
+		this._sparks.transform.localRotation = Quaternion.identity;
+		this._sparksEmitter.material = this.sparksMaterial;
+		this._sparksEmitter.force = Physics.gravity / 3f;
+		this._sparksEmitter.useExplicitColorAnimation = false;
+		this._sparksEmitter.useWorldSpace = base.MyDetonator().useWorldSpace;
+		this._sparksEmitter.upwardsBias = base.MyDetonator().upwardsBias;
+	}
+
+	public void UpdateSparks()
+	{
+		this._scaledDuration = this.duration * this.timeScale;
+		this._sparksEmitter.color = this.color;
+		this._sparksEmitter.duration = this._scaledDuration / 4f;
+		this._sparksEmitter.durationVariation = this._scaledDuration;
+		this._sparksEmitter.count = (float)((int)(this.detail * 50f));
+		this._sparksEmitter.particleSize = 0.5f;
+		this._sparksEmitter.sizeVariation = 0.25f;
+		if (this._sparksEmitter.upwardsBias > 0f)
+		{
+			this._sparksEmitter.velocity = new Vector3(this.velocity.x / Mathf.Log(this._sparksEmitter.upwardsBias), this.velocity.y * Mathf.Log(this._sparksEmitter.upwardsBias), this.velocity.z / Mathf.Log(this._sparksEmitter.upwardsBias));
+		}
+		else
+		{
+			this._sparksEmitter.velocity = this.velocity;
+		}
+		this._sparksEmitter.startRadius = 0f;
+		this._sparksEmitter.size = this.size;
+		this._sparksEmitter.explodeDelayMin = this.explodeDelayMin;
+		this._sparksEmitter.explodeDelayMax = this.explodeDelayMax;
+	}
+
+	public void Reset()
+	{
+		this.FillMaterials(true);
+		this.on = true;
+		this.size = this._baseSize;
+		this.duration = this._baseDuration;
+		this.explodeDelayMin = 0f;
+		this.explodeDelayMax = 0f;
+		this.color = this._baseColor;
+		this.velocity = this._baseVelocity;
+		this.force = this._baseForce;
+	}
+
+	public override void Explode()
+	{
+		if (this.on)
+		{
+			this.UpdateSparks();
+			this._sparksEmitter.Explode();
+		}
+	}
+
+	private float _baseSize = 1f;
+
+	private float _baseDuration = 4f;
+
+	private Vector3 _baseVelocity = new Vector3(400f, 400f, 400f);
+
+	private Color _baseColor = Color.white;
+
+	private Vector3 _baseForce = Physics.gravity;
+
+	private float _scaledDuration;
+
+	private GameObject _sparks;
+
+	private DetonatorBurstEmitter _sparksEmitter;
+
+	public Material sparksMaterial;
+}

+ 81 - 0
Assembly-CSharp/DetonatorSpray.cs

@@ -0,0 +1,81 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(Detonator))]
+[AddComponentMenu("Detonator/Object Spray")]
+public class DetonatorSpray : DetonatorComponent
+{
+	public override void Init()
+	{
+	}
+
+	private void Update()
+	{
+		if (this._delayedExplosionStarted)
+		{
+			this._explodeDelay -= Time.deltaTime;
+			if (this._explodeDelay <= 0f)
+			{
+				this.Explode();
+			}
+		}
+	}
+
+	public override void Explode()
+	{
+		if (!this._delayedExplosionStarted)
+		{
+			this._explodeDelay = this.explodeDelayMin + UnityEngine.Random.value * (this.explodeDelayMax - this.explodeDelayMin);
+		}
+		if (this._explodeDelay <= 0f)
+		{
+			int num = (int)(this.detail * (float)this.count);
+			for (int i = 0; i < num; i++)
+			{
+				Vector3 b = UnityEngine.Random.onUnitSphere * (this.startingRadius * this.size);
+				Vector3 b2 = new Vector3(this.velocity.x * this.size, this.velocity.y * this.size, this.velocity.z * this.size);
+				GameObject gameObject = UnityEngine.Object.Instantiate<GameObject>(this.sprayObject, base.transform.position + b, base.transform.rotation);
+				gameObject.transform.parent = base.transform;
+				this._tmpScale = this.minScale + UnityEngine.Random.value * (this.maxScale - this.minScale);
+				this._tmpScale *= this.size;
+				gameObject.transform.localScale = new Vector3(this._tmpScale, this._tmpScale, this._tmpScale);
+				if (base.MyDetonator().upwardsBias > 0f)
+				{
+					b2 = new Vector3(b2.x / Mathf.Log(base.MyDetonator().upwardsBias), b2.y * Mathf.Log(base.MyDetonator().upwardsBias), b2.z / Mathf.Log(base.MyDetonator().upwardsBias));
+				}
+				gameObject.GetComponent<Rigidbody>().velocity = Vector3.Scale(b.normalized, b2);
+				gameObject.GetComponent<Rigidbody>().velocity = Vector3.Scale(b.normalized, b2);
+				UnityEngine.Object.Destroy(gameObject, this.duration * this.timeScale);
+				this._delayedExplosionStarted = false;
+				this._explodeDelay = 0f;
+			}
+		}
+		else
+		{
+			this._delayedExplosionStarted = true;
+		}
+	}
+
+	public void Reset()
+	{
+		this.velocity = new Vector3(15f, 15f, 15f);
+	}
+
+	public GameObject sprayObject;
+
+	public int count = 10;
+
+	public float startingRadius;
+
+	public float minScale = 1f;
+
+	public float maxScale = 1f;
+
+	private bool _delayedExplosionStarted;
+
+	private float _explodeDelay;
+
+	private Vector3 _explosionPosition;
+
+	private float _tmpScale;
+}

+ 44 - 0
Assembly-CSharp/DetonatorSprayHelper.cs

@@ -0,0 +1,44 @@
+using System;
+using UnityEngine;
+
+public class DetonatorSprayHelper : MonoBehaviour
+{
+	private void Start()
+	{
+		this.isReallyOn = base.GetComponent<ParticleEmitter>().emit;
+		base.GetComponent<ParticleEmitter>().emit = false;
+		this.startTime = UnityEngine.Random.value * (this.startTimeMax - this.startTimeMin) + this.startTimeMin + Time.time;
+		this.stopTime = UnityEngine.Random.value * (this.stopTimeMax - this.stopTimeMin) + this.stopTimeMin + Time.time;
+		base.GetComponent<Renderer>().material = ((UnityEngine.Random.value <= 0.5f) ? this.secondMaterial : this.firstMaterial);
+	}
+
+	private void FixedUpdate()
+	{
+		if (Time.time > this.startTime)
+		{
+			base.GetComponent<ParticleEmitter>().emit = this.isReallyOn;
+		}
+		if (Time.time > this.stopTime)
+		{
+			base.GetComponent<ParticleEmitter>().emit = false;
+		}
+	}
+
+	public float startTimeMin;
+
+	public float startTimeMax;
+
+	public float stopTimeMin = 10f;
+
+	public float stopTimeMax = 10f;
+
+	public Material firstMaterial;
+
+	public Material secondMaterial;
+
+	private float startTime;
+
+	private float stopTime;
+
+	private bool isReallyOn;
+}

+ 124 - 0
Assembly-CSharp/DetonatorTest.cs

@@ -0,0 +1,124 @@
+using System;
+using UnityEngine;
+
+public class DetonatorTest : MonoBehaviour
+{
+	private void Start()
+	{
+		this.SpawnWall();
+		if (!this.currentDetonator)
+		{
+			this.NextExplosion();
+		}
+		else
+		{
+			this._currentExpIdx = 0;
+		}
+	}
+
+	private void OnGUI()
+	{
+		this._guiRect = new Rect(7f, (float)(Screen.height - 180), 250f, 200f);
+		GUILayout.BeginArea(this._guiRect);
+		GUILayout.BeginVertical(new GUILayoutOption[0]);
+		string name = this.currentDetonator.name;
+		if (GUILayout.Button(name + " (Click For Next)", new GUILayoutOption[0]))
+		{
+			this.NextExplosion();
+		}
+		if (GUILayout.Button("Rebuild Wall", new GUILayoutOption[0]))
+		{
+			this.SpawnWall();
+		}
+		if (GUILayout.Button("Camera Far", new GUILayoutOption[0]))
+		{
+			Camera.main.transform.position = new Vector3(0f, 0f, -7f);
+			Camera.main.transform.eulerAngles = new Vector3(13.5f, 0f, 0f);
+		}
+		if (GUILayout.Button("Camera Near", new GUILayoutOption[0]))
+		{
+			Camera.main.transform.position = new Vector3(0f, -8.664466f, 31.38269f);
+			Camera.main.transform.eulerAngles = new Vector3(1.213462f, 0f, 0f);
+		}
+		GUILayout.Label("Time Scale", new GUILayoutOption[0]);
+		this.timeScale = GUILayout.HorizontalSlider(this.timeScale, 0f, 1f, new GUILayoutOption[0]);
+		GUILayout.Label("Detail Level (re-explode after change)", new GUILayoutOption[0]);
+		this.detailLevel = GUILayout.HorizontalSlider(this.detailLevel, 0f, 1f, new GUILayoutOption[0]);
+		GUILayout.EndVertical();
+		GUILayout.EndArea();
+	}
+
+	private void NextExplosion()
+	{
+		if (this._currentExpIdx >= this.detonatorPrefabs.Length - 1)
+		{
+			this._currentExpIdx = 0;
+		}
+		else
+		{
+			this._currentExpIdx++;
+		}
+		this.currentDetonator = this.detonatorPrefabs[this._currentExpIdx];
+	}
+
+	private void SpawnWall()
+	{
+		if (this._currentWall)
+		{
+			UnityEngine.Object.Destroy(this._currentWall);
+		}
+		this._currentWall = UnityEngine.Object.Instantiate<GameObject>(this.wall, new Vector3(-7f, -12f, 48f), Quaternion.identity);
+		this._spawnWallTime = Time.time;
+	}
+
+	private void Update()
+	{
+		this._guiRect = new Rect(7f, (float)(Screen.height - 150), 250f, 200f);
+		if (Time.time + this._spawnWallTime > 0.5f)
+		{
+			if (!this.checkRect.Contains(Input.mousePosition) && Input.GetMouseButtonDown(0))
+			{
+				this.SpawnExplosion();
+			}
+			Time.timeScale = this.timeScale;
+		}
+	}
+
+	private void SpawnExplosion()
+	{
+		Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
+		RaycastHit raycastHit;
+		if (Physics.Raycast(ray, out raycastHit, 1000f))
+		{
+			Detonator detonator = (Detonator)this.currentDetonator.GetComponent("Detonator");
+			float num = detonator.size / 3f;
+			Vector3 position = raycastHit.point + Vector3.Scale(raycastHit.normal, new Vector3(num, num, num));
+			GameObject gameObject = UnityEngine.Object.Instantiate<GameObject>(this.currentDetonator, position, Quaternion.identity);
+			detonator = (Detonator)gameObject.GetComponent("Detonator");
+			detonator.detail = this.detailLevel;
+			UnityEngine.Object.Destroy(gameObject, this.explosionLife);
+		}
+	}
+
+	public GameObject currentDetonator;
+
+	private int _currentExpIdx = -1;
+
+	public GameObject[] detonatorPrefabs;
+
+	public float explosionLife = 10f;
+
+	public float timeScale = 1f;
+
+	public float detailLevel = 1f;
+
+	public GameObject wall;
+
+	private GameObject _currentWall;
+
+	private float _spawnWallTime = -1000f;
+
+	private Rect _guiRect;
+
+	private Rect checkRect = new Rect(0f, 0f, 260f, 180f);
+}

+ 10 - 0
Assembly-CSharp/DisableToDestroy.cs

@@ -0,0 +1,10 @@
+using System;
+using UnityEngine;
+
+public class DisableToDestroy : MonoBehaviour
+{
+	public void OnDisable()
+	{
+		UnityEngine.Object.Destroy(base.gameObject);
+	}
+}

+ 39 - 0
Assembly-CSharp/DownloadTexture.cs

@@ -0,0 +1,39 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+[RequireComponent(typeof(UITexture))]
+public class DownloadTexture : MonoBehaviour
+{
+	private IEnumerator Start()
+	{
+		WWW www = new WWW(this.url);
+		yield return www;
+		this.mTex = www.texture;
+		if (this.mTex != null)
+		{
+			UITexture component = base.GetComponent<UITexture>();
+			component.mainTexture = this.mTex;
+			if (this.pixelPerfect)
+			{
+				component.MakePixelPerfect();
+			}
+		}
+		www.Dispose();
+		yield break;
+	}
+
+	private void OnDestroy()
+	{
+		if (this.mTex != null)
+		{
+			UnityEngine.Object.Destroy(this.mTex);
+		}
+	}
+
+	public string url = "http://www.yourwebsite.com/logo.png";
+
+	public bool pixelPerfect = true;
+
+	private Texture2D mTex;
+}

+ 547 - 0
Assembly-CSharp/DummyVRCamera.cs

@@ -0,0 +1,547 @@
+using System;
+using UnityEngine;
+
+public class DummyVRCamera : OvrCamera
+{
+	public override bool IsNoHandController
+	{
+		get
+		{
+			return true;
+		}
+	}
+
+	protected override void Awake()
+	{
+		this.m_fDistanceRate = 1.4f;
+		this.m_trRealHead = UTY.GetChildObject(base.gameObject, "Main Camera (head)", false).transform;
+		this.m_goCenterEye = UTY.GetChildObject(base.gameObject, "Main Camera (head)/Main Camera (eye)", false);
+		this.m_trCenterEye = this.m_goCenterEye.transform;
+		this.m_camMain = this.m_goCenterEye.GetComponent<Camera>();
+		this.m_FadeTargetCameraOVR = this.m_goCenterEye.GetComponent<ScreenOverlay>();
+		this.m_BloomOVR = this.m_goCenterEye.GetComponent<Bloom>();
+		this.m_fBloomDefIntensity = this.m_BloomOVR.bloomIntensity;
+		this.m_trTarget = new GameObject("OVRCamTarget").transform;
+		this.m_trTarget.SetParent(GameMain.Instance.transform, false);
+		this.m_trVirtualMy = new GameObject("OVRCamMy").transform;
+		this.m_trVirtualMy.SetParent(GameMain.Instance.transform, false);
+		GameObject gameObject = UnityEngine.Object.Instantiate(Resources.Load("OVR/OvrHeadScale")) as GameObject;
+		gameObject.SetActive(true);
+		GameObject gameObject2 = GameObject.Find("SystemUI Root");
+		gameObject.transform.SetParent(gameObject2.transform, false);
+		this.m_labelHeadScale = gameObject.GetComponentInChildren<UILabel>();
+		this.m_labelHeadScale.enabled = false;
+		this.m_goOvrUiScreen = UTY.GetChildObject(this.m_trRealHead.gameObject, "UI", false);
+		this.m_goOvrUiTablet = UTY.GetChildObject(base.gameObject, "Odogu_TabletPC", false);
+		this.m_trOvrUiTablet = this.m_goOvrUiTablet.transform;
+		this.m_OvrTablet = this.m_goOvrUiTablet.GetComponent<OvrTablet>();
+		this.m_OvrTablet.Init(this.m_trRealHead.gameObject);
+		Vignetting vignetting = base.gameObject.AddComponent<Vignetting>();
+		vignetting.enabled = false;
+		Camera component = base.gameObject.GetComponent<Camera>();
+		component.enabled = false;
+		this.m_trBaseHead = new GameObject("DummyVRCamBaseHead").transform;
+		this.m_trBaseHead.SetParent(GameMain.Instance.transform, false);
+		this.m_trCursorLaserHit = this.m_goOvrUiScreen.transform.Find("ovr_screen/hit");
+		NDebug.Assert(this.m_trCursorLaserHit != null, "UI Cursor Hit オブジェクトが見つかりません。");
+		float ovrViveCursorLaserHitScale = GameMain.Instance.CMSystem.OvrViveCursorLaserHitScale;
+		this.m_trCursorLaserHit.localScale = new Vector3(ovrViveCursorLaserHitScale, ovrViveCursorLaserHitScale, ovrViveCursorLaserHitScale);
+		this.m_VREvnetText = this.m_trRealHead.Find("VREventText").GetComponent<VREventText>();
+		Texture2D texture2D = Resources.Load<Texture2D>("System/Texture/black");
+		SteamVR_Skybox.SetOverride(texture2D, texture2D, texture2D, texture2D, texture2D, texture2D);
+		Transform transform = base.transform.Find("Controller (left)");
+		Transform transform2 = base.transform.Find("Controller (right)");
+		this.m_VRCtrlLeft = transform.GetComponent<DummyVRController>();
+		this.m_VRCtrlLeft.Init();
+		this.m_VRCtrlRight = transform2.GetComponent<DummyVRController>();
+		this.m_VRCtrlRight.Init();
+		Transform transform3 = this.m_trRealHead.Find("EyeRayCaster");
+		this.m_EyeRay = transform3.GetComponent<OvrEyeRay>();
+		NDebug.Assert(this.m_EyeRay != null, "視線検出機構がみつかりません。");
+		this.m_DummyHand = base.transform.Find("HandPlayer").GetComponent<DummyVRHandAnimator>();
+		NDebug.Assert(this.m_DummyHand != null, "HandPlayer が見つかりません。");
+		this.m_DummyHand.gameObject.SetActive(false);
+		this.UpdateHeadScale();
+		this.m_bWheelToZoom = true;
+	}
+
+	public override void Start()
+	{
+		this.m_goOvrUiScreen.SetActive(false);
+		this.m_goOvrUiTablet.SetActive(true);
+		this.m_goOvrUiNow = this.m_goOvrUiTablet;
+		this.ReCallcOffset();
+	}
+
+	public override void ChangeControllerNew(bool f_bNew)
+	{
+	}
+
+	public override void DefaultControllerMode(bool f_bEnable)
+	{
+	}
+
+	public override void ReCallcOffset()
+	{
+	}
+
+	public override void OnLevelWasLoaded(int level)
+	{
+		base.OnLevelWasLoaded(level);
+		this.m_bDummyYotogiCamera = this.m_bIsSceneYotogi;
+		this.m_bIsSceneYotogi = false;
+	}
+
+	public override void SetCameraMask(CameraMain.CameraMask f_eMask, bool f_bVisible)
+	{
+		if (f_bVisible)
+		{
+		}
+	}
+
+	public override void CameraMaskReset()
+	{
+	}
+
+	public override void SetCameraType(CameraMain.CameraType f_eType)
+	{
+	}
+
+	public override CameraMain.CameraType GetCameraType()
+	{
+		return CameraMain.CameraType.Free;
+	}
+
+	public override void SetControl(bool f_bEnable)
+	{
+	}
+
+	public override bool GetControl()
+	{
+		return true;
+	}
+
+	public override void SetTargetPos(Vector3 f_vecWorldPos, bool f_bSelf = true)
+	{
+		if (f_bSelf)
+		{
+			iTween.StopAndSkipToEnd(base.gameObject);
+		}
+		this.m_trTarget.position = f_vecWorldPos;
+		this.SetTransform(this.m_trTarget.position, this.m_vRot, this.m_fDistance);
+	}
+
+	public override Vector3 GetTargetPos()
+	{
+		return this.m_trTarget.position;
+	}
+
+	public override void SetDistance(float f_fDistance, bool f_bSelf = true)
+	{
+		if (f_bSelf)
+		{
+			iTween.StopAndSkipToEnd(base.gameObject);
+		}
+		this.m_fDistance = f_fDistance;
+		this.SetTransform(this.m_trTarget.position, this.m_vRot, this.m_fDistance);
+	}
+
+	public override float GetDistance()
+	{
+		return this.m_fDistance;
+	}
+
+	public override void SetAroundAngle(Vector2 f_vecAngle, bool f_bSelf = true)
+	{
+		if (f_bSelf)
+		{
+			iTween.StopAndSkipToEnd(base.gameObject);
+		}
+		this.SetTransform(this.m_trTarget.position, f_vecAngle, this.m_fDistance);
+	}
+
+	public override Vector2 GetAroundAngle()
+	{
+		return this.m_vRot;
+	}
+
+	public override void SetTargetOffset(Vector3 f_vOffs, bool f_bSelf = true)
+	{
+	}
+
+	public override Vector3 GetPos()
+	{
+		return this.m_trBaseHead.position;
+	}
+
+	public override void SetRealHeadPos(Vector3 f_vecWorldPos, bool f_bYFromFloor = false)
+	{
+		if (f_bYFromFloor)
+		{
+			f_vecWorldPos.y = this.GetYfromFloor(f_vecWorldPos);
+		}
+		this.m_trBaseHead.position = f_vecWorldPos;
+		this.UpdateRealPosRot();
+	}
+
+	public override void SetRealHeadRot(Vector3 f_vecWorldRot, bool f_bRotYOnly = true)
+	{
+		Transform realHeadTransform = this.GetRealHeadTransform();
+		this.m_trBaseHead.position = realHeadTransform.position;
+		if (f_bRotYOnly)
+		{
+			this.m_trBaseHead.rotation = Quaternion.Euler(0f, realHeadTransform.rotation.eulerAngles.y, 0f);
+		}
+		else
+		{
+			this.m_trBaseHead.rotation = Quaternion.Euler(f_vecWorldRot);
+		}
+		float num = f_vecWorldRot.y - realHeadTransform.rotation.eulerAngles.y;
+		f_vecWorldRot.y = realHeadTransform.rotation.eulerAngles.y + num;
+		this.m_trBaseHead.rotation = Quaternion.Euler(f_vecWorldRot);
+		this.UpdateRealPosRot();
+	}
+
+	public override void SetFootPos(Vector3 f_vecFootPos, CameraMain.STAND_SIT f_eState)
+	{
+		if (f_eState == CameraMain.STAND_SIT.STAND)
+		{
+			f_vecFootPos.y += GameMain.Instance.CMSystem.VRCameraHeightStandOffs;
+		}
+		else if (f_eState == CameraMain.STAND_SIT.SIT)
+		{
+			f_vecFootPos.y += GameMain.Instance.CMSystem.VRCameraHeightSitOffs;
+		}
+		else
+		{
+			f_vecFootPos.y += this.GetYfromFloor(this.GetRealHeadTransform().position);
+		}
+		this.SetRealHeadPos(f_vecFootPos, false);
+	}
+
+	public override Transform GetBaseHeadTransform()
+	{
+		return this.m_trBaseHead;
+	}
+
+	public override Transform GetRealHeadTransform()
+	{
+		return this.m_trRealHead;
+	}
+
+	private void SetTransform(Vector3 f_vecTargetPosWorld, Vector2 f_vecRot, float f_fDistance)
+	{
+		this.m_trTarget.position = f_vecTargetPosWorld;
+		this.m_vRot = f_vecRot;
+		this.m_trVirtualMy.rotation = Quaternion.identity;
+		this.m_trVirtualMy.Rotate(new Vector3(0f, f_vecRot.x, 0f), Space.World);
+		this.m_trVirtualMy.Rotate(new Vector3(f_vecRot.y, 0f, 0f), Space.Self);
+		if (this.m_bDummyYotogiCamera)
+		{
+			f_fDistance *= this.m_fDistanceRate;
+		}
+		this.m_trVirtualMy.position = this.m_trVirtualMy.rotation * new Vector3(0f, 0f, -f_fDistance) + this.m_trTarget.position;
+		this.m_trBaseHead.position = this.m_trVirtualMy.position + (this.m_trTarget.position - this.m_trVirtualMy.position) * 0.5f;
+		this.m_trBaseHead.rotation = this.m_trVirtualMy.rotation;
+		this.UpdateRealPosRot();
+	}
+
+	public override void Reset(CameraMain.CameraType f_eType, bool f_bControl)
+	{
+		iTween.StopAndSkipToEnd(base.gameObject);
+		base.RemoveChaseCameraAll();
+		this.SetTargetPos(new Vector3(0f, 1.5f, 0f), true);
+	}
+
+	public override void FadeOutNoUI(float f_fTime = 0.5f, bool f_bSkipable = true)
+	{
+	}
+
+	public override void FadeInNoUI(float f_fTime = 0.5f, bool f_bSkipable = true)
+	{
+	}
+
+	protected override float GetFadeIntensity()
+	{
+		return this.m_FadeTargetCameraOVR.intensity;
+	}
+
+	protected override void OnProcessFade(float f_fIntensity)
+	{
+		this.m_FadeTargetCameraOVR.intensity = f_fIntensity;
+	}
+
+	protected override void OnOverlayState(bool f_bEnable)
+	{
+		this.m_FadeTargetCameraOVR.enabled = f_bEnable;
+	}
+
+	public override Ray GetForwardRay()
+	{
+		return new Ray(this.m_trCenterEye.position, this.m_trCenterEye.rotation * Vector3.forward);
+	}
+
+	public override void UpdateHeadScale()
+	{
+		float ovrHeadScale = GameMain.Instance.CMSystem.OvrHeadScale;
+		base.gameObject.transform.localScale = new Vector3(ovrHeadScale, ovrHeadScale, ovrHeadScale);
+		this.m_trBaseHead.localScale = base.gameObject.transform.localScale;
+	}
+
+	protected override void UpdateRealPosRot()
+	{
+		base.transform.position = this.m_trBaseHead.position;
+		base.transform.rotation = this.m_trBaseHead.rotation;
+		this.m_vHeadRotEaseBef = (this.m_vHeadRotEaseNow = (this.m_vHeadRotTarget = Vector2.zero));
+	}
+
+	public override void MirrorSwitch()
+	{
+	}
+
+	public override void UIPosReset(float f_fOffsetRotY = 0f)
+	{
+	}
+
+	protected override void Update()
+	{
+		if (GameMain.Instance == null)
+		{
+			return;
+		}
+		if (!base.IsUIShow)
+		{
+			UICamera.InputEnable = false;
+		}
+		if (this.m_DummyHand != null)
+		{
+			this.m_DummyHand.Show = (this.m_unDummyHandVisibleFlag != 0u);
+		}
+		if (this.m_BloomOVR != null)
+		{
+			bool enabled = this.m_BloomOVR.enabled;
+			this.m_BloomOVR.enabled = GameMain.Instance.CMSystem.Bloom;
+			this.m_BloomOVR.bloomIntensity = this.m_fBloomDefIntensity * (float)GameMain.Instance.CMSystem.BloomValue * 0.01f;
+			if (this.m_BloomOVR.bloomIntensity <= 0.01f)
+			{
+				this.m_BloomOVR.enabled = false;
+			}
+			else
+			{
+				this.m_BloomOVR.enabled = true;
+			}
+			if (base.IsUIShow)
+			{
+				this.m_BloomOVR.enabled = false;
+			}
+			if (this.m_BloomOVR.enabled != enabled)
+			{
+				GameMain.Instance.BroadcastMessage("OnChangeScreenSizeOrAA", SendMessageOptions.DontRequireReceiver);
+			}
+		}
+		float vrcameraFov = GameMain.Instance.CMSystem.VRCameraFov;
+		if (this.m_fBackFOV != vrcameraFov)
+		{
+			this.m_camMain.fieldOfView = vrcameraFov;
+			float num = (vrcameraFov - 30f) / 30f;
+			float num2 = 0.23f + 0.17f * num;
+			this.m_VREvnetText.gameObject.transform.localScale = new Vector3(num2, num2, num2);
+			this.m_fBackFOV = vrcameraFov;
+		}
+		RaycastHit raycastHit;
+		if (Physics.Raycast(this.m_camMain.ScreenPointToRay(Input.mousePosition), out raycastHit, float.PositiveInfinity, 33554432))
+		{
+			Vector2 textureCoord = raycastHit.textureCoord;
+			Vector2 v = new Vector2(1280f * (textureCoord.x / 1f), 720f * (textureCoord.y / 1f));
+			GameMain.Instance.OvrMgr.SystemUICamera.SetOvrVirtualMousePos(false, v);
+		}
+		this.m_bSlideMoving = false;
+		this.vFowerd = this.m_trCenterEye.rotation * Vector3.forward;
+		this.vLeft = this.m_trCenterEye.rotation * Vector3.left;
+		this.vUp = this.m_trCenterEye.rotation * Vector3.up;
+		if (GameMain.Instance.CMSystem.VRCameraPlaneMove)
+		{
+			this.vLeft.y = (this.vFowerd.y = 0f);
+			this.vLeft.Normalize();
+			this.vFowerd.Normalize();
+			this.vUp = Vector3.up;
+		}
+		this.v = this.m_trBaseHead.position;
+		if (this.m_bFallThrough || !this.m_bUiToggle)
+		{
+			if (this.m_bWheelToZoom && !base.IsUIShow)
+			{
+				this.v += this.vFowerd * (NInput.GetAxis(this.mouseAxisZoom) * (this.m_MoveSpeed * 10f * Time.deltaTime));
+			}
+			if (NInput.GetMouseButton(2))
+			{
+				Vector3 vector = new Vector3(-NInput.GetAxis(this.mouseAxisX), -NInput.GetAxis(this.mouseAxisY), 0f);
+				this.v += this.vLeft * (vector.x * this.m_MoveSpeed * Time.deltaTime);
+				this.v -= this.vUp * (vector.y * this.m_MoveSpeed * Time.deltaTime);
+				this.m_bSlideMoving = true;
+			}
+			if (NInput.GetMouseButton(1))
+			{
+			}
+		}
+		if (NInput.GetMouseButton(1))
+		{
+			this.vMouseMoving += new Vector2(Math.Abs(NInput.GetAxis("Mouse X")), Math.Abs(NInput.GetAxis("Mouse Y")));
+		}
+		else
+		{
+			if ((this.m_bFallThrough || this.m_bIsForceRightClickUiToggle) && NInput.GetMouseButtonUp(1) && this.vMouseMoving.magnitude < 3f && this.m_bRightClickUIToggle)
+			{
+				this.ToggleUI();
+			}
+			this.vMouseMoving = Vector2.zero;
+		}
+		if (GameMain.Instance.MainCamera.GetFadeState() != CameraMain.FadeState.Out)
+		{
+			if (Input.GetKey(KeyCode.A))
+			{
+				this.v += this.vLeft * (this.m_MoveSpeed * base.MoveSpeedAccel * this.MoveDashRate(KeyCode.A) * Time.deltaTime);
+			}
+			if (Input.GetKey(KeyCode.D))
+			{
+				this.v -= this.vLeft * (this.m_MoveSpeed * base.MoveSpeedAccel * this.MoveDashRate(KeyCode.D) * Time.deltaTime);
+			}
+			if (Input.GetKey(KeyCode.W))
+			{
+				this.v += this.vFowerd * (this.m_MoveSpeed * base.MoveSpeedAccel * this.MoveDashRate(KeyCode.W) * Time.deltaTime);
+			}
+			if (!Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.LeftAlt) && Input.GetKey(KeyCode.S))
+			{
+				this.v -= this.vFowerd * (this.m_MoveSpeed * base.MoveSpeedAccel * this.MoveDashRate(KeyCode.S) * Time.deltaTime);
+			}
+			if (Input.GetKey(KeyCode.Z))
+			{
+				this.v -= this.vUp * (this.m_MoveSpeed * base.MoveSpeedAccel * Time.deltaTime);
+			}
+			if (Input.GetKey(KeyCode.X))
+			{
+				this.v += this.vUp * (this.m_MoveSpeed * base.MoveSpeedAccel * Time.deltaTime);
+			}
+			if (this.HandLimitMode != AVRControllerBehavior.LIMIT_MODE.HAND_ONLY)
+			{
+				this.m_trBaseHead.position = this.v;
+			}
+			if (Input.GetKey(KeyCode.Q))
+			{
+				this.m_trBaseHead.Rotate(new Vector3(0f, 1f, 0f), -90f * base.RotSpeedAccel * Time.deltaTime, Space.World);
+			}
+			if (Input.GetKey(KeyCode.E))
+			{
+				this.m_trBaseHead.Rotate(new Vector3(0f, 1f, 0f), 90f * base.RotSpeedAccel * Time.deltaTime, Space.World);
+			}
+			if (!base.IsUIShow && !this.m_bSlideMoving && 0f <= Input.mousePosition.x && Input.mousePosition.x < (float)Screen.width && 0f <= Input.mousePosition.y && Input.mousePosition.y < (float)Screen.height && Cursor.lockState == CursorLockMode.Locked && !Cursor.visible && !base.IsFadeOut())
+			{
+				this.m_vHeadRotTarget.x = this.m_vHeadRotTarget.x - NInput.GetAxis("Mouse Y") * this.m_fHeadRotSpeed * base.RotMouseSpeedAccel;
+				this.m_vHeadRotTarget.y = this.m_vHeadRotTarget.y + NInput.GetAxis("Mouse X") * this.m_fHeadRotSpeed * base.RotMouseSpeedAccel;
+				this.m_trBaseHead.Rotate(new Vector3(0f, 1f, 0f), this.m_vHeadRotTarget.y - this.m_vHeadRotEaseBef.y, Space.World);
+				float d = 1f;
+				if (GameMain.Instance.CMSystem.VRCamRotDownUp)
+				{
+					d = -1f;
+				}
+				this.m_trBaseHead.Rotate(this.m_trBaseHead.right * d, this.m_vHeadRotTarget.x - this.m_vHeadRotEaseBef.x, Space.World);
+				this.m_vHeadRotEaseBef = this.m_vHeadRotTarget;
+			}
+			else
+			{
+				this.m_vHeadRotEaseBef = (this.m_vHeadRotEaseNow = (this.m_vHeadRotTarget = Vector2.zero));
+			}
+		}
+		else
+		{
+			this.m_vHeadRotEaseBef = (this.m_vHeadRotEaseNow = (this.m_vHeadRotTarget = Vector2.zero));
+		}
+		if (Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.SysReq))
+		{
+			if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
+			{
+				this.SnapShotOVR(false);
+			}
+			else if (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))
+			{
+				this.SnapShotOVR(true);
+			}
+		}
+		if (Input.GetKeyUp(KeyCode.R))
+		{
+			this.ReCallcOffset();
+		}
+		if (Input.GetKeyUp(KeyCode.Space))
+		{
+			this.ToggleUI();
+		}
+		if (base.IsUIShow)
+		{
+			Cursor.visible = true;
+			Cursor.lockState = CursorLockMode.None;
+		}
+		else if (this.m_bUiShowBack)
+		{
+			Cursor.visible = false;
+			Cursor.lockState = CursorLockMode.Locked;
+		}
+		else
+		{
+			if (Input.GetKeyUp(KeyCode.Escape))
+			{
+				Cursor.visible = true;
+				Cursor.lockState = CursorLockMode.None;
+			}
+			if (NInput.GetMouseButtonUp(0) && 0f <= Input.mousePosition.x && Input.mousePosition.x < (float)Screen.width && 0f <= Input.mousePosition.y && Input.mousePosition.y < (float)Screen.height)
+			{
+				Cursor.visible = false;
+				Cursor.lockState = CursorLockMode.Locked;
+			}
+		}
+		base.transform.position = this.m_trBaseHead.position;
+		base.transform.rotation = this.m_trBaseHead.rotation;
+		this.CheckSwitchManHeadEnable(this.m_trRealHead.position);
+		this.m_bUiShowBack = base.IsUIShow;
+	}
+
+	private void OnDrawGizmos()
+	{
+		if (this.m_trTarget != null)
+		{
+			Gizmos.DrawIcon(this.m_trTarget.position, "gizmo_eye.png", true);
+			if (base.enabled)
+			{
+				Gizmos.color = Color.cyan;
+				Gizmos.DrawRay(this.m_trVirtualMy.position, this.m_trTarget.position - this.m_trVirtualMy.position);
+				Gizmos.DrawRay(this.m_trCenterEye.position, this.m_trCenterEye.rotation * Vector3.forward * 10f);
+			}
+		}
+	}
+
+	private Vector2 m_vHeadRotEaseNow = Vector2.zero;
+
+	private Vector2 m_vHeadRotEaseBef = Vector2.zero;
+
+	public float m_fHeadRotSpeed = 1.5f;
+
+	public float m_fHeadRotEase = 0.5f;
+
+	private Vector2 m_vHeadRotTarget = Vector2.zero;
+
+	public float m_fDistanceRate = 1.4f;
+
+	private ScreenOverlay m_Fade;
+
+	private Camera m_camMain;
+
+	private float m_fBackFOV;
+
+	private bool m_bDummyYotogiCamera;
+
+	private enum MouseButtonDown
+	{
+		MBD_LEFT,
+		MBD_RIGHT,
+		MBD_MIDDLE
+	}
+}

+ 95 - 0
Assembly-CSharp/DummyVRController.cs

@@ -0,0 +1,95 @@
+using System;
+
+public class DummyVRController : AVRController
+{
+	public override bool IsHandCameraMode
+	{
+		get
+		{
+			return false;
+		}
+	}
+
+	public override bool HandCameraMode
+	{
+		get
+		{
+			return false;
+		}
+		set
+		{
+		}
+	}
+
+	public override bool IsHandPenMode
+	{
+		get
+		{
+			return false;
+		}
+	}
+
+	public override AVRControllerBehavior.LIMIT_MODE HandLimitMode
+	{
+		get
+		{
+			return AVRControllerBehavior.LIMIT_MODE.NORMAL;
+		}
+		set
+		{
+		}
+	}
+
+	public override bool HandModelVisible
+	{
+		get
+		{
+			return this.m_CtrlBehNow.HandModelVisible;
+		}
+		set
+		{
+			this.m_CtrlBehNow.HandModelVisible = value;
+		}
+	}
+
+	public override bool HandDanceMode
+	{
+		get
+		{
+			return false;
+		}
+		set
+		{
+		}
+	}
+
+	public override bool HandVRIKMode
+	{
+		get
+		{
+			return false;
+		}
+		set
+		{
+		}
+	}
+
+	public override bool HandYotogiMode
+	{
+		get
+		{
+			return false;
+		}
+		set
+		{
+		}
+	}
+
+	public override void Init()
+	{
+		base.Init();
+		this.m_CtrlBehOld = base.GetComponent<DummyVRControllerBehavior>();
+		this.m_CtrlBehOld.Init(this);
+		this.m_CtrlBehNew = this.m_CtrlBehOld;
+	}
+}

+ 91 - 0
Assembly-CSharp/DummyVRControllerBehavior.cs

@@ -0,0 +1,91 @@
+using System;
+using UnityEngine;
+
+public class DummyVRControllerBehavior : AVRControllerBehavior
+{
+	public override AVRControllerBehavior.BEH_TYPE BehaviourType
+	{
+		get
+		{
+			return AVRControllerBehavior.BEH_TYPE.DUMMY;
+		}
+	}
+
+	public override bool HandCameraMode
+	{
+		get
+		{
+			return false;
+		}
+		set
+		{
+		}
+	}
+
+	public override bool IsHandCameraMode
+	{
+		get
+		{
+			return false;
+		}
+	}
+
+	public override bool IsHandPenMode
+	{
+		get
+		{
+			return false;
+		}
+	}
+
+	public override bool HandDanceMode
+	{
+		get
+		{
+			return false;
+		}
+		set
+		{
+		}
+	}
+
+	public override bool HandVRIKMode
+	{
+		get
+		{
+			return false;
+		}
+		set
+		{
+		}
+	}
+
+	public override bool HandYotogiMode
+	{
+		get
+		{
+			return false;
+		}
+		set
+		{
+		}
+	}
+
+	protected void Start()
+	{
+		NDebug.Assert(this.m_Pair != null, "Pairコントローラがありません。");
+		OvrMgr.OvrObject ovr_obj = GameMain.Instance.OvrMgr.ovr_obj;
+	}
+
+	public override Vector3 GetVelocityHand()
+	{
+		return Vector3.zero;
+	}
+
+	public override float GetRotHandY()
+	{
+		return 0f;
+	}
+
+	public DummyVRControllerBehavior m_Pair;
+}

+ 100 - 0
Assembly-CSharp/DummyVRControllerButtons.cs

@@ -0,0 +1,100 @@
+using System;
+using UnityEngine;
+
+public class DummyVRControllerButtons : AVRControllerButtons
+{
+	public DummyVRControllerButtons()
+	{
+		ulong[] array = new ulong[5];
+		array[1] = 4294967296UL;
+		this.m_aryTouch2RealVive = array;
+		base..ctor();
+	}
+
+	protected override void Awake()
+	{
+		base.Awake();
+		this.m_eType = AVRControllerButtons.TYPE.NON_DUMMY;
+	}
+
+	private void Start()
+	{
+	}
+
+	public override bool ShowHand
+	{
+		get
+		{
+			return false;
+		}
+		set
+		{
+		}
+	}
+
+	public override void Haptic(byte f_byFoce, float f_fTime)
+	{
+	}
+
+	public override bool GetPressDown(AVRControllerButtons.BTN f_eBtn)
+	{
+		return false;
+	}
+
+	public override bool GetPress(AVRControllerButtons.BTN f_eBtn)
+	{
+		return false;
+	}
+
+	public override bool GetPressUp(AVRControllerButtons.BTN f_eBtn)
+	{
+		return false;
+	}
+
+	public override bool GetTouchDown(AVRControllerButtons.TOUCH f_eTouch)
+	{
+		return false;
+	}
+
+	public override bool GetTouch(AVRControllerButtons.TOUCH f_eTouch)
+	{
+		return false;
+	}
+
+	public override bool GetTouchUp(AVRControllerButtons.TOUCH f_eTouch)
+	{
+		return false;
+	}
+
+	public override Vector2 GetAxis()
+	{
+		return Vector2.zero;
+	}
+
+	public override float GetTriggerRate()
+	{
+		return 0f;
+	}
+
+	private void Update()
+	{
+	}
+
+	private ulong[] m_aryBtn2RealVive = new ulong[]
+	{
+		2UL,
+		4294967296UL,
+		4294967296UL,
+		8589934592UL,
+		2UL,
+		8589934592UL,
+		4294967296UL,
+		4UL
+	};
+
+	private ulong[] m_aryTouch2RealVive;
+
+	private bool m_bPressLeft;
+
+	private Coroutine m_coVib;
+}

+ 167 - 0
Assembly-CSharp/DummyVRHandAnimator.cs

@@ -0,0 +1,167 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class DummyVRHandAnimator : OvrHandAnimator
+{
+	public bool Grab
+	{
+		get
+		{
+			return this.m_bGrab;
+		}
+		set
+		{
+			this.m_bGrab = value;
+		}
+	}
+
+	protected override void Start()
+	{
+		for (int i = 0; i < this.m_aryFingerData.Length; i++)
+		{
+			this.m_aryFingerData[i] = new OvrHandAnimator.FingerMorph();
+		}
+		List<Transform> list = new List<Transform>();
+		this.FindChild(list, this.m_trRootGrasp);
+		for (int j = 0; j < this.m_listRoot.Length; j++)
+		{
+			List<OvrHandAnimator.BonePair> list2 = new List<OvrHandAnimator.BonePair>();
+			List<Transform> list3 = new List<Transform>();
+			this.FindChild(list3, this.m_trFingerRoot[j]);
+			using (List<Transform>.Enumerator enumerator = list3.GetEnumerator())
+			{
+				while (enumerator.MoveNext())
+				{
+					Transform trBase = enumerator.Current;
+					Transform transform = list.Find((Transform a) => a.name == trBase.name);
+					if (transform != null)
+					{
+						list2.Add(new OvrHandAnimator.BonePair(trBase, transform));
+					}
+					else
+					{
+						Debug.LogWarning("指ペアが見つかりません。" + trBase.name);
+					}
+				}
+			}
+			this.m_listRoot[j] = list2;
+		}
+	}
+
+	public override void Init(AVRControllerButtons f_CtrlBtn)
+	{
+		this.m_CtrlBtn = f_CtrlBtn;
+	}
+
+	public bool Show
+	{
+		get
+		{
+			return base.gameObject.activeSelf;
+		}
+		set
+		{
+			this.m_bShow = value;
+			if (value)
+			{
+				base.gameObject.SetActive(true);
+			}
+		}
+	}
+
+	private void OnEnable()
+	{
+		this.OnChangeScreenSizeOrAA();
+	}
+
+	protected override void FindChild(List<Transform> f_list, Transform f_trParent)
+	{
+		for (int i = 0; i < f_trParent.childCount; i++)
+		{
+			this.FindChild(f_list, f_trParent.GetChild(i));
+		}
+		f_list.Add(f_trParent);
+	}
+
+	public override void FingerRateTarget(OvrHandAnimator.Finger f_eFinger, float f_fRate)
+	{
+		this.m_fTargetRate[(int)f_eFinger] = f_fRate;
+	}
+
+	protected override void FingerRateUpdate(OvrHandAnimator.Finger f_eFinger, float f_fRate)
+	{
+		OvrHandAnimator.FingerMorph fingerMorph = this.m_aryFingerData[(int)f_eFinger];
+		fingerMorph.fTarget = f_fRate;
+		float num = fingerMorph.fTarget - fingerMorph.fNow;
+		float num2 = num * this.m_fEaseRate;
+		fingerMorph.fNow += num2;
+		List<OvrHandAnimator.BonePair> list = this.m_listRoot[(int)f_eFinger];
+		for (int i = 0; i < list.Count; i++)
+		{
+			OvrHandAnimator.BonePair bonePair = list[i];
+			bonePair.trMain.localRotation = Quaternion.Slerp(bonePair.qBackRot, bonePair.trGrasp.localRotation, fingerMorph.fNow);
+		}
+	}
+
+	public void OnChangeScreenSizeOrAA()
+	{
+		bool flag = QualitySettings.antiAliasing == 0 && !GameMain.Instance.MainCamera.IsBloomEnabled;
+		if (GameMain.Instance.VRMode && !GameMain.Instance.VRDummyMode)
+		{
+			flag = false;
+		}
+		foreach (Renderer renderer in base.transform.GetComponentsInChildren<Renderer>(true))
+		{
+			if (renderer == null || renderer.materials == null)
+			{
+				return;
+			}
+			foreach (Material material in renderer.materials)
+			{
+				if (flag)
+				{
+					material.EnableKeyword("UV_POS_REVERSE");
+					material.DisableKeyword("UV_POS_NORMAL");
+				}
+				else
+				{
+					material.DisableKeyword("UV_POS_NORMAL");
+					material.DisableKeyword("UV_POS_REVERSE");
+				}
+			}
+		}
+	}
+
+	protected override void Update()
+	{
+		if (base.gameObject.activeSelf != this.m_bShow)
+		{
+			base.gameObject.SetActive(this.m_bShow);
+		}
+		if (this.m_bGrab)
+		{
+			this.FingerRateTarget(OvrHandAnimator.Finger.Thumb, 1f);
+			this.FingerRateTarget(OvrHandAnimator.Finger.Index, 1f);
+			this.FingerRateTarget(OvrHandAnimator.Finger.Middle, 1f);
+			this.FingerRateTarget(OvrHandAnimator.Finger.Ring, 1f);
+			this.FingerRateTarget(OvrHandAnimator.Finger.Little, 1f);
+		}
+		else
+		{
+			this.FingerRateTarget(OvrHandAnimator.Finger.Thumb, 0f);
+			this.FingerRateTarget(OvrHandAnimator.Finger.Index, 0f);
+			this.FingerRateTarget(OvrHandAnimator.Finger.Middle, 0f);
+			this.FingerRateTarget(OvrHandAnimator.Finger.Ring, 0f);
+			this.FingerRateTarget(OvrHandAnimator.Finger.Little, 0f);
+		}
+		for (int i = 0; i < 5; i++)
+		{
+			this.FingerRateUpdate((OvrHandAnimator.Finger)i, this.m_fTargetRate[i]);
+		}
+	}
+
+	private bool m_bGrab;
+
+	private bool m_bShow;
+}

File diff suppressed because it is too large
+ 1097 - 0
Assembly-CSharp/DynamicBone.cs


+ 216 - 0
Assembly-CSharp/DynamicBoneCollider.cs

@@ -0,0 +1,216 @@
+using System;
+using System.IO;
+using UnityEngine;
+
+[AddComponentMenu("Dynamic Bone/Dynamic Bone Collider")]
+public class DynamicBoneCollider : DynamicBoneColliderBase
+{
+	public override string TypeName
+	{
+		get
+		{
+			return "dbc";
+		}
+	}
+
+	public float GetLossyScale()
+	{
+		return this.m_Radius * Mathf.Abs(base.transform.lossyScale.x);
+	}
+
+	public override void Serialize(BinaryWriter f_bw, int f_nVersion)
+	{
+		base.Serialize(f_bw, f_nVersion);
+		f_bw.Write(this.m_Radius);
+		f_bw.Write(this.m_Height);
+	}
+
+	public override void Deserialize(BinaryReader f_br, int f_nVersion, Transform f_trBodyBoneRoot)
+	{
+		base.Deserialize(f_br, f_nVersion, f_trBodyBoneRoot);
+		this.m_Radius = f_br.ReadSingle();
+		this.m_Height = f_br.ReadSingle();
+	}
+
+	private void OnValidate()
+	{
+		this.m_Radius = Mathf.Max(this.m_Radius, 0f);
+		this.m_Height = Mathf.Max(this.m_Height, 0f);
+	}
+
+	public override bool Collide(ref Vector3 particlePosition, float particleRadius)
+	{
+		float num = this.m_Radius * Mathf.Abs(base.transform.lossyScale.x);
+		float num2 = this.m_Height * 0.5f - this.m_Radius;
+		if (num2 <= 0f)
+		{
+			if (this.m_Bound == DynamicBoneColliderBase.Bound.Outside)
+			{
+				return DynamicBoneCollider.OutsideSphere(ref particlePosition, particleRadius, base.transform.TransformPoint(this.m_Center), num);
+			}
+			return DynamicBoneCollider.InsideSphere(ref particlePosition, particleRadius, base.transform.TransformPoint(this.m_Center), num);
+		}
+		else
+		{
+			Vector3 center = this.m_Center;
+			Vector3 center2 = this.m_Center;
+			DynamicBoneColliderBase.Direction direction = this.m_Direction;
+			if (direction != DynamicBoneColliderBase.Direction.X)
+			{
+				if (direction != DynamicBoneColliderBase.Direction.Y)
+				{
+					if (direction == DynamicBoneColliderBase.Direction.Z)
+					{
+						center.z -= num2;
+						center2.z += num2;
+					}
+				}
+				else
+				{
+					center.y -= num2;
+					center2.y += num2;
+				}
+			}
+			else
+			{
+				center.x -= num2;
+				center2.x += num2;
+			}
+			if (this.m_Bound == DynamicBoneColliderBase.Bound.Outside)
+			{
+				return DynamicBoneCollider.OutsideCapsule(ref particlePosition, particleRadius, base.transform.TransformPoint(center), base.transform.TransformPoint(center2), num);
+			}
+			return DynamicBoneCollider.InsideCapsule(ref particlePosition, particleRadius, base.transform.TransformPoint(center), base.transform.TransformPoint(center2), num);
+		}
+	}
+
+	private static bool OutsideSphere(ref Vector3 particlePosition, float particleRadius, Vector3 sphereCenter, float sphereRadius)
+	{
+		float num = sphereRadius + particleRadius;
+		float num2 = num * num;
+		Vector3 a = particlePosition - sphereCenter;
+		float sqrMagnitude = a.sqrMagnitude;
+		if (sqrMagnitude > 0f && sqrMagnitude < num2)
+		{
+			float num3 = Mathf.Sqrt(sqrMagnitude);
+			particlePosition = sphereCenter + a * (num / num3);
+			return true;
+		}
+		return false;
+	}
+
+	private static bool InsideSphere(ref Vector3 particlePosition, float particleRadius, Vector3 sphereCenter, float sphereRadius)
+	{
+		float num = sphereRadius - particleRadius;
+		float num2 = num * num;
+		Vector3 a = particlePosition - sphereCenter;
+		float sqrMagnitude = a.sqrMagnitude;
+		if (sqrMagnitude > num2)
+		{
+			float num3 = Mathf.Sqrt(sqrMagnitude);
+			particlePosition = sphereCenter + a * (num / num3);
+			return true;
+		}
+		return false;
+	}
+
+	private static bool OutsideCapsule(ref Vector3 particlePosition, float particleRadius, Vector3 capsuleP0, Vector3 capsuleP1, float capsuleRadius)
+	{
+		float num = capsuleRadius + particleRadius;
+		float num2 = num * num;
+		Vector3 vector = capsuleP1 - capsuleP0;
+		Vector3 vector2 = particlePosition - capsuleP0;
+		float num3 = Vector3.Dot(vector2, vector);
+		if (num3 <= 0f)
+		{
+			float sqrMagnitude = vector2.sqrMagnitude;
+			if (sqrMagnitude > 0f && sqrMagnitude < num2)
+			{
+				float num4 = Mathf.Sqrt(sqrMagnitude);
+				particlePosition = capsuleP0 + vector2 * (num / num4);
+				return true;
+			}
+		}
+		else
+		{
+			float sqrMagnitude2 = vector.sqrMagnitude;
+			if (num3 >= sqrMagnitude2)
+			{
+				vector2 = particlePosition - capsuleP1;
+				float sqrMagnitude3 = vector2.sqrMagnitude;
+				if (sqrMagnitude3 > 0f && sqrMagnitude3 < num2)
+				{
+					float num5 = Mathf.Sqrt(sqrMagnitude3);
+					particlePosition = capsuleP1 + vector2 * (num / num5);
+					return true;
+				}
+			}
+			else if (sqrMagnitude2 > 0f)
+			{
+				num3 /= sqrMagnitude2;
+				vector2 -= vector * num3;
+				float sqrMagnitude4 = vector2.sqrMagnitude;
+				if (sqrMagnitude4 > 0f && sqrMagnitude4 < num2)
+				{
+					float num6 = Mathf.Sqrt(sqrMagnitude4);
+					particlePosition += vector2 * ((num - num6) / num6);
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	private static bool InsideCapsule(ref Vector3 particlePosition, float particleRadius, Vector3 capsuleP0, Vector3 capsuleP1, float capsuleRadius)
+	{
+		float num = capsuleRadius - particleRadius;
+		float num2 = num * num;
+		Vector3 vector = capsuleP1 - capsuleP0;
+		Vector3 vector2 = particlePosition - capsuleP0;
+		float num3 = Vector3.Dot(vector2, vector);
+		if (num3 <= 0f)
+		{
+			float sqrMagnitude = vector2.sqrMagnitude;
+			if (sqrMagnitude > num2)
+			{
+				float num4 = Mathf.Sqrt(sqrMagnitude);
+				particlePosition = capsuleP0 + vector2 * (num / num4);
+				return true;
+			}
+		}
+		else
+		{
+			float sqrMagnitude2 = vector.sqrMagnitude;
+			if (num3 >= sqrMagnitude2)
+			{
+				vector2 = particlePosition - capsuleP1;
+				float sqrMagnitude3 = vector2.sqrMagnitude;
+				if (sqrMagnitude3 > num2)
+				{
+					float num5 = Mathf.Sqrt(sqrMagnitude3);
+					particlePosition = capsuleP1 + vector2 * (num / num5);
+					return true;
+				}
+			}
+			else if (sqrMagnitude2 > 0f)
+			{
+				num3 /= sqrMagnitude2;
+				vector2 -= vector * num3;
+				float sqrMagnitude4 = vector2.sqrMagnitude;
+				if (sqrMagnitude4 > num2)
+				{
+					float num6 = Mathf.Sqrt(sqrMagnitude4);
+					particlePosition += vector2 * ((num - num6) / num6);
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	[Tooltip("The radius of the sphere or capsule.")]
+	public float m_Radius = 0.5f;
+
+	[Tooltip("The height of the capsule.")]
+	public float m_Height;
+}

+ 85 - 0
Assembly-CSharp/DynamicBoneColliderBase.cs

@@ -0,0 +1,85 @@
+using System;
+using System.IO;
+using UnityEngine;
+
+public abstract class DynamicBoneColliderBase : MonoBehaviour
+{
+	public virtual string TypeName
+	{
+		get
+		{
+			return string.Empty;
+		}
+	}
+
+	public virtual bool Collide(ref Vector3 particlePosition, float particleRadius)
+	{
+		return false;
+	}
+
+	public virtual void Serialize(BinaryWriter f_bw, int f_nVersion)
+	{
+		if (base.transform.name.IndexOf("_HIT_", 0) != 0)
+		{
+			NDebug.MessageBox("確認", base.transform.name + " 名の先頭に _HIT_ を付加して保存します。");
+			base.transform.name = "_HIT_" + base.transform.name;
+		}
+		f_bw.Write(base.transform.parent.name);
+		f_bw.Write(base.transform.name);
+		f_bw.Write(base.transform.localPosition.x);
+		f_bw.Write(base.transform.localPosition.y);
+		f_bw.Write(base.transform.localPosition.z);
+		f_bw.Write(base.transform.localRotation.x);
+		f_bw.Write(base.transform.localRotation.y);
+		f_bw.Write(base.transform.localRotation.z);
+		f_bw.Write(base.transform.localRotation.w);
+		f_bw.Write(base.transform.localScale.x);
+		f_bw.Write(base.transform.localScale.y);
+		f_bw.Write(base.transform.localScale.z);
+		f_bw.Write((int)this.m_Direction);
+		f_bw.Write(this.m_Center.x);
+		f_bw.Write(this.m_Center.y);
+		f_bw.Write(this.m_Center.z);
+		f_bw.Write((int)this.m_Bound);
+	}
+
+	public virtual void Deserialize(BinaryReader f_br, int f_nVersion, Transform f_trBodyBoneRoot)
+	{
+		string name = f_br.ReadString();
+		Transform transform = CMT.SearchObjName(f_trBodyBoneRoot, name, true);
+		if (transform == null)
+		{
+			NDebug.Assert("物理体親ボーンがありません。", false);
+		}
+		base.transform.SetParent(transform, false);
+		base.transform.name = f_br.ReadString();
+		base.transform.localPosition = new Vector3(f_br.ReadSingle(), f_br.ReadSingle(), f_br.ReadSingle());
+		base.transform.localRotation = new Quaternion(f_br.ReadSingle(), f_br.ReadSingle(), f_br.ReadSingle(), f_br.ReadSingle());
+		base.transform.localScale = new Vector3(f_br.ReadSingle(), f_br.ReadSingle(), f_br.ReadSingle());
+		this.m_Direction = (DynamicBoneColliderBase.Direction)f_br.ReadInt32();
+		this.m_Center.Set(f_br.ReadSingle(), f_br.ReadSingle(), f_br.ReadSingle());
+		this.m_Bound = (DynamicBoneColliderBase.Bound)f_br.ReadInt32();
+	}
+
+	[Tooltip("The axis of the capsule's height.")]
+	public DynamicBoneColliderBase.Direction m_Direction = DynamicBoneColliderBase.Direction.Y;
+
+	[Tooltip("The center of the sphere or capsule, in the object's local space.")]
+	public Vector3 m_Center = Vector3.zero;
+
+	[Tooltip("Constrain bones to outside bound or inside bound.")]
+	public DynamicBoneColliderBase.Bound m_Bound;
+
+	public enum Direction
+	{
+		X,
+		Y,
+		Z
+	}
+
+	public enum Bound
+	{
+		Outside,
+		Inside
+	}
+}

+ 27 - 0
Assembly-CSharp/DynamicBoneDemo1.cs

@@ -0,0 +1,27 @@
+using System;
+using UnityEngine;
+
+public class DynamicBoneDemo1 : MonoBehaviour
+{
+	private void Update()
+	{
+		this.m_Player.transform.Rotate(new Vector3(0f, Input.GetAxis("Horizontal") * Time.deltaTime * 200f, 0f));
+		this.m_Player.transform.Translate(base.transform.forward * Input.GetAxis("Vertical") * Time.deltaTime * 4f);
+	}
+
+	private void OnGUI()
+	{
+		GUI.Label(new Rect(50f, 50f, 200f, 20f), "Press arrow key to move");
+		Animation componentInChildren = this.m_Player.GetComponentInChildren<Animation>();
+		componentInChildren.enabled = GUI.Toggle(new Rect(50f, 70f, 200f, 20f), componentInChildren.enabled, "Play Animation");
+		DynamicBone[] components = this.m_Player.GetComponents<DynamicBone>();
+		GUI.Label(new Rect(50f, 100f, 200f, 20f), "Choose dynamic bone:");
+		Behaviour behaviour = components[0];
+		bool enabled = GUI.Toggle(new Rect(50f, 120f, 100f, 20f), components[0].enabled, "Breasts");
+		components[1].enabled = enabled;
+		behaviour.enabled = enabled;
+		components[2].enabled = GUI.Toggle(new Rect(50f, 140f, 100f, 20f), components[2].enabled, "Tail");
+	}
+
+	public GameObject m_Player;
+}

+ 225 - 0
Assembly-CSharp/DynamicBoneMuneCollider.cs

@@ -0,0 +1,225 @@
+using System;
+using System.IO;
+using UnityEngine;
+
+[AddComponentMenu("Dynamic Bone/Dynamic Bone Mune Collider")]
+public class DynamicBoneMuneCollider : DynamicBoneColliderBase
+{
+	public override string TypeName
+	{
+		get
+		{
+			return "dbm";
+		}
+	}
+
+	public override void Serialize(BinaryWriter f_bw, int f_nVersion)
+	{
+		base.Serialize(f_bw, f_nVersion);
+		f_bw.Write(this.m_Radius);
+		f_bw.Write(this.m_Height);
+		f_bw.Write(this.m_fScaleRateMulMax);
+		f_bw.Write(this.m_CenterRateMax.x);
+		f_bw.Write(this.m_CenterRateMax.y);
+		f_bw.Write(this.m_CenterRateMax.z);
+	}
+
+	public override void Deserialize(BinaryReader f_br, int f_nVersion, Transform f_trBodyBoneRoot)
+	{
+		base.Deserialize(f_br, f_nVersion, f_trBodyBoneRoot);
+		this.m_Radius = f_br.ReadSingle();
+		this.m_Height = f_br.ReadSingle();
+		this.m_fScaleRateMulMax = f_br.ReadSingle();
+		this.m_CenterRateMax.Set(f_br.ReadSingle(), f_br.ReadSingle(), f_br.ReadSingle());
+	}
+
+	private void OnValidate()
+	{
+		this.m_Radius = Mathf.Max(this.m_Radius, 0f);
+		this.m_Height = Mathf.Max(this.m_Height, 0f);
+	}
+
+	public override bool Collide(ref Vector3 particlePosition, float particleRadius)
+	{
+		float num = 0f;
+		if (this.m_maid != null)
+		{
+			num = this.m_maid.body0.jbMuneL.BlendValue / 1.3f;
+		}
+		float num2 = 1f + this.m_fScaleRateMulMax * num;
+		Vector3 vector = Vector3.Lerp(this.m_Center, this.m_CenterRateMax, num);
+		float num3 = this.m_Radius * Mathf.Abs(base.transform.lossyScale.x * num2);
+		float num4 = this.m_Height * 0.5f - this.m_Radius;
+		if (num4 <= 0f)
+		{
+			if (this.m_Bound == DynamicBoneColliderBase.Bound.Outside)
+			{
+				DynamicBoneMuneCollider.OutsideSphere(ref particlePosition, particleRadius, base.transform.TransformPoint(vector), num3);
+			}
+			else
+			{
+				DynamicBoneMuneCollider.InsideSphere(ref particlePosition, particleRadius, base.transform.TransformPoint(vector), num3);
+			}
+		}
+		else
+		{
+			Vector3 position = vector;
+			Vector3 position2 = vector;
+			DynamicBoneColliderBase.Direction direction = this.m_Direction;
+			if (direction != DynamicBoneColliderBase.Direction.X)
+			{
+				if (direction != DynamicBoneColliderBase.Direction.Y)
+				{
+					if (direction == DynamicBoneColliderBase.Direction.Z)
+					{
+						position.z -= num4;
+						position2.z += num4;
+					}
+				}
+				else
+				{
+					position.y -= num4;
+					position2.y += num4;
+				}
+			}
+			else
+			{
+				position.x -= num4;
+				position2.x += num4;
+			}
+			if (this.m_Bound == DynamicBoneColliderBase.Bound.Outside)
+			{
+				DynamicBoneMuneCollider.OutsideCapsule(ref particlePosition, particleRadius, base.transform.TransformPoint(position), base.transform.TransformPoint(position2), num3);
+			}
+			else
+			{
+				DynamicBoneMuneCollider.InsideCapsule(ref particlePosition, particleRadius, base.transform.TransformPoint(position), base.transform.TransformPoint(position2), num3);
+			}
+		}
+		return false;
+	}
+
+	private static void OutsideSphere(ref Vector3 particlePosition, float particleRadius, Vector3 sphereCenter, float sphereRadius)
+	{
+		float num = sphereRadius + particleRadius;
+		float num2 = num * num;
+		Vector3 a = particlePosition - sphereCenter;
+		float sqrMagnitude = a.sqrMagnitude;
+		if (sqrMagnitude > 0f && sqrMagnitude < num2)
+		{
+			float num3 = Mathf.Sqrt(sqrMagnitude);
+			particlePosition = sphereCenter + a * (num / num3);
+		}
+	}
+
+	private static void InsideSphere(ref Vector3 particlePosition, float particleRadius, Vector3 sphereCenter, float sphereRadius)
+	{
+		float num = sphereRadius - particleRadius;
+		float num2 = num * num;
+		Vector3 a = particlePosition - sphereCenter;
+		float sqrMagnitude = a.sqrMagnitude;
+		if (sqrMagnitude > num2)
+		{
+			float num3 = Mathf.Sqrt(sqrMagnitude);
+			particlePosition = sphereCenter + a * (num / num3);
+		}
+	}
+
+	private static void OutsideCapsule(ref Vector3 particlePosition, float particleRadius, Vector3 capsuleP0, Vector3 capsuleP1, float capsuleRadius)
+	{
+		float num = capsuleRadius + particleRadius;
+		float num2 = num * num;
+		Vector3 vector = capsuleP1 - capsuleP0;
+		Vector3 vector2 = particlePosition - capsuleP0;
+		float num3 = Vector3.Dot(vector2, vector);
+		if (num3 <= 0f)
+		{
+			float sqrMagnitude = vector2.sqrMagnitude;
+			if (sqrMagnitude > 0f && sqrMagnitude < num2)
+			{
+				float num4 = Mathf.Sqrt(sqrMagnitude);
+				particlePosition = capsuleP0 + vector2 * (num / num4);
+			}
+		}
+		else
+		{
+			float sqrMagnitude2 = vector.sqrMagnitude;
+			if (num3 >= sqrMagnitude2)
+			{
+				vector2 = particlePosition - capsuleP1;
+				float sqrMagnitude3 = vector2.sqrMagnitude;
+				if (sqrMagnitude3 > 0f && sqrMagnitude3 < num2)
+				{
+					float num5 = Mathf.Sqrt(sqrMagnitude3);
+					particlePosition = capsuleP1 + vector2 * (num / num5);
+				}
+			}
+			else if (sqrMagnitude2 > 0f)
+			{
+				num3 /= sqrMagnitude2;
+				vector2 -= vector * num3;
+				float sqrMagnitude4 = vector2.sqrMagnitude;
+				if (sqrMagnitude4 > 0f && sqrMagnitude4 < num2)
+				{
+					float num6 = Mathf.Sqrt(sqrMagnitude4);
+					particlePosition += vector2 * ((num - num6) / num6);
+				}
+			}
+		}
+	}
+
+	private static void InsideCapsule(ref Vector3 particlePosition, float particleRadius, Vector3 capsuleP0, Vector3 capsuleP1, float capsuleRadius)
+	{
+		float num = capsuleRadius - particleRadius;
+		float num2 = num * num;
+		Vector3 vector = capsuleP1 - capsuleP0;
+		Vector3 vector2 = particlePosition - capsuleP0;
+		float num3 = Vector3.Dot(vector2, vector);
+		if (num3 <= 0f)
+		{
+			float sqrMagnitude = vector2.sqrMagnitude;
+			if (sqrMagnitude > num2)
+			{
+				float num4 = Mathf.Sqrt(sqrMagnitude);
+				particlePosition = capsuleP0 + vector2 * (num / num4);
+			}
+		}
+		else
+		{
+			float sqrMagnitude2 = vector.sqrMagnitude;
+			if (num3 >= sqrMagnitude2)
+			{
+				vector2 = particlePosition - capsuleP1;
+				float sqrMagnitude3 = vector2.sqrMagnitude;
+				if (sqrMagnitude3 > num2)
+				{
+					float num5 = Mathf.Sqrt(sqrMagnitude3);
+					particlePosition = capsuleP1 + vector2 * (num / num5);
+				}
+			}
+			else if (sqrMagnitude2 > 0f)
+			{
+				num3 /= sqrMagnitude2;
+				vector2 -= vector * num3;
+				float sqrMagnitude4 = vector2.sqrMagnitude;
+				if (sqrMagnitude4 > num2)
+				{
+					float num6 = Mathf.Sqrt(sqrMagnitude4);
+					particlePosition += vector2 * ((num - num6) / num6);
+				}
+			}
+		}
+	}
+
+	[Tooltip("The radius of the sphere or capsule.")]
+	public float m_Radius = 0.5f;
+
+	[Tooltip("The height of the capsule.")]
+	public float m_Height;
+
+	public float m_fScaleRateMulMax = 1f;
+
+	public Vector3 m_CenterRateMax = Vector3.zero;
+
+	public Maid m_maid;
+}

+ 70 - 0
Assembly-CSharp/DynamicBonePlaneCollider.cs

@@ -0,0 +1,70 @@
+using System;
+using System.IO;
+using UnityEngine;
+
+[AddComponentMenu("Dynamic Bone/Dynamic Bone Plane Collider")]
+public class DynamicBonePlaneCollider : DynamicBoneColliderBase
+{
+	public override string TypeName
+	{
+		get
+		{
+			return "dpc";
+		}
+	}
+
+	public override void Serialize(BinaryWriter f_bw, int f_nVersion)
+	{
+		base.Serialize(f_bw, f_nVersion);
+	}
+
+	public override void Deserialize(BinaryReader f_br, int f_nVersion, Transform f_trBodyBoneRoot)
+	{
+		base.Deserialize(f_br, f_nVersion, f_trBodyBoneRoot);
+	}
+
+	private void OnValidate()
+	{
+	}
+
+	public override bool Collide(ref Vector3 particlePosition, float particleRadius)
+	{
+		Vector3 vector = Vector3.up;
+		DynamicBoneColliderBase.Direction direction = this.m_Direction;
+		if (direction != DynamicBoneColliderBase.Direction.X)
+		{
+			if (direction != DynamicBoneColliderBase.Direction.Y)
+			{
+				if (direction == DynamicBoneColliderBase.Direction.Z)
+				{
+					vector = base.transform.forward;
+				}
+			}
+			else
+			{
+				vector = base.transform.up;
+			}
+		}
+		else
+		{
+			vector = base.transform.right;
+		}
+		Vector3 inPoint = base.transform.TransformPoint(this.m_Center);
+		Plane plane = new Plane(vector, inPoint);
+		float distanceToPoint = plane.GetDistanceToPoint(particlePosition);
+		if (this.m_Bound == DynamicBoneColliderBase.Bound.Outside)
+		{
+			if (distanceToPoint < 0f)
+			{
+				particlePosition -= vector * distanceToPoint;
+				return true;
+			}
+		}
+		else if (distanceToPoint > 0f)
+		{
+			particlePosition -= vector * distanceToPoint;
+			return true;
+		}
+		return false;
+	}
+}

File diff suppressed because it is too large
+ 1304 - 0
Assembly-CSharp/DynamicSkirtBone.cs


+ 717 - 0
Assembly-CSharp/Edit/MaidProfile.cs

@@ -0,0 +1,717 @@
+using System;
+using System.Collections.Generic;
+using MaidStatus;
+
+namespace Edit
+{
+	public static class MaidProfile
+	{
+		public static string Create(Maid maid, bool employment)
+		{
+			Status status_ = maid.status;
+			string profileText = string.Empty;
+			Func<MaidProfile.CsvDataBlock, int, int, bool> success_call_back = delegate(MaidProfile.CsvDataBlock block, int x, int y)
+			{
+				profileText += block.csv.GetCellAsString(block.GetOriginalX(block.max_x - 1), block.GetOriginalY(y));
+				return true;
+			};
+			string text = "profile_comment_1.nei";
+			profileText = string.Empty;
+			using (AFileBase afileBase = GameUty.FileSystem.FileOpen(text))
+			{
+				NDebug.Assert(afileBase.IsValid(), "file open failed.\n" + text);
+				using (CsvParser csvParser = new CsvParser())
+				{
+					if (!csvParser.Open(afileBase))
+					{
+						NDebug.Assert("csv open failed.\n" + text, false);
+					}
+					MaidProfile.CsvDataBlock csvDataBlock = new MaidProfile.CsvDataBlock(csvParser, 0);
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						if (!cur_block.csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+						{
+							return true;
+						}
+						string cellAsString2 = cur_block.csv.GetCellAsString(cur_block.GetOriginalX(1), line_y);
+						string cellAsString3 = cur_block.csv.GetCellAsString(cur_block.GetOriginalX(2), line_y);
+						return !status_.partsDic.ContainsKey(cellAsString2) || status_.partsDic[cellAsString2] == cellAsString3;
+					};
+					csvDataBlock.BlockAnalysis(1, line_func, success_call_back);
+					csvDataBlock.NextBlock();
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func2 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						if (!cur_block.csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+						{
+							return true;
+						}
+						string cellAsString2 = cur_block.csv.GetCellAsString(cur_block.GetOriginalX(1), line_y);
+						return status_.features.ContainsKey(Feature.GetData(cellAsString2).id);
+					};
+					csvDataBlock.BlockAnalysis(1, line_func2, success_call_back);
+					csvDataBlock.NextBlock();
+					csvDataBlock.BlockAnalysis(1, line_func, success_call_back);
+				}
+			}
+			text = "profile_comment_2.nei";
+			using (AFileBase afileBase2 = GameUty.FileSystem.FileOpen(text))
+			{
+				NDebug.Assert(afileBase2.IsValid(), "file open failed.\n" + text);
+				using (CsvParser csv = new CsvParser())
+				{
+					if (!csv.Open(afileBase2))
+					{
+						NDebug.Assert("csv open failed.\n" + text, false);
+					}
+					MaidProfile.CsvDataBlock csvDataBlock2 = new MaidProfile.CsvDataBlock(csv, 0);
+					string cellAsString = csv.GetCellAsString(csvDataBlock2.GetOriginalX(csvDataBlock2.max_x - 1), csvDataBlock2.GetOriginalY(csvDataBlock2.max_y - 1));
+					profileText += cellAsString.Replace("[n]", string.Empty + status_.body.bust);
+					csvDataBlock2.NextBlock();
+					cellAsString = csv.GetCellAsString(csvDataBlock2.GetOriginalX(csvDataBlock2.max_x - 1), csvDataBlock2.GetOriginalY(csvDataBlock2.max_y - 1));
+					profileText += cellAsString.Replace("[n]", string.Empty + status_.body.waist);
+					csvDataBlock2.NextBlock();
+					cellAsString = csv.GetCellAsString(csvDataBlock2.GetOriginalX(csvDataBlock2.max_x - 1), csvDataBlock2.GetOriginalY(csvDataBlock2.max_y - 1));
+					profileText += cellAsString.Replace("[n]", string.Empty + status_.body.hip);
+					csvDataBlock2.NextBlock();
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func3 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						string cellAsString2 = csv.GetCellAsString(cur_block.GetOriginalX(1), line_y);
+						if (cellAsString2.IndexOf(status_.body.cup) == -1)
+						{
+							return false;
+						}
+						bool flag = csv.GetCellAsString(cur_block.GetOriginalX(2), line_y) == "○";
+						return !flag || (maid.Parts != null && 50 <= maid.GetProp(MPN.MuneTare).value);
+					};
+					csvDataBlock2.BlockAnalysis(1, line_func3, success_call_back);
+					csvDataBlock2.NextBlock();
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func4 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						int cellAsInteger = csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+						if (cellAsInteger <= status_.body.waist)
+						{
+							return false;
+						}
+						int num = int.MinValue;
+						if (csv.IsCellToExistData(cur_block.GetOriginalX(2), line_y))
+						{
+							num = csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
+						}
+						int num2 = int.MaxValue;
+						if (csv.IsCellToExistData(cur_block.GetOriginalX(3), line_y))
+						{
+							num2 = csv.GetCellAsInteger(cur_block.GetOriginalX(3), line_y);
+						}
+						return num <= status_.body.hip && status_.body.hip <= num2;
+					};
+					csvDataBlock2.BlockAnalysis(1, line_func4, success_call_back);
+					csvDataBlock2.NextBlock();
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func5 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						int cellAsInteger = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+						if (status_.personal.id != Personal.GetData(cellAsInteger).id)
+						{
+							return false;
+						}
+						if (!cur_block.csv.IsCellToExistData(cur_block.GetOriginalX(2), line_y))
+						{
+							return true;
+						}
+						string cellAsString2 = cur_block.csv.GetCellAsString(cur_block.GetOriginalX(2), line_y);
+						return status_.features.ContainsKey(Feature.GetData(cellAsString2).id);
+					};
+					csvDataBlock2.BlockAnalysis(1, line_func5, success_call_back);
+					csvDataBlock2.NextBlock();
+					csvDataBlock2.BlockAnalysis(1, line_func5, success_call_back);
+				}
+			}
+			text = "profile_comment_3.nei";
+			using (AFileBase afileBase3 = GameUty.FileSystem.FileOpen(text))
+			{
+				NDebug.Assert(afileBase3.IsValid(), "file open failed.\n" + text);
+				using (CsvParser csv = new CsvParser())
+				{
+					if (!csv.Open(afileBase3))
+					{
+						NDebug.Assert("csv open failed.\n" + text, false);
+					}
+					MaidProfile.CsvDataBlock csvDataBlock3 = new MaidProfile.CsvDataBlock(csv, 0);
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func6 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						int num = int.MinValue;
+						if (csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+						{
+							num = csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+						}
+						int num2 = int.MaxValue;
+						if (csv.IsCellToExistData(cur_block.GetOriginalX(2), line_y))
+						{
+							num2 = csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
+						}
+						if (num > status_.body.bust || status_.body.bust > num2)
+						{
+							return false;
+						}
+						num = int.MinValue;
+						if (csv.IsCellToExistData(cur_block.GetOriginalX(3), line_y))
+						{
+							num = csv.GetCellAsInteger(cur_block.GetOriginalX(3), line_y);
+						}
+						num2 = int.MaxValue;
+						if (csv.IsCellToExistData(cur_block.GetOriginalX(4), line_y))
+						{
+							num2 = csv.GetCellAsInteger(cur_block.GetOriginalX(4), line_y);
+						}
+						if (num > status_.body.waist || status_.body.waist > num2)
+						{
+							return false;
+						}
+						num = int.MinValue;
+						if (csv.IsCellToExistData(cur_block.GetOriginalX(5), line_y))
+						{
+							num = csv.GetCellAsInteger(cur_block.GetOriginalX(5), line_y);
+						}
+						num2 = int.MaxValue;
+						if (csv.IsCellToExistData(cur_block.GetOriginalX(6), line_y))
+						{
+							num2 = csv.GetCellAsInteger(cur_block.GetOriginalX(6), line_y);
+						}
+						return num <= status_.body.hip && status_.body.hip <= num2;
+					};
+					csvDataBlock3.BlockAnalysis(1, line_func6, success_call_back);
+					csvDataBlock3.NextBlock();
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func7 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						int cellAsInteger = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+						return status_.personal.id == Personal.GetData(cellAsInteger).id;
+					};
+					csvDataBlock3.BlockAnalysis(1, line_func7, success_call_back);
+					csvDataBlock3.NextBlock();
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func8 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						JobClass.Data data = JobClass.GetData(cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y));
+						return data.id == status_.selectedJobClass.data.id;
+					};
+					csvDataBlock3.BlockAnalysis(1, line_func8, success_call_back);
+				}
+			}
+			text = "profile_comment_4.nei";
+			using (AFileBase afileBase4 = GameUty.FileSystem.FileOpen(text))
+			{
+				NDebug.Assert(afileBase4.IsValid(), "file open failed.\n" + text);
+				using (CsvParser csv = new CsvParser())
+				{
+					if (!csv.Open(afileBase4))
+					{
+						NDebug.Assert("csv open failed.\n" + text, false);
+					}
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func9 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						int num = 1;
+						if (csv.IsCellToExistData(cur_block.GetOriginalX(num++), line_y))
+						{
+							YotogiClass.Data data = YotogiClass.GetData(cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(num - 1), line_y));
+							if (data.id != status_.selectedJobClass.data.id)
+							{
+								return false;
+							}
+						}
+						int[] array = new int[]
+						{
+							status_.sexPlayNumberOfPeople,
+							status_.inyoku,
+							status_.lovely,
+							status_.mvalue,
+							status_.elegance,
+							status_.hentai,
+							status_.charm,
+							status_.housi
+						};
+						foreach (int num2 in array)
+						{
+							if (csv.IsCellToExistData(cur_block.GetOriginalX(num++), line_y))
+							{
+								int cellAsInteger = csv.GetCellAsInteger(cur_block.GetOriginalX(num - 1), line_y);
+								if (cellAsInteger > num2)
+								{
+									return false;
+								}
+							}
+						}
+						return true;
+					};
+					MaidProfile.CsvDataBlock csvDataBlock4 = new MaidProfile.CsvDataBlock(csv, 0);
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func10 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						Personal.Data data = Personal.GetData(cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y));
+						return status_.personal.id == data.id;
+					};
+					csvDataBlock4.BlockAnalysis(1, line_func10, success_call_back);
+					csvDataBlock4.NextBlock();
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func11 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						Contract cellAsInteger = (Contract)cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+						return status_.contract == cellAsInteger;
+					};
+					csvDataBlock4.BlockAnalysis(1, line_func11, success_call_back);
+					csvDataBlock4.NextBlock();
+					if (!employment && status_.seikeiken == Seikeiken.No_No)
+					{
+						Func<MaidProfile.CsvDataBlock, int, bool> line_func12 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+						{
+							int num = int.MinValue;
+							if (csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+							{
+								num = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+							}
+							bool flag = num <= status_.inyoku;
+							if (flag)
+							{
+								status_.studyRate = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
+							}
+							return flag;
+						};
+						csvDataBlock4.BlockAnalysis(1, line_func12, success_call_back);
+					}
+					csvDataBlock4.NextBlock();
+					if (employment && status_.seikeiken == Seikeiken.No_No)
+					{
+						csvDataBlock4.BlockAnalysis(1, line_func9, success_call_back);
+					}
+					csvDataBlock4.NextBlock();
+					if (!employment && status_.seikeiken == Seikeiken.Yes_No)
+					{
+						Func<MaidProfile.CsvDataBlock, int, bool> line_func13 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+						{
+							int num = int.MinValue;
+							if (csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+							{
+								num = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+							}
+							bool flag = num <= status_.sexPlayNumberOfPeople;
+							if (flag)
+							{
+								status_.studyRate = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
+							}
+							return flag;
+						};
+						csvDataBlock4.BlockAnalysis(1, line_func13, success_call_back);
+					}
+					csvDataBlock4.NextBlock();
+					if (employment && status_.seikeiken == Seikeiken.Yes_No)
+					{
+						csvDataBlock4.BlockAnalysis(1, line_func9, success_call_back);
+					}
+					csvDataBlock4.NextBlock();
+					if (!employment && status_.seikeiken == Seikeiken.No_Yes)
+					{
+						Func<MaidProfile.CsvDataBlock, int, bool> line_func14 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+						{
+							int num = int.MinValue;
+							if (csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+							{
+								num = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+							}
+							bool flag = num <= status_.sexPlayNumberOfPeople;
+							if (flag)
+							{
+								status_.studyRate = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
+							}
+							return flag;
+						};
+						csvDataBlock4.BlockAnalysis(1, line_func14, success_call_back);
+					}
+					csvDataBlock4.NextBlock();
+					if (employment && status_.seikeiken == Seikeiken.No_Yes)
+					{
+						csvDataBlock4.BlockAnalysis(1, line_func9, success_call_back);
+					}
+					csvDataBlock4.NextBlock();
+					if (!employment && status_.seikeiken == Seikeiken.Yes_Yes)
+					{
+						Func<MaidProfile.CsvDataBlock, int, bool> line_func15 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+						{
+							int num = int.MinValue;
+							if (csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+							{
+								num = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+							}
+							bool flag = num <= status_.sexPlayNumberOfPeople;
+							if (flag)
+							{
+								status_.studyRate = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
+							}
+							return flag;
+						};
+						csvDataBlock4.BlockAnalysis(1, line_func15, success_call_back);
+					}
+					csvDataBlock4.NextBlock();
+					if (employment && status_.seikeiken == Seikeiken.Yes_Yes)
+					{
+						csvDataBlock4.BlockAnalysis(1, line_func9, success_call_back);
+					}
+				}
+			}
+			text = "profile_comment_5.nei";
+			using (AFileBase afileBase5 = GameUty.FileSystem.FileOpen(text))
+			{
+				NDebug.Assert(afileBase5.IsValid(), "file open failed.\n" + text);
+				using (CsvParser csv = new CsvParser())
+				{
+					if (!csv.Open(afileBase5))
+					{
+						NDebug.Assert("csv open failed.\n" + text, false);
+					}
+					int comment_no = 0;
+					MaidProfile.CsvDataBlock csvDataBlock5 = new MaidProfile.CsvDataBlock(csv, 0);
+					Func<MaidProfile.CsvDataBlock, int, int, bool> success_call_back2 = delegate(MaidProfile.CsvDataBlock succes_block, int x, int y)
+					{
+						profileText += succes_block.csv.GetCellAsString(succes_block.GetOriginalX(succes_block.max_x - 3 + comment_no), succes_block.GetOriginalY(y));
+						return true;
+					};
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func16 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						string cellAsString2 = cur_block.csv.GetCellAsString(cur_block.GetOriginalX(1), line_y);
+						int id = Propensity.GetData(cellAsString2).id;
+						if (!status_.propensitys.ContainsKey(id))
+						{
+							return false;
+						}
+						string cellAsString3 = cur_block.csv.GetCellAsString(cur_block.GetOriginalX(2), line_y);
+						if (cellAsString3 != null)
+						{
+							if (!(cellAsString3 == "処女"))
+							{
+								if (!(cellAsString3 == "前穴"))
+								{
+									if (!(cellAsString3 == "後穴"))
+									{
+										if (cellAsString3 == "両穴")
+										{
+											if (status_.seikeiken != Seikeiken.Yes_Yes)
+											{
+												return false;
+											}
+										}
+									}
+									else if (status_.seikeiken != Seikeiken.No_Yes)
+									{
+										return false;
+									}
+								}
+								else if (status_.seikeiken != Seikeiken.Yes_No)
+								{
+									return false;
+								}
+							}
+							else if (status_.seikeiken != Seikeiken.No_No)
+							{
+								return false;
+							}
+						}
+						int[] array = new int[]
+						{
+							status_.inyoku,
+							status_.mvalue,
+							status_.hentai,
+							status_.housi
+						};
+						int num = 3;
+						foreach (int num2 in array)
+						{
+							if (csv.IsCellToExistData(cur_block.GetOriginalX(num++), line_y))
+							{
+								int cellAsInteger = csv.GetCellAsInteger(cur_block.GetOriginalX(num - 1), line_y);
+								if (cellAsInteger > num2)
+								{
+									return false;
+								}
+							}
+						}
+						comment_no = 0;
+						int cellAsInteger2 = csv.GetCellAsInteger(cur_block.GetOriginalX(num++), line_y);
+						if (0 < cellAsInteger2)
+						{
+							if (cellAsInteger2 > status_.lovely && cellAsInteger2 > status_.elegance && cellAsInteger2 > status_.charm)
+							{
+								return false;
+							}
+							SortedList<int, string> sortedList = new SortedList<int, string>();
+							sortedList.Add(status_.lovely, "可憐");
+							if (!sortedList.ContainsKey(status_.elegance))
+							{
+								sortedList.Add(status_.elegance, "気品");
+							}
+							if (!sortedList.ContainsKey(status_.charm))
+							{
+								sortedList.Add(status_.charm, "魅惑");
+							}
+							int num3 = sortedList.Count - 1;
+							int num4 = 0;
+							foreach (KeyValuePair<int, string> keyValuePair in sortedList)
+							{
+								if (num3 == num4)
+								{
+									string value = keyValuePair.Value;
+									if (value != null)
+									{
+										if (!(value == "気品"))
+										{
+											if (value == "魅惑")
+											{
+												comment_no = 2;
+											}
+										}
+										else
+										{
+											comment_no = 1;
+										}
+									}
+									break;
+								}
+								num4++;
+							}
+						}
+						return true;
+					};
+					csvDataBlock5.BlockAnalysis(1, line_func16, success_call_back2);
+				}
+			}
+			text = "profile_comment_6.nei";
+			using (AFileBase afileBase6 = GameUty.FileSystem.FileOpen(text))
+			{
+				NDebug.Assert(afileBase6.IsValid(), "file open failed.\n" + text);
+				using (CsvParser csvParser2 = new CsvParser())
+				{
+					if (!csvParser2.Open(afileBase6))
+					{
+						NDebug.Assert("csv open failed.\n" + text, false);
+					}
+					MaidProfile.CsvDataBlock csvDataBlock6 = new MaidProfile.CsvDataBlock(csvParser2, 0);
+					csvDataBlock6.NextBlock();
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func17 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						if (!cur_block.csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+						{
+							return true;
+						}
+						string cellAsString2 = cur_block.csv.GetCellAsString(cur_block.GetOriginalX(1), line_y);
+						Feature.Data data = Feature.GetData(cellAsString2);
+						return status_.features.ContainsKey(data.id);
+					};
+					csvDataBlock6.BlockAnalysis(1, line_func17, success_call_back);
+				}
+			}
+			text = "profile_comment_7.nei";
+			using (AFileBase afileBase7 = GameUty.FileSystem.FileOpen(text))
+			{
+				NDebug.Assert(afileBase7.IsValid(), "file open failed.\n" + text);
+				using (CsvParser csvParser3 = new CsvParser())
+				{
+					if (!csvParser3.Open(afileBase7))
+					{
+						NDebug.Assert("csv open failed.\n" + text, false);
+					}
+					MaidProfile.CsvDataBlock csvDataBlock7 = new MaidProfile.CsvDataBlock(csvParser3, 0);
+					csvDataBlock7.NextBlock();
+					Func<MaidProfile.CsvDataBlock, int, bool> line_func18 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					{
+						if (!cur_block.csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+						{
+							return true;
+						}
+						string cellAsString2 = cur_block.csv.GetCellAsString(cur_block.GetOriginalX(1), line_y);
+						Feature.Data data = Feature.GetData(cellAsString2);
+						return status_.features.ContainsKey(data.id);
+					};
+					csvDataBlock7.BlockAnalysis(1, line_func18, success_call_back);
+					csvDataBlock7.NextBlock();
+					csvDataBlock7.BlockAnalysis(1, line_func18, success_call_back);
+					csvDataBlock7.NextBlock();
+					csvDataBlock7.BlockAnalysis(1, line_func18, success_call_back);
+				}
+			}
+			return profileText;
+		}
+
+		public static int UpdateInitPlayNumber(Maid maid)
+		{
+			Status status = maid.status;
+			int result = 0;
+			if (status.initSeikeiken != Seikeiken.No_No)
+			{
+				using (AFileBase afileBase = GameUty.FileSystem.FileOpen("init_keiken_num_setting.nei"))
+				{
+					int size = afileBase.GetSize();
+					NDebug.Assert(afileBase.IsValid(), "file open failed.\ninit_keiken_num_setting.nei");
+					using (CsvParser csvParser = new CsvParser())
+					{
+						if (!csvParser.Open(afileBase))
+						{
+							NDebug.Assert("csv open failed.\ninit_keiken_num_setting.nei", false);
+						}
+						for (int i = 2; i < csvParser.max_cell_y; i++)
+						{
+							if (!csvParser.IsCellToExistData(0, i))
+							{
+								break;
+							}
+							int num = 0;
+							string cellAsString = csvParser.GetCellAsString(num++, i);
+							Seikeiken seikeiken = Seikeiken.Yes_No;
+							if (cellAsString == "前穴")
+							{
+								seikeiken = Seikeiken.Yes_No;
+							}
+							else if (cellAsString == "後穴")
+							{
+								seikeiken = Seikeiken.No_Yes;
+							}
+							else if (cellAsString == "両穴")
+							{
+								seikeiken = Seikeiken.Yes_Yes;
+							}
+							if (seikeiken == status.initSeikeiken)
+							{
+								int cellAsInteger = csvParser.GetCellAsInteger(num++, i);
+								int cellAsInteger2 = csvParser.GetCellAsInteger(num++, i);
+								int cellAsInteger3 = csvParser.GetCellAsInteger(num++, i);
+								if (cellAsInteger2 <= status.inyoku && cellAsInteger3 <= status.hentai)
+								{
+									result = cellAsInteger;
+									break;
+								}
+							}
+						}
+					}
+				}
+			}
+			return result;
+		}
+
+		private const string FileNameProfileComment = "profile_comment";
+
+		private class DataBlock
+		{
+			public int GetOriginalX(int x)
+			{
+				return this.rect.left + x;
+			}
+
+			public int GetOriginalY(int y)
+			{
+				return this.rect.top + y;
+			}
+
+			public int max_x
+			{
+				get
+				{
+					return this.rect.right - this.rect.left + 1;
+				}
+			}
+
+			public int max_y
+			{
+				get
+				{
+					return this.rect.bottom - this.rect.top + 1;
+				}
+			}
+
+			public PlaneRect<int> rect;
+		}
+
+		private class CsvDataBlock : MaidProfile.DataBlock
+		{
+			public CsvDataBlock(CsvParser check_csv, int check_start_y)
+			{
+				this.csv_ = check_csv;
+				this.NextBlock(check_start_y);
+			}
+
+			public bool NextBlock(int check_start_y)
+			{
+				this.rect.left = 0;
+				this.rect.bottom = this.csv_.max_cell_y - 1;
+				for (int i = check_start_y; i < this.csv_.max_cell_y; i++)
+				{
+					if (this.csv_.IsCellToExistData(0, i))
+					{
+						this.rect.top = i;
+						int j;
+						for (j = 0; j < this.csv_.max_cell_x; j++)
+						{
+							if (!this.csv_.IsCellToExistData(j, i))
+							{
+								break;
+							}
+						}
+						j--;
+						this.rect.right = j;
+						break;
+					}
+				}
+				if (this.rect.right <= 0)
+				{
+					this.rect.left = (this.rect.right = (this.rect.top = (this.rect.bottom = 0)));
+					return false;
+				}
+				for (int k = this.rect.top; k < this.csv_.max_cell_y; k++)
+				{
+					bool flag = false;
+					for (int l = 0; l <= this.rect.right; l++)
+					{
+						if (this.csv_.IsCellToExistData(l, k))
+						{
+							flag = true;
+							break;
+						}
+					}
+					if (!flag)
+					{
+						this.rect.bottom = k - 1;
+						break;
+					}
+				}
+				for (int m = this.rect.left; m < this.csv_.max_cell_x; m++)
+				{
+					for (int n = this.rect.top; n <= this.rect.bottom; n++)
+					{
+						if (this.csv_.IsCellToExistData(m, n) && this.rect.right < m - 1)
+						{
+							this.rect.right = m - 1;
+						}
+					}
+				}
+				return true;
+			}
+
+			public void BlockAnalysis(int start_y, Func<MaidProfile.CsvDataBlock, int, bool> line_func, Func<MaidProfile.CsvDataBlock, int, int, bool> success_call_back)
+			{
+				for (int i = start_y; i < base.max_y; i++)
+				{
+					if (line_func(this, base.GetOriginalY(i)) && success_call_back(this, this.rect.left, i))
+					{
+						return;
+					}
+				}
+			}
+
+			public bool NextBlock()
+			{
+				return this.NextBlock(base.GetOriginalY(base.max_y));
+			}
+
+			public CsvParser csv
+			{
+				get
+				{
+					return this.csv_;
+				}
+			}
+
+			private CsvParser csv_;
+		}
+	}
+}

+ 358 - 0
Assembly-CSharp/EditMod.cs

@@ -0,0 +1,358 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using UnityEngine;
+
+public class EditMod : MonoBehaviour
+{
+	private void Awake()
+	{
+	}
+
+	private void OnGUI()
+	{
+		if (this.m_eModMode == EditMod.MOD_MODE.MOD_TEX)
+		{
+			GUI.TextField(new Rect(10f, 10f, 100f, 20f), this.m_mpn.ToString(), 255);
+			if (GUI.Button(new Rect(120f, 10f, 100f, 20f), "ExportBase"))
+			{
+				this.ModExportBase();
+			}
+			this.strModPath = GUI.TextField(new Rect(240f, 10f, 400f, 20f), this.strModPath, 255);
+			if (GUI.Button(new Rect(650f, 10f, 100f, 20f), "Compile"))
+			{
+				this.ModCompileDir(this.strModPath);
+			}
+		}
+		else if (this.m_eModMode == EditMod.MOD_MODE.MOD_MQO)
+		{
+			this.strModPath = GUI.TextField(new Rect(390f, 10f, 400f, 20f), this.strModPath, 255);
+			if (GUI.Button(new Rect(800f, 10f, 100f, 20f), "Compile"))
+			{
+				this.ModCompileDirMqo(this.strModPath);
+			}
+		}
+	}
+
+	private void ModExportBase()
+	{
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		maid.ExportModBaseMenu(this.m_mpn);
+	}
+
+	private void ModExportMqo(string f_strOutFileName)
+	{
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		maid.ExportModBaseMqo(this.m_mpn, f_strOutFileName);
+		NDebug.MessageBox("MOD Export Complete", "MODの元ファイルを出力しました。");
+	}
+
+	private void ModCompileDir(string f_strModPath)
+	{
+		if (!Directory.Exists(f_strModPath))
+		{
+			NUty.WinMessageBox(NUty.GetWindowHandle(), "コンパイル対象のパスが見つかりません。", "MOD Compile Error", 0);
+			return;
+		}
+		string[] files = Directory.GetFiles(f_strModPath, "mod_*.txt", SearchOption.TopDirectoryOnly);
+		foreach (string f_strModMenu in files)
+		{
+			this.ModCompileMenu(f_strModMenu);
+		}
+	}
+
+	private void ModCompileDirMqo(string f_strModPath)
+	{
+		if (!Directory.Exists(f_strModPath))
+		{
+			NUty.WinMessageBox(NUty.GetWindowHandle(), "コンパイル対象のパスが見つかりません。", "MQO Compile Error", 0);
+			return;
+		}
+		string[] files = Directory.GetFiles(f_strModPath, "*.*", SearchOption.TopDirectoryOnly);
+		foreach (string text in files)
+		{
+			if (text.Contains(".menu.txt"))
+			{
+				ModCompile.CompileMenuScript(text);
+			}
+			else if (text.Contains(".mqo"))
+			{
+				ModCompile.ConvMqoToModel(text);
+			}
+			else if (text.Contains(".png"))
+			{
+				ModCompile.ExportTexture(text);
+			}
+			else if (text.Contains(".mate.txt"))
+			{
+				ModCompile.ExportMaterial(text);
+			}
+		}
+		NDebug.MessageBox("MOD Compile Complete", "MODファイルのコンパイルが終了しました。");
+	}
+
+	private bool ModCompileMenu(string f_strModMenu)
+	{
+		byte[] array = null;
+		try
+		{
+			using (FileStream fileStream = new FileStream(f_strModMenu, FileMode.Open))
+			{
+				if (fileStream == null)
+				{
+					NUty.WinMessageBox(NUty.GetWindowHandle(), "コンパイル対象のメニューがありません。\n" + f_strModMenu, "MOD Compile Error", 0);
+					return false;
+				}
+				array = new byte[fileStream.Length];
+				fileStream.Read(array, 0, (int)fileStream.Length);
+			}
+		}
+		catch (Exception ex)
+		{
+			NUty.WinMessageBox(NUty.GetWindowHandle(), "ModCompileMenu MODアイテムメニューファイルが読み込めませんでした。\n " + f_strModMenu + "\n" + ex.Message, "MOD Compile Error", 0);
+			return false;
+		}
+		string text = string.Empty;
+		string value = string.Empty;
+		string text2 = string.Empty;
+		string value2 = string.Empty;
+		string value3 = string.Empty;
+		string value4 = string.Empty;
+		string value5 = string.Empty;
+		string text3 = string.Empty;
+		Dictionary<string, EditMod.TexSet> dictionary = new Dictionary<string, EditMod.TexSet>();
+		string @string = Encoding.UTF8.GetString(array);
+		using (StringReader stringReader = new StringReader(@string))
+		{
+			string text4;
+			while ((text4 = stringReader.ReadLine()) != null)
+			{
+				string[] array2 = text4.Split(new char[]
+				{
+					'\t',
+					' '
+				}, StringSplitOptions.RemoveEmptyEntries);
+				if (array2.Length != 0)
+				{
+					if (array2[0].IndexOf("/") != 0)
+					{
+						if (array2[0] == "基本アイテム")
+						{
+							text2 = array2[1];
+						}
+						else if (array2[0] == "アイテム名")
+						{
+							value2 = array2[1];
+						}
+						else if (array2[0] == "カテゴリ名")
+						{
+							value4 = array2[1];
+						}
+						else if (array2[0] == "説明")
+						{
+							value3 = array2[1];
+						}
+						else if (array2[0] == "アイコン")
+						{
+							array2[1] = array2[1].ToLower();
+							value = array2[1];
+							string text5 = Path.GetDirectoryName(f_strModMenu) + "\\";
+							text5 += array2[1];
+							FileStream fileStream2 = new FileStream(text5, FileMode.Open);
+							if (fileStream2 == null)
+							{
+								NUty.WinMessageBox(NUty.GetWindowHandle(), "アイコンファイルが開けません。\n" + text5, "MOD Compile Error", 0);
+								return false;
+							}
+							byte[] array3 = new byte[fileStream2.Length];
+							fileStream2.Read(array3, 0, (int)fileStream2.Length);
+							if (!dictionary.ContainsKey(array2[1].ToLower()))
+							{
+								dictionary.Add(array2[1].ToLower(), new EditMod.TexSet
+								{
+									nSize = (int)fileStream2.Length,
+									byData = array3
+								});
+							}
+							fileStream2.Close();
+							fileStream2.Dispose();
+						}
+						else if (array2[0] == "色セット")
+						{
+							value5 = array2[1];
+							if (array2.Length >= 3)
+							{
+								text3 = array2[2];
+							}
+						}
+						else if (array2[0] == "テクスチャ設定")
+						{
+							array2[2] = array2[2].ToLower();
+							string text6 = Path.GetDirectoryName(f_strModMenu) + "\\";
+							text6 += array2[2];
+							FileStream fileStream3 = new FileStream(text6, FileMode.Open);
+							if (fileStream3 == null)
+							{
+								NUty.WinMessageBox(NUty.GetWindowHandle(), "テクスチャが開けません。\n" + text6, "MOD Compile Error", 0);
+								return false;
+							}
+							byte[] array4 = new byte[fileStream3.Length];
+							fileStream3.Read(array4, 0, (int)fileStream3.Length);
+							if (!dictionary.ContainsKey(array2[2].ToLower()))
+							{
+								dictionary.Add(array2[2].ToLower(), new EditMod.TexSet
+								{
+									nSize = (int)fileStream3.Length,
+									byData = array4
+								});
+							}
+							fileStream3.Close();
+							fileStream3.Dispose();
+						}
+						else if (array2[0] == "テクスチャ変更")
+						{
+							string text7 = array2[4].ToLower();
+							string text8 = Path.GetDirectoryName(f_strModMenu) + "\\";
+							string[] array5;
+							if (text7.Contains("*"))
+							{
+								array5 = Directory.GetFiles(text8, text7, SearchOption.AllDirectories);
+							}
+							else
+							{
+								array5 = new string[]
+								{
+									text8 + text7
+								};
+							}
+							foreach (string text9 in array5)
+							{
+								if (!File.Exists(text9))
+								{
+									NUty.WinMessageBox(NUty.GetWindowHandle(), "テクスチャが見つかりません。\n" + text9, "MOD Compile Error", 0);
+									return false;
+								}
+								FileStream fileStream4 = new FileStream(text9, FileMode.Open);
+								if (fileStream4 == null)
+								{
+									NUty.WinMessageBox(NUty.GetWindowHandle(), "テクスチャが開けません。\n" + text9, "MOD Compile Error", 0);
+									return false;
+								}
+								byte[] array7 = new byte[fileStream4.Length];
+								fileStream4.Read(array7, 0, (int)fileStream4.Length);
+								if (!dictionary.ContainsKey(Path.GetFileName(text9).ToLower()))
+								{
+									dictionary.Add(Path.GetFileName(text9).ToLower(), new EditMod.TexSet
+									{
+										nSize = (int)fileStream4.Length,
+										byData = array7
+									});
+								}
+								fileStream4.Close();
+								fileStream4.Dispose();
+							}
+						}
+						foreach (string str in array2)
+						{
+							text = text + str + "\t";
+						}
+						text += "\n";
+					}
+				}
+			}
+		}
+		MemoryStream memoryStream = new MemoryStream();
+		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
+		binaryWriter.Write("CM3D2_MOD");
+		binaryWriter.Write(1130);
+		binaryWriter.Write(value);
+		binaryWriter.Write(text2.ToLower());
+		binaryWriter.Write(value2);
+		binaryWriter.Write(value4);
+		binaryWriter.Write(value3);
+		if (string.IsNullOrEmpty(value5))
+		{
+			binaryWriter.Write(MPN.null_mpn.ToString());
+		}
+		else
+		{
+			binaryWriter.Write(value5);
+			binaryWriter.Write(text3.ToLower());
+		}
+		binaryWriter.Write(text);
+		binaryWriter.Write(dictionary.Count);
+		foreach (KeyValuePair<string, EditMod.TexSet> keyValuePair in dictionary)
+		{
+			binaryWriter.Write(keyValuePair.Key);
+			binaryWriter.Write(keyValuePair.Value.byData.Length);
+			binaryWriter.Write(keyValuePair.Value.byData);
+		}
+		string text10 = Path.GetDirectoryName(f_strModMenu) + "\\_compiled\\";
+		Directory.CreateDirectory(text10);
+		text10 += Path.GetFileNameWithoutExtension(f_strModMenu);
+		text10 += ".mod";
+		File.WriteAllBytes(text10, memoryStream.ToArray());
+		memoryStream.Close();
+		memoryStream.Dispose();
+		memoryStream = null;
+		NUty.WinMessageBox(NUty.GetWindowHandle(), "MODコンパイル完了\n" + text10, "MOD Compile Completed", 0);
+		return true;
+	}
+
+	private void Update()
+	{
+		if (!this.bPush && Input.GetKey(KeyCode.M) && Input.GetKey(KeyCode.O) && Input.GetKey(KeyCode.D) && !Input.GetKey(KeyCode.Q))
+		{
+			if (this.m_eModMode != EditMod.MOD_MODE.MOD_TEX)
+			{
+				this.m_eModMode = EditMod.MOD_MODE.MOD_TEX;
+			}
+			else
+			{
+				this.m_eModMode = EditMod.MOD_MODE.MOD_NON;
+			}
+			this.bPush = true;
+		}
+		else if (!this.bPush && Input.GetKey(KeyCode.M) && Input.GetKey(KeyCode.O) && Input.GetKey(KeyCode.D) && Input.GetKey(KeyCode.Q))
+		{
+			if (this.m_eModMode != EditMod.MOD_MODE.MOD_MQO)
+			{
+				this.m_eModMode = EditMod.MOD_MODE.MOD_MQO;
+			}
+			else
+			{
+				this.m_eModMode = EditMod.MOD_MODE.MOD_NON;
+			}
+			this.bPush = true;
+		}
+		else if (!Input.GetKey(KeyCode.M) && !Input.GetKey(KeyCode.O) && !Input.GetKey(KeyCode.D) && !Input.GetKey(KeyCode.Q))
+		{
+			this.bPush = false;
+		}
+	}
+
+	private string strModPath = string.Empty;
+
+	private EditMod.MOD_MODE m_eModMode;
+
+	public MPN m_mpn;
+
+	private string m_strOutFileName = string.Empty;
+
+	private bool bPush;
+
+	private enum MOD_MODE
+	{
+		MOD_NON,
+		MOD_TEX,
+		MOD_MQO
+	}
+
+	private class TexSet
+	{
+		public int nSize;
+
+		public byte[] byData;
+	}
+}

+ 86 - 0
Assembly-CSharp/EditOkCancel.cs

@@ -0,0 +1,86 @@
+using System;
+using UnityEngine;
+
+public class EditOkCancel : MonoBehaviour
+{
+	private void Awake()
+	{
+		this.m_goOk = UTY.GetChildObject(base.gameObject, "Ok", false);
+		this.m_uiBtnOk = this.m_goOk.GetComponent<UIButton>();
+		this.m_goCancel = UTY.GetChildObject(base.gameObject, "Cancel", false);
+		this.m_uiBtnCancel = this.m_goCancel.GetComponent<UIButton>();
+		this.m_goOk.SetActive(false);
+		this.m_goCancel.SetActive(false);
+		EventDelegate.Add(this.m_uiBtnOk.onClick, new EventDelegate.Callback(this.OnClickOk));
+		EventDelegate.Add(this.m_uiBtnCancel.onClick, new EventDelegate.Callback(this.OnClickCancel));
+	}
+
+	private void Start()
+	{
+	}
+
+	public void SetOnClickCallBack(EditOkCancel.OnClick f_dgOk, EditOkCancel.OnClick f_dgCancel = null)
+	{
+		this.m_dgOnClickOk = f_dgOk;
+		this.m_dgOnClickCancel = f_dgCancel;
+	}
+
+	public void Show(EditOkCancel.TYPE f_eType)
+	{
+		this.m_goOk.SetActive(true);
+		if (f_eType == EditOkCancel.TYPE.OK_CANCEL)
+		{
+			this.m_goCancel.SetActive(true);
+		}
+		else
+		{
+			this.m_goCancel.SetActive(false);
+		}
+	}
+
+	public void Close()
+	{
+		this.m_goOk.SetActive(false);
+		this.m_goCancel.SetActive(false);
+	}
+
+	private void OnClickOk()
+	{
+		if (this.m_dgOnClickOk != null)
+		{
+			this.m_dgOnClickOk();
+		}
+	}
+
+	private void OnClickCancel()
+	{
+		if (this.m_dgOnClickCancel != null)
+		{
+			this.m_dgOnClickCancel();
+		}
+	}
+
+	private void Update()
+	{
+	}
+
+	private GameObject m_goOk;
+
+	private UIButton m_uiBtnOk;
+
+	private GameObject m_goCancel;
+
+	private UIButton m_uiBtnCancel;
+
+	private EditOkCancel.OnClick m_dgOnClickOk;
+
+	private EditOkCancel.OnClick m_dgOnClickCancel;
+
+	public delegate void OnClick();
+
+	public enum TYPE
+	{
+		OK,
+		OK_CANCEL
+	}
+}

+ 133 - 0
Assembly-CSharp/EditViewReset.cs

@@ -0,0 +1,133 @@
+using System;
+using UnityEngine;
+
+public class EditViewReset : MonoBehaviour
+{
+	private void Awake()
+	{
+		this.m_goViewReset = UTY.GetChildObject(base.gameObject, "ViewReset", false);
+		this.m_uiViewReset = this.m_goViewReset.GetComponent<UIButton>();
+		this.m_goAutoCam = UTY.GetChildObject(base.gameObject, "AutoCam", false);
+		this.m_uiAutoCam = this.m_goAutoCam.GetComponent<UIButton>();
+		this.m_goEyeToCam = UTY.GetChildObject(base.gameObject, "EyeToCam", false);
+		this.m_uiEyeToCam = this.m_goEyeToCam.GetComponent<UIButton>();
+		EventDelegate.Add(this.m_uiViewReset.onClick, new EventDelegate.Callback(this.OnClickViewReset));
+		EventDelegate.Add(this.m_uiAutoCam.onClick, new EventDelegate.Callback(this.OnClickAutoCam));
+		EventDelegate.Add(this.m_uiEyeToCam.onClick, new EventDelegate.Callback(this.OnClickEyeToCam));
+		this.UpdateAutoEyeCam();
+	}
+
+	private void Start()
+	{
+		if (SceneEdit.Instance.IsVRComMode)
+		{
+			this.m_uiAutoCam.disabledColor.a = 0.5f;
+			this.m_uiViewReset.disabledColor = this.m_uiAutoCam.disabledColor;
+			this.m_uiViewReset.SetState(UIButtonColor.State.Disabled, true);
+			this.m_uiViewReset.isEnabled = false;
+			this.m_uiAutoCam.SetState(UIButtonColor.State.Disabled, true);
+			this.m_uiAutoCam.isEnabled = false;
+		}
+	}
+
+	public void SetOnClickCallBack(EditViewReset.OnClick f_dgViewReset, EditViewReset.OnClick f_dgAutoCam, EditViewReset.OnClick f_dgEyeToCam)
+	{
+		this.m_dgOnViewReset = f_dgViewReset;
+		this.m_dgOnAutoCam = f_dgAutoCam;
+		this.m_dgOnEyeToCam = f_dgEyeToCam;
+	}
+
+	public void Show()
+	{
+		this.m_goViewReset.SetActive(true);
+		this.m_goAutoCam.SetActive(true);
+		this.m_goEyeToCam.SetActive(true);
+	}
+
+	public void Close()
+	{
+		this.m_goViewReset.SetActive(false);
+		this.m_goAutoCam.SetActive(false);
+		this.m_goEyeToCam.SetActive(false);
+	}
+
+	public void SetVisibleAutoCam(bool f_bVisible)
+	{
+		this.m_bVisibleAutoCam = f_bVisible;
+		this.UpdateAutoEyeCam();
+	}
+
+	public bool GetVisibleAutoCam()
+	{
+		return this.m_bVisibleAutoCam;
+	}
+
+	public void SetVisibleEyeToCam(bool f_bVisible)
+	{
+		this.m_bVisibleEyeToCam = f_bVisible;
+		this.UpdateAutoEyeCam();
+	}
+
+	public bool GetVisibleEyeToCam()
+	{
+		return this.m_bVisibleEyeToCam;
+	}
+
+	private void UpdateAutoEyeCam()
+	{
+		this.m_uiAutoCam.defaultColor = new Color(1f, 1f, 1f, (!this.m_bVisibleAutoCam) ? 0.2f : 1f);
+		this.m_uiEyeToCam.defaultColor = new Color(1f, 1f, 1f, (!this.m_bVisibleEyeToCam) ? 0.2f : 1f);
+	}
+
+	private void OnClickViewReset()
+	{
+		if (this.m_dgOnViewReset != null)
+		{
+			this.m_dgOnViewReset();
+		}
+	}
+
+	private void OnClickAutoCam()
+	{
+		if (this.m_dgOnAutoCam != null)
+		{
+			this.m_dgOnAutoCam();
+		}
+	}
+
+	private void OnClickEyeToCam()
+	{
+		if (this.m_dgOnEyeToCam != null)
+		{
+			this.m_dgOnEyeToCam();
+		}
+	}
+
+	private void Update()
+	{
+	}
+
+	private GameObject m_goViewReset;
+
+	private UIButton m_uiViewReset;
+
+	private GameObject m_goAutoCam;
+
+	private UIButton m_uiAutoCam;
+
+	private GameObject m_goEyeToCam;
+
+	private UIButton m_uiEyeToCam;
+
+	private EditViewReset.OnClick m_dgOnViewReset;
+
+	private EditViewReset.OnClick m_dgOnAutoCam;
+
+	private EditViewReset.OnClick m_dgOnEyeToCam;
+
+	private bool m_bVisibleAutoCam;
+
+	private bool m_bVisibleEyeToCam;
+
+	public delegate void OnClick();
+}

+ 123 - 0
Assembly-CSharp/EffectWindow.cs

@@ -0,0 +1,123 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using wf;
+
+public class EffectWindow : BaseMaidPhotoWindow
+{
+	public override void Awake()
+	{
+		base.Awake();
+		for (int i = 0; i < this.EffectObjectArray.Length; i++)
+		{
+			GameObject gameObject = Utility.CreatePrefab(this.Grid.gameObject, "ScenePhotoMode/WindowListItem", true);
+			gameObject.name = this.EffectObjectArray[i].Id.ToString();
+			gameObject.GetComponentInChildren<UILabel>().text = this.EffectObjectArray[i].Name;
+			EventDelegate.Add(gameObject.GetComponent<UIWFTabButton>().onSelect, new EventDelegate.Callback(this.OnSelectEvent));
+			this.id_btn_dic_.Add(long.Parse(gameObject.name), gameObject.GetComponent<UIWFTabButton>());
+		}
+		this.Grid.Reposition();
+		this.Grid.GetComponent<UIWFTabPanel>().UpdateChildren();
+		for (int j = 0; j < this.EffectObjectArray.Length; j++)
+		{
+			if (!this.EffectObjectArray[j].EffectObject.gameObject.activeSelf)
+			{
+				this.EffectObjectArray[j].EffectObject.gameObject.SetActive(true);
+			}
+		}
+	}
+
+	public override void Start()
+	{
+		base.Start();
+		this.UpdateChildren();
+		for (int i = 0; i < this.EffectObjectArray.Length; i++)
+		{
+			this.EffectObjectArray[i].EffectObject.SetEffectWindow(this);
+			this.EffectObjectArray[i].EffectObject.Init();
+		}
+		this.Grid.GetComponent<UIWFTabPanel>().Select(this.id_btn_dic_[(long)this.EffectObjectArray[0].Id]);
+	}
+
+	public override void OnMaidAddEvent(Maid maid, bool is_deserialize_load)
+	{
+		for (int i = 0; i < this.EffectObjectArray.Length; i++)
+		{
+			this.EffectObjectArray[i].EffectObject.OnMaidAddEvent(maid, is_deserialize_load);
+		}
+	}
+
+	public void OnSelectEvent()
+	{
+		if (!UIWFSelectButton.current.isSelected)
+		{
+			return;
+		}
+		ulong num = ulong.Parse(UIWFSelectButton.current.name);
+		for (int i = 0; i < this.EffectObjectArray.Length; i++)
+		{
+			this.EffectObjectArray[i].EffectObject.visible = ((int)num == this.EffectObjectArray[i].Id);
+		}
+	}
+
+	public override void OnSerializeEvent()
+	{
+		for (int i = 0; i < this.EffectObjectArray.Length; i++)
+		{
+			this.EffectObjectArray[i].EffectObject.OnSerializeEvent();
+		}
+		Dictionary<string, Dictionary<string, string>> woldStoreData = base.GetWoldStoreData();
+		if (!woldStoreData.ContainsKey("選択エフェクト"))
+		{
+			woldStoreData.Add("選択エフェクト", new Dictionary<string, string>());
+		}
+		Dictionary<string, string> dictionary = woldStoreData["選択エフェクト"];
+		dictionary["id"] = this.Grid.GetComponent<UIWFTabPanel>().GetSelectButtonObject().name.ToString();
+	}
+
+	public override void OnDeserializeEvent()
+	{
+		for (int i = 0; i < this.EffectObjectArray.Length; i++)
+		{
+			this.EffectObjectArray[i].EffectObject.OnDeserializeEvent();
+		}
+		Dictionary<string, Dictionary<string, string>> woldStoreData = base.GetWoldStoreData();
+		if (!woldStoreData.ContainsKey("選択エフェクト"))
+		{
+			woldStoreData.Add("選択エフェクト", new Dictionary<string, string>());
+		}
+		string value = this.EffectObjectArray[0].Id.ToString();
+		Dictionary<string, string> dictionary = woldStoreData["選択エフェクト"];
+		if (!dictionary.ContainsKey("id"))
+		{
+			dictionary["id"] = value;
+		}
+		else if (dictionary["id"] == "0")
+		{
+			dictionary["id"] = value;
+		}
+		long key = long.Parse(dictionary["id"]);
+		this.Grid.GetComponent<UIWFTabPanel>().Select(this.id_btn_dic_[key]);
+	}
+
+	public Dictionary<string, Dictionary<string, string>> GetStoreData()
+	{
+		return base.mgr.GetWoldStoreData(this);
+	}
+
+	public UIGrid Grid;
+
+	public EffectWindow.EffectObjectData[] EffectObjectArray;
+
+	private Dictionary<long, UIWFTabButton> id_btn_dic_ = new Dictionary<long, UIWFTabButton>();
+
+	[Serializable]
+	public class EffectObjectData
+	{
+		public int Id;
+
+		public string Name;
+
+		public WindowPartsEffectBase EffectObject;
+	}
+}

+ 16 - 0
Assembly-CSharp/EmptyWindow.cs

@@ -0,0 +1,16 @@
+using System;
+using UnityEngine;
+
+public class EmptyWindow : BasePhotoWindow
+{
+	public override string windowName
+	{
+		get
+		{
+			return this.saveWindowName;
+		}
+	}
+
+	[SerializeField]
+	private string saveWindowName;
+}

+ 21 - 0
Assembly-CSharp/EnableSwitch.cs

@@ -0,0 +1,21 @@
+using System;
+using UnityEngine;
+
+public class EnableSwitch : MonoBehaviour
+{
+	public bool SetActive(int target)
+	{
+		if (target < 0 || target >= this.SwitchTargets.Length)
+		{
+			return false;
+		}
+		for (int i = 0; i < this.SwitchTargets.Length; i++)
+		{
+			this.SwitchTargets[i].SetActive(false);
+		}
+		this.SwitchTargets[target].SetActive(true);
+		return true;
+	}
+
+	public GameObject[] SwitchTargets;
+}

+ 38 - 0
Assembly-CSharp/Enabler.cs

@@ -0,0 +1,38 @@
+using System;
+using UnityEngine;
+
+[ExecuteInEditMode]
+public class Enabler : MonoBehaviour
+{
+	private void Start()
+	{
+	}
+
+	public void Enable()
+	{
+		if (this.goEnable != null)
+		{
+			this.goEnable.SetActive(true);
+		}
+	}
+
+	public void Disable()
+	{
+		if (this.goEnable != null)
+		{
+			this.goEnable.SetActive(false);
+		}
+	}
+
+	private void Update()
+	{
+		if (this.goEnable != null)
+		{
+			this.goEnable.SetActive(this.flag != 0);
+		}
+	}
+
+	public int flag;
+
+	public GameObject goEnable;
+}

+ 57 - 0
Assembly-CSharp/EnvelopContent.cs

@@ -0,0 +1,57 @@
+using System;
+using UnityEngine;
+
+[RequireComponent(typeof(UIWidget))]
+[AddComponentMenu("NGUI/Examples/Envelop Content")]
+public class EnvelopContent : MonoBehaviour
+{
+	private void Start()
+	{
+		this.mStarted = true;
+		this.Execute();
+	}
+
+	private void OnEnable()
+	{
+		if (this.mStarted)
+		{
+			this.Execute();
+		}
+	}
+
+	[ContextMenu("Execute")]
+	public void Execute()
+	{
+		if (this.targetRoot == base.transform)
+		{
+			Debug.LogError("Target Root object cannot be the same object that has Envelop Content. Make it a sibling instead.", this);
+		}
+		else if (NGUITools.IsChild(this.targetRoot, base.transform))
+		{
+			Debug.LogError("Target Root object should not be a parent of Envelop Content. Make it a sibling instead.", this);
+		}
+		else
+		{
+			Bounds bounds = NGUIMath.CalculateRelativeWidgetBounds(base.transform.parent, this.targetRoot, false, true);
+			float num = bounds.min.x + (float)this.padLeft;
+			float num2 = bounds.min.y + (float)this.padBottom;
+			float num3 = bounds.max.x + (float)this.padRight;
+			float num4 = bounds.max.y + (float)this.padTop;
+			UIWidget component = base.GetComponent<UIWidget>();
+			component.SetRect(num, num2, num3 - num, num4 - num2);
+			base.BroadcastMessage("UpdateAnchors", SendMessageOptions.DontRequireReceiver);
+		}
+	}
+
+	public Transform targetRoot;
+
+	public int padLeft;
+
+	public int padRight;
+
+	public int padBottom;
+
+	public int padTop;
+
+	private bool mStarted;
+}

+ 42 - 0
Assembly-CSharp/EquipItems.cs

@@ -0,0 +1,42 @@
+using System;
+using UnityEngine;
+
+[AddComponentMenu("NGUI/Examples/Equip Items")]
+public class EquipItems : MonoBehaviour
+{
+	private void Start()
+	{
+		if (this.itemIDs != null && this.itemIDs.Length > 0)
+		{
+			InvEquipment invEquipment = base.GetComponent<InvEquipment>();
+			if (invEquipment == null)
+			{
+				invEquipment = base.gameObject.AddComponent<InvEquipment>();
+			}
+			int max = 12;
+			int i = 0;
+			int num = this.itemIDs.Length;
+			while (i < num)
+			{
+				int num2 = this.itemIDs[i];
+				InvBaseItem invBaseItem = InvDatabase.FindByID(num2);
+				if (invBaseItem != null)
+				{
+					invEquipment.Equip(new InvGameItem(num2, invBaseItem)
+					{
+						quality = (InvGameItem.Quality)UnityEngine.Random.Range(0, max),
+						itemLevel = NGUITools.RandomRange(invBaseItem.minItemLevel, invBaseItem.maxItemLevel)
+					});
+				}
+				else
+				{
+					Debug.LogWarning("Can't resolve the item ID of " + num2);
+				}
+				i++;
+			}
+		}
+		UnityEngine.Object.Destroy(this);
+	}
+
+	public int[] itemIDs;
+}

+ 29 - 0
Assembly-CSharp/EquipRandomItem.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+[AddComponentMenu("NGUI/Examples/Equip Random Item")]
+public class EquipRandomItem : MonoBehaviour
+{
+	private void OnClick()
+	{
+		if (this.equipment == null)
+		{
+			return;
+		}
+		List<InvBaseItem> items = InvDatabase.list[0].items;
+		if (items.Count == 0)
+		{
+			return;
+		}
+		int max = 12;
+		int num = UnityEngine.Random.Range(0, items.Count);
+		InvBaseItem invBaseItem = items[num];
+		InvGameItem invGameItem = new InvGameItem(num, invBaseItem);
+		invGameItem.quality = (InvGameItem.Quality)UnityEngine.Random.Range(0, max);
+		invGameItem.itemLevel = NGUITools.RandomRange(invBaseItem.minItemLevel, invBaseItem.maxItemLevel);
+		this.equipment.Equip(invGameItem);
+	}
+
+	public InvEquipment equipment;
+}

+ 708 - 0
Assembly-CSharp/EventDelegate.cs

@@ -0,0 +1,708 @@
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using UnityEngine;
+
+[Serializable]
+public class EventDelegate
+{
+	public EventDelegate()
+	{
+	}
+
+	public EventDelegate(EventDelegate.Callback call)
+	{
+		this.Set(call);
+	}
+
+	public EventDelegate(MonoBehaviour target, string methodName)
+	{
+		this.Set(target, methodName);
+	}
+
+	public MonoBehaviour target
+	{
+		get
+		{
+			return this.mTarget;
+		}
+		set
+		{
+			this.mTarget = value;
+			this.mCachedCallback = null;
+			this.mRawDelegate = false;
+			this.mCached = false;
+			this.mMethod = null;
+			this.mParameterInfos = null;
+			this.mParameters = null;
+		}
+	}
+
+	public string methodName
+	{
+		get
+		{
+			return this.mMethodName;
+		}
+		set
+		{
+			this.mMethodName = value;
+			this.mCachedCallback = null;
+			this.mRawDelegate = false;
+			this.mCached = false;
+			this.mMethod = null;
+			this.mParameterInfos = null;
+			this.mParameters = null;
+		}
+	}
+
+	public EventDelegate.Parameter[] parameters
+	{
+		get
+		{
+			if (!this.mCached)
+			{
+				this.Cache();
+			}
+			return this.mParameters;
+		}
+	}
+
+	public bool isValid
+	{
+		get
+		{
+			if (!this.mCached)
+			{
+				this.Cache();
+			}
+			return (this.mRawDelegate && this.mCachedCallback != null) || (this.mTarget != null && !string.IsNullOrEmpty(this.mMethodName));
+		}
+	}
+
+	public bool isEnabled
+	{
+		get
+		{
+			if (!this.mCached)
+			{
+				this.Cache();
+			}
+			if (this.mRawDelegate && this.mCachedCallback != null)
+			{
+				return true;
+			}
+			if (this.mTarget == null)
+			{
+				return false;
+			}
+			MonoBehaviour monoBehaviour = this.mTarget;
+			return monoBehaviour == null || monoBehaviour.enabled;
+		}
+	}
+
+	private static string GetMethodName(EventDelegate.Callback callback)
+	{
+		return callback.Method.Name;
+	}
+
+	private static bool IsValid(EventDelegate.Callback callback)
+	{
+		return callback != null && callback.Method != null;
+	}
+
+	public override bool Equals(object obj)
+	{
+		if (obj == null)
+		{
+			return !this.isValid;
+		}
+		if (obj is EventDelegate.Callback)
+		{
+			EventDelegate.Callback callback = obj as EventDelegate.Callback;
+			if (callback.Equals(this.mCachedCallback))
+			{
+				return true;
+			}
+			MonoBehaviour y = callback.Target as MonoBehaviour;
+			return this.mTarget == y && string.Equals(this.mMethodName, EventDelegate.GetMethodName(callback));
+		}
+		else
+		{
+			if (obj is EventDelegate)
+			{
+				EventDelegate eventDelegate = obj as EventDelegate;
+				return this.mTarget == eventDelegate.mTarget && string.Equals(this.mMethodName, eventDelegate.mMethodName);
+			}
+			return false;
+		}
+	}
+
+	public override int GetHashCode()
+	{
+		return EventDelegate.s_Hash;
+	}
+
+	private void Set(EventDelegate.Callback call)
+	{
+		this.Clear();
+		if (call != null && EventDelegate.IsValid(call))
+		{
+			this.mTarget = (call.Target as MonoBehaviour);
+			if (this.mTarget == null)
+			{
+				this.mRawDelegate = true;
+				this.mCachedCallback = call;
+				this.mMethodName = null;
+			}
+			else
+			{
+				this.mMethodName = EventDelegate.GetMethodName(call);
+				this.mRawDelegate = false;
+			}
+		}
+	}
+
+	public void Set(MonoBehaviour target, string methodName)
+	{
+		this.Clear();
+		this.mTarget = target;
+		this.mMethodName = methodName;
+	}
+
+	private void Cache()
+	{
+		this.mCached = true;
+		if (this.mRawDelegate)
+		{
+			return;
+		}
+		if ((this.mCachedCallback == null || this.mCachedCallback.Target as MonoBehaviour != this.mTarget || EventDelegate.GetMethodName(this.mCachedCallback) != this.mMethodName) && this.mTarget != null && !string.IsNullOrEmpty(this.mMethodName))
+		{
+			Type type = this.mTarget.GetType();
+			this.mMethod = null;
+			while (type != null)
+			{
+				try
+				{
+					this.mMethod = type.GetMethod(this.mMethodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
+					if (this.mMethod != null)
+					{
+						break;
+					}
+				}
+				catch (Exception)
+				{
+				}
+				type = type.BaseType;
+			}
+			if (this.mMethod == null)
+			{
+				Debug.LogError(string.Concat(new object[]
+				{
+					"Could not find method '",
+					this.mMethodName,
+					"' on ",
+					this.mTarget.GetType()
+				}), this.mTarget);
+				return;
+			}
+			if (this.mMethod.ReturnType != typeof(void))
+			{
+				Debug.LogError(string.Concat(new object[]
+				{
+					this.mTarget.GetType(),
+					".",
+					this.mMethodName,
+					" must have a 'void' return type."
+				}), this.mTarget);
+				return;
+			}
+			this.mParameterInfos = this.mMethod.GetParameters();
+			if (this.mParameterInfos.Length == 0)
+			{
+				this.mCachedCallback = (EventDelegate.Callback)Delegate.CreateDelegate(typeof(EventDelegate.Callback), this.mTarget, this.mMethodName);
+				this.mArgs = null;
+				this.mParameters = null;
+				return;
+			}
+			this.mCachedCallback = null;
+			if (this.mParameters == null || this.mParameters.Length != this.mParameterInfos.Length)
+			{
+				this.mParameters = new EventDelegate.Parameter[this.mParameterInfos.Length];
+				int i = 0;
+				int num = this.mParameters.Length;
+				while (i < num)
+				{
+					this.mParameters[i] = new EventDelegate.Parameter();
+					i++;
+				}
+			}
+			int j = 0;
+			int num2 = this.mParameters.Length;
+			while (j < num2)
+			{
+				this.mParameters[j].expectedType = this.mParameterInfos[j].ParameterType;
+				j++;
+			}
+		}
+	}
+
+	public bool Execute()
+	{
+		if (!this.mCached)
+		{
+			this.Cache();
+		}
+		if (this.mCachedCallback != null)
+		{
+			this.mCachedCallback();
+			return true;
+		}
+		if (this.mMethod != null)
+		{
+			if (this.mParameters == null || this.mParameters.Length == 0)
+			{
+				this.mMethod.Invoke(this.mTarget, null);
+			}
+			else
+			{
+				if (this.mArgs == null || this.mArgs.Length != this.mParameters.Length)
+				{
+					this.mArgs = new object[this.mParameters.Length];
+				}
+				int i = 0;
+				int num = this.mParameters.Length;
+				while (i < num)
+				{
+					this.mArgs[i] = this.mParameters[i].value;
+					i++;
+				}
+				try
+				{
+					this.mMethod.Invoke(this.mTarget, this.mArgs);
+				}
+				catch (ArgumentException ex)
+				{
+					string text = "Error calling ";
+					if (this.mTarget == null)
+					{
+						text += this.mMethod.Name;
+					}
+					else
+					{
+						string text2 = text;
+						text = string.Concat(new object[]
+						{
+							text2,
+							this.mTarget.GetType(),
+							".",
+							this.mMethod.Name
+						});
+					}
+					text = text + ": " + ex.Message;
+					text += "\n  Expected: ";
+					if (this.mParameterInfos.Length == 0)
+					{
+						text += "no arguments";
+					}
+					else
+					{
+						text += this.mParameterInfos[0];
+						for (int j = 1; j < this.mParameterInfos.Length; j++)
+						{
+							text = text + ", " + this.mParameterInfos[j].ParameterType;
+						}
+					}
+					text += "\n  Received: ";
+					if (this.mParameters.Length == 0)
+					{
+						text += "no arguments";
+					}
+					else
+					{
+						text += this.mParameters[0].type;
+						for (int k = 1; k < this.mParameters.Length; k++)
+						{
+							text = text + ", " + this.mParameters[k].type;
+						}
+					}
+					text += "\n";
+					Debug.LogError(text);
+				}
+				int l = 0;
+				int num2 = this.mArgs.Length;
+				while (l < num2)
+				{
+					if (this.mParameterInfos[l].IsIn || this.mParameterInfos[l].IsOut)
+					{
+						this.mParameters[l].value = this.mArgs[l];
+					}
+					this.mArgs[l] = null;
+					l++;
+				}
+			}
+			return true;
+		}
+		return false;
+	}
+
+	public void Clear()
+	{
+		this.mTarget = null;
+		this.mMethodName = null;
+		this.mRawDelegate = false;
+		this.mCachedCallback = null;
+		this.mParameters = null;
+		this.mCached = false;
+		this.mMethod = null;
+		this.mParameterInfos = null;
+		this.mArgs = null;
+	}
+
+	public override string ToString()
+	{
+		if (!(this.mTarget != null))
+		{
+			return (!this.mRawDelegate) ? null : "[delegate]";
+		}
+		string text = this.mTarget.GetType().ToString();
+		int num = text.LastIndexOf('.');
+		if (num > 0)
+		{
+			text = text.Substring(num + 1);
+		}
+		if (!string.IsNullOrEmpty(this.methodName))
+		{
+			return text + "/" + this.methodName;
+		}
+		return text + "/[delegate]";
+	}
+
+	public static void Execute(List<EventDelegate> list)
+	{
+		if (list != null)
+		{
+			for (int i = 0; i < list.Count; i++)
+			{
+				EventDelegate eventDelegate = list[i];
+				if (eventDelegate != null)
+				{
+					try
+					{
+						eventDelegate.Execute();
+					}
+					catch (Exception ex)
+					{
+						if (ex.InnerException != null)
+						{
+							Debug.LogError(ex.InnerException.Message);
+						}
+						else
+						{
+							Debug.LogError(ex.Message);
+						}
+					}
+					if (i >= list.Count)
+					{
+						break;
+					}
+					if (list[i] != eventDelegate)
+					{
+						continue;
+					}
+					if (eventDelegate.oneShot)
+					{
+						list.RemoveAt(i);
+						continue;
+					}
+				}
+			}
+		}
+	}
+
+	public static bool IsValid(List<EventDelegate> list)
+	{
+		if (list != null)
+		{
+			int i = 0;
+			int count = list.Count;
+			while (i < count)
+			{
+				EventDelegate eventDelegate = list[i];
+				if (eventDelegate != null && eventDelegate.isValid)
+				{
+					return true;
+				}
+				i++;
+			}
+		}
+		return false;
+	}
+
+	public static EventDelegate Set(List<EventDelegate> list, EventDelegate.Callback callback)
+	{
+		if (list != null)
+		{
+			EventDelegate eventDelegate = new EventDelegate(callback);
+			list.Clear();
+			list.Add(eventDelegate);
+			return eventDelegate;
+		}
+		return null;
+	}
+
+	public static void Set(List<EventDelegate> list, EventDelegate del)
+	{
+		if (list != null)
+		{
+			list.Clear();
+			list.Add(del);
+		}
+	}
+
+	public static EventDelegate Add(List<EventDelegate> list, EventDelegate.Callback callback)
+	{
+		return EventDelegate.Add(list, callback, false);
+	}
+
+	public static EventDelegate Add(List<EventDelegate> list, EventDelegate.Callback callback, bool oneShot)
+	{
+		if (list != null)
+		{
+			int i = 0;
+			int count = list.Count;
+			while (i < count)
+			{
+				EventDelegate eventDelegate = list[i];
+				if (eventDelegate != null && eventDelegate.Equals(callback))
+				{
+					return eventDelegate;
+				}
+				i++;
+			}
+			EventDelegate eventDelegate2 = new EventDelegate(callback);
+			eventDelegate2.oneShot = oneShot;
+			list.Add(eventDelegate2);
+			return eventDelegate2;
+		}
+		Debug.LogWarning("Attempting to add a callback to a list that's null");
+		return null;
+	}
+
+	public static void Add(List<EventDelegate> list, EventDelegate ev)
+	{
+		EventDelegate.Add(list, ev, ev.oneShot);
+	}
+
+	public static void Add(List<EventDelegate> list, EventDelegate ev, bool oneShot)
+	{
+		if (ev.mRawDelegate || ev.target == null || string.IsNullOrEmpty(ev.methodName))
+		{
+			EventDelegate.Add(list, ev.mCachedCallback, oneShot);
+		}
+		else if (list != null)
+		{
+			int i = 0;
+			int count = list.Count;
+			while (i < count)
+			{
+				EventDelegate eventDelegate = list[i];
+				if (eventDelegate != null && eventDelegate.Equals(ev))
+				{
+					return;
+				}
+				i++;
+			}
+			EventDelegate eventDelegate2 = new EventDelegate(ev.target, ev.methodName);
+			eventDelegate2.oneShot = oneShot;
+			if (ev.mParameters != null && ev.mParameters.Length > 0)
+			{
+				eventDelegate2.mParameters = new EventDelegate.Parameter[ev.mParameters.Length];
+				for (int j = 0; j < ev.mParameters.Length; j++)
+				{
+					eventDelegate2.mParameters[j] = ev.mParameters[j];
+				}
+			}
+			list.Add(eventDelegate2);
+		}
+		else
+		{
+			Debug.LogWarning("Attempting to add a callback to a list that's null");
+		}
+	}
+
+	public static bool Remove(List<EventDelegate> list, EventDelegate.Callback callback)
+	{
+		if (list != null)
+		{
+			int i = 0;
+			int count = list.Count;
+			while (i < count)
+			{
+				EventDelegate eventDelegate = list[i];
+				if (eventDelegate != null && eventDelegate.Equals(callback))
+				{
+					list.RemoveAt(i);
+					return true;
+				}
+				i++;
+			}
+		}
+		return false;
+	}
+
+	public static bool Remove(List<EventDelegate> list, EventDelegate ev)
+	{
+		if (list != null)
+		{
+			int i = 0;
+			int count = list.Count;
+			while (i < count)
+			{
+				EventDelegate eventDelegate = list[i];
+				if (eventDelegate != null && eventDelegate.Equals(ev))
+				{
+					list.RemoveAt(i);
+					return true;
+				}
+				i++;
+			}
+		}
+		return false;
+	}
+
+	[SerializeField]
+	private MonoBehaviour mTarget;
+
+	[SerializeField]
+	private string mMethodName;
+
+	[SerializeField]
+	private EventDelegate.Parameter[] mParameters;
+
+	public bool oneShot;
+
+	[NonSerialized]
+	private EventDelegate.Callback mCachedCallback;
+
+	[NonSerialized]
+	private bool mRawDelegate;
+
+	[NonSerialized]
+	private bool mCached;
+
+	[NonSerialized]
+	private MethodInfo mMethod;
+
+	[NonSerialized]
+	private ParameterInfo[] mParameterInfos;
+
+	[NonSerialized]
+	private object[] mArgs;
+
+	private static int s_Hash = "EventDelegate".GetHashCode();
+
+	[Serializable]
+	public class Parameter
+	{
+		public Parameter()
+		{
+		}
+
+		public Parameter(UnityEngine.Object obj, string field)
+		{
+			this.obj = obj;
+			this.field = field;
+		}
+
+		public Parameter(object val)
+		{
+			this.mValue = val;
+		}
+
+		public object value
+		{
+			get
+			{
+				if (this.mValue != null)
+				{
+					return this.mValue;
+				}
+				if (!this.cached)
+				{
+					this.cached = true;
+					this.fieldInfo = null;
+					this.propInfo = null;
+					if (this.obj != null && !string.IsNullOrEmpty(this.field))
+					{
+						Type type = this.obj.GetType();
+						this.propInfo = type.GetProperty(this.field);
+						if (this.propInfo == null)
+						{
+							this.fieldInfo = type.GetField(this.field);
+						}
+					}
+				}
+				if (this.propInfo != null)
+				{
+					return this.propInfo.GetValue(this.obj, null);
+				}
+				if (this.fieldInfo != null)
+				{
+					return this.fieldInfo.GetValue(this.obj);
+				}
+				if (this.obj != null)
+				{
+					return this.obj;
+				}
+				if (this.expectedType != null && this.expectedType.IsValueType)
+				{
+					return null;
+				}
+				return Convert.ChangeType(null, this.expectedType);
+			}
+			set
+			{
+				this.mValue = value;
+			}
+		}
+
+		public Type type
+		{
+			get
+			{
+				if (this.mValue != null)
+				{
+					return this.mValue.GetType();
+				}
+				if (this.obj == null)
+				{
+					return typeof(void);
+				}
+				return this.obj.GetType();
+			}
+		}
+
+		public UnityEngine.Object obj;
+
+		public string field;
+
+		[NonSerialized]
+		private object mValue;
+
+		[NonSerialized]
+		public Type expectedType = typeof(void);
+
+		[NonSerialized]
+		public bool cached;
+
+		[NonSerialized]
+		public PropertyInfo propInfo;
+
+		[NonSerialized]
+		public FieldInfo fieldInfo;
+	}
+
+	public delegate void Callback();
+}

+ 170 - 0
Assembly-CSharp/ExChangeUI.cs

@@ -0,0 +1,170 @@
+using System;
+using UnityEngine;
+using UnityEngine.UI;
+using wf;
+
+public class ExChangeUI : MonoBehaviour
+{
+	public static ExChangeUI Instance { get; private set; }
+
+	public bool IsActive
+	{
+		get
+		{
+			return base.gameObject.activeSelf;
+		}
+	}
+
+	private void Awake()
+	{
+		ExChangeUI.Instance = this;
+		this.FadeInStartAction = (Action)Delegate.Combine(this.FadeInStartAction, new Action(delegate
+		{
+			this.m_ExchangeButton.interactable = false;
+		}));
+		this.FadeInStartAction = (Action)Delegate.Combine(this.FadeInStartAction, new Action(this.SetExchangeMax));
+		this.FadeOutStartAction = (Action)Delegate.Combine(this.FadeOutStartAction, new Action(this.TextUIUpdate));
+		MoneySetttingUI moneySetting = this.m_MoneySetting;
+		moneySetting.ValueUpdateAction = (MoneySetttingUI.ValueUpdateMethod)Delegate.Combine(moneySetting.ValueUpdateAction, new MoneySetttingUI.ValueUpdateMethod(this.UIStateUpdate));
+		this.m_MyCanvas = base.GetComponent<CanvasGroup>();
+		this.m_RateText.text = string.Format("コイン1枚 = {0}CR", Utility.ConvertMoneyText(this.m_CoinRate));
+		this.TextUIUpdate();
+		this.m_MoneySetting.SetMoneyUI(this.m_MoneySetting.MinValue, true);
+		base.gameObject.SetActive(false);
+	}
+
+	private void SetExchangeMax()
+	{
+		long num = 999999L - GameMain.Instance.CharacterMgr.status.casinoCoin;
+		if (num <= this.m_MoneySetting.MinValue)
+		{
+			num = this.m_MoneySetting.MinValue;
+		}
+		if (num * (long)this.m_CoinRate > GameMain.Instance.CharacterMgr.status.money)
+		{
+			num = GameMain.Instance.CharacterMgr.status.money / (long)this.m_CoinRate;
+		}
+		this.m_MoneySetting.SetMaxValue(num);
+	}
+
+	public void TextUIUpdate()
+	{
+		this.m_MoneyUI.text = GameMain.Instance.CharacterMgr.status.moneyText;
+		this.m_CoinUI.text = Utility.ConvertMoneyText(GameMain.Instance.CharacterMgr.status.casinoCoin);
+	}
+
+	public void SetButtonState(bool conditon)
+	{
+		this.m_ExchangeButton.interactable = conditon;
+	}
+
+	public void UIStateUpdate()
+	{
+		long money = GameMain.Instance.CharacterMgr.status.money;
+		this.m_BalanceText.text = string.Format("-{0:#,##0}", this.m_MoneySetting.MoneyValue * (long)this.m_CoinRate);
+		this.m_CurrentCoin.text = Utility.ConvertMoneyText(GameMain.Instance.CharacterMgr.status.casinoCoin + this.m_MoneySetting.MoneyValue);
+	}
+
+	public void PushOKButton()
+	{
+		GameMain.Instance.CharacterMgr.status.money -= this.m_MoneySetting.MoneyValue * (long)this.m_CoinRate;
+		GameMain.Instance.CharacterMgr.status.casinoCoin += this.m_MoneySetting.MoneyValue;
+		if (this.FadeOutStartAction != null)
+		{
+			this.FadeOutStartAction();
+		}
+		base.StartCoroutine(KasaiUtility.FadeCoroutine(this.m_MyCanvas, true, this.m_FadeTime, this.FadeOutEndAction, true, true));
+	}
+
+	public void PushCancelButton()
+	{
+		if (this.FadeOutStartAction != null)
+		{
+			this.FadeOutStartAction();
+		}
+		base.StartCoroutine(KasaiUtility.FadeCoroutine(this.m_MyCanvas, true, this.m_FadeTime, this.FadeOutEndAction, true, true));
+	}
+
+	public void PushResetButton()
+	{
+		this.m_MoneySetting.SetMoneyUI(this.m_MoneySetting.MinValue, false);
+	}
+
+	public void PushMaxButton()
+	{
+		this.m_MoneySetting.SetMoneyUI(this.m_MoneySetting.MaxValue, false);
+	}
+
+	public void FadeIn()
+	{
+		if (GameMain.Instance.CharacterMgr.status.money < this.m_MoneySetting.MinValue * (long)this.m_CoinRate)
+		{
+			string f_strMsg = string.Format("換金するには最低でも\n資金が{0:#,##0}CR必用です", this.m_MoneySetting.MinValue * (long)this.m_CoinRate);
+			GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK, null, null);
+			return;
+		}
+		if (GameMain.Instance.CharacterMgr.status.casinoCoin >= 999999L - this.m_MoneySetting.MinValue)
+		{
+			GameMain.Instance.SysDlg.Show("これ以上換金できません", SystemDialog.TYPE.OK, null, null);
+			return;
+		}
+		if (this.FadeInStartAction != null)
+		{
+			this.FadeInStartAction();
+		}
+		base.gameObject.SetActive(true);
+		base.StartCoroutine(KasaiUtility.FadeCoroutine(this.m_MyCanvas, false, this.m_FadeTime, this.FadeInEndAction, true, true));
+	}
+
+	private CanvasGroup m_MyCanvas;
+
+	[SerializeField]
+	private int m_CoinRate = 100;
+
+	[SerializeField]
+	private float m_FadeTime = 0.5f;
+
+	[SerializeField]
+	[Header("このUIを呼び出すボタン")]
+	private Button m_ExchangeButton;
+
+	[SerializeField]
+	[Header("所持金表示UI")]
+	private Text m_MoneyUI;
+
+	[SerializeField]
+	[Header("カジノコイン表示UI")]
+	private Text m_CoinUI;
+
+	[SerializeField]
+	[HideInInspector]
+	private MoneySetttingUI m_MoneySetting;
+
+	[SerializeField]
+	[HideInInspector]
+	private Button m_OKButton;
+
+	[SerializeField]
+	[HideInInspector]
+	private Button m_CancelButton;
+
+	public Action FadeInStartAction;
+
+	public Action FadeInEndAction;
+
+	public Action FadeOutStartAction;
+
+	public Action FadeOutEndAction;
+
+	[SerializeField]
+	[Header("レート表示UI")]
+	private Text m_RateText;
+
+	[SerializeField]
+	[Header("残額UI")]
+	private Text m_BalanceText;
+
+	[SerializeField]
+	[Header("現コイン表示UI")]
+	private Text m_CurrentCoin;
+}

+ 30 - 0
Assembly-CSharp/ExampleDragDropItem.cs

@@ -0,0 +1,30 @@
+using System;
+using UnityEngine;
+
+[AddComponentMenu("NGUI/Examples/Drag and Drop Item (Example)")]
+public class ExampleDragDropItem : UIDragDropItem
+{
+	protected override void OnDragDropRelease(GameObject surface)
+	{
+		if (surface != null)
+		{
+			ExampleDragDropSurface component = surface.GetComponent<ExampleDragDropSurface>();
+			if (component != null)
+			{
+				GameObject gameObject = NGUITools.AddChild(component.gameObject, this.prefab);
+				gameObject.transform.localScale = component.transform.localScale;
+				Transform transform = gameObject.transform;
+				transform.position = UICamera.lastWorldPosition;
+				if (component.rotatePlacedObject)
+				{
+					transform.rotation = Quaternion.LookRotation(UICamera.lastHit.normal) * Quaternion.Euler(90f, 0f, 0f);
+				}
+				NGUITools.Destroy(base.gameObject);
+				return;
+			}
+		}
+		base.OnDragDropRelease(surface);
+	}
+
+	public GameObject prefab;
+}

+ 8 - 0
Assembly-CSharp/ExampleDragDropSurface.cs

@@ -0,0 +1,8 @@
+using System;
+using UnityEngine;
+
+[AddComponentMenu("NGUI/Examples/Drag and Drop Surface (Example)")]
+public class ExampleDragDropSurface : MonoBehaviour
+{
+	public bool rotatePlacedObject;
+}

+ 56 - 0
Assembly-CSharp/ExtensionsDictionaryClass.cs

@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public static class ExtensionsDictionaryClass
+{
+	public static string ToJson<TKey, TValue>(this Dictionary<TKey, TValue> source)
+	{
+		return JsonUtility.ToJson(new ExtensionsDictionaryClass.SerializeDictionary<TKey, TValue>(source));
+	}
+
+	public static string ToJson<TKey, TValue>(this Dictionary<TKey, TValue> source, bool prettyPrint)
+	{
+		return JsonUtility.ToJson(new ExtensionsDictionaryClass.SerializeDictionary<TKey, TValue>(source), prettyPrint);
+	}
+
+	public static void FromJson<TKey, TValue>(this Dictionary<TKey, TValue> source, string jsonText)
+	{
+		ExtensionsDictionaryClass.SerializeDictionary<TKey, TValue> serializeDictionary = JsonUtility.FromJson<ExtensionsDictionaryClass.SerializeDictionary<TKey, TValue>>(jsonText);
+		source.Clear();
+		if (serializeDictionary.keys != null)
+		{
+			for (int i = 0; i < serializeDictionary.keys.Length; i++)
+			{
+				source.Add(serializeDictionary.keys[i], serializeDictionary.values[i]);
+			}
+		}
+	}
+
+	[Serializable]
+	public class SerializeDictionary<Tkey, TVal>
+	{
+		public SerializeDictionary(Dictionary<Tkey, TVal> src)
+		{
+			if (src == null)
+			{
+				this.keys = new Tkey[0];
+				this.values = new TVal[0];
+				return;
+			}
+			this.keys = new Tkey[src.Count];
+			this.values = new TVal[src.Count];
+			int num = 0;
+			foreach (KeyValuePair<Tkey, TVal> keyValuePair in src)
+			{
+				this.keys[num] = keyValuePair.Key;
+				this.values[num] = keyValuePair.Value;
+				num++;
+			}
+		}
+
+		public Tkey[] keys;
+
+		public TVal[] values;
+	}
+}

+ 161 - 0
Assembly-CSharp/FFNameDialog.cs

@@ -0,0 +1,161 @@
+using System;
+using UnityEngine;
+
+public class FFNameDialog : MonoBehaviour
+{
+	public bool IsDecided
+	{
+		get
+		{
+			return this.m_bDecided;
+		}
+	}
+
+	public void Init()
+	{
+		this.m_uiPanel = base.gameObject.GetComponent<UIPanel>();
+		this.m_goMsg = UTY.GetChildObject(base.gameObject, "Base/Message", false);
+		this.m_uiMsg = this.m_goMsg.GetComponent<UILabel>();
+		this.m_goSelectA = UTY.GetChildObject(base.gameObject, "Base/SelectA", false);
+		this.m_uiBtnSelectA = this.m_goSelectA.GetComponent<UIButton>();
+		this.m_uiLabelA = UTY.GetChildObject(this.m_goSelectA, "label", false).GetComponent<UILabel>();
+		this.m_goSelectB = UTY.GetChildObject(base.gameObject, "Base/SelectB", false);
+		this.m_uiBtnSelectB = this.m_goSelectB.GetComponent<UIButton>();
+		this.m_uiLabelB = UTY.GetChildObject(this.m_goSelectB, "label", false).GetComponent<UILabel>();
+		EventDelegate.Set(this.m_uiBtnSelectA.onClick, new EventDelegate.Callback(this.OnClickA));
+		EventDelegate.Set(this.m_uiBtnSelectB.onClick, new EventDelegate.Callback(this.OnClickB));
+		base.gameObject.SetActive(false);
+	}
+
+	public void SetOnClickCallBack(string f_strA, FFNameDialog.OnClick f_dgA, string f_strB, FFNameDialog.OnClick f_dgB = null)
+	{
+		this.m_dgOnClickA = f_dgA;
+		this.m_dgOnClickB = f_dgB;
+		if (this.m_dgOnClickA == null)
+		{
+			this.m_dgOnClickA = new FFNameDialog.OnClick(this.OnCloseDefaultEvent);
+		}
+		if (this.m_dgOnClickB == null)
+		{
+			this.m_dgOnClickB = new FFNameDialog.OnClick(this.OnCloseDefaultEvent);
+		}
+		this.m_uiLabelA.text = f_strA;
+		this.m_uiLabelB.text = f_strB;
+	}
+
+	public void Show(string f_strMsg, string f_strA, FFNameDialog.OnClick f_dgA, string f_strB, FFNameDialog.OnClick f_dgB = null)
+	{
+		NDebug.Assert(this.m_bDecided, "ダイアログの二重呼出しはできません。");
+		this.m_uiMsg.text = f_strMsg;
+		this.SetOnClickCallBack(f_strA, f_dgA, f_strB, f_dgB);
+		base.gameObject.SetActive(true);
+		iTween.StopByName(base.gameObject, "ffdlg");
+		iTween.ValueTo(base.gameObject, iTween.Hash(new object[]
+		{
+			"name",
+			"ffdlg",
+			"from",
+			this.m_uiPanel.alpha,
+			"to",
+			1.0,
+			"time",
+			0.3,
+			"onUpdate",
+			"UpdateAlpha"
+		}));
+		this.m_bDecided = false;
+	}
+
+	public void UpdateAlpha(float f_fNewValue)
+	{
+		this.m_uiPanel.alpha = f_fNewValue;
+	}
+
+	public void CompleteHide()
+	{
+		this.Hide();
+	}
+
+	public void Hide()
+	{
+		base.gameObject.SetActive(false);
+		this.m_dgOnClickA = null;
+		this.m_dgOnClickB = null;
+	}
+
+	public void Close()
+	{
+		if (base.gameObject.activeSelf)
+		{
+			iTween.StopByName(base.gameObject, "ffdlg");
+			iTween.ValueTo(base.gameObject, iTween.Hash(new object[]
+			{
+				"name",
+				"ffdlg",
+				"from",
+				this.m_uiPanel.alpha,
+				"to",
+				0.0,
+				"time",
+				0.3,
+				"onUpdate",
+				"UpdateAlpha",
+				"onComplete",
+				"CompleteHide"
+			}));
+		}
+	}
+
+	private void OnClickA()
+	{
+		this.m_bDecided = true;
+		if (this.m_dgOnClickA != null)
+		{
+			FFNameDialog.OnClick dgOnClickA = this.m_dgOnClickA;
+			this.m_dgOnClickA = null;
+			dgOnClickA();
+		}
+	}
+
+	private void OnClickB()
+	{
+		this.m_bDecided = true;
+		if (this.m_dgOnClickB != null)
+		{
+			FFNameDialog.OnClick dgOnClickB = this.m_dgOnClickB;
+			this.m_dgOnClickB = null;
+			dgOnClickB();
+		}
+	}
+
+	private void OnCloseDefaultEvent()
+	{
+		GameMain.Instance.SysDlg.Close();
+	}
+
+	private GameObject m_goSelectA;
+
+	private UIButton m_uiBtnSelectA;
+
+	private UILabel m_uiLabelA;
+
+	private GameObject m_goSelectB;
+
+	private UIButton m_uiBtnSelectB;
+
+	private UILabel m_uiLabelB;
+
+	private GameObject m_goMsg;
+
+	private UILabel m_uiMsg;
+
+	private UIPanel m_uiPanel;
+
+	private FFNameDialog.OnClick m_dgOnClickA;
+
+	private FFNameDialog.OnClick m_dgOnClickB;
+
+	private bool m_bDecided = true;
+
+	public delegate void OnClick();
+}

+ 699 - 0
Assembly-CSharp/FaceWindow.cs

@@ -0,0 +1,699 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using wf;
+
+public class FaceWindow : BaseMaidPhotoWindow
+{
+	public override void Awake()
+	{
+		base.Awake();
+		PhotoFaceData.Create();
+		this.noCharaActive = base.GetComponentInChildren<PhotoNoCharaActive>();
+		Dictionary<string, List<KeyValuePair<string, object>>> dictionary = new Dictionary<string, List<KeyValuePair<string, object>>>();
+		foreach (KeyValuePair<string, List<PhotoFaceData>> keyValuePair in PhotoFaceData.category_list)
+		{
+			if (!dictionary.ContainsKey(keyValuePair.Key))
+			{
+				dictionary.Add(keyValuePair.Key, new List<KeyValuePair<string, object>>());
+			}
+			for (int i = 0; i < keyValuePair.Value.Count; i++)
+			{
+				dictionary[keyValuePair.Key].Add(new KeyValuePair<string, object>(keyValuePair.Value[i].name, keyValuePair.Value[i]));
+			}
+		}
+		this.PopupAndTabList.SetData(dictionary, false);
+		this.PopupAndTabList.onChangePopUpListValue.Add(new Action<KeyValuePair<string, UnityEngine.Object>>(this.OnChangePopUpList));
+		this.PopupAndTabList.onSelect.Add(new Action<object>(this.OnSelectItem));
+		this.SliderFaceToX.onChangeValue.Add(new Action<WindowPartsInputSliderSet.SliderAndInputSet, float>(this.OnChangeSliderXValue));
+		this.SliderFaceToY.onChangeValue.Add(new Action<WindowPartsInputSliderSet.SliderAndInputSet, float>(this.OnChangeSliderYValue));
+		this.CheckBoxEyeToCamera.onClick.Add(new Action<WFCheckBox>(this.OnClickCheckBox));
+		this.CheckBoxFaceToCamera.onClick.Add(new Action<WFCheckBox>(this.OnClickCheckBox));
+		this.CheckOpenMouse.onClick.Add(new Action<WFCheckBox>(this.OnClickCheckBox));
+		this.CheckMorphWindowVisible.onClick.Add(delegate(WFCheckBox check_box)
+		{
+			this.MorphSubWindow.visible = check_box.check;
+		});
+		UTY.GetChildObject(this.content_game_object, "ContentParent/ListParent/DragMat", false).GetComponent<BoxCollider>().enabled = false;
+	}
+
+	public override void Start()
+	{
+		base.Start();
+		this.placement_window_ = (base.mgr.GetWindow(PhotoWindowManager.WindowType.Placement) as PlacementWindow);
+		this.motion_window_ = (base.mgr.GetWindow(PhotoWindowManager.WindowType.Motion) as MotionWindow);
+		this.man_edit_mgr_ = new PhotoManEditManager();
+		List<SceneEdit.SMenuItem>[] array = new List<SceneEdit.SMenuItem>[]
+		{
+			this.man_edit_mgr_.man_head_menu_list,
+			this.man_edit_mgr_.man_body_menu_list
+		};
+		UIWFTabPanel[] array2 = new UIWFTabPanel[]
+		{
+			this.HeadItemTabPanel,
+			this.BodyItemTabPanel
+		};
+		EventDelegate.Callback[] array3 = new EventDelegate.Callback[]
+		{
+			new EventDelegate.Callback(this.OnSelectManHeadItem),
+			new EventDelegate.Callback(this.OnSelectManHeadItem)
+		};
+		for (int i = 0; i < array.Length; i++)
+		{
+			UIWFTabPanel uiwftabPanel = array2[i];
+			EventDelegate.Callback callback = array3[i];
+			foreach (SceneEdit.SMenuItem smenuItem in array[i])
+			{
+				GameObject gameObject = Utility.CreatePrefab(uiwftabPanel.gameObject, "ScenePhotoMode/EditItemIcon", true);
+				if (smenuItem.m_texIcon != null)
+				{
+					Sprite sprite2D = Sprite.Create(smenuItem.m_texIcon, new Rect(0f, 0f, (float)smenuItem.m_texIcon.width, (float)smenuItem.m_texIcon.height), default(Vector2));
+					UI2DSprite componentInChildren = gameObject.GetComponentInChildren<UI2DSprite>();
+					componentInChildren.sprite2D = sprite2D;
+					componentInChildren.SetDimensions(60, 60);
+				}
+				UIWFTabButton component = gameObject.GetComponent<UIWFTabButton>();
+				component.name = smenuItem.m_nMenuFileRID.ToString();
+				EventDelegate.Add(component.onSelect, callback);
+			}
+			Utility.ResetNGUI(uiwftabPanel.GetComponent<UIGrid>());
+			Utility.ResetNGUI(uiwftabPanel.transform.parent.GetComponent<UIScrollView>());
+			uiwftabPanel.UpdateChildren();
+		}
+		this.UpdateChildren();
+		WFCheckBox checkBoxEyeToCamera = this.CheckBoxEyeToCamera;
+		bool flag = false;
+		this.SliderFaceToY.enabled = flag;
+		flag = flag;
+		this.SliderFaceToX.enabled = flag;
+		flag = flag;
+		this.CheckOpenMouse.enabled = flag;
+		flag = flag;
+		this.CheckBoxFaceToCamera.enabled = flag;
+		checkBoxEyeToCamera.enabled = flag;
+		this.add_option_dic_ = new Dictionary<string, WFCheckBox>();
+		Transform transform = UTY.GetChildObject(this.content_game_object.gameObject, "ContentParent/AddOption/Btns", false).transform;
+		for (int j = 0; j < transform.childCount; j++)
+		{
+			WFCheckBox component2 = transform.GetChild(j).GetComponent<WFCheckBox>();
+			component2.check = false;
+			component2.enabled = false;
+			this.add_option_dic_.Add(component2.GetComponentInChildren<UILabel>().text, component2);
+			component2.onClick.Add(new Action<WFCheckBox>(this.OnClickCheckBoxAddOption));
+		}
+		this.CheckOpenMouse.check = false;
+		WFCheckBox checkMorphWindowVisible = this.CheckMorphWindowVisible;
+		flag = false;
+		this.CheckMorphWindowVisible.enabled = flag;
+		checkMorphWindowVisible.check = flag;
+		this.MorphSubWindow.gameObject.SetActive(true);
+		this.MorphSubWindow.SetButtonEnabled(BasePhotoSubWindow.BtnType.End, true, false);
+		this.MorphSubWindow.GetButtonOnClickEventList(BasePhotoSubWindow.BtnType.End).Add(delegate
+		{
+			this.CheckMorphWindowVisible.check = false;
+			foreach (Action<WFCheckBox> action in this.CheckMorphWindowVisible.onClick)
+			{
+				action(this.CheckMorphWindowVisible);
+			}
+		});
+		this.ContentParentMan.SetActive(false);
+		this.FaceMorphInput.SetFaceWindow(this);
+		this.noCharaActive.ChangeMode(true, true);
+	}
+
+	public void OnDestroy()
+	{
+		if (this.man_edit_mgr_ != null)
+		{
+			this.man_edit_mgr_.Destroy();
+		}
+		this.man_edit_mgr_ = null;
+	}
+
+	public void OnClickCheckBoxAddOption(WFCheckBox check_box)
+	{
+		Dictionary<string, string> maidStoreData = base.GetMaidStoreData(base.mgr.select_maid);
+		string[] array = new string[]
+		{
+			"頬染め1",
+			"頬染め2",
+			"頬染め3"
+		};
+		string[] array2 = new string[]
+		{
+			"涙1",
+			"涙2",
+			"涙3"
+		};
+		string[][] array3 = new string[][]
+		{
+			array,
+			array2
+		};
+		foreach (KeyValuePair<string, WFCheckBox> keyValuePair in this.add_option_dic_)
+		{
+			if (keyValuePair.Value == check_box)
+			{
+				maidStoreData[keyValuePair.Key] = check_box.check.ToString();
+				foreach (string array4 in array3)
+				{
+					if (0 <= Array.IndexOf<string>(array4, keyValuePair.Key))
+					{
+						for (int j = 0; j < array4.Length; j++)
+						{
+							if (!(array4[j] == keyValuePair.Key))
+							{
+								if (this.add_option_dic_[array4[j]].check)
+								{
+									this.add_option_dic_[array4[j]].check = false;
+								}
+								maidStoreData[array4[j]] = false.ToString();
+							}
+						}
+					}
+				}
+			}
+		}
+		this.UpdateMaidAddOption();
+	}
+
+	public void OnClickCheckBox(WFCheckBox check_box)
+	{
+		if (base.mgr.select_maid == null)
+		{
+			return;
+		}
+		Dictionary<string, string> maidStoreData = base.GetMaidStoreData(base.mgr.select_maid);
+		if (check_box == this.CheckBoxEyeToCamera)
+		{
+			maidStoreData["eye_to_camera"] = check_box.check.ToString();
+		}
+		else if (check_box == this.CheckBoxFaceToCamera)
+		{
+			maidStoreData["face_to_camera"] = check_box.check.ToString();
+		}
+		else if (check_box == this.CheckOpenMouse)
+		{
+			maidStoreData["open_mouse"] = check_box.check.ToString();
+		}
+		WindowPartsInputSliderSet sliderFaceToX = this.SliderFaceToX;
+		bool enabled = !this.CheckBoxFaceToCamera.check;
+		this.SliderFaceToY.enabled = enabled;
+		sliderFaceToX.enabled = enabled;
+		this.Apply(base.mgr.select_maid);
+	}
+
+	public void UpdateMaidAddOption()
+	{
+		if (base.mgr.select_maid == null)
+		{
+			return;
+		}
+		this.Apply(base.mgr.select_maid);
+	}
+
+	public void OnChangeSliderXValue(WindowPartsInputSliderSet.SliderAndInputSet obj, float val)
+	{
+		if (base.mgr.select_maid == null)
+		{
+			return;
+		}
+		Dictionary<string, string> maidStoreData = base.GetMaidStoreData(base.mgr.select_maid);
+		maidStoreData["face_to_x"] = val.ToString("G9");
+		WindowPartsInputSliderSet sliderFaceToX = this.SliderFaceToX;
+		bool enabled = !this.CheckBoxFaceToCamera.check;
+		this.SliderFaceToY.enabled = enabled;
+		sliderFaceToX.enabled = enabled;
+		this.Apply(base.mgr.select_maid);
+	}
+
+	public void OnChangeSliderYValue(WindowPartsInputSliderSet.SliderAndInputSet obj, float val)
+	{
+		if (base.mgr.select_maid == null)
+		{
+			return;
+		}
+		Dictionary<string, string> maidStoreData = base.GetMaidStoreData(base.mgr.select_maid);
+		maidStoreData["face_to_y"] = val.ToString("G9");
+		WindowPartsInputSliderSet sliderFaceToX = this.SliderFaceToX;
+		bool enabled = !this.CheckBoxFaceToCamera.check;
+		this.SliderFaceToY.enabled = enabled;
+		sliderFaceToX.enabled = enabled;
+		this.Apply(base.mgr.select_maid);
+	}
+
+	public override void OnMaidAddEvent(Maid maid, bool is_deserialize_load)
+	{
+		base.OnMaidAddEvent(maid, is_deserialize_load);
+		Dictionary<string, string> maidStoreData = base.GetMaidStoreData(maid);
+		if (maid.boMAN)
+		{
+			this.man_controller_ = new PhotoManEditManager.Controller(maid);
+			if (!is_deserialize_load)
+			{
+				maidStoreData.Add("color", this.man_controller_.color.ToString());
+				maidStoreData.Add("fat", this.man_controller_.fat.ToString("G9"));
+				maidStoreData.Add("parts_visible", true.ToString());
+				maidStoreData.Add("head_menu_rid", this.man_controller_.head_menu_rid.ToString());
+				maidStoreData.Add("body_menu_rid", this.man_controller_.body_menu_rid.ToString());
+			}
+			else
+			{
+				this.man_controller_.color = Parse.Color(maidStoreData["color"]);
+				this.man_controller_.fat = float.Parse(maidStoreData["fat"]);
+				this.man_controller_.parts_visible = bool.Parse(maidStoreData["parts_visible"]);
+				int num = int.Parse(maidStoreData["head_menu_rid"]);
+				foreach (SceneEdit.SMenuItem smenuItem in this.man_edit_mgr_.man_head_menu_list)
+				{
+					if (num == smenuItem.m_nMenuFileRID)
+					{
+						this.man_controller_.SetMenu(smenuItem);
+						break;
+					}
+				}
+				int num2 = int.Parse(maidStoreData["body_menu_rid"]);
+				foreach (SceneEdit.SMenuItem smenuItem2 in this.man_edit_mgr_.man_head_menu_list)
+				{
+					if (num2 == smenuItem2.m_nMenuFileRID)
+					{
+						this.man_controller_.SetMenu(smenuItem2);
+						this.motion_window_.UpdateAnimationData(this.man_controller_.man);
+						break;
+					}
+				}
+			}
+			this.man_controller_ = null;
+			return;
+		}
+		maid.FaceBlend("オリジナル");
+		if (!is_deserialize_load)
+		{
+			maidStoreData.Clear();
+			maidStoreData.Add("id", PhotoFaceData.init_data.id.ToString());
+			maidStoreData.Add("eye_to_camera", true.ToString());
+			maidStoreData.Add("face_to_camera", true.ToString());
+			maidStoreData.Add("face_to_x", 0.ToString());
+			maidStoreData.Add("face_to_y", 0.ToString());
+			maidStoreData.Add("open_mouse", false.ToString());
+			foreach (KeyValuePair<string, WFCheckBox> keyValuePair in this.add_option_dic_)
+			{
+				maidStoreData.Add(keyValuePair.Key, false.ToString());
+			}
+		}
+		else if (!maidStoreData.ContainsKey("open_mouse"))
+		{
+			maidStoreData.Add("open_mouse", false.ToString());
+		}
+		this.FaceMorphInput.OnMaidAddEvent(maid, is_deserialize_load, maidStoreData);
+		maid.EyeToCamera(Maid.EyeMoveType.目と顔を向ける, 0f);
+		this.Apply(maid);
+	}
+
+	public override void OnMaidChangeEvent(Maid maid)
+	{
+		base.OnMaidChangeEvent(maid);
+		this.PopupAndTabList.ResetSelect();
+		this.PopupAndTabList.gameObject.SetActive(true);
+		this.ContentParentMan.SetActive(false);
+		if (maid == null || maid.boMAN)
+		{
+			if (maid == null)
+			{
+				this.noCharaActive.ChangeMode(true, true);
+			}
+			else
+			{
+				this.noCharaActive.ChangeMode(false, true);
+			}
+			this.MorphSubWindow.gameObject.SetActive(false);
+			WFCheckBox checkMorphWindowVisible = this.CheckMorphWindowVisible;
+			bool flag = false;
+			this.CheckMorphWindowVisible.check = flag;
+			checkMorphWindowVisible.enabled = flag;
+			UTY.GetChildObject(this.content_game_object, "ContentParent/ListParent/DragMat", false).GetComponent<BoxCollider>().enabled = false;
+			this.head_transform_ = null;
+			this.PopupAndTabList.popup_value_list = null;
+			this.PopupAndTabList.SetPopupValue(this.PopupAndTabList.popup_value_list[0].Key);
+			WFCheckBox checkBoxEyeToCamera = this.CheckBoxEyeToCamera;
+			flag = false;
+			this.SliderFaceToY.enabled = flag;
+			flag = flag;
+			this.SliderFaceToX.enabled = flag;
+			flag = flag;
+			this.CheckOpenMouse.enabled = flag;
+			flag = flag;
+			this.CheckBoxFaceToCamera.enabled = flag;
+			checkBoxEyeToCamera.enabled = flag;
+			foreach (KeyValuePair<string, WFCheckBox> keyValuePair in this.add_option_dic_)
+			{
+				WFCheckBox value2 = keyValuePair.Value;
+				flag = false;
+				keyValuePair.Value.enabled = flag;
+				value2.check = flag;
+			}
+			this.CheckOpenMouse.check = false;
+			if (maid != null && maid.boMAN)
+			{
+				this.PopupAndTabList.gameObject.SetActive(false);
+				this.ContentParentMan.SetActive(true);
+				PlacementWindow.ManDataBackup manDataBackup = this.placement_window_.man_backup_data_dic[maid.status.guid];
+				Dictionary<string, string> store_data = base.GetMaidStoreData(maid);
+				this.man_controller_ = new PhotoManEditManager.Controller(maid);
+				this.ManColor.onChangeValue.Clear();
+				this.ManColor.ResetNum = manDataBackup.color;
+				this.ManColor.ColorPalette.SetColor(Parse.Color(store_data["color"]));
+				Action<WindowPartsInputColorrPalette, Color> item = delegate(WindowPartsInputColorrPalette parent, Color color)
+				{
+					if (this.man_controller_ != null)
+					{
+						this.man_controller_.color = color;
+					}
+					store_data["color"] = color.ToString();
+				};
+				this.ManColor.onChangeValue.Add(item);
+				PhotoSliderAndInput sliderAndInput = this.ManFat.GetSliderAndInput("fat");
+				sliderAndInput.onChangeValue.Clear();
+				sliderAndInput.ResetNum = manDataBackup.fat;
+				sliderAndInput.value = float.Parse(store_data["fat"]);
+				Action<float> item2 = delegate(float value)
+				{
+					if (this.man_controller_ != null)
+					{
+						this.man_controller_.fat = value;
+					}
+					store_data["fat"] = value.ToString("G9");
+				};
+				sliderAndInput.onChangeValue.Add(item2);
+				this.PartVisibleCheckBox.onClick.Clear();
+				this.PartVisibleCheckBox.check = bool.Parse(store_data["parts_visible"]);
+				Action<WFCheckBox> item3 = delegate(WFCheckBox check_box)
+				{
+					bool check = check_box.check;
+					if (this.man_controller_ != null)
+					{
+						this.man_controller_.parts_visible = check;
+					}
+					store_data["parts_visible"] = check.ToString();
+				};
+				this.PartVisibleCheckBox.onClick.Add(item3);
+				UIWFTabButton[] componentsInChildren = this.HeadItemTabPanel.GetComponentsInChildren<UIWFTabButton>();
+				foreach (UIWFTabButton uiwftabButton in componentsInChildren)
+				{
+					if (uiwftabButton.name == store_data["head_menu_rid"])
+					{
+						this.HeadItemTabPanel.Select(uiwftabButton);
+						break;
+					}
+				}
+				UIWFTabButton[] componentsInChildren2 = this.BodyItemTabPanel.GetComponentsInChildren<UIWFTabButton>();
+				foreach (UIWFTabButton uiwftabButton2 in componentsInChildren2)
+				{
+					if (uiwftabButton2.name == store_data["body_menu_rid"])
+					{
+						this.BodyItemTabPanel.Select(uiwftabButton2);
+						break;
+					}
+				}
+			}
+		}
+		else
+		{
+			this.noCharaActive.ChangeMode(false, true);
+			this.MorphSubWindow.gameObject.SetActive(true);
+			this.CheckMorphWindowVisible.enabled = true;
+			this.CheckMorphWindowVisible.check = this.MorphSubWindow.visible;
+			UTY.GetChildObject(this.content_game_object, "ContentParent/ListParent/DragMat", false).GetComponent<BoxCollider>().enabled = true;
+			this.head_transform_ = base.mgr.select_maid.body0.GetBone("Bip01 Head");
+			WFCheckBox checkBoxEyeToCamera2 = this.CheckBoxEyeToCamera;
+			bool flag = true;
+			this.SliderFaceToY.enabled = flag;
+			flag = flag;
+			this.SliderFaceToX.enabled = flag;
+			flag = flag;
+			this.CheckOpenMouse.enabled = flag;
+			flag = flag;
+			this.CheckBoxFaceToCamera.enabled = flag;
+			checkBoxEyeToCamera2.enabled = flag;
+			Transform transform = UTY.GetChildObject(this.content_game_object.gameObject, "ContentParent/AddOption/Btns", false).transform;
+			for (int k = 0; k < transform.childCount; k++)
+			{
+				transform.GetChild(k).GetComponent<WFCheckBox>().enabled = true;
+			}
+			Dictionary<string, string> maidStoreData = base.GetMaidStoreData(maid);
+			PhotoFaceData photoFaceData = PhotoFaceData.Get(long.Parse(maidStoreData["id"]));
+			this.PopupAndTabList.popup_value_list = PhotoFaceData.popup_category_list;
+			this.PopupAndTabList.SetPopupValue(photoFaceData.category);
+			this.PopupAndTabList.SetSelectButton(photoFaceData, false);
+			this.CheckBoxEyeToCamera.check = bool.Parse(maidStoreData["eye_to_camera"]);
+			this.CheckBoxFaceToCamera.check = bool.Parse(maidStoreData["face_to_camera"]);
+			this.SliderFaceToX.SetValue("x", float.Parse(maidStoreData["face_to_x"]));
+			this.SliderFaceToY.enabled = true;
+			this.SliderFaceToY.SetValue("y", float.Parse(maidStoreData["face_to_y"]));
+			this.CheckOpenMouse.check = bool.Parse(maidStoreData["open_mouse"]);
+			foreach (KeyValuePair<string, WFCheckBox> keyValuePair2 in this.add_option_dic_)
+			{
+				keyValuePair2.Value.check = bool.Parse(maidStoreData[keyValuePair2.Key]);
+			}
+			if (this.CheckBoxFaceToCamera.check)
+			{
+				WindowPartsInputSliderSet sliderFaceToX = this.SliderFaceToX;
+				flag = false;
+				this.SliderFaceToY.enabled = flag;
+				sliderFaceToX.enabled = flag;
+			}
+			this.Apply(base.mgr.select_maid);
+		}
+	}
+
+	public override void OnMaidRemoveEventPrev(Maid maid)
+	{
+		if (!maid.boMAN)
+		{
+			return;
+		}
+		PlacementWindow.ManDataBackup manDataBackup = this.placement_window_.man_backup_data_dic[maid.status.guid];
+		PhotoManEditManager.Controller controller = new PhotoManEditManager.Controller(maid);
+		controller.color = manDataBackup.color;
+		controller.fat = manDataBackup.fat;
+		controller.parts_visible = true;
+		foreach (SceneEdit.SMenuItem smenuItem in this.man_edit_mgr_.man_head_menu_list)
+		{
+			if (manDataBackup.head_item_rid == smenuItem.m_nMenuFileRID)
+			{
+				controller.SetMenu(smenuItem);
+				break;
+			}
+		}
+	}
+
+	public void OnSelectManHeadItem()
+	{
+		UIWFSelectButton current = UIWFSelectButton.current;
+		if (this.man_controller_ == null || !current.isSelected)
+		{
+			return;
+		}
+		int num = int.Parse(current.name);
+		foreach (SceneEdit.SMenuItem smenuItem in this.man_edit_mgr_.man_head_menu_list)
+		{
+			if (num == smenuItem.m_nMenuFileRID)
+			{
+				this.man_controller_.SetMenu(smenuItem);
+				Dictionary<string, string> maidStoreData = base.GetMaidStoreData(this.man_controller_.man);
+				maidStoreData["head_menu_rid"] = smenuItem.m_nMenuFileRID.ToString();
+				break;
+			}
+		}
+		foreach (SceneEdit.SMenuItem smenuItem2 in this.man_edit_mgr_.man_body_menu_list)
+		{
+			if (num == smenuItem2.m_nMenuFileRID)
+			{
+				bool flag = this.man_controller_.SetMenu(smenuItem2);
+				if (flag)
+				{
+					Dictionary<string, string> maidStoreData2 = this.motion_window_.GetMaidStoreData(this.man_controller_.man);
+					PhotoMotionData motion_data = PhotoMotionData.Get(long.Parse(maidStoreData2["id"]));
+					this.motion_window_.Apply(motion_data, this.man_controller_.man);
+				}
+				Dictionary<string, string> maidStoreData3 = base.GetMaidStoreData(this.man_controller_.man);
+				maidStoreData3["body_menu_rid"] = smenuItem2.m_nMenuFileRID.ToString();
+				break;
+			}
+		}
+	}
+
+	protected void OnChangePopUpList(KeyValuePair<string, UnityEngine.Object> popup_val)
+	{
+	}
+
+	private void OnSelectItem(object select_data_obj)
+	{
+		if (base.mgr.select_maid == null || select_data_obj == null)
+		{
+			return;
+		}
+		PhotoFaceData photoFaceData = select_data_obj as PhotoFaceData;
+		Dictionary<string, string> maidStoreData = base.GetMaidStoreData(base.mgr.select_maid);
+		maidStoreData["id"] = photoFaceData.id.ToString();
+		this.FaceMorphInput.ApplyBackupData(base.mgr.select_maid);
+		photoFaceData.Apply(base.mgr.select_maid);
+		this.Apply(base.mgr.select_maid);
+	}
+
+	private void Apply(Maid maid)
+	{
+		if (maid == null || maid.boMAN)
+		{
+			return;
+		}
+		Dictionary<string, string> maidStoreData = base.GetMaidStoreData(maid);
+		PhotoFaceData photoFaceData = PhotoFaceData.Get(long.Parse(maidStoreData["id"]));
+		photoFaceData.Apply(maid);
+		TMorph.AddBlendType addBlendType = TMorph.AddBlendType.None;
+		Dictionary<string, TMorph.AddBlendType> dictionary = new Dictionary<string, TMorph.AddBlendType>
+		{
+			{
+				"頬染め1",
+				TMorph.AddBlendType.Cheek1
+			},
+			{
+				"頬染め2",
+				TMorph.AddBlendType.Cheek2
+			},
+			{
+				"頬染め3",
+				TMorph.AddBlendType.Cheek3
+			},
+			{
+				"涙1",
+				TMorph.AddBlendType.Tear1
+			},
+			{
+				"涙2",
+				TMorph.AddBlendType.Tear2
+			},
+			{
+				"涙3",
+				TMorph.AddBlendType.Tear3
+			},
+			{
+				"涙(玉)",
+				TMorph.AddBlendType.TearBig
+			},
+			{
+				"涎",
+				TMorph.AddBlendType.Yodare
+			},
+			{
+				"赤面",
+				TMorph.AddBlendType.Blush
+			},
+			{
+				"ショック",
+				TMorph.AddBlendType.Shock
+			}
+		};
+		foreach (KeyValuePair<string, TMorph.AddBlendType> keyValuePair in dictionary)
+		{
+			if (maidStoreData.ContainsKey(keyValuePair.Key) && bool.Parse(maidStoreData[keyValuePair.Key]))
+			{
+				addBlendType |= keyValuePair.Value;
+			}
+		}
+		maid.body0.Face.morph.SetValueOriginalBlendSet(addBlendType);
+		if (bool.Parse(maidStoreData["face_to_camera"]))
+		{
+			maid.EyeToCamera(Maid.EyeMoveType.目と顔を向ける, 0f);
+		}
+		else
+		{
+			Transform bone = maid.body0.GetBone("Bip01 Head");
+			if (bone.Find("face_to_object") == null)
+			{
+				GameObject gameObject = new GameObject();
+				gameObject.name = "face_to_object";
+				gameObject.transform.SetParent(bone);
+				gameObject.transform.localPosition = Vector3.zero;
+				gameObject.transform.localRotation = Quaternion.identity;
+				gameObject.transform.localScale = Vector3.one;
+			}
+			Transform transform = bone.Find("face_to_object");
+			Vector3 localPosition = new Vector3(float.Parse(maidStoreData["face_to_y"]) * -1f * 0.2f, 0.2f, float.Parse(maidStoreData["face_to_x"]) * 0.2f);
+			transform.localPosition = localPosition;
+			maid.EyeToTargetObject(transform, 0f);
+		}
+		maid.OpenMouth(bool.Parse(maidStoreData["open_mouse"]));
+		maid.body0.boEyeToCam = bool.Parse(maidStoreData["eye_to_camera"]);
+		this.FaceMorphInput.SetPhotoFaceData(photoFaceData);
+		this.FaceMorphInput.UpdateGui(maid);
+	}
+
+	public override void OnDeserializeEvent()
+	{
+		List<string> maidStoreGuidList = base.mgr.GetMaidStoreGuidList();
+		for (int i = 0; i < maidStoreGuidList.Count; i++)
+		{
+			Dictionary<string, string> maidStoreData = base.GetMaidStoreData(maidStoreGuidList[i]);
+			if (maidStoreData.Count > 0)
+			{
+				if (maidStoreData.ContainsKey("id"))
+				{
+					PhotoFaceData photoFaceData = PhotoFaceData.Get(long.Parse(maidStoreData["id"]));
+					if (photoFaceData == null)
+					{
+						photoFaceData = PhotoFaceData.init_data;
+					}
+					maidStoreData["id"] = photoFaceData.id.ToString();
+				}
+			}
+		}
+	}
+
+	public PopupAndTabList PopupAndTabList;
+
+	public WFCheckBox CheckBoxEyeToCamera;
+
+	public WFCheckBox CheckBoxFaceToCamera;
+
+	public WindowPartsInputSliderSet SliderFaceToX;
+
+	public WindowPartsInputSliderSet SliderFaceToY;
+
+	public WFCheckBox CheckOpenMouse;
+
+	[SerializeField]
+	[Header("モーフオプション")]
+	public BasePhotoSubWindow MorphSubWindow;
+
+	public WindowPartsFaceMorph FaceMorphInput;
+
+	public WFCheckBox CheckMorphWindowVisible;
+
+	[SerializeField]
+	[Header("男オプション")]
+	public GameObject ContentParentMan;
+
+	public WindowPartsInputColorrPalette ManColor;
+
+	public WindowPartsInputSliderSet ManFat;
+
+	public WFCheckBox PartVisibleCheckBox;
+
+	public UIWFTabPanel HeadItemTabPanel;
+
+	public UIWFTabPanel BodyItemTabPanel;
+
+	private PhotoNoCharaActive noCharaActive;
+
+	private PlacementWindow placement_window_;
+
+	private MotionWindow motion_window_;
+
+	private Dictionary<string, WFCheckBox> add_option_dic_;
+
+	private Transform head_transform_;
+
+	private PhotoManEditManager man_edit_mgr_;
+
+	private PhotoManEditManager.Controller man_controller_;
+}

File diff suppressed because it is too large
+ 1616 - 0
Assembly-CSharp/Facility.cs


File diff suppressed because it is too large
+ 1290 - 0
Assembly-CSharp/FacilityDataTable.cs


+ 154 - 0
Assembly-CSharp/FacilityFlag/DataArray.cs

@@ -0,0 +1,154 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+namespace FacilityFlag
+{
+	public class DataArray<TKey, TValue>
+	{
+		public DataArray()
+		{
+			this.m_TempDataArray = new Dictionary<TKey, TValue>();
+		}
+
+		public DataArray(Dictionary<TKey, TValue> dataArray)
+		{
+			this.m_TempDataArray = dataArray;
+		}
+
+		public void Serialize(BinaryWriter brWrite, Converter<TKey, byte[]> converter_key, Converter<TValue, byte[]> converter_value)
+		{
+			brWrite.Write("CM3D21_TEMP_FLAG");
+			int count = this.m_TempDataArray.Count;
+			List<TKey> list = new List<TKey>(this.m_TempDataArray.Keys);
+			List<TValue> list2 = new List<TValue>(this.m_TempDataArray.Values);
+			brWrite.Write(count);
+			for (int i = 0; i < count; i++)
+			{
+				byte[] array = converter_key(list[i]);
+				brWrite.Write(array, 0, array.Length);
+				array = converter_value(list2[i]);
+				brWrite.Write(array, 0, array.Length);
+			}
+		}
+
+		public void Deserialize(BinaryReader brRead, Func<BinaryReader, TKey> func_read_key, Func<BinaryReader, TValue> func_read_value)
+		{
+			string text = brRead.ReadString();
+			NDebug.Assert(text == "CM3D21_TEMP_FLAG", string.Format("セーブデータのヘッダーが不正な値です\n{0}", text));
+			this.Clear();
+			int num = brRead.ReadInt32();
+			for (int i = 0; i < num; i++)
+			{
+				TKey key = func_read_key(brRead);
+				TValue value = func_read_value(brRead);
+				this.Add(key, value, true);
+			}
+		}
+
+		public static bool Skip(BinaryReader brRead, Func<BinaryReader, TKey> func_read_key, Func<BinaryReader, TValue> func_read_value)
+		{
+			long position = 0L;
+			bool result;
+			try
+			{
+				position = brRead.BaseStream.Position;
+				string text = brRead.ReadString();
+				if (text != "CM3D21_TEMP_FLAG")
+				{
+					throw new Exception(string.Format("セーブデータのヘッダーが不正な値です\n{0}", text));
+				}
+				int num = brRead.ReadInt32();
+				for (int i = 0; i < num; i++)
+				{
+					func_read_key(brRead);
+					func_read_value(brRead);
+				}
+				result = true;
+			}
+			catch (Exception ex)
+			{
+				Debug.LogWarning(ex.Message + "\n関数呼び出し前の位置へ戻ります。");
+				brRead.BaseStream.Position = position;
+				result = false;
+			}
+			return result;
+		}
+
+		public int Count()
+		{
+			return this.m_TempDataArray.Count;
+		}
+
+		public bool Contains(TKey key)
+		{
+			return this.m_TempDataArray.ContainsKey(key);
+		}
+
+		public bool Add(TKey key, TValue value, bool enableOverWrite = true)
+		{
+			if (this.Contains(key))
+			{
+				if (!enableOverWrite)
+				{
+					return false;
+				}
+				this.m_TempDataArray[key] = value;
+			}
+			else
+			{
+				this.m_TempDataArray.Add(key, value);
+			}
+			return true;
+		}
+
+		public TValue Get(TKey key, bool enableCheckWarning = false)
+		{
+			if (this.Contains(key))
+			{
+				return this.m_TempDataArray[key];
+			}
+			NDebug.Warning(!enableCheckWarning, string.Format("フラグ「{0}」は存在しません。", key));
+			return default(TValue);
+		}
+
+		public bool Remove(TKey key, bool enableCheckWarning = false)
+		{
+			if (this.Contains(key))
+			{
+				this.m_TempDataArray.Remove(key);
+				return true;
+			}
+			NDebug.Warning(!enableCheckWarning, string.Format("フラグ「{0}」は存在しません。", key));
+			return false;
+		}
+
+		public void Clear()
+		{
+			this.m_TempDataArray.Clear();
+		}
+
+		public void Loop(Action<int, TKey, TValue> callback)
+		{
+			int count = this.m_TempDataArray.Count;
+			List<TKey> list = new List<TKey>(this.m_TempDataArray.Keys);
+			List<TValue> list2 = new List<TValue>(this.m_TempDataArray.Values);
+			for (int i = 0; i < count; i++)
+			{
+				callback(i, list[i], list2[i]);
+			}
+		}
+
+		public Dictionary<TKey, TValue> Copy()
+		{
+			return new Dictionary<TKey, TValue>(this.m_TempDataArray);
+		}
+
+		public void DebugLogConsole()
+		{
+		}
+
+		protected readonly Dictionary<TKey, TValue> m_TempDataArray;
+	}
+}

+ 254 - 0
Assembly-CSharp/FacilityFlag/Util.cs

@@ -0,0 +1,254 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using UnityEngine;
+
+namespace FacilityFlag
+{
+	public static class Util
+	{
+		public static bool ToBoolean(BinaryReader br)
+		{
+			return br.ReadBoolean();
+		}
+
+		public static byte ToByte(BinaryReader br)
+		{
+			return br.ReadByte();
+		}
+
+		public static short ToInt16(BinaryReader br)
+		{
+			return br.ReadInt16();
+		}
+
+		public static int ToInt32(BinaryReader br)
+		{
+			return br.ReadInt32();
+		}
+
+		public static long ToInt64(BinaryReader br)
+		{
+			return br.ReadInt64();
+		}
+
+		public static char ToChar(BinaryReader br)
+		{
+			return br.ReadChar();
+		}
+
+		public static decimal ToDecimal(BinaryReader br)
+		{
+			return br.ReadDecimal();
+		}
+
+		public static double ToDouble(BinaryReader br)
+		{
+			return br.ReadDouble();
+		}
+
+		public static float ToSingle(BinaryReader br)
+		{
+			return br.ReadSingle();
+		}
+
+		public static string ToString(BinaryReader br)
+		{
+			return br.ReadString();
+		}
+
+		public static ushort ToUInt16(BinaryReader br)
+		{
+			return br.ReadUInt16();
+		}
+
+		public static uint ToUInt32(BinaryReader br)
+		{
+			return br.ReadUInt32();
+		}
+
+		public static ulong ToUInt64(BinaryReader br)
+		{
+			return br.ReadUInt64();
+		}
+
+		public static SimpleExperienceSystem ToSimpleExp(BinaryReader br)
+		{
+			SimpleExperienceSystem simpleExperienceSystem = new SimpleExperienceSystem();
+			simpleExperienceSystem.Deserialize(br, 0);
+			return simpleExperienceSystem;
+		}
+
+		public static byte[] GetBytes(string value)
+		{
+			byte[] bytes = Encoding.UTF8.GetBytes(value);
+			int value2 = bytes.Length;
+			byte[] array = Util.CreatePrefix(value2);
+			return Util.AppendBuffer(new Array[]
+			{
+				array,
+				bytes
+			});
+		}
+
+		public static byte[] GetBytes(float value)
+		{
+			return BitConverter.GetBytes(value);
+		}
+
+		public static byte[] GetBytes(ulong value)
+		{
+			return BitConverter.GetBytes(value);
+		}
+
+		public static byte[] GetBytes(uint value)
+		{
+			return BitConverter.GetBytes(value);
+		}
+
+		public static byte[] GetBytes(ushort value)
+		{
+			return BitConverter.GetBytes(value);
+		}
+
+		public static byte[] GetBytes(long value)
+		{
+			return BitConverter.GetBytes(value);
+		}
+
+		public static byte[] GetBytes(double value)
+		{
+			return BitConverter.GetBytes(value);
+		}
+
+		public static byte[] GetBytes(short value)
+		{
+			return BitConverter.GetBytes(value);
+		}
+
+		public static byte[] GetBytes(char value)
+		{
+			return BitConverter.GetBytes(value);
+		}
+
+		public static byte[] GetBytes(bool value)
+		{
+			return BitConverter.GetBytes(value);
+		}
+
+		public static byte[] GetBytes(int value)
+		{
+			return BitConverter.GetBytes(value);
+		}
+
+		public static byte[] GetBytes(SimpleExperienceSystem simpleExp)
+		{
+			byte[] result;
+			try
+			{
+				using (MemoryStream memoryStream = new MemoryStream())
+				{
+					using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
+					{
+						simpleExp.Serialize(binaryWriter);
+					}
+					byte[] array = memoryStream.ToArray();
+					result = array;
+				}
+			}
+			catch
+			{
+				result = new byte[0];
+			}
+			return result;
+		}
+
+		public static byte[] CreatePrefix(int value)
+		{
+			List<byte> prefixBytes = new List<byte>();
+			byte b = 0;
+			Action f = null;
+			f = delegate
+			{
+				b = (byte)(value & 127);
+				value >>= 7;
+				b |= ((value <= 0) ? 0 : 128);
+				prefixBytes.Add(b);
+				if ((b & 128) > 0)
+				{
+					f();
+				}
+			};
+			f();
+			return prefixBytes.ToArray();
+		}
+
+		public static int GetPrefix(byte[] buffer, long readStartPos)
+		{
+			Func<int, int> f = null;
+			byte b = 0;
+			f = delegate(int callCount)
+			{
+				b = buffer[(int)(checked((IntPtr)(unchecked(readStartPos + (long)callCount))))];
+				int num = (int)(b & 127);
+				num <<= callCount * 7;
+				if ((b & 128) == 128)
+				{
+					num += f(callCount + 1);
+				}
+				return num;
+			};
+			return f(0);
+		}
+
+		public static int GetPrefix(Stream stream, long readStartPos, bool isEnableSeek = false)
+		{
+			long position = stream.Position;
+			Func<int, int> f = null;
+			byte b = 0;
+			f = delegate(int callCount)
+			{
+				b = (byte)stream.ReadByte();
+				int num = (int)(b & 127);
+				num <<= callCount * 7;
+				if ((b & 128) == 128)
+				{
+					num += f(callCount + 1);
+				}
+				return num;
+			};
+			int result = f(0);
+			if (!isEnableSeek)
+			{
+				stream.Seek(position, SeekOrigin.Begin);
+			}
+			return result;
+		}
+
+		public static byte[] AppendBuffer(params Array[] bufferArray)
+		{
+			try
+			{
+				long num = 0L;
+				for (int i = 0; i < bufferArray.Length; i++)
+				{
+					num += ((byte[])bufferArray[i]).LongLength;
+				}
+				byte[] array = new byte[num];
+				int num2 = 0;
+				for (int j = 0; j < bufferArray.Length; j++)
+				{
+					Buffer.BlockCopy(bufferArray[j], 0, array, num2, bufferArray[j].Length);
+					num2 += bufferArray[j].Length;
+				}
+				return array;
+			}
+			catch (Exception message)
+			{
+				Debug.LogError(message);
+			}
+			return null;
+		}
+	}
+}

+ 396 - 0
Assembly-CSharp/FacilityInfoUI.cs

@@ -0,0 +1,396 @@
+using System;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class FacilityInfoUI : MonoBehaviour
+{
+	public FacilityInfoUI.ViewType viewType
+	{
+		get
+		{
+			return this.m_ViewType;
+		}
+		set
+		{
+			this.m_ViewType = value;
+			this.UpdateViewTypeUI();
+		}
+	}
+
+	public InputField textFacilityName
+	{
+		get
+		{
+			return this.m_TextFacilityName;
+		}
+		set
+		{
+			this.m_TextFacilityName = value;
+		}
+	}
+
+	public Image imageFacilityThumbnail
+	{
+		get
+		{
+			return this.m_ImageFacilityThumbnail;
+		}
+	}
+
+	public Facility facility
+	{
+		get
+		{
+			return this.m_Facility;
+		}
+	}
+
+	public void SetFacilityInfo(Facility facility, bool nullCheck = true)
+	{
+		ScheduleMgr.ScheduleTime scheduleTime = (!GameMain.Instance.CharacterMgr.status.isDaytime) ? ScheduleMgr.ScheduleTime.Night : ScheduleMgr.ScheduleTime.DayTime;
+		ScheduleMgr.ScheduleTime nowScheduleTime = this.m_NowScheduleTime;
+		if (nowScheduleTime != ScheduleMgr.ScheduleTime.DayTime)
+		{
+			if (nowScheduleTime == ScheduleMgr.ScheduleTime.Night)
+			{
+				scheduleTime = this.m_NowScheduleTime;
+			}
+		}
+		else
+		{
+			scheduleTime = this.m_NowScheduleTime;
+		}
+		this.SetFacilityInfo(facility, scheduleTime, nullCheck);
+	}
+
+	public void SetFacilityInfo(Facility facility, ScheduleMgr.ScheduleTime scheduleTime, bool nullCheck = true)
+	{
+		this.m_Facility = facility;
+		string text = string.Empty;
+		string text2 = string.Empty;
+		string text3 = string.Empty;
+		string text4 = string.Empty;
+		string text5 = string.Empty;
+		string text6 = string.Empty;
+		string text7 = string.Empty;
+		Sprite sprite = null;
+		int itemCount;
+		int itemCount2;
+		if (this.m_Facility)
+		{
+			text = this.m_Facility.facilityName;
+			text2 = this.m_Facility.NowMaidCount(scheduleTime).ToString();
+			text3 = this.m_Facility.minMaidCount.ToString();
+			text4 = this.m_Facility.maxMaidCount.ToString();
+			text5 = this.m_Facility.defaultData.cost.ToString();
+			text6 = this.m_Facility.facilityLevel.ToString();
+			itemCount = this.m_Facility.defaultData.rank;
+			itemCount2 = this.m_Facility.GetStaffRank(scheduleTime);
+			if (this.m_Facility.defaultData.isBusiness)
+			{
+				text7 = ((!this.m_Facility.IsOperation(scheduleTime)) ? "未稼働" : "営業可能");
+			}
+			else
+			{
+				text7 = ((!this.m_Facility.IsOperation(scheduleTime)) ? "未稼働" : "稼働中");
+			}
+			sprite = FacilityDataTable.GetFacilityThumbnail(this.m_Facility.param.typeID, true);
+		}
+		else
+		{
+			text = "空き部屋";
+			text2 = "---";
+			text3 = "---";
+			text4 = "---";
+			text5 = "---";
+			text6 = "--";
+			text7 = "---";
+			itemCount = 0;
+			itemCount2 = 0;
+		}
+		if (this.m_TextFacilityName)
+		{
+			this.m_TextFacilityName.text = text;
+		}
+		if (this.m_ImageFacilityThumbnail)
+		{
+			this.m_ImageFacilityThumbnail.sprite = sprite;
+		}
+		if (this.m_TextNumberOfPeople)
+		{
+			this.m_TextNumberOfPeople.text = text2;
+		}
+		if (this.m_TextNumberOfMinPeople)
+		{
+			this.m_TextNumberOfMinPeople.text = text3;
+		}
+		if (this.m_TextNumberOfMaxPeople)
+		{
+			this.m_TextNumberOfMaxPeople.text = text4;
+		}
+		if (this.m_TextNumberOfCost)
+		{
+			this.m_TextNumberOfCost.text = text5;
+		}
+		if (this.m_TextLevelOfFacility)
+		{
+			this.m_TextLevelOfFacility.text = text6;
+		}
+		if (this.m_TextStatusOfFacility)
+		{
+			this.m_TextStatusOfFacility.text = text7;
+		}
+		if (this.m_uGUIListRankStar)
+		{
+			this.m_uGUIListRankStar.Show<Transform>(itemCount, null);
+		}
+		if (this.m_uGUIListStaffStar)
+		{
+			this.m_uGUIListStaffStar.Show<Transform>(itemCount2, null);
+		}
+	}
+
+	public void UpdateFacilityInfo(bool nullCheck = true)
+	{
+		this.SetFacilityInfo(this.m_Facility, nullCheck);
+	}
+
+	public void UpdateFacilityInfo(ScheduleMgr.ScheduleTime scheduleTime, bool nullCheck = true)
+	{
+		this.m_NowScheduleTime = scheduleTime;
+		this.SetFacilityInfo(this.m_Facility, scheduleTime, nullCheck);
+	}
+
+	public bool IsInteractable
+	{
+		get
+		{
+			return this.m_IsInteractable;
+		}
+		set
+		{
+			this.m_IsInteractable = value;
+			Selectable componentInChildren = base.GetComponentInChildren<Selectable>();
+			if (componentInChildren != null)
+			{
+				componentInChildren.interactable = this.m_IsInteractable;
+			}
+			Graphic componentInChildren2 = base.GetComponentInChildren<Graphic>();
+			if (componentInChildren2 != null)
+			{
+				componentInChildren2.raycastTarget = this.m_IsInteractable;
+			}
+			GameObject childObject = UTY.GetChildObject(base.gameObject, "Image Inactive mask", true);
+			if (childObject)
+			{
+				childObject.SetActive(!this.m_IsInteractable);
+			}
+		}
+	}
+
+	public void SetNameChangeEnable(bool enable)
+	{
+		this.m_TextFacilityName.interactable = enable;
+	}
+
+	public void SetMaidIcon(Maid maid, ScheduleMgr.ScheduleTime scheduleTime)
+	{
+		if (this.m_MaidIconObject == null)
+		{
+			return;
+		}
+		if (this.m_Facility == null)
+		{
+			return;
+		}
+		if (maid == null)
+		{
+			this.SetMaidIconShowFlag(false);
+			return;
+		}
+		RawImage componentInChildren = this.m_MaidIconObject.GetComponentInChildren<RawImage>();
+		if (componentInChildren == null)
+		{
+			Debug.LogWarning("メイドの顔アイコン表示オブジェクトが見つかりませんでした。");
+			return;
+		}
+		bool flag = this.IsAllocationMaid(maid, scheduleTime);
+		Texture texture = null;
+		if (maid != null && flag)
+		{
+			texture = maid.GetThumIcon();
+		}
+		componentInChildren.texture = texture;
+		this.SetMaidIconShowFlag(texture != null);
+	}
+
+	public bool IsAllocationMaid(Maid maid, ScheduleMgr.ScheduleTime scheduleTime)
+	{
+		return !(this.m_Facility == null) && !(maid == null) && this.m_Facility.IsAllocationMaid(maid, scheduleTime);
+	}
+
+	public void SetMaidIconShowFlag(bool isShow)
+	{
+		if (this.m_MaidIconObject == null)
+		{
+			return;
+		}
+		if (isShow)
+		{
+			if (!this.m_MaidIconObject.activeSelf)
+			{
+				this.m_MaidIconObject.SetActive(true);
+			}
+		}
+		else if (this.m_MaidIconObject.activeSelf)
+		{
+			this.m_MaidIconObject.SetActive(false);
+		}
+	}
+
+	private void UpdateViewTypeUI()
+	{
+		if (this.m_ViewType == FacilityInfoUI.ViewType.Free)
+		{
+			return;
+		}
+		bool active = false;
+		bool active2 = false;
+		bool active3 = false;
+		bool active4 = false;
+		bool active5 = false;
+		bool active6 = false;
+		bool active7 = false;
+		bool active8 = false;
+		switch (this.m_ViewType)
+		{
+		case FacilityInfoUI.ViewType.DefaultMode:
+		case FacilityInfoUI.ViewType.MiniDefaultMode:
+			active2 = (active = (active3 = (active4 = (active5 = true))));
+			break;
+		case FacilityInfoUI.ViewType.MaidAllocateMode:
+			active2 = (active = (active3 = (active6 = (active4 = true))));
+			break;
+		case FacilityInfoUI.ViewType.ConstructMode:
+			active6 = (active = (active7 = (active4 = (active8 = true))));
+			break;
+		}
+		if (this.m_uGUIListRankStar)
+		{
+			this.m_uGUIListRankStar.gameObject.SetActive(active);
+		}
+		if (this.m_uGUIListStaffStar)
+		{
+			this.m_uGUIListStaffStar.gameObject.SetActive(active2);
+		}
+		if (this.m_TextNumberOfPeople)
+		{
+			this.m_TextNumberOfPeople.gameObject.SetActive(active3);
+		}
+		if (this.m_TextLevelOfFacility)
+		{
+			this.m_TextLevelOfFacility.gameObject.SetActive(active4);
+		}
+		if (this.m_TextStatusOfFacility)
+		{
+			this.m_TextStatusOfFacility.gameObject.SetActive(active5);
+		}
+		if (this.m_TextNumberOfMinPeople)
+		{
+			this.m_TextNumberOfMinPeople.gameObject.SetActive(active6);
+		}
+		if (this.m_TextNumberOfMaxPeople)
+		{
+			this.m_TextNumberOfMaxPeople.gameObject.SetActive(active7);
+		}
+		if (this.m_TextNumberOfCost)
+		{
+			this.m_TextNumberOfCost.gameObject.SetActive(active8);
+		}
+		Image image = null;
+		GameObject childObject = UTY.GetChildObject(base.gameObject, "Parent Info", true);
+		if (childObject != null)
+		{
+			image = childObject.GetComponent<Image>();
+		}
+		if (image == null)
+		{
+			image = base.gameObject.GetComponent<Image>();
+		}
+		if (image != null)
+		{
+			image.sprite = this.GetViewTypePlate(this.m_ViewType);
+		}
+	}
+
+	private Sprite GetViewTypePlate(FacilityInfoUI.ViewType viewType)
+	{
+		Sprite result = null;
+		switch (viewType)
+		{
+		case FacilityInfoUI.ViewType.DefaultMode:
+			result = Resources.Load<Sprite>("SceneFacilityPowerUp/Sprites/myroom_info_plate");
+			break;
+		case FacilityInfoUI.ViewType.MaidAllocateMode:
+			result = Resources.Load<Sprite>("SceneFacilityManagement/Sprites/shisetsu_infoplate_s2");
+			break;
+		case FacilityInfoUI.ViewType.ConstructMode:
+			result = Resources.Load<Sprite>("SceneFacilityPowerUp/Sprites/myroom_info_plate2");
+			break;
+		case FacilityInfoUI.ViewType.MiniDefaultMode:
+			result = Resources.Load<Sprite>("SceneFacilityManagement/Sprites/shisetsu_infoplate_s");
+			break;
+		}
+		return result;
+	}
+
+	private FacilityInfoUI.ViewType m_ViewType = FacilityInfoUI.ViewType.Free;
+
+	[SerializeField]
+	protected InputField m_TextFacilityName;
+
+	[SerializeField]
+	protected Image m_ImageFacilityThumbnail;
+
+	[SerializeField]
+	protected Text m_TextNumberOfPeople;
+
+	[SerializeField]
+	protected Text m_TextLevelOfFacility;
+
+	[SerializeField]
+	protected Text m_TextStatusOfFacility;
+
+	[SerializeField]
+	protected uGUIListViewer m_uGUIListRankStar;
+
+	[SerializeField]
+	protected uGUIListViewer m_uGUIListStaffStar;
+
+	[SerializeField]
+	protected Text m_TextNumberOfMinPeople;
+
+	[SerializeField]
+	protected Text m_TextNumberOfMaxPeople;
+
+	[SerializeField]
+	protected Text m_TextNumberOfCost;
+
+	[SerializeField]
+	protected GameObject m_MaidIconObject;
+
+	private ScheduleMgr.ScheduleTime m_NowScheduleTime = (ScheduleMgr.ScheduleTime)(-1);
+
+	protected Facility m_Facility;
+
+	private bool m_IsInteractable = true;
+
+	public enum ViewType
+	{
+		DefaultMode,
+		MaidAllocateMode,
+		ConstructMode,
+		MiniDefaultMode,
+		Free
+	}
+}

File diff suppressed because it is too large
+ 1185 - 0
Assembly-CSharp/FacilityManager.cs


+ 324 - 0
Assembly-CSharp/FacilityPowerUpManager.cs

@@ -0,0 +1,324 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class FacilityPowerUpManager : MonoBehaviour
+{
+	public Facility selectingFacility
+	{
+		get
+		{
+			return this.m_SelectingFacility;
+		}
+		set
+		{
+			this.m_SelectingFacility = value;
+		}
+	}
+
+	private void Start()
+	{
+		this.SetUpBackGroundAndCamera();
+		this.GetTagBackup();
+		this.OpenFacilityUIList();
+		this.SetOKButtonEnable(this.IsOKButtonEnable());
+		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
+		Maid maid = null;
+		if (characterMgr.GetMaidCount() > 0 && characterMgr.GetMaid(0))
+		{
+			maid = characterMgr.GetMaid(0);
+		}
+		else
+		{
+			Debug.LogWarning("メイド0番の取得に失敗しました。");
+		}
+		this.m_Maid = maid;
+		for (int i = 0; i < characterMgr.GetMaidCount(); i++)
+		{
+			if (characterMgr.GetMaid(i) != null)
+			{
+				characterMgr.GetMaid(i).Visible = false;
+			}
+		}
+		if (!uGUITutorialPanel.IsOpened())
+		{
+			uGUITutorialPanel.OpenTutorial("SceneFacilityPowerUp", null, false);
+		}
+	}
+
+	private void SetUpBackGroundAndCamera()
+	{
+		GameMain.Instance.BgMgr.ChangeBg("EmpireClub_Entrance");
+		GameMain.Instance.MainCamera.FadeIn(0.5f, false, null, true, true, default(Color));
+		CameraMain mainCamera = GameMain.Instance.MainCamera;
+		GameMain.Instance.MainLight.Reset();
+		mainCamera.Reset(CameraMain.CameraType.Target, true);
+		this.m_CachedMainCameraControlEnabled = mainCamera.GetControl();
+		mainCamera.SetControl(false);
+	}
+
+	public void OpenFacilityUIList()
+	{
+		this.m_FacilityUIList.Show();
+		this.SetOKButtonEnable(this.IsOKButtonEnable());
+		this.m_FacilityUIInfo.gameObject.SetActive(false);
+	}
+
+	public void OpenFacilityUIPowerUpList(Facility facility)
+	{
+		this.selectingFacility = facility;
+		this.m_FacilityUIPowerUpList.Show(facility, delegate(Facility.PowerUpRecipe powerUpRecipe)
+		{
+			this.OpenFacilityUIMaterialList(powerUpRecipe.id);
+			this.OpenFacilityUIPreviousDefaultParams(powerUpRecipe.id);
+			this.OpenFacilityUINextDefaultParams(powerUpRecipe.id);
+			this.OpenFacilityUIPreviousAdditionalParams(powerUpRecipe.id);
+		});
+		this.m_NowRecipeData = null;
+		this.m_FacilityUIPowerUpMaterialList.DeleteDropdown();
+		this.m_FacilityUIPreviousParams.ResetDefaultParam();
+		this.m_FacilityUIPreviousParams.ResetAdditionalParam();
+		this.m_FacilityUINextParams.ResetDefaultParam();
+		this.m_FacilityUINextParams.ResetAdditionalParam();
+		this.SetOKButtonEnable(this.IsOKButtonEnable());
+	}
+
+	public void OpenFacilityUIMaterialList(int recipeID)
+	{
+		this.m_NowRecipeData = new Facility.RecipeData(recipeID);
+		this.m_FacilityUIPowerUpMaterialList.Show(recipeID, this.selectingFacility, delegate(int[] materialIDArray)
+		{
+			this.OpenFacilityUINextAdditionalParams(materialIDArray);
+		});
+		this.SetOKButtonEnable(this.IsOKButtonEnable());
+	}
+
+	public void OpenFacilityUIPreviousDefaultParams(int recipeID)
+	{
+		this.m_FacilityUIPreviousParams.Show(recipeID);
+		this.SetOKButtonEnable(this.IsOKButtonEnable());
+	}
+
+	public void OpenFacilityUIPreviousAdditionalParams(int recipeID)
+	{
+		Facility selectingFacility = this.m_SelectingFacility;
+		Facility.RecipeData recipeData = selectingFacility.GetRecipeData(recipeID);
+		Facility.FacilityParameter parameter = Facility.RecipeData.CalcFacilityParameter(recipeData);
+		this.m_FacilityUIPreviousParams.UpdateAdditionalParams(parameter);
+		this.SetOKButtonEnable(this.IsOKButtonEnable());
+	}
+
+	public void OpenFacilityUINextDefaultParams(int recipeID)
+	{
+		this.m_FacilityUINextParams.Show(recipeID);
+		this.SetOKButtonEnable(this.IsOKButtonEnable());
+	}
+
+	public void OpenFacilityUINextAdditionalParams(params int[] materialID)
+	{
+		Facility.FacilityParameter previous = new Facility.FacilityParameter();
+		Facility.FacilityParameter next = new Facility.FacilityParameter();
+		Facility.RecipeData recipeData = this.m_SelectingFacility.GetRecipeData(this.m_NowRecipeData.id);
+		if (recipeData != null)
+		{
+			previous = Facility.RecipeData.CalcFacilityParameter(recipeData);
+		}
+		next = Facility.RecipeData.CalcFacilityParameter(materialID);
+		this.m_FacilityUINextParams.UpdateAdditionalParamsComparison(previous, next);
+		if (materialID != null && this.m_NowRecipeData != null)
+		{
+			this.m_NowRecipeData.materialIDArray = materialID;
+		}
+		this.SetOKButtonEnable(this.IsOKButtonEnable());
+	}
+
+	public void RefreshAllFacilityUI()
+	{
+		this.m_SelectingFacility = null;
+		this.m_NowRecipeData = null;
+		this.m_FacilityUIList.Show();
+		this.m_FacilityUIPowerUpList.Hide();
+		this.m_FacilityUIPowerUpMaterialList.DeleteDropdown();
+		this.m_FacilityUIPreviousParams.ResetDefaultParam();
+		this.m_FacilityUIPreviousParams.ResetAdditionalParam();
+		this.m_FacilityUINextParams.ResetDefaultParam();
+		this.m_FacilityUINextParams.ResetAdditionalParam();
+		this.SetOKButtonEnable(this.IsOKButtonEnable());
+	}
+
+	public void ButtonEventOK()
+	{
+		if (!GameMain.Instance.SysDlg.IsDecided)
+		{
+			return;
+		}
+		uGUIUtility.SetActiveEventSystem(false);
+		GameMain.Instance.SysDlg.Show("施設の強化を実行しますか?", SystemDialog.TYPE.YES_NO, delegate
+		{
+			GameMain.Instance.SysDlg.Close();
+			this.m_SelectingFacility.SetRecipeData(this.m_NowRecipeData);
+			if (this.m_Maid != null && this.m_SelectingFacility != null && this.m_NowRecipeData != null)
+			{
+				GameMain.Instance.FacilityMgr.AddCacheFacilityPowewrUpResult(this.m_Maid, this.m_SelectingFacility, this.m_NowRecipeData);
+			}
+			int facilityAchievement = GameMain.Instance.FacilityMgr.GetFacilityAchievement<int>("施設強化回数");
+			GameMain.Instance.FacilityMgr.SetFacilityAchievement("施設強化回数", (facilityAchievement + 1).ToString());
+			uGUIUtility.SetActiveEventSystem(true);
+			this.SceneClose(delegate
+			{
+				this.JumpLabel(this.m_strScriptLabelPowerUp);
+			});
+		}, delegate
+		{
+			GameMain.Instance.SysDlg.Close();
+			uGUIUtility.SetActiveEventSystem(true);
+		});
+	}
+
+	public void ButtonEventEXIT()
+	{
+		if (!GameMain.Instance.SysDlg.IsDecided)
+		{
+			return;
+		}
+		uGUIUtility.SetActiveEventSystem(false);
+		GameMain.Instance.SysDlg.Show("施設の強化をせずに終了します。\nよろしいですか?", SystemDialog.TYPE.YES_NO, delegate
+		{
+			GameMain.Instance.SysDlg.Close();
+			uGUIUtility.SetActiveEventSystem(true);
+			this.SceneClose(delegate
+			{
+				this.JumpLabel(this.m_strScriptLabelReturn);
+			});
+		}, delegate
+		{
+			GameMain.Instance.SysDlg.Close();
+			uGUIUtility.SetActiveEventSystem(true);
+		});
+	}
+
+	public void UpdateFacilityInfo(Facility facility)
+	{
+		if (!this.m_FacilityUIInfo.gameObject.activeSelf)
+		{
+			this.m_FacilityUIInfo.gameObject.SetActive(true);
+		}
+		this.m_FacilityUIInfo.SetFacilityInfo(facility, true);
+	}
+
+	private bool IsOKButtonEnable()
+	{
+		if (!this.m_SelectingFacility)
+		{
+			return false;
+		}
+		if (this.m_NowRecipeData == null)
+		{
+			return false;
+		}
+		FacilityDataTable.FacilityRecipeData facilityRecipeData = FacilityDataTable.GetFacilityRecipeData(this.m_NowRecipeData.id);
+		if (!facilityRecipeData.IsSatisfyTheConditions())
+		{
+			return false;
+		}
+		foreach (int materialID in this.m_NowRecipeData.materialIDArray)
+		{
+			if (!GameMain.Instance.FacilityMgr.GetFacilityPowerUpItemEnable(materialID))
+			{
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private void SetOKButtonEnable(bool b)
+	{
+		this.m_ButtonOK.interactable = b;
+	}
+
+	private void GetTagBackup()
+	{
+		Dictionary<string, string> tag_backup = GameMain.Instance.ScriptMgr.adv_kag.tag_backup;
+		string a;
+		if (tag_backup != null && tag_backup.TryGetValue("name", out a) && a == "SceneFacilityPowerUp")
+		{
+			if (!tag_backup.TryGetValue("label", out this.m_strScriptLabelReturn))
+			{
+				Debug.LogWarning("[SceneFacilityPowerUp]戻り先ラベル「label」がありません");
+			}
+			if (!tag_backup.TryGetValue("label_power_up", out this.m_strScriptLabelPowerUp))
+			{
+				Debug.LogWarning("[SceneFacilityPowerUp]戻り先ラベル「label_power_up」が無い");
+			}
+		}
+	}
+
+	private void JumpLabel(string strLabel)
+	{
+		if (string.IsNullOrEmpty(strLabel))
+		{
+			Debug.LogWarning("[SceneFacilityPowerUp]スクリプトのジャンプ先ラベルが空でした");
+			return;
+		}
+		ScriptManager scriptMgr = GameMain.Instance.ScriptMgr;
+		scriptMgr.adv_kag.JumpLabel(strLabel);
+		scriptMgr.adv_kag.Exec();
+	}
+
+	private void SceneClose(Action callback)
+	{
+		GameMain.Instance.MainCamera.FadeOut(0.5f, false, delegate
+		{
+			if (callback != null)
+			{
+				callback();
+			}
+		}, true, default(Color));
+	}
+
+	private void OnDestroy()
+	{
+		if (GameMain.Instance != null)
+		{
+			CameraMain mainCamera = GameMain.Instance.MainCamera;
+			if (mainCamera != null)
+			{
+				mainCamera.SetControl(this.m_CachedMainCameraControlEnabled);
+			}
+		}
+	}
+
+	[SerializeField]
+	private FacilityUIList m_FacilityUIList;
+
+	[SerializeField]
+	private FacilityUIPowerUpList m_FacilityUIPowerUpList;
+
+	[SerializeField]
+	private FacilityUIPowerUpMaterialList m_FacilityUIPowerUpMaterialList;
+
+	[SerializeField]
+	private FacilityUIPreviewParams m_FacilityUIPreviousParams;
+
+	[SerializeField]
+	private FacilityUIPreviewParams m_FacilityUINextParams;
+
+	[SerializeField]
+	private FacilityInfoUI m_FacilityUIInfo;
+
+	[SerializeField]
+	private Button m_ButtonOK;
+
+	private Facility m_SelectingFacility;
+
+	private Facility.RecipeData m_NowRecipeData;
+
+	private Maid m_Maid;
+
+	private bool m_CachedMainCameraControlEnabled = true;
+
+	private string m_strScriptLabelReturn = string.Empty;
+
+	private string m_strScriptLabelPowerUp = string.Empty;
+}

+ 61 - 0
Assembly-CSharp/FacilityUIList.cs

@@ -0,0 +1,61 @@
+using System;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class FacilityUIList : MonoBehaviour
+{
+	private FacilityManager FacilityMgr
+	{
+		get
+		{
+			if (this.m_FacilityMgr == null)
+			{
+				this.m_FacilityMgr = GameMain.Instance.FacilityMgr;
+			}
+			return this.m_FacilityMgr;
+		}
+	}
+
+	public void Show()
+	{
+		this.SetupFacilityListButton();
+	}
+
+	private void SetupFacilityListButton()
+	{
+		Facility[] facilityArray = this.FacilityMgr.GetFacilityArray();
+		this.m_uGUIListViewer.Show<Transform>(facilityArray.Length, delegate(int i, Transform trans)
+		{
+			Facility facility = facilityArray[i];
+			if (!facility)
+			{
+				UnityEngine.Object.Destroy(trans.gameObject);
+				return;
+			}
+			Facility.FacilityStatus param = facility.param;
+			int typeID = param.typeID;
+			string name = param.name;
+			Text componentInChildren = trans.GetComponentInChildren<Text>();
+			Toggle componentInChildren2 = trans.GetComponentInChildren<Toggle>();
+			componentInChildren.text = name;
+			componentInChildren2.onValueChanged.RemoveAllListeners();
+			componentInChildren2.onValueChanged.AddListener(delegate(bool isOn)
+			{
+				if (!isOn)
+				{
+					return;
+				}
+				this.m_Manager.OpenFacilityUIPowerUpList(facility);
+				this.m_Manager.UpdateFacilityInfo(facility);
+			});
+		});
+	}
+
+	[SerializeField]
+	private FacilityPowerUpManager m_Manager;
+
+	[SerializeField]
+	private uGUIListViewer m_uGUIListViewer;
+
+	private FacilityManager m_FacilityMgr;
+}

+ 92 - 0
Assembly-CSharp/FacilityUIPowerUpList.cs

@@ -0,0 +1,92 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class FacilityUIPowerUpList : MonoBehaviour
+{
+	public void Show(Facility facility, Action<Facility.PowerUpRecipe> callbackSelect)
+	{
+		this.SetupFacilityPowerUpListButton(facility, callbackSelect);
+	}
+
+	private void SetupFacilityPowerUpListButton(Facility facility, Action<Facility.PowerUpRecipe> callbackSelect)
+	{
+		this.m_uGUIListViewer.parentItemArea.gameObject.SetActive(true);
+		int[] powerUpRecipeIDArray = new int[0];
+		if (FacilityDataTable.IsExistFacilityPowerUpRecipe(facility.param.typeID, true))
+		{
+			powerUpRecipeIDArray = FacilityDataTable.GetFacilityPowerUpRecipeIDArray(facility.param.typeID, true);
+		}
+		this.m_uGUIListViewer.Show<Transform>(powerUpRecipeIDArray.Length, delegate(int i, Transform trans)
+		{
+			Facility.PowerUpRecipe powerUpRecipe = FacilityDataTable.GetFacilityPowerUpRecipe(powerUpRecipeIDArray[i]);
+			Toggle componentInChildren = trans.GetComponentInChildren<Toggle>();
+			Text componentInChildren2 = trans.GetComponentInChildren<Text>();
+			componentInChildren2.text = powerUpRecipe.name;
+			componentInChildren.onValueChanged.RemoveAllListeners();
+			componentInChildren.onValueChanged.AddListener(delegate(bool isOn)
+			{
+				if (!isOn)
+				{
+					return;
+				}
+				if (callbackSelect != null)
+				{
+					callbackSelect(powerUpRecipe);
+				}
+				this.UpdateConditionsText(powerUpRecipe.id);
+			});
+		});
+		if (powerUpRecipeIDArray.Length <= 0)
+		{
+			this.m_uGUIListViewer.Show<Transform>(1, delegate(int i, Transform trans)
+			{
+				Toggle componentInChildren = trans.GetComponentInChildren<Toggle>();
+				Text componentInChildren2 = trans.GetComponentInChildren<Text>();
+				componentInChildren.enabled = false;
+				componentInChildren2.text = "レシピは存在しません。";
+			});
+		}
+		this.m_uGUIListConditions.ResetList();
+	}
+
+	private void UpdateConditionsText(int recipeID)
+	{
+		FacilityDataTable.FacilityRecipeData facilityRecipeData = FacilityDataTable.GetFacilityRecipeData(recipeID);
+		if (facilityRecipeData == null)
+		{
+			this.m_uGUIListConditions.ResetList();
+			return;
+		}
+		string[] conditions = facilityRecipeData.conditions;
+		List<string> strConditionsList = new List<string>();
+		for (int j = 0; j < conditions.Length; j++)
+		{
+			if (!string.IsNullOrEmpty(conditions[j]))
+			{
+				strConditionsList.Add(conditions[j]);
+			}
+		}
+		this.m_uGUIListConditions.Show<RectTransform>(strConditionsList.Count, delegate(int i, RectTransform trans)
+		{
+			string text = strConditionsList[i];
+			Text[] componentsInChildren = trans.GetComponentsInChildren<Text>();
+			componentsInChildren[0].text = (i + 1).ToString();
+			componentsInChildren[1].text = text;
+			Image componentInChildren = trans.GetComponentInChildren<Image>();
+			componentInChildren.enabled = (i % 2 != 0);
+		});
+	}
+
+	public void Hide()
+	{
+		this.m_uGUIListViewer.parentItemArea.gameObject.SetActive(false);
+	}
+
+	[SerializeField]
+	private uGUIListViewer m_uGUIListViewer;
+
+	[SerializeField]
+	private uGUIListViewer m_uGUIListConditions;
+}

+ 184 - 0
Assembly-CSharp/FacilityUIPowerUpMaterialList.cs

@@ -0,0 +1,184 @@
+using System;
+using UnityEngine;
+using UnityEngine.EventSystems;
+using UnityEngine.UI;
+
+public class FacilityUIPowerUpMaterialList : MonoBehaviour
+{
+	private FacilityManager FacilityMgr
+	{
+		get
+		{
+			if (this.m_FacilityMgr == null)
+			{
+				this.m_FacilityMgr = GameMain.Instance.FacilityMgr;
+			}
+			return this.m_FacilityMgr;
+		}
+	}
+
+	public void Show(int id, Facility facility, Action<int[]> callbackSelect)
+	{
+		this.m_CallbackSelect = callbackSelect;
+		this.SetupFacilityPowerUpMaterialListDropDown(id, facility);
+	}
+
+	private void SetupFacilityPowerUpMaterialListDropDown(int id, Facility facility)
+	{
+		this.m_uGUIListViewer.parentItemArea.gameObject.SetActive(true);
+		this.DeleteDropdown();
+		Facility.PowerUpRecipe facilityPowerUpRecipe = FacilityDataTable.GetFacilityPowerUpRecipe(id);
+		int[] materialCategoryIDArray = facilityPowerUpRecipe.materialCategoryIDArray;
+		Facility.RecipeData recipeData = facility.GetRecipeData(id);
+		this.m_uGUIListViewer.Show<Transform>(materialCategoryIDArray.Length, delegate(int i, Transform trans)
+		{
+			int num = materialCategoryIDArray[i];
+			Dropdown componentInChildren = trans.GetComponentInChildren<Dropdown>();
+			Text[] componentsInChildren = trans.GetComponentsInChildren<Text>();
+			FacilityUIPowerUpMaterialList.DropdownPowerUpMaterial dropdownPowerUpMaterial = trans.gameObject.AddComponent<FacilityUIPowerUpMaterialList.DropdownPowerUpMaterial>();
+			string facilityPowerUpMaterialCategoryName = FacilityDataTable.GetFacilityPowerUpMaterialCategoryName(num);
+			componentsInChildren[0].text = facilityPowerUpMaterialCategoryName;
+			componentsInChildren[1].text = string.Format("CATEGORY{0}", i + 1);
+			componentInChildren.ClearOptions();
+			Facility.PowerUpMaterial[] materialArray = this.FacilityMgr.GetFacilityPowerUpItemEnableArray(num);
+			if (materialArray.Length > 0)
+			{
+				for (int j = 0; j < materialArray.Length; j++)
+				{
+					componentInChildren.options.Add(new Dropdown.OptionData(materialArray[j].name));
+					if (recipeData.materialIDArray[i] == materialArray[j].id)
+					{
+						dropdownPowerUpMaterial.materialID = materialArray[j].id;
+						componentInChildren.value = j;
+					}
+				}
+			}
+			else
+			{
+				componentInChildren.image.raycastTarget = false;
+				dropdownPowerUpMaterial.materialID = 0;
+				componentInChildren.options.Add(new Dropdown.OptionData("無し"));
+			}
+			if (dropdownPowerUpMaterial.materialID == 0)
+			{
+				if (materialArray.Length > 0)
+				{
+					dropdownPowerUpMaterial.materialID = materialArray[0].id;
+					componentInChildren.value = 0;
+				}
+				else
+				{
+					dropdownPowerUpMaterial.materialID = -1;
+				}
+			}
+			componentInChildren.RefreshShownValue();
+			componentInChildren.onValueChanged.AddListener(delegate(int value)
+			{
+				dropdownPowerUpMaterial.materialID = materialArray[value].id;
+				this.OnUpdateDropdownParams();
+			});
+			if (i == 0)
+			{
+				Transform transform = dropdownPowerUpMaterial.transform.Find("Image Plus Mark");
+				if (transform)
+				{
+					transform.gameObject.SetActive(false);
+				}
+				else
+				{
+					Debug.LogError("[FacilityPowerUP]プラスマークのイメージが見つかりません\n「Image Plus Mark」という名前の子オブジェクトを追加してください");
+				}
+			}
+		});
+		this.OnUpdateDropdownParams();
+	}
+
+	public void HideAllDropdown()
+	{
+		Transform transform = this.m_uGUIListViewer.transform;
+		Dropdown[] componentsInChildren = transform.GetComponentsInChildren<Dropdown>();
+		for (int i = 0; i < componentsInChildren.Length; i++)
+		{
+			componentsInChildren[i].Hide();
+		}
+	}
+
+	public void DeleteDropdown()
+	{
+		this.HideAllDropdown();
+		this.m_uGUIListViewer.ResetList();
+	}
+
+	private void OnUpdateDropdownParams()
+	{
+		Transform transform = this.m_uGUIListViewer.transform;
+		FacilityUIPowerUpMaterialList.DropdownPowerUpMaterial[] componentsInChildren = transform.GetComponentsInChildren<FacilityUIPowerUpMaterialList.DropdownPowerUpMaterial>();
+		int[] array = new int[componentsInChildren.Length];
+		for (int i = 0; i < componentsInChildren.Length; i++)
+		{
+			array[i] = componentsInChildren[i].materialID;
+		}
+		if (this.m_CallbackSelect != null)
+		{
+			this.m_CallbackSelect(array);
+		}
+	}
+
+	private FacilityManager m_FacilityMgr;
+
+	[SerializeField]
+	private uGUIListViewer m_uGUIListViewer;
+
+	private Action<int[]> m_CallbackSelect;
+
+	private class DropdownPowerUpMaterial : MonoBehaviour, IPointerClickHandler, ISubmitHandler, IEventSystemHandler
+	{
+		private void SetupTemplateCanvas()
+		{
+			Dropdown component = base.GetComponent<Dropdown>();
+			Transform transform = component.transform.Find("Dropdown List");
+			if (!transform)
+			{
+				return;
+			}
+			Canvas component2 = transform.GetComponent<Canvas>();
+			Canvas componentInParent = component.GetComponentInParent<Canvas>();
+			component2.sortingOrder = componentInParent.sortingOrder + 50;
+		}
+
+		private void SetupBlockerCanvas()
+		{
+			Dropdown component = base.GetComponent<Dropdown>();
+			Canvas componentInParent = component.GetComponentInParent<Canvas>();
+			Transform transform = componentInParent.transform.Find("Blocker");
+			if (!transform)
+			{
+				return;
+			}
+			Canvas component2 = transform.GetComponent<Canvas>();
+			component2.sortingOrder = componentInParent.sortingOrder + 1;
+			CanvasGroup canvasGroup = transform.gameObject.GetComponent<CanvasGroup>();
+			if (!canvasGroup)
+			{
+				canvasGroup = transform.gameObject.AddComponent<CanvasGroup>();
+			}
+			canvasGroup.ignoreParentGroups = true;
+			canvasGroup.interactable = true;
+			canvasGroup.blocksRaycasts = true;
+		}
+
+		public void OnPointerClick(PointerEventData data)
+		{
+			this.SetupTemplateCanvas();
+			this.SetupBlockerCanvas();
+		}
+
+		public void OnSubmit(BaseEventData data)
+		{
+			this.SetupTemplateCanvas();
+			this.SetupBlockerCanvas();
+		}
+
+		public int materialID;
+	}
+}

+ 106 - 0
Assembly-CSharp/FacilityUIPreviewParams.cs

@@ -0,0 +1,106 @@
+using System;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class FacilityUIPreviewParams : MonoBehaviour
+{
+	public void Show(int id)
+	{
+		this.SetupRecipeDefaultEffect(id);
+	}
+
+	public void UpdateAdditionalParams(Facility.FacilityParameter parameter)
+	{
+		this.SetupRecipeAdditionalEffect(parameter);
+	}
+
+	public void UpdateAdditionalParamsComparison(Facility.FacilityParameter previous, Facility.FacilityParameter next)
+	{
+		this.SetupRecipeAdditionalEffectComparison(previous, next);
+	}
+
+	public void ResetDefaultParam()
+	{
+		this.m_ParentDefaultEffect.ResetList();
+	}
+
+	public void ResetAdditionalParam()
+	{
+		this.m_ParentAdditionalEffect.ResetList();
+	}
+
+	private void SetupRecipeDefaultEffect(int id)
+	{
+		Facility.PowerUpRecipe recipe = FacilityDataTable.GetFacilityPowerUpRecipe(id);
+		this.m_ParentDefaultEffect.Show<Text>(recipe.parameter.Length, delegate(int i, Text text)
+		{
+			Facility.FacilityParameter parameter = recipe.parameter;
+			int num = parameter[i];
+			if (num <= 0)
+			{
+				text.gameObject.SetActive(false);
+			}
+			string parameterName = parameter.GetParameterName(i);
+			text.text = string.Format("{0}  +{1}", parameterName, num);
+			Image componentInChildren = text.GetComponentInChildren<Image>();
+			componentInChildren.enabled = (i % 2 == 0);
+		});
+	}
+
+	private void SetupRecipeAdditionalEffect(Facility.FacilityParameter parameter)
+	{
+		int itemCount = 0;
+		this.m_ParentAdditionalEffect.Show<Text>(parameter.Length, delegate(int i, Text text)
+		{
+			if (parameter[i] <= 0)
+			{
+				text.gameObject.SetActive(false);
+				return;
+			}
+			itemCount++;
+			string parameterName = parameter.GetParameterName(i);
+			int num = parameter[i];
+			text.text = string.Format("{0}  +{1}", parameterName, num);
+			Image componentInChildren = text.GetComponentInChildren<Image>();
+			componentInChildren.enabled = (itemCount % 2 == 1);
+		});
+	}
+
+	private void SetupRecipeAdditionalEffectComparison(Facility.FacilityParameter previous, Facility.FacilityParameter next)
+	{
+		Facility.FacilityParameter compatison = next - previous;
+		int itemCount = 0;
+		this.m_ParentAdditionalEffect.Show<Text>(next.Length, delegate(int i, Text text)
+		{
+			if (previous[i] == 0 && next[i] == 0)
+			{
+				text.gameObject.SetActive(false);
+				return;
+			}
+			itemCount++;
+			string parameterName = next.GetParameterName(i);
+			int num = next[i];
+			text.text = string.Format("{0}  +{1}", parameterName, num);
+			Image componentInChildren = text.GetComponentInChildren<Image>();
+			componentInChildren.enabled = (itemCount % 2 == 1);
+			if (compatison[i] == 0)
+			{
+				text.color = Color.white;
+			}
+			else if (compatison[i] < 0)
+			{
+				text.color = Color.magenta;
+			}
+			else if (compatison[i] > 0)
+			{
+				text.color = Color.cyan;
+			}
+		});
+	}
+
+	[SerializeField]
+	private uGUIListViewer m_ParentDefaultEffect;
+
+	[SerializeField]
+	private uGUIListViewer m_ParentAdditionalEffect;
+}

+ 87 - 0
Assembly-CSharp/Fade.cs

@@ -0,0 +1,87 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+public class Fade : MonoBehaviour
+{
+	private void Start()
+	{
+		this.Init();
+		this.fade.Range = this.cutoutRange;
+	}
+
+	private void Init()
+	{
+		this.fade = base.GetComponent<IFade>();
+	}
+
+	private void OnValidate()
+	{
+		this.Init();
+		this.fade.Range = this.cutoutRange;
+	}
+
+	private IEnumerator FadeoutCoroutine(float time, Action action)
+	{
+		float endTime = Time.timeSinceLevelLoad + time * this.cutoutRange;
+		WaitForEndOfFrame endFrame = new WaitForEndOfFrame();
+		while (Time.timeSinceLevelLoad <= endTime)
+		{
+			this.cutoutRange = (endTime - Time.timeSinceLevelLoad) / time;
+			this.fade.Range = this.cutoutRange;
+			yield return endFrame;
+		}
+		this.cutoutRange = 0f;
+		this.fade.Range = this.cutoutRange;
+		if (action != null)
+		{
+			action();
+		}
+		yield break;
+	}
+
+	private IEnumerator FadeinCoroutine(float time, Action action)
+	{
+		float endTime = Time.timeSinceLevelLoad + time * (1f - this.cutoutRange);
+		WaitForEndOfFrame endFrame = new WaitForEndOfFrame();
+		while (Time.timeSinceLevelLoad <= endTime)
+		{
+			this.cutoutRange = 1f - (endTime - Time.timeSinceLevelLoad) / time;
+			this.fade.Range = this.cutoutRange;
+			yield return endFrame;
+		}
+		this.cutoutRange = 1f;
+		this.fade.Range = this.cutoutRange;
+		if (action != null)
+		{
+			action();
+		}
+		yield break;
+	}
+
+	public Coroutine FadeOut(float time, Action action)
+	{
+		base.StopAllCoroutines();
+		return base.StartCoroutine(this.FadeoutCoroutine(time, action));
+	}
+
+	public Coroutine FadeOut(float time)
+	{
+		return this.FadeOut(time, null);
+	}
+
+	public Coroutine FadeIn(float time, Action action)
+	{
+		base.StopAllCoroutines();
+		return base.StartCoroutine(this.FadeinCoroutine(time, action));
+	}
+
+	public Coroutine FadeIn(float time)
+	{
+		return this.FadeIn(time, null);
+	}
+
+	private IFade fade;
+
+	private float cutoutRange;
+}

+ 48 - 0
Assembly-CSharp/FadeImage.cs

@@ -0,0 +1,48 @@
+using System;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class FadeImage : Graphic, IFade
+{
+	public float Range
+	{
+		get
+		{
+			return this.cutoutRange;
+		}
+		set
+		{
+			this.cutoutRange = value;
+			this.UpdateMaskCutout(this.cutoutRange);
+		}
+	}
+
+	protected override void Start()
+	{
+		base.Start();
+		this.UpdateMaskTexture(this.maskTexture);
+	}
+
+	private void UpdateMaskCutout(float range)
+	{
+		base.enabled = true;
+		this.material.SetFloat("_Range", 1f - range);
+		if (range <= 0f)
+		{
+			base.enabled = false;
+		}
+	}
+
+	public void UpdateMaskTexture(Texture texture)
+	{
+		this.material.SetTexture("_MaskTex", texture);
+		this.material.SetColor("_Color", this.color);
+	}
+
+	[SerializeField]
+	private Texture maskTexture;
+
+	[SerializeField]
+	[Range(0f, 1f)]
+	private float cutoutRange;
+}

+ 66 - 0
Assembly-CSharp/FadeInAndFadeOutOnGUI.cs

@@ -0,0 +1,66 @@
+using System;
+using UnityEngine;
+
+public class FadeInAndFadeOutOnGUI : MonoBehaviour
+{
+	public void Awake()
+	{
+		if (this.tex_ == null)
+		{
+			this.tex_ = new Texture2D(32, 32, TextureFormat.ARGB32, false);
+			for (int i = 0; i < 32; i++)
+			{
+				for (int j = 0; j < 32; j++)
+				{
+					this.tex_.SetPixel(i, j, Color.white);
+				}
+			}
+			this.tex_.Apply();
+		}
+		this.Update();
+	}
+
+	public void OnDestroy()
+	{
+		if (this.tex_ != null)
+		{
+			UnityEngine.Object.DestroyImmediate(this.tex_);
+		}
+	}
+
+	public void Update()
+	{
+	}
+
+	public void OnGUI()
+	{
+		if (this.tex_ != null && this.intensity < 1f)
+		{
+			Color color = GUI.color;
+			GUI.color = new Color(this.color.r, this.color.g, this.color.b, 1f - this.intensity);
+			GUI.DrawTexture(this.render_rect_, this.tex_);
+			GUI.color = color;
+		}
+	}
+
+	public bool UpdateRenderRect()
+	{
+		if (this.window_size_.x != (float)Screen.width || this.window_size_.y != (float)Screen.height)
+		{
+			this.window_size_.x = (float)Screen.width;
+			this.window_size_.y = (float)Screen.height;
+			return true;
+		}
+		return false;
+	}
+
+	public float intensity = 1f;
+
+	public Color color = Color.black;
+
+	private Texture2D tex_;
+
+	private Rect render_rect_ = new Rect(0f, 0f, 8192f, 8192f);
+
+	private Vector2 window_size_ = Vector2.zero;
+}

+ 43 - 0
Assembly-CSharp/FadeUI.cs

@@ -0,0 +1,43 @@
+using System;
+using UnityEngine;
+using UnityEngine.UI;
+
+[RequireComponent(typeof(RawImage))]
+[RequireComponent(typeof(Mask))]
+public class FadeUI : MonoBehaviour, IFade
+{
+	public float Range
+	{
+		get
+		{
+			return this.cutoutRange;
+		}
+		set
+		{
+			this.cutoutRange = value;
+			this.UpdateMaskCutout(this.cutoutRange);
+		}
+	}
+
+	private void UpdateMaskCutout(float range)
+	{
+		this.mat.SetFloat("_Range", range);
+		Graphics.Blit(this.texture, this.rt, this.mat);
+		Mask component = base.GetComponent<Mask>();
+		component.enabled = false;
+		component.enabled = true;
+	}
+
+	[SerializeField]
+	[Range(0f, 1f)]
+	private float cutoutRange;
+
+	[SerializeField]
+	private Material mat;
+
+	[SerializeField]
+	private RenderTexture rt;
+
+	[SerializeField]
+	private Texture texture;
+}

+ 400 - 0
Assembly-CSharp/Farm_Mng.cs

@@ -0,0 +1,400 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class Farm_Mng : MonoBehaviour
+{
+	public static Farm_Mng Instance
+	{
+		get
+		{
+			return Farm_Mng.st_this;
+		}
+	}
+
+	private void Awake()
+	{
+		Farm_Mng.st_this = this;
+		this.All_Plant_Data = new Dictionary<string, Farm_Mng.Plant_Data>();
+		this.All_Flag_Data = new Dictionary<string, int>();
+		this.Farm_Init();
+		this.CSV_Read();
+	}
+
+	private void Update()
+	{
+	}
+
+	private void CSV_Read()
+	{
+		if (!GameUty.FileSystem.IsExistentFile(this.csv_name))
+		{
+			NDebug.Assert("表がありません。" + this.csv_name, false);
+		}
+		using (AFileBase afileBase = GameUty.FileSystem.FileOpen(this.csv_name))
+		{
+			using (CsvParser csvParser = new CsvParser())
+			{
+				bool condition = csvParser.Open(afileBase);
+				NDebug.Assert(condition, this.csv_name + "\nopen failed.");
+				for (int i = 1; i < csvParser.max_cell_y; i++)
+				{
+					if (csvParser.IsCellToExistData(0, i))
+					{
+						Farm_Mng.Plant_Data value = default(Farm_Mng.Plant_Data);
+						for (int j = 0; j < csvParser.max_cell_x; j++)
+						{
+							this.Set_CSV_Data(csvParser, j, i, ref value);
+						}
+						this.All_Plant_Data.Add(csvParser.GetCellAsString(0, i), value);
+					}
+				}
+			}
+		}
+		Debug.Log(this.All_Plant_Data);
+		Debug.Log(this.All_Flag_Data);
+	}
+
+	private void Set_CSV_Data(CsvParser csv, int cell_X, int cell_Y, ref Farm_Mng.Plant_Data data)
+	{
+		switch (cell_X)
+		{
+		case 2:
+			data.Hatuga_Day = csv.GetCellAsInteger(cell_X, cell_Y);
+			break;
+		case 3:
+			data.Shukaku_Day = csv.GetCellAsInteger(cell_X, cell_Y);
+			break;
+		case 4:
+		{
+			GameObject gameObject = Resources.Load<GameObject>(this.saibaibox_path).transform.Find("saibaibox").gameObject;
+			data.Noon_ObjName = gameObject.transform.Find(csv.GetCellAsString(cell_X, cell_Y)).transform.name;
+			break;
+		}
+		case 5:
+		{
+			GameObject gameObject = Resources.Load<GameObject>(this.saibaibox_path).transform.Find("saibaibox").gameObject;
+			data.Night_ObjName = gameObject.transform.Find(csv.GetCellAsString(cell_X, cell_Y)).transform.name;
+			break;
+		}
+		case 6:
+			this.All_Flag_Data[this.GetFlagName(Farm_Mng.Plant_Mode.Mode_Tane)] = csv.GetCellAsInteger(cell_X, cell_Y);
+			break;
+		case 7:
+			data.VR_Frag_Value = csv.GetCellAsInteger(cell_X, cell_Y);
+			break;
+		case 8:
+			this.All_Flag_Data[this.GetFlagName(Farm_Mng.Plant_Mode.Mode_Hatuga)] = csv.GetCellAsInteger(cell_X, cell_Y);
+			break;
+		case 9:
+			this.All_Flag_Data[this.GetFlagName(Farm_Mng.Plant_Mode.Mode_Mi)] = csv.GetCellAsInteger(cell_X, cell_Y);
+			break;
+		case 10:
+			this.All_Flag_Data[this.GetFlagName(Farm_Mng.Plant_Mode.Mode_None)] = csv.GetCellAsInteger(cell_X, cell_Y);
+			break;
+		}
+	}
+
+	private void Farm_Init()
+	{
+		this.nFarm_Data.nPlant = Farm_Mng.Plant_List.Nothing;
+		this.nFarm_Data.nMode = Farm_Mng.Plant_Mode.Mode_None;
+		this.nFarm_Data.Elapsed_Day = 0;
+		UnityEngine.Object.Destroy(this.Saibai_Box);
+	}
+
+	private void Set_Plant(string plant_name)
+	{
+		string b = string.Empty;
+		switch (SceneVRCommunication.Instance.GetNowTime())
+		{
+		case SceneVRCommunication.VR_TIME.MONING:
+		case SceneVRCommunication.VR_TIME.DAY:
+			b = this.All_Plant_Data[plant_name].Noon_ObjName;
+			break;
+		case SceneVRCommunication.VR_TIME.NIGHT:
+			b = this.All_Plant_Data[plant_name].Night_ObjName;
+			break;
+		}
+		if (plant_name != string.Empty)
+		{
+			if (this.Saibai_Box)
+			{
+				UnityEngine.Object.Destroy(this.Saibai_Box);
+			}
+			GameObject gameObject = Resources.Load<GameObject>(this.saibaibox_path);
+			this.Saibai_Box = GameMain.Instance.BgMgr.AddPrefabToBg(gameObject.name, gameObject.name, null, gameObject.transform.position, gameObject.transform.eulerAngles);
+			this.Saibai_Box = this.Saibai_Box.transform.Find("saibaibox").gameObject;
+			IEnumerator enumerator = this.Saibai_Box.transform.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					Transform transform = (Transform)obj;
+					if (transform.name != b)
+					{
+						transform.gameObject.SetActive(false);
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+		}
+	}
+
+	private string GetPlantName(Farm_Mng.Plant_List plant)
+	{
+		string result = string.Empty;
+		switch (plant)
+		{
+		case Farm_Mng.Plant_List.Ninjin:
+			result = "にんじん";
+			break;
+		case Farm_Mng.Plant_List.Toumorokosi:
+			result = "とうもろこし";
+			break;
+		case Farm_Mng.Plant_List.Tomato:
+			result = "とまと";
+			break;
+		case Farm_Mng.Plant_List.Suika:
+			result = "すいか";
+			break;
+		case Farm_Mng.Plant_List.Himawari:
+			result = "ひまわり";
+			break;
+		case Farm_Mng.Plant_List.Zakuro:
+			result = "ざくろ";
+			break;
+		case Farm_Mng.Plant_List.Natumikan:
+			result = "夏みかん";
+			break;
+		case Farm_Mng.Plant_List.Satumaimo:
+			result = "さつまいも";
+			break;
+		}
+		return result;
+	}
+
+	private bool IsPlantActive()
+	{
+		return this.nFarm_Data.Elapsed_Day >= this.nFarm_Data.Hatuga_Day;
+	}
+
+	private void Set_Kanban()
+	{
+		if (!this.Kanban_Box)
+		{
+			GameObject gameObject = Resources.Load<GameObject>(this.kanbanbox_path).transform.Find("kanbanbox").gameObject;
+			this.Kanban_Box = UnityEngine.Object.Instantiate<GameObject>(gameObject);
+		}
+		string b = string.Empty;
+		Farm_Mng.Plant_Mode nMode = this.nFarm_Data.nMode;
+		if (nMode != Farm_Mng.Plant_Mode.Mode_Tane)
+		{
+			if (nMode != Farm_Mng.Plant_Mode.Mode_Mi)
+			{
+				b = "Odogu_VF_Kanban_Taiki";
+			}
+			else
+			{
+				b = "Odogu_VF_Kanban_OK";
+			}
+		}
+		else
+		{
+			b = "Odogu_VF_Kanban_Saibai";
+		}
+		IEnumerator enumerator = this.Kanban_Box.transform.GetEnumerator();
+		try
+		{
+			while (enumerator.MoveNext())
+			{
+				object obj = enumerator.Current;
+				Transform transform = (Transform)obj;
+				if (transform.name != b)
+				{
+					transform.gameObject.SetActive(false);
+				}
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+		this.Kanban_Box.transform.parent = base.transform.parent;
+	}
+
+	private string GetFlagName(Farm_Mng.Plant_Mode mode)
+	{
+		string result = string.Empty;
+		switch (mode)
+		{
+		case Farm_Mng.Plant_Mode.Mode_Tane:
+			result = "入植";
+			break;
+		case Farm_Mng.Plant_Mode.Mode_Hatuga:
+			result = "発芽";
+			break;
+		case Farm_Mng.Plant_Mode.Mode_Mi:
+			result = "収穫";
+			break;
+		default:
+			result = "待機";
+			break;
+		}
+		return result;
+	}
+
+	private void Set_Flag(string flag_name, int flag_value)
+	{
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		maid.status.SetFlag(flag_name, flag_value);
+	}
+
+	public void Day_Start()
+	{
+		if (!this.IsPlantOn(Farm_Mng.Plant_List.Nothing))
+		{
+			this.nFarm_Data.Elapsed_Day = this.nFarm_Data.Elapsed_Day + 1;
+			if (this.IsPlantGet())
+			{
+				this.nFarm_Data.nMode = Farm_Mng.Plant_Mode.Mode_Mi;
+			}
+			else if (this.IsPlantActive())
+			{
+				this.nFarm_Data.nMode = Farm_Mng.Plant_Mode.Mode_Hatuga;
+			}
+		}
+		string flagName = this.GetFlagName(this.nFarm_Data.nMode);
+		this.Set_Flag("VR植物進捗状況", this.All_Flag_Data[flagName]);
+	}
+
+	public void Farm_Start()
+	{
+		if (!this.IsPlantOn(Farm_Mng.Plant_List.Nothing) && this.IsPlantActive())
+		{
+			this.Set_Plant(this.GetPlantName(this.nFarm_Data.nPlant));
+		}
+	}
+
+	public void NyuShoku(Farm_Mng.Plant_List plant)
+	{
+		string plantName = this.GetPlantName(plant);
+		if (plantName != string.Empty)
+		{
+			this.nFarm_Data.nPlant = plant;
+			this.nFarm_Data.nMode = Farm_Mng.Plant_Mode.Mode_Tane;
+			this.nFarm_Data.Hatuga_Day = this.All_Plant_Data[plantName].Hatuga_Day;
+			this.nFarm_Data.Shukaku_Day = this.All_Plant_Data[plantName].Shukaku_Day;
+			string flagName = this.GetFlagName(this.nFarm_Data.nMode);
+			this.Set_Flag("VR植物進捗状況", this.All_Flag_Data[flagName]);
+			string plantName2 = this.GetPlantName(this.nFarm_Data.nPlant);
+			this.Set_Flag("VRイベント植物名", this.All_Plant_Data[plantName2].VR_Frag_Value);
+		}
+	}
+
+	public void SyuKaku()
+	{
+		if (!this.IsPlantOn(Farm_Mng.Plant_List.Nothing) && this.IsPlantGet())
+		{
+			this.Farm_Init();
+			UnityEngine.Object.Destroy(this.Saibai_Box);
+			this.Saibai_Box = null;
+			string flagName = this.GetFlagName(this.nFarm_Data.nMode);
+			this.Set_Flag("VR植物進捗状況", this.All_Flag_Data[flagName]);
+		}
+	}
+
+	public bool IsPlantGet()
+	{
+		return this.nFarm_Data.Elapsed_Day >= this.nFarm_Data.Shukaku_Day;
+	}
+
+	public bool IsPlantOn(Farm_Mng.Plant_List plant)
+	{
+		return this.nFarm_Data.nPlant == plant;
+	}
+
+	private Farm_Mng.Farm_Data nFarm_Data;
+
+	private Dictionary<string, Farm_Mng.Plant_Data> All_Plant_Data;
+
+	[SerializeField]
+	[Header("csvファイル名")]
+	private string csv_name = "vrcom_culture.nei";
+
+	[SerializeField]
+	[Header("植物プレハブのパス")]
+	private string saibaibox_path = "Prefab/villa_farm_event_saibaibox";
+
+	private GameObject Saibai_Box;
+
+	[SerializeField]
+	[Header("看板プレハブのパス")]
+	private string kanbanbox_path = "Prefab/villa_farm_event";
+
+	private GameObject Kanban_Box;
+
+	private Dictionary<string, int> All_Flag_Data;
+
+	private static Farm_Mng st_this;
+
+	private enum Plant_Mode
+	{
+		Mode_Tane,
+		Mode_Hatuga,
+		Mode_Mi,
+		Mode_None
+	}
+
+	public enum Plant_List
+	{
+		Ninjin,
+		Toumorokosi,
+		Tomato,
+		Suika,
+		Himawari,
+		Zakuro,
+		Natumikan,
+		Satumaimo,
+		Nothing
+	}
+
+	private struct Farm_Data
+	{
+		public Farm_Mng.Plant_List nPlant;
+
+		public Farm_Mng.Plant_Mode nMode;
+
+		public int Hatuga_Day;
+
+		public int Shukaku_Day;
+
+		public int Elapsed_Day;
+	}
+
+	private struct Plant_Data
+	{
+		public int Hatuga_Day;
+
+		public int Shukaku_Day;
+
+		public string Night_ObjName;
+
+		public string Noon_ObjName;
+
+		public int VR_Frag_Value;
+	}
+}

+ 107 - 0
Assembly-CSharp/FileHackGlobalGameManagers.cs

@@ -0,0 +1,107 @@
+using System;
+using System.IO;
+using UnityEngine;
+
+public class FileHackGlobalGameManagers
+{
+	public static string Path
+	{
+		get
+		{
+			return Application.dataPath + "/globalgamemanagers";
+		}
+	}
+
+	public static byte[] ReadAllBytes(string path = "")
+	{
+		if (string.IsNullOrEmpty(path))
+		{
+			path = FileHackGlobalGameManagers.Path;
+		}
+		byte[] result = null;
+		try
+		{
+			result = File.ReadAllBytes(path);
+		}
+		catch (Exception ex)
+		{
+			Debug.LogError(ex.Message);
+		}
+		return result;
+	}
+
+	public static bool WriteAllBytes(byte[] src, string path = "")
+	{
+		if (string.IsNullOrEmpty(path))
+		{
+			path = FileHackGlobalGameManagers.Path;
+		}
+		bool result = false;
+		try
+		{
+			File.WriteAllBytes(path, src);
+			result = true;
+		}
+		catch (Exception ex)
+		{
+			Debug.LogError(ex.Message);
+		}
+		return result;
+	}
+
+	public static int IndexOfVRFlag(byte[] src)
+	{
+		if (src == null || src.Length <= 0)
+		{
+			return -1;
+		}
+		string text = "com.";
+		string text2 = "1.0";
+		int num = FileHackGlobalGameManagers.IndexOf(src, 0, text);
+		if (num <= 0)
+		{
+			return -1;
+		}
+		int num2 = FileHackGlobalGameManagers.IndexOf(src, num, text2);
+		if (num2 <= 0)
+		{
+			return -1;
+		}
+		int num3 = num2 + text2.Length + 9;
+		return (num3 >= src.Length) ? -1 : num3;
+	}
+
+	public static int IndexOf(byte[] src, int offset, string text)
+	{
+		byte[] array = new byte[text.Length];
+		for (int i = 0; i < text.Length; i++)
+		{
+			array[i] = (byte)text[i];
+		}
+		int num = 0;
+		while (num + offset < src.Length)
+		{
+			if (src[num + offset] == array[0])
+			{
+				int num2 = num + offset;
+				int num3 = 0;
+				while (num2 < src.Length && num3 < array.Length)
+				{
+					if ((char)src[num2] != text[num3])
+					{
+						num3 = -1;
+						break;
+					}
+					num2++;
+					num3++;
+				}
+				if (0 < num3)
+				{
+					return num + offset;
+				}
+			}
+			num++;
+		}
+		return -1;
+	}
+}

+ 570 - 0
Assembly-CSharp/FingerBlend.cs

@@ -0,0 +1,570 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+public class FingerBlend : MonoBehaviour
+{
+	public void Awake()
+	{
+		if (FingerBlend.open_dic == null)
+		{
+			FingerBlend.open_dic = FingerBlend.ReadFingerBoneDataFromrResource("ScenePhotoMode/binary/finger_template_open");
+			FingerBlend.close_dic = FingerBlend.ReadFingerBoneDataFromrResource("ScenePhotoMode/binary/finger_template_close");
+			FingerBlend.fist_dic = FingerBlend.ReadFingerBoneDataFromrResource("ScenePhotoMode/binary/finger_template_fist1");
+		}
+	}
+
+	public void Start()
+	{
+	}
+
+	public void SetIKManager(IKManager setting_ik_mgr)
+	{
+		if (this.ik_mgr != null)
+		{
+			return;
+		}
+		this.ik_mgr = setting_ik_mgr;
+		this.right_arm_finger = new FingerBlend.ArmFinger(this, true);
+		this.left_arm_finger = new FingerBlend.ArmFinger(this, false);
+		this.right_leg_finger = new FingerBlend.LegFinger(this, true);
+		this.left_leg_finger = new FingerBlend.LegFinger(this, false);
+		this.right_arm_finger.enabled = true;
+	}
+
+	public static Dictionary<IKManager.BoneType, Quaternion> ReadFingerBoneDataFromrResource(string path)
+	{
+		TextAsset textAsset = Resources.Load(path) as TextAsset;
+		if (textAsset == null)
+		{
+			return null;
+		}
+		return FingerBlend.ReadFingerBoneData(textAsset.bytes);
+	}
+
+	public static Dictionary<IKManager.BoneType, Quaternion> ReadFingerBoneData(byte[] data_byte)
+	{
+		if (data_byte == null)
+		{
+			return null;
+		}
+		Dictionary<IKManager.BoneType, Quaternion> dictionary = new Dictionary<IKManager.BoneType, Quaternion>();
+		using (MemoryStream memoryStream = new MemoryStream(data_byte))
+		{
+			using (BinaryReader binaryReader = new BinaryReader(memoryStream))
+			{
+				string a = binaryReader.ReadString();
+				if (a != "CM3D2_IK_FingerBlend")
+				{
+					return null;
+				}
+				int num = binaryReader.ReadInt32();
+				int num2 = binaryReader.ReadInt32();
+				for (int i = 0; i < num2; i++)
+				{
+					int num3 = binaryReader.ReadInt32();
+					if (num == 1000)
+					{
+						num3 += 5;
+					}
+					Vector4 vector;
+					vector.x = binaryReader.ReadSingle();
+					vector.y = binaryReader.ReadSingle();
+					vector.z = binaryReader.ReadSingle();
+					vector.w = binaryReader.ReadSingle();
+					dictionary.Add((IKManager.BoneType)num3, new Quaternion(vector.x, vector.y, vector.z, vector.w));
+				}
+			}
+		}
+		return dictionary;
+	}
+
+	public static byte[] GetFingerBoneData(IKManager ik_mgr)
+	{
+		Dictionary<int, Quaternion> dictionary = new Dictionary<int, Quaternion>();
+		for (int i = 42; i <= 56; i++)
+		{
+			dictionary.Add(i, ik_mgr.GetBone((IKManager.BoneType)i).transform.localRotation);
+		}
+		for (int j = 27; j <= 41; j++)
+		{
+			dictionary.Add(j, ik_mgr.GetBone((IKManager.BoneType)j).transform.localRotation);
+		}
+		for (int k = 63; k <= 68; k++)
+		{
+			dictionary.Add(k, ik_mgr.GetBone((IKManager.BoneType)k).transform.localRotation);
+		}
+		for (int l = 57; l <= 62; l++)
+		{
+			dictionary.Add(l, ik_mgr.GetBone((IKManager.BoneType)l).transform.localRotation);
+		}
+		MemoryStream memoryStream = new MemoryStream();
+		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
+		binaryWriter.Write("CM3D2_IK_FingerBlend");
+		binaryWriter.Write(1000);
+		binaryWriter.Write(dictionary.Count);
+		foreach (KeyValuePair<int, Quaternion> keyValuePair in dictionary)
+		{
+			binaryWriter.Write(keyValuePair.Key);
+			Quaternion value = keyValuePair.Value;
+			binaryWriter.Write(value.x);
+			binaryWriter.Write(value.y);
+			binaryWriter.Write(value.z);
+			binaryWriter.Write(value.w);
+		}
+		binaryWriter.Close();
+		memoryStream.Close();
+		byte[] result = memoryStream.ToArray();
+		memoryStream.Dispose();
+		return result;
+	}
+
+	public Maid maid
+	{
+		get
+		{
+			return (!(this.ik_mgr != null)) ? null : this.ik_mgr.maid;
+		}
+	}
+
+	public IKManager ik_mgr { get; private set; }
+
+	public FingerBlend.ArmFinger right_arm_finger { get; private set; }
+
+	public FingerBlend.ArmFinger left_arm_finger { get; private set; }
+
+	public FingerBlend.LegFinger right_leg_finger { get; private set; }
+
+	public FingerBlend.LegFinger left_leg_finger { get; private set; }
+
+	public static Dictionary<IKManager.BoneType, Quaternion> open_dic;
+
+	public static Dictionary<IKManager.BoneType, Quaternion> close_dic;
+
+	public static Dictionary<IKManager.BoneType, Quaternion> fist_dic;
+
+	public class BaseFinger
+	{
+		public BaseFinger(FingerBlend finger_blend)
+		{
+			this.finger_blend_ = finger_blend;
+		}
+
+		public virtual void Apply()
+		{
+			if (!this.enabled)
+			{
+				return;
+			}
+			for (int i = 0; i < this.value_array_.Length; i++)
+			{
+				float lock_value_open;
+				float lock_value_fist;
+				if (!this.value_array_[i].is_lock)
+				{
+					lock_value_open = this.value_open_;
+					lock_value_fist = this.value_fist_;
+				}
+				else
+				{
+					lock_value_open = this.value_array_[i].lock_value_open;
+					lock_value_fist = this.value_array_[i].lock_value_fist;
+				}
+				foreach (IKManager.BoneType boneType in this.value_array_[i].bone)
+				{
+					this.finger_blend_.ik_mgr.GetBone(boneType).transform.localRotation = Quaternion.Lerp(Quaternion.Lerp(FingerBlend.close_dic[boneType], FingerBlend.open_dic[boneType], lock_value_open), FingerBlend.fist_dic[boneType], lock_value_fist);
+				}
+			}
+		}
+
+		public void SetBinary(byte[] data_byte, bool mirroring = false)
+		{
+			using (MemoryStream memoryStream = new MemoryStream(data_byte))
+			{
+				using (BinaryReader binaryReader = new BinaryReader(memoryStream))
+				{
+					for (int i = 0; i < this.value_array_.Length; i++)
+					{
+						IKManager.BoneType[] bone = this.value_array_[i].bone;
+						for (int j = 0; j < bone.Length; j++)
+						{
+							Vector4 vector;
+							vector.x = binaryReader.ReadSingle();
+							vector.y = binaryReader.ReadSingle();
+							vector.z = binaryReader.ReadSingle();
+							vector.w = binaryReader.ReadSingle();
+							if (mirroring)
+							{
+								vector.x *= -1f;
+								vector.y *= -1f;
+							}
+							this.finger_blend_.ik_mgr.GetBone(bone[j]).transform.localRotation = new Quaternion(vector.x, vector.y, vector.z, vector.w);
+						}
+					}
+				}
+			}
+		}
+
+		public byte[] GetBinary()
+		{
+			byte[] result = null;
+			using (MemoryStream memoryStream = new MemoryStream())
+			{
+				using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
+				{
+					for (int i = 0; i < this.value_array_.Length; i++)
+					{
+						IKManager.BoneType[] bone = this.value_array_[i].bone;
+						for (int j = 0; j < bone.Length; j++)
+						{
+							Quaternion localRotation = this.finger_blend_.ik_mgr.GetBone(bone[j]).transform.localRotation;
+							binaryWriter.Write(localRotation.x);
+							binaryWriter.Write(localRotation.y);
+							binaryWriter.Write(localRotation.z);
+							binaryWriter.Write(localRotation.w);
+						}
+					}
+					result = memoryStream.ToArray();
+				}
+			}
+			return result;
+		}
+
+		public float value_open
+		{
+			get
+			{
+				return this.value_open_;
+			}
+			set
+			{
+				this.value_open_ = value;
+				this.Apply();
+			}
+		}
+
+		public float value_fist
+		{
+			get
+			{
+				return this.value_fist_;
+			}
+			set
+			{
+				this.value_fist_ = value;
+				this.Apply();
+			}
+		}
+
+		public bool enabled
+		{
+			get
+			{
+				return this.enabled_;
+			}
+			set
+			{
+				this.enabled_ = value;
+				this.Apply();
+			}
+		}
+
+		public void LockSingleItemValue(bool set_lock, int value_no, Vector2 value)
+		{
+			this.value_array_[value_no].is_lock = set_lock;
+			this.value_array_[value_no].lock_value_open = value.x;
+			this.value_array_[value_no].lock_value_fist = value.y;
+		}
+
+		public void LockSingleItem(bool set_lock, int value_no)
+		{
+			this.value_array_[value_no].is_lock = set_lock;
+			this.value_array_[value_no].lock_value_open = this.value_open_;
+			this.value_array_[value_no].lock_value_fist = this.value_fist_;
+		}
+
+		protected float value_open_;
+
+		protected float value_fist_;
+
+		protected bool enabled_;
+
+		protected FingerBlend.BaseFinger.value_set[] value_array_;
+
+		protected FingerBlend finger_blend_;
+
+		protected struct value_set
+		{
+			public bool is_lock;
+
+			public float lock_value_open;
+
+			public float lock_value_fist;
+
+			public IKManager.BoneType[] bone;
+		}
+	}
+
+	public class ArmFinger : FingerBlend.BaseFinger
+	{
+		public ArmFinger(FingerBlend finger_blend, bool is_right) : base(finger_blend)
+		{
+			this.value_array_ = new FingerBlend.BaseFinger.value_set[5];
+			for (int i = 0; i < this.value_array_.Length; i++)
+			{
+				this.value_array_[i].bone = new IKManager.BoneType[3];
+				for (int j = 0; j < this.value_array_[i].bone.Length; j++)
+				{
+					if (is_right)
+					{
+						this.value_array_[i].bone[j] = i * this.value_array_[i].bone.Length + IKManager.BoneType.Finger0_Root_R + j;
+					}
+					else
+					{
+						this.value_array_[i].bone[j] = i * this.value_array_[i].bone.Length + IKManager.BoneType.Finger0_Root_L + j;
+					}
+				}
+			}
+		}
+
+		public bool lock_enabled0
+		{
+			get
+			{
+				return this.value_array_[0].is_lock;
+			}
+			set
+			{
+				base.LockSingleItem(value, 0);
+			}
+		}
+
+		public Vector2 lock_value0
+		{
+			get
+			{
+				return new Vector2(this.value_array_[0].lock_value_open, this.value_array_[0].lock_value_fist);
+			}
+			set
+			{
+				if (this.lock_enabled0)
+				{
+					base.LockSingleItemValue(true, 0, value);
+				}
+			}
+		}
+
+		public bool lock_enabled1
+		{
+			get
+			{
+				return this.value_array_[1].is_lock;
+			}
+			set
+			{
+				base.LockSingleItem(value, 1);
+			}
+		}
+
+		public Vector2 lock_value1
+		{
+			get
+			{
+				return new Vector2(this.value_array_[1].lock_value_open, this.value_array_[1].lock_value_fist);
+			}
+			set
+			{
+				if (this.lock_enabled1)
+				{
+					base.LockSingleItemValue(true, 1, value);
+				}
+			}
+		}
+
+		public bool lock_enabled2
+		{
+			get
+			{
+				return this.value_array_[2].is_lock;
+			}
+			set
+			{
+				base.LockSingleItem(value, 2);
+			}
+		}
+
+		public Vector2 lock_value2
+		{
+			get
+			{
+				return new Vector2(this.value_array_[2].lock_value_open, this.value_array_[2].lock_value_fist);
+			}
+			set
+			{
+				if (this.lock_enabled2)
+				{
+					base.LockSingleItemValue(true, 2, value);
+				}
+			}
+		}
+
+		public bool lock_enabled3
+		{
+			get
+			{
+				return this.value_array_[3].is_lock;
+			}
+			set
+			{
+				base.LockSingleItem(value, 3);
+			}
+		}
+
+		public Vector2 lock_value3
+		{
+			get
+			{
+				return new Vector2(this.value_array_[3].lock_value_open, this.value_array_[3].lock_value_fist);
+			}
+			set
+			{
+				if (this.lock_enabled3)
+				{
+					base.LockSingleItemValue(true, 3, value);
+				}
+			}
+		}
+
+		public bool lock_enabled4
+		{
+			get
+			{
+				return this.value_array_[4].is_lock;
+			}
+			set
+			{
+				base.LockSingleItem(value, 4);
+			}
+		}
+
+		public Vector2 lock_value4
+		{
+			get
+			{
+				return new Vector2(this.value_array_[4].lock_value_open, this.value_array_[4].lock_value_fist);
+			}
+			set
+			{
+				if (this.lock_enabled4)
+				{
+					base.LockSingleItemValue(true, 4, value);
+				}
+			}
+		}
+	}
+
+	public class LegFinger : FingerBlend.BaseFinger
+	{
+		public LegFinger(FingerBlend finger_blend, bool is_right) : base(finger_blend)
+		{
+			this.value_array_ = new FingerBlend.BaseFinger.value_set[3];
+			for (int i = 0; i < this.value_array_.Length; i++)
+			{
+				this.value_array_[i].bone = new IKManager.BoneType[2];
+				for (int j = 0; j < this.value_array_[i].bone.Length; j++)
+				{
+					if (is_right)
+					{
+						this.value_array_[i].bone[j] = i * this.value_array_[i].bone.Length + IKManager.BoneType.Toe0_Root_R + j;
+					}
+					else
+					{
+						this.value_array_[i].bone[j] = i * this.value_array_[i].bone.Length + IKManager.BoneType.Toe0_Root_L + j;
+					}
+				}
+			}
+		}
+
+		public bool lock_enabled0
+		{
+			get
+			{
+				return this.value_array_[0].is_lock;
+			}
+			set
+			{
+				base.LockSingleItem(value, 0);
+			}
+		}
+
+		public Vector2 lock_value0
+		{
+			get
+			{
+				return new Vector2(this.value_array_[0].lock_value_open, this.value_array_[0].lock_value_fist);
+			}
+			set
+			{
+				if (this.lock_enabled0)
+				{
+					base.LockSingleItemValue(true, 0, value);
+				}
+			}
+		}
+
+		public bool lock_enabled1
+		{
+			get
+			{
+				return this.value_array_[1].is_lock;
+			}
+			set
+			{
+				base.LockSingleItem(value, 1);
+			}
+		}
+
+		public Vector2 lock_value1
+		{
+			get
+			{
+				return new Vector2(this.value_array_[1].lock_value_open, this.value_array_[1].lock_value_fist);
+			}
+			set
+			{
+				if (this.lock_enabled1)
+				{
+					base.LockSingleItemValue(true, 1, value);
+				}
+			}
+		}
+
+		public bool lock_enabled2
+		{
+			get
+			{
+				return this.value_array_[2].is_lock;
+			}
+			set
+			{
+				base.LockSingleItem(value, 2);
+			}
+		}
+
+		public Vector2 lock_value2
+		{
+			get
+			{
+				return new Vector2(this.value_array_[2].lock_value_open, this.value_array_[2].lock_value_fist);
+			}
+			set
+			{
+				if (this.lock_enabled2)
+				{
+					base.LockSingleItemValue(true, 2, value);
+				}
+			}
+		}
+	}
+}

+ 29 - 0
Assembly-CSharp/FinishSyncrho.cs

@@ -0,0 +1,29 @@
+using System;
+using UnityEngine;
+
+public class FinishSyncrho : MonoBehaviour
+{
+	[SerializeField]
+	private UIButton buttonFinishSyncrho;
+
+	[SerializeField]
+	private UIButton buttonFinish;
+
+	private bool systemEnable;
+
+	private Color buttonDefaultColor = default(Color);
+
+	[SerializeField]
+	private float elapsedTime;
+
+	private const float elapsedTimeMax = 5f;
+
+	private FinishSyncrho.HoldType nowHoldType;
+
+	public enum HoldType
+	{
+		Non,
+		Shallow,
+		Deep
+	}
+}

+ 97 - 0
Assembly-CSharp/FluctuationOfParameterUnit.cs

@@ -0,0 +1,97 @@
+using System;
+using UnityEngine;
+
+public class FluctuationOfParameterUnit : MonoBehaviour
+{
+	private void Awake()
+	{
+		this.bg_sprite_ = UTY.GetChildObject(base.gameObject, "BGGray", false).GetComponent<UISprite>();
+		this.name_label_ = UTY.GetChildObject(base.gameObject, "Name", false).GetComponent<UILabel>();
+		this.value_label_ = UTY.GetChildObject(base.gameObject, "Value", false).GetComponent<UILabel>();
+	}
+
+	public void SetActive(bool value)
+	{
+		base.gameObject.SetActive(value);
+	}
+
+	public bool IsActive()
+	{
+		return base.gameObject.activeSelf;
+	}
+
+	public void SetBGVisible(bool value)
+	{
+		this.bg_sprite_.enabled = value;
+	}
+
+	public bool IsBGVisible()
+	{
+		return this.bg_sprite_.enabled;
+	}
+
+	public void SetTextName(string name)
+	{
+		this.name_label_.text = name;
+	}
+
+	public void SetTextValue(int value)
+	{
+		this.value_label_.text = "0";
+		if (this.AnimeTime <= 0f)
+		{
+			string str = string.Empty;
+			if (0 < value)
+			{
+				str += "+";
+			}
+			this.value_label_.text = str + value.ToString();
+		}
+		else
+		{
+			this.anime_event_ = delegate
+			{
+				iTween.ValueTo(this.gameObject, iTween.Hash(new object[]
+				{
+					"from",
+					0,
+					"to",
+					value,
+					"time",
+					this.AnimeTime,
+					"onupdate",
+					"UpdateValue"
+				}));
+			};
+		}
+	}
+
+	public void StartAnime()
+	{
+		if (this.anime_event_ != null)
+		{
+			this.anime_event_();
+			this.anime_event_ = null;
+		}
+	}
+
+	public void UpdateValue(int value)
+	{
+		string str = string.Empty;
+		if (0 < value)
+		{
+			str += "+";
+		}
+		this.value_label_.text = str + value.ToString();
+	}
+
+	public float AnimeTime = 1f;
+
+	private UISprite bg_sprite_;
+
+	private UILabel name_label_;
+
+	private UILabel value_label_;
+
+	private Action anime_event_;
+}

+ 584 - 0
Assembly-CSharp/FoveCamera.cs

@@ -0,0 +1,584 @@
+using System;
+using UnityEngine;
+
+public class FoveCamera : OvrCamera
+{
+	public override bool IsBloomEnabled
+	{
+		get
+		{
+			return this.m_BloomOVR.enabled;
+		}
+	}
+
+	public override bool IsNoHandController
+	{
+		get
+		{
+			return true;
+		}
+	}
+
+	public override AVRControllerBehavior.LIMIT_MODE HandLimitMode
+	{
+		get
+		{
+			return AVRControllerBehavior.LIMIT_MODE.NORMAL;
+		}
+		set
+		{
+		}
+	}
+
+	protected override void Awake()
+	{
+		this.m_goCenterEye = UTY.GetChildObject(base.gameObject, "Fove Interface", false);
+		this.m_trCenterEye = this.m_goCenterEye.transform;
+		this.m_trRealHead = this.m_trCenterEye;
+		this.m_camMonitor = UTY.GetChildObject(base.gameObject, "Fove Interface/MonitorCamera", false).GetComponent<Camera>();
+		this.m_FadeTargetCameraOVR = this.m_camMonitor.GetComponent<ScreenOverlay>();
+		this.m_BloomOVR = this.m_camMonitor.GetComponent<Bloom>();
+		this.m_fBloomDefIntensity = this.m_BloomOVR.bloomIntensity;
+		this.m_trTarget = new GameObject("OVRCamTarget").transform;
+		this.m_trTarget.SetParent(GameMain.Instance.transform, false);
+		this.m_trVirtualMy = new GameObject("OVRCamMy").transform;
+		this.m_trVirtualMy.SetParent(GameMain.Instance.transform, false);
+		GameObject gameObject = UnityEngine.Object.Instantiate(Resources.Load("OVR/OvrHeadScale")) as GameObject;
+		gameObject.SetActive(true);
+		GameObject gameObject2 = GameObject.Find("SystemUI Root");
+		gameObject.transform.SetParent(gameObject2.transform, false);
+		this.m_labelHeadScale = gameObject.GetComponentInChildren<UILabel>();
+		this.m_labelHeadScale.enabled = false;
+		this.m_goOvrUiScreen = UTY.GetChildObject(this.m_goCenterEye, "UI", false);
+		this.m_goOvrUiTablet = UTY.GetChildObject(base.gameObject, "Odogu_TabletPC", false);
+		this.m_OvrTablet = this.m_goOvrUiTablet.GetComponent<OvrTablet>();
+		this.m_OvrTablet.Init(this.m_goCenterEye);
+		Vignetting vignetting = base.gameObject.AddComponent<Vignetting>();
+		vignetting.enabled = false;
+		Camera component = base.gameObject.GetComponent<Camera>();
+		component.enabled = false;
+		this.m_trBaseHead = new GameObject("FoveCamBaseHead").transform;
+		this.m_trBaseHead.SetParent(GameMain.Instance.transform, false);
+		this.m_trBaseRoomBase = new GameObject("BaseRoomBase").transform;
+		this.m_trBaseRoomBase.SetParent(this.m_trBaseHead, false);
+		this.m_goEyeTargetMgr = UTY.GetChildObject(base.gameObject, "EyeTargetMgr", false);
+		this.m_VREvnetText = this.m_trCenterEye.Find("VREventText").GetComponent<VREventText>();
+		Transform transform = this.m_trCenterEye.Find("EyeRayCaster");
+		this.m_EyeRay = transform.GetComponent<OvrEyeRay>();
+		NDebug.Assert(this.m_EyeRay != null, "視線検出機構がみつかりません。");
+		this.m_DummyHand = base.transform.Find("HandPlayer").GetComponent<DummyVRHandAnimator>();
+		NDebug.Assert(this.m_DummyHand != null, "HandPlayer が見つかりません。");
+		this.m_DummyHand.gameObject.SetActive(false);
+		Transform transform2 = base.transform.Find("Controller (left)");
+		Transform transform3 = base.transform.Find("Controller (right)");
+		this.m_VRCtrlLeft = transform2.GetComponent<DummyVRController>();
+		this.m_VRCtrlLeft.Init();
+		this.m_VRCtrlRight = transform3.GetComponent<DummyVRController>();
+		this.m_VRCtrlRight.Init();
+	}
+
+	public override void Start()
+	{
+		this.m_camLeftEye = UTY.GetChildObject(base.gameObject, "Fove Interface/FOVE Eye (Left)", false).GetComponent<Camera>();
+		this.m_camRightEye = UTY.GetChildObject(base.gameObject, "Fove Interface/FOVE Eye (Right)", false).GetComponent<Camera>();
+		this.m_FadeLeft = this.m_camLeftEye.GetComponent<ScreenOverlay>();
+		this.m_FadeRight = this.m_camRightEye.GetComponent<ScreenOverlay>();
+		this.m_BloomLeft = this.m_camLeftEye.GetComponent<Bloom>();
+		this.m_BloomRight = this.m_camRightEye.GetComponent<Bloom>();
+		this.m_BloomLeft.bloomIntensity = this.m_fBloomDefIntensity;
+		this.m_BloomRight.bloomIntensity = this.m_fBloomDefIntensity;
+		this.m_camMonitor.gameObject.SetActive(true);
+		this.ChangeControllerNew(GameMain.Instance.CMSystem.OvrUseNewControllerType);
+		this.m_OvrTablet.UIStickyHead = true;
+		this.UpdateHeadScale();
+	}
+
+	public override void ChangeControllerNew(bool f_bNew)
+	{
+		if (f_bNew)
+		{
+			this.m_goOvrUiScreen.SetActive(false);
+			this.m_goOvrUiTablet.SetActive(true);
+			this.m_goOvrUiNow = this.m_goOvrUiTablet;
+		}
+		else
+		{
+			this.m_goOvrUiScreen.SetActive(true);
+			this.m_goOvrUiTablet.SetActive(false);
+			this.m_goOvrUiNow = this.m_goOvrUiScreen;
+		}
+		this.m_bControllerModeNew = f_bNew;
+	}
+
+	public override void DefaultControllerMode(bool f_bEnable)
+	{
+	}
+
+	public override void ReCallcOffset()
+	{
+		Vector3 position = this.m_trBaseHead.position;
+		Quaternion rotation = this.m_trBaseHead.rotation;
+		this.m_trBaseHead.position = this.m_trRealHead.position;
+		Vector3 eulerAngles = this.m_trRealHead.rotation.eulerAngles;
+		this.m_trBaseHead.rotation = Quaternion.Euler(0f, eulerAngles.y, 0f);
+		this.m_trBaseRoomBase.position = base.transform.position;
+		this.m_trBaseRoomBase.rotation = base.transform.rotation;
+		this.m_trBaseHead.position = position;
+		Vector3 eulerAngles2 = rotation.eulerAngles;
+		this.m_trBaseHead.rotation = Quaternion.Euler(0f, eulerAngles2.y, 0f);
+	}
+
+	public override void SetCameraMask(CameraMain.CameraMask f_eMask, bool f_bVisible)
+	{
+		if (f_bVisible)
+		{
+		}
+	}
+
+	public override void CameraMaskReset()
+	{
+	}
+
+	public override void SetCameraType(CameraMain.CameraType f_eType)
+	{
+	}
+
+	public override CameraMain.CameraType GetCameraType()
+	{
+		return CameraMain.CameraType.Free;
+	}
+
+	public override void SetControl(bool f_bEnable)
+	{
+	}
+
+	public override bool GetControl()
+	{
+		return true;
+	}
+
+	public override void SetTargetPos(Vector3 f_vecWorldPos, bool f_bSelf = true)
+	{
+		if (f_bSelf)
+		{
+			iTween.StopAndSkipToEnd(base.gameObject);
+		}
+		this.m_trTarget.position = f_vecWorldPos;
+		this.SetTransform(this.m_trTarget.position, this.m_vRot, this.m_fDistance);
+	}
+
+	public override Vector3 GetTargetPos()
+	{
+		return this.m_trTarget.position;
+	}
+
+	public override void SetDistance(float f_fDistance, bool f_bSelf = true)
+	{
+		if (f_bSelf)
+		{
+			iTween.StopAndSkipToEnd(base.gameObject);
+		}
+		this.m_fDistance = f_fDistance;
+		this.SetTransform(this.m_trTarget.position, this.m_vRot, this.m_fDistance);
+	}
+
+	public override float GetDistance()
+	{
+		return this.m_fDistance;
+	}
+
+	public override void SetAroundAngle(Vector2 f_vecAngle, bool f_bSelf = true)
+	{
+		if (f_bSelf)
+		{
+			iTween.StopAndSkipToEnd(base.gameObject);
+		}
+		this.SetTransform(this.m_trTarget.position, f_vecAngle, this.m_fDistance);
+	}
+
+	public override Vector2 GetAroundAngle()
+	{
+		return this.m_vRot;
+	}
+
+	public override void SetTargetOffset(Vector3 f_vOffs, bool f_bSelf = true)
+	{
+	}
+
+	public override void SetPos(Vector3 f_vecWorldPos)
+	{
+		this.m_trBaseHead.position = f_vecWorldPos;
+	}
+
+	public override Vector3 GetPos()
+	{
+		return this.m_trBaseHead.position;
+	}
+
+	public override void SetRotation(Vector3 f_vecWorldRot)
+	{
+		this.m_trBaseHead.rotation = Quaternion.Euler(f_vecWorldRot);
+	}
+
+	public override void SetRealHeadPos(Vector3 f_vecWorldPos, bool f_bYFromFloor = false)
+	{
+		if (f_bYFromFloor)
+		{
+			f_vecWorldPos.y = this.GetYfromFloor(f_vecWorldPos);
+		}
+		Vector3 position = this.m_trBaseRoomBase.position;
+		this.m_trBaseHead.position = f_vecWorldPos;
+		Vector3 b = f_vecWorldPos - this.GetRealHeadTransform().position;
+		this.m_trBaseRoomBase.position = position + b;
+	}
+
+	public override void SetRealHeadRot(Vector3 f_vecWorldRot, bool f_bRotYOnly = true)
+	{
+		Transform realHeadTransform = this.GetRealHeadTransform();
+		this.m_trBaseHead.position = realHeadTransform.position;
+		if (f_bRotYOnly)
+		{
+			this.m_trBaseHead.rotation = Quaternion.Euler(0f, realHeadTransform.rotation.eulerAngles.y, 0f);
+		}
+		else
+		{
+			this.m_trBaseHead.rotation = Quaternion.Euler(f_vecWorldRot);
+		}
+		this.m_trBaseRoomBase.position = base.transform.position;
+		this.m_trBaseRoomBase.rotation = base.transform.rotation;
+		float num = f_vecWorldRot.y - realHeadTransform.rotation.eulerAngles.y;
+		f_vecWorldRot.y = realHeadTransform.rotation.eulerAngles.y + num;
+		this.SetRotation(f_vecWorldRot);
+	}
+
+	public override void SetFootPos(Vector3 f_vecFootPos, CameraMain.STAND_SIT f_eState)
+	{
+		if (f_eState == CameraMain.STAND_SIT.STAND)
+		{
+			f_vecFootPos.y += GameMain.Instance.CMSystem.VRCameraHeightStandOffs;
+		}
+		else if (f_eState == CameraMain.STAND_SIT.SIT)
+		{
+			f_vecFootPos.y += GameMain.Instance.CMSystem.VRCameraHeightSitOffs;
+		}
+		else
+		{
+			f_vecFootPos.y += this.GetYfromFloor(this.GetRealHeadTransform().position);
+		}
+		this.SetRealHeadPos(f_vecFootPos, false);
+	}
+
+	public override Transform GetBaseHeadTransform()
+	{
+		return this.m_trBaseHead;
+	}
+
+	public override Transform GetRealHeadTransform()
+	{
+		return this.m_trRealHead;
+	}
+
+	private void SetTransform(Vector3 f_vecTargetPosWorld, Vector2 f_vecRot, float f_fDistance)
+	{
+		this.m_trTarget.position = f_vecTargetPosWorld;
+		this.m_vRot = f_vecRot;
+		this.m_trVirtualMy.rotation = Quaternion.identity;
+		this.m_trVirtualMy.Rotate(new Vector3(0f, f_vecRot.x, 0f), Space.World);
+		this.m_trVirtualMy.Rotate(new Vector3(f_vecRot.y, 0f, 0f), Space.Self);
+		this.m_trVirtualMy.position = this.m_trVirtualMy.rotation * new Vector3(0f, 0f, -f_fDistance) + this.m_trTarget.position;
+		this.m_trBaseHead.position = this.m_trVirtualMy.position + (this.m_trTarget.position - this.m_trVirtualMy.position) * 0.5f;
+		Quaternion rotation = Quaternion.LookRotation(new Vector3(this.m_trTarget.position.x, 0f, this.m_trTarget.position.z) - new Vector3(this.m_trVirtualMy.position.x, 0f, this.m_trVirtualMy.position.z));
+		this.m_trBaseHead.rotation = rotation;
+	}
+
+	public override void Reset(CameraMain.CameraType f_eType, bool f_bControl)
+	{
+		iTween.StopAndSkipToEnd(base.gameObject);
+		base.RemoveChaseCameraAll();
+		this.SetTargetPos(new Vector3(0f, 1.5f, 0f), true);
+	}
+
+	public override void FadeOutNoUI(float f_fTime = 0.5f, bool f_bSkipable = true)
+	{
+	}
+
+	public override void FadeInNoUI(float f_fTime = 0.5f, bool f_bSkipable = true)
+	{
+	}
+
+	protected override float GetFadeIntensity()
+	{
+		return this.m_FadeTargetCameraOVR.intensity;
+	}
+
+	protected override void OnProcessFade(float f_fIntensity)
+	{
+		this.m_FadeTargetCameraOVR.intensity = f_fIntensity;
+		this.m_FadeLeft.intensity = f_fIntensity;
+		this.m_FadeRight.intensity = f_fIntensity;
+	}
+
+	protected override void OnOverlayState(bool f_bEnable)
+	{
+		this.m_FadeTargetCameraOVR.enabled = f_bEnable;
+		this.m_FadeLeft.enabled = f_bEnable;
+		this.m_FadeRight.enabled = f_bEnable;
+	}
+
+	public override Ray GetForwardRay()
+	{
+		return new Ray(this.m_trCenterEye.position, this.m_trCenterEye.rotation * Vector3.forward);
+	}
+
+	public override void UpdateHeadScale()
+	{
+		float ovrHeadScale = GameMain.Instance.CMSystem.OvrHeadScale;
+		base.gameObject.transform.localScale = new Vector3(ovrHeadScale, ovrHeadScale, ovrHeadScale);
+	}
+
+	public override void CheckSwitchManHeadEnable(Vector3 f_vMyGlovalPos)
+	{
+		if (this.m_bIsSceneYotogi)
+		{
+			Maid man = GameMain.Instance.CharacterMgr.GetMan(0);
+			if (man != null && man.body0 != null && man.body0.trsHead != null && man.Visible)
+			{
+				if (this.m_bBefManHeadEnable)
+				{
+					if ((man.body0.trsHead.position - f_vMyGlovalPos).sqrMagnitude < 0.2f)
+					{
+						SkinnedMeshRenderer componentInChildren = man.body0.trsHead.GetComponentInChildren<SkinnedMeshRenderer>(true);
+						if (componentInChildren != null)
+						{
+							componentInChildren.enabled = false;
+							this.m_bBefManHeadEnable = false;
+						}
+					}
+				}
+				else if ((man.body0.trsHead.position - f_vMyGlovalPos).sqrMagnitude >= 0.2f)
+				{
+					SkinnedMeshRenderer componentInChildren2 = man.body0.trsHead.GetComponentInChildren<SkinnedMeshRenderer>(true);
+					if (componentInChildren2 != null)
+					{
+						componentInChildren2.enabled = true;
+						this.m_bBefManHeadEnable = true;
+					}
+				}
+			}
+		}
+	}
+
+	protected override void Update()
+	{
+		if (GameMain.Instance == null)
+		{
+			return;
+		}
+		if (!base.IsUIShow)
+		{
+			UICamera.InputEnable = false;
+		}
+		if (this.m_BloomOVR != null)
+		{
+			bool enabled = this.m_BloomOVR.enabled;
+			this.m_BloomOVR.enabled = GameMain.Instance.CMSystem.Bloom;
+			this.m_BloomOVR.bloomIntensity = this.m_fBloomDefIntensity * (float)GameMain.Instance.CMSystem.BloomValue * 0.01f;
+			if (this.m_BloomOVR.bloomIntensity <= 0.01f)
+			{
+				this.m_BloomOVR.enabled = false;
+			}
+			else
+			{
+				this.m_BloomOVR.enabled = true;
+			}
+			if (this.m_BloomOVR.enabled != enabled)
+			{
+				GameMain.Instance.BroadcastMessage("OnChangeScreenSizeOrAA", SendMessageOptions.DontRequireReceiver);
+			}
+			if (this.m_BloomLeft != null)
+			{
+				this.m_BloomLeft.enabled = this.m_BloomOVR.enabled;
+				this.m_BloomLeft.bloomIntensity = this.m_BloomOVR.bloomIntensity;
+			}
+			if (this.m_BloomRight != null)
+			{
+				this.m_BloomRight.enabled = this.m_BloomOVR.enabled;
+				this.m_BloomRight.bloomIntensity = this.m_BloomOVR.bloomIntensity;
+			}
+		}
+		this.vFowerd = this.m_trCenterEye.rotation * Vector3.forward;
+		this.vLeft = this.m_trCenterEye.rotation * Vector3.left;
+		this.vUp = this.m_trCenterEye.rotation * Vector3.up;
+		if (this.IsNoHandController && GameMain.Instance.CMSystem.VRCameraPlaneMove)
+		{
+			this.vLeft.y = (this.vFowerd.y = 0f);
+			this.vLeft.Normalize();
+			this.vFowerd.Normalize();
+			this.vUp = Vector3.up;
+		}
+		this.v = this.m_trBaseHead.position;
+		if (this.m_bFallThrough || !this.m_bUiToggle)
+		{
+			if (this.m_bWheelToZoom && !base.IsUIShow)
+			{
+				this.v += this.vFowerd * (NInput.GetAxis(this.mouseAxisZoom) * (this.m_MoveSpeed * 10f * Time.deltaTime));
+			}
+			if (NInput.GetMouseButton(2))
+			{
+				Vector3 vector = new Vector3(-NInput.GetAxis(this.mouseAxisX), -NInput.GetAxis(this.mouseAxisY), 0f);
+				this.v += (this.vLeft * -1f * vector.x + this.vUp * vector.y) * (this.m_MoveSpeed * Time.deltaTime);
+			}
+			if (NInput.GetMouseButton(1))
+			{
+				this.m_trBaseHead.Rotate(new Vector3(0f, 1f, 0f), NInput.GetAxis(this.mouseAxisX) * -1f * this.m_RotSpeed * Time.deltaTime);
+			}
+		}
+		if (NInput.GetMouseButton(1))
+		{
+			this.vMouseMoving += new Vector2(Math.Abs(NInput.GetAxis("Mouse X")), Math.Abs(NInput.GetAxis("Mouse Y")));
+		}
+		else
+		{
+			if ((this.m_bFallThrough || this.m_bIsForceRightClickUiToggle) && NInput.GetMouseButtonUp(1) && this.vMouseMoving.magnitude < 3f && this.m_bRightClickUIToggle)
+			{
+				this.ToggleUI();
+			}
+			this.vMouseMoving = Vector2.zero;
+		}
+		if (Input.GetKey(KeyCode.A))
+		{
+			this.v += this.vLeft * (this.m_MoveSpeed * base.MoveSpeedAccel * this.MoveDashRate(KeyCode.A) * Time.deltaTime);
+		}
+		if (Input.GetKey(KeyCode.D))
+		{
+			this.v -= this.vLeft * (this.m_MoveSpeed * base.MoveSpeedAccel * this.MoveDashRate(KeyCode.D) * Time.deltaTime);
+		}
+		if (Input.GetKey(KeyCode.W))
+		{
+			this.v += this.vFowerd * (this.m_MoveSpeed * base.MoveSpeedAccel * this.MoveDashRate(KeyCode.W) * Time.deltaTime);
+		}
+		if (!Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.LeftAlt) && Input.GetKey(KeyCode.S))
+		{
+			this.v -= this.vFowerd * (this.m_MoveSpeed * base.MoveSpeedAccel * this.MoveDashRate(KeyCode.S) * Time.deltaTime);
+		}
+		if (Input.GetKey(KeyCode.Z))
+		{
+			this.v -= this.vUp * (this.m_MoveSpeed * base.MoveSpeedAccel * Time.deltaTime);
+		}
+		if (Input.GetKey(KeyCode.X))
+		{
+			this.v += this.vUp * (this.m_MoveSpeed * base.MoveSpeedAccel * Time.deltaTime);
+		}
+		if (this.HandLimitMode != AVRControllerBehavior.LIMIT_MODE.HAND_ONLY)
+		{
+			this.m_trBaseHead.position = this.v;
+		}
+		if (Input.GetKey(KeyCode.Q))
+		{
+			this.m_trBaseHead.Rotate(new Vector3(0f, 1f, 0f), -40f * base.RotSpeedAccel * Time.deltaTime);
+		}
+		if (Input.GetKey(KeyCode.E))
+		{
+			this.m_trBaseHead.Rotate(new Vector3(0f, 1f, 0f), 40f * base.RotSpeedAccel * Time.deltaTime);
+		}
+		if (this.IsNoHandController && !base.IsUIShow && GameMain.Instance.CMSystem.OvrMouseRot)
+		{
+			this.m_trBaseHead.Rotate(new Vector3(0f, 1f, 0f), 60f * NInput.GetAxis("Mouse X") * base.RotMouseSpeedAccel * Time.deltaTime);
+		}
+		if (Input.GetKeyUp(KeyCode.R))
+		{
+			this.ReCallcOffset();
+		}
+		if (Input.GetKeyUp(KeyCode.M))
+		{
+			this.m_camMonitor.gameObject.SetActive(!this.m_camMonitor.gameObject.activeSelf);
+			Debug.Log("モニター表示切替=" + this.m_camMonitor.gameObject.activeSelf);
+		}
+		if (Input.GetKeyUp(KeyCode.T))
+		{
+			this.m_goEyeTargetMgr.SetActive(!this.m_goEyeTargetMgr.activeSelf);
+			Debug.Log("視線ターゲット表示切替=" + this.m_goEyeTargetMgr.activeSelf);
+		}
+		if (Input.GetKeyUp(KeyCode.U))
+		{
+			GameMain.Instance.OvrMgr.OvrCamera.ShowUI(true);
+			GameMain.Instance.OvrMgr.OvrCamera.UIPosReset(0f);
+		}
+		if (Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.SysReq))
+		{
+			if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
+			{
+				this.SnapShotOVR(false);
+			}
+			else if (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))
+			{
+				this.SnapShotOVR(true);
+			}
+		}
+		if (Input.GetKey(KeyCode.Tab))
+		{
+			this.m_labelHeadScale.enabled = true;
+			if (Input.GetKey(KeyCode.C))
+			{
+				GameMain.Instance.CMSystem.OvrHeadScale += 0.1f * Time.deltaTime;
+				this.UpdateHeadScale();
+			}
+			if (Input.GetKey(KeyCode.V))
+			{
+				GameMain.Instance.CMSystem.OvrHeadScale -= 0.1f * Time.deltaTime;
+				this.UpdateHeadScale();
+			}
+			this.m_labelHeadScale.text = "Head Scale " + GameMain.Instance.CMSystem.OvrHeadScale;
+			this.bTab = true;
+		}
+		else if (this.bTab)
+		{
+			this.m_labelHeadScale.enabled = false;
+			this.bTab = false;
+		}
+		if (this.IsNoHandController && Input.GetKeyUp(KeyCode.Space))
+		{
+			this.ToggleUI();
+		}
+		base.transform.position = this.m_trBaseRoomBase.position;
+		base.transform.rotation = this.m_trBaseRoomBase.rotation;
+		this.CheckSwitchManHeadEnable(this.m_trRealHead.position);
+	}
+
+	private void OnDrawGizmos()
+	{
+		if (this.m_trTarget != null)
+		{
+			Gizmos.DrawIcon(this.m_trTarget.position, "gizmo_eye.png", true);
+			if (base.enabled)
+			{
+				Gizmos.color = Color.cyan;
+				Gizmos.DrawRay(this.m_trVirtualMy.position, this.m_trTarget.position - this.m_trVirtualMy.position);
+				Gizmos.DrawRay(this.m_trCenterEye.position, this.m_trCenterEye.rotation * Vector3.forward * 10f);
+			}
+		}
+	}
+
+	private Camera m_camMonitor;
+
+	private Camera m_camLeftEye;
+
+	private Camera m_camRightEye;
+
+	private ScreenOverlay m_FadeLeft;
+
+	private ScreenOverlay m_FadeRight;
+
+	private Bloom m_BloomLeft;
+
+	private Bloom m_BloomRight;
+
+	private GameObject m_goEyeTargetMgr;
+
+	private enum MouseButtonDown
+	{
+		MBD_LEFT,
+		MBD_RIGHT,
+		MBD_MIDDLE
+	}
+}

+ 207 - 0
Assembly-CSharp/FoveEyeRayMgr.cs

@@ -0,0 +1,207 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+public class FoveEyeRayMgr : MonoBehaviour
+{
+	private void Start()
+	{
+	}
+
+	private IEnumerator CoFaceChange(FoveEyeRayMgr.HIT_REGION f_eType)
+	{
+		if (FoveEyeRayMgr.m_TargetMaid != null)
+		{
+			if (this.m_strBackFace != null)
+			{
+				FoveEyeRayMgr.m_TargetMaid.FaceAnime(this.m_strBackFace, 2f, 0);
+			}
+			if (this.m_strBackBlend != null)
+			{
+				FoveEyeRayMgr.m_TargetMaid.FaceBlend(this.m_strBackBlend);
+			}
+			this.m_strBackFace = FoveEyeRayMgr.m_TargetMaid.ActiveFace;
+			this.m_strBackBlend = FoveEyeRayMgr.m_TargetMaid.FaceName3;
+			if (f_eType == FoveEyeRayMgr.HIT_REGION.HEAD)
+			{
+				if (this.m_strBackFace != "優しさ")
+				{
+					FoveEyeRayMgr.m_TargetMaid.FaceAnime("優しさ", 1f, 0);
+				}
+				if (this.m_strBackBlend != "頬1涙0")
+				{
+					FoveEyeRayMgr.m_TargetMaid.FaceBlend("頬1涙0");
+				}
+			}
+			else if (f_eType == FoveEyeRayMgr.HIT_REGION.BUST)
+			{
+				if (this.m_strBackFace != "困った")
+				{
+					FoveEyeRayMgr.m_TargetMaid.FaceAnime("困った", 1f, 0);
+				}
+				if (this.m_strBackBlend != "頬1涙0")
+				{
+					FoveEyeRayMgr.m_TargetMaid.FaceBlend("頬1涙0");
+				}
+			}
+			else if (f_eType == FoveEyeRayMgr.HIT_REGION.CROTCH)
+			{
+				if (this.m_strBackFace != "びっくり")
+				{
+					FoveEyeRayMgr.m_TargetMaid.FaceAnime("びっくり", 1f, 0);
+				}
+				if (this.m_strBackBlend != "頬2涙0")
+				{
+					FoveEyeRayMgr.m_TargetMaid.FaceBlend("頬2涙0");
+				}
+			}
+			this.m_fWaitTime = 5f;
+			do
+			{
+				yield return null;
+				this.m_fWaitTime -= Time.deltaTime;
+				if (this.m_fWaitTime <= 0f)
+				{
+					break;
+				}
+			}
+			while (!(FoveEyeRayMgr.m_TargetMaid == null));
+			if (FoveEyeRayMgr.m_TargetMaid != null)
+			{
+				FoveEyeRayMgr.m_TargetMaid.FaceAnime(this.m_strBackFace, 2f, 0);
+				FoveEyeRayMgr.m_TargetMaid.FaceBlend(this.m_strBackBlend);
+			}
+		}
+		this.m_coFaceChage = null;
+		yield break;
+	}
+
+	private void Update()
+	{
+		FoveInterface.EyeRays eyeRays = FoveInterface.GetEyeRays();
+		this.m_vEyeDirEaseL += (eyeRays.left.direction - this.m_vEyeDirEaseL) * this.EASING;
+		this.m_rayEaseL.origin = eyeRays.left.origin;
+		this.m_rayEaseL.direction = eyeRays.left.direction;
+		this.m_vEyeDirEaseR += (eyeRays.right.direction - this.m_vEyeDirEaseR) * this.EASING;
+		this.m_rayEaseR.origin = eyeRays.right.origin;
+		this.m_rayEaseR.direction = eyeRays.right.direction;
+		bool flag = false;
+		RaycastHit raycastHit;
+		if (Physics.Raycast(this.m_rayEaseL, out raycastHit, float.PositiveInfinity, 131072))
+		{
+			flag = true;
+			this.m_goCursorLeft.transform.position = raycastHit.point;
+		}
+		else
+		{
+			this.m_goCursorLeft.transform.position = eyeRays.left.GetPoint(3f);
+		}
+		RaycastHit raycastHit2;
+		if (Physics.Raycast(this.m_rayEaseR, out raycastHit2, float.PositiveInfinity, 131072))
+		{
+			flag = true;
+			this.m_goCursorRight.transform.position = raycastHit2.point;
+		}
+		else
+		{
+			this.m_goCursorRight.transform.position = eyeRays.right.GetPoint(3f);
+		}
+		if (flag && FoveEyeRayMgr.m_TargetMaid != null)
+		{
+			string a = string.Empty;
+			string a2 = string.Empty;
+			if (raycastHit.transform != null)
+			{
+				a = raycastHit.transform.name;
+			}
+			if (raycastHit2.transform != null)
+			{
+				a2 = raycastHit2.transform.name;
+			}
+			FoveEyeRayMgr.HIT_REGION hit_REGION = FoveEyeRayMgr.HIT_REGION.NON;
+			if (a == "OvrGrabHit_Bip01 Head" || a2 == "OvrGrabHit_Bip01 Head")
+			{
+				hit_REGION = FoveEyeRayMgr.HIT_REGION.HEAD;
+			}
+			else if (a == "OvrGrabHit_Mune_L_sub" || a2 == "OvrGrabHit_Mune_L_sub" || a == "OvrGrabHit_Mune_R_sub" || a2 == "OvrGrabHit_Mune_R_sub")
+			{
+				hit_REGION = FoveEyeRayMgr.HIT_REGION.BUST;
+			}
+			else if (a == "OvrGrabHit_Bip01 Pelvis_SCL_" || a2 == "OvrGrabHit_Bip01 Pelvis_SCL_")
+			{
+				hit_REGION = FoveEyeRayMgr.HIT_REGION.CROTCH;
+			}
+			if (hit_REGION == FoveEyeRayMgr.HIT_REGION.NON)
+			{
+				this.m_fLookTimeNow = 0f;
+			}
+			else if (hit_REGION != this.m_hitBefore)
+			{
+				this.m_fLookTimeNow = 0f;
+				if (this.m_coFaceChage != null)
+				{
+					base.StopCoroutine(this.m_coFaceChage);
+					this.m_coFaceChage = null;
+				}
+			}
+			else
+			{
+				this.m_fLookTimeNow += Time.deltaTime;
+				if (this.m_fLookTimeNow > 2f)
+				{
+					if (this.m_coFaceChage == null)
+					{
+						this.m_coFaceChage = base.StartCoroutine(this.CoFaceChange(hit_REGION));
+					}
+					else
+					{
+						this.m_fWaitTime = 5f;
+					}
+					this.m_fLookTimeNow = 0f;
+				}
+			}
+			this.m_hitBefore = hit_REGION;
+		}
+		else
+		{
+			this.m_fLookTimeNow = 0f;
+			this.m_hitBefore = FoveEyeRayMgr.HIT_REGION.NON;
+		}
+	}
+
+	public static Maid m_TargetMaid;
+
+	public GameObject m_goCursorLeft;
+
+	public GameObject m_goCursorRight;
+
+	private float m_fLookTimeNow;
+
+	private Coroutine m_coFaceChage;
+
+	private float m_fWaitTime = 5f;
+
+	private string m_strBackFace;
+
+	private string m_strBackBlend;
+
+	private FoveEyeRayMgr.HIT_REGION m_hitBefore;
+
+	private Vector3 m_vEyeDirEaseL;
+
+	private Vector3 m_vEyeDirEaseR;
+
+	private Ray m_rayEaseL;
+
+	private Ray m_rayEaseR;
+
+	private float EASING = 0.05f;
+
+	private enum HIT_REGION
+	{
+		NON,
+		HEAD,
+		BUST,
+		CROTCH
+	}
+}

+ 69 - 0
Assembly-CSharp/FpsCounter.cs

@@ -0,0 +1,69 @@
+using System;
+using UnityEngine;
+
+public class FpsCounter : MonoBehaviour
+{
+	public void Awake()
+	{
+		if (this.num_sprite_array_ == null)
+		{
+			this.num_sprite_array_ = new UISprite[3];
+			for (int i = 0; i < this.num_sprite_array_.Length; i++)
+			{
+				this.num_sprite_array_[i] = UTY.GetChildObject(base.gameObject, "Grid/keta" + i.ToString(), false).GetComponent<UISprite>();
+			}
+		}
+	}
+
+	public void Start()
+	{
+		this.Awake();
+		for (int i = 1; i < this.num_sprite_array_.Length; i++)
+		{
+			this.num_sprite_array_[i].spriteName = this.GetSpriteName(0);
+			this.num_sprite_array_[i].gameObject.SetActive(false);
+		}
+		this.back_time_ = Time.realtimeSinceStartup;
+	}
+
+	public void Update()
+	{
+		this.count_++;
+		float realtimeSinceStartup = Time.realtimeSinceStartup;
+		if (1f < realtimeSinceStartup - this.back_time_)
+		{
+			char[] array = this.count_.ToString().ToCharArray();
+			Array.Reverse(array);
+			for (int i = 0; i < this.num_sprite_array_.Length; i++)
+			{
+				if (array.Length <= i)
+				{
+					this.num_sprite_array_[i].gameObject.SetActive(false);
+				}
+				else
+				{
+					this.num_sprite_array_[i].spriteName = this.GetSpriteName(array[i]);
+					this.num_sprite_array_[i].gameObject.SetActive(true);
+				}
+			}
+			this.count_ = 0;
+			this.back_time_ = realtimeSinceStartup;
+		}
+	}
+
+	public string GetSpriteName(int num)
+	{
+		return "cmd2_fps_number" + num.ToString();
+	}
+
+	public string GetSpriteName(char num)
+	{
+		return "cmd2_fps_number" + num.ToString();
+	}
+
+	private UISprite[] num_sprite_array_;
+
+	private float back_time_;
+
+	private int count_;
+}

+ 161 - 0
Assembly-CSharp/FreeModeInit.cs

@@ -0,0 +1,161 @@
+using System;
+using MaidStatus;
+using UnityEngine;
+
+public class FreeModeInit : WfScreenChildren
+{
+	public override void Awake()
+	{
+		base.Awake();
+		base.SetFadeTime(0f);
+	}
+
+	protected override void OnCall()
+	{
+		this.mgr_ = (base.parent_mgr as SceneFreeModeSelectManager);
+		NDebug.AssertNull(this.mgr_ != null);
+		GameMain.Instance.ScriptMgr.ClearForcExecWaitEvent();
+		GameMain.Instance.MsgWnd.CloseMessageWindowPanel();
+		GameMain.Instance.MsgWnd.CancelSkipAndAuto();
+		GameMain.Instance.BgMgr.DelPrefabFromBgAll();
+		if (DailyMgr.IsLegacy)
+		{
+			GameMain.Instance.BgMgr.ChangeBg("Salon");
+		}
+		else
+		{
+			GameMain.Instance.BgMgr.ChangeBg("Theater");
+		}
+		GameMain.Instance.MainLight.Reset();
+		GameMain.Instance.CharacterMgr.ResetCharaPosAll();
+		GameMain.Instance.MainCamera.Reset(CameraMain.CameraType.Target, true);
+		GameMain.Instance.SoundMgr.StopSe();
+		GameMain.Instance.SoundMgr.VoiceStopAll();
+		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
+		Maid man = characterMgr.GetMan(0);
+		man.Visible = true;
+		Maid maid = characterMgr.GetMaid(0);
+		maid.Visible = true;
+		string[] array = new string[]
+		{
+			"handitem",
+			"kousoku_upper",
+			"kousoku_lower",
+			"skirt",
+			"panz",
+			"mizugi",
+			"onepiece",
+			"accanl",
+			"accvag",
+			"KubiScl",
+			"UdeScl",
+			"DouPer",
+			"sintyou",
+			"kata"
+		};
+		for (int i = 0; i < characterMgr.GetStockMaidCount(); i++)
+		{
+			Maid stockMaid = characterMgr.GetStockMaid(i);
+			if (!(stockMaid == null))
+			{
+				stockMaid.ResetAll();
+			}
+		}
+		for (int j = 0; j < characterMgr.GetStockManCount(); j++)
+		{
+			Maid stockMan = characterMgr.GetStockMan(j);
+			if (!(stockMan == null))
+			{
+				stockMan.ResetAll();
+			}
+		}
+		for (int k = 1; k < characterMgr.GetMaidCount(); k++)
+		{
+			characterMgr.DeactivateMaid(k);
+		}
+		if (maid != null)
+		{
+			string bgmFileName = maid.status.personal.bgmFileName;
+			if (!string.IsNullOrEmpty(bgmFileName))
+			{
+				if (maid.status.heroineType == HeroineType.Transfer)
+				{
+					GameMain.Instance.SoundMgr.PlayBGMLegacy(bgmFileName, 0.5f, true);
+				}
+				else
+				{
+					GameMain.Instance.SoundMgr.PlayBGM(bgmFileName, 0.5f, true);
+				}
+			}
+			maid.Visible = false;
+			maid.Visible = true;
+			maid.FaceAnime("通常", 0f, 0);
+			maid.FaceAnime("通常", 0.01f, 0);
+			maid.FaceBlend("無し");
+			maid.AllProcPropSeqStart();
+		}
+		man.AllProcPropSeqStart();
+		GameMain.Instance.SysShortcut.strSceneHelpName = "SceneFreeModeSelect";
+		uGUITutorialPanel.OpenTutorial("SceneFreeModeSelect", null, false);
+	}
+
+	protected override bool IsCallFadeIn()
+	{
+		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
+		bool flag = !characterMgr.IsBusy();
+		if (!flag)
+		{
+			return false;
+		}
+		if (DailyMgr.IsLegacy)
+		{
+			YotogiOld.CreateData();
+			if (!YotogiOldSkillSelectWaitMotion.ApplyMaidGesture(characterMgr.GetMaid(0), YotogiOld.Stage.サロン))
+			{
+				return false;
+			}
+		}
+		else if (!YotogiSkillSelectWaitMotion.ApplyMaidGesture(characterMgr.GetMaid(0), YotogiStage.GetAllDatas(true)[0]))
+		{
+			return false;
+		}
+		GameMain.Instance.MainCamera.SetTargetOffset(new Vector3((float)Screen.width / 256f * 208f - (float)Screen.width / 2f, 0f, 0f), false);
+		for (int i = 0; i < characterMgr.GetManCount(); i++)
+		{
+			Maid man = characterMgr.GetMan(i);
+			if (man != null && man.Visible)
+			{
+				man.Visible = false;
+			}
+		}
+		return flag;
+	}
+
+	protected override void FadeIn()
+	{
+		base.FadeIn();
+		if (base.fade_status == WfScreenChildren.FadeStatus.Wait)
+		{
+			this.Finish();
+		}
+	}
+
+	public override void Update()
+	{
+		base.Update();
+		if (base.fade_status == WfScreenChildren.FadeStatus.Wait)
+		{
+			this.Finish();
+		}
+	}
+
+	protected override void OnFinish()
+	{
+		base.OnFinish();
+		this.mgr_.CallScreen(this.next_screen);
+	}
+
+	public string next_screen { get; set; }
+
+	private SceneFreeModeSelectManager mgr_;
+}

+ 0 - 0
Assembly-CSharp/FreeModeItemEveryday.cs


Some files were not shown because too many files changed in this diff