[plain text]
//#import <AppKit/AppKit.h>
#import <AppKit/NSView.h>
#import <AppKit/NSImage.h>
#import <Foundation/NSGeometry.h> // NSMakeSize
// own interface
#import "Square3D.h"
// game board
#import "Board3D.h"
// portability layer
#import "gnuglue.h" // floor_value
// piece size
#define PIECE_WIDTH_3D (float)54.0 // 55.0?
#define PIECE_HEIGHT_3D (float)95.0
// Square3D implementations
@implementation Square3D
/*
This class represents one square on a chess board. It has a color
and may contain a piece.
*/
- (void) setBackground: (float)b
{
background = b;
return;
}
- (float) background
{
return background;
}
- (void) setRow: (int)r
{
row = r;
return;
}
- (int) row
{
return row;
}
- (int) colorVal
{
return color;
}
- (void) setPieceType: (int)t color: (int) c
{
pieceType = t;
color = c;
return;
}
- (int) pieceType
{
return pieceType;
}
- (void) setLocation: (NSRect)r
{
location = r;
return;
}
- (NSRect) location
{
return location;
}
- (void) setMoving: (BOOL)flag
{
moving = flag;
return;
}
- (BOOL) isMoving
{
return moving;
}
- (void) drawWithFrame: (NSRect)f inView: (NSView *)v
{
[self drawInteriorWithFrame:f inView:v];
return;
}
- (void) drawBackground: (NSRect)f inView: (NSView *)v
{
return;
}
- (void) highlight: (const NSRect *)f inView: (NSView *)v
{
return;
}
/*
Pieces in the big bitmap each are 54 wide 95 high and seperated
by a 1 pixel wide line, with no line at the bottom. They are ordered
king, queen, bishop, rook, knight, pawn -- white then black.
*/
- (void) drawInteriorWithFrame: (NSRect)r inView: (NSView *)v
/*
Draw the chess piece.
*/
{
int col;
float shrinkFactor;
NSRect f;
NSPoint p;
id bitmap;
/* Composite the piece icon in the center of the rect. */
switch( pieceType ){
case PAWN: col = 5; break;
case ROOK: col = 3; break;
case KNIGHT: col = 4; break;
case BISHOP: col = 2; break;
case QUEEN: col = 1; break;
case KING: col = 0; break;
default: return;
}
shrinkFactor = (0.65 + ((8 - row) * 0.03125));
f.origin.x = (col + (color == BLACK ? 6 : 0) )* 56 + 1;
f.origin.y = row * 96;
f.size = NSMakeSize( PIECE_WIDTH_3D, PIECE_HEIGHT_3D );
p.x = location.origin.x
+ (location.size.width - (PIECE_WIDTH_3D * shrinkFactor)) / 2
+ (5 * shrinkFactor);
p.y = location.origin.y + (8 * shrinkFactor);
p.x = (float) floor_value( (double)p.x );
p.y = (float) floor_value( (double)p.y );
bitmap = [(Board3D *)v piecesBitmap]; // ??
[v lockFocus];
[bitmap compositeToPoint: p fromRect: f operation: NSCompositeSourceOver];
[v unlockFocus];
return;
}
@end
Generated by GNU enscript 1.6.4.