Example #1
0
    //分别对应攻击和移动的函数
    protected virtual IEnumerator MoveToTar()
    {
        List <Part> route = new List <Part>();

        route      = Chess_manager.searchRoute(currentPart.GetComponent <Part>(), tarChess.GetComponent <Part>());
        audio.clip = music[0];
        audio.PlayOneShot(music[0]);
        for (int i = 0; i < route.Count; i++)
        {
            yield return(new WaitForSeconds(0.5f));

            transform.position = Vector3.Lerp(transform.position, route[i].getPosition(), 0.99f);
            currentPart        = route[i].transform;
            if (currentPart.GetComponent <Part>().life == 0)
            {
                currentPart.GetComponent <Part>().belong = true;
            }
            if (i == route.Count - 1)
            {
                animator.SetBool("ismove", false);
                currentPart.GetComponent <Part>().isControl = true;
            }
        }
        GameManager.instance.anbeavior = true;
        GameManager.instance.game_state.update_Townlist();
        now_movelim--;
    }
Example #2
0
    void chooseTarget()
    {
        List <Part> List_Town = new List <Part>();
        Part        min       = null;
        float       mindis    = 99999;

        if (GameManager.instance.getEnemyNum() < GameManager.instance.getPlayerNum())
        {
            List_Town = GameManager.instance.game_state.enemy_town;
        }
        else
        {
            List_Town = GameManager.instance.game_state.play_town;
        }
        foreach (Part p in List_Town)
        {
            if (p == null)
            {
                continue;
            }
            int dis = Chess_manager.GetRouteDis(currentPart.GetComponent <Part>(), p);
            if (mindis > dis)
            {
                mindis = dis;
                min    = p;
            }
        }
        if (min != null)
        {
            show_List = Chess_manager.searchRoute(currentPart.GetComponent <Part>(), min);
            near_city = min.transform;
            if (show_List.Count > 2)
            {
                if (!show_List[now_movedis].isControl && show_List[now_movedis].thistype != PartType.WATER)
                {
                    tarChess = show_List[now_movedis].GetComponent <Transform>();
                }
                else
                {
                    show_List = Chess_manager.getShowArea(currentPart.GetComponent <Part>(), now_movedis, true);
                    //Debug.Log(show_List.Count);
                    int standdis = Chess_manager.GetRouteDis(currentPart.GetComponent <Part>(), min);
                    for (int i = 0; i < show_List.Count; i++)
                    {
                        int dis = Chess_manager.GetRouteDis(show_List[i], min);
                        if ((show_List[i] != null && show_List[i].thistype == PartType.WATER && arm_type == Arm_type.ARMY) || (dis > standdis))
                        {
                            show_List.Remove(show_List[i]);
                        }
                    }
                    int index1 = (int)(Random.Range(0, 1) * (show_List.Count - 1));
                    if (show_List[index1].isControl || (show_List[index1].thistype == PartType.WATER && this.arm_type == Arm_type.ARMY))
                    {
                        tarChess = currentPart;
                    }
                    else
                    {
                        tarChess = show_List[index1].GetComponent <Transform>();
                    }
                }
            }
            else
            {
                tarChess = currentPart;
            }
        }
        show_List = Chess_manager.searchRoute(currentPart.GetComponent <Part>(), tarChess.GetComponent <Part>());
    }
Example #3
0
    void getnearest_chess_and_dis()
    {
        show_List.Clear();
        List <ChessControl> player_arm = new List <ChessControl>();

        player_arm = GameManager.player_arm;
        ChessControl min    = null;
        float        mindis = 99999;

        getnowPart();
        foreach (ChessControl p in player_arm)
        {
            if (p == null)
            {
                continue;
            }
            int dis = Chess_manager.GetRouteDis(currentPart.GetComponent <Part>(), p.currentPart.GetComponent <Part>());
            if (mindis > dis)
            {
                mindis = dis;
                min    = p;
            }
        }
        if (min != null)
        {
            show_List   = Chess_manager.searchRoute(currentPart.GetComponent <Part>(), min.currentPart.GetComponent <Part>());
            near_player = min.transform;
            if (show_List.Count > 2)
            {
                if (!show_List[now_movedis].isControl)
                {
                    tarChess = show_List[now_movedis].GetComponent <Transform>();
                }
                else
                {
                    show_List = Chess_manager.getShowArea(currentPart.GetComponent <Part>(), now_movedis, true);
                    //Debug.Log(show_List.Count);
                    int standdis = Chess_manager.GetRouteDis(currentPart.GetComponent <Part>(), min.currentPart.GetComponent <Part>());
                    for (int i = 0; i < show_List.Count; i++)
                    {
                        int dis = Chess_manager.GetRouteDis(show_List[i], min.currentPart.GetComponent <Part>());
                        if ((show_List[i] != null && show_List[i].thistype == PartType.WATER && arm_type == Arm_type.ARMY) || (dis > standdis))
                        {
                            show_List.Remove(show_List[i]);
                        }
                    }
                    int index1 = (int)(Random.Range(0, 1) * (show_List.Count - 1));
                    if (show_List[index1].isControl || (show_List[index1].thistype == PartType.WATER && this.arm_type == Arm_type.ARMY))
                    {
                        tarChess = currentPart;
                    }
                    else
                    {
                        tarChess = show_List[index1].GetComponent <Transform>();
                    }
                }
            }
            else
            {
                tarChess = currentPart;
            }
        }
        show_List = Chess_manager.searchRoute(currentPart.GetComponent <Part>(), tarChess.GetComponent <Part>());
    }