#import "elephant.h" #import "peanutsmodel.h" #import "hole.h" @implementation Elephant -(id) initAtX:(double)initX y:(double)initY { [super initWithX:initX y:initY vx:0.0 vy:0.0 radius:ELEPHANT_DEFAULT_SIZE color:[UIColor grayColor]]; peanutsEaten = 0; return self; } -(double) getMaximumSpeed { return 0.2; } -(void) updateForTime:(double)t model:(GameModel*)m { PeanutsModel* pm = (PeanutsModel*)m; if ([self getState] != STATE_FULL) { // get direction to peanut double peanutX = [[pm getPeanut] getX]; double peanutY = [[pm getPeanut] getY]; double dx = peanutX - [self getX]; double dy = peanutY - [self getY]; // change to one of 8 compass directions if (fabs(dx) < [self getBoundingRadius] / 4) { dx = 0; } else { dx = (dx == 0 ? 0 : dx / fabs(dx)); // signum(dx) } if (fabs(dy) < [self getBoundingRadius] / 4) { dy = 0; } else { dy = (dy == 0 ? 0 : dy / fabs(dy)); // signum(dy) } [self setVelocityX:dx * [self getMaximumSpeed] y:dy * [self getMaximumSpeed]]; if (peanutsEaten > MAX_PEANUTS && [self getStateTime] > LAST_PEANUT_TIME) { [self setState:STATE_FULL]; } } else { [self setVelocityX:0.0 y:0.0]; if ([self getStateTime] > RECOVERY_TIME) { [self setState:STATE_NORMAL]; [m addSprite:[[[Hole alloc] initAtX:[self getX] y:[self getY]] autorelease]]; peanutsEaten = 0; } } [super updateForTime:t model:m]; } -(void) eatPeanut { peanutsEaten++; [self setState:STATE_NORMAL]; } -(void) dealloc { [super dealloc]; } @end