Class Tower

All Implemented Interfaces:
com.badlogic.gdx.utils.Disposable, com.esotericsoftware.kryo.KryoSerializable, ScheduledUpdater.Updatable
Direct Known Subclasses:
AirTower, BasicTower, BlastTower, CannonTower, CrusherTower, FlamethrowerTower, FreezingTower, GaussTower, LaserTower, MinigunTower, MissileTower, MultishotTower, SniperTower, SplashTower, TeslaTower, VenomTower

public abstract class Tower extends Building implements com.badlogic.gdx.utils.Disposable, ScheduledUpdater.Updatable
  • Field Details

    • ABILITY_INDEX_SPECIAL

      public static final int ABILITY_INDEX_SPECIAL
      See Also:
    • ABILITY_INDEX_ULTIMATE

      public static final int ABILITY_INDEX_ULTIMATE
      See Also:
    • ABILITY_INDEX_POWERFUL

      public static final int ABILITY_INDEX_POWERFUL
      See Also:
    • ABILITIES_COUNT

      public static final int ABILITIES_COUNT
      See Also:
    • DPS_STAT_SLOTS

      public static final int DPS_STAT_SLOTS
      See Also:
    • DPS_STAT_INTERVAL

      public static final float DPS_STAT_INTERVAL
      See Also:
    • MAX_LEVEL

      public static final int MAX_LEVEL
      See Also:
    • MAX_UPGRADE_LEVEL

      public static final int MAX_UPGRADE_LEVEL
      See Also:
    • SHADOW_COLOR

      public static final com.badlogic.gdx.graphics.Color SHADOW_COLOR
    • ABILITY_NAMES

      public static final String[] ABILITY_NAMES
    • LEVEL_EXPERIENCE

      public static final int[] LEVEL_EXPERIENCE
    • LEVEL_EXPERIENCE_MILESTONES

      public static final int[] LEVEL_EXPERIENCE_MILESTONES
    • id

      public int id
    • type

      public TowerType type
    • aimStrategy

      public Tower.AimStrategy aimStrategy
    • moneySpentOn

      public int moneySpentOn
    • searchModifiersNearby

      protected int searchModifiersNearby
    • bountyModifiersNearby

      public int bountyModifiersNearby
    • powerBonuses

      public PowerBonuses powerBonuses
    • attackedSinceLastConstantEnemySeeking

      protected boolean attackedSinceLastConstantEnemySeeking
    • damageGiven

      public float damageGiven
    • shotCount

      public int shotCount
    • angle

      public float angle
    • experience

      public float experience
    • currentLevelExperience

      public float currentLevelExperience
    • nextLevelExperience

      public float nextLevelExperience
    • level

      public int level
    • installedAbilities

      public boolean[] installedAbilities
    • timeSinceLastAttack

      protected float timeSinceLastAttack
    • rangeInPixels

      public float rangeInPixels
    • minRangeInPixels

      public float minRangeInPixels
    • experienceGeneration

      public float experienceGeneration
    • experienceMultiplier

      public float experienceMultiplier
    • outOfOrder

      public boolean outOfOrder
    • attackDisabled

      public boolean attackDisabled
    • abilityAvailableParticleEffect

      public com.badlogic.gdx.graphics.g2d.ParticleEffectPool.PooledEffect abilityAvailableParticleEffect
    • dpsDamage

      public float[] dpsDamage
    • dpsTime

      public float[] dpsTime
    • mdps

      public float mdps
    • enemiesKilled

      public int enemiesKilled
    • bonusCoinsBrought

      public float bonusCoinsBrought
    • sbForUI

      protected static final com.badlogic.gdx.utils.StringBuilder sbForUI
  • Constructor Details

    • Tower

      protected Tower(TowerType towerType)
  • Method Details

    • write

      public void write(com.esotericsoftware.kryo.Kryo kryo, com.esotericsoftware.kryo.io.Output output)
      Specified by:
      write in interface com.esotericsoftware.kryo.KryoSerializable
      Overrides:
      write in class Building
    • read

      public void read(com.esotericsoftware.kryo.Kryo kryo, com.esotericsoftware.kryo.io.Input input)
      Specified by:
      read in interface com.esotericsoftware.kryo.KryoSerializable
      Overrides:
      read in class Building
    • setAimStrategy

      public void setAimStrategy(Tower.AimStrategy aimStrategy)
    • setRegistered

      public void setRegistered(GameSystemProvider S)
      Overrides:
      setRegistered in class Registrable
    • setUnregistered

      public void setUnregistered()
      Overrides:
      setUnregistered in class Registrable
    • getWalkCost

      public float getWalkCost()
      Overrides:
      getWalkCost in class Building
    • toJson

      public void toJson(com.badlogic.gdx.utils.Json json)
      Внутри writeObjectStart
      Overrides:
      toJson in class Building
    • loadFromJson

      public void loadFromJson(com.badlogic.gdx.utils.JsonValue value)
    • cloneBuilding

      public Tower cloneBuilding()
      Specified by:
      cloneBuilding in class Building
    • isOutOfOrder

      public boolean isOutOfOrder()
    • getTarget

      @Null public Enemy getTarget()
    • setTarget

      public void setTarget(Enemy target)
    • canNewAbilityBeInstalled

      public boolean canNewAbilityBeInstalled()
      Returns:
      true, если игрок может выбрать новый навых башне (есть свободные "очки" выбора навыка)
    • canAbilityBeInstalled

      public boolean canAbilityBeInstalled(int idx)
    • isAbilityInstalled

      public boolean isAbilityInstalled(int abilityIdx)
    • getLevelForExperience

      public static int getLevelForExperience(float exp)
    • addExperience

      public void addExperience(float exp)
    • setExperience

      public void setExperience(float exp)
      Установка опыта напрямую
      Parameters:
      exp - кол-во опыта, которое будет установлено точно таким же
    • getMaxTowerLevel

      public int getMaxTowerLevel()
    • calculateXpLevel

      public void calculateXpLevel()
      Calculate level, nextLevelExperience and currentLevelExperience based on experience. Tower's level may increase after calling this method. TowerSystem.updateLevelExperience() calls this method once per frame and triggers events related to the tower's level change and is preferred over calling this method directly. Calling this method directly won't trigger any events and may be useful if you use some temporary towers and don't want it to cause side effects.
    • getMaxUpgradeLevel

      public int getMaxUpgradeLevel()
    • getLevel

      public int getLevel()
    • setLevel

      public void setLevel(int level)
    • getPowerCombinedMultiplier

      public float getPowerCombinedMultiplier()
      Returns:
      getPowerMultiplier + бонус от уровней башни
    • getScheduledUpdateInterval

      public float getScheduledUpdateInterval()
    • scheduledUpdate

      public void scheduledUpdate(float deltaTime)
      Specified by:
      scheduledUpdate in interface ScheduledUpdater.Updatable
    • scheduledUpdatableSetId

      public final void scheduledUpdatableSetId(int id)
      Specified by:
      scheduledUpdatableSetId in interface ScheduledUpdater.Updatable
    • scheduledUpdatableGetId

      public final int scheduledUpdatableGetId()
      Specified by:
      scheduledUpdatableGetId in interface ScheduledUpdater.Updatable
    • update

      public void update(float deltaTime)
    • getSellPrice

      public int getSellPrice()
    • isSellFullRefundStillActive

      public boolean isSellFullRefundStillActive()
    • findTarget

      public Enemy findTarget()
    • findTarget

      public Enemy findTarget(ObjectFilter<Enemy> filter)
    • getUpgradeLevel

      public int getUpgradeLevel()
    • upgrade

      public void upgrade(int toLevel)
    • setUpgradeLevel

      public void setUpgradeLevel(int toLevel)
      Set tower's upgrade level directly, without validation / cache updates
      Parameters:
      toLevel - upgrade level of the tower, silently clamped between 0 and MAX_UPGRADE_LEVEL
    • upgrade

      public void upgrade()
    • traverseTilesInRange

      public final void traverseTilesInRange(ObjectFilter<Tile> cb)
      Get all of the tiles in tower's range (even if they touch the range slightly). Try not to change the game's state during iteration - removing the tower, upgrading it or giving it XP may change its range which may result in unexpected behavior
    • updateCache

      public void updateCache()
      Обновляет кэш текущих характеристик башни Так как характеристики обновляются, одновременно обновляется массив тайлов в радиусе поражения
      Specified by:
      updateCache in class Building
    • getExpLevelStatBonusPercentage

      public static float getExpLevelStatBonusPercentage(int expLevel, TowerType towerType, GameValueProvider gvp)
      Parameters:
      expLevel - for XP level
      gvp - provider of GameValues
      Returns:
      bonus percentage for every stat (except Special stats and Range) depending on tower's XP level. Besides default bonus, takes GameValueType.TOWERS_POWER_PER_LEVEL_(TILL/AFTER)_10 into account
    • isStatAffectedByPower

      public boolean isStatAffectedByPower(TowerStatType towerStatType)
    • getStat

      public final float getStat(TowerStatType towerStatType)
      Returns:
      cached stat of the tower, affected by every possible bonus / modifier / ability etc. Updates with updateCache(), returns 0 for stats the tower does not have
    • dispose

      public void dispose()
      Description copied from interface: com.badlogic.gdx.utils.Disposable
      Releases all resources of this object.
      Specified by:
      dispose in interface com.badlogic.gdx.utils.Disposable
    • applyDrawInterpolation

      public void applyDrawInterpolation(float interpolatedTime)
    • drawBatch

      public void drawBatch(com.badlogic.gdx.graphics.g2d.Batch batch, float deltaTime)
    • drawBatchAdditive

      public void drawBatchAdditive(com.badlogic.gdx.graphics.g2d.Batch batch, float deltaTime)
    • drawBaseToCache

      protected void drawBaseToCache(com.badlogic.gdx.graphics.g2d.SpriteCache spriteCache, int x, int y, MapRenderingSystem.DrawMode drawMode)
    • drawBaseExtrasToCache

      protected void drawBaseExtrasToCache(com.badlogic.gdx.graphics.g2d.SpriteCache spriteCache, int x, int y, MapRenderingSystem.DrawMode drawMode)
    • drawBase

      public final void drawBase(com.badlogic.gdx.graphics.g2d.SpriteCache spriteCache, int x, int y, MapRenderingSystem.DrawMode drawMode)
      Overrides:
      drawBase in class Building
    • drawAbilitiesToCache

      public void drawAbilitiesToCache(com.badlogic.gdx.graphics.g2d.SpriteCache spriteCache, int x, int y)
    • drawWeapon

      public void drawWeapon(com.badlogic.gdx.graphics.g2d.Batch batch, float x, float y, float size, float deltaTime)
    • drawGlitch

      public void drawGlitch(com.badlogic.gdx.graphics.g2d.Batch batch)
    • drawSelectedRange

      public void drawSelectedRange(com.badlogic.gdx.graphics.g2d.Batch batch, RangeCircle rangeCircle)
      Overrides:
      drawSelectedRange in class Building
    • drawHoveredRange

      public void drawHoveredRange(com.badlogic.gdx.graphics.g2d.Batch batch, RangeCircle rangeCircle)
      Overrides:
      drawHoveredRange in class Building
    • placedOnMap

      public void placedOnMap()
      Overrides:
      placedOnMap in class Building
    • removedFromMap

      public void removedFromMap()
      Overrides:
      removedFromMap in class Building
    • getEnemyPriority

      public int getEnemyPriority(Enemy enemy)
      0 - lowest priority (with lowAimPriority) 10 - regular priority
    • getStartingLevel

      public int getStartingLevel()
    • getRange

      public float getRange()
    • getMinRange

      public float getMinRange()
    • getWeaponTextures

      public abstract Quad getWeaponTextures()
    • getUniqueStatDescription

      public String getUniqueStatDescription()
    • calculateStat

      protected float calculateStat(TowerStatType towerStatType)
    • hasCustomButton

      public boolean hasCustomButton()
      Только если canAim = false
    • isCustomButtonNeedMapPoint

      public boolean isCustomButtonNeedMapPoint()
    • customButtonAction

      public void customButtonAction(int mapX, int mapY)
    • updateCustomButton

      public void updateCustomButton(ComplexButton complexButton, boolean isPointing)
    • fillTowerMenu

      public void fillTowerMenu(com.badlogic.gdx.scenes.scene2d.Group container, com.badlogic.gdx.utils.ObjectMap<String,Object> elements)
      Добавить / обновить элементы в меню башни Вызывается каждый кадр, когда видно меню башни elements сохраняется между вызовами метода, чтобы не создавать актеров заново. Если он пустой - значит, вызвали первый раз и надо создать Можно не обновлять ничего, если состояние устраивает (можно хранить любые данные в elements, например хэш состояния или предыдущие значения)
    • canAim

      public abstract boolean canAim()
    • shouldSearchForTarget

      public boolean shouldSearchForTarget()
    • canAttackEnemy

      public boolean canAttackEnemy(Enemy enemy)
    • canAttack

      public boolean canAttack()
    • rotateTo

      public void rotateTo(float x, float y, float deltaTime, float rotationSpeed)
    • rotateTo

      public void rotateTo(float needAngle, float deltaTime, float rotationSpeed)
    • onPreSell

      public void onPreSell()
    • onAbilitySet

      public void onAbilitySet(int abilityIdx, boolean isSet)
    • updateBasicRotation

      protected void updateBasicRotation(float deltaTime, float rotationSpeed)
      Стандартный способ обработки поворота
    • getAttackDelay

      public float getAttackDelay()
    • attack

      public void attack(int shotCount)