Compare commits
2 Commits
0.6.1-alph
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| d5959a277f | |||
| 35e42a00e0 |
17
.github/actions/setup-ninja/action.yml
vendored
17
.github/actions/setup-ninja/action.yml
vendored
@@ -1,17 +0,0 @@
|
|||||||
name: Setup Ninja
|
|
||||||
description: Sets up Ninja
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
host:
|
|
||||||
description: 'Host platform: win, mac or linux'
|
|
||||||
required: true
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: Setup
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
curl -L https://github.com/ninja-build/ninja/releases/latest/download/ninja-${{ inputs.host }}.zip -o ninja.zip
|
|
||||||
7z x ninja.zip -o"$GITHUB_WORKSPACE/ninja"
|
|
||||||
echo "$GITHUB_WORKSPACE/ninja" >> $GITHUB_PATH
|
|
||||||
167
.github/workflows/build.yml
vendored
167
.github/workflows/build.yml
vendored
@@ -18,8 +18,8 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-windows:
|
build-windows:
|
||||||
name: Build Windows
|
name: Windows Build
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@@ -27,53 +27,90 @@ jobs:
|
|||||||
- name: Setup caches
|
- name: Setup caches
|
||||||
uses: ./.github/actions/setup-cache
|
uses: ./.github/actions/setup-cache
|
||||||
with:
|
with:
|
||||||
host: linux
|
host: win
|
||||||
target: win
|
target: win
|
||||||
|
|
||||||
- name: Setup Ninja
|
- name: Download xwin
|
||||||
uses: ./.github/actions/setup-ninja
|
uses: robinraju/release-downloader@v1.10
|
||||||
with:
|
with:
|
||||||
host: linux
|
repository: Jake-Shadle/xwin
|
||||||
|
latest: true
|
||||||
- name: Download llvm-mingw
|
fileName: 'xwin-*-x86_64-unknown-linux-musl.tar.gz'
|
||||||
|
tarBall: false
|
||||||
|
zipBall: false
|
||||||
|
out-file-path: "epic-xwin"
|
||||||
|
|
||||||
|
- name: Prepare xwin
|
||||||
run: |
|
run: |
|
||||||
curl -L https://github.com/mstorsjo/llvm-mingw/releases/download/20260311/llvm-mingw-20260311-msvcrt-ubuntu-22.04-x86_64.tar.xz -o llvm-mingw.tar.xz
|
tar -xzf epic-xwin/xwin-*-x86_64-unknown-linux-musl.tar.gz -C epic-xwin
|
||||||
tar -xf llvm-mingw.tar.xz
|
mv epic-xwin/xwin-*-x86_64-unknown-linux-musl/xwin ./xwin
|
||||||
mv llvm-mingw-* llvm-mingw
|
./xwin --arch x86_64 --sdk-version 10.0.22621 --accept-license list
|
||||||
|
|
||||||
|
# this caches '.xwin-cache/**/*' but that's actually only gonna
|
||||||
|
# contain the manifest cuz we only ran `xwin list` so far
|
||||||
|
- name: Setup xwin Cache
|
||||||
|
id: xwin-cache
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: .xwin-cache
|
||||||
|
key: xwin-win-v1-${{ hashFiles('.xwin-cache/**/*') }}
|
||||||
|
|
||||||
|
- name: Download clang-msvc-sdk toolchain
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: 'Nemirtingas/clang-msvc-sdk'
|
||||||
|
path: toolchain
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Install Clang
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y wget lsb-release software-properties-common gnupg
|
||||||
|
|
||||||
|
wget https://apt.llvm.org/llvm.sh
|
||||||
|
chmod +x llvm.sh
|
||||||
|
sudo ./llvm.sh 21 all
|
||||||
|
|
||||||
|
- name: Add LLVM 21 to path
|
||||||
|
run: echo "/usr/lib/llvm-21/bin" >> $GITHUB_PATH
|
||||||
|
|
||||||
|
- name: Verify LLVM
|
||||||
|
run: |
|
||||||
|
which clang-cl
|
||||||
|
which lld-link
|
||||||
|
clang-cl --version
|
||||||
|
lld-link --version
|
||||||
|
|
||||||
- name: Create Build Environment
|
- name: Create Build Environment
|
||||||
# Some projects don't allow in-source building, so create a separate build directory
|
# Some projects don't allow in-source building, so create a separate build directory
|
||||||
# We'll use this as our working directory for all subsequent commands
|
# We'll use this as our working directory for all subsequent commands
|
||||||
run: cmake -E make_directory ${{github.workspace}}/build
|
run: cmake -E make_directory ${{github.workspace}}/build
|
||||||
|
|
||||||
- name: Configure CMake
|
- name: Configure CMake
|
||||||
working-directory: ${{github.workspace}}/build
|
working-directory: ${{github.workspace}}/build
|
||||||
run: |
|
run: cmake $env:GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$env:BUILD_TYPE -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
|
||||||
cmake $GITHUB_WORKSPACE \
|
env:
|
||||||
-G Ninja \
|
SPLAT_DIR: ${{ github.workspace }}/.xwin-cache/splat
|
||||||
-DCMAKE_SYSTEM_NAME=Windows \
|
TOOLCHAIN: ${{ github.workspace }}/toolchain/clang-cl-msvc.cmake
|
||||||
-DCMAKE_C_COMPILER=$GITHUB_WORKSPACE/llvm-mingw/bin/x86_64-w64-mingw32-clang \
|
HOST_ARCH: x86_64
|
||||||
-DCMAKE_CXX_COMPILER=$GITHUB_WORKSPACE/llvm-mingw/bin/x86_64-w64-mingw32-clang++ \
|
|
||||||
-DCMAKE_RC_COMPILER=$GITHUB_WORKSPACE/llvm-mingw/bin/x86_64-w64-mingw32-windres \
|
|
||||||
-DALSOFT_BACKEND_PIPEWIRE=OFF \
|
|
||||||
-DCMAKE_BUILD_TYPE=$BUILD_TYPE
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
working-directory: ${{github.workspace}}/build
|
working-directory: ${{github.workspace}}/build
|
||||||
run: cmake --build . --config $BUILD_TYPE --target MinecraftPE --parallel
|
run: cmake --build . --config $env:BUILD_TYPE --target MinecraftPE --parallel
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: mcpe-windows
|
name: mcpe-windows
|
||||||
path: |
|
path: |
|
||||||
${{github.workspace}}/build/MinecraftPE.exe
|
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/MinecraftPE.exe
|
||||||
${{github.workspace}}/build/libpng16.dll
|
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/glfw3.dll
|
||||||
${{github.workspace}}/build/OpenAL32.dll
|
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/libpng16.dll
|
||||||
${{github.workspace}}/build/libz.dll
|
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/OpenAL32.dll
|
||||||
|
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/z.dll
|
||||||
|
|
||||||
build-linux:
|
build-linux:
|
||||||
name: Build Linux
|
name: Linux Build
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -119,7 +156,7 @@ jobs:
|
|||||||
${{github.workspace}}/build/MinecraftPE-server
|
${{github.workspace}}/build/MinecraftPE-server
|
||||||
|
|
||||||
build-android: # pray to god
|
build-android: # pray to god
|
||||||
name: Build Android (${{ matrix.abi }})
|
name: Build Android APK (${{ matrix.abi }})
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
@@ -214,59 +251,10 @@ jobs:
|
|||||||
name: minecraftpe-apk-${{ matrix.abi }}
|
name: minecraftpe-apk-${{ matrix.abi }}
|
||||||
path: ${{ github.workspace }}/build-apk/minecraftpe-*-debug.apk
|
path: ${{ github.workspace }}/build-apk/minecraftpe-*-debug.apk
|
||||||
|
|
||||||
build-web:
|
|
||||||
name: Build Web
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup caches
|
|
||||||
uses: ./.github/actions/setup-cache
|
|
||||||
with:
|
|
||||||
host: linux
|
|
||||||
target: linux
|
|
||||||
|
|
||||||
- name: Setup Ninja
|
|
||||||
uses: ./.github/actions/setup-ninja
|
|
||||||
with:
|
|
||||||
host: linux
|
|
||||||
|
|
||||||
- name: Setup emsdk
|
|
||||||
uses: mymindstorm/setup-emsdk@v14
|
|
||||||
with:
|
|
||||||
version: 5.0.3
|
|
||||||
actions-cache-folder: 'emsdk-cache'
|
|
||||||
|
|
||||||
- name: Create Build Environment
|
|
||||||
# Some projects don't allow in-source building, so create a separate build directory
|
|
||||||
# We'll use this as our working directory for all subsequent commands
|
|
||||||
run: cmake -E make_directory ${{github.workspace}}/build
|
|
||||||
|
|
||||||
- name: Configure CMake
|
|
||||||
# Use a bash shell so we can use the same syntax for environment variable
|
|
||||||
# access regardless of the host operating system
|
|
||||||
shell: bash
|
|
||||||
working-directory: ${{github.workspace}}/build
|
|
||||||
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -G Ninja -DCMAKE_TOOLCHAIN_FILE="$GITHUB_WORKSPACE/emsdk-cache/emsdk-main/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
working-directory: ${{github.workspace}}/build
|
|
||||||
run: cmake --build . --config $BUILD_TYPE --target MinecraftPE --parallel
|
|
||||||
|
|
||||||
- name: Upload Artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: mcpe-web
|
|
||||||
path: |
|
|
||||||
${{github.workspace}}/build/MinecraftPE.js
|
|
||||||
${{github.workspace}}/build/MinecraftPE.wasm
|
|
||||||
${{github.workspace}}/build/MinecraftPE.data
|
|
||||||
|
|
||||||
publish:
|
publish:
|
||||||
name: Publish
|
name: Publish
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [ build-windows, build-linux, build-android, build-web ]
|
needs: [ build-windows, build-linux, build-android ]
|
||||||
if: github.ref == 'refs/heads/main'
|
if: github.ref == 'refs/heads/main'
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -284,13 +272,13 @@ jobs:
|
|||||||
- name: Zip Windows Artifacts
|
- name: Zip Windows Artifacts
|
||||||
uses: vimtor/action-zip@v1.2
|
uses: vimtor/action-zip@v1.2
|
||||||
with:
|
with:
|
||||||
files: mcpe-windows/MinecraftPE.exe mcpe-windows/libpng16.dll mcpe-windows/OpenAL32.dll mcpe-windows/libz.dll
|
files: data mcpe-windows/MinecraftPE.exe mcpe-windows/glfw3.dll mcpe-windows/libpng16.dll mcpe-windows/OpenAL32.dll mcpe-windows/z.dll
|
||||||
dest: minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip
|
dest: minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip
|
||||||
|
|
||||||
- name: Zip Linux Artifacts
|
- name: Zip Linux Artifacts
|
||||||
uses: vimtor/action-zip@v1.2
|
uses: vimtor/action-zip@v1.2
|
||||||
with:
|
with:
|
||||||
files: mcpe-linux/MinecraftPE
|
files: data mcpe-linux/MinecraftPE
|
||||||
dest: minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
|
dest: minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
|
||||||
|
|
||||||
- name: Zip Linux Server Artifacts
|
- name: Zip Linux Server Artifacts
|
||||||
@@ -311,19 +299,6 @@ jobs:
|
|||||||
files: minecraftpe-apk-armeabi-v7a/minecraftpe-v7a-debug.apk
|
files: minecraftpe-apk-armeabi-v7a/minecraftpe-v7a-debug.apk
|
||||||
dest: minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.zip
|
dest: minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.zip
|
||||||
|
|
||||||
- name: Zip Web Artifact
|
|
||||||
uses: vimtor/action-zip@v1.2
|
|
||||||
with:
|
|
||||||
files: mcpe-web/MinecraftPE.js mcpe-web/MinecraftPE.wasm mcpe-web/MinecraftPE.data misc/web/index.html
|
|
||||||
dest: minecraftpe-${{ steps.ref.outputs.hash }}-web.zip
|
|
||||||
|
|
||||||
- name: Zip Data
|
|
||||||
uses: vimtor/action-zip@v1.2
|
|
||||||
with:
|
|
||||||
files: data
|
|
||||||
recursive: false
|
|
||||||
dest: data.zip
|
|
||||||
|
|
||||||
- name: Update Development Release
|
- name: Update Development Release
|
||||||
uses: andelf/nightly-release@main
|
uses: andelf/nightly-release@main
|
||||||
env:
|
env:
|
||||||
@@ -334,10 +309,8 @@ jobs:
|
|||||||
body: |
|
body: |
|
||||||
MinecraftPE development release for commit ${{ github.sha }}.
|
MinecraftPE development release for commit ${{ github.sha }}.
|
||||||
files: |
|
files: |
|
||||||
./data.zip
|
|
||||||
./minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip
|
./minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip
|
||||||
./minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
|
./minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
|
||||||
./minecraftpe-server-${{ steps.ref.outputs.hash }}.zip
|
./minecraftpe-server-${{ steps.ref.outputs.hash }}.zip
|
||||||
./minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.zip
|
./minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.zip
|
||||||
./minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.zip
|
./minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.zip
|
||||||
./minecraftpe-${{ steps.ref.outputs.hash }}-web.zip
|
|
||||||
@@ -7,6 +7,10 @@ set(CMAKE_CXX_STANDARD 14)
|
|||||||
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
||||||
set(CMAKE_POLICY_VERSION_MINIMUM 3.10)
|
set(CMAKE_POLICY_VERSION_MINIMUM 3.10)
|
||||||
|
|
||||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||||
|
set(CMAKE_CXX_FLAGS "-Wno-c++11-narrowing -Wno-narrowing -Wno-invalid-source-encoding -Wno-reserved-user-defined-literal")
|
||||||
|
endif()
|
||||||
|
|
||||||
include(cmake/EnumOption.cmake)
|
include(cmake/EnumOption.cmake)
|
||||||
|
|
||||||
if(EMSCRIPTEN)
|
if(EMSCRIPTEN)
|
||||||
@@ -22,18 +26,9 @@ find_package(OpenSSL)
|
|||||||
if (${PLATFORM} STREQUAL "Desktop")
|
if (${PLATFORM} STREQUAL "Desktop")
|
||||||
set(PLATFORM_CPP "PLATFORM_DESKTOP")
|
set(PLATFORM_CPP "PLATFORM_DESKTOP")
|
||||||
|
|
||||||
if (MINGW)
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++11-narrowing -Wno-narrowing -Wno-invalid-source-encoding -Wno-reserved-user-defined-literal")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||||
include_directories(misc/windows)
|
set(EXTRA_LIBS ws2_32)
|
||||||
set(EXTRA_LIBS ws2_32 winhttp)
|
|
||||||
elseif(UNIX)
|
elseif(UNIX)
|
||||||
find_library(pthread NAMES pthread)
|
find_library(pthread NAMES pthread)
|
||||||
set(EXTRA_LIBS pthread m)
|
set(EXTRA_LIBS pthread m)
|
||||||
@@ -56,7 +51,6 @@ if(${PLATFORM} MATCHES "Web")
|
|||||||
|
|
||||||
add_library(png INTERFACE IMPORTED)
|
add_library(png INTERFACE IMPORTED)
|
||||||
set_target_properties(png PROPERTIES
|
set_target_properties(png PROPERTIES
|
||||||
INTERFACE_COMPILE_OPTIONS "-sUSE_LIBPNG=1"
|
|
||||||
INTERFACE_LINK_OPTIONS "-sUSE_LIBPNG=1"
|
INTERFACE_LINK_OPTIONS "-sUSE_LIBPNG=1"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -106,9 +100,6 @@ CPMAddPackage(
|
|||||||
"ALSOFT_TESTS OFF"
|
"ALSOFT_TESTS OFF"
|
||||||
"ALSOFT_UTILS OFF"
|
"ALSOFT_UTILS OFF"
|
||||||
"LIBTYPE ${AL_LIBTYPE}"
|
"LIBTYPE ${AL_LIBTYPE}"
|
||||||
"ALSOFT_ENABLE_MODULES OFF"
|
|
||||||
"ALSOFT_STATIC_STDCXX ON"
|
|
||||||
"ALSOFT_STATIC_LIBGCC ON"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# TODO: Clear this paths with *
|
# TODO: Clear this paths with *
|
||||||
@@ -328,11 +319,11 @@ target_include_directories(${PROJECT_NAME} PUBLIC
|
|||||||
if(${PLATFORM} MATCHES "Web")
|
if(${PLATFORM} MATCHES "Web")
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
# uuuh i hate it
|
# uuuh i hate it
|
||||||
set(EM_FLAGS "-pthread -sUSE_PTHREADS=1 -sUSE_LIBPNG=1 -sSHARED_MEMORY=1")
|
set(EM_FLAGS "-pthread -sUSE_PTHREADS=1 -sSHARED_MEMORY=1")
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EM_FLAGS}")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EM_FLAGS}")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EM_FLAGS}")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EM_FLAGS}")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EM_FLAGS} --preload-file ${CMAKE_SOURCE_DIR}/data@/data")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EM_FLAGS} --preload-file ${CMAKE_SOURCE_DIR}/data@/data -sPROXY_TO_PTHREAD")
|
||||||
|
|
||||||
target_compile_options(${PROJECT_NAME} PUBLIC
|
target_compile_options(${PROJECT_NAME} PUBLIC
|
||||||
"-Os"
|
"-Os"
|
||||||
|
|||||||
10
README.md
10
README.md
@@ -113,7 +113,7 @@ cmake --build .
|
|||||||
$HOME/Android/Sdk/cmdline-tools/bin/sdkmanager
|
$HOME/Android/Sdk/cmdline-tools/bin/sdkmanager
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!Note]
|
> [!NOTE]
|
||||||
> `sdkmanager` expects the SDK to include a `cmdline-tools/latest/` folder.
|
> `sdkmanager` expects the SDK to include a `cmdline-tools/latest/` folder.
|
||||||
> If you only have `cmdline-tools/bin`, create the required layout:
|
> If you only have `cmdline-tools/bin`, create the required layout:
|
||||||
>
|
>
|
||||||
@@ -134,7 +134,7 @@ cmake --build .
|
|||||||
sdkmanager --install "platform-tools" "platforms;android-35" "build-tools;35.0.0"
|
sdkmanager --install "platform-tools" "platforms;android-35" "build-tools;35.0.0"
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!Note]
|
> [!NOTE]
|
||||||
> if you want build.sh to always find the SDK,
|
> if you want build.sh to always find the SDK,
|
||||||
> Set ANDROID_SDK_ROOT in your shell config (~/.bashrc / ~/.profile / ~/.config/fish/config.fish), for example:
|
> Set ANDROID_SDK_ROOT in your shell config (~/.bashrc / ~/.profile / ~/.config/fish/config.fish), for example:
|
||||||
>
|
>
|
||||||
@@ -162,14 +162,14 @@ cmake --build .
|
|||||||
|
|
||||||
7. Extract the archive to `/home/username/`, so that the final directory path is `/home/username/android-ndk-r14b/`
|
7. Extract the archive to `/home/username/`, so that the final directory path is `/home/username/android-ndk-r14b/`
|
||||||
|
|
||||||
> [!Warning]
|
> [!WARNING]
|
||||||
> Make sure you don’t end up with a nested folder like `/home/username/android-ndk-r14b/android-ndk-r14b/`.
|
> Make sure you don’t end up with a nested folder like `/home/username/android-ndk-r14b/android-ndk-r14b/`.
|
||||||
|
|
||||||
8. Re run `build.sh`
|
8. Re run `build.sh`
|
||||||
|
|
||||||
## Web
|
## Web
|
||||||
1. Download and install **emsdk**: https://emscripten.org/docs/getting_started/downloads.html
|
1. Download and install **emsdk**: https://emscripten.org/docs/getting_started/downloads.html
|
||||||
> [!Note]
|
> [!NOTE]
|
||||||
> On arch linux you can use AUR:
|
> On arch linux you can use AUR:
|
||||||
> `yay -Sy emsdk`
|
> `yay -Sy emsdk`
|
||||||
|
|
||||||
@@ -179,7 +179,7 @@ cmake --build .
|
|||||||
cmake .. -B . -G Ninja "-DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
|
cmake .. -B . -G Ninja "-DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
|
||||||
cmake --build . --target MinecraftPE
|
cmake --build . --target MinecraftPE
|
||||||
```
|
```
|
||||||
> [!Note]
|
> [!NOTE]
|
||||||
> If you are using VSCode with CMake plugin, you can add Emscripten kit
|
> If you are using VSCode with CMake plugin, you can add Emscripten kit
|
||||||
> 1. Press Ctrl + Shift + P
|
> 1. Press Ctrl + Shift + P
|
||||||
> 2. Type `CMake: Edit User-Local CMake Kits` and hit Enter
|
> 2. Type `CMake: Edit User-Local CMake Kits` and hit Enter
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 28 KiB |
@@ -153,7 +153,7 @@ options.group.tweaks=Tweaks
|
|||||||
options.allowSprint=Allow sprint
|
options.allowSprint=Allow sprint
|
||||||
options.barOnTop=HUD above inventory
|
options.barOnTop=HUD above inventory
|
||||||
options.rpiCursor=Show Raspberry PI cursor
|
options.rpiCursor=Show Raspberry PI cursor
|
||||||
options.autoJump=Auto Jump
|
options.autojump=Auto Jump
|
||||||
options.thirdperson=Third Person
|
options.thirdperson=Third Person
|
||||||
options.servervisible=Server Visible
|
options.servervisible=Server Visible
|
||||||
options.sensitivity=Sensitivity
|
options.sensitivity=Sensitivity
|
||||||
@@ -182,10 +182,9 @@ options.graphics.fast=Fast
|
|||||||
options.guiScale=GUI Scale
|
options.guiScale=GUI Scale
|
||||||
options.guiScale.auto=Auto
|
options.guiScale.auto=Auto
|
||||||
options.guiScale.small=Small
|
options.guiScale.small=Small
|
||||||
options.guiScale.medium=Medium
|
options.guiScale.normal=Normal
|
||||||
options.guiScale.large=Large
|
options.guiScale.large=Large
|
||||||
options.guiScale.larger=Larger
|
options.guiScale.larger=Larger
|
||||||
options.guiScale.largest=Largest
|
|
||||||
options.advancedOpengl=Advanced OpenGL
|
options.advancedOpengl=Advanced OpenGL
|
||||||
options.renderClouds=Clouds
|
options.renderClouds=Clouds
|
||||||
options.farWarning1=A 64 bit Java installation is recommended
|
options.farWarning1=A 64 bit Java installation is recommended
|
||||||
|
|||||||
@@ -1,46 +1,143 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en-us">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="utf-8">
|
||||||
<title>MCPE 0.6.1</title>
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
<style>
|
<title>Emscripten-Generated Code</title>
|
||||||
html, body {
|
<style>
|
||||||
margin: 0;
|
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
|
||||||
padding: 0;
|
textarea.emscripten { font-family: monospace; width: 80%; }
|
||||||
height: 100%;
|
div.emscripten { text-align: center; }
|
||||||
background: black;
|
div.emscripten_border { border: 1px solid black; }
|
||||||
overflow: hidden;
|
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
|
||||||
}
|
canvas.emscripten { border: 0px none; background-color: black; }
|
||||||
|
|
||||||
#canvas {
|
.spinner {
|
||||||
width: 100vw;
|
height: 50px;
|
||||||
height: 100vh;
|
width: 50px;
|
||||||
display: block;
|
margin: 0px auto;
|
||||||
}
|
-webkit-animation: rotation .8s linear infinite;
|
||||||
</style>
|
-moz-animation: rotation .8s linear infinite;
|
||||||
</head>
|
-o-animation: rotation .8s linear infinite;
|
||||||
<body>
|
animation: rotation 0.8s linear infinite;
|
||||||
|
border-left: 10px solid rgb(0,150,240);
|
||||||
|
border-right: 10px solid rgb(0,150,240);
|
||||||
|
border-bottom: 10px solid rgb(0,150,240);
|
||||||
|
border-top: 10px solid rgb(100,0,200);
|
||||||
|
border-radius: 100%;
|
||||||
|
background-color: rgb(200,100,250);
|
||||||
|
}
|
||||||
|
@-webkit-keyframes rotation {
|
||||||
|
from {-webkit-transform: rotate(0deg);}
|
||||||
|
to {-webkit-transform: rotate(360deg);}
|
||||||
|
}
|
||||||
|
@-moz-keyframes rotation {
|
||||||
|
from {-moz-transform: rotate(0deg);}
|
||||||
|
to {-moz-transform: rotate(360deg);}
|
||||||
|
}
|
||||||
|
@-o-keyframes rotation {
|
||||||
|
from {-o-transform: rotate(0deg);}
|
||||||
|
to {-o-transform: rotate(360deg);}
|
||||||
|
}
|
||||||
|
@keyframes rotation {
|
||||||
|
from {transform: rotate(0deg);}
|
||||||
|
to {transform: rotate(360deg);}
|
||||||
|
}
|
||||||
|
|
||||||
<canvas id="canvas"></canvas>
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<hr/>
|
||||||
|
<figure style="overflow:visible;" id="spinner"><div class="spinner"></div><center style="margin-top:0.5em"><strong>emscripten</strong></center></figure>
|
||||||
|
<div class="emscripten" id="status">Downloading...</div>
|
||||||
|
<div class="emscripten">
|
||||||
|
<progress value="0" max="100" id="progress" hidden=1></progress>
|
||||||
|
</div>
|
||||||
|
<div class="emscripten_border">
|
||||||
|
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()" tabindex=-1></canvas>
|
||||||
|
</div>
|
||||||
|
<hr/>
|
||||||
|
<div class="emscripten">
|
||||||
|
<input type="checkbox" id="resize">Resize canvas
|
||||||
|
<input type="checkbox" id="pointerLock" checked>Lock/hide mouse pointer
|
||||||
|
|
||||||
|
<input type="button" value="Fullscreen" onclick="Module.requestFullscreen(document.getElementById('pointerLock').checked,
|
||||||
|
document.getElementById('resize').checked)">
|
||||||
|
</div>
|
||||||
|
|
||||||
<script>
|
<hr/>
|
||||||
var Module = {
|
<textarea class="emscripten" id="output" rows="8"></textarea>
|
||||||
canvas: document.getElementById('canvas'),
|
<hr>
|
||||||
onRuntimeInitialized: function () { resizeCanvas() }
|
<script type='text/javascript'>
|
||||||
};
|
var statusElement = document.getElementById('status');
|
||||||
|
var progressElement = document.getElementById('progress');
|
||||||
|
var spinnerElement = document.getElementById('spinner');
|
||||||
|
var canvasElement = document.getElementById('canvas');
|
||||||
|
var outputElement = document.getElementById('output');
|
||||||
|
if (outputElement) outputElement.value = ''; // clear browser cache
|
||||||
|
|
||||||
function resizeCanvas() {
|
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
|
||||||
const canvas = Module.canvas;
|
// application robust, you may want to override this behavior before shipping!
|
||||||
canvas.width = window.innerWidth;
|
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
|
||||||
canvas.height = window.innerHeight;
|
canvasElement.addEventListener("webglcontextlost", (e) => {
|
||||||
}
|
alert('WebGL context lost. You will need to reload the page.');
|
||||||
|
e.preventDefault();
|
||||||
|
}, false);
|
||||||
|
|
||||||
window.addEventListener('resize', resizeCanvas);
|
function setStatus(text) {
|
||||||
window.addEventListener('onunload', () => {
|
if (!setStatus.last) setStatus.last = { time: Date.now(), text: '' };
|
||||||
FS.syncfs(true, function (err) { console.log('Sync FS failed: ' + err) });
|
if (text === setStatus.last.text) return;
|
||||||
})
|
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
|
||||||
</script>
|
var now = Date.now();
|
||||||
|
if (m && now - setStatus.last.time < 30) return; // if this is a progress update, skip it if too soon
|
||||||
|
setStatus.last.time = now;
|
||||||
|
setStatus.last.text = text;
|
||||||
|
if (m) {
|
||||||
|
text = m[1];
|
||||||
|
progressElement.value = parseInt(m[2])*100;
|
||||||
|
progressElement.max = parseInt(m[4])*100;
|
||||||
|
progressElement.hidden = false;
|
||||||
|
spinnerElement.hidden = false;
|
||||||
|
} else {
|
||||||
|
progressElement.value = null;
|
||||||
|
progressElement.max = null;
|
||||||
|
progressElement.hidden = true;
|
||||||
|
if (!text) spinnerElement.hidden = true;
|
||||||
|
}
|
||||||
|
statusElement.innerHTML = text;
|
||||||
|
}
|
||||||
|
|
||||||
<script src="MinecraftPE.js"></script>
|
var Module = {
|
||||||
</body>
|
print(...args) {
|
||||||
|
// These replacements are necessary if you render to raw HTML
|
||||||
|
//text = text.replace(/&/g, "&");
|
||||||
|
//text = text.replace(/</g, "<");
|
||||||
|
//text = text.replace(/>/g, ">");
|
||||||
|
//text = text.replace('\n', '<br>', 'g');
|
||||||
|
console.log(...args);
|
||||||
|
if (outputElement) {
|
||||||
|
var text = args.join(' ');
|
||||||
|
outputElement.value += text + "\n";
|
||||||
|
outputElement.scrollTop = outputElement.scrollHeight; // focus on bottom
|
||||||
|
}
|
||||||
|
},
|
||||||
|
canvas: canvasElement,
|
||||||
|
setStatus: setStatus,
|
||||||
|
totalDependencies: 0,
|
||||||
|
monitorRunDependencies(left) {
|
||||||
|
this.totalDependencies = Math.max(this.totalDependencies, left);
|
||||||
|
setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
setStatus('Downloading...');
|
||||||
|
window.onerror = () => {
|
||||||
|
setStatus('Exception thrown, see JavaScript console');
|
||||||
|
spinnerElement.style.display = 'none';
|
||||||
|
setStatus = (text) => {
|
||||||
|
if (text) console.error('[post-exception status] ' + text);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<script src="MinecraftPE.js"></script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -168,10 +168,9 @@ options.graphics.fast=Fast
|
|||||||
options.guiScale=GUI Scale
|
options.guiScale=GUI Scale
|
||||||
options.guiScale.auto=Auto
|
options.guiScale.auto=Auto
|
||||||
options.guiScale.small=Small
|
options.guiScale.small=Small
|
||||||
options.guiScale.medium=Medium
|
options.guiScale.normal=Normal
|
||||||
options.guiScale.large=Large
|
options.guiScale.large=Large
|
||||||
options.guiScale.larger=Larger
|
options.guiScale.larger=Larger
|
||||||
options.guiScale.largest=Largest
|
|
||||||
options.advancedOpengl=Advanced OpenGL
|
options.advancedOpengl=Advanced OpenGL
|
||||||
options.renderClouds=Clouds
|
options.renderClouds=Clouds
|
||||||
options.farWarning1=A 64 bit Java installation is recommended
|
options.farWarning1=A 64 bit Java installation is recommended
|
||||||
|
|||||||
@@ -168,10 +168,8 @@ options.graphics.fast=Fast
|
|||||||
options.guiScale=GUI Scale
|
options.guiScale=GUI Scale
|
||||||
options.guiScale.auto=Auto
|
options.guiScale.auto=Auto
|
||||||
options.guiScale.small=Small
|
options.guiScale.small=Small
|
||||||
options.guiScale.medium=Medium
|
options.guiScale.normal=Normal
|
||||||
options.guiScale.large=Large
|
options.guiScale.large=Large
|
||||||
options.guiScale.larger=Larger
|
|
||||||
options.guiScale.largest=Largest
|
|
||||||
options.advancedOpengl=Advanced OpenGL
|
options.advancedOpengl=Advanced OpenGL
|
||||||
options.renderClouds=Clouds
|
options.renderClouds=Clouds
|
||||||
options.farWarning1=A 64 bit Java installation is recommended
|
options.farWarning1=A 64 bit Java installation is recommended
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#if defined(X360__)
|
#if defined(X360__)
|
||||||
#elif defined (_WIN32)
|
#elif defined (_WIN32)
|
||||||
#include <winsock2.h>
|
#include <WinSock2.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <ws2tcpip.h>
|
#include <Ws2tcpip.h>
|
||||||
|
|
||||||
// Must always include Winsock2.h before windows.h
|
// Must always include Winsock2.h before windows.h
|
||||||
// or else:
|
// or else:
|
||||||
|
|||||||
@@ -20,10 +20,6 @@
|
|||||||
#include <shellapi.h>
|
#include <shellapi.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __EMSCRIPTEN__
|
|
||||||
#include <emscripten/html5.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void png_funcReadFile(png_structp pngPtr, png_bytep data, png_size_t length) {
|
static void png_funcReadFile(png_structp pngPtr, png_bytep data, png_size_t length) {
|
||||||
((std::istream*)png_get_io_ptr(pngPtr))->read((char*)data, length);
|
((std::istream*)png_get_io_ptr(pngPtr))->read((char*)data, length);
|
||||||
}
|
}
|
||||||
@@ -106,33 +102,14 @@ public:
|
|||||||
return std::string(mbstr);
|
return std::string(mbstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int getScreenWidth() override {
|
virtual int getScreenWidth() override { return 854; };
|
||||||
#ifdef __EMSCRIPTEN__
|
virtual int getScreenHeight() override { return 480; };
|
||||||
int w, h;
|
|
||||||
emscripten_get_canvas_element_size("canvas", &w, &h);
|
|
||||||
|
|
||||||
return w;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 854;
|
|
||||||
};
|
|
||||||
|
|
||||||
virtual int getScreenHeight() override {
|
|
||||||
#ifdef __EMSCRIPTEN__
|
|
||||||
int w, h;
|
|
||||||
emscripten_get_canvas_element_size("canvas", &w, &h);
|
|
||||||
|
|
||||||
return h;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 480;
|
|
||||||
};
|
|
||||||
|
|
||||||
virtual float getPixelsPerMillimeter() override;
|
virtual float getPixelsPerMillimeter() override;
|
||||||
|
|
||||||
virtual bool supportsTouchscreen() override { return false; /* glfw supports only mouse and keyboard */ }
|
virtual bool supportsTouchscreen() override { return true; }
|
||||||
|
|
||||||
virtual void hideCursor(bool hide) override {
|
virtual void hideCursor(bool hide) {
|
||||||
int isHide = hide ? GLFW_CURSOR_NORMAL : GLFW_CURSOR_HIDDEN;
|
int isHide = hide ? GLFW_CURSOR_NORMAL : GLFW_CURSOR_HIDDEN;
|
||||||
glfwSetInputMode(window, GLFW_CURSOR, isHide);
|
glfwSetInputMode(window, GLFW_CURSOR, isHide);
|
||||||
}
|
}
|
||||||
@@ -143,8 +120,6 @@ public:
|
|||||||
#elif __linux__
|
#elif __linux__
|
||||||
std::string command = "xdg-open " + url;
|
std::string command = "xdg-open " + url;
|
||||||
system(command.c_str());
|
system(command.c_str());
|
||||||
#elif __EMSCRIPTEN__
|
|
||||||
emscripten_run_script(std::string("window.open('" + url + "', '_blank')").c_str());
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#include "Minecraft.h"
|
#include "Minecraft.h"
|
||||||
#include "Options.h"
|
|
||||||
#include "client/Options.h"
|
#include "client/Options.h"
|
||||||
#include "client/player/input/IBuildInput.h"
|
#include "client/player/input/IBuildInput.h"
|
||||||
#include "platform/input/Keyboard.h"
|
#include "platform/input/Keyboard.h"
|
||||||
@@ -641,11 +640,13 @@ void Minecraft::tickInput() {
|
|||||||
|
|
||||||
const MouseAction& e = Mouse::getEvent();
|
const MouseAction& e = Mouse::getEvent();
|
||||||
|
|
||||||
if (!useTouchscreen() && !mouseGrabbed) {
|
#ifdef RPI // If clicked when not having focus, get focus @keyboard
|
||||||
|
if (!mouseGrabbed) {
|
||||||
if (!screen && e.data == MouseAction::DATA_DOWN) {
|
if (!screen && e.data == MouseAction::DATA_DOWN) {
|
||||||
grabMouse();
|
grabMouse();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (allowGuiClicks && e.action == MouseAction::ACTION_LEFT && e.data == MouseAction::DATA_DOWN) {
|
if (allowGuiClicks && e.action == MouseAction::ACTION_LEFT && e.data == MouseAction::DATA_DOWN) {
|
||||||
gui.handleClick(MouseAction::ACTION_LEFT, Mouse::getX(), Mouse::getY());
|
gui.handleClick(MouseAction::ACTION_LEFT, Mouse::getX(), Mouse::getY());
|
||||||
@@ -659,7 +660,9 @@ void Minecraft::tickInput() {
|
|||||||
Inventory* v = player->inventory;
|
Inventory* v = player->inventory;
|
||||||
|
|
||||||
int numSlots = gui.getNumSlots();
|
int numSlots = gui.getNumSlots();
|
||||||
if (!useTouchscreen()) numSlots--;
|
#ifndef PLATFORM_DESKTOP
|
||||||
|
numSlots--;
|
||||||
|
#endif
|
||||||
|
|
||||||
int slot = (v->selected - e.dy + numSlots) % numSlots;
|
int slot = (v->selected - e.dy + numSlots) % numSlots;
|
||||||
v->selectSlot(slot);
|
v->selectSlot(slot);
|
||||||
@@ -688,147 +691,155 @@ void Minecraft::tickInput() {
|
|||||||
if (isPressed) {
|
if (isPressed) {
|
||||||
gui.handleKeyPressed(key);
|
gui.handleKeyPressed(key);
|
||||||
|
|
||||||
if (key >= '0' && key <= '9') {
|
#if defined(WIN32) || defined(RPI) || defined (PLATFORM_DESKTOP)//|| defined(_DEBUG) || defined(DEBUG)
|
||||||
int digit = key - '0';
|
if (key >= '0' && key <= '9') {
|
||||||
int slot = digit - 1;
|
int digit = key - '0';
|
||||||
|
int slot = digit - 1;
|
||||||
|
|
||||||
if (slot >= 0 && slot < gui.getNumSlots())
|
if (slot >= 0 && slot < gui.getNumSlots())
|
||||||
player->inventory->selectSlot(slot);
|
player->inventory->selectSlot(slot);
|
||||||
|
|
||||||
#if defined(WIN32)
|
#if defined(WIN32)
|
||||||
if (digit >= 1 && GetAsyncKeyState(VK_CONTROL) < 0) {
|
if (digit >= 1 && GetAsyncKeyState(VK_CONTROL) < 0) {
|
||||||
// Set adventure settings here!
|
// Set adventure settings here!
|
||||||
AdventureSettingsPacket p(level->adventureSettings);
|
AdventureSettingsPacket p(level->adventureSettings);
|
||||||
p.toggle((AdventureSettingsPacket::Flags)(1 << slot));
|
p.toggle((AdventureSettingsPacket::Flags)(1 << slot));
|
||||||
p.fillIn(level->adventureSettings);
|
p.fillIn(level->adventureSettings);
|
||||||
raknetInstance->send(p);
|
raknetInstance->send(p);
|
||||||
}
|
}
|
||||||
if (digit == 0) {
|
if (digit == 0) {
|
||||||
Pos pos((int)player->x, (int)player->y-1, (int)player->z);
|
Pos pos((int)player->x, (int)player->y-1, (int)player->z);
|
||||||
SetSpawnPositionPacket p(pos);
|
SetSpawnPositionPacket p(pos);
|
||||||
raknetInstance->send(p);
|
raknetInstance->send(p);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (key == Keyboard::KEY_LEFT_CTRL) {
|
#if defined(PLATFORM_DESKTOP)
|
||||||
player->setSprinting(true);
|
if (key == Keyboard::KEY_LEFT_CTRL) {
|
||||||
}
|
player->setSprinting(true);
|
||||||
|
|
||||||
if (key == Keyboard::KEY_E) {
|
|
||||||
screenChooser.setScreen(SCREEN_BLOCKSELECTION);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!screen && key == Keyboard::KEY_T && level) {
|
|
||||||
setScreen(new ConsoleScreen());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == Keyboard::KEY_F3) {
|
|
||||||
options.toggle(OPTIONS_RENDER_DEBUG);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == Keyboard::KEY_F5) {
|
|
||||||
options.toggle(OPTIONS_THIRD_PERSON_VIEW);
|
|
||||||
/*
|
|
||||||
ImprovedNoise noise;
|
|
||||||
for (int i = 0; i < 16; ++i)
|
|
||||||
printf("%d\t%f\n", i, noise.grad2(i, 3, 8));
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!screen && key == Keyboard::KEY_O || key == 250) {
|
|
||||||
releaseMouse();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == Keyboard::KEY_F) {
|
|
||||||
int dst = options.getIntValue(OPTIONS_VIEW_DISTANCE);
|
|
||||||
options.set(OPTIONS_VIEW_DISTANCE, (dst + 1) % 4);
|
|
||||||
}
|
|
||||||
#ifdef CHEATS
|
|
||||||
if (key == Keyboard::KEY_U) {
|
|
||||||
onGraphicsReset();
|
|
||||||
player->heal(100);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key == Keyboard::KEY_B || key == 108) // Toggle the game mode
|
if (key == Keyboard::KEY_E) {
|
||||||
setIsCreativeMode(!isCreativeMode());
|
screenChooser.setScreen(SCREEN_BLOCKSELECTION);
|
||||||
|
}
|
||||||
|
|
||||||
if (key == Keyboard::KEY_P) // Step forward in time
|
if (!screen && key == Keyboard::KEY_T && level) {
|
||||||
level->setTime( level->getTime() + 1000);
|
setScreen(new ConsoleScreen());
|
||||||
|
}
|
||||||
|
|
||||||
if (key == Keyboard::KEY_G) {
|
if (key == Keyboard::KEY_F3) {
|
||||||
setScreen(new ArmorScreen());
|
options.toggle(OPTIONS_RENDER_DEBUG);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key == Keyboard::KEY_F5) {
|
||||||
|
options.toggle(OPTIONS_THIRD_PERSON_VIEW);
|
||||||
/*
|
/*
|
||||||
std::vector<AABB>& boxs = level->getCubes(NULL, AABB(128.1f, 73, 128.1f, 128.9f, 74.9f, 128.9f));
|
ImprovedNoise noise;
|
||||||
LOGI("boxes: %d\n", (int)boxs.size());
|
for (int i = 0; i < 16; ++i)
|
||||||
|
printf("%d\t%f\n", i, noise.grad2(i, 3, 8));
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key == Keyboard::KEY_Y) {
|
if (!screen && key == Keyboard::KEY_O || key == 250) {
|
||||||
textures->reloadAll();
|
releaseMouse();
|
||||||
player->hurtTo(2);
|
|
||||||
}
|
}
|
||||||
if (key == Keyboard::KEY_Z || key == 108) {
|
|
||||||
for (int i = 0; i < 1; ++i) {
|
|
||||||
Mob* mob = NULL;
|
|
||||||
int forceId = 0;//MobTypes::Sheep;
|
|
||||||
|
|
||||||
int types[] = {
|
if (key == Keyboard::KEY_F) {
|
||||||
MobTypes::Sheep,
|
int dst = options.getIntValue(OPTIONS_VIEW_DISTANCE);
|
||||||
MobTypes::Pig,
|
options.set(OPTIONS_VIEW_DISTANCE, (dst + 1) % 4);
|
||||||
MobTypes::Chicken,
|
}
|
||||||
MobTypes::Cow,
|
#ifdef CHEATS
|
||||||
};
|
if (key == Keyboard::KEY_U) {
|
||||||
|
onGraphicsReset();
|
||||||
int mobType = (forceId > 0)? forceId : types[Mth::random(sizeof(types) / sizeof(int))];
|
player->heal(100);
|
||||||
mob = MobFactory::CreateMob(mobType, level);
|
|
||||||
|
|
||||||
//((Animal*)mob)->setAge(-1000);
|
|
||||||
float dx = 4 - 8 * Mth::random() + 4 * Mth::sin(Mth::DEGRAD * player->yRot);
|
|
||||||
float dz = 4 - 8 * Mth::random() + 4 * Mth::cos(Mth::DEGRAD * player->yRot);
|
|
||||||
if (mob && !MobSpawner::addMob(level, mob, player->x + dx, player->y, player->z + dz, Mth::random()*360, 0, true))
|
|
||||||
delete mob;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (key == Keyboard::KEY_X) {
|
if (key == Keyboard::KEY_B || key == 108) // Toggle the game mode
|
||||||
const EntityList& entities = level->getAllEntities();
|
setIsCreativeMode(!isCreativeMode());
|
||||||
for (int i = entities.size()-1; i >= 0; --i) {
|
|
||||||
Entity* e = entities[i];
|
if (key == Keyboard::KEY_P) // Step forward in time
|
||||||
if (!e->isPlayer())
|
level->setTime( level->getTime() + 1000);
|
||||||
level->removeEntity(e);
|
|
||||||
|
if (key == Keyboard::KEY_G) {
|
||||||
|
setScreen(new ArmorScreen());
|
||||||
|
/*
|
||||||
|
std::vector<AABB>& boxs = level->getCubes(NULL, AABB(128.1f, 73, 128.1f, 128.9f, 74.9f, 128.9f));
|
||||||
|
LOGI("boxes: %d\n", (int)boxs.size());
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (key == Keyboard::KEY_C /*|| key == 4*/) {
|
if (key == Keyboard::KEY_Y) {
|
||||||
player->inventory->clearInventoryWithDefault();
|
textures->reloadAll();
|
||||||
// @todo: Add saving here for benchmarking
|
player->hurtTo(2);
|
||||||
}
|
|
||||||
if (key == Keyboard::KEY_H) {
|
|
||||||
setScreen( new PrerenderTilesScreen() );
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == Keyboard::KEY_O) {
|
|
||||||
for (int i = Inventory::MAX_SELECTION_SIZE; i < player->inventory->getContainerSize(); ++i)
|
|
||||||
if (player->inventory->getItem(i))
|
|
||||||
player->inventory->dropSlot(i, false);
|
|
||||||
}
|
|
||||||
if (key == Keyboard::KEY_M) {
|
|
||||||
Difficulty difficulty = (Difficulty)options.getIntValue(OPTIONS_DIFFICULTY);
|
|
||||||
options.set(OPTIONS_DIFFICULTY, (difficulty == Difficulty::PEACEFUL)?
|
|
||||||
Difficulty::NORMAL : Difficulty::PEACEFUL);
|
|
||||||
//setIsCreativeMode( !isCreativeMode() );
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
|
||||||
if (key >= '0' && key <= '9') {
|
|
||||||
_perfRenderer->debugFpsMeterKeyPress(key - '0');
|
|
||||||
}
|
}
|
||||||
}
|
if (key == Keyboard::KEY_Z || key == 108) {
|
||||||
|
for (int i = 0; i < 1; ++i) {
|
||||||
|
Mob* mob = NULL;
|
||||||
|
int forceId = 0;//MobTypes::Sheep;
|
||||||
|
|
||||||
|
int types[] = {
|
||||||
|
MobTypes::Sheep,
|
||||||
|
MobTypes::Pig,
|
||||||
|
MobTypes::Chicken,
|
||||||
|
MobTypes::Cow,
|
||||||
|
};
|
||||||
|
|
||||||
|
int mobType = (forceId > 0)? forceId : types[Mth::random(sizeof(types) / sizeof(int))];
|
||||||
|
mob = MobFactory::CreateMob(mobType, level);
|
||||||
|
|
||||||
|
//((Animal*)mob)->setAge(-1000);
|
||||||
|
float dx = 4 - 8 * Mth::random() + 4 * Mth::sin(Mth::DEGRAD * player->yRot);
|
||||||
|
float dz = 4 - 8 * Mth::random() + 4 * Mth::cos(Mth::DEGRAD * player->yRot);
|
||||||
|
if (mob && !MobSpawner::addMob(level, mob, player->x + dx, player->y, player->z + dz, Mth::random()*360, 0, true))
|
||||||
|
delete mob;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key == Keyboard::KEY_X) {
|
||||||
|
const EntityList& entities = level->getAllEntities();
|
||||||
|
for (int i = entities.size()-1; i >= 0; --i) {
|
||||||
|
Entity* e = entities[i];
|
||||||
|
if (!e->isPlayer())
|
||||||
|
level->removeEntity(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key == Keyboard::KEY_C /*|| key == 4*/) {
|
||||||
|
player->inventory->clearInventoryWithDefault();
|
||||||
|
// @todo: Add saving here for benchmarking
|
||||||
|
}
|
||||||
|
if (key == Keyboard::KEY_H) {
|
||||||
|
setScreen( new PrerenderTilesScreen() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key == Keyboard::KEY_O) {
|
||||||
|
for (int i = Inventory::MAX_SELECTION_SIZE; i < player->inventory->getContainerSize(); ++i)
|
||||||
|
if (player->inventory->getItem(i))
|
||||||
|
player->inventory->dropSlot(i, false);
|
||||||
|
}
|
||||||
|
if (key == Keyboard::KEY_M) {
|
||||||
|
Difficulty difficulty = (Difficulty)options.getIntValue(OPTIONS_DIFFICULTY);
|
||||||
|
options.set(OPTIONS_DIFFICULTY, (difficulty == Difficulty::PEACEFUL)?
|
||||||
|
Difficulty::NORMAL : Difficulty::PEACEFUL);
|
||||||
|
//setIsCreativeMode( !isCreativeMode() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||||
|
if (key >= '0' && key <= '9') {
|
||||||
|
_perfRenderer->debugFpsMeterKeyPress(key - '0');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (key == Keyboard::KEY_ESCAPE)
|
#ifndef PLATFORM_DESKTOP
|
||||||
pauseGame(false);
|
if (key == 82)
|
||||||
|
pauseGame(false);
|
||||||
|
#else
|
||||||
|
if (key == Keyboard::KEY_ESCAPE)
|
||||||
|
pauseGame(false);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef OPENGL_ES
|
#ifndef OPENGL_ES
|
||||||
if (key == Keyboard::KEY_P) {
|
if (key == Keyboard::KEY_P) {
|
||||||
@@ -855,18 +866,11 @@ void Minecraft::tickInput() {
|
|||||||
gameMode->stopDestroyBlock();
|
gameMode->stopDestroyBlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) {
|
|
||||||
gameMode->releaseUsingItem(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (useTouchscreen()) {
|
if (useTouchscreen()) {
|
||||||
// Touch: gesture recognizer classifies the action type (turn/destroy/build)
|
// Touch: gesture recognizer classifies the action type (turn/destroy/build)
|
||||||
BuildActionIntention bai;
|
BuildActionIntention bai;
|
||||||
|
|
||||||
if (inputHolder && inputHolder->getBuildInput()->tickBuild(player, &bai)) {
|
if (inputHolder && inputHolder->getBuildInput()->tickBuild(player, &bai)) {
|
||||||
handleBuildAction(&bai);
|
handleBuildAction(&bai);
|
||||||
} else {
|
|
||||||
gameMode->stopDestroyBlock();
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Desktop: left mouse = destroy/attack
|
// Desktop: left mouse = destroy/attack
|
||||||
@@ -1108,7 +1112,7 @@ bool Minecraft::useTouchscreen() {
|
|||||||
#ifdef RPI
|
#ifdef RPI
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen;
|
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) || !_supportsNonTouchscreen;
|
||||||
}
|
}
|
||||||
bool Minecraft::supportNonTouchScreen() {
|
bool Minecraft::supportNonTouchScreen() {
|
||||||
return _supportsNonTouchscreen;
|
return _supportsNonTouchscreen;
|
||||||
@@ -1156,13 +1160,12 @@ void Minecraft::setSize(int w, int h) {
|
|||||||
|
|
||||||
// determine gui scale, optionally overriding auto
|
// determine gui scale, optionally overriding auto
|
||||||
if (guiScale != 0) {
|
if (guiScale != 0) {
|
||||||
// manual selection: 1->small, 2->medium, 3->large, 4->larger, 5->largest
|
// manual selection: 1->small, 2->normal, 3->large, 4->larger
|
||||||
switch (guiScale) {
|
switch (guiScale) {
|
||||||
case 1: Gui::GuiScale = 2.0f; break;
|
case 1: Gui::GuiScale = 2.0f; break;
|
||||||
case 2: Gui::GuiScale = 3.0f; break;
|
case 2: Gui::GuiScale = 3.0f; break;
|
||||||
case 3: Gui::GuiScale = 4.0f; break;
|
case 3: Gui::GuiScale = 4.0f; break;
|
||||||
case 4: Gui::GuiScale = 5.0f; break;
|
case 4: Gui::GuiScale = 5.0f; break; // bigger than large
|
||||||
case 5: Gui::GuiScale = 6.0f; break;
|
|
||||||
default: Gui::GuiScale = 1.0f; break; // auto
|
default: Gui::GuiScale = 1.0f; break; // auto
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1224,6 +1227,7 @@ void Minecraft::reloadOptions() {
|
|||||||
if ((wasTouchscreen != useTouchscreen()) || (inputHolder == 0))
|
if ((wasTouchscreen != useTouchscreen()) || (inputHolder == 0))
|
||||||
_reloadInput();
|
_reloadInput();
|
||||||
|
|
||||||
|
// TODO:
|
||||||
// user->name = options.username;
|
// user->name = options.username;
|
||||||
|
|
||||||
LOGI("Reloading-options\n");
|
LOGI("Reloading-options\n");
|
||||||
@@ -1237,7 +1241,11 @@ void Minecraft::_reloadInput() {
|
|||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
delete inputHolder;
|
delete inputHolder;
|
||||||
|
|
||||||
|
#ifdef PLATFORM_DESKTOP
|
||||||
|
const bool useTouchHolder = false;
|
||||||
|
#else
|
||||||
const bool useTouchHolder = useTouchscreen();
|
const bool useTouchHolder = useTouchscreen();
|
||||||
|
#endif
|
||||||
if (useTouchHolder) {
|
if (useTouchHolder) {
|
||||||
inputHolder = new TouchInputHolder(this, &options);
|
inputHolder = new TouchInputHolder(this, &options);
|
||||||
} else {
|
} else {
|
||||||
@@ -1562,8 +1570,6 @@ void Minecraft::optionUpdated(OptionId option, bool value ) {
|
|||||||
if(netCallback != NULL && option == OPTIONS_SERVER_VISIBLE) {
|
if(netCallback != NULL && option == OPTIONS_SERVER_VISIBLE) {
|
||||||
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) netCallback;
|
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) netCallback;
|
||||||
ss->allowIncomingConnections(value);
|
ss->allowIncomingConnections(value);
|
||||||
} else if (option == OPTIONS_USE_TOUCHSCREEN) {
|
|
||||||
_reloadInput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -109,8 +109,6 @@ public:
|
|||||||
|
|
||||||
bool isLevelGenerated();
|
bool isLevelGenerated();
|
||||||
|
|
||||||
void handleMouseDown(int button, bool down);
|
|
||||||
|
|
||||||
void audioEngineOn();
|
void audioEngineOn();
|
||||||
void audioEngineOff();
|
void audioEngineOff();
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#include <SDL/SDL.h>
|
#include <SDL/SDL.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
#ifdef PLATFORM_DESKTOP
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ void MouseHandler::grab() {
|
|||||||
SDL_ShowCursor(0);
|
SDL_ShowCursor(0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
#ifdef PLATFORM_DESKTOP
|
||||||
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -46,7 +46,7 @@ void MouseHandler::release() {
|
|||||||
SDL_ShowCursor(1);
|
SDL_ShowCursor(1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
#ifdef PLATFORM_DESKTOP
|
||||||
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,10 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <platform/log.h>
|
#include <platform/log.h>
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if !defined(_WIN32)
|
||||||
#include <direct.h>
|
#include <sys/stat.h>
|
||||||
#else
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <unistd.h>
|
||||||
#include <sys/types.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
OptionsFile::OptionsFile() {
|
OptionsFile::OptionsFile() {
|
||||||
@@ -16,8 +15,6 @@ OptionsFile::OptionsFile() {
|
|||||||
settingsPath = "./Documents/options.txt";
|
settingsPath = "./Documents/options.txt";
|
||||||
#elif defined(ANDROID)
|
#elif defined(ANDROID)
|
||||||
settingsPath = "options.txt";
|
settingsPath = "options.txt";
|
||||||
#elif defined(__EMSCRIPTEN__)
|
|
||||||
settingsPath = "/games/com.mojang/options.txt";
|
|
||||||
#else
|
#else
|
||||||
settingsPath = "options.txt";
|
settingsPath = "options.txt";
|
||||||
#endif
|
#endif
|
||||||
@@ -30,44 +27,39 @@ void OptionsFile::setOptionsPath(const std::string& path) {
|
|||||||
std::string OptionsFile::getOptionsPath() const {
|
std::string OptionsFile::getOptionsPath() const {
|
||||||
return settingsPath;
|
return settingsPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsFile::save(const StringVector& settings) {
|
void OptionsFile::save(const StringVector& settings) {
|
||||||
FILE* pFile = fopen(settingsPath.c_str(), "w");
|
FILE* pFile = fopen(settingsPath.c_str(), "w");
|
||||||
|
if(pFile != NULL) {
|
||||||
|
for(StringVector::const_iterator it = settings.begin(); it != settings.end(); ++it) {
|
||||||
|
fprintf(pFile, "%s\n", it->c_str());
|
||||||
|
}
|
||||||
|
fclose(pFile);
|
||||||
|
} else {
|
||||||
|
if (errno != ENOENT)
|
||||||
|
LOGI("OptionsFile::save failed to open '%s' for writing: %s", settingsPath.c_str(), strerror(errno));
|
||||||
|
|
||||||
if (!pFile && errno == ENOENT) {
|
// Ensure parent directory exists for safekeeping if path contains directories
|
||||||
std::string dir = settingsPath;
|
std::string dir = settingsPath;
|
||||||
size_t fpos = dir.find_last_of("/\\");
|
size_t fpos = dir.find_last_of("/\\");
|
||||||
if (fpos != std::string::npos) {
|
if (fpos != std::string::npos) {
|
||||||
dir.resize(fpos);
|
dir.resize(fpos);
|
||||||
|
struct stat st;
|
||||||
std::string toCreate;
|
if (stat(dir.c_str(), &st) != 0) {
|
||||||
for (size_t i = 0; i <= dir.size(); ++i) {
|
// attempt recursive mkdir
|
||||||
if (i == dir.size() || dir[i] == '/' || dir[i] == '\\') {
|
std::string toCreate;
|
||||||
if (!toCreate.empty()) {
|
for (size_t i = 0; i <= dir.size(); ++i) {
|
||||||
#if defined(_WIN32)
|
if (i == dir.size() || dir[i] == '/' || dir[i] == '\\') {
|
||||||
_mkdir(toCreate.c_str());
|
if (!toCreate.empty()) {
|
||||||
#else
|
mkdir(toCreate.c_str(), 0755);
|
||||||
mkdir(toCreate.c_str(), 0755);
|
}
|
||||||
#endif
|
}
|
||||||
}
|
if (i < dir.size())
|
||||||
}
|
toCreate.push_back(dir[i]);
|
||||||
if (i < dir.size())
|
}
|
||||||
toCreate.push_back(dir[i]);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pFile = fopen(settingsPath.c_str(), "w");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pFile) {
|
|
||||||
LOGI("OptionsFile::save failed: %s", strerror(errno));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const auto& s : settings) {
|
|
||||||
fprintf(pFile, "%s\n", s.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(pFile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ void Font::draw( const std::string& str, float x, float y, int color, bool darke
|
|||||||
glPushMatrix2();
|
glPushMatrix2();
|
||||||
glTranslatef2((GLfloat)x, (GLfloat)y, 0.0f);
|
glTranslatef2((GLfloat)x, (GLfloat)y, 0.0f);
|
||||||
for (unsigned int i = 0; i < str.length(); i++) {
|
for (unsigned int i = 0; i < str.length(); i++) {
|
||||||
while (str.length() > i + 1 && str[i] == '\xa7') {
|
while (str.length() > i + 1 && str[i] == '§') {
|
||||||
int cc = hex.find((char)tolower(str[i + 1]));
|
int cc = hex.find((char)tolower(str[i + 1]));
|
||||||
if (cc < 0 || cc > 15) cc = 15;
|
if (cc < 0 || cc > 15) cc = 15;
|
||||||
lists[index++] = listPos + 256 + cc + (darken ? 16 : 0);
|
lists[index++] = listPos + 256 + cc + (darken ? 16 : 0);
|
||||||
@@ -235,7 +235,7 @@ int Font::width( const std::string& str )
|
|||||||
int len = 0;
|
int len = 0;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < str.length(); i++) {
|
for (unsigned int i = 0; i < str.length(); i++) {
|
||||||
if (str[i] == '\xa7') {
|
if (str[i] == '§') {
|
||||||
i++;
|
i++;
|
||||||
} else {
|
} else {
|
||||||
//int ch = SharedConstants.acceptableLetters.indexOf(str.charAt(i));
|
//int ch = SharedConstants.acceptableLetters.indexOf(str.charAt(i));
|
||||||
@@ -274,7 +274,7 @@ std::string Font::sanitize( const std::string& str )
|
|||||||
int j = 0;
|
int j = 0;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < str.length(); i++) {
|
for (unsigned int i = 0; i < str.length(); i++) {
|
||||||
if (str[i] == '\xa7') {
|
if (str[i] == '§') {
|
||||||
i++;
|
i++;
|
||||||
//} else if (SharedConstants.acceptableLetters.indexOf(str.charAt(i)) >= 0) {
|
//} else if (SharedConstants.acceptableLetters.indexOf(str.charAt(i)) >= 0) {
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -51,8 +51,7 @@ Gui::Gui(Minecraft* minecraft)
|
|||||||
_currentDropTicks(-1),
|
_currentDropTicks(-1),
|
||||||
_currentDropSlot(-1),
|
_currentDropSlot(-1),
|
||||||
MAX_MESSAGE_WIDTH(240),
|
MAX_MESSAGE_WIDTH(240),
|
||||||
itemNameOverlayTime(2),
|
itemNameOverlayTime(2)
|
||||||
_openInventorySlot(minecraft->useTouchscreen())
|
|
||||||
{
|
{
|
||||||
glGenBuffers2(1, &_inventoryRc.vboId);
|
glGenBuffers2(1, &_inventoryRc.vboId);
|
||||||
glGenBuffers2(1, &rcFeedbackInner.vboId);
|
glGenBuffers2(1, &rcFeedbackInner.vboId);
|
||||||
@@ -76,8 +75,11 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
|||||||
//minecraft->gameRenderer->setupGuiScreen();
|
//minecraft->gameRenderer->setupGuiScreen();
|
||||||
Font* font = minecraft->font;
|
Font* font = minecraft->font;
|
||||||
|
|
||||||
|
#ifdef PLATFORM_DESKTOP
|
||||||
|
const bool isTouchInterface = false;
|
||||||
|
#else
|
||||||
const bool isTouchInterface = minecraft->useTouchscreen();
|
const bool isTouchInterface = minecraft->useTouchscreen();
|
||||||
|
#endif
|
||||||
const int screenWidth = (int)(minecraft->width * InvGuiScale);
|
const int screenWidth = (int)(minecraft->width * InvGuiScale);
|
||||||
const int screenHeight = (int)(minecraft->height * InvGuiScale);
|
const int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||||
blitOffset = -90;
|
blitOffset = -90;
|
||||||
@@ -204,10 +206,16 @@ void Gui::handleClick(int button, int x, int y) {
|
|||||||
if (button != MouseAction::ACTION_LEFT) return;
|
if (button != MouseAction::ACTION_LEFT) return;
|
||||||
|
|
||||||
int slot = getSlotIdAt(x, y);
|
int slot = getSlotIdAt(x, y);
|
||||||
if (slot != -1) {
|
if (slot != -1)
|
||||||
if (_openInventorySlot && slot == (getNumSlots()-1)) {
|
{
|
||||||
|
#ifndef PLATFORM_DESKTOP
|
||||||
|
if (slot == (getNumSlots()-1))
|
||||||
|
{
|
||||||
minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION);
|
minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
minecraft->player->inventory->selectSlot(slot);
|
minecraft->player->inventory->selectSlot(slot);
|
||||||
itemNameOverlayTime = 0;
|
itemNameOverlayTime = 0;
|
||||||
}
|
}
|
||||||
@@ -341,7 +349,7 @@ void Gui::setNowPlaying(const std::string& string) {
|
|||||||
void Gui::displayClientMessage(const std::string& messageId) {
|
void Gui::displayClientMessage(const std::string& messageId) {
|
||||||
//Language language = Language.getInstance();
|
//Language language = Language.getInstance();
|
||||||
//std::string languageString = language.getElement(messageId);
|
//std::string languageString = language.getElement(messageId);
|
||||||
addMessage(messageId);
|
addMessage(std::string("Client message: ") + messageId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gui::renderVignette(float br, int w, int h) {
|
void Gui::renderVignette(float br, int w, int h) {
|
||||||
@@ -529,7 +537,11 @@ void Gui::tickItemDrop()
|
|||||||
static bool isCurrentlyActive = false;
|
static bool isCurrentlyActive = false;
|
||||||
isCurrentlyActive = false;
|
isCurrentlyActive = false;
|
||||||
|
|
||||||
int slots = getNumSlots() - _openInventorySlot;
|
int slots = getNumSlots();
|
||||||
|
|
||||||
|
#ifndef PLATFORM_DESKTOP
|
||||||
|
slots--;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (Mouse::isButtonDown(MouseAction::ACTION_LEFT)) {
|
if (Mouse::isButtonDown(MouseAction::ACTION_LEFT)) {
|
||||||
int slot = getSlotIdAt(Mouse::getX(), Mouse::getY());
|
int slot = getSlotIdAt(Mouse::getX(), Mouse::getY());
|
||||||
@@ -1071,7 +1083,13 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
|
|||||||
|
|
||||||
float x = baseItemX;
|
float x = baseItemX;
|
||||||
|
|
||||||
int slots = getNumSlots() - _openInventorySlot;
|
int slots = getNumSlots();
|
||||||
|
|
||||||
|
// TODO: if using touchscreen
|
||||||
|
|
||||||
|
#ifndef PLATFORM_DESKTOP
|
||||||
|
slots--;
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < slots; i++) {
|
for (int i = 0; i < slots; i++) {
|
||||||
renderSlot(i, (int)x, ySlot, a);
|
renderSlot(i, (int)x, ySlot, a);
|
||||||
@@ -1079,10 +1097,9 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
|
|||||||
}
|
}
|
||||||
_inventoryNeedsUpdate = false;
|
_inventoryNeedsUpdate = false;
|
||||||
|
|
||||||
|
#ifndef PLATFORM_DESKTOP
|
||||||
if (_openInventorySlot) {
|
blit(screenWidth / 2 + 10 * getNumSlots() - 20 + 4, ySlot + 6, 242, 252, 14, 4, 14, 4);
|
||||||
blit(screenWidth / 2 + 10 * getNumSlots() - 20 + 4, ySlot + 6, 242, 252, 14, 4, 14, 4);
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
minecraft->textures->loadAndBindTexture("gui/gui_blocks.png");
|
minecraft->textures->loadAndBindTexture("gui/gui_blocks.png");
|
||||||
t.endOverrideAndDraw();
|
t.endOverrideAndDraw();
|
||||||
|
|||||||
@@ -127,8 +127,6 @@ private:
|
|||||||
static const float DropTicks;
|
static const float DropTicks;
|
||||||
float _currentDropTicks;
|
float _currentDropTicks;
|
||||||
int _currentDropSlot;
|
int _currentDropSlot;
|
||||||
|
|
||||||
bool _openInventorySlot;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*NET_MINECRAFT_CLIENT_GUI__Gui_H__*/
|
#endif /*NET_MINECRAFT_CLIENT_GUI__Gui_H__*/
|
||||||
|
|||||||
@@ -177,11 +177,9 @@ void Screen::keyPressed( int eventKey )
|
|||||||
textbox->keyPressed(minecraft, eventKey);
|
textbox->keyPressed(minecraft, eventKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TABBING
|
|
||||||
if (minecraft->useTouchscreen())
|
if (minecraft->useTouchscreen())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
// "Tabbing" the buttons (walking with keys)
|
// "Tabbing" the buttons (walking with keys)
|
||||||
const int tabButtonCount = tabButtons.size();
|
const int tabButtonCount = tabButtons.size();
|
||||||
if (!tabButtonCount)
|
if (!tabButtonCount)
|
||||||
@@ -201,7 +199,6 @@ void Screen::keyPressed( int eventKey )
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateTabButtonSelection();
|
updateTabButtonSelection();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Screen::charPressed(char inputChar) {
|
void Screen::charPressed(char inputChar) {
|
||||||
@@ -212,13 +209,11 @@ void Screen::charPressed(char inputChar) {
|
|||||||
|
|
||||||
void Screen::updateTabButtonSelection()
|
void Screen::updateTabButtonSelection()
|
||||||
{
|
{
|
||||||
#ifdef TABBING
|
|
||||||
if (minecraft->useTouchscreen())
|
if (minecraft->useTouchscreen())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < tabButtons.size(); ++i)
|
for (unsigned int i = 0; i < tabButtons.size(); ++i)
|
||||||
tabButtons[i]->selected = (i == tabButtonIndex);
|
tabButtons[i]->selected = (i == tabButtonIndex);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Screen::mouseClicked( int x, int y, int buttonNum )
|
void Screen::mouseClicked( int x, int y, int buttonNum )
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ void Button::renderBg( Minecraft* minecraft, int xm, int ym )
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Button::hovered(Minecraft* minecraft, int xm , int ym) {
|
bool Button::hovered(Minecraft* minecraft, int xm , int ym) {
|
||||||
return minecraft->useTouchscreen()? (_currentlyDown && isInside(xm, ym)) : isInside(xm, ym);
|
return minecraft->useTouchscreen()? (_currentlyDown && isInside(xm, ym)) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Button::isInside( int xm, int ym ) {
|
bool Button::isInside( int xm, int ym ) {
|
||||||
@@ -143,8 +143,7 @@ TButton::TButton( int id, int x, int y, int w, int h, const std::string& msg )
|
|||||||
|
|
||||||
void TButton::renderBg( Minecraft* minecraft, int xm, int ym )
|
void TButton::renderBg( Minecraft* minecraft, int xm, int ym )
|
||||||
{
|
{
|
||||||
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
|
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
|
||||||
// bool hovered = active && (_currentlyDown && isInside(xm, ym));
|
|
||||||
|
|
||||||
minecraft->textures->loadAndBindTexture("gui/touchgui.png");
|
minecraft->textures->loadAndBindTexture("gui/touchgui.png");
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ void ImageButton::render(Minecraft* minecraft, int xm, int ym) {
|
|||||||
//minecraft->textures->loadAndBindTexture("gui/gui.png");
|
//minecraft->textures->loadAndBindTexture("gui/gui.png");
|
||||||
glColor4f2(1, 1, 1, 1);
|
glColor4f2(1, 1, 1, 1);
|
||||||
|
|
||||||
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
|
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
|
||||||
bool IsSecondImage = isSecondImage(hovered);
|
bool IsSecondImage = isSecondImage(hovered);
|
||||||
|
|
||||||
//printf("ButtonId: %d - Hovered? %d (cause: %d, %d, %d, %d, <> %d, %d)\n", id, hovered, x, y, x+w, y+h, xm, ym);
|
//printf("ButtonId: %d - Hovered? %d (cause: %d, %d, %d, %d, <> %d, %d)\n", id, hovered, x, y, x+w, y+h, xm, ym);
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ void LargeImageButton::render(Minecraft* minecraft, int xm, int ym) {
|
|||||||
|
|
||||||
//minecraft->textures->loadAndBindTexture("gui/gui.png");
|
//minecraft->textures->loadAndBindTexture("gui/gui.png");
|
||||||
glColor4f2(1, 1, 1, 1);
|
glColor4f2(1, 1, 1, 1);
|
||||||
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
|
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
|
||||||
|
|
||||||
//printf("ButtonId: %d - Hovered? %d (cause: %d, %d, %d, %d, <> %d, %d)\n", id, hovered, x, y, x+w, y+h, xm, ym);
|
//printf("ButtonId: %d - Hovered? %d (cause: %d, %d, %d, %d, <> %d, %d)\n", id, hovered, x, y, x+w, y+h, xm, ym);
|
||||||
//int yImage = getYImage(hovered || selected);
|
//int yImage = getYImage(hovered || selected);
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ void OptionsGroup::createToggle(OptionId optId, Minecraft* minecraft ) {
|
|||||||
|
|
||||||
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
||||||
|
|
||||||
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
|
OptionsItem* item = new OptionsItem(itemLabel, element);
|
||||||
|
|
||||||
addChild(item);
|
addChild(item);
|
||||||
setupPositions();
|
setupPositions();
|
||||||
@@ -77,7 +77,7 @@ void OptionsGroup::createProgressSlider(OptionId optId, Minecraft* minecraft ) {
|
|||||||
element->height = 20;
|
element->height = 20;
|
||||||
|
|
||||||
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
||||||
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
|
OptionsItem* item = new OptionsItem(itemLabel, element);
|
||||||
addChild(item);
|
addChild(item);
|
||||||
setupPositions();
|
setupPositions();
|
||||||
}
|
}
|
||||||
@@ -87,7 +87,7 @@ void OptionsGroup::createStepSlider(OptionId optId, Minecraft* minecraft ) {
|
|||||||
element->width = 100;
|
element->width = 100;
|
||||||
element->height = 20;
|
element->height = 20;
|
||||||
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
||||||
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
|
OptionsItem* item = new OptionsItem(itemLabel, element);
|
||||||
addChild(item);
|
addChild(item);
|
||||||
setupPositions();
|
setupPositions();
|
||||||
}
|
}
|
||||||
@@ -98,7 +98,7 @@ void OptionsGroup::createTextbox(OptionId optId, Minecraft* minecraft) {
|
|||||||
element->height = 20;
|
element->height = 20;
|
||||||
|
|
||||||
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
||||||
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
|
OptionsItem* item = new OptionsItem(itemLabel, element);
|
||||||
addChild(item);
|
addChild(item);
|
||||||
setupPositions();
|
setupPositions();
|
||||||
}
|
}
|
||||||
@@ -109,7 +109,7 @@ void OptionsGroup::createKey(OptionId optId, Minecraft* minecraft) {
|
|||||||
element->height = 20;
|
element->height = 20;
|
||||||
|
|
||||||
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
||||||
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
|
OptionsItem* item = new OptionsItem(itemLabel, element);
|
||||||
addChild(item);
|
addChild(item);
|
||||||
setupPositions();
|
setupPositions();
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,9 @@
|
|||||||
#include "OptionsItem.h"
|
#include "OptionsItem.h"
|
||||||
#include "../../Minecraft.h"
|
#include "../../Minecraft.h"
|
||||||
#include "../../../locale/I18n.h"
|
|
||||||
#include "../../../util/Mth.h"
|
#include "../../../util/Mth.h"
|
||||||
OptionsItem::OptionsItem( OptionId optionId, std::string label, GuiElement* element )
|
OptionsItem::OptionsItem( std::string label, GuiElement* element )
|
||||||
: GuiElementContainer(false, true, 0, 0, 24, 12),
|
: GuiElementContainer(false, true, 0, 0, 24, 12),
|
||||||
m_optionId(optionId),
|
label(label) {
|
||||||
m_label(label) {
|
|
||||||
addChild(element);
|
addChild(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,22 +19,6 @@ void OptionsItem::setupPositions() {
|
|||||||
|
|
||||||
void OptionsItem::render( Minecraft* minecraft, int xm, int ym ) {
|
void OptionsItem::render( Minecraft* minecraft, int xm, int ym ) {
|
||||||
int yOffset = (height - 8) / 2;
|
int yOffset = (height - 8) / 2;
|
||||||
std::string text = m_label;
|
minecraft->font->draw(label, (float)x, (float)y + yOffset, 0x909090, false);
|
||||||
if (m_optionId == OPTIONS_GUI_SCALE) {
|
|
||||||
int value = minecraft->options.getIntValue(OPTIONS_GUI_SCALE);
|
|
||||||
std::string scaleText;
|
|
||||||
switch (value) {
|
|
||||||
case 0: scaleText = I18n::get("options.guiScale.auto"); break;
|
|
||||||
case 1: scaleText = I18n::get("options.guiScale.small"); break;
|
|
||||||
case 2: scaleText = I18n::get("options.guiScale.medium"); break;
|
|
||||||
case 3: scaleText = I18n::get("options.guiScale.large"); break;
|
|
||||||
case 4: scaleText = I18n::get("options.guiScale.larger"); break;
|
|
||||||
case 5: scaleText = I18n::get("options.guiScale.largest"); break;
|
|
||||||
default: scaleText = I18n::get("options.guiScale.auto"); break;
|
|
||||||
}
|
|
||||||
text += ": " + scaleText;
|
|
||||||
}
|
|
||||||
|
|
||||||
minecraft->font->draw(text, (float)x, (float)y + yOffset, 0x909090, false);
|
|
||||||
super::render(minecraft, xm, ym);
|
super::render(minecraft, xm, ym);
|
||||||
}
|
}
|
||||||
@@ -15,13 +15,12 @@ class OptionsItem: public GuiElementContainer
|
|||||||
{
|
{
|
||||||
typedef GuiElementContainer super;
|
typedef GuiElementContainer super;
|
||||||
public:
|
public:
|
||||||
OptionsItem(OptionId optionId, std::string label, GuiElement* element);
|
OptionsItem(std::string label, GuiElement* element);
|
||||||
virtual void render(Minecraft* minecraft, int xm, int ym);
|
virtual void render(Minecraft* minecraft, int xm, int ym);
|
||||||
void setupPositions();
|
void setupPositions();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
OptionId m_optionId;
|
std::string label;
|
||||||
std::string m_label;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsItem_H__*/
|
#endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsItem_H__*/
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
#include "../../Minecraft.h"
|
#include "../../Minecraft.h"
|
||||||
#include "../../renderer/Textures.h"
|
#include "../../renderer/Textures.h"
|
||||||
#include "../Screen.h"
|
#include "../Screen.h"
|
||||||
#include "../../../locale/I18n.h"
|
|
||||||
#include "../../../util/Mth.h"
|
#include "../../../util/Mth.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@@ -22,7 +21,7 @@ void Slider::render( Minecraft* minecraft, int xm, int ym ) {
|
|||||||
|
|
||||||
if (m_numSteps > 2) {
|
if (m_numSteps > 2) {
|
||||||
int stepDistance = barWidth / (m_numSteps-1);
|
int stepDistance = barWidth / (m_numSteps-1);
|
||||||
for(int a = 0; a < m_numSteps; ++a) {
|
for(int a = 0; a <= m_numSteps; ++a) {
|
||||||
int renderSliderStepPosX = xSliderStart + a * stepDistance + 1;
|
int renderSliderStepPosX = xSliderStart + a * stepDistance + 1;
|
||||||
fill(renderSliderStepPosX - 1, ySliderStart - 2, renderSliderStepPosX + 1, ySliderEnd + 2, 0xff606060);
|
fill(renderSliderStepPosX - 1, ySliderStart - 2, renderSliderStepPosX + 1, ySliderEnd + 2, 0xff606060);
|
||||||
}
|
}
|
||||||
@@ -65,20 +64,15 @@ SliderFloat::SliderFloat(Minecraft* minecraft, OptionId option)
|
|||||||
SliderInt::SliderInt(Minecraft* minecraft, OptionId option)
|
SliderInt::SliderInt(Minecraft* minecraft, OptionId option)
|
||||||
: Slider(option), m_option(dynamic_cast<OptionInt*>(minecraft->options.getOpt(option)))
|
: Slider(option), m_option(dynamic_cast<OptionInt*>(minecraft->options.getOpt(option)))
|
||||||
{
|
{
|
||||||
m_numSteps = m_option->getMax() - m_option->getMin() + 1;
|
m_numSteps = m_option->getMax() - m_option->getMin();
|
||||||
m_percentage = float(m_option->get() - m_option->getMin()) / (m_numSteps-1);
|
m_percentage = float(m_option->get() - m_option->getMin()) / (m_numSteps-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SliderInt::render( Minecraft* minecraft, int xm, int ym ) {
|
|
||||||
Slider::render(minecraft, xm, ym);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SliderInt::mouseReleased( Minecraft* minecraft, int x, int y, int buttonNum ) {
|
void SliderInt::mouseReleased( Minecraft* minecraft, int x, int y, int buttonNum ) {
|
||||||
Slider::mouseReleased(minecraft, x, y, buttonNum);
|
Slider::mouseReleased(minecraft, x, y, buttonNum);
|
||||||
|
|
||||||
if (pointInside(x, y)) {
|
if (pointInside(x, y)) {
|
||||||
int curStep = int(m_percentage * (m_numSteps-1) + 0.5f);
|
int curStep = Mth::floor(m_percentage * (m_numSteps-1));
|
||||||
curStep = Mth::clamp(curStep + m_option->getMin(), m_option->getMin(), m_option->getMax());
|
|
||||||
m_percentage = float(curStep - m_option->getMin()) / (m_numSteps-1);
|
m_percentage = float(curStep - m_option->getMin()) / (m_numSteps-1);
|
||||||
|
|
||||||
minecraft->options.set(m_optId, curStep);
|
minecraft->options.set(m_optId, curStep);
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ class SliderInt : public Slider {
|
|||||||
public:
|
public:
|
||||||
SliderInt(Minecraft* minecraft, OptionId option);
|
SliderInt(Minecraft* minecraft, OptionId option);
|
||||||
|
|
||||||
virtual void render( Minecraft* minecraft, int xm, int ym ) override;
|
|
||||||
virtual void mouseReleased( Minecraft* minecraft, int x, int y, int buttonNum ) override;
|
virtual void mouseReleased( Minecraft* minecraft, int x, int y, int buttonNum ) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ ConfirmScreen::~ConfirmScreen() {
|
|||||||
|
|
||||||
void ConfirmScreen::init()
|
void ConfirmScreen::init()
|
||||||
{
|
{
|
||||||
if (/* minecraft->useTouchscreen() */ true) {
|
if (minecraft->useTouchscreen()) {
|
||||||
yesButton = new Touch::TButton(0, 0, 0, yesButtonText),
|
yesButton = new Touch::TButton(0, 0, 0, yesButtonText),
|
||||||
noButton = new Touch::TButton(1, 0, 0, noButtonText);
|
noButton = new Touch::TButton(1, 0, 0, noButtonText);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ DeathScreen::~DeathScreen()
|
|||||||
|
|
||||||
void DeathScreen::init()
|
void DeathScreen::init()
|
||||||
{
|
{
|
||||||
if (/* minecraft->useTouchscreen() */ true) {
|
if (minecraft->useTouchscreen()) {
|
||||||
bRespawn = new Touch::TButton(1, "Respawn!");
|
bRespawn = new Touch::TButton(1, "Respawn!");
|
||||||
bTitle = new Touch::TButton(2, "Main menu");
|
bTitle = new Touch::TButton(2, "Main menu");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void init() {
|
void init() {
|
||||||
if (/* minecraft->useTouchscreen() */ true)
|
if (minecraft->useTouchscreen())
|
||||||
_back = new Touch::TButton(1, "Ok");
|
_back = new Touch::TButton(1, "Ok");
|
||||||
else
|
else
|
||||||
_back = new Button(1, "Ok");
|
_back = new Button(1, "Ok");
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ InBedScreen::~InBedScreen() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void InBedScreen::init() {
|
void InBedScreen::init() {
|
||||||
if (/* minecraft->useTouchscreen() */ true) {
|
if (minecraft->useTouchscreen()) {
|
||||||
bWakeUp = new Touch::TButton(1, "Leave Bed");
|
bWakeUp = new Touch::TButton(1, "Leave Bed");
|
||||||
} else {
|
} else {
|
||||||
bWakeUp = new Button(1, "Leave Bed");
|
bWakeUp = new Button(1, "Leave Bed");
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ OptionsScreen::OptionsScreen()
|
|||||||
}
|
}
|
||||||
|
|
||||||
OptionsScreen::~OptionsScreen() {
|
OptionsScreen::~OptionsScreen() {
|
||||||
|
|
||||||
if (btnClose != NULL) {
|
if (btnClose != NULL) {
|
||||||
delete btnClose;
|
delete btnClose;
|
||||||
btnClose = NULL;
|
btnClose = NULL;
|
||||||
@@ -52,6 +53,7 @@ OptionsScreen::~OptionsScreen() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::init() {
|
void OptionsScreen::init() {
|
||||||
|
|
||||||
bHeader = new Touch::THeader(0, "Options");
|
bHeader = new Touch::THeader(0, "Options");
|
||||||
|
|
||||||
btnClose = new ImageButton(1, "");
|
btnClose = new ImageButton(1, "");
|
||||||
@@ -87,6 +89,7 @@ void OptionsScreen::init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::setupPositions() {
|
void OptionsScreen::setupPositions() {
|
||||||
|
|
||||||
int buttonHeight = btnClose->height;
|
int buttonHeight = btnClose->height;
|
||||||
|
|
||||||
btnClose->x = width - btnClose->width;
|
btnClose->x = width - btnClose->width;
|
||||||
@@ -131,6 +134,7 @@ void OptionsScreen::setupPositions() {
|
|||||||
|
|
||||||
|
|
||||||
void OptionsScreen::render(int xm, int ym, float a) {
|
void OptionsScreen::render(int xm, int ym, float a) {
|
||||||
|
|
||||||
renderBackground();
|
renderBackground();
|
||||||
|
|
||||||
int xmm = xm * width / minecraft->width;
|
int xmm = xm * width / minecraft->width;
|
||||||
@@ -146,13 +150,10 @@ void OptionsScreen::removed() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::buttonClicked(Button* button) {
|
void OptionsScreen::buttonClicked(Button* button) {
|
||||||
|
|
||||||
if (button == btnClose) {
|
if (button == btnClose) {
|
||||||
minecraft->options.save();
|
minecraft->options.save();
|
||||||
if (minecraft->screen != NULL) {
|
minecraft->screenChooser.setScreen(SCREEN_STARTMENU);
|
||||||
minecraft->setScreen(NULL);
|
|
||||||
} else {
|
|
||||||
minecraft->screenChooser.setScreen(SCREEN_STARTMENU);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (button->id > 1 && button->id < 7) {
|
else if (button->id > 1 && button->id < 7) {
|
||||||
int categoryButton = button->id - categoryButtons[0]->id;
|
int categoryButton = button->id - categoryButtons[0]->id;
|
||||||
@@ -164,6 +165,7 @@ void OptionsScreen::buttonClicked(Button* button) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::selectCategory(int index) {
|
void OptionsScreen::selectCategory(int index) {
|
||||||
|
|
||||||
int currentIndex = 0;
|
int currentIndex = 0;
|
||||||
|
|
||||||
for (std::vector<Touch::TButton*>::iterator it = categoryButtons.begin(); it != categoryButtons.end(); ++it) {
|
for (std::vector<Touch::TButton*>::iterator it = categoryButtons.begin(); it != categoryButtons.end(); ++it) {
|
||||||
@@ -207,8 +209,7 @@ void OptionsScreen::generateOptionScreens() {
|
|||||||
|
|
||||||
// // Controls Pane
|
// // Controls Pane
|
||||||
optionPanes[2]->addOptionItem(OPTIONS_INVERT_Y_MOUSE, minecraft)
|
optionPanes[2]->addOptionItem(OPTIONS_INVERT_Y_MOUSE, minecraft)
|
||||||
.addOptionItem(OPTIONS_USE_TOUCHSCREEN, minecraft)
|
.addOptionItem(OPTIONS_USE_TOUCHSCREEN, minecraft);
|
||||||
.addOptionItem(OPTIONS_AUTOJUMP, minecraft);
|
|
||||||
|
|
||||||
for (int i = OPTIONS_KEY_FORWARD; i <= OPTIONS_KEY_USE; i++) {
|
for (int i = OPTIONS_KEY_FORWARD; i <= OPTIONS_KEY_USE; i++) {
|
||||||
optionPanes[2]->addOptionItem((OptionId)i, minecraft);
|
optionPanes[2]->addOptionItem((OptionId)i, minecraft);
|
||||||
@@ -229,6 +230,7 @@ void OptionsScreen::generateOptionScreens() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
|
void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
|
||||||
|
|
||||||
if (currentOptionsGroup != NULL)
|
if (currentOptionsGroup != NULL)
|
||||||
currentOptionsGroup->mouseClicked(minecraft, x, y, buttonNum);
|
currentOptionsGroup->mouseClicked(minecraft, x, y, buttonNum);
|
||||||
|
|
||||||
@@ -236,6 +238,7 @@ void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::mouseReleased(int x, int y, int buttonNum) {
|
void OptionsScreen::mouseReleased(int x, int y, int buttonNum) {
|
||||||
|
|
||||||
if (currentOptionsGroup != NULL)
|
if (currentOptionsGroup != NULL)
|
||||||
currentOptionsGroup->mouseReleased(minecraft, x, y, buttonNum);
|
currentOptionsGroup->mouseReleased(minecraft, x, y, buttonNum);
|
||||||
|
|
||||||
|
|||||||
@@ -5,16 +5,12 @@
|
|||||||
#include "../../../util/Mth.h"
|
#include "../../../util/Mth.h"
|
||||||
#include "../../../network/RakNetInstance.h"
|
#include "../../../network/RakNetInstance.h"
|
||||||
#include "../../../network/ServerSideNetworkHandler.h"
|
#include "../../../network/ServerSideNetworkHandler.h"
|
||||||
#include "client/Options.h"
|
|
||||||
#include "client/gui/components/Button.h"
|
|
||||||
#include "client/gui/screens/OptionsScreen.h"
|
|
||||||
|
|
||||||
PauseScreen::PauseScreen(bool wasBackPaused)
|
PauseScreen::PauseScreen(bool wasBackPaused)
|
||||||
: saveStep(0),
|
: saveStep(0),
|
||||||
visibleTime(0),
|
visibleTime(0),
|
||||||
bContinue(0),
|
bContinue(0),
|
||||||
bQuit(0),
|
bQuit(0),
|
||||||
bOptions(0),
|
|
||||||
bQuitAndSaveLocally(0),
|
bQuitAndSaveLocally(0),
|
||||||
bServerVisibility(0),
|
bServerVisibility(0),
|
||||||
// bThirdPerson(0),
|
// bThirdPerson(0),
|
||||||
@@ -43,21 +39,18 @@ PauseScreen::~PauseScreen() {
|
|||||||
delete bQuit;
|
delete bQuit;
|
||||||
delete bQuitAndSaveLocally;
|
delete bQuitAndSaveLocally;
|
||||||
delete bServerVisibility;
|
delete bServerVisibility;
|
||||||
delete bOptions;
|
|
||||||
// delete bThirdPerson;
|
// delete bThirdPerson;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PauseScreen::init() {
|
void PauseScreen::init() {
|
||||||
if (/* minecraft->useTouchscreen() */ true) {
|
if (minecraft->useTouchscreen()) {
|
||||||
bContinue = new Touch::TButton(1, "Back to game");
|
bContinue = new Touch::TButton(1, "Back to game");
|
||||||
bOptions = new Touch::TButton(5, "Options");
|
|
||||||
bQuit = new Touch::TButton(2, "Quit to title");
|
bQuit = new Touch::TButton(2, "Quit to title");
|
||||||
bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map");
|
bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map");
|
||||||
bServerVisibility = new Touch::TButton(4, "");
|
bServerVisibility = new Touch::TButton(4, "");
|
||||||
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
|
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
|
||||||
} else {
|
} else {
|
||||||
bContinue = new Button(1, "Back to game");
|
bContinue = new Button(1, "Back to game");
|
||||||
bOptions = new Button(5, "Options");
|
|
||||||
bQuit = new Button(2, "Quit to title");
|
bQuit = new Button(2, "Quit to title");
|
||||||
bQuitAndSaveLocally = new Button(3, "Quit and copy map");
|
bQuitAndSaveLocally = new Button(3, "Quit and copy map");
|
||||||
bServerVisibility = new Button(4, "");
|
bServerVisibility = new Button(4, "");
|
||||||
@@ -66,7 +59,7 @@ void PauseScreen::init() {
|
|||||||
|
|
||||||
buttons.push_back(bContinue);
|
buttons.push_back(bContinue);
|
||||||
buttons.push_back(bQuit);
|
buttons.push_back(bQuit);
|
||||||
buttons.push_back(bOptions);
|
|
||||||
// bSound.updateImage(&minecraft->options);
|
// bSound.updateImage(&minecraft->options);
|
||||||
bThirdPerson.updateImage(&minecraft->options);
|
bThirdPerson.updateImage(&minecraft->options);
|
||||||
bHideGui.updateImage(&minecraft->options);
|
bHideGui.updateImage(&minecraft->options);
|
||||||
@@ -106,24 +99,21 @@ void PauseScreen::setupPositions() {
|
|||||||
saveStep = 0;
|
saveStep = 0;
|
||||||
int yBase = 16;
|
int yBase = 16;
|
||||||
|
|
||||||
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 160;
|
bContinue->width = bQuit->width = /*bThirdPerson->w =*/ 160;
|
||||||
bQuitAndSaveLocally->width = bServerVisibility->width = 160;
|
bQuitAndSaveLocally->width = bServerVisibility->width = 160;
|
||||||
|
|
||||||
bContinue->x = (width - bContinue->width) / 2;
|
bContinue->x = (width - bContinue->width) / 2;
|
||||||
bContinue->y = yBase + 32 * 1;
|
bContinue->y = yBase + 32 * 1;
|
||||||
|
|
||||||
bOptions->x = (width - bOptions->width) / 2;
|
|
||||||
bOptions->y = yBase + 32 * 2;
|
|
||||||
|
|
||||||
bQuit->x = (width - bQuit->width) / 2;
|
bQuit->x = (width - bQuit->width) / 2;
|
||||||
bQuit->y = yBase + 32 * 3;
|
bQuit->y = yBase + 32 * 2;
|
||||||
|
|
||||||
#if APPLE_DEMO_PROMOTION
|
#if APPLE_DEMO_PROMOTION
|
||||||
bQuit->y += 16;
|
bQuit->y += 16;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
||||||
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4;
|
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 3;
|
||||||
|
|
||||||
// bSound.y = bThirdPerson.y = 8;
|
// bSound.y = bThirdPerson.y = 8;
|
||||||
// bSound.x = 4;
|
// bSound.x = 4;
|
||||||
@@ -167,9 +157,7 @@ void PauseScreen::buttonClicked(Button* button) {
|
|||||||
if (button->id == bQuitAndSaveLocally->id) {
|
if (button->id == bQuitAndSaveLocally->id) {
|
||||||
minecraft->leaveGame(true);
|
minecraft->leaveGame(true);
|
||||||
}
|
}
|
||||||
if (button->id == bOptions->id) {
|
|
||||||
minecraft->setScreen(new OptionsScreen());
|
|
||||||
}
|
|
||||||
if (button->id == bServerVisibility->id) {
|
if (button->id == bServerVisibility->id) {
|
||||||
if (minecraft->raknetInstance && minecraft->netCallback && minecraft->raknetInstance->isServer()) {
|
if (minecraft->raknetInstance && minecraft->netCallback && minecraft->raknetInstance->isServer()) {
|
||||||
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
|
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
|
||||||
|
|||||||
@@ -33,9 +33,7 @@ private:
|
|||||||
Button* bQuit;
|
Button* bQuit;
|
||||||
Button* bQuitAndSaveLocally;
|
Button* bQuitAndSaveLocally;
|
||||||
Button* bServerVisibility;
|
Button* bServerVisibility;
|
||||||
Button* bOptions;
|
// Button* bThirdPerson;
|
||||||
|
|
||||||
// Button* bThirdPerson;
|
|
||||||
|
|
||||||
// OptionButton bSound;
|
// OptionButton bSound;
|
||||||
OptionButton bThirdPerson;
|
OptionButton bThirdPerson;
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ public:
|
|||||||
void render(int xm, int ym, float a);
|
void render(int xm, int ym, float a);
|
||||||
bool isInGameScreen();
|
bool isInGameScreen();
|
||||||
|
|
||||||
virtual void keyPressed(int eventKey) {}
|
|
||||||
|
|
||||||
void tick();
|
void tick();
|
||||||
private:
|
private:
|
||||||
int ticks;
|
int ticks;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Screen* ScreenChooser::createScreen( ScreenId id )
|
|||||||
Screen* screen = NULL;
|
Screen* screen = NULL;
|
||||||
|
|
||||||
// :sob:
|
// :sob:
|
||||||
if (/* _mc->useTouchscreen() */ true) {
|
if (_mc->useTouchscreen()) {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break;
|
case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break;
|
||||||
case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break;
|
case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break;
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ void SimpleChooseLevelScreen::init()
|
|||||||
def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
|
def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
|
||||||
bBack->setImageDef(def, true);
|
bBack->setImageDef(def, true);
|
||||||
}
|
}
|
||||||
if (/* minecraft->useTouchscreen() */ true) {
|
if (minecraft->useTouchscreen()) {
|
||||||
bGamemode = new Touch::TButton(1, "Survival mode");
|
bGamemode = new Touch::TButton(1, "Survival mode");
|
||||||
bCheats = new Touch::TButton(4, "Cheats: Off");
|
bCheats = new Touch::TButton(4, "Cheats: Off");
|
||||||
bCreate = new Touch::TButton(3, "Create");
|
bCreate = new Touch::TButton(3, "Create");
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public:
|
|||||||
//fill(x+1, y+1, x+w-1, y+h-1, 0xff999999);
|
//fill(x+1, y+1, x+w-1, y+h-1, 0xff999999);
|
||||||
|
|
||||||
bool hovered = active && (minecraft->useTouchscreen()?
|
bool hovered = active && (minecraft->useTouchscreen()?
|
||||||
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
|
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
|
||||||
|
|
||||||
if (hovered || *selectedPtr == this)
|
if (hovered || *selectedPtr == this)
|
||||||
statePressed->draw(Tesselator::instance, (float)x, (float)y);
|
statePressed->draw(Tesselator::instance, (float)x, (float)y);
|
||||||
@@ -547,7 +547,7 @@ void CraftButton::renderBg(Minecraft* minecraft, int xm, int ym) {
|
|||||||
//fill(x+1, y+1, x+w-1, y+h-1, 0xff999999);
|
//fill(x+1, y+1, x+w-1, y+h-1, 0xff999999);
|
||||||
|
|
||||||
bool hovered = active && (minecraft->useTouchscreen()?
|
bool hovered = active && (minecraft->useTouchscreen()?
|
||||||
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
|
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
|
||||||
|
|
||||||
if (hovered || selected)
|
if (hovered || selected)
|
||||||
bgSelected->draw(Tesselator::instance, (float)x, (float)y);
|
bgSelected->draw(Tesselator::instance, (float)x, (float)y);
|
||||||
|
|||||||
@@ -28,7 +28,6 @@
|
|||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
#include <sys/stat.h>
|
|
||||||
#else
|
#else
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|||||||
@@ -50,8 +50,10 @@ void KeyboardInput::tick( Player* player )
|
|||||||
ya *= 0.3f;
|
ya *= 0.3f;
|
||||||
}
|
}
|
||||||
|
|
||||||
wantUp = jumping;
|
#if defined(RPI) || defined(PLATFORM_DESKTOP)
|
||||||
wantDown = sneaking;
|
wantUp = jumping;
|
||||||
|
wantDown = sneaking;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (keys[KEY_CRAFT])
|
if (keys[KEY_CRAFT])
|
||||||
player->startCrafting((int)player->x, (int)player->y, (int)player->z, Recipe::SIZE_2X2);
|
player->startCrafting((int)player->x, (int)player->y, (int)player->z, Recipe::SIZE_2X2);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -153,7 +153,7 @@ void GameRenderer::render(float a) {
|
|||||||
|
|
||||||
int xMouse = (int)(Mouse::getX() * Gui::InvGuiScale);
|
int xMouse = (int)(Mouse::getX() * Gui::InvGuiScale);
|
||||||
int yMouse = (int)(Mouse::getY() * Gui::InvGuiScale);
|
int yMouse = (int)(Mouse::getY() * Gui::InvGuiScale);
|
||||||
|
#ifndef PLATFORM_DESKTOP
|
||||||
if (mc->useTouchscreen()) {
|
if (mc->useTouchscreen()) {
|
||||||
const int pid = Multitouch::getFirstActivePointerIdExThisUpdate();
|
const int pid = Multitouch::getFirstActivePointerIdExThisUpdate();
|
||||||
if (pid >= 0) {
|
if (pid >= 0) {
|
||||||
@@ -164,6 +164,7 @@ void GameRenderer::render(float a) {
|
|||||||
yMouse = -9999;
|
yMouse = -9999;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
TIMER_POP();
|
TIMER_POP();
|
||||||
|
|
||||||
bool hasClearedColorBuffer = false;
|
bool hasClearedColorBuffer = false;
|
||||||
@@ -360,9 +361,9 @@ void GameRenderer::renderLevel(float a) {
|
|||||||
if (mc->hitResult.isHit() && !cameraEntity->isUnderLiquid(Material::water)) {
|
if (mc->hitResult.isHit() && !cameraEntity->isUnderLiquid(Material::water)) {
|
||||||
TIMER_POP_PUSH("select");
|
TIMER_POP_PUSH("select");
|
||||||
Player* player = (Player*) cameraEntity;
|
Player* player = (Player*) cameraEntity;
|
||||||
// if (mc->useTouchscreen()) {
|
if (mc->useTouchscreen()) {
|
||||||
levelRenderer->renderHitSelect(player, mc->hitResult, 0, NULL, a); //player.inventory->getSelected(), a);
|
levelRenderer->renderHitSelect(player, mc->hitResult, 0, NULL, a); //player.inventory->getSelected(), a);
|
||||||
// }
|
}
|
||||||
levelRenderer->renderHit(player, mc->hitResult, 0, NULL, a);//player->inventory.getSelected(), a);
|
levelRenderer->renderHit(player, mc->hitResult, 0, NULL, a);//player->inventory.getSelected(), a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -656,9 +657,11 @@ void GameRenderer::pick(float a) {
|
|||||||
|
|
||||||
float range = mc->gameMode->getPickRange();
|
float range = mc->gameMode->getPickRange();
|
||||||
bool isPicking = true;
|
bool isPicking = true;
|
||||||
|
#ifndef PLATFORM_DESKTOP
|
||||||
bool freeform = mc->useTouchscreen(); //&& !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA);
|
bool freeform = mc->useTouchscreen() && !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA);
|
||||||
|
#else
|
||||||
|
bool freeform = false;
|
||||||
|
#endif
|
||||||
if (freeform) {
|
if (freeform) {
|
||||||
isPicking = updateFreeformPickDirection(a, pickDirection);
|
isPicking = updateFreeformPickDirection(a, pickDirection);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ PlayerRenderer::PlayerRenderer( HumanoidModel* humanoidModel, float shadow )
|
|||||||
: super(humanoidModel, shadow),
|
: super(humanoidModel, shadow),
|
||||||
playerModel64(humanoidModel),
|
playerModel64(humanoidModel),
|
||||||
playerModel32(new HumanoidModel(0, 0, 64, 32)),
|
playerModel32(new HumanoidModel(0, 0, 64, 32)),
|
||||||
armorParts1(new HumanoidModel(1.0f, 0, 64, 32)),
|
armorParts1(new HumanoidModel(1.0f, 0, 64, 64)),
|
||||||
armorParts2(new HumanoidModel(0.5f, 0, 64, 32))
|
armorParts2(new HumanoidModel(0.5f, 0, 64, 64))
|
||||||
{
|
{
|
||||||
// default to legacy skin path until we know the exact texture size
|
// default to legacy skin path until we know the exact texture size
|
||||||
model = playerModel32;
|
model = playerModel32;
|
||||||
@@ -77,10 +77,10 @@ void PlayerRenderer::render(Entity* mob_, float x, float y, float z, float rot,
|
|||||||
model = desired;
|
model = desired;
|
||||||
humanoidModel = desired;
|
humanoidModel = desired;
|
||||||
}
|
}
|
||||||
LOGI("[PlayerRenderer] %s: skin=%s, modelTex=%dx%d, desired=%s\n",
|
// LOGI("[PlayerRenderer] %s: skin=%s, modelTex=%dx%d, desired=%s\n",
|
||||||
((Player*)mob)->name.c_str(), mob->getTexture().c_str(),
|
// ((Player*)mob)->name.c_str(), mob->getTexture().c_str(),
|
||||||
humanoidModel->texWidth, humanoidModel->texHeight,
|
// humanoidModel->texWidth, humanoidModel->texHeight,
|
||||||
(desired == playerModel64 ? "64" : "32"));
|
// (desired == playerModel64 ? "64" : "32"));
|
||||||
HumanoidMobRenderer::render(mob_, x, y, z, rot, a);
|
HumanoidMobRenderer::render(mob_, x, y, z, rot, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
// #else
|
// #else
|
||||||
// // Uglyness to fix redeclaration issues
|
// // Uglyness to fix redeclaration issues
|
||||||
// #ifdef WIN32
|
// #ifdef WIN32
|
||||||
// #include <winsock2.h>
|
// #include <WinSock2.h>
|
||||||
// #include <Windows.h>
|
// #include <Windows.h>
|
||||||
// #endif
|
// #endif
|
||||||
// #include <gl/glew.h>
|
// #include <gl/glew.h>
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
|
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
#ifdef PLATFORM_DESKTOP
|
||||||
#include "main_glfw.h"
|
#include "main_glfw.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -139,14 +139,12 @@ int main(void) {
|
|||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
// Platform init.
|
// Platform init.
|
||||||
appContext.platform = new AppPlatform_glfw();
|
appContext.platform = new AppPlatform_glfw();
|
||||||
#if defined(__EMSCRIPTEN__)
|
#if defined(DEBUG) && defined(__EMSCRIPTEN__)
|
||||||
EM_ASM(
|
EM_ASM({
|
||||||
FS.mkdir('/games');
|
console.log(FS.readdir("/"));
|
||||||
FS.mkdir('/games/com.mojang');
|
console.log(FS.readdir("/data"));
|
||||||
FS.mkdir('/games/com.mojang/minecraftWorlds');
|
console.log(FS.readdir("/data/images"));
|
||||||
FS.mount(IDBFS, {}, '/games');
|
});
|
||||||
FS.syncfs(true, function (err) {});
|
|
||||||
);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
glfwSetErrorCallback(error_callback);
|
glfwSetErrorCallback(error_callback);
|
||||||
@@ -207,16 +205,16 @@ int main(void) {
|
|||||||
|
|
||||||
delete app;
|
delete app;
|
||||||
|
|
||||||
|
appContext.platform->finish();
|
||||||
|
|
||||||
|
delete appContext.platform;
|
||||||
|
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
// Exit.
|
// Exit.
|
||||||
glfwDestroyWindow(platform->window);
|
glfwDestroyWindow(platform->window);
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
appContext.platform->finish();
|
|
||||||
|
|
||||||
delete appContext.platform;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <windowsx.h>
|
#include <windowsx.h>
|
||||||
|
|
||||||
#include <winsock2.h>
|
#include <WinSock2.h>
|
||||||
#include <process.h>
|
#include <process.h>
|
||||||
#include "SharedConstants.h"
|
#include "SharedConstants.h"
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <winsock2.h>
|
#include <WinSock2.h>
|
||||||
#else
|
#else
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
|||||||
@@ -140,9 +140,7 @@ RakNet::TimeUS GetTimeUS_Windows( void )
|
|||||||
#if _MSC_VER >= 1400 && defined (_M_X64)
|
#if _MSC_VER >= 1400 && defined (_M_X64)
|
||||||
GetProcessAffinityMask(mProc, (PDWORD_PTR)&mProcMask, (PDWORD_PTR)&mSysMask);
|
GetProcessAffinityMask(mProc, (PDWORD_PTR)&mProcMask, (PDWORD_PTR)&mSysMask);
|
||||||
#else
|
#else
|
||||||
#ifndef __MINGW32__
|
|
||||||
GetProcessAffinityMask(mProc, &mProcMask, &mSysMask);
|
GetProcessAffinityMask(mProc, &mProcMask, &mSysMask);
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
mThread = GetCurrentThread();
|
mThread = GetCurrentThread();
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#if defined(X360__)
|
#if defined(X360__)
|
||||||
#elif defined (_WIN32)
|
#elif defined (_WIN32)
|
||||||
#include <winsock2.h>
|
#include <WinSock2.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <ws2tcpip.h>
|
#include <Ws2tcpip.h>
|
||||||
|
|
||||||
// Must always include Winsock2.h before windows.h
|
// Must always include Winsock2.h before windows.h
|
||||||
// or else:
|
// or else:
|
||||||
|
|||||||
Reference in New Issue
Block a user