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)); }
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)); }