niwa99/Tower-Defense

View on GitHub
app/src/main/java/de/dhbw/map/objects/tower/TowerBoombastic.java

Summary

Maintainability
B
4 hrs
Test Coverage
package de.dhbw.map.objects.tower;

import android.widget.ImageView;

import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;

import de.dhbw.activities.GameActivity;
import de.dhbw.map.objects.bullet.Bomb;
import de.dhbw.map.objects.enemy.AEnemy;
import de.dhbw.map.structure.Field;

import static de.dhbw.util.Constants.DRAWABLE_BULLET_BOOMBASTIC;
import static de.dhbw.util.Constants.DRAWABLE_TOWER_BOOMBASTIC_BASE;
import static de.dhbw.util.Constants.DRAWABLE_TOWER_BOOMBASTIC_HEAD;
import static de.dhbw.util.Constants.FIELD_SIZE;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_1_COSTS;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_1_DAMAGE;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_1_FIRERATE_IN_SECONDS;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_1_RANGE_IN_PIXELS;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_1_TOWER_SIZE_PARAMS;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_2_COSTS;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_2_DAMAGE;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_2_FIRERATE_IN_SECONDS;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_2_RANGE_IN_PIXELS;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_3_COSTS;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_3_DAMAGE;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_3_FIRERATE_IN_SECONDS;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_3_RANGE_IN_PIXELS;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_4_COSTS;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_4_DAMAGE;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_4_FIRERATE_IN_SECONDS;
import static de.dhbw.util.Constants.TOWER_BOOMBASTIC_LEVEL_4_RANGE_IN_PIXELS;

public class TowerBoombastic extends ATower {

    /**
     * Constructor
     * @param field
     * @param level
     * @param gameActivity
     */
    public TowerBoombastic(Field field, int level, GameActivity gameActivity) {
        super(UUID.randomUUID(), TowerType.BOOMBASTIC,
                level, getTowerBoombasticCostsByLevel(level),
                getTowerBoombasticDamageByLevel(level), getTowerBoombasticRangeByLevel(level), getTowerBoombasticFirerateByLevel(level), field, gameActivity);

        ImageView baseImage = new ImageView(gameActivity);
        baseImage.setLayoutParams(TOWER_BOOMBASTIC_LEVEL_1_TOWER_SIZE_PARAMS);
        baseImage.setImageResource(DRAWABLE_TOWER_BOOMBASTIC_BASE);
        baseImage.setX(getPositionX());
        baseImage.setY(getPositionY());
        setBaseImage(baseImage);

        ImageView headImage = new ImageView(gameActivity);
        headImage.setLayoutParams(TOWER_BOOMBASTIC_LEVEL_1_TOWER_SIZE_PARAMS);
        headImage.setImageResource(DRAWABLE_TOWER_BOOMBASTIC_HEAD);
        headImage.setX(getPositionX());
        headImage.setY(getPositionY());
        setHeadImage(headImage);
    }

    /**
     * Constructor (TEST PURPOSE ONLY!)
     * @param field
     * @param level
     * @param image
     * @param gameActivity
     */
    public TowerBoombastic(Field field, int level, ImageView image, GameActivity gameActivity) {
        super(UUID.randomUUID(), TowerType.BOOMBASTIC,
                level, getTowerBoombasticCostsByLevel(level),
                getTowerBoombasticDamageByLevel(level), getTowerBoombasticRangeByLevel(level), getTowerBoombasticFirerateByLevel(level), field, gameActivity);
        setBaseImage(image);
        setHeadImage(image);
    }

    @Override
    public boolean fire(List<AEnemy> enemies) {
        headImage.get().setRotation((float)rotateImage(getFocusableEnemies(enemies)));
        if (super.fire(enemies)) {
            new Bomb(getPosition(), super.targetedEnemy,  enemies, this.getDamage(), DRAWABLE_BULLET_BOOMBASTIC,  gameActivity, FIELD_SIZE/2).start();
            return true;
        }
        return false;
    }

    @Override
    public int getCosts(int level) {
        return getTowerBoombasticCostsByLevel(level);
    }

    @Override
    public int getDamage(int level) {
        return getTowerBoombasticDamageByLevel(level);
    }

    @Override
    public int getRange(int level) {
        return getTowerBoombasticRangeByLevel(level);
    }

    @Override
    public int getFireRate(int level) {
        return getTowerBoombasticFirerateByLevel(level);
    }

    /**
     * Get the costs of this tower by level.
     * @param level
     * @return costs
     */
    public static int getTowerBoombasticCostsByLevel(int level) {
        switch (level) {
            case 1: return TOWER_BOOMBASTIC_LEVEL_1_COSTS;
            case 2: return TOWER_BOOMBASTIC_LEVEL_2_COSTS;
            case 3: return TOWER_BOOMBASTIC_LEVEL_3_COSTS;
            case 4: return TOWER_BOOMBASTIC_LEVEL_4_COSTS;
            default: return TOWER_BOOMBASTIC_LEVEL_4_COSTS;
        }
    }

    /**
     * Get the damage of this tower by level.
     * @param level
     * @return damage
     */
    private static int getTowerBoombasticDamageByLevel(int level) {
        switch (level) {
            case 1: return TOWER_BOOMBASTIC_LEVEL_1_DAMAGE;
            case 2: return TOWER_BOOMBASTIC_LEVEL_2_DAMAGE;
            case 3: return TOWER_BOOMBASTIC_LEVEL_3_DAMAGE;
            case 4: return TOWER_BOOMBASTIC_LEVEL_4_DAMAGE;
            default: return TOWER_BOOMBASTIC_LEVEL_4_DAMAGE;
        }
    }

    /**
     * Get the range in px of this tower by level.
     * @param level
     * @return range
     */
    private static int getTowerBoombasticRangeByLevel(int level) {
        switch (level) {
            case 1: return TOWER_BOOMBASTIC_LEVEL_1_RANGE_IN_PIXELS;
            case 2: return TOWER_BOOMBASTIC_LEVEL_2_RANGE_IN_PIXELS;
            case 3: return TOWER_BOOMBASTIC_LEVEL_3_RANGE_IN_PIXELS;
            case 4: return TOWER_BOOMBASTIC_LEVEL_4_RANGE_IN_PIXELS;
            default: return TOWER_BOOMBASTIC_LEVEL_4_RANGE_IN_PIXELS;
        }
    }

    /**
     * Get the firerate of this tower by level.
     * @param level
     * @return firerate
     */
    private static int getTowerBoombasticFirerateByLevel(int level) {
        switch (level) {
            case 1: return TOWER_BOOMBASTIC_LEVEL_1_FIRERATE_IN_SECONDS;
            case 2: return TOWER_BOOMBASTIC_LEVEL_2_FIRERATE_IN_SECONDS;
            case 3: return TOWER_BOOMBASTIC_LEVEL_3_FIRERATE_IN_SECONDS;
            case 4: return TOWER_BOOMBASTIC_LEVEL_4_FIRERATE_IN_SECONDS;
            default: return TOWER_BOOMBASTIC_LEVEL_4_FIRERATE_IN_SECONDS;
        }
    }
}