protected override void OnCollisionEnter2D(Collision2D col) { if (col.gameObject.GetComponent <TongueJoint>()) { return; } if (col.gameObject.GetComponent <ProjectileController>()) { return; } //if (vehicle.isColliding.Contains(col.gameObject)) return; //vehicle.isColliding.Add(col.gameObject); AffectVisitor damager = col.gameObject.GetComponent <AffectVisitor>(); AffectVisitable damagable = gameObject.GetComponent <AffectVisitable>(); if (damager == null) { //Debug.LogWarning("Non-damager " + col.gameObject.name + " collided with damageable " + gameObject.name + ", please implement AffectVisitor method on it, or exclude from check on this damagable. "); return; } damagable.AcceptAffectFrom(damager); }
// i hate muddying this simple pure "CauseAffectTo" with this unclean conditional, it violates clean code conventions... i have no better choice at the moment... // it's more like "AttemptCauseDamageNow" public override int CauseAffectTo(AffectVisitable damagable) { int damage = (hitHappenedRecently) ? 0 : this.damage; if (!hitHappenedRecently) { hitHappenedRecently = true; this.stats.damageDelt = damage; } return(damage); }
void ReceiveDamage(Collision2D col) { if (!col.gameObject.GetComponent <ProjectileController>()) { return; } AffectVisitor damager = col.gameObject.GetComponent <AffectVisitor>(); AffectVisitable damagable = gameObject.GetComponent <AffectVisitable>(); damagable.AcceptAffectFrom(damager); }
protected override void OnCollisionEnter2D(Collision2D col) { if (!col.gameObject.GetComponent <ProjectileController>()) { return; } AffectVisitor damager = col.gameObject.GetComponent <AffectVisitor>(); AffectVisitable damagable = gameObject.GetComponent <AffectVisitable>(); damagable.AcceptAffectFrom(damager); }
public override int CauseAffectTo(AffectVisitable damagable) { return(0); }
public abstract int CauseAffectTo(AffectVisitable visitable);
public virtual int CauseAffectTo(AffectVisitable visitable) { return(damage); }
public override int CauseAffectTo(AffectVisitable visitable) { return(damage); }