Now packing animation sequences.

This commit is contained in:
Martin Haye 2015-12-12 07:22:15 -08:00
parent 70174a3342
commit 11464433be

View File

@ -278,7 +278,8 @@ class PackPartitions
} }
// Put the results into the buffer // Put the results into the buffer
def outBuf = ByteBuffer.allocate(128*18) def outBuf = ByteBuffer.allocate(128*18 + 1)
outBuf.put((byte)0) // animFlags = 0 to start with
outBuf.put(arr) outBuf.put(arr)
// All done. Return the buffer. // All done. Return the buffer.
@ -701,9 +702,42 @@ class PackPartitions
{ {
def num = portraits.size() + 1 def num = portraits.size() + 1
def name = imgEl.@name ?: "img$num" def name = imgEl.@name ?: "img$num"
//println "Packing 126 image named '${imgEl.@name}'." def animFrameNum
def animFlags
def m = (name =~ /^(.*)\*(\d+)(\w*)$/)
if (m) {
name = m[0][1]
animFrameNum = m[0][2].toInteger()
animFlags = m[0][3].toLowerCase()
}
//println "Packing 126 image named '$name'."
def buf = parse126Data(imgEl) def buf = parse126Data(imgEl)
portraits[imgEl.@name] = [num:num, buf:buf] if (animFrameNum == 1) {
def flagByte
switch (animFlags) {
case "" : flagByte = 0; break
case "f" : flagByte = 1; break
case "fb": flagByte = 2; break
case "r" : flagByte = 3; break
default : throw "Unrecognized animation flags '$animFlags'"
}
def newBuf = ByteBuffer.allocate(50000) // plenty of room
buf.flip() // crazy stuff to append one buffer to another
newBuf.put(buf)
def endPos = newBuf.position()
newBuf.position(0)
newBuf.put((byte) flagByte)
newBuf.position(endPos)
portraits[name] = [num:num, buf:newBuf]
}
else if (animFrameNum > 1) {
if (!portraits[name])
throw new Exception("Can't find first frame for animation '$name'")
buf.flip() // crazy stuff to append one buffer to another
portraits[name].buf.put(buf)
}
else
portraits[name] = [num:num, buf:buf]
//println "...uncompressed: ${buf.position()} bytes." //println "...uncompressed: ${buf.position()} bytes."
} }
@ -1252,7 +1286,6 @@ class PackPartitions
// Pack each image, which has the side-effect of filling in the // Pack each image, which has the side-effect of filling in the
// image name map. Handle frame images separately. // image name map. Handle frame images separately.
// //
println "Packing frame images."
def titleFound = false def titleFound = false
def uiFramesFound = 0 def uiFramesFound = 0
def imageNamesPacked = [:] def imageNamesPacked = [:]
@ -1265,7 +1298,7 @@ class PackPartitions
case 3: println "Packing textures."; break case 3: println "Packing textures."; break
case 4: println "Packing portraits."; break case 4: println "Packing portraits."; break
} }
dataIn.image.each { image -> dataIn.image.sort{it.@name.toLowerCase()}.each { image ->
def category = image.@category?.toLowerCase() def category = image.@category?.toLowerCase()
def name = image.@name.toLowerCase() def name = image.@name.toLowerCase()
if (category == "fullscreen" && name == "title") { if (category == "fullscreen" && name == "title") {
@ -1555,6 +1588,7 @@ class PackPartitions
out.println " $it" out.println " $it"
} }
} }
errorFile.eachLine { println it }
def msg = "Fatal error encountered in ${inst.getContextStr()}.\nDetails written to file 'pack_error.txt'." def msg = "Fatal error encountered in ${inst.getContextStr()}.\nDetails written to file 'pack_error.txt'."
println msg println msg
System.out.flush() System.out.flush()