Beispiel #1
0
    //判断周围上下左右的可移动地砖
    public List <ItemBrick> JudgeAroundBrick(ItemBrick itemBrick)
    {
        List <ItemBrick> itemBricks = new List <ItemBrick>();

        itemBrick.isTag = true;

        Vector2[] vector2s = { new Vector2(1, 0), new Vector2(-1, 0), new Vector2(0, 1), new Vector2(0, -1) };

        for (int j = 0; j < 4; j++)
        {
            for (int i = 0; i < brickArray_ItemBrick.Count; i++)
            {
                if (brickArray_ItemBrick[i].isTag == true)
                {
                    continue;
                }
                if (brickArray_ItemBrick[i].x == itemBrick.x + vector2s[j].x &&
                    brickArray_ItemBrick[i].y == itemBrick.y + vector2s[j].y)
                {
                    brickArray_ItemBrick[i].isTag = true;

                    if (((brickArray_ItemBrick[i].brickType != BrickType.TheWater &&
                          brickArray_ItemBrick[i].brickType != BrickType.TheMountain &&
                          brickArray_ItemBrick[i].rolePlayer == null)) ||
                        (brickArray_ItemBrick[i].brickType == BrickType.TheWater && currentRole.roleStruct.roleProfessional == RoleProfessional.TheFishMen) ||
                        (brickArray_ItemBrick[i].brickType == BrickType.TheMountain && currentRole.roleStruct.roleProfessional == RoleProfessional.TheBirdMan))
                    {
                        itemBricks.Add(brickArray_ItemBrick[i]);
                    }
                }
            }
        }

        return(itemBricks);
    }
Beispiel #2
0
    //移动方法
    public void MoveTo(ItemBrick itemBrick, TweenCallback tweenCallback = null)
    {
        currentRole.thisItemBrick.rolePlayer = null;

        currentRole.thisItemBrick = itemBrick;

        itemBrick.rolePlayer = currentRole.gameObject;

        Vector2 vector2 = itemBrick.transform.position;

        Tweener tweeners = currentRole.transform.DOMove(vector2, 1f);

        tweeners.SetEase(Ease.OutQuad);     //设置动画的运动曲线,可以选择很多种

        tweeners.OnComplete(tweenCallback); //设置一个事件,就是动画播放完成后执行下一步,可以执行某一个函数。

        DestroyBrickTip(true, false);

        currentRole.roleStruct.active -= 1;

        UiCanvasConsole.instance.ChangeRoleSelectTip(false);

        if (currentRole.roleType == RoleType.ThePlayerRole)
        {
            //刷新UI显示
            UiPlayerRolePanel.instance.InterfaceThePlayerUI(currentRole);
        }
    }
Beispiel #3
0
    //判断两个地砖的距离
    public int JudgeDistances(ItemBrick initial, ItemBrick target)
    {
        int xDis, yDis;

        xDis = target.x - initial.x;
        yDis = target.y - initial.y;
        xDis = Mathf.Abs(xDis);
        yDis = Mathf.Abs(yDis);

        return(xDis + yDis);
    }
Beispiel #4
0
    private IEnumerator Attack()
    {
        MapGameConsole.instance.AttackAtDistance();

        yield return(new WaitForSeconds(1f));

        Role role = JudgeRecently(PlayGameConsole.rolesEnemy[index]);

        ItemBrick itemBrick = MapGameConsole.instance.AI_JudgeMoveTarget(role);

        MapGameConsole.instance.AttackTo(itemBrick.rolePlayer, RoleType.TheEnemyRole);
    }
Beispiel #5
0
    private IEnumerator Move()
    {
        MapGameConsole.instance.MoveAtDistance();

        yield return(new WaitForSeconds(1f));

        Role role = JudgeRecently(PlayGameConsole.rolesEnemy[index]);

        ItemBrick itemBrick = MapGameConsole.instance.AI_JudgeMoveTarget(role);

        MapGameConsole.instance.MoveTo(itemBrick, MoveEnd);
    }
Beispiel #6
0
    //判断两个地砖的距离 A*算法
    public int JudgeDistancesAStar(ItemBrick initial, ItemBrick target)
    {
        List <ItemBrick> itemBricks = new List <ItemBrick>();

        for (int i = 0; i < 100; i++)
        {
            if (i == 0)
            {
                itemBricks = JudgeAroundBrick(initial);

                for (int j = 0; j < itemBricks.Count; j++)
                {
                    itemBricks[j].dis = 1;
                }
            }
            else
            {
                List <ItemBrick> itemsTemp = new List <ItemBrick>();
                for (int j = 0; j < itemBricks.Count; j++)
                {
                    itemsTemp.AddRange(JudgeAroundBrick(itemBricks[j]));
                }

                for (int j = 0; j < itemsTemp.Count; j++)
                {
                    itemsTemp[j].dis = i + 1;
                }
                itemBricks.AddRange(itemsTemp);
            }

            for (int j = 0; j < itemBricks.Count; j++)
            {
                if (itemBricks[j] == target)
                {
                    return(itemBricks[j].dis);
                }
            }
        }


        for (int i = 0; i < brickArray_ItemBrick.Count; i++)
        {
            brickArray_ItemBrick[i].isTag = false;
            brickArray_ItemBrick[i].dis   = 0;
        }

        return(0);
    }
Beispiel #7
0
    //鼠标按下
    private void UpdateMouseDown()
    {
        if (!EventSystem.current.IsPointerOverGameObject())
        {
            if (Input.GetKeyDown(KeyCode.Mouse0))//左键
            {
                RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
                if (hit.collider != null)
                {
                    if (hit.transform.parent.GetComponent <ItemBrick>())
                    {
                        ItemBrick itemBrick = hit.transform.parent.GetComponent <ItemBrick>();

                        if (itemBrick.rolePlayer != null && itemBrick.brickTip == null)//点击角色
                        {
                            MapGameConsole.instance.DestroyBrickTip();

                            switch (itemBrick.rolePlayer.GetComponent <Role>().roleType)
                            {
                            case RoleType.ThePlayerRole:
                                OnThePlayerRole(itemBrick.rolePlayer);
                                print("点击玩家角色:" + itemBrick.rolePlayer.name);
                                break;

                            case RoleType.TheEnemyRole:
                                OnTheEnemyRole(itemBrick.rolePlayer);
                                print("点击敌人角色:" + itemBrick.rolePlayer.name);
                                break;

                            default:
                                break;
                            }
                        }
                        else if (itemBrick.rolePlayer == null && itemBrick.brickTip == null)//点击地形
                        {
                            print("点击:" + itemBrick.brickType);
                        }
                        else if (itemBrick.brickTip != null)//点击移动或者攻击
                        {
                            switch (itemBrick.brickTip.GetComponent <ItemBrickTip>().brickTipType)
                            {
                            case BrickTipType.BrickTipMove:
                                print("点击移动");
                                MapGameConsole.instance.MoveTo(itemBrick, PlayerMoveEnd);
                                break;

                            case BrickTipType.BrickTipAttack:
                                if (itemBrick.rolePlayer != null && itemBrick.rolePlayer.GetComponent <Role>().roleType == RoleType.TheEnemyRole)
                                {
                                    print("点击攻击");
                                    MapGameConsole.instance.AttackTo(itemBrick.rolePlayer, RoleType.ThePlayerRole);
                                }
                                break;

                            default:
                                break;
                            }
                        }
                    }
                }
            }
            else if (Input.GetKeyDown(KeyCode.Mouse1))//右键
            {
                MapGameConsole.instance.DestroyBrickTip();
            }
        }
    }
Beispiel #8
0
    // Start is called before the first frame update
    void Start()
    {
        //初始化给当前地砖赋值
        RaycastHit2D[] hit = Physics2D.RaycastAll(this.transform.position, Vector3.forward * 100);
        for (int i = 0; i < hit.Length; i++)
        {
            if (hit[i].collider != null && hit[i].collider.name == "BrickImage")
            {
                if (hit[i].collider.transform.parent.GetComponent <ItemBrick>())
                {
                    thisItemBrick            = hit[i].collider.transform.parent.GetComponent <ItemBrick>();
                    thisItemBrick.rolePlayer = this.gameObject;
                }
            }
        }

        //初始化根据职业赋值相应职业脚本
        switch (roleStruct.roleProfessional)
        {
        case RoleProfessional.TheFireWarrior:
            this.gameObject.AddComponent <RoleTheFireWarrior>().rolePlayer = this;
            break;

        case RoleProfessional.ThePrince:
            break;

        case RoleProfessional.TheFishMen:
            break;

        case RoleProfessional.TheBirdMan:
            break;

        case RoleProfessional.TheEnchanter:
            break;

        case RoleProfessional.TheMonks:
            break;

        case RoleProfessional.TheBruiser:
            break;

        case RoleProfessional.TheBigMan:
            break;

        case RoleProfessional.TheWindWarrior:
            this.gameObject.AddComponent <RoleTheWindWarrior>().rolePlayer = this;
            break;

        case RoleProfessional.TheWaterWarrior:
            this.gameObject.AddComponent <RoleTheWaterWarrior>().rolePlayer = this;
            break;

        default:
            break;
        }

        //初始化在注册在list中
        if (roleType == RoleType.TheEnemyRole)
        {
            PlayGameConsole.rolesEnemy.Add(this);
        }
        else
        {
            PlayGameConsole.rolesPlayer.Add(this);
        }
    }