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.