Program: 28044
Project: 28044
Buggy source:
@Override public void create(Table table){
  drawDebug=true;
  shapeRenderer=new ShapeRenderer();
  separationDecayCoefficient=500;
  characters=new Array<SteeringActor>();
  blendedSteerings=new Array<BlendedSteering<Vector2>>();
  proximities=new Array<FieldOfViewProximity<Vector2>>();
  for (int i=0; i < 60; i++) {
    SteeringActor character=new SteeringActor(container.greenFish,false);
    character.setCenterPosition(MathUtils.random(container.stageWidth),MathUtils.random(container.stageHeight));
    character.setMaxLinearSpeed(70);
    character.setMaxLinearAcceleration(400);
    character.setMaxAngularAcceleration(0);
    character.setMaxAngularSpeed(5);
    FieldOfViewProximity<Vector2> proximity=new FieldOfViewProximity<Vector2>(character,characters,140,270 * MathUtils.degreesToRadians);
    proximities.add(proximity);
    if (i == 0)     char0Proximity=proximity;
    Alignment<Vector2> groupAlignmentSB=new Alignment<Vector2>(character,proximity);
    Cohesion<Vector2> groupCohesionSB=new Cohesion<Vector2>(character,proximity);
    Separation<Vector2> groupSeparationSB=new Separation<Vector2>(character,proximity){
      @Override public float getDecayCoefficient(){
        return separationDecayCoefficient;
      }
      @Override public Separation<Vector2> setDecayCoefficient(      float decayCoefficient){
        separationDecayCoefficient=decayCoefficient;
        return this;
      }
    }
;
    BlendedSteering<Vector2> blendedSteering=new BlendedSteering<Vector2>(character).add(groupAlignmentSB,.2f).add(groupCohesionSB,.06f).add(groupSeparationSB,1.7f);
    blendedSteerings.add(blendedSteering);
    Wander<Vector2> wanderSB=new Wander<Vector2>(character).setFaceEnabled(false).setWanderOffset(60).setWanderOrientation(10).setWanderRadius(40).setWanderRate(MathUtils.PI / 5);
    PrioritySteering<Vector2> prioritySteeringSB=new PrioritySteering<Vector2>(character,0.0001f).add(blendedSteering).add(wanderSB);
    character.setSteeringBehavior(prioritySteeringSB);
    table.addActor(character);
    characters.add(character);
  }
  inputProcessor=null;
  Table detailTable=new Table(container.skin);
  detailTable.row();
  final Label alignmentWeightLabel=new Label("String_Node_Str" + blendedSteerings.get(0).get(0).getWeight() + "String_Node_Str",container.skin);
  detailTable.add(alignmentWeightLabel);
  detailTable.row();
  Slider alignmentWeight=new Slider(0,2,.01f,false,container.skin);
  alignmentWeight.setValue(blendedSteerings.get(0).get(0).getWeight());
  alignmentWeight.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < blendedSteerings.size; i++)       blendedSteerings.get(i).get(0).setWeight(slider.getValue());
      alignmentWeightLabel.setText("String_Node_Str" + blendedSteerings.get(0).get(0).getWeight() + "String_Node_Str");
    }
  }
);
  detailTable.add(alignmentWeight);
  detailTable.row();
  final Label cohesionWeightLabel=new Label("String_Node_Str" + blendedSteerings.get(0).get(1).getWeight() + "String_Node_Str",container.skin);
  detailTable.add(cohesionWeightLabel);
  detailTable.row();
  Slider cohesionWeight=new Slider(0,2,.01f,false,container.skin);
  cohesionWeight.setValue(blendedSteerings.get(0).get(1).getWeight());
  cohesionWeight.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < blendedSteerings.size; i++)       blendedSteerings.get(i).get(1).setWeight(slider.getValue());
      cohesionWeightLabel.setText("String_Node_Str" + blendedSteerings.get(0).get(1).getWeight() + "String_Node_Str");
    }
  }
);
  detailTable.add(cohesionWeight);
  detailTable.row();
  final Label separationWeightLabel=new Label("String_Node_Str" + blendedSteerings.get(0).get(2).getWeight() + "String_Node_Str",container.skin);
  detailTable.add(separationWeightLabel);
  detailTable.row();
  Slider separationWeight=new Slider(0,2,.01f,false,container.skin);
  separationWeight.setValue(blendedSteerings.get(0).get(2).getWeight());
  separationWeight.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < blendedSteerings.size; i++)       blendedSteerings.get(i).get(2).setWeight(slider.getValue());
      separationWeightLabel.setText("String_Node_Str" + blendedSteerings.get(0).get(2).getWeight() + "String_Node_Str");
    }
  }
);
  detailTable.add(separationWeight);
  detailTable.row();
  final Label separationDecayCoeffLabel=new Label("String_Node_Str" + separationDecayCoefficient + "String_Node_Str",container.skin);
  detailTable.add(separationDecayCoeffLabel);
  detailTable.row();
  Slider separationDecayCoeff=new Slider(1,5000,1,false,container.skin);
  separationDecayCoeff.setValue(separationDecayCoefficient);
  separationDecayCoeff.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      separationDecayCoefficient=slider.getValue();
      separationDecayCoeffLabel.setText("String_Node_Str" + separationDecayCoefficient + "String_Node_Str");
    }
  }
);
  detailTable.add(separationDecayCoeff);
  detailTable.row();
  addSeparator(detailTable);
  detailTable.row();
  final Label labelProximityRadius=new Label("String_Node_Str" + proximities.get(0).getRadius() + "String_Node_Str",container.skin);
  detailTable.add(labelProximityRadius);
  detailTable.row();
  Slider proximityRadius=new Slider(0,500,1,false,container.skin);
  proximityRadius.setValue(proximities.get(0).getRadius());
  proximityRadius.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < proximities.size; i++)       proximities.get(i).setRadius(slider.getValue());
      labelProximityRadius.setText("String_Node_Str" + slider.getValue() + "String_Node_Str");
    }
  }
);
  detailTable.add(proximityRadius);
  detailTable.row();
  final Label labelProximityAngle=new Label("String_Node_Str" + proximities.get(0).getAngle() * MathUtils.radiansToDegrees + "String_Node_Str",container.skin);
  detailTable.add(labelProximityAngle);
  detailTable.row();
  Slider proximityAngle=new Slider(0,360,1,false,container.skin);
  proximityAngle.setValue(proximities.get(0).getAngle() * MathUtils.radiansToDegrees);
  proximityAngle.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < proximities.size; i++)       proximities.get(i).setAngle(slider.getValue() * MathUtils.degreesToRadians);
      labelProximityAngle.setText("String_Node_Str" + slider.getValue() + "String_Node_Str");
    }
  }
);
  detailTable.add(proximityAngle);
  detailTable.row();
  final Label labelMaxLinAcc=new Label("String_Node_Str" + characters.get(0).getMaxLinearAcceleration() + "String_Node_Str",container.skin);
  detailTable.add(labelMaxLinAcc);
  detailTable.row();
  Slider maxLinAcc=new Slider(0,500,1,false,container.skin);
  maxLinAcc.setValue(characters.get(0).getMaxLinearAcceleration());
  maxLinAcc.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < characters.size; i++)       characters.get(i).setMaxLinearAcceleration(slider.getValue());
      labelMaxLinAcc.setText("String_Node_Str" + slider.getValue() + "String_Node_Str");
    }
  }
);
  detailTable.add(maxLinAcc);
  detailTable.row();
  final Label labelMaxLinSpeed=new Label("String_Node_Str" + characters.get(0).getMaxLinearSpeed() + "String_Node_Str",container.skin);
  detailTable.add(labelMaxLinSpeed);
  detailTable.row();
  Slider maxLinSpeed=new Slider(0,500,1,false,container.skin);
  maxLinSpeed.setValue(characters.get(0).getMaxLinearSpeed());
  maxLinSpeed.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < characters.size; i++)       characters.get(i).setMaxLinearSpeed(slider.getValue());
      labelMaxLinSpeed.setText("String_Node_Str" + slider.getValue() + "String_Node_Str");
    }
  }
);
  detailTable.add(maxLinSpeed);
  detailTable.row();
  addSeparator(detailTable);
  detailTable.row();
  CheckBox debug=new CheckBox("String_Node_Str",container.skin);
  debug.setChecked(drawDebug);
  debug.addListener(new ClickListener(){
    @Override public void clicked(    InputEvent event,    float x,    float y){
      CheckBox checkBox=(CheckBox)event.getListenerActor();
      drawDebug=checkBox.isChecked();
    }
  }
);
  detailTable.add(debug);
  detailWindow=createDetailWindow(detailTable);
}

Fixed version (ground truth):
@Override public void create(Table table){
  drawDebug=true;
  shapeRenderer=new ShapeRenderer();
  separationDecayCoefficient=500;
  characters=new Array<SteeringActor>();
  blendedSteerings=new Array<BlendedSteering<Vector2>>();
  proximities=new Array<FieldOfViewProximity<Vector2>>();
  for (int i=0; i < 60; i++) {
    SteeringActor character=new SteeringActor(container.greenFish,false);
    character.setPosition(MathUtils.random(container.stageWidth),MathUtils.random(container.stageHeight),Align.center);
    character.setMaxLinearSpeed(70);
    character.setMaxLinearAcceleration(400);
    character.setMaxAngularAcceleration(0);
    character.setMaxAngularSpeed(5);
    FieldOfViewProximity<Vector2> proximity=new FieldOfViewProximity<Vector2>(character,characters,140,270 * MathUtils.degreesToRadians);
    proximities.add(proximity);
    if (i == 0)     char0Proximity=proximity;
    Alignment<Vector2> groupAlignmentSB=new Alignment<Vector2>(character,proximity);
    Cohesion<Vector2> groupCohesionSB=new Cohesion<Vector2>(character,proximity);
    Separation<Vector2> groupSeparationSB=new Separation<Vector2>(character,proximity){
      @Override public float getDecayCoefficient(){
        return separationDecayCoefficient;
      }
      @Override public Separation<Vector2> setDecayCoefficient(      float decayCoefficient){
        separationDecayCoefficient=decayCoefficient;
        return this;
      }
    }
;
    BlendedSteering<Vector2> blendedSteering=new BlendedSteering<Vector2>(character).add(groupAlignmentSB,.2f).add(groupCohesionSB,.06f).add(groupSeparationSB,1.7f);
    blendedSteerings.add(blendedSteering);
    Wander<Vector2> wanderSB=new Wander<Vector2>(character).setFaceEnabled(false).setWanderOffset(60).setWanderOrientation(10).setWanderRadius(40).setWanderRate(MathUtils.PI / 5);
    PrioritySteering<Vector2> prioritySteeringSB=new PrioritySteering<Vector2>(character,0.0001f).add(blendedSteering).add(wanderSB);
    character.setSteeringBehavior(prioritySteeringSB);
    table.addActor(character);
    characters.add(character);
  }
  inputProcessor=null;
  Table detailTable=new Table(container.skin);
  detailTable.row();
  final Label alignmentWeightLabel=new Label("String_Node_Str" + blendedSteerings.get(0).get(0).getWeight() + "String_Node_Str",container.skin);
  detailTable.add(alignmentWeightLabel);
  detailTable.row();
  Slider alignmentWeight=new Slider(0,2,.01f,false,container.skin);
  alignmentWeight.setValue(blendedSteerings.get(0).get(0).getWeight());
  alignmentWeight.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < blendedSteerings.size; i++)       blendedSteerings.get(i).get(0).setWeight(slider.getValue());
      alignmentWeightLabel.setText("String_Node_Str" + blendedSteerings.get(0).get(0).getWeight() + "String_Node_Str");
    }
  }
);
  detailTable.add(alignmentWeight);
  detailTable.row();
  final Label cohesionWeightLabel=new Label("String_Node_Str" + blendedSteerings.get(0).get(1).getWeight() + "String_Node_Str",container.skin);
  detailTable.add(cohesionWeightLabel);
  detailTable.row();
  Slider cohesionWeight=new Slider(0,2,.01f,false,container.skin);
  cohesionWeight.setValue(blendedSteerings.get(0).get(1).getWeight());
  cohesionWeight.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < blendedSteerings.size; i++)       blendedSteerings.get(i).get(1).setWeight(slider.getValue());
      cohesionWeightLabel.setText("String_Node_Str" + blendedSteerings.get(0).get(1).getWeight() + "String_Node_Str");
    }
  }
);
  detailTable.add(cohesionWeight);
  detailTable.row();
  final Label separationWeightLabel=new Label("String_Node_Str" + blendedSteerings.get(0).get(2).getWeight() + "String_Node_Str",container.skin);
  detailTable.add(separationWeightLabel);
  detailTable.row();
  Slider separationWeight=new Slider(0,2,.01f,false,container.skin);
  separationWeight.setValue(blendedSteerings.get(0).get(2).getWeight());
  separationWeight.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < blendedSteerings.size; i++)       blendedSteerings.get(i).get(2).setWeight(slider.getValue());
      separationWeightLabel.setText("String_Node_Str" + blendedSteerings.get(0).get(2).getWeight() + "String_Node_Str");
    }
  }
);
  detailTable.add(separationWeight);
  detailTable.row();
  final Label separationDecayCoeffLabel=new Label("String_Node_Str" + separationDecayCoefficient + "String_Node_Str",container.skin);
  detailTable.add(separationDecayCoeffLabel);
  detailTable.row();
  Slider separationDecayCoeff=new Slider(1,5000,1,false,container.skin);
  separationDecayCoeff.setValue(separationDecayCoefficient);
  separationDecayCoeff.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      separationDecayCoefficient=slider.getValue();
      separationDecayCoeffLabel.setText("String_Node_Str" + separationDecayCoefficient + "String_Node_Str");
    }
  }
);
  detailTable.add(separationDecayCoeff);
  detailTable.row();
  addSeparator(detailTable);
  detailTable.row();
  final Label labelProximityRadius=new Label("String_Node_Str" + proximities.get(0).getRadius() + "String_Node_Str",container.skin);
  detailTable.add(labelProximityRadius);
  detailTable.row();
  Slider proximityRadius=new Slider(0,500,1,false,container.skin);
  proximityRadius.setValue(proximities.get(0).getRadius());
  proximityRadius.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < proximities.size; i++)       proximities.get(i).setRadius(slider.getValue());
      labelProximityRadius.setText("String_Node_Str" + slider.getValue() + "String_Node_Str");
    }
  }
);
  detailTable.add(proximityRadius);
  detailTable.row();
  final Label labelProximityAngle=new Label("String_Node_Str" + proximities.get(0).getAngle() * MathUtils.radiansToDegrees + "String_Node_Str",container.skin);
  detailTable.add(labelProximityAngle);
  detailTable.row();
  Slider proximityAngle=new Slider(0,360,1,false,container.skin);
  proximityAngle.setValue(proximities.get(0).getAngle() * MathUtils.radiansToDegrees);
  proximityAngle.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < proximities.size; i++)       proximities.get(i).setAngle(slider.getValue() * MathUtils.degreesToRadians);
      labelProximityAngle.setText("String_Node_Str" + slider.getValue() + "String_Node_Str");
    }
  }
);
  detailTable.add(proximityAngle);
  detailTable.row();
  final Label labelMaxLinAcc=new Label("String_Node_Str" + characters.get(0).getMaxLinearAcceleration() + "String_Node_Str",container.skin);
  detailTable.add(labelMaxLinAcc);
  detailTable.row();
  Slider maxLinAcc=new Slider(0,500,1,false,container.skin);
  maxLinAcc.setValue(characters.get(0).getMaxLinearAcceleration());
  maxLinAcc.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < characters.size; i++)       characters.get(i).setMaxLinearAcceleration(slider.getValue());
      labelMaxLinAcc.setText("String_Node_Str" + slider.getValue() + "String_Node_Str");
    }
  }
);
  detailTable.add(maxLinAcc);
  detailTable.row();
  final Label labelMaxLinSpeed=new Label("String_Node_Str" + characters.get(0).getMaxLinearSpeed() + "String_Node_Str",container.skin);
  detailTable.add(labelMaxLinSpeed);
  detailTable.row();
  Slider maxLinSpeed=new Slider(0,500,1,false,container.skin);
  maxLinSpeed.setValue(characters.get(0).getMaxLinearSpeed());
  maxLinSpeed.addListener(new ChangeListener(){
    @Override public void changed(    ChangeEvent event,    Actor actor){
      Slider slider=(Slider)actor;
      for (int i=0; i < characters.size; i++)       characters.get(i).setMaxLinearSpeed(slider.getValue());
      labelMaxLinSpeed.setText("String_Node_Str" + slider.getValue() + "String_Node_Str");
    }
  }
);
  detailTable.add(maxLinSpeed);
  detailTable.row();
  addSeparator(detailTable);
  detailTable.row();
  CheckBox debug=new CheckBox("String_Node_Str",container.skin);
  debug.setChecked(drawDebug);
  debug.addListener(new ClickListener(){
    @Override public void clicked(    InputEvent event,    float x,    float y){
      CheckBox checkBox=(CheckBox)event.getListenerActor();
      drawDebug=checkBox.isChecked();
    }
  }
);
  detailTable.add(debug);
  detailWindow=createDetailWindow(detailTable);
}