using System; using System.Collections; using System.Collections.Generic; //sing System.Diagnostics; using UnityEngine; using ColorUtility = UnityEngine.ColorUtility; public class ColorChangeCommand : ICommand { string _selected; string _codetexture; Color _afterColor; Material _afterWallMat; Hashtable _colorChanges; bool _firstExecution = true; public ColorChangeCommand(string selected) { _selected = selected; _afterColor = _G.pickedColor; _afterWallMat = _G.WALLCOLOR; _colorChanges = new Hashtable(); } public void Execute() { Paint(_firstExecution, false); _firstExecution = false; } public void Undo() { Paint(_firstExecution, true); } public void UpdateCommand() { //if (_object != null) return; return; } public void Paint(bool isSaving, bool isUndoing) { Debug.Log("SEL===========================" + _selected ); if (_selected != "") { int i; if (_selected == "MOLD2") { for (i = 1; i < 9; i++) { Paint(GameObject.Find("k" + i.ToString()), isSaving, isUndoing); Paint(GameObject.Find("k" + i.ToString() + "a"), isSaving, isUndoing); Paint(GameObject.Find("k" + i.ToString() + "b"), isSaving, isUndoing); Paint(GameObject.Find("k" + i.ToString() + "c"), isSaving, isUndoing); Paint(GameObject.Find("k" + i.ToString() + "d"), isSaving, isUndoing); Paint(GameObject.Find("o" + i.ToString()), isSaving, isUndoing); } List LnW = new List(); for (i = 0; i < _G.OBJnum; i++) { if (_G.OBJs[i] != null) { string key = _G.OBJs[i][0]; if (isSaving) { _colorChanges.Add(key + 63.ToString(), _G.OBJs[i][63]); } if (isUndoing) { if (_G.OBJs[i][0].Substring(0, 4) == "wind") { LnW.Add(_G.OBJs[i][0]); _G.OBJs[i][63] = (string)_colorChanges[key + 63.ToString()]; } if (_G.OBJs[i][0].Substring(0, 4) == "pati") { LnW.Add(_G.OBJs[i][0]); _G.OBJs[i][63] = (string)_colorChanges[key + 63.ToString()]; } if (_G.OBJs[i][0].Substring(0, 4) == "door") { LnW.Add(_G.OBJs[i][0]); _G.OBJs[i][63] = (string)_colorChanges[key + 63.ToString()]; } } else { if (_G.OBJs[i][0].Substring(0, 4) == "wind") { LnW.Add(_G.OBJs[i][0]); _G.OBJs[i][63] = ColorUtility.ToHtmlStringRGBA(_afterColor); } if (_G.OBJs[i][0].Substring(0, 4) == "pati") { LnW.Add(_G.OBJs[i][0]); _G.OBJs[i][63] = ColorUtility.ToHtmlStringRGBA(_afterColor); } if (_G.OBJs[i][0].Substring(0, 4) == "door") { LnW.Add(_G.OBJs[i][0]); _G.OBJs[i][63] = ColorUtility.ToHtmlStringRGBA(_afterColor); } } } } for (i = 0; i < LnW.Count; i++) { Paint(GameObject.Find(LnW[i]).transform.Find("mt").gameObject, isSaving, isUndoing); Paint(GameObject.Find(LnW[i]).transform.Find("ml").gameObject, isSaving, isUndoing); Paint(GameObject.Find(LnW[i]).transform.Find("mr").gameObject, isSaving, isUndoing); Paint(GameObject.Find(LnW[i]).transform.Find("mb").gameObject, isSaving, isUndoing); Paint(GameObject.Find(LnW[i]).transform.Find("ct").gameObject, isSaving, isUndoing); Paint(GameObject.Find(LnW[i]).transform.Find("cl").gameObject, isSaving, isUndoing); Paint(GameObject.Find(LnW[i]).transform.Find("cr").gameObject, isSaving, isUndoing); Paint(GameObject.Find(LnW[i]).transform.Find("cb").gameObject, isSaving, isUndoing); } List LnD = new List(); for (i = 0; i < _G.OBJnum; i++) { if (_G.OBJs[i] != null) { string key = _G.OBJs[i][0]; if (_G.OBJs[i][0].Substring(0, 4) == "door") { if (isSaving) { _colorChanges.Add(key + 63.ToString(), _G.OBJs[i][63]); } if (isUndoing) { LnD.Add(_G.OBJs[i][0]); _G.OBJs[i][63] = (string)_colorChanges[key + 63.ToString()]; } else { LnD.Add(_G.OBJs[i][0]); _G.OBJs[i][63] = UnityEngine.ColorUtility.ToHtmlStringRGBA(_afterColor); } } } } for (i = 0; i < LnD.Count; i++) { Paint(GameObject.Find(LnD[i]).transform.Find("ft").gameObject, isSaving, isUndoing); Paint(GameObject.Find(LnD[i]).transform.Find("fl").gameObject, isSaving, isUndoing); Paint(GameObject.Find(LnD[i]).transform.Find("fr").gameObject, isSaving, isUndoing); Paint(GameObject.Find(LnD[i]).transform.Find("it").gameObject, isSaving, isUndoing); Paint(GameObject.Find(LnD[i]).transform.Find("il").gameObject, isSaving, isUndoing); Paint(GameObject.Find(LnD[i]).transform.Find("ir").gameObject, isSaving, isUndoing); } } if (_selected == "DOOR") { GameObject[] doors; doors = GameObject.FindGameObjectsWithTag("doorframe"); foreach (GameObject obj in doors) { int nO = Get.GetObjectIndex(obj.transform.parent.parent.name); string key = obj.name + nO.ToString(); if (isSaving) { _colorChanges.Add(key + "_c1", obj.transform.GetComponent().material.GetColor("_c1")); _colorChanges.Add(key + 62.ToString(), _G.OBJs[nO][62]); } if (isUndoing) { obj.transform.GetComponent().material.SetColor("_c1",(Color)_colorChanges[key + "_c1"]); _G.OBJs[nO][62] = (string)_colorChanges[key + 62.ToString()]; } else { obj.transform.GetComponent().material.SetColor("_c1",_afterColor); _G.OBJs[nO][62] = ColorUtility.ToHtmlStringRGBA(_afterColor); } } } if (_selected == "WIND") { GameObject[] windows = GameObject.FindGameObjectsWithTag("frame"); foreach (GameObject obj in windows) { int nO = Get.GetObjectIndex(obj.transform.parent.parent.name); string key = obj.name + nO.ToString(); if (isSaving) { _colorChanges.Add(key + "_c1", obj.transform.GetComponent().material.GetColor("_c1")); _colorChanges.Add(key + 62.ToString(), _G.OBJs[nO][62]); } if (isUndoing) { obj.transform.GetComponent().material.SetColor("_c1",(Color)_colorChanges[key + "_c1"]); _G.OBJs[nO][62] = (string)_colorChanges[key + 62.ToString()]; } else { obj.transform.GetComponent().material.SetColor("_c1",_afterColor); _G.OBJs[nO][62] = ColorUtility.ToHtmlStringRGBA(_afterColor); } } } if (_selected[..2] == "bl")//bloc { GameObject B = GameObject.Find(_selected); int nO = Get.GetObjectIndex(B.name); Debug.Log("SEL===" +B.name); Debug.Log("41===" +_G.OBJs[nO][41]); if (UIT.ExistInLibrary( Library.CabTexture,_G.OBJs[nO][41].Split("?")[0] )){ string Col=ColorUtility.ToHtmlStringRGBA(_afterColor); _G.OBJs[nO][41] = "null,1,1,"+Col+","+Col+",0,0,S,"+Col+",1,1,0.05,0.5,0"; DOIT.REDOOBJECT(nO); } else{ for (i = 0; i < B.transform.childCount; i++) { GameObject obj = B.transform.GetChild(i).gameObject; if(obj.name.IndexOf("Cyl")!=-1)obj = B.transform.GetChild(i).transform.GetChild(0).gameObject; string key = obj.name + nO.ToString() + i.ToString(); if (!obj.TryGetComponent(out var meshRenderer)) { continue; } Material MAT = meshRenderer.material; //if(obj.name=="Cylinder") MAT = obj.transform.Find("Cylinder").GetComponent().material; string code=(string)_colorChanges[key + "codetexture"]; if (isSaving && !string.IsNullOrWhiteSpace(code) ) { _colorChanges.Add(key + "codetexture", TextureCall.getcodeTextureFromMat(MAT)); //_colorChanges.Add(key + "_c1", obj.GetComponent().material.color); //_colorChanges.Add(key + "mainTexture", obj.GetComponent().material.mainTexture); _colorChanges.Add(key + 41.ToString(), _G.OBJs[nO][41]); } if (isUndoing && !string.IsNullOrWhiteSpace(code) ) { CREATE.ResetMaterialFromCode(MAT,(String)_colorChanges[key + "codetexture"],"Variable"); //obj.GetComponent().material.color = (Color)_colorChanges[key + "_c1"]; //obj.GetComponent().material.mainTexture = (Texture)_colorChanges[key + "mainTexture"]; _G.OBJs[nO][41] = (string)_colorChanges[key + 41.ToString()]; } else { MAT.SetTexture("_MainTex",null); MAT.SetColor("_c1",_afterColor); MAT.SetColor("_c2",_afterColor); MAT.SetColor("_c3",_afterColor); MAT.SetFloat("_smoothness",0.25f); MAT.SetFloat("_normal",0f); MAT.SetFloat("_Relief",0.1f); //obj.GetComponent().material.color = _afterColor; //obj.GetComponent().material.mainTexture = null; string[] col = _G.OBJs[nO][41].Split(","[0]); col[3] = ColorUtility.ToHtmlStringRGBA(_afterColor); col[4] = ColorUtility.ToHtmlStringRGBA(_afterColor); col[8] = ColorUtility.ToHtmlStringRGBA(_afterColor); //col[4] = "M"; _G.OBJs[nO][41] = col[0] + "," + col[1] + "," + col[2] + "," + col[3] + "," + col[4]+ "," + col[5]+ "," + col[6]+ "," + col[7]+ "," + col[8]+ "," + col[9]+",1,0.05,0.25,0"; } } } } if (_selected.Substring(0, 2) == "ho")//hood { GameObject B = GameObject.Find(_selected).gameObject; int nO = Get.GetObjectIndex(B.name); string key = B.name + nO.ToString(); if (isSaving) { _colorChanges.Add(key + 61.ToString(), _G.OBJs[nO][61]); _colorChanges.Add(key + 63.ToString(), _G.OBJs[nO][63]); } if (isUndoing) { _G.OBJs[nO][61] = (string)_colorChanges[key + 61.ToString()]; _G.OBJs[nO][63] = (string)_colorChanges[key + 63.ToString()]; } else { string col = ColorUtility.ToHtmlStringRGBA(_afterColor); _G.OBJs[nO][61] = DOIT.ChangeOnTextureCode(_G.OBJs[nO][61], 2, col); _G.OBJs[nO][63] = ColorUtility.ToHtmlStringRGBA(_afterColor); } for (i = 0; i < B.transform.childCount; i++) { if (B.transform.GetChild(i).name != "SpotLight") { GameObject obj = B.transform.GetChild(i).gameObject; key += B.name + i.ToString(); if (isSaving) { _colorChanges.Add(key + "_c1", obj.GetComponent().material.GetColor("_c1")); } if (isUndoing) { obj.GetComponent().material.SetColor("_c1",(Color)_colorChanges[key + "_c1"]); } else { obj.GetComponent().material.SetColor("_c1",_afterColor); } } } } if (_selected[..2] == "co")//Slaiding Door coulissante?? { GameObject B = GameObject.Find(_selected); for (i = 0; i < B.transform.childCount; i++) { GameObject obj = B.transform.GetChild(i).gameObject; string key = obj.name + i.ToString(); if (isSaving) { _colorChanges.Add(key + "_c1", obj.GetComponent().material.GetColor("_c1")); _colorChanges.Add(key + "mainTexture", obj.GetComponent().material.mainTexture); } if (isUndoing) { obj.GetComponent().material.SetColor("_c1",(Color)_colorChanges[key + "_c1"]); obj.GetComponent().material.mainTexture = (Texture)_colorChanges[key + "mainTexture"]; } else { obj.GetComponent().material.SetColor("_c1",_afterColor); obj.GetComponent().material.mainTexture = null; } } } if (_selected.Substring(0, 2) == "do")//door { GameObject B = GameObject.Find(_selected).gameObject; GameObject Fr = B.transform.Find("frame").gameObject; for (i = 0; i < Fr.transform.childCount; i++) { int nO = Get.GetObjectIndex(Fr.transform.parent.name); GameObject obj = Fr.transform.GetChild(i).gameObject; string key = B.name + Fr.name + obj.name + nO.ToString() + i.ToString(); if (isSaving) { _colorChanges.Add(key + ("_c1"), obj.GetComponent().material.GetColor("_c1")); _colorChanges.Add(key + 63.ToString(), _G.OBJs[nO][63]); } if (isUndoing) { obj.GetComponent().material.SetColor("_c1",(Color)_colorChanges[key + "_c1"]); _G.OBJs[nO][63] = (string)_colorChanges[key + 63.ToString()]; } else { Fr.transform.GetChild(i).GetComponent().material.SetColor("_c1", _afterColor); _G.OBJs[nO][63] = ColorUtility.ToHtmlStringRGBA(_afterColor); } } } if (_selected.Substring(0, 2) == "pa")//patio { GameObject B = GameObject.Find(_selected).gameObject; GameObject Fr = B.transform.Find("frame").gameObject; for (i = 0; i < Fr.transform.childCount; i++) { int nO = Get.GetObjectIndex(Fr.transform.parent.name); GameObject obj = Fr.transform.GetChild(i).gameObject; string key = obj.name + nO.ToString(); if (isSaving) { _colorChanges.Add(key + "_c1", obj.GetComponent().material.GetColor("_c1")); _colorChanges.Add(key + 63.ToString(), _G.OBJs[nO][63]); } if (isUndoing) { obj.GetComponent().material.SetColor("_c1",(Color)_colorChanges[key + "_c1"]); _G.OBJs[nO][63] = (string)_colorChanges[key + 63.ToString()]; } else { obj.GetComponent().material.SetColor("_c1",_afterColor); _G.OBJs[nO][63] = ColorUtility.ToHtmlStringRGBA(_afterColor); } } } if (_selected.Substring(0, 2) == "wi")//window { GameObject B = GameObject.Find(_selected).transform.Find("frame").gameObject; for (i = 0; i < B.transform.childCount; i++) { int nO = Get.GetObjectIndex(B.transform.parent.name); GameObject obj = B.transform.GetChild(i).gameObject; string key = obj.name + nO.ToString(); if (isSaving) { _colorChanges.Add(key + "_c1", obj.GetComponent().material.GetColor("_c1")); _colorChanges.Add(key +63.ToString(), _G.OBJs[nO][63]); } if (isUndoing) { obj.GetComponent().material.SetColor("_c1",(Color)_colorChanges[key + "_c1"]); _G.OBJs[nO][63] = (string)_colorChanges[key + 63.ToString()]; } else { obj.GetComponent().material.SetColor("_c1", _afterColor); _G.OBJs[nO][63] = ColorUtility.ToHtmlStringRGBA(_afterColor); } } } if (_selected == "MOLD")//Molding { //print("ready to paint"); GameObject[] moldings = GameObject.FindGameObjectsWithTag("moulding"); int j = 0; foreach (GameObject obj in moldings) { string key = obj.name + j++.ToString(); if (isSaving) { _colorChanges.Add(key + "_c1", obj.GetComponent().material.GetColor("_c1")); _colorChanges.Add(key + "WMK", _G.WMK[2]); _colorChanges.Add(key + "WMO", _G.WMO[2]); _colorChanges.Add(key + "WMKs", _G.WMKs); _colorChanges.Add(key + "WMOs", _G.WMOs); } if (isUndoing) { obj.GetComponent().material.SetColor("_c1",(Color)_colorChanges[key + "_c1"] ); _G.WMK[2] = (string)_colorChanges[key + "WMK"]; _G.WMO[2] = (string)_colorChanges[key + "WMO"]; _G.WMKs = (string)_colorChanges[key + "WMKs"]; _G.WMOs = (string)_colorChanges[key + "WMOs"]; } else { obj.transform.GetComponent().material.SetColor("_c1",_afterColor); _G.WMK[2] = ColorUtility.ToHtmlStringRGBA(_afterColor); _G.WMO[2] = ColorUtility.ToHtmlStringRGBA(_afterColor); _G.WMKs = _G.WMK[0] + "," + _G.WMK[1] + "," + _G.WMK[2]; _G.WMOs = _G.WMO[0] + "," + _G.WMO[1] + "," + _G.WMO[2]; } } GameObject[] frames = GameObject.FindGameObjectsWithTag("framemolding"); foreach (GameObject obj in frames) { int nO = Get.GetObjectIndex(obj.transform.parent.parent.name); string key = obj.name + j++.ToString(); if (isSaving) { _colorChanges.Add(key + "_c1", obj.GetComponent().material.GetColor("_c1")); _colorChanges.Add(key + 63.ToString(), _G.OBJs[nO][63]); } if (isUndoing) { obj.GetComponent().material.SetColor("_c1",(Color)_colorChanges[key + "_c1"] ); _G.OBJs[nO][63] = (string)_colorChanges[key + 63.ToString()]; } else { obj.transform.GetComponent().material.SetColor("_c1",_afterColor); _G.OBJs[nO][63] = ColorUtility.ToHtmlStringRGBA(_afterColor); } } } if (_selected == "AWAL") { for (i = 0; i < _G.NW; i++) { GameObject obj = Get.o1("w" + (i + 1)); if (obj) { string key = "w" + (i + 1).ToString(); if (isSaving) { Material MAT=obj.transform.Find("s1").GetComponent().material; _colorChanges.Add(key + "codetexture", TextureCall.getcodeTextureFromMat(MAT)); _G. WallsMaterial[i] = MAT; } if (isUndoing) { for (int u = 0; u < obj.transform.childCount; u++){ Material mat = obj.transform.Find("s"+(u+1).ToString()).GetComponent().material; CREATE.ResetMaterialFromCode(mat,(string)_colorChanges[key + "codetexture"],"Variable"); } } else { for (int s = 0; s < obj.transform.childCount;s++){ Material mat = obj.transform.Find("s"+(s+1).ToString()).GetComponent().material; mat.SetTexture("_Texture",null); mat.SetColor("_c1",_afterColor); mat.SetColor("_c2",_afterColor); mat.SetColor("_c3",_afterColor); mat.SetFloat("_Smoothness",0.1f); mat.SetFloat("_Metallic",0.05f); mat.SetFloat("_normal",0f); mat.SetFloat("_Relief",0.0f); } } } } } for (i = 0; i < _G.NW; i++) { if (_selected == "w" + (i + 1).ToString()) { GameObject obj = Get.o1("w" + (i + 1).ToString()); string key = _selected + i.ToString(); if (isSaving) { Material MAT=obj.transform.Find("s1").GetComponent().material; _colorChanges.Add(key + "codetexture", TextureCall.getcodeTextureFromMat(MAT)); _G. WallsMaterial[i] = MAT; } if (isUndoing) { for (int u = 0; u < obj.transform.childCount; u++){ Material mat = obj.transform.Find("s"+(u+1).ToString()).GetComponent().material; CREATE.ResetMaterialFromCode(mat,(string)_colorChanges[key + "codetexture"],"Variable"); } } else { for (int s = 0; s < obj.transform.childCount;s++){ Material mat = obj.transform.Find("s"+(s+1).ToString()).GetComponent().material; mat.SetTexture("_Texture",null); mat.SetColor("_c1",_afterColor); mat.SetColor("_c2",_afterColor); mat.SetColor("_c3",_afterColor); mat.SetFloat("_Smoothness",0.1f); mat.SetFloat("_Metallic",0.05f); mat.SetFloat("_normal",0f); mat.SetFloat("_Relief",0.1f); } } } } if (_selected == "ceil") { GameObject Ceilings = GameObject.Find("ROOM/ceil"); foreach(Transform s in Ceilings.transform){ string key = s.name + i.ToString(); Material MAT=s.GetComponent().material; if (isSaving) { _colorChanges.Add(key + "codetexture", TextureCall.getcodeTextureFromMat(MAT)); _G.ceilm = MAT; } if (isUndoing) { CREATE.ResetMaterialFromCode(MAT,(String)_colorChanges[key + "codetexture"],"Variable"); } else { MAT.SetTexture("_Texture",null); MAT.SetColor("_c1",_afterColor); MAT.SetColor("_c2",_afterColor); MAT.SetColor("_c3",_afterColor); MAT.SetFloat("_Smoothness",0.1f); MAT.SetFloat("_Metallic",0.05f); MAT.SetFloat("_normal",0f); MAT.SetFloat("_Relief",0.0f); } } } ConstructOpen.RedrawOpen(); } } private void Paint(GameObject gameObject, bool isSaving, bool isUndoing) { if (gameObject == null) return; if (gameObject) { string key = gameObject.name; if (isSaving) { _colorChanges.Add(key + "material", gameObject.GetComponent().material); } if (isUndoing) { gameObject.GetComponent().material = (Material)_colorChanges[key + "material"]; } else { gameObject.GetComponent().material = _afterWallMat; } } } public string GetAction() { return "Color Change"; } }