示例#1
0
    void Start()
    {
        data = (ErgateAntData)GetComponent <ErgateAnt>().Data;
        //HostAnt = new ErgateAnt();
        HostAnt = (ErgateAnt)GetComponent <ErgateAnt>();
        //目的地の設定
        var elements = NestSystem.Instance.NestElements;

        Debug.Log(elements.Count);
        foreach (var element in elements)
        {
            if (element.GetType().Name.Equals("StoreRoom"))
            {
                nodeNest = element.GetNodes().ElementAt(0);
            }
        }


        //以下デバッグ用
        Vector3 a = HostAnt.transform.position;

        a.z = -1;
        HostAnt.transform.position   = a;
        HostAnt.transform.localScale = new Vector3(1 / 2f, 1 / 2f, 1);

        nodeFeed = NestSystem.Instance.NestElements[1].GetNodes().FirstOrDefault(n => n.Name == "top");
        //nodeFeed = null;
        if (nodeFeed == null)
        {
            Debug.Log("nullです");
        }
        ErgateAntStart(nodeFeed);
        //ここまで
    }
示例#2
0
    void Start()
    {
        data = (ErgateAntData)GetComponent <ErgateAnt>().Data;

        antMovement = GetComponent <AntMovement>();
        //目的地の設定
        var elements = NestSystem.Instance.NestElements;

        Debug.Log(NestSystem.Instance.NestElements.Count);
        foreach (var element in elements)
        {
            if (element.GetType().Name.Equals("StoreRoom"))
            {
                nodeNest = element.GetNodes().ElementAt(0);
            }

            /*
             * else if (element.GetType().Name.)
             * {
             *
             * }
             */
        }
        nodeFeed = NestSystem.Instance.NestElements[0].GetNodes().ElementAt(0);

        //餌と巣の位置情報はテスト用(後で削除または変更する可能性あり)
        //現在置
        //自身の座標を取得
        antMovement.nowPlace = transform.position;

        //探索ごとにAStarSearcherインスタンスを作る
        IEnumerable <IPathNode> routes = NestSystem.Instance.FindRoute(nodeNest, nodeFeed);

        //結果はsearcher.Routeに入る
        foreach (var node in routes)
        {
            Debug.Log(node.WorldPosition);
            v.Add(node.WorldPosition);
            I++;
        }

        //ありの状態の取得
        //初期位置
        antMovement.nowPlace = transform.position;
        //アリのスピード取得(未取得)
        //public float speed = hogehoge.speed;
        //試験用スピード //これは後で削除
        antMovement.speed = 0.01f;
        //node間の移動を計算し足していく値
        //最初は1番目の目的地へと向かう
        i               = 1;
        target          = v[i];
        antMovement.way = antMovement.Explore(target);
    }
示例#3
0
 //Debug用スタートプログラム
 private void ErgateAntStart(NestPathNode target)
 {
     if (target != null)
     {
         Debug.Log("start!");
         HostAnt.StartForPathNode(target, GetFeed, Cancel);
     }
     else
     {
         Debug.Log("働きたくないでござる");
     }
 }
示例#4
0
        public override void PeriodicUpdate()
        {
            if (!_enemyAnt.Data.IsAlive)
            {
                Controller.ChangeStrategy(new SoldierStandbyStrategy());
            }

            var combatDistance = GetAntCommonData <SoldierAntCommonData>().CombatDistance;

            //戦闘距離内なら戦闘に移行
            if (Vector3.Distance(_enemyAnt.transform.position, Controller.Ant.transform.position) < combatDistance)
            {
                Controller.ChangeStrategy(new SoldierCombatStrategy(_enemyAnt));
                return;
            }


            var enemyNode = _enemyAnt.SupposeCurrentPosNode();

            //敵アリの位置が変化していなければそのまま移動を続ける
            if (_currentTargetNode == enemyNode)
            {
                return;
            }

            _currentTargetNode = enemyNode;


            void HandleArrived()
            {
            }

            void HandleAborted()
            {
                Controller.ChangeStrategy(new SoldierStandbyStrategy());
            }

            Controller.Ant.StartForPathNode(_currentTargetNode, HandleArrived, HandleAborted);
        }