LxResult
CParticleAttachCommand::cmd_Query (
	unsigned		 index,
	ILxUnknownID		 vaQuery)
{
	CLxUser_ValueReference	 ref;
	CLxUser_ValueArray	 va(vaQuery);
	CSourceItems		 sel(dyna_Int(0));
	CLxUser_Item		 item;
	CLxUser_Value		 val;
	CSourceFinder		 src;

	for (sel.LoopInit (); sel.LoopNext (item);)
	{
		va.AddEmpty (val);
		ref.set (val);

		if (src.Find (item)) {
			ref.SetObject ( (ILxUnknownID)src.source_item);
		}
	}

	return LXe_OK;
}
LxResult CModifierElement::EvalCache (CLxUser_Evaluation &eval, CLxUser_Attributes &attr, CLxObject *cacheRaw, bool prev)
{
	CChanState		*cache = dynamic_cast<CChanState *> (cacheRaw);
	CInfluence		*infl;
	CLxUser_ValueReference	 ref;
	ILxUnknownID		 obj;
	LxResult		 rc;

    infl = new CInfluence;
    infl->Spawn ((void **) &obj);
    attr.ObjectRW (index, ref);
    ref.SetObject (obj);
    lx::UnkRelease (obj);

    infl->cur.Read (attr, index + 1);
	//early out
	if(!infl->cur.enabled)
        return LXe_OK;

	if(infl->cur.resolution != resolution || 
        infl->cur.outputType != outputType ||
		infl->cur.size != size ||
		infl->cur.windSpeed != windSpeed ||
		infl->cur.windDir != windDir ||
		infl->cur.windAlign != windAlign ||
		infl->cur.chop != chop ||
		infl->cur.shortestWave != shortestWave ||
		infl->cur.oceanDepth != oceanDepth ||
		infl->cur.damping != damping ||
		infl->cur.seed != seed ||
        infl->cur.waveHeight != waveHeight ||
		ocean == NULL )
	{
		if (ocean)
		{
			delete ocean;
		}

		if (context)
		{
			delete context;
		}
		ocean = infl->cur.reBuildOceanData();
        outputType = infl->cur.outputType;
        if (outputType == 0)
        {
            context = ocean->new_context(true,true,false,false);
        } else {
            context = ocean->new_context(true,true,false,true);
        }
		resolution = infl->cur.resolution;
		size = infl->cur.size;
		windSpeed = infl->cur.windSpeed;
		windDir = infl->cur.windDir;
		windAlign = infl->cur.windAlign;
		chop = infl->cur.chop;
		shortestWave = infl->cur.shortestWave;
		oceanDepth = infl->cur.oceanDepth;
		damping = infl->cur.damping;
		seed = infl->cur.seed;
        waveHeight = infl->cur.waveHeight;
		infl->cur.setUpOceanPtrs(ocean, context);
	}
	else infl->cur.setUpOceanPtrs(ocean, context);

	infl->cur.updateOcean();

    if (prev)
		rc = cache->Compare (infl->cur);
    else
		rc = LXe_OK;

    *cache = infl->cur;

    return rc;
}