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++;
            }
        }
Exemplo n.º 2
0
        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;
 }