// 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;
        }
    }
Пример #2
0
    /// @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");
    }