# HG changeset patch # User koda # Date 1277649864 -7200 # Node ID c8406762903541075a1e3b9be827c4ee457c5ac5 # Parent 5c99b239340e6c4c0fb9832c58bccef8ba6a4834 complete configuration for schemes added my stuff to hgignore diff -r 5c99b239340e -r c84067629035 .hgignore --- a/.hgignore Sun Jun 27 05:32:11 2010 +0200 +++ b/.hgignore Sun Jun 27 16:44:24 2010 +0200 @@ -15,3 +15,10 @@ glob:CPackSourceConfig.cmake glob:tools/cmake_uninstall.cmake glob:install_manifest.txt +glob:.DS_Store +glob:*.swp +glob:*.orig +glob:*.diff +glob:project_files/HedgewarsMobile/Data/ +glob:project_files/HedgewarsMobile/build/ +glob:project_files/HedgewarsMobile/Hedgewars.xcodeproj/vittorio.* diff -r 5c99b239340e -r c84067629035 project_files/HedgewarsMobile/Classes/CommodityFunctions.m --- a/project_files/HedgewarsMobile/Classes/CommodityFunctions.m Sun Jun 27 05:32:11 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/CommodityFunctions.m Sun Jun 27 16:44:24 2010 +0200 @@ -84,7 +84,7 @@ [NSNumber numberWithBool:NO], //lowgravity [NSNumber numberWithBool:NO], //lasersight [NSNumber numberWithBool:NO], //invulnerable - [NSNumber numberWithBool:NO], //addmines + [NSNumber numberWithBool:YES], //addmines [NSNumber numberWithBool:NO], //vampirism [NSNumber numberWithBool:NO], //karma [NSNumber numberWithBool:NO], //artillery diff -r 5c99b239340e -r c84067629035 project_files/HedgewarsMobile/Classes/GameSetup.m --- a/project_files/HedgewarsMobile/Classes/GameSetup.m Sun Jun 27 05:32:11 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/GameSetup.m Sun Jun 27 16:44:24 2010 +0200 @@ -306,7 +306,7 @@ break; case '?': // without this sleep sometimes frontend replies before engine has processed any flag (resulting in an error) - [NSThread sleepForTimeInterval:0.6]; + [NSThread sleepForTimeInterval:0.7]; DLog(@"Ping? Pong!"); [self sendToEngine:@"!"]; break; diff -r 5c99b239340e -r c84067629035 project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m --- a/project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m Sun Jun 27 05:32:11 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m Sun Jun 27 16:44:24 2010 +0200 @@ -11,6 +11,9 @@ #import "CommodityFunctions.h" #import "UIImageExtra.h" +#define LABEL_TAG 12345 +#define SLIDER_TAG 54321 + @implementation SingleSchemeViewController @synthesize textFieldBeingEdited, schemeArray, basicSettingList, gameModifierArray; @@ -80,15 +83,24 @@ [mods release]; NSArray *basicSettings = [[NSArray alloc] initWithObjects: - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Damage Modifier",@""),@"title",@"Damage",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Turn Time",@""),@"title",@"Time",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Initial Health",@""),@"title",@"Health",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Sudden Death Timeout",@""),@"title",@"SuddenDeath",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Crate Drops",@""),@"title",@"Box",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Mines Time",@""),@"title",@"Time",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Mines Number",@""),@"title",@"Mine",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Dud Mines Probability",@""),@"title",@"Dud",@"image",nil], - [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Explosives",@""),@"title",@"Damage",@"image",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Damage Modifier",@""),@"title",@"Damage",@"image", + [NSNumber numberWithInt:100],@"default",[NSNumber numberWithInt:10],@"min",[NSNumber numberWithInt:300],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Turn Time",@""),@"title",@"Time",@"image", + [NSNumber numberWithInt:45],@"default",[NSNumber numberWithInt:1],@"min",[NSNumber numberWithInt:99],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Initial Health",@""),@"title",@"Health",@"image", + [NSNumber numberWithInt:100],@"default",[NSNumber numberWithInt:50],@"min",[NSNumber numberWithInt:200],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Sudden Death Timeout",@""),@"title",@"SuddenDeath",@"image", + [NSNumber numberWithInt:15],@"default",[NSNumber numberWithInt:0],@"min",[NSNumber numberWithInt:50],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Crate Drops",@""),@"title",@"Box",@"image", + [NSNumber numberWithInt:5],@"default",[NSNumber numberWithInt:0],@"min",[NSNumber numberWithInt:9],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Mines Time",@""),@"title",@"Time",@"image", + [NSNumber numberWithInt:3],@"default",[NSNumber numberWithInt:0],@"min",[NSNumber numberWithInt:3],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Mines Number",@""),@"title",@"Mine",@"image", + [NSNumber numberWithInt:4],@"default",[NSNumber numberWithInt:1],@"min",[NSNumber numberWithInt:80],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Dud Mines Probability",@""),@"title",@"Dud",@"image", + [NSNumber numberWithInt:0],@"default",[NSNumber numberWithInt:0],@"min",[NSNumber numberWithInt:100],@"max",nil], + [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Explosives",@""),@"title",@"Damage",@"image", + [NSNumber numberWithInt:2],@"default",[NSNumber numberWithInt:0],@"min",[NSNumber numberWithInt:40],@"max",nil], nil]; self.basicSettingList = basicSettings; [basicSettings release]; @@ -193,7 +205,7 @@ return 0; } --(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { +-(UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier0 = @"Cell0"; static NSString *CellIdentifier1 = @"Cell1"; static NSString *CellIdentifier2 = @"Cell2"; @@ -203,7 +215,7 @@ switch ([indexPath section]) { case 0: - cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier0]; + cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier0]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier0] autorelease]; @@ -233,20 +245,44 @@ cell.imageView.image = nil; break; case 1: - cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1]; + cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier1]; + NSDictionary *detail = [self.basicSettingList objectAtIndex:row]; + // need to offset this section (see format in CommodityFunctions.m and above) + NSInteger gmSize = [self.gameModifierArray count]; if (cell == nil) { - cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault + cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier1] autorelease]; + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(260, 12, 150, 23)]; + slider.maximumValue = [[detail objectForKey:@"max"] floatValue]; + slider.minimumValue = [[detail objectForKey:@"min"] floatValue]; + slider.tag = row+gmSize; + [slider addTarget:self action:@selector(sliderChanged:) forControlEvents:UIControlEventValueChanged]; + [cell.contentView addSubview:slider]; + [slider release]; + + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 7, 200, 30)]; + label.tag = LABEL_TAG; + label.backgroundColor = [UIColor clearColor]; + label.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]]; + [cell.contentView addSubview:label]; + [label release]; } UIImage *img = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/icon%@.png",BTN_DIRECTORY(),[[self.basicSettingList objectAtIndex:row] objectForKey:@"image"]]]; cell.imageView.image = [img scaleToSize:CGSizeMake(40, 40)]; [img release]; - cell.textLabel.text = [[self.basicSettingList objectAtIndex:row] objectForKey:@"title"]; - cell.detailTextLabel.text = nil; + + UILabel *cellLabel = (UILabel *)[cell.contentView viewWithTag:LABEL_TAG]; + cellLabel.text = [[self.basicSettingList objectAtIndex:row] objectForKey:@"title"]; + + UISlider *cellSlider = (UISlider *)[cell.contentView viewWithTag:row+gmSize]; + cellSlider.value = [[self.schemeArray objectAtIndex:row+gmSize] floatValue]; + + // forced to use this weird format otherwise the label disappears when size of the text is bigger than the original + cell.detailTextLabel.text = [NSString stringWithFormat:@"%0.3d",[[self.schemeArray objectAtIndex:row+gmSize] intValue]]; break; case 2: - cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier2]; + cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier2]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier2] autorelease]; @@ -261,6 +297,7 @@ cell.imageView.image = image; [image release]; [cell.imageView.layer setCornerRadius:7.0f]; + [cell.imageView.layer setBorderWidth:1]; [cell.imageView.layer setMasksToBounds:YES]; cell.textLabel.text = [[self.gameModifierArray objectAtIndex:row] objectForKey:@"title"]; cell.detailTextLabel.text = [[self.gameModifierArray objectAtIndex:row] objectForKey:@"description"]; @@ -275,20 +312,55 @@ [self.schemeArray replaceObjectAtIndex:theSwitch.tag withObject:[NSNumber numberWithBool:theSwitch.on]]; } +-(void) sliderChanged:(id) sender { + // need to offset this section (see format in CommodityFunctions.m and above) + NSInteger gmSize = [self.gameModifierArray count]; + // the slider that changed is sent as object + UISlider *theSlider = (UISlider *)sender; + // create the indexPath of the row of the slider + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:theSlider.tag-gmSize inSection:1]; + // get its cell + UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; + // grab the associated label + UILabel *label = (UILabel *)cell.detailTextLabel; + // modify it + label.text = [NSString stringWithFormat:@"%0.3d",(int)theSlider.value]; + // save changes in the main array (remember that you need to offset it) + [self.schemeArray replaceObjectAtIndex:theSlider.tag withObject:[NSNumber numberWithInt:(int)theSlider.value]]; + NSLog(@"%@",self.schemeArray); +} #pragma mark - #pragma mark Table view delegate -(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [aTableView cellForRowAtIndexPath:indexPath]; + UISwitch *sw = nil; + UISlider *cellSlider = nil; - if ([indexPath section] == 0) { - UITableViewCell *cell = [aTableView cellForRowAtIndexPath:indexPath]; - for (UIView *oneView in cell.contentView.subviews) { - if ([oneView isMemberOfClass:[UITextField class]]) { - textFieldBeingEdited = (UITextField *)oneView; - [textFieldBeingEdited becomeFirstResponder]; + switch ([indexPath section]) { + case 0: + for (UIView *oneView in cell.contentView.subviews) { + if ([oneView isMemberOfClass:[UITextField class]]) { + textFieldBeingEdited = (UITextField *)oneView; + [textFieldBeingEdited becomeFirstResponder]; + } } - } + break; + case 1: + cellSlider = (UISlider *)[cell.contentView viewWithTag:[indexPath row]+[self.gameModifierArray count]]; + [cellSlider setValue:[[[self.basicSettingList objectAtIndex:[indexPath row]] objectForKey:@"default"] floatValue] animated:YES]; + [self sliderChanged:cellSlider]; + //cell.detailTextLabel.text = [[[self.basicSettingList objectAtIndex:[indexPath row]] objectForKey:@"default"] stringValue]; + break; + case 2: + sw = (UISwitch *)cell.accessoryView; + [sw setOn:!sw.on animated:YES]; + [self toggleSwitch:sw]; + break; + default: + break; } + [aTableView deselectRowAtIndexPath:indexPath animated:YES]; } diff -r 5c99b239340e -r c84067629035 project_files/HedgewarsMobile/Classes/UIImageExtra.m --- a/project_files/HedgewarsMobile/Classes/UIImageExtra.m Sun Jun 27 05:32:11 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/UIImageExtra.m Sun Jun 27 16:44:24 2010 +0200 @@ -12,21 +12,22 @@ @implementation UIImage (extra) -(UIImage *)scaleToSize:(CGSize) size { - // Create a bitmap graphics context - // This will also set it as the current context - UIGraphicsBeginImageContext(size); - - // Draw the scaled image in the current context - [self drawInRect:CGRectMake(0, 0, size.width, size.height)]; - - // Create a new image from current context - UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); - - // Pop the current context from the stack - UIGraphicsEndImageContext(); - - // Return our new scaled image (autoreleased) - return scaledImage; + DLog(@"warning - this is a very expensive operation, you should avoid using it"); + + // Create a bitmap graphics context; this will also set it as the current context + UIGraphicsBeginImageContext(size); + + // Draw the scaled image in the current context + [self drawInRect:CGRectMake(0, 0, size.width, size.height)]; + + // Create a new image from current context + UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); + + // Pop the current context from the stack + UIGraphicsEndImageContext(); + + // Return our new scaled image (autoreleased) + return scaledImage; } -(UIImage *)mergeWith:(UIImage *)secondImage atPoint:(CGPoint) secondImagePoint { @@ -35,12 +36,13 @@ } -(UIImage *)mergeWith:(UIImage *)secondImage atPoint:(CGPoint) secondImagePoint atSize:(CGSize) resultingSize { + // Create a bitmap graphics context; this will also set it as the current context UIGraphicsBeginImageContext(resultingSize); - // drav the background image + // draw the background image in the current context [self drawAtPoint:CGPointMake(0,0)]; - // draw the image on top of the first image + // draw the image on top of the first image (because the context is the same) [secondImage drawAtPoint:secondImagePoint]; // create an image from the current contex (not thread safe) @@ -79,38 +81,40 @@ } -(UIImage *)convertToGrayScale { - // Create image rectangle with current image width/height - CGRect imageRect = CGRectMake(0, 0, self.size.width, self.size.height); - - // Grayscale color space - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); - - // Create bitmap content with current image size and grayscale colorspace - CGContextRef context = CGBitmapContextCreate(nil, self.size.width, self.size.height, 8, 0, colorSpace, kCGImageAlphaNone); - - // Draw image into current context, with specified rectangle - // using previously defined context (with grayscale colorspace) - CGContextDrawImage(context, imageRect, [self CGImage]); - - // Create bitmap image info from pixel data in current context - CGImageRef imageRef = CGBitmapContextCreateImage(context); - - // Create a new UIImage object - UIImage *newImage = [UIImage imageWithCGImage:imageRef]; - - // Release colorspace, context and bitmap information - CGColorSpaceRelease(colorSpace); - CGContextRelease(context); - CFRelease(imageRef); - - // Return the new grayscale image - return newImage; + // Create image rectangle with current image width/height + CGRect imageRect = CGRectMake(0, 0, self.size.width, self.size.height); + + // Grayscale color space + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); + + // Create bitmap content with current image size and grayscale colorspace + CGContextRef context = CGBitmapContextCreate(nil, self.size.width, self.size.height, 8, 0, colorSpace, kCGImageAlphaNone); + + // Draw image into current context, with specified rectangle + // using previously defined context (with grayscale colorspace) + CGContextDrawImage(context, imageRect, [self CGImage]); + + // Create bitmap image info from pixel data in current context + CGImageRef imageRef = CGBitmapContextCreateImage(context); + + // Create a new UIImage object + UIImage *newImage = [UIImage imageWithCGImage:imageRef]; + + // Release colorspace, context and bitmap information + CGColorSpaceRelease(colorSpace); + CGContextRelease(context); + CFRelease(imageRef); + + // Return the new grayscale image + return newImage; } // by http://iphonedevelopertips.com/cocoa/how-to-mask-an-image.html turned into a category by koda -(UIImage*) maskImageWith:(UIImage *)maskImage { - CGImageRef maskRef = maskImage.CGImage; + // prepare the reference image + CGImageRef maskRef = [maskImage CGImage]; + // create the mask using parameters of the mask reference CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), CGImageGetHeight(maskRef), CGImageGetBitsPerComponent(maskRef), @@ -118,21 +122,19 @@ CGImageGetBytesPerRow(maskRef), CGImageGetDataProvider(maskRef), NULL, false); + // create an image in the current context CGImageRef masked = CGImageCreateWithMask([self CGImage], mask); - CGImageRelease(mask); UIImage* retImage = [UIImage imageWithCGImage:masked]; - CGImageRelease(masked); return retImage; } // by http://blog.sallarp.com/iphone-uiimage-round-corners/ turned into a category by koda -void addRoundedRectToPath(CGContextRef context, CGRect rect, float ovalWidth, float ovalHeight) -{ - float fw, fh; +void addRoundedRectToPath(CGContextRef context, CGRect rect, CGFloat ovalWidth, CGFloat ovalHeight) { + CGFloat fw, fh; if (ovalWidth == 0 || ovalHeight == 0) { CGContextAddRect(context, rect); return; @@ -151,13 +153,11 @@ CGContextRestoreGState(context); } --(UIImage *)makeRoundCornersOfSize:(CGSize) sizewh { - UIImage * newImage = nil; - - NSInteger cornerWidth = sizewh.width; - NSInteger cornerHeight = sizewh.height; - int w = self.size.width; - int h = self.size.height; +-(UIImage *)makeRoundCornersOfSize:(CGSize) sizewh { + CGFloat cornerWidth = sizewh.width; + CGFloat cornerHeight = sizewh.height; + CGFloat w = self.size.width; + CGFloat h = self.size.height; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst); @@ -168,17 +168,16 @@ CGContextClosePath(context); CGContextClip(context); - CGContextDrawImage(context, CGRectMake(0, 0, w, h), self.CGImage); + CGContextDrawImage(context, CGRectMake(0, 0, w, h), [self CGImage]); CGImageRef imageMasked = CGBitmapContextCreateImage(context); CGContextRelease(context); CGColorSpaceRelease(colorSpace); - newImage = [UIImage imageWithCGImage:imageMasked]; + UIImage *newImage = [UIImage imageWithCGImage:imageMasked]; CGImageRelease(imageMasked); return newImage; } - @end