allow multiple simultaneous gltf animatiosn

This commit is contained in:
Nick Fisher
2023-08-09 13:59:10 +08:00
parent fa8c6b1ca0
commit e62bf64c04
7 changed files with 130 additions and 141 deletions

View File

@@ -372,13 +372,13 @@ public class SwiftPolyvoxFilamentPlugin: NSObject, FlutterPlugin, FlutterTexture
// apply_weights(assetManager, asset, entityName, UnsafeMutablePointer(&weights), Int32(count))
result(true)
case "setMorphTargetWeights":
guard let args = call.arguments as? [Any], args.count == 7,
guard let args = call.arguments as? [Any], args.count == 5,
let assetManager = args[0] as? Int64,
let asset = args[1] as? EntityId,
let entityName = args[2] as? String,
let morphData = args[3] as? FlutterStandardTypedData,
let numMorphWeights = args[4] as? Int else {
result(FlutterError(code: "INVALID_ARGUMENTS", message: "Expected correct arguments for set_morph_animation", details: nil))
result(FlutterError(code: "INVALID_ARGUMENTS", message: "Expected correct arguments for setMorphTargetWeights", details: nil))
return
}
let success = morphData.data.withUnsafeBytes { buffer in
@@ -434,18 +434,18 @@ public class SwiftPolyvoxFilamentPlugin: NSObject, FlutterPlugin, FlutterTexture
result(true)
case "playAnimation":
guard let args = call.arguments as? [Any], args.count == 6,
guard let args = call.arguments as? [Any], args.count == 7,
let assetManager = args[0] as? Int64,
let asset = args[1] as? EntityId,
let index = args[2] as? Int,
let loop = args[3] as? Bool,
let reverse = args[4] as? Bool,
let crossfade = args[5] as? Float else {
let replaceActive = args[5] as? Bool,
let crossfade = args[6] as? Double else {
result(FlutterError(code: "INVALID_ARGUMENTS", message: "Expected correct arguments for play_animation", details: nil))
return
}
play_animation(unsafeBitCast(assetManager, to:UnsafeMutableRawPointer.self), asset, Int32(index), loop, reverse, crossfade)
play_animation(unsafeBitCast(assetManager, to:UnsafeMutableRawPointer.self), asset, Int32(index), loop, reverse, replaceActive, Float(crossfade))
result(true)
case "getAnimationDuration":
guard let args = call.arguments as? [Any], args.count == 3,
@@ -546,10 +546,12 @@ public class SwiftPolyvoxFilamentPlugin: NSObject, FlutterPlugin, FlutterTexture
}
let count = get_morph_target_name_count(unsafeBitCast(assetManager, to:UnsafeMutableRawPointer.self), asset, meshName)
var names:[String] = []
for i in 0...count - 1 {
var buffer = [CChar](repeating: 0, count: 256) // Assuming max name length of 256 for simplicity
get_morph_target_name(unsafeBitCast(assetManager, to:UnsafeMutableRawPointer.self), asset, meshName, &buffer, Int32(i))
names.append(String(cString:buffer))
if count > 0 {
for i in 0...count - 1 {
var buffer = [CChar](repeating: 0, count: 256) // Assuming max name length of 256 for simplicity
get_morph_target_name(unsafeBitCast(assetManager, to:UnsafeMutableRawPointer.self), asset, meshName, &buffer, Int32(i))
names.append(String(cString:buffer))
}
}
result(names)
case "getMorphTargetNameCount":