示例#1
0
    private GameObject AddBulletToPool()
    {
        /* Instantiate a pool of bullets. This prevents new objects constantly
         * being created and allocating memory. This is used to increase
         * game performance.
         */

        if (bulletProjectile)
        {
            // Instantiate a new bullet
            GameObject bullet = Instantiate(bulletProjectile) as GameObject;
            bullet.hideFlags = HideFlags.HideInHierarchy;
            bullet.SetActive(false);

            // Add despawn conditions
            bullet.GetComponent <DisableAfterSeconds> ().Delay = despawnAfter;

            // Add damage to the bullet
            ApplyDamage  dmgScript        = bullet.AddComponent <ApplyDamage> ();
            On_Collision collisionHandler = bullet.AddComponent <On_Collision> ();
            if (collisionHandler)
            {
                dmgScript.Damage = damage;
                collisionHandler.Actions.Add(dmgScript);
                dmgScript.dmgTagsMode = dmgTagsMode;
                collisionHandler.mode = dmgTagsMode;
                if (collisionHandler.mode == COLLISION_MODE.IgnoreSelected)
                {
                    collisionHandler.collisionTags.Add(transform.tag);
                    dmgScript.dmgTags.Add(transform.tag);
                }
                foreach (string str in dmgTags)
                {
                    collisionHandler.collisionTags.Add(str);
                    dmgScript.dmgTags.Add(str);
                }
            }
            bullet.GetComponent <ApplyDamage> ().Damage = damage;

            // Add hit effect
            bullet.GetComponent <EmitParticle> ().amount    = hitParticles;
            bullet.GetComponent <EmitParticle> ().particles = AddHitEffectToPool();

            // Set collision-ignore-tags
            bullet.GetComponent <On_Collision> ().collisionTags.Add(transform.tag);

            // Add bullet to the pool
            bulletPool.Add(bullet);

            return(bullet);
        }
        return(default(GameObject));
    }
示例#2
0
    private GameObject AddMissileToPool()
    {
        /* Instantiate a pool of missiles. This prevents new objects constantly
         * being created and allocating memory. This is used to increase
         * game performance.
         */

        if (missileProjectile)
        {
            // Instantiate a new bullet
            GameObject missile = Instantiate(missileProjectile) as GameObject;
            missile.hideFlags = HideFlags.HideInHierarchy;
            missile.SetActive(false);

            // Add despawn conditions
            DisableAfterSeconds disTime = missile.GetComponent <DisableAfterSeconds>();
            if (disTime)
            {
                disTime.Delay = despawnAfter;
            }

            // Apply settings to missile explosion
            Explosion expl = missile.GetComponent <Explosion> ();
            if (expl)
            {
                expl.Damage = damage;
                expl.mode   = dmgTagsMode;
                if (expl.mode == COLLISION_MODE.IgnoreSelected)
                {
                    expl.collisionTags.Add(transform.tag);
                }
                foreach (string str in dmgTags)
                {
                    expl.collisionTags.Add(str);
                }

                expl.ExplosiveForce = ExplosiveForce;
                expl.Radius         = ExplosionRange;
            }

            // Apply hit effect settings
            EmitParticle eP = missile.GetComponent <EmitParticle>();
            if (eP)
            {
                eP.amount    = hitParticles;
                eP.particles = AddHitEffectToPool();
            }

            // Gravity & rigidbody settings
            Rigidbody rb = missile.GetComponent <Rigidbody> ();
            rb.drag        = projectileDrag;
            rb.angularDrag = projectileAngularDrag;
            rb.useGravity  = false;
            if (projectileGravity > 0)
            {
                missile.AddComponent <ApplyGravity> ();
                missile.GetComponent <ApplyGravity> ().gravity = projectileGravity;
            }

            // Set collision-ignore-tags
            On_Collision oC = missile.GetComponent <On_Collision>();
            if (oC)
            {
                oC.collisionTags.Add(transform.tag);
            }

            // Add bullet to the pool
            missilePool.Add(missile);

            return(missile);
        }
        return(default(GameObject));
    }