public IEnumerator FinalHitUnit(UnitBehevior Target, float second)
    {
        float ambushValue = 1;

        if (_selfUnit.manager.CorrectUnit != _selfUnit)
        {
            ambushValue = 0.80f;
        }
        yield return(new WaitForSeconds(second));

        if (Target == null)
        {
            if (_selfUnit.manager.CorrectUnit = _selfUnit)
            {
                _selfUnit.manager.EndTurn();
            }
            yield break;
        }
        float   n = Random.Range(0, 100);
        Shelter _shelter;

        float DistanceTarget = Vector3.Distance(_selfUnit.transform.position, Target.transform.position + Vector3.up * (Random.Range(-5, 11) / 20f));

        float Range = NormalDistance / DistanceTarget;

        if (Range > 1)
        {
            Range = 1;
        }
        if (n < Range * 100f * ambushValue + _selfUnit.Skills[TypeWeapon] - Target.GetShelterLevel())
        {
            Target.GetHit(Damage, TypeWeapon);
        }
        else
        {
            if (Random.Range(0, 101) > Target.GetShelterLevel() * 0.75f)
            {
                Target.GetShelterLevel(out _shelter);

                if (_shelter != null)
                {
                    Instantiate(_shelter.FX, _shelter.transform.position, Quaternion.identity);

                    _shelter.ShelterLevl -= Damage * 3;
                    if (_shelter.ShelterLevl < 1)
                    {
                        Destroy(_shelter.gameObject);
                    }
                }
            }
            Target.GetHit(0, 999);
        }
        if (_prevAmmoCount == _lastAmmoCount)
        {
            _selfUnit.manager.EndTurn();
        }
    }
    void ChengParams(UnitBehevior Target)
    {
        switch (CAParm)
        {
        case 0:
            Target.Helty -= PowerPerc;
            Target.GetHit(0, 0);
            break;


        case 1:
            Target.Shild -= PowerPerc;
            Target.GetHit(0, 0);
            break;


        case 2:
            Target.Armor -= PowerPerc;
            Target.GetHit(0, 0);
            break;
        }
    }
Esempio n. 3
0
 public void MakeFired(int damage, int duration)
 {
     if (Unit.Resistans[0] < 100)
     {
         if (InsFireFx == null)
         {
             InsFireFx = Instantiate(FireFx, Unit.transform.position + Vector3.down * 0.7f, Quaternion.identity,
                                     Unit.transform);
         }
         InsFireFx.transform.eulerAngles   = Unit.transform.eulerAngles;
         InsFireFx.transform.localPosition = new Vector3(InsFireFx.transform.localPosition.x,
                                                         InsFireFx.transform.localPosition.y);
         PowerOfFire    = (int)(damage * ((100 - Unit.Resistans[0]) / 100f));
         DurationOfFire = duration;
         Unit.GetHit(PowerOfFire, "FireAttack");
     }
     else
     {
         Unit.manager.ShowInfoText("Resistans", Color.red, Unit.transform.position);
     }
 }
    void MakeBoom()
    {
        for (int i = 0; i < vectorsOfGrande.Length; i++)
        {
            Vector2      n          = vectorsOfGrande[i];
            UnitBehevior unitTarget = GridManager.NodeFromWorldPoint(new Vector3(n.x, 0, n.y)).UnitOnNode;
            if (unitTarget != null)
            {
                switch (CAParm)
                {
                case 0:
                    unitTarget.GetHit(PowerPerc, 434);
                    break;

                case 1:
                    Vector3 poitionToChek = unitTarget.transform.position + (unitTarget.transform.position - point).normalized * PowerPerc;    //Check

                    if (GridManager.NodeFromWorldPoint(poitionToChek)._Bloc == NodeA.TypeOfNode.Walkable &&
                        GridManager.NodeFromWorldPoint(poitionToChek).UnitOnNode == null)
                    {
                        GridManager.ClearNode(unitTarget.transform.position);
                        StartCoroutine(unitTarget.LerpMove(GridManager.NodeFromWorldPoint(poitionToChek).Position +
                                                           Vector3.forward * 0.12f + Vector3.up * 0.34f));
                        unitTarget.transform.eulerAngles = new Vector3(20, -45, 0);
                        GridManager.ClearNode(
                            GridManager.NodeFromWorldPoint(poitionToChek).Position + Vector3.forward * 0.12f +
                            Vector3.up * 0.34f, unitTarget);

                        unitTarget.GetHit(PowerPerc * 4, 434);
                    }
                    else
                    {
                        unitTarget.GetHit(PowerPerc * 12, 434);
                    }
                    break;

                case 2:
                    unitTarget._effectOnUnit.MakeStuned(1);
                    break;

                case 3:
                    unitTarget._effectOnUnit.MakeFired(PowerPerc, 2);
                    break;

                case 4:
                    unitTarget._effectOnUnit.MakeElectricShock(PowerPerc);
                    break;
                }
            }
            foreach (Shelter sh in GridManager.CurrentShelterList)
            {
                if (Vector3.Distance(sh.transform.position, new Vector3(n.x, 0, n.y)) < 1)
                {
                    Instantiate(sh.FX, sh.transform.position, Quaternion.identity);

                    sh.ShelterLevl -= PowerPerc * 3;
                    if (sh.ShelterLevl < 1)
                    {
                        Destroy(sh.gameObject);
                    }
                }
            }
        }


        Instantiate(manager.OnTurnEffectFX[CAParm + 2], point + Vector3.up * 0.75f, Quaternion.identity);
        manager.PlaySpecific(manager.Expl);
    }