// stack 되는 경우는 조건 public void moveEnd(GameObject _newPos) { if (putWhere != null && putWhere.GetComponent <ArrangeablePosState>() != null) { //기존 좌표에서 삭제 putWhere.GetComponent <ArrangeablePosState>().setState(0); } //스택 자리가 아닐 경우에 좌표 갱신 //즉, 바닥에 놓여지는 경우에만 해당 좌표에 정보를 갱신 if (_newPos != null && !_newPos.CompareTag("Arrangeable_Stack")) { //새 위치에 정보 갱신 newPos = _newPos.GetComponent <ArrangeablePosState>(); newPos.setState(1); //기존 위치 갱신 putWhere = newPos.gameObject; } }
/// @brief 인테리어 정보 저장 함수 /// @return 없음 /// @param 없음 public void save() { #region 1. 바닥 정보 저장 using (var writer = new CsvFileWriter("Assets/Resources/SaveFiles/floor.csv")) //using (var writer = new CsvFileWriter(sourceDir)) //var writer = new CsvFileWriter(sourceDir); { // columns.Add("str"); // 수차례 // writer.WriteRow(columns); // columns.Clear(); // 이상 반복으로 행 채워넣기 List <string> columns = new List <string>(); // 1층. 2~3층 추후 추가 예정 FieldManager FM = FC.Floor[0].GetComponent <FieldManager>(); // 각 타일을 순회하며 놓여진 오브젝트의 정보를 저장 for (int i = 0; i < FM.field.GetLength(0); i++) { for (int j = 0; j < FM.field.GetLength(1); j++) { ArrangeablePosState APS = FM.field[i, j].GetComponent <ArrangeablePosState>(); string str = null; // 타일 정보 가져오기 str += APS.getTile() + "/"; // 오브젝트의 시리얼번호 가져오기 GameObject obj = FM.field[i, j].GetComponent <ArrangeablePosState>().putHere; if (obj == null) { // 오브젝트 없이 타일 정보만 저장 } else { // Serial numb string serial = obj.GetComponent <SerialNumbManager>().getSerialNumb(); str += serial + "/"; // Rotate state string rotate = obj.GetComponent <FurnitureManager>().getRotateState().ToString(); str += rotate; } columns.Add(str); } writer.WriteRow(columns); columns.Clear(); } } #endregion #region 2. 벽 정보 저장 using (var writer = new CsvFileWriter("Assets/Resources/SaveFiles/wall.csv")) //writer = new CsvFileWriter("Assets/Resources/SaveFiles/wall.csv"); { // columns.Add("str"); // 수차례 // writer.WriteRow(columns); // columns.Clear(); // 이상 반복으로 행 채워넣기 List <string> columns = new List <string>(); // 1층. 2~3층 추후 추가 예정 FieldManager FM = FC.Floor[0].GetComponent <FieldManager>(); #region leftWall save process // 각 타일을 순회하며 놓여진 오브젝트의 정보를 저장 for (int i = 0; i < FM.leftWall.GetLength(1); i++) { for (int j = 0; j < FM.leftWall.GetLength(0); j++) { // active가 false 인 벽에 대해서는 저장하는 과정을 생략한다. if (!FM.leftWall[j, i].activeSelf) { continue; } ArrangeablePosState APS = FM.leftWall[j, i].GetComponent <ArrangeablePosState>(); string str = null; // 타일 정보 가져오기 str += APS.getTile() + "/"; // 오브젝트의 시리얼번호 가져오기 GameObject obj = FM.leftWall[j, i].GetComponent <ArrangeablePosState>().putHere; if (obj == null) { // 오브젝트 없이 타일 정보만 저장 } else { // Serial numb string serial = obj.GetComponent <SerialNumbManager>().getSerialNumb(); str += serial; } columns.Add(str); Debug.Log("wall add"); } writer.WriteRow(columns); columns.Clear(); } #endregion #region rightWall save process // 각 타일을 순회하며 놓여진 오브젝트의 정보를 저장 for (int i = 0; i < FM.rightWall.GetLength(0); i++) { for (int j = 0; j < FM.rightWall.GetLength(1); j++) { // active가 false 인 벽에 대해서는 저장하는 과정을 생략한다. if (!FM.rightWall[i, j].activeSelf) { continue; } ArrangeablePosState APS = FM.rightWall[i, j].GetComponent <ArrangeablePosState>(); string str = null; // 타일 정보 가져오기 str += APS.getTile() + "/"; // 오브젝트의 시리얼번호 가져오기 GameObject obj = FM.rightWall[i, j].GetComponent <ArrangeablePosState>().putHere; if (obj == null) { // 오브젝트 없이 타일 정보만 저장 } else { // Serial numb string serial = obj.GetComponent <SerialNumbManager>().getSerialNumb(); str += serial; } columns.Add(str); } writer.WriteRow(columns); columns.Clear(); } #endregion // right wall에 대해서 좌우반전 시행 // target.GetComponent<Transform>().localScale = new Vector3(-1, 1, 1); } #endregion Debug.Log("save done"); }