using UnityEngine; public class ConstructSink : MonoBehaviour { static Texture2D Tex; static float Size = 1; static Color Col; static float Shine; static string TAG; static string COLOR; public static void AddSink(int nOT) { CameraAround.Show(); // TODO : why? string[] sinkInfo = _G.OBJs[nOT][67].Split(","); // sinkInfo[0] = sinkInfo[0]; //model // sinkInfo[1] = sinkInfo[1]; //wide // sinkInfo[2] = sinkInfo[2]; //depth // sinkInfo[3] = sinkInfo[3]; //color COLOR = sinkInfo[3]; //print("sinkInfo ==== " + _G.OBJs[nOT][67]); float sinkWidth = DOIT.ConvertStringToNumber(sinkInfo[1]); float sinkHeight = 9.0f; // TODO : get value from library/csv/database float sinkDepth = DOIT.ConvertStringToNumber(sinkInfo[2]); float b = 1.0f; float offz = 2.0f; float A = 0.0f; float cabinetWidth = DOIT.ConvertStringToNumber(_G.OBJs[nOT][6]); if (sinkWidth > cabinetWidth - 2.0f) { sinkWidth = cabinetWidth - 2.0f; } if (_G.OBJs[nOT][1].Substring(0, 2) == "VS") sinkDepth -= 4.0f; GameObject TAR = GameObject.Find(_G.OBJs[nOT][0]); Vector3 TARr = TAR.transform.rotation.eulerAngles; int nO = Get.GetObjectIndex(_G.OBJs[nOT][0]);// int.Parse(_G.OBJs[nOT][0].Substring(4, _G.OBJs[nOT][0].Length - 4)); string[] C = _G.OBJs[nO]; _G.nO = nO; float Oh = DOIT.ConvertStringToNumber(C[7]) + DOIT.ConvertStringToNumber(C[11]); TAR.transform.localRotation = Quaternion.Euler(0, 0, 0); Vector3 TARp = TAR.transform.position; float py = DOIT.ConvertStringToNumber(C[16]); float pz = DOIT.ConvertStringToNumber(C[17]); float Od = DOIT.ConvertStringToNumber(C[8]) + DOIT.ConvertStringToNumber(C[42].Split('_')[4]);//DOIT.ConvertStringToNumber(C[8]); float to = 0.5f; string[] SinkC = C[42].Split(","[0]); float ct = DOIT.ConvertStringToNumber(SinkC[0]);//Counter thickness float dz = 0; float dx = 0; C[67] = sinkInfo[0] + "," + DOIT.CSs(sinkInfo[1]) + "," + DOIT.CSs(sinkInfo[2]) + "," + sinkInfo[3]; if (TAR.transform.Find("sink")) Destroy(TAR.transform.Find("sink").gameObject); if (TAR.transform.Find("top")) Destroy(TAR.transform.Find("top").gameObject); //create sink GameObject sink = new() { name = "sink" }; sink.transform.parent = GameObject.Find("SCENE").transform; float Bk = 0; if (sinkInfo[0] == "SINK101" || sinkInfo[0] == "SINK102") { Bk = 4; } if (sinkInfo[0] == "SINK103" || sinkInfo[0] == "SINK104") { Bk = 4; sinkDepth += 2.5f; } if (sinkInfo[0] == "SINK105" || sinkInfo[0] == "SINK106") { Bk = 0.25f; b = 0.25f; sinkDepth -= 2; to = -ct; } GameObject front = Createmcx("front", sinkWidth, sinkHeight, b, 0, 0, -sinkDepth / 2 + b / 2, 0, 0, 0); front.transform.parent = sink.transform; GameObject left = Createmcx("left", sinkDepth - b * 2, sinkHeight, 1, -sinkWidth / 2 + b / 2, 0, 0, 0, 90, 0); left.transform.parent = sink.transform; GameObject back = Createmcx("back", sinkWidth, sinkHeight, Bk, 0, 0, sinkDepth / 2 - Bk / 2, 0, 180, 0); back.transform.parent = sink.transform; GameObject right = Createmcx("right", sinkDepth - b * 2, sinkHeight, 1, sinkWidth / 2 - b / 2, 0, 0, 0, -90, 0); right.transform.parent = sink.transform; GameObject bottom = Createmcx("bottom", sinkWidth - b * 2, 1, sinkDepth - b * 2, 0, -sinkHeight / 2 + 0.5f, 0, 0, 0, 0); bottom.transform.parent = sink.transform; if (sinkInfo[0] == "SINK101" || sinkInfo[0] == "SINK103" || sinkInfo[0] == "SINK105") { GameObject center = Createmcx("center", 1, sinkHeight - 2, sinkDepth - b * 2, 0, -0.5f, 0, 0, 0, 0); center.transform.SetParent(sink.transform); } if (sinkInfo[0] == "SINK101" || sinkInfo[0] == "SINK102") { to = -0.5f; py = TARp.y + Oh / 2 - sinkHeight / 2 - to; offz = Mathf.Abs(pz - TARp.z); dz = -6.5f; if (_G.OBJs[nO][4] == "B4") { dx += 6.5f; } if (_G.OBJs[nO][4] == "B5") { dx -= 6.5f; } } if (sinkInfo[0] == "SINK103" || sinkInfo[0] == "SINK104") { to = -0.25f; py = TARp.y + Oh / 2 - sinkHeight / 2 - to; offz = Mathf.Abs(pz - TARp.z); dz = -1; } if (sinkInfo[0] == "SINK105" || sinkInfo[0] == "SINK106") { to = ct; py = TARp.y + Oh / 2 - sinkHeight / 2 - ct; offz = Mathf.Abs(pz - TARp.z); dz = -3; if (_G.OBJs[nO][4] == "B4") { dz += 1; } if (_G.OBJs[nO][4] == "B5") { dz += 1; } } CREATE.Point(sink, "s1", -sinkWidth / 2, sinkHeight / 2 + to, sinkDepth / 2); CREATE.Point(sink, "s2", sinkWidth / 2, sinkHeight / 2 + to, sinkDepth / 2); CREATE.Point(sink, "s3", sinkWidth / 2, sinkHeight / 2 + to, -sinkDepth / 2); CREATE.Point(sink, "s4", -sinkWidth / 2, sinkHeight / 2 + to, -sinkDepth / 2); if (_G.OBJs[nO][4] == "B4") { A = -45; dx += 0f; dz -= 0f; } if (_G.OBJs[nO][4] == "B5") { A = 45; dx -= 0f; dz -= 0f; } sink.transform.localRotation = Quaternion.Euler(0, A, 0); sink.transform.position = new Vector3(TARp.x + dx, py, TARp.z + dz); sink.transform.SetParent(TAR.transform); //---------------------------------------------------Cut Top cabinet------------------------------------------------------------------------------------------- Transform cabinetTransform = GameObject.Find(_G.OBJs[nOT][0]).transform; if (!cabinetTransform.Find("CABCOUNTER")) return; GameObject Counter = cabinetTransform.Find("CABCOUNTER").gameObject; for (int i = 0; i < Counter.transform.childCount; i++) { GameObject Child = Counter.transform.GetChild(i).gameObject; if (Child.name=="top" || Child.name=="ints"){ Destroy(Child); } } Transform s11t = cabinetTransform.Find("S-11t"); // top shelf if (s11t != null) { Destroy(s11t.gameObject); } GameObject top = Get.o2(_G.OBJs[nOT][0], "CABCOUNTER"); float th = DOIT.ConvertStringToNumber(_G.OBJs[nO][11]); //string[] cp=_G.OBJs[nO][42].Split(","); Vector3 t1 = GameObject.Find(_G.OBJs[nOT][0] + "/PC1").transform.position; Vector3 t2 = GameObject.Find(_G.OBJs[nOT][0] + "/PC2").transform.position; Vector3 t3 = GameObject.Find(_G.OBJs[nOT][0] + "/PC3").transform.position; Vector3 t4 = GameObject.Find(_G.OBJs[nOT][0] + "/PC4").transform.position; Vector3 s1 = sink.transform.Find("s1").transform.position; Vector3 s2 = sink.transform.Find("s2").transform.position; Vector3 s3 = sink.transform.Find("s3").transform.position; Vector3 s4 = sink.transform.Find("s4").transform.position; if (_G.OBJs[nO][4] != "B4" && _G.OBJs[nO][4] != "B5") { if (sinkInfo[0] == "SINK101" || sinkInfo[0] == "SINK102") { float wf = Vector3.Distance(t1, t4); float osw = (wf - sinkWidth) / 2; s3 = new Vector3(t4.x - osw, t4.y, t4.z); s4 = new Vector3(t1.x + osw, t1.y, t1.z); SideV4(top, s1, t2, t3, s2, "xz"); SideV4(top, s2, t3, t4, s3, "xz"); SideV4(top, t1, t2, s1, s4, "xz"); GameObject.Find(_G.OBJs[nOT][0] + "/CABCOUNTER/f").SetActive(false); Vector3 s3u = new(s3.x, s3.y - th, s3.z); Vector3 s4u = new(s4.x, s4.y - th, s4.z); Vector3 t1u = new(t1.x, t1.y - th, t1.z); Vector3 t4u = new(t4.x, t4.y - th, t4.z); SideV4(top, t1, s4, s4u, t1u, "xy"); SideV4(top, s3, t4, t4u, s3u, "xy"); } if (sinkInfo[0] == "SINK103" || sinkInfo[0] == "SINK104" || sinkInfo[0] == "SINK105" || sinkInfo[0] == "SINK106") { SideV4(top, s1, t2, t3, s2, "xz"); SideV4(top, s2, t3, t4, s3, "xz"); SideV4(top, t1, s4, s3, t4, "xz"); SideV4(top, t1, t2, s1, s4, "xz"); GameObject.Find(_G.OBJs[nOT][0] + "/CABCOUNTER/f").SetActive(true); } } if (_G.OBJs[nO][4] == "B4") { Vector3 t5 = GameObject.Find(_G.OBJs[nOT][0] + "/PC5").transform.position; if (sinkInfo[0] == "SINK101" || sinkInfo[0] == "SINK102") { float fs = Vector3.Distance(s4, s3); float dw = Vector3.Distance(t1, t5); float osw = (fs - dw) * 0.707f; s3 = new Vector3(t5.x, t5.y, t5.z + osw); s4 = new Vector3(t1.x - osw, t1.y, t1.z); SideV3("t1", top, s1, t3, s2);//1 SideV3("t2", top, t3, t4, s2);//2 SideV3("t3", top, s2, t4, s3);//3 SideV3("t4", top, t2, s1, s4);//4 SideV3("t5", top, t2, t3, s1);//5 GameObject.Find(_G.OBJs[nOT][0] + "/CABCOUNTER/f").SetActive(false); } if (sinkInfo[0] == "SINK103" || sinkInfo[0] == "SINK104" || sinkInfo[0] == "SINK105" || sinkInfo[0] == "SINK106") { SideV3("t1", top, s1, t3, s2);//1 SideV3("t2", top, t3, t4, s2);//2 SideV3("t3", top, s2, t4, s3);//3 SideV3("t4", top, s3, t4, t5);//4 SideV3("t5", top, t1, s3, t5);//5 SideV3("t6", top, t1, s4, s3);//6 SideV3("t7", top, t2, s4, t1);//7 SideV3("t8", top, t2, s1, s4);//8 SideV3("t9", top, t2, t3, s1);//9*/ GameObject.Find(_G.OBJs[nOT][0] + "/CABCOUNTER/f").SetActive(true); } } if (_G.OBJs[nO][4] == "B5") { Vector3 t5 = GameObject.Find(_G.OBJs[nOT][0] + "/PC5").transform.position; if (sinkInfo[0] == "SINK101" || sinkInfo[0] == "SINK102") { float fs = Vector3.Distance(s4, s3); float dw = Vector3.Distance(t1, t5); float osw = (fs - dw) * 0.707f; s3 = new Vector3(t5.x + osw, t5.y, t5.z); s4 = new Vector3(t1.x, t1.y, t1.z + osw); SideV3("t1", top, s4, t2, s1);//1 SideV3("t2", top, s1, t2, t3);//2 SideV3("t3", top, s1, t3, s2);//3 SideV3("t4", top, s2, t3, t4);//4 SideV3("t5", top, s3, s2, t4);//5 GameObject.Find(_G.OBJs[nOT][0] + "/CABCOUNTER/f").SetActive(false); } if (sinkInfo[0] == "SINK103" || sinkInfo[0] == "SINK104" || sinkInfo[0] == "SINK105" || sinkInfo[0] == "SINK106") { SideV3("t1", top, t1, t2, s4);//1 SideV3("t2", top, t2, t3, s1);//2 SideV3("t3", top, s4, t2, s1);//3 SideV3("t4", top, s1, t3, s2);//4 SideV3("t5", top, s2, t3, t4);//5 SideV3("t6", top, s3, s2, t4);//6 SideV3("t7", top, t5, s3, t4);//7 SideV3("t8", top, t5, s4, s3);//8 SideV3("t9", top, t1, s4, t5);//9*/ GameObject.Find(_G.OBJs[nOT][0] + "/CABCOUNTER/f").SetActive(true); } } if (sinkInfo[0] == "SINK105" || sinkInfo[0] == "SINK106") { Vector3 S1 = new(s1.x, s1.y - to, s1.z); Vector3 S2 = new(s2.x, s2.y - to, s2.z); Vector3 S3 = new(s3.x, s3.y - to, s3.z); Vector3 S4 = new(s4.x, s4.y + -to, s4.z); SideV4(top, S1, s1, s2, S2, "xy"); SideV4(top, S2, s2, s3, S3, "zy"); SideV4(top, S3, s3, s4, S4, "zy"); SideV4(top, S4, s4, s1, S1, "xy"); GameObject.Find(_G.OBJs[nOT][0] + "/CABCOUNTER/f").SetActive(true); } //top.transform.SetParent(Get.o1(_G.OBJs[nOT][0]).transform); TAR.transform.localRotation = Quaternion.Euler(TARr.x, TARr.y, TARr.z); if (Get.o2(_G.OBJs[nO][0], "TOPPNL") != null) Get.o2(_G.OBJs[nO][0], "TOPPNL").SetActive(false); } public static GameObject Createmcx(string n, 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.transform.localScale = new Vector3(sx, sy, sz); obj.transform.position = new Vector3(px, py, pz); obj.transform.localRotation = Quaternion.Euler(rx, ry, rz); obj.name = n; obj.GetComponent().material = UIT_MATERIAL.GetMaterial(COLOR); obj.GetComponent().probeAnchor = GameObject.Find("Reflection Probe").transform; return obj; } public static GameObject SideV4(GameObject S, Vector3 P1, Vector3 P2, Vector3 P3, Vector3 P4, string wh) { GameObject s = new("ints"); s.AddComponent(typeof(MeshFilter)); s.AddComponent(typeof(MeshRenderer)); s.GetComponent().mesh = CREATE.Mesh4V(P1, P2, P3, P4); string ctex = _G.OBJs[_G.nO][41]; if (ctex.Split(',').Length == 1 && ctex.Split(',')[0].Split('.').Length == 1) { s.GetComponent().material = UIT_MATERIAL.GetMaterial(ctex); } else { s.GetComponent().material = UIT_MATERIAL.GetMaterial(_G.OBJs[_G.nO][41]); } s.GetComponent().probeAnchor = GameObject.Find("Reflection Probe").transform; DOIT.SetSizeTex(s, 24, 24, 0, 0, 0, 0, 0, 90); s.transform.parent = S.transform; s.tag = "counter"; return s; } public static GameObject SideV3(string N, GameObject S, Vector3 P1, Vector3 P2, Vector3 P3) { GameObject s = new() { name = N }; s.AddComponent(typeof(MeshFilter)); s.AddComponent(typeof(MeshRenderer)); s.GetComponent().mesh = CREATE.Mesh3V(P1, P2, P3); //print("_G.nO][41]===" + _G.OBJs[_G.nO][41]); string ctex = _G.OBJs[_G.nO][41]; if (ctex.Split(',').Length == 1 && ctex.Split(',')[0].Split('.').Length == 1) { s.GetComponent().material = CREATE.GetCounterMat(ctex,"SCENE"); } else { s.GetComponent().material = CREATE.GetCounterMatFromCode(_G.OBJs[_G.nO][41],"SCENE");} s.GetComponent().probeAnchor = GameObject.Find("Reflection Probe").transform; DOIT.SetSizeTex(s, 24, 24, 0, 0, 0, 0, 90, 90); s.transform.parent = S.transform; s.tag = "counter"; return s; } }