//Kollar skada public static void KrockaObjekt(SpelObjekt objekt1, SpelObjekt objekt2) { if ((objekt1 is Fiende && objekt2 is Gubbe) || (objekt1 is Gubbe && objekt2 is Fiende)) { if (objekt2.CanDamage (objekt1)) objekt1.SkadaObjekt(objekt2.skada); if (objekt1.CanDamage(objekt2)) objekt2.SkadaObjekt(objekt1.skada); } else if ((objekt1 is Fiende && objekt2 is SpelarSkott) || (objekt1 is SpelarSkott && objekt2 is Fiende)) { if (objekt2.CanDamage(objekt1)) objekt1.SkadaObjekt(objekt2.skada); if (objekt1.CanDamage(objekt2)) objekt2.SkadaObjekt(objekt1.skada); } else if ((objekt1 is Gubbe && objekt2 is FiendeSkott) || (objekt1 is FiendeSkott && objekt2 is Gubbe)) { if (objekt2.CanDamage(objekt1)) objekt1.SkadaObjekt(objekt2.skada); if (objekt1.CanDamage(objekt2)) objekt2.SkadaObjekt(objekt1.skada); } else if (objekt1 is Fiende && objekt2 is Fiende) { if (!objekt1.immobile && !objekt2.immobile) { if (objekt2.CanDamage(objekt1)) objekt1.PushAwayFrom(objekt2); if (objekt1.CanDamage(objekt2)) objekt2.PushAwayFrom(objekt1); } } }
public override bool CanDamage(SpelObjekt other) { if (!oneTimeDamageLista.Contains(other)) { oneTimeDamageLista.Add(other); return true; } else { return false; } }
private Vector2 GetDirection(SpelObjekt other) { Vector2 dir = new Vector2(other.Position.X - Position.X, other.Position.Y - Position.Y); return GlobalFunctions.ScaleDirection(dir); }
public void PushAwayFrom(SpelObjekt other) { // För att undvika att de hamnar på varandra. // Leder till division med noll annars. if (position == other.Position) PositionX += 1; Vector2 dirAgainstOther = GetDirection(other); Position -= dirAgainstOther * repellingForce; }
public virtual Boolean CanDamage(SpelObjekt other) { return true; }
public void SkjutSkott(SpelObjekt shooter, Vector2 riktning_) { Position = shooter.Position; riktning = riktning_; lever = true; }