コード例 #1
0
    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;
            }
        }
    }
コード例 #2
0
    //移动动画切换后等待一段时间切换为攻击状态(不能立即切,否则动画播放有误)
    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;
    }
コード例 #3
0
    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);
    }
コード例 #4
0
    //摆放角色
    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();
    }
コード例 #5
0
    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;
        }
    }