Пример #1
0
    public ProjectileBase CopyProjectile(float DamageReduction = 1)
    {
        ProjectileBase newProj = TowerBase.GetNewProjectile();

        newProj.gameObject.SetActive(true);
        //
        newProj.setBaseTower(tower);
        newProj.SetProjectile(target, speed, damage, areaEffect, chainCount, chainDistanceMin, chainDistanceMax, forkCount, forkProjectiles, forkDamageLoss, true, false);
        newProj.SetParticleSystems(effect, explosion);
        newProj.SpawnParticles();
        return(newProj);
    }
Пример #2
0
    void ShootProjectile()
    {
        ProjectileBase shootingProjectile = GetNewProjectile();

        shootingProjectile.gameObject.SetActive(true);
        Vector3 projPos = this.transform.position;

        projPos.y += projectileYOffSet;
        shootingProjectile.transform.position = projPos;
        shootingProjectile.SetProjectile(target, projectileSpeed, attackDamage, projectileAoE, projectileChain, projectileChainDistanceMin, projectileChainDistanceMax, projectileForkCount, projectileForkProjectiles, projectileForkLoss, projectileHoming, projectileInstant);
        shootingProjectile.setBaseTower(this);
        shootingProjectile.addMobEffect(statusEffect);
        shootingProjectile.SetParticleSystems((ProjectileParticles)projectileParticles, (ProjectileParticles)projectileParticleExplosion);
        shootingProjectile.SpawnParticles();
        if (towerType == TowerTypes.Basic || towerType == TowerTypes.Earth)
        {
            shootingProjectile.killParticles = true;
        }
    }
Пример #3
0
 private bool Chain()
 {
     if (chainCount > 0)
     {
         List <Vector2Int> hexes;
         hexes = TerrainGen.GetHexInRange(TerrainGen.GetGridPosition2D(transform.position), (int)chainDistanceMax);
         List <mobBase> mobs = new List <mobBase>();
         foreach (Vector2Int hex in hexes)
         {
             List <mobBase> mobHex = MobLister.GetMobList(hex);
             if (mobHex != null)
             {
                 foreach (mobBase mob in mobHex)
                 {
                     float distance = MyMath.calcDistance(transform.position, mob.transform.position);
                     if (distance > chainDistanceMin && distance < chainDistanceMax && mob != target)
                     {
                         mobs.Add(mob);
                     }
                 }
             }
         }
         chainCount -= 1;
         damage     *= chainDamageLoss;
         if (mobs.Count > 0)
         {
             Debug.Log("Chaining");
             ProjectileBase newProj = CopyProjectile(chainDamageLoss);
             newProj.SetParticleSystems(effect, explosion);
             newProj.transform.position = this.transform.position;
             newProj.target             = mobs[Random.Range(0, mobs.Count - 1)];
             Debug.DrawLine(newProj.transform.position, newProj.target.transform.position, Color.red, 1);
         }
         return(true);
         //
     }
     return(false);
 }