moved some utilities to a separate column with round buttons
authorkoda
Mon, 11 Oct 2010 03:28:15 +0200
changeset 3952 d6412423da45
parent 3950 296cbdd85e50
child 3966 cbec77b5f706
moved some utilities to a separate column with round buttons some improvements to rotation handling, overlay appears later so device shouldn't be stressed removed some code and autoset to default only when textfield is empty (for weaps and schemes)
hedgewars/PascalExports.pas
hedgewars/uAmmos.pas
hedgewars/uMobile.pas
hedgewars/uTeams.pas
hedgewars/uWorld.pas
project_files/HedgewarsMobile/Classes/AmmoMenuViewController.m
project_files/HedgewarsMobile/Classes/OverlayViewController.m
project_files/HedgewarsMobile/Classes/PascalImports.h
project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.m
project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m
--- a/hedgewars/PascalExports.pas	Mon Oct 11 00:08:48 2010 +0200
+++ b/hedgewars/PascalExports.pas	Mon Oct 11 03:28:15 2010 +0200
@@ -179,11 +179,16 @@
     y^:= CursorPoint.Y;
 end;
 
-function HW_isAmmoOpen: boolean; cdecl; export;
+function HW_isAmmoMenuOpen: boolean; cdecl; export;
 begin
     exit(bShowAmmoMenu);
 end;
 
+function HW_isAmmoMenuNotAllowed: boolean; cdecl; export;
+begin;
+    exit ( (TurnTimeLeft = 0) or (not CurrentTeam^.ExtDriven and (((CurAmmoGear = nil) or ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu)) );
+end;
+
 function HW_isPaused: boolean; cdecl; export;
 begin
     exit( isPaused );
@@ -265,6 +270,11 @@
         SetWeapon(TAmmoType(whichone+1));
 end;
 
+function HW_isWeaponAnEffect(whichone: LongInt): boolean; cdecl; export;
+begin
+    exit(Ammoz[TAmmoType(whichone+1)].Ammo.Propz and ammoprop_Effect <> 0)
+end;
+
 function HW_getAmmoCounts(counts: PLongInt): LongInt; cdecl; export;
 var a : PHHAmmo;
     slot, index: LongInt;
--- a/hedgewars/uAmmos.pas	Mon Oct 11 00:08:48 2010 +0200
+++ b/hedgewars/uAmmos.pas	Mon Oct 11 03:28:15 2010 +0200
@@ -248,7 +248,7 @@
                 end
             end
     end;
-perfExt_NewTurnBeginning;
+perfExt_AmmoUpdate;
 end;
 
 function  HHHasAmmo(var Hedgehog: THedgehog; Ammo: TAmmoType): boolean;
@@ -357,7 +357,6 @@
             ShowCrosshair:= (Propz and ammoprop_NoCrosshair) = 0;
         end
     end;
-perfExt_NewTurnBeginning;
 end;
 
 procedure SwitchNotHeldAmmo(var Hedgehog: THedgehog);
--- a/hedgewars/uMobile.pas	Mon Oct 11 00:08:48 2010 +0200
+++ b/hedgewars/uMobile.pas	Mon Oct 11 03:28:15 2010 +0200
@@ -41,7 +41,7 @@
 procedure perfExt_SaveFinishedSynching; inline;
 
 implementation
-uses uTeams;
+uses uTeams, uConsole;
 
 function isPhone: Boolean; inline;
 begin
--- a/hedgewars/uTeams.pas	Mon Oct 11 00:08:48 2010 +0200
+++ b/hedgewars/uTeams.pas	Mon Oct 11 03:28:15 2010 +0200
@@ -225,7 +225,6 @@
 until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil);
 
 CurrentHedgehog:= @(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]);
-perfExt_AmmoUpdate
 end;
 
 procedure AfterSwitchHedgehog;
@@ -297,7 +296,9 @@
     if TurnTimeLeft > 0 then
         PlaySound(sndIllGetYou, CurrentTeam^.voicepack);
     ReadyTimeLeft:= 0
-    end
+    end;
+
+perfExt_NewTurnBeginning();
 end;
 
 function AddTeam(TeamColor: Longword): PTeam;
--- a/hedgewars/uWorld.pas	Mon Oct 11 00:08:48 2010 +0200
+++ b/hedgewars/uWorld.pas	Mon Oct 11 03:28:15 2010 +0200
@@ -190,7 +190,8 @@
     Slot, Pos, STurns: LongInt;
     Ammo: PHHAmmo;
 begin
-if  (TurnTimeLeft = 0) or (not CurrentTeam^.ExtDriven and (((CurAmmoGear = nil) or ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu)) then bShowAmmoMenu:= false;
+if (TurnTimeLeft = 0) or (not CurrentTeam^.ExtDriven and (((CurAmmoGear = nil) or ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu)) then
+    bShowAmmoMenu:= false;
 if bShowAmmoMenu then
    begin
    FollowGear:= nil;
--- a/project_files/HedgewarsMobile/Classes/AmmoMenuViewController.m	Mon Oct 11 00:08:48 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/AmmoMenuViewController.m	Mon Oct 11 03:28:15 2010 +0200
@@ -25,6 +25,8 @@
 #import "UIImageExtra.h"
 #import "PascalImports.h"
 
+#define BTNS_PER_ROW 9
+
 @implementation AmmoMenuViewController
 @synthesize weaponsImage, buttonsArray, isVisible;
 
@@ -46,7 +48,8 @@
     self.view.layer.borderWidth = 1.3f;
     [self.view.layer setCornerRadius:10];
     [self.view.layer setMasksToBounds:YES];
-
+    self.view.autoresizingMask = UIViewAutoresizingNone;
+    
     self.isVisible = NO;
     delay = (uint8_t *) calloc(HW_getNumberOfWeapons(), sizeof(uint8_t));
     HW_getAmmoDelays(delay);
@@ -62,7 +65,15 @@
 -(void) appearInView:(UIView *)container {
     [self viewWillAppear:YES];
     [container addSubview:self.view];
-    self.view.center = CGPointMake(container.center.y, container.center.x);
+    if (IS_DUALHEAD() == NO)
+        self.view.center = CGPointMake(container.center.y, container.center.x);
+    else {
+        UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
+        if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight)
+            self.view.center = CGPointMake(container.center.y, container.center.x);
+        else
+            self.view.center = CGPointMake(container.center.x, container.center.y);
+    }
     self.isVisible = YES;
 }
 
@@ -83,18 +94,33 @@
     [ammoStoreImage release];
 
     NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:HW_getNumberOfWeapons()];
-    for (int i = 0; i < HW_getNumberOfWeapons(); i++) {
-        int x_dst = 10+(i%10)*44;
-        int y_dst = 10+(i/10)*44;
+    int i, j, e;
+    for (i = 0, j = 0, e = 0; i < HW_getNumberOfWeapons(); i++) {
+        int x, y;
+        float w, radius;
         
-        if (i / 10 % 2 != 0)
-            x_dst += 20;
+        // move utilities aside and make 'em rounded
+        if (HW_isWeaponAnEffect(i)) {
+            x = 432;
+            y = 20 + 48*e++;
+            w = 1.5;
+            radius = 22;
+        } else {
+            x = 10+(j%BTNS_PER_ROW)*44;
+            y = 10+(j/BTNS_PER_ROW)*44;
+            if (j / BTNS_PER_ROW % 2 != 0)
+                x += 20;
+            w = 1;
+            radius = 6;
+            j++;
+        }
+
         UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
-        button.frame = CGRectMake(x_dst, y_dst, 40, 40);
+        button.frame = CGRectMake(x, y, 40, 40);
         button.tag = i;
-        button.layer.borderWidth = 1;
         button.layer.borderColor = [UICOLOR_HW_YELLOW_TEXT CGColor];
-        [button.layer setCornerRadius:6];
+        button.layer.borderWidth = w;
+        [button.layer setCornerRadius:radius];
         [button.layer setMasksToBounds:YES];
         [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
         [button setTitleColor:UICOLOR_HW_YELLOW_TEXT forState:UIControlStateNormal];
@@ -106,6 +132,7 @@
         button.titleLabel.layer.borderWidth = 1;
         [self.view addSubview:button];
         [array addObject:button];
+        
     }
     [self performSelectorOnMainThread:@selector(setButtonsArray:) withObject:array waitUntilDone:NO];
     [array release];
--- a/project_files/HedgewarsMobile/Classes/OverlayViewController.m	Mon Oct 11 00:08:48 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.m	Mon Oct 11 03:28:15 2010 +0200
@@ -61,21 +61,33 @@
     switch (orientation) {
         case UIDeviceOrientationLandscapeLeft:
             if (IS_DUALHEAD() == NO)
-                sdlView.transform = CGAffineTransformMakeRotation(degreesToRadians(0));
+                sdlView.transform = CGAffineTransformMakeRotation(degreesToRadians(180));
             self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90));
             break;
         case UIDeviceOrientationLandscapeRight:
             if (IS_DUALHEAD() == NO)
-                sdlView.transform = CGAffineTransformMakeRotation(degreesToRadians(180));
+                sdlView.transform = CGAffineTransformMakeRotation(degreesToRadians(0));
             self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(-90));
             break;
+        case UIDeviceOrientationPortrait:
+            if (IS_DUALHEAD())
+                self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(0));
+            break;
+        case UIDeviceOrientationPortraitUpsideDown:
+            if (IS_DUALHEAD())
+                self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(180));
+            break;
         default:
             // a debug log would spam too much
             break;
     }
+    if (self.amvc.isVisible)
+        [self.amvc appearInView:self.view];
     self.view.frame = usefulRect;
-    //sdlView.frame = usefulRect;
     [UIView commitAnimations];
+    
+    // for single screens only landscape mode is supported
+    // for dual screen mode the sdlview is not modified, but you can rotate the pad in any direction
 }
 
 #pragma mark -
@@ -93,6 +105,26 @@
 
     initialScreenCount = [[UIScreen screens] count];
 
+    if (IS_DUALHEAD()) {
+        // set initial orientation wrt the controller orientation
+        switch (self.interfaceOrientation) {
+            case UIDeviceOrientationLandscapeLeft:
+                self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90));
+                break;
+            case UIDeviceOrientationLandscapeRight:
+                self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(-90));
+                break;
+            case UIDeviceOrientationPortrait:
+                self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(0));
+                break;
+            case UIDeviceOrientationPortraitUpsideDown:
+                self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(180));
+                break;
+            default:
+                DLog(@"Nope");
+                break;
+        }
+    }
     CGRect screenRect = [[UIScreen mainScreen] bounds];
     self.view.frame = CGRectMake(0, 0, screenRect.size.width, screenRect.size.height);
 
@@ -103,7 +135,7 @@
                                         userInfo:nil
                                          repeats:YES];
 
-    // add timer too runloop, otherwise it doesn't work
+    // add timer to runloop, otherwise it doesn't work
     [[NSRunLoop currentRunLoop] addTimer:dimTimer forMode:NSDefaultRunLoopMode];
 
     [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
@@ -323,13 +355,15 @@
             if (IS_DUALHEAD() || self.useClassicMenu == NO) {
                 if (self.amvc == nil)
                     self.amvc = [[AmmoMenuViewController alloc] init];
-                
+
                 if (self.amvc.isVisible) {
                     doDim();
                     [self.amvc disappear];
                 } else {
-                    doNotDim();
-                    [self.amvc appearInView:self.view];
+                    if (HW_isAmmoMenuNotAllowed() == NO) {
+                        doNotDim();
+                        [self.amvc appearInView:self.view];
+                    }
                 }
             } else {
                 HW_ammoMenu();
@@ -452,7 +486,7 @@
     switch ([allTouches count]) {
         case 1:
             // if we're in the menu we just click in the point
-            if (HW_isAmmoOpen()) {
+            if (HW_isAmmoMenuOpen()) {
                 HW_setCursor(HWXZ(currentPosition.x), HWYZ(currentPosition.y));
                 // this click doesn't need any wrapping because the ammoMenu already limits the cursor
                 HW_click();
@@ -560,7 +594,7 @@
             touch = [[allTouches allObjects] objectAtIndex:0];
             CGPoint currentPosition = [touch locationInView:self.view];
 
-            if (HW_isAmmoOpen()) {
+            if (HW_isAmmoMenuOpen()) {
                 // no zoom consideration for this
                 HW_setCursor(HWXZ(currentPosition.x), HWYZ(currentPosition.y));
             } else
--- a/project_files/HedgewarsMobile/Classes/PascalImports.h	Mon Oct 11 00:08:48 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/PascalImports.h	Mon Oct 11 03:28:15 2010 +0200
@@ -70,7 +70,8 @@
     void HW_setCursor(int x, int y);
     void HW_getCursor(int *x, int *y);
 
-    BOOL HW_isAmmoOpen(void);
+    BOOL HW_isAmmoMenuOpen(void);
+    BOOL HW_isAmmoMenuNotAllowed(void);
     BOOL HW_isPaused(void);
     BOOL HW_isWeaponRequiringClick(void);
     BOOL HW_isWeaponTimerable(void);
@@ -81,11 +82,14 @@
     void HW_setPianoSound(int snd);
     
     void HW_setWeapon(int whichone);
-    void HW_getAmmoDelays(unsigned char *);
-    int  HW_getAmmoCounts(int *);
+    BOOL HW_isWeaponAnEffect(int whichone);
+    char *HW_getWeaponNameByIndex(int whichone);
+
+    void HW_getAmmoDelays(unsigned char *pointer);
+    int  HW_getAmmoCounts(int *pointer);
+    
+    int  HW_getNumberOfWeapons(void);
     int  HW_getTurnsForCurrentTeam(void);
-    int  HW_getNumberOfWeapons(void);
-    char *HW_getWeaponNameByIndex(int whichone);
     int  HW_getMaxNumberOfHogs(void);
     int  HW_getMaxNumberOfTeams(void);
     
--- a/project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.m	Mon Oct 11 00:08:48 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.m	Mon Oct 11 03:28:15 2010 +0200
@@ -129,7 +129,7 @@
 
     // since the sdlwindow is not yet created, we add the overlayController with a delay
     NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:isNetGameNum,@"net",menuStyle,@"menu",nil];
-    [self performSelector:@selector(displayOverlayLater:) withObject:dict afterDelay:0.1];
+    [self performSelector:@selector(displayOverlayLater:) withObject:dict afterDelay:1];
 
     // this is the pascal fuction that starts the game (wrapped around isInGame)
     isInGame = YES;
--- a/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m	Mon Oct 11 00:08:48 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m	Mon Oct 11 03:28:15 2010 +0200
@@ -53,15 +53,15 @@
     NSArray *contentsOfDir = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:SCHEMES_DIRECTORY() error:NULL];
     self.listOfSchemes = contentsOfDir;
 
-    if ([listOfSchemes containsObject:@"Default.plist"])
-         self.selectedScheme = @"Default.plist";
-
+    if ([self.selectedScheme isEqualToString:@""] && [listOfSchemes containsObject:@"Default.plist"])
+        self.selectedScheme = @"Default.plist";
+    
     contentsOfDir = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:WEAPONS_DIRECTORY() error:NULL];
     self.listOfWeapons = contentsOfDir;
-
-    if ([listOfWeapons containsObject:@"Default.plist"])
-         self.selectedWeapon = @"Default.plist";
-
+    
+    if ([self.selectedWeapon isEqualToString:@""] && [listOfWeapons containsObject:@"Default.plist"])
+        self.selectedWeapon = @"Default.plist";
+    
     [self.tableView reloadData];
 }