18. +
in Scala
val file = new File(path)
using(new RandomAccessFile(file, "r")) { f =>
val channel = f.getChannel
val buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size)
buffer.order(ByteOrder.LITTLE_ENDIAN)
Some(new PMDModel(file, buffer))
}
class PMDModel(file: File, buffer: ByteBuffer) {
val header = new PMDHeader(buffer)
val vertices = Array.fill(buffer.getInt) { new PMDVertex(buffer) }
val indices = Array.fill(buffer.getInt) { buffer.getShort }
val materials = Array.fill(buffer.getInt) { new PMDMaterial(buffer) }
val bones = Array.fill(buffer.getShort) { new PMDBone(buffer) }
val iks = Array.fill(buffer.getShort) { new PMDIKData(buffer) }
val skins = Array.fill(buffer.getShort) { new PMDSkinData(buffer) }
val skinIndex = Array.fill(buffer.get) { buffer.getShort }
val boneDispName = Array.fill(buffer.get) { buffer.getString(50) }
val boneDisp = Array.fill(buffer.getInt) { new PMDBoneDisp(buffer) }
}