#define PLACEHOLDER_CANCEL_MODIF using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Addto : MonoBehaviour { public static bool WereChangesSaved { get; private set; } public static bool IsSelectedObjectBeingModified { get; private set; } static bool _wasSelectedObjectModified; public Toggle _AddToCabinet; public Toggle _GroupTo; #if PLACEHOLDER_CANCEL_MODIF // TODO : remove function to replace it by having it trigger on the panel closing static string[] _localBeforeDataTemp; static string[] _localAfterDataTemp; static int _tempSelectedObjNum; #endif private void OnDisable() { if (IsSelectedObjectBeingModified && _wasSelectedObjectModified) { IsSelectedObjectBeingModified = false; _wasSelectedObjectModified = false; #if !PLACEHOLDER_CANCEL_MODIF UpdateSelectedObjectModifications(false); // TODO : can't use GameObject.Find() in OnDisable() #else _localBeforeDataTemp = CommandHandler.Instance.BeforeDataTemp; _tempSelectedObjNum = Get.GetObjectIndex(SceneModeManager.SelectedName); _localAfterDataTemp = CommandHandler.CopyObjectData(_G.OBJs[_tempSelectedObjNum]); StaticCoroutine.Start(CancelDelayedObjectModifications()); #endif } } public void ObjectP() { _wasSelectedObjectModified = false; string P = Get.ToggleOnInChild("SIDESbtn"); Get.o2("PNL/ADDTO", "Square").SetActive(true); // square with 9 positions settings Get.o2("PNL/ADDTO", "DEPLACEMENT").SetActive(true); Get.o2("PNL/ADDTO", "A_Square").SetActive(true); // text that explains what the square is about Get.o2("PNL/ADDTO", "SETTING").SetActive(true); // enable rotation button on menu string squareToEnable = "P5"; if (!string.IsNullOrEmpty(P)) { if (P == "R") { squareToEnable = "P9"; } else if (P == "L") { squareToEnable = "P7"; } Toggle toggleSquare = Get.o2("PNL/ADDTO/Square", squareToEnable).GetComponent(); toggleSquare.isOn = true; // set middle square enable by default Reposition.SetOnTarget(P, squareToEnable, 0); } SetAddToCabinetBtn(); } public void Objectp() { _wasSelectedObjectModified = true; string P = Get.ToggleOnInChild("SIDESbtn"); string p = Get.ToggleOnInChild("Square"); Reposition.SetOnTarget(P, p, 0); } public static void Box(int indexOfTarget) { print("Reach Box ADDTo"); CommandHandler.Instance.BeforeDataTemp = null; //SETUP SceneModeManager.Instance.SetSceneMode(SceneModes.SnapOn); IsSelectedObjectBeingModified = true; WereChangesSaved = false; GameObject Side = GameObject.Find("SIDESbtn"); //string tar = _G.OBJs[indexOfTarget][0][..4];//target category string attachedToOfTarget = _G.OBJs[indexOfTarget][22];//attach to for (int i = 0; i < Side.transform.childCount; i++) { Side.transform.GetChild(i).gameObject.SetActive(false); } Get.o1("PNL/ADDTO/InsideImage").SetActive(false); if(_G.OBJs[indexOfTarget][2] == "Appliance" || _G.OBJs[indexOfTarget][2] == "Bloc" || attachedToOfTarget == "floor") { Side.transform.Find("F").gameObject.SetActive(true); } Side.transform.Find("L").gameObject.SetActive(true); Side.transform.Find("R").gameObject.SetActive(true); int nOs = Get.GetObjectIndex(SceneModeManager.SelectedName); string objectName = _G.OBJs[nOs][1]; if (objectName.Length >= 4 && SceneModeManager.SelectedName.Length >= 4) { if (objectName[..4]== "PLAT" || SceneModeManager.SelectedName[..4] == "smal" || SceneModeManager.SelectedName[..4] == "basi") { Side.transform.Find("L").gameObject.SetActive(false); Side.transform.Find("R").gameObject.SetActive(false); Side.transform.Find("B").gameObject.SetActive(false); } } DOIT.AllTogchildfalse(GameObject.Find("ADDTO").transform.Find("Square").gameObject); GameObject.Find("ADDTO").transform.Find("Square").gameObject.SetActive(false); GameObject.Find("ADDTO").transform.Find("DEPLACEMENT").gameObject.SetActive(false); DOIT.AllTogchildfalse(GameObject.Find("SIDESbtn")); if (DOIT.checkSpace("T") == true) { Side.transform.Find("T").gameObject.SetActive(true); } if (DOIT.checkSpace("U") == true) { Side.transform.Find("U").gameObject.SetActive(true); } bool hasOpen =false; List ListAbreviation=new() { "vase", "smal", "pict","micr","stov","tabl","orna"}; if(_G.OBJs[indexOfTarget][2] == "Cabinet" && ListAbreviation.Contains(SceneModeManager.SelectedName[..4] ) ) { if(_G.OBJs[indexOfTarget][25].Contains("o") || _G.OBJs[indexOfTarget][25].Contains("c") ){hasOpen = true; } GameObject insideButton = Get.o2("PNL/ADDTO/SIDESbtn", "I"); insideButton.SetActive(hasOpen); GameObject insideImage = Get.o2("PNL/ADDTO", "InsideImage"); insideImage.SetActive(hasOpen); } Get.o2("PNL/ADDTO", "InsideBayList").SetActive(false); if(_G.OBJs[indexOfTarget][22]=="floor"){ Side.transform.Find("B").gameObject.SetActive(true); } } public void closePnl() { IsSelectedObjectBeingModified = false; if (_wasSelectedObjectModified) { _wasSelectedObjectModified = false; UpdateSelectedObjectModifications(true); } DOIT.CloseALLPNL(); } public void Rotate() { _wasSelectedObjectModified = true; float R = -_G.AngleStep; if (name == "ROTATEinv") R = -R; Vector3 pos = GameObject.Find(SceneModeManager.SelectedName).transform.eulerAngles; Vector3 tpos = GameObject.Find(_G.TARGET).transform.eulerAngles; if (pos.y < 0) pos.y = 0; string P = Get.ToggleOnInChild("ADDTO/SIDESbtn"); string p = Get.ToggleOnInChild("ADDTO/Square"); int nsO = Get.GetObjectIndex(SceneModeManager.SelectedName); float rsy = (pos.y - tpos.y) + R; Reposition.SetOnTarget(P, p, rsy); } public void GroupTo() { _wasSelectedObjectModified = true; if (_AddToCabinet.isOn && _AddToCabinet.gameObject.activeInHierarchy){ _wasSelectedObjectModified = false; SceneModeManager.SelectedName=_G.TARGET; Recover.AddCoverFromRightClick("RIGHT",true); } if (_GroupTo.isOn) { int nsO = Get.GetObjectIndex(SceneModeManager.SelectedName); int ntO = Get.GetObjectIndex(_G.TARGET); _G.OBJs[ntO][89] += "_" + _G.OBJs[nsO][0]; string[] OL = _G.OBJs[ntO][89].Split('_'); foreach (string Os in OL) { int Osint = Get.GetObjectIndex(Os); _G.OBJs[Osint][89] = _G.OBJs[ntO][89]; } } //HOLE.RefreshAllWalls(); PRICE.Calprice(); } public void Ungroup() { _wasSelectedObjectModified = true; int nsO = Get.GetObjectIndex(SceneModeManager.SelectedName); _G.OBJs[nsO][89] = _G.OBJs[nsO][89].Replace(SceneModeManager.SelectedName + "_", ""); string[] OL = _G.OBJs[nsO][89].Split('_'); print("_G.OBJs[nsO][89]===="+_G.OBJs[nsO][89]); foreach (string Os in OL) { int ngO = Get.GetObjectIndex(Os); if(ngO!=299 && DOIT.exist(ngO )){ _G.OBJs[ngO][89] = _G.OBJs[ngO][89].Replace("_" + SceneModeManager.SelectedName, ""); _G.OBJs[ngO][89] = _G.OBJs[ngO][89].Replace(SceneModeManager.SelectedName, ""); Get.o1(Os).GetComponent().material = _G.INV; } } nsO = Get.GetObjectIndex(SceneModeManager.SelectedName); _G.OBJs[nsO][89] = _G.OBJs[nsO][89].Replace("_", ""); _G.OBJs[nsO][89] = SceneModeManager.SelectedName; } public void PlaceOnBay(){ Reposition.SetOnTarget("IDrop", "P5", 0); } public void Deplacement(){ GameObject sel = SceneModeManager.Selected; Vector3 Angles=sel.transform.eulerAngles; GameObject tar = GameObject.Find(_G.TARGET); string Side = Get.ToggleOnInChild("SIDESbtn"); if(name=="Up"){sel.transform.position+=sel.transform.up; } if(name=="Down"){sel.transform.position-=sel.transform.up; } if(Side=="L" ){ if(name=="Left"){sel.transform.position+=tar.transform.forward; } if(name=="Right"){sel.transform.position-=tar.transform.forward; } } else if(Side=="R" ){ if(name=="Left"){sel.transform.position-=tar.transform.forward; } if(name=="Right"){sel.transform.position+=tar.transform.forward; } } else if(Side=="B" ){ if(name=="Left"){sel.transform.position+=tar.transform.right; } if(name=="Right"){sel.transform.position-=tar.transform.right; } } else if(Side=="F" || Side=="T"|| Side=="I" ){ if(name=="Left"){sel.transform.position-=tar.transform.right; } if(name=="Right"){sel.transform.position+=tar.transform.right; } } } public static void SetAddToCabinetBtn(){ GameObject AddToCabinet=Get.o2("ADDTO/SETTING","AddToCabinet"); if(SceneModeManager.SelectedName[..4] =="pane"){AddToCabinet.SetActive(true);} else{AddToCabinet.SetActive(false);} } void UpdateSelectedObjectModifications(bool shouldChangesBeSaved) { WereChangesSaved = shouldChangesBeSaved; bool isObjectToBeDestroyed = CommandHandler.Instance.BeforeDataTemp == null; if (isObjectToBeDestroyed) { IsSelectedObjectBeingModified = false; return; } int selectedObjNum = Get.GetObjectIndex(SceneModeManager.SelectedName); selectedObjNum = selectedObjNum == Get.MaxObjectCount ? Get.GetObjectIndex(_localBeforeDataTemp[0]) : selectedObjNum; string[] afterData = CommandHandler.CopyObjectData(_G.OBJs[selectedObjNum]); #if !PLACEHOLDER_CANCEL_MODIF // UniversalModifyCommand uniCommand = new UniversalModifyCommand("Universal", selectedObjNum, _G._beforeDataTemp, afterData); #else UniversalModifyCommand uniCommand; if (shouldChangesBeSaved) { uniCommand = new UniversalModifyCommand("Snap On", selectedObjNum, CommandHandler.Instance.BeforeDataTemp, afterData); } else { uniCommand = new UniversalModifyCommand("Snap On", selectedObjNum, _localBeforeDataTemp, _localAfterDataTemp); } #endif if (shouldChangesBeSaved) { CommandHandler.Instance.AddToHistory(uniCommand); } else { uniCommand.Undo(); } } #if PLACEHOLDER_CANCEL_MODIF IEnumerator CancelDelayedObjectModifications() { yield return new WaitForEndOfFrame(); // Wait so that GameObject.Find() functions aren't run during OnDisable() UpdateSelectedObjectModifications(false); _localBeforeDataTemp = null; _localAfterDataTemp = null; string objectName = _G.OBJs[_tempSelectedObjNum][0]; bool isObjectNull = true; float attempTimer = 5.0f; while (isObjectNull && attempTimer > 0f) { Transform obj = SceneModeManager.GetObjectInScene(objectName); if (obj != null) { DOIT.SaveObjectPositionInData(obj); isObjectNull = false; } else { attempTimer -= Time.deltaTime; } yield return null; } } #endif }