Package rinde.sim.examples.core.taxi

Source Code of rinde.sim.examples.core.taxi.TaxiRenderer

/**
*
*/
package rinde.sim.examples.core.taxi;

import java.util.Set;

import javax.annotation.Nullable;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;

import rinde.sim.core.graph.Point;
import rinde.sim.core.model.ModelProvider;
import rinde.sim.core.model.pdp.DefaultPDPModel;
import rinde.sim.core.model.pdp.PDPModel.VehicleState;
import rinde.sim.core.model.road.RoadModel;
import rinde.sim.ui.renderers.ModelRenderer;
import rinde.sim.ui.renderers.ViewPort;
import rinde.sim.ui.renderers.ViewRect;

import com.google.common.base.Optional;

/**
* @author Rinde van Lon <rinde.vanlon@cs.kuleuven.be>
*
*/
public class TaxiRenderer implements ModelRenderer {

  enum Language {
    DUTCH("INSTAPPEN", "UITSTAPPEN"), ENGLISH("EMBARK", "DISEMBARK");

    final String embark;
    final String disembark;

    Language(String s1, String s2) {
      embark = s1;
      disembark = s2;
    }
  }

  Optional<RoadModel> rm;
  Optional<DefaultPDPModel> pm;
  Language lang;

  TaxiRenderer(Language l) {
    lang = l;
    rm = Optional.absent();
    pm = Optional.absent();
  }

  @Override
  public void registerModelProvider(ModelProvider mp) {
    rm = Optional.fromNullable(mp.getModel(RoadModel.class));
    pm = Optional.fromNullable(mp.getModel(DefaultPDPModel.class));
  }

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

  @Override
  public void renderDynamic(GC gc, ViewPort vp, long time) {
    final Set<Taxi> taxis = rm.get().getObjectsOfType(Taxi.class);
    synchronized (taxis) {
      for (final Taxi t : taxis) {
        final Point p = rm.get().getPosition(t);
        final int x = vp.toCoordX(p.x) - 5;
        final int y = vp.toCoordY(p.y) - 30;

        final VehicleState vs = pm.get().getVehicleState(t);

        String text = null;
        final int size = (int) pm.get().getContentsSize(t);
        if (vs == VehicleState.DELIVERING) {
          text = lang.disembark;
        } else if (vs == VehicleState.PICKING_UP) {
          text = lang.embark;
        } else if (size > 0) {
          text = size + "";
        }

        if (text != null) {
          final org.eclipse.swt.graphics.Point extent = gc.textExtent(text);

          gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_DARK_BLUE));
          gc.fillRoundRectangle(x - (extent.x / 2), y - (extent.y / 2),
              extent.x + 2, extent.y + 2, 5, 5);
          gc.setForeground(gc.getDevice().getSystemColor(SWT.COLOR_WHITE));

          gc.drawText(text, x - (extent.x / 2) + 1, y - (extent.y / 2) + 1,
              true);
        }
      }
    }
  }

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

Related Classes of rinde.sim.examples.core.taxi.TaxiRenderer

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.