ChipPile

Inherits From:	Object

Declared In:	ChipPile.h

Class Description

The ChipPile class is a (hopefully) general purpose object to manage and display piles of chips.  It is to be used in conjunction with a View.

ChipPiles are not exactly what they seem - they are not really a collection of chips (like CardPiles are a collection of Card objects).  Instead, ChipPiles are rather abstract - you define how many chips are displayed and what their total value is.  For all intents and purposes, however, ChipPiles can be treated as a pile of chips, just don't expect them to display the exact number of chips you've specified or added to the pile.  Its all just for effect, anyway.  Perhaps future versions of the class will depend on a Chip class, and will behave exactly as the CardSet.  Perhaps.

Instance Variables

int 	ownerIndex;

int 	amount;
BOOL isOn;
int	chipType;
int	chipSize;
int	tag;
int	draggedFromRow;
int	draggedFromColumn;
float	xOffset, yOffset;
float	maxWidth, maxHeight;
int	numChipsToDraw, numChipsDrawn;
BOOL showValueInsteadOfTotal;
int	chipValue;

ownerIndex	An integer used to differentiate piles.

amount	The total value of the pile.

isOn	If YES, draws its value.  If NO, draws "OFF".

chipType	Constant that defines the look of the chips in the pile.

chipSize	Constant that defines the size of the chips in the pile.

tag	An integer used to differentiate piles.

draggedFromRow	Not used by the pile but by objects using the pile.  Tells where the pile came from.

draggedFromColumn	Not used by the pile but by objects using the pile.  Tells where the pile came from.

xOffset	The amount used to offset one chip from another in the x direction.

yOffset	The amount used to offset one chip from another in the y direction.

maxWidth	The maximum width a pile is allowed achieve.

maxHeight	The maximum height a pile is allowed achieve.

numChipsToDraw	The number of chips a pile wants to draw.

numChipsDrawn	The number of chips actually drawn by the pile.

showValueInsteadOfTotal	If YES, chipValue will be displayed rather than amount when rendering the pile.

chipValue	The supposed value of the chips in the pile.

Method Types

Creating new instances	- init;
	- initType:(int)cpType size:(int)cpSize value:(int)cpValue;
	- copyFromZone:(NXZone *)zone;

General aspects of the pile	- setChipType:(int)aValue;
	- (int)chipType;
	- setChipSize:(int)aValue;
	- (int)chipSize;
	- setChipValue:(int)aValue;
	- (int)chipValue;
	- setOwnerIndex:(int)aPlayerIndex;
	- (int)ownerIndex;
	- setTag:(int)aTag;
	- (int)tag;
	- getChipSize:(NXSize *)size;
	- getPileSize:(NXSize *)size;
	- setNumChips:(int)numtodraw;
	- (int)numChips;

Manipulating the pile	- addChips:(int)numChips;
	- removeChips:(int)numChips;
	- setAmount:(int)aValue;
	- (int)amount;
	- addAmount:(int)units;
	- multiplyBy:(float)units;
	- empty;
	- setOn:(BOOL)isOn;
	- (BOOL)isOn;
	- showValueInsteadOfTotal:(BOOL)flag;
	- (BOOL)showsValue;
	- flip;
	- addPile:aPile;
	- removePile:aPile;

Rendering the pile	- drawChipPileAt:(NXPoint *)aPoint;
	- drawContentsAt:(NXPoint *)aPoint;
	- drawOutlineAt:(NXPoint *)aPoint;
	- setXOffset:(float)xoffset yOffset:(float)yoffset;
	- setMaxWidth:(float)maxwidth maxHeight:(float)maxheight;

Drag And Drop	- drawDragPile:sender;
	- tempDragImage;
	- setDragRow:(int)row col:(int)col;
	- getDragRow:(int *)row col:(int *)col;

Archiving the pile	- read:(NXTypedStream *)theStream;
	- write:(NXTypedStream *)theStream;

Debugging methods	- printToStderr;

Class Methods

Instance Methods

addAmount:

- addAmount:(int)units

Adds units to the value of the pile by calling:
	[self setAmount:amount + units].
Returns self.

See also:  - setAmount

addChips:

- addChips:(int)numChips

Increases the number of chips that the pile wants to draw by numChips, and increases the pile's value by numChips * the chips in the pile's value.  Returns self.

See also:  - removeChips

addPile:

- addPile:aPile

Adds the amount of aPile and the number of chips in aPile to the pile.  Returns self.

See also:  - removePile

amount

- (int)amount

Returns the value of the pile.

See also:  - setAmount

chipSize

- (int)chipSize

Returns a constant indicating the size of the chips in the pile, either NV_CHIPSIZESMALL or NV_CHIPSIZELARGE.

See also:  - setChipSize:

chipType

- (int)chipType

Returns a constant indicating the boarder used for the chips in the pile.

See also:  - setChipType:

chipValue

- (int)chipValue

Returns the value set through the setChipValue: method.

See also:  - setChipValue:

copyFromZone:

- copyFromZone:(NXZone *)zone

Returns a copy of the pile created from zone zone.

drawChipPileAt:

- drawChipPileAt:(NXPoint *)aPoint

If the value of the pile is greater than 0, calling this method will render the pile by passing aPoint to drawOutlineAt: and drawContentsAt:.  Returns self.

See also:  - drawContentsAt:, - drawOutlineAt:

drawContentsAt:

- drawContentsAt:(NXPoint *)aPoint

Renders the contents of the pile (that is, either the value of the pile, the chip value of the pile, or the word "OFF") at aPoint.  aPoint should be the same point used in drawOutlineAt:  Returns self.

See also:  - drawOutlineAt:

drawDragPile:

- drawDragPile:sender

Draws the pile, regardles of its value.  Used when dragging a pile.  Returns self.

drawOutlineAt:

- drawOutlineAt:(NXPoint *)aPoint

Starting with the point aPoint, tries to render as many chips as are in the pile, by offseting them by the values set with the method setOffset::, until it reaches the bounds set by setMaxHeight: and setMaxWidth:.  aPoint should be the same point used in drawContentsAt:.  Returns self.

See also:  - drawContentsAt:

empty

- empty

Sets the value of the pile to 0.  Returns self.

See also:  - setAmount

flip

- flip

Turn the pile off if it is on, and on if it is off.  Returns self.

See also:  - setOn

getChipSize:

- getChipSize:(NXSize *)size

Sets size to the actual size of the chips used in the pile.  Returns self.

See also:  - setChipSize:

getDragRow:col:

- getDragRow:(int *)row col:(int *)col

You can find out where on a BetView a pile was dragged from by calling this method (assuming that the drag row and column where previously set with setDragRow:col:).  Returns self.

See also:  - setDragRow:col:

getPileSize:

- getPileSize:(NXSize *)size

Sets size to the actual size of the pile as rendered on screen.  Returns self.

init

- init

Returns  [self initType:NV_CHIPTYPE1 size:NV_CHIPSIZESMALL value:0].

See also:  - initType:size:value:

initType:size:value:

- initType:(int)cpType size:(int)cpSize value:(int)cpValue

This is the designated initializer for the class.  cpType designates the chip boarder and can be one of the following:

Constant	Chip Boarder
NV_CHIPTYPE0	White 
NV_CHIPTYPE1	White/Light gray 
NV_CHIPTYPE2	Light gray 
NV_CHIPTYPE3	Light gray/ Dark gray
NV_CHIPTYPE4	Dark gray

cpSize designates the size of the chip and can be either NV_CHIPSIZELARGE or NV_CHIPSIZESMALL.

value is the total value of the pile when it is created.

Returns self.

See also:  - init

isOn

- (BOOL)isOn

Returns YES if the pile is on, NO if not.

See also:  - setOn:

multiplyBy:

- multiplyBy:(float)units

Multiplies the value of the pile by units.  Calls:
	[self setAmount:amount*units].
Returns self.

See also:  - setAmount

numChips

- (int)numChips

Returns the number of chips that the pile wants to draw (but not the actual number of chips drawn).

See also:  - setNumChips:

ownerIndex

- (int)ownerIndex

Returns the index set through the setOwnerIndex: method.

See also:  - setOwnerIndex

printToStderr

- printToStderr

Prints to stderr the instance variables tag, amount, numChipsToDraw, chipType, chipSize, isOn, xOffset, and yOffset.  Returns self.

See also:  - printToStderr (BetView)

read:

- read:(NXTypedStream *)theStream

Unarchives the pile from theStream.   Returns self.

See also:  - write:

removeChips:

- removeChips:(int)numChips

Decreases the number of chips the pile tries to draw by numChips, and decreases the piles value by (numChips*chipValue).  Returns self.

See also:  - addChips:

removePile:

- removePile:aPile

Decreases the value of the pile by the amount of aPile, and decreases the number of chips drawn by the number of chips drawn in aPile.  Returns self.

See also:  - addPile:

setAmount:

- setAmount:(int)aValue

Sets the value of the pile to aValue, and increases the number of chips the pile tries to draw by one (if aValue is positive).  Returns self.

See also:  - amount

setChipSize:

- setChipSize:(int)aValue

Sets the size of the NXImage used to display the chips in the pile.  aValue is either NV_CHIPSIZELARGE or NV_CHIPSIZESMALL.  Currently, only NV_CHIPSIZESMALL is implemented.  Returns self.

See also:  - chipSize

setChipType:

- setChipType:(int)aValue

Defines the look of the chips used in the pile.  aValue is one of the following constants:

Constant	Chip Boarder
NV_CHIPTYPE0	White 
NV_CHIPTYPE1	White/Light gray 
NV_CHIPTYPE2	Light gray 
NV_CHIPTYPE3	Light gray/ Dark gray
NV_CHIPTYPE4	Dark gray

Returns self.

See also:  - chipType:

setChipValue:

- setChipValue:(int)aValue

Sets the value of the chips in the pile.   When you add chips with the addChips: method, the value of the pile will increase by the number of chips specified * aValue.  Returns self.

See also:  - chipValue, - addChips:

setDragRow:col:

- setDragRow:(int)row col:(int)col

When dragging a pile, you may want to set the row and column of the BetView you're dragging from, so that later you can tell where or whom it came from.  After creating the drag image with tempDragImage, call this method and send it the row and column that its being dragged from.  Later, when the pile is dropped on a BetView, you can tell where it came from by calling getDragRow:col:.  Returns self.

See also:  - getDragRow:col:

setMaxWidth:maxHeight:

- setMaxWidth:(float)maxwidth maxHeight:(float)maxheight

Sets the maximum width and height that the chips will stack in either the x or y directions.  Returns self.

setNumChips:

- setNumChips:(int)numtodraw

Sets the number of chips that the pile will try and draw to numtodraw.  Returns self.

See also:  - numChips

setOn:

- setOn:(BOOL)isOn

If isOn is YES, the pile will display its value, if NO the pile will display the word "OFF".  Returns self.

See also:  - isOn

setOwnerIndex:

- setOwnerIndex:(int)aPlayerIndex

Gives the pile an owner, but doesn't do anything functionally.  You can use it to differentiate one pile from another.  Returns self.

See also:  - ownerIndex

setTag:

- setTag:(int)aTag

Sets the tag of the pile to aTag.  Returns self.

See also:  - tag

setXOffset:yOffset:

- setXOffset:(float)xoffset yOffset:(float)yoffset

Sets the amount that each chip will be offset from each other in the pile.  Returns self.

showValueInsteadOfTotal:

- showValueInsteadOfTotal:(BOOL)flag

If flag is YES, the pile will display the value set with the setChipValue: method rather than the total value of the pile.  Returns self.

See also:  - showsValue, - setChipValue:

showsValue

- (BOOL)showsValue

Returns YES if the pile shows the chipValue rather than the total value of the pile, NO if not.

See also:  - showValueInsteadOfTotal

tag

- (int)tag

Returns the tag of the pile

See also:  - setTag

tempDragImage

- tempDragImage

Creates and returns an NXImage for the pile, setting its drawing method to drawDragPile:.

See also:  - drawDragPile:

write:

- write:(NXTypedStream *)theStream

Archives the pile to theStream.  Returns self.

See also:  - read: