Ejemplo n.º 1
0
    public BaseUnitBehaviour GetNextAttackUnit(BaseUnitBehaviour attackUnit)
    {
        bool      currentIsAllyAttack = attackUnit != null && attackUnit.IsAlly;
        UnitPlace currentAttackPlace  = attackUnit != null ? attackUnit.Place
            : new UnitPlace()
        {
            Range = EUnitRange.Melee, Position = EUnitPosition.Middle
        };

        bool      nextIsAllyAttack = !currentIsAllyAttack;
        UnitPlace nextAttackPlace  = nextIsAllyAttack && attackUnit != null
            ? GetNextAttackPlace(currentAttackPlace) : currentAttackPlace;

        while (!(nextIsAllyAttack == currentIsAllyAttack && nextAttackPlace.Equals(currentAttackPlace)))
        {
            if (nextAttackPlace.Range != EUnitRange.None || nextAttackPlace.Position != EUnitPosition.None)
            {
                BaseUnitBehaviour nextUnit = GetPlaceBaseUnitBehaviour(nextIsAllyAttack
                    ? FightManager.SceneInstance.AllyUnits : FightManager.SceneInstance.EnemyUnits, nextAttackPlace);
                if (nextUnit != null && !nextUnit.UnitData.IsDead)
                {
                    return(nextUnit);
                }
            }
            nextIsAllyAttack = attackUnit != null ? !nextIsAllyAttack : nextIsAllyAttack;
            nextAttackPlace  = nextIsAllyAttack ? GetNextAttackPlace(nextAttackPlace) : nextAttackPlace;
            if (attackUnit == null && nextIsAllyAttack.Equals(currentAttackPlace))
            {
                nextIsAllyAttack = false;
            }
        }
        return(null);
    }
Ejemplo n.º 2
0
	public override void Use(BaseUnitBehaviour caster) {
		//check caster is alive
		if (caster.UnitData.IsDead) {
			return;
		}

		//check aggro price
		BaseHero heroData = caster.UnitData as BaseHero;
		if (heroData.AggroCrystals < _skillParameters.AggroCrystalsCost) {
			return;
		}

		//check cooldown
		if (_lastUsageTime != 0f && Time.time - _lastUsageTime < _skillParameters.CooldownTime) {
			return;
		}

		//check already in use
		if (_isUsing) {
			return;
		}

		base.Use(caster);
		StartUsage();
	}
Ejemplo n.º 3
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);
        }
    }
	public override void Use(BaseUnitBehaviour caster) {
		//check caster is alive
		if (caster.UnitData.IsDead) {
			return;
		}

		//check aggro price
		if ((caster.UnitData as BaseHero).AggroCrystals < _skillParameters.AggroCrystalsCost) {
			return;
		}

        //check target locked
        if (caster.UnitAttack.State != EUnitAttackState.WatchTarget)
        //if (caster.UnitPathfinder.CurrentState != EUnitMovementState.WatchEnemy)
                return;

		//check cooldown
		if (_lastUsageTime != 0f && Time.time - _lastUsageTime < _skillParameters.CooldownTime) {
			return;
		}

		//check already in use
		if (_isUsing) {
			return;
		}

		base.Use(caster);

		StartUsage();
	}
Ejemplo n.º 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);
        }
    }
Ejemplo n.º 6
0
    public BaseUnitBehaviour GetNextAttackUnit(BaseUnitBehaviour attackUnit)
    {
        bool currentIsAllyAttack =  attackUnit != null && attackUnit.IsAlly;
        UnitPlace currentAttackPlace = attackUnit != null ? attackUnit.Place
            : new UnitPlace() { Range = EUnitRange.Melee, Position = EUnitPosition.Middle };

        bool nextIsAllyAttack = !currentIsAllyAttack;
        UnitPlace nextAttackPlace = nextIsAllyAttack && attackUnit != null
            ? GetNextAttackPlace(currentAttackPlace) : currentAttackPlace;

        while (!(nextIsAllyAttack == currentIsAllyAttack && nextAttackPlace.Equals(currentAttackPlace)))
        {
            if (nextAttackPlace.Range != EUnitRange.None || nextAttackPlace.Position != EUnitPosition.None)
            {
                BaseUnitBehaviour nextUnit = GetPlaceBaseUnitBehaviour(nextIsAllyAttack
                    ? FightManager.SceneInstance.AllyUnits : FightManager.SceneInstance.EnemyUnits, nextAttackPlace);
                if (nextUnit != null && !nextUnit.UnitData.IsDead)
                    return nextUnit;
            }
            nextIsAllyAttack = attackUnit != null ? !nextIsAllyAttack : nextIsAllyAttack;
            nextAttackPlace = nextIsAllyAttack ? GetNextAttackPlace(nextAttackPlace) : nextAttackPlace;
            if (attackUnit == null && nextIsAllyAttack.Equals(currentAttackPlace))
                nextIsAllyAttack = false;
        }
        return null;
    }
Ejemplo n.º 7
0
    public override void Use(BaseUnitBehaviour caster)
    {
        //check caster is alive
        if (caster.UnitData.IsDead)
        {
            return;
        }

        //check aggro price
        BaseHero heroData = caster.UnitData as BaseHero;

        if (heroData.AggroCrystals < _skillParameters.AggroCrystalsCost)
        {
            return;
        }

        //check cooldown
        if (_lastUsageTime != 0f && Time.time - _lastUsageTime < _skillParameters.CooldownTime)
        {
            return;
        }

        //check already in use
        if (_isUsing)
        {
            return;
        }

        base.Use(caster);
        StartUsage();
    }
Ejemplo n.º 8
0
    void SetZonePositions(List <BaseUnitBehaviour> units, float x, float minZ, float maxZ)
    {
        if (units.Count == 0)
        {
            return;
        }
        units.Sort();
        if (units.Count > 3)
        {
            units = units.GetRange(0, 3);
        }
        BaseUnitBehaviour firstUnit = units[0];

        firstUnit.SetPosition(new Vector3(x, 0, (maxZ + minZ) / 2));
        firstUnit.SetPlace(firstUnit.Place.Range, EUnitPosition.Middle);
        if (units.Count > 1)
        {
            BaseUnitBehaviour secondUnit = units[1];
            secondUnit.SetPosition(new Vector3(x, 0, maxZ - (maxZ - minZ) / 6));
            secondUnit.SetPlace(secondUnit.Place.Range, EUnitPosition.Top);
            if (units.Count > 2)
            {
                BaseUnitBehaviour thirdUnit = units[2];
                thirdUnit.SetPosition(new Vector3(x, 0, minZ + (maxZ - minZ) / 6));
                thirdUnit.SetPlace(thirdUnit.Place.Range, EUnitPosition.Bottom);
            }
        }
    }
Ejemplo n.º 9
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);
        }
    }
Ejemplo n.º 10
0
    private void LoadEnemyUnitsResources(MissionMapData mapData)
    {
        BaseUnitData      bud = null;
        BaseUnitBehaviour bub = null;

        //load unique units
        for (int i = 0; i < mapData.Units.Length; i++)
        {
            if (_enemyUnitsGraphicsResources.ContainsKey(mapData.Units[i]))
            {
                continue;
            }

            bud = UnitsConfig.Instance.GetUnitData(mapData.Units[i]);
            if (bud != null && !bud.PrefabName.Equals(string.Empty))
            {
                bub = LoadUnitResource <BaseUnitBehaviour>(string.Format("{0}/{1}", GameConstants.Paths.UNIT_RESOURCES, bud.PrefabName));
                _enemyUnitsGraphicsResources.Add(mapData.Units[i], bub);
            }
            else
            {
                Debug.LogError("Can't load unit graphics: " + mapData.Units[i]);
            }
        }
    }
Ejemplo n.º 11
0
	public void LogDamage(BaseUnitBehaviour attacker, BaseUnitBehaviour target) {
		GetAttacksList(attacker).Add(new UnitDamageInfo(attacker.UnitData.Data.Key, target.UnitData.Data.Key, attacker.UnitData.Damage));

		//WARNING! temp info
		Debug.Log(attacker.gameObject.tag + " unit " + attacker.UnitData.Data.Key + " (" + attacker.name
            + ") attacks " + target.gameObject.tag + " unit " + target.UnitData.Data.Key + " (" + target.name
            + ") for " + attacker.UnitData.Damage + " damage");
	}
	private void OnAttack(BaseUnitBehaviour attacker, BaseUnitBehaviour target) {
		if (attacker == _caster) {
			_particleInstance.transform.localPosition = _particleInstance.transform.parent.InverseTransformPoint(target.transform.position) + new Vector3(0f, target.ModelView.ModelHeight * 0.5f, 0f);
			_particleInstance.gameObject.SetActive(true);
			_particleInstance.Simulate(0f);
			_particleInstance.Play(true);
		}
	}
	public void Run(BaseUnitBehaviour caster) {
		_caster = caster;
		transform.SetParent(_caster.transform);
		transform.localPosition = Vector3.zero;

		_caster.ModelView.UpdateProjectileColor(_projectilesColor);

		EventsAggregator.Fight.AddListener<BaseUnitBehaviour, BaseUnitBehaviour>(EFightEvent.PerformAttack, OnAttack);
	}
Ejemplo n.º 14
0
    public void LogDamage(BaseUnitBehaviour attacker, BaseUnitBehaviour target)
    {
        GetAttacksList(attacker).Add(new UnitDamageInfo(attacker.UnitData.Data.Key, target.UnitData.Data.Key, attacker.UnitData.Damage));

        //WARNING! temp info
        Debug.Log(attacker.gameObject.tag + " unit " + attacker.UnitData.Data.Key + " (" + attacker.name
                  + ") attacks " + target.gameObject.tag + " unit " + target.UnitData.Data.Key + " (" + target.name
                  + ") for " + attacker.UnitData.Damage + " damage");
    }
	public void OnDestroy() {
		_caster = null;

		if (_particleInstance != null) {
			GameObject.Destroy(_particleInstance.gameObject);
			_particleInstance = null;
		}

		EventsAggregator.Fight.RemoveListener<BaseUnitBehaviour, BaseUnitBehaviour>(EFightEvent.PerformAttack, OnAttack);
	}
    public void Run(BaseUnitBehaviour caster)
    {
        _caster = caster;
        transform.SetParent(_caster.transform);
        transform.localPosition = Vector3.zero;

        _caster.ModelView.UpdateProjectileColor(_projectilesColor);

        EventsAggregator.Fight.AddListener <BaseUnitBehaviour, BaseUnitBehaviour>(EFightEvent.PerformAttack, OnAttack);
    }
Ejemplo n.º 17
0
 private void OnTargetDeath()
 {
     for (int i = 0; i < UnitData.ActiveSkills.ActiveSkills.Count; i++)
     {
         UnitData.ActiveSkills.ActiveSkills[i].OnCasterTargetDeath();
     }
     StopTargetAttack(false);
     _targetUnit = null;
     FindTarget();
 }
 private void OnAttack(BaseUnitBehaviour attacker, BaseUnitBehaviour target)
 {
     if (attacker == _caster)
     {
         _particleInstance.transform.localPosition = _particleInstance.transform.parent.InverseTransformPoint(target.transform.position) + new Vector3(0f, target.ModelView.ModelHeight * 0.5f, 0f);
         _particleInstance.gameObject.SetActive(true);
         _particleInstance.Simulate(0f);
         _particleInstance.Play(true);
     }
 }
    public void SetState(UnitState state)
    {
        if (CurrentState == null)
        {
            return;
        }

        CurrentState.enabled = false;
        CurrentState         = _states[state];
        CurrentState.enabled = true;
    }
Ejemplo n.º 20
0
    void StartTargetAttack(BaseUnitBehaviour target)
    {
        _model.StopCurrentAnimation();
        Action <BaseUnitBehaviour> onTargetFound = _onTargetFound;

        _onTargetFound = null;
        StopAllCoroutines();

        State = EUnitAttackState.WatchTarget;
        onTargetFound(target);
    }
    public void OnDestroy()
    {
        _caster = null;

        if (_particleInstance != null)
        {
            GameObject.Destroy(_particleInstance.gameObject);
            _particleInstance = null;
        }

        EventsAggregator.Fight.RemoveListener <BaseUnitBehaviour, BaseUnitBehaviour>(EFightEvent.PerformAttack, OnAttack);
    }
Ejemplo n.º 22
0
	private List<UnitDamageInfo> GetAttacksList(BaseUnitBehaviour unitBeh) {
		if (unitBeh.IsAlly) {
			if (!_alliesAttacks.ContainsKey(unitBeh.UnitData.Data.Key)) {
				_alliesAttacks.Add(unitBeh.UnitData.Data.Key, new List<UnitDamageInfo>());
			}
			return _alliesAttacks[unitBeh.UnitData.Data.Key];
		}

		if (!_enemyAttacks.ContainsKey(unitBeh.UnitData.Data.Key)) {
			_enemyAttacks.Add(unitBeh.UnitData.Data.Key, new List<UnitDamageInfo>());
		}
		return _enemyAttacks[unitBeh.UnitData.Data.Key];
	}
Ejemplo n.º 23
0
    private IEnumerator ThrowGrenade(BaseUnitBehaviour target)
    {
        _caster.StopTargetAttack(false);
        _caster.ModelView.PlaySkillAnimation(ESkillKey.StunGrenade);

        yield return(new WaitForSeconds(0.55f));

        _grenadeView.Throw(Mathf.Max(Vector3.Distance(_caster.CachedTransform.position, target.CachedTransform.position) * 0.1f, _minThrowTime), _grenadeView.transform.position, target.CachedTransform.position, 2f, OnGrenadeTargetReached);

        yield return(new WaitForSeconds(0.3f));

        _caster.StartTargetAttack();
    }
Ejemplo n.º 24
0
    public void Reset(bool full)
    {
        _target          = null;
        _targetTransform = null;

        _onTargetFound    = null;
        _onTargetAttacked = null;
        StopAllCoroutines();
        if (full)
        {
            State = EUnitAttackState.None;
            //Debug.Log("None " + gameObject.GetComponent<BaseUnitBehaviour>().name);
        }
    }
Ejemplo n.º 25
0
 public void ToNextAttackUnit(BaseUnitBehaviour currentUnit)
 {
     if (currentUnit.UnitAttack.State == EUnitAttackState.LookIntoSunset)
     {
         return;
     }
     _lastAttackUnit = currentUnit;
     if (currentUnit != null)
     {
         BaseUnitBehaviour nextAttackUnit = UnitSet.Instance.GetNextAttackUnit(_lastAttackUnit);
         if (nextAttackUnit != null && nextAttackUnit.UnitAttack.State != EUnitAttackState.LookIntoSunset)
         {
             nextAttackUnit.FindTarget();
         }
     }
 }
Ejemplo n.º 26
0
    private void WatchTarget()
    {
        _modelTransform.localRotation = Quaternion.Lerp(_modelTransform.localRotation,
                                                        Quaternion.LookRotation(_targetTransform.position - _transform.position), _rotationSpeed * Time.deltaTime);

        BaseUnitBehaviour unit       = gameObject.GetComponent <BaseUnitBehaviour>();
        BaseUnitBehaviour attackUnit = UnitSet.Instance.GetNextAttackUnit(_lastAttackUnit);

        if (attackUnit != null && attackUnit.Equals(unit))
        {
            if (_lastAttackUnit == null || _lastAttackUnit != null &&
                _lastAttackUnit.UnitAttack.State != EUnitAttackState.AttackTarget)
            {
                State = EUnitAttackState.AttackTarget;
            }
        }
    }
Ejemplo n.º 27
0
    protected override void StartUsage()
    {
        BaseUnitBehaviour target = GetFarthestOpponent();

        if (target != null)
        {
            CreateGrenade();
            if (_grenadeView != null && !_grenadeView.IsInFlight)
            {
                (_caster.UnitData as BaseHero).UseSkill(_skillParameters);
                StartCooldown();
                _isUsing = true;

                GameTimer.Instance.RunCoroutine(ThrowGrenade(target));
            }
        }
    }
Ejemplo n.º 28
0
    public int CompareTo(object obj)
    {
        BaseUnitBehaviour unitBehaviour = obj as BaseUnitBehaviour;

        if (unitBehaviour != null)
        {
            if (IsAlly == unitBehaviour.IsAlly)
            {
                if (UnitsConfig.Instance.IsHero(UnitData.Data.Key))
                {
                    return(1);
                }
                else if (UnitsConfig.Instance.IsHero(unitBehaviour.UnitData.Data.Key))
                {
                    return(-1);
                }
                else
                {
                    if (UnitData.Data.BaseRange == unitBehaviour.UnitData.Data.BaseRange)
                    {
                        return(UnitData.HealthPoints.CompareTo(unitBehaviour.UnitData.HealthPoints));
                    }
                    else if (UnitData.Data.BaseRange == EUnitRange.Melee)
                    {
                        return(1);
                    }
                    else
                    {
                        return(-1);
                    }
                }
            }
            else if (IsAlly)
            {
                return(1);
            }
            else
            {
                return(-1);
            }
        }
        else
        {
            throw new ArgumentException("Cравниваемый объект не является BaseUnitBehaviour!");
        }
    }
Ejemplo n.º 29
0
    private List <UnitDamageInfo> GetAttacksList(BaseUnitBehaviour unitBeh)
    {
        if (unitBeh.IsAlly)
        {
            if (!_alliesAttacks.ContainsKey(unitBeh.UnitData.Data.Key))
            {
                _alliesAttacks.Add(unitBeh.UnitData.Data.Key, new List <UnitDamageInfo>());
            }
            return(_alliesAttacks[unitBeh.UnitData.Data.Key]);
        }

        if (!_enemyAttacks.ContainsKey(unitBeh.UnitData.Data.Key))
        {
            _enemyAttacks.Add(unitBeh.UnitData.Data.Key, new List <UnitDamageInfo>());
        }
        return(_enemyAttacks[unitBeh.UnitData.Data.Key]);
    }
Ejemplo n.º 30
0
    private void OnSelfDeath()
    {
        for (int i = 0; i < UnitData.ActiveSkills.ActiveSkills.Count; i++)
        {
            UnitData.ActiveSkills.ActiveSkills[i].OnCasterDeath();
        }
        if (IsInvoking("Run"))
        {
            CancelInvoke("Run");
        }
        StopTargetAttack(false);        //(true);
        _lastTargetUnit = _targetUnit = null;
        _unitAttack.Reset(true);

        EventsAggregator.Fight.Broadcast <BaseUnit>(gameObject.tag == GameConstants.Tags.UNIT_ALLY ? EFightEvent.AllyDeath : EFightEvent.EnemyDeath, _unitData);

        _model.PlayDeathAnimation(OnDeathAnimationEnd);
    }
    void Awake()
    {
        var startingState = GetComponent <WarriorBehaviour_Normal>();

        if (startingState != null)
        {
            _states.Add(UnitState.Normal, GetComponent <WarriorBehaviour_Normal>());
            _states.Add(UnitState.Retreat, GetComponent <UnitBehaviour_Retreat>());
        }
        else //if unit is archer
        {
            _states.Add(UnitState.Normal, GetComponent <ArcherBehaviour_Normal>());
            _states.Add(UnitState.Attack, GetComponent <ArcherBehaviour_Attack>());
            _states.Add(UnitState.Retreat, GetComponent <UnitBehaviour_Retreat>());
        }

        CurrentState = _states[UnitState.Normal];
    }
Ejemplo n.º 32
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);
    }
Ejemplo n.º 33
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);
    }
Ejemplo n.º 34
0
 public void SetPosition(BaseUnitBehaviour unit, Vector3 position)
 {
     if (_destinationPosition == Vector3.zero)
     {
         _destinationPosition = unit.transform.position = position;
     }
     else
     {
         _destinationPosition = position;
         if (_destinationPosition != _modelTransform.position)
         {
             if (State != EUnitAttackState.AttackTarget)
             {
                 State = EUnitAttackState.NoAttack;
             }
             //_model.PlayRunAnimation();
         }
     }
 }
Ejemplo n.º 35
0
    public void Stun(float duration)
    {
        _model.PlayStunAnimation();

        for (int i = 0; i < UnitData.ActiveSkills.ActiveSkills.Count; i++)
        {
            UnitData.ActiveSkills.ActiveSkills[i].OnCasterStunned();
        }
        StopTargetAttack(false);
        _targetUnit = null;
        _unitAttack.Reset(true);
        //_unitPathfinder.Reset(true);

        if (IsInvoking("Run"))
        {
            CancelInvoke("Run");
        }
        Invoke("Run", duration);
    }
Ejemplo n.º 36
0
    private void OnMapEnd()
    {
        for (int i = 0; i < UnitData.ActiveSkills.ActiveSkills.Count; i++)
        {
            UnitData.ActiveSkills.ActiveSkills[i].Break();
        }
        if (IsInvoking("Run"))
        {
            CancelInvoke("Run");
        }
        StopTargetAttack(true);
        _lastTargetUnit = _targetUnit = null;
        _unitAttack.Reset(true);

        if (_unitData != null && !_unitData.IsDead)
        {
            _model.PlayWinAnimation();
            _unitAttack.LookIntoSunset();
        }
    }
Ejemplo n.º 37
0
    protected override void EndUsage()
    {
        if (_caster != null)
        {
            base.EndUsage();

            if (_skillView != null)
            {
                GameObject.Destroy(_skillView.gameObject);
                _skillView = null;
            }

            BaseUnitBehaviour caster = _caster;

            GameTimer.Instance.FinishCoroutine(Shoot());
            Clear();

            caster.StartTargetAttack();
        }
    }
Ejemplo n.º 38
0
    public void OnDestroy()
    {
        EventsAggregator.Units.RemoveListener <BaseUnit, HitInfo>(EUnitEvent.HitReceived, OnHitReceived);
        EventsAggregator.Units.RemoveListener <BaseUnit>(EUnitEvent.DeathCame, OnUnitDeath);
        EventsAggregator.Fight.RemoveListener(EFightEvent.Pause, OnFightPause);
        EventsAggregator.Fight.RemoveListener(EFightEvent.Resume, OnFightResume);
        EventsAggregator.Fight.RemoveListener(EFightEvent.MapComplete, OnMapComplete);
        EventsAggregator.Fight.RemoveListener(EFightEvent.MapFail, OnMapFail);

        if (_isAlly && UnitsConfig.Instance != null && UnitsConfig.Instance.IsHero(_unitData.Data.Key))
        {
            EventsAggregator.Units.RemoveListener <ESkillKey>(EUnitEvent.SkillUsage, UseSkill);
        }

        _unitData       = null;
        _lastTargetUnit = _targetUnit = null;
        _unitAttack     = null;
        //_unitPathfinder = null;
        _model = null;
        _ui    = null;
    }
Ejemplo n.º 39
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);
    }
Ejemplo n.º 40
0
    public BaseUnitController(
        EntityController.Select entityControllerSelect, 
        UnitViewPresenter unitViewPresenter, 
        BaseUnit.UnitCharacteristics unitCharacteristics, 
        EntityController.GetTarget getTarget, 
        EntityController.Faction faction, 
        DeathDestroy updateDeath,
        BaraksModel.SetUpdeteCharacteristicsDelegate setUpdeteCharacteristicsDelegate )
    {
        this.updateDeath = updateDeath;

        animationController = new AnimationController( unitViewPresenter._animation );

        EffectsController effectsController = new EffectsController();

        tempNavMeshAgent = unitViewPresenter.navMeshAgent;

        this.entityControllerSelect = entityControllerSelect;
        unitBehaviour = new BaseUnitBehaviour( getTarget, faction, unitViewPresenter, animationController );
        unitModel = new BaseUnit(unitCharacteristics, faction, effectsController, _UpdateCharacteristics, UpdateDeath, setUpdeteCharacteristicsDelegate, DeleteVisualEffect );
        unitView = new BaseUnitView( unitViewPresenter, Selected, GetDamage );
    }
Ejemplo n.º 41
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;
     }
 }
Ejemplo n.º 42
0
    public void OnDestroy()
    {
        EventsAggregator.Units.RemoveListener<BaseUnit, HitInfo>(EUnitEvent.HitReceived, OnHitReceived);
        EventsAggregator.Units.RemoveListener<BaseUnit>(EUnitEvent.DeathCame, OnUnitDeath);
        EventsAggregator.Fight.RemoveListener(EFightEvent.Pause, OnFightPause);
        EventsAggregator.Fight.RemoveListener(EFightEvent.Resume, OnFightResume);
        EventsAggregator.Fight.RemoveListener(EFightEvent.MapComplete, OnMapComplete);
        EventsAggregator.Fight.RemoveListener(EFightEvent.MapFail, OnMapFail);

        if (_isAlly && UnitsConfig.Instance != null && UnitsConfig.Instance.IsHero(_unitData.Data.Key)) {
            EventsAggregator.Units.RemoveListener<ESkillKey>(EUnitEvent.SkillUsage, UseSkill);
        }

        _unitData = null;
        _lastTargetUnit = _targetUnit = null;
        _unitAttack = null;
        //_unitPathfinder = null;
        _model = null;
        _ui = null;
    }
Ejemplo n.º 43
0
 public void SetPosition(BaseUnitBehaviour unit, Vector3 position)
 {
     if (_destinationPosition == Vector3.zero)
         _destinationPosition = unit.transform.position = position;
     else
     {
         _destinationPosition = position;
         if (_destinationPosition != _modelTransform.position)
         {
             if (State != EUnitAttackState.AttackTarget)
                 State = EUnitAttackState.NoAttack;
             //_model.PlayRunAnimation();
         }
     }
 }
	public void Play(BaseUnitBehaviour caster) {
		caster.ModelView.DisplayWeaponShot(caster.DistanceToTarget, _lPos, _rPos);
	}
Ejemplo n.º 45
0
    public void Stun(float duration)
    {
        _model.PlayStunAnimation();

        for (int i = 0; i < UnitData.ActiveSkills.ActiveSkills.Count; i++) {
            UnitData.ActiveSkills.ActiveSkills[i].OnCasterStunned();
        }
        StopTargetAttack(false);
        _targetUnit = null;
        _unitAttack.Reset(true);
        //_unitPathfinder.Reset(true);

        if (IsInvoking("Run")) {
            CancelInvoke("Run");
        }
        Invoke("Run", duration);
    }
Ejemplo n.º 46
0
 private void OnUnitAttack(BaseUnitBehaviour attacker, BaseUnitBehaviour target)
 {
     _logger.LogDamage(attacker, target);
     attacker.UnitData.Attack(target.UnitData);
 }
Ejemplo n.º 47
0
 string GetUnitName(BaseUnitBehaviour unit)
 {
     return unit != null ? unit.name : string.Empty;
 }
	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();
			}
		}
	}
Ejemplo n.º 49
0
	protected virtual void Clear() {
		_caster = null;
		_isUsing = false;
	}
Ejemplo n.º 50
0
	public virtual void Use(BaseUnitBehaviour caster) {
		_caster = caster;
	}
Ejemplo n.º 51
0
    public void Reset(bool full)
    {
        _target = null;
        _targetTransform = null;

        _onTargetFound = null;
        _onTargetAttacked = null;
		StopAllCoroutines();
        if (full)
        {
            State = EUnitAttackState.None;
            //Debug.Log("None " + gameObject.GetComponent<BaseUnitBehaviour>().name);
        }
    }
Ejemplo n.º 52
0
 private void OnTargetFound(BaseUnitBehaviour target)
 {
     _targetUnit = target;
 }
Ejemplo n.º 53
0
    private IEnumerator AttackTarget()
    {
        _lastAttackTime = Time.time;
        _lastTargetUnit = _targetUnit;

        if (_model.WFSAttackDelay != null)
            yield return _model.WFSAttackDelay;
        if (!_performPlay)
        {
            _model.PlayAttackAnimation(DistanceToTarget);
            _performPlay = true;
        }
        if (!_performAttack)
        {
            EventsAggregator.Fight.Broadcast<BaseUnitBehaviour, BaseUnitBehaviour>(EFightEvent.PerformAttack, this, _targetUnit);
            _unitAttack.ToNextAttackUnit(this);
            _performAttack = true;
        }
        if (_unitAttack.State == EUnitAttackState.AttackTarget)
        {
            if (!_performWait)
            {
                _performWait = true;
                yield return _cachedWaitForSeconds;
            }
            _model.StopCurrentAnimation();

            StopTargetAttack(false);
            _targetUnit = null;
            _unitAttack.Reset(true);

            _corTargetAttack = null;
        }
        _performPlay = _performAttack = _performWait = false;
    }
Ejemplo n.º 54
0
	private IEnumerator ThrowGrenade(BaseUnitBehaviour target) {
		_caster.StopTargetAttack(false);
		_caster.ModelView.PlaySkillAnimation(ESkillKey.StunGrenade);

		yield return new WaitForSeconds(0.55f);

		_grenadeView.Throw(Mathf.Max(Vector3.Distance(_caster.CachedTransform.position, target.CachedTransform.position) * 0.1f, _minThrowTime), _grenadeView.transform.position, target.CachedTransform.position, 2f, OnGrenadeTargetReached);

		yield return new WaitForSeconds(0.3f);

		_caster.StartTargetAttack();
	}
	public void StoreWeaponPosition(BaseUnitBehaviour caster) {
		_lPos = caster.ModelView.WeaponLeft != null ? caster.ModelView.WeaponLeft.GunfireParticleParent.position : Vector3.zero;
		_rPos = caster.ModelView.WeaponRight != null ? caster.ModelView.WeaponRight.GunfireParticleParent.position : Vector3.zero;
	}
Ejemplo n.º 56
0
    private void OnMapEnd()
    {
        for (int i = 0; i < UnitData.ActiveSkills.ActiveSkills.Count; i++)
        {
            UnitData.ActiveSkills.ActiveSkills[i].Break();
        }
        if (IsInvoking("Run"))
        {
            CancelInvoke("Run");
        }
        StopTargetAttack(true);
        _lastTargetUnit = _targetUnit = null;
        _unitAttack.Reset(true);

        if (_unitData != null && !_unitData.IsDead) {
            _model.PlayWinAnimation();
            _unitAttack.LookIntoSunset();
        }
    }
Ejemplo n.º 57
0
 private void OnUnitReadyToFight(BaseUnitBehaviour bub)
 {
     _rtfUnitsAmount++;
 }
Ejemplo n.º 58
0
    private void OnSelfDeath()
    {
        for (int i = 0; i < UnitData.ActiveSkills.ActiveSkills.Count; i++) {
            UnitData.ActiveSkills.ActiveSkills[i].OnCasterDeath();
        }
        if (IsInvoking("Run")) {
            CancelInvoke("Run");
        }
        StopTargetAttack(false);//(true);
        _lastTargetUnit = _targetUnit = null;
        _unitAttack.Reset(true);

        EventsAggregator.Fight.Broadcast<BaseUnit>(gameObject.tag == GameConstants.Tags.UNIT_ALLY ? EFightEvent.AllyDeath : EFightEvent.EnemyDeath, _unitData);

        _model.PlayDeathAnimation(OnDeathAnimationEnd);
    }
Ejemplo n.º 59
0
 private void OnTargetDeath()
 {
     for (int i = 0; i < UnitData.ActiveSkills.ActiveSkills.Count; i++) {
         UnitData.ActiveSkills.ActiveSkills[i].OnCasterTargetDeath();
     }
     StopTargetAttack(false);
     _targetUnit = null;
     FindTarget();
 }
Ejemplo n.º 60
0
 public void LookIntoSunset()
 {
     State = EUnitAttackState.LookIntoSunset;
     _lastAttackUnit = null;
 }