void Update()
    {
        if (Input.GetMouseButton(0))
        {
            smokepos    = transform.position;
            smokepos.z += Input.GetAxis("Mouse X") * xspeed * 0.02f;
            smokepos.y += Input.GetAxis("Mouse Y") * yspeed * 0.02f;
        }

        if (source && source.frames.Count > 0 && emitobjects.Count > 0)
        {
            source.Prepare();

            t += Time.deltaTime;

            if (t > flowrate)
            {
                t -= flowrate;

                for (int i = 0; i < count; i++)
                {
                    GameObject go = Pop();
                    if (go)
                    {
                        MegaFlowEffect      ef  = go.GetComponent <MegaFlowEffect>();
                        MegaFlowSmokeObjDef def = emitobjects[ef.emitindex];

                        float z = (Random.value - 0.5f) * width * 2.0f;
                        float y = (Random.value - 0.5f) * height * 2.0f;
                        float x = (Random.value - 0.5f) * 0.95f;

                        Vector3 pos = Vector3.zero;
                        pos.z = z;
                        pos.y = y;
                        pos.x = x;
                        pos  += offset;

                        Vector3 scl = Vector3.one;

                        scl.x = Random.Range(def.scalelow.x, def.scalehigh.x);                          //Random.value + 0.4f) * 2.0f;
                        scl.y = Random.Range(def.scalelow.y, def.scalehigh.y);                          //Random.value + 0.4f) * 2.0f;
                        scl.z = Random.Range(def.scalelow.z, def.scalehigh.z);                          //Random.value + 0.4f) * 2.0f;
                        //scl.y = (Random.value + 0.4f) * 2.0f;
                        //scl.z = (Random.value + 0.4f) * 2.0f;

                        Vector3 rotspeed = Vector3.zero;
                        rotspeed.x = Random.Range(def.rotspeedlow.x, def.rotspeedhigh.x);
                        rotspeed.y = Random.Range(def.rotspeedlow.y, def.rotspeedhigh.y);
                        rotspeed.z = Random.Range(def.rotspeedlow.z, def.rotspeedhigh.z);

                        Vector3 srot = Vector3.zero;
                        srot.x = Random.Range(def.rotlow.x, def.rothigh.x);
                        srot.y = Random.Range(def.rotlow.y, def.rothigh.y);
                        srot.z = Random.Range(def.rotlow.z, def.rothigh.z);
                        Quaternion rot = Quaternion.Euler(srot);                                //Random.rotation;

                        go.transform.position   = transform.localToWorldMatrix.MultiplyPoint3x4(pos);
                        go.transform.localScale = scl;

                        ef.vel      = transform.right * vel.x;
                        ef.mass     = mass;
                        ef.Gravity  = Gravity;
                        ef.scale    = scale;
                        ef.framenum = framenum;

                        ef.rot      = rot.eulerAngles;
                        ef.rotspeed = rotspeed;                         //Random.insideUnitSphere * 180.0f;

                        Renderer rend = go.GetComponent <Renderer>();

                        if (cols.Count > 0)
                        {
                            if (colindex >= cols.Count)
                            {
                                colindex = 0;
                            }
                            //Renderer rend = go.GetComponent<Renderer>();

                            if (rend && rend.sharedMaterial)
                            {
                                rend.sharedMaterial.color = cols[colindex] * 0.5f;
                            }

                            colindex++;
                        }

                        rend.enabled = false;

                        MegaFlowSmokeObj sobj = new MegaFlowSmokeObj();
                        sobj.obj      = go;
                        sobj.lifetime = lifetime;

                        objects.Add(sobj);
                    }
                }
            }
        }

        for (int i = 0; i < objects.Count; i++)
        {
            objects[i].lifetime -= Time.deltaTime;
            if (objects[i].lifetime < 0.0f)
            {
                GameObject sobj = objects[i].obj;

                Push(sobj);
                objects.RemoveAt(i);
                i--;
            }
        }
    }
	void Update()
	{
		if ( Input.GetMouseButton(0) )
		{
			smokepos = transform.position;
			smokepos.z += Input.GetAxis("Mouse X") * xspeed * 0.02f;
			smokepos.y += Input.GetAxis("Mouse Y") * yspeed * 0.02f;
		}

		if ( source && source.frames.Count > 0 && emitobjects.Count > 0 )
		{
			source.Prepare();

			t += Time.deltaTime;

			if ( t > flowrate )
			{
				t -= flowrate;

				for ( int i = 0; i < count; i++ )
				{
					GameObject go = Pop();
					if ( go )
					{
						MegaFlowEffect ef = go.GetComponent<MegaFlowEffect>();
						MegaFlowSmokeObjDef def = emitobjects[ef.emitindex];

						float z = (Random.value - 0.5f) * width * 2.0f;
						float y = (Random.value - 0.5f) * height * 2.0f;
						float x = (Random.value - 0.5f) * 0.95f;

						Vector3 pos = Vector3.zero;
						pos.z = z;
						pos.y = y;
						pos.x = x;
						pos += offset;

						Vector3 scl = Vector3.one;

						scl.x = Random.Range(def.scalelow.x, def.scalehigh.x);	//Random.value + 0.4f) * 2.0f;
						scl.y = Random.Range(def.scalelow.y, def.scalehigh.y);	//Random.value + 0.4f) * 2.0f;
						scl.z = Random.Range(def.scalelow.z, def.scalehigh.z);	//Random.value + 0.4f) * 2.0f;
						//scl.y = (Random.value + 0.4f) * 2.0f;
						//scl.z = (Random.value + 0.4f) * 2.0f;

						Vector3 rotspeed = Vector3.zero;
						rotspeed.x = Random.Range(def.rotspeedlow.x, def.rotspeedhigh.x);
						rotspeed.y = Random.Range(def.rotspeedlow.y, def.rotspeedhigh.y);
						rotspeed.z = Random.Range(def.rotspeedlow.z, def.rotspeedhigh.z);

						Vector3 srot = Vector3.zero;
						srot.x = Random.Range(def.rotlow.x, def.rothigh.x);
						srot.y = Random.Range(def.rotlow.y, def.rothigh.y);
						srot.z = Random.Range(def.rotlow.z, def.rothigh.z);
						Quaternion rot = Quaternion.Euler(srot);	//Random.rotation;

						go.transform.position = transform.localToWorldMatrix.MultiplyPoint3x4(pos);
						go.transform.localScale = scl;

						ef.vel = transform.right * vel.x;
						ef.mass = mass;
						ef.Gravity = Gravity;
						ef.scale = scale;
						ef.framenum = framenum;

						ef.rot = rot.eulerAngles;
						ef.rotspeed = rotspeed;	//Random.insideUnitSphere * 180.0f;

						Renderer rend = go.GetComponent<Renderer>();

						if ( cols.Count > 0 )
						{
							if ( colindex >= cols.Count )
								colindex = 0;
							//Renderer rend = go.GetComponent<Renderer>();

							if ( rend && rend.material )
								rend.material.color = cols[colindex] * 0.5f;

							colindex++;
						}

						rend.enabled = false;

						MegaFlowSmokeObj sobj = new MegaFlowSmokeObj();
						sobj.obj = go;
						sobj.lifetime = lifetime;

						objects.Add(sobj);
					}
				}
			}
		}

		for ( int i = 0; i < objects.Count; i++ )
		{
			objects[i].lifetime -= Time.deltaTime;
			if ( objects[i].lifetime < 0.0f )
			{
				GameObject sobj = objects[i].obj;

				Push(sobj);
				objects.RemoveAt(i);
				i--;
			}
		}
	}