TMorphBone.cs 30 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class TMorphBone : BoneMorph_
  5. {
  6. public float GetDistanceToSkinByAngle(string groupName, float ratio, float angle, out float defaultDistance)
  7. {
  8. return this.m_boneDistanceToSkinMgr.GetDistanceToSkinByAngle(groupName, ratio, angle, out defaultDistance);
  9. }
  10. public override void Init()
  11. {
  12. }
  13. public override void Init(TBodySkin tbskin, MPN f_mpn, TBody.SlotID f_slot)
  14. {
  15. this.m_tbSkin = tbskin;
  16. Transform t = tbskin.obj_tr;
  17. this.UninitItem(f_mpn, f_slot);
  18. Func<string, Transform, TMorphBone.BoneMorphPos> func = delegate(string propertyName, Transform boneTrans)
  19. {
  20. this.m_listBoneMorphPos.RemoveAll((TMorphBone.BoneMorphPos f) => f.strPropName == propertyName);
  21. this.m_listBoneMorphPos.Add(new TMorphBone.BoneMorphPos(propertyName, boneTrans));
  22. return this.m_listBoneMorphPos[this.m_listBoneMorphPos.Count - 1];
  23. };
  24. Func<string, Transform, TMorphBone.BoneMorphRotatio> func2 = delegate(string propertyName, Transform boneTrans)
  25. {
  26. this.m_listBoneMorphRot.RemoveAll((TMorphBone.BoneMorphRotatio f) => f.strPropName == propertyName);
  27. this.m_listBoneMorphRot.Add(new TMorphBone.BoneMorphRotatio(propertyName, boneTrans));
  28. return this.m_listBoneMorphRot[this.m_listBoneMorphRot.Count - 1];
  29. };
  30. Func<string, Transform, TMorphBone.BoneMorphScl> func3 = delegate(string propertyName, Transform boneTrans)
  31. {
  32. this.m_listBoneMorphScl.RemoveAll((TMorphBone.BoneMorphScl f) => f.strPropName == propertyName);
  33. this.m_listBoneMorphScl.Add(new TMorphBone.BoneMorphScl(propertyName, boneTrans));
  34. return this.m_listBoneMorphScl[this.m_listBoneMorphScl.Count - 1];
  35. };
  36. if (f_mpn == MPN.head && f_slot == TBody.SlotID.head)
  37. {
  38. Transform transform = CMT.SearchObjName(t, "Ear_L", false);
  39. bool flag = transform != null;
  40. if (flag)
  41. {
  42. this.m_listBoneMorphPos.RemoveAll((TMorphBone.BoneMorphPos f) => f.strPropName == "MayuY");
  43. }
  44. else
  45. {
  46. HashSet<string> gp001AddPropNames = new HashSet<string>(new string[]
  47. {
  48. "Earrot_L",
  49. "Earrot_R",
  50. "Earscl_L",
  51. "Earscl_R",
  52. "Nosepos",
  53. "Nosescl",
  54. "Mayupos_L",
  55. "Mayupos_R",
  56. "Mayurot_L",
  57. "Mayurot_R"
  58. });
  59. this.m_listBoneMorphPos.RemoveAll((TMorphBone.BoneMorphPos f) => gp001AddPropNames.Contains(f.strPropName));
  60. this.m_listBoneMorphRot.RemoveAll((TMorphBone.BoneMorphRotatio f) => gp001AddPropNames.Contains(f.strPropName));
  61. this.m_listBoneMorphScl.RemoveAll((TMorphBone.BoneMorphScl f) => gp001AddPropNames.Contains(f.strPropName));
  62. }
  63. if (transform != null)
  64. {
  65. func2("Earrot_L", transform);
  66. func3("Earscl_L", transform);
  67. }
  68. Transform transform2 = CMT.SearchObjName(t, "Ear_R", false);
  69. if (transform2 != null)
  70. {
  71. func2("Earrot_R", transform2);
  72. func3("Earscl_R", transform2);
  73. }
  74. Transform transform3 = CMT.SearchObjName(t, "Nose", false);
  75. if (transform3 != null)
  76. {
  77. func("Nosepos", transform3);
  78. func3("Nosescl", transform3);
  79. }
  80. Transform transform4 = CMT.SearchObjName(t, "Mayupos", false);
  81. if (transform4 != null)
  82. {
  83. func("MayuY", transform4);
  84. }
  85. Transform transform5 = CMT.SearchObjName(t, "Mayupos_L", false);
  86. if (transform5 != null)
  87. {
  88. func("Mayupos_L", transform5);
  89. func2("Mayurot_L", transform5);
  90. }
  91. Transform transform6 = CMT.SearchObjName(t, "Mayupos_R", false);
  92. if (transform6 != null)
  93. {
  94. func("Mayupos_R", transform6);
  95. func2("Mayurot_R", transform6);
  96. }
  97. Transform transform7 = CMT.SearchObjName(t, "Eye_L", false);
  98. if (transform7 != null)
  99. {
  100. func("EyeBallPosXL", transform7);
  101. TMorphBone.BoneMorphPos boneMorphPos = func("EyeBallPosYL", transform7);
  102. boneMorphPos.m_vAddMin += new Vector3(0.00325f, -0.005f, 0f);
  103. boneMorphPos.m_vAddMax += new Vector3(0f, 0.004f, 0f);
  104. TMorphBone.BoneMorphScl boneMorphScl = func3("EyeBallSclXL", transform7);
  105. boneMorphScl.m_vAddMin += new Vector3(0f, -0.3f, -0.3f);
  106. boneMorphScl.m_vAddMax += new Vector3(0f, 0.1f, 0.1f);
  107. boneMorphScl = func3("EyeBallSclYL", transform7);
  108. boneMorphScl.m_vAddMin += new Vector3(0f, -0.3f, -0.3f);
  109. boneMorphScl.m_vAddMax += new Vector3(0f, 0.1f, 0.1f);
  110. }
  111. Transform transform8 = CMT.SearchObjName(t, "Eye_R", false);
  112. if (transform8 != null)
  113. {
  114. func("EyeBallPosXR", transform8);
  115. TMorphBone.BoneMorphPos boneMorphPos2 = func("EyeBallPosYR", transform8);
  116. boneMorphPos2.m_vAddMin += new Vector3(0.00325f, 0.005f, 0f);
  117. boneMorphPos2.m_vAddMax += new Vector3(0f, -0.004f, 0f);
  118. TMorphBone.BoneMorphScl boneMorphScl2 = func3("EyeBallSclXR", transform8);
  119. boneMorphScl2.m_vAddMin += new Vector3(0f, -0.3f, -0.3f);
  120. boneMorphScl2.m_vAddMax += new Vector3(0f, 0.1f, 0.1f);
  121. boneMorphScl2 = func3("EyeBallSclYR", transform8);
  122. boneMorphScl2.m_vAddMin += new Vector3(0f, -0.3f, -0.3f);
  123. boneMorphScl2.m_vAddMax += new Vector3(0f, 0.1f, 0.1f);
  124. }
  125. if (120 <= tbskin.PartsVersion)
  126. {
  127. Transform transform9 = CMT.SearchObjName(t, "Mayupos_L", false);
  128. Transform transform10 = CMT.SearchObjName(t, "Mayupos_R", false);
  129. if (transform9 != null && transform10 != null)
  130. {
  131. TMorphBone.BoneMorphScl boneMorphScl3 = func3("MayuLongL", transform9);
  132. boneMorphScl3.m_vAddMin += new Vector3(0f, 0f, -0.25f);
  133. boneMorphScl3.m_vAddMax += new Vector3(0f, 0f, 0.25f);
  134. TMorphBone.BoneMorphScl boneMorphScl4 = func3("MayuLongR", transform10);
  135. boneMorphScl4.m_vAddMin += new Vector3(0f, 0f, -0.25f);
  136. boneMorphScl4.m_vAddMax += new Vector3(0f, 0f, 0.25f);
  137. }
  138. }
  139. }
  140. if (f_mpn == MPN.body)
  141. {
  142. t = tbskin.body.m_trBones.Find("Bip01");
  143. foreach (BoneMorphDefine.LinkProp linkProp in ((!tbskin.body.maid.boMAN) ? BoneMorphDefine.m_linkedBoneMaidDef : BoneMorphDefine.m_linkedBoneManDef))
  144. {
  145. Transform transform11 = CMT.SearchObjName(t, linkProp.myName, false);
  146. Transform transform12 = CMT.SearchObjName(t, linkProp.virtualParent, false);
  147. this.m_linkedBones.Add(new TMorphBone.LinkedBone(transform11, transform11.parent, transform12, linkProp.calcPos, linkProp.calcScale));
  148. if (transform11.name.Contains("_IK_") && transform11.name.Contains("_tgt"))
  149. {
  150. this.IKTargetBoneCtrlDic[transform11] = new IKTargetBoneCtrl(transform11, transform12);
  151. }
  152. }
  153. this.m_boneDistanceToSkinMgr = new BoneDistanceToSkinMgr((TMorphSkin)tbskin.morph, tbskin.m_OriVert.skinThick, t);
  154. }
  155. }
  156. public override void Uninit()
  157. {
  158. this.m_listBoneMorphPos.Clear();
  159. this.m_listBoneMorphScl.Clear();
  160. this.m_listBoneMorphRot.Clear();
  161. this.IKTargetBoneCtrlDic.Clear();
  162. this.m_linkedBones.Clear();
  163. this.m_boneDistanceToSkinMgr = null;
  164. }
  165. private void UninitItem()
  166. {
  167. if (this.m_boneMorph != null)
  168. {
  169. for (int i = this.m_boneMorph.Count - 1; i >= 0; i--)
  170. {
  171. TMorphBone.BoneMorphLocal boneMorphLocal = this.m_boneMorph[i];
  172. if (boneMorphLocal.linkT != null)
  173. {
  174. boneMorphLocal.linkT.localPosition = boneMorphLocal.defaultLocalPos;
  175. boneMorphLocal.linkT.localScale = boneMorphLocal.defaultLocalScale;
  176. boneMorphLocal.linkT.localRotation = boneMorphLocal.defautLocalRot;
  177. }
  178. }
  179. }
  180. this.m_boneMorph = new List<TMorphBone.BoneMorphLocal>();
  181. }
  182. public override void UninitItem(MPN f_mpn, TBody.SlotID f_slot)
  183. {
  184. this.UninitItem();
  185. if (f_mpn == MPN.head && f_slot == TBody.SlotID.head)
  186. {
  187. HashSet<string> removeTargetPropNames = new HashSet<string>(new string[]
  188. {
  189. "Earrot_L",
  190. "Earrot_R",
  191. "Earscl_L",
  192. "Earscl_R",
  193. "Nosepos",
  194. "Nosescl",
  195. "MayuY",
  196. "Mayupos_L",
  197. "Mayupos_R",
  198. "Mayurot_L",
  199. "Mayurot_R",
  200. "EyeBallPosXL",
  201. "EyeBallPosYL",
  202. "EyeBallSclXL",
  203. "EyeBallSclXR",
  204. "EyeBallPosXR",
  205. "EyeBallPosYR",
  206. "EyeBallSclYL",
  207. "EyeBallSclYR"
  208. });
  209. this.m_listBoneMorphPos.RemoveAll((TMorphBone.BoneMorphPos f) => removeTargetPropNames.Contains(f.strPropName));
  210. this.m_listBoneMorphRot.RemoveAll((TMorphBone.BoneMorphRotatio f) => removeTargetPropNames.Contains(f.strPropName));
  211. this.m_listBoneMorphScl.RemoveAll((TMorphBone.BoneMorphScl f) => removeTargetPropNames.Contains(f.strPropName));
  212. }
  213. }
  214. public override void AddRoot(Transform root)
  215. {
  216. this.AddRoot_lp(root, false);
  217. }
  218. private void AddRoot_lp(Transform t, bool Kahanshin = false)
  219. {
  220. string name = t.name;
  221. if (name.IndexOf("_AC_") == 0)
  222. {
  223. return;
  224. }
  225. if (name.Contains("Thigh"))
  226. {
  227. Kahanshin = true;
  228. }
  229. TMorphBone.BoneMorphLocal boneMorphLocal = null;
  230. List<BoneMorphDefine.BoneProp> list = null;
  231. if (((!this.m_tbSkin.body.boMAN) ? BoneMorphDefine.m_dicMaid : BoneMorphDefine.m_dicMan).TryGetValue(name, out list))
  232. {
  233. TMorphBone.LinkedBone linkedBone = this.m_linkedBones.Find((TMorphBone.LinkedBone a) => a.my.name == name);
  234. for (int i = 0; i < list.Count; i++)
  235. {
  236. BoneMorphDefine.BoneProp boneProp = list[i];
  237. if (boneMorphLocal == null)
  238. {
  239. boneMorphLocal = new TMorphBone.BoneMorphLocal
  240. {
  241. linkT = t,
  242. defaultLocalPos = t.localPosition,
  243. defaultLocalScale = t.localScale,
  244. defautLocalRot = t.localRotation,
  245. Kahanshin = Kahanshin,
  246. linkedBone = linkedBone
  247. };
  248. }
  249. int nIndex = boneProp.nIndex;
  250. if (boneProp.bExistS)
  251. {
  252. boneMorphLocal.atrs[nIndex] = true;
  253. boneMorphLocal.vecs_min[nIndex] = boneProp.vMinS;
  254. boneMorphLocal.vecs_max[nIndex] = boneProp.vMaxS;
  255. }
  256. if (boneProp.bExistP)
  257. {
  258. boneMorphLocal.atrs[nIndex + TMorphBone.PROP_MAX] = true;
  259. boneMorphLocal.vecs_min[nIndex + TMorphBone.PROP_MAX] = boneProp.vMinP;
  260. boneMorphLocal.vecs_max[nIndex + TMorphBone.PROP_MAX] = boneProp.vMaxP;
  261. }
  262. if (boneProp.bExistR)
  263. {
  264. boneMorphLocal.atrs[nIndex + TMorphBone.PROP_MAX * 2] = true;
  265. boneMorphLocal.vecs_axis[nIndex] = boneProp.vRotAxis;
  266. boneMorphLocal.f_min[nIndex] = boneProp.fMinR;
  267. boneMorphLocal.f_max[nIndex] = boneProp.fMaxR;
  268. }
  269. boneMorphLocal.props.Add(boneProp.strProp);
  270. }
  271. }
  272. if (boneMorphLocal != null)
  273. {
  274. this.m_boneMorph.Add(boneMorphLocal);
  275. }
  276. for (int j = 0; j < t.childCount; j++)
  277. {
  278. this.AddRoot_lp(t.GetChild(j), Kahanshin);
  279. }
  280. }
  281. public override void ChangeMorphPosValue(string strPropName, string f_strBoneName, Vector3 f_fAddMin, Vector3 f_fAddMax)
  282. {
  283. TMorphBone.BoneMorphPos boneMorphPos = this.m_listBoneMorphPos.Find((TMorphBone.BoneMorphPos f) => f.strPropName == strPropName && f.trBone.name == f_strBoneName);
  284. if (boneMorphPos != null)
  285. {
  286. boneMorphPos.m_vAddMin = boneMorphPos.trBone.localPosition + f_fAddMin;
  287. boneMorphPos.m_vAddMax = boneMorphPos.trBone.localPosition + f_fAddMax;
  288. }
  289. }
  290. public override void ChangeMorphSclValue(string strPropName, string f_strBoneName, Vector3 f_fAddMin, Vector3 f_fAddMax)
  291. {
  292. TMorphBone.BoneMorphScl boneMorphScl = this.m_listBoneMorphScl.Find((TMorphBone.BoneMorphScl f) => f.strPropName == strPropName && f.trBone.name == f_strBoneName);
  293. if (boneMorphScl != null)
  294. {
  295. boneMorphScl.m_vAddMin = boneMorphScl.trBone.localScale + f_fAddMin;
  296. boneMorphScl.m_vAddMax = boneMorphScl.trBone.localScale + f_fAddMax;
  297. }
  298. }
  299. public override void ChangeMorphRotatioValue(string strPropName, string f_strBoneName, Vector3 f_fAddMin, Vector3 f_fAddMax)
  300. {
  301. TMorphBone.BoneMorphRotatio boneMorphRotatio = this.m_listBoneMorphRot.Find((TMorphBone.BoneMorphRotatio f) => f.strPropName == strPropName && f.trBone.name == f_strBoneName);
  302. if (boneMorphRotatio != null)
  303. {
  304. boneMorphRotatio.m_vAddMin = boneMorphRotatio.m_vDefRotate * Quaternion.Euler(f_fAddMin);
  305. boneMorphRotatio.m_vAddMax = boneMorphRotatio.m_vDefRotate * Quaternion.Euler(f_fAddMax);
  306. }
  307. }
  308. public override void Blend()
  309. {
  310. for (int i = 0; i < this.m_boneMorph.Count; i++)
  311. {
  312. TMorphBone.BoneMorphLocal boneMorphLocal = this.m_boneMorph[i];
  313. Vector3 vector = boneMorphLocal.defaultLocalScale;
  314. Vector3 vector2 = boneMorphLocal.defaultLocalPos;
  315. Quaternion quaternion = boneMorphLocal.defautLocalRot;
  316. Vector3 a = vector;
  317. if (boneMorphLocal.linkedBone != null)
  318. {
  319. boneMorphLocal.linkedBone.Update(true);
  320. if (boneMorphLocal.linkedBone.calcScale)
  321. {
  322. vector = (a = boneMorphLocal.linkedBone.my.localScale);
  323. }
  324. if (boneMorphLocal.linkedBone.calcPos)
  325. {
  326. vector2 = boneMorphLocal.linkedBone.my.localPosition;
  327. }
  328. }
  329. bool flag = false;
  330. for (int j = 0; j < BoneMorphDefine.PropNames.Length; j++)
  331. {
  332. float num = 1f;
  333. MPN mpn = BoneMorphDefine.PropNames[j];
  334. if (mpn == MPN.KubiScl)
  335. {
  336. num = this.SCALE_Kubi;
  337. }
  338. if (mpn == MPN.UdeScl)
  339. {
  340. num = this.SCALE_Ude;
  341. }
  342. if (mpn == MPN.EyeSclX)
  343. {
  344. num = this.SCALE_EyeX;
  345. }
  346. if (mpn == MPN.EyeSclY)
  347. {
  348. num = this.SCALE_EyeY;
  349. }
  350. if (mpn == MPN.EyePosX)
  351. {
  352. num = this.POS_EyeX * (0.5f + this.POS_EyeY * 0.5f);
  353. }
  354. if (mpn == MPN.EyePosY)
  355. {
  356. num = this.POS_EyeY;
  357. }
  358. if (mpn == MPN.HeadX)
  359. {
  360. num = this.SCALE_HeadX;
  361. }
  362. if (mpn == MPN.HeadY)
  363. {
  364. num = this.SCALE_HeadY;
  365. }
  366. if (mpn == MPN.DouPer)
  367. {
  368. num = this.SCALE_DouPer;
  369. if (!boneMorphLocal.Kahanshin)
  370. {
  371. num = 1f - num;
  372. }
  373. }
  374. if (mpn == MPN.sintyou)
  375. {
  376. num = this.SCALE_Sintyou;
  377. }
  378. if (mpn == MPN.kata)
  379. {
  380. num = this.SCALE_Kata;
  381. }
  382. if (mpn == MPN.MunePosX)
  383. {
  384. num = this.MunePosX;
  385. }
  386. if (mpn == MPN.MunePosY)
  387. {
  388. num = this.MunePosY;
  389. }
  390. if (mpn == MPN.MuneThick)
  391. {
  392. num = this.MuneThick;
  393. }
  394. if (mpn == MPN.MuneLong)
  395. {
  396. num = this.MuneLong;
  397. }
  398. if (mpn == MPN.MuneDir)
  399. {
  400. num = this.MuneDir;
  401. }
  402. if (mpn == MPN.DouThick1X)
  403. {
  404. num = this.DouThick1X;
  405. }
  406. if (mpn == MPN.DouThick1Y)
  407. {
  408. num = this.DouThick1Y;
  409. }
  410. if (mpn == MPN.DouThick2X)
  411. {
  412. num = this.DouThick2X;
  413. }
  414. if (mpn == MPN.DouThick2Y)
  415. {
  416. num = this.DouThick2Y;
  417. }
  418. if (mpn == MPN.DouThick3X)
  419. {
  420. num = this.DouThick3X;
  421. }
  422. if (mpn == MPN.DouThick3Y)
  423. {
  424. num = this.DouThick3Y;
  425. }
  426. if (mpn == MPN.ShoulderThick)
  427. {
  428. num = this.ShoulderThick;
  429. }
  430. if (mpn == MPN.UpperArmThickX)
  431. {
  432. num = this.UpperArmThickX;
  433. }
  434. if (mpn == MPN.UpperArmThickY)
  435. {
  436. num = this.UpperArmThickY;
  437. }
  438. if (mpn == MPN.LowerArmThickX)
  439. {
  440. num = this.LowerArmThickX;
  441. }
  442. if (mpn == MPN.LowerArmThickY)
  443. {
  444. num = this.LowerArmThickY;
  445. }
  446. if (mpn == MPN.ElbowThickX)
  447. {
  448. num = this.ElbowThickX;
  449. }
  450. if (mpn == MPN.ElbowThickY)
  451. {
  452. num = this.ElbowThickY;
  453. }
  454. if (mpn == MPN.NeckThickX)
  455. {
  456. num = this.NeckThickX;
  457. }
  458. if (mpn == MPN.NeckThickY)
  459. {
  460. num = this.NeckThickY;
  461. }
  462. if (mpn == MPN.HandSize)
  463. {
  464. num = this.HandSize;
  465. }
  466. if (mpn == MPN.DouThick4X)
  467. {
  468. num = this.DouThick4X;
  469. }
  470. if (mpn == MPN.DouThick4Y)
  471. {
  472. num = this.DouThick4Y;
  473. }
  474. if (mpn == MPN.DouThick5X)
  475. {
  476. num = this.DouThick5X;
  477. }
  478. if (mpn == MPN.DouThick5Y)
  479. {
  480. num = this.DouThick5Y;
  481. }
  482. if (mpn == MPN.WaistPos)
  483. {
  484. num = this.WaistPos;
  485. }
  486. if (mpn == MPN.HipRot)
  487. {
  488. num = this.HipRot;
  489. }
  490. if (mpn == MPN.ThighThickX)
  491. {
  492. num = this.ThighThickX;
  493. }
  494. if (mpn == MPN.ThighThickY)
  495. {
  496. num = this.ThighThickY;
  497. }
  498. if (mpn == MPN.KneeThickX)
  499. {
  500. num = this.KneeThickX;
  501. }
  502. if (mpn == MPN.KneeThickY)
  503. {
  504. num = this.KneeThickY;
  505. }
  506. if (mpn == MPN.CalfThickX)
  507. {
  508. num = this.CalfThickX;
  509. }
  510. if (mpn == MPN.CalfThickY)
  511. {
  512. num = this.CalfThickY;
  513. }
  514. if (mpn == MPN.AnkleThickX)
  515. {
  516. num = this.AnkleThickX;
  517. }
  518. if (mpn == MPN.AnkleThickY)
  519. {
  520. num = this.AnkleThickY;
  521. }
  522. if (mpn == MPN.FootSize)
  523. {
  524. num = this.FootSize;
  525. }
  526. if (mpn == MPN.UpperArmLowerThickX)
  527. {
  528. num = this.UpperArmLowerThickX;
  529. }
  530. if (mpn == MPN.UpperArmLowerThickY)
  531. {
  532. num = this.UpperArmLowerThickY;
  533. }
  534. if (mpn == MPN.WristThickX)
  535. {
  536. num = this.WristThickX;
  537. }
  538. if (mpn == MPN.WristThickY)
  539. {
  540. num = this.WristThickY;
  541. }
  542. if (mpn == MPN.ClavicleThick)
  543. {
  544. num = this.ClavicleThick;
  545. }
  546. if (mpn == MPN.ShoulderTension)
  547. {
  548. num = this.ShoulderTension;
  549. }
  550. if (mpn == MPN.ThighLowerThickX)
  551. {
  552. num = this.ThighLowerThickX;
  553. }
  554. if (mpn == MPN.ThighLowerThickY)
  555. {
  556. num = this.ThighLowerThickY;
  557. }
  558. if (mpn == MPN.ThighShin)
  559. {
  560. num = this.ThighShin;
  561. }
  562. if (boneMorphLocal.atrs[j])
  563. {
  564. Vector3 b = Vector3.Lerp(boneMorphLocal.vecs_min[j], boneMorphLocal.vecs_max[j], num);
  565. vector = Vector3.Scale(vector, b);
  566. if (mpn != MPN.ThighShin)
  567. {
  568. a = Vector3.Scale(a, b);
  569. }
  570. }
  571. if (boneMorphLocal.atrs[j + TMorphBone.PROP_MAX])
  572. {
  573. vector2 = Vector3.Scale(vector2, Vector3.Lerp(boneMorphLocal.vecs_min[j + TMorphBone.PROP_MAX], boneMorphLocal.vecs_max[j + TMorphBone.PROP_MAX], num));
  574. }
  575. if (boneMorphLocal.atrs[j + TMorphBone.PROP_MAX * 2])
  576. {
  577. quaternion = Quaternion.AngleAxis(boneMorphLocal.f_min[j] + (boneMorphLocal.f_max[j] - boneMorphLocal.f_min[j]) * num, boneMorphLocal.vecs_axis[j]) * quaternion;
  578. flag = true;
  579. }
  580. }
  581. if (boneMorphLocal.linkT.name.Contains("Thigh_SCL_"))
  582. {
  583. this.SnityouOutScale = Mathf.Pow(a.x, 0.9f);
  584. }
  585. boneMorphLocal.linkT.localPosition = vector2;
  586. boneMorphLocal.linkT.localScale = vector;
  587. if (flag)
  588. {
  589. boneMorphLocal.linkT.localRotation = quaternion;
  590. }
  591. }
  592. for (int k = 0; k < this.m_linkedBones.Count; k++)
  593. {
  594. this.m_linkedBones[k].Update(false);
  595. }
  596. foreach (TMorphBone.BoneMorphPos boneMorphPos in this.m_listBoneMorphPos)
  597. {
  598. if (boneMorphPos.strPropName == "Nosepos")
  599. {
  600. boneMorphPos.trBone.localPosition = boneMorphPos.Lerp(this.POS_Nose);
  601. }
  602. else if (boneMorphPos.strPropName == "MayuY")
  603. {
  604. boneMorphPos.trBone.localPosition = boneMorphPos.Lerp(this.POS_MayuY);
  605. }
  606. else if (boneMorphPos.strPropName == "Mayupos_L" || boneMorphPos.strPropName == "Mayupos_R")
  607. {
  608. Vector3 vector3 = boneMorphPos.Lerp(this.POS_MayuY);
  609. float x = boneMorphPos.m_vAddMin.x;
  610. boneMorphPos.m_vAddMin = new Vector3(boneMorphPos.m_vAddMax.x, boneMorphPos.m_vAddMin.y, boneMorphPos.m_vAddMin.z);
  611. boneMorphPos.m_vAddMax = new Vector3(x, boneMorphPos.m_vAddMax.y, boneMorphPos.m_vAddMax.z);
  612. Vector3 vector4 = boneMorphPos.Lerp(this.POS_MayuX);
  613. x = boneMorphPos.m_vAddMax.x;
  614. boneMorphPos.m_vAddMax = new Vector3(boneMorphPos.m_vAddMin.x, boneMorphPos.m_vAddMax.y, boneMorphPos.m_vAddMax.z);
  615. boneMorphPos.m_vAddMin = new Vector3(x, boneMorphPos.m_vAddMin.y, boneMorphPos.m_vAddMin.z);
  616. float x2 = vector4.x + vector3.x - boneMorphPos.m_vDefPos.x;
  617. boneMorphPos.trBone.localPosition = new Vector3(x2, vector3.y, vector4.z);
  618. }
  619. else if (boneMorphPos.strPropName == "EyeBallPosYL" || boneMorphPos.strPropName == "EyeBallPosYR")
  620. {
  621. 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));
  622. }
  623. }
  624. foreach (TMorphBone.BoneMorphScl boneMorphScl in this.m_listBoneMorphScl)
  625. {
  626. if (boneMorphScl.strPropName == "Earscl_L" || boneMorphScl.strPropName == "Earscl_R")
  627. {
  628. boneMorphScl.trBone.localScale = boneMorphScl.Lerp(this.SCALE_Ear);
  629. }
  630. else if (boneMorphScl.strPropName == "Nosescl")
  631. {
  632. boneMorphScl.trBone.localScale = boneMorphScl.Lerp(this.SCALE_Nose);
  633. }
  634. else if (boneMorphScl.strPropName == "EyeBallSclXL" || boneMorphScl.strPropName == "EyeBallSclXR")
  635. {
  636. 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);
  637. Vector3 localScale = boneMorphScl.trBone.localScale;
  638. localScale.z = z;
  639. boneMorphScl.trBone.localScale = localScale;
  640. }
  641. else if (boneMorphScl.strPropName == "EyeBallSclYL" || boneMorphScl.strPropName == "EyeBallSclYR")
  642. {
  643. 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);
  644. Vector3 localScale2 = boneMorphScl.trBone.localScale;
  645. localScale2.y = y;
  646. boneMorphScl.trBone.localScale = localScale2;
  647. }
  648. else if (boneMorphScl.strPropName == "MayuLongL" || boneMorphScl.strPropName == "MayuLongR")
  649. {
  650. boneMorphScl.trBone.localScale = boneMorphScl.Lerp(this.MayuLong);
  651. }
  652. }
  653. foreach (TMorphBone.BoneMorphRotatio boneMorphRotatio in this.m_listBoneMorphRot)
  654. {
  655. if (boneMorphRotatio.strPropName == "Earrot_L" || boneMorphRotatio.strPropName == "Earrot_R")
  656. {
  657. boneMorphRotatio.trBone.localRotation = boneMorphRotatio.Lerp(this.ROT_Ear);
  658. }
  659. else if (boneMorphRotatio.strPropName == "Mayurot_L" || boneMorphRotatio.strPropName == "Mayurot_R")
  660. {
  661. boneMorphRotatio.trBone.localRotation = boneMorphRotatio.Lerp(this.ROT_Mayu);
  662. }
  663. }
  664. this.m_tbSkin.body.m_editYorime = 5f * ((this.Yorime - 0.5f) / 0.5f);
  665. this.m_tbSkin.body.m_editEyeRotX = 10f * ((this.HitomiRot - 0.5f) / 0.5f);
  666. }
  667. public void UpdateBoneDistanceToSkin()
  668. {
  669. if (this.m_boneDistanceToSkinMgr != null)
  670. {
  671. this.m_boneDistanceToSkinMgr.Update();
  672. }
  673. }
  674. public void UpdateIKTargetBone()
  675. {
  676. foreach (IKTargetBoneCtrl iktargetBoneCtrl in this.IKTargetBoneCtrlDic.Values)
  677. {
  678. iktargetBoneCtrl.Update();
  679. }
  680. }
  681. public float POS_EyeX = 1f;
  682. public float POS_EyeY = 1f;
  683. public float MunePosX = 0.5f;
  684. public float MunePosY = 0.5f;
  685. public float MuneThick = 0.5f;
  686. public float MuneLong = 0.5f;
  687. public float MuneDir = 0.5f;
  688. public float DouThick1X = 0.5f;
  689. public float DouThick1Y = 0.5f;
  690. public float DouThick2X = 0.5f;
  691. public float DouThick2Y = 0.5f;
  692. public float DouThick3X = 0.5f;
  693. public float DouThick3Y = 0.5f;
  694. public float ShoulderThick = 0.5f;
  695. public float UpperArmThickX = 0.5f;
  696. public float UpperArmThickY = 0.5f;
  697. public float LowerArmThickX = 0.5f;
  698. public float LowerArmThickY = 0.5f;
  699. public float ElbowThickX = 0.5f;
  700. public float ElbowThickY = 0.5f;
  701. public float NeckThickX = 0.5f;
  702. public float NeckThickY = 0.5f;
  703. public float HandSize = 0.5f;
  704. public float DouThick4X = 0.5f;
  705. public float DouThick4Y = 0.5f;
  706. public float DouThick5X = 0.5f;
  707. public float DouThick5Y = 0.5f;
  708. public float WaistPos = 0.5f;
  709. public float HipRot = 0.5f;
  710. public float ThighThickX = 0.5f;
  711. public float ThighThickY = 0.5f;
  712. public float KneeThickX = 0.5f;
  713. public float KneeThickY = 0.5f;
  714. public float CalfThickX = 0.5f;
  715. public float CalfThickY = 0.5f;
  716. public float AnkleThickX = 0.5f;
  717. public float AnkleThickY = 0.5f;
  718. public float FootSize = 0.5f;
  719. public float UpperArmLowerThickX = 0.5f;
  720. public float UpperArmLowerThickY = 0.5f;
  721. public float WristThickX = 0.5f;
  722. public float WristThickY = 0.5f;
  723. public float ClavicleThick = 0.5f;
  724. public float ShoulderTension = 0.5f;
  725. public float ThighLowerThickX = 0.5f;
  726. public float ThighLowerThickY = 0.5f;
  727. public float ThighShin = 0.5f;
  728. public float HitomiRot = 0.5f;
  729. private static readonly int PROP_MAX = BoneMorphDefine.PropNames.Length;
  730. public List<TMorphBone.BoneMorphLocal> m_boneMorph;
  731. private List<TMorphBone.LinkedBone> m_linkedBones = new List<TMorphBone.LinkedBone>();
  732. private List<TMorphBone.BoneMorphPos> m_listBoneMorphPos = new List<TMorphBone.BoneMorphPos>();
  733. private List<TMorphBone.BoneMorphScl> m_listBoneMorphScl = new List<TMorphBone.BoneMorphScl>();
  734. private List<TMorphBone.BoneMorphRotatio> m_listBoneMorphRot = new List<TMorphBone.BoneMorphRotatio>();
  735. private TBodySkin m_tbSkin;
  736. private Dictionary<Transform, IKTargetBoneCtrl> IKTargetBoneCtrlDic = new Dictionary<Transform, IKTargetBoneCtrl>();
  737. private BoneDistanceToSkinMgr m_boneDistanceToSkinMgr;
  738. public class LinkedBone
  739. {
  740. public LinkedBone(Transform my_, Transform realParent_, Transform virtualParent_, bool calcPos_ = true, bool calcScale_ = true)
  741. {
  742. this.my = my_;
  743. this.realPanret = realParent_;
  744. this.virtualParent = virtualParent_;
  745. this.defaultPos = this.my.localPosition;
  746. this.defaultScale = this.my.localScale;
  747. this.bindPoseVirtualParent = virtualParent_.worldToLocalMatrix * realParent_.localToWorldMatrix;
  748. this.localPointOnRealParent = realParent_.InverseTransformPoint(this.my.position);
  749. this.localVectorOnRealParentRight = realParent_.InverseTransformVector(this.my.right);
  750. this.localVectorOnRealParentUp = realParent_.InverseTransformVector(this.my.up);
  751. this.localVectorOnRealParentForward = realParent_.InverseTransformVector(this.my.forward);
  752. this.calcPos = calcPos_;
  753. this.calcScale = calcScale_;
  754. }
  755. public void Update(bool firstTime)
  756. {
  757. if (firstTime)
  758. {
  759. this.updated = true;
  760. }
  761. else if (!firstTime && this.updated)
  762. {
  763. this.updated = false;
  764. return;
  765. }
  766. if (this.calcPos)
  767. {
  768. this.my.localPosition = this.defaultPos;
  769. }
  770. if (this.calcScale)
  771. {
  772. this.my.localScale = this.defaultScale;
  773. }
  774. Vector3 vector = Vector3.zero;
  775. if (this.calcPos)
  776. {
  777. vector = this.bindPoseVirtualParent.MultiplyPoint(this.localPointOnRealParent);
  778. vector = this.realPanret.InverseTransformPoint(this.virtualParent.TransformPoint(vector));
  779. }
  780. if (this.calcScale)
  781. {
  782. Vector3 vector2 = this.bindPoseVirtualParent.MultiplyVector(this.localVectorOnRealParentRight);
  783. vector2 = this.realPanret.InverseTransformVector(this.virtualParent.TransformVector(vector2));
  784. Vector3 vector3 = this.bindPoseVirtualParent.MultiplyVector(this.localVectorOnRealParentUp);
  785. vector3 = this.realPanret.InverseTransformVector(this.virtualParent.TransformVector(vector3));
  786. Vector3 vector4 = this.bindPoseVirtualParent.MultiplyVector(this.localVectorOnRealParentForward);
  787. vector4 = this.realPanret.InverseTransformVector(this.virtualParent.TransformVector(vector4));
  788. this.my.localScale = new Vector3(vector2.magnitude, vector3.magnitude, vector4.magnitude);
  789. }
  790. if (this.calcPos)
  791. {
  792. this.my.localPosition = vector;
  793. }
  794. }
  795. public Transform my;
  796. private Transform realPanret;
  797. private Transform virtualParent;
  798. private Matrix4x4 bindPoseVirtualParent;
  799. private Vector3 localPointOnRealParent;
  800. private Vector3 localVectorOnRealParentRight;
  801. private Vector3 localVectorOnRealParentUp;
  802. private Vector3 localVectorOnRealParentForward;
  803. private Vector3 defaultPos;
  804. private Vector3 defaultScale;
  805. public bool calcPos = true;
  806. public bool calcScale = true;
  807. private bool updated;
  808. }
  809. public class BoneMorphLocal
  810. {
  811. public Vector3 defaultLocalScale;
  812. public Vector3 defaultLocalPos;
  813. public Quaternion defautLocalRot;
  814. public Transform linkT;
  815. public bool[] atrs = new bool[TMorphBone.PROP_MAX * 3];
  816. public bool Kahanshin;
  817. public List<MPN> props = new List<MPN>();
  818. public Vector3[] vecs_min = new Vector3[TMorphBone.PROP_MAX * 2];
  819. public Vector3[] vecs_max = new Vector3[TMorphBone.PROP_MAX * 2];
  820. public Vector3[] vecs_axis = new Vector3[TMorphBone.PROP_MAX];
  821. public float[] f_min = new float[TMorphBone.PROP_MAX];
  822. public float[] f_max = new float[TMorphBone.PROP_MAX];
  823. public TMorphBone.LinkedBone linkedBone;
  824. public string linkTname;
  825. }
  826. private class BoneMorphPos
  827. {
  828. public BoneMorphPos(string f_strPropName, Transform f_trBone)
  829. {
  830. this.strPropName = f_strPropName;
  831. this.trBone = f_trBone;
  832. this.m_vAddMin = (this.m_vAddMax = (this.m_vDefPos = f_trBone.localPosition));
  833. }
  834. public BoneMorphPos(string f_strPropName, Transform f_trBone, Vector3 f_vAddMin, Vector3 f_vAddMax)
  835. {
  836. this.strPropName = f_strPropName;
  837. this.trBone = f_trBone;
  838. this.m_vDefPos = f_trBone.localPosition;
  839. this.m_vAddMin = this.m_vDefPos + f_vAddMin;
  840. this.m_vAddMax = this.m_vDefPos + f_vAddMax;
  841. }
  842. public Vector3 Lerp(float t)
  843. {
  844. return TMorphBone.BoneMorphPos.Lerp(this.m_vAddMin, this.m_vDefPos, this.m_vAddMax, t);
  845. }
  846. public static Vector3 Lerp(Vector3 min, Vector3 def, Vector3 max, float t)
  847. {
  848. float t2 = (t > 0.5f) ? ((t - 0.5f) / 0.5f) : (t / 0.5f);
  849. return (t > 0.5f) ? Vector3.Lerp(def, max, t2) : Vector3.Lerp(min, def, t2);
  850. }
  851. public static float Lerp(float min, float def, float max, float t)
  852. {
  853. float t2 = (t > 0.5f) ? ((t - 0.5f) / 0.5f) : (t / 0.5f);
  854. return (t > 0.5f) ? Mathf.Lerp(def, max, t2) : Mathf.Lerp(min, def, t2);
  855. }
  856. public string strPropName;
  857. public Transform trBone;
  858. public Vector3 m_vDefPos;
  859. public Vector3 m_vAddMin;
  860. public Vector3 m_vAddMax;
  861. }
  862. private class BoneMorphScl
  863. {
  864. public BoneMorphScl(string f_strPropName, Transform f_trBone)
  865. {
  866. this.strPropName = f_strPropName;
  867. this.trBone = f_trBone;
  868. this.m_vAddMin = (this.m_vAddMax = (this.m_vDefScl = f_trBone.localScale));
  869. }
  870. public BoneMorphScl(string f_strPropName, Transform f_trBone, Vector3 f_vAddMin, Vector3 f_vAddMax)
  871. {
  872. this.strPropName = f_strPropName;
  873. this.trBone = f_trBone;
  874. this.m_vDefScl = f_trBone.localScale;
  875. this.m_vAddMin = this.m_vDefScl + f_vAddMin;
  876. this.m_vAddMax = this.m_vDefScl + f_vAddMax;
  877. }
  878. public Vector3 Lerp(float t)
  879. {
  880. return TMorphBone.BoneMorphPos.Lerp(this.m_vAddMin, this.m_vDefScl, this.m_vAddMax, t);
  881. }
  882. public string strPropName;
  883. public Transform trBone;
  884. public Vector3 m_vDefScl;
  885. public Vector3 m_vAddMin;
  886. public Vector3 m_vAddMax;
  887. }
  888. private class BoneMorphRotatio
  889. {
  890. public BoneMorphRotatio(string f_strPropName, Transform f_trBone)
  891. {
  892. this.strPropName = f_strPropName;
  893. this.trBone = f_trBone;
  894. this.m_vAddMin = (this.m_vAddMax = (this.m_vDefRotate = f_trBone.localRotation));
  895. }
  896. public BoneMorphRotatio(string f_strPropName, Transform f_trBone, Quaternion f_vAddMin, Quaternion f_vAddMax)
  897. {
  898. this.strPropName = f_strPropName;
  899. this.trBone = f_trBone;
  900. this.m_vDefRotate = f_trBone.localRotation;
  901. this.m_vAddMin = this.m_vDefRotate * f_vAddMin;
  902. this.m_vAddMax = this.m_vDefRotate * f_vAddMax;
  903. }
  904. public Quaternion Lerp(float t)
  905. {
  906. return TMorphBone.BoneMorphRotatio.Lerp(this.m_vAddMin, this.m_vDefRotate, this.m_vAddMax, t);
  907. }
  908. public static Quaternion Lerp(Quaternion min, Quaternion def, Quaternion max, float t)
  909. {
  910. float t2 = (t > 0.5f) ? ((t - 0.5f) / 0.5f) : (t / 0.5f);
  911. return (t > 0.5f) ? Quaternion.Lerp(def, max, t2) : Quaternion.Lerp(min, def, t2);
  912. }
  913. public string strPropName;
  914. public Transform trBone;
  915. public Quaternion m_vDefRotate;
  916. public Quaternion m_vAddMin;
  917. public Quaternion m_vAddMax;
  918. }
  919. }