From 9dfe41b8294fb26e97061e40c82a34969ae82a90 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Mon, 21 Dec 2020 08:59:10 +0900 Subject: [PATCH 01/36] issue #1 add iOS configuration. --- dub.json | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/dub.json b/dub.json index b023981..dda1d98 100644 --- a/dub.json +++ b/dub.json @@ -73,6 +73,24 @@ "bindbc-opengl": "dynamicBC", "bindbc-sdl": "dynamicBC" } + }, + { + "name": "iOS", + "targetType": "staticLibrary", + "dependencies": { + "bindbc-sdl": "~>0.19.0" + }, + "versions": [ + "IOS", + "BindBC", + "GL_32", + "GL_Batching", + "SDL_Mixer", + "InputBackendSDL" + ], + "subConfigurations": { + "bindbc-sdl": "staticBC" + } } ] -} \ No newline at end of file +} From e11fb73a78802b764414956f324a849f15e3875c Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Mon, 21 Dec 2020 09:00:22 +0900 Subject: [PATCH 02/36] issue #1 setup OpenGL static declration for iOS. --- src/abagames/util/gl.d | 29 +++++++++++++++++++++-------- src/abagames/util/sdl/screen3d.d | 6 ++++-- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/abagames/util/gl.d b/src/abagames/util/gl.d index 090f9e8..8f04cfc 100644 --- a/src/abagames/util/gl.d +++ b/src/abagames/util/gl.d @@ -1,7 +1,12 @@ module abagames.util.gl; import std.stdio; -version(BindBC) { import bindbc.opengl; } + +version(BindBC) +{ + version(IOS) { version = STATIC_GL; } + else { import bindbc.opengl; } +} import abagames.util.conv; import abagames.util.math; @@ -996,7 +1001,7 @@ version(GL_Batching) { } } -version(WASM) { +version(STATIC_GL) { extern (C) { version(X86) { int glGetAttribLocation(uint, const(char)*) { return 0; } @@ -1030,13 +1035,21 @@ version(WASM) { void glVertexAttribPointer(uint, int, uint, ubyte, int, const(void)*) {} void glViewport(int, int, int, int) {} } else { - int glGetAttribLocationWithLen(uint, const(char*), uint); - int glGetAttribLocation(uint p, string n) { - return glGetAttribLocationWithLen(p, n.ptr, n.length); + version(IOS) + { + int glGetAttribLocation(uint, const(char*)); + int glGetUniformLocation(uint, const(char*)); } - int glGetUniformLocationWithLen(uint, const(char*), uint); - int glGetUniformLocation(uint p, string n) { - return glGetUniformLocationWithLen(p, n.ptr, n.length); + else + { + int glGetAttribLocationWithLen(uint, const(char*), uint); + int glGetAttribLocation(uint p, string n) { + return glGetAttribLocationWithLen(p, n.ptr, n.length); + } + int glGetUniformLocationWithLen(uint, const(char*), uint); + int glGetUniformLocation(uint p, string n) { + return glGetUniformLocationWithLen(p, n.ptr, n.length); + } } uint glCreateProgram(); uint glCreateShader(uint); diff --git a/src/abagames/util/sdl/screen3d.d b/src/abagames/util/sdl/screen3d.d index d78ba09..aa72706 100644 --- a/src/abagames/util/sdl/screen3d.d +++ b/src/abagames/util/sdl/screen3d.d @@ -10,7 +10,9 @@ version(BindBC) { import std.stdio; import std.string; import bindbc.sdl; - import bindbc.opengl; + + version(IOS) {} + else { import bindbc.opengl; } } import abagames.util.gl; import abagames.util.vector; @@ -207,4 +209,4 @@ public class Screen3D: Screen { } } -} \ No newline at end of file +} From 8d04594cb6d36d71b12ecdc0ef752aeed2fc3be5 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Mon, 21 Dec 2020 20:43:41 +0900 Subject: [PATCH 03/36] issue #1 fix compile errors. --- dub.json | 3 ++- src/abagames/util/bulletml/parser.d | 4 ++-- src/abagames/util/bulletml/xml.d | 2 +- src/abagames/util/gl.d | 16 ++++++++++------ src/abagames/util/sdl/screen3d.d | 23 ++++++++++++++++------- src/abagames/util/sdl/sound.d | 24 +++++++++++++++++------- 6 files changed, 48 insertions(+), 24 deletions(-) diff --git a/dub.json b/dub.json index dda1d98..e8f6d3b 100644 --- a/dub.json +++ b/dub.json @@ -86,7 +86,8 @@ "GL_32", "GL_Batching", "SDL_Mixer", - "InputBackendSDL" + "InputBackendSDL", + "BindGL_Static" ], "subConfigurations": { "bindbc-sdl": "staticBC" diff --git a/src/abagames/util/bulletml/parser.d b/src/abagames/util/bulletml/parser.d index ccce760..a613292 100644 --- a/src/abagames/util/bulletml/parser.d +++ b/src/abagames/util/bulletml/parser.d @@ -59,7 +59,7 @@ protected: return false; } if (c != v) { - backup(idx + 1); + backup(cast(int)(idx + 1)); return false; } } @@ -202,4 +202,4 @@ public: } return 0; } -} \ No newline at end of file +} diff --git a/src/abagames/util/bulletml/xml.d b/src/abagames/util/bulletml/xml.d index 776fc0d..801eafc 100644 --- a/src/abagames/util/bulletml/xml.d +++ b/src/abagames/util/bulletml/xml.d @@ -47,7 +47,7 @@ Element[] parseXML(string s) { search: foreach (idx, c; value) { foreach (sc; space) { if (sc == c) { - spaceIndex = idx; + spaceIndex = cast(int) idx; break search; } } diff --git a/src/abagames/util/gl.d b/src/abagames/util/gl.d index 8f04cfc..9e2150e 100644 --- a/src/abagames/util/gl.d +++ b/src/abagames/util/gl.d @@ -4,9 +4,13 @@ import std.stdio; version(BindBC) { - version(IOS) { version = STATIC_GL; } + version(BindGL_Static) { version = staticGL; } else { import bindbc.opengl; } } +else version(WASM) +{ + version = staticGL; +} import abagames.util.conv; import abagames.util.math; @@ -443,7 +447,7 @@ version(GL_Batching) { auto vsIndex = glCreateShader(GL.VERTEX_SHADER); { auto sourcePtr = cast(char*)vsSource.ptr; - int sourceLen = vsSource.length; + int sourceLen = cast(int) vsSource.length; glShaderSource(vsIndex, 1, &sourcePtr, &sourceLen); glCompileShader(vsIndex); glGetShaderiv(vsIndex, GL.COMPILE_STATUS, &status); @@ -456,7 +460,7 @@ version(GL_Batching) { auto fsIndex = glCreateShader(GL.FRAGMENT_SHADER); { auto sourcePtr = cast(char*)fsSource.ptr; - int sourceLen = fsSource.length; + int sourceLen = cast(int) fsSource.length; glShaderSource(fsIndex, 1, &sourcePtr, &sourceLen); glCompileShader(fsIndex); glGetShaderiv(fsIndex, GL.COMPILE_STATUS, &status); @@ -926,7 +930,7 @@ version(GL_Batching) { glBindVertexArray(triArrayIndex); glBindBuffer(GL.ARRAY_BUFFER, triBufferIndex); - int size = currentTriCount * Vertex.sizeof; + int size = cast(int)(currentTriCount * Vertex.sizeof); glBufferData(GL.ARRAY_BUFFER, size, null, GL.STREAM_DRAW); glBufferData(GL.ARRAY_BUFFER, size, triangles.ptr, GL.STREAM_DRAW); @@ -944,7 +948,7 @@ version(GL_Batching) { glBindVertexArray(lineArrayIndex); glBindBuffer(GL.ARRAY_BUFFER, lineBufferIndex); - int size = currentLineCount * Vertex.sizeof; + int size = cast(int)(currentLineCount * Vertex.sizeof); glBufferData(GL.ARRAY_BUFFER, size, null, GL.STREAM_DRAW); glBufferData(GL.ARRAY_BUFFER, size, lines.ptr, GL.STREAM_DRAW); @@ -1001,7 +1005,7 @@ version(GL_Batching) { } } -version(STATIC_GL) { +version(staticGL) { extern (C) { version(X86) { int glGetAttribLocation(uint, const(char)*) { return 0; } diff --git a/src/abagames/util/sdl/screen3d.d b/src/abagames/util/sdl/screen3d.d index aa72706..3302ea7 100644 --- a/src/abagames/util/sdl/screen3d.d +++ b/src/abagames/util/sdl/screen3d.d @@ -11,7 +11,7 @@ version(BindBC) { import std.string; import bindbc.sdl; - version(IOS) {} + version(BindGL_Static) { } else { import bindbc.opengl; } } import abagames.util.gl; @@ -41,9 +41,13 @@ public class Screen3D: Screen { protected abstract void init(); public void initWindow() { - if (loadSDL() != sdlSupport) { - throw new SDLInitFailedException("Unable to load SDL"); + version (BindSDL_Static) {} + else { + if (loadSDL() != sdlSupport) { + throw new SDLInitFailedException("Unable to load SDL"); + } } + // Initialize SDL. if (SDL_Init(SDL_INIT_VIDEO) < 0) { throw new SDLInitFailedException("Unable to initialize SDL: " ~ to!string(SDL_GetError())); @@ -66,11 +70,16 @@ version(GL_32) { throw new SDLInitFailedException("Unable to create SDL screen: " ~ to!string(SDL_GetError())); } context = SDL_GL_CreateContext(window); - auto glStatus = loadOpenGL(); - if (!isOpenGLLoaded) { - throw new SDLInitFailedException("Unable to load OpenGL"); + + version(BindGL_Static) {} + else { + auto glStatus = loadOpenGL(); + if (!isOpenGLLoaded) { + throw new SDLInitFailedException("Unable to load OpenGL"); + } + writeln("OpenGL Status: ", glStatus); } - writeln("OpenGL Status: ", glStatus); + GL.init(); GL.viewport(0, 0, width, height); GL.clearColor(0.0f, 0.0f, 0.0f, 0.0f); diff --git a/src/abagames/util/sdl/sound.d b/src/abagames/util/sdl/sound.d index 6538cc2..81a0c94 100644 --- a/src/abagames/util/sdl/sound.d +++ b/src/abagames/util/sdl/sound.d @@ -32,19 +32,29 @@ public class SoundManager { public static void init() { if (noSound) return; - if (loadSDL() != sdlSupport) { - noSound = true; - return; + + version (BindSDL_Static) {} + else { + if (loadSDL() != sdlSupport) { + noSound = true; + return; + } } + if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) { noSound = true; throw new SDLInitFailedException ("Unable to initialize SDL_AUDIO: " ~ convString(SDL_GetError())); } - if (loadSDLMixer() != sdlMixerSupport) { - noSound = true; - return; + + version (BindSDL_Static) {} + else { + if (loadSDLMixer() != sdlMixerSupport) { + noSound = true; + return; + } } + int audio_rate = 44100; Uint16 audio_format = AUDIO_S16; int audio_channels = 1; @@ -223,4 +233,4 @@ public: } } -} \ No newline at end of file +} From 4b84ea8d9794b755ff7804c13ba7a190393646d9 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Mon, 21 Dec 2020 21:20:00 +0900 Subject: [PATCH 04/36] issue #3 add build shell for iOS Universal Library. --- build-ios.sh | 13 +++++++++++++ ldc2.conf | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100755 build-ios.sh diff --git a/build-ios.sh b/build-ios.sh new file mode 100755 index 0000000..38308e4 --- /dev/null +++ b/build-ios.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +dub build --arch=arm64-apple-ios --config=iOS +mv dist/libtt.a dist/libtt-ios-arm64.a + +dub build --arch=x86_64-apple-ios --config=iOS +mv dist/libtt.a dist/libtt-ios-x86_64.a + +xcrun -sdk iphoneos lipo -create \ + dist/libtt-ios-arm64.a \ + dist/libtt-ios-x86_64.a \ + -output dist/libtt-ios.a + diff --git a/ldc2.conf b/ldc2.conf index fe85114..e86a4bd 100644 --- a/ldc2.conf +++ b/ldc2.conf @@ -14,4 +14,49 @@ default: lib-dirs = []; // default rpath when linking against the shared default libs rpath = ""; -}; \ No newline at end of file +}; + +// for iOS configurations. + +"arm64-apple-ios": +{ + switches = [ + "-defaultlib=phobos2-ldc,druntime-ldc", + "-link-defaultlib-shared=false", + "-fvisibility=hidden", + "-Xcc=-target", + "-Xcc=arm64-apple-ios12.0", + "-Xcc=-miphoneos-version-min=12.0", + "-Xcc=-isysroot", + "-Xcc=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk", + ]; + post-switches = [ + "-I%%ldcbinarypath%%/../import", + ]; + lib-dirs = [ + "%%ldcbinarypath%%/../lib-ios-arm64", + ]; + rpath = "%%ldcbinarypath%%/../lib-ios-arm64"; +}; + +"x86_64-apple-ios": +{ + switches = [ + "-defaultlib=phobos2-ldc,druntime-ldc", + "-link-defaultlib-shared=false", + "-fvisibility=hidden", + "-Xcc=-target", + "-Xcc=x86_64-apple-ios12.0", + "-Xcc=-miphoneos-version-min=12.0", + "-Xcc=-isysroot", + "-Xcc=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk", + ]; + post-switches = [ + "-I%%ldcbinarypath%%/../import", + ]; + lib-dirs = [ + "%%ldcbinarypath%%/../lib-ios-x86_64", + ]; + rpath = "%%ldcbinarypath%%/../lib-ios-x86_64"; +}; + From 44c2b2d4bb69e9fcf2988863b46e9faed880ea88 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Mon, 21 Dec 2020 21:51:02 +0900 Subject: [PATCH 05/36] issue #5 add download and build libraries shell. --- ios-libs/.gitignore | 5 ++ ios-libs/download-and-build-libraries.sh | 72 ++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 ios-libs/.gitignore create mode 100755 ios-libs/download-and-build-libraries.sh diff --git a/ios-libs/.gitignore b/ios-libs/.gitignore new file mode 100644 index 0000000..415aab2 --- /dev/null +++ b/ios-libs/.gitignore @@ -0,0 +1,5 @@ +/SDL +/SDL2-* +/SDL2_mixer-* +/*.a + diff --git a/ios-libs/download-and-build-libraries.sh b/ios-libs/download-and-build-libraries.sh new file mode 100755 index 0000000..fe38258 --- /dev/null +++ b/ios-libs/download-and-build-libraries.sh @@ -0,0 +1,72 @@ +#!/bin/sh + +cd `dirname $0` + +LIBS_DIR=`pwd` +SDL2_VERSION=2.0.12 +SDL2_BASE_NAME=SDL2-${SDL2_VERSION} + +SDL2_MIXER_VERSION=2.0.4 +SDL2_MIXER_BASE_NAME=SDL2_mixer-${SDL2_MIXER_VERSION} + +curl -L -O https://www.libsdl.org/release/${SDL2_BASE_NAME}.tar.gz +tar xvzf ./${SDL2_BASE_NAME}.tar.gz +rm -f ./${SDL2_BASE_NAME}.tar.gz + +xcodebuild \ + -project ./${SDL2_BASE_NAME}/Xcode-iOS/SDL/SDL.xcodeproj \ + -scheme libSDL-iOS \ + -sdk iphoneos \ + clean build \ + CONFIGURATION_BUILD_DIR=${LIBS_DIR} \ + ARCHS=arm64 \ + ONLY_ACTIVE_ARCH=NO +mv ${LIBS_DIR}/libSDL2.a ${LIBS_DIR}/libSDL2-arm64.a + +xcodebuild \ + -project ./${SDL2_BASE_NAME}/Xcode-iOS/SDL/SDL.xcodeproj \ + -scheme libSDL-iOS \ + -sdk iphonesimulator \ + clean build \ + CONFIGURATION_BUILD_DIR=${LIBS_DIR} \ + ARCHS=x86_64 \ + ONLY_ACTIVE_ARCH=NO +mv ${LIBS_DIR}/libSDL2.a ${LIBS_DIR}/libSDL2-x86_64.a + +xcrun -sdk iphoneos lipo -create \ + ${LIBS_DIR}/libSDL2-arm64.a \ + ${LIBS_DIR}/libSDL2-x86_64.a \ + -output ${LIBS_DIR}/libSDL2-ios.a + +mkdir -p ./SDL/include +cp -r ./${SDL2_BASE_NAME}/include/* ./SDL/include + +curl -L -O https://www.libsdl.org/projects/SDL_mixer/release/${SDL2_MIXER_BASE_NAME}.tar.gz +tar xvzf ./${SDL2_MIXER_BASE_NAME}.tar.gz +rm -f ./${SDL2_MIXER_BASE_NAME}.tar.gz + +xcodebuild \ + -project ./${SDL2_MIXER_BASE_NAME}/Xcode-iOS/SDL_mixer.xcodeproj \ + -scheme libSDL_mixer-iOS \ + -sdk iphoneos \ + clean build \ + CONFIGURATION_BUILD_DIR=${LIBS_DIR} \ + ARCHS=arm64 \ + ONLY_ACTIVE_ARCH=NO +mv ${LIBS_DIR}/libSDL2_mixer.a ${LIBS_DIR}/libSDL2_mixer-arm64.a + +xcodebuild \ + -project ./${SDL2_MIXER_BASE_NAME}/Xcode-iOS/SDL_mixer.xcodeproj \ + -scheme libSDL_mixer-iOS \ + -sdk iphonesimulator \ + clean build \ + CONFIGURATION_BUILD_DIR=${LIBS_DIR} \ + ARCHS=x86_64 \ + ONLY_ACTIVE_ARCH=NO +mv ${LIBS_DIR}/libSDL2_mixer.a ${LIBS_DIR}/libSDL2_mixer-x86_64.a + +xcrun -sdk iphoneos lipo -create \ + ${LIBS_DIR}/libSDL2_mixer-arm64.a \ + ${LIBS_DIR}/libSDL2_mixer-x86_64.a \ + -output ${LIBS_DIR}/libSDL2_mixer-ios.a + From 2eebbdbf10fe4cbb4bcd69aff5fcf33fb18f8381 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Mon, 21 Dec 2020 21:53:06 +0900 Subject: [PATCH 06/36] issue #5 split shells. --- ios-libs/download-and-build-SDL2.sh | 40 +++++++++++++++++++ ...es.sh => download-and-build-SDL2_mixer.sh} | 34 ---------------- 2 files changed, 40 insertions(+), 34 deletions(-) create mode 100755 ios-libs/download-and-build-SDL2.sh rename ios-libs/{download-and-build-libraries.sh => download-and-build-SDL2_mixer.sh} (52%) diff --git a/ios-libs/download-and-build-SDL2.sh b/ios-libs/download-and-build-SDL2.sh new file mode 100755 index 0000000..9fd7146 --- /dev/null +++ b/ios-libs/download-and-build-SDL2.sh @@ -0,0 +1,40 @@ +#!/bin/sh + +cd `dirname $0` + +LIBS_DIR=`pwd` +SDL2_VERSION=2.0.12 +SDL2_BASE_NAME=SDL2-${SDL2_VERSION} + +curl -L -O https://www.libsdl.org/release/${SDL2_BASE_NAME}.tar.gz +tar xvzf ./${SDL2_BASE_NAME}.tar.gz +rm -f ./${SDL2_BASE_NAME}.tar.gz + +xcodebuild \ + -project ./${SDL2_BASE_NAME}/Xcode-iOS/SDL/SDL.xcodeproj \ + -scheme libSDL-iOS \ + -sdk iphoneos \ + clean build \ + CONFIGURATION_BUILD_DIR=${LIBS_DIR} \ + ARCHS=arm64 \ + ONLY_ACTIVE_ARCH=NO +mv ${LIBS_DIR}/libSDL2.a ${LIBS_DIR}/libSDL2-arm64.a + +xcodebuild \ + -project ./${SDL2_BASE_NAME}/Xcode-iOS/SDL/SDL.xcodeproj \ + -scheme libSDL-iOS \ + -sdk iphonesimulator \ + clean build \ + CONFIGURATION_BUILD_DIR=${LIBS_DIR} \ + ARCHS=x86_64 \ + ONLY_ACTIVE_ARCH=NO +mv ${LIBS_DIR}/libSDL2.a ${LIBS_DIR}/libSDL2-x86_64.a + +xcrun -sdk iphoneos lipo -create \ + ${LIBS_DIR}/libSDL2-arm64.a \ + ${LIBS_DIR}/libSDL2-x86_64.a \ + -output ${LIBS_DIR}/libSDL2-ios.a + +mkdir -p ./SDL/include +cp -r ./${SDL2_BASE_NAME}/include/* ./SDL/include + diff --git a/ios-libs/download-and-build-libraries.sh b/ios-libs/download-and-build-SDL2_mixer.sh similarity index 52% rename from ios-libs/download-and-build-libraries.sh rename to ios-libs/download-and-build-SDL2_mixer.sh index fe38258..f2a4a1d 100755 --- a/ios-libs/download-and-build-libraries.sh +++ b/ios-libs/download-and-build-SDL2_mixer.sh @@ -3,44 +3,10 @@ cd `dirname $0` LIBS_DIR=`pwd` -SDL2_VERSION=2.0.12 -SDL2_BASE_NAME=SDL2-${SDL2_VERSION} SDL2_MIXER_VERSION=2.0.4 SDL2_MIXER_BASE_NAME=SDL2_mixer-${SDL2_MIXER_VERSION} -curl -L -O https://www.libsdl.org/release/${SDL2_BASE_NAME}.tar.gz -tar xvzf ./${SDL2_BASE_NAME}.tar.gz -rm -f ./${SDL2_BASE_NAME}.tar.gz - -xcodebuild \ - -project ./${SDL2_BASE_NAME}/Xcode-iOS/SDL/SDL.xcodeproj \ - -scheme libSDL-iOS \ - -sdk iphoneos \ - clean build \ - CONFIGURATION_BUILD_DIR=${LIBS_DIR} \ - ARCHS=arm64 \ - ONLY_ACTIVE_ARCH=NO -mv ${LIBS_DIR}/libSDL2.a ${LIBS_DIR}/libSDL2-arm64.a - -xcodebuild \ - -project ./${SDL2_BASE_NAME}/Xcode-iOS/SDL/SDL.xcodeproj \ - -scheme libSDL-iOS \ - -sdk iphonesimulator \ - clean build \ - CONFIGURATION_BUILD_DIR=${LIBS_DIR} \ - ARCHS=x86_64 \ - ONLY_ACTIVE_ARCH=NO -mv ${LIBS_DIR}/libSDL2.a ${LIBS_DIR}/libSDL2-x86_64.a - -xcrun -sdk iphoneos lipo -create \ - ${LIBS_DIR}/libSDL2-arm64.a \ - ${LIBS_DIR}/libSDL2-x86_64.a \ - -output ${LIBS_DIR}/libSDL2-ios.a - -mkdir -p ./SDL/include -cp -r ./${SDL2_BASE_NAME}/include/* ./SDL/include - curl -L -O https://www.libsdl.org/projects/SDL_mixer/release/${SDL2_MIXER_BASE_NAME}.tar.gz tar xvzf ./${SDL2_MIXER_BASE_NAME}.tar.gz rm -f ./${SDL2_MIXER_BASE_NAME}.tar.gz From ac6f4adfb97cb212255445dcf695057f418c999f Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Tue, 22 Dec 2020 00:08:56 +0900 Subject: [PATCH 07/36] issue #5 add bindbc-sdl submodule. --- .gitmodules | 3 +++ ios-libs/bindbc-sdl | 1 + ios-libs/build-bindbc-sdl.sh | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 .gitmodules create mode 160000 ios-libs/bindbc-sdl create mode 100755 ios-libs/build-bindbc-sdl.sh diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..4216a97 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "ios-libs/bindbc-sdl"] + path = ios-libs/bindbc-sdl + url = https://github.com/BindBC/bindbc-sdl.git diff --git a/ios-libs/bindbc-sdl b/ios-libs/bindbc-sdl new file mode 160000 index 0000000..ed061ab --- /dev/null +++ b/ios-libs/bindbc-sdl @@ -0,0 +1 @@ +Subproject commit ed061ab6fe6d49af390a91a9fd30db2a3815adc2 diff --git a/ios-libs/build-bindbc-sdl.sh b/ios-libs/build-bindbc-sdl.sh new file mode 100755 index 0000000..ee5ce78 --- /dev/null +++ b/ios-libs/build-bindbc-sdl.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +cd `dirname $0` + +LIBS_DIR=`pwd` + +cd ${LIBS_DIR}/bindbc-sdl +dub build --arch=arm64-apple-ios --config=staticBC +mv lib/libBindBC_SDL.a ${LIBS_DIR}/libBindBC_SDL-arm64.a + +dub build --arch=x86_64-apple-ios --config=staticBC +mv lib/libBindBC_SDL.a ${LIBS_DIR}/libBindBC_SDL-x86_64.a + +xcrun -sdk iphoneos lipo -create \ + ${LIBS_DIR}/libBindBC_SDL-arm64.a \ + ${LIBS_DIR}/libBindBC_SDL-x86_64.a \ + -output ${LIBS_DIR}/libBindBC_SDL-ios.a + From 87aa1ea9181bba5699b292eefe4779666f5e9e6c Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Tue, 22 Dec 2020 00:20:51 +0900 Subject: [PATCH 08/36] issue #5 remove lipo. --- ios-libs/build-bindbc-sdl.sh | 7 ++----- ios-libs/download-and-build-SDL2.sh | 5 ----- ios-libs/download-and-build-SDL2_mixer.sh | 5 ----- 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/ios-libs/build-bindbc-sdl.sh b/ios-libs/build-bindbc-sdl.sh index ee5ce78..9771bf2 100755 --- a/ios-libs/build-bindbc-sdl.sh +++ b/ios-libs/build-bindbc-sdl.sh @@ -4,6 +4,8 @@ cd `dirname $0` LIBS_DIR=`pwd` +git submodule update + cd ${LIBS_DIR}/bindbc-sdl dub build --arch=arm64-apple-ios --config=staticBC mv lib/libBindBC_SDL.a ${LIBS_DIR}/libBindBC_SDL-arm64.a @@ -11,8 +13,3 @@ mv lib/libBindBC_SDL.a ${LIBS_DIR}/libBindBC_SDL-arm64.a dub build --arch=x86_64-apple-ios --config=staticBC mv lib/libBindBC_SDL.a ${LIBS_DIR}/libBindBC_SDL-x86_64.a -xcrun -sdk iphoneos lipo -create \ - ${LIBS_DIR}/libBindBC_SDL-arm64.a \ - ${LIBS_DIR}/libBindBC_SDL-x86_64.a \ - -output ${LIBS_DIR}/libBindBC_SDL-ios.a - diff --git a/ios-libs/download-and-build-SDL2.sh b/ios-libs/download-and-build-SDL2.sh index 9fd7146..f664d6a 100755 --- a/ios-libs/download-and-build-SDL2.sh +++ b/ios-libs/download-and-build-SDL2.sh @@ -30,11 +30,6 @@ xcodebuild \ ONLY_ACTIVE_ARCH=NO mv ${LIBS_DIR}/libSDL2.a ${LIBS_DIR}/libSDL2-x86_64.a -xcrun -sdk iphoneos lipo -create \ - ${LIBS_DIR}/libSDL2-arm64.a \ - ${LIBS_DIR}/libSDL2-x86_64.a \ - -output ${LIBS_DIR}/libSDL2-ios.a - mkdir -p ./SDL/include cp -r ./${SDL2_BASE_NAME}/include/* ./SDL/include diff --git a/ios-libs/download-and-build-SDL2_mixer.sh b/ios-libs/download-and-build-SDL2_mixer.sh index f2a4a1d..f7a9fec 100755 --- a/ios-libs/download-and-build-SDL2_mixer.sh +++ b/ios-libs/download-and-build-SDL2_mixer.sh @@ -31,8 +31,3 @@ xcodebuild \ ONLY_ACTIVE_ARCH=NO mv ${LIBS_DIR}/libSDL2_mixer.a ${LIBS_DIR}/libSDL2_mixer-x86_64.a -xcrun -sdk iphoneos lipo -create \ - ${LIBS_DIR}/libSDL2_mixer-arm64.a \ - ${LIBS_DIR}/libSDL2_mixer-x86_64.a \ - -output ${LIBS_DIR}/libSDL2_mixer-ios.a - From 8bff93d1e62a6389d83c4d12e1ff9d7aeda50e09 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Tue, 22 Dec 2020 00:22:09 +0900 Subject: [PATCH 09/36] issue #5 rename shells. --- .../{download-and-build-SDL2.sh => 01_download-and-build-SDL2.sh} | 0 ...nd-build-SDL2_mixer.sh => 02_download-and-build-SDL2_mixer.sh} | 0 ios-libs/{build-bindbc-sdl.sh => 03_build-bindbc-sdl.sh} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename ios-libs/{download-and-build-SDL2.sh => 01_download-and-build-SDL2.sh} (100%) rename ios-libs/{download-and-build-SDL2_mixer.sh => 02_download-and-build-SDL2_mixer.sh} (100%) rename ios-libs/{build-bindbc-sdl.sh => 03_build-bindbc-sdl.sh} (100%) diff --git a/ios-libs/download-and-build-SDL2.sh b/ios-libs/01_download-and-build-SDL2.sh similarity index 100% rename from ios-libs/download-and-build-SDL2.sh rename to ios-libs/01_download-and-build-SDL2.sh diff --git a/ios-libs/download-and-build-SDL2_mixer.sh b/ios-libs/02_download-and-build-SDL2_mixer.sh similarity index 100% rename from ios-libs/download-and-build-SDL2_mixer.sh rename to ios-libs/02_download-and-build-SDL2_mixer.sh diff --git a/ios-libs/build-bindbc-sdl.sh b/ios-libs/03_build-bindbc-sdl.sh similarity index 100% rename from ios-libs/build-bindbc-sdl.sh rename to ios-libs/03_build-bindbc-sdl.sh From c8694a9470bd60230b156bcad21d245ce10268c5 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Tue, 22 Dec 2020 00:30:34 +0900 Subject: [PATCH 10/36] issue #7 add Xcode project. --- ios-project/tt/.gitignore | 1 + ios-project/tt/tt.xcodeproj/project.pbxproj | 302 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 ++++++ .../tt/tt/Assets.xcassets/Contents.json | 6 + ios-project/tt/tt/Info.plist | 66 ++++ ios-project/tt/tt/main.m | 18 ++ 9 files changed, 517 insertions(+) create mode 100644 ios-project/tt/.gitignore create mode 100644 ios-project/tt/tt.xcodeproj/project.pbxproj create mode 100644 ios-project/tt/tt.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios-project/tt/tt.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios-project/tt/tt/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 ios-project/tt/tt/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios-project/tt/tt/Assets.xcassets/Contents.json create mode 100644 ios-project/tt/tt/Info.plist create mode 100644 ios-project/tt/tt/main.m diff --git a/ios-project/tt/.gitignore b/ios-project/tt/.gitignore new file mode 100644 index 0000000..c545112 --- /dev/null +++ b/ios-project/tt/.gitignore @@ -0,0 +1 @@ +xcuserdata/ diff --git a/ios-project/tt/tt.xcodeproj/project.pbxproj b/ios-project/tt/tt.xcodeproj/project.pbxproj new file mode 100644 index 0000000..47efe3d --- /dev/null +++ b/ios-project/tt/tt.xcodeproj/project.pbxproj @@ -0,0 +1,302 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + A577D0972590F611008D5F5E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A577D0962590F611008D5F5E /* Assets.xcassets */; }; + A577D09D2590F611008D5F5E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A577D09C2590F611008D5F5E /* main.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + A577D0872590F610008D5F5E /* tt.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tt.app; sourceTree = BUILT_PRODUCTS_DIR; }; + A577D0962590F611008D5F5E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + A577D09B2590F611008D5F5E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A577D09C2590F611008D5F5E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + A577D0842590F610008D5F5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + A577D07E2590F60F008D5F5E = { + isa = PBXGroup; + children = ( + A577D0892590F610008D5F5E /* tt */, + A577D0882590F610008D5F5E /* Products */, + ); + sourceTree = ""; + }; + A577D0882590F610008D5F5E /* Products */ = { + isa = PBXGroup; + children = ( + A577D0872590F610008D5F5E /* tt.app */, + ); + name = Products; + sourceTree = ""; + }; + A577D0892590F610008D5F5E /* tt */ = { + isa = PBXGroup; + children = ( + A577D0962590F611008D5F5E /* Assets.xcassets */, + A577D09B2590F611008D5F5E /* Info.plist */, + A577D09C2590F611008D5F5E /* main.m */, + ); + path = tt; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + A577D0862590F610008D5F5E /* tt */ = { + isa = PBXNativeTarget; + buildConfigurationList = A577D0A02590F611008D5F5E /* Build configuration list for PBXNativeTarget "tt" */; + buildPhases = ( + A577D0832590F610008D5F5E /* Sources */, + A577D0842590F610008D5F5E /* Frameworks */, + A577D0852590F610008D5F5E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = tt; + productName = tt; + productReference = A577D0872590F610008D5F5E /* tt.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + A577D07F2590F610008D5F5E /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1230; + TargetAttributes = { + A577D0862590F610008D5F5E = { + CreatedOnToolsVersion = 12.3; + }; + }; + }; + buildConfigurationList = A577D0822590F610008D5F5E /* Build configuration list for PBXProject "tt" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = A577D07E2590F60F008D5F5E; + productRefGroup = A577D0882590F610008D5F5E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + A577D0862590F610008D5F5E /* tt */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + A577D0852590F610008D5F5E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A577D0972590F611008D5F5E /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + A577D0832590F610008D5F5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A577D09D2590F611008D5F5E /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + A577D09E2590F611008D5F5E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.3; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + A577D09F2590F611008D5F5E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.3; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + A577D0A12590F611008D5F5E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = tt/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.tt; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + A577D0A22590F611008D5F5E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = tt/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.tt; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + A577D0822590F610008D5F5E /* Build configuration list for PBXProject "tt" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A577D09E2590F611008D5F5E /* Debug */, + A577D09F2590F611008D5F5E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A577D0A02590F611008D5F5E /* Build configuration list for PBXNativeTarget "tt" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A577D0A12590F611008D5F5E /* Debug */, + A577D0A22590F611008D5F5E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = A577D07F2590F610008D5F5E /* Project object */; +} diff --git a/ios-project/tt/tt.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios-project/tt/tt.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/ios-project/tt/tt.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios-project/tt/tt.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios-project/tt/tt.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios-project/tt/tt.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios-project/tt/tt/Assets.xcassets/AccentColor.colorset/Contents.json b/ios-project/tt/tt/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/ios-project/tt/tt/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios-project/tt/tt/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios-project/tt/tt/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/ios-project/tt/tt/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios-project/tt/tt/Assets.xcassets/Contents.json b/ios-project/tt/tt/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/ios-project/tt/tt/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios-project/tt/tt/Info.plist b/ios-project/tt/tt/Info.plist new file mode 100644 index 0000000..72bf2c4 --- /dev/null +++ b/ios-project/tt/tt/Info.plist @@ -0,0 +1,66 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + SceneDelegate + UISceneStoryboardFile + Main + + + + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/ios-project/tt/tt/main.m b/ios-project/tt/tt/main.m new file mode 100644 index 0000000..1c4bee5 --- /dev/null +++ b/ios-project/tt/tt/main.m @@ -0,0 +1,18 @@ +// +// main.m +// tt +// +// Created by 中村暁 on 2020/12/22. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + NSString * appDelegateClassName; + @autoreleasepool { + // Setup code that might create autoreleased objects goes here. + appDelegateClassName = NSStringFromClass([AppDelegate class]); + } + return UIApplicationMain(argc, argv, nil, appDelegateClassName); +} From c9938425e4ffa621f532e83c242948410a200f5a Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Tue, 22 Dec 2020 00:33:15 +0900 Subject: [PATCH 11/36] issue #7 remove unused entries. --- ios-project/tt/tt/Info.plist | 23 ----------------------- ios-project/tt/tt/main.m | 17 +---------------- 2 files changed, 1 insertion(+), 39 deletions(-) diff --git a/ios-project/tt/tt/Info.plist b/ios-project/tt/tt/Info.plist index 72bf2c4..2ac1a7a 100644 --- a/ios-project/tt/tt/Info.plist +++ b/ios-project/tt/tt/Info.plist @@ -20,31 +20,8 @@ 1 LSRequiresIPhoneOS - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - UISceneConfigurations - - UIWindowSceneSessionRoleApplication - - - UISceneConfigurationName - Default Configuration - UISceneDelegateClassName - SceneDelegate - UISceneStoryboardFile - Main - - - - UIApplicationSupportsIndirectInputEvents - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main UIRequiredDeviceCapabilities armv7 diff --git a/ios-project/tt/tt/main.m b/ios-project/tt/tt/main.m index 1c4bee5..fdce3b4 100644 --- a/ios-project/tt/tt/main.m +++ b/ios-project/tt/tt/main.m @@ -1,18 +1,3 @@ -// -// main.m -// tt -// -// Created by 中村暁 on 2020/12/22. -// - -#import -#import "AppDelegate.h" - int main(int argc, char * argv[]) { - NSString * appDelegateClassName; - @autoreleasepool { - // Setup code that might create autoreleased objects goes here. - appDelegateClassName = NSStringFromClass([AppDelegate class]); - } - return UIApplicationMain(argc, argv, nil, appDelegateClassName); + return 0; } From 672023da07a7417138a1c3b74faf8280a55dad7d Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Tue, 22 Dec 2020 00:52:53 +0900 Subject: [PATCH 12/36] issue #7 add Xcode library dependencies. --- build-ios.sh | 2 + ios-project/tt/tt.xcodeproj/project.pbxproj | 68 +++++++++++++++++++++ ios-project/tt/tt/main.m | 2 + 3 files changed, 72 insertions(+) diff --git a/build-ios.sh b/build-ios.sh index 38308e4..1d00792 100755 --- a/build-ios.sh +++ b/build-ios.sh @@ -2,9 +2,11 @@ dub build --arch=arm64-apple-ios --config=iOS mv dist/libtt.a dist/libtt-ios-arm64.a +libtool -static -o dist/libtt-ios-arm64.a ios-libs/*-arm64.a dub build --arch=x86_64-apple-ios --config=iOS mv dist/libtt.a dist/libtt-ios-x86_64.a +libtool -static -o dist/libtt-ios-x86_64.a ios-libs/*-x86_64.a xcrun -sdk iphoneos lipo -create \ dist/libtt-ios-arm64.a \ diff --git a/ios-project/tt/tt.xcodeproj/project.pbxproj b/ios-project/tt/tt.xcodeproj/project.pbxproj index 47efe3d..4721cf5 100644 --- a/ios-project/tt/tt.xcodeproj/project.pbxproj +++ b/ios-project/tt/tt.xcodeproj/project.pbxproj @@ -9,6 +9,20 @@ /* Begin PBXBuildFile section */ A577D0972590F611008D5F5E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A577D0962590F611008D5F5E /* Assets.xcassets */; }; A577D09D2590F611008D5F5E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A577D09C2590F611008D5F5E /* main.m */; }; + A577D0A82590FA58008D5F5E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0A72590FA58008D5F5E /* UIKit.framework */; }; + A577D0AA2590FA61008D5F5E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0A92590FA61008D5F5E /* QuartzCore.framework */; }; + A577D0AC2590FA68008D5F5E /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0AB2590FA68008D5F5E /* OpenGLES.framework */; }; + A577D0AE2590FA6F008D5F5E /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0AD2590FA6F008D5F5E /* Metal.framework */; }; + A577D0B02590FA7A008D5F5E /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0AF2590FA7A008D5F5E /* GameController.framework */; }; + A577D0B22590FA83008D5F5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0B12590FA83008D5F5E /* Foundation.framework */; }; + A577D0B42590FA8C008D5F5E /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0B32590FA8C008D5F5E /* CoreServices.framework */; }; + A577D0B62590FA94008D5F5E /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0B52590FA94008D5F5E /* CoreMotion.framework */; }; + A577D0B82590FA9B008D5F5E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0B72590FA9B008D5F5E /* CoreGraphics.framework */; }; + A577D0BA2590FAA3008D5F5E /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0B92590FAA3008D5F5E /* CoreBluetooth.framework */; }; + A577D0BC2590FAAD008D5F5E /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0BB2590FAAD008D5F5E /* AVFoundation.framework */; }; + A577D0BE2590FAB5008D5F5E /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0BD2590FAB5008D5F5E /* AudioToolbox.framework */; }; + A577D0C02590FAD7008D5F5E /* libtt-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0BF2590FAD7008D5F5E /* libtt-ios.a */; }; + A577D0C22590FB1B008D5F5E /* dist in Resources */ = {isa = PBXBuildFile; fileRef = A577D0C12590FB1B008D5F5E /* dist */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -16,6 +30,20 @@ A577D0962590F611008D5F5E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; A577D09B2590F611008D5F5E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; A577D09C2590F611008D5F5E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + A577D0A72590FA58008D5F5E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + A577D0A92590FA61008D5F5E /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + A577D0AB2590FA68008D5F5E /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; + A577D0AD2590FA6F008D5F5E /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; + A577D0AF2590FA7A008D5F5E /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; }; + A577D0B12590FA83008D5F5E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + A577D0B32590FA8C008D5F5E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; + A577D0B52590FA94008D5F5E /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; }; + A577D0B72590FA9B008D5F5E /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + A577D0B92590FAA3008D5F5E /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; }; + A577D0BB2590FAAD008D5F5E /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + A577D0BD2590FAB5008D5F5E /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; + A577D0BF2590FAD7008D5F5E /* libtt-ios.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libtt-ios.a"; path = "../../dist/libtt-ios.a"; sourceTree = ""; }; + A577D0C12590FB1B008D5F5E /* dist */ = {isa = PBXFileReference; lastKnownFileType = folder; name = dist; path = ../../dist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -23,6 +51,19 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A577D0C02590FAD7008D5F5E /* libtt-ios.a in Frameworks */, + A577D0BE2590FAB5008D5F5E /* AudioToolbox.framework in Frameworks */, + A577D0BC2590FAAD008D5F5E /* AVFoundation.framework in Frameworks */, + A577D0BA2590FAA3008D5F5E /* CoreBluetooth.framework in Frameworks */, + A577D0B82590FA9B008D5F5E /* CoreGraphics.framework in Frameworks */, + A577D0B62590FA94008D5F5E /* CoreMotion.framework in Frameworks */, + A577D0B42590FA8C008D5F5E /* CoreServices.framework in Frameworks */, + A577D0B22590FA83008D5F5E /* Foundation.framework in Frameworks */, + A577D0B02590FA7A008D5F5E /* GameController.framework in Frameworks */, + A577D0AE2590FA6F008D5F5E /* Metal.framework in Frameworks */, + A577D0AC2590FA68008D5F5E /* OpenGLES.framework in Frameworks */, + A577D0AA2590FA61008D5F5E /* QuartzCore.framework in Frameworks */, + A577D0A82590FA58008D5F5E /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -32,8 +73,10 @@ A577D07E2590F60F008D5F5E = { isa = PBXGroup; children = ( + A577D0C12590FB1B008D5F5E /* dist */, A577D0892590F610008D5F5E /* tt */, A577D0882590F610008D5F5E /* Products */, + A577D0A62590FA58008D5F5E /* Frameworks */, ); sourceTree = ""; }; @@ -55,6 +98,26 @@ path = tt; sourceTree = ""; }; + A577D0A62590FA58008D5F5E /* Frameworks */ = { + isa = PBXGroup; + children = ( + A577D0BF2590FAD7008D5F5E /* libtt-ios.a */, + A577D0BD2590FAB5008D5F5E /* AudioToolbox.framework */, + A577D0BB2590FAAD008D5F5E /* AVFoundation.framework */, + A577D0B92590FAA3008D5F5E /* CoreBluetooth.framework */, + A577D0B72590FA9B008D5F5E /* CoreGraphics.framework */, + A577D0B52590FA94008D5F5E /* CoreMotion.framework */, + A577D0B32590FA8C008D5F5E /* CoreServices.framework */, + A577D0B12590FA83008D5F5E /* Foundation.framework */, + A577D0AF2590FA7A008D5F5E /* GameController.framework */, + A577D0AD2590FA6F008D5F5E /* Metal.framework */, + A577D0AB2590FA68008D5F5E /* OpenGLES.framework */, + A577D0A92590FA61008D5F5E /* QuartzCore.framework */, + A577D0A72590FA58008D5F5E /* UIKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -111,6 +174,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + A577D0C22590FB1B008D5F5E /* dist in Resources */, A577D0972590F611008D5F5E /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -180,7 +244,9 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = "../../ios-libs/SDL/include"; IPHONEOS_DEPLOYMENT_TARGET = 14.3; + LIBRARY_SEARCH_PATHS = ../../dist; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -233,7 +299,9 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = "../../ios-libs/SDL/include"; IPHONEOS_DEPLOYMENT_TARGET = 14.3; + LIBRARY_SEARCH_PATHS = ../../dist; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; diff --git a/ios-project/tt/tt/main.m b/ios-project/tt/tt/main.m index fdce3b4..6aac931 100644 --- a/ios-project/tt/tt/main.m +++ b/ios-project/tt/tt/main.m @@ -1,3 +1,5 @@ +#include "SDL.h" + int main(int argc, char * argv[]) { return 0; } From d874d8b89ecf3b49e059cc7bd3df38c3024f2622 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Tue, 22 Dec 2020 00:59:17 +0900 Subject: [PATCH 13/36] issue #7 fix resource groups. --- build-ios.sh | 6 ++---- ios-project/tt/tt.xcodeproj/project.pbxproj | 12 ++++++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/build-ios.sh b/build-ios.sh index 1d00792..e2307ed 100755 --- a/build-ios.sh +++ b/build-ios.sh @@ -1,12 +1,10 @@ #!/bin/sh dub build --arch=arm64-apple-ios --config=iOS -mv dist/libtt.a dist/libtt-ios-arm64.a -libtool -static -o dist/libtt-ios-arm64.a ios-libs/*-arm64.a +libtool -static -o dist/libtt-ios-arm64.a dist/libtt.a ios-libs/*-arm64.a dub build --arch=x86_64-apple-ios --config=iOS -mv dist/libtt.a dist/libtt-ios-x86_64.a -libtool -static -o dist/libtt-ios-x86_64.a ios-libs/*-x86_64.a +libtool -static -o dist/libtt-ios-x86_64.a dist/libtt.a ios-libs/*-x86_64.a xcrun -sdk iphoneos lipo -create \ dist/libtt-ios-arm64.a \ diff --git a/ios-project/tt/tt.xcodeproj/project.pbxproj b/ios-project/tt/tt.xcodeproj/project.pbxproj index 4721cf5..f5ab6e5 100644 --- a/ios-project/tt/tt.xcodeproj/project.pbxproj +++ b/ios-project/tt/tt.xcodeproj/project.pbxproj @@ -22,7 +22,8 @@ A577D0BC2590FAAD008D5F5E /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0BB2590FAAD008D5F5E /* AVFoundation.framework */; }; A577D0BE2590FAB5008D5F5E /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0BD2590FAB5008D5F5E /* AudioToolbox.framework */; }; A577D0C02590FAD7008D5F5E /* libtt-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A577D0BF2590FAD7008D5F5E /* libtt-ios.a */; }; - A577D0C22590FB1B008D5F5E /* dist in Resources */ = {isa = PBXBuildFile; fileRef = A577D0C12590FB1B008D5F5E /* dist */; }; + A577D0C82590FD7C008D5F5E /* barrage in Resources */ = {isa = PBXBuildFile; fileRef = A577D0C72590FD7C008D5F5E /* barrage */; }; + A577D0CB2590FD90008D5F5E /* sounds in Resources */ = {isa = PBXBuildFile; fileRef = A577D0CA2590FD90008D5F5E /* sounds */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -43,7 +44,8 @@ A577D0BB2590FAAD008D5F5E /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; A577D0BD2590FAB5008D5F5E /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; A577D0BF2590FAD7008D5F5E /* libtt-ios.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libtt-ios.a"; path = "../../dist/libtt-ios.a"; sourceTree = ""; }; - A577D0C12590FB1B008D5F5E /* dist */ = {isa = PBXFileReference; lastKnownFileType = folder; name = dist; path = ../../dist; sourceTree = ""; }; + A577D0C72590FD7C008D5F5E /* barrage */ = {isa = PBXFileReference; lastKnownFileType = folder; name = barrage; path = ../../dist/barrage; sourceTree = ""; }; + A577D0CA2590FD90008D5F5E /* sounds */ = {isa = PBXFileReference; lastKnownFileType = folder; name = sounds; path = ../../dist/sounds; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -73,7 +75,8 @@ A577D07E2590F60F008D5F5E = { isa = PBXGroup; children = ( - A577D0C12590FB1B008D5F5E /* dist */, + A577D0CA2590FD90008D5F5E /* sounds */, + A577D0C72590FD7C008D5F5E /* barrage */, A577D0892590F610008D5F5E /* tt */, A577D0882590F610008D5F5E /* Products */, A577D0A62590FA58008D5F5E /* Frameworks */, @@ -174,7 +177,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - A577D0C22590FB1B008D5F5E /* dist in Resources */, + A577D0CB2590FD90008D5F5E /* sounds in Resources */, + A577D0C82590FD7C008D5F5E /* barrage in Resources */, A577D0972590F611008D5F5E /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; From 41b4a194180c716f73a2d9b40bdb8e91e73813b9 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Tue, 22 Dec 2020 22:17:10 +0900 Subject: [PATCH 14/36] issue #7 add druntime copy. --- ios-libs/00_copy_druntimes.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100755 ios-libs/00_copy_druntimes.sh diff --git a/ios-libs/00_copy_druntimes.sh b/ios-libs/00_copy_druntimes.sh new file mode 100755 index 0000000..ec9ca39 --- /dev/null +++ b/ios-libs/00_copy_druntimes.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +cd `dirname $0` + +LIBS_DIR=`pwd` + +LDC2_HOME=`which ldc2` +LDC2_HOME=`dirname $LDC2_HOME` +LDC2_HOME=`dirname $LDC2_HOME` + +cp ${LDC2_HOME}/lib-ios-arm64/libdruntime-ldc.a ${LIBS_DIR}/libdruntime-ldc-arm64.a +cp ${LDC2_HOME}/lib-ios-x86_64/libdruntime-ldc.a ${LIBS_DIR}/libdruntime-ldc-x86_64.a + +cp ${LDC2_HOME}/lib-ios-arm64/libphobos2-ldc.a ${LIBS_DIR}/libphobos2-ldc-arm64.a +cp ${LDC2_HOME}/lib-ios-x86_64/libphobos2-ldc.a ${LIBS_DIR}/libphobos2-ldc-x86_64.a + From 85bb0f7581981e9c1346f047aecf7e3153c7e4a5 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Tue, 22 Dec 2020 22:25:54 +0900 Subject: [PATCH 15/36] issue #7 fix bindbc-sdl build shell. --- ios-libs/03_build-bindbc-sdl.sh | 14 ++++++++++++-- ios-project/tt/tt.xcodeproj/project.pbxproj | 2 ++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ios-libs/03_build-bindbc-sdl.sh b/ios-libs/03_build-bindbc-sdl.sh index 9771bf2..63c2bd1 100755 --- a/ios-libs/03_build-bindbc-sdl.sh +++ b/ios-libs/03_build-bindbc-sdl.sh @@ -6,10 +6,20 @@ LIBS_DIR=`pwd` git submodule update +cat >> ${LIBS_DIR}/bindbc-sdl/dub.sdl < Date: Tue, 22 Dec 2020 22:46:51 +0900 Subject: [PATCH 16/36] issue #9 add main function for iOS. --- ios-project/tt/tt/main.m | 4 +++- src/abagames/tt/boot.d | 23 ++++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/ios-project/tt/tt/main.m b/ios-project/tt/tt/main.m index 6aac931..7dbfbd4 100644 --- a/ios-project/tt/tt/main.m +++ b/ios-project/tt/tt/main.m @@ -1,5 +1,7 @@ #include "SDL.h" +int ttStartup(int argc, char * argv[]); + int main(int argc, char * argv[]) { - return 0; + return ttStartup(argc, argv); } diff --git a/src/abagames/tt/boot.d b/src/abagames/tt/boot.d index 6d23987..f98c1d0 100644 --- a/src/abagames/tt/boot.d +++ b/src/abagames/tt/boot.d @@ -41,7 +41,28 @@ version(WASM) { } } -public int main(string[] args) { +version(IOS) { + import std.algorithm : map; + import std.array : array; + + alias extern(C) int function(char[][] args) MainFunc; + extern (C) int _d_run_main(int argc, char** argv, MainFunc mainFunc); + + extern(C) int ttStartup(int argc, char** argv) { + return _d_run_main(argc, argv, &ttMainFunc); + } + + extern(C) int ttMainFunc(char[][] args) { + return ttMain(args.map!((s) => s.idup).array); + } + +} else { + public int main(string[] args) { + return ttMain(args); + } +} + +private int ttMain(string[] args) { screen = new Screen; pad = new RecordablePad(new InputBackendImpl()); gameManager = new GameManager; From 9bf969c148758bd0e01c62f2616194f490ca6185 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Tue, 22 Dec 2020 22:53:05 +0900 Subject: [PATCH 17/36] issue #11 add OpenGL ES version. --- src/abagames/util/gl.d | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/abagames/util/gl.d b/src/abagames/util/gl.d index 9e2150e..80a5934 100644 --- a/src/abagames/util/gl.d +++ b/src/abagames/util/gl.d @@ -12,6 +12,15 @@ else version(WASM) version = staticGL; } +version(WASM) +{ + version = GL_ES; +} +else version(IOS) +{ + version = GL_ES; +} + import abagames.util.conv; import abagames.util.math; import abagames.util.vector; @@ -525,7 +534,7 @@ version(GL_Batching) { public: static void init() { - version(WASM) { + version(GL_ES) { program = compileProgram( ` precision mediump float; From 01ca23185017376b990b6749c304ab9162529ee0 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Tue, 22 Dec 2020 23:04:27 +0900 Subject: [PATCH 18/36] issue #11 fit landscape window. --- ios-project/tt/tt/Info.plist | 3 --- src/abagames/util/sdl/screen3d.d | 4 ++++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ios-project/tt/tt/Info.plist b/ios-project/tt/tt/Info.plist index 2ac1a7a..b9b054a 100644 --- a/ios-project/tt/tt/Info.plist +++ b/ios-project/tt/tt/Info.plist @@ -28,14 +28,11 @@ UISupportedInterfaceOrientations - UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight diff --git a/src/abagames/util/sdl/screen3d.d b/src/abagames/util/sdl/screen3d.d index 3302ea7..e114a44 100644 --- a/src/abagames/util/sdl/screen3d.d +++ b/src/abagames/util/sdl/screen3d.d @@ -80,6 +80,10 @@ version(GL_32) { writeln("OpenGL Status: ", glStatus); } + version(IOS) { + SDL_GetWindowSize(window, &width, &height); + } + GL.init(); GL.viewport(0, 0, width, height); GL.clearColor(0.0f, 0.0f, 0.0f, 0.0f); From 6a0698c981a51cab8aaea02b5264482859f6df69 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sat, 2 Jan 2021 11:07:35 +0900 Subject: [PATCH 19/36] issue #13 add iOS build shells. --- build-ios.sh | 16 ++++++++++++++-- dist/.gitignore | 2 ++ run-ios-simulator.sh | 12 ++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 dist/.gitignore create mode 100755 run-ios-simulator.sh diff --git a/build-ios.sh b/build-ios.sh index e2307ed..bc6cacf 100755 --- a/build-ios.sh +++ b/build-ios.sh @@ -1,13 +1,25 @@ #!/bin/sh +cd `dirname $0` + +DIST_DIR=`pwd`/dist + dub build --arch=arm64-apple-ios --config=iOS -libtool -static -o dist/libtt-ios-arm64.a dist/libtt.a ios-libs/*-arm64.a +libtool -static -o dist/libtt-ios-arm64.a dist/libtt.a ios-libs/*-arm64.a &> /dev/null dub build --arch=x86_64-apple-ios --config=iOS -libtool -static -o dist/libtt-ios-x86_64.a dist/libtt.a ios-libs/*-x86_64.a +libtool -static -o dist/libtt-ios-x86_64.a dist/libtt.a ios-libs/*-x86_64.a &> /dev/null xcrun -sdk iphoneos lipo -create \ dist/libtt-ios-arm64.a \ dist/libtt-ios-x86_64.a \ -output dist/libtt-ios.a +xcodebuild -project ./ios-project/tt/tt.xcodeproj \ + -scheme tt \ + -sdk iphonesimulator \ + clean build \ + CONFIGURATION_BUILD_DIR=${DIST_DIR} \ + ARCHS=x86_64 \ + ONLY_ACTIVE_ARCH=NO + diff --git a/dist/.gitignore b/dist/.gitignore new file mode 100644 index 0000000..d81c463 --- /dev/null +++ b/dist/.gitignore @@ -0,0 +1,2 @@ +/tt.app + diff --git a/run-ios-simulator.sh b/run-ios-simulator.sh new file mode 100755 index 0000000..b079f6e --- /dev/null +++ b/run-ios-simulator.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +cd `dirname $0` + +APP_ID=com.example.tt +APP_BUNDLE_PATH=`pwd`/dist/tt.app +DEVICE_ID="547B7D16-D2AA-40D1-A807-61D083A71CA8" + +xcrun simctl boot ${DEVICE_ID} +xcrun simctl install ${DEVICE_ID} ${APP_BUNDLE_PATH} +xcrun simctl launch ${DEVICE_ID} ${APP_ID} + From 3588fec18073e40a935521534934f247ebfc4582 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sat, 2 Jan 2021 11:14:00 +0900 Subject: [PATCH 20/36] issue #13 fix run with console. --- run-ios-simulator.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run-ios-simulator.sh b/run-ios-simulator.sh index b079f6e..158384c 100755 --- a/run-ios-simulator.sh +++ b/run-ios-simulator.sh @@ -8,5 +8,5 @@ DEVICE_ID="547B7D16-D2AA-40D1-A807-61D083A71CA8" xcrun simctl boot ${DEVICE_ID} xcrun simctl install ${DEVICE_ID} ${APP_BUNDLE_PATH} -xcrun simctl launch ${DEVICE_ID} ${APP_ID} +xcrun simctl launch --console ${DEVICE_ID} ${APP_ID} From ea9c01f412a0fc47d83b9a6ab0cd7ab23a239b3e Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sat, 2 Jan 2021 13:58:54 +0900 Subject: [PATCH 21/36] issue #13 add virtualpad input backend. --- build-ios.sh | 9 ++-- dub.json | 4 +- src/abagames/tt/gamemanager.d | 6 +++ src/abagames/tt/virtualpad.d | 78 +++++++++++++++++++++++++++++++++++ src/abagames/util/sdl/input.d | 51 +++++++++++++++++++++++ 5 files changed, 142 insertions(+), 6 deletions(-) create mode 100644 src/abagames/tt/virtualpad.d diff --git a/build-ios.sh b/build-ios.sh index bc6cacf..2b269b7 100755 --- a/build-ios.sh +++ b/build-ios.sh @@ -4,16 +4,17 @@ cd `dirname $0` DIST_DIR=`pwd`/dist -dub build --arch=arm64-apple-ios --config=iOS +dub build --arch=arm64-apple-ios --config=iOS || exit $? libtool -static -o dist/libtt-ios-arm64.a dist/libtt.a ios-libs/*-arm64.a &> /dev/null -dub build --arch=x86_64-apple-ios --config=iOS +dub build --arch=x86_64-apple-ios --config=iOS || exit $? libtool -static -o dist/libtt-ios-x86_64.a dist/libtt.a ios-libs/*-x86_64.a &> /dev/null xcrun -sdk iphoneos lipo -create \ dist/libtt-ios-arm64.a \ dist/libtt-ios-x86_64.a \ - -output dist/libtt-ios.a + -output dist/libtt-ios.a \ + &> /dev/null xcodebuild -project ./ios-project/tt/tt.xcodeproj \ -scheme tt \ @@ -21,5 +22,5 @@ xcodebuild -project ./ios-project/tt/tt.xcodeproj \ clean build \ CONFIGURATION_BUILD_DIR=${DIST_DIR} \ ARCHS=x86_64 \ - ONLY_ACTIVE_ARCH=NO + ONLY_ACTIVE_ARCH=NO diff --git a/dub.json b/dub.json index e8f6d3b..cb7f303 100644 --- a/dub.json +++ b/dub.json @@ -86,8 +86,8 @@ "GL_32", "GL_Batching", "SDL_Mixer", - "InputBackendSDL", - "BindGL_Static" + "InputBackendSDLTouch", + "BindGL_Static" ], "subConfigurations": { "bindbc-sdl": "staticBC" diff --git a/src/abagames/tt/gamemanager.d b/src/abagames/tt/gamemanager.d index aeb8495..aee1260 100644 --- a/src/abagames/tt/gamemanager.d +++ b/src/abagames/tt/gamemanager.d @@ -32,6 +32,8 @@ import abagames.tt.title; import abagames.tt.soundmanager; import abagames.tt.replay; +import abagames.tt.virtualpad : VirtualPad; + /** * Manage the game state and actor pools. */ @@ -55,6 +57,7 @@ public class GameManager: abagames.util.sdl.gamemanager.GameManager { TitleState titleState; InGameState inGameState; bool escPressed; + VirtualPad virtualPad; public override void init() { BarrageManager.load(); @@ -106,6 +109,8 @@ public class GameManager: abagames.util.sdl.gamemanager.GameManager { pad, titleManager, passedEnemies, inGameState); inGameState.seed = rand.nextInt32(); ship.setGameState(inGameState); + + virtualPad = new VirtualPad(); } public override void start() { @@ -181,6 +186,7 @@ public class GameManager: abagames.util.sdl.gamemanager.GameManager { GL.popMatrix(); screen.viewOrthoFixed(); state.drawFront(); + virtualPad.draw(); screen.viewPerspective(); } } diff --git a/src/abagames/tt/virtualpad.d b/src/abagames/tt/virtualpad.d new file mode 100644 index 0000000..9f7e4af --- /dev/null +++ b/src/abagames/tt/virtualpad.d @@ -0,0 +1,78 @@ +/* + * virtualpad.d + * + * Copyright 2020 outlandkarasu. Some rights reserved. + * + * License: BSD-2-Clause + */ +module abagames.tt.virtualpad; + +import abagames.util.gl : GL; +import abagames.tt.screen : Screen; + +public class VirtualPad { + + void draw() { + GL.pushMatrix(); + GL.translate(100, 300, 0); + GL.scale(40.0, 40.0, 1.0); + GL.lineWidth(4); + GL.color(1.0, 1.0, 1.0, 1.0); + + GL.pushMatrix(); + GL.translate(-1.5, 0, 0); + drawLeftWedge(); + GL.popMatrix(); + + GL.pushMatrix(); + GL.translate(1.5, 0, 0); + drawRightWedge(); + GL.popMatrix(); + + GL.pushMatrix(); + GL.translate(0, -1.5, 0); + drawUpWedge(); + GL.popMatrix(); + + GL.pushMatrix(); + GL.translate(0, 1.5, 0); + drawDownWedge(); + GL.popMatrix(); + + GL.lineWidth(1); + GL.popMatrix(); + } + + void drawLeftWedge() { + GL.begin(GL.LINE_LOOP); + GL.vertex(0, -0.5, 0); + GL.vertex(-0.75, 0, 0); + GL.vertex(0, 0.5, 0); + GL.end(); + } + + void drawUpWedge() { + GL.begin(GL.LINE_LOOP); + GL.vertex(-0.5, 0, 0); + GL.vertex(0, -0.75, 0); + GL.vertex(0.5, 0, 0); + GL.end(); + } + + void drawRightWedge() { + GL.begin(GL.LINE_LOOP); + GL.vertex(0, -0.5, 0); + GL.vertex(0.75, 0, 0); + GL.vertex(0, 0.5, 0); + GL.end(); + } + + void drawDownWedge() { + GL.begin(GL.LINE_LOOP); + GL.vertex(-0.5, 0, 0); + GL.vertex(0, 0.75, 0); + GL.vertex(0.5, 0, 0); + GL.end(); + } +} + diff --git a/src/abagames/util/sdl/input.d b/src/abagames/util/sdl/input.d index 5ffd0f7..ce72e60 100644 --- a/src/abagames/util/sdl/input.d +++ b/src/abagames/util/sdl/input.d @@ -98,3 +98,54 @@ version(InputBackendWASM) { alias InputBackendImpl = InputBackendWASM; } + +version(InputBackendSDLTouch) { + public class InputBackendSDLTouch : InputBackend { + uint state = 0; + + public override void update() { + state = 0; + foreach (i; 0 .. SDL_GetNumTouchDevices()) { + immutable touchID = SDL_GetTouchDevice(i); + foreach (f; 0 .. SDL_GetNumTouchFingers(touchID)) { + const finger = SDL_GetTouchFinger(touchID, f); + if (!finger) continue; + state |= positionToButton(finger.x, finger.y); + } + } + } + + private static int positionToButton(float x, float y) { + if (x < 0.2) { + if (y < 0.2) return Input.Dir.UP; + if (0.2 <= y && y < 0.4) return Input.Dir.LEFT; + if (0.4 <= y && y < 0.6) return Input.Dir.RIGHT; + if (0.6 <= y && y < 0.8) return Input.Dir.DOWN; + } else if (0.2 <= x && x < 0.4) { + if (y < 0.5) return Input.Button.A; + if (0.5 <= y) return Input.Button.B; + } + + return 0; + } + + public override int getDirState() { + return state & 0xF; + } + + public override int getButtonState() { + return state & 0x30; + } + + public override bool getExitState() { + return false; + } + + public override bool getPauseState() { + return false; + } + } + + alias InputBackendImpl = InputBackendSDLTouch; +} + From f8a40691d865a883d84d1f2381845f9892fe30a5 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sat, 2 Jan 2021 14:52:18 +0900 Subject: [PATCH 22/36] issue #13 fix pad position. --- src/abagames/tt/virtualpad.d | 93 +++++++++++++++++++++++++----------- 1 file changed, 64 insertions(+), 29 deletions(-) diff --git a/src/abagames/tt/virtualpad.d b/src/abagames/tt/virtualpad.d index 9f7e4af..a313159 100644 --- a/src/abagames/tt/virtualpad.d +++ b/src/abagames/tt/virtualpad.d @@ -12,67 +12,102 @@ import abagames.tt.screen : Screen; public class VirtualPad { + struct ButtonRect { + float x; + float y; + float width; + float height; + } + + immutable WEDGES_POSITION_X = 0.0; + immutable WEDGES_POSITION_Y = 0.0; + immutable WEDGE_SIZE = 40.0; + + immutable LEFT_WEDGE_RECT = ButtonRect( + WEDGES_POSITION_X, + WEDGES_POSITION_Y + WEDGE_SIZE, + WEDGE_SIZE, + WEDGE_SIZE); + + immutable RIGHT_WEDGE_RECT = ButtonRect( + WEDGES_POSITION_X + WEDGE_SIZE * 2.0, + WEDGES_POSITION_Y + WEDGE_SIZE, + WEDGE_SIZE, + WEDGE_SIZE); + + immutable UP_WEDGE_RECT = ButtonRect( + WEDGES_POSITION_X + WEDGE_SIZE, + WEDGES_POSITION_Y, + WEDGE_SIZE, + WEDGE_SIZE); + + immutable DOWN_WEDGE_RECT = ButtonRect( + WEDGES_POSITION_X + WEDGE_SIZE, + WEDGES_POSITION_Y + WEDGE_SIZE * 2.0, + WEDGE_SIZE, + WEDGE_SIZE); + void draw() { GL.pushMatrix(); - GL.translate(100, 300, 0); - GL.scale(40.0, 40.0, 1.0); GL.lineWidth(4); GL.color(1.0, 1.0, 1.0, 1.0); - GL.pushMatrix(); - GL.translate(-1.5, 0, 0); drawLeftWedge(); - GL.popMatrix(); - - GL.pushMatrix(); - GL.translate(1.5, 0, 0); drawRightWedge(); - GL.popMatrix(); - - GL.pushMatrix(); - GL.translate(0, -1.5, 0); drawUpWedge(); - GL.popMatrix(); - - GL.pushMatrix(); - GL.translate(0, 1.5, 0); drawDownWedge(); - GL.popMatrix(); GL.lineWidth(1); GL.popMatrix(); } void drawLeftWedge() { + GL.pushMatrix(); + scaling(LEFT_WEDGE_RECT); GL.begin(GL.LINE_LOOP); - GL.vertex(0, -0.5, 0); - GL.vertex(-0.75, 0, 0); - GL.vertex(0, 0.5, 0); + GL.vertex( 0.5, 0.5, 0); + GL.vertex(-0.5, 0.0, 0); + GL.vertex( 0.5, -0.5, 0); GL.end(); + GL.popMatrix(); } void drawUpWedge() { + GL.pushMatrix(); GL.begin(GL.LINE_LOOP); - GL.vertex(-0.5, 0, 0); - GL.vertex(0, -0.75, 0); - GL.vertex(0.5, 0, 0); + scaling(UP_WEDGE_RECT); + GL.vertex( 0.0, -0.5, 0); + GL.vertex( 0.5, 0.5, 0); + GL.vertex(-0.5, 0.5, 0); GL.end(); + GL.popMatrix(); } void drawRightWedge() { + GL.pushMatrix(); + scaling(RIGHT_WEDGE_RECT); GL.begin(GL.LINE_LOOP); - GL.vertex(0, -0.5, 0); - GL.vertex(0.75, 0, 0); - GL.vertex(0, 0.5, 0); + GL.vertex(-0.5, 0.5, 0); + GL.vertex( 0.5, 0.0, 0); + GL.vertex(-0.5, -0.5, 0); GL.end(); + GL.popMatrix(); } void drawDownWedge() { + GL.pushMatrix(); + scaling(DOWN_WEDGE_RECT); GL.begin(GL.LINE_LOOP); - GL.vertex(-0.5, 0, 0); - GL.vertex(0, 0.75, 0); - GL.vertex(0.5, 0, 0); + GL.vertex(-0.5, -0.5, 0); + GL.vertex( 0.5, -0.5, 0); + GL.vertex( 0.0, 0.5, 0); GL.end(); + GL.popMatrix(); + } + + void scaling(ref const(ButtonRect) rect) { + GL.translate(rect.x + rect.width / 2.0, rect.y + rect.height / 2.0, 0); + GL.scale(rect.width, rect.height, 1.0); } } From 67487c5ef42052b612a93c47c9acb01629d1b6ba Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sat, 2 Jan 2021 15:21:24 +0900 Subject: [PATCH 23/36] issue #13 move button definitions to input module. --- dub.json | 3 +- ios-libs/03_build-bindbc-sdl.sh | 2 +- src/abagames/tt/virtualpad.d | 164 +++++++++++++------------------- src/abagames/util/sdl/input.d | 82 +++++++++++++--- 4 files changed, 141 insertions(+), 110 deletions(-) diff --git a/dub.json b/dub.json index cb7f303..8b22c6b 100644 --- a/dub.json +++ b/dub.json @@ -85,9 +85,10 @@ "BindBC", "GL_32", "GL_Batching", + "SDL_2012", "SDL_Mixer", "InputBackendSDLTouch", - "BindGL_Static" + "BindGL_Static" ], "subConfigurations": { "bindbc-sdl": "staticBC" diff --git a/ios-libs/03_build-bindbc-sdl.sh b/ios-libs/03_build-bindbc-sdl.sh index 63c2bd1..9aaec40 100755 --- a/ios-libs/03_build-bindbc-sdl.sh +++ b/ios-libs/03_build-bindbc-sdl.sh @@ -9,7 +9,7 @@ git submodule update cat >> ${LIBS_DIR}/bindbc-sdl/dub.sdl < Date: Sat, 2 Jan 2021 15:44:45 +0900 Subject: [PATCH 24/36] issue #13 fix position translation. --- src/abagames/util/sdl/input.d | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/abagames/util/sdl/input.d b/src/abagames/util/sdl/input.d index c33315d..367c49b 100644 --- a/src/abagames/util/sdl/input.d +++ b/src/abagames/util/sdl/input.d @@ -119,6 +119,10 @@ version(InputBackendSDLTouch) { } static { + // ortho screen is fixed size. + immutable SCREEN_WIDTH = 640; + immutable SCREEN_HEIGHT = 480; + immutable WEDGES_POSITION_X = 0.0; immutable WEDGES_POSITION_Y = 0.0; immutable WEDGE_SIZE = 40.0; @@ -158,19 +162,14 @@ version(InputBackendSDLTouch) { uint state = 0; public override void update() { - auto window = SDL_GL_GetCurrentWindow(); - if (!window) return; - int width; - int height; - SDL_GL_GetDrawableSize(window, &width, &height); - state = 0; foreach (i; 0 .. SDL_GetNumTouchDevices()) { immutable touchID = SDL_GetTouchDevice(i); foreach (f; 0 .. SDL_GetNumTouchFingers(touchID)) { const finger = SDL_GetTouchFinger(touchID, f); if (!finger) continue; - state |= positionToButton(finger.x, finger.y, width, height); + state |= positionToButton( + finger.x, finger.y, SCREEN_WIDTH, SCREEN_HEIGHT); } } } From 026f8e89f7d0c83414235df2747425111ff67e57 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sat, 2 Jan 2021 15:55:03 +0900 Subject: [PATCH 25/36] issue #13 fill buttons on pressed. --- src/abagames/tt/gamemanager.d | 2 +- src/abagames/tt/virtualpad.d | 33 +++++++++++++++++++++++---------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/abagames/tt/gamemanager.d b/src/abagames/tt/gamemanager.d index aee1260..e2b6258 100644 --- a/src/abagames/tt/gamemanager.d +++ b/src/abagames/tt/gamemanager.d @@ -110,7 +110,7 @@ public class GameManager: abagames.util.sdl.gamemanager.GameManager { inGameState.seed = rand.nextInt32(); ship.setGameState(inGameState); - virtualPad = new VirtualPad(); + virtualPad = new VirtualPad(pad); } public override void start() { diff --git a/src/abagames/tt/virtualpad.d b/src/abagames/tt/virtualpad.d index 91cecd6..2b493eb 100644 --- a/src/abagames/tt/virtualpad.d +++ b/src/abagames/tt/virtualpad.d @@ -8,13 +8,20 @@ module abagames.tt.virtualpad; import abagames.util.gl : GL; +import abagames.util.sdl.pad : Pad; import abagames.tt.screen : Screen; public class VirtualPad { + private Pad pad; + + this(Pad pad) { + this.pad = pad; + } + version(InputBackendSDLTouch) { - import abagames.util.sdl.input : Input = InputBackendSDLTouch; + import abagames.util.sdl.input : Input, Backend = InputBackendSDLTouch; void draw() { GL.pushMatrix(); @@ -29,11 +36,13 @@ public class VirtualPad { GL.lineWidth(1); GL.popMatrix(); } + + private: void drawLeftWedge() { GL.pushMatrix(); - scaling(Input.LEFT_WEDGE_RECT); - GL.begin(GL.LINE_LOOP); + scaling(Backend.LEFT_WEDGE_RECT); + GL.begin(isDirPressing(Input.Dir.LEFT) ? GL.TRIANGLES : GL.LINE_LOOP); GL.vertex( 0.5, 0.5, 0); GL.vertex(-0.5, 0.0, 0); GL.vertex( 0.5, -0.5, 0); @@ -43,8 +52,8 @@ public class VirtualPad { void drawUpWedge() { GL.pushMatrix(); - GL.begin(GL.LINE_LOOP); - scaling(Input.UP_WEDGE_RECT); + GL.begin(isDirPressing(Input.Dir.UP) ? GL.TRIANGLES : GL.LINE_LOOP); + scaling(Backend.UP_WEDGE_RECT); GL.vertex( 0.0, -0.5, 0); GL.vertex( 0.5, 0.5, 0); GL.vertex(-0.5, 0.5, 0); GL.end(); @@ -53,8 +62,8 @@ public class VirtualPad { void drawRightWedge() { GL.pushMatrix(); - scaling(Input.RIGHT_WEDGE_RECT); - GL.begin(GL.LINE_LOOP); + scaling(Backend.RIGHT_WEDGE_RECT); + GL.begin(isDirPressing(Input.Dir.RIGHT) ? GL.TRIANGLES : GL.LINE_LOOP); GL.vertex(-0.5, 0.5, 0); GL.vertex( 0.5, 0.0, 0); GL.vertex(-0.5, -0.5, 0); @@ -64,8 +73,8 @@ public class VirtualPad { void drawDownWedge() { GL.pushMatrix(); - scaling(Input.DOWN_WEDGE_RECT); - GL.begin(GL.LINE_LOOP); + scaling(Backend.DOWN_WEDGE_RECT); + GL.begin(isDirPressing(Input.Dir.DOWN) ? GL.TRIANGLES : GL.LINE_LOOP); GL.vertex(-0.5, -0.5, 0); GL.vertex( 0.5, -0.5, 0); GL.vertex( 0.0, 0.5, 0); @@ -73,10 +82,14 @@ public class VirtualPad { GL.popMatrix(); } - void scaling(ref const(Input.ButtonRect) rect) { + void scaling(ref const(Backend.ButtonRect) rect) { GL.translate(rect.x + rect.width / 2.0, rect.y + rect.height / 2.0, 0); GL.scale(rect.width, rect.height, 1.0); } + + bool isDirPressing(Input.Dir dir) { + return (pad.getDirState() & dir) != 0; + } } else { void draw() {} From 21fa209f0e5d82cd63573fe9aa12428f9b9bfa8a Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sat, 2 Jan 2021 16:21:46 +0900 Subject: [PATCH 26/36] issue #13 fix position. --- src/abagames/tt/virtualpad.d | 32 ++++++++++++++++++++++++++++++++ src/abagames/util/sdl/input.d | 26 +++++++++++++++++++++++--- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/src/abagames/tt/virtualpad.d b/src/abagames/tt/virtualpad.d index 2b493eb..e7a70dd 100644 --- a/src/abagames/tt/virtualpad.d +++ b/src/abagames/tt/virtualpad.d @@ -32,6 +32,9 @@ public class VirtualPad { drawRightWedge(); drawUpWedge(); drawDownWedge(); + + drawA(); + drawB(); GL.lineWidth(1); GL.popMatrix(); @@ -81,6 +84,31 @@ public class VirtualPad { GL.end(); GL.popMatrix(); } + + void drawA() { + GL.pushMatrix(); + scaling(Backend.A_BUTTON_RECT); + GL.begin(isButtonPressing(Input.Button.A) ? GL.TRIANGLES : GL.LINE_LOOP); + GL.vertex(-0.5, -0.5, 0); + GL.vertex( 0.5, 0.5, 0); + GL.vertex(-0.5, 0.5, 0); + GL.end(); + GL.popMatrix(); + } + + void drawB() { + GL.pushMatrix(); + scaling(Backend.B_BUTTON_RECT); + GL.begin(isButtonPressing(Input.Button.B) ? GL.TRIANGLES : GL.LINE_LOOP); + GL.vertex(-0.5, -0.5, 0); + GL.vertex( 0.5, 0.0, 0); + GL.vertex(-0.5, 0.0, 0); + GL.vertex(-0.5, 0.0, 0); + GL.vertex( 0.5, 0.5, 0); + GL.vertex(-0.5, 0.5, 0); + GL.end(); + GL.popMatrix(); + } void scaling(ref const(Backend.ButtonRect) rect) { GL.translate(rect.x + rect.width / 2.0, rect.y + rect.height / 2.0, 0); @@ -90,6 +118,10 @@ public class VirtualPad { bool isDirPressing(Input.Dir dir) { return (pad.getDirState() & dir) != 0; } + + bool isButtonPressing(Input.Button button) { + return (pad.getButtonState() & button) != 0; + } } else { void draw() {} diff --git a/src/abagames/util/sdl/input.d b/src/abagames/util/sdl/input.d index 367c49b..0b9a1fd 100644 --- a/src/abagames/util/sdl/input.d +++ b/src/abagames/util/sdl/input.d @@ -123,9 +123,9 @@ version(InputBackendSDLTouch) { immutable SCREEN_WIDTH = 640; immutable SCREEN_HEIGHT = 480; - immutable WEDGES_POSITION_X = 0.0; - immutable WEDGES_POSITION_Y = 0.0; - immutable WEDGE_SIZE = 40.0; + immutable WEDGES_POSITION_X = 15.0; + immutable WEDGES_POSITION_Y = 300.0; + immutable WEDGE_SIZE = 50.0; immutable LEFT_WEDGE_RECT = ButtonRect( WEDGES_POSITION_X, @@ -151,11 +151,31 @@ version(InputBackendSDLTouch) { WEDGE_SIZE, WEDGE_SIZE); + immutable BUTTON_SIZE = 60.0; + immutable A_BUTTON_POSITION_X = 580.0; + immutable A_BUTTON_POSITION_Y = 300.0; + immutable B_BUTTON_POSITION_X = 580.0; + immutable B_BUTTON_POSITION_Y = A_BUTTON_POSITION_Y + BUTTON_SIZE + 20.0; + + immutable A_BUTTON_RECT = ButtonRect( + A_BUTTON_POSITION_X, + A_BUTTON_POSITION_Y, + BUTTON_SIZE, + BUTTON_SIZE); + + immutable B_BUTTON_RECT = ButtonRect( + B_BUTTON_POSITION_X, + B_BUTTON_POSITION_Y, + BUTTON_SIZE, + BUTTON_SIZE); + immutable BUTTONS = [ Button(LEFT_WEDGE_RECT, Input.Dir.LEFT), Button(UP_WEDGE_RECT, Input.Dir.UP), Button(RIGHT_WEDGE_RECT, Input.Dir.RIGHT), Button(DOWN_WEDGE_RECT, Input.Dir.DOWN), + Button(A_BUTTON_RECT, Input.Button.A), + Button(B_BUTTON_RECT, Input.Button.B), ]; } From e3f18e63c30a80c0eb53d480cc949774bc4f093a Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sat, 2 Jan 2021 19:04:34 +0900 Subject: [PATCH 27/36] issue #15 add exit button. --- src/abagames/tt/virtualpad.d | 13 +++++++++++++ src/abagames/util/sdl/input.d | 8 +++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/abagames/tt/virtualpad.d b/src/abagames/tt/virtualpad.d index e7a70dd..e3190a1 100644 --- a/src/abagames/tt/virtualpad.d +++ b/src/abagames/tt/virtualpad.d @@ -35,6 +35,7 @@ public class VirtualPad { drawA(); drawB(); + drawExit(); GL.lineWidth(1); GL.popMatrix(); @@ -110,6 +111,18 @@ public class VirtualPad { GL.popMatrix(); } + void drawExit() { + GL.pushMatrix(); + scaling(Backend.EXIT_BUTTON_RECT); + GL.begin(GL.LINES); + GL.vertex(-0.5, -0.5, 0); + GL.vertex( 0.5, 0.5, 0); + GL.vertex( 0.5, -0.5, 0); + GL.vertex(-0.5, 0.5, 0); + GL.end(); + GL.popMatrix(); + } + void scaling(ref const(Backend.ButtonRect) rect) { GL.translate(rect.x + rect.width / 2.0, rect.y + rect.height / 2.0, 0); GL.scale(rect.width, rect.height, 1.0); diff --git a/src/abagames/util/sdl/input.d b/src/abagames/util/sdl/input.d index 0b9a1fd..964cc66 100644 --- a/src/abagames/util/sdl/input.d +++ b/src/abagames/util/sdl/input.d @@ -169,6 +169,11 @@ version(InputBackendSDLTouch) { BUTTON_SIZE, BUTTON_SIZE); + immutable EXIT_BUTTON_RECT = ButtonRect( + 20.0, 20.0, 30.0, 30.0); + + enum EXIT_BUTTON_BIT = 1024; + immutable BUTTONS = [ Button(LEFT_WEDGE_RECT, Input.Dir.LEFT), Button(UP_WEDGE_RECT, Input.Dir.UP), @@ -176,6 +181,7 @@ version(InputBackendSDLTouch) { Button(DOWN_WEDGE_RECT, Input.Dir.DOWN), Button(A_BUTTON_RECT, Input.Button.A), Button(B_BUTTON_RECT, Input.Button.B), + Button(EXIT_BUTTON_RECT, EXIT_BUTTON_BIT), ]; } @@ -215,7 +221,7 @@ version(InputBackendSDLTouch) { } public override bool getExitState() { - return false; + return (state & EXIT_BUTTON_BIT) != 0; } public override bool getPauseState() { From 6a3345cc9ab820d9819c16c79ecce8840298a4e7 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sat, 2 Jan 2021 19:30:10 +0900 Subject: [PATCH 28/36] issue #15 add pause button. --- src/abagames/tt/virtualpad.d | 29 ++++++++++++++++++++--------- src/abagames/util/sdl/input.d | 10 +++++----- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/abagames/tt/virtualpad.d b/src/abagames/tt/virtualpad.d index e3190a1..025b41d 100644 --- a/src/abagames/tt/virtualpad.d +++ b/src/abagames/tt/virtualpad.d @@ -35,7 +35,7 @@ public class VirtualPad { drawA(); drawB(); - drawExit(); + drawPause(); GL.lineWidth(1); GL.popMatrix(); @@ -111,15 +111,26 @@ public class VirtualPad { GL.popMatrix(); } - void drawExit() { + void drawPause() { GL.pushMatrix(); - scaling(Backend.EXIT_BUTTON_RECT); - GL.begin(GL.LINES); - GL.vertex(-0.5, -0.5, 0); - GL.vertex( 0.5, 0.5, 0); - GL.vertex( 0.5, -0.5, 0); - GL.vertex(-0.5, 0.5, 0); - GL.end(); + scaling(Backend.PAUSE_BUTTON_RECT); + if (pad.getPauseState()) { + GL.begin(GL.TRIANGLES); + GL.vertex(-0.5, -0.5, 0); + GL.vertex( 0.5, -0.5, 0); + GL.vertex( 0.5, 0.5, 0); + GL.vertex(-0.5, -0.5, 0); + GL.vertex( 0.5, 0.5, 0); + GL.vertex(-0.5, 0.5, 0); + GL.end(); + } else { + GL.begin(GL.LINE_LOOP); + GL.vertex(-0.5, -0.5, 0); + GL.vertex( 0.5, -0.5, 0); + GL.vertex( 0.5, 0.5, 0); + GL.vertex(-0.5, 0.5, 0); + GL.end(); + } GL.popMatrix(); } diff --git a/src/abagames/util/sdl/input.d b/src/abagames/util/sdl/input.d index 964cc66..1c579ed 100644 --- a/src/abagames/util/sdl/input.d +++ b/src/abagames/util/sdl/input.d @@ -169,10 +169,10 @@ version(InputBackendSDLTouch) { BUTTON_SIZE, BUTTON_SIZE); - immutable EXIT_BUTTON_RECT = ButtonRect( + immutable PAUSE_BUTTON_RECT = ButtonRect( 20.0, 20.0, 30.0, 30.0); - enum EXIT_BUTTON_BIT = 1024; + enum PAUSE_BUTTON_BIT = 1024; immutable BUTTONS = [ Button(LEFT_WEDGE_RECT, Input.Dir.LEFT), @@ -181,7 +181,7 @@ version(InputBackendSDLTouch) { Button(DOWN_WEDGE_RECT, Input.Dir.DOWN), Button(A_BUTTON_RECT, Input.Button.A), Button(B_BUTTON_RECT, Input.Button.B), - Button(EXIT_BUTTON_RECT, EXIT_BUTTON_BIT), + Button(PAUSE_BUTTON_RECT, PAUSE_BUTTON_BIT), ]; } @@ -221,11 +221,11 @@ version(InputBackendSDLTouch) { } public override bool getExitState() { - return (state & EXIT_BUTTON_BIT) != 0; + return false; } public override bool getPauseState() { - return false; + return (state & PAUSE_BUTTON_BIT) != 0; } } From d0fe7206ba4f19261507023389c5f801bc89e4bc Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sun, 3 Jan 2021 10:37:57 +0900 Subject: [PATCH 29/36] issue #17 move ios dirs. --- .gitmodules | 2 +- build-ios.sh | 26 --------------- ios/.gitignore | 3 ++ ios/build-ios.sh | 32 +++++++++++++++++++ {ios-libs => ios/libs}/.gitignore | 0 {ios-libs => ios/libs}/00_copy_druntimes.sh | 0 .../libs}/01_download-and-build-SDL2.sh | 0 .../libs}/02_download-and-build-SDL2_mixer.sh | 0 {ios-libs => ios/libs}/03_build-bindbc-sdl.sh | 0 {ios-libs => ios/libs}/bindbc-sdl | 0 {ios-project/tt => ios/project}/.gitignore | 1 + .../project}/tt.xcodeproj/project.pbxproj | 4 +++ .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../AccentColor.colorset/Contents.json | 0 .../AppIcon.appiconset/Contents.json | 0 .../project}/tt/Assets.xcassets/Contents.json | 0 {ios-project/tt => ios/project}/tt/Info.plist | 0 {ios-project/tt => ios/project}/tt/main.m | 0 .../run-ios-simulator.sh | 2 +- 20 files changed, 42 insertions(+), 28 deletions(-) delete mode 100755 build-ios.sh create mode 100644 ios/.gitignore create mode 100755 ios/build-ios.sh rename {ios-libs => ios/libs}/.gitignore (100%) rename {ios-libs => ios/libs}/00_copy_druntimes.sh (100%) rename {ios-libs => ios/libs}/01_download-and-build-SDL2.sh (100%) rename {ios-libs => ios/libs}/02_download-and-build-SDL2_mixer.sh (100%) rename {ios-libs => ios/libs}/03_build-bindbc-sdl.sh (100%) rename {ios-libs => ios/libs}/bindbc-sdl (100%) rename {ios-project/tt => ios/project}/.gitignore (92%) rename {ios-project/tt => ios/project}/tt.xcodeproj/project.pbxproj (99%) rename {ios-project/tt => ios/project}/tt.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename {ios-project/tt => ios/project}/tt.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {ios-project/tt => ios/project}/tt/Assets.xcassets/AccentColor.colorset/Contents.json (100%) rename {ios-project/tt => ios/project}/tt/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {ios-project/tt => ios/project}/tt/Assets.xcassets/Contents.json (100%) rename {ios-project/tt => ios/project}/tt/Info.plist (100%) rename {ios-project/tt => ios/project}/tt/main.m (100%) rename run-ios-simulator.sh => ios/run-ios-simulator.sh (87%) diff --git a/.gitmodules b/.gitmodules index 4216a97..0c8d396 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "ios-libs/bindbc-sdl"] - path = ios-libs/bindbc-sdl + path = ios/libs/bindbc-sdl url = https://github.com/BindBC/bindbc-sdl.git diff --git a/build-ios.sh b/build-ios.sh deleted file mode 100755 index 2b269b7..0000000 --- a/build-ios.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -cd `dirname $0` - -DIST_DIR=`pwd`/dist - -dub build --arch=arm64-apple-ios --config=iOS || exit $? -libtool -static -o dist/libtt-ios-arm64.a dist/libtt.a ios-libs/*-arm64.a &> /dev/null - -dub build --arch=x86_64-apple-ios --config=iOS || exit $? -libtool -static -o dist/libtt-ios-x86_64.a dist/libtt.a ios-libs/*-x86_64.a &> /dev/null - -xcrun -sdk iphoneos lipo -create \ - dist/libtt-ios-arm64.a \ - dist/libtt-ios-x86_64.a \ - -output dist/libtt-ios.a \ - &> /dev/null - -xcodebuild -project ./ios-project/tt/tt.xcodeproj \ - -scheme tt \ - -sdk iphonesimulator \ - clean build \ - CONFIGURATION_BUILD_DIR=${DIST_DIR} \ - ARCHS=x86_64 \ - ONLY_ACTIVE_ARCH=NO - diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 0000000..8d25eee --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +build/ + diff --git a/ios/build-ios.sh b/ios/build-ios.sh new file mode 100755 index 0000000..17be36b --- /dev/null +++ b/ios/build-ios.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +cd `dirname $0` + +IOS_DIR=`pwd` +LIBS_DIR=${IOS_DIR}/libs +BUILD_DIR=${IOS_DIR}/build + +cd ../ + +DIST_DIR=`pwd`/dist + +dub build --arch=arm64-apple-ios --config=iOS || exit $? +libtool -static -o ${LIBS_DIR}/libtt-ios-arm64.a ${DIST_DIR}/libtt.a ${LIBS_DIR}/*-arm64.a &> /dev/null || exit $? + +dub build --arch=x86_64-apple-ios --config=iOS || exit $? +libtool -static -o ${LIBS_DIR}/libtt-ios-x86_64.a ${DIST_DIR}/libtt.a ${LIBS_DIR}/*-x86_64.a &> /dev/null || exit $? + +xcrun -sdk iphoneos lipo -create \ + ${LIBS_DIR}/libtt-ios-arm64.a \ + ${LIBS_DIR}/libtt-ios-x86_64.a \ + -output ${LIBS_DIR}/libtt-ios.a \ + &> /dev/null + +xcodebuild -project ${IOS_DIR}/project/tt.xcodeproj \ + -scheme tt \ + -sdk iphonesimulator \ + clean build \ + CONFIGURATION_BUILD_DIR=${BUILD_DIR} \ + ARCHS=x86_64 \ + ONLY_ACTIVE_ARCH=NO + diff --git a/ios-libs/.gitignore b/ios/libs/.gitignore similarity index 100% rename from ios-libs/.gitignore rename to ios/libs/.gitignore diff --git a/ios-libs/00_copy_druntimes.sh b/ios/libs/00_copy_druntimes.sh similarity index 100% rename from ios-libs/00_copy_druntimes.sh rename to ios/libs/00_copy_druntimes.sh diff --git a/ios-libs/01_download-and-build-SDL2.sh b/ios/libs/01_download-and-build-SDL2.sh similarity index 100% rename from ios-libs/01_download-and-build-SDL2.sh rename to ios/libs/01_download-and-build-SDL2.sh diff --git a/ios-libs/02_download-and-build-SDL2_mixer.sh b/ios/libs/02_download-and-build-SDL2_mixer.sh similarity index 100% rename from ios-libs/02_download-and-build-SDL2_mixer.sh rename to ios/libs/02_download-and-build-SDL2_mixer.sh diff --git a/ios-libs/03_build-bindbc-sdl.sh b/ios/libs/03_build-bindbc-sdl.sh similarity index 100% rename from ios-libs/03_build-bindbc-sdl.sh rename to ios/libs/03_build-bindbc-sdl.sh diff --git a/ios-libs/bindbc-sdl b/ios/libs/bindbc-sdl similarity index 100% rename from ios-libs/bindbc-sdl rename to ios/libs/bindbc-sdl diff --git a/ios-project/tt/.gitignore b/ios/project/.gitignore similarity index 92% rename from ios-project/tt/.gitignore rename to ios/project/.gitignore index c545112..41d1629 100644 --- a/ios-project/tt/.gitignore +++ b/ios/project/.gitignore @@ -1 +1,2 @@ xcuserdata/ + diff --git a/ios-project/tt/tt.xcodeproj/project.pbxproj b/ios/project/tt.xcodeproj/project.pbxproj similarity index 99% rename from ios-project/tt/tt.xcodeproj/project.pbxproj rename to ios/project/tt.xcodeproj/project.pbxproj index d850147..ec87234 100644 --- a/ios-project/tt/tt.xcodeproj/project.pbxproj +++ b/ios/project/tt.xcodeproj/project.pbxproj @@ -321,11 +321,13 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; + HEADER_SEARCH_PATHS = ../libs/SDL/include; INFOPLIST_FILE = tt/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + LIBRARY_SEARCH_PATHS = ../libs; PRODUCT_BUNDLE_IDENTIFIER = com.example.tt; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; @@ -338,11 +340,13 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; + HEADER_SEARCH_PATHS = ../libs/SDL/include; INFOPLIST_FILE = tt/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); + LIBRARY_SEARCH_PATHS = ../libs; PRODUCT_BUNDLE_IDENTIFIER = com.example.tt; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/ios-project/tt/tt.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/project/tt.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from ios-project/tt/tt.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to ios/project/tt.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/ios-project/tt/tt.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/project/tt.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from ios-project/tt/tt.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to ios/project/tt.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/ios-project/tt/tt/Assets.xcassets/AccentColor.colorset/Contents.json b/ios/project/tt/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from ios-project/tt/tt/Assets.xcassets/AccentColor.colorset/Contents.json rename to ios/project/tt/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/ios-project/tt/tt/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/project/tt/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from ios-project/tt/tt/Assets.xcassets/AppIcon.appiconset/Contents.json rename to ios/project/tt/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/ios-project/tt/tt/Assets.xcassets/Contents.json b/ios/project/tt/Assets.xcassets/Contents.json similarity index 100% rename from ios-project/tt/tt/Assets.xcassets/Contents.json rename to ios/project/tt/Assets.xcassets/Contents.json diff --git a/ios-project/tt/tt/Info.plist b/ios/project/tt/Info.plist similarity index 100% rename from ios-project/tt/tt/Info.plist rename to ios/project/tt/Info.plist diff --git a/ios-project/tt/tt/main.m b/ios/project/tt/main.m similarity index 100% rename from ios-project/tt/tt/main.m rename to ios/project/tt/main.m diff --git a/run-ios-simulator.sh b/ios/run-ios-simulator.sh similarity index 87% rename from run-ios-simulator.sh rename to ios/run-ios-simulator.sh index 158384c..c194c2b 100755 --- a/run-ios-simulator.sh +++ b/ios/run-ios-simulator.sh @@ -3,7 +3,7 @@ cd `dirname $0` APP_ID=com.example.tt -APP_BUNDLE_PATH=`pwd`/dist/tt.app +APP_BUNDLE_PATH=`pwd`/build/tt.app DEVICE_ID="547B7D16-D2AA-40D1-A807-61D083A71CA8" xcrun simctl boot ${DEVICE_ID} From 6e577c1f35f050e60add8cc1abfaa82268ae50b4 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sun, 3 Jan 2021 10:47:25 +0900 Subject: [PATCH 30/36] issue #17 add iOS app icon set. --- .gitignore | 5 ++++- ios/.gitignore | 1 - .../AppIcon.appiconset/Contents.json | 18 ++++++++++++++++++ .../AppIcon.appiconset/icon-1024x1024.png | Bin 0 -> 131402 bytes .../AppIcon.appiconset/icon-120x120-1.png | Bin 0 -> 9799 bytes .../AppIcon.appiconset/icon-120x120.png | Bin 0 -> 9799 bytes .../AppIcon.appiconset/icon-152x152.png | Bin 0 -> 13355 bytes .../AppIcon.appiconset/icon-167x167.png | Bin 0 -> 14831 bytes .../AppIcon.appiconset/icon-180x180.png | Bin 0 -> 16215 bytes .../AppIcon.appiconset/icon-20x20.png | Bin 0 -> 1221 bytes .../AppIcon.appiconset/icon-29x29.png | Bin 0 -> 1654 bytes .../AppIcon.appiconset/icon-40x40-1.png | Bin 0 -> 2083 bytes .../AppIcon.appiconset/icon-40x40-2.png | Bin 0 -> 2083 bytes .../AppIcon.appiconset/icon-40x40.png | Bin 0 -> 2083 bytes .../AppIcon.appiconset/icon-58x58-1.png | Bin 0 -> 3912 bytes .../AppIcon.appiconset/icon-58x58.png | Bin 0 -> 3912 bytes .../AppIcon.appiconset/icon-60x60.png | Bin 0 -> 4055 bytes .../AppIcon.appiconset/icon-76x76.png | Bin 0 -> 5463 bytes .../AppIcon.appiconset/icon-80x80-1.png | Bin 0 -> 5808 bytes .../AppIcon.appiconset/icon-80x80.png | Bin 0 -> 5808 bytes .../AppIcon.appiconset/icon-87x87.png | Bin 0 -> 6492 bytes 21 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-1024x1024.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-120x120-1.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-120x120.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-152x152.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-167x167.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-180x180.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-20x20.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-29x29.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-40x40-1.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-40x40-2.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-40x40.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-58x58-1.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-58x58.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-60x60.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-76x76.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-80x80-1.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-80x80.png create mode 100644 ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-87x87.png diff --git a/.gitignore b/.gitignore index beed7b4..0dbc27c 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,7 @@ tt-test-* *.lib *.obj *.lst -*.sln \ No newline at end of file +*.sln + +.DS_Store + diff --git a/ios/.gitignore b/ios/.gitignore index 8d25eee..dc84959 100644 --- a/ios/.gitignore +++ b/ios/.gitignore @@ -1,3 +1,2 @@ -.DS_Store build/ diff --git a/ios/project/tt/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/project/tt/Assets.xcassets/AppIcon.appiconset/Contents.json index 9221b9b..4955743 100644 --- a/ios/project/tt/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/project/tt/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,91 +1,109 @@ { "images" : [ { + "filename" : "icon-40x40.png", "idiom" : "iphone", "scale" : "2x", "size" : "20x20" }, { + "filename" : "icon-60x60.png", "idiom" : "iphone", "scale" : "3x", "size" : "20x20" }, { + "filename" : "icon-58x58.png", "idiom" : "iphone", "scale" : "2x", "size" : "29x29" }, { + "filename" : "icon-87x87.png", "idiom" : "iphone", "scale" : "3x", "size" : "29x29" }, { + "filename" : "icon-80x80.png", "idiom" : "iphone", "scale" : "2x", "size" : "40x40" }, { + "filename" : "icon-120x120.png", "idiom" : "iphone", "scale" : "3x", "size" : "40x40" }, { + "filename" : "icon-120x120-1.png", "idiom" : "iphone", "scale" : "2x", "size" : "60x60" }, { + "filename" : "icon-180x180.png", "idiom" : "iphone", "scale" : "3x", "size" : "60x60" }, { + "filename" : "icon-20x20.png", "idiom" : "ipad", "scale" : "1x", "size" : "20x20" }, { + "filename" : "icon-40x40-1.png", "idiom" : "ipad", "scale" : "2x", "size" : "20x20" }, { + "filename" : "icon-29x29.png", "idiom" : "ipad", "scale" : "1x", "size" : "29x29" }, { + "filename" : "icon-58x58-1.png", "idiom" : "ipad", "scale" : "2x", "size" : "29x29" }, { + "filename" : "icon-40x40-2.png", "idiom" : "ipad", "scale" : "1x", "size" : "40x40" }, { + "filename" : "icon-80x80-1.png", "idiom" : "ipad", "scale" : "2x", "size" : "40x40" }, { + "filename" : "icon-76x76.png", "idiom" : "ipad", "scale" : "1x", "size" : "76x76" }, { + "filename" : "icon-152x152.png", "idiom" : "ipad", "scale" : "2x", "size" : "76x76" }, { + "filename" : "icon-167x167.png", "idiom" : "ipad", "scale" : "2x", "size" : "83.5x83.5" }, { + "filename" : "icon-1024x1024.png", "idiom" : "ios-marketing", "scale" : "1x", "size" : "1024x1024" diff --git a/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-1024x1024.png b/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-1024x1024.png new file mode 100644 index 0000000000000000000000000000000000000000..53235b873fabc0d69c45a1c997e4f7a6bbe2dbac GIT binary patch literal 131402 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%0A^YKilBjzNt{k} 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⩔-1Og#^>AE|Fpzie6h3!h;M83lH)S)2RGbacHW{;hw3US{EX6TA z$t;i4Q4aR=o^My&-?V)@FV-$pXd(;{%Lc&@s3se;BH;Bg%$)LPnG5`w`~`3dCsH@8 z6x(59VuCy!&db4+z8gyzr=_6rpg^?ePH}Pbx;SUeg&w)e05=8UypQv}?%5HmhQ+wT zHS0UgL!udrE%iVBwO}&9zAx!X-BRa!q_)3c@#L`IVArpMzBi-K1-7-fBihq!FzF|e zV3%fPA_rc$t^z^H)v(>UFzqvEacJgF|+vtpK+$OET$1GZB9rwWXOBU$IkC)N&O;K6- zE}h=E@CdtOsi;%CFzp{yAK!BP8ux)jl)@lrJ!hpF+2k#qrdmF~1WZG`x(i)ns&iiWqff-_}v#aY|!;PL6l7QDmJ6pY7NWO9X zQA7Q2APUH+khaA>mUIl;X0Nr=*0PB!YiVEivP+XDbv)Dq>s7=AWh*eCn|!fj-BMWdyu@^=c1-8p8ws z(((DtcWnvtam&s{TSYGBSm1cWnp3dZP1V5ud}#7;nwDFB zcky3;wS)xj-CN^yF1fFyi*pnuh6pKXbfl`j(<8Og-xAU+&_R*Yqf9^oP0fx46?JvL zeUWpm;x!A4;Xaoax4b>NbHO0#`Kp@{GX=wQ8&h(?y|Bv&-H=0Sz=$I|pdhi!$tg2H z6{mJ$7K=st13uOSm33{!;PW=N;^7h{-U_`=EgkBP8?2f>qtU0BStN%#g-&9#S;zPK z=8(=r4)K!QXKiy@A8YPfsnU$M|Cy!cP}T9o|L?_`Ksiya_PHSo{rv3_uVBO- zjMg@w1(ro}iWje6zjPr_av=w;x7NPd7K}`{kJ5Dt*u5zNq>k})rX}OF$q|XE@urr? zMfpxvHEqvFjdC(V>Cs;XqwA+tWp5WV|7?lQU5sXY+^bYICu7pJ%+-+LbZaM(#dRlK zkeUTDwGQh&YhA2f_U^|Ekw1jg`S>c%uKm19==F}`yu3AC!W; zg8bI)3R@NAe^=O{wqu8y(oR`SUPEYH_Qt(+}^4Z^=ecbHS)O0=UecT+~ zz17ry#YerU?U{=u+whq+|Kl?TE@gbrAakWFg<5Sf3o$@M5^2!Q3c52E$ ziN{Cy{>Mjtb2;Zo?cA|lNokL9*vmxxSE>K;UyY9#P{&+OIO6%`B*3H{PJO94`E5puv literal 0 HcmV?d00001 diff --git a/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-120x120-1.png b/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-120x120-1.png new file mode 100644 index 0000000000000000000000000000000000000000..377378a185f57d3878434cc899be8b1b8fc68e0b GIT binary patch literal 9799 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 literal 0 HcmV?d00001 diff --git a/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-120x120.png b/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..377378a185f57d3878434cc899be8b1b8fc68e0b GIT binary patch literal 9799 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 literal 0 HcmV?d00001 diff --git a/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-152x152.png b/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..1e498ca1888062a92197cd50f44016afe0ce73f1 GIT binary patch literal 13355 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 literal 0 HcmV?d00001 diff --git a/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-167x167.png b/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-167x167.png new file mode 100644 index 0000000000000000000000000000000000000000..3380b3a79be17e48605b640e5953fb0035a17a40 GIT binary patch literal 14831 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 literal 0 HcmV?d00001 diff --git a/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-20x20.png b/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-20x20.png new file mode 100644 index 0000000000000000000000000000000000000000..da115d35e9faa4f1336f9e6827b2f5851f21a28d GIT binary patch literal 1221 zcmZ{hdrVtZ9LG<241o*_18GNitw0&2?QLtRy9lMV^nGt{@1rkD>Fc(=ls-mVUQ^tl zbF!E$BSwvJ(Tv53GmGvIv!F{b8jTU(iGP|&AkMkrpG%Aho-QWh5|i^gzjJ=)^ZWjO z=bRM+Hyy4yS_1$$Y%v>1=o?G+SUH?G-1oK6Rm63e4uB6X)czH!g!_(&nZy8C=mFq# z5r98o==2=`3J3sqg8-nf0nnU%W5fA00KDf2J3R^k9*XT#4*1R#xLh(kmuAl` zq|QH^$tFVa(AdhUG#44S+Uz)v+3hx|RNB_o=J9yK0dF!oKA&M1vayp~Xf_p{O|$F- z6q$q_)YR0t88Q;^IvhAG$xvj#=XMefnuM+60smNgd%H{~3y*u3XOnXowm3I+W@d6} zW->bATUngue751?;Y8TKm`lu*l%swR^V0LVc-T*yP|fic9uLUna+k|B?qyuG6T^v- zp~1%by7Kb!k&zLHgCLwFNm3@WMWIkUURP%}o3+|uxm+d?2r4QnDl04Z_xFENufdN1 zys*t=Sk&Is<>00|YxY84_i4#^Uu52i!eCY2f{j+~^2&LAT@Q}!@L*`)V$jioA0xqz zRz#^#F7+CV{3EOVt9(_hq-C&5+^q4RKlkeLg^3Zu>@klNn=adFyI)UQeMT1^FdB8m z$}70j;vHqM@n-@QWeWt1L`(16YuB!3f{Ex{G^U;{#iM`uFe!Z}%^+@fL3fye` zT>EoZ=l7kR7VU{{we(Wwa;M6sGY)@8+EjyLxKM1 z?Y`)h6Mfg-O`dKG6;Hjn{^6mmkiN+8dS7tS@M0BsS=js8H`}?d;8S$xM?LvyD9@si zX%;%5M3jhBp_D2STB$-+DpWlnK@b!{wv=aY{U;%niE^>||4+D;87e(?N2x+C6U)zr zrdg24=d(FfF6UCAI17!7BxRZD_{ZP2UV^Nk#L|gEDvY9rOr(%v(|HsnAesY;tNS0x zAtOA%SV}4=YG%23A`cV_wFY^w@Zb@le;_v(%_kl*-Mj01j|gF0ip|ewS@5tgc{Ux_ z-f-a%YCcd6qag(p1ISZqM59y<3?Un@K&0USLU9W$7*HwHYCZG9m#@Rqo&%>0X#p{A giiP)=$^IQ&B$JlGl5h3!4#5my8O06P^}(gT0XSQFvH$=8 literal 0 HcmV?d00001 diff --git a/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-29x29.png b/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-29x29.png new file mode 100644 index 0000000000000000000000000000000000000000..dfd82d48cc433555b49b517a96751011d5335ba0 GIT binary patch literal 1654 zcmZ{k2~5*h9LHbF(aNRupsfTaiolSgg%qSxZLy{Om;QVA|L;w&fA7m4AUGAdad?1= zZrO~9Q_(mlW-gnXi|&e1E_9@{S(4 zRG6MJI|Trc4vF|m+-FZ3IRWpj@HP(a5?wr)2f)zA)YsM|Jf3S8DPaJb^8jdR2jC?> z)N&7iI0JwO7691W0icFII;yA!fM}3Q)B+qJ5C}vfF)1l2At50%Gqa$eVDaL`H8nLl zoo?yUrEE5v&*!Vv>gww1qN1X-v^1$yilV4it5qlzFbvD(a-~wqWHR&f^C1YTtE-bp zBqo!ova&KKXRb^p)1s(Sp^!>pyh&faV$^DkI*m*!jr;9Zla@xK6&4n5XjyJEY1>!$ zdsl~JK6}(_TOD<;3_A^4O;>YZ{pzq5QE4=qoSYns#Uh1a5hU(;FK98K9Zi0lNw9>UD_9Yd3jpM!8I; zN7WIpO^2ujI4u@ywdmBTQqj1F^4TTcL9Y$ z+0(zetD3QvDI7a|H z9?xhr;wOY?G#pNK0+E=Nl~q+$WwY5F4u?P>V6j+p=FB0J$tfu*85tR=si_ka6EmjE zXG~r%Tb+=9Ci^Hlf(KK=B3%@Kj1!YaI2{^v;De+X1Pe%a2nmG3Qp;mb53U)5_&jyN zMZ1MIv!$=6hazgF_0p7fPJk`;@;6{WCLGR|6c^(g)uAomF7#P^vmR0!K&cWQ``Gtc;`-=)v2+G3!(;!wn z9WD-Jn>edhDH5^=5A?R?XvfZ6IXOQ1(|2PdqgRJ74_`1-=PkSi`eSO!cqGy=)EJMx zc>L_?^Cunmwmw%SiC>aLq~xTo_RbDrqOevVJbiNb)U|afBe`Khx>VAiIcr=jh2XkN zRQTeV(UA*h&wr0zI9FPbIFk89yzt>Q>NfJg@T=M_O}p=IMb&$d`|2OYiRVA9+eFb+ zbRP`4{ZGH}d4rxn(D&jI`TlPYlAAs!xevKR^%LzqoAbKvKXW~RKk!yAzxs?`?qZH6 z&ra)~HU4D#?TW@7rqiznI+KE_)ME4D*pHFUS!rntJD&2^?%FnQ{;ti(#B1VrXJ0?^ z@N&p+aHO*Cp`ViZJ7M@H(izw!|M}ZClvnHByJfI-ti;-P{m9=zXHV;^T5<0&<(ZqbZ}CX;=;KB6i^_&})BHVCGXLo9y@I(D!HT?~ z=3L^XD*V6~#01)y!y3cb_6UYMP{t@@6f?_;%NXjia&~z+n^m!p!C*5Oqh%e({v`;6 z93E%W{|k9O0aA)76|0IGv0W8)O#=x6(m4<_^rH2tI4pHB#2CH!jFe?~~Sd7ZD@(K>)=m3sP ze+yB0nlVsO&SbG_G@WNZ#Aox~n$;*F;Pm)0eE%gS|1^(16fD6@?#v@3;|c%?r2K<5 Hme#)jJLNl{ literal 0 HcmV?d00001 diff --git a/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-40x40-1.png b/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-40x40-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8b3d3f93d0dc72b46219281779a11547120be922 GIT binary patch literal 2083 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 Ue0h#PJ7f^rK45fCL{ zL~2Bup-K^n2q@yazWHXp|9dlU&OLYMp7Yz?vpais@1|N@xx~&Q!U6(;*b%12Rshxg zJDHh)H|&TK2oMH$19Jlqs5z7M2+at5i@TUwnS(%)QXo)l0toaISc+W(fkKo)pf64U z*Fz9U(7%Le`BxB=^W{s%pg(^{c~@O7uyV@Z)IJCV;^_N3PYn7!as?Jo1|!T(PA;FI zKOxKOO5hm*PLqc)Hn8@X+bVh+Bx)P^GG?|(bQYA7Cq7^Tk;&y@lzm{Nkk32jawA)Q z^1)`IkyW1Tsw;kI|L6q%Q%=3ZV8PqZL-*Y|QcKNrHI|#@U38k=4ZR@6geQ4?3MmYN z{(X}dszxt!h>KfPdV4nK5e^+K#N(ppzuuXTnrAw-bHI^$^pt;^Y3?86csphHDStZ( zg7~--Dg8~?uWutCM>aw#NFqG%MwEq34QUzYFDvL%MHzh=gB`=J4H#8$5gU0k2e}Ow zh>B^I<@Iv4*v}EC4Vi6hZDsS!_*fFzvk1@_*@G#LPqCknsoUGWKY#vAxmeZjta22s zuZQC#)3Pvyp3jMk!i^gMryj29aE<`oJ=DE-@18@uf1GpkG{e02wI0odq~hm_BIy@} zg@np`dT`;oSCobNLmUC*geO0V;151YrujRD#W!fayfIHA+^>{bBVK_D7%}(mZA_hy zIo2&i)*hBlrbjQlY$ICB@HzYYXIaacL`CV;Vx5JUlF&}}He)6j`?-bP8+or+rd!jw z?)qyZZEXb$6dgZrwas^reB@+1un`migO_#|`;4nBy=SCwWEY`}V~&YjZT6ed)!(2q zt<65gb8|Nxrk3}nZVf8mudVqi+Rksy+`G0W)7RH$EWtfFIr(Ol*4}uJi|%YcJ^hhf zsazgQsxh7USoq$At)K637hM~%5lRB72Wz{2C> z==}WraN3C0hWqi&(^3g91Hd4TGkU{-mJI6C_IA_f*G*6;b@R@q>ByeXM8)VH98#*U z3?2peekrh{lis(ziK@-U#^%2{t&+gy+G39!>tCh8gWr!-+d);;)%z(e?rj{Op4LN2 zxBv8?Vmf*9?eK`D9RIh&+iS$6jXAb6JPWN!@%b}h^2GsdxOwDtY6Mh(zBTKzmSG}Q z8qk-H3js9n&g zM3*J9=IR`nk=h_!CL&hdq-NG=z1Wr6bQa+><&d%cwXR8RXfILYonx5+ios^&;u}>% z)9H+v1S|eReK-uM{U~VpH4o05T!kNk+kd3#LJ-baEdJeh)KidB_kjf7I<3LB>GQNE zvDOlQ9XvZlcERh_=f|%`9=%L*M))FZ{zVl{bQ)PN?tAyA*36U9%aS)lTsKYy-6ujQm+P94Wz z^C)_~v;@&JH=@Zp9686`dOGkr%xdet5{_Z3`EOA^B{Ca!1@Sc{?S_bc_ zFKjf#(*7Rp;21(WA74`vhoyY78&>JDy09-htR%=q7~Zrh zTQ2Fv>CAaB2p1Jm|-bFouPif}750bev(u zd+3zrOjl!gideJ7?;m-R#2KT6c$mgaZxenqrHy+W^|8vJcGc!!*-y#oy5^lyOGtSq z94S-oG6Amif&JF0^r$y{va-|LuikU`8?rv2A>k8A)9ex5kW0JEb$5S0<_u^sz?T@@ zmxqfvj&QYi^YLMKoYG2WOn}l3zw3%uFbhxZX$N7GE+t0_32(ll*XzzfcUY{nc+no_ zo4;vN3DD>>>wQTOd#zM0tn>6yv>2rXIAjkKokCGjbi!Ap!5YgaC;YO=-u^O z3c*v0B}DD}>K*O$xg9SMec=VZFAz0WVEyP4Qh^e6|5wj5FY&iLD3U?W%eqNwHTrsW zPHC|8D?T$R9MWw^_HGfik|mCdXCh>Z&#?A-%VFPam+{Bo4>T_a5|np*W8n8(+!YCf zQv5KB+P(8fMIYHzp3F_NP`F5hqM9{PzZU_kyF1_4$6Q+|O)t2`1_weNtWmKiH3kjr zuj-~P%S{xe%P}mLXHbdE9UQCeifLJv{BawR%=WcT568hLXX`$!?4xx;2GW*2;b$iA z9Ndw6M+~WNr7xR$p)?sJ`1txA8s?Otj}HU}3t!H&Eh-*$vJ#P{HoFW01%O1@4);Cb zFjWQTfe8F)dFCdbV64mMB&AIJ(xwNfjX3wukq z+A~N;^>LN!M@P@6G{F-|K;|u%VF8l-@Vj@F^Y~${BhwM9t7Y6Q+)8qSe zC^NVVIgFAwcBW$XT>=k}lIk1J(j636RGiIu3u$O*82K48R?KOUfOL~3A0&!yen|zQ z`gr+C%W#vxVT(J5zhvpMdyif+swLvb8|5ig`I6fb15szLew#eNJTB^U`Sr5{)-s%# zk-4kSJ9hLdCgvib*QieiaL{1p=3<>+>2j%>?OF;`M0H)MGX*eEFM1b8E$Il4Kg^?R zTn&IskbyiNeY|br7Ni;XnUCU~?-kTw9yaf!9_y-#=y150^2A+zfRKu%2-TY49T>?~ zP7j}5ia#2C1ImF|;wK+bI4BzQeb1ET1ZvVuDjWt{#cWuZ82kDk*;&_X)N6>25%3Q+ zen{y=IJ*j#Hghpnb=wTo2Y7@_U)q<%a-Ix;zu`|ya5)vdGmMss-oI7tzLJ#?d8vy( z))aCVTQs7$Xq#%SfAn~XosQUaI$t-FV1EugzK$^FBJ@YC*4iluS=S4cu@+tJ4RNf` zPv2@^V$XH1F}tvDsp-XcUk(VRj15AJtzf-GP>5S0=ew)9DGb?JLRUh$*coL|$PcXY z4Clo7E=wwA^pI|yzWlB8Uds!3G(KY9n+2SH(f;PmIi5}PKR?m+c|=ZG~2^$geO?^0PNf>lx><&SZE*p`<+gE=o5~xz$hTdRQp?k)7oOO3dhO4BFbrF> zocOanDno;ly}od9BqJa^)nnM#`ae@@yame7yLQ%z*ym%&A&$T`RC=*PckSA>kgNwyjs=OCFVEYil1(cplvDo`LR` zgW%-8fRYt!2`~pQOX4G&2B4U#=;?K%c@E02_l$h5I8lm}Iv=qMNkV6hxM8cy($Q11 z-WM7~wV*CDnmLdPtVpjDSI>NAE|HVlav8>(~$L>Um~~Ht_AK zkT!--7L66&;#^Lyt_j`Udd|&uE&8($shUh5*e&@OO)Rq@r%84gcJ z3q3HC1R8&pAVzBNW!5|eC4K3xzA^ZO&=>I^rSl3{We`6$<@!S6;$Q{nF${|D>h=c@>)ESEa*w_yh%Os*I=8amzm7rS(v Ab^rhX literal 0 HcmV?d00001 diff --git a/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-76x76.png b/ios/project/tt/Assets.xcassets/AppIcon.appiconset/icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..b9005235fa906f4380950d9ef0b0d27c737e7315 GIT binary patch literal 5463 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 literal 0 HcmV?d00001 From c7259fa22fed19e193c9c1d3f6c114f8a80e8ba7 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sun, 3 Jan 2021 10:57:00 +0900 Subject: [PATCH 31/36] issue #17 fix build dir. --- ios/build-ios.sh | 2 +- ios/project/tt.xcodeproj/project.pbxproj | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ios/build-ios.sh b/ios/build-ios.sh index 17be36b..5ce904f 100755 --- a/ios/build-ios.sh +++ b/ios/build-ios.sh @@ -4,7 +4,7 @@ cd `dirname $0` IOS_DIR=`pwd` LIBS_DIR=${IOS_DIR}/libs -BUILD_DIR=${IOS_DIR}/build +BUILD_DIR=${IOS_DIR}/project/build cd ../ diff --git a/ios/project/tt.xcodeproj/project.pbxproj b/ios/project/tt.xcodeproj/project.pbxproj index ec87234..b484f9b 100644 --- a/ios/project/tt.xcodeproj/project.pbxproj +++ b/ios/project/tt.xcodeproj/project.pbxproj @@ -248,7 +248,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "../../ios-libs/SDL/include"; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../libs/SDL/include"; IPHONEOS_DEPLOYMENT_TARGET = 14.3; LIBRARY_SEARCH_PATHS = ../../dist; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; @@ -304,7 +304,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "../../ios-libs/SDL/include"; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../libs/SDL/include"; IPHONEOS_DEPLOYMENT_TARGET = 14.3; LIBRARY_SEARCH_PATHS = ../../dist; MTL_ENABLE_DEBUG_INFO = NO; From 751626f21ab70e6a9bdb488317b68fcbe6a51fb5 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sun, 3 Jan 2021 10:57:39 +0900 Subject: [PATCH 32/36] issue #17 update gitignore. --- ios/.gitignore | 2 -- ios/project/.gitignore | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 ios/.gitignore diff --git a/ios/.gitignore b/ios/.gitignore deleted file mode 100644 index dc84959..0000000 --- a/ios/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -build/ - diff --git a/ios/project/.gitignore b/ios/project/.gitignore index 41d1629..e705891 100644 --- a/ios/project/.gitignore +++ b/ios/project/.gitignore @@ -1,2 +1,3 @@ xcuserdata/ +build/ From fc21c8ff1214bf6b1cb0e36016319512209e5dc0 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sun, 3 Jan 2021 13:45:22 +0900 Subject: [PATCH 33/36] issue #19 add build instructions. --- ios/README.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 ios/README.md diff --git a/ios/README.md b/ios/README.md new file mode 100644 index 0000000..940fa6d --- /dev/null +++ b/ios/README.md @@ -0,0 +1,42 @@ +# iOS build instructions + +## Prerequire + +* for building + * LDC2 (>=1.24.0) + * Xcode (>=12.3) + * Apple account registration for App signing. + * Git + * curl +* for running + * iPhone/iPad/iPod touch (>= iOS 14.3) + * iOS Simulator + +## Instructions + +### Download and build libraries + +Change directory to `libs/` and run follow shells. + +1. `00_copy_druntimes.sh` + * Copy druntime and phobos library files from LDC2 directory. +1. `01_download-and-build-SDL2.sh` + * Download a SDL2 source tarball and build using iOS configuration. +1. `02_download-and-build-SDL2_mixer.sh` + * Download a SDL2_mixer source tarball and build using iOS configuration. +1. `03_build-bindbc-sdl.sh` + * Update bindbc-sdl from Github repository and build with patching to dub.sdl. + +### Build tt.app + +Change directory to this file directory. + +1. `build-ios.sh` + * Compile `libtt.a` object files. + * Merge dependency libraries. + * Build `project/build/tt.app` for iPhone simulator. +1. Build for real iOS devices using Xcode. + * Setting up signing capability in target configuration. + * It need Apple developer registration and private key for App signing. + * Build target `tt` for iOS arm64 architecture. + From 868e480b642e31193bf04a8fa5bf4de73442f4fc Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sun, 3 Jan 2021 14:11:19 +0900 Subject: [PATCH 34/36] issue #21 fix dub options. --- ios/build-ios.sh | 4 ++-- ios/libs/03_build-bindbc-sdl.sh | 4 ++-- ios/run-ios-simulator.sh | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ios/build-ios.sh b/ios/build-ios.sh index 5ce904f..0807a5e 100755 --- a/ios/build-ios.sh +++ b/ios/build-ios.sh @@ -10,10 +10,10 @@ cd ../ DIST_DIR=`pwd`/dist -dub build --arch=arm64-apple-ios --config=iOS || exit $? +dub build --compiler=ldc2 --arch=arm64-apple-ios --config=iOS || exit $? libtool -static -o ${LIBS_DIR}/libtt-ios-arm64.a ${DIST_DIR}/libtt.a ${LIBS_DIR}/*-arm64.a &> /dev/null || exit $? -dub build --arch=x86_64-apple-ios --config=iOS || exit $? +dub build --compiler=ldc2 --arch=x86_64-apple-ios --config=iOS || exit $? libtool -static -o ${LIBS_DIR}/libtt-ios-x86_64.a ${DIST_DIR}/libtt.a ${LIBS_DIR}/*-x86_64.a &> /dev/null || exit $? xcrun -sdk iphoneos lipo -create \ diff --git a/ios/libs/03_build-bindbc-sdl.sh b/ios/libs/03_build-bindbc-sdl.sh index 9aaec40..6ef268d 100755 --- a/ios/libs/03_build-bindbc-sdl.sh +++ b/ios/libs/03_build-bindbc-sdl.sh @@ -15,10 +15,10 @@ configuration "staticBCwithMixer" { EOS cd ${LIBS_DIR}/bindbc-sdl -dub build --arch=arm64-apple-ios --config=staticBCwithMixer +dub build --compiler=ldc2 --arch=arm64-apple-ios --config=staticBCwithMixer mv lib/libBindBC_SDL.a ${LIBS_DIR}/libBindBC_SDL-arm64.a -dub build --arch=x86_64-apple-ios --config=staticBCwithMixer +dub build --compiler=ldc2 --arch=x86_64-apple-ios --config=staticBCwithMixer mv lib/libBindBC_SDL.a ${LIBS_DIR}/libBindBC_SDL-x86_64.a cd ${LIBS_DIR}/bindbc-sdl && git reset --hard diff --git a/ios/run-ios-simulator.sh b/ios/run-ios-simulator.sh index c194c2b..bc3941c 100755 --- a/ios/run-ios-simulator.sh +++ b/ios/run-ios-simulator.sh @@ -3,7 +3,7 @@ cd `dirname $0` APP_ID=com.example.tt -APP_BUNDLE_PATH=`pwd`/build/tt.app +APP_BUNDLE_PATH=`pwd`/project/build/tt.app DEVICE_ID="547B7D16-D2AA-40D1-A807-61D083A71CA8" xcrun simctl boot ${DEVICE_ID} From 7a33272d25a5628beaddbff9154a7998ad38d3f6 Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Sun, 3 Jan 2021 14:37:38 +0900 Subject: [PATCH 35/36] issue #21 fix dub.json sourcePaths. --- dub.json | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/dub.json b/dub.json index 8b22c6b..b8656fe 100644 --- a/dub.json +++ b/dub.json @@ -15,8 +15,8 @@ { "name": "wasm_debug", "targetPath": "web", - "sourceFiles": [ - "src/**.d" + "sourcePaths": [ + "src" ], "dependencies": {"runtime": {"path": "runtime"}}, "dflags": ["-i=.", "-i=std"], @@ -29,8 +29,8 @@ { "name": "wasm", "targetPath": "web", - "sourceFiles": [ - "src/**.d" + "sourcePaths": [ + "src" ], "dependencies": {"runtime": {"path": "runtime"}}, "dflags": ["-i=.", "-i=std", "-L=-allow-undefined"], @@ -43,8 +43,10 @@ { "name": "win32", "platforms": ["windows-x86"], + "sourcePaths": [ + "src" + ], "sourceFiles": [ - "src/**.d", "resource/tt.res" ], "importPaths": [ @@ -77,6 +79,9 @@ { "name": "iOS", "targetType": "staticLibrary", + "sourcePaths": [ + "src" + ], "dependencies": { "bindbc-sdl": "~>0.19.0" }, From 304c3a7e6a4ec69bde6b456b66e48e211d2d3f8a Mon Sep 17 00:00:00 2001 From: "outland.karasu" Date: Mon, 4 Jan 2021 08:28:26 +0900 Subject: [PATCH 36/36] issue #21 add win64 configuration. --- dub.json | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/dub.json b/dub.json index b8656fe..9caa9b8 100644 --- a/dub.json +++ b/dub.json @@ -76,6 +76,42 @@ "bindbc-sdl": "dynamicBC" } }, + { + "name": "win64", + "platforms": ["windows-x86_64"], + "sourcePaths": [ + "src" + ], + "sourceFiles": [ + "resource/tt.res" + ], + "importPaths": [ + "lib" + ], + "copyFiles": [ + "lib/SDL2-2.0.12/lib/x64/SDL2.dll", + "lib/SDL2-2.0.12/README-SDL.txt", + "lib/SDL2_mixer-2.0.4/lib/x64/SDL2_mixer.dll", + "lib/SDL2_mixer-2.0.4/lib/x64/libvorbis-0.dll", + "lib/SDL2_mixer-2.0.4/lib/x64/libvorbisfile-3.dll", + "lib/SDL2_mixer-2.0.4/lib/x64/libogg-0.dll" + ], + "dependencies": { + "bindbc-opengl": "~>0.13.0", + "bindbc-sdl": "~>0.19.0" + }, + "versions": [ + "BindBC", + "GL_32", + "GL_Batching", + "SDL_Mixer", + "InputBackendSDL" + ], + "subConfigurations": { + "bindbc-opengl": "dynamicBC", + "bindbc-sdl": "dynamicBC" + } + }, { "name": "iOS", "targetType": "staticLibrary",