private void Update()
    {
        float moveDistance = Time.deltaTime * speed;

        distanceTraveled += Time.deltaTime * speed;
        float traveledPercent = distanceTraveled / distanceToTarget;

        if (traveledPercent >= 1)
        {
            Transform smokeTransform = SmokeEffectPool.Instance.GetObject().transform;
            IsometricLocomotion.SetPositionOnPlane(smokeTransform, transform.position);
            smokeTransform.localScale = Vector3.one * impactScale;
            //probably should calculate isometric ranges somewhere else
            if (splash)
            {
                SplashProcessor.Instance.SplashArea(transform.position, new Vector2(impactScale, impactScale * 2 / 3), damage);
            }
            else
            {
                target.TakeDamage(damage);
            }
            gameObject.SetActive(false);
            return;
        }
        locomotion.PlanarMovement(moveDirection * moveDistance, (trajectory - 2 * trajectory * traveledPercent) * Time.deltaTime);
    }
    private void Shoot(EnemyDummy target)
    {
        ProjectileDummy dummy = ProjectilePool.Instance.GetObject();

        dummy.Setup(projectile, gameObject.transform.position + (Vector3)shootingPoint, target, damage, splash);
        Transform smokeEffectTransform = SmokeEffectPool.Instance.GetObject().transform;

        smokeEffectTransform.localScale = Vector3.one * blastScale;
        IsometricLocomotion.SetPositionElevated(smokeEffectTransform, (Vector2)gameObject.transform.position + new Vector2(shootingPoint.x, 0), shootingPoint.y);
    }
 private void Start()
 {
     IsometricLocomotion.SetPositionOnPlane(transform, transform.position);
     if (currentTower != null)
     {
         UpgradeTo(currentTower);
     }
     else
     {
         ResetSlot();
     }
 }
 public void Setup(Enemy enemy, Vector3 spawnPosition, Vector2 spawnOffset)
 {
     dying                = false;
     speed                = enemy.Speed;
     spriteSheet          = enemy.SpriteSheet;
     health               = enemy.Health;
     damage               = enemy.Damage;
     transform.localScale = Vector3.one * enemy.Scale;
     reward               = enemy.RollReward();
     moveOffset           = spawnOffset;
     locomotion.ResetElevation();
     IsometricLocomotion.SetPositionOnPlane(transform, spawnPosition + (Vector3)moveOffset);
 }
 public void Setup(Projectile projectile, Vector3 projectileSpawnPosition, EnemyDummy target, int projectileDamage, bool splash)
 {
     //yeah
     this.target           = target;
     damage                = projectileDamage;
     speed                 = projectile.Speed;
     this.splash           = splash;
     trajectory            = projectile.TrajectoryPeak;
     spriteRenderer.sprite = projectile.Sprite;
     transform.localScale  = Vector3.one * projectile.Scale;
     impactScale           = projectile.ImpactScale;
     destination           = target.transform.position;
     locomotion.ResetElevation();
     IsometricLocomotion.SetPositionOnPlane(transform, projectileSpawnPosition);
     distanceToTarget = ((Vector2)transform.position - destination).magnitude;
     moveDirection    = (destination - (Vector2)transform.position).normalized;
     distanceTraveled = 0;
 }