void HitAndExplode(Effectable effectable)
    {
        int damage = Data.damageRange.RandomDamage();

        effectable?.ApplyDamage(damage);
        effectable?.ApplyExplosion(5f);
    }
Пример #2
0
 void OnPosReachedAttack(Effectable ef, Vector2 targetPos)
 {
     if (positionReached)
     {
         onPosReachedAttack?.Invoke(ef, targetPos);
     }
 }
Пример #3
0
 public override void Attack(Effectable singleTarget, Vector2 SingleTargetPosition)
 {
     foreach (var ab in AoeBehaviors)
     {
         ab.StartAOEBehavior();
     }
 }
Пример #4
0
    public override async void AttackFunction(Effectable singleTarget,
                                              Vector2 SingleTargetPosition)
    {
        int   counter     = NumOfProjectiles;
        float timeCounter = 0;

        if (AsyncAttackInProgress == false)
        {
            AsyncAttackInProgress = true;
            while (counter >= 0)
            {
                if (timeCounter <= 0)
                {
                    GenericProjectile proj = projectilePool.GetInactive();
                    var transform          = proj.transform;
                    transform.position    = ProjectileExitPoints[0].transform.position;
                    transform.rotation    = ProjectileExitPoints[0].transform.rotation;
                    proj.TargetPosition   = ProjectileFinalPoints[0].transform.position;   //can also be projectile final point position
                    proj.EffectableTarget = singleTarget ?? null;

                    proj.Activate();
                    timeCounter = timebetweenProjectiles;
                    counter    -= 1;
                }
                timeCounter -= StaticObjects.DeltaGameTime;
                await Task.Yield();
            }

            AsyncAttackInProgress = false;
        }
    }
Пример #5
0
        public override void Execute(Effectable actor)
        {
            Unit defUnit = (actor as Unit);

            Damage = DamageCalculation.GetDamage(atkUnit, defUnit, hitAdd, atkMult, atkAdd, friendly);
            defUnit.TakeDamage(Damage);
        }
Пример #6
0
 public override bool AddEffect(Effectable eff)
 {
     if (eff.gameObject.CompareTag("Fire"))
     {
         eff.effects.Remove(this);
     }
     return(true);
 }
 public void Clear()
 {
     if (EffectableTarget != null)
     {
         EffectableTarget = null;
     }
     TargetPosition = nowhere;
 }
Пример #8
0
 public void RemovePlayerUnitTarget(string unitName, string callerName)
 {
     if (PlayerTarget?.name == unitName)
     {
         PlayerTarget     = null;
         EffectableTarget = null;
     }
     RemoveUnitFromPlayerUnitsFightingDictionary(unitName);
 }
Пример #9
0
        public override void Execute(Effectable actor)
        {
            Unit unit = (actor as Unit);

            if (unit != null)
            {
                Debug.Log(actor + " was killed");
                unit.Die();
            }
        }
Пример #10
0
 private void ApplyEffectOnMainTarget(Effectable ef, Vector2 targetPos)
 {
     if (TargetBank.Targets.ContainsKey(ef.name))
     {
         if (ef.IsTargetable())
         {
             onMainTargetEffect?.Invoke(ef, targetPos);
         }
     }
 }
Пример #11
0
        public override bool ShouldPickup(Effectable eff)
        {
            var res = eff.GetComponent <Entities.Character.Player>();

            if (res != null)
            {
                return(true);
            }

            return(false);
        }
Пример #12
0
        public override bool ShouldPickup(Effectable eff)
        {
            var res = eff.GetComponent <Resources>();

            if (res != null)
            {
                return(true);
            }

            return(false);
        }
Пример #13
0
 public void Apply(Effectable actor)
 {
     foreach (Effect effect in EnemyEffects)
     {
         (actor as Unit).AddEffect(effect);
     }
     foreach (Effect effect in SelfEffects)
     {
         AbilityUser.AddEffect(effect);
     }
     lastUsed = 0;
 }
Пример #14
0
        private void OnHitEffects(Effectable eff, Resources res)
        {
            foreach (Effect e in eff.effects)
            {
                if (e == this)
                {
                    continue;
                }

                e.OnHit(eff, res);
            }
        }
Пример #15
0
    public override void Apply(Effectable ef, Vector2 targetPos)
    {
        EffectableUnit efu = ef as EffectableUnit;

        if (efu.unitController != null)
        {
            if (somePrefab != null)
            {
                GameObject someGo = GameObject.Instantiate(somePrefab);
            }
        }
    }
Пример #16
0
        public override bool AddEffect(Effectable eff)
        {
            var res = eff.GetComponent <Entities.Character.Player>();

            if (res != null)
            {
                var amount = GameManager.Instance.rand.RandomIntInRange(minMaxAmount.x, minMaxAmount.y);
                res.maxBombs += amount;
            }
            eff.effects.Remove(this);
            return(true);
        }
Пример #17
0
        public override bool AddEffect(Effectable eff)
        {
            var res = eff.GetComponent <Resources>();

            if (res != null)
            {
                var amount = GameManager.Instance.rand.RandomIntInRange(minMaxAmount.x, minMaxAmount.y);
                res.maxHealth += amount;
                res.Health     = res.maxHealth;
            }
            eff.effects.Remove(this);
            return(true);
        }
Пример #18
0
        public override bool OnSpawn(Effectable eff)
        {
            foreach (Effect e in eff.effects)
            {
                var td = e as TouchDamage;
                if (td != null)
                {
                    td.destroyOnTouch = false;
                    return(true);
                }
            }

            return(false);
        }
Пример #19
0
        public override bool PerTick(Effectable eff)
        {
            var dt = Time.deltaTime;

            foreach (Effect e in eff.effects)
            {
                e.ChangeTime(eff, ref dt);
            }

            time += dt;

            if (time < delayBetween)
            {
                return(false);
            }
            time = 0;

            var effectsToTransfer = eff.GetEffectSublist(1);

            effectsToTransfer.Remove(this);
            for (int i = effectsToTransfer.Count - 1; i >= 0; i--)
            {
                if (effectsToTransfer[i] is SpawnProjectileConstant)
                {
                    effectsToTransfer.RemoveAt(i);
                }
            }

            for (int i = 0; i < number; i++)
            {
                var angle    = Mathf.PI / 4 + (i / (float)number) * 2 * Mathf.PI;
                var velocity = new Vector2(Mathf.Cos(angle), Mathf.Sin(angle));

                var spawned = Instantiate(spawnOnHit);
                var newProj = spawned.GetComponent <Projectile>();
                if (newProj != null)
                {
                    newProj.AddEffects(effectsToTransfer);
                    newProj.doNotHit       = eff.GetComponent <Resources>();
                    newProj.doNotHitLayers = eff.gameObject.layer;
                    newProj.SetVelocity(velocity * speed);
                }

                spawned.transform.parent   = GameManager.Instance.holder.transform;
                newProj.transform.position = eff.transform.position + new Vector3(velocity.x, velocity.y, 0) * 0.1f;
            }

            return(true);
        }
Пример #20
0
 public override async void AttackFunction(Effectable singleTarget, Vector2 SingleTargetPosition)
 {
     if (AsyncAttackInProgress == false)
     {
         AsyncAttackInProgress = true;
         GenericProjectile proj = projectilePool.Get();
         var transform          = proj.transform;
         transform.rotation    = ProjectileExitPoints[0].transform.rotation;
         transform.position    = ProjectileExitPoints[0].transform.position;
         proj.TargetPosition   = ProjectileFinalPoints[0].transform.position; // can also be projectile final point position
         proj.EffectableTarget = singleTarget ?? null;
         proj.Activate();
         AsyncAttackInProgress = false;
     }
 }
Пример #21
0
        public override bool PerTick(Effectable eff)
        {
            float curScale = scale;

            if (addOthers)
            {
                foreach (Effect e in eff.effects)
                {
                    e.ChangeRange(eff, ref curScale);
                }
            }
            eff.transform.localScale = new Vector3(curScale, curScale, curScale);

            return(base.PerTick(eff));
        }
Пример #22
0
        public void Hit(Effectable eff)
        {
            var effectsToTransfer = eff.GetEffectSublist(1);

            effectsToTransfer.Remove(this);

            var spawned = GameObject.Instantiate(spawnOnHit);
            var newEff  = spawned.GetComponent <Effectable>();

            if (newEff != null)
            {
                newEff.AddEffects(effectsToTransfer);
                newEff.doNotHit = eff.GetComponent <Resources>();
            }

            spawned.transform.position = eff.transform.position;
            spawned.transform.parent   = GameManager.Instance.holder.transform;
        }
Пример #23
0
        public override bool AddEffect(Effectable eff)
        {
            bool found = false;

            foreach (Effect e in eff.effects)
            {
                if (e is TouchDamage && e != this)
                {
                    (e as TouchDamage).damage += this.damage;
                    found = true;
                }
            }

            if (found)
            {
                eff.effects.Remove(this);
            }
            return(true);
        }
Пример #24
0
        public override void Execute(Effectable actor)
        {
            Unit unit = (actor as Unit);

            switch (stat)
            {
            case Stat.Atk:
                unit.Attack += amount;
                break;

            case Stat.Spd:
                unit.MoveSpeed += amount;
                break;

            case Stat.InjMul:
                unit.InjuryMultiplier += amount / 100;
                break;
            }
            Debug.Log((actor as Unit) + "has gained " + amount + " to " + stat);
        }
Пример #25
0
    public void ApplyEffectsOnTargets()
    {
        int counter = 0;

        Effectable[] targets = new Effectable[TargetBank.Targets.Count];
        foreach (KeyValuePair <string, (Effectable, bool)> item in TargetBank.Targets)
        {
            if (item.Value.Item1 != null)
            {
                targets[counter] = item.Value.Item1;
                counter         += 1;
            }
        }
        for (int i = 0; i < targets.Length; i++)
        {
            if (targets[i] != null)
            {
                OnApplyEffect(targets);
            }
        }
    }
Пример #26
0
        public override bool PerTick(Effectable eff)
        {
            var dt = Time.deltaTime;

            foreach (Effect e in eff.effects)
            {
                e.ChangeTime(eff, ref dt);
            }

            time += dt;

            if (time > fireTime)
            {
                time = 0;
                var spawned = GameObject.Instantiate(firePrefab);
                spawned.transform.position = eff.transform.position;
                spawned.transform.parent   = GameManager.Instance.holder.transform;
                var proj = spawned.GetComponent <Effectable>();
                if (proj != null)
                {
                    var effectsToTransfer = eff.GetEffectSublist(1);
                    for (int i = effectsToTransfer.Count - 1; i >= 0; i--)
                    {
                        if (effectsToTransfer[i] is FireOnTick)
                        {
                            effectsToTransfer.RemoveAt(i);
                        }
                    }

                    proj.AddEffects(eff.GetEffectSublist(1));
                    proj.doNotHit = eff.GetComponent <Resources>();
                }

                return(true);
            }

            return(false);
        }
Пример #27
0
 public void AddTestData()
 {
     Creatables.Add(new TestCreatable
     {
         Id = Guid.Empty
     });
     Modifiables.Add(new TestModifiable
     {
         Id = Guid.Empty
     });
     Deletable.Add(new TestDeletable
     {
         Id = Guid.Empty
     });
     Effectable.Add(new TestEffectable
     {
         Id = Guid.Empty
     });
     Ownable.Add(new TestOwnable
     {
         Id = Guid.Empty
     });
     SaveChanges();
 }
Пример #28
0
        public override bool PerTick(Effectable eff)
        {
            if (collider == null)
            {
                collider = eff.GetComponent <Collider2D>();
            }

            if (collider == null)
            {
                return(false);
            }

            var  num    = collider.OverlapCollider(filter, results);
            bool hasHit = false;

            for (int i = 0; i < num; i++)
            {
                if (results[i].gameObject.layer == eff.doNotHitLayers)
                {
                    continue;
                }
                if (results[i].gameObject == eff.gameObject)
                {
                    continue;
                }

                if (results[i].gameObject.transform.position.z > 1)
                {
                    continue;
                }

                var res = results[i].GetComponent <Resources>();

                if (res != null && res != eff.doNotHit)
                {
                    float curDamage = damage;
                    foreach (Effect e in eff.effects)
                    {
                        e.ChangeStrength(eff, ref curDamage);
                    }

                    if (res.Damage((int)curDamage))
                    {
                        hasHit = true;

                        if (eff is Projectile)
                        {
                            var proj = eff as Projectile;
                            OnHitEffects(proj, -proj.GetVelocity(), res);
                        }
                        else
                        {
                            OnHitEffects(eff, res);
                        }
                    }
                }
            }

            if (hasHit && destroyOnTouch)
            {
                eff.Destroy();
            }

            return(hasHit);
        }
Пример #29
0
 public async void Attack(Effectable singleTarget,
                          Vector2 singleTargetPosition)
 {
     onAttack?.Invoke();
     AttackFunction(singleTarget, singleTargetPosition);
 }
Пример #30
0
 public abstract void AttackFunction(Effectable singleTarget,
                                     Vector2 SingleTargetPosition);