/*
* Copyright (C) 2007 Steve Ratcliffe
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* Author: Steve Ratcliffe
* Create date: Dec 15, 2007
*/
package uk.me.parabola.imgfmt.app.typ;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import uk.me.parabola.imgfmt.app.ImgFileWriter;
/**
* Holds the shape stacking section.
*
* Deals with sorting everything correctly, so no need to sort in the input file.
*
* @author Steve Ratcliffe
*/
public class ShapeStacking {
private final SortedMap<Integer, DrawOrder> bar = new TreeMap<Integer, DrawOrder>();
public void addPolygon(int level, int type, int subtype) {
int levelType = (level << 16) + type;
DrawOrder order = bar.get(levelType);
if (order == null) {
order = new DrawOrder(type);
bar.put(levelType, order);
}
order.addSubtype(subtype);
}
public void write(ImgFileWriter writer) {
int lastLevel = 1;
DrawOrder empty = new DrawOrder(0);
for (Map.Entry<Integer, DrawOrder> ent : bar.entrySet()) {
int level = (ent.getKey() >> 16) & 0xffff;
DrawOrder order = ent.getValue();
if (level != lastLevel) {
empty.write(writer);
lastLevel = level;
}
order.write(writer);
}
}
}