//
//  GameLayer.m
//  Cart Collect
//
//  Created by iD Student Account on 7/18/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import "ClassicGameMode.h"
#import "FallingObject.h"
#import "Cherry.h"
#import "Bottle.h"
#import "OneUp.h"
#import "Rock.h"
#import "GameOverScene.h"
#import "SimpleAudioEngine.h"

@implementation ClassicGameMode

- (void)tick:(ccTime)dt
{
	int lastScore = score;
	
	[super tick:dt];
	
	if (lives == 0)
	{
        [self unscheduleAllSelectors];

        [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverScene sceneWithScore:score]]];
	} else if (score > lastScore)
	{
		if ((lastScore < 6500) && (score >= 6500))
		{
			[self unschedule:@selector(randomlyAddObject:)];
			[self schedule:@selector(randomlyAddObject:) interval:0.6f];
			addSpeed = 0.6f;
		} else if ((lastScore < 4500) && (score >= 4500))
		{
			[self unschedule:@selector(randomlyAddObject:)];
			[self schedule:@selector(randomlyAddObject:) interval:0.7f];
			addSpeed = 0.7f;
		} else if ((lastScore < 2500) && (score >= 2500))
		{
			[self unschedule:@selector(randomlyAddObject:)];
			[self schedule:@selector(randomlyAddObject:) interval:0.8f];
			addSpeed = 0.8f;
		} else if ((lastScore < 1500) && (score >= 1500))
		{
			[self unschedule:@selector(randomlyAddObject:)];
			[self schedule:@selector(randomlyAddObject:) interval:0.9f];
			addSpeed = 0.9f;
		} else if ((lastScore < 500) && (score >= 500))
		{
			[self unschedule:@selector(randomlyAddObject:)];
			[self schedule:@selector(randomlyAddObject:) interval:1.0f];
			addSpeed = 1.0f;
		} else if ((lastScore < 150) && (score >= 150))
		{
			[self unschedule:@selector(randomlyAddObject:)];
			[self schedule:@selector(randomlyAddObject:) interval:2.0f];
			addSpeed = 2.0f;
		}
	}
}

- (void)randomlyAddObject:(ccTime)dt
{
	FallingObject* object;
    int oneuppercent = 98 - (lives == 1 ? 1 : 0);

	if (score < 1000)
	{
		int randomval = arc4random()%100;
		
		if (randomval < 65)
		{
			object = [[Cherry alloc] init];
		} else if (randomval < oneuppercent)
		{
			object = [[Bottle alloc] init];
		} else {
			object = [[OneUp alloc] init];
		}
	} else {
		int randomval = arc4random()%100;
		
		if (randomval < 40)
		{
			object = [[Cherry alloc] init];
		} else if (randomval < 70)
		{
			object = [[Rock alloc] init];
		} else if (randomval < oneuppercent)
		{
			object = [[Bottle alloc] init];
		} else {
			object = [[OneUp alloc] init];
		}
	}
	
	int objectX = arc4random()%448+16;
	object.sprite.position = ccp(objectX, 360);
	object.sprite.scale = 1;
	[self addChild:object.sprite];
	
	[objects addObject:object];
    [object release];
	
	if (score >= 2000)
	{
		if (arc4random() % 100 > 80)
		{
			object = [[Rock alloc] init];
			
			objectX = arc4random()%448+16;
			object.sprite.position = ccp(objectX, 360);
			object.sprite.scale = 1;
			[self addChild:object.sprite];
			
			[objects addObject:object];
            [object release];
		}
	}
	
	if (score >= 4000)
	{
		if (arc4random() % 100 > 80)
		{
			object = [[Rock alloc] init];
			
			objectX = arc4random()%448+16;
			object.sprite.position = ccp(objectX, 360);
			object.sprite.scale = 1;
			[self addChild:object.sprite];
			
			[objects addObject:object];
            [object release];
		}
	}
}

- (id)init
{
	self = [super init];
	
	if (nil != self)
	{
		CCSprite* backgroundImage = [CCSprite spriteWithFile:@"SeaBeach.png"];
		backgroundImage.position = ccp(240, 160);
		[self addChild:backgroundImage z:-1];
		
		addSpeed = 2.5f;
	}
	
	return self;
}

- (void)onEnterTransitionDidFinish
{
	[super onEnterTransitionDidFinish];
	
    [self schedule:@selector(randomlyAddObject:) interval:addSpeed];
}

@end