some general tweaks (more intelligent use of macros and more caching)
authorkoda
Thu, 12 May 2011 23:00:26 +0200
changeset 5207 4c9ae0f484da
parent 5206 db775bddf771
child 5208 878e551f0b4a
some general tweaks (more intelligent use of macros and more caching)
project_files/HedgewarsMobile/Classes/CommodityFunctions.h
project_files/HedgewarsMobile/Classes/CommodityFunctions.m
project_files/HedgewarsMobile/Classes/CreationChamber.m
project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m
project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.h
project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m
project_files/HedgewarsMobile/Classes/MapConfigViewController.m
project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m
project_files/HedgewarsMobile/Classes/OverlayViewController.m
--- a/project_files/HedgewarsMobile/Classes/CommodityFunctions.h	Wed May 11 01:26:38 2011 +0200
+++ b/project_files/HedgewarsMobile/Classes/CommodityFunctions.h	Thu May 12 23:00:26 2011 +0200
@@ -54,23 +54,24 @@
 #define UICOLOR_HW_YELLOW_TEXT  [UIColor colorWithRed:(CGFloat)0xF0/255 green:(CGFloat)0xD0/255 blue:0 alpha:1]
 #define UICOLOR_HW_DARKBLUE     [UIColor colorWithRed:(CGFloat)0x0F/255 green:0 blue:(CGFloat)0x42/255 alpha:1]
 #define UICOLOR_HW_ALPHABLUE    [UIColor colorWithRed:(CGFloat)0x0F/255 green:0 blue:(CGFloat)0x42/255 alpha:0.58f]
-#define UICOLOR_HW_ALMOSTBLACK  (IS_NOT_POWERFUL()) ? [UIColor blackColor] : [UIColor colorWithRed:0 green:0 blue:0 alpha:0.6]
+#define UICOLOR_HW_ALMOSTBLACK  (IS_NOT_POWERFUL(getModelType())) ? [UIColor blackColor] : [UIColor colorWithRed:0 green:0 blue:0 alpha:0.6]
 
 #define IS_DUALHEAD()           ([[UIScreen class] respondsToSelector:@selector(screens)] && [[UIScreen screens] count] > 1)
 #define IS_IPAD()               (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
-#define IS_NOT_POWERFUL()       ([modelType() hasPrefix:@"iPhone1"] || [modelType() hasPrefix:@"iPod1,1"] || [modelType() hasPrefix:@"iPod2,1"])
-#define IS_NOT_VERY_POWERFUL()  ([modelType() hasPrefix:@"iPad1"] || [modelType() hasPrefix:@"iPhone2"] || [modelType() hasPrefix:@"iPod3"] || [modelType() hasPrefix:@"iPod4"] )
-#define IS_VERY_POWERFUL()      (IS_NOT_POWERFUL() == NO && IS_NOT_VERY_POWERFUL() == NO)
+#define IS_NOT_POWERFUL(x)      ([x hasPrefix:@"iPhone1"] || [x hasPrefix:@"iPod1,1"] || [x hasPrefix:@"iPod2,1"])
+#define IS_NOT_VERY_POWERFUL(x) ([x hasPrefix:@"iPad1"] || [x hasPrefix:@"iPhone2"] || [x hasPrefix:@"iPod3"] || [x hasPrefix:@"iPod4"])
+#define IS_VERY_POWERFUL(x)     (IS_NOT_POWERFUL(x) == NO && IS_NOT_VERY_POWERFUL(x) == NO)
 
+#define rotationManager(x)      (x == UIInterfaceOrientationLandscapeRight) || (x == UIInterfaceOrientationLandscapeLeft)
 
 void print_free_memory (void);
 void playSound (NSString *snd);
-void popError (const char *title, const char *message);
-BOOL rotationManager (UIInterfaceOrientation interfaceOrientation);
 BOOL isApplePhone (void);
 NSInteger randomPort (void);
-NSString *modelType (void);
+
+NSString *getModelType (void);
 NSArray *getAvailableColors (void);
+
 UILabel *createBlueLabel (NSString *title, CGRect frame);
 UILabel *createLabelWithParams (NSString *title, CGRect frame, CGFloat borderWidth, UIColor *borderColor, UIColor *backgroundColor);
 
--- a/project_files/HedgewarsMobile/Classes/CommodityFunctions.m	Wed May 11 01:26:38 2011 +0200
+++ b/project_files/HedgewarsMobile/Classes/CommodityFunctions.m	Thu May 12 23:00:26 2011 +0200
@@ -30,10 +30,6 @@
 #import "PascalImports.h"
 #import "hwconsts.h"
 
-BOOL inline rotationManager (UIInterfaceOrientation interfaceOrientation) {
-    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) ||
-           (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
-}
 
 NSInteger inline randomPort () {
     srandom(time(NULL));
@@ -41,16 +37,6 @@
     return (res == NETGAME_DEFAULT_PORT) ? randomPort() : res;
 }
 
-void popError (const char *title, const char *message) {
-    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithUTF8String:title]
-                                                    message:[NSString stringWithUTF8String:message]
-                                                   delegate:nil
-                                          cancelButtonTitle:@"Ok"
-                                          otherButtonTitles:nil];
-    [alert show];
-    [alert release];
-}
-
 // by http://landonf.bikemonkey.org/code/iphone/Determining_Available_Memory.20081203.html
 void print_free_memory () {
     mach_port_t host_port;
@@ -77,7 +63,7 @@
     return (IS_IPAD() == NO);
 }
 
-NSString *modelType () {
+NSString *getModelType () {
     size_t size;
     // set 'oldp' parameter to NULL to get the size of the data returned so we can allocate appropriate amount of space
     sysctlbyname("hw.machine", NULL, &size, NULL, 0);
@@ -91,10 +77,7 @@
 }
 
 void playSound (NSString *snd) {
-    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
-    NSNumber *audio = [prefs objectForKey:@"sound"];
-
-    if (audio == nil || [audio boolValue] == YES) {
+    if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"sound"] boolValue] == YES) {
         // get the filename of the sound file:
         NSString *path = [NSString stringWithFormat:@"%@/%@.wav",[[NSBundle mainBundle] resourcePath],snd];
 
@@ -109,6 +92,7 @@
 }
 
 NSArray *getAvailableColors (void) {
+    // by default colors are ARGB but we do computation over RGB, hence we have to "& 0x00FFFFFF" before processing
     unsigned int colors[] = HW_TEAMCOLOR_ARRAY;
     NSMutableArray *array = [[NSMutableArray alloc] init];
 
--- a/project_files/HedgewarsMobile/Classes/CreationChamber.m	Wed May 11 01:26:38 2011 +0200
+++ b/project_files/HedgewarsMobile/Classes/CreationChamber.m	Thu May 12 23:00:26 2011 +0200
@@ -30,8 +30,12 @@
     [settings setObject:[NSNumber numberWithBool:NO] forKey:@"classic_menu"];
     [settings setObject:[NSNumber numberWithBool:YES] forKey:@"enhanced"];
     [settings setObject:[NSNumber numberWithBool:YES] forKey:@"multitasking"];
-    [settings setObject:@"" forKey:@"username"];
-    [settings setObject:@"" forKey:@"password"];
+
+    // don't overwrite these two strings when present
+    if ([settings objectForKey:@"username"] == nil)
+        [settings setObject:@"" forKey:@"username"];
+    if ([settings objectForKey:@"password"] == nil)
+        [settings setObject:@"" forKey:@"password"];
 
     [settings synchronize];
 }
--- a/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m	Wed May 11 01:26:38 2011 +0200
+++ b/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m	Thu May 12 23:00:26 2011 +0200
@@ -86,7 +86,7 @@
     NSString *rotation = [[NSString alloc] initWithFormat:@"%d", orientation];
     BOOL enhanced = [[settings objectForKey:@"enhanced"] boolValue];
 
-    NSString *modelId = modelType();
+    NSString *modelId = getModelType();
     NSInteger tmpQuality;
     if ([modelId hasPrefix:@"iPhone1"] || [modelId hasPrefix:@"iPod1,1"] || [modelId hasPrefix:@"iPod2,1"])     // = iPhone and iPhone 3G or iPod Touch or iPod Touch 2G
         tmpQuality = 0x00000001 | 0x00000002 | 0x00000008 | 0x00000040;                 // rqLowRes | rqBlurryLand | rqSimpleRope | rqKillFlakes
--- a/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.h	Wed May 11 01:26:38 2011 +0200
+++ b/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.h	Thu May 12 23:00:26 2011 +0200
@@ -23,9 +23,7 @@
 #import "EditableCellView.h"
 
 @interface GeneralSettingsViewController : UITableViewController <EditableCellViewDelegate> {
-    NSUserDefaults *settings;
+
 }
 
-@property (nonatomic, retain) NSUserDefaults *settings;
-
 @end
--- a/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m	Wed May 11 01:26:38 2011 +0200
+++ b/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m	Thu May 12 23:00:26 2011 +0200
@@ -23,7 +23,6 @@
 #import "CommodityFunctions.h"
 
 @implementation GeneralSettingsViewController
-@synthesize settings;
 
 
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
@@ -38,50 +37,48 @@
 
 -(void) viewWillAppear:(BOOL)animated {
     [self.tableView setContentOffset:CGPointMake(0,0) animated:NO];
-
-    self.settings = [NSUserDefaults standardUserDefaults];
-
     [super viewWillAppear:animated];
 }
 
 -(void) viewWillDisappear:(BOOL)animated {
+    [[NSUserDefaults standardUserDefaults] synchronize];
     [super viewWillDisappear:animated];
-    [self.settings synchronize];
 }
 
 #pragma mark -
 -(void) switchValueChanged:(id) sender {
     UISwitch *theSwitch = (UISwitch *)sender;
     UISwitch *theOtherSwitch = nil;
+    NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
 
     switch (theSwitch.tag) {
         case 10:    //soundSwitch
             // this turn off also the switch below
-            [self.settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"sound"];
-            [self.settings setObject:[NSNumber numberWithBool:NO] forKey:@"music"];
+            [settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"sound"];
+            [settings setObject:[NSNumber numberWithBool:NO] forKey:@"music"];
             theOtherSwitch = (UISwitch *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:1]].accessoryView;
             [theOtherSwitch setOn:NO animated:YES];
             break;
         case 20:    //musicSwitch
             // if switch above is off, never turn on
-            if (NO == [[self.settings objectForKey:@"sound"] boolValue]) {
-                [self.settings setObject:[NSNumber numberWithBool:NO] forKey:@"music"];
+            if (NO == [[settings objectForKey:@"sound"] boolValue]) {
+                [settings setObject:[NSNumber numberWithBool:NO] forKey:@"music"];
                 theOtherSwitch = (UISwitch *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:1]].accessoryView;
                 [theOtherSwitch setOn:NO animated:YES];
             } else
-                [self.settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"music"];
+                [settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"music"];
             break;
         case 30:    //alternateSwitch
-            [self.settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"alternate"];
+            [settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"alternate"];
             break;
         case 70:    //enhanced graphics
-            [self.settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"enhanced"];
+            [settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"enhanced"];
             break;
         case 80:    //nomultitasking
-            [self.settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"multitasking"];
+            [settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"multitasking"];
             break;
         case 60:    //classic menu
-            [self.settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"classic_menu"];
+            [settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"classic_menu"];
             break;
         default:
             DLog(@"Wrong tag");
@@ -90,10 +87,12 @@
 }
 
 -(void) saveTextFieldValue:(NSString *)textString withTag:(NSInteger) tagValue {
+    NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
+
     if (tagValue == 40)
-        [self.settings setObject:textString forKey:@"username"];
+        [settings setObject:textString forKey:@"username"];
     else
-        [self.settings setObject:[textString MD5hash] forKey:@"password"];
+        [settings setObject:[textString MD5hash] forKey:@"password"];
 }
 
 #pragma mark -
@@ -148,6 +147,7 @@
     static NSString *cellIdentifier2 = @"Cell2";
     NSInteger row = [indexPath row];
     NSInteger section = [indexPath section];
+    NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
 
     UITableViewCell *cell = nil;
     EditableCellView *editableCell = nil;
@@ -166,14 +166,13 @@
             if (row == 0) {
                 editableCell.titleLabel.text = NSLocalizedString(@"Nickname","from the settings table");
                 editableCell.textField.placeholder = NSLocalizedString(@"Insert your username (if you have one)",@"");
-                editableCell.textField.text = [self.settings objectForKey:@"username"];
+                editableCell.textField.text = [settings objectForKey:@"username"];
                 editableCell.textField.secureTextEntry = NO;
                 editableCell.tag = 40;
             } else {
-                NSString *pwd = [self.settings objectForKey:@"password"];
                 editableCell.titleLabel.text = NSLocalizedString(@"Password","from the settings table");
                 editableCell.textField.placeholder = NSLocalizedString(@"Insert your password",@"");
-                editableCell.textField.text = ([pwd length] == 0) ? @"0123456789" : pwd;
+                editableCell.textField.text = [settings objectForKey:@"password"];
                 editableCell.textField.secureTextEntry = YES;
                 editableCell.tag = 50;
             }
@@ -194,11 +193,11 @@
             switchContent = (UISwitch *)cell.accessoryView;
             if (row == 0) {
                 cell.textLabel.text = NSLocalizedString(@"Sound", @"");
-                switchContent.on = [[self.settings objectForKey:@"sound"] boolValue];
+                switchContent.on = [[settings objectForKey:@"sound"] boolValue];
                 switchContent.tag = 10;
             } else {
                 cell.textLabel.text = NSLocalizedString(@"Music", @"");
-                switchContent.on = [[self.settings objectForKey:@"music"] boolValue];
+                switchContent.on = [[settings objectForKey:@"music"] boolValue];
                 switchContent.tag = 20;
             }
             break;
@@ -217,25 +216,25 @@
                 case 0:
                     cell.textLabel.text = NSLocalizedString(@"Alternate Damage", @"");
                     cell.detailTextLabel.text = NSLocalizedString(@"Damage popups will notify you on every single hit", @"");
-                    switchContent.on = [[self.settings objectForKey:@"alternate"] boolValue];
+                    switchContent.on = [[settings objectForKey:@"alternate"] boolValue];
                     switchContent.tag = 30;
                     break;
                 case 1:
                     cell.textLabel.text = NSLocalizedString(@"Enanched Graphics Mode", @"");
                     cell.detailTextLabel.text = NSLocalizedString(@"The game will use more memory so it could crash!", @"");
-                    switchContent.on = [[self.settings objectForKey:@"enhanced"] boolValue];
+                    switchContent.on = [[settings objectForKey:@"enhanced"] boolValue];
                     switchContent.tag = 70;
                     break;
                 case 2:
                     cell.textLabel.text = NSLocalizedString(@"Multitasking Enabled", @"");
                     cell.detailTextLabel.text = NSLocalizedString(@"Disable it in case of issues when returing in game", @"");
-                    switchContent.on = [[self.settings objectForKey:@"multitasking"] boolValue];
+                    switchContent.on = [[settings objectForKey:@"multitasking"] boolValue];
                     switchContent.tag = 80;
                     break;
                 case 3:
                     cell.textLabel.text = NSLocalizedString(@"Classic Ammo Menu", @"");
                     cell.detailTextLabel.text = NSLocalizedString(@"Select which style of ammo menu you prefer",@"");
-                    switchContent.on = [[self.settings objectForKey:@"classic_menu"] boolValue];
+                    switchContent.on = [[settings objectForKey:@"classic_menu"] boolValue];
                     switchContent.tag = 60;
                     break;
                 default:
@@ -271,13 +270,10 @@
 }
 
 -(void) viewDidUnload {
-    self.settings = nil;
-    MSG_DIDUNLOAD();
     [super viewDidUnload];
 }
 
 -(void) dealloc {
-    [settings release];
     [super dealloc];
 }
 
--- a/project_files/HedgewarsMobile/Classes/MapConfigViewController.m	Wed May 11 01:26:38 2011 +0200
+++ b/project_files/HedgewarsMobile/Classes/MapConfigViewController.m	Thu May 12 23:00:26 2011 +0200
@@ -74,7 +74,7 @@
 
     // perform as if user clicked on an entry
     [self tableView:self.tableView didSelectRowAtIndexPath:theIndex];
-    if (IS_NOT_POWERFUL() == NO)
+    if (IS_NOT_POWERFUL(getModelType()) == NO)
         [self.tableView scrollToRowAtIndexPath:theIndex atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
 }
 
@@ -378,6 +378,8 @@
 #pragma mark -
 #pragma mark view management
 -(void) loadDataSourceArray {
+    NSString *model = getModelType();
+
     // themes.cfg contains all the user-selectable themes
     NSString *string = [[NSString alloc] initWithContentsOfFile:[THEMES_DIRECTORY() stringByAppendingString:@"/themes.cfg"]
                                                        encoding:NSUTF8StringEncoding
@@ -392,9 +394,9 @@
     NSMutableArray *mapArray = [[NSMutableArray alloc] init];
     for (NSString *str in mapArrayFull) {
         CGSize imgSize = PSPNGSizeFromMetaData([MAPS_DIRECTORY() stringByAppendingFormat:@"%@/map.png",str]);
-        if (IS_NOT_POWERFUL() && imgSize.height > 1024.0f)
+        if (IS_NOT_POWERFUL(model) && imgSize.height > 1024.0f)
             continue;
-        if (IS_NOT_VERY_POWERFUL() && imgSize.height > 1280.0f)
+        if (IS_NOT_VERY_POWERFUL(model) && imgSize.height > 1280.0f)
             continue;
         [mapArray addObject:str];
     }
@@ -403,9 +405,9 @@
     NSMutableArray *missionArray = [[NSMutableArray alloc] init];
     for (NSString *str in missionArrayFull) {
         CGSize imgSize = PSPNGSizeFromMetaData([MISSIONS_DIRECTORY() stringByAppendingFormat:@"%@/map.png",str]);
-        if (IS_NOT_POWERFUL() && imgSize.height > 1024.0f)
+        if (IS_NOT_POWERFUL(model) && imgSize.height > 1024.0f)
             continue;
-        if (IS_NOT_VERY_POWERFUL() && imgSize.height > 1280.0f)
+        if (IS_NOT_VERY_POWERFUL(model) && imgSize.height > 1280.0f)
             continue;
         [missionArray addObject:str];
     }
--- a/project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m	Wed May 11 01:26:38 2011 +0200
+++ b/project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m	Thu May 12 23:00:26 2011 +0200
@@ -197,7 +197,7 @@
     [self setTitle:nil forState:UIControlStateNormal];
     
     // don't display preview on slower device, too slow and memory hog
-    if (IS_NOT_POWERFUL()) {
+    if (IS_NOT_POWERFUL(getModelType())) {
         [self setTitle:NSLocalizedString(@"Preview not available",@"") forState:UIControlStateNormal];
         [self turnOnWidgets];
     } else {        
--- a/project_files/HedgewarsMobile/Classes/OverlayViewController.m	Wed May 11 01:26:38 2011 +0200
+++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.m	Thu May 12 23:00:26 2011 +0200
@@ -61,7 +61,8 @@
     NSInteger angle_left = (self.initialOrientation == UIInterfaceOrientationLandscapeLeft) ? 180 : 0;
     NSInteger angle_right = (self.initialOrientation == UIInterfaceOrientationLandscapeLeft) ? 0 : 180;
 
-    if (IS_VERY_POWERFUL()) {
+    NSString *model = getModelType();
+    if (IS_VERY_POWERFUL(model)) {
         [UIView beginAnimations:@"overlay rotation" context:NULL];
         [UIView setAnimationDuration:0.7];
     }
@@ -82,7 +83,7 @@
             // a debug log would spam too much
             break;
     }
-    if (IS_VERY_POWERFUL())
+    if (IS_VERY_POWERFUL(model))
         [UIView commitAnimations];
 }