Пример #1
0
    private void StartFight()
    {
        PlayerResources playerResources = Global.Instance.Player.Resources;
        MissionData     md = MissionsConfig.Instance.GetPlanet(EPlanetKey.PlanetA).GetMission(EMissionKey.PlanetA_Test1);

        if (playerResources.Fuel < md.FuelWinCost || playerResources.Fuel < md.FuelLoseCost ||
            playerResources.Credits < md.CreditsWinCost || playerResources.Credits < md.CreditsLoseCost ||
            playerResources.Minerals < md.MineralsWinCost || playerResources.Minerals < md.MineralsLoseCost)
        {
            Debug.LogWarning("Not enough resources");
            return;
        }

        BaseSoldier[] soldiers = new BaseSoldier[_hiredUnits.Count];
        for (int i = 0; i < soldiers.Length; i++)
        {
            soldiers[i] = new BaseSoldier(UnitsConfig.Instance.GetSoldierData(_hiredUnits[i]), Global.Instance.Player.City.GetSoldierUpgradesInfo(_hiredUnits[i]).Level);
        }

        Global.Instance.CurrentMission.PlanetKey        = EPlanetKey.PlanetA;
        Global.Instance.CurrentMission.MissionKey       = EMissionKey.PlanetA_Test1;
        Global.Instance.CurrentMission.SelectedSoldiers = new ArrayRO <BaseSoldier>(soldiers);

        FightManager.Setup(EFightMode.Campaign, MissionsConfig.Instance.GetPlanet(Global.Instance.CurrentMission.PlanetKey).GetMission(Global.Instance.CurrentMission.MissionKey));
        Application.LoadLevel("Fight");
    }
Пример #2
0
        public Vector2[] GetPathTo(Vector3 startPosition, Vector3 endPosition, BaseSoldier unit, out int cost)
        {
            Node n = GoTo(startPosition, endPosition, unit);
            cost = n.GetTotalCost();

            bool foundTarget = n.Position == endPosition;
            if (!foundTarget)
                return null;

            List<Node> nodes = new List<Node>();
            Node node = n; // Starts at the target and backtrace through parents back to beginning.
            while (node != null)
            {
                nodes.Add(node);
                node = node.Parent;
            }

            // Construct a path where each entry is one move in some direction.
            Vector2[] path = new Vector2[nodes.Count-1];
            int counter = 0;
            for (int i = nodes.Count-1; i > 0; i--) {
                path[counter] = nodes[i-1].Position - nodes[i].Position; // The direction is the difference in .
                counter++;
            }

            return path;
        }
    //- 进入该状态时调用的函数
    //
    // @param args 附加的调用信息
    // @return none
    public override void onEnter(Fix64 args)
    {
        BaseSoldier soldier = (BaseSoldier)m_unit.lockedAttackUnit;

        GameData.g_bulletManager.createBullet(m_unit, soldier, m_unit.m_fixv3LogicPosition, soldier.m_fixv3LogicPosition);
        m_unit.changeState("cooling", m_unit.attackSpeed);
    }
Пример #4
0
    public void SaveHiredSoldiers()
    {
        List <BaseSoldier> soldiers = new List <BaseSoldier>();

        for (int i = 0; i < UnitSlotsRO.Length; i++)
        {
            if (UnitSlotsRO[i] != null)
            {
                BaseSoldierData soldierData = UnitSlotsRO[i].UnitData;
                if (soldierData != null)
                {
                    BaseSoldier soldier = new BaseSoldier(soldierData,
                                                          Global.Instance.Player.City.GetSoldierUpgradesInfo(soldierData.Key).Level);
                    soldier.TemplatePlace = UnitSlotsRO[i].Place;
                    soldiers.Add(soldier);
                }
            }
        }
        Global.Instance.CurrentMission.SelectedSoldiers = new ArrayRO <BaseSoldier>(soldiers.ToArray());

        UnitSlot[] slotTemplate = new UnitSlot[soldiers.Count];
        for (int i = 0; i < slotTemplate.Count(); i++)
        {
            slotTemplate[i] = new UnitSlot(soldiers[i].TemplatePlace, soldiers[i].Data.Key);
        }
        Global.Instance.Player.Heroes.Current.Data.SlotTemplate = new ArrayRO <UnitSlot>(slotTemplate);
    }
Пример #5
0
        private void AddNode(Vector3 position, Vector3 target, Node parent, BaseSoldier unit)
        {
            int address = GridAux.PositionToId(position);
            #if (FOUNDATION_DEBUG_PATHFINDER)
            Log.Debug("PathFinder", "address={0}, position={1}", address, position);
            #endif

            if (!_closedSet.Contains(address))
            {
                BaseTile t = _gridTiles.TryGetTile(position);
                if (t != null && unit.CanWalkPast(t))
                {
                    int cost = (parent == null ? 0 : parent.Cost) + t.GetCost(unit);
                    int heuristic = GetManhattanDistance(position, target);
            #if (FOUNDATION_DEBUG_PATHFINDER)
                    Log.Debug("PathFinder", "adding node. (position={0}, heuristic={1}, cost={2})", position, heuristic, cost);
            #endif

                    _priorityQueue.Enqueue(new Node(position, parent, cost, heuristic));
                }
                else
                {
                    Close(position);
                }
            }
        }
Пример #6
0
 private void CreateSoldier(GameObject bingObj)
 {
     m_soldier = Instantiate(bingObj, this.transform.position, Quaternion.identity, this.transform).GetComponent <BaseSoldier>();
     if (m_soldier != null)
     {
         m_soldier.Init(m_nowDirection);
     }
 }
    public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        Debug.Log("OnStateExit");

        BaseSoldier baseSoldier = animator.gameObject.GetComponent <BaseSoldier>();

        baseSoldier.BattleAgent.BaseSprite.ToggleState(StateId.Idle);
    }
Пример #8
0
        public void Solider_WhenCreatedWithDefaults_ShouldHaveRankOfPrivate()
        {
            // Arrange
            var sut = new BaseSoldier();

            // Act
            var soldierRank = sut.Rank;

            Console.WriteLine($"Basic Soldier Rank: {soldierRank}");

            // Assert
            Assert.That(soldierRank, Is.EqualTo(Rank.Private));
        }
Пример #9
0
    public BattleAgent(BaseSoldier baseSoldier, Character character)
    {
        this.BaseSoldier = baseSoldier;

        this.gameObject = baseSoldier.gameObject;
        this.BaseSprite = baseSoldier.gameObject.AddComponent<BaseSprite> ();
        this.Character = character;

        this.baseSoldier.AddSoundDemo ();
        //AddTimer ();

        AddEventListeners ();
    }
Пример #10
0
    public BattleAgent(BaseSoldier baseSoldier, Character character)
    {
        this.BaseSoldier = baseSoldier;

        this.gameObject = baseSoldier.gameObject;
        this.BaseSprite = baseSoldier.gameObject.AddComponent <BaseSprite> ();
        this.Character  = character;

        this.baseSoldier.AddSoundDemo();
        //AddTimer ();

        AddEventListeners();
    }
Пример #11
0
        public void Solider_WhenCreatedWithDefaults_ShouldHaveSoldierTypeOfBasicSoldier()
        {
            // Arrange
            var sut = new BaseSoldier();

            // Act
            var soldierType = sut.SoldierType;

            Console.WriteLine($"Basic Soldier Type: {soldierType}");

            // Assert
            Assert.That(soldierType, Is.EqualTo(SoldierType.BasicSoldier));
        }
Пример #12
0
        public void Solider_WhenCreatedWithDefaults_ShouldHaveClassificationOfNone()
        {
            // Arrange
            var sut = new BaseSoldier();

            // Act
            var classification = sut.Classification;

            Console.WriteLine($"Basic Soldier Classification: {classification}");

            // Assert
            Assert.That(classification, Is.EqualTo(Class.None));
        }
Пример #13
0
        public void Solider_WhenCreatedWithDefaults_ShouldHaveBaseAttackOfTwo()
        {
            // Arrange
            var sut = new BaseSoldier();

            // Act
            var attackStrength = sut.SoldierStats.AttackStrength;

            Console.WriteLine($"Basic Soldier AttackStrength: {attackStrength}");

            // Assert
            Assert.That(attackStrength, Is.EqualTo(2));
        }
Пример #14
0
    /// <summary>
    /// Adds the enemy.
    /// </summary>
    void AddEnemy()
    {
        GameObject parent = StageManager.SharedInstance.NpcLayer;

//		Vector2[] pos = new Vector2[] {
//			new Vector2 (4, 4),
//			new Vector2 (5, 9),
//			new Vector2 (9, 3),
//			new Vector2 (8, 9)
//		};

        for (int i = 0; i < enemyPos.Length - 1; i++)
        {
            GameObject hfPrefab = ResourceManager.GetInstance.LoadPrefab(TestData.charDB [11].Prefab);
            GameObject hf       = StageManager.SharedInstance.AddToStage(parent, hfPrefab);

            hf.name = "hf" + i;

            BaseSoldier hfSoldier = hf.AddComponent <HFSoldier> ();
            BattleAgent agent     = new BattleAgent(hfSoldier, TestData.charDB [11]);
            agent.BaseSprite.FaceTo = FaceTo.Right;

            //agent.BaseSprite.SetLocalPosition (pos [i].x, pos [i].y);
            agent.BaseSprite.SetMapPosition(enemyPos [i].x, enemyPos [i].y);
            enemyList.Add(agent);

            agentDict.Add(hf.name, agent);
        }



        //boss
        GameObject prefab = ResourceManager.GetInstance.LoadPrefab(TestData.charDB [17].Prefab);
        GameObject am     = StageManager.SharedInstance.AddToStage(parent, prefab);

        am.name = "am";
        BaseSoldier amSoldier = am.AddComponent <AMSoldier> ();

        Character c = TestData.charDB [17];

        c.Speed = 3.0f;
        BattleAgent amAgent = new BattleAgent(amSoldier, c);

        amAgent.Character.HitPoint = new Vector3(0, 100, 100);

        //agent.BaseSprite.SetLocalPosition (pos [i].x, pos [i].y);
        amAgent.BaseSprite.SetMapPosition(enemyPos [2].x, enemyPos [2].y);
        enemyList.Add(amAgent);

        agentDict.Add(am.name, amAgent);
    }
Пример #15
0
        public void Solider_WhenCreatedWithDefaults_ShouldHaveSorceryStrengthOfZero()
        {
            // Arrange
            var sut = new BaseSoldier();

            // Act
            sut.AssignStatModifiers();
            var soldierSorcery = sut.SoldierStats.SorceryStrength;

            Console.WriteLine($"Basic Soldier Sorcery: {soldierSorcery}");

            // Assert
            Assert.That(soldierSorcery, Is.EqualTo(0));
        }
Пример #16
0
        public void Solider_WhenCreatedWithDefaults_ShouldHaveAttackStrengthOfTwo()
        {
            // Arrange
            var sut = new BaseSoldier();

            // Act
            sut.AssignStatModifiers();
            var soldierAttack = sut.SoldierStats.AttackStrength;

            Console.WriteLine($"Basic Soldier Attack: {soldierAttack}");

            // Assert
            Assert.That(soldierAttack, Is.EqualTo(2));
        }
Пример #17
0
        public void Solider_WhenCreatedWithDefaults_ShouldHaveBaseMagicResistanceOfThree()
        {
            // Arrange
            var sut = new BaseSoldier();

            // Act
            sut.AssignStatModifiers();
            var soldierMagicResistance = sut.SoldierStats.MagicResistance;

            Console.WriteLine($"Basic Soldier Magic Resistance: {soldierMagicResistance}");

            // Assert
            Assert.That(soldierMagicResistance, Is.EqualTo(0));
        }
Пример #18
0
        public void Solider_WhenCreatedWithDefaults_ShouldHaveBaseArmorOfZero()
        {
            // Arrange
            var sut = new BaseSoldier();

            // Act
            sut.AssignStatModifiers();
            var soldierArmor = sut.SoldierStats.ArmorResistance;

            Console.WriteLine($"Basic Soldier Armor Rating: {soldierArmor}");

            // Assert
            Assert.That(soldierArmor, Is.EqualTo(0));
        }
Пример #19
0
    public virtual void Relese()
    {
        if (m_soldier != null)
        {
            BaseSoldier bing = m_soldier.GetComponent <BaseSoldier>();
            if (m_soldier != null)
            {
                bing.Release();
            }

            Destroy(m_soldier);
            m_soldier = null;
        }

        m_isOn = false;
    }
Пример #20
0
    void AddHero2()
    {
        GameObject parent   = StageManager.SharedInstance.HeroLayer;
        GameObject odPrefab = ResourceManager.GetInstance.LoadPrefab(TestData.charDB [12].Prefab);
        GameObject od       = StageManager.SharedInstance.AddToStage(parent, odPrefab);

        BaseSoldier odSoldier = od.AddComponent <ODSoldier> ();
        BattleAgent agent     = new BattleAgent(odSoldier, TestData.charDB [12]);


        agent.BaseSprite.SetMapPosition(10, 15);
        //agent.BaseSprite.SetLocalPosition (260, -245);
        agent.BaseSprite.AddDownEffect();

        soldierList.Add(agent);

        enemyList [0].AddTarget(soldierList [0]);
        soldierList [0].AddTarget(enemyList [0]);
    }
 public void Recruit(Mobile from, BaseCreature soldier)
 {
     if (!Soldiers.Contains(soldier))
     {
         if (soldier is BaseSoldier)
         {
             BaseSoldier recruit = soldier as BaseSoldier;
             if (from == recruit.GetOwner())
             {
                 //if (Soldiers.Count + 1 <= CalculateMaxFollowers(from))
                 //{
                 Soldiers.Add(soldier);
                 //soldier.ChangeAIType(AIType.AI_Army);
                 ((BaseCreature)soldier).AI = AIType.AI_Army;
                 //soldier.Controlled = false;
                 //soldier.ControlMaster = null;
                 from.SendMessage("Another Recruit has joined the Army.", recruit.Title);
                 SetFormation(ArmyFormationEnum.Latest);
                 SetDirection(m_ArmyDirection);
                 //}
                 //else
                 /*TEMP*/
                 //soldier.Say("You have {0} soldiers already, and can only have {1}!", ArmySize, CalculateMaxFollowers(from));
                 //soldier.Say("Your army is bigger then your head!");
             }
             else
             {
                 soldier.Say("You need to hire me first!");
             }
         }
         else
         {
             soldier.Say("I am not for hire!");
         }
     }
     else
     {
         soldier.Say("Sir, I am already in the Army!");
     }
     //TargetRecruit(from);
 }
    public void SaveHiredSoldiers()
    {
        List<BaseSoldier> soldiers = new List<BaseSoldier>();
        for (int i = 0; i < UnitSlotsRO.Length; i++)
        {
            if (UnitSlotsRO[i] != null)
            {
                BaseSoldierData soldierData = UnitSlotsRO[i].UnitData;
                if (soldierData != null)
                {
                    BaseSoldier soldier = new BaseSoldier(soldierData,
                        Global.Instance.Player.City.GetSoldierUpgradesInfo(soldierData.Key).Level);
                    soldier.TemplatePlace = UnitSlotsRO[i].Place;
                    soldiers.Add(soldier); 
                }
            }
        }
        Global.Instance.CurrentMission.SelectedSoldiers = new ArrayRO<BaseSoldier>(soldiers.ToArray());

        UnitSlot[] slotTemplate = new UnitSlot[soldiers.Count];
        for (int i = 0; i < slotTemplate.Count(); i++)
            slotTemplate[i] = new UnitSlot(soldiers[i].TemplatePlace, soldiers[i].Data.Key);
        Global.Instance.Player.Heroes.Current.Data.SlotTemplate = new ArrayRO<UnitSlot>(slotTemplate);
    }
Пример #23
0
	private void StartFight() {
		PlayerResources playerResources = Global.Instance.Player.Resources;
		MissionData md = MissionsConfig.Instance.GetPlanet(EPlanetKey.PlanetA).GetMission(EMissionKey.PlanetA_Test1);
		if (playerResources.Fuel < md.FuelWinCost || playerResources.Fuel < md.FuelLoseCost ||
			playerResources.Credits < md.CreditsWinCost || playerResources.Credits < md.CreditsLoseCost ||
			playerResources.Minerals < md.MineralsWinCost || playerResources.Minerals < md.MineralsLoseCost) {
				Debug.LogWarning("Not enough resources");
				return;
		}

		BaseSoldier[] soldiers = new BaseSoldier[_hiredUnits.Count];
		for (int i = 0; i < soldiers.Length; i++) {
			soldiers[i] = new BaseSoldier(UnitsConfig.Instance.GetSoldierData(_hiredUnits[i]), Global.Instance.Player.City.GetSoldierUpgradesInfo(_hiredUnits[i]).Level);
		}

		Global.Instance.CurrentMission.PlanetKey = EPlanetKey.PlanetA;
		Global.Instance.CurrentMission.MissionKey = EMissionKey.PlanetA_Test1;
		Global.Instance.CurrentMission.SelectedSoldiers = new ArrayRO<BaseSoldier>(soldiers);

		FightManager.Setup(EFightMode.Campaign, MissionsConfig.Instance.GetPlanet(Global.Instance.CurrentMission.PlanetKey).GetMission(Global.Instance.CurrentMission.MissionKey));
		Application.LoadLevel("Fight");
	}
Пример #24
0
        private void Expand(Node parent, ref Vector3 target, BaseSoldier unit)
        {
            #if (FOUNDATION_DEBUG_PATHFINDER)
            Log.Debug("PathFinder", "Expand node at position={0}", parent.Position);
            #endif

            bool okToAdd = Close(parent);

            if (!okToAdd)
                return;

            for (int i = 0; i < 4; ++i) {
                Vector3 position = parent.Position + DIRECTIONS[i];
                AddNode(position, target, parent, unit);
            }
        }
Пример #25
0
    IEnumerator AddOD()
    {
        yield return(new WaitForSeconds(0.2f));

        //奥丁
        GameObject parent   = StageManager.SharedInstance.HeroLayer;
        GameObject odPrefab = ResourceManager.GetInstance.LoadPrefab(TestData.charDB [12].Prefab);
        GameObject od       = StageManager.SharedInstance.AddToStage(parent, odPrefab);

        od.name = "od";
        BaseSoldier odSoldier = od.AddComponent <ODSoldier> ();
        BattleAgent odAgent   = new BattleAgent(odSoldier, TestData.charDB [12]);

        odAgent.BaseSprite.SetMapPosition(soldierPos [0].x, soldierPos [0].y);
        odAgent.BaseSprite.AddDownEffect();

        soldierList.Add(odAgent);
        agentDict.Add(od.name, odAgent);

        AudioManager.SharedInstance.PlayOneShot("fly", 1.0f);



        yield return(new WaitForSeconds(0.2f));

        //绿萼

//		GameObject lePrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [13].Prefab);
//		GameObject le = StageManager.SharedInstance.AddToStage (parent, lePrefab);
//		le.name = "le";
//		BaseSoldier leSoldier = le.AddComponent<LESoldier> ();
//		BattleAgent leAgent = new BattleAgent (leSoldier, TestData.charDB [13]);
//		leAgent.BaseSprite.SetMapPosition (soldierPos [1].x, soldierPos [1].y);
//
//		leAgent.BaseSprite.AddDownEffect ();
//		soldierList.Add (leAgent);
//		agentDict.Add (le.name, leAgent);
//		AudioManager.SharedInstance.PlayOneShot ("fly", 1.0f);
//		yield return new WaitForSeconds (0.2f);

        //慕雪

        GameObject mxPrefab = ResourceManager.GetInstance.LoadPrefab(TestData.charDB [14].Prefab);
        GameObject mx       = StageManager.SharedInstance.AddToStage(parent, mxPrefab);

        mx.name = "mx";
        BaseSoldier mxSoldier = mx.AddComponent <MXSoldier> ();
        BattleAgent mxAgent   = new BattleAgent(mxSoldier, TestData.charDB [14]);


        mxAgent.BaseSprite.SetMapPosition(soldierPos [1].x, soldierPos [1].y);
        mxAgent.BaseSprite.AddDownEffect();
        soldierList.Add(mxAgent);
        agentDict.Add(mx.name, mxAgent);
        AudioManager.SharedInstance.PlayOneShot("fly", 1.0f);
        yield return(new WaitForSeconds(0.2f));

        //寒梦

        GameObject hmPrefab = ResourceManager.GetInstance.LoadPrefab(TestData.charDB [15].Prefab);
        GameObject hm       = StageManager.SharedInstance.AddToStage(parent, hmPrefab);

        hm.name = "hm";
        BaseSoldier hmSoldier = hm.AddComponent <HMSoldier> ();
        BattleAgent hmAgent   = new BattleAgent(hmSoldier, TestData.charDB [15]);

        hmAgent.BaseSprite.SetMapPosition(soldierPos [2].x, soldierPos [2].y);
        hmAgent.BaseSprite.AddDownEffect();
        soldierList.Add(hmAgent);
        agentDict.Add(hm.name, hmAgent);
        AudioManager.SharedInstance.PlayOneShot("fly", 1.0f);
        yield return(new WaitForSeconds(0.3f));

        //蓉蓉

//		GameObject rrPrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [16].Prefab);
//		GameObject rr = StageManager.SharedInstance.AddToStage (parent, rrPrefab);
//		rr.name = "rr";
//		BaseSoldier rrSoldier = rr.AddComponent<RRSoldier> ();
//		BattleAgent rrAgent = new BattleAgent (rrSoldier, TestData.charDB [16]);
//
//		rrAgent.BaseSprite.SetMapPosition (soldierPos [4].x, soldierPos [4].y);
//		rrAgent.BaseSprite.AddDownEffect ();
//		soldierList.Add (rrAgent);
//		agentDict.Add (rr.name, rrAgent);
//		AudioManager.SharedInstance.PlayOneShot ("fly", 1.0f);



//		FindTargetForHero (odAgent);

//		soldierList [0].AddTarget (enemyList [0]);
//		soldierList [1].AddTarget (enemyList [0]);
//		soldierList [2].AddTarget (enemyList [0]);
//		soldierList [3].AddTarget (enemyList [0]);
//		soldierList [4].AddTarget (enemyList [0]);


        //enemyList [0].AddTarget (rrAgent);
        //enemyList [0].AddTarget (odAgent);
        enemyList [0].AddTarget(odAgent);
        enemyList [1].AddTarget(mxAgent);
        enemyList [2].AddTarget(hmAgent);

        odAgent.AddTarget(enemyList [0]);
        mxAgent.AddTarget(enemyList [1]);
        hmAgent.AddTarget(enemyList [2]);


        //leAgent.AddTarget (enemyList [1]);

        //rrAgent.AddTarget (enemyList [0]);

//		hmAgent.IsReady = true;
//		enemyList [4].IsReady = true;

//      enemyList[4].IsReady = true;
//      mxAgent.IsReady = true;


//      leAgent.IsReady = true;
//      enemyList[1].IsReady = true;


//		        rrAgent.IsReady = true;
//		        enemyList[0].IsReady = true;


//		for (int i = 0; i < soldierList.Count; i++) {
//			soldierList [i].IsReady = true;
//		}
//
//		for (int i = 0; i < enemyList.Count; i++) {
//			enemyList [i].IsReady = true;
//		}
    }
Пример #26
0
        private Node GoTo(Vector3 start, Vector3 target, BaseSoldier unit)
        {
            #if (FOUNDATION_DEBUG_PATHFINDER)
            Log.Debug("PathFinder", "Go to (start={0}, target={1})", start, target);
            #endif
            int h1 = GetManhattanDistance(start, target);

            _closedSet = new HashSet<int>();
            _priorityQueue = new BinaryHeap<Node>(25);
            _priorityQueue.Enqueue(new Node(start, null, 0, h1));

            Node bestGuess = null;
            int heuristic = int.MaxValue;
            while (heuristic > 0 && !_priorityQueue.IsEmpty())
            {
                bestGuess = _priorityQueue.Dequeue();
                heuristic = bestGuess.Heuristic;
            #if (FOUNDATION_DEBUG_PATHFINDER)
                Log.Debug("PathFinder", "heruistic={0}, best total cost={1}", heuristic, bestGuess.GetTotalCost());
            #endif
                if (heuristic == 0)
                    break;

                Expand(bestGuess, ref target, unit);
            #if (FOUNDATION_DEBUG_PATHFINDER)
                Log.Debug("PathFinder", "queue empty={0}", _priorityQueue.IsEmpty());
            #endif
            }
            _closedSet.Clear();
            _priorityQueue.Clear();
            return bestGuess;
        }
Пример #27
0
 public int GetCostTo(Vector3 startPosition, Vector3 endPosition, BaseSoldier unit)
 {
     Node n = GoTo(startPosition, endPosition, unit);
     int cost = n.GetTotalCost();
     return cost;
 }