public bool _bActAccess = true; // 오브젝트들의 행동 제어 /** * @brief 플레이어 구분 코드에 맞는 색을 반환 * @param int uniqueNumber 플레이어 구분 코드 */ public Color GetUserColor(int uniqueNumber) { Color color = Color.white; ColorUtility.TryParseHtmlString(CustomColor.TransColor(NetworkMng.getInstance.myColor), out color); for (int i = 0; i < NetworkMng.getInstance.v_user.Count; i++) { if (NetworkMng.getInstance.v_user[i].uniqueNumber.Equals(uniqueNumber)) { ColorUtility.TryParseHtmlString(CustomColor.TransColor((COLOR)NetworkMng.getInstance.v_user[i].color), out color); break; } } return(color); }
/** * @brief 같이 플레이 중인 유저 목록들 보여주기 * @param uniqueNumber 현재 턴의 유저 */ public void UserListRefresh(int uniqueNumber) { Color color; for (int i = 0; i < NetworkMng.getInstance.v_user.Count; i++) { ColorUtility.TryParseHtmlString(CustomColor.TransColor((COLOR)NetworkMng.getInstance.v_user[i].color), out color); playerListImg[i].gameObject.SetActive(true); playerListImg[i].color = color; playerListTribe[i].sprite = tribeSprites[(int)NetworkMng.getInstance.v_user[i].tribe]; playerListName[i].text = NetworkMng.getInstance.v_user[i].nickName; if (NetworkMng.getInstance.v_user[i].uniqueNumber.Equals(uniqueNumber)) { playerListImg[i].transform.localScale = new Vector3(1.3f, 1.3f, 1); } else { playerListImg[i].transform.localScale = new Vector3(1, 1, 1); } } }
public void roomRefresh() { for (int i = 1; i < players.Length; i++) { players[i].SetActive(false); } int countingMember = 1; // 색 순서만큼 for (int i = 0; i < 9; i++) { colorBT[i].interactable = true; } Color color; for (int i = 0; i < NetworkMng.getInstance.v_user.Count; i++) { ColorUtility.TryParseHtmlString(CustomColor.TransColor((COLOR)NetworkMng.getInstance.v_user[i].color), out color); colorBT[NetworkMng.getInstance.v_user[i].color].interactable = false; // 다른사람꺼 if (!NetworkMng.getInstance.v_user[i].uniqueNumber.Equals(NetworkMng.getInstance.uniqueNumber)) { players[countingMember].SetActive(true); playersName[countingMember].text = NetworkMng.getInstance.v_user[i].nickName; tribeImages[countingMember].sprite = tribeSprites[NetworkMng.getInstance.v_user[i].tribe]; colorImages[countingMember].color = color; countingMember++; } // 내꺼 else { tribeImages[0].sprite = tribeSprites[NetworkMng.getInstance.v_user[i].tribe]; colorImages[0].color = color; } } nowMem = (NetworkMng.getInstance.v_user.Count) + ""; }
/** * @brief 턴이 변경 되었을때 호출 * @param uniqueNumber 변경될 유저의 고유 번호 */ public void turnManage(int uniqueNumber) { Color color; countDel(); refreshMainUI(); UserListRefresh(uniqueNumber); /// 유지비가 - 가 되었다면 디버프 행동 추가 // 행동 불능으로 만든다거나 // 죽게 만든다던가 // 누구 차례인지 뿌려주기 if (NetworkMng.getInstance.uniqueNumber == uniqueNumber) { this.myTurn = true; this.turnDescText.text = "내 차례"; ColorUtility.TryParseHtmlString(CustomColor.TransColor(NetworkMng.getInstance.myColor), out color); turnDescImage.color = color; enemySelectedTile.gameObject.transform.position = new Vector3(-100, -100, 0); if (selectedTile != null) { NetworkMng.getInstance.SendMsg(string.Format("SELECTING:{0}:{1}", selectedTile.PosX, selectedTile.PosZ)); } return; } cleanActList(); this.myTurn = false; for (int i = 0; i < NetworkMng.getInstance.v_user.Count; i++) { if (NetworkMng.getInstance.v_user[i].uniqueNumber.Equals(uniqueNumber)) { this.turnDescText.text = NetworkMng.getInstance.v_user[i].nickName + " 차례"; ColorUtility.TryParseHtmlString(CustomColor.TransColor((COLOR)NetworkMng.getInstance.v_user[i].color), out color); turnDescImage.color = color; break; } } }
public void init() { _gold = 100; _nowMem = 0; _maxMem = 0; setMainInterface(false, false, false); if (NetworkMng.getInstance.uniqueNumber == NetworkMng.getInstance.firstPlayerUniqueNumber) { myTurn = true; } // 턴제 함수에 빈 함수 넣어줌 (안 넣어주면 초기 실행시 에러나기 때문) AddDelegate(SampleTurnFunc); // 같이 플레이 중인 유저 목록들 보여주기 UserListRefresh(NetworkMng.getInstance.firstPlayerUniqueNumber); // 누구 턴인지 색 변경 Color color; for (int i = 0; i < NetworkMng.getInstance.v_user.Count; i++) { if (NetworkMng.getInstance.v_user[i].uniqueNumber.Equals(NetworkMng.getInstance.firstPlayerUniqueNumber)) { ColorUtility.TryParseHtmlString(CustomColor.TransColor((COLOR)NetworkMng.getInstance.v_user[i].color), out color); turnDescImage.color = color; break; } } // 내 깃발 정보를 표시해줌 myFlagNickname.text = NetworkMng.getInstance.nickName; ColorUtility.TryParseHtmlString(CustomColor.TransColor((COLOR)NetworkMng.getInstance.myColor), out color); myFlagImage.color = color; myFlagTribe.sprite = tribeSprites[(int)NetworkMng.getInstance.myTribe]; }
/** * @brief 오브젝트를 클릭했을때 * @param tile 클릭한 타일 오브젝트 */ public void clickTile(Tile tile) { cleanActList(); mainBarObj.SetActive(true); objImage.transform.localScale = Vector3.one; // 유닛이 없다면 정적인 타일이란 뜻 if (tile._unitObj == null && tile._builtObj == null) { maskImage.color = Color.white; objectNameTxt.text = tile._name; objectDescTxt.text = tile._desc; objImage.sprite = getObjSprite(tile._code); setMainInterface(false, false); objImage.SetNativeSize(); NetworkMng.getInstance._soundGM.tileClick(); return; } DynamicObject obj; if (tile._unitObj) { obj = tile._unitObj; objImage.sprite = getObjSprite(tile._unitObj._code); setMainInterface(); objImage.SetNativeSize(); NetworkMng.getInstance._soundGM.unitClick(obj._code); damageText.text = tile._unitObj._damage.ToString(); maintCostText.text = tile._unitObj.maintenanceCost.ToString(); } else { logoImage[2].sprite = foodImage.sprite; obj = tile._builtObj; //타일에 있는 건물의 코드의 따른 스프라이트 변경, 로고 text 켜고 끄기 objImage.sprite = getObjSprite(tile._builtObj._code); NetworkMng.getInstance._soundGM.builtClick(); if (obj._code == (int)BUILT.ATTACK_BUILDING) { damageText.text = Turret.attack.ToString(); maintCostText.text = Turret.maintenanceCost.ToString(); logoImage[2].sprite = costImg[0].sprite; } if (selectedTile._code == (int)BUILT.CASTLE) { objImage.transform.localScale = Vector3.one; objImage.SetNativeSize(); } else { objImage.transform.localScale = new Vector3(2f, 2f, 1f); objImage.SetNativeSize(); } } objectNameTxt.text = obj._name; objectDescTxt.text = obj._desc; hpText.text = (tile._unitObj ? tile._unitObj._hp : tile._builtObj._hp) + "" + " / " + (tile._unitObj ? tile._unitObj._max_hp : tile._builtObj._max_hp); //damageText.text = tile._unitObj._damage + ""; Color color; if (tile._builtObj != null || tile._unitObj != null) { for (int i = 0; i < NetworkMng.getInstance.v_user.Count; i++) { if (obj._uniqueNumber.Equals(NetworkMng.getInstance.v_user[i].uniqueNumber)) { ColorUtility.TryParseHtmlString(CustomColor.TransColor((COLOR)NetworkMng.getInstance.v_user[i].color), out color); maskImage.color = color; } } } if (obj._uniqueNumber.Equals(NetworkMng.getInstance.uniqueNumber) && myTurn) { // 행동을 가진 오브젝트는 actList 를 뿌려줘야 함 // 1. _unitObj 로 부터 해당 유닛이 가진 행동의 량을 가져옴 for (int i = 0; i < obj._activity.Count; i++) { // 2. 그만큼 actList 를 active 함 actList[i].gameObject.SetActive(true); UnityEngine.UI.Text[] childsTxt = actList[i].GetComponentsInChildren <UnityEngine.UI.Text>(); try { // 3. actList 의 내용들을 변경해 줘야함 checkActivity(obj._activity[i], actList[i], childsTxt[0], childsTxt[1], frameImg[i], childsTxt[2], costImg[i]); } catch { Debug.LogError("childTxt 의 인덱스 값이 옳지 않음"); } } } }
/** * @brief 메인 UI * @param onActList ActList 활성화를 수락할지 */ public void refreshMainUI(bool onActList = true) { if (selectedTile == null) { return; } // 누르고 있던 오브젝트가 있다면 턴이 지나고 바꼈을 가능성이 있으니 새로고침 해주기 DynamicObject obj = null; if (selectedTile._unitObj != null) { obj = selectedTile._unitObj; setMainInterface(); } else if (selectedTile._builtObj != null) { obj = selectedTile._builtObj; if (obj._code.Equals(BUILT.ATTACK_BUILDING)) { setMainInterface(); } else { setMainInterface(true, false); } } // 내 턴이 아닐떄 건물이나 유닛이 어떤 행동을 했는지 새로고침 if (obj != null) { objImage.sprite = getObjSprite(obj._code); for (int i = 0; i < NetworkMng.getInstance.v_user.Count; i++) { if (NetworkMng.getInstance.v_user[i].uniqueNumber.Equals(obj._uniqueNumber)) { Color color; ColorUtility.TryParseHtmlString(CustomColor.TransColor((COLOR)NetworkMng.getInstance.v_user[i].color), out color); maskImage.color = color; break; } } objectNameTxt.text = obj._name; objectDescTxt.text = obj._desc; hpText.text = obj._hp + " / " + obj._max_hp; if (onActList && myTurn) { for (int i = 0; i < obj._activity.Count; i++) { actList[i].gameObject.SetActive(true); UnityEngine.UI.Text[] childsTxt = actList[i].GetComponentsInChildren <UnityEngine.UI.Text>(); try { checkActivity(obj._activity[i], actList[i], childsTxt[0], childsTxt[1], frameImg[i], childsTxt[2], costImg[i]); } catch { Debug.LogError("childTxt 의 인덱스 값이 옳지 않음"); } } } } // 내 턴이 아닐때 타일에 어떤 반응이 있는지 새로고침 (빈타일 일때) else { // 이동했거나 사망했음. 빈타일임 (내가 한 행동이였다면 바꿀 필요가 없음) objImage.sprite = getObjSprite(selectedTile._code); maskImage.color = Color.white; objectNameTxt.text = selectedTile._name; objectDescTxt.text = selectedTile._desc; setMainInterface(false, false); } }
// 버그 없으면 지울것 //public void imActing() //{ // this.myTurnCount++; // if (this.myMaxTurnCount == this.myTurnCount) // { // this.myTurnCount = 0; // // 턴 교체 // // 원래라면 인원수에 따라 바뀌지만 테스트 용으로 2인플레이라 생각하고 turn 바꿔주는중 // this.myTurn = !this.myTurn; // } // this.turnCountText.text = this.myTurnCount + " / " + this.myMaxTurnCount; // this.turnDescText.text = this.myTurn ? "내 차례" : "상대 차례"; //} /** * @brief 턴이 변경 되었을때 호출 * @param uniqueNumber 변경될 유저의 고유 번호 */ public void turnManage(int uniqueNumber) { Color color; countDel(); UserListRefresh(uniqueNumber); // 유지비가 - 가 되었다면 디버프 행동 추가 if (_food < 0) { countHungry++; //debuffImg.enabled = true; debuffImg.color = Color.white; debufFoodIcon.SetActive(true); } else { countHungry = 0; //debuffImg.enabled = false; debuffImg.color = Color.clear; debufFoodIcon.SetActive(false); } if (RandomCount == 0) { // 1~10턴 중에 랜덤 RandomCount = Random.Range(1, 51); } else { // 나중에 더 좋은 방법이 있으면 변경 if (TurnCount % RandomCount == 0) { // 턴을 카운트해서 특정 턴마다 생성 _BuiltGM.CreateAirDrop(Random.Range(0, _hextile.cells.Length)); RandomCount = 0; } } TurnCount++; /// 유지비가 - 가 되었다면 디버프 행동 추가 // 행동 불능으로 만든다거나 // 죽게 만든다던가 // 누구 차례인지 뿌려주기 if (NetworkMng.getInstance.uniqueNumber == uniqueNumber) { this.myTurn = true; this.turnDescText.text = "내 차례"; refreshMainUI(); ColorUtility.TryParseHtmlString(CustomColor.TransColor(NetworkMng.getInstance.myColor), out color); turnDescImage.color = color; enemySelectedTile.gameObject.transform.position = new Vector3(-100, -100, 0); if (selectedTile != null) { NetworkMng.getInstance.SendMsg(string.Format("SELECTING:{0}:{1}", selectedTile.PosX, selectedTile.PosZ)); } myTurnEffect.SetActive(true); turnSkipBT.SetActive(true); NetworkMng.getInstance._soundGM.myTurnEffect(); return; } cleanActList(); this.myTurn = false; refreshMainUI(false); for (int i = 0; i < NetworkMng.getInstance.v_user.Count; i++) { if (NetworkMng.getInstance.v_user[i].uniqueNumber.Equals(uniqueNumber)) { this.turnDescText.text = NetworkMng.getInstance.v_user[i].nickName + " 차례"; ColorUtility.TryParseHtmlString(CustomColor.TransColor((COLOR)NetworkMng.getInstance.v_user[i].color), out color); turnDescImage.color = color; myTurnEffect.SetActive(false); turnSkipBT.SetActive(false); break; } } }
public void init() { _gold = 100; _food = 100; _nowMem = 0; _maxMem = 0; goldText.text = _gold.ToString(); foodText.text = _food.ToString(); setMainInterface(false, false, false); if (NetworkMng.getInstance.uniqueNumber == NetworkMng.getInstance.firstPlayerUniqueNumber) { myTurn = true; turnSkipBT.SetActive(true); } // 턴제 함수에 빈 함수 넣어줌 (안 넣어주면 초기 실행시 에러나기 때문) AddDelegate(SampleTurnFunc); // 같이 플레이 중인 유저 목록들 보여주기 UserListRefresh(NetworkMng.getInstance.firstPlayerUniqueNumber); audioSlider.value = NetworkMng.getInstance._soundGM.audioVolume; effectSlider.value = NetworkMng.getInstance._soundGM.effectVolume; debuffImg.enabled = false; // 누구 턴인지 색 변경 Color color; for (int i = 0; i < NetworkMng.getInstance.v_user.Count; i++) { if (NetworkMng.getInstance.v_user[i].uniqueNumber.Equals(NetworkMng.getInstance.firstPlayerUniqueNumber)) { ColorUtility.TryParseHtmlString(CustomColor.TransColor((COLOR)NetworkMng.getInstance.v_user[i].color), out color); turnDescImage.color = color; break; } } // 내 깃발 정보를 표시해줌 myFlagNickname.text = NetworkMng.getInstance.nickName; ColorUtility.TryParseHtmlString(CustomColor.TransColor((COLOR)NetworkMng.getInstance.myColor), out color); myFlagImage.color = color; myFlagTribe.sprite = tribeSprites[(int)NetworkMng.getInstance.myTribe]; // 게임 시작 로그 남기기 addLogMessage("시스템", "게임이 시작되었습니다."); // 내 종족 오브젝트의 코스트를 설정 switch ((int)NetworkMng.getInstance.myTribe) { case 0: // 숲 종족 WORKER_COST = 4; SOLDIER_0_COST = 4; SOLDIER_1_COST = 5; SOLDIER_2_COST = 3; WITCH_0_COST = 6; WITCH_1_COST = 7; TURRET_COST = 3; FARM_COST = 2; MINE_COST = 2; MILITARYBASE_COST = 4; break; case 1: // 물 종족 WORKER_COST = 4; SOLDIER_0_COST = 5; SOLDIER_1_COST = 4; SOLDIER_2_COST = 6; WITCH_0_COST = 6; WITCH_1_COST = 8; TURRET_COST = 3; FARM_COST = 3; MINE_COST = 2; MILITARYBASE_COST = 5; break; case 2: // 사막 종족 WORKER_COST = 4; SOLDIER_0_COST = 5; SOLDIER_1_COST = 5; SOLDIER_2_COST = 4; WITCH_0_COST = 5; WITCH_1_COST = 6; TURRET_COST = 4; FARM_COST = 2; MINE_COST = 2; MILITARYBASE_COST = 5; break; } }
/** * @brief 오브젝트를 클릭했을때 * @param tile 클릭한 타일 오브젝트 */ public void clickTile(Tile tile) { cleanActList(); // 유닛이 없다면 정적인 타일이란 뜻 if (tile._unitObj == null && tile._builtObj == null) { cleanActList(); maskImage.color = Color.white; objectNameTxt.text = tile._name; objectDescTxt.text = tile._desc; hpText.enabled = false; damageText.enabled = false; logoImage[0].enabled = false; //Hp로고 이미지 꺼둠 logoImage[1].enabled = false; //데미지 로고 이미지 꺼둠 NetworkMng.getInstance._soundGM.tileClick(); objImage.enabled = true; objectNameTxt.enabled = true; objectDescTxt.enabled = true; switch (tile._code) //클릭한 타일의 코드에 따른 스프라이트값 조정 { case (int)TILE.GRASS: objImage.sprite = objSprite[4]; break; case (int)TILE.SAND: objImage.sprite = objSprite[5]; break; case (int)TILE.DIRT: objImage.sprite = objSprite[6]; break; case (int)TILE.MARS: objImage.sprite = objSprite[7]; break; case (int)TILE.STONE: objImage.sprite = objSprite[8]; break; case (int)TILE.SEA_01: objImage.sprite = objSprite[9]; break; case (int)TILE.SEA_02: objImage.sprite = objSprite[9]; break; case (int)TILE.SEA_03: objImage.sprite = objSprite[9]; break; } return; } DynamicObject obj; if (tile._unitObj) { obj = tile._unitObj; switch (tile._unitObj._code) { case (int)UNIT.FOREST_WORKER: objImage.sprite = objSprite[10]; break; case (int)UNIT.FORSET_SOILDER: objImage.sprite = objSprite[11]; break; } setMainInterface(true); } else { obj = tile._builtObj; switch (tile._builtObj._code) //타일에 있는 건물의 코드의 따른 스프라이트 변경, 로고 text 켜고 끄기 { case (int)BUILT.MINE: objImage.sprite = objSprite[0]; hpText.enabled = true; damageText.enabled = false; logoImage[0].enabled = true; logoImage[1].enabled = false; objImage.enabled = true; objectNameTxt.enabled = true; objectDescTxt.enabled = true; break; case (int)BUILT.FARM: objImage.sprite = objSprite[1]; hpText.enabled = true; damageText.enabled = false; logoImage[0].enabled = true; logoImage[1].enabled = false; objImage.enabled = true; objectNameTxt.enabled = true; objectDescTxt.enabled = true; break; case (int)BUILT.ATTACK_BUILDING: objImage.sprite = objSprite[2]; hpText.enabled = true; damageText.enabled = true; logoImage[0].enabled = true; logoImage[1].enabled = true; objImage.enabled = true; objectNameTxt.enabled = true; objectDescTxt.enabled = true; break; case (int)BUILT.CASTLE: objImage.sprite = objSprite[3]; hpText.enabled = true; damageText.enabled = false; logoImage[0].enabled = true; logoImage[1].enabled = false; objImage.enabled = true; objectNameTxt.enabled = true; objectDescTxt.enabled = true; break; case (int)BUILT.AIRDROP: objImage.sprite = objSprite[13]; hpText.enabled = false; damageText.enabled = false; logoImage[0].enabled = false; logoImage[1].enabled = false; objImage.enabled = true; objectNameTxt.enabled = true; objectDescTxt.enabled = true; break; case (int)BUILT.MILLITARY_BASE: objImage.sprite = objSprite[14]; hpText.enabled = true; damageText.enabled = false; logoImage[0].enabled = true; logoImage[1].enabled = false; objImage.enabled = true; objectNameTxt.enabled = true; objectDescTxt.enabled = true; break; } } objectNameTxt.text = obj._name; objectDescTxt.text = obj._desc; hpText.text = (tile._unitObj ? tile._unitObj._hp : tile._builtObj._hp) + "" + " / " + (tile._unitObj ? tile._unitObj._hp : tile._builtObj._hp); //나중에 최대체력, 현재체력 구분할 것 NetworkMng.getInstance._soundGM.unitClick(UNIT.FOREST_WORKER); //damageText.text = tile._unitObj._damage + ""; Color color; if (tile._builtObj != null || tile._unitObj != null) { for (int i = 0; i < NetworkMng.getInstance.v_user.Count; i++) { if (obj._uniqueNumber.Equals(NetworkMng.getInstance.v_user[i].uniqueNumber)) { Debug.Log("in"); ColorUtility.TryParseHtmlString(CustomColor.TransColor((COLOR)NetworkMng.getInstance.v_user[i].color), out color); maskImage.color = color; } } } if (obj._uniqueNumber.Equals(NetworkMng.getInstance.uniqueNumber) && myTurn) { // 행동을 가진 오브젝트는 actList 를 뿌려줘야 함 // 1. _unitObj 로 부터 해당 유닛이 가진 행동의 량을 가져옴 for (int i = 0; i < obj._activity.Count; i++) { // 2. 그만큼 actList 를 active 함 actList[i].gameObject.SetActive(true); UnityEngine.UI.Text[] childsTxt = actList[i].GetComponentsInChildren <UnityEngine.UI.Text>(); try { // 3. actList 의 내용들을 변경해 줘야함 checkActivity(obj._activity[i], actList[i], childsTxt[0], childsTxt[1]); } catch { Debug.LogError("childTxt 의 인덱스 값이 옳지 않음"); } } } }