Exemple #1
0
    //绘制战斗格子
    void DrawBattleBlock(Vector3 pos, Color c, int x, int y)
    {
        //Debug.DrawRay(pos, Vector3.up, c, 1f);

        var parent = GameObject.Find("decal parent");

        if (parent == null)
        {
            parent = new GameObject("decal parent");
        }

        var obj = EasyDecal.Project(m_DecalPrefab, pos, Quaternion.identity);

        obj.transform.SetParent(parent.transform);

        obj.LateBake();

        var bPos = new BattleBlockVector(x, y);
        var bbd  = new BattleBlockData();

        bbd.BattlePos  = bPos;
        bbd.WorldPos   = pos;
        bbd.gameObject = obj.gameObject;
        battleBlocks.Add(bbd);
    }
Exemple #2
0
    /// <summary>
    /// 添加角色到战场里面
    /// </summary>
    /// <param name="role"></param>
    /// <param name="team"></param>
    public void AddBattleRole(RoleInstance role, int team)
    {
        //计算NPC应该站的点
        BattleBlockData npcStandBlock = FindNearestBattleBlock(/*team == 0 ? _player.View.transform.position :*/ role.View.transform.position);

        if (npcStandBlock == null)
        {
            Debug.LogError($"错误,{role.Key}找不到有效格子");
            return;
        }
        //加入战场
        BattleModel.AddBattleRole(role, npcStandBlock.BattlePos, team, (team != 0));

        //待命
        role.View.Idle();
        var enemy = AIManager.Instance.GetNearestEnemy(role);

        if (enemy != null)
        {
            //面向最近的敌人
            role.View.LookAtWorldPosInBattle(enemy.View.transform.position);
        }

        //死亡的关键角色默认晕眩
        if (role.View.m_IsKeyRole && role.IsDead())
        {
            role.Stun(-1);
        }
    }
Exemple #3
0
 void OnSelectPos(BattleBlockData data)
 {
     //朝向
     role.View.LookAtBattleBlock(data);
     //绑定技能释放位置
     BattleStateMechine.Instance.BindSkillPos(data.BattlePos);
     //切换到技能预展示状态
     //BattleStateMechine.Instance.SwitchState(BattleManager.BattleViewStates.PreshowSkillCoverRange);
     BattleStateMechine.Instance.SwitchState(BattleManager.BattleViewStates.PlayingAction);//释放技能
 }
Exemple #4
0
    void OnEndSelect(BattleBlockData data)
    {
        if (data == null)
        {
            return;
        }

        //隐藏所有格子
        BattleboxHelper.Instance.HideAllBlocks();
        BattleStateMechine.Instance.CurrentToPos = data.BattlePos;
        BattleStateMechine.Instance.SwitchState(BattleManager.BattleViewStates.Move);
        Debug.Log("moved");
        Jyx2_UIManager.Instance.HideUI("BattleActionUIPanel");
    }
Exemple #5
0
    private void DrawBattleBlock(Vector3 pos, Color c, int x, int y)
    {
        var parent = FindOrCreateBlocksParent();

        var obj = EasyDecal.Project(m_DecalPrefab, pos, Quaternion.identity);

        obj.transform.SetParent(parent.transform);

        //obj.LateBake();
        //StartCoroutine(SetDecalsHidenFrames(obj));

        var bPos = new BattleBlockVector(x, y);
        var bbd  = new BattleBlockData();

        bbd.BattlePos  = bPos;
        bbd.WorldPos   = pos;
        bbd.gameObject = obj.gameObject;
        battleBlocks.Add(bbd);
    }
Exemple #6
0
    //绘制战斗格子,默认不显示
    void DrawBattleBlock(Vector3 pos, Color c, int x, int y, Vector3 normal, BattleboxBlock boxBlock)
    {
        var parent = FindOrCreateBlocksParent();

        var block = Resources.Load <GameObject>("BattleboxBlock");
        var obj   = EasyDecal.Project(block, pos, Quaternion.identity);

        obj.Quality  = 2;
        obj.Distance = 0.05f;
        obj.transform.SetParent(parent.transform, false);

        var bPos = new BattleBlockVector(x, y);
        var bbd  = new BattleBlockData();

        bbd.BattlePos  = bPos;
        bbd.WorldPos   = pos;
        bbd.gameObject = obj.gameObject;
        bbd.BoxBlock   = boxBlock;
        battleBlocks.Add(bbd);
    }
Exemple #7
0
    List <GameObject> hitGoList = new List <GameObject>();//当前技能可以打到的角色
    public override void OnEnterState()
    {
        role     = BattleStateMechine.Instance.CurrentRole;
        zhaoshi  = BattleStateMechine.Instance.CurrentZhaoshi;
        skillPos = BattleStateMechine.Instance.CurrentSkillPos;
        if (role == null || zhaoshi == null || skillPos == null)
        {
            GameUtil.LogError("进入技能展示范围状态失败");
            return;
        }
        var blockList = BattleManager.Instance.GetSkillCoverBlocks(zhaoshi, skillPos, role.Pos);

        BattleboxHelper.Instance.ShowBlocks(blockList);//显示技能范围
        FillBeHitEnemeyGameObject(blockList);
        // 将要受到攻击的敌人描边
        ShowEnemyOutLine();

        BattleBlockData blockData = BattleboxHelper.Instance.GetBlockData(skillPos.X, skillPos.Y);

        //面板需要根据世界坐标算出ui坐标 显示在格子上方 方便点击
        Jyx2_UIManager.Instance.ShowUI("BattleOKPanel", blockData.WorldPos, new Action(OnConfirm), new Action(OnCancel));
    }
Exemple #8
0
    /// <summary>
    /// 找到最近的战斗格子
    /// </summary>
    /// <param name="pos"></param>
    /// <param name="ignoreRole"></param>
    /// <returns></returns>
    BattleBlockData FindNearestBattleBlock(Vector3 pos, bool ignoreRole = false)
    {
        BattleBlockData rst     = null;
        var             list    = BattleboxHelper.Instance.GetBattleBlocks();
        var             minDist = float.MaxValue;

        foreach (var data in list)
        {
            //有人占了这一格了
            if (!ignoreRole && BattleModel.BlockHasRole(data.BattlePos.X, data.BattlePos.Y))
            {
                continue;
            }

            var dist = (data.WorldPos - pos).sqrMagnitude;
            if (minDist > dist)
            {
                minDist = dist;
                rst     = data;
            }
        }
        return(rst);
    }
Exemple #9
0
 //朝向一个方向
 public void LookAtBattleBlock(BattleBlockData pos)
 {
     //平视,所以y轴和自身一致
     transform.LookAt(new Vector3(pos.WorldPos.x, transform.position.y, pos.WorldPos.z));
 }