private void NextAtkByCurRound() { BattleManager.Instance.CurBattleStatus = BattleStatus.Idle; this.AtkRoleObj = null; this.HurtRoleObj = null; BattleManager.Instance.CurRoundAtkIndex++; BattleRoleData curAtkData = BattleManager.Instance.GetCurRoundAtkRoleData(); if (curAtkData != null) { this.AtkRoleObj = GetRoleObjByPosIndex(curAtkData.Pos); if (this.AtkRoleObj != null) { ShineHpSlider(curAtkData.Pos); BattleRoleData hurtData = BattleManager.Instance.GetCurHurtRoleData(curAtkData); if (hurtData != null) { this.HurtRoleObj = GetRoleObjByPosIndex(hurtData.Pos); if (this.HurtRoleObj != null) { //Debug.LogError("curAtkData:" + curAtkData.QueryPos() + " hurtData:" + hurtData.QueryPos()); BattleManager.Instance.CalCurAtkDamage(curAtkData, hurtData); BattleManager.Instance.CurBattleStatus = BattleStatus.BattleAtkerMove; } else { Debug.LogError("受击者角色不存在,索引号:" + hurtData.Pos); BattleManager.Instance.CurBattleStatus = BattleStatus.BattleNewAtkByCurRound; } } else { //Debug.LogError("搜索打击目标失败"); BattleManager.Instance.CurBattleStatus = BattleStatus.BattleNewAtkByCurRound; } } else { Debug.LogError("当前攻击角色不存在,索引号:" + BattleManager.Instance.CurRoundAtkIndex); BattleManager.Instance.CurBattleStatus = BattleStatus.BattleNewAtkByCurRound; } } else { if (BattleManager.Instance.IsBattleOver()) { Debug.LogError("战斗结束"); BattleManager.Instance.CurBattleStatus = BattleStatus.BattleOver; } else { BattleManager.Instance.CurBattleStatus = BattleStatus.BattleNewRound; } } }
//移动动画切换后等待一段时间切换为攻击状态(不能立即切,否则动画播放有误) public IEnumerator AtkStart(BattleRoleObj hurtObj) { yield return(new WaitForSeconds(0.2f)); Vector3 hurtRoleVec = BattleManager.Instance.QueryPosByIndex(hurtObj.GetData().Pos); Quaternion rot = Quaternion.LookRotation(hurtRoleVec - this.transform.localPosition); this.transform.localRotation = rot; this.HasSwitchToAtkOver = false; this.Animator.SetInteger("Status", 3); BattleManager.Instance.CurBattleStatus = BattleStatus.BattleHurt; }
public bool CanAtk(BattleRoleObj atker, BattleRoleObj hurt) { int atkRange = atker.GetData().AtkRange; Dictionary <int, List <int> > nearStepDict = SearchPath.GetStepDict(atker.GetData().Pos); foreach (int step in nearStepDict.Keys) { for (int i = 0; i < nearStepDict[step].Count; i++) { if (nearStepDict[step][i] == hurt.GetData().Pos) { return(step <= atkRange); } } } return(false); }
//摆放角色 private void InitRoles() { BattleManager.Instance.InitBattleRolesData(); GameObject RoleParent = new GameObject("BattleRoles"); List <BattleRoleData> roleList = BattleManager.Instance.GetBattleRoleList(); for (int i = 0; i < roleList.Count; i++) { bool isFind = false; for (int j = 0; j < this.RoleObjList.Count; j++) { if (this.RoleObjList[j].GetData().Pos == roleList[i].Pos) { isFind = true; Debug.LogError("角色位置重复"); break; } } if (!isFind) { string modelName = BattleManager.Instance.QueryRoleModelName(roleList[i].RoleID); if (!string.IsNullOrEmpty(modelName)) { GameObject obj = Instantiate(Resources.Load("Prefabs/Model/" + modelName)) as GameObject; if (obj != null) { obj.transform.parent = RoleParent.transform; int posIndex = roleList[i].Pos; obj.name = posIndex.ToString(); obj.transform.localPosition = BattleManager.Instance.QueryPosByIndex(posIndex); BattleRoleObj script = obj.AddComponent <BattleRoleObj>(); script.InitRole(roleList[i]); this.RoleObjList.Add(script); CreateNewHpSlider(roleList[i]); } else { Debug.LogError("实例化模型" + modelName + "失败."); } } } } SetHpSliderPos(); }
public void MoveStart(BattleRoleObj hurtObj) { int targetPos = hurtObj.GetData().Pos; List <int> limitePosList = BattleManager.Instance.GetLimitePosListBySearchPath(targetPos); List <int> path = SearchPath.QueryPath(this.Data.Pos, targetPos, limitePosList); if (path.Count > 0) { if (path[path.Count - 1] != targetPos) { if (path.Count > 1) { MoveToTargetPos(path[1]); } else { Debug.LogError("与目标点不相邻,且无法移动,进入攻击环节"); BattleManager.Instance.CurBattleStatus = BattleStatus.BattleAtkerAtk; } } else { if (path.Count > 1) { MoveToTargetPos(path[1]); } else { Debug.LogError("与目标点相邻,直接攻击"); BattleManager.Instance.CurBattleStatus = BattleStatus.BattleAtkerAtk; } } } else { Debug.LogError("移动路径判断有误,无出发点"); BattleManager.Instance.CurBattleStatus = BattleStatus.BattleNewAtkByCurRound; } }