I have been aware of GateEngine for a while now. Unfortunately, while the demo repository contains a lot of very well documented source code (lots of code-comments!), there isn't much in the way of how-to, or traditional instruction-based documentation.
I'm starting this thread to discuss my attempt to use GateEngine to make a port of one of my earliest 2D games, Go-Tetris. I've long-since renamed the game ActionGo. You can see a trailer for ActionGo (from the last time I was remaking it in Unity) on YouTube.
I've already ported this code a few times (from its original actionscript 2.0 to first Objective-C, and then C#), so this would be a fairly easy project, if the engine were mature and well-documented.
A rough list of objectives that I'll work from:
- how to set up the project (how to actually get started)
- how to draw in code – UI elements & 2D game elements
- how to implement controller support and fall-back to keyboard input
- how to create an executable for each platform
- target platforms: mac desktop, & linux desktop first, then web, Windows, & iOS, not necessarily in that order
- Ideally, this would use github actions (or some similar CI workflow) to create automated builds
- game architecture (GateEngine seems pretty architecture agnostic, but we'll see)
- how to manage your window in support of various screen resolutions, maybe?
- stretch goals: steamworks integration
In short, I'm interested in cross-platform game development, written in Swift. GateEngine claims to support a ton of platforms, including Mac, and Linux desktop, which are at the top of my list. HTML5 and iOS are close behind.
For some context, I'm primarily a contract iOS developer. My first app was in the app store in ~2009. I definitely loved Objective-C, (at first probably because it wasn't PHP), but once I began using Swift (around the time 4.0 was released) I stopped really wanting to write code in any other language. (Incidentally, you can find my games at AbstractPuzzle.com, and my blog – where I may cross-post this – at Chesstris.com.)
I've always been quite interested in cross-platform game development. (Go-Tetris was originally written in Flash because the web was available everywhere!) I've written games (or at least experimental projects) in dozens of languages and environments trying to find a good cross-platform experience. I even did one project in ~2010 with a friend in C++ using raw openGLES calls. Our plan was to target iOS and Android.
Around 2015 I started seeing hints that VR was going to be a big deal, so I went "all in" on learning Unity, and most of my contract work was even in Unity for a few years there. But I never really loved using Unity. I'm a programmer first and foremost, and the GUI for game development is kind of annoying to me. After I started writing and preferring Swift, I spent quite a bit of time exploring code-first game engines, including Swift bindings and/or wrappers for SDL and Raylib, (both of which have many seemingly abandoned Swift projects on github).
I am also aware of SwiftGodot, but I'm not sure it's mature enough yet, and also, while I love the idea of Godot, it's more of a game development GUI (like Unity), and not the code-first panacea I've been searching for.
I have seen a few other purpose-built Swift game engines on Github (FireBlade was the last one I tried out with any seriousness), but I've not seen any that weren't abandoned after an example project or two. From what I can tell, GateEngine is already much farther along than most of them.
I'll split this up by topic. (Hopefully not every post will be as long as these first few.)