All Downloads are FREE. Search and download functionalities are using the official Maven repository.

rinde.sim.examples.fabrirecht.gradientField.GradientFieldRenderer Maven / Gradle / Ivy

package rinde.sim.examples.fabrirecht.gradientField;

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

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 trucks = gradientModel.getTruckEmitters();
		
		synchronized (trucks) {
			for (final Truck t : trucks) {
				
				Point tp = t.getPosition();
				
				final Map fields = t.getFields();
				
				float max = Float.NEGATIVE_INFINITY;
				float min = Float.POSITIVE_INFINITY;
				
				for(Point p:fields.keySet()){
					max = Math.max(max, fields.get(p));
					min = Math.min(min, fields.get(p));
				}
				
				int dia;
				RGB color = null;
				for(Point p:fields.keySet()){
					final int x = vp.toCoordX(tp.x + 6 * p.x);
					final int y = vp.toCoordY(tp.y + 6 * p.y);
					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);
				}
			}
		}
		
	}

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

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

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy