using System; using System.Collections.Generic; using UnityEngine; public class ConstructVALANCE : MonoBehaviour { static string[] Code; static float t = 0.625f; static float Hh = 6f; static float HY; static float wide; static Vector3 Position; public static void Under(List> objectList) { foreach (List list in objectList) { foreach (GameObject Object in list){DOIT.DELETEAllChildName( Object.transform,new List() {"Valance"} );} List TARLIST = list; // DOLIST.OBJTAGLIST("cabwall"); List SELLIST = TARLIST; // print("------Pass VALANCE--------"); foreach (GameObject TAR in TARLIST) { int nO = Get.GetObjectIndex(TAR.name); _G.OBJs[nO][71] = "Um1,0,Um3,Um4"; string[] HC = _G.OBJs[nO][71].Split(','); foreach (GameObject SEL in SELLIST) { if (SEL.name != TAR.name) { Vector3 Tp1 = FillerRepositionPoint(TAR, "1"); Vector3 Tp4 = FillerRepositionPoint(TAR, "4"); Vector3 Tp2 = FillerRepositionPoint(TAR, "2"); Vector3 Tp3 = FillerRepositionPoint(TAR, "3"); Vector3 Sp1 = FillerRepositionPoint(SEL, "1"); Vector3 Sp4 = FillerRepositionPoint(SEL, "4"); Vector3 Sp2 = FillerRepositionPoint(SEL, "2"); Vector3 Sp3 = FillerRepositionPoint(SEL, "3"); if (Touching(Tp1, Sp3)) { HC[0] = "0"; } if (Touching(Tp1, Sp4)) { HC[0] = "0"; } if (Touching(Tp2, Sp4)) { HC[0] = "0"; } if (Touching(Tp3, Sp1)) { HC[2] = "0"; } if (Touching(Tp4, Sp1)) { HC[2] = "0"; } if (Touching(Tp4, Sp2)) { HC[2] = "0"; } } _G.OBJs[nO][71] = HC[0] + "," + HC[1] + "," + HC[2] + "," + HC[3]; } AddValance(TAR); } } } private static bool Touching(Vector3 V1, Vector3 V2) { float dist=Vector3.Distance(V1,V2); if(dist<1)return true; return false; } private static Vector3 FillerRepositionPoint(GameObject Point, string Number){ int nO=Get.GetObjectIndex(Point.name); Vector3 StartPosition = Point.transform.Find("PO"+Number).position; float flw = 0;//Filler wide float frw = 0;//Filler height string[] C = _G.OBJs[nO]; if (C[50].IndexOf("NONE")==-1) {flw = DOIT.ConvertStringToNumber(C[52]);} if (C[51].IndexOf("NONE")==-1) {frw = DOIT.ConvertStringToNumber(C[53]);} float H=DOIT.ConvertStringToNumber(C[7]); Vector3 EndPosition=StartPosition; Vector3 dir=GetDirection( Point,"4", "1"); if (C[4] == "W1" || _G.OBJs[nO][4] == "T1" ){ if(flw!=0 && Number=="1")EndPosition-=flw*dir; if(frw!=0 && Number=="4")EndPosition+=frw*dir;; } if (Get.Bool(C[4],"W2_W3_W9_W10")){ Vector3 dir54=GetDirection( Point,"4", "5"); Vector3 dir51=GetDirection( Point,"5", "1"); if(flw!=0 && Number=="1")EndPosition-=flw*dir51; if(frw!=0 && Number=="4")EndPosition+=frw*dir54; } if (Get.Bool(C[4],"W4_W5_W19_W20")){ Vector3 dir43=GetDirection( Point,"3", "4"); Vector3 dir12=GetDirection( Point,"1", "2"); if(flw!=0 && Number=="2")EndPosition=Point.transform.Find("PO1").position-flw*dir43; if(frw!=0 && Number=="3")EndPosition=Point.transform.Find("PO4").position+frw*dir12; } if (Get.Bool(C[4],"W6_W7_W11_W12_W26_W27")){ Vector3 dir43=GetDirection( Point,"3", "4"); Vector3 dir12=GetDirection( Point,"1", "2"); if(flw!=0 && Number=="2")EndPosition=Point.transform.Find("PO2").position-flw*dir12; if(frw!=0 && Number=="3")EndPosition=Point.transform.Find("PO3").position+frw*dir43; } EndPosition=new(EndPosition.x,EndPosition.y-H,EndPosition.z); return EndPosition; } private static void AddValance(GameObject TAR) { int nO = Get.GetObjectIndex(TAR.name); string[] C = _G.OBJs[nO]; if(C[65].Split('?').Length==1)C[65]="NONE"+"?90"+"?3"; string[] HC = C[71].Split(','); string[] code = C[65].Split('?'); Hh = DOIT.ConvertStringToNumber(code[^1]); if (Hh != 0) Hh += 0; float H=DOIT.ConvertStringToNumber(C[7]); if(code[0]!="NONE" && CheckUnder(TAR) == true && Hh != 0 ){ Vector3 PO1 = FillerRepositionPoint(TAR, "1"); Vector3 PO2 = FillerRepositionPoint(TAR, "2"); Vector3 PO3 = FillerRepositionPoint(TAR, "3"); Vector3 PO4 = FillerRepositionPoint(TAR, "4"); if(C[52]!="0" )HC[0]="0"; if(C[53]!="0" )HC[2]="0"; Code=code; HY = PO1.y - Hh *0.5f; if (C[4] == "W1" || _G.OBJs[nO][4] == "T1" ){ //print("TAR.name1===="+TAR.name); if (HC[0] != "0" ) { AddFaceMxc(TAR,PO2, PO1);} if (HC[2] != "0") { AddFaceMxc(TAR,PO4, PO3); } Vector3 dir=GetDirection( TAR,"4", "1"); PO1-=0.5f * 0.625f * dir; PO4+=0.5f * 0.625f * dir; AddFaceMxc(TAR,PO1, PO4); //print("TAR.name2===="+TAR.name); } if (Get.Bool(C[4],"W2_W3_W9_W10")) { if (HC[0] != "0" ) { AddFaceMxc(TAR,PO2, PO1);} if (HC[2] != "0") { AddFaceMxc(TAR,PO4, PO3); } Vector3 dir54=GetDirection( TAR,"4", "5"); Vector3 dir51=GetDirection( TAR,"5", "1"); PO1-=0.5f * 0.625f * dir51; PO4+=0.5f * 0.625f * dir54; Vector3 PO5 = TAR.transform.Find("PO5").position; PO5=new(PO5.x,PO5.y-H,PO5.z); AddFaceMxc(TAR,PO5, PO4); AddFaceMxc(TAR,PO1, PO5); } if (Get.Bool(C[4],"W4_W5_W19_W20")) { if (HC[0] != "0" ) { AddFaceMxc(TAR,PO2, PO1);} if (HC[2] != "0") { AddFaceMxc(TAR,PO4, PO3); } Vector3 dir43=GetDirection( TAR,"3", "4"); Vector3 dir12=GetDirection( TAR,"1", "2"); PO2-=0.5f * 0.625f * dir43; PO3+=0.5f * 0.625f * dir12; if(C[52]!="0" ){ AddFaceMxc(TAR,PO1, PO2); } if(C[53]!="0" ){ AddFaceMxc(TAR,PO4, PO3); } AddFaceMxc(TAR,PO4, PO1); } if (Get.Bool(C[4],"W6_W7_W11_W12_W26_W27")) { Vector3 dir43=GetDirection( TAR,"3", "4"); Vector3 dir12=GetDirection( TAR,"1", "2"); PO2-=0.5f * 0.625f * dir12; PO3+=0.5f * 0.625f * dir43; AddFaceMxc(TAR,PO2, PO1); AddFaceMxc(TAR,PO4, PO3); Vector3 dir14=GetDirection( TAR,"1", "4"); PO1+=0.3f * 0.625f * dir14; PO4-=0.3f * 0.625f * dir14; AddFaceMxc(TAR,PO4, PO1); } } } public static void AddFaceMxc(GameObject TAR,Vector3 V1, Vector3 V2){ wide=Vector3.Distance(V1,V2); Position=(V1+V2)*0.5f; float angle = Mathf.Rad2Deg * Mathf.Atan2(V1.z - V2.z, V1.x - V2.x); CreateHead(TAR, "Valance", wide , Hh, t, Position.x, HY, Position.z, 0, -angle, 0); } public static Vector3 GetDirection(GameObject Point,string nP1, string np2){ Vector3 p1=Point.transform.Find("PO"+nP1).position; Vector3 p2=Point.transform.Find("PO"+np2).position; return (p1-p2).normalized; } private static void CreateHead(GameObject OBJ, string Name, float sx, float sy, float sz, float px, float py, float pz, float rx, float ry, float rz) { GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube); obj.name=Name; obj.GetComponent().enabled = false; obj.transform.localScale = new Vector3(sx, sy, sz); //obj.transform.localPosition= OBJ.transform.position + OBJ.transform.TransformDirection(new Vector3(px, py, pz));//new Vector3(px, py, pz); obj.transform.position= new Vector3(px, py, pz);//new Vector3(px, py, pz); obj.transform.localRotation = Quaternion.Euler(rx, ry, rz); //obj.GetComponent().material=CREATE.Texture_CAB(Code[0],24,12,"0",DataTypes.Valance,"CAB"); obj.GetComponent().material=UIT_MATERIAL.GetMaterial(Code[1]+"?90"); //obj.GetComponent().material.SetFloat("_rotation",90); obj.GetComponent().probeAnchor = GameObject.Find("Reflection Probe").transform; obj.transform.SetParent(OBJ.transform); } private static bool CheckUnder(GameObject TAR) { int indT = Get.GetObjectIndex(TAR.name); float Tx = DOIT.ConvertStringToNumber(_G.OBJs[indT][15]); float Ty = DOIT.ConvertStringToNumber(_G.OBJs[indT][16]); float Tz = DOIT.ConvertStringToNumber(_G.OBJs[indT][17]); float Th = DOIT.ConvertStringToNumber(_G.OBJs[indT][7]); bool OK = true; List CW = DOLIST.OBJLIST(); foreach (GameObject obj in CW) { if (TAR.name != obj.name) { int indO = Get.GetObjectIndex(obj.name); float Ox = DOIT.ConvertStringToNumber(_G.OBJs[indO][15]); float Oy = DOIT.ConvertStringToNumber(_G.OBJs[indO][16]); float Oz = DOIT.ConvertStringToNumber(_G.OBJs[indO][17]); float Oh = DOIT.ConvertStringToNumber(_G.OBJs[indO][7]); float Dx = Mathf.Abs(Ox - Tx); float Dy = Mathf.Abs(Oy - Ty); float Dz = Mathf.Abs(Oz - Tz); float Dh = (Th / 2) + (Oh / 2); if (Dx <= 10 && Dz <= 10 && Dy <= Dh + 6 && Oy < Ty) { OK = false; } } } return OK; } }