package com.gebauz.bauzoid.graphics.spritex;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.gebauz.bauzoid.app.Consts;
import com.gebauz.bauzoid.graphics.Graphics;
import com.gebauz.bauzoid.parser.Preprocessor;
import com.gebauz.bauzoid.parser.ScanException;
import com.gebauz.bauzoid.parser.Tokenizer;
public class SpriteUtil
{
public static final String LOG_TAG = Consts.
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 AtlasDefinition readAtlasSpriteInfo
(FileHandle file
)
{
String fileContents = Preprocessor.
stripComments(file.
readString());
AtlasDefinition spriteInfo =
new AtlasDefinition
();
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;
}
// Check must-have info
/*if (spriteInfo.textureFile == null)
{
log(LOG_TAG, "Atlas definition does not contain any texture file!");
return null;
}*/
if (spriteInfo.
frames.
size() ==
0)
{
log
(LOG_TAG,
"Atlas definition does not contain any frame information!");
return null;
}
return spriteInfo
;
}
static public AtlasSprite createAtlasSpriteFromFile
(Graphics graphics,
String textureFile, FileHandle file
)
{
AtlasDefinition spriteInfo = readAtlasSpriteInfo
(file
);
if (spriteInfo
!=
null)
{
AtlasSprite sprite =
new AtlasSprite
(graphics, textureFile
);
sprite.
init();
SpriteRegion regions
[] =
new SpriteRegion
[spriteInfo.
frames.
size()];
for (int i =
0; i
< spriteInfo.
frames.
size(); i++
)
{
regions
[i
] =
new SpriteRegion
(sprite.
getTexture(), spriteInfo.
frames.
get(i
).
x, spriteInfo.
frames.
get(i
).
y, spriteInfo.
frames.
get(i
).
w, spriteInfo.
frames.
get(i
).
h);
}
sprite.
setRegions(regions
);
return sprite
;
}
return null;
}
/*static private String readTextureLine(Tokenizer t) throws ScanException
{
String result = t.readString();
t.readToken(";");
return result;
}*/
static private AtlasDefinition.
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 AtlasDefinition.
FrameInfo(x, y, w, h
);
}
// public AnimatedSprite createAnimatedSpriteFromFile(Graphics graphics, FileHandle file)
// {
// return null;
// }
}