From 12b714424d92d35fe7f5cdd25659e49b0fed2eec Mon Sep 17 00:00:00 2001 From: Maksim Gamarnik Date: Wed, 23 Nov 2016 20:21:32 +0200 Subject: [PATCH] iOS: remove redis, minimap and add pause texture. Fix build script --- .../MultiCraft.xcodeproj/project.pbxproj | 28 ++++++-- build/iOS/MultiCraft/MultiCraft/Info.plist | 4 +- build/iOS/Start.sh | 5 ++ build/iOS/appicon.sh | 2 + build/iOS/deps/freetype.sh | 1 + build/iOS/deps/irrlicht.sh | 1 + build/iOS/sdk.sh | 4 +- builtin/mainmenu/init.lua | 4 +- src/defaultsettings.cpp | 3 + src/fontengine.cpp | 2 + src/touchscreengui.cpp | 60 ++++++++++-------- src/touchscreengui.h | 1 + textures/base/bg.png | Bin 7798 -> 7402 bytes textures/base/escape.png | Bin 331 -> 252 bytes textures/base/rangeview_ios.png | Bin 0 -> 405 bytes 15 files changed, 79 insertions(+), 36 deletions(-) create mode 100644 textures/base/rangeview_ios.png diff --git a/build/iOS/MultiCraft/MultiCraft.xcodeproj/project.pbxproj b/build/iOS/MultiCraft/MultiCraft.xcodeproj/project.pbxproj index a9135bffc..71e8d5c19 100644 --- a/build/iOS/MultiCraft/MultiCraft.xcodeproj/project.pbxproj +++ b/build/iOS/MultiCraft/MultiCraft.xcodeproj/project.pbxproj @@ -35,7 +35,6 @@ F8E6C6051DCA3F9900F64426 /* craftdef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F8E6C5211DCA3F9900F64426 /* craftdef.cpp */; }; F8E6C6061DCA3F9900F64426 /* database-dummy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F8E6C5231DCA3F9900F64426 /* database-dummy.cpp */; }; F8E6C6071DCA3F9900F64426 /* database-leveldb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F8E6C5251DCA3F9900F64426 /* database-leveldb.cpp */; }; - F8E6C6081DCA3F9900F64426 /* database-redis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F8E6C5271DCA3F9900F64426 /* database-redis.cpp */; }; F8E6C6091DCA3F9900F64426 /* database-sqlite3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F8E6C5291DCA3F9900F64426 /* database-sqlite3.cpp */; }; F8E6C60A1DCA3F9900F64426 /* database.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F8E6C52B1DCA3F9900F64426 /* database.cpp */; }; F8E6C60B1DCA3F9900F64426 /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F8E6C52E1DCA3F9900F64426 /* debug.cpp */; }; @@ -270,8 +269,6 @@ F8E6C5241DCA3F9900F64426 /* database-dummy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "database-dummy.h"; path = "../../../../src/database-dummy.h"; sourceTree = ""; }; F8E6C5251DCA3F9900F64426 /* database-leveldb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "database-leveldb.cpp"; path = "../../../../src/database-leveldb.cpp"; sourceTree = ""; }; F8E6C5261DCA3F9900F64426 /* database-leveldb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "database-leveldb.h"; path = "../../../../src/database-leveldb.h"; sourceTree = ""; }; - F8E6C5271DCA3F9900F64426 /* database-redis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "database-redis.cpp"; path = "../../../../src/database-redis.cpp"; sourceTree = ""; }; - F8E6C5281DCA3F9900F64426 /* database-redis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "database-redis.h"; path = "../../../../src/database-redis.h"; sourceTree = ""; }; F8E6C5291DCA3F9900F64426 /* database-sqlite3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "database-sqlite3.cpp"; path = "../../../../src/database-sqlite3.cpp"; sourceTree = ""; }; F8E6C52A1DCA3F9900F64426 /* database-sqlite3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "database-sqlite3.h"; path = "../../../../src/database-sqlite3.h"; sourceTree = ""; }; F8E6C52B1DCA3F9900F64426 /* database.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = database.cpp; path = ../../../../src/database.cpp; sourceTree = ""; }; @@ -766,8 +763,6 @@ F8E6C5241DCA3F9900F64426 /* database-dummy.h */, F8E6C5251DCA3F9900F64426 /* database-leveldb.cpp */, F8E6C5261DCA3F9900F64426 /* database-leveldb.h */, - F8E6C5271DCA3F9900F64426 /* database-redis.cpp */, - F8E6C5281DCA3F9900F64426 /* database-redis.h */, F8E6C5291DCA3F9900F64426 /* database-sqlite3.cpp */, F8E6C52A1DCA3F9900F64426 /* database-sqlite3.h */, F8E6C52B1DCA3F9900F64426 /* database.cpp */, @@ -1395,7 +1390,6 @@ F8E6C6DF1DCA413A00F64426 /* clientpackethandler.cpp in Sources */, F8E6C6261DCA3F9900F64426 /* itemdef.cpp in Sources */, F8E6C61B1DCA3F9900F64426 /* guiKeyChangeMenu.cpp in Sources */, - F8E6C6081DCA3F9900F64426 /* database-redis.cpp in Sources */, F8E6C7671DCA423C00F64426 /* thread.cpp in Sources */, F8E6C6481DCA3F9900F64426 /* pathfinder.cpp in Sources */, F8E6C6531DCA3F9900F64426 /* serverobject.cpp in Sources */, @@ -1689,6 +1683,17 @@ INFOPLIST_FILE = MultiCraft/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_CFLAGS = ( + "$(inherited)", + "-isystem", + "\"${PODS_ROOT}/Headers/Public\"", + "-isystem", + "\"${PODS_ROOT}/Headers/Public/SDVersion\"", + "-isystem", + "\"${PODS_ROOT}/Headers/Public/SSZipArchive\"", + "-flto", + "-fvisibility=hidden", + ); OTHER_LDFLAGS = ( "$(inherited)", "-L${SRCROOT}/../deps/irrlicht", @@ -1745,6 +1750,17 @@ INFOPLIST_FILE = MultiCraft/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_CFLAGS = ( + "$(inherited)", + "-isystem", + "\"${PODS_ROOT}/Headers/Public\"", + "-isystem", + "\"${PODS_ROOT}/Headers/Public/SDVersion\"", + "-isystem", + "\"${PODS_ROOT}/Headers/Public/SSZipArchive\"", + "-flto", + "-fvisibility=hidden", + ); OTHER_LDFLAGS = ( "$(inherited)", "-L${SRCROOT}/../deps/irrlicht", diff --git a/build/iOS/MultiCraft/MultiCraft/Info.plist b/build/iOS/MultiCraft/MultiCraft/Info.plist index 3877edc2d..118e586cd 100644 --- a/build/iOS/MultiCraft/MultiCraft/Info.plist +++ b/build/iOS/MultiCraft/MultiCraft/Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + 1.0.1 CFBundleVersion - 2 + 3 LSRequiresIPhoneOS UILaunchStoryboardName diff --git a/build/iOS/Start.sh b/build/iOS/Start.sh index 911976058..9d59f429c 100755 --- a/build/iOS/Start.sh +++ b/build/iOS/Start.sh @@ -13,6 +13,11 @@ echo "Creating Assets:" ./assets.sh +echo +echo "Creating App Icon:" + +./appicon.sh + echo echo "Install CocoaPods:" diff --git a/build/iOS/appicon.sh b/build/iOS/appicon.sh index d49da75d3..16d86c8cb 100755 --- a/build/iOS/appicon.sh +++ b/build/iOS/appicon.sh @@ -10,3 +10,5 @@ for sz in $SIZES; do echo "Creating ${sz}x${sz} icon" convert -resize ${sz}x${sz} $SRCFILE $DSTDIR/AppIcon-${sz}.png done + +echo "App Icon create successful" diff --git a/build/iOS/deps/freetype.sh b/build/iOS/deps/freetype.sh index abf733452..a90694919 100755 --- a/build/iOS/deps/freetype.sh +++ b/build/iOS/deps/freetype.sh @@ -1,6 +1,7 @@ #!/bin/bash -e . ../sdk.sh +IPHONEOS_DEPLOYMENT_TARGET= FREETYPE_VERSION=2.7 if [ ! -d freetype-src ]; then diff --git a/build/iOS/deps/irrlicht.sh b/build/iOS/deps/irrlicht.sh index e2e9d535f..5aee10057 100755 --- a/build/iOS/deps/irrlicht.sh +++ b/build/iOS/deps/irrlicht.sh @@ -16,6 +16,7 @@ fi cd source/Irrlicht xcodebuild build \ + -configuration Release \ -project Irrlicht.xcodeproj \ -scheme Irrlicht_iOS \ -destination generic/platform=iOS diff --git a/build/iOS/sdk.sh b/build/iOS/sdk.sh index e2bb1ff54..755dcbb9e 100755 --- a/build/iOS/sdk.sh +++ b/build/iOS/sdk.sh @@ -4,7 +4,7 @@ sdk=iphoneos export IOS_COMPILER=$(xcrun --sdk $sdk --find clang) +export IPHONEOS_DEPLOYMENT_TARGET=8.0 export IOS_CC=$IOS_COMPILER export IOS_CXX=$IOS_COMPILER -export IOS_FLAGS="-isysroot $(xcrun --sdk $sdk --show-sdk-path) -arch armv7 -arch arm64" - +export IOS_FLAGS="-isysroot $(xcrun --sdk $sdk --show-sdk-path) -arch armv7 -arch arm64 -Ofast -fvisibility=hidden" diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua index 7382aea2f..ba4ab979c 100644 --- a/builtin/mainmenu/init.lua +++ b/builtin/mainmenu/init.lua @@ -97,8 +97,11 @@ local function init_globals() tv_main:set_autosave_tab(true) tv_main:add(tabs.singleplayer) + +if PLATFORM ~= "iOS" then tv_main:add(tabs.multiplayer) tv_main:add(tabs.server) +end if not use_simple_menu then tv_main:add(tabs.settings) @@ -131,4 +134,3 @@ local function init_globals() end init_globals() - diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 3a0c5941d..968136763 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -23,7 +23,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "config.h" #include "constants.h" #include "porting.h" + +#ifdef __IOS__ #import "SDVersion.h" +#endif void set_default_settings(Settings *settings) { diff --git a/src/fontengine.cpp b/src/fontengine.cpp index 08e9b08ee..f4371ff4f 100644 --- a/src/fontengine.cpp +++ b/src/fontengine.cpp @@ -345,8 +345,10 @@ void FontEngine::initFont(unsigned int basesize, FontMode mode) m_font_cache[mode][basesize] = font; } else { + #ifndef __IOS__ errorstream << "FontEngine: failed to load freetype font: " << font_path << std::endl; + #endif } } #endif diff --git a/src/touchscreengui.cpp b/src/touchscreengui.cpp index 5adaddb02..a154a2c44 100644 --- a/src/touchscreengui.cpp +++ b/src/touchscreengui.cpp @@ -61,6 +61,7 @@ const char* touchgui_button_imagenames[] = { "chat.png", // "camera.png", "rangeview.png", + "rangeview_ios.png", "empty.png", "escape.png", }; @@ -131,6 +132,9 @@ static irr::EKEY_CODE id2keycode(touch_gui_button_id id) case range_id: key = "rangeselect"; break; + case range_ios_id: + key = "rangeselect"; + break; case empty_id: key = "forward"; break; @@ -342,36 +346,42 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc) L"fast", false, SLOW_BUTTON_REPEAT); #endif*/ -/*#ifndef NDEBUG - /* init debug button */ - /*initButton(debug_id, - rect(m_screensize.X - (0.75*button_size), 0.75*button_size, - m_screensize.X, 1.5*button_size), - L"dbg", false, SLOW_BUTTON_REPEAT); -#endif*/ - - /* init rangeselect button */ - initButton(range_id, - rect(m_screensize.X / 2 - (button_size * 1.125), 0, - m_screensize.X / 2 - (button_size * 0.375), - (button_size * 0.75)), - L"far", false, SLOW_BUTTON_REPEAT); - /* init minimap button */ - initButton(minimap_id, - rect(m_screensize.X / 2 - (button_size * 0.375), 0, - m_screensize.X / 2 + (button_size * 0.375), - (button_size * 0.75)), - L"minimap", false, SLOW_BUTTON_REPEAT); - /* init chat button */ + #ifdef __IOS__ +// iOS bar + /* init pause button */ initButton(escape_id, - rect(m_screensize.X / 2 + (button_size * 0.375), 0, - m_screensize.X / 2 + (button_size * 1.125), + rect(m_screensize.X / 2 - (button_size * 0.75), 0, + m_screensize.X / 2, (button_size * 0.75)), L"Exit", false, SLOW_BUTTON_REPEAT); + + /* init rangeselect button */ + initButton(range_ios_id, + rect(m_screensize.X / 2, 0, + m_screensize.X / 2 + (button_size * 0.75), + (button_size * 0.75)), + L"far", false, SLOW_BUTTON_REPEAT); + #else +// Android and Windows bar + /* init rangeselect button */ + initButton(range_id, + rect(m_screensize.X / 2 - (button_size * 1.125), 0, + m_screensize.X / 2 - (button_size * 0.375), + (button_size * 0.75)), + L"far", false, SLOW_BUTTON_REPEAT); + + /* init minimap button */ + initButton(minimap_id, + rect(m_screensize.X / 2 - (button_size * 0.375), 0, + m_screensize.X / 2 + (button_size * 0.375), + (button_size * 0.75)), + L"minimap", false, SLOW_BUTTON_REPEAT); + + /* init chat button */ initButton(chat_id, rect(m_screensize.X / 2 + (button_size * 0.375), 0, m_screensize.X / 2 + (button_size * 1.125), @@ -379,8 +389,8 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc) L"Chat", false, SLOW_BUTTON_REPEAT); #endif - /* init camera button - initButton(camera_id, + /* init camera button */ + /*initButton(camera_id, rect(0, 0, 0.75*button_size, 0.75*button_size), L"cam", false, SLOW_BUTTON_REPEAT);*/ diff --git a/src/touchscreengui.h b/src/touchscreengui.h index 58c939922..330eeddbb 100644 --- a/src/touchscreengui.h +++ b/src/touchscreengui.h @@ -58,6 +58,7 @@ typedef enum { chat_id, // camera_id, range_id, + range_ios_id, empty_id, escape_id, after_last_element_id diff --git a/textures/base/bg.png b/textures/base/bg.png index c0cc01a74942077acbc3cde9a8f122f5bc3efd27..74f99b6b9b591b4fd0166a57434aa220dd8f38aa 100644 GIT binary patch literal 7402 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 literal 7798 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 IM6N<$g0YR}ivR!s diff --git a/textures/base/escape.png b/textures/base/escape.png index 47838146b146166a8bf1f3589c2e2d37f5c8435f..69e71f47d32348cf4f8357d5235147a4e8c82663 100644 GIT binary patch delta 224 zcmX@j^oMbRO1(;ePl&6$y!`+F{}~tZp5|w&4u!xlfQXSJvTjYE;EPHE!IeZU+G~DdW?U&H(cdc_;PR7hEo11NR**mjjl+AQk6chPkLQ~B$si~`MT8GkW^gh-udcR1!~qp$Aqc$7Z^wSX@|4gh!r zL}ccl0T!8gU?wa8VvE89TcYa~XbGBnZqaHejyX zfh;%^ZXO3l#_fm$Bjxtg142YQV*rdj_JBIzE#S340JIbcfGa@NE2<``7?TjO(Zx>o z^82$Gw{Cx$XMeWO>^`{ryWFUzy|f5))ogfvt4#_2UCimUga^7mlmdH530VFhv4=da zfxHFs7RYPBtSR{#d^Y*}K=L@wd<~8~0B(bS{3yOh{>cLX_&1pV0000FDTKxpE~?!H24UT0l|uk|4ie28N~?>(-r_&bGdsfq_xX)5S5QBJSB!3Gf2+HmV==@if4(BHM+zrVFRdGTv@UwFs0AG3dIFeg28 zby+^c`1kn-Uz+$CJtx+(UWj7o_*wK!q*UN;lBwX`L!Z39u}(NI{8glIDZ9W_ZIOAi z4%~5)U|Dh0+1laiHL){Fhop}InSC7|9FMOu6qa>c9JZ8L&nI9V`{zm|&mtZcHeH5A z0_XA``IIhL^G?mjgJY{|7^`x-!S^52A1_&H%D8{qPNy>aZU(0(9ioQ>9r?}(33sNm)R`evup= pe{zUt>Nj_cWw|dO#Pa_EJKN$k*@V7{Pk@2O;OXk;vd$@?2>^~5qSpWb literal 0 HcmV?d00001