#include "lib/shared/hash-functions.hlsl"
#include "lib/shared/noise-functions.hlsl"
#include "lib/shared/point.hlsl"
#include "lib/shared/quat-functions.hlsl"

cbuffer Params : register(b0)
{
    float Drag;
    float Speed; 
}

RWStructuredBuffer<Particle> Particles : u0; 

[numthreads(64,1,1)]
void main(uint3 i : SV_DispatchThreadID)
{
    uint numStructs, stride;
    Particles.GetDimensions(numStructs, stride);
    if(i.x >= numStructs) 
        return;


    Particle p = Particles[i.x];
    float4 rot;
    //float v = q_separate_v(p.Rotation, rot);

    //float3 forward =  normalize(qRotateVec3(float3(0, 0, 1), rot));

    p.Position += p.Velocity * 0.01 * Speed;

    p.Velocity *= (1-Drag);
    // p.Rotation = q_encode_v(rot, v);

    Particles[i.x] = p;

}
