using UnityEngine; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.AddressableAssets; using System.Collections; public class ConstructBloc : MonoBehaviour { static Texture2D AddressableTexture; static bool isOnCeilling; public static void AddBloc(int nO) { GameObject.Find("HIDER").transform.Find("LoadingCircle").gameObject.SetActive(true); string[] C = _G.OBJs[nO]; //Addbloc(); print("C[41]=====" + C[41]);//C[41]=====none?#737373?#ffffffff?#ffffffff?1?0?0.1?0.05 Material MAT = UIT_MATERIAL.GetMaterial(C[41]); C[41] = C[41].Replace(",", "?"); MAT.name = C[41].Split("?")[0]; GameObject BASE = GameObject.CreatePrimitive(PrimitiveType.Cube); BASE.name = C[0]; if (C[41].Split("?").Length > 3 && MAT.name != "MELAMINEWHITE" && MAT.name != "none") { StaticCoroutine.Start(GORETURN(BASE, MAT, nO)); } else { AddblocToScene(BASE, MAT, nO); GameObject.Find("HIDER").transform.Find("LoadingCircle").gameObject.SetActive(false); } } public static void AddblocToScene(GameObject BASE, Material MAT,int nO) { string[] C = _G.OBJs[nO]; float w = DOIT.ConvertStringToNumber(C[6]); float h = DOIT.ConvertStringToNumber(C[7]); float d = DOIT.ConvertStringToNumber(C[8]); float px = DOIT.ConvertStringToNumber(C[15]); float py = DOIT.ConvertStringToNumber(C[16]); float pz = DOIT.ConvertStringToNumber(C[17]); float rx = DOIT.ConvertStringToNumber(C[18]); float ry = DOIT.ConvertStringToNumber(C[19]); float rz = DOIT.ConvertStringToNumber(C[20]); isOnCeilling = C[22] == "ceil"; if (py > _G.HEIGHT * 0.5f - 24) isOnCeilling = true; //create block BASE.transform.localScale = new(w + 0.5f, h + 0.5f, d + 0.5f); BASE.GetComponent().shadowCastingMode = 0; //BASE.name = C[0]; if (Get.Bool(C[1], "BLOC101_BLOC102_BLOC103_BLOC104_BLOC105_BLOC106_BLOC107")) { GameObject top = CreateMcx("top", w, d, 1, 0, h / 2, 0, 90, 0, 0,MAT); top.transform.SetParent(BASE.transform); GameObject front = CreateMcx("front", w, h, 1, 0, 0, -d / 2, 0, 0, 0,MAT); front.transform.SetParent(BASE.transform); GameObject left = CreateMcx("left", d, h, 1, -w / 2, 0, 0, 0, 90, 0,MAT); left.transform.SetParent(BASE.transform); GameObject back = CreateMcx("back", w, h, 1, 0, 0, d / 2, 0, 180, 0,MAT); back.transform.SetParent(BASE.transform); GameObject right = CreateMcx("right", d, h, 1, w / 2, 0, 0, 0, -90, 0,MAT); right.transform.SetParent(BASE.transform); GameObject under = CreateMcx("under", w, d, 1, 0, -h / 2, 0, -90, 0, 0,MAT); under.transform.SetParent(BASE.transform); } if (C[1] == "BLOC108") { w = Mathf.Abs(w); Vector3 P1 = new(-w / 2, h / 2, -d / 2); Vector3 P2 = new(-w / 2, h / 2, d / 2); Vector3 P3 = new(w / 2, h / 2, d / 2); Vector3 P4 = new(-w / 2, -h / 2, -d / 2); Vector3 P5 = new(-w / 2, -h / 2, d / 2); Vector3 P6 = new(w / 2, -h / 2, d / 2); Vector3 P0 = new(0, 0, 0); GameObject top = CreateFace("top", P1, P2, P3, P0,MAT); top.transform.SetParent(BASE.transform); GameObject left = CreateFace("left", P5, P2, P1, P4,MAT); left.transform.SetParent(BASE.transform); GameObject back = CreateFace("back", P6, P3, P2, P5,MAT); back.transform.SetParent(BASE.transform); GameObject right = CreateFace("right", P4, P1, P3, P6,MAT); right.transform.SetParent(BASE.transform); GameObject under = CreateFace("under", P4, P6, P5, P0,MAT); under.transform.SetParent(BASE.transform); } if (C[1] == "BLOC109") { w = Mathf.Abs(w); Vector3 P1 = new(w / 2, h / 2, -d / 2); Vector3 P2 = new(-w / 2, h / 2, d / 2); Vector3 P3 = new(w / 2, h / 2, d / 2); Vector3 P4 = new(w / 2, -h / 2, -d / 2); Vector3 P5 = new(-w / 2, -h / 2, d / 2); Vector3 P6 = new(w / 2, -h / 2, d / 2); Vector3 P0 = new(0, 0, 0); GameObject top = CreateFace("top", P1, P2, P3, P0,MAT); top.transform.SetParent(BASE.transform); GameObject left = CreateFace("left", P5, P2, P1, P4,MAT); left.transform.SetParent(BASE.transform); GameObject back = CreateFace("back", P6, P3, P2, P5,MAT); back.transform.SetParent(BASE.transform); GameObject right = CreateFace("right", P4, P1, P3, P6,MAT); right.transform.SetParent(BASE.transform); GameObject under = CreateFace("under", P4, P6, P5, P0,MAT); under.transform.SetParent(BASE.transform); } if (C[1] == "BLOC110") { w = Mathf.Abs(w); Vector3 P1 = new(-w / 2, -h / 2, -d / 2); Vector3 P2 = new(-w / 2, h / 2, d / 2); Vector3 P3 = new(w / 2, h / 2, d / 2); Vector3 P4 = new(w / 2, -h / 2, -d / 2); Vector3 P5 = new(-w / 2, -h / 2, d / 2); Vector3 P6 = new(w / 2, -h / 2, d / 2); Vector3 P0 = new(0, 0, 0); GameObject top = CreateFace("top", P1, P2, P3, P4,MAT); top.transform.SetParent(BASE.transform); GameObject left = CreateFace("left", P5, P2, P1, P0,MAT); left.transform.SetParent(BASE.transform); GameObject back = CreateFace("back", P6, P3, P2, P5,MAT); back.transform.SetParent(BASE.transform); GameObject right = CreateFace("right", P4, P3, P6, P0,MAT); right.transform.SetParent(BASE.transform); GameObject under = CreateFace("under", P5, P1, P4, P6,MAT); under.transform.SetParent(BASE.transform); } if (C[1] == "BLOC111") { w = Mathf.Abs(w); Vector3 P1 = new(-w / 2, h / 2, -d / 2); Vector3 P2 = new(-w / 2, h / 2, d / 2); Vector3 P3 = new(w / 2, h / 2, d / 2); Vector3 P4 = new(w / 2, h / 2, -d / 2); Vector3 P5 = new(-w / 2, -h / 2, d / 2); Vector3 P6 = new(w / 2, -h / 2, d / 2); Vector3 P0 = new(0, 0, 0); GameObject top = CreateFace("top", P1, P2, P3, P4,MAT); top.transform.SetParent(BASE.transform); GameObject left = CreateFace("left", P5, P2, P1, P0,MAT); left.transform.SetParent(BASE.transform); GameObject back = CreateFace("back", P6, P3, P2, P5,MAT); back.transform.SetParent(BASE.transform); GameObject right = CreateFace("right", P4, P3, P6, P0,MAT); right.transform.SetParent(BASE.transform); GameObject under = CreateFace("under", P5, P1, P4, P6,MAT); under.transform.SetParent(BASE.transform); } if (C[1] == "BLOC112") { float r = DOIT.ConvertStringToNumber(C[9]); if (r > w) r = w; if (r > d) r = d; GameObject Cylinder = Instantiate(Resources.Load("OBJECTS/BLOCS/CylinderQuarter", typeof(GameObject))) as GameObject; float wc = r; float dc = d - r; GameObject Cube1 = CreateCube("Cube1", wc, h, dc,MAT); Cube1.transform.position = new(-w * 0.5f + wc * 0.5f, 0, d * 0.5f - dc * 0.5f); wc = w - r; dc = d - r; GameObject Cube2 = CreateCube("Cube2", wc, h, dc,MAT); Cube2.transform.position = new(w * 0.5f - wc * 0.5f, 0, d * 0.5f - dc * 0.5f); wc = w - r; dc = r; GameObject Cube3 = CreateCube("Cube2", wc, h, dc,MAT); Cube3.transform.position = new(w * 0.5f - wc * 0.5f, 0, -d * 0.5f + dc * 0.5f); //Cylinder.transform.localScale=new(r,h*0.5f,r); GameObject Cyl1 = CreateCylinder(Cylinder, "Cyl1", r, h,MAT); Cyl1.transform.position = new(-w * 0.5f + r * 0.5f, 0, -d * 0.5f + r * 0.5f); Cyl1.transform.localRotation = Quaternion.Euler(0, -90, 0); Cube1.transform.SetParent(BASE.transform); Cube2.transform.SetParent(BASE.transform); Cube3.transform.SetParent(BASE.transform); Cyl1.transform.SetParent(BASE.transform); Destroy(Cylinder); } if (C[1] == "BLOC113") { float r = DOIT.ConvertStringToNumber(C[9]); if (r > w * 0.5f) r = w * 0.5f; if (r > d) r = d; GameObject Cylinder = Instantiate(Resources.Load("OBJECTS/BLOCS/CylinderQuarter", typeof(GameObject))) as GameObject; float wc = w - r * 2; float dc = r; GameObject Cube1 = CreateCube("Cube1", wc, h, dc,MAT); Cube1.transform.position = new(0, 0, -d * 0.5f + dc * 0.5f); wc = w; dc = d - r; GameObject Cube2 = CreateCube("Cube2", wc, h, dc,MAT); Cube2.transform.position = new(0, 0, d * 0.5f - dc * 0.5f); GameObject Cyl1 = CreateCylinder(Cylinder, "Cyl1", r, h,MAT); Cyl1.transform.position = new(-w * 0.5f + r * 0.5f, 0, -d * 0.5f + r * 0.5f); Cyl1.transform.localRotation = Quaternion.Euler(0, -90, 0); GameObject Cyl2 = CreateCylinder(Cylinder, "Cyl2", r, h,MAT); Cyl2.transform.position = new(w * 0.5f - r * 0.5f, 0, -d * 0.5f + r * 0.5f); Cyl2.transform.localRotation = Quaternion.Euler(0, 180, 0); Cube1.transform.SetParent(BASE.transform); Cube2.transform.SetParent(BASE.transform); Cyl1.transform.SetParent(BASE.transform); Cyl2.transform.SetParent(BASE.transform); Destroy(Cylinder); } if (C[1] == "BLOC114") { float r = DOIT.ConvertStringToNumber(C[9]); if (r > w * 0.5f) r = w * 0.5f; if (r > d * 0.5f) r = d * 0.5f; GameObject Cylinder = Instantiate(Resources.Load("OBJECTS/BLOCS/CylinderQuarter", typeof(GameObject))) as GameObject; float wc = w - r * 2; float dc = d; GameObject Cube1 = CreateCube("Cube1", wc, h, dc,MAT); Cube1.transform.position = new(0, 0, 0); wc = w; dc = d - r * 2; GameObject Cube2 = CreateCube("Cube2", wc, h, dc,MAT); Cube2.transform.position = new(0, 0, 0); GameObject Cyl1 = CreateCylinder(Cylinder, "Cyl1", r, h,MAT); Cyl1.transform.position = new(-w * 0.5f + r * 0.5f, 0, -d * 0.5f + r * 0.5f); Cyl1.transform.localRotation = Quaternion.Euler(0, -90, 0); GameObject Cyl2 = CreateCylinder(Cylinder, "Cyl2", r, h,MAT); Cyl2.transform.position = new(w * 0.5f - r * 0.5f, 0, -d * 0.5f + r * 0.5f); Cyl2.transform.localRotation = Quaternion.Euler(0, 180, 0); GameObject Cyl3 = CreateCylinder(Cylinder, "Cyl3", r, h,MAT); Cyl3.transform.position = new(-w * 0.5f + r * 0.5f, 0, d * 0.5f - r * 0.5f); Cyl3.transform.localRotation = Quaternion.Euler(0, 0, 0); GameObject Cyl4 = CreateCylinder(Cylinder, "Cyl4", r, h,MAT); Cyl4.transform.position = new(w * 0.5f - r * 0.5f, 0, d * 0.5f - r * 0.5f); Cyl4.transform.localRotation = Quaternion.Euler(0, 90, 0); Cube1.transform.SetParent(BASE.transform); Cube2.transform.SetParent(BASE.transform); Cyl1.transform.SetParent(BASE.transform); Cyl2.transform.SetParent(BASE.transform); Cyl3.transform.SetParent(BASE.transform); Cyl4.transform.SetParent(BASE.transform); Destroy(Cylinder); } if (C[1] == "BLOC115") { GameObject Cyl = CreateCylinderPrimitif("Cylinder", w, d, h,MAT); Cyl.transform.SetParent(BASE.transform); } if (C[1] == "BLOC116") { GameObject Cyl = CreateCylinderPrimitif_90("Cylinder", w, h, d,MAT); Cyl.transform.SetParent(BASE.transform); } Mesure.Addpoints("WALL", BASE); //RigidBody BASE.AddComponent(); BASE.GetComponent().useGravity = false; BASE.GetComponent().isKinematic = true; BASE.GetComponent().detectCollisions = true; BASE.GetComponent().isTrigger = true; //Stet in scene BASE.AddComponent(typeof(MoveObject)); BASE.transform.position = new(px, py, pz); BASE.transform.localRotation = Quaternion.Euler(rx, ry, rz); BASE.GetComponent().material = _G.INV; BASE.transform.SetParent(GameObject.Find("SCENE").transform); } //CREATE SHAPES public static GameObject CreateCube(string name, float wc, float h, float dc, Material MAT) { GameObject Cube = GameObject.CreatePrimitive(PrimitiveType.Cube); Cube.transform.localScale = new(wc, h, dc); Cube.name = name; Cube.tag = "bloc"; Cube.GetComponent().material = MAT; Cube.GetComponent().enabled = false; DOIT.SetSizeTex(Cube, 48, 48, 0, 0, 0, 0, 90, 90); Cube.GetComponent().probeAnchor = GameObject.Find("Reflection Probe").transform; return Cube; } public static GameObject CreateCylinder(GameObject Cyl, string name, float r, float h, Material MAT) { GameObject Cylinder = Instantiate(Cyl); Cylinder.transform.localScale = new(r, h * 0.5f, r); Cylinder.name = name; Cylinder.tag = "bloc"; Cylinder.transform.GetChild(0).GetComponent().material = MAT; Cylinder.transform.GetChild(0).GetComponent().probeAnchor = GameObject.Find("Reflection Probe").transform; return Cylinder; } public static GameObject CreateCylinderPrimitif(string name, float w, float d, float h, Material MAT) { GameObject Cylinder = new(name); GameObject Cyl = GameObject.CreatePrimitive(PrimitiveType.Cylinder); Cyl.transform.SetParent(Cylinder.transform); Cylinder.transform.localScale = new(w, h * 0.5f, d); Cylinder.name = name; Cylinder.tag = "bloc"; Cyl.GetComponent().material = MAT; Cyl.GetComponent().probeAnchor = GameObject.Find("Reflection Probe").transform; return Cylinder; } public static GameObject CreateCylinderPrimitif_90(string name, float w, float d, float h, Material MAT) { GameObject Cylinder = new(name); GameObject Cyl = GameObject.CreatePrimitive(PrimitiveType.Cylinder); Cyl.transform.SetParent(Cylinder.transform); Cyl.transform.localScale = new(h, w * 0.5f, d); Cylinder.transform.rotation = Quaternion.FromToRotation(Vector3.up, new(1, 0, 0)); Cylinder.name = name; Cylinder.tag = "bloc"; Cyl.GetComponent().material = MAT; Cyl.GetComponent().probeAnchor = GameObject.Find("Reflection Probe").transform; return Cylinder; } public static GameObject CreateMcx(string n, float sx, float sy, float sz, float px, float py, float pz, float rx, float ry, float rz, Material MAT) { GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Quad); obj.transform.localScale = new(sx, sy, sz); obj.transform.position = new(px, py, pz); obj.transform.localRotation = Quaternion.Euler(rx, ry, rz); obj.tag = "bloc"; obj.name = n; obj.GetComponent().enabled = false; Material mat = Instantiate(MAT); //Vector2 tile=new(sx/24,sy/24); //mat.SetVector("_Tile",tile); obj.GetComponent().material = mat; obj.GetComponent().probeAnchor = GameObject.Find("Reflection Probe").transform; if (isOnCeilling) { obj.GetComponent().shadowCastingMode = 0; obj.layer = 6; } //Texture DOIT.SetSizeTex(obj, 24, 24, 0, 0, 0, 0, 90, 90); // return obj; } // public static void SetTexture(string ctex) // { // MAT = UIT_MATERIAL.GetMaterialFromRecipe() // print("SetTexture===="+ctex);//null,1,1,FFFFFF,FFFFFF,0,0,S,FFFFFF,,1,1,0.05,0.5,0 // if(ctex.Split('?').Length==2) // { // print("SetTexture==5=="+ctex); // MAT =UIT_MATERIAL.GetMaterial(ctex.Split('?')[0]);//CREATE.Texture_CAB(ctex.Split('?')[0], 24, 24, ctex.Split('?')[1],"Panel","CAB"); // print("SetTexture==6=="+ctex); // } // else // { // print("SetTexture==2=="+ctex); // MAT = Instantiate(_G.TEXTURE); // CREATE.ResetMaterialFromCode(MAT, ctex, "Variable"); // //Textcall // print("SetTexture==3=="+ctex); // } // print("SetTexture==4=="+ctex); // } public static GameObject CreateFace(string N, Vector3 P1, Vector3 P2, Vector3 P3, Vector3 P4, Material MAT) { GameObject s = new(N); s.AddComponent(typeof(MeshFilter)); s.AddComponent(typeof(MeshRenderer)); if (P4 == new Vector3(0, 0, 0)) { s.GetComponent().mesh = CreateMeshShape3V(P1, P2, P3); } if (P4 != new Vector3(0, 0, 0)) { s.GetComponent().mesh = CreateMeshShape4V(P1, P2, P3, P4); } s.GetComponent().material = MAT; DOIT.SetSizeTex(s, 24, 24, 24, 0, 0, 0, 90, 90); s.GetComponent().probeAnchor = GameObject.Find("Reflection Probe").transform; return s; } public static Mesh CreateMeshShape3V(Vector3 P1, Vector3 P2, Vector3 P3) { Mesh m = new() { vertices = new[] { P1, P2, P3 }, uv = new Vector2[] { new (0, 0), new (0, 1), new (1, 1), }, triangles = new int[] { 0, 1, 2 } }; m.RecalculateNormals(); m.RecalculateTangents(); return m; } public static Mesh CreateMeshShape4V(Vector3 P1, Vector3 P2, Vector3 P3, Vector3 P4) { Mesh m = new() { vertices = new[] { P1, P2, P3, P4 }, uv = new Vector2[] { new (0, 0), new (0, 1), new (1, 1), new (1, 0), }, triangles = new int[] { 0, 1, 2, 0, 2, 3 } }; m.RecalculateNormals(); m.RecalculateTangents(); return m; } //Addressable Texture public static IEnumerator GORETURN(GameObject BASE, Material MAT, int nO) { string TexName = MAT.name; if (string.IsNullOrEmpty(TexName)){ TexName= "MELAMINEWHITE";} TexName.Replace(",", "?"); if (TexName != "MELAMINEWHITE" && TexName != "none") { Addressables.LoadAssetAsync(TexName.Split("?")[0]).Completed += handle => { if (handle.Status == AsyncOperationStatus.Succeeded) { Texture2D tex = Instantiate(handle.Result); MAT.SetTexture("_Texture", tex); AddblocToScene(BASE, MAT, nO); GameObject.Find("HIDER").transform.Find("LoadingCircle").gameObject.SetActive(false); } else { Debug.LogError("Failed to load texture: " + BASE.name); } }; } yield return null; //new WaitForSeconds(2); } }