Example #1
0
    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;
        }
    }
Example #2
0
    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);
        }
    }
Example #3
0
    //чем ближе к эпицентру тем больше урон
    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);
        }
    }
Example #4
0
    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;
    }
Example #5
0
    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)));
        }
    }
Example #6
0
    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);
        }
    }
Example #7
0
    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;
        }
    }
Example #8
0
    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)));
        }
    }
Example #9
0
    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);
                }
            }
        }
    }
Example #10
0
 protected virtual void UnSpawn()
 {
     IgoPoolManager.Unspawn(gameObject);
 }
Example #11
0
 protected override void UnSpawn()
 {
     IgoPoolManager.Unspawn(gameObject);
 }