forked from Kolyah35/minecraft-pe-0.6.1
Compare commits
85 Commits
main
...
ios-suppor
| Author | SHA1 | Date | |
|---|---|---|---|
| fe73853a64 | |||
| 845d721b1e | |||
| d7a02bfc90 | |||
| 13fd830361 | |||
| a96b942c17 | |||
| c476153231 | |||
| 412a34562f | |||
| 98dd53e2f5 | |||
| 6f0c485a9f | |||
| 7cc33b011d | |||
| aeb8e45879 | |||
| d554767309 | |||
| aec534d948 | |||
| 8867878ccf | |||
| 44ece561e8 | |||
| 22b59bd2cc | |||
| 705c4154ee | |||
| 59898ca504 | |||
| b658132dac | |||
| ab5f177208 | |||
| 72b68389b2 | |||
|
|
59ba8bfb7c | ||
|
|
ef32fcfe08 | ||
|
|
2237515793 | ||
|
|
e272991159 | ||
|
|
055f00be49 | ||
|
|
378dfe8e22 | ||
|
|
61f0124beb | ||
|
|
ff5c57f6ba | ||
|
|
eac71a93d1 | ||
|
|
fa249728e5 | ||
|
|
84e8744387 | ||
|
|
27f0287986 | ||
|
|
109bbcfdb1 | ||
| cbd81b47ce | |||
| c146791845 | |||
| a7c75d2ad2 | |||
| 468ae4a211 | |||
| 9405e8daad | |||
| bef09a3305 | |||
| 82f827af29 | |||
| 4f8b18b735 | |||
| 2acb57d051 | |||
| 5251085752 | |||
| a16f76f2b6 | |||
| b088f39e52 | |||
| 13c624e07e | |||
| 2bfa8f11f1 | |||
| 98a05e5aa3 | |||
| 3f6d9cdcb8 | |||
| 39186069cf | |||
| b94c16b22a | |||
| 91ce365a26 | |||
| f114536463 | |||
| 6e0615c0bc | |||
| fd3ee23e4e | |||
| e9766ed2a1 | |||
| 298451c290 | |||
| 668fc9d16f | |||
| 5717aeab24 | |||
| 9af1496b9d | |||
| 6bfae5a14e | |||
| 4034cf243d | |||
| b6e7414f04 | |||
|
|
83f3284827 | ||
| 3dab395af3 | |||
| 011c8f7123 | |||
| f69c009da9 | |||
| b66b4a2dc2 | |||
| 7037b2b5f2 | |||
| d54e39b332 | |||
| f96ba8bb33 | |||
| f0e1980f59 | |||
| 52f607b126 | |||
| 84a956531c | |||
| c4f5f22f24 | |||
| 7867aea042 | |||
| a90e1463ee | |||
| 59e820e27f | |||
| 1199f53632 | |||
| dc0e2c192b | |||
| 6ef9efa434 | |||
| 72e6537dc5 | |||
| 0e2e7694d3 | |||
| 45f04ca07b |
17
.github/actions/setup-ninja/action.yml
vendored
Normal file
17
.github/actions/setup-ninja/action.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
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
|
||||
184
.github/workflows/build.yml
vendored
184
.github/workflows/build.yml
vendored
@@ -18,8 +18,8 @@ permissions:
|
||||
|
||||
jobs:
|
||||
build-windows:
|
||||
name: Windows Build
|
||||
runs-on: ubuntu-latest
|
||||
name: Build Windows
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
@@ -27,59 +27,19 @@ jobs:
|
||||
- name: Setup caches
|
||||
uses: ./.github/actions/setup-cache
|
||||
with:
|
||||
host: win
|
||||
host: linux
|
||||
target: win
|
||||
|
||||
- name: Download xwin
|
||||
uses: robinraju/release-downloader@v1.10
|
||||
- name: Setup Ninja
|
||||
uses: ./.github/actions/setup-ninja
|
||||
with:
|
||||
repository: Jake-Shadle/xwin
|
||||
latest: true
|
||||
fileName: 'xwin-*-x86_64-unknown-linux-musl.tar.gz'
|
||||
tarBall: false
|
||||
zipBall: false
|
||||
out-file-path: "epic-xwin"
|
||||
host: linux
|
||||
|
||||
- name: Prepare xwin
|
||||
- name: Download llvm-mingw
|
||||
run: |
|
||||
tar -xzf epic-xwin/xwin-*-x86_64-unknown-linux-musl.tar.gz -C epic-xwin
|
||||
mv epic-xwin/xwin-*-x86_64-unknown-linux-musl/xwin ./xwin
|
||||
./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
|
||||
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 -xf llvm-mingw.tar.xz
|
||||
mv llvm-mingw-* llvm-mingw
|
||||
|
||||
- name: Create Build Environment
|
||||
# Some projects don't allow in-source building, so create a separate build directory
|
||||
@@ -88,29 +48,56 @@ jobs:
|
||||
|
||||
- name: Configure CMake
|
||||
working-directory: ${{github.workspace}}/build
|
||||
run: cmake $env:GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$env:BUILD_TYPE -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
|
||||
env:
|
||||
SPLAT_DIR: ${{ github.workspace }}/.xwin-cache/splat
|
||||
TOOLCHAIN: ${{ github.workspace }}/toolchain/clang-cl-msvc.cmake
|
||||
HOST_ARCH: x86_64
|
||||
run: |
|
||||
cmake $GITHUB_WORKSPACE \
|
||||
-G Ninja \
|
||||
-DCMAKE_SYSTEM_NAME=Windows \
|
||||
-DCMAKE_C_COMPILER=$GITHUB_WORKSPACE/llvm-mingw/bin/x86_64-w64-mingw32-clang \
|
||||
-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
|
||||
working-directory: ${{github.workspace}}/build
|
||||
run: cmake --build . --config $env:BUILD_TYPE --target MinecraftPE --parallel
|
||||
run: cmake --build . --config $BUILD_TYPE --target MinecraftPE --parallel
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: mcpe-windows
|
||||
path: |
|
||||
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/MinecraftPE.exe
|
||||
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/glfw3.dll
|
||||
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/libpng16.dll
|
||||
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/OpenAL32.dll
|
||||
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/z.dll
|
||||
${{github.workspace}}/build/MinecraftPE.exe
|
||||
${{github.workspace}}/build/libpng16.dll
|
||||
${{github.workspace}}/build/OpenAL32.dll
|
||||
${{github.workspace}}/build/libz.dll
|
||||
|
||||
build-ios:
|
||||
# credit to pengubow from deepfriedwaffles repo
|
||||
name: Build iOS
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@main
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
cd project/iosproj
|
||||
xcodebuild -scheme minecraftpe -derivedDataPath build -destination 'generic/platform=iOS' CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
|
||||
mkdir -p Payload
|
||||
cp -R build/Build/Products/Debug-iphoneos/minecraftpe.app Payload/
|
||||
zip -r minecraftpe.ipa Payload
|
||||
rm -rf Payload
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@main
|
||||
with:
|
||||
name: minecraftpe-ios
|
||||
path: project/iosproj/minecraftpe.ipa
|
||||
|
||||
build-linux:
|
||||
name: Linux Build
|
||||
name: Build Linux
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
@@ -156,7 +143,7 @@ jobs:
|
||||
${{github.workspace}}/build/MinecraftPE-server
|
||||
|
||||
build-android: # pray to god
|
||||
name: Build Android APK (${{ matrix.abi }})
|
||||
name: Build Android (${{ matrix.abi }})
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
@@ -251,11 +238,59 @@ jobs:
|
||||
name: minecraftpe-apk-${{ matrix.abi }}
|
||||
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:
|
||||
name: Publish
|
||||
runs-on: ubuntu-latest
|
||||
needs: [ build-windows, build-linux, build-android ]
|
||||
if: github.ref == 'refs/heads/main'
|
||||
needs: [ build-windows, build-ios, build-linux, build-android, build-web ]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
@@ -272,13 +307,13 @@ jobs:
|
||||
- name: Zip Windows Artifacts
|
||||
uses: vimtor/action-zip@v1.2
|
||||
with:
|
||||
files: data mcpe-windows/MinecraftPE.exe mcpe-windows/glfw3.dll mcpe-windows/libpng16.dll mcpe-windows/OpenAL32.dll mcpe-windows/z.dll
|
||||
files: mcpe-windows/MinecraftPE.exe mcpe-windows/libpng16.dll mcpe-windows/OpenAL32.dll mcpe-windows/libz.dll
|
||||
dest: minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip
|
||||
|
||||
- name: Zip Linux Artifacts
|
||||
uses: vimtor/action-zip@v1.2
|
||||
with:
|
||||
files: data mcpe-linux/MinecraftPE
|
||||
files: mcpe-linux/MinecraftPE
|
||||
dest: minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
|
||||
|
||||
- name: Zip Linux Server Artifacts
|
||||
@@ -299,6 +334,19 @@ jobs:
|
||||
files: minecraftpe-apk-armeabi-v7a/minecraftpe-v7a-debug.apk
|
||||
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
|
||||
uses: andelf/nightly-release@main
|
||||
env:
|
||||
@@ -309,8 +357,10 @@ jobs:
|
||||
body: |
|
||||
MinecraftPE development release for commit ${{ github.sha }}.
|
||||
files: |
|
||||
./data.zip
|
||||
./minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip
|
||||
./minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
|
||||
./minecraftpe-server-${{ steps.ref.outputs.hash }}.zip
|
||||
./minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.zip
|
||||
./minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.zip
|
||||
./minecraftpe-${{ steps.ref.outputs.hash }}-web.zip
|
||||
|
||||
@@ -7,10 +7,6 @@ set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
||||
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)
|
||||
|
||||
if(EMSCRIPTEN)
|
||||
@@ -26,9 +22,18 @@ find_package(OpenSSL)
|
||||
if (${PLATFORM} STREQUAL "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)
|
||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||
set(EXTRA_LIBS ws2_32)
|
||||
include_directories(misc/windows)
|
||||
set(EXTRA_LIBS ws2_32 winhttp)
|
||||
elseif(UNIX)
|
||||
find_library(pthread NAMES pthread)
|
||||
set(EXTRA_LIBS pthread m)
|
||||
@@ -51,6 +56,7 @@ if(${PLATFORM} MATCHES "Web")
|
||||
|
||||
add_library(png INTERFACE IMPORTED)
|
||||
set_target_properties(png PROPERTIES
|
||||
INTERFACE_COMPILE_OPTIONS "-sUSE_LIBPNG=1"
|
||||
INTERFACE_LINK_OPTIONS "-sUSE_LIBPNG=1"
|
||||
)
|
||||
|
||||
@@ -100,6 +106,9 @@ CPMAddPackage(
|
||||
"ALSOFT_TESTS OFF"
|
||||
"ALSOFT_UTILS OFF"
|
||||
"LIBTYPE ${AL_LIBTYPE}"
|
||||
"ALSOFT_ENABLE_MODULES OFF"
|
||||
"ALSOFT_STATIC_STDCXX ON"
|
||||
"ALSOFT_STATIC_LIBGCC ON"
|
||||
)
|
||||
|
||||
# TODO: Clear this paths with *
|
||||
@@ -157,6 +166,7 @@ file(GLOB SERVER_SOURCES
|
||||
"src/util/Mth.cpp"
|
||||
"src/util/PerfTimer.cpp"
|
||||
"src/util/StringUtils.cpp"
|
||||
"src/util/Color.cpp"
|
||||
|
||||
"src/world/Direction.cpp"
|
||||
|
||||
@@ -190,6 +200,9 @@ file(GLOB SERVER_SOURCES
|
||||
|
||||
"src/world/level/dimension/Dimension.cpp"
|
||||
|
||||
"src/world/level/dimension/FoliageColor.cpp"
|
||||
"src/world/level/GrassColor.cpp"
|
||||
|
||||
"src/world/level/levelgen/*.cpp"
|
||||
"src/world/level/levelgen/feature/Feature.cpp"
|
||||
"src/world/level/levelgen/synth/*.cpp"
|
||||
@@ -249,6 +262,8 @@ file(GLOB CLIENT_SOURCES
|
||||
|
||||
"src/util/**.cpp"
|
||||
|
||||
"src/util/Color.cpp"
|
||||
|
||||
"src/world/*.cpp"
|
||||
"src/world/phys/*.cpp"
|
||||
"src/world/entity/*.cpp"
|
||||
@@ -319,11 +334,11 @@ target_include_directories(${PROJECT_NAME} PUBLIC
|
||||
if(${PLATFORM} MATCHES "Web")
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
# uuuh i hate it
|
||||
set(EM_FLAGS "-pthread -sUSE_PTHREADS=1 -sSHARED_MEMORY=1")
|
||||
set(EM_FLAGS "-pthread -sUSE_PTHREADS=1 -sUSE_LIBPNG=1 -sSHARED_MEMORY=1")
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_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 -sPROXY_TO_PTHREAD")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EM_FLAGS} --preload-file ${CMAKE_SOURCE_DIR}/data@/data")
|
||||
|
||||
target_compile_options(${PROJECT_NAME} PUBLIC
|
||||
"-Os"
|
||||
|
||||
45
README.md
45
README.md
@@ -113,7 +113,7 @@ cmake --build .
|
||||
$HOME/Android/Sdk/cmdline-tools/bin/sdkmanager
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> [!Note]
|
||||
> `sdkmanager` expects the SDK to include a `cmdline-tools/latest/` folder.
|
||||
> 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"
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> [!Note]
|
||||
> 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:
|
||||
>
|
||||
@@ -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/`
|
||||
|
||||
> [!WARNING]
|
||||
> [!Warning]
|
||||
> 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`
|
||||
|
||||
## Web
|
||||
1. Download and install **emsdk**: https://emscripten.org/docs/getting_started/downloads.html
|
||||
> [!NOTE]
|
||||
> [!Note]
|
||||
> On arch linux you can use AUR:
|
||||
> `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 --build . --target MinecraftPE
|
||||
```
|
||||
> [!NOTE]
|
||||
> [!Note]
|
||||
> If you are using VSCode with CMake plugin, you can add Emscripten kit
|
||||
> 1. Press Ctrl + Shift + P
|
||||
> 2. Type `CMake: Edit User-Local CMake Kits` and hit Enter
|
||||
@@ -198,3 +198,38 @@ cmake --build .
|
||||
```
|
||||
emrun --port 8080 .
|
||||
```
|
||||
## iOS
|
||||
### Xcode
|
||||
> [Note!]
|
||||
> There's a precompiled IPA artifact in the GitHub mirror under Actions for those who either don't have Macs or don't want to build themself. But if you want to build youself, you'll need a Mac with Xcode. Download Xcode from the Mac App Store.
|
||||
|
||||
### 1. Clone
|
||||
Open your terminal and clone the repository
|
||||
```bash
|
||||
git clone https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
|
||||
cd minecraft-pe-0.6.1
|
||||
```
|
||||
You can also build from the ios-support branch by checking out to it
|
||||
```
|
||||
git checkout ios-support
|
||||
```
|
||||
|
||||
### 2. Open in Xcode
|
||||
|
||||
The project file is in `minecraft-pe-0.6.1/project/iosproj/minecraftpe.xcodeproj`. Open it.
|
||||
|
||||
### 3. Configure Code Signing
|
||||
|
||||
Before you can deploy to an iPhone, you must sign the app with your own Apple Developer account:
|
||||
|
||||
1. Select the **minecraftpe** project in the left sidebar.
|
||||
2. Go to **Signing & Capabilities**.
|
||||
3. Change the **Bundle Identifier** to something unique (e.g., `com.yourname.mcpe`).
|
||||
4. Select your **Team** from the dropdown menu.
|
||||
|
||||
### 4. Build and Run
|
||||
|
||||
1. Connect your iPhone via USB or LAN.
|
||||
2. Select your device from the run destination menu at the top of Xcode.
|
||||
3. Press **Cmd + R** (or the Play button).
|
||||
4. **Note:** If you encounter a "Developer Mode" or "Untrusted Developer" error on your phone, go to **Settings > General > VPN & Device Management** to trust your certificate.
|
||||
|
||||
BIN
data/images/misc/foliagecolor.png
Normal file
BIN
data/images/misc/foliagecolor.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
BIN
data/images/misc/grasscolor.png
Normal file
BIN
data/images/misc/grasscolor.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
BIN
data/images/misc/shadow.png
Normal file
BIN
data/images/misc/shadow.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 868 B |
BIN
data/images/misc/vignette.png
Normal file
BIN
data/images/misc/vignette.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
@@ -153,7 +153,8 @@ options.group.tweaks=Tweaks
|
||||
options.allowSprint=Allow sprint
|
||||
options.barOnTop=HUD above inventory
|
||||
options.rpiCursor=Show Raspberry PI cursor
|
||||
options.autojump=Auto Jump
|
||||
options.foliageTint=Tint Grass and Leaves
|
||||
options.autoJump=Auto Jump
|
||||
options.thirdperson=Third Person
|
||||
options.servervisible=Server Visible
|
||||
options.sensitivity=Sensitivity
|
||||
@@ -182,9 +183,10 @@ options.graphics.fast=Fast
|
||||
options.guiScale=GUI Scale
|
||||
options.guiScale.auto=Auto
|
||||
options.guiScale.small=Small
|
||||
options.guiScale.normal=Normal
|
||||
options.guiScale.medium=Medium
|
||||
options.guiScale.large=Large
|
||||
options.guiScale.larger=Larger
|
||||
options.guiScale.largest=Largest
|
||||
options.advancedOpengl=Advanced OpenGL
|
||||
options.renderClouds=Clouds
|
||||
options.farWarning1=A 64 bit Java installation is recommended
|
||||
|
||||
@@ -1,143 +1,46 @@
|
||||
<!doctype html>
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>Emscripten-Generated Code</title>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>MCPE 0.6.1</title>
|
||||
<style>
|
||||
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
|
||||
textarea.emscripten { font-family: monospace; width: 80%; }
|
||||
div.emscripten { text-align: center; }
|
||||
div.emscripten_border { border: 1px solid black; }
|
||||
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
|
||||
canvas.emscripten { border: 0px none; background-color: black; }
|
||||
|
||||
.spinner {
|
||||
height: 50px;
|
||||
width: 50px;
|
||||
margin: 0px auto;
|
||||
-webkit-animation: rotation .8s linear infinite;
|
||||
-moz-animation: rotation .8s linear infinite;
|
||||
-o-animation: rotation .8s linear infinite;
|
||||
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);}
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 100%;
|
||||
background: black;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#canvas {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
display: block;
|
||||
}
|
||||
</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>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<hr/>
|
||||
<textarea class="emscripten" id="output" rows="8"></textarea>
|
||||
<hr>
|
||||
<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
|
||||
|
||||
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
|
||||
// application robust, you may want to override this behavior before shipping!
|
||||
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
|
||||
canvasElement.addEventListener("webglcontextlost", (e) => {
|
||||
alert('WebGL context lost. You will need to reload the page.');
|
||||
e.preventDefault();
|
||||
}, false);
|
||||
|
||||
function setStatus(text) {
|
||||
if (!setStatus.last) setStatus.last = { time: Date.now(), text: '' };
|
||||
if (text === setStatus.last.text) return;
|
||||
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
|
||||
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;
|
||||
}
|
||||
<canvas id="canvas"></canvas>
|
||||
|
||||
<script>
|
||||
var Module = {
|
||||
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: document.getElementById('canvas'),
|
||||
onRuntimeInitialized: function () { resizeCanvas() }
|
||||
};
|
||||
|
||||
function resizeCanvas() {
|
||||
const canvas = Module.canvas;
|
||||
canvas.width = window.innerWidth;
|
||||
canvas.height = window.innerHeight;
|
||||
}
|
||||
},
|
||||
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>
|
||||
|
||||
window.addEventListener('resize', resizeCanvas);
|
||||
window.addEventListener('onunload', () => {
|
||||
FS.syncfs(true, function (err) { console.log('Sync FS failed: ' + err) });
|
||||
})
|
||||
</script>
|
||||
|
||||
<script src="MinecraftPE.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -168,9 +168,10 @@ options.graphics.fast=Fast
|
||||
options.guiScale=GUI Scale
|
||||
options.guiScale.auto=Auto
|
||||
options.guiScale.small=Small
|
||||
options.guiScale.normal=Normal
|
||||
options.guiScale.medium=Medium
|
||||
options.guiScale.large=Large
|
||||
options.guiScale.larger=Larger
|
||||
options.guiScale.largest=Largest
|
||||
options.advancedOpengl=Advanced OpenGL
|
||||
options.renderClouds=Clouds
|
||||
options.farWarning1=A 64 bit Java installation is recommended
|
||||
|
||||
@@ -146,6 +146,7 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
||||
../../../src/util/StringUtils.cpp \
|
||||
../../../src/util/PerfTimer.cpp \
|
||||
../../../src/util/PerfRenderer.cpp \
|
||||
../../../src/util/Color.cpp \
|
||||
../../../src/world/Direction.cpp \
|
||||
../../../src/world/entity/AgableMob.cpp \
|
||||
../../../src/world/entity/Entity.cpp \
|
||||
@@ -209,6 +210,8 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
||||
../../../src/world/level/MobSpawner.cpp \
|
||||
../../../src/world/level/Region.cpp \
|
||||
../../../src/world/level/TickNextTickData.cpp \
|
||||
../../../src/world/level/FoliageColor.cpp \
|
||||
../../../src/world/level/GrassColor.cpp \
|
||||
../../../src/world/level/biome/Biome.cpp \
|
||||
../../../src/world/level/biome/BiomeSource.cpp \
|
||||
../../../src/world/level/chunk/LevelChunk.cpp \
|
||||
|
||||
@@ -168,8 +168,10 @@ options.graphics.fast=Fast
|
||||
options.guiScale=GUI Scale
|
||||
options.guiScale.auto=Auto
|
||||
options.guiScale.small=Small
|
||||
options.guiScale.normal=Normal
|
||||
options.guiScale.medium=Medium
|
||||
options.guiScale.large=Large
|
||||
options.guiScale.larger=Larger
|
||||
options.guiScale.largest=Largest
|
||||
options.advancedOpengl=Advanced OpenGL
|
||||
options.renderClouds=Clouds
|
||||
options.farWarning1=A 64 bit Java installation is recommended
|
||||
|
||||
@@ -122,6 +122,7 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
||||
../../../src/util/StringUtils.cpp \
|
||||
../../../src/util/PerfTimer.cpp \
|
||||
../../../src/util/PerfRenderer.cpp \
|
||||
../../../src/util/Color.cpp \
|
||||
../../../src/world/Direction.cpp \
|
||||
../../../src/world/entity/AgableMob.cpp \
|
||||
../../../src/world/entity/Entity.cpp \
|
||||
@@ -183,6 +184,8 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
||||
../../../src/world/level/MobSpawner.cpp \
|
||||
../../../src/world/level/Region.cpp \
|
||||
../../../src/world/level/TickNextTickData.cpp \
|
||||
../../../src/world/level/FoliageColor.cpp \
|
||||
../../../src/world/level/GrassColor.cpp \
|
||||
../../../src/world/level/biome/Biome.cpp \
|
||||
../../../src/world/level/biome/BiomeSource.cpp \
|
||||
../../../src/world/level/chunk/LevelChunk.cpp \
|
||||
|
||||
48
project/iosproj/Launch Screen.storyboard
Normal file
48
project/iosproj/Launch Screen.storyboard
Normal file
@@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/>
|
||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="EHf-IW-A2E">
|
||||
<objects>
|
||||
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="obG-Y5-kRd">
|
||||
<rect key="frame" x="0.0" y="626.5" width="375" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="minecraftpe" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb">
|
||||
<rect key="frame" x="0.0" y="202" width="375" height="43"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="Bcu-3y-fUS" firstAttribute="centerX" secondItem="obG-Y5-kRd" secondAttribute="centerX" id="5cz-MP-9tL"/>
|
||||
<constraint firstItem="Bcu-3y-fUS" firstAttribute="centerX" secondItem="GJd-Yh-RWb" secondAttribute="centerX" id="Q3B-4B-g5h"/>
|
||||
<constraint firstItem="obG-Y5-kRd" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" constant="20" symbolic="YES" id="SfN-ll-jLj"/>
|
||||
<constraint firstAttribute="bottom" secondItem="obG-Y5-kRd" secondAttribute="bottom" constant="20" id="Y44-ml-fuU"/>
|
||||
<constraint firstItem="GJd-Yh-RWb" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="bottom" multiplier="1/3" constant="1" id="moa-c2-u7t"/>
|
||||
<constraint firstItem="GJd-Yh-RWb" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" constant="20" symbolic="YES" id="x7j-FC-K8j"/>
|
||||
</constraints>
|
||||
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="53" y="375"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
||||
@@ -41,7 +41,6 @@
|
||||
042A91AE16B17517007ABBC6 /* GuiElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A316B17517007ABBC6 /* GuiElement.cpp */; };
|
||||
042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A516B17517007ABBC6 /* NinePatch.cpp */; };
|
||||
042A91B016B17517007ABBC6 /* OptionsGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A716B17517007ABBC6 /* OptionsGroup.cpp */; };
|
||||
042A91B116B17517007ABBC6 /* OptionsPane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A916B17517007ABBC6 /* OptionsPane.cpp */; };
|
||||
042A91B216B17517007ABBC6 /* TextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91AB16B17517007ABBC6 /* TextBox.cpp */; };
|
||||
044129071682FF9600B70EE6 /* MouseHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 044129061682FF9600B70EE6 /* MouseHandler.cpp */; };
|
||||
9D293CE716071C08000305C8 /* CreateNewWorld_iphone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9D293CE616071C08000305C8 /* CreateNewWorld_iphone.xib */; };
|
||||
@@ -1147,6 +1146,39 @@
|
||||
D5F3B7DD14548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C814548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib */; };
|
||||
D5F3B7DE14548E7900D25470 /* IASKSpecifierValuesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C914548E7900D25470 /* IASKSpecifierValuesView.xib */; };
|
||||
D5F3B7E51454930400D25470 /* InAppSettings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7E41454930400D25470 /* InAppSettings.bundle */; };
|
||||
F912B8CF2F6C3D5200BC60DF /* TextBox.h in Sources */ = {isa = PBXBuildFile; fileRef = 042A91AC16B17517007ABBC6 /* TextBox.h */; };
|
||||
F99D341F2F736AA100DC153E /* HttpClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D341E2F736AA100DC153E /* HttpClient.cpp */; };
|
||||
F99D34202F736AA100DC153E /* HttpClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D341E2F736AA100DC153E /* HttpClient.cpp */; };
|
||||
F99D34232F736AD400DC153E /* TextOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34222F736AD400DC153E /* TextOption.cpp */; };
|
||||
F99D34242F736AD400DC153E /* TextOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34222F736AD400DC153E /* TextOption.cpp */; };
|
||||
F99D34272F736AFB00DC153E /* OptionsFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34262F736AFB00DC153E /* OptionsFile.cpp */; };
|
||||
F99D34282F736AFB00DC153E /* OptionsFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34262F736AFB00DC153E /* OptionsFile.cpp */; };
|
||||
F99D342B2F736B6F00DC153E /* OptionsItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D342A2F736B6F00DC153E /* OptionsItem.cpp */; };
|
||||
F99D342C2F736B6F00DC153E /* OptionsItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D342A2F736B6F00DC153E /* OptionsItem.cpp */; };
|
||||
F99D342F2F736BAD00DC153E /* ConsoleScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D342E2F736BAD00DC153E /* ConsoleScreen.cpp */; };
|
||||
F99D34302F736BAD00DC153E /* ConsoleScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D342E2F736BAD00DC153E /* ConsoleScreen.cpp */; };
|
||||
F99D34332F736BDA00DC153E /* CreditsScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34322F736BDA00DC153E /* CreditsScreen.cpp */; };
|
||||
F99D34342F736BDA00DC153E /* CreditsScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34322F736BDA00DC153E /* CreditsScreen.cpp */; };
|
||||
F99D34372F736C1000DC153E /* JoinByIPScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34362F736C1000DC153E /* JoinByIPScreen.cpp */; };
|
||||
F99D34382F736C1000DC153E /* JoinByIPScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34362F736C1000DC153E /* JoinByIPScreen.cpp */; };
|
||||
F99D343B2F736C3B00DC153E /* UsernameScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D343A2F736C3B00DC153E /* UsernameScreen.cpp */; };
|
||||
F99D343C2F736C3B00DC153E /* UsernameScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D343A2F736C3B00DC153E /* UsernameScreen.cpp */; };
|
||||
F99D343F2F736C8400DC153E /* GuiElementContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D343E2F736C8400DC153E /* GuiElementContainer.cpp */; };
|
||||
F99D34402F736C8400DC153E /* GuiElementContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D343E2F736C8400DC153E /* GuiElementContainer.cpp */; };
|
||||
F99D34432F736F9400DC153E /* Option.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34422F736F9400DC153E /* Option.cpp */; };
|
||||
F99D34442F736F9400DC153E /* Option.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34422F736F9400DC153E /* Option.cpp */; };
|
||||
F99D34472F736FE800DC153E /* KeyOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34462F736FE800DC153E /* KeyOption.cpp */; };
|
||||
F99D34482F736FE800DC153E /* KeyOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34462F736FE800DC153E /* KeyOption.cpp */; };
|
||||
F99D344B2F7370CF00DC153E /* Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D344A2F7370CF00DC153E /* Slider.cpp */; };
|
||||
F99D344C2F7370CF00DC153E /* Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D344A2F7370CF00DC153E /* Slider.cpp */; };
|
||||
F99D344E2F7372A100DC153E /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F99D344D2F7372A100DC153E /* Launch Screen.storyboard */; };
|
||||
F99D344F2F7372A100DC153E /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F99D344D2F7372A100DC153E /* Launch Screen.storyboard */; };
|
||||
F99F0FA92F84369F00F2B29A /* GrassColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FA82F84369F00F2B29A /* GrassColor.cpp */; };
|
||||
F99F0FAA2F84369F00F2B29A /* GrassColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FA82F84369F00F2B29A /* GrassColor.cpp */; };
|
||||
F99F0FAC2F8436CE00F2B29A /* FoliageColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */; };
|
||||
F99F0FAD2F8436CE00F2B29A /* FoliageColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */; };
|
||||
F99F0FAF2F8436EB00F2B29A /* Color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAE2F8436EB00F2B29A /* Color.cpp */; };
|
||||
F99F0FB02F8436EB00F2B29A /* Color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAE2F8436EB00F2B29A /* Color.cpp */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
@@ -1208,10 +1240,8 @@
|
||||
042A91A616B17517007ABBC6 /* NinePatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NinePatch.h; sourceTree = "<group>"; };
|
||||
042A91A716B17517007ABBC6 /* OptionsGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OptionsGroup.cpp; sourceTree = "<group>"; };
|
||||
042A91A816B17517007ABBC6 /* OptionsGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionsGroup.h; sourceTree = "<group>"; };
|
||||
042A91A916B17517007ABBC6 /* OptionsPane.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OptionsPane.cpp; sourceTree = "<group>"; };
|
||||
042A91AA16B17517007ABBC6 /* OptionsPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionsPane.h; sourceTree = "<group>"; };
|
||||
042A91AB16B17517007ABBC6 /* TextBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextBox.cpp; sourceTree = "<group>"; };
|
||||
042A91AC16B17517007ABBC6 /* TextBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextBox.h; sourceTree = "<group>"; };
|
||||
042A91AC16B17517007ABBC6 /* TextBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextBox.h; path = ../../src/client/gui/components/TextBox.h; sourceTree = SOURCE_ROOT; };
|
||||
044129061682FF9600B70EE6 /* MouseHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseHandler.cpp; sourceTree = "<group>"; };
|
||||
9D293CE616071C08000305C8 /* CreateNewWorld_iphone.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CreateNewWorld_iphone.xib; path = minecraftpe/dialogs/CreateNewWorld_iphone.xib; sourceTree = "<group>"; };
|
||||
9D293CEA160720D6000305C8 /* worldname_iphone5_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = worldname_iphone5_3.png; sourceTree = "<group>"; };
|
||||
@@ -2017,7 +2047,7 @@
|
||||
D5B50D6914CFF66F005F7284 /* Multitouch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Multitouch.h; sourceTree = "<group>"; };
|
||||
D5B50D6A14CFF66F005F7284 /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = "<group>"; };
|
||||
D5B50D6B14CFF66F005F7284 /* time.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = time.cpp; sourceTree = "<group>"; };
|
||||
D5B50D6C14CFF66F005F7284 /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time.h; sourceTree = "<group>"; };
|
||||
D5B50D6C14CFF66F005F7284 /* time.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = time.h; sourceTree = "<group>"; };
|
||||
D5B50E5614CFF66F005F7284 /* SharedConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedConstants.h; sourceTree = "<group>"; };
|
||||
D5B50E5714CFF66F005F7284 /* terrain_4444.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = terrain_4444.h; sourceTree = "<group>"; };
|
||||
D5B50E5814CFF66F005F7284 /* terrain_5551.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = terrain_5551.h; sourceTree = "<group>"; };
|
||||
@@ -2408,6 +2438,34 @@
|
||||
D5F3B7C814548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKPSToggleSwitchSpecifierViewCell.xib; sourceTree = "<group>"; };
|
||||
D5F3B7C914548E7900D25470 /* IASKSpecifierValuesView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKSpecifierValuesView.xib; sourceTree = "<group>"; };
|
||||
D5F3B7E41454930400D25470 /* InAppSettings.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.installer-pkg"; path = InAppSettings.bundle; sourceTree = "<group>"; };
|
||||
F99D341D2F736AA100DC153E /* HttpClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HttpClient.h; path = ../../src/platform/HttpClient.h; sourceTree = "<group>"; };
|
||||
F99D341E2F736AA100DC153E /* HttpClient.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = HttpClient.cpp; path = ../../src/platform/HttpClient.cpp; sourceTree = "<group>"; };
|
||||
F99D34212F736AD400DC153E /* TextOption.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TextOption.h; path = ../../src/client/gui/components/TextOption.h; sourceTree = "<group>"; };
|
||||
F99D34222F736AD400DC153E /* TextOption.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TextOption.cpp; path = ../../src/client/gui/components/TextOption.cpp; sourceTree = "<unknown>"; };
|
||||
F99D34252F736AFB00DC153E /* OptionsFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OptionsFile.h; path = ../../src/client/OptionsFile.h; sourceTree = "<group>"; };
|
||||
F99D34262F736AFB00DC153E /* OptionsFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = OptionsFile.cpp; path = ../../src/client/OptionsFile.cpp; sourceTree = "<group>"; };
|
||||
F99D34292F736B6F00DC153E /* OptionsItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OptionsItem.h; path = ../../src/client/gui/components/OptionsItem.h; sourceTree = "<group>"; };
|
||||
F99D342A2F736B6F00DC153E /* OptionsItem.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = OptionsItem.cpp; path = ../../src/client/gui/components/OptionsItem.cpp; sourceTree = "<group>"; };
|
||||
F99D342D2F736BAD00DC153E /* ConsoleScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ConsoleScreen.h; path = ../../src/client/gui/screens/ConsoleScreen.h; sourceTree = "<group>"; };
|
||||
F99D342E2F736BAD00DC153E /* ConsoleScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ConsoleScreen.cpp; path = ../../src/client/gui/screens/ConsoleScreen.cpp; sourceTree = "<group>"; };
|
||||
F99D34312F736BDA00DC153E /* CreditsScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CreditsScreen.h; path = ../../src/client/gui/screens/CreditsScreen.h; sourceTree = "<group>"; };
|
||||
F99D34322F736BDA00DC153E /* CreditsScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CreditsScreen.cpp; path = ../../src/client/gui/screens/CreditsScreen.cpp; sourceTree = "<group>"; };
|
||||
F99D34352F736C1000DC153E /* JoinByIPScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JoinByIPScreen.h; path = ../../src/client/gui/screens/JoinByIPScreen.h; sourceTree = "<group>"; };
|
||||
F99D34362F736C1000DC153E /* JoinByIPScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = JoinByIPScreen.cpp; path = ../../src/client/gui/screens/JoinByIPScreen.cpp; sourceTree = "<group>"; };
|
||||
F99D34392F736C3B00DC153E /* UsernameScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = UsernameScreen.h; path = ../../src/client/gui/screens/UsernameScreen.h; sourceTree = "<group>"; };
|
||||
F99D343A2F736C3B00DC153E /* UsernameScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = UsernameScreen.cpp; path = ../../src/client/gui/screens/UsernameScreen.cpp; sourceTree = "<group>"; };
|
||||
F99D343D2F736C8400DC153E /* GuiElementContainer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GuiElementContainer.h; path = ../../src/client/gui/components/GuiElementContainer.h; sourceTree = "<group>"; };
|
||||
F99D343E2F736C8400DC153E /* GuiElementContainer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = GuiElementContainer.cpp; path = ../../src/client/gui/components/GuiElementContainer.cpp; sourceTree = "<group>"; };
|
||||
F99D34412F736F9400DC153E /* Option.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Option.h; path = ../../src/client/Option.h; sourceTree = "<group>"; };
|
||||
F99D34422F736F9400DC153E /* Option.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Option.cpp; path = ../../src/client/Option.cpp; sourceTree = "<group>"; };
|
||||
F99D34452F736FE800DC153E /* KeyOption.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = KeyOption.h; path = ../../src/client/gui/components/KeyOption.h; sourceTree = "<group>"; };
|
||||
F99D34462F736FE800DC153E /* KeyOption.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = KeyOption.cpp; path = ../../src/client/gui/components/KeyOption.cpp; sourceTree = "<group>"; };
|
||||
F99D34492F7370CF00DC153E /* Slider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Slider.h; path = ../../src/client/gui/components/Slider.h; sourceTree = "<group>"; };
|
||||
F99D344A2F7370CF00DC153E /* Slider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Slider.cpp; path = ../../src/client/gui/components/Slider.cpp; sourceTree = "<group>"; };
|
||||
F99D344D2F7372A100DC153E /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
|
||||
F99F0FA82F84369F00F2B29A /* GrassColor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GrassColor.cpp; sourceTree = "<group>"; };
|
||||
F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FoliageColor.cpp; sourceTree = "<group>"; };
|
||||
F99F0FAE2F8436EB00F2B29A /* Color.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Color.cpp; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -3226,8 +3284,6 @@
|
||||
042A91A616B17517007ABBC6 /* NinePatch.h */,
|
||||
042A91A716B17517007ABBC6 /* OptionsGroup.cpp */,
|
||||
042A91A816B17517007ABBC6 /* OptionsGroup.h */,
|
||||
042A91A916B17517007ABBC6 /* OptionsPane.cpp */,
|
||||
042A91AA16B17517007ABBC6 /* OptionsPane.h */,
|
||||
042A91AB16B17517007ABBC6 /* TextBox.cpp */,
|
||||
042A91AC16B17517007ABBC6 /* TextBox.h */,
|
||||
D5B50C2814CFF66F005F7284 /* Button.cpp */,
|
||||
@@ -3714,6 +3770,7 @@
|
||||
D5B50E6914CFF66F005F7284 /* StringUtils.cpp */,
|
||||
D5B50E6A14CFF66F005F7284 /* StringUtils.h */,
|
||||
D5B50E6B14CFF66F005F7284 /* WeighedRandom.h */,
|
||||
F99F0FAE2F8436EB00F2B29A /* Color.cpp */,
|
||||
);
|
||||
path = util;
|
||||
sourceTree = "<group>";
|
||||
@@ -3978,6 +4035,8 @@
|
||||
D5B50F3714CFF66F005F7284 /* TickNextTickData.h */,
|
||||
D5B50F3814CFF66F005F7284 /* tile */,
|
||||
D5B50F6814CFF66F005F7284 /* TilePos.h */,
|
||||
F99F0FA82F84369F00F2B29A /* GrassColor.cpp */,
|
||||
F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */,
|
||||
);
|
||||
path = level;
|
||||
sourceTree = "<group>";
|
||||
@@ -4256,6 +4315,7 @@
|
||||
D5CF9C37144C225000E4244F = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F99D344D2F7372A100DC153E /* Launch Screen.storyboard */,
|
||||
D5E1BA9A1451C8A0007DCC4F /* Default@2x.png */,
|
||||
9D959AFF16036BEE00E23A6F /* Default-568h@2x.png */,
|
||||
D5F07744145EF79B00EC30FB /* Default-Landscape~ipad.png */,
|
||||
@@ -4267,6 +4327,30 @@
|
||||
D5CF9C45144C225000E4244F /* Frameworks */,
|
||||
D5CF9C43144C225000E4244F /* Products */,
|
||||
D5B50C1614CFF66F005F7284 /* src */,
|
||||
F99D341D2F736AA100DC153E /* HttpClient.h */,
|
||||
F99D341E2F736AA100DC153E /* HttpClient.cpp */,
|
||||
F99D34212F736AD400DC153E /* TextOption.h */,
|
||||
F99D34222F736AD400DC153E /* TextOption.cpp */,
|
||||
F99D34252F736AFB00DC153E /* OptionsFile.h */,
|
||||
F99D34262F736AFB00DC153E /* OptionsFile.cpp */,
|
||||
F99D34292F736B6F00DC153E /* OptionsItem.h */,
|
||||
F99D342A2F736B6F00DC153E /* OptionsItem.cpp */,
|
||||
F99D342D2F736BAD00DC153E /* ConsoleScreen.h */,
|
||||
F99D342E2F736BAD00DC153E /* ConsoleScreen.cpp */,
|
||||
F99D34312F736BDA00DC153E /* CreditsScreen.h */,
|
||||
F99D34322F736BDA00DC153E /* CreditsScreen.cpp */,
|
||||
F99D34352F736C1000DC153E /* JoinByIPScreen.h */,
|
||||
F99D34362F736C1000DC153E /* JoinByIPScreen.cpp */,
|
||||
F99D34392F736C3B00DC153E /* UsernameScreen.h */,
|
||||
F99D343A2F736C3B00DC153E /* UsernameScreen.cpp */,
|
||||
F99D343D2F736C8400DC153E /* GuiElementContainer.h */,
|
||||
F99D343E2F736C8400DC153E /* GuiElementContainer.cpp */,
|
||||
F99D34412F736F9400DC153E /* Option.h */,
|
||||
F99D34422F736F9400DC153E /* Option.cpp */,
|
||||
F99D34452F736FE800DC153E /* KeyOption.h */,
|
||||
F99D34462F736FE800DC153E /* KeyOption.cpp */,
|
||||
F99D34492F7370CF00DC153E /* Slider.h */,
|
||||
F99D344A2F7370CF00DC153E /* Slider.cpp */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
@@ -4527,10 +4611,16 @@
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0420;
|
||||
TargetAttributes = {
|
||||
D5CF9C41144C225000E4244F = {
|
||||
DevelopmentTeam = PZUVNW8F2U;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = D5CF9C3C144C225000E4244F /* Build configuration list for PBXProject "minecraftpe" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
@@ -4599,6 +4689,7 @@
|
||||
D5B50A5614CFF492005F7284 /* pig.png in Resources */,
|
||||
D5B50A5814CFF492005F7284 /* sheep_fur.png in Resources */,
|
||||
D5B50A5A14CFF492005F7284 /* sheep.png in Resources */,
|
||||
F99D344F2F7372A100DC153E /* Launch Screen.storyboard in Resources */,
|
||||
D5B50A5C14CFF492005F7284 /* skeleton.png in Resources */,
|
||||
D5B50A5E14CFF492005F7284 /* spider.png in Resources */,
|
||||
D5B50A6014CFF492005F7284 /* zombie.png in Resources */,
|
||||
@@ -4935,6 +5026,7 @@
|
||||
D5ACF26F15C03DBF00E21C22 /* sand2.m4a in Resources */,
|
||||
D5ACF27115C03DBF00E21C22 /* sand3.m4a in Resources */,
|
||||
D5ACF27315C03DBF00E21C22 /* sand4.m4a in Resources */,
|
||||
F99D344E2F7372A100DC153E /* Launch Screen.storyboard in Resources */,
|
||||
D5ACF27515C03DBF00E21C22 /* snow1.m4a in Resources */,
|
||||
D5ACF27715C03DBF00E21C22 /* snow2.m4a in Resources */,
|
||||
D5ACF27915C03DBF00E21C22 /* snow3.m4a in Resources */,
|
||||
@@ -5011,18 +5103,22 @@
|
||||
D58BB544146A0B910002C9F5 /* IASKSettingsStore.m in Sources */,
|
||||
D58BB545146A0B910002C9F5 /* IASKSettingsStoreFile.m in Sources */,
|
||||
D58BB546146A0B910002C9F5 /* IASKSettingsStoreUserDefaults.m in Sources */,
|
||||
F99D34232F736AD400DC153E /* TextOption.cpp in Sources */,
|
||||
D58BB547146A0B910002C9F5 /* IASKSpecifier.m in Sources */,
|
||||
D58BB548146A0B910002C9F5 /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
||||
D58BB549146A0B910002C9F5 /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
||||
D58BB54A146A0B910002C9F5 /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
||||
D58BB54B146A0B910002C9F5 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
|
||||
F99D343B2F736C3B00DC153E /* UsernameScreen.cpp in Sources */,
|
||||
D58BB54C146A0B910002C9F5 /* IASKSlider.m in Sources */,
|
||||
D58BB54D146A0B910002C9F5 /* IASKSwitch.m in Sources */,
|
||||
F99D34302F736BAD00DC153E /* ConsoleScreen.cpp in Sources */,
|
||||
D58BB54E146A0B910002C9F5 /* IASKTextField.m in Sources */,
|
||||
D58BB550146A0B910002C9F5 /* PVRTexture.m in Sources */,
|
||||
D5D43CC9146AF4B4002ED842 /* RenameMPWorldViewController.mm in Sources */,
|
||||
D5B50F7014CFF670005F7284 /* AppPlatform_iOS.mm in Sources */,
|
||||
D5B50F7414CFF670005F7284 /* CreativeMode.cpp in Sources */,
|
||||
F99D34432F736F9400DC153E /* Option.cpp in Sources */,
|
||||
D5B50F7614CFF670005F7284 /* GameMode.cpp in Sources */,
|
||||
D5B50F7814CFF670005F7284 /* Button.cpp in Sources */,
|
||||
D5B50F7A14CFF670005F7284 /* ImageButton.cpp in Sources */,
|
||||
@@ -5067,6 +5163,7 @@
|
||||
D5B50FC814CFF670005F7284 /* KeyboardInput.cpp in Sources */,
|
||||
D5B50FCA14CFF670005F7284 /* TouchscreenInput.cpp in Sources */,
|
||||
D5B50FCC14CFF670005F7284 /* LocalPlayer.cpp in Sources */,
|
||||
F99D34482F736FE800DC153E /* KeyOption.cpp in Sources */,
|
||||
D5B50FCE14CFF670005F7284 /* Chunk.cpp in Sources */,
|
||||
D5B50FD014CFF670005F7284 /* Frustum.cpp in Sources */,
|
||||
D5B50FD214CFF670005F7284 /* ChickenRenderer.cpp in Sources */,
|
||||
@@ -5109,6 +5206,7 @@
|
||||
D5B5111014CFF670005F7284 /* Mth.cpp in Sources */,
|
||||
D5B5111214CFF670005F7284 /* PerfRenderer.cpp in Sources */,
|
||||
D5B5111414CFF670005F7284 /* PerfTimer.cpp in Sources */,
|
||||
F99F0FA92F84369F00F2B29A /* GrassColor.cpp in Sources */,
|
||||
D5B5111614CFF670005F7284 /* StringUtils.cpp in Sources */,
|
||||
D5B5111814CFF670005F7284 /* Direction.cpp in Sources */,
|
||||
D5B5111A14CFF670005F7284 /* Animal.cpp in Sources */,
|
||||
@@ -5125,17 +5223,21 @@
|
||||
D5B5113014CFF670005F7284 /* TripodCamera.cpp in Sources */,
|
||||
D5B5113214CFF670005F7284 /* Mob.cpp in Sources */,
|
||||
D5B5113414CFF670005F7284 /* MobCategory.cpp in Sources */,
|
||||
F99D34282F736AFB00DC153E /* OptionsFile.cpp in Sources */,
|
||||
D5B5113814CFF670005F7284 /* PathFinderMob.cpp in Sources */,
|
||||
D5B5113A14CFF670005F7284 /* Inventory.cpp in Sources */,
|
||||
D5B5113C14CFF670005F7284 /* Player.cpp in Sources */,
|
||||
F99F0FB02F8436EB00F2B29A /* Color.cpp in Sources */,
|
||||
D5B5113E14CFF670005F7284 /* Arrow.cpp in Sources */,
|
||||
D5B5114014CFF670005F7284 /* Recipes.cpp in Sources */,
|
||||
D5B5114214CFF670005F7284 /* ToolRecipes.cpp in Sources */,
|
||||
D5B5114414CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
|
||||
D5B5114614CFF670005F7284 /* HatchetItem.cpp in Sources */,
|
||||
D5B5114814CFF670005F7284 /* Item.cpp in Sources */,
|
||||
F99F0FAC2F8436CE00F2B29A /* FoliageColor.cpp in Sources */,
|
||||
D5B5114A14CFF670005F7284 /* ItemInstance.cpp in Sources */,
|
||||
D5B5114C14CFF670005F7284 /* PickaxeItem.cpp in Sources */,
|
||||
F99D344B2F7370CF00DC153E /* Slider.cpp in Sources */,
|
||||
D5B5114E14CFF670005F7284 /* ShovelItem.cpp in Sources */,
|
||||
D5B5115014CFF670005F7284 /* Biome.cpp in Sources */,
|
||||
D5B5115214CFF670005F7284 /* BiomeSource.cpp in Sources */,
|
||||
@@ -5186,6 +5288,7 @@
|
||||
D5251DBA1538192700FC82C8 /* CloudServer.cpp in Sources */,
|
||||
D5251DBE1538192700FC82C8 /* CommandParserInterface.cpp in Sources */,
|
||||
D5251DC01538192700FC82C8 /* ConnectionGraph2.cpp in Sources */,
|
||||
F99D34402F736C8400DC153E /* GuiElementContainer.cpp in Sources */,
|
||||
D5251DC21538192700FC82C8 /* ConsoleServer.cpp in Sources */,
|
||||
D5251DC41538192700FC82C8 /* DataCompressor.cpp in Sources */,
|
||||
D5251DC61538192700FC82C8 /* DirectoryDeltaTransfer.cpp in Sources */,
|
||||
@@ -5210,6 +5313,8 @@
|
||||
D5251DEC1538192700FC82C8 /* HTTPConnection.cpp in Sources */,
|
||||
D5251DEE1538192700FC82C8 /* IncrementalReadInterface.cpp in Sources */,
|
||||
D5251DF01538192700FC82C8 /* Itoa.cpp in Sources */,
|
||||
F99D34202F736AA100DC153E /* HttpClient.cpp in Sources */,
|
||||
F99D34382F736C1000DC153E /* JoinByIPScreen.cpp in Sources */,
|
||||
D5251DF21538192700FC82C8 /* LinuxStrings.cpp in Sources */,
|
||||
D5251DF41538192700FC82C8 /* LocklessTypes.cpp in Sources */,
|
||||
D5251DF61538192700FC82C8 /* LogCommandParser.cpp in Sources */,
|
||||
@@ -5238,6 +5343,7 @@
|
||||
D5251E2A1538192700FC82C8 /* RakSleep.cpp in Sources */,
|
||||
D5251E2C1538192700FC82C8 /* RakString.cpp in Sources */,
|
||||
D5251E2E1538192700FC82C8 /* RakThread.cpp in Sources */,
|
||||
F99D34332F736BDA00DC153E /* CreditsScreen.cpp in Sources */,
|
||||
D5251E301538192700FC82C8 /* RakWString.cpp in Sources */,
|
||||
D5251E321538192700FC82C8 /* Rand.cpp in Sources */,
|
||||
D5251E341538192700FC82C8 /* rdlmalloc.cpp in Sources */,
|
||||
@@ -5280,6 +5386,7 @@
|
||||
D5951EEB159349100043A12A /* TileEntity.cpp in Sources */,
|
||||
D5951EEF159349680043A12A /* FurnaceScreen.cpp in Sources */,
|
||||
D5951EF215934A2D0043A12A /* Feature.cpp in Sources */,
|
||||
F99D342C2F736B6F00DC153E /* OptionsItem.cpp in Sources */,
|
||||
D5951EF815934AC50043A12A /* BaseContainerMenu.cpp in Sources */,
|
||||
D5951EFA15934AC50043A12A /* FurnaceMenu.cpp in Sources */,
|
||||
D5D381F315A1A1CF00B6C50E /* FillingContainer.cpp in Sources */,
|
||||
@@ -5339,8 +5446,10 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
F912B8CF2F6C3D5200BC60DF /* TextBox.h in Sources */,
|
||||
D5CF9C57144C225000E4244F /* main.mm in Sources */,
|
||||
D5CF9C5B144C225000E4244F /* minecraftpeAppDelegate.mm in Sources */,
|
||||
F99D343C2F736C3B00DC153E /* UsernameScreen.cpp in Sources */,
|
||||
D5CF9C65144C225000E4244F /* EAGLView.m in Sources */,
|
||||
D5CFA01D144C453900E4244F /* minecraftpeViewController.mm in Sources */,
|
||||
D5A55E4914500EDE00A7571B /* CreateNewWorldViewController.mm in Sources */,
|
||||
@@ -5354,6 +5463,7 @@
|
||||
D5F3B7D014548E7900D25470 /* IASKSettingsStoreUserDefaults.m in Sources */,
|
||||
D5F3B7D114548E7900D25470 /* IASKSpecifier.m in Sources */,
|
||||
D5F3B7D214548E7900D25470 /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
||||
F99D34472F736FE800DC153E /* KeyOption.cpp in Sources */,
|
||||
D5F3B7D314548E7900D25470 /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
||||
D5F3B7D414548E7900D25470 /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
||||
D5F3B7D514548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
|
||||
@@ -5433,6 +5543,7 @@
|
||||
D5B5102F14CFF670005F7284 /* main.cpp in Sources */,
|
||||
D5B5103514CFF670005F7284 /* Tag.cpp in Sources */,
|
||||
D5B5103714CFF670005F7284 /* ClientSideNetworkHandler.cpp in Sources */,
|
||||
F99F0FAF2F8436EB00F2B29A /* Color.cpp in Sources */,
|
||||
D5B5103914CFF670005F7284 /* NetEventCallback.cpp in Sources */,
|
||||
D5B5103B14CFF670005F7284 /* Packet.cpp in Sources */,
|
||||
D5B5103D14CFF670005F7284 /* RakNetInstance.cpp in Sources */,
|
||||
@@ -5453,6 +5564,7 @@
|
||||
D5B5111514CFF670005F7284 /* StringUtils.cpp in Sources */,
|
||||
D5B5111714CFF670005F7284 /* Direction.cpp in Sources */,
|
||||
D5B5111914CFF670005F7284 /* Animal.cpp in Sources */,
|
||||
F99F0FAD2F8436CE00F2B29A /* FoliageColor.cpp in Sources */,
|
||||
D5B5111B14CFF670005F7284 /* Chicken.cpp in Sources */,
|
||||
D5B5111D14CFF670005F7284 /* Cow.cpp in Sources */,
|
||||
D5B5111F14CFF670005F7284 /* Pig.cpp in Sources */,
|
||||
@@ -5465,11 +5577,13 @@
|
||||
D5B5112D14CFF670005F7284 /* PrimedTnt.cpp in Sources */,
|
||||
D5B5112F14CFF670005F7284 /* TripodCamera.cpp in Sources */,
|
||||
D5B5113114CFF670005F7284 /* Mob.cpp in Sources */,
|
||||
F99D34442F736F9400DC153E /* Option.cpp in Sources */,
|
||||
D5B5113314CFF670005F7284 /* MobCategory.cpp in Sources */,
|
||||
D5B5113714CFF670005F7284 /* PathFinderMob.cpp in Sources */,
|
||||
D5B5113914CFF670005F7284 /* Inventory.cpp in Sources */,
|
||||
D5B5113B14CFF670005F7284 /* Player.cpp in Sources */,
|
||||
D5B5113D14CFF670005F7284 /* Arrow.cpp in Sources */,
|
||||
F99D343F2F736C8400DC153E /* GuiElementContainer.cpp in Sources */,
|
||||
D5B5113F14CFF670005F7284 /* Recipes.cpp in Sources */,
|
||||
D5B5114114CFF670005F7284 /* ToolRecipes.cpp in Sources */,
|
||||
D5B5114314CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
|
||||
@@ -5501,16 +5615,19 @@
|
||||
D5B5117714CFF670005F7284 /* ExternalFileLevelStorageSource.cpp in Sources */,
|
||||
D5B5117914CFF670005F7284 /* RegionFile.cpp in Sources */,
|
||||
D5B5117B14CFF670005F7284 /* TickNextTickData.cpp in Sources */,
|
||||
F99F0FAA2F84369F00F2B29A /* GrassColor.cpp in Sources */,
|
||||
D5B5117D14CFF670005F7284 /* DoorTile.cpp in Sources */,
|
||||
D5B5118114CFF670005F7284 /* StoneSlabTile.cpp in Sources */,
|
||||
D5B5118314CFF670005F7284 /* Tile.cpp in Sources */,
|
||||
D5B5118514CFF670005F7284 /* HitResult.cpp in Sources */,
|
||||
D5B5118B14D03342005F7284 /* SynchedEntityData.cpp in Sources */,
|
||||
D5B5118E14DEA27F005F7284 /* DeathScreen.cpp in Sources */,
|
||||
F99D34242F736AD400DC153E /* TextOption.cpp in Sources */,
|
||||
D5B5119114DEA2B7005F7284 /* LevelData.cpp in Sources */,
|
||||
D5B5119414DEA2EF005F7284 /* DyePowderItem.cpp in Sources */,
|
||||
D584926D14FD234400741128 /* SharedConstants.cpp in Sources */,
|
||||
D584927314FD236700741128 /* MoveControl.cpp in Sources */,
|
||||
F99D344C2F7370CF00DC153E /* Slider.cpp in Sources */,
|
||||
D584928614FD240D00741128 /* IConfigListener.cpp in Sources */,
|
||||
D584928914FD2FAF00741128 /* Path.cpp in Sources */,
|
||||
D5B86281153810BD00F3238A /* I18n.cpp in Sources */,
|
||||
@@ -5562,6 +5679,7 @@
|
||||
D5251E011538192700FC82C8 /* NatTypeDetectionServer.cpp in Sources */,
|
||||
D5251E031538192700FC82C8 /* NetworkIDManager.cpp in Sources */,
|
||||
D5251E051538192700FC82C8 /* NetworkIDObject.cpp in Sources */,
|
||||
F99D34372F736C1000DC153E /* JoinByIPScreen.cpp in Sources */,
|
||||
D5251E071538192700FC82C8 /* PacketConsoleLogger.cpp in Sources */,
|
||||
D5251E091538192700FC82C8 /* PacketFileLogger.cpp in Sources */,
|
||||
D5251E0B1538192700FC82C8 /* PacketizedTCP.cpp in Sources */,
|
||||
@@ -5591,11 +5709,13 @@
|
||||
D5251E411538192700FC82C8 /* SendToThread.cpp in Sources */,
|
||||
D5251E431538192700FC82C8 /* SHA1.cpp in Sources */,
|
||||
D5251E451538192700FC82C8 /* SignaledEvent.cpp in Sources */,
|
||||
F99D34342F736BDA00DC153E /* CreditsScreen.cpp in Sources */,
|
||||
D5251E471538192700FC82C8 /* SimpleMutex.cpp in Sources */,
|
||||
D5251E491538192700FC82C8 /* SocketLayer.cpp in Sources */,
|
||||
D5251E4B1538192700FC82C8 /* StringCompressor.cpp in Sources */,
|
||||
D5251E4D1538192700FC82C8 /* StringTable.cpp in Sources */,
|
||||
D5251E4F1538192700FC82C8 /* SuperFastHash.cpp in Sources */,
|
||||
F99D342B2F736B6F00DC153E /* OptionsItem.cpp in Sources */,
|
||||
D5251E511538192700FC82C8 /* TableSerializer.cpp in Sources */,
|
||||
D5251E531538192700FC82C8 /* TCPInterface.cpp in Sources */,
|
||||
D5251E551538192700FC82C8 /* TeamBalancer.cpp in Sources */,
|
||||
@@ -5618,6 +5738,7 @@
|
||||
D5951EDD159348C50043A12A /* ItemPane.cpp in Sources */,
|
||||
D5951EE3159349000043A12A /* FurnaceTile.cpp in Sources */,
|
||||
D5951EE8159349100043A12A /* FurnaceTileEntity.cpp in Sources */,
|
||||
F99D342F2F736BAD00DC153E /* ConsoleScreen.cpp in Sources */,
|
||||
D5951EEA159349100043A12A /* TileEntity.cpp in Sources */,
|
||||
D5951EEE159349680043A12A /* FurnaceScreen.cpp in Sources */,
|
||||
D5951EF115934A2D0043A12A /* Feature.cpp in Sources */,
|
||||
@@ -5654,6 +5775,7 @@
|
||||
D544941E15D13F45005FA9B0 /* PlayerRenderer.cpp in Sources */,
|
||||
D544942215D13F5E005FA9B0 /* RemotePlayer.cpp in Sources */,
|
||||
D5B17ED515E226F50056E751 /* Throwable.cpp in Sources */,
|
||||
F99D341F2F736AA100DC153E /* HttpClient.cpp in Sources */,
|
||||
D5B17ED915E2273F0056E751 /* SurvivalMode.cpp in Sources */,
|
||||
D5B17EDD15E227670056E751 /* TrapDoorTile.cpp in Sources */,
|
||||
D5B17EE115E260910056E751 /* MoveFolder.mm in Sources */,
|
||||
@@ -5689,6 +5811,7 @@
|
||||
0400453A16A4125C003EB6FA /* FallingTileRenderer.cpp in Sources */,
|
||||
0413970716A82E1E008A9F1A /* ArmorItem.cpp in Sources */,
|
||||
0413970D16A82E6B008A9F1A /* CraftingFilters.cpp in Sources */,
|
||||
F99D34272F736AFB00DC153E /* OptionsFile.cpp in Sources */,
|
||||
0413970E16A82E6B008A9F1A /* StonecutterScreen.cpp in Sources */,
|
||||
0413971116A82E7B008A9F1A /* ArmorScreen.cpp in Sources */,
|
||||
0413971516A82EB9008A9F1A /* ArmorRecipes.cpp in Sources */,
|
||||
@@ -5697,7 +5820,6 @@
|
||||
042A91AE16B17517007ABBC6 /* GuiElement.cpp in Sources */,
|
||||
042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */,
|
||||
042A91B016B17517007ABBC6 /* OptionsGroup.cpp in Sources */,
|
||||
042A91B116B17517007ABBC6 /* OptionsPane.cpp in Sources */,
|
||||
042A91B216B17517007ABBC6 /* TextBox.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -5735,25 +5857,29 @@
|
||||
D50BE20815EE05B8008AA75E /* Ad-Hoc */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
|
||||
ALWAYS_SEARCH_USER_PATHS = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD)";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_VERSION = "";
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "C93D3524-5C6F-466E-B12B-833663B7EAE0";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos6.0;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
USE_HEADERMAP = NO;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = "Ad-Hoc";
|
||||
@@ -5765,15 +5891,26 @@
|
||||
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = "";
|
||||
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_VERSION = "";
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
||||
HEADER_SEARCH_PATHS = "";
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(SRCROOT)/../../src",
|
||||
"$(SRCROOT)/../../src/client/gui/components",
|
||||
"$(SRCROOT)/../../src/world",
|
||||
"$(SRCROOT)/../../src/platform/input",
|
||||
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
|
||||
);
|
||||
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos6.0;
|
||||
VALID_ARCHS = "i386 armv6 armv7";
|
||||
SDKROOT = iphoneos;
|
||||
SYSTEM_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../lib_projects/InAppSettingsKit/Models $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USE_HEADERMAP = NO;
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = "Ad-Hoc";
|
||||
@@ -5846,24 +5983,28 @@
|
||||
D5A20ADB146AAD9C00A52FEC /* AppStore */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
|
||||
ALWAYS_SEARCH_USER_PATHS = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD)";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_VERSION = "";
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "64BA8967-1A9A-4980-972C-42E75AD5E023";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos6.0;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
USE_HEADERMAP = NO;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = AppStore;
|
||||
@@ -5876,11 +6017,19 @@
|
||||
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
|
||||
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_VERSION = "";
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
||||
HEADER_SEARCH_PATHS = "";
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(SRCROOT)/../../src",
|
||||
"$(SRCROOT)/../../src/client/gui/components",
|
||||
"$(SRCROOT)/../../src/world",
|
||||
"$(SRCROOT)/../../src/platform/input",
|
||||
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
|
||||
);
|
||||
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_CFLAGS = (
|
||||
"-DNS_BLOCK_ASSERTIONS=1",
|
||||
"-DANDROID_PUBLISH",
|
||||
@@ -5888,8 +6037,10 @@
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "1B194957-98CF-49B7-A0E7-76692B4B722D";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos6.0;
|
||||
VALID_ARCHS = "i386 armv6 armv7";
|
||||
SDKROOT = iphoneos;
|
||||
SYSTEM_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../lib_projects/InAppSettingsKit/Models $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USE_HEADERMAP = NO;
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = AppStore;
|
||||
@@ -5922,8 +6073,8 @@
|
||||
D5CF9C6C144C225000E4244F /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
|
||||
ALWAYS_SEARCH_USER_PATHS = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD)";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
@@ -5935,41 +6086,50 @@
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_VERSION = "";
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos6.0;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
USE_HEADERMAP = NO;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
D5CF9C6D144C225000E4244F /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
|
||||
ALWAYS_SEARCH_USER_PATHS = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD)";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_VERSION = "";
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos6.0;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
USE_HEADERMAP = NO;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
@@ -5977,19 +6137,34 @@
|
||||
D5CF9C6F144C225000E4244F /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = PZUVNW8F2U;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
|
||||
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_VERSION = "";
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
||||
HEADER_SEARCH_PATHS = "";
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(SRCROOT)/../../src",
|
||||
"$(SRCROOT)/../../src/client/gui/components",
|
||||
"$(SRCROOT)/../../src/world",
|
||||
"$(SRCROOT)/../../src/platform/input",
|
||||
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
|
||||
);
|
||||
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos6.0;
|
||||
VALID_ARCHS = "i386 armv6 armv7";
|
||||
SDKROOT = iphoneos;
|
||||
SYSTEM_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../lib_projects/InAppSettingsKit/Models $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USE_HEADERMAP = NO;
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = Debug;
|
||||
@@ -5997,19 +6172,34 @@
|
||||
D5CF9C70144C225000E4244F /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = PZUVNW8F2U;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = "";
|
||||
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_VERSION = "";
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
||||
HEADER_SEARCH_PATHS = "";
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(SRCROOT)/../../src",
|
||||
"$(SRCROOT)/../../src/client/gui/components",
|
||||
"$(SRCROOT)/../../src/world",
|
||||
"$(SRCROOT)/../../src/platform/input",
|
||||
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
|
||||
);
|
||||
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos6.0;
|
||||
VALID_ARCHS = "i386 armv6 armv7";
|
||||
SDKROOT = iphoneos;
|
||||
SYSTEM_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../lib_projects/InAppSettingsKit/Models $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USE_HEADERMAP = NO;
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = Release;
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
</dict>
|
||||
</dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.mojang.${PRODUCT_NAME:rfc1034identifier}</string>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
@@ -58,6 +58,8 @@
|
||||
<array>
|
||||
<string>minecraft.ttf</string>
|
||||
</array>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>Launch Screen</string>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<true/>
|
||||
<key>UIRequiresPersistentWiFi</key>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#if defined(X360__)
|
||||
#elif defined (_WIN32)
|
||||
#include <WinSock2.h>
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <Ws2tcpip.h>
|
||||
#include <ws2tcpip.h>
|
||||
|
||||
// Must always include Winsock2.h before windows.h
|
||||
// or else:
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
#include <shellapi.h>
|
||||
#endif
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
#include <emscripten/html5.h>
|
||||
#endif
|
||||
|
||||
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);
|
||||
}
|
||||
@@ -102,14 +106,33 @@ public:
|
||||
return std::string(mbstr);
|
||||
}
|
||||
|
||||
virtual int getScreenWidth() override { return 854; };
|
||||
virtual int getScreenHeight() override { return 480; };
|
||||
virtual int getScreenWidth() override {
|
||||
#ifdef __EMSCRIPTEN__
|
||||
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 bool supportsTouchscreen() override { return true; }
|
||||
virtual bool supportsTouchscreen() override { return false; /* glfw supports only mouse and keyboard */ }
|
||||
|
||||
virtual void hideCursor(bool hide) {
|
||||
virtual void hideCursor(bool hide) override {
|
||||
int isHide = hide ? GLFW_CURSOR_NORMAL : GLFW_CURSOR_HIDDEN;
|
||||
glfwSetInputMode(window, GLFW_CURSOR, isHide);
|
||||
}
|
||||
@@ -120,6 +143,8 @@ public:
|
||||
#elif __linux__
|
||||
std::string command = "xdg-open " + url;
|
||||
system(command.c_str());
|
||||
#elif __EMSCRIPTEN__
|
||||
emscripten_run_script(std::string("window.open('" + url + "', '_blank')").c_str());
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -52,11 +52,10 @@ public:
|
||||
|
||||
virtual StringVector getOptionStrings();
|
||||
|
||||
virtual bool isPowerVR() { return false; }
|
||||
virtual bool isPowerVR();
|
||||
virtual bool isSuperFast();
|
||||
virtual void showKeyboard();
|
||||
virtual void hideKeyboard();
|
||||
virtual void isPowerVR();
|
||||
private:
|
||||
|
||||
std::string _basePath;
|
||||
|
||||
@@ -275,7 +275,9 @@ void AppPlatform_iOS::hideKeyboard() {
|
||||
[_viewController hideKeyboard];
|
||||
super::hideKeyboard();
|
||||
}
|
||||
void AppPlatform_iOS::isPowerVR() {
|
||||
|
||||
// this was originally void but i changed it to bool because void cant return values
|
||||
bool AppPlatform_iOS::isPowerVR() {
|
||||
const char* s = (const char*)glGetString(GL_RENDERER);
|
||||
if (!s) return false;
|
||||
return strstr(s, "SGX") != NULL;
|
||||
|
||||
21
src/client/KeyMapping.h
Normal file
21
src/client/KeyMapping.h
Normal file
@@ -0,0 +1,21 @@
|
||||
#ifndef NET_MINECRAFT_CLIENT__KeyMapping_H__
|
||||
#define NET_MINECRAFT_CLIENT__KeyMapping_H__
|
||||
|
||||
//package net.minecraft.client;
|
||||
#include <string>
|
||||
|
||||
class KeyMapping
|
||||
{
|
||||
public:
|
||||
std::string name;
|
||||
int key;
|
||||
|
||||
KeyMapping() {}
|
||||
|
||||
KeyMapping(const std::string& name_, int key_)
|
||||
: name(name_),
|
||||
key(key_)
|
||||
{}
|
||||
};
|
||||
|
||||
#endif /*NET_MINECRAFT_CLIENT__KeyMapping_H__*/
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "Minecraft.h"
|
||||
#include "Options.h"
|
||||
#include "client/Options.h"
|
||||
#include "client/player/input/IBuildInput.h"
|
||||
#include "platform/input/Keyboard.h"
|
||||
@@ -89,6 +90,7 @@
|
||||
#include "../network/command/CommandServer.h"
|
||||
#include "gamemode/CreatorMode.h"
|
||||
|
||||
#include "../world/level/GrassColor.h"
|
||||
static void checkGlError(const char* tag) {
|
||||
#ifdef GLDEBUG
|
||||
while (1) {
|
||||
@@ -640,13 +642,11 @@ void Minecraft::tickInput() {
|
||||
|
||||
const MouseAction& e = Mouse::getEvent();
|
||||
|
||||
#ifdef RPI // If clicked when not having focus, get focus @keyboard
|
||||
if (!mouseGrabbed) {
|
||||
if (!useTouchscreen() && !mouseGrabbed) {
|
||||
if (!screen && e.data == MouseAction::DATA_DOWN) {
|
||||
grabMouse();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (allowGuiClicks && e.action == MouseAction::ACTION_LEFT && e.data == MouseAction::DATA_DOWN) {
|
||||
gui.handleClick(MouseAction::ACTION_LEFT, Mouse::getX(), Mouse::getY());
|
||||
@@ -660,9 +660,7 @@ void Minecraft::tickInput() {
|
||||
Inventory* v = player->inventory;
|
||||
|
||||
int numSlots = gui.getNumSlots();
|
||||
#ifndef PLATFORM_DESKTOP
|
||||
numSlots--;
|
||||
#endif
|
||||
if (!useTouchscreen()) numSlots--;
|
||||
|
||||
int slot = (v->selected - e.dy + numSlots) % numSlots;
|
||||
v->selectSlot(slot);
|
||||
@@ -691,7 +689,6 @@ void Minecraft::tickInput() {
|
||||
if (isPressed) {
|
||||
gui.handleKeyPressed(key);
|
||||
|
||||
#if defined(WIN32) || defined(RPI) || defined (PLATFORM_DESKTOP)//|| defined(_DEBUG) || defined(DEBUG)
|
||||
if (key >= '0' && key <= '9') {
|
||||
int digit = key - '0';
|
||||
int slot = digit - 1;
|
||||
@@ -714,8 +711,7 @@ void Minecraft::tickInput() {
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#if defined(PLATFORM_DESKTOP)
|
||||
|
||||
if (key == Keyboard::KEY_LEFT_CTRL) {
|
||||
player->setSprinting(true);
|
||||
}
|
||||
@@ -831,15 +827,9 @@ void Minecraft::tickInput() {
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef PLATFORM_DESKTOP
|
||||
if (key == 82)
|
||||
pauseGame(false);
|
||||
#else
|
||||
if (key == Keyboard::KEY_ESCAPE)
|
||||
pauseGame(false);
|
||||
#endif
|
||||
|
||||
#ifndef OPENGL_ES
|
||||
if (key == Keyboard::KEY_P) {
|
||||
@@ -866,11 +856,18 @@ void Minecraft::tickInput() {
|
||||
gameMode->stopDestroyBlock();
|
||||
}
|
||||
|
||||
if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) {
|
||||
gameMode->releaseUsingItem(player);
|
||||
}
|
||||
|
||||
if (useTouchscreen()) {
|
||||
// Touch: gesture recognizer classifies the action type (turn/destroy/build)
|
||||
BuildActionIntention bai;
|
||||
|
||||
if (inputHolder && inputHolder->getBuildInput()->tickBuild(player, &bai)) {
|
||||
handleBuildAction(&bai);
|
||||
} else {
|
||||
gameMode->stopDestroyBlock();
|
||||
}
|
||||
} else {
|
||||
// Desktop: left mouse = destroy/attack
|
||||
@@ -1109,10 +1106,12 @@ void Minecraft::releaseMouse()
|
||||
}
|
||||
|
||||
bool Minecraft::useTouchscreen() {
|
||||
#ifdef RPI
|
||||
#if defined(TARGET_OS_IPHONE)
|
||||
return true;
|
||||
#elif defined(RPI)
|
||||
return false;
|
||||
#endif
|
||||
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) || !_supportsNonTouchscreen;
|
||||
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen;
|
||||
}
|
||||
bool Minecraft::supportNonTouchScreen() {
|
||||
return _supportsNonTouchscreen;
|
||||
@@ -1129,12 +1128,31 @@ void Minecraft::init()
|
||||
textures = new Textures(&options, platform());
|
||||
textures->addDynamicTexture(new WaterTexture());
|
||||
textures->addDynamicTexture(new WaterSideTexture());
|
||||
textures->addDynamicTexture(new FireTexture());
|
||||
gui.texturesLoaded(textures);
|
||||
|
||||
levelRenderer = new LevelRenderer(this);
|
||||
gameRenderer = new GameRenderer(this);
|
||||
particleEngine = new ParticleEngine(level, textures);
|
||||
|
||||
// 4j's code for reference
|
||||
// FoliageColor::init(textures->loadTexturePixels(L"misc/foliagecolor.png"));
|
||||
|
||||
|
||||
// my code
|
||||
TextureId foliageId = (textures->loadTexture("misc/foliagecolor.png")); // loading the uh png for foliage color
|
||||
int* foliagePixels = textures->loadTexturePixels(foliageId, "misc/foliagecolor.png");
|
||||
// now i can finally initialize foliage color, probably not the best way to handle this but i cant be arsed rn
|
||||
FoliageColor::init(foliagePixels);
|
||||
|
||||
TextureId grassId = (textures->loadTexture("misc/foliagecolor.png")); // loading the uh png for foliage color
|
||||
int* grassPixels = textures->loadTexturePixels(grassId, "misc/foliagecolor.png");
|
||||
GrassColor::init(grassPixels);
|
||||
|
||||
bool tint = options.getBooleanValue(OPTIONS_FOLIAGE_TINT); // finally, toggleable foliage color
|
||||
FoliageColor::setUseTint(tint);
|
||||
GrassColor::setUseTint(tint);
|
||||
|
||||
// Platform specific initialization here
|
||||
font = new Font(&options, "font/default8.png", textures);
|
||||
|
||||
@@ -1160,12 +1178,13 @@ void Minecraft::setSize(int w, int h) {
|
||||
|
||||
// determine gui scale, optionally overriding auto
|
||||
if (guiScale != 0) {
|
||||
// manual selection: 1->small, 2->normal, 3->large, 4->larger
|
||||
// manual selection: 1->small, 2->medium, 3->large, 4->larger, 5->largest
|
||||
switch (guiScale) {
|
||||
case 1: Gui::GuiScale = 2.0f; break;
|
||||
case 2: Gui::GuiScale = 3.0f; break;
|
||||
case 3: Gui::GuiScale = 4.0f; break;
|
||||
case 4: Gui::GuiScale = 5.0f; break; // bigger than large
|
||||
case 4: Gui::GuiScale = 5.0f; break;
|
||||
case 5: Gui::GuiScale = 6.0f; break;
|
||||
default: Gui::GuiScale = 1.0f; break; // auto
|
||||
}
|
||||
} else {
|
||||
@@ -1195,7 +1214,7 @@ void Minecraft::setSize(int w, int h) {
|
||||
int screenHeight = (int)(height * Gui::InvGuiScale);
|
||||
|
||||
// if (platform()) {
|
||||
// float pixelsPerMillimeter = options.getProgressValue(&Options::Option::PIXELS_PER_MILLIMETER);
|
||||
// float pixelsPerMillimeter = options.getProgressValue(&Option::PIXELS_PER_MILLIMETER);
|
||||
// pixelCalc.setPixelsPerMillimeter(pixelsPerMillimeter);
|
||||
// pixelCalcUi.setPixelsPerMillimeter(pixelsPerMillimeter * Gui::InvGuiScale);
|
||||
// }
|
||||
@@ -1227,7 +1246,6 @@ void Minecraft::reloadOptions() {
|
||||
if ((wasTouchscreen != useTouchscreen()) || (inputHolder == 0))
|
||||
_reloadInput();
|
||||
|
||||
// TODO:
|
||||
// user->name = options.username;
|
||||
|
||||
LOGI("Reloading-options\n");
|
||||
@@ -1241,11 +1259,7 @@ void Minecraft::_reloadInput() {
|
||||
#ifndef STANDALONE_SERVER
|
||||
delete inputHolder;
|
||||
|
||||
#ifdef PLATFORM_DESKTOP
|
||||
const bool useTouchHolder = false;
|
||||
#else
|
||||
const bool useTouchHolder = useTouchscreen();
|
||||
#endif
|
||||
if (useTouchHolder) {
|
||||
inputHolder = new TouchInputHolder(this, &options);
|
||||
} else {
|
||||
@@ -1389,6 +1403,12 @@ void Minecraft::_levelGenerated()
|
||||
player->resetPos(false);
|
||||
}
|
||||
|
||||
if (level && level->dimension) {
|
||||
// For example, if you want FogType or any other option
|
||||
level->dimension->FogType = options.getBooleanValue(OPTIONS_FOG_TYPE);
|
||||
}
|
||||
|
||||
|
||||
this->cameraTargetPlayer = player;
|
||||
|
||||
std::string serverName = options.getStringValue(OPTIONS_USERNAME) + " - " + level->getLevelData()->levelName;
|
||||
@@ -1570,6 +1590,8 @@ void Minecraft::optionUpdated(OptionId option, bool value ) {
|
||||
if(netCallback != NULL && option == OPTIONS_SERVER_VISIBLE) {
|
||||
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) netCallback;
|
||||
ss->allowIncomingConnections(value);
|
||||
} else if (option == OPTIONS_USE_TOUCHSCREEN) {
|
||||
_reloadInput();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -109,6 +109,8 @@ public:
|
||||
|
||||
bool isLevelGenerated();
|
||||
|
||||
void handleMouseDown(int button, bool down);
|
||||
|
||||
void audioEngineOn();
|
||||
void audioEngineOff();
|
||||
|
||||
@@ -219,6 +221,7 @@ private:
|
||||
bool _isCreativeMode;
|
||||
//int _respawnPlayerTicks;
|
||||
Player* _pendingRemovePlayer; // @attn @todo @fix: remove this shait and fix the respawn behaviour
|
||||
// shit* lmao
|
||||
|
||||
PerfRenderer* _perfRenderer;
|
||||
CommandServer* _commandServer;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include <SDL/SDL.h>
|
||||
#endif
|
||||
|
||||
#ifdef PLATFORM_DESKTOP
|
||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||
#include <GLFW/glfw3.h>
|
||||
#endif
|
||||
|
||||
@@ -34,7 +34,7 @@ void MouseHandler::grab() {
|
||||
SDL_ShowCursor(0);
|
||||
#endif
|
||||
|
||||
#ifdef PLATFORM_DESKTOP
|
||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
||||
#endif
|
||||
}
|
||||
@@ -46,7 +46,7 @@ void MouseHandler::release() {
|
||||
SDL_ShowCursor(1);
|
||||
#endif
|
||||
|
||||
#ifdef PLATFORM_DESKTOP
|
||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -60,6 +60,12 @@ OptionBool useTouchscreen("useTouchscreen", true);
|
||||
|
||||
OptionBool serverVisible("servervisible", true);
|
||||
|
||||
OptionBool foliageTint("foliagetint", false);
|
||||
|
||||
OptionInt fogType("fogType", 0, 0, 2);
|
||||
|
||||
OptionBool javaHud("javaHud", false);
|
||||
|
||||
OptionInt keyForward("key.forward", Keyboard::KEY_W);
|
||||
OptionInt keyLeft("key.left", Keyboard::KEY_A);
|
||||
OptionInt keyBack("key.back", Keyboard::KEY_S);
|
||||
@@ -136,6 +142,8 @@ void Options::initTable() {
|
||||
|
||||
m_options[OPTIONS_USE_TOUCHSCREEN] = &useTouchscreen;
|
||||
|
||||
|
||||
|
||||
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
|
||||
|
||||
m_options[OPTIONS_KEY_FORWARD] = &keyForward;
|
||||
@@ -160,6 +168,12 @@ void Options::initTable() {
|
||||
m_options[OPTIONS_BAR_ON_TOP] = &barOnTop;
|
||||
m_options[OPTIONS_ALLOW_SPRINT] = &allowSprint;
|
||||
m_options[OPTIONS_RPI_CURSOR] = &rpiCursor;
|
||||
m_options[OPTIONS_FOLIAGE_TINT] = &foliageTint;
|
||||
|
||||
// more options yay
|
||||
m_options[OPTIONS_FOG_TYPE] = &fogType;
|
||||
|
||||
m_options[OPTIONS_JAVA_HUD] = &javaHud;
|
||||
|
||||
m_options[OPTIONS_AUTOJUMP] = &autoJump;
|
||||
m_options[OPTIONS_LAST_IP] = &lastIp;
|
||||
|
||||
@@ -84,6 +84,9 @@ enum OptionId {
|
||||
OPTIONS_LAST_IP,
|
||||
|
||||
OPTIONS_RPI_CURSOR,
|
||||
OPTIONS_FOLIAGE_TINT,
|
||||
OPTIONS_FOG_TYPE,
|
||||
OPTIONS_JAVA_HUD,
|
||||
// Should be last!
|
||||
OPTIONS_COUNT
|
||||
};
|
||||
@@ -94,6 +97,10 @@ typedef std::vector<std::string> StringVector;
|
||||
class Options
|
||||
{
|
||||
public:
|
||||
// deepfriedwaffles: for iOS, was getting compile errors saying: No member named 'sound' in 'Options' and No member named 'music' in 'Options' so I floated them here. 1.0f means full volume out of the box, but if everything is too loud, you might want to try adjusting this
|
||||
float sound = 1.0f;
|
||||
float music = 1.0f;
|
||||
|
||||
static bool debugGl;
|
||||
|
||||
Options(Minecraft* minecraft, const std::string& workingDirectory = "")
|
||||
|
||||
@@ -4,10 +4,11 @@
|
||||
#include <errno.h>
|
||||
#include <platform/log.h>
|
||||
|
||||
#if !defined(_WIN32)
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#if defined(_WIN32)
|
||||
#include <direct.h>
|
||||
#else
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
OptionsFile::OptionsFile() {
|
||||
@@ -15,6 +16,8 @@ OptionsFile::OptionsFile() {
|
||||
settingsPath = "./Documents/options.txt";
|
||||
#elif defined(ANDROID)
|
||||
settingsPath = "options.txt";
|
||||
#elif defined(__EMSCRIPTEN__)
|
||||
settingsPath = "/games/com.mojang/options.txt";
|
||||
#else
|
||||
settingsPath = "options.txt";
|
||||
#endif
|
||||
@@ -27,39 +30,44 @@ void OptionsFile::setOptionsPath(const std::string& path) {
|
||||
std::string OptionsFile::getOptionsPath() const {
|
||||
return settingsPath;
|
||||
}
|
||||
|
||||
void OptionsFile::save(const StringVector& settings) {
|
||||
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));
|
||||
|
||||
// Ensure parent directory exists for safekeeping if path contains directories
|
||||
if (!pFile && errno == ENOENT) {
|
||||
std::string dir = settingsPath;
|
||||
size_t fpos = dir.find_last_of("/\\");
|
||||
if (fpos != std::string::npos) {
|
||||
dir.resize(fpos);
|
||||
struct stat st;
|
||||
if (stat(dir.c_str(), &st) != 0) {
|
||||
// attempt recursive mkdir
|
||||
|
||||
std::string toCreate;
|
||||
for (size_t i = 0; i <= dir.size(); ++i) {
|
||||
if (i == dir.size() || dir[i] == '/' || dir[i] == '\\') {
|
||||
if (!toCreate.empty()) {
|
||||
#if defined(_WIN32)
|
||||
_mkdir(toCreate.c_str());
|
||||
#else
|
||||
mkdir(toCreate.c_str(), 0755);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -54,16 +54,3 @@ void CreativeMode::initAbilities( Abilities& abilities ) {
|
||||
bool CreativeMode::isCreativeType() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void CreativeMode::releaseUsingItem( Player* player ) {
|
||||
if(player->getCarriedItem() != NULL) {
|
||||
int oldItemId = player->getCarriedItem()->id;
|
||||
int oldAux = player->getAuxData();
|
||||
super::releaseUsingItem(player);
|
||||
if(player->getCarriedItem() != NULL && player->getCarriedItem()->id == oldItemId) {
|
||||
player->getCarriedItem()->setAuxValue(oldAux);
|
||||
}
|
||||
} else {
|
||||
super::releaseUsingItem(player);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ public:
|
||||
|
||||
void initAbilities(Abilities& abilities);
|
||||
|
||||
void releaseUsingItem(Player* player);
|
||||
private:
|
||||
void creativeDestroyBlock(int x, int y, int z, int face);
|
||||
};
|
||||
|
||||
@@ -92,19 +92,6 @@ bool CreatorMode::isCreativeType() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void CreatorMode::releaseUsingItem( Player* player ) {
|
||||
if(player->getCarriedItem() != NULL) {
|
||||
int oldItemId = player->getCarriedItem()->id;
|
||||
int oldAux = player->getAuxData();
|
||||
super::releaseUsingItem(player);
|
||||
if(player->getCarriedItem() != NULL && player->getCarriedItem()->id == oldItemId) {
|
||||
player->getCarriedItem()->setAuxValue(oldAux);
|
||||
}
|
||||
} else {
|
||||
super::releaseUsingItem(player);
|
||||
}
|
||||
}
|
||||
|
||||
ICreator* CreatorMode::getCreator() {
|
||||
return _creator;
|
||||
}
|
||||
|
||||
@@ -118,7 +118,6 @@ public:
|
||||
|
||||
void initAbilities(Abilities& abilities);
|
||||
|
||||
void releaseUsingItem(Player* player);
|
||||
private:
|
||||
void CreatorDestroyBlock(int x, int y, int z, int face);
|
||||
|
||||
|
||||
@@ -89,8 +89,8 @@ bool GameMode::useItemOn(Player* player, Level* level, ItemInstance* item, int x
|
||||
float clickX = hit.x - x;
|
||||
float clickY = hit.y - y;
|
||||
float clickZ = hit.z - z;
|
||||
if (level->isClientSide) {
|
||||
item = player->inventory->getSelected();
|
||||
if(level->isClientSide) {
|
||||
UseItemPacket packet(x, y, z, face, item, player->entityId, clickX, clickY, clickZ);
|
||||
minecraft->raknetInstance->send(packet);
|
||||
}
|
||||
@@ -149,7 +149,7 @@ void GameMode::initPlayer( Player* player ) {
|
||||
}
|
||||
|
||||
void GameMode::releaseUsingItem(Player* player){
|
||||
if(minecraft->level->isClientSide) {
|
||||
if (minecraft->level->isClientSide && player->isUsingItem()) {
|
||||
PlayerActionPacket packet(PlayerActionPacket::RELEASE_USE_ITEM, 0, 0, 0, 0, player->entityId);
|
||||
minecraft->raknetInstance->send(packet);
|
||||
}
|
||||
|
||||
@@ -186,7 +186,7 @@ void Font::draw( const std::string& str, float x, float y, int color, bool darke
|
||||
glPushMatrix2();
|
||||
glTranslatef2((GLfloat)x, (GLfloat)y, 0.0f);
|
||||
for (unsigned int i = 0; i < str.length(); i++) {
|
||||
while (str.length() > i + 1 && str[i] == '§') {
|
||||
while (str.length() > i + 1 && str[i] == '\xa7') {
|
||||
int cc = hex.find((char)tolower(str[i + 1]));
|
||||
if (cc < 0 || cc > 15) cc = 15;
|
||||
lists[index++] = listPos + 256 + cc + (darken ? 16 : 0);
|
||||
@@ -235,7 +235,7 @@ int Font::width( const std::string& str )
|
||||
int len = 0;
|
||||
|
||||
for (unsigned int i = 0; i < str.length(); i++) {
|
||||
if (str[i] == '§') {
|
||||
if (str[i] == '\xa7') {
|
||||
i++;
|
||||
} else {
|
||||
//int ch = SharedConstants.acceptableLetters.indexOf(str.charAt(i));
|
||||
@@ -274,7 +274,7 @@ std::string Font::sanitize( const std::string& str )
|
||||
int j = 0;
|
||||
|
||||
for (unsigned int i = 0; i < str.length(); i++) {
|
||||
if (str[i] == '§') {
|
||||
if (str[i] == '\xa7') {
|
||||
i++;
|
||||
//} else if (SharedConstants.acceptableLetters.indexOf(str.charAt(i)) >= 0) {
|
||||
} else {
|
||||
|
||||
@@ -36,7 +36,7 @@ const float Gui::DropTicks = 40.0f;
|
||||
//#include <android/log.h>
|
||||
|
||||
Gui::Gui(Minecraft* minecraft)
|
||||
: minecraft(minecraft),
|
||||
: minecraft(minecraft),
|
||||
tickCount(0),
|
||||
progress(0),
|
||||
overlayMessageTime(0),
|
||||
@@ -51,7 +51,8 @@ Gui::Gui(Minecraft* minecraft)
|
||||
_currentDropTicks(-1),
|
||||
_currentDropSlot(-1),
|
||||
MAX_MESSAGE_WIDTH(240),
|
||||
itemNameOverlayTime(2)
|
||||
itemNameOverlayTime(2),
|
||||
_openInventorySlot(minecraft->useTouchscreen())
|
||||
{
|
||||
glGenBuffers2(1, &_inventoryRc.vboId);
|
||||
glGenBuffers2(1, &rcFeedbackInner.vboId);
|
||||
@@ -75,11 +76,8 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
||||
//minecraft->gameRenderer->setupGuiScreen();
|
||||
Font* font = minecraft->font;
|
||||
|
||||
#ifdef PLATFORM_DESKTOP
|
||||
const bool isTouchInterface = false;
|
||||
#else
|
||||
const bool isTouchInterface = minecraft->useTouchscreen();
|
||||
#endif
|
||||
|
||||
const int screenWidth = (int)(minecraft->width * InvGuiScale);
|
||||
const int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||
blitOffset = -90;
|
||||
@@ -105,6 +103,12 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
||||
}
|
||||
}
|
||||
|
||||
// @todo - Shredder: I added this here but currently viginette is broken so i cant do much about it.
|
||||
// if (minecraft->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS)){
|
||||
// this->renderVignette(this->minecraft->player->getBrightness(a), screenWidth, screenHeight);
|
||||
// }
|
||||
// shredder end
|
||||
|
||||
if(minecraft->player->getSleepTimer() > 0) {
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
@@ -206,16 +210,10 @@ void Gui::handleClick(int button, int x, int y) {
|
||||
if (button != MouseAction::ACTION_LEFT) return;
|
||||
|
||||
int slot = getSlotIdAt(x, y);
|
||||
if (slot != -1)
|
||||
{
|
||||
#ifndef PLATFORM_DESKTOP
|
||||
if (slot == (getNumSlots()-1))
|
||||
{
|
||||
if (slot != -1) {
|
||||
if (_openInventorySlot && slot == (getNumSlots()-1)) {
|
||||
minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
} else {
|
||||
minecraft->player->inventory->selectSlot(slot);
|
||||
itemNameOverlayTime = 0;
|
||||
}
|
||||
@@ -349,9 +347,11 @@ void Gui::setNowPlaying(const std::string& string) {
|
||||
void Gui::displayClientMessage(const std::string& messageId) {
|
||||
//Language language = Language.getInstance();
|
||||
//std::string languageString = language.getElement(messageId);
|
||||
addMessage(std::string("Client message: ") + messageId);
|
||||
addMessage(messageId);
|
||||
}
|
||||
|
||||
|
||||
// @todo - shredder: Function seems to be completely fine and ported over from java beta, but renders opaque??? need to investigate
|
||||
void Gui::renderVignette(float br, int w, int h) {
|
||||
br = 1 - br;
|
||||
if (br < 0) br = 0;
|
||||
@@ -362,7 +362,10 @@ void Gui::renderVignette(float br, int w, int h) {
|
||||
glDepthMask(false);
|
||||
glBlendFunc2(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
|
||||
glColor4f2(tbr, tbr, tbr, 1);
|
||||
|
||||
minecraft->textures->loadAndBindTexture("misc/vignette.png");
|
||||
glTexParameteri2(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri2(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
|
||||
Tesselator& t = Tesselator::instance;
|
||||
t.begin();
|
||||
@@ -537,11 +540,7 @@ void Gui::tickItemDrop()
|
||||
static bool isCurrentlyActive = false;
|
||||
isCurrentlyActive = false;
|
||||
|
||||
int slots = getNumSlots();
|
||||
|
||||
#ifndef PLATFORM_DESKTOP
|
||||
slots--;
|
||||
#endif
|
||||
int slots = getNumSlots() - _openInventorySlot;
|
||||
|
||||
if (Mouse::isButtonDown(MouseAction::ACTION_LEFT)) {
|
||||
int slot = getSlotIdAt(Mouse::getX(), Mouse::getY());
|
||||
@@ -1083,13 +1082,7 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
|
||||
|
||||
float x = baseItemX;
|
||||
|
||||
int slots = getNumSlots();
|
||||
|
||||
// TODO: if using touchscreen
|
||||
|
||||
#ifndef PLATFORM_DESKTOP
|
||||
slots--;
|
||||
#endif
|
||||
int slots = getNumSlots() - _openInventorySlot;
|
||||
|
||||
for (int i = 0; i < slots; i++) {
|
||||
renderSlot(i, (int)x, ySlot, a);
|
||||
@@ -1097,9 +1090,10 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
|
||||
}
|
||||
_inventoryNeedsUpdate = false;
|
||||
|
||||
#ifndef PLATFORM_DESKTOP
|
||||
|
||||
if (_openInventorySlot) {
|
||||
blit(screenWidth / 2 + 10 * getNumSlots() - 20 + 4, ySlot + 6, 242, 252, 14, 4, 14, 4);
|
||||
#endif
|
||||
}
|
||||
|
||||
minecraft->textures->loadAndBindTexture("gui/gui_blocks.png");
|
||||
t.endOverrideAndDraw();
|
||||
@@ -1122,22 +1116,41 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
|
||||
|
||||
// Draw count
|
||||
//Tesselator& t = Tesselator::instance;
|
||||
glPushMatrix2();
|
||||
glScalef2(InvGuiScale + InvGuiScale, InvGuiScale + InvGuiScale, 1);
|
||||
const float k = 0.5f * GuiScale;
|
||||
|
||||
const float k = 0.5f * GuiScale;
|
||||
if (minecraft->options.getBooleanValue(OPTIONS_JAVA_HUD)) // if true enables the java beta item count size and color and calls the java items decorations
|
||||
{
|
||||
t.beginOverride();
|
||||
if (minecraft->gameMode->isSurvivalType()) {
|
||||
x = baseItemX;
|
||||
for (int i = 0; i < slots; i++) {
|
||||
ItemInstance* item = minecraft->player->inventory->getItem(i);
|
||||
if (item && item->count >= 0)
|
||||
renderSlotText(item, k*x, k*ySlot + 1, true, true);
|
||||
ItemRenderer::renderGuiItemDecorations(minecraft->font, minecraft->textures, minecraft->player->inventory->getItem(i), x, (float)ySlot);
|
||||
x += 20;
|
||||
}
|
||||
}
|
||||
minecraft->textures->loadAndBindTexture("font/default8.png");
|
||||
t.endOverrideAndDraw();
|
||||
}
|
||||
else { // otherwise uses the normal pocket edition one
|
||||
glPushMatrix2();
|
||||
glScalef2(InvGuiScale + InvGuiScale, InvGuiScale + InvGuiScale, 1);
|
||||
t.beginOverride();
|
||||
if (minecraft->gameMode->isSurvivalType()) {
|
||||
x = baseItemX;
|
||||
for (int i = 0; i < slots; i++) {
|
||||
ItemInstance* item = minecraft->player->inventory->getItem(i);
|
||||
if (item && item->count >= 0)
|
||||
renderSlotText(item, k*x, k*ySlot, true, true);
|
||||
x += 20;
|
||||
}
|
||||
}
|
||||
|
||||
minecraft->textures->loadAndBindTexture("font/default8.png");
|
||||
t.endOverrideAndDraw();
|
||||
|
||||
glPopMatrix2();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -127,6 +127,8 @@ private:
|
||||
static const float DropTicks;
|
||||
float _currentDropTicks;
|
||||
int _currentDropSlot;
|
||||
|
||||
bool _openInventorySlot;
|
||||
};
|
||||
|
||||
#endif /*NET_MINECRAFT_CLIENT_GUI__Gui_H__*/
|
||||
|
||||
@@ -177,9 +177,11 @@ void Screen::keyPressed( int eventKey )
|
||||
textbox->keyPressed(minecraft, eventKey);
|
||||
}
|
||||
|
||||
#ifdef TABBING
|
||||
if (minecraft->useTouchscreen())
|
||||
return;
|
||||
|
||||
|
||||
// "Tabbing" the buttons (walking with keys)
|
||||
const int tabButtonCount = tabButtons.size();
|
||||
if (!tabButtonCount)
|
||||
@@ -199,6 +201,7 @@ void Screen::keyPressed( int eventKey )
|
||||
}
|
||||
|
||||
updateTabButtonSelection();
|
||||
#endif
|
||||
}
|
||||
|
||||
void Screen::charPressed(char inputChar) {
|
||||
@@ -209,11 +212,13 @@ void Screen::charPressed(char inputChar) {
|
||||
|
||||
void Screen::updateTabButtonSelection()
|
||||
{
|
||||
#ifdef TABBING
|
||||
if (minecraft->useTouchscreen())
|
||||
return;
|
||||
|
||||
for (unsigned int i = 0; i < tabButtons.size(); ++i)
|
||||
tabButtons[i]->selected = (i == tabButtonIndex);
|
||||
#endif
|
||||
}
|
||||
|
||||
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) {
|
||||
return minecraft->useTouchscreen()? (_currentlyDown && isInside(xm, ym)) : false;
|
||||
return minecraft->useTouchscreen()? (_currentlyDown && isInside(xm, ym)) : isInside(xm, ym);
|
||||
}
|
||||
|
||||
bool Button::isInside( int xm, int ym ) {
|
||||
@@ -143,7 +143,8 @@ 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 )
|
||||
{
|
||||
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
|
||||
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
|
||||
// bool hovered = active && (_currentlyDown && isInside(xm, ym));
|
||||
|
||||
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");
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
|
||||
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
|
||||
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
|
||||
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);
|
||||
|
||||
@@ -33,7 +33,7 @@ void LargeImageButton::render(Minecraft* minecraft, int xm, int ym) {
|
||||
|
||||
//minecraft->textures->loadAndBindTexture("gui/gui.png");
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
|
||||
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(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);
|
||||
|
||||
@@ -65,7 +65,7 @@ void OptionsGroup::createToggle(OptionId optId, Minecraft* minecraft ) {
|
||||
|
||||
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
||||
|
||||
OptionsItem* item = new OptionsItem(itemLabel, element);
|
||||
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
|
||||
|
||||
addChild(item);
|
||||
setupPositions();
|
||||
@@ -77,7 +77,7 @@ void OptionsGroup::createProgressSlider(OptionId optId, Minecraft* minecraft ) {
|
||||
element->height = 20;
|
||||
|
||||
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
||||
OptionsItem* item = new OptionsItem(itemLabel, element);
|
||||
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
|
||||
addChild(item);
|
||||
setupPositions();
|
||||
}
|
||||
@@ -87,7 +87,7 @@ void OptionsGroup::createStepSlider(OptionId optId, Minecraft* minecraft ) {
|
||||
element->width = 100;
|
||||
element->height = 20;
|
||||
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
||||
OptionsItem* item = new OptionsItem(itemLabel, element);
|
||||
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
|
||||
addChild(item);
|
||||
setupPositions();
|
||||
}
|
||||
@@ -98,7 +98,7 @@ void OptionsGroup::createTextbox(OptionId optId, Minecraft* minecraft) {
|
||||
element->height = 20;
|
||||
|
||||
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
||||
OptionsItem* item = new OptionsItem(itemLabel, element);
|
||||
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
|
||||
addChild(item);
|
||||
setupPositions();
|
||||
}
|
||||
@@ -109,7 +109,7 @@ void OptionsGroup::createKey(OptionId optId, Minecraft* minecraft) {
|
||||
element->height = 20;
|
||||
|
||||
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
|
||||
OptionsItem* item = new OptionsItem(itemLabel, element);
|
||||
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
|
||||
addChild(item);
|
||||
setupPositions();
|
||||
}
|
||||
@@ -1,9 +1,11 @@
|
||||
#include "OptionsItem.h"
|
||||
#include "../../Minecraft.h"
|
||||
#include "../../../locale/I18n.h"
|
||||
#include "../../../util/Mth.h"
|
||||
OptionsItem::OptionsItem( std::string label, GuiElement* element )
|
||||
OptionsItem::OptionsItem( OptionId optionId, std::string label, GuiElement* element )
|
||||
: GuiElementContainer(false, true, 0, 0, 24, 12),
|
||||
label(label) {
|
||||
m_optionId(optionId),
|
||||
m_label(label) {
|
||||
addChild(element);
|
||||
}
|
||||
|
||||
@@ -19,6 +21,22 @@ void OptionsItem::setupPositions() {
|
||||
|
||||
void OptionsItem::render( Minecraft* minecraft, int xm, int ym ) {
|
||||
int yOffset = (height - 8) / 2;
|
||||
minecraft->font->draw(label, (float)x, (float)y + yOffset, 0x909090, false);
|
||||
std::string text = m_label;
|
||||
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);
|
||||
}
|
||||
@@ -15,12 +15,13 @@ class OptionsItem: public GuiElementContainer
|
||||
{
|
||||
typedef GuiElementContainer super;
|
||||
public:
|
||||
OptionsItem(std::string label, GuiElement* element);
|
||||
OptionsItem(OptionId optionId, std::string label, GuiElement* element);
|
||||
virtual void render(Minecraft* minecraft, int xm, int ym);
|
||||
void setupPositions();
|
||||
|
||||
private:
|
||||
std::string label;
|
||||
OptionId m_optionId;
|
||||
std::string m_label;
|
||||
};
|
||||
|
||||
#endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsItem_H__*/
|
||||
|
||||
64
src/client/gui/components/OptionsPane.cpp
Normal file
64
src/client/gui/components/OptionsPane.cpp
Normal file
@@ -0,0 +1,64 @@
|
||||
#include "OptionsPane.h"
|
||||
#include "OptionsGroup.h"
|
||||
#include "OptionsItem.h"
|
||||
#include "ImageButton.h"
|
||||
#include "Slider.h"
|
||||
#include "../../Minecraft.h"
|
||||
#include "client/Options.h"
|
||||
|
||||
OptionsPane::OptionsPane() {
|
||||
|
||||
}
|
||||
|
||||
void OptionsPane::setupPositions() {
|
||||
int currentHeight = y + 1;
|
||||
for(std::vector<GuiElement*>::iterator it = children.begin(); it != children.end(); ++it ) {
|
||||
(*it)->width = width;
|
||||
(*it)->y = currentHeight;
|
||||
(*it)->x = x;
|
||||
currentHeight += (*it)->height + 1;
|
||||
}
|
||||
height = currentHeight;
|
||||
super::setupPositions();
|
||||
}
|
||||
|
||||
OptionsGroup& OptionsPane::createOptionsGroup( std::string label ) {
|
||||
OptionsGroup* newGroup = new OptionsGroup(label);
|
||||
children.push_back(newGroup);
|
||||
// create and return a new group index
|
||||
return *newGroup;
|
||||
}
|
||||
|
||||
void OptionsPane::createToggle( unsigned int group, std::string label, OptionId option ) {
|
||||
if(group > children.size()) return;
|
||||
ImageDef def;
|
||||
def.setSrc(IntRectangle(160, 206, 39, 20));
|
||||
def.name = "gui/touchgui.png";
|
||||
def.width = 39 * 0.7f;
|
||||
def.height = 20 * 0.7f;
|
||||
OptionButton* element = new OptionButton(option);
|
||||
element->setImageDef(def, true);
|
||||
OptionsItem* item = new OptionsItem(option, label, element);
|
||||
((OptionsGroup*)children[group])->addChild(item);
|
||||
setupPositions();
|
||||
}
|
||||
|
||||
void OptionsPane::createProgressSlider( Minecraft* minecraft, unsigned int group, std::string label, OptionId option, float progressMin/*=1.0f*/, float progressMax/*=1.0f */ ) {
|
||||
if(group > children.size()) return;
|
||||
Slider* element = new SliderFloat(minecraft, option);
|
||||
element->width = 100;
|
||||
element->height = 20;
|
||||
OptionsItem* item = new OptionsItem(option, label, element);
|
||||
((OptionsGroup*)children[group])->addChild(item);
|
||||
setupPositions();
|
||||
}
|
||||
|
||||
void OptionsPane::createStepSlider( Minecraft* minecraft, unsigned int group, std::string label, OptionId option, const std::vector<int>& stepVec ) {
|
||||
if(group > children.size()) return;
|
||||
Slider* element = new SliderInt(minecraft, option);
|
||||
element->width = 100;
|
||||
element->height = 20;
|
||||
OptionsItem* item = new OptionsItem(option, label, element);
|
||||
((OptionsGroup*)children[group])->addChild(item);
|
||||
setupPositions();
|
||||
}
|
||||
30
src/client/gui/components/OptionsPane.h
Normal file
30
src/client/gui/components/OptionsPane.h
Normal file
@@ -0,0 +1,30 @@
|
||||
#ifndef ITEMPANE_H__
|
||||
#define ITEMPANE_H__
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "GuiElementContainer.h"
|
||||
#include "../../../world/item/ItemInstance.h"
|
||||
#include "../../../client/Options.h"
|
||||
class Font;
|
||||
class Textures;
|
||||
class NinePatchLayer;
|
||||
class ItemPane;
|
||||
class OptionButton;
|
||||
class Button;
|
||||
class OptionsGroup;
|
||||
class Slider;
|
||||
class Minecraft;
|
||||
class OptionsPane: public GuiElementContainer
|
||||
{
|
||||
typedef GuiElementContainer super;
|
||||
public:
|
||||
OptionsPane();
|
||||
OptionsGroup& createOptionsGroup( std::string label );
|
||||
void createToggle( unsigned int group, std::string label, OptionId option );
|
||||
void createProgressSlider(Minecraft* minecraft, unsigned int group, std::string label, OptionId option, float progressMin=1.0f, float progressMax=1.0f );
|
||||
void createStepSlider(Minecraft* minecraft, unsigned int group, std::string label, OptionId option, const std::vector<int>& stepVec );
|
||||
void setupPositions();
|
||||
};
|
||||
|
||||
#endif /*ITEMPANE_H__*/
|
||||
@@ -20,6 +20,9 @@ static const float kMinimumTrackingForDrag = 5;
|
||||
static const float kMinIndicatorLength = 34.0f / 3;
|
||||
static const float PKScrollIndicatorEndSize = 3;
|
||||
static const float PKScrollIndicatorThickness = 7.0f /3;
|
||||
static const float kWheelOverscrollMax = 80.0f;
|
||||
static const float kWheelOverscrollDamping = 0.6f;
|
||||
static const float kWheelOverscrollRestoreAlpha = 0.18f;
|
||||
|
||||
ScrollingPane::ScrollingPane(
|
||||
int optionFlags,
|
||||
@@ -70,13 +73,19 @@ ScrollingPane::ScrollingPane(
|
||||
}
|
||||
//LOGI("%d, %d :: %d\n", bbox.w, itemBbox.w, this->columns);
|
||||
|
||||
rows = 1 + (numItems-1) / this->columns,
|
||||
rows = 1 + (numItems-1) / this->columns;
|
||||
|
||||
/*
|
||||
if (columns * itemBbox.w <= bbox.w) flags |= SF_LockX;
|
||||
if (rows * itemBbox.h <= bbox.h) flags |= SF_LockY;
|
||||
*/
|
||||
|
||||
// initialize content bounds immediately
|
||||
adjustContentSize();
|
||||
minPoint.set((float)(this->size.w - this->adjustedContentSize.w), (float)(this->size.h - this->adjustedContentSize.h), 0);
|
||||
this->snapContentOffsetToBounds(false);
|
||||
|
||||
|
||||
dragDeltas.reserve(128);
|
||||
|
||||
te_moved = 0;
|
||||
@@ -114,6 +123,34 @@ void ScrollingPane::tick() {
|
||||
updateScrollFade(vScroll);
|
||||
updateScrollFade(hScroll);
|
||||
}
|
||||
|
||||
if (isNotSet(SF_HardLimits) && !Mouse::isButtonDown(MouseAction::ACTION_LEFT) && !dragging && !tracking && !decelerating) {
|
||||
float targetX = _contentOffset.x;
|
||||
float targetY = _contentOffset.y;
|
||||
bool corrected = false;
|
||||
|
||||
if (targetX > 0.0f) {
|
||||
targetX = Mth::lerp(targetX, 0.0f, kWheelOverscrollRestoreAlpha);
|
||||
corrected = true;
|
||||
} else if (targetX < minPoint.x) {
|
||||
targetX = Mth::lerp(targetX, minPoint.x, kWheelOverscrollRestoreAlpha);
|
||||
corrected = true;
|
||||
}
|
||||
|
||||
if (targetY > 0.0f) {
|
||||
targetY = Mth::lerp(targetY, 0.0f, kWheelOverscrollRestoreAlpha);
|
||||
corrected = true;
|
||||
} else if (targetY < minPoint.y) {
|
||||
targetY = Mth::lerp(targetY, minPoint.y, kWheelOverscrollRestoreAlpha);
|
||||
corrected = true;
|
||||
}
|
||||
|
||||
if (corrected) {
|
||||
if (Mth::abs(targetX - _contentOffset.x) < 0.25f) targetX = (targetX > 0.0f ? 0.0f : (targetX < minPoint.x ? minPoint.x : targetX));
|
||||
if (Mth::abs(targetY - _contentOffset.y) < 0.25f) targetY = (targetY > 0.0f ? 0.0f : (targetY < minPoint.y ? minPoint.y : targetY));
|
||||
setContentOffset(Vec3(targetX, targetY, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool ScrollingPane::getGridItemFor_slow(int itemIndex, GridItem& out) {
|
||||
@@ -549,11 +586,39 @@ void ScrollingPane::stepThroughDecelerationAnimation(bool noAnimation) {
|
||||
}
|
||||
|
||||
void ScrollingPane::scrollBy(float dx, float dy) {
|
||||
// adjust the translation offsets fpx/fpy by the requested amount
|
||||
float nfpx = fpx + dx;
|
||||
float nfpy = fpy + dy;
|
||||
// convert back to content offset (fpx = -contentOffset.x)
|
||||
setContentOffset(Vec3(-nfpx, -nfpy, 0));
|
||||
// compute target content offset from wheel delta (in screen-space w/ opposite sign)
|
||||
float targetX = _contentOffset.x - dx;
|
||||
float targetY = _contentOffset.y - dy;
|
||||
|
||||
if (isSet(SF_LockX)) targetX = _contentOffset.x;
|
||||
if (isSet(SF_LockY)) targetY = _contentOffset.y;
|
||||
|
||||
if (isSet(SF_HardLimits)) {
|
||||
targetX = Mth::clamp(targetX, minPoint.x, 0.0f);
|
||||
targetY = Mth::clamp(targetY, minPoint.y, 0.0f);
|
||||
} else {
|
||||
if (targetX > 0.0f) {
|
||||
float overshoot = targetX;
|
||||
overshoot = Mth::Min(overshoot, kWheelOverscrollMax);
|
||||
targetX = overshoot * kWheelOverscrollDamping;
|
||||
} else if (targetX < minPoint.x) {
|
||||
float overshoot = targetX - minPoint.x;
|
||||
overshoot = Mth::Max(overshoot, -kWheelOverscrollMax);
|
||||
targetX = minPoint.x + overshoot * kWheelOverscrollDamping;
|
||||
}
|
||||
|
||||
if (targetY > 0.0f) {
|
||||
float overshoot = targetY;
|
||||
overshoot = Mth::Min(overshoot, kWheelOverscrollMax);
|
||||
targetY = overshoot * kWheelOverscrollDamping;
|
||||
} else if (targetY < minPoint.y) {
|
||||
float overshoot = targetY - minPoint.y;
|
||||
overshoot = Mth::Max(overshoot, -kWheelOverscrollMax);
|
||||
targetY = minPoint.y + overshoot * kWheelOverscrollDamping;
|
||||
}
|
||||
}
|
||||
|
||||
setContentOffset(Vec3(targetX, targetY, 0));
|
||||
}
|
||||
|
||||
void ScrollingPane::setContentOffset(float x, float y) {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "../../Minecraft.h"
|
||||
#include "../../renderer/Textures.h"
|
||||
#include "../Screen.h"
|
||||
#include "../../../locale/I18n.h"
|
||||
#include "../../../util/Mth.h"
|
||||
#include <algorithm>
|
||||
#include <assert.h>
|
||||
@@ -21,7 +22,7 @@ void Slider::render( Minecraft* minecraft, int xm, int ym ) {
|
||||
|
||||
if (m_numSteps > 2) {
|
||||
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;
|
||||
fill(renderSliderStepPosX - 1, ySliderStart - 2, renderSliderStepPosX + 1, ySliderEnd + 2, 0xff606060);
|
||||
}
|
||||
@@ -64,15 +65,20 @@ SliderFloat::SliderFloat(Minecraft* minecraft, OptionId option)
|
||||
SliderInt::SliderInt(Minecraft* minecraft, OptionId option)
|
||||
: Slider(option), m_option(dynamic_cast<OptionInt*>(minecraft->options.getOpt(option)))
|
||||
{
|
||||
m_numSteps = m_option->getMax() - m_option->getMin();
|
||||
m_numSteps = m_option->getMax() - m_option->getMin() + 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 ) {
|
||||
Slider::mouseReleased(minecraft, x, y, buttonNum);
|
||||
|
||||
if (pointInside(x, y)) {
|
||||
int curStep = Mth::floor(m_percentage * (m_numSteps-1));
|
||||
int curStep = int(m_percentage * (m_numSteps-1) + 0.5f);
|
||||
curStep = Mth::clamp(curStep + m_option->getMin(), m_option->getMin(), m_option->getMax());
|
||||
m_percentage = float(curStep - m_option->getMin()) / (m_numSteps-1);
|
||||
|
||||
minecraft->options.set(m_optId, curStep);
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#include "GuiElement.h"
|
||||
#include "../../../client/Options.h"
|
||||
#include <client/Option.h>
|
||||
|
||||
class Slider : public GuiElement {
|
||||
typedef GuiElement super;
|
||||
@@ -38,6 +37,7 @@ class SliderInt : public Slider {
|
||||
public:
|
||||
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;
|
||||
|
||||
protected:
|
||||
|
||||
24
src/client/gui/components/SmallButton.cpp
Normal file
24
src/client/gui/components/SmallButton.cpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#include "SmallButton.h"
|
||||
|
||||
SmallButton::SmallButton( int id, int x, int y, const std::string& msg )
|
||||
: super(id, x, y, 150, 20, msg),
|
||||
option(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
SmallButton::SmallButton( int id, int x, int y, int width, int height, const std::string& msg )
|
||||
: super(id, x, y, width, height, msg),
|
||||
option(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
SmallButton::SmallButton( int id, int x, int y, Option* item, const std::string& msg )
|
||||
: super(id, x, y, 150, 20, msg),
|
||||
option(item)
|
||||
{
|
||||
}
|
||||
|
||||
Option* SmallButton::getOption()
|
||||
{
|
||||
return option;
|
||||
}
|
||||
23
src/client/gui/components/SmallButton.h
Normal file
23
src/client/gui/components/SmallButton.h
Normal file
@@ -0,0 +1,23 @@
|
||||
#ifndef NET_MINECRAFT_CLIENT_GUI_COMPONENTS__SmallButton_H__
|
||||
#define NET_MINECRAFT_CLIENT_GUI_COMPONENTS__SmallButton_H__
|
||||
|
||||
//package net.minecraft.client.gui;
|
||||
|
||||
#include <string>
|
||||
#include "Button.h"
|
||||
#include "../../Options.h"
|
||||
|
||||
class SmallButton: public Button
|
||||
{
|
||||
typedef Button super;
|
||||
public:
|
||||
SmallButton(int id, int x, int y, const std::string& msg);
|
||||
SmallButton(int id, int x, int y, int width, int height, const std::string& msg);
|
||||
SmallButton(int id, int x, int y, Option* item, const std::string& msg);
|
||||
|
||||
Option* getOption();
|
||||
private:
|
||||
Option* option;
|
||||
};
|
||||
|
||||
#endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__SmallButton_H__*/
|
||||
26
src/client/gui/screens/BuyGameScreen.h
Normal file
26
src/client/gui/screens/BuyGameScreen.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#ifndef NET_MINECRAFT_CLIENT_GUI_SCREENS__BuyGameScreen_H__
|
||||
#define NET_MINECRAFT_CLIENT_GUI_SCREENS__BuyGameScreen_H__
|
||||
|
||||
#include "../Screen.h"
|
||||
#include "../components/Button.h"
|
||||
|
||||
class BuyGameScreen: public Screen
|
||||
{
|
||||
public:
|
||||
BuyGameScreen() {}
|
||||
virtual ~BuyGameScreen() {}
|
||||
|
||||
void init();
|
||||
|
||||
void render(int xm, int ym, float a);
|
||||
|
||||
void buttonClicked(Button* button) {
|
||||
//if (button->id == bQuit.id)
|
||||
}
|
||||
|
||||
private:
|
||||
//Button bQuit;
|
||||
//Button bBuyGame;
|
||||
};
|
||||
|
||||
#endif /*NET_MINECRAFT_CLIENT_GUI_SCREENS__BuyGameScreen_H__*/
|
||||
@@ -31,7 +31,7 @@ ConfirmScreen::~ConfirmScreen() {
|
||||
|
||||
void ConfirmScreen::init()
|
||||
{
|
||||
if (minecraft->useTouchscreen()) {
|
||||
if (/* minecraft->useTouchscreen() */ true) {
|
||||
yesButton = new Touch::TButton(0, 0, 0, yesButtonText),
|
||||
noButton = new Touch::TButton(1, 0, 0, noButtonText);
|
||||
} else {
|
||||
|
||||
@@ -28,6 +28,7 @@ void CreditsScreen::init() {
|
||||
buttons.push_back(bHeader);
|
||||
buttons.push_back(btnBack);
|
||||
|
||||
// TODO: rewrite it
|
||||
// prepare text lines
|
||||
_lines.clear();
|
||||
_lines.push_back("Minecraft: Pocket Edition");
|
||||
@@ -39,6 +40,7 @@ void CreditsScreen::init() {
|
||||
_lines.push_back("Kolyah35");
|
||||
_lines.push_back("karson");
|
||||
_lines.push_back("deepfriedwaffles");
|
||||
_lines.push_back("EpikIzCool");
|
||||
_lines.push_back("");
|
||||
// avoid color tags around the URL so it isn't mangled by the parser please
|
||||
_lines.push_back("Join our Discord server: https://discord.gg/c58YesBxve");
|
||||
|
||||
@@ -23,7 +23,7 @@ DeathScreen::~DeathScreen()
|
||||
|
||||
void DeathScreen::init()
|
||||
{
|
||||
if (minecraft->useTouchscreen()) {
|
||||
if (/* minecraft->useTouchscreen() */ true) {
|
||||
bRespawn = new Touch::TButton(1, "Respawn!");
|
||||
bTitle = new Touch::TButton(2, "Main menu");
|
||||
} else {
|
||||
|
||||
@@ -21,7 +21,7 @@ public:
|
||||
}
|
||||
|
||||
void init() {
|
||||
if (minecraft->useTouchscreen())
|
||||
if (/* minecraft->useTouchscreen() */ true)
|
||||
_back = new Touch::TButton(1, "Ok");
|
||||
else
|
||||
_back = new Button(1, "Ok");
|
||||
|
||||
@@ -17,7 +17,7 @@ InBedScreen::~InBedScreen() {
|
||||
}
|
||||
|
||||
void InBedScreen::init() {
|
||||
if (minecraft->useTouchscreen()) {
|
||||
if (/* minecraft->useTouchscreen() */ true) {
|
||||
bWakeUp = new Touch::TButton(1, "Leave Bed");
|
||||
} else {
|
||||
bWakeUp = new Button(1, "Leave Bed");
|
||||
|
||||
107
src/client/gui/screens/InvalidLicenseScreen.h
Normal file
107
src/client/gui/screens/InvalidLicenseScreen.h
Normal file
@@ -0,0 +1,107 @@
|
||||
#ifndef NET_MINECRAFT_CLIENT_GUI_SCREENS__InvalidLicenseScreen_H__
|
||||
#define NET_MINECRAFT_CLIENT_GUI_SCREENS__InvalidLicenseScreen_H__
|
||||
|
||||
#include "../Screen.h"
|
||||
#include "../components/Button.h"
|
||||
#include "../../Minecraft.h"
|
||||
#include "../../../LicenseCodes.h"
|
||||
|
||||
class InvalidLicenseScreen: public Screen
|
||||
{
|
||||
public:
|
||||
InvalidLicenseScreen(int id, bool hasBuyButton)
|
||||
: _id(id),
|
||||
_hasBuyButton(hasBuyButton),
|
||||
_baseY(0),
|
||||
bOk(0),
|
||||
bBuy(0)
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~InvalidLicenseScreen() {
|
||||
delete bOk;
|
||||
delete bBuy;
|
||||
}
|
||||
|
||||
void init() {
|
||||
if (minecraft->useTouchscreen()) {
|
||||
bOk = new Touch::TButton(1, "Ok");
|
||||
bBuy = new Touch::TButton(2, "Buy");
|
||||
} else {
|
||||
bOk = new Button(1, "Ok");
|
||||
bBuy = new Button(2, "Buy");
|
||||
}
|
||||
|
||||
if (_hasBuyButton)
|
||||
bOk->msg = "Quit";
|
||||
|
||||
if (!LicenseCodes::isOk(_id)) {
|
||||
char buf[20] = {0};
|
||||
sprintf(buf, "%d", _id);
|
||||
|
||||
desc1 = "License verification failed (error ";
|
||||
desc1 += buf;
|
||||
desc1 += ")";
|
||||
desc2 = "Try again later.";
|
||||
hint = "You need to be connected to the internet\n";
|
||||
hint += "once while you start the game.";
|
||||
}
|
||||
|
||||
buttons.push_back(bOk);
|
||||
tabButtons.push_back(bOk);
|
||||
|
||||
if (_hasBuyButton) {
|
||||
buttons.push_back(bBuy);
|
||||
tabButtons.push_back(bBuy);
|
||||
}
|
||||
}
|
||||
|
||||
void setupPositions() {
|
||||
_baseY = height/5 + 6;
|
||||
//if (_hasBuyButton)
|
||||
_baseY -= 24;
|
||||
|
||||
bOk->width = bBuy->width = 200;
|
||||
bOk->x = bBuy->x = (width - bOk->width) / 2;
|
||||
bBuy->y = _baseY + 84;
|
||||
bOk->y = bBuy->y + bBuy->height + 4;
|
||||
|
||||
if (!_hasBuyButton)
|
||||
bOk->y -= 24;
|
||||
}
|
||||
|
||||
void tick() {}
|
||||
|
||||
//void keyPressed(int eventKey) {}
|
||||
|
||||
void render(int xm, int ym, float a) {
|
||||
renderDirtBackground(0);
|
||||
drawCenteredString(minecraft->font, desc1, width/2, _baseY, 0xffffff);
|
||||
drawCenteredString(minecraft->font, desc2, width/2, _baseY + 24, 0xffffff);
|
||||
|
||||
drawCenteredString(minecraft->font, hint, width/2, _baseY + 60, 0xffffff);
|
||||
|
||||
Screen::render(xm, ym, a);
|
||||
}
|
||||
|
||||
void buttonClicked(Button* button) {
|
||||
if (button->id == bOk->id) {
|
||||
minecraft->quit();
|
||||
}
|
||||
if (button->id == bBuy->id) {
|
||||
minecraft->platform()->buyGame();
|
||||
}
|
||||
};
|
||||
private:
|
||||
int _id;
|
||||
std::string desc1;
|
||||
std::string desc2;
|
||||
std::string hint;
|
||||
|
||||
Button* bOk;
|
||||
Button* bBuy;
|
||||
bool _hasBuyButton;
|
||||
int _baseY;
|
||||
};
|
||||
|
||||
#endif /*NET_MINECRAFT_CLIENT_GUI_SCREENS__InvalidLicenseScreen_H__*/
|
||||
@@ -2,8 +2,8 @@
|
||||
#include "../Screen.h"
|
||||
#include "../components/Button.h"
|
||||
#include "../../Minecraft.h"
|
||||
#include "client/gui/components/ImageButton.h"
|
||||
#include "client/gui/components/TextBox.h"
|
||||
#include "../components/ImageButton.h"
|
||||
#include "../components/TextBox.h"
|
||||
|
||||
class JoinByIPScreen: public Screen
|
||||
{
|
||||
|
||||
@@ -19,7 +19,6 @@ OptionsScreen::OptionsScreen()
|
||||
}
|
||||
|
||||
OptionsScreen::~OptionsScreen() {
|
||||
|
||||
if (btnClose != NULL) {
|
||||
delete btnClose;
|
||||
btnClose = NULL;
|
||||
@@ -53,7 +52,6 @@ OptionsScreen::~OptionsScreen() {
|
||||
}
|
||||
|
||||
void OptionsScreen::init() {
|
||||
|
||||
bHeader = new Touch::THeader(0, "Options");
|
||||
|
||||
btnClose = new ImageButton(1, "");
|
||||
@@ -89,7 +87,6 @@ void OptionsScreen::init() {
|
||||
}
|
||||
|
||||
void OptionsScreen::setupPositions() {
|
||||
|
||||
int buttonHeight = btnClose->height;
|
||||
|
||||
btnClose->x = width - btnClose->width;
|
||||
@@ -134,7 +131,6 @@ void OptionsScreen::setupPositions() {
|
||||
|
||||
|
||||
void OptionsScreen::render(int xm, int ym, float a) {
|
||||
|
||||
renderBackground();
|
||||
|
||||
int xmm = xm * width / minecraft->width;
|
||||
@@ -150,11 +146,14 @@ void OptionsScreen::removed() {
|
||||
}
|
||||
|
||||
void OptionsScreen::buttonClicked(Button* button) {
|
||||
|
||||
if (button == btnClose) {
|
||||
minecraft->options.save();
|
||||
if (minecraft->screen != NULL) {
|
||||
minecraft->setScreen(NULL);
|
||||
} else {
|
||||
minecraft->screenChooser.setScreen(SCREEN_STARTMENU);
|
||||
}
|
||||
}
|
||||
else if (button->id > 1 && button->id < 7) {
|
||||
int categoryButton = button->id - categoryButtons[0]->id;
|
||||
selectCategory(categoryButton);
|
||||
@@ -165,7 +164,6 @@ void OptionsScreen::buttonClicked(Button* button) {
|
||||
}
|
||||
|
||||
void OptionsScreen::selectCategory(int index) {
|
||||
|
||||
int currentIndex = 0;
|
||||
|
||||
for (std::vector<Touch::TButton*>::iterator it = categoryButtons.begin(); it != categoryButtons.end(); ++it) {
|
||||
@@ -209,7 +207,8 @@ void OptionsScreen::generateOptionScreens() {
|
||||
|
||||
// // Controls Pane
|
||||
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++) {
|
||||
optionPanes[2]->addOptionItem((OptionId)i, minecraft);
|
||||
@@ -217,6 +216,9 @@ void OptionsScreen::generateOptionScreens() {
|
||||
|
||||
// // Graphics Pane
|
||||
optionPanes[3]->addOptionItem(OPTIONS_FANCY_GRAPHICS, minecraft)
|
||||
// .addOptionItem(&Option::VIEW_BOBBING, minecraft)
|
||||
// .addOptionItem(&Option::AMBIENT_OCCLUSION, minecraft)
|
||||
// .addOptionItem(&Option::ANAGLYPH, minecraft)
|
||||
.addOptionItem(OPTIONS_LIMIT_FRAMERATE, minecraft)
|
||||
.addOptionItem(OPTIONS_VSYNC, minecraft)
|
||||
.addOptionItem(OPTIONS_RENDER_DEBUG, minecraft)
|
||||
@@ -226,11 +228,14 @@ void OptionsScreen::generateOptionScreens() {
|
||||
|
||||
optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
|
||||
.addOptionItem(OPTIONS_BAR_ON_TOP, minecraft)
|
||||
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft);
|
||||
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft)
|
||||
.addOptionItem(OPTIONS_FOLIAGE_TINT, minecraft)
|
||||
.addOptionItem(OPTIONS_JAVA_HUD, minecraft)
|
||||
.addOptionItem(OPTIONS_FOG_TYPE, minecraft);
|
||||
|
||||
}
|
||||
|
||||
void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
|
||||
|
||||
if (currentOptionsGroup != NULL)
|
||||
currentOptionsGroup->mouseClicked(minecraft, x, y, buttonNum);
|
||||
|
||||
@@ -238,7 +243,6 @@ void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
|
||||
}
|
||||
|
||||
void OptionsScreen::mouseReleased(int x, int y, int buttonNum) {
|
||||
|
||||
if (currentOptionsGroup != NULL)
|
||||
currentOptionsGroup->mouseReleased(minecraft, x, y, buttonNum);
|
||||
|
||||
|
||||
@@ -5,12 +5,16 @@
|
||||
#include "../../../util/Mth.h"
|
||||
#include "../../../network/RakNetInstance.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)
|
||||
: saveStep(0),
|
||||
visibleTime(0),
|
||||
bContinue(0),
|
||||
bQuit(0),
|
||||
bOptions(0),
|
||||
bQuitAndSaveLocally(0),
|
||||
bServerVisibility(0),
|
||||
// bThirdPerson(0),
|
||||
@@ -39,18 +43,21 @@ PauseScreen::~PauseScreen() {
|
||||
delete bQuit;
|
||||
delete bQuitAndSaveLocally;
|
||||
delete bServerVisibility;
|
||||
delete bOptions;
|
||||
// delete bThirdPerson;
|
||||
}
|
||||
|
||||
void PauseScreen::init() {
|
||||
if (minecraft->useTouchscreen()) {
|
||||
if (/* minecraft->useTouchscreen() */ true) {
|
||||
bContinue = new Touch::TButton(1, "Back to game");
|
||||
bOptions = new Touch::TButton(5, "Options");
|
||||
bQuit = new Touch::TButton(2, "Quit to title");
|
||||
bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map");
|
||||
bServerVisibility = new Touch::TButton(4, "");
|
||||
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
|
||||
} else {
|
||||
bContinue = new Button(1, "Back to game");
|
||||
bOptions = new Button(5, "Options");
|
||||
bQuit = new Button(2, "Quit to title");
|
||||
bQuitAndSaveLocally = new Button(3, "Quit and copy map");
|
||||
bServerVisibility = new Button(4, "");
|
||||
@@ -59,7 +66,7 @@ void PauseScreen::init() {
|
||||
|
||||
buttons.push_back(bContinue);
|
||||
buttons.push_back(bQuit);
|
||||
|
||||
buttons.push_back(bOptions);
|
||||
// bSound.updateImage(&minecraft->options);
|
||||
bThirdPerson.updateImage(&minecraft->options);
|
||||
bHideGui.updateImage(&minecraft->options);
|
||||
@@ -99,21 +106,24 @@ void PauseScreen::setupPositions() {
|
||||
saveStep = 0;
|
||||
int yBase = 16;
|
||||
|
||||
bContinue->width = bQuit->width = /*bThirdPerson->w =*/ 160;
|
||||
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 160;
|
||||
bQuitAndSaveLocally->width = bServerVisibility->width = 160;
|
||||
|
||||
bContinue->x = (width - bContinue->width) / 2;
|
||||
bContinue->y = yBase + 32 * 1;
|
||||
|
||||
bOptions->x = (width - bOptions->width) / 2;
|
||||
bOptions->y = yBase + 32 * 2;
|
||||
|
||||
bQuit->x = (width - bQuit->width) / 2;
|
||||
bQuit->y = yBase + 32 * 2;
|
||||
bQuit->y = yBase + 32 * 3;
|
||||
|
||||
#if APPLE_DEMO_PROMOTION
|
||||
bQuit->y += 16;
|
||||
#endif
|
||||
|
||||
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
||||
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 3;
|
||||
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4;
|
||||
|
||||
// bSound.y = bThirdPerson.y = 8;
|
||||
// bSound.x = 4;
|
||||
@@ -157,7 +167,9 @@ void PauseScreen::buttonClicked(Button* button) {
|
||||
if (button->id == bQuitAndSaveLocally->id) {
|
||||
minecraft->leaveGame(true);
|
||||
}
|
||||
|
||||
if (button->id == bOptions->id) {
|
||||
minecraft->setScreen(new OptionsScreen());
|
||||
}
|
||||
if (button->id == bServerVisibility->id) {
|
||||
if (minecraft->raknetInstance && minecraft->netCallback && minecraft->raknetInstance->isServer()) {
|
||||
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
|
||||
|
||||
@@ -33,7 +33,9 @@ private:
|
||||
Button* bQuit;
|
||||
Button* bQuitAndSaveLocally;
|
||||
Button* bServerVisibility;
|
||||
// Button* bThirdPerson;
|
||||
Button* bOptions;
|
||||
|
||||
// Button* bThirdPerson;
|
||||
|
||||
// OptionButton bSound;
|
||||
OptionButton bThirdPerson;
|
||||
|
||||
@@ -11,6 +11,8 @@ public:
|
||||
void render(int xm, int ym, float a);
|
||||
bool isInGameScreen();
|
||||
|
||||
virtual void keyPressed(int eventKey) {}
|
||||
|
||||
void tick();
|
||||
private:
|
||||
int ticks;
|
||||
|
||||
@@ -14,14 +14,14 @@
|
||||
|
||||
#include "../../Minecraft.h"
|
||||
|
||||
#include <client/gui/screens/UsernameScreen.h>
|
||||
#include "UsernameScreen.h"
|
||||
|
||||
Screen* ScreenChooser::createScreen( ScreenId id )
|
||||
{
|
||||
Screen* screen = NULL;
|
||||
|
||||
// :sob:
|
||||
if (_mc->useTouchscreen()) {
|
||||
if (/* _mc->useTouchscreen() */ true) {
|
||||
switch (id) {
|
||||
case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); 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));
|
||||
bBack->setImageDef(def, true);
|
||||
}
|
||||
if (minecraft->useTouchscreen()) {
|
||||
if (/* minecraft->useTouchscreen() */ true) {
|
||||
bGamemode = new Touch::TButton(1, "Survival mode");
|
||||
bCheats = new Touch::TButton(4, "Cheats: Off");
|
||||
bCreate = new Touch::TButton(3, "Create");
|
||||
|
||||
@@ -35,8 +35,8 @@ void UsernameScreen::setupPositions()
|
||||
// Make the done button match the touch-style option tabs
|
||||
_btnDone.width = 66;
|
||||
_btnDone.height = 26;
|
||||
_btnDone.x = (width - _btnDone.width) / 2;
|
||||
_btnDone.y = height / 2 + 52;
|
||||
_btnDone.x = cx - (_btnDone.width / 2);
|
||||
_btnDone.y = cy + 52;
|
||||
|
||||
tUsername.width = 120;
|
||||
tUsername.height = 20;
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
|
||||
#include "../Screen.h"
|
||||
#include "../components/Button.h"
|
||||
#include "client/gui/components/TextBox.h"
|
||||
// this is cursed lol
|
||||
#include "../../../client/gui/components/TextBox.h"
|
||||
#include <string>
|
||||
|
||||
class UsernameScreen : public Screen
|
||||
|
||||
@@ -41,7 +41,7 @@ public:
|
||||
//fill(x+1, y+1, x+w-1, y+h-1, 0xff999999);
|
||||
|
||||
bool hovered = active && (minecraft->useTouchscreen()?
|
||||
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
|
||||
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
|
||||
|
||||
if (hovered || *selectedPtr == this)
|
||||
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);
|
||||
|
||||
bool hovered = active && (minecraft->useTouchscreen()?
|
||||
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
|
||||
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
|
||||
|
||||
if (hovered || selected)
|
||||
bgSelected->draw(Tesselator::instance, (float)x, (float)y);
|
||||
|
||||
@@ -91,7 +91,8 @@ void IngameBlockSelectionScreen::init()
|
||||
//for (int i = 0; i < inventory->getContainerSize(); ++i)
|
||||
//LOGI("> %d - %s\n", i, inventory->getItem(i)? inventory->getItem(i)->getDescriptionId().c_str() : "<-->\n");
|
||||
|
||||
InventorySize = inventory->getContainerSize();
|
||||
// Grid indices are 0..N-1 for main inventory only; slots 0..MAX_SELECTION_SIZE-1 are hotbar links.
|
||||
InventorySize = inventory->getContainerSize() - Inventory::MAX_SELECTION_SIZE;
|
||||
InventoryRows = 1 + (InventorySize-1) / InventoryColumns;
|
||||
|
||||
//
|
||||
@@ -265,7 +266,8 @@ void IngameBlockSelectionScreen::buttonClicked(Button* button) {
|
||||
|
||||
bool IngameBlockSelectionScreen::isAllowed( int slot )
|
||||
{
|
||||
if (slot < 0 || slot >= minecraft->player->inventory->getContainerSize())
|
||||
const int gridCount = minecraft->player->inventory->getContainerSize() - Inventory::MAX_SELECTION_SIZE;
|
||||
if (slot < 0 || slot >= gridCount)
|
||||
return false;
|
||||
|
||||
#ifdef DEMO_MODE
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include <direct.h>
|
||||
#include <sys/stat.h>
|
||||
#else
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
@@ -387,6 +388,12 @@ void LocalPlayer::calculateFlight(float xa, float ya, float za) {
|
||||
ya = 0;
|
||||
za = za * flySpeed;
|
||||
|
||||
if (sprinting) {
|
||||
float sprintBoost = getWalkingSpeedModifier(); // 1.3x
|
||||
xa *= sprintBoost;
|
||||
za *= sprintBoost;
|
||||
}
|
||||
|
||||
#ifdef ANDROID
|
||||
if (Keyboard::isKeyDown(103)) ya = .2f * flySpeed;
|
||||
if (Keyboard::isKeyDown(102)) ya = -.2f * flySpeed;
|
||||
@@ -505,7 +512,7 @@ void LocalPlayer::aiStep() {
|
||||
if (sprintDoubleTapTimer > 0) sprintDoubleTapTimer--;
|
||||
prevForwardHeld = forwardHeld;
|
||||
}
|
||||
if (input->sneaking || abilities.flying)
|
||||
if (input->sneaking)
|
||||
sprinting = false;
|
||||
|
||||
if (input->sneaking) {
|
||||
|
||||
@@ -50,10 +50,8 @@ void KeyboardInput::tick( Player* player )
|
||||
ya *= 0.3f;
|
||||
}
|
||||
|
||||
#if defined(RPI) || defined(PLATFORM_DESKTOP)
|
||||
wantUp = jumping;
|
||||
wantDown = sneaking;
|
||||
#endif
|
||||
|
||||
if (keys[KEY_CRAFT])
|
||||
player->startCrafting((int)player->x, (int)player->y, (int)player->z, Recipe::SIZE_2X2);
|
||||
|
||||
@@ -164,7 +164,7 @@ void TouchscreenInput_TestFps::onConfigChanged(const Config& c) {
|
||||
|
||||
float maxPixels = _minecraft->pixelCalc.millimetersToPixels(10);
|
||||
// float btnSize = Mth::Min(18 * Gui::GuiScale, maxPixels);
|
||||
float btnSize = pc.millimetersToPixels(50);
|
||||
float btnSize = pc.millimetersToPixels(18 * Gui::GuiScale);
|
||||
_model.addArea(AREA_PAUSE, aPause = new RectangleArea(w - 4 - btnSize, 4, w - 4, 4 + btnSize));
|
||||
_model.addArea(AREA_CHAT, aChat = new RectangleArea(w - 8 - btnSize * 2, 4, w - 8 - btnSize, 4 + btnSize));
|
||||
|
||||
@@ -320,6 +320,7 @@ void TouchscreenInput_TestFps::tick( Player* player )
|
||||
if (Multitouch::isReleased(p)) {
|
||||
_minecraft->soundEngine->playUI("random.click", 1, 1);
|
||||
_minecraft->screenChooser.setScreen(SCREEN_CONSOLE);
|
||||
_minecraft->platform()->showKeyboard();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
#include "../../world/level/Region.h"
|
||||
#include "../../world/level/chunk/LevelChunk.h"
|
||||
#include "../../util/Mth.h"
|
||||
|
||||
#include "../../world/level/biome/BiomeSource.h"
|
||||
|
||||
#include "../../world/level/Level.h"
|
||||
//#include "../../platform/time.h"
|
||||
|
||||
/*static*/ int Chunk::updates = 0;
|
||||
|
||||
@@ -153,7 +153,7 @@ void GameRenderer::render(float a) {
|
||||
|
||||
int xMouse = (int)(Mouse::getX() * Gui::InvGuiScale);
|
||||
int yMouse = (int)(Mouse::getY() * Gui::InvGuiScale);
|
||||
#ifndef PLATFORM_DESKTOP
|
||||
|
||||
if (mc->useTouchscreen()) {
|
||||
const int pid = Multitouch::getFirstActivePointerIdExThisUpdate();
|
||||
if (pid >= 0) {
|
||||
@@ -164,7 +164,6 @@ void GameRenderer::render(float a) {
|
||||
yMouse = -9999;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
TIMER_POP();
|
||||
|
||||
bool hasClearedColorBuffer = false;
|
||||
@@ -361,9 +360,9 @@ void GameRenderer::renderLevel(float a) {
|
||||
if (mc->hitResult.isHit() && !cameraEntity->isUnderLiquid(Material::water)) {
|
||||
TIMER_POP_PUSH("select");
|
||||
Player* player = (Player*) cameraEntity;
|
||||
if (mc->useTouchscreen()) {
|
||||
// if (mc->useTouchscreen()) {
|
||||
levelRenderer->renderHitSelect(player, mc->hitResult, 0, NULL, a); //player.inventory->getSelected(), a);
|
||||
}
|
||||
// }
|
||||
levelRenderer->renderHit(player, mc->hitResult, 0, NULL, a);//player->inventory.getSelected(), a);
|
||||
}
|
||||
}
|
||||
@@ -657,11 +656,9 @@ void GameRenderer::pick(float a) {
|
||||
|
||||
float range = mc->gameMode->getPickRange();
|
||||
bool isPicking = true;
|
||||
#ifndef PLATFORM_DESKTOP
|
||||
bool freeform = mc->useTouchscreen() && !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA);
|
||||
#else
|
||||
bool freeform = false;
|
||||
#endif
|
||||
|
||||
bool freeform = mc->useTouchscreen(); //&& !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA);
|
||||
|
||||
if (freeform) {
|
||||
isPicking = updateFreeformPickDirection(a, pickDirection);
|
||||
} else {
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
|
||||
#include "../../client/player/LocalPlayer.h"
|
||||
|
||||
#include "../../world/level/GrassColor.h"
|
||||
|
||||
#ifdef GFX_SMALLER_CHUNKS
|
||||
/* static */ const int LevelRenderer::CHUNK_SIZE = 8;
|
||||
#else
|
||||
@@ -32,7 +34,7 @@
|
||||
#endif
|
||||
|
||||
LevelRenderer::LevelRenderer( Minecraft* mc)
|
||||
: mc(mc),
|
||||
: mc(mc),
|
||||
textures(mc->textures),
|
||||
level(NULL),
|
||||
cullStep(0),
|
||||
@@ -47,6 +49,7 @@ LevelRenderer::LevelRenderer( Minecraft* mc)
|
||||
xMaxChunk(0), yMaxChunk(0), zMaxChunk(0),
|
||||
|
||||
lastViewDistance(-1),
|
||||
lastFogType(-1),
|
||||
|
||||
noEntityRenderFrames(2),
|
||||
totalEntities(0),
|
||||
@@ -143,6 +146,10 @@ void LevelRenderer::setLevel( Level* level )
|
||||
level->addListener(this);
|
||||
allChanged();
|
||||
}
|
||||
if (mc->options.getBooleanValue(OPTIONS_AMBIENT_OCCLUSION)) {
|
||||
mc->useAmbientOcclusion = !mc->useAmbientOcclusion;
|
||||
allChanged();
|
||||
}
|
||||
}
|
||||
|
||||
void LevelRenderer::allChanged()
|
||||
@@ -155,14 +162,21 @@ void LevelRenderer::allChanged()
|
||||
Tile::leaves_carried->setFancy(fancy);
|
||||
lastViewDistance = mc->options.getIntValue(OPTIONS_VIEW_DISTANCE);
|
||||
|
||||
lastFogType = mc->options.getIntValue(OPTIONS_FOG_TYPE);
|
||||
|
||||
bool tint = mc->options.getBooleanValue(OPTIONS_FOLIAGE_TINT);
|
||||
FoliageColor::setUseTint(tint);
|
||||
GrassColor::setUseTint(tint);
|
||||
|
||||
|
||||
int dist = (512 >> 3) << (3 - lastViewDistance);
|
||||
if (lastViewDistance <= 2 && mc->isPowerVR())
|
||||
dist = (int)((float)dist * 0.8f);
|
||||
LOGI("last: %d, power: %d\n", lastViewDistance, mc->isPowerVR());
|
||||
|
||||
#if defined(RPI)
|
||||
#if defined(RPI)
|
||||
dist *= 0.6f;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (dist > 400) dist = 400;
|
||||
/*
|
||||
@@ -301,6 +315,17 @@ int LevelRenderer::render( Mob* player, int layer, float alpha )
|
||||
allChanged();
|
||||
}
|
||||
|
||||
int currentFogType = mc->options.getIntValue(OPTIONS_FOG_TYPE);
|
||||
if (currentFogType != lastFogType) {
|
||||
lastFogType = currentFogType;
|
||||
|
||||
if (level && level->dimension) {
|
||||
level->dimension->FogType = currentFogType; // use new fog stuff
|
||||
}
|
||||
|
||||
allChanged();
|
||||
}
|
||||
|
||||
TIMER_PUSH("sortchunks");
|
||||
for (int i = 0; i < 10; i++) {
|
||||
chunkFixOffs = (chunkFixOffs + 1) % chunksLength;
|
||||
@@ -569,11 +594,11 @@ int LevelRenderer::renderChunks( int from, int to, int layer, float alpha )
|
||||
|
||||
for (unsigned int i = 0; i < _renderChunks.size(); ++i) {
|
||||
Chunk* chunk = _renderChunks[i];
|
||||
#ifdef USE_VBO
|
||||
#ifdef USE_VBO
|
||||
renderList.addR(chunk->getRenderChunk(layer));
|
||||
#else
|
||||
#else
|
||||
renderList.add(chunk->getList(layer));
|
||||
#endif
|
||||
#endif
|
||||
renderList.next();
|
||||
}
|
||||
|
||||
@@ -1128,53 +1153,53 @@ void LevelRenderer::addParticle(const std::string& name, float x, float y, float
|
||||
|
||||
/*
|
||||
void LevelRenderer::addParticle(ParticleType::Id name, float x, float y, float z, float xa, float ya, float za, int data) {
|
||||
float xd = mc->cameraTargetPlayer->x - x;
|
||||
float yd = mc->cameraTargetPlayer->y - y;
|
||||
float zd = mc->cameraTargetPlayer->z - z;
|
||||
float xd = mc->cameraTargetPlayer->x - x;
|
||||
float yd = mc->cameraTargetPlayer->y - y;
|
||||
float zd = mc->cameraTargetPlayer->z - z;
|
||||
|
||||
const float particleDistance = 16;
|
||||
if (xd * xd + yd * yd + zd * zd > particleDistance * particleDistance) return;
|
||||
const float particleDistance = 16;
|
||||
if (xd * xd + yd * yd + zd * zd > particleDistance * particleDistance) return;
|
||||
|
||||
//static Stopwatch sw;
|
||||
//sw.start();
|
||||
//static Stopwatch sw;
|
||||
//sw.start();
|
||||
|
||||
//Particle* p = NULL;
|
||||
//Particle* p = NULL;
|
||||
|
||||
if (name == ParticleType::bubble) mc->particleEngine->add( new BubbleParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::crit) mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::smoke) mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::explode) mc->particleEngine->add( new ExplodeParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::flame) mc->particleEngine->add( new FlameParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::lava) mc->particleEngine->add( new LavaParticle(level, x, y, z) );
|
||||
else if (name == ParticleType::largesmoke) mc->particleEngine->add( new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f) );
|
||||
else if (name == ParticleType::reddust) mc->particleEngine->add( new RedDustParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::iconcrack) mc->particleEngine->add( new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]) );
|
||||
if (name == ParticleType::bubble) mc->particleEngine->add( new BubbleParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::crit) mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::smoke) mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::explode) mc->particleEngine->add( new ExplodeParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::flame) mc->particleEngine->add( new FlameParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::lava) mc->particleEngine->add( new LavaParticle(level, x, y, z) );
|
||||
else if (name == ParticleType::largesmoke) mc->particleEngine->add( new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f) );
|
||||
else if (name == ParticleType::reddust) mc->particleEngine->add( new RedDustParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::iconcrack) mc->particleEngine->add( new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]) );
|
||||
|
||||
//switch (name) {
|
||||
// case ParticleType::bubble: p = new BubbleParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::crit: p = new CritParticle2(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::smoke: p = new SmokeParticle(level, x, y, z, xa, ya, za); break;
|
||||
// //case ParticleType::note: p = new NoteParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::explode: p = new ExplodeParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::flame: p = new FlameParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::lava: p = new LavaParticle(level, x, y, z); break;
|
||||
// //case ParticleType::splash: p = new SplashParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::largesmoke: p = new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f); break;
|
||||
// case ParticleType::reddust: p = new RedDustParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::iconcrack: p = new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]); break;
|
||||
// //case ParticleType::snowballpoof: p = new BreakingItemParticle(level, x, y, z, Item::snowBall); break;
|
||||
// //case ParticleType::slime: p = new BreakingItemParticle(level, x, y, z, Item::slimeBall); break;
|
||||
// //case ParticleType::heart: p = new HeartParticle(level, x, y, z, xa, ya, za); break;
|
||||
// default:
|
||||
// LOGW("Couldn't find particle of type: %d\n", name);
|
||||
// break;
|
||||
//}
|
||||
//if (p) {
|
||||
// mc->particleEngine->add(p);
|
||||
//}
|
||||
//switch (name) {
|
||||
// case ParticleType::bubble: p = new BubbleParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::crit: p = new CritParticle2(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::smoke: p = new SmokeParticle(level, x, y, z, xa, ya, za); break;
|
||||
// //case ParticleType::note: p = new NoteParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::explode: p = new ExplodeParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::flame: p = new FlameParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::lava: p = new LavaParticle(level, x, y, z); break;
|
||||
// //case ParticleType::splash: p = new SplashParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::largesmoke: p = new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f); break;
|
||||
// case ParticleType::reddust: p = new RedDustParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::iconcrack: p = new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]); break;
|
||||
// //case ParticleType::snowballpoof: p = new BreakingItemParticle(level, x, y, z, Item::snowBall); break;
|
||||
// //case ParticleType::slime: p = new BreakingItemParticle(level, x, y, z, Item::slimeBall); break;
|
||||
// //case ParticleType::heart: p = new HeartParticle(level, x, y, z, xa, ya, za); break;
|
||||
// default:
|
||||
// LOGW("Couldn't find particle of type: %d\n", name);
|
||||
// break;
|
||||
//}
|
||||
//if (p) {
|
||||
// mc->particleEngine->add(p);
|
||||
//}
|
||||
|
||||
//sw.stop();
|
||||
//sw.printEvery(50, "add-particle-enum");
|
||||
//sw.stop();
|
||||
//sw.printEvery(50, "add-particle-enum");
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
@@ -113,6 +113,9 @@ private:
|
||||
bool occlusionCheck;
|
||||
int lastViewDistance;
|
||||
|
||||
// shredder added again...
|
||||
int lastFogType;
|
||||
|
||||
int ticks;
|
||||
int starList, skyList, darkList;
|
||||
|
||||
|
||||
@@ -249,6 +249,37 @@ int Textures::crispBlend( int c0, int c1 )
|
||||
return (a << 24) | (r << 16) | (g << 8) | b;
|
||||
}
|
||||
|
||||
// shredder here, moved the code from minecraft.cpp bcus that isnt the right place
|
||||
// had to implement this because i couldn't find a similar function in the code to do this
|
||||
int* Textures::loadTexturePixels(TextureId texId, const std::string& resourceName){
|
||||
|
||||
const TextureData* texture = getTemporaryTextureData(texId); // storing raw pixels
|
||||
|
||||
int size = texture->w * texture->h; // gets the size of our funny lil guy
|
||||
int* pixels = new int[size]; // memory leaks be galore
|
||||
unsigned char* raw = texture->data; // storing raw data into our beloved variable
|
||||
for (int i = 0; i < (texture->w * texture->h); i++){
|
||||
// my head hurts i hate working with this
|
||||
|
||||
|
||||
// uh since each pixel stores r g b a, aka the color channels which are each one byte, we multiply them by 4 to move from one pixel to another
|
||||
|
||||
int r = raw[i * 4 + 0]; // gets us the first channel aka red
|
||||
int g = raw[i * 4 + 1]; // gets us the second channel green
|
||||
int b = raw[i * 4 + 2]; // gets us the third channel blue
|
||||
int a = raw[i * 4 + 3]; // gets us the alpha channel
|
||||
|
||||
// woohoo pixels uh should have been seperated into their colors now hopefully
|
||||
|
||||
// r g b a
|
||||
// ugh we now got to turn it into the AA RR GGBB format aak 0xAARRGGBB
|
||||
// b gets 0 - 7 (8 bits), g gets 7 - 15 (8 bits), r gets 16 - 23 (8 bits), alpha gets the last ones 24 - 31 (8 bits),
|
||||
pixels[i] = (a << 24) | (r << 16) | (g << 8) | (b); // shuld combine them into one 32 bit int unless i did something dumb
|
||||
}
|
||||
return pixels; // your meal has been prepared john colors
|
||||
}
|
||||
|
||||
|
||||
///*public*/ int loadHttpTexture(std::string url, std::string backup) {
|
||||
// HttpTexture texture = httpTextures.get(url);
|
||||
// if (texture != NULL) {
|
||||
|
||||
@@ -44,6 +44,8 @@ public:
|
||||
TextureId assignTexture(const std::string& resourceName, const TextureData& img);
|
||||
const TextureData* getTemporaryTextureData(TextureId id);
|
||||
|
||||
int* loadTexturePixels(TextureId texId, const std::string& resourceName);
|
||||
|
||||
void tick(bool uploadToGraphicsCard);
|
||||
|
||||
void clear();
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "../../world/level/tile/BedTile.h"
|
||||
#include "../../world/level/tile/StemTile.h"
|
||||
#include "../../world/level/tile/StairTile.h"
|
||||
#include "../../world/level/tile/FireTile.h"
|
||||
#include "../../world/Direction.h"
|
||||
#include "../../world/Facing.h"
|
||||
#include "tileentity/TileEntityRenderer.h"
|
||||
@@ -157,8 +158,8 @@ bool TileRenderer::tesselateInWorld( Tile* tt, int x, int y, int z )
|
||||
return tesselateRowInWorld(tt, x, y, z);
|
||||
} else if (shape == Tile::SHAPE_TORCH) {
|
||||
return tesselateTorchInWorld(tt, x, y, z);
|
||||
//} else if (shape == Tile::SHAPE_FIRE) {
|
||||
// return tesselateFireInWorld(tt, x, y, z);
|
||||
} else if (shape == Tile::SHAPE_FIRE) {
|
||||
return tesselateFireInWorld(tt, x, y, z);
|
||||
//} else if (shape == Tile::SHAPE_RED_DUST) {
|
||||
// return tesselateDustInWorld(tt, x, y, z);
|
||||
} else if (shape == Tile::SHAPE_LADDER) {
|
||||
@@ -222,6 +223,278 @@ bool TileRenderer::tesselateTorchInWorld( Tile* tt, int x, int y, int z )
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TileRenderer::tesselateFireInWorld( Tile* tt, int x, int y, int z )
|
||||
{
|
||||
// @todo: fire alpha transparency seems to be scuffed, also it seems i might have messed up the second layer while porting from lce/java , need to look into it - shredder
|
||||
|
||||
Tesselator& t = Tesselator::instance;
|
||||
|
||||
int tex = tt->getTexture(0);
|
||||
|
||||
if (fixedTexture >= 0) tex = fixedTexture;
|
||||
|
||||
float br = tt->getBrightness( level, x, y, z );
|
||||
t.color( br, br, br );
|
||||
|
||||
int xt = ((tex & 0xf) << 4);
|
||||
int yt = tex & 0xf0;
|
||||
|
||||
float u0 = (xt) / 256.0f;
|
||||
float u1 = (xt + 15.99f) / 256.0f;
|
||||
float v0 = (yt) / 256.0f;
|
||||
float v1 = (yt + 15.99f) / 256.0f;
|
||||
float h = 1.4f;
|
||||
|
||||
if ( level->isSolidBlockingTile( x, y - 1, z ) || Tile::fire->canBurn( level, x, y - 1, z ) )
|
||||
{
|
||||
float x0 = x + 0.5f + 0.2f;
|
||||
float x1 = x + 0.5f - 0.2f;
|
||||
float z0 = z + 0.5f + 0.2f;
|
||||
float z1 = z + 0.5f - 0.2f;
|
||||
|
||||
float x0_ = x + 0.5f - 0.3f;
|
||||
float x1_ = x + 0.5f + 0.3f;
|
||||
float z0_ = z + 0.5f - 0.3f;
|
||||
float z1_ = z + 0.5f + 0.3f;
|
||||
|
||||
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v0 ) );
|
||||
|
||||
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v0 ) );
|
||||
|
||||
|
||||
|
||||
u0 = (xt) / 256.0f;
|
||||
u1 = (xt + 15.99f) / 256.0f;
|
||||
v0 = (yt) / 256.0f;
|
||||
v1 = (yt + 15.99f) / 256.0f;
|
||||
|
||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
|
||||
|
||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
|
||||
|
||||
x0 = x + 0.5f - 0.5f;
|
||||
x1 = x + 0.5f + 0.5f;
|
||||
z0 = z + 0.5f - 0.5f;
|
||||
z1 = z + 0.5f + 0.5f;
|
||||
|
||||
x0_ = x + 0.5f - 0.4f;
|
||||
x1_ = x + 0.5f + 0.4f;
|
||||
z0_ = z + 0.5f - 0.4f;
|
||||
z1_ = z + 0.5f + 0.4f;
|
||||
|
||||
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v0 ) );
|
||||
|
||||
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v0 ) );
|
||||
|
||||
|
||||
u0 = (xt) / 256.0f;
|
||||
u1 = (xt + 15.99f) / 256.0f;
|
||||
v0 = (yt) / 256.0f;
|
||||
v1 = (yt + 15.99f) / 256.0f;
|
||||
|
||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
|
||||
|
||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
float r = 0.2f;
|
||||
float yo = 1 / 16.0f;
|
||||
if ( ( ( x + y + z ) & 1 ) == 1 )
|
||||
{
|
||||
u0 = (xt) / 256.0f;
|
||||
u1 = (xt + 15.99f) / 256.0f;
|
||||
v0 = (yt) / 256.0f;
|
||||
v1 = (yt + 15.99f) / 256.0f;
|
||||
}
|
||||
if ( ( ( x / 2 + y / 2 + z / 2 ) & 1 ) == 1 )
|
||||
{
|
||||
float tmp = u1;
|
||||
u1 = u0;
|
||||
u0 = tmp;
|
||||
}
|
||||
if ( Tile::fire->canBurn( level, x - 1, y, z ) )
|
||||
{
|
||||
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
|
||||
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
|
||||
0.0f ), ( float )( u0 ), ( float )( v0 ) );
|
||||
|
||||
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
|
||||
0.0f ), ( float )( u0 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
|
||||
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
||||
}
|
||||
if ( Tile::fire->canBurn( level, x + 1, y, z ) )
|
||||
{
|
||||
t.vertexUV( ( float )( x + 1 - r ), ( float )( y + h + yo ), ( float )( z +
|
||||
0.0f ), ( float )( u0 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 1 - 0 ), ( float )( y + 0 + yo ), ( float )( z +
|
||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1 - 0 ), ( float )( y + 0 + yo ), ( float )( z +
|
||||
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1 - r ), ( float )( y + h + yo ), ( float )( z +
|
||||
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
||||
|
||||
t.vertexUV( ( float )( x + 1.0f - r ), ( float )( y + h + yo ), ( float )( z +
|
||||
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 1.0f - 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1.0f - 0 ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1.0f - r ), ( float )( y + h + yo ), ( float )( z +
|
||||
0.0f ), ( float )( u0 ), ( float )( v0 ) );
|
||||
}
|
||||
if ( Tile::fire->canBurn( level, x, y, z - 1 ) )
|
||||
{
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z +
|
||||
r ), ( float )( u1 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||
0.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z +
|
||||
r ), ( float )( u0 ), ( float )( v0 ) );
|
||||
|
||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z +
|
||||
r ), ( float )( u0 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||
0.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z +
|
||||
r ), ( float )( u1 ), ( float )( v0 ) );
|
||||
}
|
||||
if ( Tile::fire->canBurn( level, x, y, z + 1 ) )
|
||||
{
|
||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
|
||||
r ), ( float )( u0 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
|
||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
|
||||
0.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
|
||||
r ), ( float )( u1 ), ( float )( v0 ) );
|
||||
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
|
||||
r ), ( float )( u1 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
|
||||
0.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
|
||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
|
||||
r ), ( float )( u0 ), ( float )( v0 ) );
|
||||
}
|
||||
if ( Tile::fire->canBurn( level, x, y + 1.0f, z ) )
|
||||
{
|
||||
double x0 = x + 0.5f + 0.5f;
|
||||
double x1 = x + 0.5f - 0.5f;
|
||||
double z0 = z + 0.5f + 0.5f;
|
||||
double z1 = z + 0.5f - 0.5f;
|
||||
|
||||
double x0_ = x + 0.5f - 0.5f;
|
||||
double x1_ = x + 0.5f + 0.5f;
|
||||
double z0_ = z + 0.5f - 0.5f;
|
||||
double z1_ = z + 0.5f + 0.5f;
|
||||
|
||||
u0 = (xt) / 256.0f;
|
||||
u1 = (xt + 15.99f) / 256.0f;
|
||||
v0 = (yt) / 256.0f;
|
||||
v1 = (yt + 15.99f) / 256.0f;
|
||||
|
||||
y += 1;
|
||||
h = -0.2f;
|
||||
|
||||
if ( ( ( x + y + z ) & 1 ) == 0 )
|
||||
{
|
||||
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z +
|
||||
0 ), ( float )( u1 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z +
|
||||
0 ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z +
|
||||
1 ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z +
|
||||
1 ), ( float )( u0 ), ( float )( v0 ) );
|
||||
|
||||
u0 = (xt) / 256.0f;
|
||||
u1 = (xt + 15.99f) / 256.0f;
|
||||
v0 = (yt) / 256.0f;
|
||||
v1 = (yt + 15.99f) / 256.0f;
|
||||
|
||||
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z +
|
||||
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x1 ), ( float )( y + 0.0f ), ( float )( z +
|
||||
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x1 ), ( float )( y + 0.0f ), ( float )( z +
|
||||
0 ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z +
|
||||
0 ), ( float )( u0 ), ( float )( v0 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
|
||||
h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
|
||||
0.0f ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
|
||||
0.0f ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
|
||||
h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
|
||||
|
||||
u0 = (xt) / 256.0f;
|
||||
u1 = (xt + 15.99f) / 256.0f;
|
||||
v0 = (yt) / 256.0f;
|
||||
v1 = (yt + 15.99f) / 256.0f;
|
||||
|
||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
|
||||
h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
|
||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
|
||||
0.0f ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
|
||||
0.0f ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
|
||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
|
||||
h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
bool TileRenderer::tesselateLadderInWorld( Tile* tt, int x, int y, int z )
|
||||
{
|
||||
Tesselator& t = Tesselator::instance;
|
||||
|
||||
@@ -34,6 +34,8 @@ public:
|
||||
bool tesselateFenceGateInWorld(FenceGateTile* tt, int x, int y, int z);
|
||||
bool tesselateBedInWorld(Tile *tt, int x, int y, int z);
|
||||
bool tesselateRowInWorld(Tile* tt, int x, int y, int z);
|
||||
bool tesselateFireInWorld(Tile* tt, int x, int y, int z);
|
||||
|
||||
|
||||
void tesselateTorch(Tile* tt, float x, float y, float z, float xxa, float zza);
|
||||
void tesselateCrossTexture(Tile* tt, int data, float x, float y, float z);
|
||||
|
||||
@@ -40,18 +40,18 @@ EntityRenderDispatcher::EntityRenderDispatcher()
|
||||
{
|
||||
//@note: The Models (model/armor) will be deleted by resp. MobRenderer
|
||||
assign( ER_ITEM_RENDERER, new ItemRenderer());
|
||||
assign( ER_HUMANOID_RENDERER, new HumanoidMobRenderer(new HumanoidModel(), 0));
|
||||
assign( ER_PIG_RENDERER, new PigRenderer(new PigModel(), NULL/*new PigModel(0.5f)*/, 0));
|
||||
assign( ER_COW_RENDERER, new MobRenderer(new CowModel(), 0));
|
||||
assign( ER_CHICKEN_RENDERER, new ChickenRenderer( new ChickenModel(), 0));
|
||||
assign( ER_SHEEP_RENDERER, new SheepRenderer(new SheepModel(), new SheepFurModel(), 0));
|
||||
assign( ER_HUMANOID_RENDERER, new HumanoidMobRenderer(new HumanoidModel(), 0.5));
|
||||
assign( ER_PIG_RENDERER, new PigRenderer(new PigModel(0.5), NULL/*new PigModel(0.5f)*/, 0.7));
|
||||
assign( ER_COW_RENDERER, new MobRenderer(new CowModel(), 0.7));
|
||||
assign( ER_CHICKEN_RENDERER, new ChickenRenderer( new ChickenModel(), 0.3));
|
||||
assign( ER_SHEEP_RENDERER, new SheepRenderer(new SheepModel(), new SheepFurModel(), 0.7));
|
||||
assign( ER_SKELETON_RENDERER, new HumanoidMobRenderer(new SkeletonModel(), 0.5f));
|
||||
assign( ER_ZOMBIE_RENDERER, new HumanoidMobRenderer(new ZombieModel(), 0.5f));
|
||||
assign( ER_CREEPER_RENDERER, new CreeperRenderer());
|
||||
assign( ER_SPIDER_RENDERER, new SpiderRenderer());
|
||||
assign( ER_TNT_RENDERER, new TntRenderer());
|
||||
assign( ER_ARROW_RENDERER, new ArrowRenderer());
|
||||
assign( ER_PLAYER_RENDERER, new PlayerRenderer(new HumanoidModel(0, 0, 64, 64), 0));
|
||||
assign( ER_PLAYER_RENDERER, new PlayerRenderer(new HumanoidModel(0, 0, 64, 64), 0.5));
|
||||
assign( ER_THROWNEGG_RENDERER, new ItemSpriteRenderer(Item::egg->getIcon(0)));
|
||||
assign( ER_SNOWBALL_RENDERER, new ItemSpriteRenderer(Item::snowBall->getIcon(0)));
|
||||
assign( ER_PAINTING_RENDERER, new PaintingRenderer());
|
||||
@@ -133,7 +133,7 @@ void EntityRenderDispatcher::render( Entity* entity, float x, float y, float z,
|
||||
EntityRenderer* renderer = getRenderer(entity);
|
||||
if (renderer != NULL) {
|
||||
renderer->render(entity, x, y, z, rot, a);
|
||||
//renderer->postRender(entity, x, y, z, rot, a);
|
||||
renderer->postRender(entity, x, y, z, rot, a);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,11 +5,17 @@
|
||||
#include "../gles.h"
|
||||
#include "../../../world/phys/AABB.h"
|
||||
#include "EntityRenderDispatcher.h"
|
||||
#include "../../../util/Mth.h"
|
||||
#include "../../../world/level/Level.h"
|
||||
#include "../../../world/level/tile/Tile.h"
|
||||
|
||||
#include "../../Minecraft.h"
|
||||
#include "../../Option.h"
|
||||
|
||||
EntityRenderDispatcher* EntityRenderer::entityRenderDispatcher = NULL;
|
||||
|
||||
EntityRenderer::EntityRenderer()
|
||||
: shadowRadius(0),
|
||||
: shadowRadius(0),
|
||||
shadowStrength(1.0f)
|
||||
{}
|
||||
|
||||
@@ -36,37 +42,37 @@ void EntityRenderer::render(const AABB& bb, float xo, float yo, float zo) {
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
t.begin();
|
||||
t.offset(xo, yo, zo);
|
||||
//t.normal(0, 0, -1);
|
||||
t.normal(0, 0, -1);
|
||||
t.vertex(bb.x0, bb.y1, bb.z0);
|
||||
t.vertex(bb.x1, bb.y1, bb.z0);
|
||||
t.vertex(bb.x1, bb.y0, bb.z0);
|
||||
t.vertex(bb.x0, bb.y0, bb.z0);
|
||||
|
||||
//t.normal(0, 0, 1);
|
||||
t.normal(0, 0, 1);
|
||||
t.vertex(bb.x0, bb.y0, bb.z1);
|
||||
t.vertex(bb.x1, bb.y0, bb.z1);
|
||||
t.vertex(bb.x1, bb.y1, bb.z1);
|
||||
t.vertex(bb.x0, bb.y1, bb.z1);
|
||||
|
||||
//t.normal(0, -1, 0);
|
||||
t.normal(0, -1, 0);
|
||||
t.vertex(bb.x0, bb.y0, bb.z0);
|
||||
t.vertex(bb.x1, bb.y0, bb.z0);
|
||||
t.vertex(bb.x1, bb.y0, bb.z1);
|
||||
t.vertex(bb.x0, bb.y0, bb.z1);
|
||||
|
||||
//t.normal(0, 1, 0);
|
||||
t.normal(0, 1, 0);
|
||||
t.vertex(bb.x0, bb.y1, bb.z1);
|
||||
t.vertex(bb.x1, bb.y1, bb.z1);
|
||||
t.vertex(bb.x1, bb.y1, bb.z0);
|
||||
t.vertex(bb.x0, bb.y1, bb.z0);
|
||||
|
||||
//t.normal(-1, 0, 0);
|
||||
t.normal(-1, 0, 0);
|
||||
t.vertex(bb.x0, bb.y0, bb.z1);
|
||||
t.vertex(bb.x0, bb.y1, bb.z1);
|
||||
t.vertex(bb.x0, bb.y1, bb.z0);
|
||||
t.vertex(bb.x0, bb.y0, bb.z0);
|
||||
|
||||
//t.normal(1, 0, 0);
|
||||
t.normal(1, 0, 0);
|
||||
t.vertex(bb.x1, bb.y0, bb.z0);
|
||||
t.vertex(bb.x1, bb.y1, bb.z0);
|
||||
t.vertex(bb.x1, bb.y1, bb.z1);
|
||||
@@ -116,134 +122,139 @@ Font* EntityRenderer::getFont() {
|
||||
return entityRenderDispatcher->getFont();
|
||||
}
|
||||
|
||||
//void postRender(Entity entity, float x, float y, float z, float rot, float a) {
|
||||
// if (entityRenderDispatcher.options.fancyGraphics && shadowRadius > 0) {
|
||||
// float dist = entityRenderDispatcher.distanceToSqr(entity.x, entity.y, entity.z);
|
||||
// float pow = (float) ((1 - dist / (16.0f * 16.0f)) * shadowStrength);
|
||||
// if (pow > 0) {
|
||||
// renderShadow(entity, x, y, z, pow, a);
|
||||
// }
|
||||
// }
|
||||
// if (entity.isOnFire()) renderFlame(entity, x, y, z, a);
|
||||
//}
|
||||
void EntityRenderer::postRender(Entity* entity, float x, float y, float z, float rot, float a) {
|
||||
if (/*entityRenderDispatcher.options.fancyGraphics &&*/entityRenderDispatcher->minecraft->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS) && shadowRadius > 0) {
|
||||
float dist = entityRenderDispatcher->distanceToSqr(entity->x, entity->y, entity->z);
|
||||
float pow = (float) ((1 - dist / (16.0f * 16.0f)) * shadowStrength);
|
||||
if (pow > 0) {
|
||||
renderShadow(entity, x, y, z, pow, a);
|
||||
}
|
||||
//}
|
||||
if (entity->isOnFire()) renderFlame(entity, x, y, z, a);
|
||||
}
|
||||
}
|
||||
void EntityRenderer::renderFlame(Entity* e, float x, float y, float z, float a) {
|
||||
|
||||
//void renderFlame(Entity e, float x, float y, float z, float a) {
|
||||
// glDisable2(GL_LIGHTING);
|
||||
// int tex = Tile.fire.tex;
|
||||
int tex = ((Tile*)Tile::fire)->tex;
|
||||
|
||||
// int xt = (tex & 0xf) << 4;
|
||||
// int yt = tex & 0xf0;
|
||||
int xt = (tex & 0xf) << 4;
|
||||
int yt = tex & 0xf0;
|
||||
|
||||
// float u0 = (xt) / 256.0f;
|
||||
// float u1 = (xt + 15.99f) / 256.0f;
|
||||
// float v0 = (yt) / 256.0f;
|
||||
// float v1 = (yt + 15.99f) / 256.0f;
|
||||
float u0 = (xt) / 256.0f;
|
||||
float u1 = (xt + 15.99f) / 256.0f;
|
||||
float v0 = (yt) / 256.0f;
|
||||
float v1 = (yt + 15.99f) / 256.0f;
|
||||
|
||||
// glPushMatrix2();
|
||||
// glTranslatef2((float) x, (float) y, (float) z);
|
||||
glPushMatrix2();
|
||||
glTranslatef2((float) x, (float) y, (float) z);
|
||||
|
||||
// float s = e.bbWidth * 1.4f;
|
||||
// glScalef2(s, s, s);
|
||||
// bindTexture("terrain.png");
|
||||
// Tesselator t = Tesselator.instance;
|
||||
float s = e->bbWidth * 1.4f;
|
||||
glScalef2(s, s, s);
|
||||
bindTexture("terrain.png");
|
||||
Tesselator& t = Tesselator::instance;
|
||||
|
||||
// float r = 1.0f;
|
||||
// float xo = 0.5f;
|
||||
// float yo = 0.0f;
|
||||
float r = 1.0f;
|
||||
float xo = 0.5f;
|
||||
float yo = 0.0f;
|
||||
|
||||
// float h = e.bbHeight / e.bbWidth;
|
||||
float h = e->bbHeight / e->bbWidth;
|
||||
|
||||
// glRotatef2(-entityRenderDispatcher.playerRotY, 0, 1, 0);
|
||||
// glTranslatef2(0, 0, -0.4f + ((int) h) * 0.02f);
|
||||
// glColor4f2(1, 1, 1, 1);
|
||||
// // glRotatef2(-playerRotX, 1, 0, 0);
|
||||
// t.begin();
|
||||
// while (h > 0) {
|
||||
// t.vertexUV(r - xo, 0 - yo, 0, u1, v1);
|
||||
// t.vertexUV(0 - xo, 0 - yo, 0, u0, v1);
|
||||
// t.vertexUV(0 - xo, 1.4f - yo, 0, u0, v0);
|
||||
// t.vertexUV(r - xo, 1.4f - yo, 0, u1, v0);
|
||||
// h -= 1;
|
||||
// yo -= 1;
|
||||
// r *= 0.9f;
|
||||
// glTranslatef2(0, 0, -0.04f);
|
||||
// }
|
||||
// t.end();
|
||||
// glPopMatrix2();
|
||||
// glEnable2(GL_LIGHTING);
|
||||
//}
|
||||
glRotatef2(-entityRenderDispatcher->playerRotY, 0, 1, 0);
|
||||
glTranslatef2(0, 0, -0.4f + ((int) h) * 0.02f);
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
// glRotatef2(-playerRotX, 1, 0, 0);
|
||||
t.begin();
|
||||
while (h > 0) {
|
||||
t.vertexUV(r - xo, 0 - yo, 0, u1, v1);
|
||||
t.vertexUV(0 - xo, 0 - yo, 0, u0, v1);
|
||||
t.vertexUV(0 - xo, 1.4f - yo, 0, u0, v0);
|
||||
t.vertexUV(r - xo, 1.4f - yo, 0, u1, v0);
|
||||
h -= 1;
|
||||
yo -= 1;
|
||||
r *= 0.9f;
|
||||
glTranslatef2(0, 0, -0.04f);
|
||||
}
|
||||
t.draw();
|
||||
glPopMatrix2();
|
||||
// glEnable2(GL_LIGHTING);
|
||||
}
|
||||
|
||||
//void renderShadow(Entity e, float x, float y, float z, float pow, float a) {
|
||||
// glEnable2(GL_BLEND);
|
||||
// glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
void EntityRenderer::renderShadow(Entity* e, float x, float y, float z, float pow, float a) { //
|
||||
glEnable2(GL_BLEND);
|
||||
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
// Textures textures = entityRenderDispatcher.textures;
|
||||
// textures.bind(textures.loadTexture("%clamp%/misc/shadow.png"));
|
||||
//Textures* textures = entityRenderDispatcher->textures;
|
||||
//textures->bind(textures->loadTexture("%clamp%/environment/shadow.png"));
|
||||
Textures* textures = entityRenderDispatcher->textures;
|
||||
textures->bind(textures->loadTexture("/misc/shadow.png"));
|
||||
|
||||
// Level level = getLevel();
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
|
||||
// glDepthMask(false);
|
||||
// float r = shadowRadius;
|
||||
Level* level = getLevel();
|
||||
|
||||
// float ex = e.xOld + (e.x - e.xOld) * a;
|
||||
// float ey = e.yOld + (e.y - e.yOld) * a + e.getShadowHeightOffs();
|
||||
// float ez = e.zOld + (e.z - e.zOld) * a;
|
||||
glDepthMask(false);
|
||||
float r = shadowRadius;
|
||||
|
||||
// int x0 = Mth.floor(ex - r);
|
||||
// int x1 = Mth.floor(ex + r);
|
||||
// int y0 = Mth.floor(ey - r);
|
||||
// int y1 = Mth.floor(ey);
|
||||
// int z0 = Mth.floor(ez - r);
|
||||
// int z1 = Mth.floor(ez + r);
|
||||
float ex = e->xOld + (e->x - e->xOld) * a;
|
||||
float ey = e->yOld + (e->y - e->yOld) * a + e->getShadowHeightOffs();
|
||||
float ez = e->zOld + (e->z - e->zOld) * a;
|
||||
|
||||
// float xo = x - ex;
|
||||
// float yo = y - ey;
|
||||
// float zo = z - ez;
|
||||
int x0 = Mth::floor(ex - r);
|
||||
int x1 = Mth::floor(ex + r);
|
||||
int y0 = Mth::floor(ey - r);
|
||||
int y1 = Mth::floor(ey);
|
||||
int z0 = Mth::floor(ez - r);
|
||||
int z1 = Mth::floor(ez + r);
|
||||
|
||||
// Tesselator tt = Tesselator.instance;
|
||||
// tt.begin();
|
||||
// for (int xt = x0; xt <= x1; xt++)
|
||||
// for (int yt = y0; yt <= y1; yt++)
|
||||
// for (int zt = z0; zt <= z1; zt++) {
|
||||
// int t = level.getTile(xt, yt - 1, zt);
|
||||
// if (t > 0 && level.getRawBrightness(xt, yt, zt) > 3) {
|
||||
// renderTileShadow(Tile.tiles[t], x, y + e.getShadowHeightOffs(), z, xt, yt, zt, pow, r, xo, yo + e.getShadowHeightOffs(), zo);
|
||||
// }
|
||||
// }
|
||||
// tt.end();
|
||||
float xo = x - ex;
|
||||
float yo = y - ey;
|
||||
float zo = z - ez;
|
||||
|
||||
// glColor4f2(1, 1, 1, 1);
|
||||
// glDisable2(GL_BLEND);
|
||||
// glDepthMask(true);
|
||||
//}
|
||||
Tesselator& tt = Tesselator::instance;
|
||||
tt.begin();
|
||||
for (int xt = x0; xt <= x1; xt++)
|
||||
for (int yt = y0; yt <= y1; yt++)
|
||||
for (int zt = z0; zt <= z1; zt++) {
|
||||
int t = level->getTile(xt, yt - 1, zt);
|
||||
if (t > 0 && level->getRawBrightness(xt, yt, zt) > 3) {
|
||||
renderTileShadow(Tile::tiles[t], x, y + e->getShadowHeightOffs(), z, xt, yt, zt, pow, r, xo, yo + e->getShadowHeightOffs(), zo);
|
||||
}
|
||||
}
|
||||
tt.draw();
|
||||
|
||||
//Level* getLevel() {
|
||||
// return entityRenderDispatcher.level;
|
||||
//}
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
glDisable2(GL_BLEND);
|
||||
glDepthMask(true);
|
||||
}
|
||||
|
||||
//void renderTileShadow(Tile tt, float x, float y, float z, int xt, int yt, int zt, float pow, float r, float xo, float yo, float zo) {
|
||||
// Tesselator t = Tesselator.instance;
|
||||
// if (!tt.isCubeShaped()) return;
|
||||
Level* EntityRenderer::getLevel() {
|
||||
return entityRenderDispatcher->level;
|
||||
}
|
||||
|
||||
// float a = ((pow - (y - (yt + yo)) / 2) * 0.5f) * getLevel().getBrightness(xt, yt, zt);
|
||||
// if (a < 0) return;
|
||||
// if (a > 1) a = 1;
|
||||
// t.color(1, 1, 1, (float) a);
|
||||
// // glColor4f2(1, 1, 1, (float) a);
|
||||
void EntityRenderer::renderTileShadow(Tile* tt, float x, float y, float z, int xt, int yt, int zt, float pow, float r, float xo, float yo, float zo) {
|
||||
Tesselator& t = Tesselator::instance;
|
||||
if (!tt->isCubeShaped()) return;
|
||||
|
||||
// float x0 = xt + tt.xx0 + xo;
|
||||
// float x1 = xt + tt.xx1 + xo;
|
||||
// float y0 = yt + tt.yy0 + yo + 1.0 / 64.0f;
|
||||
// float z0 = zt + tt.zz0 + zo;
|
||||
// float z1 = zt + tt.zz1 + zo;
|
||||
float a = ((pow - (y - (yt + yo)) / 2) * 0.5f) * getLevel()->getBrightness(xt, yt, zt);
|
||||
if (a < 0) return;
|
||||
if (a > 1) a = 1;
|
||||
// t.color(1, 1, 1, (float) a);
|
||||
glColor4f2(1, 1, 1, (float) a);
|
||||
|
||||
// float u0 = (float) ((x - (x0)) / 2 / r + 0.5f);
|
||||
// float u1 = (float) ((x - (x1)) / 2 / r + 0.5f);
|
||||
// float v0 = (float) ((z - (z0)) / 2 / r + 0.5f);
|
||||
// float v1 = (float) ((z - (z1)) / 2 / r + 0.5f);
|
||||
float x0 = xt + tt->xx0 + xo;
|
||||
float x1 = xt + tt->xx1 + xo;
|
||||
float y0 = yt + tt->yy0 + yo + 1.0 / 64.0f;
|
||||
float z0 = zt + tt->zz0 + zo;
|
||||
float z1 = zt + tt->zz1 + zo;
|
||||
|
||||
// t.vertexUV(x0, y0, z0, u0, v0);
|
||||
// t.vertexUV(x0, y0, z1, u0, v1);
|
||||
// t.vertexUV(x1, y0, z1, u1, v1);
|
||||
// t.vertexUV(x1, y0, z0, u1, v0);
|
||||
//}
|
||||
float u0 = (float) ((x - (x0)) / 2 / r + 0.5f);
|
||||
float u1 = (float) ((x - (x1)) / 2 / r + 0.5f);
|
||||
float v0 = (float) ((z - (z0)) / 2 / r + 0.5f);
|
||||
float v1 = (float) ((z - (z1)) / 2 / r + 0.5f);
|
||||
|
||||
t.vertexUV(x0, y0, z0, u0, v0);
|
||||
t.vertexUV(x0, y0, z1, u0, v1);
|
||||
t.vertexUV(x1, y0, z1, u1, v1);
|
||||
t.vertexUV(x1, y0, z0, u1, v0);
|
||||
}
|
||||
|
||||
@@ -12,6 +12,8 @@ class EntityRenderDispatcher;
|
||||
class Entity;
|
||||
class AABB;
|
||||
class Font;
|
||||
class Tile;
|
||||
class Level;
|
||||
|
||||
class EntityRenderer
|
||||
{
|
||||
@@ -24,6 +26,11 @@ public:
|
||||
virtual void render(Entity* entity, float x, float y, float z, float rot, float a) = 0;
|
||||
static void render(const AABB& bb, float xo, float yo, float zo);
|
||||
static void renderFlat(const AABB& bb);
|
||||
void renderShadow(Entity* e, float x, float y, float z, float pow, float a);
|
||||
void renderTileShadow(Tile* tt, float x, float y, float z, int xt, int yt, int zt, float pow, float r, float xo, float yo, float zo);
|
||||
void renderFlame(Entity* e, float x, float y, float z, float a);
|
||||
void postRender(Entity* entity, float x, float y, float z, float rot, float a);
|
||||
Level* getLevel();
|
||||
|
||||
Font* getFont();
|
||||
|
||||
|
||||
@@ -226,7 +226,42 @@ void ItemRenderer::renderGuiItem(Font* font, Textures* textures, const ItemInsta
|
||||
t.draw();
|
||||
}
|
||||
|
||||
void ItemRenderer::renderGuiItemDecorations(const ItemInstance* item, float x, float y) {
|
||||
|
||||
void ItemRenderer::renderGuiItemDecorations(Font* font, Textures* textures, ItemInstance* item, int x, int y){ // this is normally unused in the header but i ported it from java beta - shredder
|
||||
if (item != NULL) {
|
||||
if (item->count > 1) {
|
||||
char buf[16];
|
||||
sprintf(buf, "%d", item->count);
|
||||
std::string countStr = buf;
|
||||
// glDisable(GL_LIGHTING);
|
||||
// glDisable(GL_DEPTH_TEST);
|
||||
font->drawShadow(countStr, x + 19 - 2 - font->width(countStr),
|
||||
y + 6 + 3, 0xFFFFFF);
|
||||
// glEnable(GL_LIGHTING);
|
||||
// glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
if (item->isDamaged()) {
|
||||
float p = std::floor(13.5f - (float) item->getDamageValue() * 13.0f / (float) item->getMaxDamage() + 0.5);
|
||||
int cc = (int) std::floor(255.5f - (float) item->getDamageValue() * 255.0f / (float) item->getMaxDamage() + 0.5);
|
||||
// glDisable(GL_LIGHTING);
|
||||
// glDisable(GL_DEPTH_TEST);
|
||||
// glDisable(GL_TEXTURE_2D);
|
||||
// auto var8 = ::net::minecraft::client::renderer::Tesselator::instance();
|
||||
Tesselator& t = Tesselator::instance;
|
||||
int ca = ((255 - cc)<< 16 | (cc << 8));
|
||||
int cb = (((255 - cc) / 4) << 16 | 16128);
|
||||
fillRect(t, x + 2, y + 13, 13, 2, 0);
|
||||
fillRect(t, x + 2, y + 13, 12, 1, cb);
|
||||
fillRect(t, x + 2, y + 13, p, 1, ca);
|
||||
// glEnable(GL_TEXTURE_2D);
|
||||
// glEnable(GL_LIGHTING);
|
||||
// glEnable(GL_DEPTH_TEST);
|
||||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ItemRenderer::renderGuiItemDecorations(const ItemInstance* item, float x, float y) { // nothing changed here this is the normal pocket edition one.
|
||||
if (!item) return;
|
||||
if (item->count > 0 && item->isDamaged()) {
|
||||
float p = std::floor(13.5f - (float) item->getDamageValue() * 13.0f / (float) item->getMaxDamage());
|
||||
|
||||
@@ -22,7 +22,7 @@ public:
|
||||
static void renderGuiItem(Font* font, Textures* textures, const ItemInstance* item, float x, float y, bool fancy);
|
||||
static void renderGuiItem(Font* font, Textures* textures, const ItemInstance* item, float x, float y, float w, float h, bool fancy);
|
||||
static void renderGuiItemCorrect(Font* font, Textures* textures, const ItemInstance* item, int x, int y);
|
||||
//void renderGuiItemDecorations(Font* font, Textures* textures, ItemInstance* item, int x, int y);
|
||||
static void renderGuiItemDecorations(Font* font, Textures* textures, ItemInstance* item, int x, int y);
|
||||
static void renderGuiItemDecorations(const ItemInstance* item, float x, float y);
|
||||
|
||||
static void blit(float x, float y, float sx, float sy, float w, float h);
|
||||
|
||||
@@ -135,7 +135,7 @@ void MobRenderer::render(Entity* e, float x, float y, float z, float rot, float
|
||||
//glEnable2(GL_DEPTH_TEST);
|
||||
|
||||
glPopMatrix2();
|
||||
|
||||
postRender(mob, x, y, z, rot, a);
|
||||
renderName(mob, x, y, z);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,8 +17,8 @@ PlayerRenderer::PlayerRenderer( HumanoidModel* humanoidModel, float shadow )
|
||||
: super(humanoidModel, shadow),
|
||||
playerModel64(humanoidModel),
|
||||
playerModel32(new HumanoidModel(0, 0, 64, 32)),
|
||||
armorParts1(new HumanoidModel(1.0f, 0, 64, 64)),
|
||||
armorParts2(new HumanoidModel(0.5f, 0, 64, 64))
|
||||
armorParts1(new HumanoidModel(1.0f, 0, 64, 32)),
|
||||
armorParts2(new HumanoidModel(0.5f, 0, 64, 32))
|
||||
{
|
||||
// default to legacy skin path until we know the exact texture size
|
||||
model = playerModel32;
|
||||
@@ -77,10 +77,10 @@ void PlayerRenderer::render(Entity* mob_, float x, float y, float z, float rot,
|
||||
model = desired;
|
||||
humanoidModel = desired;
|
||||
}
|
||||
// LOGI("[PlayerRenderer] %s: skin=%s, modelTex=%dx%d, desired=%s\n",
|
||||
// ((Player*)mob)->name.c_str(), mob->getTexture().c_str(),
|
||||
// humanoidModel->texWidth, humanoidModel->texHeight,
|
||||
// (desired == playerModel64 ? "64" : "32"));
|
||||
LOGI("[PlayerRenderer] %s: skin=%s, modelTex=%dx%d, desired=%s\n",
|
||||
((Player*)mob)->name.c_str(), mob->getTexture().c_str(),
|
||||
humanoidModel->texWidth, humanoidModel->texHeight,
|
||||
(desired == playerModel64 ? "64" : "32"));
|
||||
HumanoidMobRenderer::render(mob_, x, y, z, rot, a);
|
||||
}
|
||||
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
#define USE_VBO
|
||||
#define GL_QUADS 0x0007
|
||||
#if defined(__APPLE__)
|
||||
#import <OpenGLES/ES1/gl.height>
|
||||
#import <OpenGLES/ES1/glext.height>
|
||||
#import <OpenGLES/ES1/gl.h>
|
||||
#import <OpenGLES/ES1/glext.h>
|
||||
#elif defined(ANDROID) || defined(__EMSCRIPTEN__)
|
||||
#include <GLES/gl.h>
|
||||
#include <GLES/glext.h>
|
||||
#import <GLES/gl.h>
|
||||
#import <GLES/glext.h>
|
||||
#else
|
||||
#include <glad/glad.h>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
// #else
|
||||
// // Uglyness to fix redeclaration issues
|
||||
// #ifdef WIN32
|
||||
// #include <WinSock2.h>
|
||||
// #include <winsock2.h>
|
||||
// #include <Windows.h>
|
||||
// #endif
|
||||
// #include <gl/glew.h>
|
||||
|
||||
@@ -206,3 +206,93 @@ void WaterSideTexture::tick() {
|
||||
pixels[i * 4 + 3] = a;
|
||||
}
|
||||
}
|
||||
|
||||
FireTexture::FireTexture()
|
||||
: super(((Tile*)Tile::fire)->tex),
|
||||
_tick(0),
|
||||
_frame(0)
|
||||
{
|
||||
current = new float[16*20];
|
||||
next = new float[16*20];
|
||||
heat = new float[16*20];
|
||||
heata = new float[16*20];
|
||||
|
||||
for (int i = 0; i < 256; ++i) {
|
||||
current[i] = 0;
|
||||
next[i] = 0;
|
||||
heat[i] = 0;
|
||||
heata[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
FireTexture::~FireTexture() {
|
||||
delete[] current;
|
||||
delete[] next;
|
||||
delete[] heat;
|
||||
delete[] heata;
|
||||
}
|
||||
|
||||
|
||||
// oh boy time to implement fire textures, i am so fucked - shredder
|
||||
|
||||
void FireTexture::tick() {
|
||||
// loop generates fire texture on the empty texture grid, hopefully shouldnt be too taxing on older hardware - shredder
|
||||
for (int x = 0; x < 16; x++) {
|
||||
for (int y = 0; y < 20; y++) {
|
||||
int count = 18;
|
||||
float pow = this->current[x + (y + 1) % 20 * 16] * (float)(count);
|
||||
for (int xx = x - 1; xx <= x + 1; xx++) {
|
||||
for (int yy = y; yy <= y + 1; yy++) {
|
||||
if (xx >= 0 && yy >= 0 && xx < 16 && yy < 20) {
|
||||
pow += this->current[xx + yy * 16];
|
||||
}
|
||||
count++;
|
||||
}
|
||||
}
|
||||
this->next[x + y * 16] = pow / (float(count) * 1.06f);
|
||||
if (y >= 19) {
|
||||
this->next[x + y * 16] = float(Mth::random() * Mth::random() * Mth::random() * 4.0 + Mth::random() * 0.1f + 0.2f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// hopefully this doesn't cause any mysterious issues - shredder
|
||||
float* tmp = next;
|
||||
next = current;
|
||||
current = tmp;
|
||||
|
||||
for (int i = 0; i < 256; i++) {
|
||||
float pow = this->current[i] * 1.8f;
|
||||
if (pow > 1.0f) {
|
||||
pow = 1.0f;
|
||||
}
|
||||
if (pow < 0.0f) {
|
||||
pow = 0.0f;
|
||||
}
|
||||
|
||||
|
||||
int r = (int) (pow * 155.0f + 100.0f);
|
||||
int g = (int)(pow * pow * 255.0f);
|
||||
int b = (int)(pow * pow * pow * pow * pow * pow * pow * pow * pow * pow * 255.0f);
|
||||
int a = 255;
|
||||
if (pow < 0.5f) {
|
||||
a = 0;
|
||||
}
|
||||
|
||||
// @TODO: cant be arsed rn to implement the anaglyph3d check would be nice to check if it does - shredder
|
||||
//if (this->anaglyph3d) {
|
||||
// float rr = (r * 30 + g * 59 + b * 11) / 100;
|
||||
// float gg = (r * 30 + g * 70) / 100;
|
||||
// float bb = (r * 30 + b * 70) / 100;
|
||||
// r = rr;
|
||||
// g = gg;
|
||||
// b = bb;
|
||||
//}
|
||||
|
||||
pixels[i * 4 + 0] = r;
|
||||
pixels[i * 4 + 1] = g;
|
||||
pixels[i * 4 + 2] = b;
|
||||
pixels[i * 4 + 3] = a;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -56,4 +56,21 @@ public:
|
||||
void tick();
|
||||
};
|
||||
|
||||
class FireTexture: public DynamicTexture
|
||||
{
|
||||
typedef DynamicTexture super;
|
||||
int _tick;
|
||||
int _frame;
|
||||
|
||||
float* current;
|
||||
float* next;
|
||||
float* heat;
|
||||
float* heata;
|
||||
|
||||
public:
|
||||
FireTexture();
|
||||
~FireTexture();
|
||||
|
||||
void tick();
|
||||
};
|
||||
#endif /*NET_MINECRAFT_CLIENT_RENDERER_PTEXTURE__DynamicTexture_H__*/
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
// #endif
|
||||
|
||||
|
||||
#ifdef PLATFORM_DESKTOP
|
||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||
#include "main_glfw.h"
|
||||
#endif
|
||||
|
||||
|
||||
@@ -139,12 +139,14 @@ int main(void) {
|
||||
#ifndef STANDALONE_SERVER
|
||||
// Platform init.
|
||||
appContext.platform = new AppPlatform_glfw();
|
||||
#if defined(DEBUG) && defined(__EMSCRIPTEN__)
|
||||
EM_ASM({
|
||||
console.log(FS.readdir("/"));
|
||||
console.log(FS.readdir("/data"));
|
||||
console.log(FS.readdir("/data/images"));
|
||||
});
|
||||
#if defined(__EMSCRIPTEN__)
|
||||
EM_ASM(
|
||||
FS.mkdir('/games');
|
||||
FS.mkdir('/games/com.mojang');
|
||||
FS.mkdir('/games/com.mojang/minecraftWorlds');
|
||||
FS.mount(IDBFS, {}, '/games');
|
||||
FS.syncfs(true, function (err) {});
|
||||
);
|
||||
#endif
|
||||
|
||||
glfwSetErrorCallback(error_callback);
|
||||
@@ -205,16 +207,16 @@ int main(void) {
|
||||
|
||||
delete app;
|
||||
|
||||
appContext.platform->finish();
|
||||
|
||||
delete appContext.platform;
|
||||
|
||||
#ifndef STANDALONE_SERVER
|
||||
// Exit.
|
||||
glfwDestroyWindow(platform->window);
|
||||
glfwTerminate();
|
||||
#endif
|
||||
|
||||
appContext.platform->finish();
|
||||
|
||||
delete appContext.platform;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
|
||||
#include <WinSock2.h>
|
||||
#include <winsock2.h>
|
||||
#include <process.h>
|
||||
#include "SharedConstants.h"
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include <vector>
|
||||
|
||||
#ifdef WIN32
|
||||
#include <WinSock2.h>
|
||||
#include <winsock2.h>
|
||||
#else
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
@@ -3,8 +3,14 @@
|
||||
|
||||
#include "SoundSystem.h"
|
||||
|
||||
#include <AL/al.h>
|
||||
#include <AL/alc.h>
|
||||
// If audio breaks for other platforms, this is probably why. Here, I'm just calling where Apple's OpenAL headers live (they arent in just "AL"
|
||||
#if defined(__APPLE__)
|
||||
#include <OpenAL/al.h>
|
||||
#include <OpenAL/alc.h>
|
||||
#else
|
||||
#include <AL/al.h>
|
||||
#include <AL/alc.h>
|
||||
#endif
|
||||
|
||||
#include <vector>
|
||||
#include <list>
|
||||
|
||||
@@ -140,7 +140,9 @@ RakNet::TimeUS GetTimeUS_Windows( void )
|
||||
#if _MSC_VER >= 1400 && defined (_M_X64)
|
||||
GetProcessAffinityMask(mProc, (PDWORD_PTR)&mProcMask, (PDWORD_PTR)&mSysMask);
|
||||
#else
|
||||
#ifndef __MINGW32__
|
||||
GetProcessAffinityMask(mProc, &mProcMask, &mSysMask);
|
||||
#endif
|
||||
#endif
|
||||
mThread = GetCurrentThread();
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#if defined(X360__)
|
||||
#elif defined (_WIN32)
|
||||
#include <WinSock2.h>
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <Ws2tcpip.h>
|
||||
#include <ws2tcpip.h>
|
||||
|
||||
// Must always include Winsock2.h before windows.h
|
||||
// or else:
|
||||
|
||||
98
src/util/Color.cpp
Normal file
98
src/util/Color.cpp
Normal file
@@ -0,0 +1,98 @@
|
||||
#include "Mth.h"
|
||||
|
||||
#include "Color.h"
|
||||
#include <cassert>
|
||||
|
||||
//Creates an opaque sRGB color with the specified red, green, and blue values in the range (0.0 - 1.0).
|
||||
//Alpha is defaulted to 1.0. The actual color used in rendering depends on finding the best match given the color space
|
||||
//available for a particular output device.
|
||||
//Parameters:
|
||||
//r - the red component
|
||||
//g - the green component
|
||||
//b - the blue component
|
||||
//Throws:
|
||||
//IllegalArgumentException - if r, g or b are outside of the range 0.0 to 1.0, inclusive
|
||||
Color::Color( float r, float g, float b)
|
||||
{
|
||||
assert( r >= 0.0f && r <= 1.0f );
|
||||
assert( g >= 0.0f && g <= 1.0f );
|
||||
assert( b >= 0.0f && b <= 1.0f );
|
||||
|
||||
//argb
|
||||
colour = ( (0xFF<<24) | ( (int)(r*255)<<16 ) | ( (int)(g*255)<<8 ) | ( (int)(b*255) ) );
|
||||
}
|
||||
|
||||
Color::Color( int r, int g, int b)
|
||||
{
|
||||
colour = ( (0xFF<<24) | ( (r&0xff)<<16 ) | ( (g&0xff)<<8 ) | ( (b&0xff) ) );
|
||||
}
|
||||
|
||||
|
||||
//Creates a Color object based on the specified values for the HSB color model.
|
||||
//The s and b components should be floating-point values between zero and one (numbers in the range 0.0-1.0).
|
||||
//The h component can be any floating-point number. The floor of this number is subtracted from it to create a fraction between 0 and 1.
|
||||
//This fractional number is then multiplied by 360 to produce the hue angle in the HSB color model.
|
||||
//
|
||||
//Parameters:
|
||||
//h - the hue component
|
||||
//s - the saturation of the color
|
||||
//b - the brightness of the color
|
||||
//Returns:
|
||||
//a Color object with the specified hue, saturation, and brightness.
|
||||
Color Color::getHSBColor(float hue, float saturation, float brightness)
|
||||
{
|
||||
int r = 0, g = 0, b = 0;
|
||||
if (saturation == 0)
|
||||
{
|
||||
r = g = b = (int) (brightness * 255.0f + 0.5f);
|
||||
}
|
||||
else
|
||||
{
|
||||
float h = (hue - (float)Mth::floor(hue)) * 6.0f;
|
||||
float f = h - (float)Mth::floor(h);
|
||||
float p = brightness * (1.0f - saturation);
|
||||
float q = brightness * (1.0f - saturation * f);
|
||||
float t = brightness * (1.0f - (saturation * (1.0f - f)));
|
||||
switch ((int) h)
|
||||
{
|
||||
case 0:
|
||||
r = (int) (brightness * 255.0f + 0.5f);
|
||||
g = (int) (t * 255.0f + 0.5f);
|
||||
b = (int) (p * 255.0f + 0.5f);
|
||||
break;
|
||||
case 1:
|
||||
r = (int) (q * 255.0f + 0.5f);
|
||||
g = (int) (brightness * 255.0f + 0.5f);
|
||||
b = (int) (p * 255.0f + 0.5f);
|
||||
break;
|
||||
case 2:
|
||||
r = (int) (p * 255.0f + 0.5f);
|
||||
g = (int) (brightness * 255.0f + 0.5f);
|
||||
b = (int) (t * 255.0f + 0.5f);
|
||||
break;
|
||||
case 3:
|
||||
r = (int) (p * 255.0f + 0.5f);
|
||||
g = (int) (q * 255.0f + 0.5f);
|
||||
b = (int) (brightness * 255.0f + 0.5f);
|
||||
break;
|
||||
case 4:
|
||||
r = (int) (t * 255.0f + 0.5f);
|
||||
g = (int) (p * 255.0f + 0.5f);
|
||||
b = (int) (brightness * 255.0f + 0.5f);
|
||||
break;
|
||||
case 5:
|
||||
r = (int) (brightness * 255.0f + 0.5f);
|
||||
g = (int) (p * 255.0f + 0.5f);
|
||||
b = (int) (q * 255.0f + 0.5f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return Color( r, g, b );
|
||||
}
|
||||
|
||||
int Color::getRGB()
|
||||
{
|
||||
return colour;
|
||||
}
|
||||
15
src/util/Color.h
Normal file
15
src/util/Color.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
class Color
|
||||
{
|
||||
private:
|
||||
int colour;
|
||||
|
||||
public:
|
||||
//Creates an opaque sRGB color with the specified red, green, and blue values in the range (0.0 - 1.0).
|
||||
Color( float r, float g, float b);
|
||||
Color( int r, int g, int b);
|
||||
|
||||
static Color getHSBColor(float h, float s, float b);
|
||||
int getRGB();
|
||||
};
|
||||
@@ -245,6 +245,7 @@ void Inventory::setupDefault() {
|
||||
addItem(new ItemInstance(Item::seeds_melon));
|
||||
addItem(new ItemInstance(Item::dye_powder, 1, DyePowderItem::WHITE));
|
||||
addItem(new ItemInstance(Item::hoe_iron));
|
||||
addItem(new ItemInstance(Item::flintAndSteel));
|
||||
#ifdef RPI
|
||||
Sel[0] = addItem(new ItemInstance(Item::sword_iron));
|
||||
#else
|
||||
|
||||
@@ -19,7 +19,7 @@ public:
|
||||
setMaxDamage(64);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
bool useOn(ItemInstance* instance, Player* player, Level* level, int x, int y, int z, int face, float clickX, float clickY, float clickZ) {
|
||||
if (face == 0) y--;
|
||||
if (face == 1) y++;
|
||||
@@ -30,14 +30,14 @@ public:
|
||||
|
||||
int targetType = level->getTile(x, y, z);
|
||||
if (targetType == 0) {
|
||||
level->playSound(x + 0.5, y + 0.5, z + 0.5, "fire.ignite", 1, sharedRandom.nextFloat() * 0.4f + 0.8f);
|
||||
level->setTile(x, y, z, Tile::fire->id);
|
||||
level->playSound(x + 0.5, y + 0.5, z + 0.5, "fire.ignite", 1, random.nextFloat() * 0.4f + 0.8f);
|
||||
level->setTile(x, y, z, ((Tile*)Tile::fire)->id);
|
||||
}
|
||||
|
||||
instance->hurt(1);
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
#endif /*NET_MINECRAFT_WORLD_ITEM__FlintAndSteelItem_H__*/
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user