This is ExplodeView.m in view mode; [Download] [Up]
#import "ExplodeView.h" #import "Explosion.h" #define DEFAULT_EXPLOSIONS 4 #define DEFAULT_PLOTS 30 @implementation ExplodeView - initFrame:(NXRect *)frameRect { const char *aDefault; aDefault = NXReadDefault( "BackSpace", "ExplodeMax" ); if( !aDefault ) newMaxExplosions = maxExplosions = DEFAULT_EXPLOSIONS; else newMaxExplosions = maxExplosions = atoi( aDefault ); aDefault = NXReadDefault( "BackSpace", "ExplodeMaxPlot" ); if( !aDefault ) newMaxPlot = maxPlot = DEFAULT_PLOTS; else newMaxPlot = maxPlot = atoi( aDefault ); aDefault = NXReadDefault( "BackSpace", "ExplodeBuffered" ); if( !aDefault ) bufferedWindow = YES; else bufferedWindow = ( BOOL )atoi( aDefault ); initDone = NO; return self; } - drawSelf:( const NXRect * )rects :( int )rectCount { int loop; char aDefault[ 50 ]; [ self getFrame: &theRect ]; if( maxPlot != newMaxPlot || maxExplosions != newMaxExplosions || initDone == NO ) { initDone = YES; maxPlot = newMaxPlot; maxExplosions = newMaxExplosions; sprintf( aDefault, "%d", maxExplosions ); NXWriteDefault( "BackSpace", "ExplodeMax", aDefault ); sprintf( aDefault, "%d", maxPlot ); NXWriteDefault( "BackSpace", "ExplodeMaxPlot", aDefault ); sprintf( aDefault, "%d", ( int )bufferedWindow ); NXWriteDefault( "BackSpace", "ExplodeBuffered", aDefault ); loop = 0; while( myExplosions[ loop ] != nil ) { [ myExplosions[ loop ] free ]; myExplosions[ loop++ ] = nil; } for( loop = 0; loop < maxExplosions; loop++ ) { myExplosions[ loop ] = [ [ Explosion alloc ] init ]; [ myExplosions[ loop ] initStart: &theRect withPlots: maxPlot mode: [ self shouldDrawColor ] ]; } } if( !rects || !rectCount ) return self; PSsetgray( 0 ); NXRectFill( rects ); return self; } - oneStep { int loop; for( loop = 0; loop < maxExplosions; loop++ ) { [ myExplosions[ loop ] clearSim ]; [ myExplosions[ loop ] doSim ]; } for( loop = 0; loop < maxExplosions; loop++ ) [ myExplosions[ loop ] showSim ]; return self; } - ( BOOL )useBufferedWindow { return( bufferedWindow ); } - inspector: sender { char buf[ MAXPATHLEN ]; if( !inspector ) { [ NXBundle getPath: buf forResource:"ExplodeView" ofType:"nib" inDirectory:[ sender moduleDirectory:"Explode" ] withVersion:0 ]; [ NXApp loadNibFile:buf owner:self withNames:NO ]; } return( inspector ); } - inspectorInstalled { [ plots setIntValue: maxPlot ]; [ numPlotsSlider setIntValue: maxPlot ]; [ explosions setIntValue: maxExplosions ]; [ numExplodesSlider setIntValue: maxExplosions ]; [ useBufferedWindow setState:( int )bufferedWindow ]; return self; } - sizeTo:( NXCoord )theWidth: ( NXCoord )theHeight { initDone = NO; return( [super sizeTo:theWidth :theHeight] ); } - setNumExplodes: sender { newMaxExplosions = [ sender intValue ]; [ explosions setIntValue: newMaxExplosions ]; return self; } - setNumPlots: sender; { newMaxPlot = [ sender intValue ]; [ plots setIntValue: newMaxPlot ]; return self; } - toggleBuffered: sender; { bufferedWindow = bufferedWindow ? NO : YES; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.