public override FireState Fire()
    {
        if (currentAmmo <= 0)
        {
            return(FireState.OutOfAmmo);
        }

        if (Time.time > fireTimer)
        {
            float           yOffsetDelay = Mathf.Clamp(1 / (30 / Mathf.Abs(owner.position.y)), 0f, 1f);
            Transform       bombClone    = Poolable.Get <GuidedGlideBomb>(() => Poolable.CreateObj <GuidedGlideBomb>(projectilePrefab.gameObject), spawnLocation.position, owner.rotation).transform;
            Rigidbody2D     bombRb       = bombClone.GetComponent <Rigidbody2D>();
            GuidedGlideBomb bomb         = bombClone.GetComponent <GuidedGlideBomb>();
            int             layerValue   = whatAreOurProjectiles.layermask_to_layer();
            TrailRenderer   projTrail    = bombClone.GetComponent <TrailRenderer>();
            projTrail.material         = layerValue == 8 ? t1Mat : t2Mat;
            bombClone.gameObject.layer = layerValue;
            bomb.target             = target;
            bomb.timeBeforeBoosters = Mathf.Clamp(bomb.timeBeforeBoosters - yOffsetDelay, 0.6f, 2f);
            bomb.whatIsTarget       = whatIsTarget;
            bombRb.velocity         = ownerRb.velocity;

            fireTimer = delayBetweenFire + Time.time;
            fireSound.Play();

            return(FireState.Fired);
        }
        else if (Time.time <= fireTimer)
        {
            return(FireState.OnDelay);
        }

        return(FireState.Failed);
    }
Beispiel #2
0
    public bool FireCannon(float inaccuracyOffset)
    {
        if (inaccuracyOffset == 0)
        {
            inaccuracyOffset = this.inaccuracyOffset;
        }

        if (currentShells <= 0)
        {
            return(false); // means you have to reload
        }

        if (Time.time > cannonTimer)
        {
            Transform shellClone = Poolable.Get <CannonShell>(() => Poolable.CreateObj <CannonShell>(shellPrefab.gameObject), firePoint.position, Quaternion.identity).transform;
            int       layerValue = whatAreOurProjectiles.layermask_to_layer();
            shellClone.gameObject.layer = layerValue;
            shellClone.right            = new Vector2(owner.up.x + Random.Range(-inaccuracyOffset, inaccuracyOffset), owner.up.y).normalized; /*(target.position - transform.position).normalized*/; // i have no f*****g idea what is going on at this point
            //Rigidbody2D shellRb = shellClone.GetComponent<Rigidbody2D>();
            cannonTimer = cannonDelay + Time.time;
            currentShells--;

            return(true);
        }

        return(false);
    }
Beispiel #3
0
    IEnumerator StartAnim()
    {
        plrHD.ChangeSkillCooldown(throwDelay, throwDelay);
        anim.SetBool("windSlice", true);
        yield return(new WaitForSeconds(waitTimeBeforeSwing));

        GameObject windClone    = Poolable.Get(() => Poolable.CreateObj(slicePref.gameObject), slicePool.NameOfKey);
        Arrow      windCloneArr = windClone.GetComponent <Arrow>();

        windClone.transform.position = transform.position;
        windClone.transform.rotation = slicePref.rotation * plr.rotation;

        windClone.GetComponent <Rigidbody2D>().velocity = plr.up * speed;
        windCloneArr.lifeTime    = upTime + Time.time;
        windCloneArr.dmg         = dmg;
        windCloneArr.pierceCount = amtOfPierces;

        yield return(new WaitForSeconds(2 - waitTimeBeforeSwing));

        anim.SetBool("windSlice", false);
        throwTimer = Time.time + throwDelay;
        if (!plrHD)
        {
            plrHD = PlrHUD.Instance;
        }
        plrHD.ChangeSkillCooldown(throwTimer - Time.time, throwDelay);
    }
Beispiel #4
0
    private IEnumerator Fire(float waitTime, int _dmg, float _arrowSpeed)
    {
        firing      = true;
        normVel     = rb.velocity;
        rb.velocity = Vector2.zero;

        attackTimer = Time.time + 9999f;
        anim.SetBool("firingNow", true);
        yield return(new WaitForSeconds(waitTime));

        GameObject arrowClone = Poolable.Get(() => Poolable.CreateObj(arrowPref.gameObject), arrowPool.NameOfKey);

        arrowClone.transform.position = firePos.position;
        arrowClone.transform.rotation = transform.rotation;

        AudioMaster.Instance.Play("ArrowFire");
        arrowClone.GetComponent <Rigidbody2D>().velocity = _arrowSpeed * transform.up * -1f;
        EnemyArrow enArrow = arrowClone.GetComponent <EnemyArrow>();

        enArrow.dmg      = _dmg;
        enArrow.lifeTime = arrowLifeTime + Time.time;
        if (objectContainer)
        {
            arrowClone.transform.parent = objectContainer;
        }
        anim.SetBool("firingNow", false);
        attackTimer = attackDelay + Time.time;

        rb.velocity = normVel;
        firing      = false;
    }
Beispiel #5
0
    private void SpawnEnemy()
    {
        int        rng         = Random.Range(0, waves[curWave].enemyList.Length);
        int        randomSpawn = Random.Range(0, spawnList.Length);
        Vector2    spawnPos    = new Vector2(Random.Range(spawnList[randomSpawn].position.x - 3, spawnList[randomSpawn].position.x + 3), Random.Range(spawnList[randomSpawn].position.y - 3, spawnList[randomSpawn].position.y + 3));
        GameObject enemy       = Poolable.Get(() => Poolable.CreateObj(waves[curWave].enemyList[rng].gameObject), waves[curWave].enemyList[rng].GetComponent <Poolable>().NameOfKey);

        enemy.transform.rotation = Quaternion.identity;
        enemy.transform.position = spawnPos;

        #region Injection
        if (enemy.GetComponent <EnemyAI>())
        {
            enemy.GetComponent <EnemyAI>().Initialize(gm);
        }
        if (enemy.GetComponent <BowmanAI>())
        {
            enemy.GetComponent <BowmanAI>().objectContainer = objContainer;
            enemy.GetComponent <BowmanAI>().Initialize(gm);
        }
        if (enemy.GetComponent <SwordsmanAI>())
        {
            enemy.GetComponent <SwordsmanAI>().Initialize(gm);
        }
        #endregion

        enemy.transform.parent = enContainer;
        Enemy en  = waves[curWave].enemyList[rng].GetComponent <Enemy>();
        int   _hp = Mathf.RoundToInt((Random.Range((en.enStats.RetMaxHP() / 1.4f), (en.enStats.RetMaxHP() * 1.2f)) * difficultyMultiplier) * (0.3f * (GameMaster.weaponIdOnStart + 1)));
        en = enemy.GetComponent <Enemy>();
        en.SetMaxHealth(_hp);
        enemySpawnTimer = waves[curWave].timeBetweenSpawn + Time.time;
    }
Beispiel #6
0
    private void Effects()
    {
        if ((Time.time > attackTimer))
        {
            attackTimer = Time.time + attackDelay;
            Vector3 arrowSpawnPos = new Vector3(firePos.position.x, firePos.position.y, -1);
            CheckDelayWithStats();
            CheckDmgWithStats();
            AudioMaster.Instance.Play("ArrowFire");

            if (anim && anim.GetBool("isFiring") == false)
            {
                anim.SetBool("isFiring", true);
            }
            GameObject bulClone = Poolable.Get(() => Poolable.CreateObj(arrow.gameObject), arrowPool.NameOfKey);
            bulClone.GetComponent <Arrow>().lifeTime = arrowLifeTime + Time.time;
            bulClone.transform.position = arrowSpawnPos;
            bulClone.transform.rotation = plr.transform.rotation;

            if (Player.woodResource > arrowCost)
            {
                bulClone.GetComponent <Arrow>().dmg = dmgBuf;
                Player.woodResource -= arrowCost;
            }
            else
            {
                bulClone.GetComponent <Arrow>().dmg = dmgWithoutWood;
            }

            bulClone.GetComponent <Rigidbody2D>().velocity = plr.transform.up * 40f;
        }
    }
Beispiel #7
0
    private IEnumerator startThrow()
    {
        delayTimer = Time.time * 3f;
        plrHD.ChangeSkillCooldown(throwDelay, throwDelay);
        anim.SetBool("bladeThrow", true);
        buff    = wep.dmg;
        wep.dmg = 0;
        yield return(new WaitForSeconds(1.05f));

        retPoint  = handPos.position;
        holySword = Poolable.Get(() => Poolable.CreateObj(holySwordPref.gameObject), holySwordPool.NameOfKey);
        holySword.transform.position = transform.position;
        holySword.transform.rotation = transform.rotation;
        holySword.GetComponent <HolyGreatsword>().dmg = dmg * 2;
        rb = holySword.GetComponent <Rigidbody2D>();
        Vector3 flyPath;

        flyPath     = plr.up;
        rb.velocity = flyPath * speed * Time.deltaTime;
        inAirTime   = throwTime + Time.time;
        throwing    = true;
        yield return(new WaitForSeconds(2.00f - 1.05f));

        anim.SetBool("bladeThrow", false);
        delayTimer = Time.time + throwDelay;
        if (!plrHD)
        {
            plrHD = PlrHUD.Instance;
        }
        plrHD.ChangeSkillCooldown(delayTimer - Time.time, throwDelay);
    }
    public override FireState Fire()
    {
        bool isTargVisual = CheckIfLookingAtTarget(lookCheckRange);

        if (isTargVisual)
        {
            if (Time.time > fireTimer)
            {
                Transform missileClone = Poolable.Get <UnguidedMissile>(() => Poolable.CreateObj <UnguidedMissile>(projectilePrefab.gameObject), spawnLocation.position, owner.rotation).transform;
                int       layerValue   = whatAreOurProjectiles.layermask_to_layer();
                missileClone.gameObject.layer = layerValue;
                UnguidedMissile missile   = missileClone.GetComponent <UnguidedMissile>();
                TrailRenderer   projTrail = missileClone.GetComponent <TrailRenderer>();
                projTrail.material = layerValue == 8 ? t1Mat : t2Mat;
                missile.ActivateBoost();
                fireTimer = delayBetweenFire + Time.time;
                fireSound.Play();

                return(FireState.Fired);
            }
            else
            {
                return(FireState.OnDelay);
            }
        }
        else
        {
            return(FireState.Failed);
        }
    }
    public override FireState Fire()
    {
        if (currentAmmo <= 0)
        {
            return(FireState.OutOfAmmo);
        }

        if (Time.time > fireTimer)
        {
            Vector2   ranPos     = new Vector2(Random.Range(spawnLocation.position.x - Random.Range(-inaccuracyOffset, inaccuracyOffset), spawnLocation.position.x + Random.Range(-inaccuracyOffset, inaccuracyOffset)), spawnLocation.position.y);
            Transform bombClone  = Poolable.Get <UnguidedBomb>(() => Poolable.CreateObj <UnguidedBomb>(projectilePrefab.gameObject), ranPos, Quaternion.identity).transform;
            int       layerValue = whatAreOurProjectiles.layermask_to_layer();
            bombClone.gameObject.layer = layerValue;
            bombClone.right            = new Vector2(owner.up.x + Random.Range(-inaccuracyOffset, inaccuracyOffset), owner.up.y).normalized; /*(target.position - transform.position).normalized*/; // i have no f*****g idea what is going on at this point
            Rigidbody2D   bombRb    = bombClone.GetComponent <Rigidbody2D>();
            TrailRenderer projTrail = bombClone.GetComponent <TrailRenderer>();
            projTrail.material = layerValue == 8 ? t1Mat : t2Mat;
            bombRb.velocity    = new Vector2(ownerRb.velocity.x / 1.5f, ownerRb.velocity.y / 1.1f);
            //Rigidbody2D shellRb = shellClone.GetComponent<Rigidbody2D>();
            fireTimer = delayBetweenFire + Time.time;
            currentAmmo--;
            fireSound.Play();
            return(FireState.Fired);
        }
        else if (Time.time <= fireTimer)
        {
            return(FireState.OnDelay);
        }

        return(FireState.Failed);
    }
    private void Fire()
    {
        SoundManager.Instance.PlayAudio("skelefire");
        fireTimer = fireDelay + Time.time;
        Poolable arrow = Poolable.Get(() => Poolable.CreateObj <Arrow>(arrowPrefab.gameObject));

        arrow.transform.position = firePos.position;
        arrow.GetComponent <Rigidbody2D>().velocity = -Vector2.right * arrowSpeed * Time.deltaTime;
    }
Beispiel #11
0
 public void LaunchMissile(Transform target)
 {
     if (Time.time > missileTimer)
     {
         Transform missileClone = Poolable.Get <GuidedAAMissile>(() => Poolable.CreateObj <GuidedAAMissile>(missilePrefab.gameObject), missileBay.position, owner.rotation).transform;
         int       layerValue   = whatAreOurProjectiles.layermask_to_layer();
         missileClone.gameObject.layer = layerValue;
         GuidedAAMissile missile = missileClone.GetComponent <GuidedAAMissile>();
         missile.whatIsTarget = whatIsTarget;
         missile.target       = target;
         missileTimer         = missileDelay + Time.time;
     }
 }
Beispiel #12
0
    public override FireState Fire()
    {
        if (currentAmmo <= 0)
        {
            return(FireState.OutOfAmmo);
        }

        if (isTargVisual)
        {
            if (Time.time > fireTimer)
            {
                Transform shellClone = Poolable.Get <CannonShell>(() => Poolable.CreateObj <CannonShell>(projectilePrefab.gameObject), spawnLocation.position, Quaternion.identity).transform;
                int       layerValue = whatAreOurProjectiles.layermask_to_layer();
                shellClone.gameObject.layer = layerValue;
                shellClone.right            = new Vector2(owner.up.x, owner.up.y + UnityEngine.Random.Range(-inaccuracyOffset, inaccuracyOffset)).normalized; /*(target.position - transform.position).normalized*/; // i have no f*****g idea what is going on at this point
                                                                                                                                                                                                                     //Rigidbody2D shellRb = shellClone.GetComponent<Rigidbody2D>();
                shellClone.GetComponent <Rigidbody2D>().AddForce(owner.up * shellClone.GetComponent <CannonShell>().Speed * 0.03f, ForceMode2D.Impulse);                                                             // changed Time.deltaTime to 0.03f due to weird physics behaviour on different speeds, change it back if it's not the cause
                TrailRenderer projTrail = shellClone.GetComponent <TrailRenderer>();
                projTrail.material = layerValue == 8 ? t1Mat : t2Mat;
                //SetTrail(shellClone);

                fireTimer = delayBetweenFire + Time.time + UnityEngine.Random.Range(-delayBetweenFire / 5f, delayBetweenFire / 3.4f);
                currentAmmo--;
                firePartSys.Emit(firePartCount);

                if (!continuousFire)
                {
                    fireSound.Play();
                }
                else
                {
                    if (!fireSound.isPlaying)
                    {
                        fireSound.Play();
                        soundTimer = Time.time + 2f;
                    }
                }

                return(FireState.Fired);
            }
            else
            {
                return(FireState.OnDelay);
            }
        }
        else
        {
            FireAftereffectSound();
            return(FireState.Failed);
        }
    }
Beispiel #13
0
 public void LaunchSSMissile()
 {
     if (Time.time > missileTimer)
     {
         Transform missileClone = Poolable.Get <GuidedSSMissile>(() => Poolable.CreateObj <GuidedSSMissile>(missilePrefab.gameObject), new Vector3(missileFirePoint.position.x + Random.Range(-0.2f, 0.2f), missileFirePoint.position.y, missileFirePoint.position.z), Quaternion.identity).transform;
         missileClone.localEulerAngles = new Vector3(0f, 0f, rocketFireAngle);
         int layerValue = whatAreOurProjectiles.layermask_to_layer();
         missileClone.gameObject.layer = layerValue;
         GuidedSSMissile missile = missileClone.GetComponent <GuidedSSMissile>();
         missile.whatIsTarget = whatIsTarget;
         missile.BoostStage();
         missileTimer = missileDelay + Time.time;
     }
 }
    public void FireTorpedo(Transform target)
    {
        if (Time.time >= torpedoTimer)
        {
            Transform     torpClone = Poolable.Get <GuidedTorpedo>(() => Poolable.CreateObj <GuidedTorpedo>(torpedoPrefab.gameObject), torpedoBay.position, Quaternion.identity).transform;
            GuidedTorpedo torp      = torpClone.GetComponent <GuidedTorpedo>();
            torp.target       = target;
            torp.whatIsTarget = whatIsTarget;
            int layerValue = whatAreOurProjectiles.layermask_to_layer();
            torpClone.gameObject.layer = layerValue;

            torpClone.up = owner.up;

            torpedoTimer = torpedoDelay + Time.time;
        }
    }
    public void DropBomb(Transform target)
    {
        float           yOffsetDelay = Mathf.Clamp(1 / (30 / Mathf.Abs(owner.position.y)), 0f, 1f);
        Transform       bombClone    = Poolable.Get <GuidedGlideBomb>(() => Poolable.CreateObj <GuidedGlideBomb>(bombPrefab.gameObject), bombBay.position, owner.rotation).transform;
        Rigidbody2D     bombRb       = bombClone.GetComponent <Rigidbody2D>();
        GuidedGlideBomb bomb         = bombClone.GetComponent <GuidedGlideBomb>();
        int             layerValue   = whatAreOurProjectiles.layermask_to_layer();

        bombClone.gameObject.layer = layerValue;
        bomb.target             = target;
        bomb.timeBeforeBoosters = Mathf.Clamp(bomb.timeBeforeBoosters - yOffsetDelay, 0.6f, 2f);
        Debug.Log(bomb.timeBeforeBoosters + " | " + yOffsetDelay);
        bomb.whatIsTarget = whatIsTarget;
        bombRb.velocity   = thisRb.velocity;

        dropTimer = dropDelay + Time.time;
    }
    public bool LaunchMissile()
    {
        if (Time.time > missileTimer)
        {
            Transform missileClone = Poolable.Get <UnguidedMissile>(() => Poolable.CreateObj <UnguidedMissile>(missilePrefab.gameObject), missileBay.position, owner.rotation).transform;
            int       layerValue   = whatAreOurProjectiles.layermask_to_layer();
            missileClone.gameObject.layer = layerValue;
            missileClone.gameObject.SetActive(true);
            UnguidedMissile missile = missileClone.GetComponent <UnguidedMissile>();
            missile.ActivateBoost();
            missileTimer = missileDelay + Time.time;

            return(true);
        }

        return(false);
    }
    private void DropCharge(float dir, float forceMult)
    {
        Transform chargeClone = Poolable.Get <UnguidedDepthCharge>(() => Poolable.CreateObj <UnguidedDepthCharge>(projectilePrefab.gameObject), spawnLocation.position, Quaternion.identity).transform;
        // Debug.Log("here");
        int           layerValue = whatAreOurProjectiles.layermask_to_layer();
        TrailRenderer projTrail  = chargeClone.GetComponent <TrailRenderer>();

        projTrail.material = layerValue == 8 ? t1Mat : t2Mat;
        projTrail.Clear();
        chargeClone.gameObject.layer = layerValue;
        //Debug.Log("yes | " + chargeClone);

        Rigidbody2D thisRb = chargeClone.GetComponent <Rigidbody2D>();

        thisRb.velocity = ((Vector2.right * dir + (Vector2)transform.up).normalized) * forceMult;
        // Debug.Log("commeth once again");
        return;
    }
Beispiel #18
0
    public bool DropBomb()
    {
        if (Time.time > bombTimer)
        {
            Vector2   ranPos     = new Vector2(Random.Range(bombBay.position.x - Random.Range(-inaccuracyOffset, inaccuracyOffset), bombBay.position.x + Random.Range(-inaccuracyOffset, inaccuracyOffset)), bombBay.position.y);
            Transform bombClone  = Poolable.Get <UnguidedBomb>(() => Poolable.CreateObj <UnguidedBomb>(bombPrefab.gameObject), ranPos, Quaternion.identity).transform;
            int       layerValue = whatAreOurProjectiles.layermask_to_layer();
            bombClone.gameObject.layer = layerValue;
            bombClone.right            = new Vector2(owner.up.x + Random.Range(-inaccuracyOffset, inaccuracyOffset), owner.up.y).normalized /*(target.position - transform.position).normalized*/; // i have no f*****g idea what is going on at this point
            Rigidbody2D bombRb = bombClone.GetComponent <Rigidbody2D>();
            bombRb.velocity = new Vector2(ownerRb.velocity.x / 1.5f, ownerRb.velocity.y / 1.1f);
            //Rigidbody2D shellRb = shellClone.GetComponent<Rigidbody2D>();
            bombTimer = bombDelay + Time.time;
            return(true);
        }

        return(false);
    }
    //[Header("WeaponProperties")]

    public override FireState Fire()
    {
        Transform isInView = isEnemySubInView();

        if (isInView)
        {
            target = isInView;
        }

        if (target)
        {
            if (!target.gameObject.activeInHierarchy)
            {
                target = null;
            }
        }

        if (Time.time >= fireTimer)
        {
            Transform     torpClone  = Poolable.Get <GuidedTorpedo>(() => Poolable.CreateObj <GuidedTorpedo>(projectilePrefab.gameObject), spawnLocation.position, Quaternion.identity).transform;
            int           layerValue = whatAreOurProjectiles.layermask_to_layer();
            TrailRenderer projTrail  = torpClone.GetComponent <TrailRenderer>();
            projTrail.material         = layerValue == 8 ? t1Mat : t2Mat;
            torpClone.gameObject.layer = layerValue;
            projTrail.Clear();
            GuidedTorpedo torp = torpClone.GetComponent <GuidedTorpedo>();
            torp.target                = target;
            torp.whatIsTarget          = whatIsTarget;
            torpClone.gameObject.layer = layerValue;
            torpClone.GetComponent <Rigidbody2D>().velocity = owner.up * torp.Speed / 2f * Time.deltaTime;

            torpClone.up = owner.up;

            fireTimer = delayBetweenFire + Time.time + Random.Range(-delayBetweenFire / 5f, delayBetweenFire / 3.4f);
            fireSound.Play();

            return(FireState.Fired);
        }
        else
        {
            return(FireState.OnDelay);
        }
    }
Beispiel #20
0
    private void Fire()
    {
        GameObject arrowClone = Poolable.Get(() => Poolable.CreateObj(arrowPref.gameObject), arrowPool.NameOfKey);

        arrowClone.transform.position = firePos.position;
        arrowClone.transform.rotation = transform.rotation;
        EnemyArrow enArrow = arrowClone.GetComponent <EnemyArrow>();

        arrowClone.GetComponent <Rigidbody2D>().velocity = arrowSpeed * transform.up * -1f;
        enArrow.lifeTime = arrowLifeTime + Time.time;
        enArrow.dmg      = dmg;

        AudioMaster.Instance.Play("ArrowFire");
        if (objectContainer)
        {
            arrowClone.transform.parent = objectContainer;
        }
        attackTimer = attackDelay + Time.time;
    }
Beispiel #21
0
    private Transform GetUnit(UnitSettings newUnit)
    {
        Transform retunit = null;

        if (newUnit.unitPrefab.GetComponent <AircraftThatWorksWithWeapon>())
        {
            retunit = Poolable.Get <AircraftThatWorksWithWeapon>(() => Poolable.CreateObj <AircraftThatWorksWithWeapon>(newUnit.unitPrefab.gameObject), playerBaseSpawn.position, newUnit.unitPrefab.rotation).transform;
        }
        else if (newUnit.unitPrefab.GetComponent <StrikeFighterThatWorksWithWeapon>())
        {
            retunit = Poolable.Get <StrikeFighterThatWorksWithWeapon>(() => Poolable.CreateObj <StrikeFighterThatWorksWithWeapon>(newUnit.unitPrefab.gameObject), playerBaseSpawn.position, newUnit.unitPrefab.rotation).transform;
        }
        else if (newUnit.unitPrefab.GetComponent <StrategicBomberThatWorksWithWeapon>())
        {
            retunit = Poolable.Get <StrategicBomberThatWorksWithWeapon>(() => Poolable.CreateObj <StrategicBomberThatWorksWithWeapon>(newUnit.unitPrefab.gameObject), playerBaseSpawn.position, newUnit.unitPrefab.rotation).transform;
        }
        else if (newUnit.unitPrefab.GetComponent <CarrierModule>())
        {
            retunit = Poolable.Get <FrigateThatWorksWithWeapon>(() => Poolable.CreateObj <FrigateThatWorksWithWeapon>(newUnit.unitPrefab.gameObject), playerBaseSpawn.position, newUnit.unitPrefab.rotation).transform;
        }
        else if (newUnit.unitPrefab.GetComponent <FrigateThatWorksWithWeapon>())
        {
            retunit = Poolable.Get <FrigateThatWorksWithWeapon>(() => Poolable.CreateObj <FrigateThatWorksWithWeapon>(newUnit.unitPrefab.gameObject), playerBaseSpawn.position, newUnit.unitPrefab.rotation).transform;
        }
        else if (newUnit.unitPrefab.GetComponent <SubmarineThatWorksWithWeapon>())
        {
            retunit = Poolable.Get <SubmarineThatWorksWithWeapon>(() => Poolable.CreateObj <SubmarineThatWorksWithWeapon>(newUnit.unitPrefab.gameObject), playerBaseSpawn.position, newUnit.unitPrefab.rotation).transform;
        }
        else if (newUnit.unitPrefab.GetComponent <BallisticSubmarineThatWorksWithWeapon>())
        {
            retunit = Poolable.Get <BallisticSubmarineThatWorksWithWeapon>(() => Poolable.CreateObj <BallisticSubmarineThatWorksWithWeapon>(newUnit.unitPrefab.gameObject), playerBaseSpawn.position, newUnit.unitPrefab.rotation).transform;
        }
        else if (newUnit.unitPrefab.GetComponent <DestroyerThatWorksWithWeapon>())
        {
            retunit = Poolable.Get <DestroyerThatWorksWithWeapon>(() => Poolable.CreateObj <DestroyerThatWorksWithWeapon>(newUnit.unitPrefab.gameObject), playerBaseSpawn.position, newUnit.unitPrefab.rotation).transform;
        }
        else if (newUnit.unitPrefab.GetComponent <PatrolBoatThatWorksWithWeapon>())
        {
            retunit = Poolable.Get <PatrolBoatThatWorksWithWeapon>(() => Poolable.CreateObj <PatrolBoatThatWorksWithWeapon>(newUnit.unitPrefab.gameObject), playerBaseSpawn.position, newUnit.unitPrefab.rotation).transform;
        }

        return(retunit);
    }
Beispiel #22
0
    private Transform GetPlane()
    {
        Transform planeClone = null;

        if (currentPlane.GetComponent <AircraftThatWorksWithWeapon>())
        {
            //Debug.Log("1");
            planeClone = Poolable.Get <AircraftThatWorksWithWeapon>(() => Poolable.CreateObj <AircraftThatWorksWithWeapon>(currentPlane.gameObject), aircraftSpawnPoint.position, transform.rotation, null).transform;
        }
        else if (currentPlane.GetComponent <StrikeFighterThatWorksWithWeapon>())
        {
            //Debug.Log("2");
            planeClone = Poolable.Get <StrikeFighterThatWorksWithWeapon>(() => Poolable.CreateObj <StrikeFighterThatWorksWithWeapon>(currentPlane.gameObject), aircraftSpawnPoint.position, transform.rotation, null).transform;
        }
        else if (currentPlane.GetComponent <StrategicBomberThatWorksWithWeapon>())
        {
            //Debug.Log("3");
            planeClone = Poolable.Get <StrategicBomberThatWorksWithWeapon>(() => Poolable.CreateObj <StrategicBomberThatWorksWithWeapon>(currentPlane.gameObject), aircraftSpawnPoint.position, transform.rotation, null).transform;
        }

        return(planeClone);
    }
Beispiel #23
0
    public override FireState Fire()
    {
        if (target)
        {
            if (!target.gameObject.activeInHierarchy)
            {
                target = null;
                return(FireState.Failed);
            }

            if (Time.time > fireTimer)
            {
                Transform missileClone = Poolable.Get <GuidedSSMissile>(() => Poolable.CreateObj <GuidedSSMissile>(projectilePrefab.gameObject), new Vector3(spawnLocation.position.x + Random.Range(-0.2f, 0.2f), spawnLocation.position.y, spawnLocation.position.z), Quaternion.identity).transform;
                int       layerValue   = whatAreOurProjectiles.layermask_to_layer();
                missileClone.gameObject.layer = layerValue;
                TrailRenderer projTrail = missileClone.GetComponent <TrailRenderer>();
                projTrail.material = layerValue == 8 ? t1Mat : t2Mat;
                projTrail.Clear();
                GuidedSSMissile missile = missileClone.GetComponent <GuidedSSMissile>();
                missile.target       = target;
                missile.whatIsTarget = whatIsTarget;
                missile.BoostStage();
                fireTimer = delayBetweenFire + Time.time;
                fireSound.Play();
                //soundMngr.PlayEnviroSound(spawnLocation.gameObject, "missile1", 10f);

                return(FireState.Fired);
            }
            else
            {
                return(FireState.OnDelay);
            }
        }
        else
        {
            return(FireState.Failed);
        }
    }
Beispiel #24
0
    public override FireState Fire()
    {
        bool isTargVisual = CheckIfLookingAtTarget(lookCheckRange);

        if (isTargVisual)
        {
            if (Time.time > fireTimer)
            {
                Transform missileClone = Poolable.Get <GuidedAAMissile>(() => Poolable.CreateObj <GuidedAAMissile>(projectilePrefab.gameObject), spawnLocation.position, owner.rotation).transform;
                int       layerValue   = whatAreOurProjectiles.layermask_to_layer();
                missileClone.gameObject.layer = layerValue;
                GuidedAAMissile missile = missileClone.GetComponent <GuidedAAMissile>();
                missile.whatIsTarget = whatIsTarget;
                missile.target       = target;
                TrailRenderer projTrail = missileClone.GetComponent <TrailRenderer>();
                projTrail.material = layerValue == 8 ? t1Mat : t2Mat;
                projTrail.enabled  = true;
                fireTimer          = delayBetweenFire + Time.time + Random.Range(-delayBetweenFire / 5f, delayBetweenFire / 3.4f);
                fireSound.Play();

                return(FireState.Fired);
            }
            else
            {
                if (!target.gameObject.activeInHierarchy)
                {
                    target = null;
                    return(FireState.Failed);
                }

                return(FireState.OnDelay);
            }
        }
        else
        {
            return(FireState.Failed);
        }
    }