Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/udhos/fugo
fugo - fun with Go. gomobile OpenGL game
https://github.com/udhos/fugo
android android-native game gamedev golang gomobile native opengl
Last synced: about 1 month ago
JSON representation
fugo - fun with Go. gomobile OpenGL game
- Host: GitHub
- URL: https://github.com/udhos/fugo
- Owner: udhos
- License: mit
- Created: 2017-02-23T20:56:15.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2019-09-18T20:12:18.000Z (over 5 years ago)
- Last Synced: 2024-06-20T14:15:28.007Z (6 months ago)
- Topics: android, android-native, game, gamedev, golang, gomobile, native, opengl
- Language: Go
- Homepage:
- Size: 1.9 MB
- Stars: 35
- Watchers: 5
- Forks: 5
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/udhos/fugo/blob/master/LICENSE)
[![Go Report Card - invader](https://goreportcard.com/badge/github.com/udhos/fugo/invader)](https://goreportcard.com/report/github.com/udhos/fugo/invader)# fugo
fugo - fun with Go. gomobile OpenGL gameTable of Contents
=================* [QUICK START](#quick-start)
* [Requirements](#requirements)
* [Building the INVADER application](#building-the-invader-application)
* [Building the ARENA server](#building-the-arena-server)
* [How does the INVADER application locate the ARENA server?](#how-does-the-invader-application-locate-the-arena-server)
* [INVADER runtime flags](#invader-runtime-flags)
* [KNOWN ISSUES](#known-issues)Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc.go)
## QUICK START
Recipe:
go get github.com/udhos/fugo
cd ~/go/src/github.com/udhos/fugo
./build.sh## Requirements
1\. Install latest Go
There are many other ways, this is a quick recipe:
git clone github.com/udhos/update-golang
cd update-golang
sudo ./update-golang.sh2\. Install Android NDK
Download Android Studio - https://developer.android.com/studio
Unzip Android Studio:
$ tar xf /tmp/android-studio-ide-191.5791312-linux.tar.gz
Run Android Studio:
$ ~/android-studio/bin/studio.sh &
Select: Configure -> SDK Manager -> SDK Tools -> NDK
Click the Apply button.
Define SDK env vars. For example:
export ANDROID_HOME=~/Android/Sdk
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/20.0.5594570 ;# watch out the version3\. Install gomobile
Recipe:
go get golang.org/x/mobile/cmd/gomobile
gomobile version
#gomobile init -ndk $NDK ;# no longer used?4\. Install OpenGL dev libs
On Ubuntu you will need these:
sudo apt install libegl1-mesa-dev libgles2-mesa-dev libx11-dev
5\. Install alsa sound dev libs
On Ubuntu you will need this:
sudo apt install libasound2-dev
6\. Get fugo
Recipe:
go get github.com/udhos/fugo
## Building the INVADER application
7\. Build for desktop
Recipe:
go install -tags gldebug github.com/udhos/fugo/demo/invader
Hint: You can test the desktop version by running 'invader':
$ (cd demo/invader && invader slow)
The parameter 'slow' sets a very low frame rate, useful for test/debugging.
If you want smooth rendering, remove the parameter 'slow'.The subshell is used to temporarily enter the demo/invader dir in order to load assets from demo/invader/assets.
8\. Build for Android
Recipe:
gomobile build -target=android github.com/udhos/fugo/demo/invader
Hint: Use 'gomobile build -x' to see what the build is doing.
$ gomobile build -x github.com/udhos/fugo/demo/invader
9\. Push into Android device
Recipe:
gomobile install github.com/udhos/fugo/demo/invader
## Building the ARENA server
10\. Build the server
Recipe:
$ go install github.com/udhos/fugo/arena
10\. Run the server
$ (cd demo/invader && arena)
The arena server needs to load image information from demo/invader/assets.
## How does the INVADER application locate the ARENA server?
The Invader application will continously try two methods to reach the server:
a) The Invader application will send a discovery request to UDP 239.1.1.1:8888. If there is an Arena server in the LAN, it will respond reporting its TCP endpoint. This local discovery is useful for quickly deploying a local Arena server. It depends on multicasting on the local network.
b) The Invader application will try to connect to the Arena server specified in the file server.txt:
$ more demo/invader/assets/server.txt
localhost:8080The TCP endpoint hard-coded in the file server.txt is included in the APK file. You will need to rebuild and redeploy the application to change it. This option is useful for deploying public Arena server on the Internet.
## INVADER runtime flags
You can tweak the app behavior by changing these files before gomobile build:
demo/invader/assets/box.txt - bool (file_exists=true)
demo/invader/assets/server.txt - string host:port (TCP endpoint for server)
demo/invader/assets/slow.txt - bool (file_exists=true)
demo/invader/assets/trace.txt - string host:port (UDP endpoint for logs)## KNOWN ISSUES
### x/mobile: build failing when using go modules
https://github.com/golang/go/issues/27234
### Need way to hide Android status bar. Fixed: add the theme below to AndroidManifest.xml
Add this to AndroidManifest.xml:
https://github.com/golang/go/issues/12766
https://github.com/golang/go/issues/21396
### Need way to set Android app icon. Fixed: add assets/icon.png
https://github.com/golang/go/issues/9985
https://golang.org/cl/30019
### Need way to call Android API from Go.
Reverse Binding https://www.slideshare.net/takuyaueda967/mobile-apps-by-pure-go-with-reverse-binding
slides 65-67 from https://pt.slideshare.net/takuyaueda967/go-for-mobile-games
#### RunOnJVM
RunOnJVM added to gomobile:
- https://github.com/golang/go/issues/26815
- https://golang.org/cl/127758
Old info on RunOnJVM: https://gist.github.com/tenntenn/aae3d14d0df4884ac4e7
## References
### Just port a Golang game to Android
https://dev.to/ntoooop/just-port-a-golang-game-to-android--3a9f
### Korok Game Engine
https://korok.io/
https://github.com/KorokEngine/Korok
--xx--