void fire_laser(GameObject activator, Vector2 fire_point, float blt_dir, bool hasAuthority) { bool new_laser = false; //Withdraw from pool Laser_generic laser = Pool_watcher.Singleton.request_lsr(); //Get new ones if (laser == null) { new_laser = true; laser = Instantiate(bullet, fire_point, Quaternion.identity).GetComponent <Laser_generic>(); laser.pool_watcher = Pool_watcher.Singleton; laser.initial_hit_fltr = laser.hit_fltr; laser.default_gradient = laser.GetComponent <LineRenderer>().colorGradient; laser.default_texture = laser.GetComponent <LineRenderer>().material.mainTexture; } else { laser.transform.position = fire_point; } //GameObject blt = Instantiate(bullet, fire_point, Quaternion.identity); //Laser_generic laser = blt.GetComponent<Laser_generic>(); laser.aimdir = (new Vector2(Mathf.Cos(blt_dir * Mathf.PI / 180), Mathf.Sin(blt_dir * Mathf.PI / 180))).normalized; laser.start = fire_point; laser.temperature = thermal; laser.initial_width = CONSTANTS.LASER_TEMP_RAMP * thermal / 100 + CONSTANTS.LASER_BASE_WIDTH; laser.distance = effective_dist; laser.isDedicated = cvar_watcher.isDedicated(); laser.local = hasAuthority; laser.activator = activator; //Remove hit collision for ally if server flag is off if (cvar_watcher.allyBulletPassThru) { laser.hit_fltr.value = laser.initial_hit_fltr.value - (1 << activator.GetComponent <Body_generic>().hitbox_main.gameObject.layer); //laser.hit_fltr.value -= 1 << activator.GetComponent<Body_generic>().hitbox_main.gameObject.layer; } //Customize color if (blt_custom) { laser.GetComponent <LineRenderer>().colorGradient = blt_color; if (blt_texture != null) { laser.GetComponent <LineRenderer>().material.mainTexture = blt_texture; } } if (!new_laser)//If new laser, start function will initialize things then call emit; if pooled, call emit() directly as reset had done the job { laser.emit(); } }
public Laser_generic request_lsr() { if (laser_pool.Count <= 0) { return(null); } Laser_generic ret = laser_pool[0]; laser_pool.RemoveAt(0); ret.gameObject.SetActive(true); ret.reset(); return(ret); }
public void recycle_lsr(Laser_generic lsr) { laser_pool.Add(lsr); lsr.gameObject.SetActive(false); }