[[stage(vertex)]]
fn vert_main([[location(0)]] a_particlePos : vec2<f32>, [[location(1)]] a_particleVel : vec2<f32>, [[location(2)]] a_pos : vec2<f32>) -> [[builtin(position)]] vec4<f32> {
  var angle : f32 = -(atan2(a_particleVel.x, a_particleVel.y));
  var pos : vec2<f32> = vec2<f32>(((a_pos.x * cos(angle)) - (a_pos.y * sin(angle))), ((a_pos.x * sin(angle)) + (a_pos.y * cos(angle))));
  return vec4<f32>((pos + a_particlePos), 0.0, 1.0);
}

[[stage(fragment)]]
fn frag_main() -> [[location(0)]] vec4<f32> {
  return vec4<f32>(1.0, 1.0, 1.0, 1.0);
}

struct Particle {
  pos : vec2<f32>;
  vel : vec2<f32>;
};

[[block]]
struct SimParams {
  deltaT : f32;
  rule1Distance : f32;
  rule2Distance : f32;
  rule3Distance : f32;
  rule1Scale : f32;
  rule2Scale : f32;
  rule3Scale : f32;
};

[[block]]
struct Particles {
  particles : array<Particle, 5>;
};

[[binding(0), group(0)]] var<uniform> params : SimParams;

[[binding(1), group(0)]] var<storage, read_write> particlesA : Particles;

[[binding(2), group(0)]] var<storage, read_write> particlesB : Particles;

[[stage(compute)]]
fn comp_main([[builtin(global_invocation_id)]] gl_GlobalInvocationID : vec3<u32>) {
  var index : u32 = gl_GlobalInvocationID.x;
  if ((index >= 5u)) {
    return;
  }
  var vPos : vec2<f32> = particlesA.particles[index].pos;
  var vVel : vec2<f32> = particlesA.particles[index].vel;
  var cMass : vec2<f32> = vec2<f32>(0.0, 0.0);
  var cVel : vec2<f32> = vec2<f32>(0.0, 0.0);
  var colVel : vec2<f32> = vec2<f32>(0.0, 0.0);
  var cMassCount : i32 = 0;
  var cVelCount : i32 = 0;
  var pos : vec2<f32>;
  var vel : vec2<f32>;
  {
    var i : u32 = 0u;
    loop {
      if (!((i < 5u))) {
        break;
      }
      if ((i == index)) {
        continue;
      }
      pos = particlesA.particles[i].pos.xy;
      vel = particlesA.particles[i].vel.xy;
      if ((distance(pos, vPos) < params.rule1Distance)) {
        cMass = (cMass + pos);
        cMassCount = (cMassCount + 1);
      }
      if ((distance(pos, vPos) < params.rule2Distance)) {
        colVel = (colVel - (pos - vPos));
      }
      if ((distance(pos, vPos) < params.rule3Distance)) {
        cVel = (cVel + vel);
        cVelCount = (cVelCount + 1);
      }

      continuing {
        i = (i + 1u);
      }
    }
  }
  if ((cMassCount > 0)) {
    cMass = ((cMass / vec2<f32>(f32(cMassCount), f32(cMassCount))) - vPos);
  }
  if ((cVelCount > 0)) {
    cVel = (cVel / vec2<f32>(f32(cVelCount), f32(cVelCount)));
  }
  vVel = (((vVel + (cMass * params.rule1Scale)) + (colVel * params.rule2Scale)) + (cVel * params.rule3Scale));
  vVel = (normalize(vVel) * clamp(length(vVel), 0.0, 0.100000001));
  vPos = (vPos + (vVel * params.deltaT));
  if ((vPos.x < -1.0)) {
    vPos.x = 1.0;
  }
  if ((vPos.x > 1.0)) {
    vPos.x = -1.0;
  }
  if ((vPos.y < -1.0)) {
    vPos.y = 1.0;
  }
  if ((vPos.y > 1.0)) {
    vPos.y = -1.0;
  }
  particlesB.particles[index].pos = vPos;
  particlesB.particles[index].vel = vVel;
}
