If you think the Android project droidengine2d listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code
/* Copyright 2013-2014 Miguel Vicente Linares
*//www.java2s.com
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/package com.miviclin.droidengine2d.graphics.texture;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import android.content.Context;
import com.miviclin.droidengine2d.resources.AssetsLoader;
/**
* TextureAtlas that supports texture atlases generated by TexturePacker (lite version).
*
* @author Miguel Vicente Linares
*
*/publicclass TexturePackerAtlas implements TextureAtlas {
private Texture sourceTexture;
private HashMap<String, TextureRegion> regions;
/**
* Constructor.
*/public TexturePackerAtlas() {
this.sourceTexture = null;
this.regions = new HashMap<String, TextureRegion>();
}
@Override
publicvoid loadFromFile(String path, Context context) {
XmlPullParserFactory factory;
XmlPullParser xpp;
int eventType, x, y, width, height, index;
boolean rotated;
TextureRegion region;
String regionName, originalX, originalY, originalW, originalH;
String texturePath = null;
try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
xpp = factory.newPullParser();
xpp.setInput(AssetsLoader.getAsset(context, path), null);
eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equals("sprite")) {
regionName = xpp.getAttributeValue(null, "n");
x = Integer.parseInt(xpp.getAttributeValue(null, "x"));
y = Integer.parseInt(xpp.getAttributeValue(null, "y"));
width = Integer.parseInt(xpp.getAttributeValue(null, "w"));
height = Integer.parseInt(xpp.getAttributeValue(null, "h"));
originalX = xpp.getAttributeValue(null, "oX");
originalY = xpp.getAttributeValue(null, "oY");
originalW = xpp.getAttributeValue(null, "oW");
originalH = xpp.getAttributeValue(null, "oH");
rotated = xpp.getAttributeValue(null, "r") != null;
if (rotated) {
thrownew IllegalArgumentException("TexturePacker's rotated textures are not supported");
}
if (texturePath == null) {
thrownew NullPointerException("Can not find the texture path. " +
"Check TextureAtlas imagePath in the XML file and also check that the provided " +
"path for tha XML file is correct.");
}
if ((originalX != null) || (originalY != null) || (originalW != null) || (originalH != null)) {
// Trimmed
thrownew IllegalArgumentException("TexturePacker's trimmed textures are not supported");
} else {
// Not trimmed
if (sourceTexture == null) {
sourceTexture = new Texture(context, texturePath);
}
region = new TextureRegion(sourceTexture, x, y, width, height);
regions.put(regionName, region);
}
} elseif (xpp.getName().equals("TextureAtlas")) {
index = path.lastIndexOf('/');
if ((index != -1) && (index + 1 <= path.length())) {
texturePath = path.substring(0, index + 1) + xpp.getAttributeValue(null, "imagePath");
} else {
texturePath = xpp.getAttributeValue(null, "imagePath");
}
}
}
eventType = xpp.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public Texture getSourceTexture() {
return sourceTexture;
}
@Override
public TextureRegion getTextureRegion(String name) {
return regions.get(name);
}
@Override
publicvoid clearAtlas() {
regions.clear();
}
@Override
public Map<String, TextureRegion> getTextureRegions() {
return regions;
}
}