MultiCraft 1.0.2
|
@ -13,12 +13,6 @@ PATHCFGFILE = path.cfg
|
||||||
|
|
||||||
ROOT = $(shell pwd)
|
ROOT = $(shell pwd)
|
||||||
|
|
||||||
# this string will be written to Files.zip in ver.txt
|
|
||||||
VER_TEXT = 1.1
|
|
||||||
GAMES_TO_COPY = MultiCraft_game
|
|
||||||
MODS_TO_COPY =
|
|
||||||
|
|
||||||
|
|
||||||
VERSION_MAJOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \
|
VERSION_MAJOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \
|
||||||
grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | cut -f2 -d' ')
|
grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | cut -f2 -d' ')
|
||||||
VERSION_MINOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \
|
VERSION_MINOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \
|
||||||
|
@ -87,7 +81,7 @@ IRRLICHT_TIMESTAMP = $(IRRLICHT_DIR)timestamp
|
||||||
IRRLICHT_TIMESTAMP_INT = $(ROOT)/deps/irrlicht_timestamp
|
IRRLICHT_TIMESTAMP_INT = $(ROOT)/deps/irrlicht_timestamp
|
||||||
IRRLICHT_URL_SVN = http://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@$(IRRLICHT_REVISION)
|
IRRLICHT_URL_SVN = http://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@$(IRRLICHT_REVISION)
|
||||||
|
|
||||||
OPENSSL_VERSION = 1.0.1p
|
OPENSSL_VERSION = 1.0.2e
|
||||||
OPENSSL_BASEDIR = openssl-$(OPENSSL_VERSION)
|
OPENSSL_BASEDIR = openssl-$(OPENSSL_VERSION)
|
||||||
OPENSSL_DIR = $(ROOT)/deps/$(OPENSSL_BASEDIR)/
|
OPENSSL_DIR = $(ROOT)/deps/$(OPENSSL_BASEDIR)/
|
||||||
OPENSSL_LIB = $(OPENSSL_DIR)/libssl.so.1.0.0
|
OPENSSL_LIB = $(OPENSSL_DIR)/libssl.so.1.0.0
|
||||||
|
@ -144,7 +138,7 @@ endif
|
||||||
$(ASSETS_TIMESTAMP) $(LEVELDB_TIMESTAMP) \
|
$(ASSETS_TIMESTAMP) $(LEVELDB_TIMESTAMP) \
|
||||||
$(OPENAL_TIMESTAMP) $(OGG_TIMESTAMP) \
|
$(OPENAL_TIMESTAMP) $(OGG_TIMESTAMP) \
|
||||||
$(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \
|
$(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \
|
||||||
$(OPENSSL_TIMESTAMP) curl_binary \
|
$(OPENSSL_TIMESTAMP) \
|
||||||
$(ROOT)/jni/src/android_version.h \
|
$(ROOT)/jni/src/android_version.h \
|
||||||
$(ROOT)/jni/src/android_version_githash.h
|
$(ROOT)/jni/src/android_version_githash.h
|
||||||
|
|
||||||
|
@ -205,7 +199,7 @@ openal_download :
|
||||||
openal : $(OPENAL_LIB)
|
openal : $(OPENAL_LIB)
|
||||||
|
|
||||||
$(OPENAL_LIB): $(OPENAL_TIMESTAMP)
|
$(OPENAL_LIB): $(OPENAL_TIMESTAMP)
|
||||||
@REFRESH=0; \
|
+ @REFRESH=0; \
|
||||||
if [ ! -e ${OPENAL_TIMESTAMP_INT} ] ; then \
|
if [ ! -e ${OPENAL_TIMESTAMP_INT} ] ; then \
|
||||||
REFRESH=1; \
|
REFRESH=1; \
|
||||||
fi; \
|
fi; \
|
||||||
|
@ -250,7 +244,7 @@ ogg_download :
|
||||||
ogg : $(OGG_LIB)
|
ogg : $(OGG_LIB)
|
||||||
|
|
||||||
$(OGG_LIB): $(OGG_TIMESTAMP)
|
$(OGG_LIB): $(OGG_TIMESTAMP)
|
||||||
@REFRESH=0; \
|
+ @REFRESH=0; \
|
||||||
if [ ! -e ${OGG_TIMESTAMP_INT} ] ; then \
|
if [ ! -e ${OGG_TIMESTAMP_INT} ] ; then \
|
||||||
echo "${OGG_TIMESTAMP_INT} doesn't exist"; \
|
echo "${OGG_TIMESTAMP_INT} doesn't exist"; \
|
||||||
REFRESH=1; \
|
REFRESH=1; \
|
||||||
|
@ -295,7 +289,7 @@ openssl_download :
|
||||||
|
|
||||||
openssl : $(OPENSSL_LIB)
|
openssl : $(OPENSSL_LIB)
|
||||||
|
|
||||||
$(OPENSSL_LIB): $(OPENSSL_TIMESTAMP)
|
$(OPENSSL_LIB): $(OPENSSL_TIMESTAMP) $(GMP_LIB)
|
||||||
@REFRESH=0; \
|
@REFRESH=0; \
|
||||||
if [ ! -e ${OPENSSL_TIMESTAMP_INT} ] ; then \
|
if [ ! -e ${OPENSSL_TIMESTAMP_INT} ] ; then \
|
||||||
echo "${OPENSSL_TIMESTAMP_INT} doesn't exist"; \
|
echo "${OPENSSL_TIMESTAMP_INT} doesn't exist"; \
|
||||||
|
@ -313,7 +307,8 @@ $(OPENSSL_LIB): $(OPENSSL_TIMESTAMP)
|
||||||
--toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
|
--toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
|
||||||
--install-dir=$${TOOLCHAIN}; \
|
--install-dir=$${TOOLCHAIN}; \
|
||||||
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
|
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
|
||||||
CC=${CROSS_PREFIX}gcc ./Configure android-${TARGET_ARCH} no-idea no-seed -no-sha0 -DL_ENDIAN;\
|
CC=${CROSS_PREFIX}gcc ./Configure enable-gmp -DL_ENDIAN -I${GMP_DIR} -L${GMP_DIR}/usr/lib android-${TARGET_ARCH};\
|
||||||
|
CC=${CROSS_PREFIX}gcc ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make depend; \
|
||||||
CC=${CROSS_PREFIX}gcc ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make build_libs; \
|
CC=${CROSS_PREFIX}gcc ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make build_libs; \
|
||||||
touch ${OPENSSL_TIMESTAMP}; \
|
touch ${OPENSSL_TIMESTAMP}; \
|
||||||
touch ${OPENSSL_TIMESTAMP_INT}; \
|
touch ${OPENSSL_TIMESTAMP_INT}; \
|
||||||
|
@ -395,7 +390,7 @@ freetype_download :
|
||||||
freetype : $(FREETYPE_LIB)
|
freetype : $(FREETYPE_LIB)
|
||||||
|
|
||||||
$(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP)
|
$(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP)
|
||||||
@REFRESH=0; \
|
+ @REFRESH=0; \
|
||||||
if [ ! -e ${FREETYPE_TIMESTAMP_INT} ] ; then \
|
if [ ! -e ${FREETYPE_TIMESTAMP_INT} ] ; then \
|
||||||
REFRESH=1; \
|
REFRESH=1; \
|
||||||
fi; \
|
fi; \
|
||||||
|
@ -424,6 +419,7 @@ $(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP)
|
||||||
clean_freetype :
|
clean_freetype :
|
||||||
$(RM) -rf ${FREETYPE_DIR}
|
$(RM) -rf ${FREETYPE_DIR}
|
||||||
|
|
||||||
|
|
||||||
$(ICONV_TIMESTAMP) : iconv_download
|
$(ICONV_TIMESTAMP) : iconv_download
|
||||||
@LAST_MODIF=$$(find ${ICONV_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
|
@LAST_MODIF=$$(find ${ICONV_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
|
||||||
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
|
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
|
||||||
|
@ -511,7 +507,7 @@ $(IRRLICHT_TIMESTAMP) : irrlicht_download
|
||||||
irrlicht : $(IRRLICHT_LIB)
|
irrlicht : $(IRRLICHT_LIB)
|
||||||
|
|
||||||
$(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB)
|
$(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB)
|
||||||
@REFRESH=0; \
|
+ @REFRESH=0; \
|
||||||
if [ ! -e ${IRRLICHT_TIMESTAMP_INT} ] ; then \
|
if [ ! -e ${IRRLICHT_TIMESTAMP_INT} ] ; then \
|
||||||
REFRESH=1; \
|
REFRESH=1; \
|
||||||
fi; \
|
fi; \
|
||||||
|
@ -585,7 +581,7 @@ $(CURL_LIB): $(CURL_TIMESTAMP) $(OPENSSL_LIB)
|
||||||
export CXX=${CROSS_PREFIX}g++; \
|
export CXX=${CROSS_PREFIX}g++; \
|
||||||
export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
|
export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
|
||||||
export CPPFLAGS="$${CPPFLAGS} -I${OPENSSL_DIR}/include \
|
export CPPFLAGS="$${CPPFLAGS} -I${OPENSSL_DIR}/include \
|
||||||
-L${OPENSSL_DIR} ${TARGET_CFLAGS_ADDON}"; \
|
${TARGET_CFLAGS_ADDON}"; \
|
||||||
export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \
|
export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \
|
||||||
export LDFLAGS="$${LDFLAGS} -L${OPENSSL_DIR} ${TARGET_LDFLAGS_ADDON}"; \
|
export LDFLAGS="$${LDFLAGS} -L${OPENSSL_DIR} ${TARGET_LDFLAGS_ADDON}"; \
|
||||||
./configure --host=${TARGET_HOST} --disable-shared --enable-static --with-ssl; \
|
./configure --host=${TARGET_HOST} --disable-shared --enable-static --with-ssl; \
|
||||||
|
@ -601,18 +597,6 @@ clean_curl :
|
||||||
$(RM) -rf deps/curl-${CURL_VERSION} \
|
$(RM) -rf deps/curl-${CURL_VERSION} \
|
||||||
$(RM) -f deps/curl
|
$(RM) -f deps/curl
|
||||||
|
|
||||||
|
|
||||||
curl_binary:
|
|
||||||
@if [ ! -d "deps/curl-${CURL_VERSION_BINARY}" ] ; then \
|
|
||||||
echo "curl binary missing, downloading..."; \
|
|
||||||
mkdir -p ${ROOT}/deps; \
|
|
||||||
cd deps; \
|
|
||||||
wget http://curl.haxx.se/gknw.net/7.34.0/dist-android/curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz || exit 1;\
|
|
||||||
tar -xzf curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz || exit 1;\
|
|
||||||
mv curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android curl-${CURL_VERSION_BINARY};\
|
|
||||||
rm curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
$(GMP_TIMESTAMP) : gmp_download
|
$(GMP_TIMESTAMP) : gmp_download
|
||||||
@LAST_MODIF=$$(find ${GMP_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
|
@LAST_MODIF=$$(find ${GMP_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
|
||||||
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
|
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
|
||||||
|
@ -723,25 +707,14 @@ assets : $(ASSETS_TIMESTAMP)
|
||||||
if [ $$REFRESH -ne 0 ] ; then \
|
if [ $$REFRESH -ne 0 ] ; then \
|
||||||
echo "assets changed, refreshing..."; \
|
echo "assets changed, refreshing..."; \
|
||||||
$(MAKE) clean_assets; \
|
$(MAKE) clean_assets; \
|
||||||
mkdir -p ${ROOT}/assets/Minetest; \
|
mkdir -p ${ROOT}/assets/MultiCraft; \
|
||||||
cp ${ROOT}/../../multicraft.conf.example ${ROOT}/assets/Minetest; \
|
cp ${ROOT}/../../multicraft.conf.example ${ROOT}/assets/MultiCraft; \
|
||||||
cp ${ROOT}/../../README.md ${ROOT}/assets/Minetest; \
|
cp ${ROOT}/../../README.md ${ROOT}/assets/MultiCraft; \
|
||||||
cp -r ${ROOT}/../../builtin ${ROOT}/assets/Minetest; \
|
cp -r ${ROOT}/../../builtin ${ROOT}/assets/MultiCraft; \
|
||||||
cp -r ${ROOT}/../../client ${ROOT}/assets/Minetest; \
|
mkdir ${ROOT}/assets/MultiCraft/fonts; \
|
||||||
cp -r ${ROOT}/../../doc ${ROOT}/assets/Minetest; \
|
cp -r ${ROOT}/../../fonts/*.ttf ${ROOT}/assets/MultiCraft/fonts/; \
|
||||||
cp -r ${ROOT}/../../fonts ${ROOT}/assets/Minetest; \
|
cp -r ${ROOT}/../../games ${ROOT}/assets/MultiCraft; \
|
||||||
mkdir ${ROOT}/assets/Minetest/games; \
|
cp -r ${ROOT}/../../textures ${ROOT}/assets/MultiCraft; \
|
||||||
for game in ${GAMES_TO_COPY}; do \
|
|
||||||
cp -r ${ROOT}/../../games/$$game ${ROOT}/assets/Minetest/games/; \
|
|
||||||
done; \
|
|
||||||
mkdir ${ROOT}/assets/Minetest/mods; \
|
|
||||||
for mod in ${MODS_TO_COPY}; do \
|
|
||||||
cp -r ${ROOT}/../../mods/$$mod ${ROOT}/assets/Minetest/mods/; \
|
|
||||||
done; \
|
|
||||||
cp -r ${ROOT}/../../po ${ROOT}/assets/Minetest; \
|
|
||||||
cp -r ${ROOT}/../../textures ${ROOT}/assets/Minetest; \
|
|
||||||
mkdir -p ${ROOT}/assets/Minetest/media; \
|
|
||||||
cp -r ${IRRLICHT_DIR}/media/Shaders ${ROOT}/assets/Minetest/media; \
|
|
||||||
cd ${ROOT}/assets || exit 1; \
|
cd ${ROOT}/assets || exit 1; \
|
||||||
find . -name "timestamp" -exec rm {} \; ; \
|
find . -name "timestamp" -exec rm {} \; ; \
|
||||||
find . -name "*.blend" -exec rm {} \; ; \
|
find . -name "*.blend" -exec rm {} \; ; \
|
||||||
|
@ -750,14 +723,10 @@ assets : $(ASSETS_TIMESTAMP)
|
||||||
find . -type d -path "*.svn" -exec rm -rf {} \; ; \
|
find . -type d -path "*.svn" -exec rm -rf {} \; ; \
|
||||||
find . -type f -path "*.gitignore" -exec rm -rf {} \; ; \
|
find . -type f -path "*.gitignore" -exec rm -rf {} \; ; \
|
||||||
ls -R | grep ":$$" | sed -e 's/:$$//' -e 's/\.//' -e 's/^\///' > "index.txt"; \
|
ls -R | grep ":$$" | sed -e 's/:$$//' -e 's/\.//' -e 's/^\///' > "index.txt"; \
|
||||||
find Minetest >"filelist.txt"; \
|
find MultiCraft >"filelist.txt"; \
|
||||||
cp ${ROOT}/${ASSETS_TIMESTAMP} ${ROOT}/${ASSETS_TIMESTAMP}.old; \
|
cp ${ROOT}/${ASSETS_TIMESTAMP} ${ROOT}/${ASSETS_TIMESTAMP}.old; \
|
||||||
cd ${ROOT}/assets/Minetest; \
|
|
||||||
echo "Creating Files.zip"; \
|
echo "Creating Files.zip"; \
|
||||||
zip -r -X -q ../Files.zip *; \
|
zip -r Files.zip MultiCraft; \
|
||||||
cd ${ROOT}/assets; \
|
|
||||||
rm ${ROOT}/assets/index.txt; \
|
|
||||||
rm ${ROOT}/assets/filelist.txt; \
|
|
||||||
else \
|
else \
|
||||||
echo "nothing to be done for assets"; \
|
echo "nothing to be done for assets"; \
|
||||||
fi
|
fi
|
||||||
|
@ -779,10 +748,9 @@ apk: $(PATHCFGFILE) assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $
|
||||||
TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
|
TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
|
||||||
TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
|
TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
|
||||||
TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" && \
|
TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" && \
|
||||||
ant $$BUILD_TYPE && \
|
# ant $$BUILD_TYPE && \
|
||||||
echo "++ Success!" && \
|
echo " Success! =)" \
|
||||||
echo "APK: bin/MultiCraft-$$BUILD_TYPE.apk" && \
|
# echo "APK: bin/MultiCraft-$$BUILD_TYPE.apk" && \
|
||||||
echo "You can install it with \`adb install -r bin/MultiCraft-$$BUILD_TYPE.apk\`"
|
|
||||||
|
|
||||||
prep_srcdir :
|
prep_srcdir :
|
||||||
@if [ ! -e ${ROOT}/jni/src ]; then \
|
@if [ ! -e ${ROOT}/jni/src ]; then \
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
--- openssl-1.0.1j/Configure.orig 2014-10-15 14:53:39.000000000 +0200
|
--- openssl-1.0.2e.orig/Configure 2015-12-03 15:04:23.000000000 +0100
|
||||||
+++ openssl-1.0.1j/Configure 2015-01-03 22:41:43.505749921 +0100
|
+++ openssl-1.0.2e/Configure 2015-12-14 21:01:40.351265968 +0100
|
||||||
@@ -407,6 +407,8 @@
|
@@ -464,8 +464,10 @@
|
||||||
|
# Android: linux-* but without pointers to headers and libs.
|
||||||
"android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
"android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
||||||
"android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
"android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
||||||
"android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
|
||||||
+"android-arm","gcc:-march=armv4 -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
+"android-arm","gcc:-march=armv4 -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
||||||
+"android-mips32","gcc:-march=mips32 -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
"android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
||||||
|
"android-mips","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
||||||
|
+"android-mips32","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
||||||
|
|
||||||
#### *BSD [do see comment about ${BSDthreads} above!]
|
#### *BSD [do see comment about ${BSDthreads} above!]
|
||||||
"BSD-generic32","gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
"BSD-generic32","gcc:-O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
||||||
|
|
|
@ -27,19 +27,11 @@ function core.get_pointed_thing_position(pointed_thing, above)
|
||||||
if above then
|
if above then
|
||||||
-- The position where a node would be placed
|
-- The position where a node would be placed
|
||||||
return pointed_thing.above
|
return pointed_thing.above
|
||||||
else
|
end
|
||||||
-- The position where a node would be dug
|
-- The position where a node would be dug
|
||||||
return pointed_thing.under
|
return pointed_thing.under
|
||||||
end
|
|
||||||
elseif pointed_thing.type == "object" then
|
elseif pointed_thing.type == "object" then
|
||||||
obj = pointed_thing.ref
|
return pointed_thing.ref and pointed_thing.ref:getpos()
|
||||||
if obj ~= nil then
|
|
||||||
return obj:getpos()
|
|
||||||
else
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return nil
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ local function create_world_formspec(dialogdata)
|
||||||
mm_texture.clear("header")
|
mm_texture.clear("header")
|
||||||
mm_texture.clear("footer")
|
mm_texture.clear("footer")
|
||||||
minetest.set_clouds(false)
|
minetest.set_clouds(false)
|
||||||
minetest.set_background("background",minetest.formspec_escape(mm_texture.basetexturedir)..'background.png')
|
minetest.set_background("background",minetest.formspec_escape(mm_texture.basetexturedir)..'background.jpg')
|
||||||
--minetest.set_background("header",minetest.formspec_escape(mm_texture.basetexturedir)..'header.png')
|
--minetest.set_background("header",minetest.formspec_escape(mm_texture.basetexturedir)..'header.png')
|
||||||
|
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ local function create_world_buttonhandler(this, fields)
|
||||||
core.setting_set("fixed_map_seed", fields["te_seed"])
|
core.setting_set("fixed_map_seed", fields["te_seed"])
|
||||||
|
|
||||||
if not menudata.worldlist:uid_exists_raw(worldname) then
|
if not menudata.worldlist:uid_exists_raw(worldname) then
|
||||||
core.setting_set("mg_name","v7")
|
core.setting_set("mg_name","v6")
|
||||||
message = core.create_world(worldname,gameindex)
|
message = core.create_world(worldname,gameindex)
|
||||||
else
|
else
|
||||||
message = fgettext("A world named \"$1\" already exists", worldname)
|
message = fgettext("A world named \"$1\" already exists", worldname)
|
||||||
|
|
|
@ -21,7 +21,7 @@ local function delete_world_formspec(dialogdata)
|
||||||
mm_texture.clear("header")
|
mm_texture.clear("header")
|
||||||
mm_texture.clear("footer")
|
mm_texture.clear("footer")
|
||||||
minetest.set_clouds(false)
|
minetest.set_clouds(false)
|
||||||
minetest.set_background("background",minetest.formspec_escape(mm_texture.basetexturedir)..'background.png')
|
minetest.set_background("background",minetest.formspec_escape(mm_texture.basetexturedir)..'background.jpg')
|
||||||
--minetest.set_background("header",minetest.formspec_escape(mm_texture.basetexturedir)..'header.png')
|
--minetest.set_background("header",minetest.formspec_escape(mm_texture.basetexturedir)..'header.png')
|
||||||
|
|
||||||
local retval =
|
local retval =
|
||||||
|
|
|
@ -121,7 +121,7 @@ local function init_globals()
|
||||||
mm_texture.clear("header")
|
mm_texture.clear("header")
|
||||||
mm_texture.clear("footer")
|
mm_texture.clear("footer")
|
||||||
minetest.set_clouds(false)
|
minetest.set_clouds(false)
|
||||||
minetest.set_background("background",minetest.formspec_escape(mm_texture.basetexturedir)..'background.png')
|
minetest.set_background("background",minetest.formspec_escape(mm_texture.basetexturedir)..'background.jpg')
|
||||||
--minetest.set_background("header",minetest.formspec_escape(mm_texture.basetexturedir)..'header.png')
|
--minetest.set_background("header",minetest.formspec_escape(mm_texture.basetexturedir)..'header.png')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ tab_credits = {
|
||||||
name = "credits",
|
name = "credits",
|
||||||
caption = fgettext("Credits"),
|
caption = fgettext("Credits"),
|
||||||
cbf_formspec = function (tabview, name, tabdata)
|
cbf_formspec = function (tabview, name, tabdata)
|
||||||
local logofile = defaulttexturedir .. "logo.png"
|
local logofile = defaulttexturedir .. "smoke_puff.png"
|
||||||
return "label[0.5,3.2;Minetest " .. core.get_version() .. "]" ..
|
return "label[0.5,3.2;Minetest " .. core.get_version() .. "]" ..
|
||||||
"label[0.5,3.5;http://minetest.net]" ..
|
"label[0.5,3.5;http://minetest.net]" ..
|
||||||
"image[0.5,1;" .. core.formspec_escape(logofile) .. "]" ..
|
"image[0.5,1;" .. core.formspec_escape(logofile) .. "]" ..
|
||||||
|
|
|
@ -21,7 +21,7 @@ local function get_formspec(tabview, name, tabdata)
|
||||||
mm_texture.clear("header")
|
mm_texture.clear("header")
|
||||||
mm_texture.clear("footer")
|
mm_texture.clear("footer")
|
||||||
minetest.set_clouds(false)
|
minetest.set_clouds(false)
|
||||||
minetest.set_background("background",minetest.formspec_escape(mm_texture.basetexturedir)..'background.png')
|
minetest.set_background("background",minetest.formspec_escape(mm_texture.basetexturedir)..'background.jpg')
|
||||||
--minetest.set_background("header",minetest.formspec_escape(mm_texture.basetexturedir)..'header.png')
|
--minetest.set_background("header",minetest.formspec_escape(mm_texture.basetexturedir)..'header.png')
|
||||||
|
|
||||||
local render_details = core.is_yes(core.setting_getbool("public_serverlist"))
|
local render_details = core.is_yes(core.setting_getbool("public_serverlist"))
|
||||||
|
|
|
@ -21,7 +21,7 @@ local function get_formspec(tabview, name, tabdata)
|
||||||
mm_texture.clear("header")
|
mm_texture.clear("header")
|
||||||
mm_texture.clear("footer")
|
mm_texture.clear("footer")
|
||||||
minetest.set_clouds(false)
|
minetest.set_clouds(false)
|
||||||
minetest.set_background("background",minetest.formspec_escape(mm_texture.basetexturedir)..'background.png')
|
minetest.set_background("background",minetest.formspec_escape(mm_texture.basetexturedir)..'background.jpg')
|
||||||
--minetest.set_background("header",minetest.formspec_escape(mm_texture.basetexturedir)..'header.png')
|
--minetest.set_background("header",minetest.formspec_escape(mm_texture.basetexturedir)..'header.png')
|
||||||
|
|
||||||
local index = menudata.worldlist:get_current_index(
|
local index = menudata.worldlist:get_current_index(
|
||||||
|
|
|
@ -158,5 +158,4 @@ tab_singleplayer = {
|
||||||
caption = fgettext("Single Player"),
|
caption = fgettext("Single Player"),
|
||||||
cbf_formspec = get_formspec,
|
cbf_formspec = get_formspec,
|
||||||
cbf_button_handler = main_button_handler,
|
cbf_button_handler = main_button_handler,
|
||||||
on_change = on_change
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -970,49 +970,60 @@ mgflat_np_cave2 (Mapgen flat cave2 noise parameters) noise_params 0, 12, (128, 1
|
||||||
|
|
||||||
[***Mapgen fractal]
|
[***Mapgen fractal]
|
||||||
|
|
||||||
# Choice of 8 4-dimensional fractals.
|
# Choice of 18 fractals from 9 formulas.
|
||||||
# 1 = "Roundy" mandelbrot set.
|
# 1 = 4D "Roundy" mandelbrot set.
|
||||||
# 2 = "Roundy" julia set.
|
# 2 = 4D "Roundy" julia set.
|
||||||
# 3 = "Squarry" mandelbrot set.
|
# 3 = 4D "Squarry" mandelbrot set.
|
||||||
# 4 = "Squarry" julia set.
|
# 4 = 4D "Squarry" julia set.
|
||||||
# 5 = "Mandy Cousin" mandelbrot set.
|
# 5 = 4D "Mandy Cousin" mandelbrot set.
|
||||||
# 6 = "Mandy Cousin" julia set.
|
# 6 = 4D "Mandy Cousin" julia set.
|
||||||
# 7 = "Variation" mandelbrot set.
|
# 7 = 4D "Variation" mandelbrot set.
|
||||||
# 8 = "Variation" julia set.
|
# 8 = 4D "Variation" julia set.
|
||||||
mgfractal_formula (Mapgen fractal formula) int 1 1 8
|
# 9 = 3D "Mandelbrot/Mandelbar" mandelbrot set.
|
||||||
|
# 10 = 3D "Mandelbrot/Mandelbar" julia set.
|
||||||
|
# 11 = 3D "Christmas Tree" mandelbrot set.
|
||||||
|
# 12 = 3D "Christmas Tree" julia set.
|
||||||
|
# 13 = 3D "Mandelbulb" mandelbrot set.
|
||||||
|
# 14 = 3D "Mandelbulb" julia set.
|
||||||
|
# 15 = 3D "Cosine Mandelbulb" mandelbrot set.
|
||||||
|
# 16 = 3D "Cosine Mandelbulb" julia set.
|
||||||
|
# 17 = 4D "Mandelbulb" mandelbrot set.
|
||||||
|
# 18 = 4D "Mandelbulb" julia set.
|
||||||
|
mgfractal_fractal (Mapgen fractal fractal) int 1 1 18
|
||||||
|
|
||||||
# Iterations of the recursive function.
|
# Iterations of the recursive function.
|
||||||
# Controls scale of finest detail.
|
# Controls the amount of fine detail.
|
||||||
mgfractal_iterations (Mapgen fractal iterations) int 11
|
mgfractal_iterations (Mapgen fractal iterations) int 11
|
||||||
|
|
||||||
# Approximate (X,Y,Z) scale of fractal in nodes.
|
# Approximate (X,Y,Z) scale of fractal in nodes.
|
||||||
mgfractal_scale (Mapgen fractal scale) v3f (4096.0, 1024.0, 4096.0)
|
mgfractal_scale (Mapgen fractal scale) v3f (4096.0, 1024.0, 4096.0)
|
||||||
|
|
||||||
# (X,Y,Z) offset of fractal from world centre.
|
# (X,Y,Z) offset of fractal from world centre in units of 'scale'.
|
||||||
# Used to move a suitable spawn area of low land close to (0, 0).
|
# Used to move a suitable spawn area of low land close to (0, 0).
|
||||||
# The default is suitable for mandelbrot sets, it needs to be edited for julia sets,
|
# The default is suitable for mandelbrot sets, it needs to be edited for julia sets.
|
||||||
# do this by greatly reducing 'scale' and setting 'offset' initially to (0, 0, 0).
|
|
||||||
# Range roughly -2 to 2. Multiply by 'scale' for offset in nodes.
|
# Range roughly -2 to 2. Multiply by 'scale' for offset in nodes.
|
||||||
mgfractal_offset (Mapgen fractal offset) v3f (1.79, 0.0, 0.0)
|
mgfractal_offset (Mapgen fractal offset) v3f (1.79, 0.0, 0.0)
|
||||||
|
|
||||||
# W co-ordinate of the generated 3D slice of the 4D shape.
|
# W co-ordinate of the generated 3D slice of a 4D fractal.
|
||||||
# Alters the generated 3D shape.
|
# Determines which 3D slice of the 4D shape is generated.
|
||||||
|
# Has no effect on 3D fractals.
|
||||||
# Range roughly -2 to 2.
|
# Range roughly -2 to 2.
|
||||||
mgfractal_slice_w (Mapgen fractal slice w) float 0.0
|
mgfractal_slice_w (Mapgen fractal slice w) float 0.0
|
||||||
|
|
||||||
# Julia set only: X value determining the 4D shape.
|
# Julia set only: X component of hypercomplex constant determining julia shape.
|
||||||
# Range roughly -2 to 2.
|
# Range roughly -2 to 2.
|
||||||
mgfractal_julia_x (Mapgen fractal julia x) float 0.33
|
mgfractal_julia_x (Mapgen fractal julia x) float 0.33
|
||||||
|
|
||||||
# Julia set only: Y value determining the 4D shape.
|
# Julia set only: Y component of hypercomplex constant determining julia shape.
|
||||||
# Range roughly -2 to 2.
|
# Range roughly -2 to 2.
|
||||||
mgfractal_julia_y (Mapgen fractal julia y) float 0.33
|
mgfractal_julia_y (Mapgen fractal julia y) float 0.33
|
||||||
|
|
||||||
# Julia set only: Z value determining the 4D shape.
|
# Julia set only: Z component of hypercomplex constant determining julia shape.
|
||||||
# Range roughly -2 to 2.
|
# Range roughly -2 to 2.
|
||||||
mgfractal_julia_z (Mapgen fractal julia z) float 0.33
|
mgfractal_julia_z (Mapgen fractal julia z) float 0.33
|
||||||
|
|
||||||
# Julia set only: W value determining the 4D shape.
|
# Julia set only: W component of hypercomplex constant determining julia shape.
|
||||||
|
# Has no effect on 3D fractals.
|
||||||
# Range roughly -2 to 2.
|
# Range roughly -2 to 2.
|
||||||
mgfractal_julia_w (Mapgen fractal julia w) float 0.33
|
mgfractal_julia_w (Mapgen fractal julia w) float 0.33
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,130 @@
|
||||||
|
Minetest Android port
|
||||||
|
=====================
|
||||||
|
Date: 2015 12 16
|
||||||
|
|
||||||
|
Controls
|
||||||
|
--------
|
||||||
|
The Android port doesn't support everything you can do on PC due to the
|
||||||
|
limited capabilities of common devices. What can be done is described
|
||||||
|
below:
|
||||||
|
|
||||||
|
While you're playing the game normally (that is, no menu or inventory is
|
||||||
|
shown), the following controls are available:
|
||||||
|
* Look around: touch screen and slide finger
|
||||||
|
* double tap: place a node or use selected item
|
||||||
|
* long tap: dig node
|
||||||
|
* touch shown buttons: press button
|
||||||
|
* Buttons:
|
||||||
|
** left upper corner: chat
|
||||||
|
** right lower corner: jump
|
||||||
|
** right lower corner: crouch
|
||||||
|
** left lower corner: walk/step...
|
||||||
|
left up right
|
||||||
|
down
|
||||||
|
** left lower corner: display inventory
|
||||||
|
|
||||||
|
When a menu or inventory is displayed:
|
||||||
|
* double tap outside menu area: close menu
|
||||||
|
* tap on an item stack: select that stack
|
||||||
|
* tap on an empty slot: if you selected a stack already, that stack is placed here
|
||||||
|
* drag and drop: touch stack and hold finger down, move the stack to another
|
||||||
|
slot, tap another finger while keeping first finger on screen
|
||||||
|
--> places a single item from dragged stack into current (first touched) slot
|
||||||
|
|
||||||
|
Special settings
|
||||||
|
----------------
|
||||||
|
There are some settings especially useful for Android users. Minetest's config
|
||||||
|
file can usually be found at /mnt/sdcard/Minetest.
|
||||||
|
|
||||||
|
* gui_scaling: this is a user-specified scaling factor for the GUI- In case
|
||||||
|
main menu is too big or small on your device, try changing this
|
||||||
|
value.
|
||||||
|
* inventory_image_hack: if your inventory items are messed up, try setting
|
||||||
|
this to true
|
||||||
|
|
||||||
|
Known issues
|
||||||
|
------------
|
||||||
|
Not all issues are fixed by now:
|
||||||
|
|
||||||
|
* Unable to exit from volume menu -- don't use the volume menu, use Android's
|
||||||
|
volume controls instead.
|
||||||
|
* 512 MB RAM seems to be inadequate -- this depends on the server you join.
|
||||||
|
Try to play on more lightweight servers.
|
||||||
|
|
||||||
|
Versioning
|
||||||
|
----------
|
||||||
|
Android version numbers are 4 digits instead of Minetest's 3 digits. The last
|
||||||
|
number of Android's version represents the Android internal version code. This
|
||||||
|
version code is strictly incremental. It's incremented for each official
|
||||||
|
Minetest Android build.
|
||||||
|
|
||||||
|
E.g. prerelease Minetest Android builds have been 0.4.9.3, while the first
|
||||||
|
official version most likely will be 0.4.10.4
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
In order to build, your PC has to be set up to build Minetest in the usual
|
||||||
|
manner (see the regular Minetest documentation for how to get this done).
|
||||||
|
In addition to what is required for Minetest in general, you will need the
|
||||||
|
following software packages. The version number in parenthesis denotes the
|
||||||
|
version that was tested at the time this README was drafted; newer/older
|
||||||
|
versions may or may not work.
|
||||||
|
|
||||||
|
* android SDK (24.4.1)
|
||||||
|
* android NDK (r10e)
|
||||||
|
* wget (1.13.4)
|
||||||
|
|
||||||
|
Additionally, you'll need to have an Internet connection available on the
|
||||||
|
build system, as the Android build will download some source packages.
|
||||||
|
|
||||||
|
Build
|
||||||
|
-----
|
||||||
|
|
||||||
|
Debug build:
|
||||||
|
* Enter "build/android" subdirectory
|
||||||
|
* Execute "make"
|
||||||
|
* Answer the questions about where SDK and NDK are located on your filesystem
|
||||||
|
* Wait for build to finish
|
||||||
|
|
||||||
|
After the build is finished, the resulting apk can be fond in
|
||||||
|
build/android/bin/. It will be called Minetest-debug.apk
|
||||||
|
|
||||||
|
Release build:
|
||||||
|
|
||||||
|
* In order to make a release build you'll have to have a keystore setup to sign
|
||||||
|
the resulting apk package. How this is done is not part of this README. There
|
||||||
|
are different tutorials on the web explaining how to do it
|
||||||
|
- choose one yourself.
|
||||||
|
|
||||||
|
* Once your keystore is setup, enter build/android subdirectory and create a new
|
||||||
|
file "ant.properties" there. Add following lines to that file:
|
||||||
|
|
||||||
|
> key.store=<path to your keystore>
|
||||||
|
> key.alias=Minetest
|
||||||
|
|
||||||
|
* Execute "make release"
|
||||||
|
* Enter your keystore as well as your Mintest key password once asked. Be
|
||||||
|
careful it's shown on console in clear text!
|
||||||
|
* The result can be found at "bin/Minetest-release.apk"
|
||||||
|
|
||||||
|
Other things that may be nice to know
|
||||||
|
------------
|
||||||
|
* The environment for Android development tools is saved within Android build
|
||||||
|
build folder. If you want direct access to it do:
|
||||||
|
|
||||||
|
> make envpaths
|
||||||
|
> . and_env
|
||||||
|
|
||||||
|
After you've done this you'll have your path and path variables set correct
|
||||||
|
to use adb and all other Android development tools
|
||||||
|
|
||||||
|
* You can build a single dependency by calling make and the dependency's name,
|
||||||
|
e.g.:
|
||||||
|
|
||||||
|
> make irrlicht
|
||||||
|
|
||||||
|
* You can completely cleanup a dependency by calling make and the "clean" target,
|
||||||
|
e.g.:
|
||||||
|
|
||||||
|
> make clean_irrlicht
|
|
@ -4,7 +4,7 @@ Copyright (C) 2015 est31 <MTest31@outlook.com>
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
the Free Software Foundation; either version 2.1 of the License, or
|
the Free Software Foundation; either version 3.0 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
|
|
|
@ -4,7 +4,7 @@ Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
the Free Software Foundation; either version 2.1 of the License, or
|
the Free Software Foundation; either version 3.0 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
|
|
|
@ -1261,8 +1261,18 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
|
||||||
if (getParent() == NULL && m_prop.automatic_face_movement_dir &&
|
if (getParent() == NULL && m_prop.automatic_face_movement_dir &&
|
||||||
(fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001))
|
(fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001))
|
||||||
{
|
{
|
||||||
m_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI
|
float optimal_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI
|
||||||
+ m_prop.automatic_face_movement_dir_offset;
|
+ m_prop.automatic_face_movement_dir_offset;
|
||||||
|
float max_rotation_delta =
|
||||||
|
dtime * m_prop.automatic_face_movement_max_rotation_per_sec;
|
||||||
|
|
||||||
|
if ((m_prop.automatic_face_movement_max_rotation_per_sec > 0) &&
|
||||||
|
(fabs(m_yaw - optimal_yaw) > max_rotation_delta)) {
|
||||||
|
|
||||||
|
m_yaw = optimal_yaw < m_yaw ? m_yaw - max_rotation_delta : m_yaw + max_rotation_delta;
|
||||||
|
} else {
|
||||||
|
m_yaw = optimal_yaw;
|
||||||
|
}
|
||||||
updateNodePos();
|
updateNodePos();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -283,8 +283,20 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
|
||||||
}
|
}
|
||||||
|
|
||||||
if((m_prop.automatic_face_movement_dir) &&
|
if((m_prop.automatic_face_movement_dir) &&
|
||||||
(fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001)){
|
(fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001))
|
||||||
m_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI + m_prop.automatic_face_movement_dir_offset;
|
{
|
||||||
|
float optimal_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI
|
||||||
|
+ m_prop.automatic_face_movement_dir_offset;
|
||||||
|
float max_rotation_delta =
|
||||||
|
dtime * m_prop.automatic_face_movement_max_rotation_per_sec;
|
||||||
|
|
||||||
|
if ((m_prop.automatic_face_movement_max_rotation_per_sec > 0) &&
|
||||||
|
(fabs(m_yaw - optimal_yaw) > max_rotation_delta)) {
|
||||||
|
|
||||||
|
m_yaw = optimal_yaw < m_yaw ? m_yaw - max_rotation_delta : m_yaw + max_rotation_delta;
|
||||||
|
} else {
|
||||||
|
m_yaw = optimal_yaw;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -245,7 +245,7 @@ void set_default_settings(Settings *settings)
|
||||||
settings->setDefault("default_privs", "interact, shout");
|
settings->setDefault("default_privs", "interact, shout");
|
||||||
settings->setDefault("player_transfer_distance", "0");
|
settings->setDefault("player_transfer_distance", "0");
|
||||||
settings->setDefault("enable_pvp", "true");
|
settings->setDefault("enable_pvp", "true");
|
||||||
settings->setDefault("vertical_spawn_range", "16");
|
settings->setDefault("vertical_spawn_range", "128");
|
||||||
settings->setDefault("disallow_empty_password", "false");
|
settings->setDefault("disallow_empty_password", "false");
|
||||||
settings->setDefault("disable_anticheat", "false");
|
settings->setDefault("disable_anticheat", "false");
|
||||||
settings->setDefault("enable_rollback_recording", "false");
|
settings->setDefault("enable_rollback_recording", "false");
|
||||||
|
@ -340,8 +340,8 @@ void set_default_settings(Settings *settings)
|
||||||
settings->setDefault("TMPFolder","/sdcard/tmp/");
|
settings->setDefault("TMPFolder","/sdcard/tmp/");
|
||||||
settings->setDefault("touchscreen_threshold","20");
|
settings->setDefault("touchscreen_threshold","20");
|
||||||
settings->setDefault("smooth_lighting", "false");
|
settings->setDefault("smooth_lighting", "false");
|
||||||
settings->setDefault("emergequeue_limit_diskonly", "8");
|
settings->setDefault("emergequeue_limit_diskonly", "4");
|
||||||
settings->setDefault("emergequeue_limit_generate", "8");
|
settings->setDefault("emergequeue_limit_generate", "4");
|
||||||
settings->setDefault("max_block_generate_distance", "3");
|
settings->setDefault("max_block_generate_distance", "3");
|
||||||
settings->setDefault("preload_item_visuals", "false");
|
settings->setDefault("preload_item_visuals", "false");
|
||||||
settings->setDefault("viewing_range_nodes_max", "50");
|
settings->setDefault("viewing_range_nodes_max", "50");
|
||||||
|
|
26
src/game.cpp
|
@ -2580,7 +2580,17 @@ void Game::processUserInput(VolatileRunFlags *flags,
|
||||||
|| noMenuActive() == false
|
|| noMenuActive() == false
|
||||||
|| guienv->hasFocus(gui_chat_console)) {
|
|| guienv->hasFocus(gui_chat_console)) {
|
||||||
input->clear();
|
input->clear();
|
||||||
|
#ifdef HAVE_TOUCHSCREENGUI
|
||||||
|
g_touchscreengui->Hide();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_TOUCHSCREENGUI
|
||||||
|
else if (g_touchscreengui) {
|
||||||
|
/* on touchscreengui step may generate own input events which ain't
|
||||||
|
* what we want in case we just did clear them */
|
||||||
|
g_touchscreengui->step(dtime);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!guienv->hasFocus(gui_chat_console) && gui_chat_console->isOpen()) {
|
if (!guienv->hasFocus(gui_chat_console) && gui_chat_console->isOpen()) {
|
||||||
gui_chat_console->closeConsoleAtOnce();
|
gui_chat_console->closeConsoleAtOnce();
|
||||||
|
@ -2589,13 +2599,6 @@ void Game::processUserInput(VolatileRunFlags *flags,
|
||||||
// Input handler step() (used by the random input generator)
|
// Input handler step() (used by the random input generator)
|
||||||
input->step(dtime);
|
input->step(dtime);
|
||||||
|
|
||||||
#ifdef HAVE_TOUCHSCREENGUI
|
|
||||||
|
|
||||||
if (g_touchscreengui) {
|
|
||||||
g_touchscreengui->step(dtime);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
|
|
||||||
if (current_formspec != 0)
|
if (current_formspec != 0)
|
||||||
|
@ -4219,13 +4222,11 @@ void Game::updateGui(float *statustext_time, const RunStats &stats,
|
||||||
guitext->setVisible(true);
|
guitext->setVisible(true);
|
||||||
} else if (flags.show_hud || flags.show_chat) {
|
} else if (flags.show_hud || flags.show_chat) {
|
||||||
#ifdef ANDROID
|
#ifdef ANDROID
|
||||||
u16 fps = 1.0 / stats.dtime_jitter.avg;
|
|
||||||
std::ostringstream os(std::ios_base::binary);
|
std::ostringstream os(std::ios_base::binary);
|
||||||
os << std::setprecision(1) << std::fixed
|
os << std::setprecision(1) << std::fixed
|
||||||
<< "FPS = " << fps
|
<< "(X: " << (player_position.X / BS)
|
||||||
<< " (" << (player_position.X / BS)
|
<< ", Y: " << (player_position.Y / BS)
|
||||||
<< ", " << (player_position.Y / BS)
|
<< ", Z: " << (player_position.Z / BS)
|
||||||
<< ", " << (player_position.Z / BS)
|
|
||||||
<< ")";
|
<< ")";
|
||||||
guitext->setText(utf8_to_wide(os.str()).c_str());
|
guitext->setText(utf8_to_wide(os.str()).c_str());
|
||||||
guitext->setVisible(true);
|
guitext->setVisible(true);
|
||||||
|
@ -4234,6 +4235,7 @@ void Game::updateGui(float *statustext_time, const RunStats &stats,
|
||||||
os << PROJECT_NAME_C " " << g_version_hash;
|
os << PROJECT_NAME_C " " << g_version_hash;
|
||||||
guitext->setText(utf8_to_wide(os.str()).c_str());
|
guitext->setText(utf8_to_wide(os.str()).c_str());
|
||||||
guitext->setVisible(true);
|
guitext->setVisible(true);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
guitext->setVisible(false);
|
guitext->setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,8 +172,7 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev,
|
||||||
m_sound_manager = &dummySoundManager;
|
m_sound_manager = &dummySoundManager;
|
||||||
|
|
||||||
//create topleft header
|
//create topleft header
|
||||||
//std::wstring t = utf8_to_wide(std::string(PROJECT_NAME_C " ") +
|
std::wstring t = utf8_to_wide(std::string(""));
|
||||||
//g_version_hash);
|
|
||||||
|
|
||||||
core::rect<s32> rect(0, 0, g_fontengine->getTextWidth(t), g_fontengine->getTextHeight());
|
core::rect<s32> rect(0, 0, g_fontengine->getTextWidth(t), g_fontengine->getTextHeight());
|
||||||
rect += v2s32(4, 0);
|
rect += v2s32(4, 0);
|
||||||
|
|
|
@ -5,7 +5,7 @@ Copyright (C) 2010-2015 paramat, Matt Gregory
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
the Free Software Foundation; either version 2.1 of the License, or
|
the Free Software Foundation; either version 3.0 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
|
|
|
@ -5,7 +5,7 @@ Copyright (C) 2010-2015 paramat, Matt Gregory
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
the Free Software Foundation; either version 2.1 of the License, or
|
the Free Software Foundation; either version 3.0 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
|
|
|
@ -5,7 +5,7 @@ Copyright (C) 2010-2015 paramat, Matt Gregory
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
the Free Software Foundation; either version 2.1 of the License, or
|
the Free Software Foundation; either version 3.0 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
|
|
|
@ -5,7 +5,7 @@ Copyright (C) 2010-2015 paramat, Matt Gregory
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
the Free Software Foundation; either version 2.1 of the License, or
|
the Free Software Foundation; either version 3.0 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
|
|
|
@ -43,7 +43,10 @@ ObjectProperties::ObjectProperties():
|
||||||
stepheight(0),
|
stepheight(0),
|
||||||
automatic_face_movement_dir(false),
|
automatic_face_movement_dir(false),
|
||||||
automatic_face_movement_dir_offset(0.0),
|
automatic_face_movement_dir_offset(0.0),
|
||||||
backface_culling(true)
|
backface_culling(true),
|
||||||
|
nametag(""),
|
||||||
|
nametag_color(255, 255, 255, 255),
|
||||||
|
automatic_face_movement_max_rotation_per_sec(-1)
|
||||||
{
|
{
|
||||||
textures.push_back("unknown_object.png");
|
textures.push_back("unknown_object.png");
|
||||||
colors.push_back(video::SColor(255,255,255,255));
|
colors.push_back(video::SColor(255,255,255,255));
|
||||||
|
@ -76,6 +79,9 @@ std::string ObjectProperties::dump()
|
||||||
os<<", makes_footstep_sound="<<makes_footstep_sound;
|
os<<", makes_footstep_sound="<<makes_footstep_sound;
|
||||||
os<<", automatic_rotate="<<automatic_rotate;
|
os<<", automatic_rotate="<<automatic_rotate;
|
||||||
os<<", backface_culling="<<backface_culling;
|
os<<", backface_culling="<<backface_culling;
|
||||||
|
os << ", nametag=" << nametag;
|
||||||
|
os << ", nametag_color=" << "\"" << nametag_color.getAlpha() << "," << nametag_color.getRed()
|
||||||
|
<< "," << nametag_color.getGreen() << "," << nametag_color.getBlue() << "\" ";
|
||||||
return os.str();
|
return os.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,6 +115,10 @@ void ObjectProperties::serialize(std::ostream &os) const
|
||||||
writeU8(os, automatic_face_movement_dir);
|
writeU8(os, automatic_face_movement_dir);
|
||||||
writeF1000(os, automatic_face_movement_dir_offset);
|
writeF1000(os, automatic_face_movement_dir_offset);
|
||||||
writeU8(os, backface_culling);
|
writeU8(os, backface_culling);
|
||||||
|
os << serializeString(nametag);
|
||||||
|
writeARGB8(os, nametag_color);
|
||||||
|
writeF1000(os, automatic_face_movement_max_rotation_per_sec);
|
||||||
|
|
||||||
// Add stuff only at the bottom.
|
// Add stuff only at the bottom.
|
||||||
// Never remove anything, because we don't want new versions of this
|
// Never remove anything, because we don't want new versions of this
|
||||||
}
|
}
|
||||||
|
@ -146,6 +156,9 @@ void ObjectProperties::deSerialize(std::istream &is)
|
||||||
automatic_face_movement_dir = readU8(is);
|
automatic_face_movement_dir = readU8(is);
|
||||||
automatic_face_movement_dir_offset = readF1000(is);
|
automatic_face_movement_dir_offset = readF1000(is);
|
||||||
backface_culling = readU8(is);
|
backface_culling = readU8(is);
|
||||||
|
nametag = deSerializeString(is);
|
||||||
|
nametag_color = readARGB8(is);
|
||||||
|
automatic_face_movement_max_rotation_per_sec = readF1000(is);
|
||||||
}catch(SerializationError &e){}
|
}catch(SerializationError &e){}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -48,7 +48,9 @@ struct ObjectProperties
|
||||||
bool automatic_face_movement_dir;
|
bool automatic_face_movement_dir;
|
||||||
f32 automatic_face_movement_dir_offset;
|
f32 automatic_face_movement_dir_offset;
|
||||||
bool backface_culling;
|
bool backface_culling;
|
||||||
|
std::string nametag;
|
||||||
|
video::SColor nametag_color;
|
||||||
|
f32 automatic_face_movement_max_rotation_per_sec;
|
||||||
|
|
||||||
ObjectProperties();
|
ObjectProperties();
|
||||||
std::string dump();
|
std::string dump();
|
||||||
|
|
|
@ -217,8 +217,8 @@ void initializePathsAndroid()
|
||||||
cls_File, mt_getAbsPath, "getCacheDir");
|
cls_File, mt_getAbsPath, "getCacheDir");
|
||||||
path_storage = getAndroidPath(cls_Env, NULL, cls_File, mt_getAbsPath,
|
path_storage = getAndroidPath(cls_Env, NULL, cls_File, mt_getAbsPath,
|
||||||
"getExternalStorageDirectory");
|
"getExternalStorageDirectory");
|
||||||
path_user = path_storage + DIR_DELIM + "Android/data/net.MultiCraft.Official/Files";
|
path_user = path_storage + DIR_DELIM + "Android/data/ua.MultiCraft/Files";
|
||||||
path_share = path_storage + DIR_DELIM + "Android/data/net.MultiCraft.Official/Files";
|
path_share = path_storage + DIR_DELIM + "Android/data/ua.MultiCraft/Files";
|
||||||
|
|
||||||
migrateCachePath();
|
migrateCachePath();
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,6 +201,21 @@ void read_object_properties(lua_State *L, int index,
|
||||||
}
|
}
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
getboolfield(L, -1, "backface_culling", prop->backface_culling);
|
getboolfield(L, -1, "backface_culling", prop->backface_culling);
|
||||||
|
|
||||||
|
getstringfield(L, -1, "nametag", prop->nametag);
|
||||||
|
lua_getfield(L, -1, "nametag_color");
|
||||||
|
if (!lua_isnil(L, -1)) {
|
||||||
|
video::SColor color = prop->nametag_color;
|
||||||
|
if (read_color(L, -1, &color))
|
||||||
|
prop->nametag_color = color;
|
||||||
|
}
|
||||||
|
lua_pop(L, 1);
|
||||||
|
|
||||||
|
lua_getfield(L, -1, "automatic_face_movement_max_rotation_per_sec");
|
||||||
|
if (lua_isnumber(L, -1)) {
|
||||||
|
prop->automatic_face_movement_max_rotation_per_sec = luaL_checknumber(L, -1);
|
||||||
|
}
|
||||||
|
lua_pop(L, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
@ -261,6 +276,12 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
|
||||||
lua_setfield(L, -2, "automatic_face_movement_dir");
|
lua_setfield(L, -2, "automatic_face_movement_dir");
|
||||||
lua_pushboolean(L, prop->backface_culling);
|
lua_pushboolean(L, prop->backface_culling);
|
||||||
lua_setfield(L, -2, "backface_culling");
|
lua_setfield(L, -2, "backface_culling");
|
||||||
|
lua_pushlstring(L, prop->nametag.c_str(), prop->nametag.size());
|
||||||
|
lua_setfield(L, -2, "nametag");
|
||||||
|
push_ARGB8(L, prop->nametag_color);
|
||||||
|
lua_setfield(L, -2, "nametag_color");
|
||||||
|
lua_pushnumber(L, prop->automatic_face_movement_max_rotation_per_sec);
|
||||||
|
lua_setfield(L, -2, "automatic_face_movement_max_rotation_per_sec");
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
|
@ -4,7 +4,7 @@ Copyright (C) 2015 est31 <MTest31@outlook.com>
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
the Free Software Foundation; either version 2.1 of the License, or
|
the Free Software Foundation; either version 3.0 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
|
|
|
@ -4,7 +4,7 @@ Copyright (C) 2015 est31 <MTest31@outlook.com>
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
the Free Software Foundation; either version 2.1 of the License, or
|
the Free Software Foundation; either version 3.0 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
|
|
|
@ -459,6 +459,73 @@ void TouchScreenGUI::ButtonEvent(touch_gui_button_id button,
|
||||||
delete translated;
|
delete translated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TouchScreenGUI::handleReleaseEvent(int evt_id)
|
||||||
|
{
|
||||||
|
touch_gui_button_id button = getButtonID(evt_id);
|
||||||
|
|
||||||
|
/* handle button events */
|
||||||
|
if (button != after_last_element_id) {
|
||||||
|
ButtonEvent(button, evt_id, false);
|
||||||
|
}
|
||||||
|
/* handle hud button events */
|
||||||
|
else if (isReleaseHUDButton(evt_id)) {
|
||||||
|
/* nothing to do here */
|
||||||
|
}
|
||||||
|
/* handle the point used for moving view */
|
||||||
|
else if (evt_id == m_move_id) {
|
||||||
|
m_move_id = -1;
|
||||||
|
|
||||||
|
/* if this pointer issued a mouse event issue symmetric release here */
|
||||||
|
if (m_move_sent_as_mouse_event) {
|
||||||
|
SEvent* translated = new SEvent;
|
||||||
|
memset(translated,0,sizeof(SEvent));
|
||||||
|
translated->EventType = EET_MOUSE_INPUT_EVENT;
|
||||||
|
translated->MouseInput.X = m_move_downlocation.X;
|
||||||
|
translated->MouseInput.Y = m_move_downlocation.Y;
|
||||||
|
translated->MouseInput.Shift = false;
|
||||||
|
translated->MouseInput.Control = false;
|
||||||
|
translated->MouseInput.ButtonStates = 0;
|
||||||
|
translated->MouseInput.Event = EMIE_LMOUSE_LEFT_UP;
|
||||||
|
m_receiver->OnEvent(*translated);
|
||||||
|
delete translated;
|
||||||
|
} else if (m_control_pad_rect.isPointInside(v2s32(m_move_downlocation.X, m_move_downlocation.Y))) {
|
||||||
|
// ignore events inside the control pad not already handled
|
||||||
|
} else if (!m_move_has_really_moved) {
|
||||||
|
SEvent* translated = new SEvent;
|
||||||
|
memset(translated,0,sizeof(SEvent));
|
||||||
|
translated->EventType = EET_MOUSE_INPUT_EVENT;
|
||||||
|
translated->MouseInput.X = m_move_downlocation.X;
|
||||||
|
translated->MouseInput.Y = m_move_downlocation.Y;
|
||||||
|
translated->MouseInput.Shift = false;
|
||||||
|
translated->MouseInput.Control = false;
|
||||||
|
translated->MouseInput.ButtonStates = 0;
|
||||||
|
translated->MouseInput.Event = EMIE_LMOUSE_LEFT_UP;
|
||||||
|
m_receiver->OnEvent(*translated);
|
||||||
|
delete translated;
|
||||||
|
doubleTapDetection();
|
||||||
|
m_shootline = m_device
|
||||||
|
->getSceneManager()
|
||||||
|
->getSceneCollisionManager()
|
||||||
|
->getRayFromScreenCoordinates(
|
||||||
|
v2s32(m_move_downlocation.X,m_move_downlocation.Y));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
infostream
|
||||||
|
<< "TouchScreenGUI::translateEvent released unknown button: "
|
||||||
|
<< evt_id << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (std::vector<id_status>::iterator iter = m_known_ids.begin();
|
||||||
|
iter != m_known_ids.end(); ++iter) {
|
||||||
|
if (iter->id == evt_id) {
|
||||||
|
m_known_ids.erase(iter);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TouchScreenGUI::translateEvent(const SEvent &event)
|
void TouchScreenGUI::translateEvent(const SEvent &event)
|
||||||
{
|
{
|
||||||
if (!m_visible) {
|
if (!m_visible) {
|
||||||
|
@ -513,70 +580,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
|
||||||
}
|
}
|
||||||
else if (event.TouchInput.Event == ETIE_LEFT_UP) {
|
else if (event.TouchInput.Event == ETIE_LEFT_UP) {
|
||||||
verbosestream << "Up event for pointerid: " << event.TouchInput.ID << std::endl;
|
verbosestream << "Up event for pointerid: " << event.TouchInput.ID << std::endl;
|
||||||
|
handleReleaseEvent(event.TouchInput.ID);
|
||||||
touch_gui_button_id button = getButtonID(event.TouchInput.ID);
|
|
||||||
|
|
||||||
/* handle button events */
|
|
||||||
if (button != after_last_element_id) {
|
|
||||||
ButtonEvent(button,event.TouchInput.ID,false);
|
|
||||||
}
|
|
||||||
/* handle hud button events */
|
|
||||||
else if (isReleaseHUDButton(event.TouchInput.ID)) {
|
|
||||||
/* nothing to do here */
|
|
||||||
}
|
|
||||||
/* handle the point used for moving view */
|
|
||||||
else if (event.TouchInput.ID == m_move_id) {
|
|
||||||
m_move_id = -1;
|
|
||||||
|
|
||||||
/* if this pointer issued a mouse event issue symmetric release here */
|
|
||||||
if (m_move_sent_as_mouse_event) {
|
|
||||||
SEvent* translated = new SEvent;
|
|
||||||
memset(translated,0,sizeof(SEvent));
|
|
||||||
translated->EventType = EET_MOUSE_INPUT_EVENT;
|
|
||||||
translated->MouseInput.X = m_move_downlocation.X;
|
|
||||||
translated->MouseInput.Y = m_move_downlocation.Y;
|
|
||||||
translated->MouseInput.Shift = false;
|
|
||||||
translated->MouseInput.Control = false;
|
|
||||||
translated->MouseInput.ButtonStates = 0;
|
|
||||||
translated->MouseInput.Event = EMIE_LMOUSE_LEFT_UP;
|
|
||||||
m_receiver->OnEvent(*translated);
|
|
||||||
delete translated;
|
|
||||||
} else if (m_control_pad_rect.isPointInside(v2s32(m_move_downlocation.X, m_move_downlocation.Y))) {
|
|
||||||
// ignore events inside the control pad not already handled
|
|
||||||
} else if (!m_move_has_really_moved) {
|
|
||||||
SEvent* translated = new SEvent;
|
|
||||||
memset(translated,0,sizeof(SEvent));
|
|
||||||
translated->EventType = EET_MOUSE_INPUT_EVENT;
|
|
||||||
translated->MouseInput.X = m_move_downlocation.X;
|
|
||||||
translated->MouseInput.Y = m_move_downlocation.Y;
|
|
||||||
translated->MouseInput.Shift = false;
|
|
||||||
translated->MouseInput.Control = false;
|
|
||||||
translated->MouseInput.ButtonStates = 0;
|
|
||||||
translated->MouseInput.Event = EMIE_LMOUSE_LEFT_UP;
|
|
||||||
m_receiver->OnEvent(*translated);
|
|
||||||
delete translated;
|
|
||||||
doubleTapDetection();
|
|
||||||
m_shootline = m_device
|
|
||||||
->getSceneManager()
|
|
||||||
->getSceneCollisionManager()
|
|
||||||
->getRayFromScreenCoordinates(
|
|
||||||
v2s32(event.TouchInput.X,event.TouchInput.Y));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
infostream
|
|
||||||
<< "TouchScreenGUI::translateEvent released unknown button: "
|
|
||||||
<< event.TouchInput.ID << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (std::vector<id_status>::iterator iter = m_known_ids.begin();
|
|
||||||
iter != m_known_ids.end(); ++iter) {
|
|
||||||
if (iter->id == event.TouchInput.ID) {
|
|
||||||
m_known_ids.erase(iter);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
assert(event.TouchInput.Event == ETIE_MOVED);
|
assert(event.TouchInput.Event == ETIE_MOVED);
|
||||||
|
@ -826,14 +830,28 @@ void TouchScreenGUI::Toggle(bool visible)
|
||||||
btn->guibutton->setVisible(visible);
|
btn->guibutton->setVisible(visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* clear all active buttons */
|
||||||
|
if (!visible) {
|
||||||
|
while (m_known_ids.size() > 0) {
|
||||||
|
handleReleaseEvent(m_known_ids.begin()->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TouchScreenGUI::Hide()
|
void TouchScreenGUI::Hide()
|
||||||
{
|
{
|
||||||
|
if (!m_visible)
|
||||||
|
return;
|
||||||
|
|
||||||
Toggle(false);
|
Toggle(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TouchScreenGUI::Show()
|
void TouchScreenGUI::Show()
|
||||||
{
|
{
|
||||||
|
if (m_visible)
|
||||||
|
return;
|
||||||
|
|
||||||
Toggle(true);
|
Toggle(true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -159,6 +159,9 @@ private:
|
||||||
/* handle double taps */
|
/* handle double taps */
|
||||||
bool doubleTapDetection();
|
bool doubleTapDetection();
|
||||||
|
|
||||||
|
/* handle release event */
|
||||||
|
void handleReleaseEvent(int evt_id);
|
||||||
|
|
||||||
/* doubleclick detection variables */
|
/* doubleclick detection variables */
|
||||||
struct key_event {
|
struct key_event {
|
||||||
unsigned int down_time;
|
unsigned int down_time;
|
||||||
|
|
|
@ -4,7 +4,7 @@ Copyright (C) 2015 est31 <MTest31@outlook.com>
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
the Free Software Foundation; either version 2.1 of the License, or
|
the Free Software Foundation; either version 3.0 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
|
|
|
@ -4,7 +4,7 @@ Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
the Free Software Foundation; either version 2.1 of the License, or
|
the Free Software Foundation; either version 3.0 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
|
|
Before Width: | Height: | Size: 835 KiB |
After Width: | Height: | Size: 237 KiB |
Before Width: | Height: | Size: 485 B After Width: | Height: | Size: 518 B |
Before Width: | Height: | Size: 146 KiB |
Before Width: | Height: | Size: 474 B After Width: | Height: | Size: 427 B |
Before Width: | Height: | Size: 731 B |
Before Width: | Height: | Size: 731 B |
Before Width: | Height: | Size: 589 B |
Before Width: | Height: | Size: 684 B After Width: | Height: | Size: 671 B |