public override void useSkill(List <BattleChar> target) { base.useSkill(target); if (boss.getHP() < 0) { return; } if (BossBuffs.Count < 3) { for (int i = 0; i < 3; i++) { MidEnemyAct1Buff b = new MidEnemyAct1Buff(); b.user = set.user; b.setBuff(); b.turn = 3; set.user.buffStack.Add(b); BossBuffs.Add(b); } } else { foreach (MidEnemyAct1Buff b in BossBuffs) { b.setBuff(); } } }
public override void endTurn() { if (user.getHP() > 0 && boss.getHP() > 0) { boss.BM.curState = BattleManager.BattleState.ANIM; boss.stigma++; user.animator.SetBool(key, true); user.StartCoroutine(user.IsPassiveAnimEnd(key)); } }
public override int updateTurn() { if (((PriestPassive1)set.pas[0]).isInit) { addHP *= ((PriestPassive1)set.pas[0]).getBuff(); } if (((PriestPassive2)set.pas[1]).isInit) { addHP *= ((PriestPassive2)set.pas[1]).getBuff(); } if (((PriestPassive5)set.pas[4]).isInit) { addHP *= ((PriestPassive5)set.pas[4]).getBuff(bc); } bc.SetHP(bc.getHP() + bc.DC.getMaxHP() * (0.1f + lv * 0.02f) * addHP); return(turn); }
// Update is called once per frame void Update() { switch (curState) { case BattleState.INIT: //전투 시작전 준비 페이즈 //모든 캐릭터 스킬 초기화 foreach (BattleChar bc in myBC) { while (bc.DC.charSkillSet == null) { } bc.DC.charSkillSet.initSkillSet(); } foreach (BattleChar bc in enemyBC) { while (bc.DC.charSkillSet == null) { } bc.DC.charSkillSet.initSkillSet(); } curState++; break; case BattleState.OVER: foreach (BattleChar bc in myBC) { bc.DC.charSkillSet.resetSkillSet(); } print("Battle Over!"); //yes//전투 결과를 업데이트한다. 이동씬으로 복귀한다. break; case BattleState.READY: //전투 전 페이즈 //AP가 꽉찬 캐릭터 체크/ 전멸한 팀이 있는지 체크/ AP 업데이트 //아군 또는 적군 유닛이 전멸하였는가? if ((myBattleChars.Count <= 0 || enemys.Count <= 0)) { curState = BattleState.OVER; break; } //no//전투를 지속한다. //행동력이 꽉찬 캐릭터가 있는가? //yes//스킬사용 else if (readyPlayer.Count > 0) { curState++; } //no//행동력이 꽉찰때까지 업데이트 else { //모든 살아있는 캐릭터의 행동력 올리기 / 행동력이 꽉찬 캐릭터는 readyPlayer List에 추가 foreach (GameObject T in myBattleChars.ToArray()) { BattleChar srt = T.GetComponent <BattleChar>(); if (srt != null) { if (srt.getHP() > 0.0f) { srt.UpdateAP(); if (srt.IsFullAP()) { readyPlayer.Add(T); readyBC.Add(srt); srt.UpdateBuff(); } } } } foreach (GameObject T in enemys.ToArray()) { BattleChar srt = T.GetComponent <BattleChar>(); if (srt != null) { if (srt.getHP() > 0.0f) { srt.UpdateAP(); if (srt.IsFullAP()) { readyPlayer.Add(T); readyBC.Add(srt); srt.UpdateBuff(); } } } } //행동력이 꽉찬 캐릭터들을 스피드 순으로 정렬 readyPlayer.Sort(delegate(GameObject a, GameObject b) { return(a.GetComponent <BattleChar>().getSPD().CompareTo(b.GetComponent <BattleChar>().getSPD())); }); readyBC.Sort(delegate(BattleChar a, BattleChar b) { return(a.getSPD().CompareTo(b.getSPD())); }); } break; case BattleState.START: //전투 시작, 배틀매니저와 캐릭터를 셋업 player = readyPlayer[0].GetComponent <BattleChar>(); target.Clear(); ClearTile(); originPos = player.transform.position; if (player.stateSturn != null) { if (player.stateSturn.getTurn() > 0) { player.curAP = 0; curState = BattleState.END; break; } } else if (player.stateCount != null) { if (player.stateCount.getTurn() > 0) { player.curAP = 0; curState = BattleState.END; break; } } // 스킬 ID를 스킬 객체에 전달 skills.AddRange(player.DC.charSkillSet.set); for (int i = 0; i < 4; i++) { if (skills[i].type == SKILLTYPE.PAS) { //패시브 buttons[i + 1].GetComponent <Button>().interactable = false; } else if (!skills[i].testMP()) { //마나가 부족한 경우 buttons[i + 1].GetComponent <Button>().interactable = false; } else { //액티브 스킬이고 마나가 충분한 경우 if (skills[i].targetTag == TARGETTAG.FRIENDDEAD) { if (myDeadBC.Count <= 0) { buttons[i + 1].GetComponent <Button>().interactable = false; break; } } if (skills[i].targetTag == TARGETTAG.ENEMYDEAD) { if (myDeadBC.Count <= 0) { buttons[i + 1].GetComponent <Button>().interactable = false; break; } } buttons[i + 1].GetComponent <Button>().interactable = true; } } normal = player.DC.charSkillSet.normal; //버튼 이미지 스킬 아이디에 맞추어 변경하기 buttons[0].GetComponent <Image>().sprite = Resources.Load <Sprite>(normal.image); for (int i = 0; i < 4; i++) { buttons[1 + i].GetComponent <Image>().sprite = Resources.Load <Sprite>(skills[i].image); } //현재 스킬 사용중인 캐릭터 보여주기용 //스킬 사용창 활성화 if (player.tg == TARGETTAG.FRIEND) { skWIndow.SetActive(true); } curState++; break; case BattleState.TARGET: //스킬 선택 및 공격할 타겟 선택 ClearTile(); player.floor.GetComponent <MeshRenderer>().material.color = Color.yellow; player.floor.SetActive(true); //플레이어 캐릭터 if (player.tg == TARGETTAG.FRIEND) { //스킬 선택하기 in 스킬 메뉴 //스킬 사용 가능 타겟 표시하기 및 설정 if (!sklSelected.Equals(nullSkl)) { //print(sklSelected.level); switch (sklSelected.targetTag) { case TARGETTAG.ENEMY: foreach (GameObject obj in enemys.ToArray()) { obj.GetComponent <BattleChar>().getTarget().floor.GetComponent <MeshRenderer>().material.color = Color.red; obj.GetComponent <BattleChar>().getTarget().floor.SetActive(true); } targetNum = sklSelected.targetNum; tg = sklSelected.targetTag; break; case TARGETTAG.ENEMYALL: foreach (GameObject obj in enemyField) { obj.GetComponent <MeshRenderer>().material.color = Color.red; obj.SetActive(true); } targetNum = enemys.Count; tg = TARGETTAG.ENEMY; break; case TARGETTAG.FRIEND: foreach (GameObject obj in myBattleChars.ToArray()) { obj.GetComponent <BattleChar>().floor.GetComponent <MeshRenderer>().material.color = Color.green; obj.GetComponent <BattleChar>().getTarget().floor.SetActive(true); } targetNum = sklSelected.targetNum; tg = TARGETTAG.FRIEND; break; case TARGETTAG.FRIENDALL: foreach (GameObject obj in myField) { obj.GetComponent <MeshRenderer>().material.color = Color.green; obj.SetActive(true); } targetNum = myBattleChars.Count; tg = TARGETTAG.FRIEND; break; case TARGETTAG.SELF: player.floor.GetComponent <MeshRenderer>().material.color = Color.green; player.getTarget().floor.SetActive(true); targetNum = 1; tg = TARGETTAG.FRIEND; break; case TARGETTAG.FRIENDDEAD: foreach (BattleChar bc in myDeadBC) { bc.floor.GetComponent <MeshRenderer>().material.color = Color.green; bc.getTarget().floor.SetActive(true); } break; case TARGETTAG.ENEMYDEAD: foreach (BattleChar bc in enemyDeadBC) { bc.floor.GetComponent <MeshRenderer>().material.color = Color.red; bc.getTarget().floor.SetActive(true); } break; case TARGETTAG.NONE: break; } //타겟 선택하기 SelectTarget(target); //타겟 선택이 끝나면 if (target.Count == targetNum) { curState++; //다음 단계로 이동 skWIndow.SetActive(false); // 스킬창 닫기 ClearTile(); //발판 색 초기화 break; } } } //적 캐릭터 else { // 스킬 선택 sklSelected = ((EnemySkillSet)player.DC.charSkillSet).getSkill(); // 타겟 선택 target.AddRange(((EnemyActiveSkills)sklSelected).getTarget()); // 테스트 용도로 적 캐릭터 스킬도 사용자가 선택함, 실제 사용시 AI를 구현 적용해야됨 //if (!sklSelected.Equals(nullSkl)) //{ // //print(sklSelected.level); // switch (sklSelected.targetTag) // { // case TARGETTAG.ENEMY: // foreach (GameObject obj in enemys.ToArray()) // { // obj.GetComponent<BattleChar>().getTarget().floor.GetComponent<MeshRenderer>().material.color = Color.red; // obj.GetComponent<BattleChar>().getTarget().floor.SetActive(true); // } // targetNum = sklSelected.targetNum; // tg = sklSelected.targetTag; // break; // case TARGETTAG.ENEMYALL: // foreach (GameObject obj in enemyField) // { // obj.GetComponent<MeshRenderer>().material.color = Color.red; // obj.SetActive(true); // } // targetNum = enemys.Count; // tg = TARGETTAG.ENEMY; // break; // case TARGETTAG.FRIEND: // foreach (GameObject obj in myBattleChars.ToArray()) // { // obj.GetComponent<BattleChar>().floor.GetComponent<MeshRenderer>().material.color = Color.green; // obj.GetComponent<BattleChar>().getTarget().floor.SetActive(true); // } // targetNum = sklSelected.targetNum; // tg = TARGETTAG.FRIEND; // break; // case TARGETTAG.FRIENDALL: // foreach (GameObject obj in myField) // { // obj.GetComponent<MeshRenderer>().material.color = Color.green; // obj.SetActive(true); // } // targetNum = myBattleChars.Count; // tg = TARGETTAG.FRIEND; // break; // case TARGETTAG.SELF: // player.floor.GetComponent<MeshRenderer>().material.color = Color.green; // player.getTarget().floor.SetActive(true); // targetNum = 1; // tg = TARGETTAG.FRIEND; // break; // case TARGETTAG.NONE: // break; // } // //타겟 선택하기 // SelectTarget(target); //타겟 선택이 끝나면 if (target.Count == sklSelected.targetNum) { curState++; //다음 단계로 이동 skWIndow.SetActive(false); // 스킬창 닫기 ClearTile(); //발판 색 초기화 break; } //} } break; case BattleState.SPELL: //선택된 스킬이 실제로 적용되는 단계 //zoomPlayerCam(); if (animStack <= 0) { print(player.name + " use " + sklSelected.name); sklSelected.useSkill(target); } else { curState++; //curState = BattleState.END; } break; case BattleState.ANIM: //애니메이션 출력 되는 단계 if (animStack <= 0) { curState = BattleState.END; } break; case BattleState.END: //전투의 끝, 배틀 매니저 초기화 resetCam(); player2origin(); player.StateUpdate(); player.EndBuff(); player.curAP = 0; print(player.body.name + "'s turn is end."); readyPlayer.Remove(player.body); readyBC.Remove(player); sklSelected = nullSkl; target.Clear(); skills.Clear(); targetNum = 10; curState = BattleState.READY; break; } }
public override int updateTurn() { bc.SetHP(bc.getHP() + bc.DC.getMaxHP() * (0.01f + lv * 0.005f)); bc.setMP(bc.getMP() + bc.DC.getMaxHP() * (0.01f + lv * 0.005f)); return(turn); }
public float getBuff(BattleChar bc) { float buff = (bc.getHP() / bc.DC.getMaxHP()) / 0.04f * (0.02f + level * 0.005f); return(buff > 0.2f ? 1.2f : 1.0f + buff); }