Example #1
0
    public BaseUnitBehaviour GetTarget(BaseUnitBehaviour unit, BaseUnitBehaviour currentTarget,
                                       ArrayRO <BaseUnitBehaviour> possibleUnits)
    {
        UnitPlace currentTargetPlace = currentTarget != null ? currentTarget.Place
            : new UnitPlace()
        {
            Range = EUnitRange.None, Position = EUnitPosition.Middle
        };
        UnitPlace nextTargetPlace = GetNextTargetPlace(unit.Place, currentTargetPlace);

        while (!nextTargetPlace.Equals(currentTargetPlace))
        {
            if (nextTargetPlace.Range != EUnitRange.None || nextTargetPlace.Position != EUnitPosition.None)
            {
                BaseUnitBehaviour nextUnit = GetPlaceBaseUnitBehaviour(possibleUnits, nextTargetPlace);
                if (nextUnit != null && !nextUnit.UnitData.IsDead)
                {
                    return(nextUnit);
                }
            }
            nextTargetPlace = GetNextTargetPlace(unit.Place, nextTargetPlace);
        }
        if (currentTarget != null)
        {
            return(currentTarget);
        }
        else
        {
            BaseUnitBehaviour nextUnit = GetPlaceBaseUnitBehaviour(possibleUnits, currentTargetPlace);
            return(nextUnit != null && !nextUnit.UnitData.IsDead ? nextUnit : null);
        }
    }
	private void SetupLoot(ArrayRO<ItemDropChance> loot) {
		float lootImageWidth = _imgLoot.transform.GetChild(0).GetComponent<RectTransform>().rect.width;

		if (loot.Length == 0) {
			_imgLoot.gameObject.SetActive(false);
		} else {
			_lootItems = new EItemKey[loot.Length];
			_lootItemImages = new Image[loot.Length];
			_lootItemImages[0] = _imgLoot;

			for (int i = 0; i < loot.Length; i++) {
				_lootItems[i] = loot[i].ItemKey;

				if (i > 0) {
					_lootItemImages[i] = (GameObject.Instantiate(_imgLoot.gameObject) as GameObject).GetComponent<Image>();
					_lootItemImages[i].transform.SetParent(_imgLoot.transform.parent, false);
					_lootItemImages[i].rectTransform.anchoredPosition = _imgLoot.rectTransform.anchoredPosition + new Vector2(i * (lootImageWidth + _offsetImageLoot), 0f);
				}

				Image lootIcon = _lootItemImages[i];
				Sprite lootIconResource = UIResourcesManager.Instance.GetResource<Sprite>(GameConstants.Paths.GetLootIconResourcePath(loot[i].ItemKey));
				if (lootIconResource != null) {
					lootIcon.sprite = lootIconResource;
				}
			}
		}
	}
    private void SetupLoot(ArrayRO <ItemDropChance> loot)
    {
        float lootImageWidth = _imgLoot.transform.GetChild(0).GetComponent <RectTransform>().rect.width;

        if (loot.Length == 0)
        {
            _imgLoot.gameObject.SetActive(false);
        }
        else
        {
            _lootItems         = new EItemKey[loot.Length];
            _lootItemImages    = new Image[loot.Length];
            _lootItemImages[0] = _imgLoot;

            for (int i = 0; i < loot.Length; i++)
            {
                _lootItems[i] = loot[i].ItemKey;

                if (i > 0)
                {
                    _lootItemImages[i] = (GameObject.Instantiate(_imgLoot.gameObject) as GameObject).GetComponent <Image>();
                    _lootItemImages[i].transform.SetParent(_imgLoot.transform.parent, false);
                    _lootItemImages[i].rectTransform.anchoredPosition = _imgLoot.rectTransform.anchoredPosition + new Vector2(i * (lootImageWidth + _offsetImageLoot), 0f);
                }

                Image  lootIcon         = _lootItemImages[i];
                Sprite lootIconResource = UIResourcesManager.Instance.GetResource <Sprite>(GameConstants.Paths.GetLootIconResourcePath(loot[i].ItemKey));
                if (lootIconResource != null)
                {
                    lootIcon.sprite = lootIconResource;
                }
            }
        }
    }
Example #4
0
    public void FindTarget(BaseUnitBehaviour unit, BaseUnitBehaviour currentTarget, ArrayRO <BaseUnitBehaviour> possibleUnits,
                           Action <BaseUnitBehaviour> onTargetFound, Action onTargetAttacked)
    {
        Reset(false);
        //UnitSet.Instance.SetUnitPositions();

        _onTargetFound    = onTargetFound;
        _onTargetAttacked = onTargetAttacked;
        _target           = UnitSet.Instance.GetTarget(unit, currentTarget, possibleUnits);
        if (_target != null)
        {
            _targetTransform = _target.transform;
        }
        if (_targetTransform == null)
        {
            Reset(false);
            State = EUnitAttackState.NoTarget;
            return;
        }
        onTargetFound(_targetTransform.gameObject.GetComponent <BaseUnitBehaviour>());
        if (State == EUnitAttackState.None || State == EUnitAttackState.NoAttack || State == EUnitAttackState.WatchTarget)
        {
            StartTargetAttack(_target);
        }
    }
Example #5
0
    public void FindTarget(BaseUnitBehaviour unit, BaseUnitBehaviour currentTarget, ArrayRO<BaseUnitBehaviour> possibleUnits,
        Action<BaseUnitBehaviour> onTargetFound, Action onTargetAttacked)
    {
        Reset(false);
        //UnitSet.Instance.SetUnitPositions();

        _onTargetFound = onTargetFound;
        _onTargetAttacked = onTargetAttacked;
        _target = UnitSet.Instance.GetTarget(unit, currentTarget, possibleUnits);
        if (_target != null)
        {
            _targetTransform = _target.transform;
        }
        if (_targetTransform == null)
        {
            Reset(false);
            State = EUnitAttackState.NoTarget;
            return;
        }
        onTargetFound(_targetTransform.gameObject.GetComponent<BaseUnitBehaviour>());
        if (State == EUnitAttackState.None || State == EUnitAttackState.NoAttack || State == EUnitAttackState.WatchTarget)
        {
            StartTargetAttack(_target);
        }
    }
Example #6
0
    public void Clear()
    {
        PlanetKey  = EPlanetKey.None;
        MissionKey = EMissionKey.None;

        SelectedSoldiers = null;
    }
Example #7
0
    protected virtual Dictionary <EUnitEqupmentSlot, EItemType[]> CreateSlotsData()
    {
        Dictionary <EUnitEqupmentSlot, EItemType[]> slotsData = new Dictionary <EUnitEqupmentSlot, EItemType[]>();
        ArrayRO <EUnitEqupmentSlot> availableSlots            = UnitsConfig.Instance.GetUnitEquipmentSlots(this);

        for (int i = 0; i < availableSlots.Length; i++)
        {
            slotsData.Add(availableSlots[i], new EItemType[0]);
        }
        return(slotsData);
    }
	public void AddHeroes(BaseHero[] heroesList) {
		if(_heroes == null) {
			_heroes = heroesList;
		} else if(heroesList.Length > 0) {
			BaseHero[] newHeroes = new BaseHero[_heroes.Length + heroesList.Length];
			Array.Copy(_heroes, newHeroes, _heroes.Length);
			for (int i = _heroes.Length, j = 0; i < newHeroes.Length; i++, j++) {
				newHeroes[i] = heroesList[j];
			}
			_heroes = newHeroes;
		}

		_heroesRO = new ArrayRO<BaseHero>(_heroes);
	}
	/// <summary>
	/// C'tor
	/// </summary>
	/// <param name="_slotsData">Data about slot: slot key && available item types for the slot</param>
	/// <param name="onEquipmentUpdate"></param>
	public UnitInventory(Dictionary<EUnitEqupmentSlot, EItemType[]> _slotsData, ArrayRO<ItemSlot> _initialItems, Action<EUnitEqupmentSlot, EItemKey, EItemKey> onEquipmentUpdate) {
		_slotsConfig = _slotsData;

		_equipment = new ItemSlot[_slotsConfig.Count];
		int i = 0;
		foreach(KeyValuePair<EUnitEqupmentSlot, EItemType[]> kvp in _slotsConfig) {
			_equipment[i] = new ItemSlot(kvp.Key, EItemKey.None);
			i++;
		}

		for (i = 0; i < _initialItems.Length; i++) {
			Equip(_initialItems[i].SlotName, _initialItems[i].ItemKey);
		}

		_onEquipmentUpdate = onEquipmentUpdate;
	}
Example #10
0
    private void OnGrenadeTargetReached(Vector3 position)
    {
        ArrayRO <BaseUnitBehaviour> opposedUnits = _caster.IsAlly ? FightManager.SceneInstance.EnemyUnits : FightManager.SceneInstance.AllyUnits;

        for (int i = 0; i < opposedUnits.Length; i++)
        {
            if (opposedUnits[i] != null && !opposedUnits[i].UnitData.IsDead)
            {
                if (Vector3.Distance(position, opposedUnits[i].CachedTransform.position) <= _skillParameters.Radius)
                {
                    opposedUnits[i].Stun(_skillParameters.Duration);
                }
            }
        }

        EndUsage();
    }
Example #11
0
    private void LoadAllyUnitsResources()
    {
        //check if this is first map
        if (_allyUnitsGraphicsResources.Count > 0)
        {
            return;
        }

        ArrayRO <BaseSoldier> playerSoldiersList = Global.Instance.CurrentMission.SelectedSoldiers;

        BaseUnitData      bud = null;
        BaseUnitBehaviour bub = null;

        //load unique soldiers
        for (int i = 0; i < playerSoldiersList.Length; i++)
        {
            if (_allyUnitsGraphicsResources.ContainsKey(playerSoldiersList[i].Data.Key))
            {
                continue;
            }

            bud = UnitsConfig.Instance.GetSoldierData(playerSoldiersList[i].Data.Key);
            if (bud != null && !bud.PrefabName.Equals(string.Empty))
            {
                bub = LoadUnitResource <BaseUnitBehaviour>(string.Format("{0}/{1}", GameConstants.Paths.UNIT_RESOURCES, bud.PrefabName));
                _allyUnitsGraphicsResources.Add(playerSoldiersList[i].Data.Key, bub);
            }
            else
            {
                Debug.LogError("Can't load unit graphics: " + playerSoldiersList[i].Data.Key);
            }
        }

        //load hero
        BaseHero playerHero = Global.Instance.Player.Heroes.Current;

        if (playerHero == null || playerHero.Data.PrefabName.Equals(string.Empty))
        {
            Debug.LogError("Can't load unit graphics for player hero");
        }

        bub = LoadUnitResource <BaseUnitBehaviour>(string.Format("{0}/{1}", GameConstants.Paths.UNIT_RESOURCES, playerHero.Data.PrefabName));
        _allyUnitsGraphicsResources.Add(playerHero.Data.Key, bub);
    }
Example #12
0
    public ArrayRO <EUnitEqupmentSlot> GetUnitEquipmentSlots(BaseUnit unit)
    {
        if (_heroEquipmentSlotsRO == null)
        {
            _heroEquipmentSlotsRO = new ArrayRO <EUnitEqupmentSlot>(_heroEquipmentSlots);
            _heroEquipmentSlots   = null;
        }
        if (_soldierEquipmentSlotsRO == null)
        {
            _soldierEquipmentSlotsRO = new ArrayRO <EUnitEqupmentSlot>(_soldierEquipmentSlots);
            _soldierEquipmentSlots   = null;
        }

        if (unit is BaseHero)
        {
            return(_heroEquipmentSlotsRO);
        }
        return(_soldierEquipmentSlotsRO);
    }
Example #13
0
    private void InstantiateAllyUnits()
    {
        //check if this is first map
        if (_allyUnits != null)
        {
            return;
        }

        //TODO: setup inventory

        ArrayRO <BaseSoldier> playerSoldiersList = Global.Instance.CurrentMission.SelectedSoldiers;

        BaseUnitBehaviour[] unitsList = new BaseUnitBehaviour[playerSoldiersList.Length + 1];
        BaseUnitBehaviour   bub       = null;

        //instantiate soldiers
        for (int i = 0; i < playerSoldiersList.Length; i++)
        {
            if (!playerSoldiersList[i].IsDead)
            {
                bub = (GameObject.Instantiate(_allyUnitsGraphicsResources[playerSoldiersList[i].Data.Key].gameObject) as GameObject).GetComponent <BaseUnitBehaviour>();
                bub.gameObject.name = "Ally_" + playerSoldiersList[i] + " (" + i + ")";
                unitsList[i]        = bub;

                LoadItemsResources(_allyItemsGraphicsResources, playerSoldiersList[i].Data.Key, bub.ModelView, playerSoldiersList[i].Inventory.GetItemInSlot(EUnitEqupmentSlot.Weapon_RHand), playerSoldiersList[i].Inventory.GetItemInSlot(EUnitEqupmentSlot.Weapon_LHand), playerSoldiersList[i].Inventory.GetItemInSlot(EUnitEqupmentSlot.Armor));
            }
        }

        //instantiate player
        BaseHero playerHero = Global.Instance.Player.Heroes.Current;

        if (!playerHero.IsDead)
        {
            bub = (GameObject.Instantiate(_allyUnitsGraphicsResources[playerHero.Data.Key].gameObject) as GameObject).GetComponent <BaseUnitBehaviour>();
            bub.gameObject.name             = "Ally_" + playerHero.Data.Key;
            unitsList[unitsList.Length - 1] = bub;

            LoadItemsResources(_allyItemsGraphicsResources, playerHero.Data.Key, bub.ModelView, playerHero.Inventory.GetItemInSlot(EUnitEqupmentSlot.Weapon_RHand), playerHero.Inventory.GetItemInSlot(EUnitEqupmentSlot.Weapon_LHand), playerHero.Inventory.GetItemInSlot(EUnitEqupmentSlot.Armor));
        }

        //save
        _allyUnits = new ArrayRO <BaseUnitBehaviour>(unitsList);
    }
Example #14
0
    public void AddHeroes(BaseHero[] heroesList)
    {
        if (_heroes == null)
        {
            _heroes = heroesList;
        }
        else if (heroesList.Length > 0)
        {
            BaseHero[] newHeroes = new BaseHero[_heroes.Length + heroesList.Length];
            Array.Copy(_heroes, newHeroes, _heroes.Length);
            for (int i = _heroes.Length, j = 0; i < newHeroes.Length; i++, j++)
            {
                newHeroes[i] = heroesList[j];
            }
            _heroes = newHeroes;
        }

        _heroesRO = new ArrayRO <BaseHero>(_heroes);
    }
Example #15
0
    protected virtual void RecalculateParamsInternal()
    {
        HealthPoints = _data.BaseHealthPoints;
        Damage       = _data.BaseDamage;

        //AR = _data.BaseAR;
        //AttackSpeed = _data.BaseAttackSpeed;

        //Armor = _data.BaseArmor;
        //CritChance = _data.BaseCritChance;
        //CritDamageMultiplier = _data.BaseCritDamageMultiplier;

        //levels bonuses
        SoldierUpgrade soldierUpgradesData = UnitsConfig.Instance.GetSoldierUpgrades(_data.Key);

        if (soldierUpgradesData != null)
        {
            SoldierUpgradeLevel upgradesLevelData = UnitsConfig.Instance.GetSoldierUpgrades(_data.Key).GetTotalLevelUpgrades(_level);
            Damage += upgradesLevelData.ModifierDamage;
        }

        //equipment bonuses
        ArrayRO <EUnitEqupmentSlot> equipmentSlots = UnitsConfig.Instance.GetUnitEquipmentSlots(this);
        BaseItem itemData = null;

        for (int i = 0; i < equipmentSlots.Length; i++)
        {
            itemData = ItemsConfig.Instance.GetItem(Inventory.GetItemInSlot(i));
            if (itemData != null)
            {
                HealthPoints += itemData.ModHealth;
                Damage       += itemData.ModDamage;

                //Armor += itemData.ModArmor;
                //AttackRange += itemData.ModDamageRange;
                //AttackSpeed += itemData.ModDamageSpeed;
                //CritChance += itemData.ModCritChance;
                //CritDamageMultiplier = itemData.ModCritDamageMultiplier;
            }
        }
        //ArmorDamageAbsorb = Mathf.CeilToInt(UnitsConfig.Instance.DamageReducePerOneArmor * Armor);
    }
Example #16
0
    protected override Dictionary <EUnitEqupmentSlot, EItemType[]> CreateSlotsData()
    {
        BaseHeroData heroData = base._data as BaseHeroData;
        Dictionary <EUnitEqupmentSlot, EItemType[]> slotsData = new Dictionary <EUnitEqupmentSlot, EItemType[]>();
        ArrayRO <EUnitEqupmentSlot> availableSlots            = UnitsConfig.Instance.GetUnitEquipmentSlots(this);

        for (int i = 0; i < availableSlots.Length; i++)
        {
            slotsData.Add(availableSlots[i], new EItemType[0]);
            for (int j = 0; j < heroData.AvailableItemTypes.Length; j++)
            {
                if (heroData.AvailableItemTypes[j].SlotKey == availableSlots[i])
                {
                    slotsData[availableSlots[i]] = heroData.AvailableItemTypes[j].AvailableItemTypes.DataCopy;
                    break;
                }
            }
        }
        return(slotsData);
    }
Example #17
0
    /// <summary>
    /// C'tor
    /// </summary>
    /// <param name="_slotsData">Data about slot: slot key && available item types for the slot</param>
    /// <param name="onEquipmentUpdate"></param>
    public UnitInventory(Dictionary <EUnitEqupmentSlot, EItemType[]> _slotsData, ArrayRO <ItemSlot> _initialItems, Action <EUnitEqupmentSlot, EItemKey, EItemKey> onEquipmentUpdate)
    {
        _slotsConfig = _slotsData;

        _equipment = new ItemSlot[_slotsConfig.Count];
        int i = 0;

        foreach (KeyValuePair <EUnitEqupmentSlot, EItemType[]> kvp in _slotsConfig)
        {
            _equipment[i] = new ItemSlot(kvp.Key, EItemKey.None);
            i++;
        }

        for (i = 0; i < _initialItems.Length; i++)
        {
            Equip(_initialItems[i].SlotName, _initialItems[i].ItemKey);
        }

        _onEquipmentUpdate = onEquipmentUpdate;
    }
Example #18
0
    private BaseUnitBehaviour GetFarthestOpponent()
    {
        BaseUnitBehaviour           result       = null;
        ArrayRO <BaseUnitBehaviour> opposedUnits = _caster.IsAlly ? FightManager.SceneInstance.EnemyUnits : FightManager.SceneInstance.AllyUnits;

        for (int i = 0; i < opposedUnits.Length; i++)
        {
            if (opposedUnits[i] != null && !opposedUnits[i].UnitData.IsDead)
            {
                if (result == null)
                {
                    result = opposedUnits[i];
                }
                else if (Vector3.Distance(_caster.CachedTransform.position, opposedUnits[i].CachedTransform.position) > Vector3.Distance(_caster.CachedTransform.position, result.CachedTransform.position))
                {
                    result = opposedUnits[i];
                }
            }
        }
        return(result);
    }
    private void OnUnitAttack(BaseUnitBehaviour attacker, BaseUnitBehaviour target)
    {
        if (attacker == _caster)
        {
            AttackInfo attackInfo = _caster.UnitData.GetAttackInfo(true);            //, false);			//aoe damage
            ArrayRO <BaseUnitBehaviour> opposedUnits = _caster.IsAlly ? FightManager.SceneInstance.EnemyUnits : FightManager.SceneInstance.AllyUnits;
            for (int i = 0; i < opposedUnits.Length; i++)
            {
                if (opposedUnits[i] != null && !opposedUnits[i].UnitData.IsDead && Vector3.Distance(_caster.CachedTransform.position, opposedUnits[i].CachedTransform.position) <= _skillParameters.Radius)
                {
                    opposedUnits[i].UnitData.ApplyDamage(attackInfo);
                }
            }

            _shotsLeft--;
            if (_shotsLeft == 0)
            {
                EndUsage();
            }
        }
    }
Example #20
0
    private void InstantiateEnemyUnits(MissionMapData mapData)
    {
        //TODO: setup inventory

        BaseUnitBehaviour[] unitsList = new BaseUnitBehaviour[mapData.Units.Length];

        BaseUnitData      bud = null;
        BaseUnitBehaviour bub = null;

        //instantiate soldiers
        for (int i = 0; i < mapData.Units.Length; i++)
        {
            bub = (GameObject.Instantiate(_enemyUnitsGraphicsResources[mapData.Units[i]].gameObject) as GameObject).GetComponent <BaseUnitBehaviour>();
            bub.gameObject.name = "Enemy_" + mapData.Units[i] + " (" + i + ")";
            unitsList[i]        = bub;

            bud = UnitsConfig.Instance.GetUnitData(mapData.Units[i]);
            //LoadItemsResources(_enemyItemsGraphicsResources, mapData.Units[i], bub.ModelView, bud.GetBaseItemInSlot(EUnitEqupmentSlot.Weapon_RHand), bud.GetBaseItemInSlot(EUnitEqupmentSlot.Weapon_LHand), bud.GetBaseItemInSlot(EUnitEqupmentSlot.Armor));
        }

        //save
        _enemyUnits = new ArrayRO <BaseUnitBehaviour>(unitsList);
    }
Example #21
0
    private void DestroyInstances(bool fullUnload)
    {
        //destroy ally units
        if (fullUnload && _allyUnits != null)
        {
            for (int i = 0; i < _allyUnits.Length; i++)
            {
                if (_allyUnits[i] != null)
                {
                    GameObject.Destroy(_allyUnits[i].gameObject);
                }
            }
            _allyUnits = null;
        }

        //destroy enemy units
        if (_enemyUnits != null)
        {
            for (int i = 0; i < _enemyUnits.Length; i++)
            {
                if (_enemyUnits[i] != null)
                {
                    GameObject.Destroy(_enemyUnits[i].gameObject);
                }
            }
            _enemyUnits = null;
        }

        if (_backgroundResource != null)
        {
            if (FightManager.SceneInstance != null && FightManager.SceneInstance.UI != null && FightManager.SceneInstance.UI.ImgMapBackground != null)
            {
                FightManager.SceneInstance.UI.ImgMapBackground.sprite = null;
            }
        }
    }
Example #22
0
	public void Clear() {
		PlanetKey = EPlanetKey.None;
		MissionKey = EMissionKey.None;

		SelectedSoldiers = null;
	}
Example #23
0
 List<BaseUnitBehaviour>[] GetRangeUnits(ArrayRO<BaseUnitBehaviour> units)
 {
     List<BaseUnitBehaviour>[] rangeUnits = new List<BaseUnitBehaviour>[3] { new List<BaseUnitBehaviour>(),
         new List<BaseUnitBehaviour>(), new List<BaseUnitBehaviour>() };
     List<BaseUnitBehaviour> heroes = rangeUnits[FirstZoneIndex];
     List<BaseUnitBehaviour> remoteUnits = rangeUnits[SecondZoneIndex];
     List<BaseUnitBehaviour> nearUnits = rangeUnits[ThirdZoneIndex];
     for (int i = 0; i < units.Length; i++)
     {
         BaseUnitBehaviour unit = units[i];
         if (unit != null && unit.UnitData != null)
         {
             EUnitPosition position = unit.Place.Position;
             if (UnitsConfig.Instance.IsHero(unit.UnitData.Data.Key))
             {
                 if (heroes.Count < 3)
                     heroes.Add(unit);
                 else if (remoteUnits.Count < 3)
                 {
                     unit.Place = new UnitPlace() { Range = EUnitRange.Ranged, Position = position };
                     remoteUnits.Add(unit);
                 }
                 else if (nearUnits.Count < 3)
                 {
                     unit.Place = new UnitPlace() { Range = EUnitRange.Melee, Position = position };
                     nearUnits.Add(unit);
                 }
             }
             else
             {
                 EUnitRange range = unit.UnitData.TemplatePlace.Range != EUnitRange.None
                     ? unit.UnitData.TemplatePlace.Range : unit.UnitData.Data.BaseRange;
                 if (range == EUnitRange.Ranged)
                 {
                     if (remoteUnits.Count < 3)
                     {
                         unit.Place = new UnitPlace() { Range = EUnitRange.Ranged, Position = position };
                         remoteUnits.Add(unit);
                     }
                     else if (nearUnits.Count < 3)
                     {
                         unit.Place = new UnitPlace() { Range = EUnitRange.Melee, Position = position };
                         nearUnits.Add(unit);
                     }
                 }
                 else if (range == EUnitRange.Melee)
                 {
                     if (nearUnits.Count < 3)
                     {
                         unit.Place = new UnitPlace() { Range = EUnitRange.Melee, Position = position };
                         nearUnits.Add(unit);
                     }
                     else if (remoteUnits.Count < 3)
                     {
                         unit.Place = new UnitPlace() { Range = EUnitRange.Ranged, Position = position };
                         remoteUnits.Add(unit);
                     }
                 }
             }
         }
     }
     return rangeUnits;
 }
Example #24
0
 public BaseUnitBehaviour GetTarget(BaseUnitBehaviour unit, BaseUnitBehaviour currentTarget, 
     ArrayRO<BaseUnitBehaviour> possibleUnits)
 {
     UnitPlace currentTargetPlace = currentTarget != null ? currentTarget.Place
         : new UnitPlace() { Range = EUnitRange.None, Position = EUnitPosition.Middle };
     UnitPlace nextTargetPlace = GetNextTargetPlace(unit.Place, currentTargetPlace);
     while (!nextTargetPlace.Equals(currentTargetPlace))
     {
         if (nextTargetPlace.Range != EUnitRange.None || nextTargetPlace.Position != EUnitPosition.None)
         {
             BaseUnitBehaviour nextUnit = GetPlaceBaseUnitBehaviour(possibleUnits, nextTargetPlace);
             if (nextUnit != null && !nextUnit.UnitData.IsDead)
                 return nextUnit;
         }
         nextTargetPlace = GetNextTargetPlace(unit.Place, nextTargetPlace);
     }
     if (currentTarget != null)
         return currentTarget;
     else
     {
         BaseUnitBehaviour nextUnit = GetPlaceBaseUnitBehaviour(possibleUnits, currentTargetPlace);
         return nextUnit != null && !nextUnit.UnitData.IsDead ? nextUnit : null;
     }
 }
Example #25
0
 BaseUnitBehaviour GetPlaceBaseUnitBehaviour(ArrayRO<BaseUnitBehaviour> units, UnitPlace place)
 {
     for (int i = 0; i < units.Length; i++)
     {
         BaseUnitBehaviour possibleUnit = units[i];
         if (possibleUnit.Place.Range == place.Range && possibleUnit.Place.Position == place.Position)
             return possibleUnit;
     }
     return null;
 }
Example #26
0
 public ItemSlotConfig()
 {
     _availableItemTypesRO = new ArrayRO <EItemType>(_availableItemTypes);
     _availableItemTypes   = null;
 }
	public ItemSlotConfig() {
		_availableItemTypesRO = new ArrayRO<EItemType>(_availableItemTypes);
		_availableItemTypes = null;
	}
Example #28
0
    List <BaseUnitBehaviour>[] GetRangeUnits(ArrayRO <BaseUnitBehaviour> units)
    {
        List <BaseUnitBehaviour>[] rangeUnits = new List <BaseUnitBehaviour>[3] {
            new List <BaseUnitBehaviour>(),
            new List <BaseUnitBehaviour>(), new List <BaseUnitBehaviour>()
        };
        List <BaseUnitBehaviour> heroes      = rangeUnits[FirstZoneIndex];
        List <BaseUnitBehaviour> remoteUnits = rangeUnits[SecondZoneIndex];
        List <BaseUnitBehaviour> nearUnits   = rangeUnits[ThirdZoneIndex];

        for (int i = 0; i < units.Length; i++)
        {
            BaseUnitBehaviour unit = units[i];
            if (unit != null && unit.UnitData != null)
            {
                EUnitPosition position = unit.Place.Position;
                if (UnitsConfig.Instance.IsHero(unit.UnitData.Data.Key))
                {
                    if (heroes.Count < 3)
                    {
                        heroes.Add(unit);
                    }
                    else if (remoteUnits.Count < 3)
                    {
                        unit.Place = new UnitPlace()
                        {
                            Range = EUnitRange.Ranged, Position = position
                        };
                        remoteUnits.Add(unit);
                    }
                    else if (nearUnits.Count < 3)
                    {
                        unit.Place = new UnitPlace()
                        {
                            Range = EUnitRange.Melee, Position = position
                        };
                        nearUnits.Add(unit);
                    }
                }
                else
                {
                    EUnitRange range = unit.UnitData.TemplatePlace.Range != EUnitRange.None
                        ? unit.UnitData.TemplatePlace.Range : unit.UnitData.Data.BaseRange;
                    if (range == EUnitRange.Ranged)
                    {
                        if (remoteUnits.Count < 3)
                        {
                            unit.Place = new UnitPlace()
                            {
                                Range = EUnitRange.Ranged, Position = position
                            };
                            remoteUnits.Add(unit);
                        }
                        else if (nearUnits.Count < 3)
                        {
                            unit.Place = new UnitPlace()
                            {
                                Range = EUnitRange.Melee, Position = position
                            };
                            nearUnits.Add(unit);
                        }
                    }
                    else if (range == EUnitRange.Melee)
                    {
                        if (nearUnits.Count < 3)
                        {
                            unit.Place = new UnitPlace()
                            {
                                Range = EUnitRange.Melee, Position = position
                            };
                            nearUnits.Add(unit);
                        }
                        else if (remoteUnits.Count < 3)
                        {
                            unit.Place = new UnitPlace()
                            {
                                Range = EUnitRange.Ranged, Position = position
                            };
                            remoteUnits.Add(unit);
                        }
                    }
                }
            }
        }
        return(rangeUnits);
    }