public void Damage(float hp) { currHp = Mathf.Clamp(currHp - hp, 0, maxHp); RootContext.Instance.Player.HpMax = maxHp; RootContext.Instance.Player.HpPct = currHp / (float)maxHp; if (hp > 0) { IgoPoolManager.Spawn <BloodEffect>(transform.position, Quaternion.identity); } var guiLbl = GuiPoolManager.Spawn <GuiLbl>(transform.position + Vector3.up * (50 + Random.Range(0, 50)), Quaternion.identity).GetComponent <GuiLbl>(); guiLbl.Init(Color.red, ((int)hp).ToString()); if (currHp == 0) { ReSpawnFromDead(); for (int i = 0; i < 5; i++) { var point = IgoPoolManager.Spawn <LightPointEffect>(transform.position, Quaternion.identity) .GetComponent <LightPointEffect>(); point.Init(5, Random.Range(0.2f, 0.7f), Random.Range(-0.4f, -0.1f), new Vector2(Random.Range(-2f, 2), Random.Range(5f, 2))); } // GameObjectPoolManager.Spawn<BloodDeadEffect>(transform.position, Quaternion.identity); var dead = GameObject.Instantiate(DeadObj, transform.position, Quaternion.identity); var parent = GameObject.Find("Units"); dead.transform.parent = parent.transform; } }
private void OnCollision(IPhysicItem item) { var ai = item.View.GetComponent <AiController>(); if (ai != null) { ai.behaviour.pysicItem.AddVelocity(pysicItem.velocity.normalized * 4); ai.Damage(10); IgoPoolManager.Spawn <BloodEffect>(ai.transform.position, Quaternion.identity); Destroy(gameObject); } }
//чем ближе к эпицентру тем больше урон public void ExplosionDamage(Vector2 center, float radius, float hp) { var units = GetUnitsInRange(center, radius); for (int i = units.Count - 1; i >= 0; i--) { var unit = units[i]; var dist = Vector2.Distance(unit.GetTransform().position, center); var factor = 1 - dist / radius; unit.Damage(hp * factor); IgoPoolManager.Spawn <BloodEffect>(unit.GetTransform().position, Quaternion.identity); } }
private void Explosion() { var tileSize = tileDataProvider.TileSize; pos = transform.position; var tileRange = Random.Range(1, 5); floarRange = tileRange + tileSize; tileDataProvider.СircleDamageTile(pos.x + 1.5f * tileSize, pos.y + 1.5f * tileSize, 0, 0, 0, tileRange, 100); IgoPoolManager.Spawn <BoomEffect>(transform.position, Quaternion.identity); findObjects = true; }
void OnTerrainCollision() { Destroy(gameObject); //эффект сломоной стрелы IgoPoolManager.Spawn <ArrowEffect>(transform.position, Quaternion.identity); //световой эфект for (int i = 0; i < 4; i++) { var point = IgoPoolManager.Spawn <LightPointEffect>(transform.position, Quaternion.identity) .GetComponent <LightPointEffect>(); point.Init(4, Random.Range(0.1f, 0.4f), Random.Range(-0.4f, -0.1f), new Vector2(Random.Range(-2f, 2), Random.Range(5f, 2))); } }
private void DoDamage(AiController ai) { if (DamagableIds.IndexOf(ai.GetInstanceID()) == -1) { DamagableIds.Add(ai.GetInstanceID()); var dir = new Vector2(TargetManager.PlayerController.direct, 0); ai.behaviour.pysicItem.AddVelocity(dir * 8); //ai.behaviour.pysicItem.AddVelocity(TargetManager.PlayerController.pysicItem.velocity.normalized * 4); ai.Damage(damageHP); //ai.behaviour.pysicItem.AddVelocity(transform.forward * 4); IgoPoolManager.Spawn <BloodEffect>(ai.transform.position, Quaternion.identity); } }
void OnCollision(IPhysicItem item) { var bagItem = item.View.GetComponent <IPoolBagItem>(); if (bagItem != null) { model.GetBag().AddBagItem(bagItem.GetBagItem()); IgoPoolManager.Unspawn(item.View.gameObject); return; } var ai = item.View.GetComponent <AiController>(); if (ai != null) { if (Time.time - oldAiCollisionT > 0.5f) { oldAiCollisionT = Time.time; var direcr = Mathf.Sign(transform.position.x - ai.transform.position.x); var vect = transform.position - ai.transform.position; pysicItem.AddVelocity(-pysicItem.velocity); pysicItem.AddVelocity(vect.normalized * 14);//new Vector2(direcr*7, 8)); ai.GetComponent <UnitViewReciver>().PlayAttck(); Damage(5); TweenAlpha(0.2f, true); CooldownManager.AddCooldown(0.5f, null, () => { TweenAlpha(0.2f, false); }); } ; // ai.behaviour.Jamp(); return; } }
public override void OnSpawn() { this.Inject(); MainParticle.Play(); OtherParticle.Play(); tweenScale.ResetToBeginning(); tweenScale.enabled = true; tweenScale.Play(); CooldownManager.AddCooldown(MainParticle.duration, null, UnSpawn, 0, Time.fixedDeltaTime); //GameObjectPoolManager.Spawn<LightBoomEffect>(transform.position, Quaternion.identity); for (int i = 0; i < 5; i++) { var point = IgoPoolManager.Spawn <LightPointEffect>(transform.position, Quaternion.identity) .GetComponent <LightPointEffect>(); point.Init(5, Random.Range(0.2f, 0.7f), Random.Range(-0.4f, -0.1f), new Vector2(Random.Range(-2f, 2), Random.Range(-2f, 2))); } }
public void DamageTile(Vector2Int offset, int hp, bool ignoreTree = true) { // Debug.LogError("DamageTile " + hp); int offsetX = offset.x; int offsetY = offset.y; var map = mapGenerator.GetMap(); if (!mapGenerator.IsValidPoint(offset)) { return; } if (ignoreTree && map[offsetX, offsetY].IsTree()) { return; } if (!map[offsetX, offsetY].isDestructible) { // Debug.LogError("isDestructible"); return; } int oldHp = map[offsetX, offsetY].hp; bool isEmpty = map[offsetX, offsetY].IsEmpty(); bool isTree = map[offsetX, offsetY].IsTree(); if (oldHp - hp > 0) { //эффект сломоной стрелы IgoPoolManager.Spawn <ArrowEffect>(OffsetTileToWorldPos(offset), Quaternion.identity); // if (map[offsetX, offsetY].isDestructible) { map[offsetX, offsetY].hp -= (byte)hp; // } } else { if (!isEmpty) { var blockLayer = map[offsetX, offsetY].layer; var blockType = map[offsetX, offsetY].type; var frame = GetFrameStructure(offsetX, offsetY, map[offsetX, offsetY], LayerData.TerrainLayer); ChangeTile(offset, 0, 0); if (map[offsetX, offsetY].IsEmpty()) { var block = ItemManager.CreateBlock( new Vector2(offsetX * TileSize - 2f * TileSize, offsetY * TileSize - 2f * TileSize), frame.TileCollection); block.blockLayer = blockLayer; block.blockType = blockType; block.blockTileCollection = frame.TileCollection; } } else { if (isTree) { //Debug.LogError(isTree); RemoveTree(offset); } } } }
protected virtual void UnSpawn() { IgoPoolManager.Unspawn(gameObject); }
protected override void UnSpawn() { IgoPoolManager.Unspawn(gameObject); }