public override void SetReferenceObject() { FindAssist findAssist1 = new FindAssist(); findAssist1.Initialize(((Component)this).get_transform()); this.rendHair = ((IEnumerable <Renderer>)((Component)this).GetComponentsInChildren <Renderer>(true)).Where <Renderer>((Func <Renderer, bool>)(x => !((Object)x).get_name().Contains("_acs"))).ToArray <Renderer>(); DynamicBone[] components = (DynamicBone[])((Component)this).GetComponents <DynamicBone>(); KeyValuePair <string, GameObject> keyValuePair1 = ((IEnumerable <KeyValuePair <string, GameObject> >)findAssist1.dictObjName).FirstOrDefault <KeyValuePair <string, GameObject> >((Func <KeyValuePair <string, GameObject>, bool>)(x => x.Key.Contains("_top"))); if (keyValuePair1.Equals((object)new KeyValuePair <string, GameObject>())) { return; } this.boneInfo = new CmpHair.BoneInfo[keyValuePair1.Value.get_transform().get_childCount()]; for (int index = 0; index < this.boneInfo.Length; ++index) { Transform child = keyValuePair1.Value.get_transform().GetChild(index); findAssist1.Initialize(child); CmpHair.BoneInfo boneInfo = new CmpHair.BoneInfo(); KeyValuePair <string, GameObject> keyValuePair2 = ((IEnumerable <KeyValuePair <string, GameObject> >)findAssist1.dictObjName).FirstOrDefault <KeyValuePair <string, GameObject> >((Func <KeyValuePair <string, GameObject>, bool>)(x => x.Key.Contains("_s"))); if (!keyValuePair2.Equals((object)new KeyValuePair <string, GameObject>())) { Transform transform = keyValuePair2.Value.get_transform(); boneInfo.trfCorrect = transform; boneInfo.basePos = ((Component)boneInfo.trfCorrect).get_transform().get_localPosition(); boneInfo.posMin.x = (__Null)(((Component)boneInfo.trfCorrect).get_transform().get_localPosition().x + 0.100000001490116); boneInfo.posMin.y = ((Component)boneInfo.trfCorrect).get_transform().get_localPosition().y; boneInfo.posMin.z = (__Null)(((Component)boneInfo.trfCorrect).get_transform().get_localPosition().z + 0.100000001490116); boneInfo.posMax.x = (__Null)(((Component)boneInfo.trfCorrect).get_transform().get_localPosition().x - 0.100000001490116); boneInfo.posMax.y = (__Null)(((Component)boneInfo.trfCorrect).get_transform().get_localPosition().y - 0.200000002980232); boneInfo.posMax.z = (__Null)(((Component)boneInfo.trfCorrect).get_transform().get_localPosition().z - 0.100000001490116); boneInfo.baseRot = ((Component)boneInfo.trfCorrect).get_transform().get_localEulerAngles(); boneInfo.rotMin.x = (__Null)(((Component)boneInfo.trfCorrect).get_transform().get_localEulerAngles().x - 15.0); boneInfo.rotMin.y = (__Null)(((Component)boneInfo.trfCorrect).get_transform().get_localEulerAngles().y - 15.0); boneInfo.rotMin.z = (__Null)(((Component)boneInfo.trfCorrect).get_transform().get_localEulerAngles().z - 15.0); boneInfo.rotMax.x = (__Null)(((Component)boneInfo.trfCorrect).get_transform().get_localEulerAngles().x + 15.0); boneInfo.rotMax.y = (__Null)(((Component)boneInfo.trfCorrect).get_transform().get_localEulerAngles().y + 15.0); boneInfo.rotMax.z = (__Null)(((Component)boneInfo.trfCorrect).get_transform().get_localEulerAngles().z + 15.0); boneInfo.moveRate.x = (__Null)(double)Mathf.InverseLerp((float)boneInfo.posMin.x, (float)boneInfo.posMax.x, (float)boneInfo.basePos.x); boneInfo.moveRate.y = (__Null)(double)Mathf.InverseLerp((float)boneInfo.posMin.y, (float)boneInfo.posMax.y, (float)boneInfo.basePos.y); boneInfo.moveRate.z = (__Null)(double)Mathf.InverseLerp((float)boneInfo.posMin.z, (float)boneInfo.posMax.z, (float)boneInfo.basePos.z); boneInfo.rotRate.x = (__Null)(double)Mathf.InverseLerp((float)boneInfo.rotMin.x, (float)boneInfo.rotMax.x, (float)boneInfo.baseRot.x); boneInfo.rotRate.y = (__Null)(double)Mathf.InverseLerp((float)boneInfo.rotMin.y, (float)boneInfo.rotMax.y, (float)boneInfo.baseRot.y); boneInfo.rotRate.z = (__Null)(double)Mathf.InverseLerp((float)boneInfo.rotMin.z, (float)boneInfo.rotMax.z, (float)boneInfo.baseRot.z); } List <DynamicBone> dynamicBoneList = new List <DynamicBone>(); foreach (DynamicBone dynamicBone in components) { DynamicBone n = dynamicBone; if (!((IEnumerable <KeyValuePair <string, GameObject> >)findAssist1.dictObjName).FirstOrDefault <KeyValuePair <string, GameObject> >((Func <KeyValuePair <string, GameObject>, bool>)(x => x.Key == ((Object)n.m_Root).get_name())).Equals((object)new KeyValuePair <string, GameObject>())) { dynamicBoneList.Add(n); } } boneInfo.dynamicBone = dynamicBoneList.ToArray(); this.boneInfo[index] = boneInfo; } FindAssist findAssist2 = new FindAssist(); findAssist2.Initialize(((Component)this).get_transform()); this.rendAccessory = ((IEnumerable <KeyValuePair <string, GameObject> >)findAssist2.dictObjName).Where <KeyValuePair <string, GameObject> >((Func <KeyValuePair <string, GameObject>, bool>)(s => s.Key.Contains("_acs"))).Select <KeyValuePair <string, GameObject>, Renderer>((Func <KeyValuePair <string, GameObject>, Renderer>)(x => (Renderer)x.Value.GetComponent <Renderer>())).Where <Renderer>((Func <Renderer, bool>)(r => Object.op_Inequality((Object)null, (Object)r))).ToArray <Renderer>(); this.SetColor(); }
public static void InitializeHair(GameObject selectedObject) { GameObject hairObject = selectedObject; hairObject.layer = 10; if (hairObject != null) { AIChara.CmpHair hairComponent = hairObject.GetComponent <AIChara.CmpHair>(); if (hairComponent == null) { hairComponent = hairObject.AddComponent <AIChara.CmpHair>(); } FindAssist findAssist = new FindAssist(); findAssist.Initialize(hairComponent.transform); hairComponent.rendHair = (from x in hairComponent.GetComponentsInChildren <Renderer>(true) where !x.name.Contains("_acs") select x).ToArray(); // remove all dynamic bones. smh... DynamicBone[] components = hairComponent.GetComponents <DynamicBone>(); foreach (var comp in components) { Object.DestroyImmediate(comp); } DevPreviewHair previewComp = hairObject.GetComponent <DevPreviewHair>(); if (previewComp == null) { previewComp = hairObject.AddComponent <DevPreviewHair>(); } previewComp.hairTexturePath = ModPacker.GetProjectPath().Replace("Assets/", ""); var dynBones = (from x in findAssist.dictObjName where x.Value.transform.name.Contains("_s") select x.Value).ToArray(); foreach (GameObject bone in dynBones) { DynamicBone dynBone = hairObject.AddComponent <DynamicBone>(); dynBone.m_Root = bone.transform; dynBone.m_UpdateRate = 60; dynBone.m_UpdateMode = DynamicBone.UpdateMode.AnimatePhysics; dynBone.m_Damping = 0.102f; dynBone.m_Elasticity = 0.019f; dynBone.m_ElasticityDistrib = new AnimationCurve(); dynBone.m_ElasticityDistrib.AddKey(0f, 0.969f); dynBone.m_ElasticityDistrib.AddKey(1f, 0.603f); dynBone.m_Stiffness = 0.144f; dynBone.m_Inert = 0.072f; dynBone.m_Radius = 0.1f; dynBone.m_RadiusDistrib = new AnimationCurve(); dynBone.m_RadiusDistrib.AddKey(0f, 1f); dynBone.m_RadiusDistrib.AddKey(1f, 0.5f); dynBone.m_EndLength = 0f; dynBone.m_Force = new Vector3(0, -0.005f, 0); } components = hairComponent.GetComponents <DynamicBone>(); KeyValuePair <string, GameObject> keyValuePair = findAssist.dictObjName.FirstOrDefault((KeyValuePair <string, GameObject> x) => x.Key.Contains("_top")); if (keyValuePair.Equals(default(KeyValuePair <string, GameObject>))) { return; } hairComponent.boneInfo = new AIChara.CmpHair.BoneInfo[keyValuePair.Value.transform.childCount]; for (int i = 0; i < hairComponent.boneInfo.Length; i++) { Transform child = keyValuePair.Value.transform.GetChild(i); findAssist.Initialize(child); AIChara.CmpHair.BoneInfo boneInfo = new AIChara.CmpHair.BoneInfo(); KeyValuePair <string, GameObject> keyValuePair2 = findAssist.dictObjName.FirstOrDefault((KeyValuePair <string, GameObject> x) => x.Key.Contains("_s")); if (!keyValuePair2.Equals(default(KeyValuePair <string, GameObject>))) { Transform transform = keyValuePair2.Value.transform; boneInfo.trfCorrect = transform; boneInfo.basePos = boneInfo.trfCorrect.transform.localPosition; boneInfo.posMin.x = boneInfo.trfCorrect.transform.localPosition.x + 0.5f; boneInfo.posMin.y = boneInfo.trfCorrect.transform.localPosition.y; boneInfo.posMin.z = boneInfo.trfCorrect.transform.localPosition.z + 0.5f; boneInfo.posMax.x = boneInfo.trfCorrect.transform.localPosition.x - 0.5f; boneInfo.posMax.y = boneInfo.trfCorrect.transform.localPosition.y - 0.5f; boneInfo.posMax.z = boneInfo.trfCorrect.transform.localPosition.z - 0.5f; boneInfo.baseRot = boneInfo.trfCorrect.transform.localEulerAngles; boneInfo.rotMin.x = boneInfo.trfCorrect.transform.localEulerAngles.x - 30f; boneInfo.rotMin.y = boneInfo.trfCorrect.transform.localEulerAngles.y - 30f; boneInfo.rotMin.z = boneInfo.trfCorrect.transform.localEulerAngles.z - 30f; boneInfo.rotMax.x = boneInfo.trfCorrect.transform.localEulerAngles.x + 30f; boneInfo.rotMax.y = boneInfo.trfCorrect.transform.localEulerAngles.y + 30f; boneInfo.rotMax.z = boneInfo.trfCorrect.transform.localEulerAngles.z + 30f; boneInfo.moveRate.x = Mathf.InverseLerp(boneInfo.posMin.x, boneInfo.posMax.x, boneInfo.basePos.x); boneInfo.moveRate.y = Mathf.InverseLerp(boneInfo.posMin.y, boneInfo.posMax.y, boneInfo.basePos.y); boneInfo.moveRate.z = Mathf.InverseLerp(boneInfo.posMin.z, boneInfo.posMax.z, boneInfo.basePos.z); boneInfo.rotRate.x = Mathf.InverseLerp(boneInfo.rotMin.x, boneInfo.rotMax.x, boneInfo.baseRot.x); boneInfo.rotRate.y = Mathf.InverseLerp(boneInfo.rotMin.y, boneInfo.rotMax.y, boneInfo.baseRot.y); boneInfo.rotRate.z = Mathf.InverseLerp(boneInfo.rotMin.z, boneInfo.rotMax.z, boneInfo.baseRot.z); } List <DynamicBone> list = new List <DynamicBone>(); DynamicBone[] array = components; for (int j = 0; j < array.Length; j++) { DynamicBone n = array[j]; if (!findAssist.dictObjName.FirstOrDefault((KeyValuePair <string, GameObject> x) => x.Key == n.m_Root.name).Equals(default(KeyValuePair <string, GameObject>))) { list.Add(n); } } boneInfo.dynamicBone = list.ToArray(); hairComponent.boneInfo[i] = boneInfo; } findAssist = new FindAssist(); findAssist.Initialize(hairComponent.transform); hairComponent.rendAccessory = (from s in findAssist.dictObjName where s.Key.Contains("_acs") select s into x select x.Value.GetComponent <Renderer>() into r where null != r select r).ToArray <Renderer>(); SkinnedMeshRenderer[] renderers = hairObject.GetComponentsInChildren <SkinnedMeshRenderer>(); hairComponent.rendCheckVisible = new SkinnedMeshRenderer[renderers.Length]; for (int i = 0; i < renderers.Length; i++) { renderers[i].gameObject.layer = 10; hairComponent.rendCheckVisible[i] = renderers[i]; } } }