Storing sprites in Entity objects now, moderate ListGUI refactoring to simplify list icons creation. See more in the task description https://trello.com/c/tkAjRpcG
This commit is contained in:
@ -132,6 +132,7 @@ public class Project implements Iterable<Entity>, EntityDrawboxChangedListener {
|
||||
factory = DocumentBuilderFactory.newInstance();
|
||||
builder = factory.newDocumentBuilder();
|
||||
document = builder.parse(new File(path+fileName));
|
||||
// TODO: remove this from Project, it should not know SHIT about MainGUI
|
||||
if(Launcher.getMainGUI() != null) // at the first program launch, main gui creates list gui before static link to main gui is set
|
||||
Launcher.getMainGUI().setTitle("Hitbox/Drawbox Editor: " + path + fileName);
|
||||
// Получение списка всех элементов objecttype внутри корневого элемента (getDocumentElement возвращает ROOT элемент XML файла).
|
||||
@ -144,14 +145,18 @@ public class Project implements Iterable<Entity>, EntityDrawboxChangedListener {
|
||||
}
|
||||
}
|
||||
|
||||
// эта колбаса парсит сущности из XML в программные объекты внутри модели, является частью внутренней кухни так что обычно её не нужно трогать
|
||||
private void parsingElementXMLtoElementList(String entityName,Node objecttype) {
|
||||
private void parsingElementXMLtoElementList(String entityName, Node objecttype) {
|
||||
String newDrawbox = null;
|
||||
String newHitbox = null;
|
||||
String type = null;
|
||||
String type = null;
|
||||
BufferedImage sprite = null;
|
||||
Element element = (Element)objecttype;
|
||||
NodeList propertyElements = element.getElementsByTagName("property");
|
||||
if(propertyElements!=null) {
|
||||
if(propertyElements != null) {
|
||||
|
||||
// do not lazy load images here - Hitbox parser needs real image sizes
|
||||
sprite = loadImageByName(entityName);
|
||||
|
||||
for(int i = 0; i < propertyElements.getLength(); i++) {
|
||||
Element property = (Element)propertyElements.item(i);
|
||||
String propertyName = property.getAttribute("name");
|
||||
@ -168,8 +173,10 @@ public class Project implements Iterable<Entity>, EntityDrawboxChangedListener {
|
||||
break;
|
||||
}
|
||||
}
|
||||
Entity e = new Entity(entityName,newDrawbox,newHitbox);
|
||||
|
||||
Entity e = new Entity(entityName, newDrawbox, newHitbox);
|
||||
e.setType(type);
|
||||
e.setImage(sprite);
|
||||
listEntity.add(e);
|
||||
}
|
||||
}
|
||||
@ -179,9 +186,6 @@ public class Project implements Iterable<Entity>, EntityDrawboxChangedListener {
|
||||
* XML-файл. Возвращает null если изображение не найдено.
|
||||
* */
|
||||
public BufferedImage loadImageByName(String name) {
|
||||
//TODO: сделать кеширование - не дело подгружать одну и ту же картинку по десять раз!
|
||||
|
||||
String path = Project.getInstance().getXMLPath();
|
||||
String extension = "png";
|
||||
// TODO: изображения следует подгружать в отдельном потоке!
|
||||
|
||||
@ -209,6 +213,9 @@ public class Project implements Iterable<Entity>, EntityDrawboxChangedListener {
|
||||
if(getEntityByName(e.getName()) != null)
|
||||
throw new DuplicateEntryException("The entity with the name '" + e.getName() + "' already exists!");
|
||||
|
||||
//TODO: move image loading to AddListElementEntityListener and make it lazy
|
||||
e.setImage(loadImageByName(e.getName()));
|
||||
|
||||
listEntity.add(e);
|
||||
|
||||
Element objecttypeElement = document.createElement("objecttype");
|
||||
@ -365,8 +372,9 @@ public class Project implements Iterable<Entity>, EntityDrawboxChangedListener {
|
||||
return null;
|
||||
}
|
||||
|
||||
//https://stackoverflow.com/a/64659614/6929164
|
||||
public static void stripEmptyElements(Node node)
|
||||
// https://stackoverflow.com/a/64659614/6929164
|
||||
// new empty lines will appear on every XML save without this function
|
||||
private static void stripEmptyElements(Node node)
|
||||
{
|
||||
NodeList children = node.getChildNodes();
|
||||
for(int i = 0; i < children.getLength(); ++i) {
|
||||
|
||||
Reference in New Issue
Block a user