Example #1
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);
        }
Example #2
0
 public AttackResults AttackWithProjectileSingleTarget(IAttackerEntity attackerEntity, float damage)
 {
     IAttackableEntity[] attackableEntitiesWithinAttackersBounds = AttackHelper.AttackableEntitiesWithinAttackersBounds(attackerEntity.AttackerBounds, this.AttackableEntities.ToArray());
     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])
                     {
                         if (attackableEntity.AttackWithDamage(DamageType.Projectile, damage))
                         {
                             return(AttackResults.Kill);
                         }
                         else
                         {
                             return(AttackResults.Damage);
                         }
                     }
                 }
             }
         }
     }
     return(AttackResults.None);
 }