Example #1
0
    public override void Release()
    {
        base.Release();

        _WaitTroops.Clear();
        _Troops.Clear();
        _WaitForUseMapSoldierInfos    = null;
        _CurrentUsedMapSoldierInfos   = null;
        _WatiForUseMapSoldierInfoLast = null;
    }
Example #2
0
    private MapSoldierInfo GetMapSoldierInfo()
    {
        MapSoldierInfo mapSoldierInfo = null;

        if (_WaitForUseMapSoldierInfos == null)
        {
            mapSoldierInfo = new MapSoldierInfo();
        }
        else
        {
            mapSoldierInfo             = _WaitForUseMapSoldierInfos;
            _WaitForUseMapSoldierInfos = _WaitForUseMapSoldierInfos.nextNode;
            if (_WaitForUseMapSoldierInfos == null)
            {
                _WatiForUseMapSoldierInfoLast = null;
            }
            mapSoldierInfo.nextNode = null;
        }

        return(mapSoldierInfo);
    }
Example #3
0
    public override void Update()
    {
        if (_Troops.Count <= 0)
        {
            if (_IsNotClearSoldiers)
            {
                facade.SendNotification(GlobalSetting.Msg_MapUpdateSoldiersPositon, null);
                _IsNotClearSoldiers = false;
            }
            return;
        }

        _IsNotClearSoldiers = true;
        if (battleManager.isBattleOver)
        {
            return;
        }
        int total;
        AStarPathFindingAgent agent;

        System.Random random = new System.Random();
        //出兵
        for (int i = 0; i < _Troops.Count; i++)
        {
            Troop troop = _Troops[i];
            if (troop.amount <= 0)
            {
                continue;
            }
            total = troop.start.soldierNum - _CreateCountPerFrame < 0 ? troop.start.soldierNum : _CreateCountPerFrame;
            total = troop.amount > total ? total : troop.amount;
            troop.start.soldierNum -= total;
            troop.amount           -= total;
            _Troops[i]              = troop;

            for (int j = 0; j < total; j++)
            {
                //创建指定数量的兵
                GameObject soldier = PoolManager.Instance.GetObject("Soldier", LoadAssetType.Normal, _SoldierParent);
                soldier.transform.position = troop.start.postion + Vector3.left * random.Next(-100, 100) / 200f + Vector3.forward * random.Next(-100, 100) / 200f;
                agent = soldier.GetComponent <AStarPathFindingAgent>();
                agent.SetTarget(troop.end.postion);
                agent.StopDistance = troop.end.radius + 0.5f;
                agent.AddCompleteListener(() =>
                {
                    //士兵到达处理
                    SoldierArrivedHandler(troop, soldier);
                    //TODO 处理占领,失败,胜利
                    //if(troop.soldiers.Count <= 0 && troop.amount <= 0) _WaitTroops.Add(troop);
                });
                troop.soldiers.Add(soldier);
            }
        }

        //移除
        for (int i = _Troops.Count - 1; i >= 0; i--)
        {
            if (_Troops[i].amount <= 0 && _Troops[i].soldiers.Count <= 0)
            {
                _WaitTroops.Add(_Troops[i]);
                _Troops.RemoveAt(i);
            }
        }

        //回收士兵链表
        if (_CurrentUsedMapSoldierInfos.nextNode != null)
        {
            if (_WatiForUseMapSoldierInfoLast == null)
            {
                _WatiForUseMapSoldierInfoLast = _CurrentUsedMapSoldierInfos.nextNode;
            }
            else
            {
                _WatiForUseMapSoldierInfoLast.nextNode = _CurrentUsedMapSoldierInfos.nextNode;
            }

            if (_WaitForUseMapSoldierInfos == null)
            {
                _WaitForUseMapSoldierInfos = _WatiForUseMapSoldierInfoLast;
            }

            if (_WatiForUseMapSoldierInfoLast.nextNode != null)
            {
                MapSoldierInfo mapSoldierInfo = _WatiForUseMapSoldierInfoLast;
                while (mapSoldierInfo.nextNode != null)
                {
                    mapSoldierInfo = mapSoldierInfo.nextNode;
                }
                _WatiForUseMapSoldierInfoLast = mapSoldierInfo;
            }
        }

        _CurrentUsedMapSoldierInfos.nextNode = null;
        MapSoldierInfo nextNode = _CurrentUsedMapSoldierInfos;

        //发送小地图士兵位置信息
        for (int i = 0; i < _Troops.Count; i++)
        {
            for (int j = 0; j < _Troops[i].soldiers.Count; j++)
            {
                nextNode.nextNode = GetMapSoldierInfo();
                nextNode          = nextNode.nextNode;

                nextNode.coloerIndex = _Troops[i].starter.colorIndex;
                nextNode.position    = _Troops[i].soldiers[j].transform.localPosition;
            }
        }

        if (_CurrentUsedMapSoldierInfos.nextNode != null)
        {
            facade.SendNotification(GlobalSetting.Msg_MapUpdateSoldiersPositon, _CurrentUsedMapSoldierInfos.nextNode);
        }
    }
Example #4
0
 public override void Initialize()
 {
     _SoldierParent = GameObject.FindGameObjectWithTag(GlobalSetting.TAG_SOLDIERS_PARENT_NAME).transform;
     _BuildingProxy = facade.RetrieveProxy(BuildingVOProxy.NAME) as BuildingVOProxy;
     _CurrentUsedMapSoldierInfos = new MapSoldierInfo();
 }