using System.Collections.Generic; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; public class ConstructStove : MonoBehaviour { static GameObject FACE; static GameObject FACETOP; static GameObject FACEHEAD; public static void AddStove(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]); // float hh = 0;//M2 // if (C[5] == "m1") hh = 8; // if (C[5] == "m3") hh = 3; float hh = DOIT.ConvertStringToNumber(_OL.GetValue(C[1],"hh")); //print("hh====="+hh); float hf = 1; string Ns = C[1].Substring(4, 3); int Ni = int.Parse(C[1].Substring(4, 3)); Material matdoor; Material matbox ; Material matfront = Instantiate(_G.ELEG); string code="ffffff_Glossy"; if (Ni <= 107) {code="F3F3F3_Semi"; }//Grey else if (Ni > 107 && Ni <= 114) { code="333333_Semi"; }//Black else if (Ni > 114) { code="ffffff_Semi"; } matbox = UIT_MATERIAL.GetMaterial(code); matdoor = matbox; GameObject HEAD; GameObject BODY = createmcx("BODY", W, H - hf - hh, D - 1.5f, 0, hf / 2 - hh / 2, 0.75f, 0, 0, 0); setMat("BODY", BODY, matbox, ""); GameObject DOOR = createmcx("DOOR", W, H - hf - hh - 1, 1, 0, hf / 2 - hh / 2, -D / 2 + 0.5f, 0, 0, 0); setMat("BDOOR", DOOR, matdoor, ""); FACE = GameObject.CreatePrimitive(PrimitiveType.Quad); FACE.transform.position = new Vector3(0, hf / 2 - hh / 2, -D / 2 - 0.1f); FACE.transform.localRotation = Quaternion.Euler(0, 0, 0); setMat("FACE", FACE, matfront, "STOA" + Ns); FACE.transform.localScale = new Vector3(W, H - hf - hh - 1, 1); FACETOP = GameObject.CreatePrimitive(PrimitiveType.Quad); FACETOP.transform.position = new Vector3(0, H / 2 - hh + 0.1f, -1); FACETOP.transform.localRotation = Quaternion.Euler(90, 0, 0); setMat("FACETOP", FACETOP, matfront, "STOB" + Ns); FACETOP.transform.localScale = new Vector3(W - 2, D - 2 - 2, 1); //create BASE GameObject BASE = GameObject.CreatePrimitive(PrimitiveType.Cube);//new GameObject(); BASE.transform.localScale = new Vector3(W + 0.5f, H + 0.5f, D + 0.5f); BASE.name = _G.OBJs[nO][0]; BASE.transform.parent = GameObject.Find("SCENE").transform; Destroy(GameObject.Find("New Game Object")); //RigidBody BASE.AddComponent(); BASE.GetComponent().useGravity = false; BASE.GetComponent().isKinematic = true; BASE.GetComponent().detectCollisions = true; BASE.GetComponent().isTrigger = true; //float back=D*0.5f; float backBox=D*0.5f; float frontBox=D*0.5f; //float front=-D*0.5f; //float right=W*0.5f; //float left=-W*0.5f; float rightBox=W*0.5f; float leftBox=-W*0.5f; //float centerBox_X=0; //print("stove C[55]===="+C[55]); //print("stove C[54]===1="+C[54]);//SPLA.1?F6F6F6?F6F6F6?F6F6F6?1?0?0.5?0.3?1 //SPLASH DOBS.SplashC(BASE, C[55], W, H, D, C[54]); BODY.transform.parent = BASE.transform; DOOR.transform.parent = BASE.transform; if (new List {"107","114"}.Contains(C[1][4..])) { HEAD = createmcx("HEAD", W, hh, 2, 0, H / 2 - hh / 2, D / 2 - 1f, 0, 0, 0); setMat("HEAD", HEAD, matdoor, ""); HEAD.transform.parent = BASE.transform; } if (new List {"101","102","103","108","109","110","115","116","117","120","121"}.Contains(C[1][4..])) { HEAD = createmcx("HEAD", W, hh, 2, 0, H / 2 - hh / 2, D / 2 - 1f, 0, 0, 0); setMat("HEAD", HEAD, matdoor, ""); HEAD.transform.parent = BASE.transform; FACEHEAD = GameObject.CreatePrimitive(PrimitiveType.Quad); FACEHEAD.transform.position = new Vector3(0, H / 2 - hh / 2, D / 2 - 2.1f); FACEHEAD.transform.localRotation = Quaternion.Euler(0, 0, 0); setMat("FACEHEAD", FACEHEAD, matfront, "STOC" + Ns); FACEHEAD.transform.localScale = new Vector3(W, hh, 1); FACEHEAD.transform.parent = BASE.transform; } //LEG addLeg("L1", BASE, -W / 2 + 1, -H / 2 + 0.5f, -D / 2 + 2); addLeg("L2", BASE, -W / 2 + 1, -H / 2 + 0.5f, D / 2 - 2); addLeg("L3", BASE, W / 2 - 1, -H / 2 + 0.5f, D / 2 - 2); addLeg("L4", BASE, W / 2 - 1, -H / 2 + 0.5f, -D / 2 + 2); //ANCHORE POINT CREATE.Point(BASE, "P1", -W / 2, H / 2, D / 2); CREATE.Point(BASE, "P2", W / 2, H / 2, D / 2); CREATE.Point(BASE, "P3", W / 2, H / 2, -D / 2); CREATE.Point(BASE, "P4", -W / 2, H / 2, -D / 2); CREATE.EmptyPoint(BASE, "PBLU", leftBox, (H * 0.5f) , backBox);//P CREATE.EmptyPoint(BASE, "PBRU", rightBox, (H * 0.5f) , backBox);//P2 CREATE.EmptyPoint(BASE, "PFLU", leftBox, (H * 0.5f) , frontBox);//P3 CREATE.EmptyPoint(BASE, "PFRU", rightBox, (H * 0.5f) , frontBox);//P4 CREATE.EmptyPoint(BASE, "PBLB", leftBox, -H * 0.5f, backBox);//P1 CREATE.EmptyPoint(BASE, "PBRB", rightBox, -H * 0.5f, backBox);//P2 CREATE.EmptyPoint(BASE, "PFLB", leftBox, -H * 0.5f, frontBox);//P3 CREATE.EmptyPoint(BASE, "PFRB", rightBox, -H * 0.5f, frontBox);//P4 Mesure.Addpoints("BASE",BASE); FACE.transform.parent = BASE.transform; FACETOP.transform.parent = BASE.transform; //Stet in scene BASE.transform.position = new Vector3(px, py, pz); BASE.transform.localRotation = Quaternion.Euler(rx, ry, rz); BASE.AddComponent(typeof(MoveObject)); BASE.GetComponent().material = _G.INV; } public static GameObject createmcx(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.GetComponent().enabled = false; 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.GetComponent().probeAnchor = GameObject.Find("Reflection Probe").transform; obj.name = Name; obj.tag = "unhit"; return obj; } public static void CreatePoint(GameObject Base, string Name, float x, float y, float z) { GameObject point = GameObject.CreatePrimitive(PrimitiveType.Cube); point.GetComponent().enabled = false; point.name = Name; point.transform.position = new Vector3(x, y, z); point.transform.parent = Base.transform; point.transform.localScale = new Vector3(0, 0, 0); } public static void addLeg(string name, GameObject B, float xp, float hp, float zp) { GameObject L1 = GameObject.CreatePrimitive(PrimitiveType.Cube);//new GameObject(); L1.name = name; L1.transform.localScale = new Vector3(1, 1, 1); L1.transform.position = new Vector3(xp, hp, zp); L1.gameObject.GetComponent().material = UIT_MATERIAL.GetMaterial("333333_Matt");;//;Resources.Load("MATERIALS/BLACK") as Material; L1.transform.SetParent(B.transform); } public static void setMat(string Name, GameObject O, Material mat, string path) { O.name = Name; O.GetComponent().material = mat; O.GetComponent().probeAnchor = GameObject.Find("Reflection Probe").transform; O.GetComponent().reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Simple; if (path.IndexOf("STOA") != -1) { Addressables.LoadAssetAsync(path).Completed += faceA_Completed; } if (path.IndexOf("STOB") != -1) { Addressables.LoadAssetAsync(path).Completed += faceB_Completed; } if (path.IndexOf("STOC") != -1) { Addressables.LoadAssetAsync(path).Completed += faceC_Completed; } O.tag = "unhit"; } private static void faceA_Completed(AsyncOperationHandle handleA) { if (handleA.Status == AsyncOperationStatus.Succeeded) { Texture2D result = handleA.Result; FACE.gameObject.GetComponent().material.mainTexture = result; } } private static void faceB_Completed(AsyncOperationHandle handleB) { if (handleB.Status == AsyncOperationStatus.Succeeded) { Texture2D result = handleB.Result; FACETOP.gameObject.GetComponent().material.mainTexture = result; } } private static void faceC_Completed(AsyncOperationHandle handleC) { if (handleC.Status == AsyncOperationStatus.Succeeded) { Texture2D result = handleC.Result; FACEHEAD.gameObject.GetComponent().material.mainTexture = result; } } }