private void Attack(SurvivorSprite survivorSprite) { this.AttackerBooleans = shotgunAttackTextureSheet.CellCollisionBooleans[0]; this.AttackerPixels = shotgunAttackTextureSheet.CellCollisionPixels[0]; this.AttackerBounds = CollisionHelper.CalculateCollisionRectangle( survivorSprite.Location.TransformMatrixForOffset(shotgunAttackTextureSheet.CellOffsets[0]), new Point(shotgunAttackTextureSheet.CellSourceRectangles[0].Width, shotgunAttackTextureSheet.CellSourceRectangles[0].Height)); this.AttackerTransformMatrix = survivorSprite.Location.TransformMatrixForOffset(shotgunAttackTextureSheet.CellOffsets[0]); MultiAttackResults multiAttackResults = survivorSprite.Game.ZombiesSubsystem.ZombiesAttackManager.AttackWithProjectile(this, DamageValue); survivorSprite.Game.Results.KillResults.ShotgunBlastKills += multiAttackResults.Kills; if (multiAttackResults.Kills > 0) { survivorSprite.Game.Results.ShotgunWeaponResults.UsageResultingInKills++; if (multiAttackResults.Kills == 2) { survivorSprite.Game.Results.KillResults.DoubleKills++; } else if (multiAttackResults.Kills == 3) { survivorSprite.Game.Results.KillResults.TripleKills++; } } else if (multiAttackResults.Damages > 0) { survivorSprite.Game.Results.ShotgunWeaponResults.UsageResultingInDamage++; } else { survivorSprite.Game.Results.ShotgunWeaponResults.UsageResultingInNoDamage++; } }
public MultiAttackResults AttackWithProjectile(IAttackerEntity attackerEntity, float damage) { IAttackableEntity[] attackableEntitiesWithinAttackersBounds = AttackHelper.AttackableEntitiesWithinAttackersBounds(attackerEntity.AttackerBounds, this.AttackableEntities.ToArray()); float[] damageValuesArray = new float[attackableEntitiesWithinAttackersBounds.Length]; MultiAttackResults multiAttackResults = new MultiAttackResults(); foreach (Point attackersPixel in attackerEntity.AttackerPixels) { Point attackersPixelInScreenCoordinates = CollisionHelper.ConvertTexturePixelToScreenPixel(attackersPixel, attackerEntity.AttackerTransformMatrix); for (int index = 0; index < attackableEntitiesWithinAttackersBounds.Length; index++) { IAttackableEntity attackableEntity = attackableEntitiesWithinAttackersBounds[index]; Point attackersPixelInAttackableEntitysTextureCoordinates = CollisionHelper.ConvertScreenPixelToTexturePixel(attackersPixelInScreenCoordinates, attackableEntity.AttackTransformMatrix); if (attackersPixelInAttackableEntitysTextureCoordinates.X >= 0 && attackersPixelInAttackableEntitysTextureCoordinates.Y >= 0) { if (attackersPixelInAttackableEntitysTextureCoordinates.X < attackableEntity.AttackBooleans.GetLength(0) && attackersPixelInAttackableEntitysTextureCoordinates.Y < attackableEntity.AttackBooleans.GetLength(1)) { if (attackableEntity.AttackBooleans[attackersPixelInAttackableEntitysTextureCoordinates.X, attackersPixelInAttackableEntitysTextureCoordinates.Y]) { damageValuesArray[index] += damage; } } } } } for (int index = 0; index < attackableEntitiesWithinAttackersBounds.Length; index++) { if (damageValuesArray[index] > 0.0f) { if (attackableEntitiesWithinAttackersBounds[index].AttackWithDamage(DamageType.Projectile, damageValuesArray[index])) { multiAttackResults.Kills++; } else { multiAttackResults.Damages++; } } } return(multiAttackResults); }
public MultiAttackResults AttackWithProjectile(IAttackerEntity attackerEntity, float damage) { IAttackableEntity[] attackableEntitiesWithinAttackersBounds = AttackHelper.AttackableEntitiesWithinAttackersBounds(attackerEntity.AttackerBounds, this.AttackableEntities.ToArray()); float[] damageValuesArray = new float[attackableEntitiesWithinAttackersBounds.Length]; MultiAttackResults multiAttackResults = new MultiAttackResults(); foreach (Point attackersPixel in attackerEntity.AttackerPixels) { Point attackersPixelInScreenCoordinates = CollisionHelper.ConvertTexturePixelToScreenPixel(attackersPixel, attackerEntity.AttackerTransformMatrix); for (int index = 0; index < attackableEntitiesWithinAttackersBounds.Length; index++) { IAttackableEntity attackableEntity = attackableEntitiesWithinAttackersBounds[index]; Point attackersPixelInAttackableEntitysTextureCoordinates = CollisionHelper.ConvertScreenPixelToTexturePixel(attackersPixelInScreenCoordinates, attackableEntity.AttackTransformMatrix); if (attackersPixelInAttackableEntitysTextureCoordinates.X >= 0 && attackersPixelInAttackableEntitysTextureCoordinates.Y >= 0) { if (attackersPixelInAttackableEntitysTextureCoordinates.X < attackableEntity.AttackBooleans.GetLength(0) && attackersPixelInAttackableEntitysTextureCoordinates.Y < attackableEntity.AttackBooleans.GetLength(1)) { if (attackableEntity.AttackBooleans[attackersPixelInAttackableEntitysTextureCoordinates.X,attackersPixelInAttackableEntitysTextureCoordinates.Y]) { damageValuesArray[index] += damage; } } } } } for (int index = 0; index < attackableEntitiesWithinAttackersBounds.Length; index++) { if (damageValuesArray[index] > 0.0f) { if (attackableEntitiesWithinAttackersBounds[index].AttackWithDamage(DamageType.Projectile, damageValuesArray[index])) { multiAttackResults.Kills++; } else { multiAttackResults.Damages++; } } } return multiAttackResults; }