using UnityEngine; using System.Globalization; using Slicer; using Unity.VisualScripting.FullSerializer; using Unity.Burst.Intrinsics; public class Createdoor : MonoBehaviour { static string DCode; static string DMname; static float Thickness; static string ModelNumber; static string ColorID; static Material Material; public static GameObject Patern(string[] code, int nO) { string[] C = _G.OBJs[nO]; DCode=C[61];//ex:D_3?1 GameObject DOORPATERN = new(); if(C[61]!="none" && C[61]!="nodoor" ){ if(DCode.Split('?').Length==1){ string ColorID=UIT.Value(Library.Door,DCode,Header.ColorID).Split("_")[0]; DCode+="?"+ColorID; } DMname = DCode.Split('?')[0]; ModelNumber=UIT.Value("Door",DMname,"Model"); Thickness=DOIT.ConvertStringToNumber(UIT.Value("Door",DMname,"Thick")); ColorID=DCode.Split('?')[1]; string Rotation = UIT.Value(Library.CabTexture,ColorID,Header.Rotation); if(Rotation==ColorID){Rotation="0";} Material=UIT_MATERIAL.GetMaterial(ColorID+"?"+Rotation); // print("DCode====DMname==="+DMname); // print("DCode====Thickness==="+Thickness); // print("DCode====ModelNumber==="+ModelNumber); //GameObject DOORPATERN = new(); float E = 0f;//edge float sx = DOIT.ConvertStringToNumber(code[3]); float sy = DOIT.ConvertStringToNumber(code[4]); float sz = Thickness; float PW = DOIT.ConvertStringToNumber(code[0]);//Wide of the patern float PH = DOIT.ConvertStringToNumber(code[1]);//Height of the patern float px = -PW / 2f + sx / 2f; float py = PH / 2f - sy / 2f; int DoorQty = (code.Length - 2) / 4; for (int i = 0; i < DoorQty ; i++) { int a = 2 + 4 * i; if (i>0 ) { px += DOIT.ConvertStringToNumber(code[a-3])*0.5f+DOIT.ConvertStringToNumber(code[a+1])*0.5f; if (px >= PW *0.5f) { _G.RTOT += 1; px = - PW / 2f + DOIT.ConvertStringToNumber(code[a+1])*0.5f ; py -= DOIT.ConvertStringToNumber(code[a-2])*0.5f + DOIT.ConvertStringToNumber(code[a+2])*0.5f; } } CreateDoor(DOORPATERN , (i + 1).ToString(), code, a , DOIT.ConvertStringToNumber(code[a+1]), DOIT.ConvertStringToNumber(code[a+2]) , px, py, nO, ModelNumber, C[1]); } float DSw = (PW - E) / PW; float DSh = (PH - E) / PH; DOORPATERN.transform.localScale = new(DSw, DSh, 1); DOORPATERN.name = "D_Patern"; DOORPATERN.tag = "unhit"; return DOORPATERN ; } return DOORPATERN ; } public static void CreateDoor(GameObject DOORPATERN, string dn, string[] code, int a , float Sx, float Sy, float Px, float Py, int nO, string ModelNumber,string cabinetID) { //print("---------------Create Door---------"); string p=code[a]; string KnobPos=code[a+3]; GameObject Door=new("DOOR"+dn); DCode=_G.OBJs[nO][61]; float frameX=0.125f; float frameY=0.125f; if( _P.FrameDoor=="Insert" || _P.FrameDoor=="Partial" ){ frameX=1.5f; frameY=1.5f; } if( _P.FrameDoor=="FingerGrip"){ frameY=1f; Py-=0.5f; } //CreateCaseEdges(ds, Sx, Sy, Px, Py); //Create Door------------------------------------------------------------------ //print("DCode====p==="+p);//DCode====p===GL.01 if (p == "p" || p == "d"|| p == "g" ) { // if(ModelNumber=="D_01"){Model_1(Door, Sx-frameX, Sy-frameY, Px, Py,p);} // if(ModelNumber=="D_04"){Model_4(Door, Sx-frameX, Sy-frameY, Px, Py,p);} GetModel( Door, Sx, Sy, Px, Py,p,ModelNumber); if(KnobPos=="3" || KnobPos=="6" || KnobPos=="9" ){CREATE.EmptyPoint(Door, "Pivot_L", Px-Sx*0.5f, 0, 0);}//P1} if(KnobPos=="1" || KnobPos=="4" || KnobPos=="7" ){CREATE.EmptyPoint(Door, "Pivot_R", Px+Sx*0.5f, 0, 0);}//P1} if(KnobPos=="2" ){CREATE.EmptyPoint(Door, "Pivot_D", 0, Py-Sy*0.5f, 0);}//P1} if(KnobPos=="8" ){CREATE.EmptyPoint(Door, "Pivot_U", 0, Py+Sy*0.5f, 0);}//P1} } if (p == "dd") { float PyStart = Py; Py += Sy * 0.25f; GetModel(Door, Sx, Sy * 0.5f, Px, Py, "d", ModelNumber); Py -= Sy * 0.5f; GetModel(Door, Sx, Sy * 0.5f, Px, Py, "d", ModelNumber); Py = PyStart; } //Cut out if (p[..1] == "c"){ CreateEdgeAround(Door, dn, p, Sx, Sy, 0.625f, Px, Py, ModelNumber,cabinetID); } //add Tombour if (p[..1] == "t") { GameObject t = GameObject.CreatePrimitive(PrimitiveType.Cube); t.GetComponent().enabled = false; t.tag = "cabdoor"; t.name = "tambour"; t.GetComponent().material = Instantiate(Resources.Load("MATERIALS/TAMBOUR") as Material); float e1 = 0; float e2 = 0; float e3 = 0; float e4 = 0; //if (Get.CabValue(model, 40) != "") //{ // e1 = DOIT.ConvertStringToNumber(Get.CabValue(model, 40).Split('_')[0]); // e2 = DOIT.ConvertStringToNumber(Get.CabValue(model, 40).Split('_')[1]); // e3 = DOIT.ConvertStringToNumber(Get.CabValue(model, 40).Split('_')[2]); // e4 = DOIT.ConvertStringToNumber(Get.CabValue(model, 40).Split('_')[3]); //} string tambourEdges ="1_1_1_1"; if (!string.IsNullOrEmpty(tambourEdges)) { e1 = DOIT.ConvertStringToNumber(tambourEdges.Split('_')[0]); e2 = DOIT.ConvertStringToNumber(tambourEdges.Split('_')[1]); e3 = DOIT.ConvertStringToNumber(tambourEdges.Split('_')[2]); e4 = DOIT.ConvertStringToNumber(tambourEdges.Split('_')[3]); } t.transform.localScale = new(Sx - e2 - e4, Sy - e1 - e3, 0.2f); t.transform.position = new(Px - (e2 - e4) / 2, Py - (e1 - e3) / 2, -Thickness / 2 - 0.1f); t.gameObject.transform.parent = Door.transform; } if ( p != "o" && p != "w" && p != "c" ) { if(code[a+3]!="0"){ Addknob.Knob(Door,DOIT.ConvertStringToNumber(code[a+1]), DOIT.ConvertStringToNumber(code[a+2]), code[a+3], Px, Py, nO, code[a], Thickness, ModelNumber);//int nO, string cat, float depth, string modelDoor } } Door.transform.SetParent(DOORPATERN.transform); //return ds; } public static GameObject CreateEdgeAround(GameObject ds, string dn, string p, float Sx, float Sy, float Sz, float Px, float Py, string model,string cabinetID) { //print("Sx==="+Sx); GameObject d = new ("CONTOUR"); d.transform.parent = ds.transform; // string edges =UIT.Value(Library.Cabinet,cabinetID,Header.Cutout);//Cutout // print("edges===="+edges);//edges====TDL11OVDR1 // if(string.IsNullOrEmpty(edges) || edges=="0_0_0_0")edges="0.75_0.75_0.75_0.75"; string edges="1_1_1_1"; float e1=DOIT.ConvertStringToNumber(edges.Split('_')[0]); float e2=DOIT.ConvertStringToNumber(edges.Split('_')[1]); float e3=DOIT.ConvertStringToNumber(edges.Split('_')[2]); float e4=DOIT.ConvertStringToNumber(edges.Split('_')[3]); if(e1!=0){CreateEdge(d,"ContourT",e1,e2,e3,e4,Sx,Sy,Sz,Px,Py);} if(e2!=0){CreateEdge(d,"ContourR",e1,e2,e3,e4,Sx,Sy,Sz,Px,Py);} if(e3!=0){CreateEdge(d,"ContourB",e1,e2,e3,e4,Sx,Sy,Sz,Px,Py);} if(e4!=0){CreateEdge(d,"ContourL",e1,e2,e3,e4,Sx,Sy,Sz,Px,Py);} if (p[..1] == "t") {//Tambour GameObject center = GameObject.CreatePrimitive(PrimitiveType.Cube); //Rot = Get.DoorValue(DMname, 10); //Rot = Get.DoorValue(DMname, CsvHeaders.Rotation); center.GetComponent().enabled = false; center.transform.localScale = new(Sx - 0.25f - e2 - e4, Sy - e1 - e3, Sz); center.transform.parent = ds.transform; center.transform.position = new(Px - (e2 - e4) / 2, Py - (e1 - e3) / 2, 0.5f); center.name = "d" + dn; center.tag = "wooddoor"; //AddTexture(center,"p"); GameObject cs = GameObject.CreatePrimitive(PrimitiveType.Cube);//Shadow cs.tag = "cabdoor"; cs.name = "cs"; cs.GetComponent().material = Instantiate(Resources.Load("MATERIALS/TAMBOUR") as Material); e1 = 0; e2 = 0; e3 = 0; e4 = 0; string tambourEdges = Get.LibraryValue(model, CsvHeaders.Tambour_Edges, DataTypes.Cabinet); if (!string.IsNullOrEmpty(tambourEdges)) { e1 = DOIT.ConvertStringToNumber(tambourEdges.Split('_')[0]); e2 = DOIT.ConvertStringToNumber(tambourEdges.Split('_')[1]); e3 = DOIT.ConvertStringToNumber(tambourEdges.Split('_')[2]); e4 = DOIT.ConvertStringToNumber(tambourEdges.Split('_')[3]); } cs.transform.localScale = new(Sx - e2 - e4, Sy - e1 - e3, 0.2f); cs.transform.position = new(Px - (e2 - e4) / 2, Py - (e1 - e3) / 2, 0); cs.transform.parent = d.transform; } return d; } public static void CreateEdge(GameObject d,string name, float e1,float e2,float e3,float e4,float Sx, float Sy, float Sz, float Px, float Py){ GameObject E = GameObject.CreatePrimitive(PrimitiveType.Cube); E.name=name; //AddTexture(E,"p",Material,24*24/Sx,24*24/Sy); E.GetComponent().material=Material; if(name=="ContourT"){ E.transform.localScale = new(Sx, e1, 0.5f); E.transform.position = new(Px, Py + Sy / 2 - e1 / 2, Sz*0.5f); } if(name=="ContourR"){ E.transform.localScale = new(e2, Sy - e1 - e3, 0.5f); E.transform.position = new(Px + Sx / 2 - e2 / 2, Py - (e1 - e3) / 2, Sz*0.5f); } if(name=="ContourB"){ E.transform.localScale = new(Sx, e3, 0.5f); E.transform.position = new(Px, Py - Sy / 2 + e3 / 2, Sz*0.5f); } if(name=="ContourL"){ E.transform.localScale = new(e4, Sy - e1 - e3, 0.5f); E.transform.position = new(Px - Sx / 2 + e4 / 2, Py - (e1 - e3) / 2, Sz*0.5f); } E.transform.SetParent(d.transform); } public static void AddTexture(GameObject Door,string DCat,Material Mat,float scaleMapX,float ScaleMapY) { foreach(Transform Mcx in Door.transform) { Mcx.GetComponent().material = Mat; //print("modelNumber===="+ModelNumber); //if(ModelNumber=="D_12"){DOIT.SetSizeTex(Mcx.gameObject, scaleMapX, ScaleMapY, 90, 90, 0, 0, 0, 0);} //else {DOIT.SetSizeTex(Mcx.gameObject, scaleMapX, ScaleMapY, 0, 0, 0, 0, 0, 0);} DOIT.SetSizeTex(Mcx.gameObject, scaleMapX, ScaleMapY, 0, 0, 0, 0, 0, 0); if(Mcx.name.IndexOf("Center")!=-1) { Mcx.GetComponent().material=Mat; if(DCat=="g"){Mcx.GetComponent().material=_G.FROSTYGLASS;} DOIT.SetSizeTex(Mcx.gameObject, scaleMapX, ScaleMapY, 0, 0, 0, 0, 0, 0); } Mcx.GetComponent().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; Mcx.GetComponent().probeAnchor = GameObject.Find("Reflection Probe").transform; Mcx.GetComponent().receiveShadows = true; //Mcx.GetComponent().renderingLayerMask = 2; } } public static GameObject GetModel(GameObject ds, float Sx, float Sy, float Px, float Py, string DCat, string modelNumber) { //print("Pass GetModel=="+modelNumber); if(modelNumber=="D_29" || modelNumber=="D_KIT" ){modelNumber="D_11";} //modelNumber="D_17"; Sx -=0.2f; Sy -=0.2f; GameObject DoorModel = new("DoorModel"+ds.name); float EdgeH=DOIT.ConvertStringToNumber( UIT.Value(Library.Door,DMname,Header.E_H) ); float EdgeV=DOIT.ConvertStringToNumber( UIT.Value(Library.Door,DMname,Header.E_V) ); string[] DCodeSplit= DCode.Split("?"); if(DCodeSplit.Length>2){ EdgeH=DOIT.ConvertStringToNumber(DCodeSplit[2]); EdgeV=DOIT.ConvertStringToNumber(DCodeSplit[3]); } if(Sy(); Door.transform.localScale=new(ScaleV,ScaleH,1f); Door.transform.position=new(Px,Py,0); Door.transform.SetParent(DoorModel.transform); DoorModel.transform.SetParent(ds.transform); AddTexture(Door,DCat,Material,24*24/Sx,24*24/Sy); DoorModel.AddComponent(typeof(MeshSlicerComponent)); DoorModel.transform.GetComponent().Size=new(Sx/SizeV,Sy/SizeH,1f); DoorModel.transform.GetComponent().Slices=new(EdgeScaleV,EdgeScaleH,1f); return ds; } //Panel Kit--------------------------------------------------------------------------------------------------------------------------- public static GameObject PaternKit(string Door_ID,string Color_ID, string[] code) { GameObject DOORPATERN = new(); ModelNumber="D_11";//UIT.Value("Door",Door_ID,"Model"); Thickness=DOIT.ConvertStringToNumber(UIT.Value("Door",Door_ID,"Thick")); DMname=Door_ID; DCode=Door_ID+"?"+Color_ID; string Rotation = UIT.Value(Library.CabTexture,Color_ID,Header.Rotation); if(Rotation==ColorID)Rotation="0"; Material=UIT_MATERIAL.GetMaterial(Color_ID+"?"+Rotation); //GameObject DOORPATERN = new(); float E = 0f;//edge float sx = DOIT.ConvertStringToNumber(code[3]); float sy = DOIT.ConvertStringToNumber(code[4]); float sz = Thickness; float PW = DOIT.ConvertStringToNumber(code[0]);//Wide of the patern float PH = DOIT.ConvertStringToNumber(code[1]);//Height of the patern float px = -PW / 2f + sx / 2f; float py = PH / 2f - sy / 2f; int DoorQty = (code.Length - 2) / 4; for (int i = 0; i < DoorQty ; i++) { int a = 2 + 4 * i; if (i>0 ) { px += DOIT.ConvertStringToNumber(code[a-3])*0.5f+DOIT.ConvertStringToNumber(code[a+1])*0.5f; if (px >= PW *0.5f) { _G.RTOT += 1; px = - PW / 2f + DOIT.ConvertStringToNumber(code[a+1])*0.5f ; py -= DOIT.ConvertStringToNumber(code[a-2])*0.5f + DOIT.ConvertStringToNumber(code[a+2])*0.5f; } } CreateDoorKit(DOORPATERN , (i + 1).ToString(), code, a , DOIT.ConvertStringToNumber(code[a+1]), DOIT.ConvertStringToNumber(code[a+2]) , px, py, ModelNumber); } float DSw = (PW - E) / PW; float DSh = (PH - E) / PH; DOORPATERN.transform.localScale = new(DSw, DSh, 1); DOORPATERN.name = "D_Patern"; DOORPATERN.tag = "unhit"; return DOORPATERN ; } public static void CreateDoorKit(GameObject DOORPATERN, string dn, string[] code, int a , float Sx, float Sy, float Px, float Py, string ModelNumber) { //print("---------------Create Door---------"); string p=code[a]; GameObject Door=new("DOOR"+dn); GetModel( Door, Sx, Sy, Px, Py,p,ModelNumber); Door.layer=7; Door.transform.SetParent(DOORPATERN.transform); SetLayer(Door, 7); } public static void SetLayer(GameObject Object, int Layer) { Object.layer=Layer; foreach(Transform Mcx in Object.transform) { Mcx.gameObject.layer=Layer; foreach(Transform McxIn in Mcx.transform) { McxIn.gameObject.layer=Layer; foreach(Transform McxInIn in McxIn.transform) { McxInIn.gameObject.layer=Layer; foreach(Transform McxInInIn in McxInIn.transform) { McxInInIn.gameObject.layer=Layer; } } } } } }