/** * @brief 유닛을 생성함 (서버에서 클라로 정보를 보낼때 호출됨) * @param posX 생성할 X 위치 * @param posY 생성할 Y 위치 * @param index 유닛 코드 * @param uniqueNumber 생성자 * @param byX 생성을 지시한 X 위치 * @param byY 생성을 지시한 Y 위치 */ public void CreateUnit(int posX, int posY, int index, int uniqueNumber, int byX, int byY) { GameObject Child = Instantiate(unitobj[index - 300], GameMng.I._hextile.GetCell(posX, posY).transform) as GameObject; Child.transform.parent = transform.parent; GameMng.I._hextile.GetCell(posX, posY)._unitObj = Child.GetComponent <Unit>(); GameMng.I._hextile.GetCell(posX, posY)._code = GameMng.I._hextile.GetCell(posX, posY)._unitObj._code; GameMng.I._hextile.GetCell(posX, posY)._unitObj._uniqueNumber = uniqueNumber; Debug.Log(GameMng.I._hextile.GetCell(byX, byY)._builtObj); GameMng.I._hextile.GetCell(byX, byY)._builtObj._bActAccess = false; GameMng.I._hextile.GetCell(posX, posY)._unitObj.SaveX = byX; GameMng.I._hextile.GetCell(posX, posY)._unitObj.SaveY = byY; GameMng.I.addActMessage(string.Format("{0}님이 일꾼을 생성하고 있습니다.", GameMng.I.getUserName(uniqueNumber)), posX, posY); GameMng.I.addLogMessage(GameMng.I.getUserName(uniqueNumber), "일꾼을 생성하고 있습니다."); if (GameMng.I._hextile.GetCell(byX, byY)._builtObj._code == (int)BUILT.MILLITARY_BASE) { MillitaryBase SaveData = GameMng.I._hextile.GetCell(byX, byY)._builtObj.GetComponent <MillitaryBase>(); SaveData.CreatingUnitobj = GameMng.I._hextile.GetCell(posX, posY)._unitObj.gameObject; SaveData.GetComponent <MillitaryBase>().CreatingUnitX = posX; SaveData.GetComponent <MillitaryBase>().CreatingUnitY = posY; } }
/** * @brief 유닛을 생성함 (클라 전용) * @param cost 사용된 코스트 * @param index 유닛 코드 */ public void CreateUnit(int cost, int index) { GameMng.I.mouseRaycast(true); //캐릭터 정보와 타일 정보를 알아와야해서 false에서 true로 변경 if (GameMng.I.targetTile._builtObj == null && GameMng.I.targetTile._code < (int)TILE.CAN_MOVE && GameMng.I.targetTile._unitObj == null && Vector2.Distance(GameMng.I.selectedTile.transform.localPosition, GameMng.I.targetTile.transform.localPosition) <= 1.5f) { if (GameMng.I._gold >= cost) { GameMng.I.minGold(cost); if (index != (int)UNIT.FOREST_WORKER && index != (int)UNIT.SEA_WORKER && index != (int)UNIT.DESERT_WORKER) // 일꾼 유닛들을 제외하고 유닛 생성중일때 해당 건물 행동 불가 상태 적용 { GameMng.I.selectedTile._builtObj._bActAccess = false; } GameMng.I.selectedTile._builtObj._anim.SetTrigger("isMaking"); GameObject Child = Instantiate(unitobj[index - 300], GameMng.I.targetTile.transform) as GameObject; // enum 값 - 300 Child.transform.parent = transform.parent; GameMng.I.targetTile._unitObj = Child.GetComponent <Unit>(); GameMng.I.targetTile._unitObj.SaveX = GameMng.I.selectedTile.PosX; // 생성하는 유닛에게 있는 위치 저장 변수에 해당 건물 위치값을 저장해줌 GameMng.I.targetTile._unitObj.SaveY = GameMng.I.selectedTile.PosZ; GameMng.I.targetTile._unitObj.PosX = GameMng.I.targetTile.PosX; // 생성하는 유닛에게 있는 본인위치 저장 변수에 유닛이 생성된 타일 위치값을 저장해줌 GameMng.I.targetTile._unitObj.PosZ = GameMng.I.targetTile.PosZ; GameMng.I.targetTile._code = index; GameMng.I.targetTile._unitObj._uniqueNumber = NetworkMng.getInstance.uniqueNumber; if (GameMng.I.selectedTile._code == (int)BUILT.MILLITARY_BASE) // 군사기지에서 유닛 생성 시 { MillitaryBase SaveUnitData = GameMng.I.selectedTile._builtObj.GetComponent <MillitaryBase>(); SaveUnitData.CreatingUnitobj = GameMng.I.targetTile._unitObj.gameObject; SaveUnitData.CreatingUnitX = GameMng.I.targetTile.PosX; SaveUnitData.CreatingUnitY = GameMng.I.targetTile.PosZ; } act = ACTIVITY.NONE; NetworkMng.getInstance.SendMsg(string.Format("CREATE_UNIT:{0}:{1}:{2}:{3}:{4}:{5}", GameMng.I.targetTile.PosX, GameMng.I.targetTile.PosZ, index, NetworkMng.getInstance.uniqueNumber, GameMng.I.selectedTile.PosX, GameMng.I.selectedTile.PosZ)); GameMng.I.addLogMessage(NetworkMng.getInstance.nickName, "유닛을 생성하고 있습니다"); GameMng.I.cleanActList(); GameMng.I._range.rangeTileReset(); GameMng.I.cleanSelected(); NetworkMng.getInstance.SendMsg("TURN"); } } else // 범위가 아닌 다른 곳을 누름 { act = ACTIVITY.NONE; GameMng.I.selectedTile = GameMng.I.targetTile; GameMng.I.targetTile = null; GameMng.I._range.rangeTileReset(); } }
/** * @brief 유닛을 생성함 (서버에서 클라로 정보를 보낼때 호출됨) * @param posX 생성할 X 위치 * @param posY 생성할 Y 위치 * @param index 유닛 코드 * @param uniqueNumber 생성자 * @param byX 생성을 지시한 X 위치 * @param byY 생성을 지시한 Y 위치 */ public void CreateUnit(int posX, int posY, int index, int uniqueNumber, int byX, int byY) { GameObject Child = Instantiate(unitobj[index - 300], GameMng.I._hextile.GetCell(posX, posY).transform) as GameObject; Child.transform.parent = transform.parent; GameMng.I._hextile.GetCell(posX, posY)._unitObj = Child.GetComponent <Unit>(); GameMng.I._hextile.GetCell(posX, posY)._code = GameMng.I._hextile.GetCell(posX, posY)._unitObj._code; GameMng.I._hextile.GetCell(posX, posY)._unitObj._uniqueNumber = uniqueNumber; GameMng.I._hextile.GetCell(byX, byY)._builtObj._bActAccess = false; GameMng.I._hextile.GetCell(posX, posY)._unitObj.SaveX = byX; GameMng.I._hextile.GetCell(posX, posY)._unitObj.SaveY = byY; if (GameMng.I._hextile.GetCell(byX, byY)._builtObj._code == (int)BUILT.MILLITARY_BASE) { MillitaryBase SaveData = GameMng.I._hextile.GetCell(byX, byY)._builtObj.GetComponent <MillitaryBase>(); SaveData.CreatingUnitobj = GameMng.I._hextile.GetCell(posX, posY)._unitObj.gameObject; SaveData.GetComponent <MillitaryBase>().CreatingUnitX = posX; SaveData.GetComponent <MillitaryBase>().CreatingUnitY = posY; } }
/** * @brief 어떤 행동인지 체크 * @param activity 행동 코드 * @param actButton 행동 버튼 * @param actName 행동 이름 * @param actDesc 행동 설명 * @param costText 행동 비용 */ public void checkActivity(ACTIVITY activity, UnityEngine.UI.Button actButton, UnityEngine.UI.Text actName, UnityEngine.UI.Text actDesc, UnityEngine.UI.Image Frame, UnityEngine.UI.Text costText, UnityEngine.UI.Image costImg) { switch (activity) { case ACTIVITY.MOVE: actName.text = "이동"; actDesc.text = "한 턴 소요"; costText.enabled = false; costImg.enabled = false; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _range.AttackrangeTileReset(); _UnitGM.Move(); }); canUseActivity(actButton, Frame, 0); break; case ACTIVITY.BUILD_MINE: actName.text = "광산"; actDesc.text = "한 턴 소요"; costText.enabled = true; costImg.enabled = true; costText.text = MINE_COST.ToString(); actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _UnitGM.buildMine(); }); canUseActivity(actButton, Frame, MINE_COST); break; case ACTIVITY.BUILD_FARM: actName.text = "농장"; actDesc.text = "한 턴 소요"; costText.enabled = true; costImg.enabled = true; costText.text = FARM_COST.ToString(); actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _UnitGM.buildFarm(); }); canUseActivity(actButton, Frame, FARM_COST); break; case ACTIVITY.BUILD_ATTACK_BUILDING: actName.text = "터렛"; actDesc.text = "두 턴 소요"; costText.enabled = true; costImg.enabled = true; costText.text = TURRET_COST.ToString(); actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _UnitGM.buildAttackBuilding(); }); canUseActivity(actButton, Frame, TURRET_COST); break; case ACTIVITY.BUILD_MILLITARY_BASE: actName.text = "군사 기지"; actDesc.text = "두 턴 소요"; costText.enabled = true; costImg.enabled = true; costText.text = MILITARYBASE_COST.ToString(); actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _UnitGM.buildMillitaryBaseBuilding(); }); canUseActivity(actButton, Frame, MILITARYBASE_COST); break; case ACTIVITY.BUILD_SHIELD_BUILDING: actName.text = "방어 건물"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _UnitGM.buildShieldBuilding(); }); break; case ACTIVITY.BUILD_UPGRADE_BUILDING: actName.text = "강화 건물"; actDesc.text = "세 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _UnitGM.buildUpgradeBuilding(); }); break; case ACTIVITY.WORKER_UNIT_CREATE: actName.text = "일꾼 생성"; costText.enabled = true; costImg.enabled = true; costText.text = WORKER_COST.ToString(); actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; Castle.CreateUnitBtn(); }); canUseActivity(actButton, Frame, WORKER_COST); break; case ACTIVITY.DESTROY_BUILT: actName.text = "건물 파괴"; costText.enabled = false; costImg.enabled = false; actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; _BuiltGM.DestroyBuilt(); }); canUseActivity(actButton, Frame, 0); break; case ACTIVITY.ATTACK: actName.text = "공격"; actDesc.text = "두 턴 소요"; costText.enabled = false; costImg.enabled = false; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _range.rangeTileReset(); _UnitGM.unitAttacking(); }); canUseActivity(actButton, Frame, 0); break; case ACTIVITY.SOLDIER_0_UNIT_CREATE: actName.text = "전사1 생성"; actDesc.text = "두 턴 소요"; costText.enabled = true; costImg.enabled = true; costText.text = SOLDIER_0_COST.ToString(); actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; MillitaryBase.CreateAttackFirstUnitBtn(); }); canUseActivity(actButton, Frame, SOLDIER_0_COST); break; case ACTIVITY.SOLDIER_1_UNIT_CREATE: actName.text = "전사2 생성"; actDesc.text = "두 턴 소요"; costText.enabled = true; costImg.enabled = true; costText.text = SOLDIER_1_COST.ToString(); actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; MillitaryBase.CreateAttackSecondUnitBtn(); }); canUseActivity(actButton, Frame, SOLDIER_1_COST); break; case ACTIVITY.SOLDIER_2_UNIT_CREATE: actName.text = "전사3 생성"; actDesc.text = "두 턴 소요"; costText.enabled = true; costImg.enabled = true; costText.text = SOLDIER_2_COST.ToString(); actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; MillitaryBase.CreateAttackThirdUnitBtn(); }); canUseActivity(actButton, Frame, SOLDIER_2_COST); break; case ACTIVITY.WITCH_0_UNIT_CREATE: actName.text = "마법사1 생성"; actDesc.text = "두 턴 소요"; costText.enabled = true; costImg.enabled = true; costText.text = WITCH_0_COST.ToString(); actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; MillitaryBase.CreateAttackFourthUnitBtn(); }); canUseActivity(actButton, Frame, WITCH_0_COST); break; case ACTIVITY.WITCH_1_UNIT_CREATE: actName.text = "마법사2 생성"; actDesc.text = "두 턴 소요"; costText.enabled = true; costImg.enabled = true; costText.text = WITCH_1_COST.ToString(); actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; MillitaryBase.CreateAttackFifthUnitBtn(); }); canUseActivity(actButton, Frame, WITCH_1_COST); break; default: break; } }
/** * @brief 어떤 행동인지 체크 * @param activity 행동 코드 * @param actButton 행동 버튼 * @param actName 행동 이름 * @param actDesc 행동 설명 */ public void checkActivity(ACTIVITY activity, UnityEngine.UI.Button actButton, UnityEngine.UI.Text actName, UnityEngine.UI.Text actDesc, UnityEngine.UI.Image Frame) { switch (activity) { case ACTIVITY.MOVE: actName.text = "이동"; actDesc.text = "한 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _range.AttackrangeTileReset(); _UnitGM.Move(); }); canUseActivity(actButton, Frame, 0); break; case ACTIVITY.BUILD_MINE: actName.text = "광산"; actDesc.text = "한 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _UnitGM.buildMine(); }); canUseActivity(actButton, Frame, Mine.cost); break; case ACTIVITY.BUILD_FARM: actName.text = "농장"; actDesc.text = "한 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _UnitGM.buildFarm(); }); canUseActivity(actButton, Frame, Farm.cost); break; case ACTIVITY.BUILD_ATTACK_BUILDING: actName.text = "터렛"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _UnitGM.buildAttackBuilding(); }); canUseActivity(actButton, Frame, Turret.cost); break; case ACTIVITY.BUILD_MILLITARY_BASE: actName.text = "군사 기지"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _UnitGM.buildMillitaryBaseBuilding(); }); canUseActivity(actButton, Frame, MillitaryBase.cost); break; case ACTIVITY.BUILD_SHIELD_BUILDING: actName.text = "방어 건물"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _UnitGM.buildShieldBuilding(); }); break; case ACTIVITY.BUILD_UPGRADE_BUILDING: actName.text = "강화 건물"; actDesc.text = "세 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _UnitGM.buildUpgradeBuilding(); }); break; case ACTIVITY.WORKER_UNIT_CREATE: actName.text = "일꾼 생성"; actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; Castle.CreateUnitBtn(); }); canUseActivity(actButton, Frame, Forest_Worker.cost); break; case ACTIVITY.DESTROY_BUILT: actName.text = "건물 파괴"; actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; _BuiltGM.DestroyBuilt(); }); canUseActivity(actButton, Frame, 0); break; case ACTIVITY.ATTACK: actName.text = "공격"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _range.rangeTileReset(); _UnitGM.unitAttacking(); }); canUseActivity(actButton, Frame, 0); break; case ACTIVITY.SOLDIER_0_UNIT_CREATE: actName.text = "전사1 생성"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; MillitaryBase.CreateAttackFirstUnitBtn(); }); canUseActivity(actButton, Frame, Forest_Soldier_0.cost); break; case ACTIVITY.SOLDIER_1_UNIT_CREATE: actName.text = "전사2 생성"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; MillitaryBase.CreateAttackSecondUnitBtn(); }); canUseActivity(actButton, Frame, Forest_Soldier_1.cost); break; case ACTIVITY.SOLDIER_2_UNIT_CREATE: actName.text = "전사3 생성"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; MillitaryBase.CreateAttackThirdUnitBtn(); }); canUseActivity(actButton, Frame, Forest_Soldier_2.cost); break; case ACTIVITY.WITCH_0_UNIT_CREATE: actName.text = "마법사1 생성"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; MillitaryBase.CreateAttackFourthUnitBtn(); }); canUseActivity(actButton, Frame, Forest_Witch_0.cost); break; case ACTIVITY.WITCH_1_UNIT_CREATE: actName.text = "마법사2 생성"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; MillitaryBase.CreateAttackFifthUnitBtn(); }); canUseActivity(actButton, Frame, Forest_Witch_1.cost); break; default: break; } }
/** * @brief 어떤 행동인지 체크 * @param activity 행동 코드 * @param actButton 행동 버튼 * @param actName 행동 이름 * @param actDesc 행동 설명 */ public void checkActivity(ACTIVITY activity, UnityEngine.UI.Button actButton, UnityEngine.UI.Text actName, UnityEngine.UI.Text actDesc) { switch (activity) { case ACTIVITY.MOVE: actName.text = "이동"; actDesc.text = "한 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _range.AttackrangeTileReset(); Unit.Move(); }); break; case ACTIVITY.BUILD_MINE: actName.text = "광산"; actDesc.text = "한 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; Unit.buildMine(); }); break; case ACTIVITY.BUILD_FARM: actName.text = "농장"; actDesc.text = "한 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; Unit.buildFarm(); }); break; case ACTIVITY.BUILD_ATTACK_BUILDING: actName.text = "터렛"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; Unit.buildAttackBuilding(); }); break; case ACTIVITY.BUILD_MILLITARY_BASE: actName.text = "군사 기지"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; Unit.buildMillitaryBaseBuilding(); }); break; case ACTIVITY.BUILD_SHIELD_BUILDING: actName.text = "방어 건물"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; Unit.buildShieldBuilding(); }); break; case ACTIVITY.BUILD_UPGRADE_BUILDING: actName.text = "강화 건물"; actDesc.text = "세 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; Unit.buildUpgradeBuilding(); }); break; case ACTIVITY.WORKER_UNIT_CREATE: actName.text = "일꾼 생성"; actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; Castle.CreateUnitBtn(); }); break; case ACTIVITY.DESTROY_BUILT: actName.text = "건물 파괴"; actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; _BuiltGM.DestroyBuilt(); }); break; case ACTIVITY.ATTACK: // 임시입니다!!!!!!!!!!!!!!!!!!!!!!!!!!!!! actName.text = "공격"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _UnitGM.act = activity; _range.rangeTileReset(); Unit.unitAttacking(); }); break; case ACTIVITY.ATTACK_UNIT_CREATE: actName.text = "병력 생성"; actDesc.text = "두 턴 소요"; actButton.onClick.AddListener(delegate { _BuiltGM.act = activity; MillitaryBase.CreateAttackUnitBtn(); }); break; default: break; } }