app/src/main/java/de/dhbw/map/objects/tower/TowerPlasmarizer.java
package de.dhbw.map.objects.tower;
import android.widget.ImageView;
import java.util.List;
import java.util.UUID;
import de.dhbw.activities.GameActivity;
import de.dhbw.map.objects.bullet.ABullet;
import de.dhbw.map.objects.bullet.PlasmaBall;
import de.dhbw.map.objects.enemy.AEnemy;
import de.dhbw.map.structure.Field;
import static de.dhbw.util.Constants.DRAWABLE_TOWER_PLASMARIZER_BASE;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_1_COSTS;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_1_DAMAGE;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_1_FIRERATE_IN_SECONDS;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_1_RANGE_IN_PIXELS;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_2_COSTS;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_2_DAMAGE;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_2_FIRERATE_IN_SECONDS;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_2_RANGE_IN_PIXELS;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_3_COSTS;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_3_DAMAGE;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_3_FIRERATE_IN_SECONDS;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_3_RANGE_IN_PIXELS;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_1_TOWER_SIZE_PARAMS;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_4_COSTS;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_4_DAMAGE;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_4_FIRERATE_IN_SECONDS;
import static de.dhbw.util.Constants.TOWER_PLASMARIZER_LEVEL_4_RANGE_IN_PIXELS;
public class TowerPlasmarizer extends ATower {
private final int plasmaRange = 300;
/**
* Constructor
* @param field
* @param level
* @param gameActivity
*/
public TowerPlasmarizer(Field field, int level, GameActivity gameActivity) {
super(UUID.randomUUID(), TowerType.PLASMARIZER, level, getPlasmarizerCostsByLevel(level), getPlasmarizerDamageByLevel(level),
getPlasmarizerRangeByLevel(level), getPlasmarizerFirerateByLevel(level), field, gameActivity);
ImageView baseImage = new ImageView(gameActivity);
baseImage.setLayoutParams(TOWER_PLASMARIZER_LEVEL_1_TOWER_SIZE_PARAMS);
baseImage.setImageResource(DRAWABLE_TOWER_PLASMARIZER_BASE);
baseImage.setX(getPositionX());
baseImage.setY(getPositionY());
setBaseImage(baseImage);
}
@Override
public boolean fire(List<AEnemy> enemies){
if(super.fire(enemies)){
ABullet plasmaBall = new PlasmaBall(getPosition(), targetedEnemy, this.getDamage(), plasmaRange, enemies, gameActivity, 0);
plasmaBall.setBulletSpeed((int) (plasmaBall.getBulletSpeed()*1.5));
plasmaBall.start();
return true;
}
return false;
}
@Override
public int getCosts(int level) {
return getPlasmarizerCostsByLevel(level);
}
@Override
public int getDamage(int level) {
return getPlasmarizerDamageByLevel(level);
}
@Override
public int getRange(int level) {
return getPlasmarizerRangeByLevel(level);
}
@Override
public int getFireRate(int level) {
return getPlasmarizerFirerateByLevel(level);
}
/**
* Get the costs of this tower by level.
* @param level
* @return costs
*/
private static int getPlasmarizerCostsByLevel(int level) {
switch (level) {
case 1: return TOWER_PLASMARIZER_LEVEL_1_COSTS;
case 2: return TOWER_PLASMARIZER_LEVEL_2_COSTS;
case 3: return TOWER_PLASMARIZER_LEVEL_3_COSTS;
case 4: return TOWER_PLASMARIZER_LEVEL_4_COSTS;
default: return TOWER_PLASMARIZER_LEVEL_4_COSTS;
}
}
/**
* Get the damage of this tower by level.
* @param level
* @return damage
*/
private static int getPlasmarizerDamageByLevel(int level) {
switch (level) {
case 1: return TOWER_PLASMARIZER_LEVEL_1_DAMAGE;
case 2: return TOWER_PLASMARIZER_LEVEL_2_DAMAGE;
case 3: return TOWER_PLASMARIZER_LEVEL_3_DAMAGE;
case 4: return TOWER_PLASMARIZER_LEVEL_4_DAMAGE;
default: return TOWER_PLASMARIZER_LEVEL_4_DAMAGE;
}
}
/**
* Get the range in px of this tower by level.
* @param level
* @return range
*/
private static int getPlasmarizerRangeByLevel(int level) {
switch (level) {
case 1: return TOWER_PLASMARIZER_LEVEL_1_RANGE_IN_PIXELS;
case 2: return TOWER_PLASMARIZER_LEVEL_2_RANGE_IN_PIXELS;
case 3: return TOWER_PLASMARIZER_LEVEL_3_RANGE_IN_PIXELS;
case 4: return TOWER_PLASMARIZER_LEVEL_4_RANGE_IN_PIXELS;
default: return TOWER_PLASMARIZER_LEVEL_4_RANGE_IN_PIXELS;
}
}
/**
* Get the firerate of this tower by level.
* @param level
* @return firerate
*/
private static int getPlasmarizerFirerateByLevel(int level) {
switch (level) {
case 1: return TOWER_PLASMARIZER_LEVEL_1_FIRERATE_IN_SECONDS;
case 2: return TOWER_PLASMARIZER_LEVEL_2_FIRERATE_IN_SECONDS;
case 3: return TOWER_PLASMARIZER_LEVEL_3_FIRERATE_IN_SECONDS;
case 4: return TOWER_PLASMARIZER_LEVEL_4_FIRERATE_IN_SECONDS;
default: return TOWER_PLASMARIZER_LEVEL_4_FIRERATE_IN_SECONDS;
}
}
}