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; } }
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); }