Blame |
Last modification |
View Log
| RSS feed
package com.gebauz.bauzoid2.graphics.sprite;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.gebauz.bauzoid2.parser.Preprocessor;
import com.gebauz.bauzoid2.parser.ScanException;
import com.gebauz.bauzoid2.parser.Tokenizer;
/** Utility functionality for sprites. */
public class SpriteUtil
{
public static final String LOG_TAG =
"SPRITEUTIL";
public static boolean verbose =
true;
private SpriteUtil
() {}
public static void log
(String tag,
String msg
)
{
if (verbose
)
Gdx.
app.
log(tag, msg
);
}
static public SpriteSheetDefinition readSpriteRegionInfo
(FileHandle file
)
{
String fileContents = Preprocessor.
stripComments(file.
readString());
SpriteSheetDefinition spriteInfo =
new SpriteSheetDefinition
();
try
{
Tokenizer tokenizer =
new Tokenizer
(fileContents
);
tokenizer.
setStringDelimiter(new char[] {'\'',
'"'} );
while (!tokenizer.
checkNoMoreTokens())
{
String identifier = tokenizer.
readIdentifier();
if (identifier.
equalsIgnoreCase("frame"))
{
spriteInfo.
frames.
add(readFrameLine
(tokenizer
));
}
else
{
throw new ScanException
(LOG_TAG,
"Syntax error at: " + tokenizer.
getSurroundings());
}
}
}
catch (ScanException e
)
{
e.
log(LOG_TAG
);
return null;
}
if (spriteInfo.
frames.
size() ==
0)
{
log
(LOG_TAG,
"Atlas definition does not contain any frame information!");
return null;
}
return spriteInfo
;
}
static private SpriteSheetDefinition.
FrameInfo readFrameLine
(Tokenizer t
) throws ScanException
{
float x =
0;
float y =
0;
float w =
0;
float h =
0;
x = t.
readNumber();
t.
readToken(", ");
y = t.
readNumber();
t.
readToken(", ");
w = t.
readNumber();
t.
readToken(", ");
h = t.
readNumber();
t.
readToken(";");
return new SpriteSheetDefinition.
FrameInfo(x, y, w, h
);
}
}