Package rinde.sim.examples.pdptw.gradientfield

Source Code of rinde.sim.examples.pdptw.gradientfield.GradientFieldRenderer

package rinde.sim.examples.pdptw.gradientfield;

import java.util.List;
import java.util.Map;

import javax.annotation.Nullable;

import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.RGB;

import rinde.sim.core.graph.Point;
import rinde.sim.core.model.ModelProvider;
import rinde.sim.ui.renderers.ModelRenderer;
import rinde.sim.ui.renderers.ViewPort;
import rinde.sim.ui.renderers.ViewRect;

public class GradientFieldRenderer implements ModelRenderer {

  protected final static RGB GREEN = new RGB(0, 255, 0);
  protected final static RGB RED = new RGB(255, 0, 0);

  protected GradientModel gradientModel;

  @Override
  public void renderStatic(GC gc, ViewPort vp) {}

  @Override
  public void renderDynamic(GC gc, ViewPort vp, long time) {
    final List<Truck> trucks = gradientModel.getTruckEmitters();

    synchronized (trucks) {
      for (final Truck t : trucks) {
        final Point tp = t.getPosition();
        final Map<Point, Float> fields = t.getFields();

        float max = Float.NEGATIVE_INFINITY;
        float min = Float.POSITIVE_INFINITY;

        for (final Point p : fields.keySet()) {
          max = Math.max(max, fields.get(p));
          min = Math.min(min, fields.get(p));
        }
        int dia;
        RGB color = null;
        for (final Point p : fields.keySet()) {
          final int x = vp.toCoordX(tp.x + p.x / 6d);
          final int y = vp.toCoordY(tp.y + p.y / 6d);
          final float field = fields.get(p);

          if (field < 0) {
            dia = (int) (field / -min * 6);
            color = RED;
          } else {
            dia = (int) (field / max * 6);
            color = GREEN;
          }
          gc.setBackground(new Color(gc.getDevice(), color));
          gc.fillOval(x, y, dia, dia);
        }
      }
    }
  }

  @Nullable
  @Override
  public ViewRect getViewRect() {
    return null;
  }

  @Override
  public void registerModelProvider(ModelProvider mp) {
    gradientModel = mp.getModel(GradientModel.class);
  }

}
TOP

Related Classes of rinde.sim.examples.pdptw.gradientfield.GradientFieldRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.