import cli.MonoTouch.Foundation.NSDictionary;\r
import cli.MonoTouch.UIKit.UIApplication;\r
import cli.MonoTouch.UIKit.UIApplicationDelegate;\r
+import cli.MonoTouch.UIKit.UIDevice;\r
+import cli.MonoTouch.UIKit.UIDeviceOrientation;\r
+import cli.MonoTouch.UIKit.UIInterfaceOrientation;\r
import cli.MonoTouch.UIKit.UIScreen;\r
+import cli.MonoTouch.UIKit.UIViewController;\r
import cli.MonoTouch.UIKit.UIWindow;\r
import cli.System.Console;\r
import cli.System.Drawing.RectangleF;\r
@Override\r
public boolean FinishedLaunching(UIApplication uiApp, NSDictionary options) {\r
this.uiApp = uiApp;\r
- RectangleF bounds = UIScreen.get_MainScreen().get_Bounds();\r
+ \r
+ // Create: Window -> ViewController-> GameView (controller takes care of rotation)\r
+ this.uiWindow = new UIWindow(UIScreen.get_MainScreen().get_Bounds()); \r
+ UIViewController uiViewController = new UIViewController() { \r
+ @Override\r
+ public void DidRotate (UIInterfaceOrientation arg0) {\r
+ // get the view size and update graphics\r
+ RectangleF bounds = getBounds(this);\r
+ graphics.width = (int)bounds.get_Width();\r
+ graphics.height = (int)bounds.get_Height();\r
+ graphics.MakeCurrent();\r
+ listener.resize(graphics.width, graphics.height);\r
+ }\r
+ @Override\r
+ public boolean ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation arg0) {\r
+ return true; // TODO: need to check if orientation is supported!!!\r
+ }\r
+ };\r
+ this.uiWindow.set_RootViewController(uiViewController);\r
+\r
+ // setup libgdx\r
this.input = new IOSInput(config);\r
- this.graphics = new IOSGraphics(bounds, this, input);\r
+ this.graphics = new IOSGraphics(getBounds(uiViewController), this, input);\r
this.files = new IOSFiles();\r
this.audio = new IOSAudio();\r
\r
Gdx.input = this.input;\r
\r
this.input.setupPeripherals();\r
- \r
- this.uiWindow = new UIWindow(bounds);\r
- this.uiWindow.Add(graphics);\r
+\r
+ // attach our view to window+controller and make it visible\r
+ uiViewController.set_View(graphics);\r
this.graphics.Run();\r
this.uiWindow.MakeKeyAndVisible();\r
Gdx.app.log("IOSApplication", "created");\r
return true;\r
}\r
\r
+ private RectangleF getBounds(UIViewController viewController) {\r
+ // or screen size (always portrait)\r
+ RectangleF bounds = UIScreen.get_MainScreen().get_Bounds();\r
+\r
+ // determine orientation and resulting width + height\r
+ UIInterfaceOrientation orientation = viewController.get_InterfaceOrientation();\r
+ int width;\r
+ int height;\r
+ switch (orientation.Value) { \r
+ case UIInterfaceOrientation.LandscapeLeft: \r
+ case UIInterfaceOrientation.LandscapeRight: \r
+ height = (int)bounds.get_Width();\r
+ width = (int)bounds.get_Height();\r
+ break;\r
+ default: \r
+ // assume portrait\r
+ width = (int)bounds.get_Width();\r
+ height = (int)bounds.get_Height();\r
+ } \r
+ Gdx.app.log("IOSApplication", "View: " + orientation.toString() + " " + width + "x" + height);\r
+ \r
+ // return resulting view size (based on orientation)\r
+ return new RectangleF(0, 0, width, height);\r
+ }\r
+ \r
@Override\r
public void OnActivated(UIApplication uiApp) {\r
Gdx.app.log("IOSApplication", "resumed");\r
import com.badlogic.gdxinvaders.screens.MainMenu;\r
\r
public class GdxInvaders extends Game {\r
+ \r
+ /** Music needs to be a class property to prevent being disposed. */\r
+ private Music music;\r
+ \r
+ \r
@Override\r
public void render () {\r
InvadersScreen currentScreen = getScreen();\r
// next screen. Ideally the screen transitions are handled\r
// in the screen itself or in a proper state machine.\r
if (currentScreen.isDone()) {\r
+ // dispose music\r
+ music.dispose();\r
+ music = null;\r
+ \r
// dispose the resources of the current screen\r
currentScreen.dispose();\r
\r
@Override\r
public void create () {\r
setScreen(new MainMenu());\r
- Music music = Gdx.audio.newMusic(Gdx.files.getFileHandle("data/8.12.mp3", FileType.Internal));\r
+ music = Gdx.audio.newMusic(Gdx.files.getFileHandle("data/8.12.mp3", FileType.Internal));\r
music.setLooping(true);\r
music.play();\r
Gdx.input.setInputProcessor(new InputAdapter() {\r