Skip to content

Commit

Permalink
Automatic Defence Mechanism
Browse files Browse the repository at this point in the history
When an enemy reaches you, an explosion occurs which destroys all other
infantry in a 100px radius. This is to stop large groups of infantry
killing your really fast.
  • Loading branch information
Torrunt committed Oct 28, 2013
1 parent 16bcb02 commit 6480530
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 12 deletions.
5 changes: 3 additions & 2 deletions SingleSwitchGame/src/Entities/AI/InfantrymanAI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ protected override void OnWaypointReached()
Explosion explosion = new Explosion(Game, 8);
explosion.Position = Obj.Position;
Game.Layer_Other.AddChild(explosion);
Obj.Damage(Obj.Health);
Obj.Damage(Obj.Health, 0, Game.Player);
}
AlreadyAvoidedLandmine = true;
}
Expand All @@ -77,7 +77,8 @@ public override void Update(float dt)
// Reached Hill
if (Game.Player != null)
Game.Player.Damage(1);
Obj.Damage(Obj.Health);
Game.Player.Weapon.Explode(Game.Player.Position, 100f, true);

return;
}

Expand Down
2 changes: 1 addition & 1 deletion SingleSwitchGame/src/Entities/Characters/Infantryman.cs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public override void Update(float dt)
return;
// Red Hot Beach?
if (Game.Player.HasPowerup(Powerup.RED_HOT_BEACH))
Damage(10, DamageType.FIRE);
Damage(10, DamageType.FIRE, Game.Player);
}
base.Update(dt);
}
Expand Down
20 changes: 12 additions & 8 deletions SingleSwitchGame/src/Weapons/CannonWeapon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,12 @@ public override void Fire(Vector2f pos, float direction, Vector2f? targetPos = n
ShootSound2.Play();
}

public override void Explode(Vector2f pos)
/// <param name="radius">If left at -1, will use ExplosionRadius.</param>
/// <param name="directCall">If true, will not credit kill or activate pick-ups.</param>
public override void Explode(Vector2f pos, float radius = -1, bool directCall = false)
{
if (radius == -1)
radius = ExplosionRadius;
// Collision
bool hitSomething = false;
int numChildren = Game.Layer_Objects.NumChildren;
Expand All @@ -72,19 +76,19 @@ public override void Explode(Vector2f pos)

if (obj is PhysicalEntity && !obj.CanTakeDamage)
continue;
if ((!(obj is CollisionEntity) || obj.Collision == null) && !Utils.InCircle(pos, ExplosionRadius, obj.Position)) // Collide with Position if obj is not a CollisionEntity or has no Collision
if ((!(obj is CollisionEntity) || obj.Collision == null) && !Utils.InCircle(pos, radius, obj.Position)) // Collide with Position if obj is not a CollisionEntity or has no Collision
continue;
if (obj.Collision is CircleShape && !Utils.CircleCircleCollision(pos, ExplosionRadius, obj.Position, obj.Collision.Radius))
if (obj.Collision is CircleShape && !Utils.CircleCircleCollision(pos, radius, obj.Position, obj.Collision.Radius))
continue;
if (obj.Collision is RectangleShape && !Utils.CircleRectangleCollision(pos, ExplosionRadius, obj.Collision, obj.Rotation, obj.Position))
if (obj.Collision is RectangleShape && !Utils.CircleRectangleCollision(pos, radius, obj.Collision, obj.Rotation, obj.Position))
continue;

if (obj is PhysicalEntity)
{
// Damage
obj.Damage(Damage, 0, SourceObject);
obj.Damage(Damage, 0, !directCall ? SourceObject : null);
}
else if (obj is Pickup)
else if (!directCall && obj is Pickup)
{
// Pickup
obj.Activate(SourceObject);
Expand All @@ -103,7 +107,7 @@ public override void Explode(Vector2f pos)
if (hitSomething || Utils.InCircle(Game.Island, pos))
{
// Explosion
Explosion explosion = new Explosion(Game, ExplosionRadius);
Explosion explosion = new Explosion(Game, radius);
explosion.Position = pos;
Game.Layer_OtherAbove.AddChild(explosion);

Expand All @@ -128,7 +132,7 @@ public override void Explode(Vector2f pos)
}


if (Game.Player == null)
if (directCall || Game.Player == null)
return;
if (hitSomething)
Game.Player.IncreaseScoreMultiplier();
Expand Down
2 changes: 1 addition & 1 deletion SingleSwitchGame/src/Weapons/ProjectileWeapon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public virtual void OnProjectileCollision(Projectile proj, dynamic hitTarget = n
Explode(proj.Position);
}
/// <summary>The Explosion caused by the projectiles if there is one.</summary>
public virtual void Explode(Vector2f pos)
public virtual void Explode(Vector2f pos, float radius = -1, bool directCall = false)
{
}

Expand Down

0 comments on commit 6480530

Please sign in to comment.