simplify stats handling
authorkoda
Fri, 31 Dec 2010 00:10:38 +0100
changeset 4760 224c31b3ce7d
parent 4757 7ca9ebb6895d
child 4763 c228a4841e3f
simplify stats handling
project_files/HedgewarsMobile/Classes/GameConfigViewController.m
project_files/HedgewarsMobile/Classes/GameSetup.h
project_files/HedgewarsMobile/Classes/GameSetup.m
project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.h
project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.m
project_files/HedgewarsMobile/Classes/StatsPageViewController.h
project_files/HedgewarsMobile/Classes/StatsPageViewController.m
--- a/project_files/HedgewarsMobile/Classes/GameConfigViewController.m	Thu Dec 30 04:54:25 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/GameConfigViewController.m	Fri Dec 31 00:10:38 2010 +0100
@@ -239,12 +239,15 @@
         StatsPageViewController *statsPage = [[StatsPageViewController alloc] initWithStyle:UITableViewStyleGrouped];
         [self presentModalViewController:statsPage animated:NO];
 
-        statsPage.statsDictionary = [[SDLUIKitDelegate sharedAppDelegate] startSDLgame:allDataNecessary];
-        if (statsPage.statsDictionary == nil)
+        NSArray *stats = [[SDLUIKitDelegate sharedAppDelegate] startSDLgame:allDataNecessary];
+        if ([stats count] == 0)
             [statsPage dismissModalViewControllerAnimated:NO];
-        else
+        else {
+            statsPage.statsArray = stats;
             [statsPage.tableView reloadData];
-        DLog(@"%@",statsPage.statsDictionary);
+            [statsPage viewWillAppear:YES];
+        }
+
         [statsPage release];
     }
 
--- a/project_files/HedgewarsMobile/Classes/GameSetup.h	Thu Dec 30 04:54:25 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/GameSetup.h	Fri Dec 31 00:10:38 2010 +0100
@@ -25,7 +25,7 @@
 @interface GameSetup : NSObject {
     NSDictionary *systemSettings;
     NSDictionary *gameConfig;
-    NSMutableDictionary *statsDictionary;
+    NSMutableArray *statsArray;
 
     NSInteger ipcPort;  // Port on which engine will listen
     TCPsocket csd;      // Client socket descriptor
@@ -38,7 +38,7 @@
 
 @property (nonatomic, retain) NSDictionary *systemSettings;
 @property (nonatomic, retain) NSDictionary *gameConfig;
-@property (nonatomic, retain) NSMutableDictionary *statsDictionary;
+@property (nonatomic, retain) NSMutableArray *statsArray;
 @property (nonatomic, retain) NSString *savePath;
 @property (assign) BOOL menuStyle;
 
--- a/project_files/HedgewarsMobile/Classes/GameSetup.m	Thu Dec 30 04:54:25 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/GameSetup.m	Fri Dec 31 00:10:38 2010 +0100
@@ -28,7 +28,7 @@
 #define BUFFER_SIZE 255     // like in original frontend
 
 @implementation GameSetup
-@synthesize systemSettings, gameConfig, statsDictionary, savePath, menuStyle;
+@synthesize systemSettings, gameConfig, statsArray, savePath, menuStyle;
 
 -(id) initWithDictionary:(NSDictionary *)gameDictionary {
     if (self = [super init]) {
@@ -58,13 +58,13 @@
         } else
             self.savePath = path;
 
-        self.statsDictionary = nil;
+        self.statsArray = nil;
     }
     return self;
 }
 
 -(void) dealloc {
-    [statsDictionary release];
+    [statsArray release];
     [gameConfig release];
     [systemSettings release];
     [savePath release];
@@ -349,50 +349,35 @@
                 }
                 break;
             case 'i':
+                if (self.statsArray == nil)
+                    self.statsArray = [[NSMutableArray alloc] initWithCapacity:statMaxCapacity];
                 switch (buffer[1]) {
-                    case 'r':
-                        if (self.statsDictionary == nil)
-                            self.statsDictionary = [[NSMutableDictionary alloc] initWithCapacity:statMaxCapacity];
-                        [self.statsDictionary setObject:[NSString stringWithUTF8String:&buffer[2]] forKey:@"winning_team"];
+                    case 'r':           // winning team
+                        [self.statsArray insertObject:[NSString stringWithUTF8String:&buffer[2]] atIndex:0];
                         break;
-                    case 'D':
-                        if (self.statsDictionary == nil)
-                            self.statsDictionary = [[NSMutableDictionary alloc] initWithCapacity:statMaxCapacity];
-                        [self.statsDictionary setObject:[NSString stringWithFormat:@"Best shot: %s", &buffer[2]] forKey:@"best_shot"];
+                    case 'D':           // best shot
+                        [self.statsArray addObject:[NSString stringWithFormat:@"Best shot by %s", &buffer[2]]];
                         break;
-                    case 'k':
-                        if (self.statsDictionary == nil)
-                            self.statsDictionary = [[NSMutableDictionary alloc] initWithCapacity:statMaxCapacity];
-                        [self.statsDictionary setObject:[NSString stringWithFormat:@"Best hedgehog: %s", &buffer[2]] forKey:@"best_hog"];
+                    case 'k':           // best hedgehog
+                        [self.statsArray addObject:[NSString stringWithFormat:@"Best hedgehog: %s", &buffer[2]]];
                         break;
-                    case 'K':
-                        if (self.statsDictionary == nil)
-                            self.statsDictionary = [[NSMutableDictionary alloc] initWithCapacity:statMaxCapacity];
-                        [self.statsDictionary setObject:[NSString stringWithFormat:@"%s hogs killed", &buffer[2]] forKey:@"kills"];
+                    case 'K':           // number of hogs killed
+                        [self.statsArray addObject:[NSString stringWithFormat:@"%s hogs killed", &buffer[2]]];
                         break;
-                    case 'H':
-                        //something about team health
+                    case 'H':           //something about team health
                         break;
-                    case 'T':
-                        // local team stats
+                    case 'T':           // local team stats
                         break;
-                    case 'P':
-                        // player postion
+                    case 'P':           // player postion
                         break;
-                    case 's':
-                        if (self.statsDictionary == nil)
-                            self.statsDictionary = [[NSMutableDictionary alloc] initWithCapacity:statMaxCapacity];
-                        [self.statsDictionary setObject:[NSString stringWithFormat:@"%s hit himself", &buffer[2]] forKey:@"self_dmg"];
+                    case 's':           // self damage
+                        [self.statsArray addObject:[NSString stringWithFormat:@"%s hit himself", &buffer[2]]];
                         break;
-                    case 'S':
-                        if (self.statsDictionary == nil)
-                            self.statsDictionary = [[NSMutableDictionary alloc] initWithCapacity:statMaxCapacity];
-                        [self.statsDictionary setObject:[NSString stringWithFormat:@"%s hit his friends", &buffer[2]] forKey:@"friendly_fire"];
+                    case 'S':           // friendly fire
+                        [self.statsArray addObject:[NSString stringWithFormat:@"%s hit his friends", &buffer[2]]];
                         break;
-                    case 'B':
-                        if (self.statsDictionary == nil)
-                            self.statsDictionary = [[NSMutableDictionary alloc] initWithCapacity:statMaxCapacity];
-                        [self.statsDictionary setObject:[NSString stringWithFormat:@"%s skipped most turns", &buffer[2]] forKey:@"turn_skips"];
+                    case 'B':           // turn skipped
+                        [self.statsArray addObject:[NSString stringWithFormat:@"%s skipped most turns", &buffer[2]]];
                         break;
                     default:
                         DLog(@"Unhandled stat message, see statsPage.cpp");
--- a/project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.h	Thu Dec 30 04:54:25 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.h	Fri Dec 31 00:10:38 2010 +0100
@@ -40,7 +40,7 @@
 @property (nonatomic,retain) UIWindow *secondWindow;
 
 +(SDLUIKitDelegate *)sharedAppDelegate;
--(NSDictionary *)startSDLgame:(NSDictionary *)gameDictionary;
+-(NSArray *)startSDLgame:(NSDictionary *)gameDictionary;
 -(void) displayOverlayLater:(id) object;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.m	Thu Dec 30 04:54:25 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.m	Fri Dec 31 00:10:38 2010 +0100
@@ -85,7 +85,7 @@
 }
 
 // main routine for calling the actual game engine
--(NSDictionary *)startSDLgame:(NSDictionary *)gameDictionary {
+-(NSArray *)startSDLgame:(NSDictionary *)gameDictionary {
     UIWindow *gameWindow;
     if (IS_DUALHEAD())
         gameWindow = self.secondWindow;
@@ -144,7 +144,7 @@
     self.isInGame = NO;
     free(gameArgs);
     
-    NSDictionary *stat = setup.statsDictionary;
+    NSArray *stats = setup.statsArray;
     [setup release];
 
 
@@ -161,7 +161,7 @@
     [refBlackView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1];
     [refSecondBlackView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:2];
 
-    return stat;
+    return stats;
 }
 
 // overlay with controls, become visible later, with a transparency effect since the sdlwindow is not yet created
--- a/project_files/HedgewarsMobile/Classes/StatsPageViewController.h	Thu Dec 30 04:54:25 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/StatsPageViewController.h	Fri Dec 31 00:10:38 2010 +0100
@@ -22,9 +22,9 @@
 #import <UIKit/UIKit.h>
 
 @interface StatsPageViewController : UITableViewController {
-    NSDictionary *statsDictionary;
+    NSArray *statsArray;
 }
 
-@property (nonatomic,retain) NSDictionary *statsDictionary;
+@property (nonatomic,retain) NSArray *statsArray;
 
 @end
\ No newline at end of file
--- a/project_files/HedgewarsMobile/Classes/StatsPageViewController.m	Thu Dec 30 04:54:25 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/StatsPageViewController.m	Fri Dec 31 00:10:38 2010 +0100
@@ -23,7 +23,7 @@
 #import "CommodityFunctions.h"
 
 @implementation StatsPageViewController
-@synthesize statsDictionary;
+@synthesize statsArray;
 
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
     return rotationManager(interfaceOrientation);
@@ -32,26 +32,30 @@
 #pragma mark -
 #pragma mark Table view data source
 -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
-    return 2;
+    return 3;
 }
 
 -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    if (section == 0)
-        return [[self.statsDictionary allValues] count];
+    if (section == 0 || section == 2)
+        return 1;
     else
-        return 1;
+        return [self.statsArray count] - 1;
 }
 
 -(UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     static NSString *CellIdentifier0 = @"Cell0";
+    NSInteger section = [indexPath section];
+    NSInteger row = [indexPath row];
 
     UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier0];
     if (cell == nil)
         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier0] autorelease];
 
     cell.textLabel.textAlignment = UITextAlignmentCenter;
-    if ([indexPath section] == 0) {
-        cell.textLabel.text = [[self.statsDictionary allValues] objectAtIndex:[indexPath row]];
+    if (section == 0) {
+        cell.textLabel.text = [self.statsArray objectAtIndex:row];
+    } else if (section == 1) {
+        cell.textLabel.text = [self.statsArray objectAtIndex:row + 1];
     } else {
         cell.textLabel.text = NSLocalizedString(@"Back",@"");
     }
@@ -59,7 +63,6 @@
     return cell;
 }
 
-
 #pragma mark -
 #pragma mark Table view delegate
 -(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
@@ -72,11 +75,11 @@
 -(void) didReceiveMemoryWarning {
     // Releases the view if it doesn't have a superview.
     [super didReceiveMemoryWarning];
-    // Relinquish ownership any cached data, images, etc. that aren't in use.
+    self.statsArray = nil;
 }
 
 -(void) dealloc {
-    [statsDictionary release];
+    [statsArray release];
     [super dealloc];
 }