11using Avalonia ;
22using Avalonia . Controls ;
33using Avalonia . Platform . Storage ;
4+ using MsBox . Avalonia ;
45using System ;
56using System . Collections ;
67using System . Collections . Generic ;
@@ -119,6 +120,13 @@ private void Refresh()
119120 CreateExample_PutChars ( ) ;
120121 }
121122 break ;
123+ case ExportTypes . MaskedSprites :
124+ CreateExportPath ( ".bas" ) ;
125+ if ( canExport )
126+ {
127+ CreateExample_MaskedSprites ( ) ;
128+ }
129+ break ;
122130 default :
123131 grdOptions . IsVisible = false ;
124132 break ;
@@ -264,6 +272,149 @@ private void CreateExample_PutChars()
264272 txtCode . Text = sb . ToString ( ) ;
265273 }
266274
275+
276+ private void CreateExample_MaskedSprites ( )
277+ {
278+ if ( sprites == null || sprites . Count ( ) == 0 )
279+ {
280+ txtCode . Text = "" ;
281+ }
282+
283+ var sprite = sprites . ElementAt ( 0 ) ;
284+ var exportData = ExportManager . Export_Sprite_MaskedSprites ( exportConfig , sprites ) ;
285+ if ( exportData . StartsWith ( "ERROR:" ) )
286+ {
287+ txtError . Text = exportData ;
288+ txtError . IsVisible = true ;
289+ return ;
290+ }
291+ txtError . IsVisible = false ;
292+
293+ var sb = new StringBuilder ( ) ;
294+ switch ( exportConfig . ExportDataType )
295+ {
296+ case ExportDataTypes . DIM :
297+ {
298+ sb . AppendLine ( "'- Includes -----------------------------------------------" ) ;
299+ sb . AppendLine ( "#INCLUDE <retrace.bas>" ) ;
300+ sb . AppendLine ( "#INCLUDE \" maskedsprites.bas\" " ) ;
301+ sb . AppendLine ( "" ) ;
302+ sb . AppendLine ( "'- Sprites definition -------------------------------------" ) ;
303+ sb . AppendLine ( string . Format ( "' Can use: #INCLUDE \" {0}\" " ,
304+ Path . GetFileName ( exportConfig . ExportFilePath ) ) ) ;
305+ sb . AppendLine ( exportData ) ;
306+ sb . AppendLine ( "' - Init vars ---------------------------------------------" ) ;
307+ sb . AppendLine ( "#define NumberofMaskedSprites 1" ) ;
308+ sb . AppendLine ( "DIM sprDir, sprBackDir AS UInteger" ) ;
309+ sb . AppendLine ( "" ) ;
310+ sb . AppendLine ( "'- Initialise the sprite engine ---------------------------" ) ;
311+ sb . AppendLine ( "InitMaskedSpritesFileSystem()" ) ;
312+ sb . AppendLine ( "' Create sprite" ) ;
313+ sb . AppendLine ( $ "sprDir = RegisterSpriteImageInMSFS(@{ exportConfig . LabelName } { sprite . Name . Replace ( " " , "_" ) } (0))") ;
314+ sb . AppendLine ( "' Save background for first time" ) ;
315+ sb . AppendLine ( "sprBackDir = MaskedSpritesBackground(0)" ) ;
316+ sb . AppendLine ( "" ) ;
317+ sb . AppendLine ( "'- Draw sprite --------------------------------------------" ) ;
318+ sb . AppendLine ( "DIM n AS UByte" ) ;
319+ sb . AppendLine ( "DO" ) ;
320+ sb . AppendLine ( " ' Sync with raytrace" ) ;
321+ sb . AppendLine ( " waitretrace" ) ;
322+ sb . AppendLine ( " ' Restore background" ) ;
323+ sb . AppendLine ( " RestoreBackground(100,52,sprBackDir)" ) ;
324+ sb . AppendLine ( " " ) ;
325+ sb . AppendLine ( " ' Print a number" ) ;
326+ sb . AppendLine ( " PRINT AT 7,12;n;" ) ;
327+ sb . AppendLine ( " n = n + 1" ) ;
328+ sb . AppendLine ( " ' Draw sprite" ) ;
329+ sb . AppendLine ( " SaveBackgroundAndDrawSpriteRegisteredInMSFS(100,52,sprBackDir,sprDir) " ) ;
330+ sb . AppendLine ( "LOOP" ) ;
331+ sb . AppendLine ( "" ) ;
332+ }
333+ break ;
334+
335+ case ExportDataTypes . ASM :
336+ {
337+ sb . AppendLine ( "'- Includes -----------------------------------------------" ) ;
338+ sb . AppendLine ( "#INCLUDE <retrace.bas>" ) ;
339+ sb . AppendLine ( "#INCLUDE \" maskedsprites.bas\" " ) ;
340+ sb . AppendLine ( "" ) ;
341+ sb . AppendLine ( "' - Init vars ---------------------------------------------" ) ;
342+ sb . AppendLine ( "#define NumberofMaskedSprites 1" ) ;
343+ sb . AppendLine ( "DIM sprDir, sprBackDir AS UInteger" ) ;
344+ sb . AppendLine ( "" ) ;
345+ sb . AppendLine ( "'- Initialise the sprite engine ---------------------------" ) ;
346+ sb . AppendLine ( "InitMaskedSpritesFileSystem()" ) ;
347+ sb . AppendLine ( "' Create sprite" ) ;
348+ sb . AppendLine ( $ "sprDir = RegisterSpriteImageInMSFS(@{ exportConfig . LabelName } _{ sprite . Name . Replace ( " " , "_" ) } )") ;
349+ sb . AppendLine ( "' Save background for first time" ) ;
350+ sb . AppendLine ( "sprBackDir = MaskedSpritesBackground(0)" ) ;
351+ sb . AppendLine ( "" ) ;
352+ sb . AppendLine ( "'- Draw sprite --------------------------------------------" ) ;
353+ sb . AppendLine ( "DIM n AS UByte" ) ;
354+ sb . AppendLine ( "DO" ) ;
355+ sb . AppendLine ( " ' Sync with raytrace" ) ;
356+ sb . AppendLine ( " waitretrace" ) ;
357+ sb . AppendLine ( " ' Restore background" ) ;
358+ sb . AppendLine ( " RestoreBackground(100,52,sprBackDir)" ) ;
359+ sb . AppendLine ( " " ) ;
360+ sb . AppendLine ( " ' Print a number" ) ;
361+ sb . AppendLine ( " PRINT AT 7,12;n;" ) ;
362+ sb . AppendLine ( " n = n + 1" ) ;
363+ sb . AppendLine ( " ' Draw sprite" ) ;
364+ sb . AppendLine ( " SaveBackgroundAndDrawSpriteRegisteredInMSFS(100,52,sprBackDir,sprDir) " ) ;
365+ sb . AppendLine ( "LOOP" ) ;
366+ sb . AppendLine ( "" ) ;
367+ sb . AppendLine ( "' - This section must not be executed --------------------" ) ;
368+ sb . AppendLine ( string . Format ( "' Can use: #INCLUDE \" {0}\" " ,
369+ Path . GetFileName ( exportConfig . ExportFilePath ) ) ) ;
370+ sb . AppendLine ( exportData ) ;
371+ }
372+ break ;
373+
374+ case ExportDataTypes . BIN :
375+ {
376+ sb . AppendLine ( "'- Includes -----------------------------------------------" ) ;
377+ sb . AppendLine ( "#INCLUDE <putchars.bas>" ) ;
378+ sb . AppendLine ( "" ) ;
379+ sb . AppendLine ( "'- Draw sprite --------------------------------------------" ) ;
380+ sb . AppendLine ( string . Format (
381+ "putChars(10,5,{0},{1},@{2})" ,
382+ sprite . Width / 8 ,
383+ sprite . Height / 8 ,
384+ exportConfig . LabelName ) ) ;
385+ sb . AppendLine ( "" ) ;
386+ sb . AppendLine ( "' This section must not be executed" ) ;
387+ sb . AppendLine ( string . Format (
388+ "{0}:" ,
389+ exportConfig . LabelName ) ) ;
390+ sb . AppendLine ( "ASM" ) ;
391+ sb . AppendLine ( string . Format ( "\t INCBIN \" {0}\" " ,
392+ Path . GetFileName ( exportConfig . ExportFilePath ) ) ) ;
393+ sb . AppendLine ( "END ASM" ) ;
394+ }
395+ break ;
396+
397+ case ExportDataTypes . TAP :
398+ {
399+ sb . AppendLine ( "'- Includes -----------------------------------------------" ) ;
400+ sb . AppendLine ( "#INCLUDE <putchars.bas>" ) ;
401+ sb . AppendLine ( "" ) ;
402+ sb . AppendLine ( "' Load .tap data ------------------------------------------" ) ;
403+ sb . AppendLine ( "LOAD \" \" CODE" ) ;
404+ sb . AppendLine ( "" ) ;
405+ sb . AppendLine ( "'- Draw sprite --------------------------------------------" ) ;
406+ sb . AppendLine ( string . Format (
407+ "putChars(10,5,{0},{1},@{2})" ,
408+ sprite . Width / 8 ,
409+ sprite . Height / 8 ,
410+ exportConfig . LabelName ) ) ;
411+ sb . AppendLine ( "" ) ;
412+ }
413+ break ;
414+ }
415+
416+ txtCode . Text = sb . ToString ( ) ;
417+ }
267418 #endregion
268419
269420
@@ -287,7 +438,7 @@ private void BtnSave_Tapped(object? sender, Avalonia.Input.TappedEventArgs e)
287438 GetConfigFromUI ( ) ;
288439 ServiceLayer . Export_SetConfigFile ( fileName + ".zbs" , exportConfig ) ;
289440 Export ( ) ;
290- this . Close ( ) ;
441+ // this.Close();
291442 }
292443
293444 private async void BtnOutputFile_Tapped ( object ? sender , Avalonia . Input . TappedEventArgs e )
0 commit comments