From 4ea156822db1beca2e869b5909bd2992e75f034b Mon Sep 17 00:00:00 2001 From: terminx Date: Mon, 14 Mar 2016 00:07:40 +0000 Subject: [PATCH] Android UI work. DONT_BUILD. git-svn-id: https://svn.eduke32.com/eduke32@5663 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/Android.mk | 229 ++++++++---------- polymer/eduke32/build/src/baselayer.c | 4 + polymer/eduke32/build/src/sdlayer.c | 4 +- .../eduke32/source/android/android-jni.cpp | 141 +++++------ polymer/eduke32/source/android/in_android.c | 2 +- polymer/eduke32/source/game.c | 4 - polymer/eduke32/source/menus.c | 18 +- polymer/eduke32/source/menus.h | 15 +- 8 files changed, 198 insertions(+), 219 deletions(-) diff --git a/polymer/eduke32/Android.mk b/polymer/eduke32/Android.mk index 035b0d0ec..b16342dfb 100644 --- a/polymer/eduke32/Android.mk +++ b/polymer/eduke32/Android.mk @@ -1,159 +1,134 @@ -# Copyright (C) 2009 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.crg/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := duke3d -# -O2 -fvisibility=hidden - -LOCAL_CFLAGS := -x c++ -std=gnu++11 -fvisibility=hidden -fPIC -fno-stack-protector -funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS -D_FORTIFY_SOURCE=0 -pthread -DHAVE_INTTYPES -D_GNU_SOURCE=1 -D_REENTRANT +LOCAL_CFLAGS := -x c++ -std=gnu++11 -fvisibility=hidden -fPIC -funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS -pthread -DHAVE_INTTYPES -D_GNU_SOURCE=1 -D_REENTRANT ifeq ($(NDK_DEBUG), 1) - LOCAL_CFLAGS += -O0 -ggdb -fno-omit-frame-pointer + LOCAL_CFLAGS += -O0 -ggdb -fno-omit-frame-pointer -fno-stack-protector -D_FORTIFY_SOURCE=0 else - LOCAL_CFLAGS += -O2 -DNDEBUG -DUSING_LTO -flto + LOCAL_CFLAGS += -O2 -DNDEBUG -DUSING_LTO -flto -D_FORTIFY_SOURCE=2 endif -LOCAL_CFLAGS += -W -Werror-implicit-function-declaration -Wpointer-arith -Wextra -Wno-unused-result -Wno-char-subscripts -Wno-strict-overflow -Wno-attributes -Wno-write-strings -LOCAL_CPPFLAGS := -std=gnu++11 +LOCAL_CPPFLAGS := -std=gnu++11 -LOCAL_CFLAGS += -DHAVE_SDL -DHAVE_VORBIS -DHAVE_JWZGLES -DHAVE_ANDROID -DRENDERTYPESDL=1 -DUSE_OPENGL -DNETCODE_DISABLE -DUSE_LIBVPX +LOCAL_CFLAGS += -W -Werror-implicit-function-declaration -Wpointer-arith -Wextra -Wno-unused-result -Wno-char-subscripts \ + -Wno-strict-overflow -Wno-attributes -Wno-write-strings -mhard-float -D_NDK_MATH_NO_SOFTFP=1 +LOCAL_CFLAGS += -DHAVE_SDL -DHAVE_VORBIS -DHAVE_JWZGLES -DHAVE_ANDROID -DRENDERTYPESDL=1 -DUSE_OPENGL -DNETCODE_DISABLE -DUSE_LIBVPX -LOCAL_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 +LOCAL_LDFLAGS := -fuse-ld=bfd +TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard +LOCAL_ARM_NEON = true -LOCAL_LDFLAGS := -fuse-ld=bfd -TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard -LOCAL_ARM_NEON = true - -LOCAL_C_INCLUDES := $(LOCAL_PATH)/source $(LOCAL_PATH)/source/jmact $(LOCAL_PATH)/source/jaudiolib/include $(LOCAL_PATH)/source/enet/include $(LOCAL_PATH)/build/include -LOCAL_C_INCLUDES += $(TOP_DIR)/ $(TOP_DIR)/Libraries/liboggvorbis/include $(TOP_DIR)/Libraries/ $(TOP_DIR)/Libraries/SDL2/include $(TOP_DIR)/Libraries/SDL2_mixer/include $(TOP_DIR)/Libraries/libpng/include $(TOP_DIR)/Libraries/TinyXML/include $(TOP_DIR)/TouchControls $(TOP_DIR)/Libraries/libvpx/include +LOCAL_C_INCLUDES := $(LOCAL_PATH)/source $(LOCAL_PATH)/source/jmact $(LOCAL_PATH)/source/jaudiolib/include $(LOCAL_PATH)/source/enet/include $(LOCAL_PATH)/build/include +LOCAL_C_INCLUDES += $(TOP_DIR)/ $(TOP_DIR)/Libraries/liboggvorbis/include $(TOP_DIR)/Libraries/ $(TOP_DIR)/Libraries/SDL2/include $(TOP_DIR)/Libraries/SDL2_mixer/include $(TOP_DIR)/Libraries/TinyXML/include $(TOP_DIR)/TouchControls $(TOP_DIR)/Libraries/libvpx/include ANDROID_SRC = \ - source/android/android-jni.cpp \ - source/android/in_android.c \ - build/src/jwzgles.c \ - source/android/rg_etc1.cpp + build/src/jwzgles.c \ + source/android/android-jni.cpp \ + source/android/in_android.c BUILD_SRC = \ - build/src/a-c.c \ - build/src/baselayer.c \ - build/src/cache1d.c \ - build/src/compat.c \ - build/src/common.c \ - build/src/crc32.c \ - build/src/defs.c \ - build/src/colmatch.c \ - build/src/engine.c \ - build/src/glbuild.c \ - build/src/polymost.c \ - build/src/mdsprite.c \ - build/src/texcache.c \ - build/src/dxtfilter.c \ - build/src/hightile.c \ - build/src/textfont.c \ - build/src/smalltextfont.c \ - build/src/kplib.c \ - build/src/mmulti_null.c \ - build/src/lz4.c \ - build/src/osd.c \ - build/src/md4.c \ - build/src/pragmas.c \ - build/src/scriptfile.c \ - build/src/mutex.c \ - build/src/xxhash.c \ - build/src/voxmodel.c \ - build/src/sdlayer.c + build/src/a-c.c \ + build/src/baselayer.c \ + build/src/cache1d.c \ + build/src/compat.c \ + build/src/common.c \ + build/src/crc32.c \ + build/src/defs.c \ + build/src/colmatch.c \ + build/src/engine.c \ + build/src/glbuild.c \ + build/src/polymost.c \ + build/src/mdsprite.c \ + build/src/texcache.c \ + build/src/dxtfilter.c \ + build/src/hightile.c \ + build/src/textfont.c \ + build/src/smalltextfont.c \ + build/src/kplib.c \ + build/src/mmulti_null.c \ + build/src/lz4.c \ + build/src/osd.c \ + build/src/md4.c \ + build/src/pragmas.c \ + build/src/scriptfile.c \ + build/src/mutex.c \ + build/src/xxhash.c \ + build/src/voxmodel.c \ + build/src/sdlayer.c JMACT_SRC=source/jmact/file_lib.c \ - source/jmact//control.c \ - source/jmact//keyboard.c \ - source/jmact//mouse.c \ - source/jmact//joystick.c \ - source/jmact//scriplib.c \ - source/jmact//animlib.c + source/jmact/control.c \ + source/jmact/keyboard.c \ + source/jmact/mouse.c \ + source/jmact/joystick.c \ + source/jmact/scriplib.c \ + source/jmact/animlib.c GAME_SRC=source/game.c \ - source/actors.c \ - source/anim.c \ - source/animsounds.c \ - source/animvpx.c \ - source/common.c \ - source/config.c \ - source/demo.c \ - source/gamedef.c \ - source/gameexec.c \ - source/gamevars.c \ - source/global.c \ - source/input.c \ - source/menus.c \ - source/namesdyn.c \ - source/net.c \ - source/player.c \ - source/premap.c \ - source/savegame.c \ - source/sector.c \ - source/rts.c \ - source/osdfuncs.c \ - source/osdcmds.c \ - source/grpscan.c \ - source/sounds.c \ - source/soundsdyn.c \ - source/sdlmusic.c \ - source/rev.c \ - source/cmdline.c \ - source/screens.c \ - source/screentext.c \ - source/cheats.c \ - source/sbar.c + source/actors.c \ + source/anim.c \ + source/animsounds.c \ + source/animvpx.c \ + source/common.c \ + source/config.c \ + source/demo.c \ + source/gamedef.c \ + source/gameexec.c \ + source/gamevars.c \ + source/global.c \ + source/input.c \ + source/menus.c \ + source/namesdyn.c \ + source/net.c \ + source/player.c \ + source/premap.c \ + source/savegame.c \ + source/sector.c \ + source/rts.c \ + source/osdfuncs.c \ + source/osdcmds.c \ + source/grpscan.c \ + source/sounds.c \ + source/soundsdyn.c \ + source/sdlmusic.c \ + source/rev.c \ + source/cmdline.c \ + source/screens.c \ + source/screentext.c \ + source/cheats.c \ + source/sbar.c JAUDIO_SRC=source/jaudiolib/src/drivers.c \ - source/jaudiolib/src//fx_man.c \ - source/jaudiolib/src//multivoc.c \ - source/jaudiolib/src//mix.c \ - source/jaudiolib/src//mixst.c \ - source/jaudiolib/src//pitch.c \ - source/jaudiolib/src//formats.c \ - source/jaudiolib/src//vorbis.c \ - source/jaudiolib/src//flac.c \ - source/jaudiolib/src//xa.c \ - source/jaudiolib/src//driver_nosound.c \ - source/jaudiolib/src//driver_sdl.c + source/jaudiolib/src/fx_man.c \ + source/jaudiolib/src/multivoc.c \ + source/jaudiolib/src/mix.c \ + source/jaudiolib/src/mixst.c \ + source/jaudiolib/src/pitch.c \ + source/jaudiolib/src/formats.c \ + source/jaudiolib/src/vorbis.c \ + source/jaudiolib/src/flac.c \ + source/jaudiolib/src/xa.c \ + source/jaudiolib/src/driver_nosound.c \ + source/jaudiolib/src/driver_sdl.c ENET_SRC=source/enet/src/callbacks.c \ - source/enet/src/host.c \ - source/enet/src/list.c \ - source/enet/src/packet.c \ - source/enet/src/peer.c \ - source/enet/src/protocol.c \ - source/enet/src/compress.c \ + source/enet/src/host.c \ + source/enet/src/list.c \ + source/enet/src/packet.c \ + source/enet/src/peer.c \ + source/enet/src/protocol.c \ + source/enet/src/compress.c \ source/enet/src/unix.c -LOCAL_SRC_FILES = $(ANDROID_SRC) $(JAUDIO_SRC) $(JMACT_SRC) $(GAME_SRC) $(BUILD_SRC) +LOCAL_SRC_FILES = $(ANDROID_SRC) $(JAUDIO_SRC) $(JMACT_SRC) $(GAME_SRC) $(BUILD_SRC) -LOCAL_LDLIBS := -lGLESv1_CM -lEGL -ldl -llog -LOCAL_STATIC_LIBRARIES := touch -LOCAL_SHARED_LIBRARIES := ogg vorbis SDL2 SDL2_mixer libvpx -# SDL2_image +LOCAL_LDLIBS := -lGLESv1_CM -lEGL -ldl -llog +LOCAL_STATIC_LIBRARIES := touch +LOCAL_SHARED_LIBRARIES := ogg vorbis SDL2 SDL2_mixer libvpx include $(BUILD_SHARED_LIBRARY) - - - - - - diff --git a/polymer/eduke32/build/src/baselayer.c b/polymer/eduke32/build/src/baselayer.c index a68e8afe3..87711919a 100644 --- a/polymer/eduke32/build/src/baselayer.c +++ b/polymer/eduke32/build/src/baselayer.c @@ -369,9 +369,11 @@ static int32_t osdfunc_setrendermode(const osdfuncparm_t *parm) case REND_POLYMOST: renderer = "polygonal OpenGL"; break; +#ifdef POLYMER case REND_POLYMER: renderer = "great justice (Polymer)"; break; +#endif default: EDUKE32_UNREACHABLE_SECTION(break); } @@ -556,7 +558,9 @@ int32_t baselayer_init(void) "Mode numbers are:\n" " 0 - Classic Build software\n" " 3 - Polygonal OpenGL\n" +#ifdef POLYMER " 4 - Great justice renderer (Polymer)\n" +#endif , osdfunc_setrendermode); diff --git a/polymer/eduke32/build/src/sdlayer.c b/polymer/eduke32/build/src/sdlayer.c index d670f30f8..8030c8bcb 100644 --- a/polymer/eduke32/build/src/sdlayer.c +++ b/polymer/eduke32/build/src/sdlayer.c @@ -357,6 +357,7 @@ int sdlayer_mobilefilter(void *userdata, SDL_Event *event) mobile_halted = 1; return 0; case SDL_APP_DIDENTERBACKGROUND: + gltexinvalidatetype(INVALIDATE_ALL); // tear down video? return 0; case SDL_APP_WILLENTERFOREGROUND: @@ -1253,7 +1254,7 @@ void sdlayer_setvideomode_opengl(void) bglEnable(GL_TEXTURE_2D); bglShadeModel(GL_SMOOTH); // GL_FLAT - bglClearColor(0, 0, 0, 0.5); // Black Background + bglClearColor(0, 0, 0, 1.0); // Black Background bglHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Use FASTEST for ortho! // bglHint(GL_LINE_SMOOTH_HINT, GL_NICEST); @@ -2186,7 +2187,6 @@ int32_t handleevents_pollsdl(void) int32_t handleevents(void) { #ifdef __ANDROID__ - extern int mobile_halted; if (mobile_halted) return 0; #endif diff --git a/polymer/eduke32/source/android/android-jni.cpp b/polymer/eduke32/source/android/android-jni.cpp index bbb81e367..c5e5faa06 100644 --- a/polymer/eduke32/source/android/android-jni.cpp +++ b/polymer/eduke32/source/android/android-jni.cpp @@ -54,7 +54,6 @@ static bool hasTouch = false; static bool weaponWheelVisible = false; static bool hwScaling = false; static bool controlsCreated = false; -static bool backButtonEnabled = true; TouchControlsContainer controlsContainer; @@ -69,9 +68,9 @@ TouchControls *tcAutomap; TouchStick *touchJoyLeft; WheelSelect *weaponWheel; -Button *inv_buttons[GET_MAX]; +Button *invButtonPtrs[GET_MAX]; -std::string obbPath, gamePath; +std::string gamePath; void AndroidPreDrawButtons() { @@ -124,8 +123,7 @@ void AndroidShowWheel(bool show) // Show inventory buttons tcGameWeapons->setAllButtonsEnabled(true); - tcGameWeapons->fade(FADE_IN, 5); - +// tcGameWeapons->fade(FADE_IN, 5); weaponWheelVisible = true; AndroidTimer(0); @@ -180,8 +178,8 @@ namespace callbacks { if (!weaponWheelVisible) { - weaponWheel->setTapMode(true); AndroidShowWheel(true); + weaponWheel->setTapMode(true); } else { @@ -217,12 +215,13 @@ namespace callbacks void menu_button(int state, int code) { + if (weaponWheelVisible) + AndroidShowWheel(false); + AndroidKeyEvent(state, code, code); if (controlsContainer.editingControls) controlsContainer.editorButtonPress(); - - AndroidShowWheel(false); } void menu_select(int action, float x, float y, float dx, float dy) @@ -336,58 +335,62 @@ void AndroidTouchInit(int width, int height, const char *graphics_path) ///////////////////////// BLANK TAP SCREEN ////////////////////// // One button on whole screen with no graphic, send a return key - tcBlankTap->addControl(new Button("whole_screen", RectF(0, 0, 26, 16), "", SDL_SCANCODE_RETURN)); + tcBlankTap->addControl(new Button("whole_screen", RectF(0, 0, ScaleX, ScaleY), "", SDL_SCANCODE_RETURN)); tcBlankTap->signal_button.connect(sigc::ptr_fun(&callbacks::proceed)); ///////////////////////// YES NO SCREEN ///////////////////// - tcYesNo->addControl(new Button("enter", RectF(16, 9, 18, 11), "button_yes", SDL_SCANCODE_RETURN)); - tcYesNo->addControl(new Button("esc", RectF(8, 9, 10, 11), "button_no", SDL_SCANCODE_ESCAPE)); + tcYesNo->addControl(new Button("enter", RectF(37, 19, 43, 25), "button_yes", SDL_SCANCODE_RETURN)); + tcYesNo->addControl(new Button("esc", RectF(21, 19, 27, 25), "button_no", SDL_SCANCODE_ESCAPE)); tcYesNo->signal_button.connect(sigc::ptr_fun(&callbacks::menu_button)); // menu and shared back button - MultitouchMouse *mouseMenu = new MultitouchMouse("mouse", RectF(0, 0, 26, 16), ""); + MultitouchMouse *mouseMenu = new MultitouchMouse("mouse", RectF(0, 0, ScaleX, ScaleY), ""); mouseMenu->signal_action.connect(sigc::ptr_fun(&callbacks::menu_select)); mouseMenu->setHideGraphics(true); tcMenuMain->addControl(mouseMenu); - Button *console_button = new Button("keyboard", "Development console", RectF(8, 0, 10, 2), "button_console", KEY_SHOW_KBRD, false, true); - tcMenuMain->addControl(console_button); + Button *consoleButton = new Button("keyboard", "Development console", RectF(4, 0, 8, 4), "button_console", KEY_SHOW_KBRD, false, true); + tcMenuMain->addControl(consoleButton); - tcBackButton->addControl(new Button("menu_back", RectF(0, 0, 2, 2), "button_left", SDL_SCANCODE_ESCAPE)); + tcBackButton->addControl(new Button("menu_back", RectF(0, 0, 4, 4), "button_left", SDL_SCANCODE_ESCAPE)); tcBackButton->signal_button.connect(sigc::ptr_fun(&callbacks::menu_button)); // main controls - tcGameMain->addControl(new Button("use", RectF(20, 4, 23, 7), "button_use", gamefunc_Open)); - tcGameMain->addControl(new Button("fire", RectF(20, 7, 23, 10), "button_fire", gamefunc_Fire)); - tcGameMain->addControl(new Button("jump", RectF(23, 6, 26, 9), "button_jump", gamefunc_Jump)); - tcGameMain->addControl(new Button("crouch", RectF(24, 12, 26, 14), "button_crouch", gamefunc_Crouch)); - tcGameMain->addControl(new Button("kick", "Mighty Foot", RectF(23, 3, 26, 6), "button_kick", gamefunc_Quick_Kick, false, true)); + tcGameMain->addControl(new Button("menu_game", RectF(0, 0, 4, 4), "button_menu", SDL_SCANCODE_ESCAPE)); + tcGameMain->signal_button.connect(sigc::ptr_fun(&callbacks::menu_button)); - Button *map_button = new Button("map", "Overhead map", RectF(6, 0, 8, 2), "button_map", gamefunc_Map, false, true); - tcGameMain->addControl(map_button); + tcGameMain->addControl(new Button("use", RectF(50, 14, 55, 19), "button_use", gamefunc_Open)); + tcGameMain->addControl(new Button("fire", RectF(50, 20, 55, 25), "button_fire", gamefunc_Fire)); + tcGameMain->addControl(new Button("jump", RectF(56, 17, 61, 22), "button_jump", gamefunc_Jump)); + tcGameMain->addControl(new Button("kick", "Mighty Foot", RectF(56, 11, 61, 16), "button_kick", gamefunc_Quick_Kick, false, true)); - Button *inv_button = new Button("show_inventory", "Inventory", RectF(24, 0, 26, 2), "button_activate", KEY_SHOW_INVEN); - tcGameMain->addControl(inv_button); + tcGameMain->addControl(new Button("crouch", RectF(59, ScaleY - 5, 62, ScaleY - 2), "button_crouch", gamefunc_Crouch)); + + Button *mapButton = new Button("map", "Overhead map", RectF(6, 0, 8, 2), "button_map", gamefunc_Map, false, true); + tcGameMain->addControl(mapButton); + + Button *invButton = new Button("show_inventory", "Inventory", RectF(60, 0, 64, 4), "button_inv", KEY_SHOW_INVEN); + tcGameMain->addControl(invButton); tcGameMain->addControl(new Button("next_weapon", "Next weapon", RectF(0, 3, 3, 5), "button_up", gamefunc_Next_Weapon, false, true)); tcGameMain->addControl(new Button("prev_weapon", "Previous weapon", RectF(0, 5, 3, 7), "button_down", gamefunc_Previous_Weapon, false, true)); tcGameMain->addControl(new Button("quick_save", "Save game", RectF(22, 0, 24, 2), "button_save", KEY_QUICK_SAVE, false, true)); tcGameMain->addControl(new Button("quick_load", "Load game", RectF(20, 0, 22, 2), "button_load", KEY_QUICK_LOAD, false, true)); - tcGameMain->addControl(console_button); + tcGameMain->addControl(consoleButton); // Left stick - touchJoyLeft = new TouchStick("stick", RectF(0, 8, 8, 16), "button_move"); + touchJoyLeft = new TouchStick("stick", RectF(4, ScaleY - 20, 24, ScaleY), "button_move"); tcGameMain->addControl(touchJoyLeft); touchJoyLeft->signal_move.connect(sigc::ptr_fun(&callbacks::move)); touchJoyLeft->signal_double_tap.connect(sigc::ptr_fun(&callbacks::left_double_tap)); // Mouse look for whole screen - Mouse *mouse = new Mouse("mouse", RectF(3, 0, 26, 16), ""); + Mouse *mouse = new Mouse("mouse", RectF(3, 0, ScaleX, ScaleY), ""); mouse->signal_action.connect(sigc::ptr_fun(&callbacks::look)); mouse->signal_double_tap.connect(sigc::ptr_fun(&callbacks::right_double_tap)); @@ -397,33 +400,33 @@ void AndroidTouchInit(int width, int height, const char *graphics_path) tcGameMain->signal_button.connect(sigc::ptr_fun(&callbacks::in_game)); // Automap - MultitouchMouse *multimouse = new MultitouchMouse("gamemouse", RectF(0, 0, 26, 16), ""); - multimouse->setHideGraphics(true); - tcAutomap->addControl(multimouse); - multimouse->signal_action.connect(sigc::ptr_fun(&callbacks::automap_multitouch_mouse_move)); - tcAutomap->addControl(map_button); + MultitouchMouse *mapMouse = new MultitouchMouse("gamemouse", RectF(0, 0, ScaleX, ScaleY), ""); + mapMouse->setHideGraphics(true); + tcAutomap->addControl(mapMouse); + mapMouse->signal_action.connect(sigc::ptr_fun(&callbacks::automap_multitouch_mouse_move)); + tcAutomap->addControl(mapButton); tcAutomap->signal_button.connect(sigc::ptr_fun(&callbacks::in_game)); tcAutomap->setAlpha(0.5); // Weapons // Now inventory in the weapons control group! - weaponWheel = new WheelSelect("weapon_wheel", RectF(7, 2, 19, 14), "weapon_wheel_orange_blank", 10); + weaponWheel = new WheelSelect("weapon_wheel", RectF(17, (ScaleY / 2) - 15, 47, (ScaleY / 2) + 15), "weapon_wheel_orange_blank", 10); weaponWheel->signal_selected.connect(sigc::ptr_fun(&callbacks::select_weapon)); weaponWheel->signal_enabled.connect(sigc::ptr_fun(&callbacks::show_wheel)); tcGameWeapons->addControl(weaponWheel); - inv_buttons[GET_FIRSTAID] = new Button("medkit", RectF(0, 5, 2, 7), "button_inv1", gamefunc_MedKit, false, false, true); - inv_buttons[GET_STEROIDS] = new Button("steroids", RectF(0, 11, 2, 13), "button_inv2", gamefunc_Steroids, false, false, true); - inv_buttons[GET_HOLODUKE] = new Button("holoduke", RectF(0, 9, 2, 11), "button_inv3", gamefunc_Holo_Duke, false, false, true); - inv_buttons[GET_JETPACK] = new Button("jetpack", RectF(0, 3, 2, 5), "button_inv4", gamefunc_Jetpack, false, false, true); - inv_buttons[GET_HEATS] = new Button("nightv", RectF(0, 7, 2, 9), "button_inv5", gamefunc_NightVision, false, false, true); + invButtonPtrs[GET_JETPACK] = new Button("jetpack", RectF(0, 6, 4, 10), "button_inv4", gamefunc_Jetpack, false, false, true); + invButtonPtrs[GET_STEROIDS] = new Button("steroids", RectF(0, 11, 4, 15), "button_inv2", gamefunc_Steroids, false, false, true); + invButtonPtrs[GET_HEATS] = new Button("nightv", RectF(0, 16, 4, 20), "button_inv5", gamefunc_NightVision, false, false, true); + invButtonPtrs[GET_HOLODUKE] = new Button("holoduke", RectF(0, 21, 4, 25), "button_inv3", gamefunc_Holo_Duke, false, false, true); + invButtonPtrs[GET_FIRSTAID] = new Button("medkit", RectF(0, 26, 4, 30), "button_inv1", gamefunc_MedKit, false, false, true); - tcGameWeapons->addControl(inv_buttons[GET_JETPACK]); - tcGameWeapons->addControl(inv_buttons[GET_FIRSTAID]); - tcGameWeapons->addControl(inv_buttons[GET_HEATS]); - tcGameWeapons->addControl(inv_buttons[GET_HOLODUKE]); - tcGameWeapons->addControl(inv_buttons[GET_STEROIDS]); + tcGameWeapons->addControl(invButtonPtrs[GET_JETPACK]); + tcGameWeapons->addControl(invButtonPtrs[GET_FIRSTAID]); + tcGameWeapons->addControl(invButtonPtrs[GET_HEATS]); + tcGameWeapons->addControl(invButtonPtrs[GET_HOLODUKE]); + tcGameWeapons->addControl(invButtonPtrs[GET_STEROIDS]); // Inventory are the only buttons so safe to do this tcGameWeapons->signal_button.connect(sigc::ptr_fun(&callbacks::inv_button)); @@ -442,6 +445,8 @@ void AndroidTouchInit(int width, int height, const char *graphics_path) tcGameWeapons->resetOutput(); tcGameWeapons->setAllButtonsEnabled(false); weaponWheel->setTapMode(false); + int segmap[10] ={ 3, 4, 5, 6, 7, 8, 9, 0, 1, 2 }; + weaponWheel->setSegmentMap(segmap); weaponWheelVisible = false; tcMenuMain->setAlpha(droidinput.gameControlsAlpha); tcBackButton->setAlpha(droidinput.gameControlsAlpha); @@ -485,7 +490,6 @@ void updateTouchScreenMode(touchscreemode_t mode) break; case TOUCH_SCREEN_GAME: tcGameMain->resetOutput(); - tcGameMain->fade(FADE_OUT, DEFAULT_FADE_FRAMES); tcGameWeapons->setEnabled(false); break; @@ -500,7 +504,9 @@ void updateTouchScreenMode(touchscreemode_t mode) switch (mode) { case TOUCH_SCREEN_BLANK: // Does not exist yet break; - case TOUCH_SCREEN_BLANK_TAP: tcBlankTap->setEnabled(true); break; + case TOUCH_SCREEN_BLANK_TAP: + tcBlankTap->setEnabled(true); + break; case TOUCH_SCREEN_YES_NO: tcYesNo->setEnabled(true); tcYesNo->fade(FADE_IN, DEFAULT_FADE_FRAMES); @@ -530,8 +536,7 @@ void updateTouchScreenMode(touchscreemode_t mode) lastMode = mode; } - backButtonEnabled = !tcBlankTap->enabled && mode != TOUCH_SCREEN_MENU_NOBACK; - tcBackButton->setEnabled(backButtonEnabled); + tcBackButton->setEnabled(!tcBlankTap->enabled && mode != TOUCH_SCREEN_MENU_NOBACK && mode != TOUCH_SCREEN_GAME); } extern char videomodereset; @@ -573,21 +578,28 @@ void AndroidDrawControls() if (tcBackButton) tcBackButton->setAlpha(droidinput.gameControlsAlpha); - int inv = AndroidRead(R_PLAYER_INV_AMOUNT); - if (tcGameWeapons) { - for (int i = 0; i < GET_MAX; ++i) - if (inv_buttons[i]) - inv_buttons[i]->setAlpha(tcGameWeapons->getFadedAlpha() * ((inv & (1 << i)) ? 1.f : 0.3f)); - tcGameWeapons->setAlpha(droidinput.gameControlsAlpha); + + int inv = AndroidRead(R_PLAYER_INV_AMOUNT); + + for (int i = 0; i < GET_MAX; ++i) + if (invButtonPtrs[i]) + { + if (!weaponWheelVisible) + invButtonPtrs[i]->setEnabled((inv & (1 << i))); + + invButtonPtrs[i]->setAlpha(tcGameWeapons->getFadedAlpha() * ((inv & (1 << i)) ? 1.f : 0.3f)); + } } controlsContainer.draw(); +/* if (controlsContainer.editingControls) tcBackButton->draw(); +*/ } @@ -625,11 +637,6 @@ jint EXPORT_ME Java_com_voidpoint_duke3d_NativeLib_i(JNIEnv *env, jobject thiz, LOGI("duke3d_path = %s", getGamePath()); - const char *p = env->GetStringUTFChars(graphics_dir, NULL); - obbPath = std::string(p); - - LOGI("obbPath = %s", obbPath.c_str()); - if (hasTouch) AndroidTouchInit(droidinfo.screen_width, droidinfo.screen_height, "/assets/"); else LOGI("skipping touch input"); @@ -665,12 +672,12 @@ Java_com_voidpoint_duke3d_NativeLib_kp(JNIEnv *env, jobject obj, jint down, jint void EXPORT_ME Java_com_voidpoint_duke3d_NativeLib_te(JNIEnv *env, jobject obj, jint action, jint pid, jfloat x, jfloat y) { - if (tcBackButton && backButtonEnabled) - tcBackButton->processPointer(action, pid, x, y); - - // LOGI("TOUCHED"); - controlsContainer.processPointer(action, pid, x, y); - + if (tcBackButton && tcBackButton->enabled) + { + if (!tcBackButton->processPointer(action, pid, x, y)) + controlsContainer.processPointer(action, pid, x, y); + } + else controlsContainer.processPointer(action, pid, x, y); } @@ -701,8 +708,7 @@ void EXPORT_ME Java_com_voidpoint_duke3d_NativeLib_al(JNIEnv *env, jobject obj, AndroidLookJoystick(yaw, pitch); } -void EXPORT_ME -Java_com_voidpoint_duke3d_NativeLib_sts(JNIEnv *env, jobject obj, int other) +void EXPORT_ME Java_com_voidpoint_duke3d_NativeLib_sts(JNIEnv *env, jobject obj, int other) { // TODO: defined names for these values hasTouch = other & 0x4000 ? true : false; @@ -733,8 +739,7 @@ jint EXPORT_ME Java_com_voidpoint_duke3d_NativeLib_qc(JNIEnv *env, jobject obj, AndroidOSD(quickCommandString.c_str()); } -void EXPORT_ME -Java_com_voidpoint_duke3d_NativeLib_sss(JNIEnv *env, jobject thiz, jint width, jint height) +void EXPORT_ME Java_com_voidpoint_duke3d_NativeLib_sss(JNIEnv *env, jobject thiz, jint width, jint height) { droidinfo.screen_width = width; droidinfo.screen_height = height; diff --git a/polymer/eduke32/source/android/in_android.c b/polymer/eduke32/source/android/in_android.c index 0f629dae8..9e7e80029 100644 --- a/polymer/eduke32/source/android/in_android.c +++ b/polymer/eduke32/source/android/in_android.c @@ -245,7 +245,7 @@ int32_t AndroidRead(portableread_t r) else if (consoleShown) rv = TOUCH_SCREEN_CONSOLE; else if ((g_player[myconnectindex].ps->gm & MODE_MENU) == MODE_MENU && g_currentMenu != MENU_MAIN) - rv = (m_currentMenu->type == Verify) ? TOUCH_SCREEN_YES_NO : TOUCH_SCREEN_MENU; + rv = (m_currentMenu->type == Verify && totalclock > (m_animation.length + m_animation.start)) ? TOUCH_SCREEN_YES_NO : TOUCH_SCREEN_MENU; else if ((g_player[myconnectindex].ps->gm & MODE_MENU) == MODE_MENU && g_currentMenu == MENU_MAIN) rv = TOUCH_SCREEN_MENU_NOBACK; /* diff --git a/polymer/eduke32/source/game.c b/polymer/eduke32/source/game.c index de8b1ec1e..cd5073fd0 100644 --- a/polymer/eduke32/source/game.c +++ b/polymer/eduke32/source/game.c @@ -6105,10 +6105,6 @@ int32_t app_main(int32_t argc, char const * const * argv) g_numSkills = 4; ud.multimode = 1; -#ifdef __ANDROID__ - G_AddDef("duke3d-android.def"); -#endif - // This needs to happen before G_CheckCommandLine() because G_GameExit() // accesses g_player[0]. G_MaybeAllocPlayer(0); diff --git a/polymer/eduke32/source/menus.c b/polymer/eduke32/source/menus.c index 720db96f6..8ff229c14 100644 --- a/polymer/eduke32/source/menus.c +++ b/polymer/eduke32/source/menus.c @@ -286,7 +286,7 @@ MAKE_MENU_TOP_ENTRYLINK( "Options", MEF_MainMenu, MAIN_OPTIONS, MENU_OPTIONS ); MAKE_MENU_TOP_ENTRYLINK( "Help", MEF_MainMenu, MAIN_HELP, MENU_STORY ); #endif MAKE_MENU_TOP_ENTRYLINK( "Credits", MEF_MainMenu, MAIN_CREDITS, MENU_CREDITS ); -MAKE_MENU_TOP_ENTRYLINK( "Return To Title", MEF_MainMenu, MAIN_QUITTOTITLE, MENU_QUITTOTITLE ); +MAKE_MENU_TOP_ENTRYLINK( "End Game", MEF_MainMenu, MAIN_QUITTOTITLE, MENU_QUITTOTITLE ); MAKE_MENU_TOP_ENTRYLINK( "Quit", MEF_MainMenu, MAIN_QUIT, MENU_QUIT ); #ifndef DROIDMENU MAKE_MENU_TOP_ENTRYLINK( "Quit Game", MEF_MainMenu, MAIN_QUITGAME, MENU_QUIT ); @@ -298,8 +298,8 @@ static MenuEntry_t *MEL_MAIN[] = { &ME_MAIN_OPTIONS, #ifndef DROIDMENU &ME_MAIN_HELP, -#endif &ME_MAIN_CREDITS, +#endif &ME_MAIN_QUIT, }; @@ -3447,19 +3447,7 @@ static Menu_t* M_FindMenu(MenuID_t query) return M_FindMenuBinarySearch(query, 0, numMenus-1); } -typedef struct MenuAnimation_t -{ - int32_t (*out)(struct MenuAnimation_t *); - int32_t (*in)(struct MenuAnimation_t *); - - Menu_t *previous; - Menu_t *current; - - int32_t start; - int32_t length; -} MenuAnimation_t; - -static MenuAnimation_t m_animation; +MenuAnimation_t m_animation; int32_t M_Anim_SinOutRight(MenuAnimation_t *animdata) { diff --git a/polymer/eduke32/source/menus.h b/polymer/eduke32/source/menus.h index 2373c35f3..5c8155c18 100644 --- a/polymer/eduke32/source/menus.h +++ b/polymer/eduke32/source/menus.h @@ -115,8 +115,6 @@ typedef enum MenuAnimationType_t MA_Advance, } MenuAnimationType_t; - - // a subset of screentext parameters, restricted because menus require accessibility typedef struct MenuFont_t { @@ -413,6 +411,19 @@ typedef struct Menu_t MenuType_t type; } Menu_t; +typedef struct MenuAnimation_t +{ + int32_t(*out)(struct MenuAnimation_t *); + int32_t(*in)(struct MenuAnimation_t *); + + Menu_t *previous; + Menu_t *current; + + int32_t start; + int32_t length; +} MenuAnimation_t; + +extern MenuAnimation_t m_animation; extern MenuID_t g_currentMenu; extern Menu_t *m_currentMenu;