/// @brief /// load()에서 호출되는 함수 \n /// 각 칸에 오브젝트를 배치하는 과정을 총괄한다. /// @return 없음 /// @param serialNumb 배치할 오브젝트의 시리얼 번호 /// @param rotateState 배치할 오브젝트의 회전 정보 /// @param pos 오브젝트가 배치될 위치 /// @param floor ArrangeablePosState를 지니고 있는 바닥 오브젝트 /// @param isXFlip 배치 오브젝트의 좌우 반전이 필요한 경우(벽에 설치하는 등) true를 전달 void dispose(string serialNumb, string rotateState, Vector3 pos, GameObject floor, bool isXFlip = false) { GameObject obj; // param의 serialNumb에서 특정 테마 추출 ItemManager theme = DS.itemManager[int.Parse(serialNumb.Substring(0, 2))]; // 해당 테마의 모든 오브젝트를 순회하며 오브젝트 추출 for (int i = 0; i < theme.Items.Length; i++) { if (theme.Items[i].serialNumb.ToString() == serialNumb) { // SerialNumb 대조 후 해당 오브젝트 생성 obj = MUC.ObjectInstantiater((int)theme.Items[i].itemType, theme.Items[i].itemImage[0], serialNumb, true); // 좌표 설정 obj.transform.position = pos; // 회전 설정 // 자동 회전 설정되는 경우는 추후 재설정(의자, 벽 등) for (int count = 0; count < int.Parse(rotateState); count++) { FA.ObjectControl_ROTATE_REMOTE(obj); } // 해당 층의 자식으로 설정 obj.transform.parent = FA.getCurFloor().transform; // 바닥의 state를 set // obj의 putWhere를 set obj.GetComponent <FurnitureManager>().moveEnd(floor); // 바닥의 putHere를 set floor.GetComponent <ArrangeablePosState>().putHere = obj; // 책상, 의자 등 특수한 배치 실행 switch (theme.Items[i].itemType) { case ItemController._itemType.Chair: FA.chairCheck(obj, floor); break; case ItemController._itemType.Table: FA.tableCheck(obj, floor); break; default: break; } // 좌우 반전이 필요한 경우(벽걸이형 오브젝트 등) if (isXFlip) { obj.GetComponent <Transform>().localScale = new Vector3(-1, 1, 1); } } } }
// 한 행에 8칸씩 // 넘어가면 다음 행으로 밀려남 private void Awake() { dataStorage = GameObject.Find("GameManager").GetComponent <DataStorage>(); menuUIController = GameObject.Find("MenuCanvas").GetComponent <MenuUIController>(); btns = GetComponentsInChildren <Button>(); foreach (var b in btns) { b.gameObject.SetActive(false); } // 테마 수 //for(int i = 0; i < dataStorage.itemManager.Length; i++) for (int i = 0, themeIdx = 0, j; themeIdx < dataStorage.itemManager.Length; i++, themeIdx++) { // ruins 테마의 아이템 순회 for (j = 0; j < dataStorage.itemManager[themeIdx].Items.Length; j++) { //각 버튼 이미지 세팅 //btns[i * 15 + j].GetComponent<Image>().sprite = dataStorage.itemManager[i].Themes[j].itemImage[0]; btns[i * 8 + j].transform.Find("Image").GetComponent <Image>().sprite = dataStorage.itemManager[themeIdx].Items[j].itemImage[0]; btns[i * 8 + j].gameObject.SetActive(true); // 각 버튼 Listener 세팅 // base prefab instantiate // 해당 instantiate 된 object에 dataStorage의 정보 덮어씌우기 // 화면 내로 오브젝트 이동 int itemType = -1; switch (dataStorage.itemManager[themeIdx].Items[j].itemType) { case ItemController._itemType.Table: itemType = (int)ItemController._itemType.Table; // Table break; case ItemController._itemType.Chair: itemType = (int)ItemController._itemType.Chair; break; case ItemController._itemType.WallAcc: itemType = (int)ItemController._itemType.WallAcc; break; case ItemController._itemType.FloorAcc: itemType = (int)ItemController._itemType.FloorAcc; break; case ItemController._itemType.WallTile: itemType = (int)ItemController._itemType.WallTile; break; case ItemController._itemType.FloorTile: itemType = (int)ItemController._itemType.FloorTile; break; case ItemController._itemType.Partition: itemType = (int)ItemController._itemType.Partition; break; case ItemController._itemType.Counter: itemType = (int)ItemController._itemType.Counter; break; } //if (dataStorage.itemManager[i].Themes[j].itemType == ItemController._itemType.Table) // idx = 0; // Table //else if (dataStorage.itemManager[i].Themes[j].itemType == ItemController._itemType.Chair) // idx = 1; // Chair Sprite sprite = dataStorage.itemManager[themeIdx].Items[j].itemImage[0]; string serial = dataStorage.itemManager[themeIdx].Items[j].serialNumb; btns[i * 8 + j].onClick.AddListener(delegate() { menuUIController.ObjectInstantiater(itemType, sprite, serial); }); } // 한 테마의 아이템이 두 줄 이상 차지했다면 // 그 다음 테마의 아이템은 새로운 줄에서부터 배치 if (j > 8) { i++; } } }