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); } }
// 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); }
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); }
protected override void OnDeath(IDamager damager) { new Poof().PositionRelativeTo(Object, 0, 0); Object.Remove(); new GameOverText(Object.Scene); }
void GetBoink(IDamager damager) { if (damager != null && damager.GetTeam() != team) { Debug.Log("ow"); Damage(damager.GetDamage()); } }
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; }
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); }
protected virtual void Died(IDamager damager) { DeathAction(damager); if (OnDied != null) { OnDied(damager); } }
/// <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); }
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); } }
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()); } }
private void DamageEntity(IDamageable <GameEntityTag> damageAble, IDamager <GameEntityTag> damager) { if (damageAble == null) { return; } int damage = damager.GetDamage(); damageAble?.Damage(damage, damager.DamagerType); }
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); }
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); } }
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); } }
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); }
private void Start() { attackVariable = Instantiate(attackVariable); _damager = new Damager() { Value = attackVariable.Value }; _cam = Camera.main; _info = new TextVariable { Value = textComponent.text }; _info.PropertyChanged += NpcOnPropertyChanged; }
private void Awake() { _damagerModel = GetComponent <IDamager>(); _attackContactFilter.layerMask = hittableLayers; _attackContactFilter.useLayerMask = true; _attackContactFilter.useTriggers = canHitTriggers; if (offsetBasedOnSpriteFacing && controller != null) { _spriteOriginallyFlipped = controller.FacingRight; } _damagerTransform = transform; }
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); } }
public void TakeDamage(IDamager damager) { if (!IsAlive) { return; } CurrentHealth -= damager.BaseDamage; if (CurrentHealth <= 0) { CurrentHealth = 0; Die(); } else { OnDamageTaken(); } }
/// 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); } }
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); }
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); } }
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); }
public void Damage(float damageAmount, IDamager damager) { if (!isServer) { return; } if (isDead) { return; } hullIntegrity -= damageAmount; if (isDead) { Kill(damager); } }
public void Kill(IDamager damager) { if (!isServer) { return; } NetworkServer.Destroy(gameObject); }