LinkedList<AltosMapMark> marks = new LinkedList<AltosMapMark>();
- AltosMapPath path;
- AltosMapLine line;
+ AltosMapPath path;
+ AltosMapLine line;
+ public AltosLatLon last_position;
boolean have_boost = false;
boolean have_landed = false;
}
public void set_transform() {
- transform = new AltosMapTransform(width(), height(), zoom, centre);
- repaint();
+ if (centre != null) {
+ transform = new AltosMapTransform(width(), height(), zoom, centre);
+ repaint();
+ }
}
private void set_zoom_label() {
if (!gps.locked && gps.nsat < 4)
return;
- AltosMapRectangle damage = path.add(gps.lat, gps.lon, state.state);
-
switch (state.state) {
case AltosLib.ao_flight_boost:
if (!have_boost) {
break;
}
- if (damage != null)
- repaint(damage, AltosMapPath.stroke_width);
+ if (path != null) {
+ AltosMapRectangle damage = path.add(gps.lat, gps.lon, state.state);
+
+ if (damage != null)
+ repaint(damage, AltosMapPath.stroke_width);
+ }
+
+ last_position = new AltosLatLon(gps.lat, gps.lon);
+
maybe_centre(gps.lat, gps.lon);
}
public void add_mark(double lat, double lon, int state) {
synchronized(marks) {
- marks.add(map_interface.new_mark(lat, lon, state));
+ AltosMapMark mark = map_interface.new_mark(lat, lon, state);
+ if (mark != null)
+ marks.add(mark);
}
repaint();
}
tiles.remove(point);
cache.set_cache_size((width() / AltosMap.px_size + 2) * (height() / AltosMap.px_size + 2));
+
for (int y = (int) upper_left.y; y <= lower_right.y; y += AltosMap.px_size) {
for (int x = (int) upper_left.x; x <= lower_right.x; x += AltosMap.px_size) {
AltosPointInt point = new AltosPointInt(x, y);
AltosLatLon ul = transform.lat_lon(new AltosPointDouble(x, y));
AltosLatLon center = transform.lat_lon(new AltosPointDouble(x + AltosMap.px_size/2, y + AltosMap.px_size/2));
AltosMapTile tile = map_interface.new_tile(this, ul, center, zoom, maptype,
- AltosMap.px_size);
+ px_size);
tiles.put(point, tile);
}
}
}
}
- public void set_load_params(double lat, double lon, int radius, AltosMapTileListener listener) {
+ public void set_load_params(int new_zoom, int new_type, double lat, double lon, int radius, AltosMapTileListener listener) {
+ if (AltosMap.min_zoom <= new_zoom && new_zoom <= AltosMap.max_zoom)
+ zoom = new_zoom;
+ maptype = new_type;
load_centre = new AltosLatLon(lat, lon);
load_radius = radius;
load_listener = listener;
centre(lat, lon);
+ tiles.clear();
make_tiles();
for (AltosMapTile tile : tiles.values()) {
tile.add_store_listener(this);
}
public void paint() {
- make_tiles();
+ if (centre != null)
+ make_tiles();
for (AltosMapTile tile : tiles.values())
tile.paint(transform);
mark.paint(transform);
}
- path.paint(transform);
+ if (path != null)
+ path.paint(transform);
- line.paint(transform);
+ if (line != null)
+ line.paint(transform);
}
/* AltosMapTileListener methods */
}
private void line_start(int x, int y) {
- line.pressed(new AltosPointInt(x, y), transform);
- repaint();
+ if (line != null) {
+ line.pressed(new AltosPointInt(x, y), transform);
+ repaint();
+ }
}
private void line(int x, int y) {
- line.dragged(new AltosPointInt(x, y), transform);
- repaint();
+ if (line != null) {
+ line.dragged(new AltosPointInt(x, y), transform);
+ repaint();
+ }
}
public void touch_start(int x, int y, boolean is_drag) {
line = map_interface.new_line();
path = map_interface.new_path();
set_zoom_label();
- centre(0, 0);
}
}