libGDX 1.6.2 released

libGDX 1.6.2

An another release. Here are the CHANGES:

[1.6.2]
- API Change: TiledMapImageLayer now uses floats instead of ints for positioning
- API Change: Added GLFrameBuffer and FrameBufferCubemap: Framebuffer now extends GLFramebuffer, see #2933
- Updated to RoboVM 1.3.0

Update your project as usual. Also update your RoboVM Eclipse or IntelliJ IDEA plugin to 1.3.0!.

Speaking of RoboVM, we now implemented tree shaking. This makes your app a lot smaller. It also means that compile times are a lot faster now, so iteration times are lower! Go check out the RoboVM 1.3 release blog post.

Happy Coding!

Source code for Quantum, an RTS with massive unit counts


Download Quantum

Many moons ago (7 years ago), i wrote a little RTS inspired by Dyson/Eufloria. I actually contacted the Eufloria guys before doing so and offered them to write a multiplayer mode for them. They politely declined and allowed me to write a clone with MP support. So that’s what i did.

After 2 months of work, Quantum was complete. We played it a lot at work. It got around 20k downloads from around the web after making my rounds on a few websites (TIG, JGO, etc.). Eventually, interest faded away and i forgot about it.

Fast forward to today. I was thinking about writing an RTS again. I remembered Quantum and started searching for traces of it on the web. I found a video and shortly after that a fork of the original source.

I forked the fork and started reviving it. A few hours later, it’s ready for you to shame my code from 7 years ago 😀 Here are features that might interest you:

  • Multiplayer via a latency-adaptive lock-step simulation, with thousands of units, inspired by the old 1500 Archers article
  • Scripting via BeanShell, a very old but super lightweight scripting language for the JVM. Here’s the complete AI.
  • A map editor

You should NOT take the code structure as a big inspiration! Code style, architecture and especially the graphics part (mixing fixed function and programmable pipeline) are NOT good. However, there’s a lack of fully open-source games out there that are more than a simple 2D plattformer, so i thought i’d share.

If someone opens a server, let me know :)

libGDX 1.6.1 released – Build System Change!

libGDX 1.6.1

This release contains a major change to the build system. I had to change the way the iOS project handles native libraries. Up until today, the ios/build.gradle file had a two tasks, copyNatives, and updateRoboVMXML. When you import your project into an IDE or build it via the CLI, these tasks will walk through all dependencies, extract the static libraries and rewrite your robovm.xml file. That’s not really nice.

This release fixes this long standing issue. iOS native libraries, e.g. for gdx code, freetype, bullet or box2d, are now packaged using RoboVMs Jar layout for native libs. The static libraries are stored inside a jar, in the directory META-INF/robovm/ios/libs. Additionally, a small robovm.xml file is stored in META-INF/robovm/ios/robovm.xml. This file specifies the native libraries in the libs directory that RoboVM should link.

If you update an existing project to libGDX 1.6.1, you need to make a few changes to the build.gradle and ios/build.gradle files of your project!

In the root build.gradle file, you will see something like this for the iOS project:

project(":ios") {
    apply plugin: 'java'
    apply plugin: 'robovm'

    configurations { natives }

    dependencies {
        compile "org.robovm:robovm-rt:${roboVMVersion}"
        compile "org.robovm:robovm-cocoatouch:${roboVMVersion}"
        compile project(":core")
        compile "com.badlogicgames.gdx:gdx-backend-robovm:$gdxVersion"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-ios"
    }
}

You need to change the natives config name to compile, just like what we use for the normal Java dependencies.

In the ios/build.gradle file, can remove the copyNatives and updateRoboVMXML tasks and any other line that references those tasks. You should end up with something like this (modulo your main class name!):

sourceSets.main.java.srcDirs = [ "src/" ]

sourceCompatibility = '1.7'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

ext {
	mainClassName = "com.mygdx.game.IOSLauncher"
}

launchIPhoneSimulator.dependsOn build
launchIPadSimulator.dependsOn build
launchIOSDevice.dependsOn build
createIPA.dependsOn build


eclipse.project {
    name = appName + "-ios"
    natures 'org.robovm.eclipse.RoboVMNature'
}

After this changes, simply set the gdxVersion in your root build.gradle to “1.6.1” and you are done.

Here are the full CHANGES for this release:

[1.6.1]
- Added optional hostname argument to Net.newServerSocket method to allow specific ip bindings for server applications made with gdx.
- Changed the way iOS native libs are handled. Removed updateRoboVMXML and copyNatives task from ios/build.gradle. Instead natives are now packaged in jars, within the META-INF/robovm/ios folder. Additionally, a robovm.xml file is stored there that gets merged with the project's robovm.xml file by RoboVM.

ROBOPODS

In other news, if you are interested in libGDX plus iOS you should cast your vote for RoboPods. RoboPods are bindings to 3rd party libraries like Admob, Google Play Game Services and so on that we at RoboVM will officially support going forward. See this blog post, including the poll.

Happy Coding!