This is NQueueView.m in view mode; [Download] [Up]
/*----------------------------------------------------------------------*/
/* (C) Copyright 1994 Stefanos Kiakas */
/* All rights reserved. */
/*----------------------------------------------------------------------*/
/* Generated by Interface Builder */
#import <sys/time.h>
#import "NQueueView.h"
#import "NPipeCell.h"
#import "NCommon.h"
@implementation NQueueView
/*----------------------------------------------------------------------*/
/* Purpose : */
/* Parameters : */
/* Return value : */
/*----------------------------------------------------------------------*/
- initializePipeQueue
{
NXRect matrixRect;
NXSize interCellSpacing = {0.0, 0.0};
NXSize cellSize = { 50.0,50.0 };
struct timeval tp;
struct timezone tzp;
gettimeofday( &tp, &tzp );
srandom( (int ) tp.tv_sec );
//! printf("initializePipeQueue\n");
/* determine the matrix bounds */
[self getBounds:&matrixRect];
/* prepare a matrix to go inside our scrollView */
queueMatrix = [[Matrix alloc] initFrame:&matrixRect
mode:NX_RADIOMODE
cellClass:[NPipeCell class]
numRows:5
numCols:NP_QUEUE_COLUMNS];
/* we don't want any space between the matrix's cells */
[queueMatrix setIntercell:&interCellSpacing];
/* resize the matrix's cells and size the matrix to contain them */
[queueMatrix setCellSize:&cellSize];
[queueMatrix sizeToCells];
[queueMatrix setAutosizeCells:YES];
[[queueMatrix superview] setAutoresizeSubviews:YES];
/* stick the matrix in our scrollView */
[self addSubview:queueMatrix];
return self;
}
/*----------------------------------------------------------------------*/
/* Purpose : */
/* Parameters : */
/* Return value : */
/*----------------------------------------------------------------------*/
- randomizePipeQueue;
{
int i = 0;
id currentCell;
NPipe_t pipe;
for( i = 0 ; i < NP_QUEUE_ROWS; i++ )
{
currentCell = [queueMatrix cellAt:i :0];
[currentCell setBezeled:NO];
pipe = [self newPipePiece];
[currentCell assignPipe: pipe ];
pipeId[ i ] = pipe;
}
[queueMatrix display];
return self;
}
/*----------------------------------------------------------------------*/
/* Purpose : */
/* Parameters : */
/* Return value : */
/*----------------------------------------------------------------------*/
- ( NPipe_t )getPipePiece;
{
return pipeId[NP_QUEUE_ROWS - 1];
}
/*----------------------------------------------------------------------*/
/* Purpose : */
/* Parameters : */
/* Return value : */
/*----------------------------------------------------------------------*/
- (NPipe_t) newPipePiece
{
NPipe_t pi;
NPipe_t newPipe;
int r;
int done;
newPipe = PIPE_VERTICAL_BIDIRECTIONAL; // assign default pipe.
//----------------------------------------------------------------------
// Make sure that we don't have two identical pipes in the collumn. This
// is done to increase the variety of pipe pieces available.
//----------------------------------------------------------------------
do
{
r = ( random() % pipeSetCount ) + 1; /* Get random number to select a new pipe piece. */
//----------------------------------------------------------------------
// Search array for cut off level. If r is less than or equal to the
// cut off level that is the new pipe piece to be used and we exit the
// for loop.
//----------------------------------------------------------------------
for( pi = PIPE_VERTICAL_BIDIRECTIONAL; pi <= PIPE_HORIZONTAL_ONEWAY_RIGHT; pi++)
{
if( r <= pipeProbabilities[ pi ] )
{
newPipe = pi;
break;
}
}
//----------------------------------------------------------------------
// Compare new pipe piece to the other piece in the new piece queue
// if not identical to any of them we have found a new piece.
//----------------------------------------------------------------------
done = TRUE;
for( pi = 1; pi < NP_QUEUE_ROWS; pi ++ )
{
if( pipeId[ pi ] == newPipe )
done = FALSE;
}
}
while( !done );
return( newPipe );
}
/*----------------------------------------------------------------------*/
/* Purpose : */
/* Parameters : */
/* Return value : */
/*----------------------------------------------------------------------*/
- selectPipePiece;
{
int i;
id currentCell;
NPipe_t pipe;
for( i = ( NP_QUEUE_ROWS - 1 ); i > 0 ; i-- )
{
currentCell = [queueMatrix cellAt:i :0];
pipeId[ i ] = pipeId[ i - 1 ] ;
[currentCell assignPipe: pipeId[ i ] ];
}
pipe = [self newPipePiece];
currentCell = [queueMatrix cellAt:0 :0];
[currentCell assignPipe: pipe ];
pipeId[ 0 ] = pipe;
[queueMatrix display];
return self;
}
/*----------------------------------------------------------------------*/
/* Purpose : */
/* Parameters : */
/* Return value : */
/*----------------------------------------------------------------------*/
- useMinimumPipeSet
{
pipeProbabilities[ PIPE_VERTICAL_BIDIRECTIONAL ] = 15;
pipeProbabilities[ PIPE_HORIZONTAL_BIDIRECTIONAL ] = pipeProbabilities[ PIPE_VERTICAL_BIDIRECTIONAL ] + 15;
pipeProbabilities[ PIPE_UPPER_LEFT ] = pipeProbabilities[ PIPE_HORIZONTAL_BIDIRECTIONAL ] + 15;
pipeProbabilities[ PIPE_UPPER_RIGHT ] = pipeProbabilities[ PIPE_UPPER_LEFT ] + 15;
pipeProbabilities[ PIPE_LOWER_LEFT ] = pipeProbabilities[ PIPE_UPPER_RIGHT ] + 15;
pipeProbabilities[ PIPE_LOWER_RIGHT ] = pipeProbabilities[ PIPE_LOWER_LEFT ] + 15;
pipeProbabilities[ PIPE_INTERSECTION ] = pipeProbabilities[ PIPE_LOWER_RIGHT ] + 20;
pipeSetCount = pipeProbabilities[ PIPE_INTERSECTION ];
return self;
}
/*----------------------------------------------------------------------*/
/* Purpose : */
/* Parameters : */
/* Return value : */
/*----------------------------------------------------------------------*/
- useMediumPipeSet
{
pipeProbabilities[ PIPE_VERTICAL_BIDIRECTIONAL ] = 10;
pipeProbabilities[ PIPE_HORIZONTAL_BIDIRECTIONAL ] = pipeProbabilities[ PIPE_VERTICAL_BIDIRECTIONAL ] + 15;
pipeProbabilities[ PIPE_UPPER_LEFT ] = pipeProbabilities[ PIPE_HORIZONTAL_BIDIRECTIONAL ] + 15;
pipeProbabilities[ PIPE_UPPER_RIGHT ] = pipeProbabilities[ PIPE_UPPER_LEFT ] + 15;
pipeProbabilities[ PIPE_LOWER_LEFT ] = pipeProbabilities[ PIPE_UPPER_RIGHT ] + 15;
pipeProbabilities[ PIPE_LOWER_RIGHT ] = pipeProbabilities[ PIPE_LOWER_LEFT ] + 15;
pipeProbabilities[ PIPE_INTERSECTION ] = pipeProbabilities[ PIPE_LOWER_RIGHT ] + 20;
pipeProbabilities[ PIPE_VERTICAL_ONEWAY_UP ] = pipeProbabilities[ PIPE_INTERSECTION ] + 5;
pipeProbabilities[ PIPE_VERTICAL_ONEWAY_DOWN ] = pipeProbabilities[ PIPE_VERTICAL_ONEWAY_UP ] + 5;
pipeSetCount = pipeProbabilities[PIPE_VERTICAL_ONEWAY_DOWN];
return self;
}
/*----------------------------------------------------------------------*/
/* Purpose : */
/* Parameters : */
/* Return value : */
/*----------------------------------------------------------------------*/
- useMaximumPipeSet
{
pipeProbabilities[PIPE_VERTICAL_BIDIRECTIONAL] = 5;
pipeProbabilities[PIPE_HORIZONTAL_BIDIRECTIONAL] = pipeProbabilities[PIPE_VERTICAL_BIDIRECTIONAL] + 5;
pipeProbabilities[PIPE_UPPER_LEFT] = pipeProbabilities[PIPE_HORIZONTAL_BIDIRECTIONAL] + 20;
pipeProbabilities[PIPE_UPPER_RIGHT] = pipeProbabilities[PIPE_UPPER_LEFT] + 20;
pipeProbabilities[PIPE_LOWER_LEFT] = pipeProbabilities[PIPE_UPPER_RIGHT] + 20;
pipeProbabilities[PIPE_LOWER_RIGHT] = pipeProbabilities[PIPE_LOWER_LEFT] + 20;
pipeProbabilities[PIPE_INTERSECTION] = pipeProbabilities[PIPE_LOWER_RIGHT] + 30;
pipeProbabilities[PIPE_VERTICAL_ONEWAY_UP] = pipeProbabilities[ PIPE_INTERSECTION ] + 10;
pipeProbabilities[PIPE_VERTICAL_ONEWAY_DOWN] = pipeProbabilities[ PIPE_VERTICAL_ONEWAY_UP ] + 10;
pipeProbabilities[PIPE_HORIZONTAL_ONEWAY_LEFT] = pipeProbabilities[PIPE_VERTICAL_ONEWAY_DOWN] + 10;
pipeProbabilities[PIPE_HORIZONTAL_ONEWAY_RIGHT] = pipeProbabilities[PIPE_HORIZONTAL_ONEWAY_LEFT] + 10;
pipeSetCount = pipeProbabilities[PIPE_HORIZONTAL_ONEWAY_RIGHT];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.