From e102d3f3691d6980cbb07840bbd57087ba45aa69 Mon Sep 17 00:00:00 2001 From: "techdragon.nguyen@gmail.com" Date: Fri, 30 Dec 2011 16:04:21 +0000 Subject: [PATCH] enabled OK button on GuiCombat screen when choosing defenders/attackers. iOS solution only currently. To implement in Android, we need to create a mask/invisible button above the OK button coordinates and add a listener to activate when a user touches the appropriate area. Not ideal, but it works for now. TODO: translate functionality into core of engine. --- JGE/include/JGE.h | 3 +- JGE/src/JGE.cpp | 47 ++++++++++++------- JGE/src/iOS/EAGLViewController.h | 3 ++ JGE/src/iOS/EAGLViewController.m | 28 ++++++++++- JGE/src/iOS/wagicAppDelegate.h | 1 + JGE/src/iOS/wagicAppDelegate.m | 14 ++++++ .../UI/WagicDownloadProgressViewController.m | 6 +-- projects/mtg/src/GameOptions.cpp | 4 -- projects/mtg/src/GuiCombat.cpp | 3 ++ projects/mtg/wagic.xcodeproj/project.pbxproj | 14 +----- 10 files changed, 84 insertions(+), 39 deletions(-) diff --git a/JGE/include/JGE.h b/JGE/include/JGE.h index 56efd4b73..3b89c5bfe 100644 --- a/JGE/include/JGE.h +++ b/JGE/include/JGE.h @@ -371,7 +371,8 @@ class JGE /// and in IOS to communicate with the EAGL layer void SendCommand(std::string command); void SendCommand(std::string command, std::string parameter); - + void SendCommand(std::string command, float& x, float& y, float& width, float& height); + #if defined (ANDROID) /// Access to JNI Environment void SetJNIEnv(JNIEnv * env, jclass cls); diff --git a/JGE/src/JGE.cpp b/JGE/src/JGE.cpp index a5f647a57..62e13aced 100644 --- a/JGE/src/JGE.cpp +++ b/JGE/src/JGE.cpp @@ -589,6 +589,8 @@ void JGE::SendCommand(string command) { #if defined (ANDROID) sendJNICommand(command); +#elif defined (IOS) + SendCommand(command, ""); #endif } @@ -597,29 +599,42 @@ void JGE::SendCommand(std::string command, std::string parameter) #if defined (IOS) // get the app delegate and have it handle the command wagicAppDelegate *delegate = [ [UIApplication sharedApplication] delegate]; - DebugTrace("Command: "<< command << " with parameter: " << parameter << endl); [delegate handleWEngineCommand:[NSString stringWithCString: command.c_str() encoding: NSUTF8StringEncoding] withParameter: [NSString stringWithCString: parameter.c_str() encoding:NSUTF8StringEncoding]]; #endif } - #if defined (ANDROID) - /// Access to JNI Environment - void JGE::SetJNIEnv(JNIEnv * env, jclass cls) - { - mJNIEnv = env; - mJNIClass = cls; - midSendCommand = mJNIEnv->GetStaticMethodID(mJNIClass,"jgeSendCommand","(Ljava/lang/String;)V"); - } - - void JGE::sendJNICommand(string command) - { - if (midSendCommand) { - mJNIEnv->CallStaticVoidMethod(mJNIClass, midSendCommand, mJNIEnv->NewStringUTF(command.c_str())); - } - } +// this controls commands meant to modify/interact with UI +void JGE::SendCommand(std::string command, float& x, float& y, float& width, float& height) +{ +#ifdef ANDROID + +#elif IOS + wagicAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; + [delegate handleWEngineCommand: [NSString stringWithCString: command.c_str() encoding: NSUTF8StringEncoding] withUIParameters: x yCoordinate: y width: width height: height]; +#endif + +} + + +#if defined (ANDROID) +/// Access to JNI Environment +void JGE::SetJNIEnv(JNIEnv * env, jclass cls) +{ + mJNIEnv = env; + mJNIClass = cls; + midSendCommand = mJNIEnv->GetStaticMethodID(mJNIClass,"jgeSendCommand","(Ljava/lang/String;)V"); +} + +void JGE::sendJNICommand(string command) +{ + if (midSendCommand) { + mJNIEnv->CallStaticVoidMethod(mJNIClass, midSendCommand, mJNIEnv->NewStringUTF(command.c_str())); + } +} #endif + std::queue< pair< pair, bool> > JGE::keyBuffer; std::multimap JGE::keyBinds; diff --git a/JGE/src/iOS/EAGLViewController.h b/JGE/src/iOS/EAGLViewController.h index ae53d0a76..2eb237a7d 100755 --- a/JGE/src/iOS/EAGLViewController.h +++ b/JGE/src/iOS/EAGLViewController.h @@ -6,8 +6,11 @@ BOOL bannerIsVisible; } +- (void)addOkButtonListener: (CGRect) frame; + @property (nonatomic, retain) id eaglView; @property (nonatomic, retain) UITextField *inputField; +@property (nonatomic, retain) UIButton *okButtonView; @property (nonatomic, assign) BOOL bannerIsVisible; @end diff --git a/JGE/src/iOS/EAGLViewController.m b/JGE/src/iOS/EAGLViewController.m index 7ea1c0ae1..f044b50f9 100755 --- a/JGE/src/iOS/EAGLViewController.m +++ b/JGE/src/iOS/EAGLViewController.m @@ -10,6 +10,7 @@ @synthesize bannerIsVisible; @synthesize eaglView; +@synthesize okButtonView; @synthesize inputField; #pragma mark initialization / deallocation methods @@ -38,6 +39,7 @@ [eaglView setDelegate: nil]; [eaglView release], eaglView = nil; [inputField release], inputField = nil; + [okButtonView release], okButtonView = nil; [super dealloc]; } @@ -86,10 +88,32 @@ // e.g. self.myOutlet = nil; } +#pragma mark - UIView Creation +- (void)addOkButtonListener: (CGRect) frame +{ + // create an invisible view to handle the pressing of the OK button. + if ( okButtonView == nil ) + { + okButtonView = [[UIButton alloc] initWithFrame: frame]; + [okButtonView setBackgroundColor: [UIColor clearColor]]; + [okButtonView setEnabled: YES]; + [okButtonView addTarget: self.view action:@selector(handleOK:) forControlEvents: UIControlEventTouchUpInside]; + [self.view addSubview: okButtonView]; + } + else + { + [self.view bringSubviewToFront: okButtonView]; + } +} -#pragma mark - +- (void)removeOkButtonListener +{ + [[self.view.subviews lastObject] removeFromSuperview]; + [okButtonView release], okButtonView = nil; +} -#pragma mark device orientation handlers + +#pragma mark - device orientation handlers - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Overriden to allow any orientation. diff --git a/JGE/src/iOS/wagicAppDelegate.h b/JGE/src/iOS/wagicAppDelegate.h index bd6f5f229..deb64f090 100755 --- a/JGE/src/iOS/wagicAppDelegate.h +++ b/JGE/src/iOS/wagicAppDelegate.h @@ -14,6 +14,7 @@ - (void) rotateBackgroundImage:(UIInterfaceOrientation)fromInterfaceOrientation toInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation; - (void) handleWEngineCommand:(NSString *) command withParameter: (NSString *) parameter; +- (void) handleWEngineCommand:(NSString *) command withUIParameters: (CGFloat) x yCoordinate: (CGFloat) y width: (CGFloat) width height: (CGFloat) height; @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) EAGLViewController *glViewController; diff --git a/JGE/src/iOS/wagicAppDelegate.m b/JGE/src/iOS/wagicAppDelegate.m index 59cb20ad4..82296d0e8 100755 --- a/JGE/src/iOS/wagicAppDelegate.m +++ b/JGE/src/iOS/wagicAppDelegate.m @@ -144,6 +144,16 @@ [self.glViewController toggleKeyboardWithState: initialState]; } +- (void) handleWEngineCommand:(NSString *) command + withUIParameters: (CGFloat) x + yCoordinate: (CGFloat) y + width: (CGFloat) width + height: (CGFloat) height +{ + CGRect uiFrame = CGRectMake(x, y, width, height); + if ( [command isEqualToString: @"okbuttoncreated"] ) + [glViewController addOkButtonListener: uiFrame]; +} - (void)handleWEngineCommand:(NSString *) command withParameter: (NSString *) parameter { @@ -165,6 +175,10 @@ { [self initializeKeyboard: parameter]; } + else if ([command isEqualToString: @"combatGuiEndDamage"]) + { + [glViewController removeOkButtonListener]; + } } diff --git a/projects/mtg/iOS/UI/WagicDownloadProgressViewController.m b/projects/mtg/iOS/UI/WagicDownloadProgressViewController.m index 721574b64..123212bfb 100644 --- a/projects/mtg/iOS/UI/WagicDownloadProgressViewController.m +++ b/projects/mtg/iOS/UI/WagicDownloadProgressViewController.m @@ -190,8 +190,7 @@ static NSString *kDownloadFileName = @"core_017_iOS.zip"; return self; } - -#pragma mark Application Lifecycle +#pragma mark - Application Lifecycle - (void) didReceiveMemoryWarning @@ -203,8 +202,7 @@ static NSString *kDownloadFileName = @"core_017_iOS.zip"; } -#pragma mark - -#pragma mark UIView Delegate +#pragma mark - UIView Delegate - (void) handleRotation: (UIInterfaceOrientation) interfaceOrientation { diff --git a/projects/mtg/src/GameOptions.cpp b/projects/mtg/src/GameOptions.cpp index 352c876af..7ab7347ec 100644 --- a/projects/mtg/src/GameOptions.cpp +++ b/projects/mtg/src/GameOptions.cpp @@ -7,10 +7,6 @@ #include "StyleManager.h" #include "Credits.h" -#ifdef IOS -#include "JGE.h" -#endif - const string Options::optionNames[] = { //Global options "Profile", diff --git a/projects/mtg/src/GuiCombat.cpp b/projects/mtg/src/GuiCombat.cpp index 4ded97cf7..93604f1cc 100644 --- a/projects/mtg/src/GuiCombat.cpp +++ b/projects/mtg/src/GuiCombat.cpp @@ -47,6 +47,7 @@ GuiCombat::GuiCombat(GameObserver* go) : if (NULL == ok_tex && go->getResourceManager()) { ok_tex = go->getResourceManager()->RetrieveTexture("Ok.png", RETRIEVE_LOCK); + // send a message out to listeners that we created the GO button and it's location } } @@ -190,6 +191,7 @@ bool GuiCombat::clickOK() case END_FIRST_STRIKE: return false; case END_DAMAGE: + JGE::GetInstance()->SendCommand("combatGuiEndDamage"); return false; // nothing; } return false; @@ -428,6 +430,7 @@ void GuiCombat::Render() JQuadPtr ok_quad = WResourceManager::Instance()->RetrieveTempQuad("Ok.png"); ok_quad->SetHotSpot(28, 22); ok.Render(ok_quad.get()); + JGE::GetInstance()->SendCommand("okbuttoncreated:", ok.x, ok.y, ok_quad->mWidth, ok_quad->mHeight); } renderer->DrawLine(0, SCREEN_HEIGHT / 2 + 10, SCREEN_WIDTH, SCREEN_HEIGHT / 2 + 10, ARGB(255, 255, 64, 0)); if (FIRST_STRIKE == step) diff --git a/projects/mtg/wagic.xcodeproj/project.pbxproj b/projects/mtg/wagic.xcodeproj/project.pbxproj index 9dad02b38..c5a2dc160 100755 --- a/projects/mtg/wagic.xcodeproj/project.pbxproj +++ b/projects/mtg/wagic.xcodeproj/project.pbxproj @@ -498,17 +498,6 @@ /* End PBXBuildFile section */ /* Begin PBXBuildRule section */ - 12059E5F14980B7300DAC43B /* PBXBuildRule */ = { - isa = PBXBuildRule; - compilerSpec = com.apple.compilers.proxy.script; - filePatterns = modrules.xml; - fileType = pattern.proxy; - isEditable = 1; - outputFiles = ( - "", - ); - script = "cp -rp iOS/Res bin/Res"; - }; 129654D7148AA2690031100B /* PBXBuildRule */ = { isa = PBXBuildRule; compilerSpec = com.apple.compilers.proxy.script; @@ -1879,7 +1868,6 @@ 12059E4914980B7300DAC43B /* Frameworks */, ); buildRules = ( - 12059E5F14980B7300DAC43B /* PBXBuildRule */, ); dependencies = ( ); @@ -2437,6 +2425,7 @@ DEBUG, DARWIN_NO_CARBON, FT2_BUILD_LIBRARY, + FORCE_GLES, ); "GCC_THUMB_SUPPORT[arch=armv6]" = ""; GCC_VERSION = com.apple.compilers.llvmgcc42; @@ -2482,6 +2471,7 @@ FT2_BUILD_LIBRARY, IOS, TESTSUITE, + FORCE_GLES, ); "GCC_THUMB_SUPPORT[arch=armv6]" = ""; GCC_VERSION = com.apple.compilers.llvmgcc42;