commit
d921847f35
@ -0,0 +1,67 @@ |
||||
package com.jme3.scene.plugins.fbx; |
||||
|
||||
import java.io.IOException; |
||||
import java.io.InputStream; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.Scanner; |
||||
import java.util.regex.Matcher; |
||||
import java.util.regex.Pattern; |
||||
|
||||
import com.jme3.asset.AssetInfo; |
||||
import com.jme3.asset.AssetKey; |
||||
import com.jme3.asset.AssetLoadException; |
||||
import com.jme3.asset.AssetLoader; |
||||
import com.jme3.asset.ModelKey; |
||||
|
||||
public class SceneWithAnimationLoader implements AssetLoader { |
||||
|
||||
private Pattern splitStrings = Pattern.compile("([^\"]\\S*|\".+?\")\\s*"); |
||||
|
||||
@Override |
||||
public Object load(AssetInfo assetInfo) throws IOException { |
||||
AssetKey<?> key = assetInfo.getKey(); |
||||
if(!(key instanceof ModelKey)) |
||||
throw new AssetLoadException("Invalid asset key"); |
||||
InputStream stream = assetInfo.openStream(); |
||||
Scanner scanner = new Scanner(stream); |
||||
AnimationList animList = new AnimationList(); |
||||
String modelName = null; |
||||
try { |
||||
while(scanner.hasNextLine()) { |
||||
String line = scanner.nextLine(); |
||||
if(line.startsWith("#")) |
||||
continue; |
||||
if(modelName == null) { |
||||
modelName = line; |
||||
continue; |
||||
} |
||||
String[] split = split(line); |
||||
if(split.length < 3) |
||||
throw new IOException("Unparseable string \"" + line + "\""); |
||||
int start; |
||||
int end; |
||||
try { |
||||
start = Integer.parseInt(split[0]); |
||||
end = Integer.parseInt(split[1]); |
||||
} catch(NumberFormatException e) { |
||||
throw new IOException("Unparseable string \"" + line + "\"", e); |
||||
} |
||||
animList.add(split[2], split.length > 3 ? split[3] : null, start, end); |
||||
} |
||||
} finally { |
||||
scanner.close(); |
||||
stream.close(); |
||||
} |
||||
return assetInfo.getManager().loadAsset(new SceneKey(key.getFolder() + modelName, animList)); |
||||
} |
||||
|
||||
private String[] split(String src) { |
||||
List<String> list = new ArrayList<String>(); |
||||
Matcher m = splitStrings.matcher(src); |
||||
while(m.find()) |
||||
list.add(m.group(1).replace("\"", "")); |
||||
return list.toArray(new String[list.size()]); |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue