public void AttackWithProjectileVariableDamage(Rectangle attackerBounds, Matrix attackerTransformMatrix, Tuple <Point, float>[] attackerPointValueTuples, float damage) { IAttackableEntity[] attackableEntitiesWithinAttackersBounds = AttackHelper.AttackableEntitiesWithinAttackersBounds(attackerBounds, this.AttackableEntities.ToArray()); foreach (Tuple <Point, float> attackerPointValueTuple in attackerPointValueTuples) { Point attackerPointOnScreen = CollisionHelper.ConvertTexturePixelToScreenPixel(attackerPointValueTuple.Item1, attackerTransformMatrix); float attackerValue = damage * attackerPointValueTuple.Item2; foreach (IAttackableEntity attackableEntity in attackableEntitiesWithinAttackersBounds) { Point attackersPixelInAttackableEntitysTextureCoordinates = CollisionHelper.ConvertScreenPixelToTexturePixel(attackerPointOnScreen, 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]) { attackableEntity.AttackWithDamage(DamageType.Projectile, attackerValue); } } } } } }
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); }
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); }