2
2
/// <reference path="../external/jquery/jquery.d.ts" />
3
3
/// <reference path="./threejs-renderer.ts" />
4
4
/// <reference path="./convert-options.ts" />
5
+ /// <reference path="./parse-animations.ts" />
5
6
/// <reference path="./stringify.ts" />
6
7
7
8
// ----------------------------------------------------------------------------
@@ -16,18 +17,20 @@ var renderer: ThreejsRenderer;
16
17
interface i_conversion_data {
17
18
stage : number ;
18
19
exception : boolean ;
19
- s0_source : string ; // Stage 0: raw file string
20
- s1_xml : Document ; // Stage 1: XML document
21
- s2_loaded : COLLADA . Loader . Document ; // Stage 2: COLLADA document
22
- s3_converted : COLLADA . Converter . Document ; // Stage 3: Converted document
23
- s4_exported_custom : COLLADA . Exporter . Document ; // Stage 4: JSON + binary
24
- s5_exported_threejs : any ; // Stage 5: JSON
20
+ s0_source : string ; // Stage 0: raw file string
21
+ s0_animations : parseAnimations . AnimationLabel [ ] ; // Stage 0: animation setup
22
+ s1_xml : Document ; // Stage 1: XML document
23
+ s2_loaded : COLLADA . Loader . Document ; // Stage 2: COLLADA document
24
+ s3_converted : COLLADA . Converter . Document ; // Stage 3: Converted document
25
+ s4_exported_custom : COLLADA . Exporter . Document ; // Stage 4: JSON + binary
26
+ s5_exported_threejs : any ; // Stage 5: JSON
25
27
}
26
28
27
29
var conversion_data : i_conversion_data = {
28
30
stage : null ,
29
31
exception : null ,
30
32
s0_source : null ,
33
+ s0_animations : null ,
31
34
s1_xml : null ,
32
35
s2_loaded : null ,
33
36
s3_converted : null ,
@@ -115,7 +118,8 @@ function reset() {
115
118
}
116
119
117
120
function resetInput ( ) {
118
- conversion_data . s0_source = ""
121
+ conversion_data . s0_source = "" ;
122
+ conversion_data . s0_animations = null ;
119
123
120
124
updateUIInput ( ) ;
121
125
}
@@ -215,6 +219,13 @@ function updateUIInput() {
215
219
$ ( "#drop-target-instructions" ) . removeClass ( "hidden" ) ;
216
220
$ ( "#convert" ) . attr ( "disabled" , "disabled" ) ;
217
221
}
222
+
223
+ if ( conversion_data . s0_animations ) {
224
+ $ ( "#input_animations" ) . removeClass ( "hidden" ) ;
225
+ $ ( "#input_animations" ) . text ( "Animation labels loaded (" + conversion_data . s0_animations . length + ")" ) ;
226
+ } else {
227
+ $ ( "#input_animations" ) . addClass ( "hidden" ) ;
228
+ }
218
229
}
219
230
220
231
function updateUIOutput ( ) {
@@ -294,51 +305,71 @@ function onFileDrag(ev: JQueryEventObject) {
294
305
}
295
306
296
307
function onFileDrop ( ev : JQueryEventObject ) {
297
- writeProgress ( "Something dropped." ) ;
308
+ console . log ( "Something dropped." ) ;
309
+ ev . stopPropagation ( ) ;
298
310
ev . preventDefault ( ) ;
299
311
var dt = ( < any > ev . originalEvent ) . dataTransfer ;
300
312
if ( ! dt ) {
301
313
writeProgress ( "Your browser does not support drag&drop for files (?)." ) ;
302
314
return ;
303
315
}
304
- var files = dt . files ;
305
- if ( files . length == 0 ) {
306
- writeProgress ( "You did not drop a file. Try dragging and dropping a file instead." ) ;
307
- return ;
308
- }
309
- if ( files . length > 1 ) {
310
- writeProgress ( "You dropped multiple files. Please only drop a single file." ) ;
311
- return ;
316
+ var filelist : FileList = dt . files ;
317
+ var files : File [ ] = [ ] ;
318
+ for ( var i = 0 ; i < filelist . length ; ++ i ) {
319
+ files . push ( filelist [ i ] ) ;
312
320
}
313
321
314
- onFileLoad ( files [ 0 ] ) ;
315
- }
316
-
322
+ files = files . sort ( ( a , b ) => b . size - a . size ) ;
317
323
318
- function onFileLoad ( file : File ) {
319
- // Reset all data
320
- reset ( ) ;
324
+ switch ( files . length ) {
325
+ case 0 : writeProgress ( "You did not drop a file. Try dragging and dropping a file instead." ) ; break ;
326
+ case 1 : onFileLoad ( files [ 0 ] ) ; break ;
327
+ case 2 : onFileLoad ( files [ 0 ] , files [ 1 ] ) ; break ;
328
+ default : writeProgress ( "You dropped too many files. Please only drop a single file." ) ;
329
+ } ;
330
+ }
321
331
332
+ function readTextFile ( file : File , name : string , callback : ( result : string ) => void ) {
322
333
// File reader
323
334
var reader = new FileReader ( ) ;
324
335
reader . onload = ( ) => {
325
- timeEnd ( "Reading file" ) ;
336
+ timeEnd ( "Reading " + name ) ;
326
337
var result : string = reader . result ;
327
- convertSetup ( result ) ;
338
+ callback ( result ) ;
328
339
} ;
329
340
reader . onerror = ( ) => {
330
- writeProgress ( "Error reading file ." ) ;
341
+ writeProgress ( "Error reading " + name + " .") ;
331
342
} ;
332
- timeStart ( "Reading file" ) ;
343
+ timeStart ( "Reading " + name ) ;
333
344
334
345
// Read
335
346
reader . readAsText ( file ) ;
336
347
}
337
348
349
+
350
+ function onFileLoad ( file : File , animations ?: File ) {
351
+ // Reset all data
352
+ reset ( ) ;
353
+
354
+ // Read the
355
+ if ( animations ) {
356
+ readTextFile ( animations , "animations" , ( result ) => {
357
+ animationSetup ( result ) ;
358
+ readTextFile ( file , "file" , ( result2 ) => convertSetup ( result2 ) ) ;
359
+ } ) ;
360
+ } else {
361
+ readTextFile ( file , "file" , ( result ) => convertSetup ( result ) ) ;
362
+ }
363
+ }
364
+
338
365
// ----------------------------------------------------------------------------
339
366
// Conversion
340
367
// ----------------------------------------------------------------------------
341
368
369
+ function animationSetup ( src : string ) {
370
+ conversion_data . s0_animations = parseAnimations . parse ( src ) ;
371
+ }
372
+
342
373
function convertSetup ( src : string ) {
343
374
// Set the source data
344
375
conversion_data . s0_source = src ;
@@ -407,6 +438,8 @@ function convertConvert() {
407
438
var converterlog = converter . log = new COLLADA . LogCallback ;
408
439
converterlog . onmessage = ( message : string , level : COLLADA . LogLevel ) => { writeLog ( "converter" , message , level ) ; }
409
440
converter . options = options ;
441
+ converter . options . animationLabels . value = conversion_data . s0_animations ;
442
+ converter . options . useAnimationLabels . value = conversion_data . s0_animations != null ;
410
443
411
444
// Convert
412
445
timeStart ( "COLLADA conversion" ) ;
@@ -495,7 +528,6 @@ function init() {
495
528
// Register events
496
529
$ ( "#drop-target" ) . on ( "dragover" , onFileDrag ) ;
497
530
$ ( "#drop-target" ) . on ( "drop" , onFileDrop ) ;
498
- $ ( "#drop-target" ) . on ( "drop" , onFileDrop ) ;
499
531
$ ( "#convert" ) . click ( onConvertClick ) ;
500
532
501
533
$ ( "#output-custom-json .output-download" ) . click ( ( ) =>
0 commit comments