Example #1
0
        protected virtual void TakeDamage(float damage, IDamager damager)
        {
            if (health == 0)
            {
                return;
            }

            if (health > damage)
            {
                health -= damage;

                if (OnTookDamage != null)
                {
                    OnTookDamage(damage, damager);
                }

                TriggerHealthChange();
            }
            else
            {
                health = 0;

                if (OnTookDamage != null)
                {
                    OnTookDamage(damage, damager);
                }

                TriggerHealthChange();

                Died(damager);
            }
        }
Example #2
0
        // TODO @OMW Move different implementations to scriptable object
        // (e.g. Team Deathmatch, Free for all)
        public bool CanDamage(IDamager damager, GameObject receiver)
        {
            // TODO @OMW allow draws as they were super fun on prototype

            // if we're moving to some other level (so someone won), don't receive damage
            // to avoid draws (I don't have time to implement draws for now)
            if (nextStageIndex >= 0)
            {
                return(false);
            }

            if (damager != null && damager.Instigator)
            {
                GameObject instigator = damager.Instigator;

                var instigatorTeam = instigator.GetComponent <TeamComponent>()?.Team;
                var receiverTeam   = receiver.GetComponent <TeamComponent>()?.Team;

                if (receiverTeam != null && instigatorTeam != null)
                {
                    return(receiverTeam != instigatorTeam);
                }
            }

            return(true);
        }
 private void OnDeath(IDamager obj)
 {
     if (obj is ITowerDamager)
     {
         References.Level.ScoreManager.Add(points);
     }
 }
        int IDamageable.TakeDamage(IDamager source, int amount)
        {
            var dmg = Health.TakeDamage(source, amount);

            EvaluateDeath();
            return(dmg);
        }
Example #5
0
        public override GameObject FireAmmo(IDamager damager, Ray damageRay, LayerMask layerMask, float damageMultiplier)
        {
            Shrapnel spear = Shrapnel.pool.GetPrefabInstance(prefab);

            System.Action <PhysicsHit> onHitReach = (physicsHit) => {
                if (physicsHit != null)
                {
                    Damageable damageable = physicsHit.mainCollider.GetComponent <Damageable>();
                    if (damageable)
                    {
                        damageable.SendDamage(new DamageMessage(damager, baseDamage * damageMultiplier, 0));
                    }
                }
            };

            PhysicsHit hit = spear.Launch(velocity, damageRay, maxDistance, radiusCheck, layerMask, lifeTime, hitObjectVelocityMultiplier, simulateArc, onHitReach);

            // if (hit != null) {
            //     Damageable damageable = hit.mainCollider.GetComponent<Damageable>();
            //     if (damageable) {
            //         damageable.SendDamage(new DamageMessage(damager, baseDamage * damageMultiplier));
            //     }
            // }

            return(spear.gameObject);
        }
Example #6
0
        protected override void OnDeath(IDamager damager)
        {
            new Poof().PositionRelativeTo(Object, 0, 0);
            Object.Remove();

            new GameOverText(Object.Scene);
        }
Example #7
0
 void GetBoink(IDamager damager)
 {
     if (damager != null && damager.GetTeam() != team)
     {
         Debug.Log("ow");
         Damage(damager.GetDamage());
     }
 }
Example #8
0
 public void Init(EDamageReceiver eDamageReceiver, int frameLength, IDamager damager, bool selfDestroy = false, bool reportEveryHit = false)
 {
     f_eDamageReceiver = eDamageReceiver;
     f_maxFrames       = frameLength;
     f_damager         = damager;
     f_selfDestroy     = selfDestroy;
     f_reportEveryHit  = reportEveryHit;
 }
Example #9
0
 public void BeDamaged(IDamager dmgInfo)
 {
     health -= dmgInfo.Damage;
     if (health <= 0)
     {
         Die();
     }
 }
        void GameEvents.IDoAttack.OnCantAttack(IDamager source, IDamageable target, int amount)
        {
            var sourceChar = (IRuntimeCharacter)source;
            var agressor   = GetUi(sourceChar);
            var notf       = UiNotificationTextPooler.Instance.Get();
            var final      = agressor.transform.position + new Vector3(0, HeightNotification, 0);

            notf.Write(agressor.transform.position, final, CantAttack, SpeedNotification, Color.red);
        }
Example #11
0
        protected virtual void Died(IDamager damager)
        {
            DeathAction(damager);

            if (OnDied != null)
            {
                OnDied(damager);
            }
        }
Example #12
0
        /// <summary>
        /// Take damage from a specific damager interface.
        /// </summary>
        /// <param name="damager">
        /// The damager.
        /// </param>
        public void TakeDamage(IDamager damager)
        {
            Console.WriteLine("{0} is taking damage {1}... \n", this.Name, damager.Amount);

            // Console.WriteLine(":{0}:==Before== Status {1} \n", this.Name, this.Status);
            this.Health -= damager.Amount;

            // Console.WriteLine(":{0}:Status {1} \n", this.Name, this.Status);
        }
Example #13
0
    private void OnTriggerEnter2D(Collider2D other)
    {
        IDamager damager = (IDamager)other.GetComponent(typeof(IDamager));

        if (damager != null)
        {
            DamageSystem.ApplyDamage(damager, controller.GetPlayer(), transform.position - other.transform.position);
        }
    }
Example #14
0
 public ExampleDamageEventArgs(
     IDamager sender,
     float damage,
     bool heal = false)
 {
     this.sender = sender;
     this.damage = damage;
     this.heal   = heal;
 }
        void IDoDamage.OnDamage(IDamager source, IDamageable target, int amount)
        {
            var player = target as IPlayer;

            if (player.Seat == Ui.Seat)
            {
                StartCoroutine(Play());
            }
        }
Example #16
0
        private void DamageEntity(IDamageable <GameEntityTag> damageAble, IDamager <GameEntityTag> damager)
        {
            if (damageAble == null)
            {
                return;
            }
            int damage = damager.GetDamage();

            damageAble?.Damage(damage, damager.DamagerType);
        }
Example #17
0
        public override GameObject FireAmmo(IDamager damager, Ray damageRay, LayerMask layerMask, float damageMultiplier)
        {
            System.Action <Collision> onCollision = (collision) => {
                // calculate and dole out damage here
            };

            BasicProjectile spear = BasicProjectile.pool.GetPrefabInstance(prefab);

            spear.LaunchToPosition(damageRay, mass, velocity, lifeTime, useGravityOnStart, useGravityOnCollision, onCollision);
            return(spear.gameObject);
        }
Example #18
0
        protected override void OnDeath(IDamager damager)
        {
            new Poof().PositionRelativeTo(Object, 0, 0);
            Object.Remove();
            Object.Scene.Player.Score += 50;

            if (PrizeDropChance.GetNext())
            {
                new SmallHeart().PositionRelativeTo(Object, 0, -8);
            }
        }
Example #19
0
        public static bool DoDamage(GameObject target, float damage, IDamager damager)
        {
            var damagable = target.GetComponent <IDamagable>();

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

            DoDamage(damagable, damage, damager);
            return(true);
        }
        void GameEvents.IDoAttack.OnDamage(IDamager source, IDamageable target, int amount)
        {
            var targetChar = (IRuntimeCharacter)target;
            var sourceChar = (IRuntimeCharacter)source;

            var agressor = GetUi(sourceChar);
            var defender = GetUi(targetChar);

            if (agressor != null && defender != null)
            {
                agressor.Attack(defender.transform.position);
            }
        }
Example #21
0
 public override bool TakeDamage(IDamager damager, Vector3 hitPoint)
 {
     if (TakeDamage(damager.Damage, hitPoint))
     {
         if (damager.Damager != null && IsDead)
         {
             damager.Damager.Record.NumOfKills++;
             damager.Damager.Record.Exp   += (int)m_AIData.m_Exp;
             damager.Damager.Record.Money += (int)m_AIData.m_Money;
         }
         return(true);
     }
     return(false);
 }
Example #22
0
        private void Start()
        {
            attackVariable = Instantiate(attackVariable);
            _damager       = new Damager()
            {
                Value = attackVariable.Value
            };
            _cam  = Camera.main;
            _info = new TextVariable
            {
                Value = textComponent.text
            };

            _info.PropertyChanged += NpcOnPropertyChanged;
        }
Example #23
0
        private void Awake()
        {
            _damagerModel = GetComponent <IDamager>();

            _attackContactFilter.layerMask    = hittableLayers;
            _attackContactFilter.useLayerMask = true;
            _attackContactFilter.useTriggers  = canHitTriggers;

            if (offsetBasedOnSpriteFacing && controller != null)
            {
                _spriteOriginallyFlipped = controller.FacingRight;
            }

            _damagerTransform = transform;
        }
Example #24
0
    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject == this.transform.root.gameObject)
        {
            return;
        }
        IDamager    attacker = this.transform.root.gameObject.GetComponent <IDamager>();
        IDamageable defender = other.gameObject.GetComponent <IDamageable>();

        if (attacker == null || defender == null)
        {
            return;
        }
        attacker.DoDamage(defender);
    }
    public virtual void OnTriggerEnter(Collider other)
    {
        print(other.name);
        IDamager dmg = other.GetComponent <IDamager>();

        if (dmg != null)
        {
            BeDamaged(dmg);
        }

        IVulnerable v = other.GetComponent <IVulnerable>();

        if (v != null)
        {
            v.BeDamaged(this);
        }
    }
Example #26
0
        public void TakeDamage(IDamager damager)
        {
            if (!IsAlive)
            {
                return;
            }

            CurrentHealth -= damager.BaseDamage;
            if (CurrentHealth <= 0)
            {
                CurrentHealth = 0;
                Die();
            }
            else
            {
                OnDamageTaken();
            }
        }
Example #27
0
    /// Collision damage
    private void OnCollisionEnter2D(Collision2D collision)
    {
        IDamager   damager    = (IDamager)collision.collider.GetComponent(typeof(IDamager));
        IDamagable damagable  = (IDamagable)collision.collider.GetComponent(typeof(IDamagable));
        Enemy      enemyCheck = (Enemy)collision.collider.GetComponent(typeof(Enemy));

        if (enemyCheck != null)
        {
            return;
        }
        if (damager != null)
        {
            DamageSystem.ApplyDamage(damager, this, collision.relativeVelocity);
        }
        if (damagable != null)
        {
            DamageSystem.ApplyDamage(this, damagable, collision.relativeVelocity);
        }
    }
Example #28
0
        public override GameObject FireAmmo(IDamager damager, Ray damageRay, LayerMask layerMask, float damageMultiplier)
        {
            Impaler impaler = Impaler.pool.GetPrefabInstance(impalerPrefab);

            System.Action <PhysicsHit> onHitReach = (physicsHit) => {
            };

            List <PhysicsHit> hits = impaler.ShootImpaler(velocity, hitObjectVelocityMultiplier, zMovementLimit, damageRay, maxDistance, layerMask, impalerRadius, kinematicOnReach, useColliderOnReach, lifeTime, onHitReach);

            for (int i = 0; i < hits.Count; i++)
            {
                Damageable damageable = hits[i].hitElements[0].rigidbody.GetComponent <Damageable>();
                if (damageable)
                {
                    damageable.SendDamage(new DamageMessage(damager, baseDamage * damageMultiplier, 0));
                }
            }
            return(impaler.gameObject);
        }
Example #29
0
    public void NotifyCollision(Collision2D collision, IDamager hitter)
    {
        Debug.Log(collision.collider.gameObject.name);
        // Can the thing I hit deal damage?
        IDamager damager = (IDamager)collision.collider.GetComponent(typeof(IDamager));

        // Can the thing I hit take damage?
        IDamagable damagable = (IDamagable)collision.collider.GetComponent(typeof(IDamagable));

        // If it can deal damage, apply that damage to the player.
        if (damager != null)
        {
            DamageSystem.ApplyDamage(damager, controller.GetPlayer(), collision.relativeVelocity);
        }

        // If it can take damage, apply this object's damage to it.
        if (damagable != null)
        {
            DamageSystem.ApplyDamage(hitter, damagable, collision.relativeVelocity);
        }
    }
Example #30
0
        public override GameObject FireAmmo(IDamager damager, Ray damageRay, LayerMask layerMask, float damageMultiplier)
        {
            Spear spear = Spear.pool.GetPrefabInstance(spearPrefab);

            System.Action <PhysicsHit, bool> onHitReach = (physicsHit, isImpaled) => {
            };

            List <PhysicsHit> hits = spear.ShootSpear(velocity, damageRay, maxDistance, layerMask, lifeTime, skewerSeperation, minSpaceFromWall, skeweredVelocityMultiplier, onHitReach);

            for (int i = 0; i < hits.Count; i++)
            {
                Damageable damageable = hits[i].hitElements[0].rigidbody.GetComponent <Damageable>();
                if (damageable)
                {
                    damageable.SendDamage(new DamageMessage(damager, baseDamage * damageMultiplier, 0));
                }
            }


            return(spear.gameObject);
        }
Example #31
0
    public void Damage(float damageAmount, IDamager damager)
    {
        if (!isServer)
        {
            return;
        }

        if (isDead)
        {
            return;
        }

        hullIntegrity -= damageAmount;

        if (isDead)
        {
            Kill(damager);
        }
    }
Example #32
0
    public void Kill(IDamager damager)
    {
        if (!isServer)
        {
            return;
        }

        NetworkServer.Destroy(gameObject);
    }