Example #1
0
    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();
        }
    }
Example #2
0
    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);
    }
Example #3
0
 public void recycle_lsr(Laser_generic lsr)
 {
     laser_pool.Add(lsr);
     lsr.gameObject.SetActive(false);
 }