Compare commits
97 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ce182b676f | |||
|
|
4b69a1240a | ||
|
|
8f34fbc1ec | ||
|
|
890604256b | ||
|
|
792d4b32e7 | ||
|
|
2da05d94c8 | ||
|
|
a0e99e2f03 | ||
|
|
b6ea0c7dc3 | ||
|
|
620b358ba7 | ||
|
|
edc6985a6b | ||
|
|
9cd91b1508 | ||
|
|
9c46d7094c | ||
|
|
52afff463b | ||
|
|
0d23fadc3e | ||
|
|
614e018dc6 | ||
|
|
e346df682c | ||
|
|
31d80aedf8 | ||
| bc82f5c091 | |||
| 8d7a1973e7 | |||
| 3a0f4c3647 | |||
|
|
d6a3e477c1 | ||
|
|
4d68c4dff8 | ||
|
|
e1c2210621 | ||
|
|
c188fa0ce2 | ||
|
|
9db9f469cc | ||
|
|
db7a889962 | ||
|
|
95a193323c | ||
|
|
f19c2d24a3 | ||
|
|
e1b81a7cc3 | ||
|
|
baeefae94d | ||
|
|
aa9fa659df | ||
| 6049239303 | |||
|
|
55d06f0590 | ||
|
|
58b7724ba2 | ||
| 6ae787b90d | |||
| 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 | ||
|
|
88ef7f3d17 | ||
| 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 |
129
.github/workflows/build.yml
vendored
@@ -18,7 +18,7 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-windows:
|
build-windows:
|
||||||
name: Windows Build
|
name: Build Windows
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -68,13 +68,36 @@ jobs:
|
|||||||
name: mcpe-windows
|
name: mcpe-windows
|
||||||
path: |
|
path: |
|
||||||
${{github.workspace}}/build/MinecraftPE.exe
|
${{github.workspace}}/build/MinecraftPE.exe
|
||||||
${{github.workspace}}/build/glfw3.dll
|
|
||||||
${{github.workspace}}/build/libpng16.dll
|
${{github.workspace}}/build/libpng16.dll
|
||||||
${{github.workspace}}/build/OpenAL32.dll
|
${{github.workspace}}/build/OpenAL32.dll
|
||||||
${{github.workspace}}/build/z.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:
|
build-linux:
|
||||||
name: Linux Build
|
name: Build Linux
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -120,7 +143,7 @@ jobs:
|
|||||||
${{github.workspace}}/build/MinecraftPE-server
|
${{github.workspace}}/build/MinecraftPE-server
|
||||||
|
|
||||||
build-android: # pray to god
|
build-android: # pray to god
|
||||||
name: Build Android APK (${{ matrix.abi }})
|
name: Build Android (${{ matrix.abi }})
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
@@ -193,16 +216,6 @@ jobs:
|
|||||||
distribution: temurin
|
distribution: temurin
|
||||||
java-version: 25
|
java-version: 25
|
||||||
|
|
||||||
- name: Validate environment
|
|
||||||
run: |
|
|
||||||
echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT"
|
|
||||||
echo "ANDROID_NDK_PATH=$ANDROID_NDK_PATH"
|
|
||||||
echo "JAVA_HOME=$JAVA_HOME"
|
|
||||||
echo "MATRIX_ABI=$MATRIX_ABI"
|
|
||||||
$ANDROID_SDK_ROOT/platform-tools/adb version || true
|
|
||||||
java -version
|
|
||||||
javac -version
|
|
||||||
|
|
||||||
- name: Run Android build script
|
- name: Run Android build script
|
||||||
run: |
|
run: |
|
||||||
chmod +x ./build.sh
|
chmod +x ./build.sh
|
||||||
@@ -215,11 +228,59 @@ jobs:
|
|||||||
name: minecraftpe-apk-${{ matrix.abi }}
|
name: minecraftpe-apk-${{ matrix.abi }}
|
||||||
path: ${{ github.workspace }}/build-apk/minecraftpe-*-debug.apk
|
path: ${{ github.workspace }}/build-apk/minecraftpe-*-debug.apk
|
||||||
|
|
||||||
|
build-web:
|
||||||
|
name: Build Web
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup caches
|
||||||
|
uses: ./.github/actions/setup-cache
|
||||||
|
with:
|
||||||
|
host: linux
|
||||||
|
target: linux
|
||||||
|
|
||||||
|
- name: Setup Ninja
|
||||||
|
uses: ./.github/actions/setup-ninja
|
||||||
|
with:
|
||||||
|
host: linux
|
||||||
|
|
||||||
|
- name: Setup emsdk
|
||||||
|
uses: mymindstorm/setup-emsdk@v14
|
||||||
|
with:
|
||||||
|
version: 5.0.3
|
||||||
|
actions-cache-folder: 'emsdk-cache'
|
||||||
|
|
||||||
|
- name: Create Build Environment
|
||||||
|
# Some projects don't allow in-source building, so create a separate build directory
|
||||||
|
# We'll use this as our working directory for all subsequent commands
|
||||||
|
run: cmake -E make_directory ${{github.workspace}}/build
|
||||||
|
|
||||||
|
- name: Configure CMake
|
||||||
|
# Use a bash shell so we can use the same syntax for environment variable
|
||||||
|
# access regardless of the host operating system
|
||||||
|
shell: bash
|
||||||
|
working-directory: ${{github.workspace}}/build
|
||||||
|
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -G Ninja -DCMAKE_TOOLCHAIN_FILE="$GITHUB_WORKSPACE/emsdk-cache/emsdk-main/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
working-directory: ${{github.workspace}}/build
|
||||||
|
run: cmake --build . --config $BUILD_TYPE --target MinecraftPE --parallel
|
||||||
|
|
||||||
|
- name: Upload Artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: mcpe-web
|
||||||
|
path: |
|
||||||
|
${{github.workspace}}/build/MinecraftPE.js
|
||||||
|
${{github.workspace}}/build/MinecraftPE.wasm
|
||||||
|
${{github.workspace}}/build/MinecraftPE.data
|
||||||
|
|
||||||
publish:
|
publish:
|
||||||
name: Publish
|
name: Publish
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [ build-windows, build-linux, build-android ]
|
needs: [ build-windows, build-ios, build-linux, build-android, build-web ]
|
||||||
if: github.ref == 'refs/heads/main'
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -236,13 +297,13 @@ jobs:
|
|||||||
- name: Zip Windows Artifacts
|
- name: Zip Windows Artifacts
|
||||||
uses: vimtor/action-zip@v1.2
|
uses: vimtor/action-zip@v1.2
|
||||||
with:
|
with:
|
||||||
files: 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
|
dest: minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip
|
||||||
|
|
||||||
- name: Zip Linux Artifacts
|
- name: Zip Linux Artifacts
|
||||||
uses: vimtor/action-zip@v1.2
|
uses: vimtor/action-zip@v1.2
|
||||||
with:
|
with:
|
||||||
files: data mcpe-linux/MinecraftPE
|
files: mcpe-linux/MinecraftPE
|
||||||
dest: minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
|
dest: minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
|
||||||
|
|
||||||
- name: Zip Linux Server Artifacts
|
- name: Zip Linux Server Artifacts
|
||||||
@@ -251,17 +312,23 @@ jobs:
|
|||||||
files: mcpe-linux/MinecraftPE-server
|
files: mcpe-linux/MinecraftPE-server
|
||||||
dest: minecraftpe-server-${{ steps.ref.outputs.hash }}.zip
|
dest: minecraftpe-server-${{ steps.ref.outputs.hash }}.zip
|
||||||
|
|
||||||
- name: Zip Android arm64-v8a Artifact
|
- name: Rename Android Artifacts
|
||||||
uses: vimtor/action-zip@v1.2
|
run: |
|
||||||
with:
|
mv minecraftpe-apk-arm64-v8a/minecraftpe-v8a-debug.apk minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.apk
|
||||||
files: minecraftpe-apk-arm64-v8a/minecraftpe-v8a-debug.apk
|
mv minecraftpe-apk-armeabi-v7a/minecraftpe-v7a-debug.apk minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.apk
|
||||||
dest: minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.zip
|
|
||||||
|
|
||||||
- name: Zip Android armeabi-v7a Artifact
|
- name: Zip Web Artifact
|
||||||
uses: vimtor/action-zip@v1.2
|
uses: vimtor/action-zip@v1.2
|
||||||
with:
|
with:
|
||||||
files: minecraftpe-apk-armeabi-v7a/minecraftpe-v7a-debug.apk
|
files: mcpe-web/MinecraftPE.js mcpe-web/MinecraftPE.wasm mcpe-web/MinecraftPE.data misc/web/index.html
|
||||||
dest: minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.zip
|
dest: minecraftpe-${{ steps.ref.outputs.hash }}-web.zip
|
||||||
|
|
||||||
|
- name: Zip Data
|
||||||
|
uses: vimtor/action-zip@v1.2
|
||||||
|
with:
|
||||||
|
files: data
|
||||||
|
recursive: false
|
||||||
|
dest: data.zip
|
||||||
|
|
||||||
- name: Update Development Release
|
- name: Update Development Release
|
||||||
uses: andelf/nightly-release@main
|
uses: andelf/nightly-release@main
|
||||||
@@ -273,8 +340,10 @@ jobs:
|
|||||||
body: |
|
body: |
|
||||||
MinecraftPE development release for commit ${{ github.sha }}.
|
MinecraftPE development release for commit ${{ github.sha }}.
|
||||||
files: |
|
files: |
|
||||||
|
./data.zip
|
||||||
|
./minecraftpe-server-${{ steps.ref.outputs.hash }}.zip
|
||||||
./minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip
|
./minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip
|
||||||
./minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
|
./minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
|
||||||
./minecraftpe-server-${{ steps.ref.outputs.hash }}.zip
|
./minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.apk
|
||||||
./minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.zip
|
./minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.apk
|
||||||
./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_CXX_STANDARD_REQUIRED TRUE)
|
||||||
set(CMAKE_POLICY_VERSION_MINIMUM 3.10)
|
set(CMAKE_POLICY_VERSION_MINIMUM 3.10)
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
||||||
set(CMAKE_CXX_FLAGS "-Wno-c++11-narrowing -Wno-narrowing -Wno-invalid-source-encoding -Wno-reserved-user-defined-literal")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(cmake/EnumOption.cmake)
|
include(cmake/EnumOption.cmake)
|
||||||
|
|
||||||
if(EMSCRIPTEN)
|
if(EMSCRIPTEN)
|
||||||
@@ -26,6 +22,14 @@ find_package(OpenSSL)
|
|||||||
if (${PLATFORM} STREQUAL "Desktop")
|
if (${PLATFORM} STREQUAL "Desktop")
|
||||||
set(PLATFORM_CPP "PLATFORM_DESKTOP")
|
set(PLATFORM_CPP "PLATFORM_DESKTOP")
|
||||||
|
|
||||||
|
if (MINGW)
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++11-narrowing -Wno-narrowing -Wno-invalid-source-encoding -Wno-reserved-user-defined-literal")
|
||||||
|
endif()
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||||
include_directories(misc/windows)
|
include_directories(misc/windows)
|
||||||
@@ -52,6 +56,7 @@ if(${PLATFORM} MATCHES "Web")
|
|||||||
|
|
||||||
add_library(png INTERFACE IMPORTED)
|
add_library(png INTERFACE IMPORTED)
|
||||||
set_target_properties(png PROPERTIES
|
set_target_properties(png PROPERTIES
|
||||||
|
INTERFACE_COMPILE_OPTIONS "-sUSE_LIBPNG=1"
|
||||||
INTERFACE_LINK_OPTIONS "-sUSE_LIBPNG=1"
|
INTERFACE_LINK_OPTIONS "-sUSE_LIBPNG=1"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -102,6 +107,8 @@ CPMAddPackage(
|
|||||||
"ALSOFT_UTILS OFF"
|
"ALSOFT_UTILS OFF"
|
||||||
"LIBTYPE ${AL_LIBTYPE}"
|
"LIBTYPE ${AL_LIBTYPE}"
|
||||||
"ALSOFT_ENABLE_MODULES OFF"
|
"ALSOFT_ENABLE_MODULES OFF"
|
||||||
|
"ALSOFT_STATIC_STDCXX ON"
|
||||||
|
"ALSOFT_STATIC_LIBGCC ON"
|
||||||
)
|
)
|
||||||
|
|
||||||
# TODO: Clear this paths with *
|
# TODO: Clear this paths with *
|
||||||
@@ -159,6 +166,7 @@ file(GLOB SERVER_SOURCES
|
|||||||
"src/util/Mth.cpp"
|
"src/util/Mth.cpp"
|
||||||
"src/util/PerfTimer.cpp"
|
"src/util/PerfTimer.cpp"
|
||||||
"src/util/StringUtils.cpp"
|
"src/util/StringUtils.cpp"
|
||||||
|
"src/util/Color.cpp"
|
||||||
|
|
||||||
"src/world/Direction.cpp"
|
"src/world/Direction.cpp"
|
||||||
|
|
||||||
@@ -192,6 +200,9 @@ file(GLOB SERVER_SOURCES
|
|||||||
|
|
||||||
"src/world/level/dimension/Dimension.cpp"
|
"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/*.cpp"
|
||||||
"src/world/level/levelgen/feature/Feature.cpp"
|
"src/world/level/levelgen/feature/Feature.cpp"
|
||||||
"src/world/level/levelgen/synth/*.cpp"
|
"src/world/level/levelgen/synth/*.cpp"
|
||||||
@@ -251,6 +262,8 @@ file(GLOB CLIENT_SOURCES
|
|||||||
|
|
||||||
"src/util/**.cpp"
|
"src/util/**.cpp"
|
||||||
|
|
||||||
|
"src/util/Color.cpp"
|
||||||
|
|
||||||
"src/world/*.cpp"
|
"src/world/*.cpp"
|
||||||
"src/world/phys/*.cpp"
|
"src/world/phys/*.cpp"
|
||||||
"src/world/entity/*.cpp"
|
"src/world/entity/*.cpp"
|
||||||
@@ -299,6 +312,7 @@ if(UNIX)
|
|||||||
target_compile_definitions("${PROJECT_NAME}-server" PUBLIC "STANDALONE_SERVER" "SERVER_PROFILER")
|
target_compile_definitions("${PROJECT_NAME}-server" PUBLIC "STANDALONE_SERVER" "SERVER_PROFILER")
|
||||||
|
|
||||||
target_include_directories("${PROJECT_NAME}-server" PUBLIC
|
target_include_directories("${PROJECT_NAME}-server" PUBLIC
|
||||||
|
"${CMAKE_SOURCE_DIR}/glad/include/"
|
||||||
"${CMAKE_SOURCE_DIR}/src/"
|
"${CMAKE_SOURCE_DIR}/src/"
|
||||||
"project/lib_projects/raknet/jni/RaknetSources"
|
"project/lib_projects/raknet/jni/RaknetSources"
|
||||||
)
|
)
|
||||||
@@ -321,11 +335,11 @@ target_include_directories(${PROJECT_NAME} PUBLIC
|
|||||||
if(${PLATFORM} MATCHES "Web")
|
if(${PLATFORM} MATCHES "Web")
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
# uuuh i hate it
|
# uuuh i hate it
|
||||||
set(EM_FLAGS "-pthread -sUSE_PTHREADS=1 -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_C_FLAGS "${CMAKE_C_FLAGS} ${EM_FLAGS}")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EM_FLAGS}")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EM_FLAGS}")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EM_FLAGS} --preload-file ${CMAKE_SOURCE_DIR}/data@/data -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
|
target_compile_options(${PROJECT_NAME} PUBLIC
|
||||||
"-Os"
|
"-Os"
|
||||||
|
|||||||
37
README.md
@@ -197,4 +197,39 @@ cmake --build .
|
|||||||
3. Run game:
|
3. Run game:
|
||||||
```
|
```
|
||||||
emrun --port 8080 .
|
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
|
After Width: | Height: | Size: 17 KiB |
BIN
data/images/misc/grasscolor.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
data/images/misc/shadow.png
Normal file
|
After Width: | Height: | Size: 868 B |
BIN
data/images/misc/vignette.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
data/images/misc/water.png
Normal file
|
After Width: | Height: | Size: 306 B |
BIN
data/images/terrain/moon.png
Normal file
|
After Width: | Height: | Size: 910 B |
BIN
data/images/terrain/sun.png
Normal file
|
After Width: | Height: | Size: 799 B |
@@ -153,7 +153,33 @@ options.group.tweaks=Tweaks
|
|||||||
options.allowSprint=Allow sprint
|
options.allowSprint=Allow sprint
|
||||||
options.barOnTop=HUD above inventory
|
options.barOnTop=HUD above inventory
|
||||||
options.rpiCursor=Show Raspberry PI cursor
|
options.rpiCursor=Show Raspberry PI cursor
|
||||||
options.autojump=Auto Jump
|
options.foliagetint=Foliage Tinting
|
||||||
|
options.javaHud=Beta Java hotbar tweaks
|
||||||
|
options.blockOutline=Block Outline Selection
|
||||||
|
options.fogType=Fog/Sky Color
|
||||||
|
options.fogType.vanilla=Vanilla
|
||||||
|
options.fogType.java=Beta Java
|
||||||
|
options.fogType.unused=Unused
|
||||||
|
|
||||||
|
options.debugStyle=Debug Menu Style
|
||||||
|
options.debugStyle.javaBeta=Java Beta
|
||||||
|
options.debugStyle.custom=Custom
|
||||||
|
|
||||||
|
options.beautifulSky=Beautiful Skies
|
||||||
|
|
||||||
|
options.useVignette=Vignette Overlay
|
||||||
|
|
||||||
|
options.tintedSide=Tint Grass Sides
|
||||||
|
|
||||||
|
options.betaSky=Java Beta Sky
|
||||||
|
|
||||||
|
options.restoredAnims=Restored Animations
|
||||||
|
|
||||||
|
options.normalLighting=Java Beta/Normals Shading
|
||||||
|
|
||||||
|
options.isJoyTouchArea=Use Split Controls
|
||||||
|
|
||||||
|
options.autoJump=Auto Jump
|
||||||
options.thirdperson=Third Person
|
options.thirdperson=Third Person
|
||||||
options.servervisible=Server Visible
|
options.servervisible=Server Visible
|
||||||
options.sensitivity=Sensitivity
|
options.sensitivity=Sensitivity
|
||||||
@@ -203,6 +229,12 @@ options.fancyGraphics=Fancy graphics
|
|||||||
options.renderDebug=Debug render
|
options.renderDebug=Debug render
|
||||||
options.anaglyph3d=3D anaglyph
|
options.anaglyph3d=3D anaglyph
|
||||||
|
|
||||||
|
options.windowScale =Window Scaling
|
||||||
|
|
||||||
|
options.menuStyle =Menu Style
|
||||||
|
options.menuStyle.pocket =Pocket Edition
|
||||||
|
options.menuStyle.xperia =Xperia/Pi
|
||||||
|
options.menuStyle.java =Java Beta
|
||||||
|
|
||||||
performance.max=Max FPS
|
performance.max=Max FPS
|
||||||
performance.balanced=Balanced
|
performance.balanced=Balanced
|
||||||
|
|||||||
@@ -1,143 +1,46 @@
|
|||||||
<!doctype html>
|
<!DOCTYPE html>
|
||||||
<html lang="en-us">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
<title>MCPE 0.6.1</title>
|
||||||
<title>Emscripten-Generated Code</title>
|
<style>
|
||||||
<style>
|
html, body {
|
||||||
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
|
margin: 0;
|
||||||
textarea.emscripten { font-family: monospace; width: 80%; }
|
padding: 0;
|
||||||
div.emscripten { text-align: center; }
|
height: 100%;
|
||||||
div.emscripten_border { border: 1px solid black; }
|
background: black;
|
||||||
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
|
overflow: hidden;
|
||||||
canvas.emscripten { border: 0px none; background-color: black; }
|
}
|
||||||
|
|
||||||
.spinner {
|
#canvas {
|
||||||
height: 50px;
|
width: 100vw;
|
||||||
width: 50px;
|
height: 100vh;
|
||||||
margin: 0px auto;
|
display: block;
|
||||||
-webkit-animation: rotation .8s linear infinite;
|
}
|
||||||
-moz-animation: rotation .8s linear infinite;
|
</style>
|
||||||
-o-animation: rotation .8s linear infinite;
|
</head>
|
||||||
animation: rotation 0.8s linear infinite;
|
<body>
|
||||||
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);}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
<canvas id="canvas"></canvas>
|
||||||
</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>
|
|
||||||
|
|
||||||
<hr/>
|
<script>
|
||||||
<textarea class="emscripten" id="output" rows="8"></textarea>
|
var Module = {
|
||||||
<hr>
|
canvas: document.getElementById('canvas'),
|
||||||
<script type='text/javascript'>
|
onRuntimeInitialized: function () { resizeCanvas() }
|
||||||
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
|
function resizeCanvas() {
|
||||||
// application robust, you may want to override this behavior before shipping!
|
const canvas = Module.canvas;
|
||||||
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
|
canvas.width = window.innerWidth;
|
||||||
canvasElement.addEventListener("webglcontextlost", (e) => {
|
canvas.height = window.innerHeight;
|
||||||
alert('WebGL context lost. You will need to reload the page.');
|
}
|
||||||
e.preventDefault();
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
function setStatus(text) {
|
window.addEventListener('resize', resizeCanvas);
|
||||||
if (!setStatus.last) setStatus.last = { time: Date.now(), text: '' };
|
window.addEventListener('onunload', () => {
|
||||||
if (text === setStatus.last.text) return;
|
FS.syncfs(true, function (err) { console.log('Sync FS failed: ' + err) });
|
||||||
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
|
})
|
||||||
var now = Date.now();
|
</script>
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
var Module = {
|
<script src="MinecraftPE.js"></script>
|
||||||
print(...args) {
|
</body>
|
||||||
// These replacements are necessary if you render to raw HTML
|
|
||||||
//text = text.replace(/&/g, "&");
|
|
||||||
//text = text.replace(/</g, "<");
|
|
||||||
//text = text.replace(/>/g, ">");
|
|
||||||
//text = text.replace('\n', '<br>', 'g');
|
|
||||||
console.log(...args);
|
|
||||||
if (outputElement) {
|
|
||||||
var text = args.join(' ');
|
|
||||||
outputElement.value += text + "\n";
|
|
||||||
outputElement.scrollTop = outputElement.scrollHeight; // focus on bottom
|
|
||||||
}
|
|
||||||
},
|
|
||||||
canvas: canvasElement,
|
|
||||||
setStatus: setStatus,
|
|
||||||
totalDependencies: 0,
|
|
||||||
monitorRunDependencies(left) {
|
|
||||||
this.totalDependencies = Math.max(this.totalDependencies, left);
|
|
||||||
setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
setStatus('Downloading...');
|
|
||||||
window.onerror = () => {
|
|
||||||
setStatus('Exception thrown, see JavaScript console');
|
|
||||||
spinnerElement.style.display = 'none';
|
|
||||||
setStatus = (text) => {
|
|
||||||
if (text) console.error('[post-exception status] ' + text);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script src="MinecraftPE.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
</html>
|
||||||
@@ -98,6 +98,7 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
|||||||
../../../src/client/player/RemotePlayer.cpp \
|
../../../src/client/player/RemotePlayer.cpp \
|
||||||
../../../src/client/player/input/KeyboardInput.cpp \
|
../../../src/client/player/input/KeyboardInput.cpp \
|
||||||
../../../src/client/player/input/touchscreen/TouchscreenInput.cpp \
|
../../../src/client/player/input/touchscreen/TouchscreenInput.cpp \
|
||||||
|
../../../src/client/renderer/Lighting.cpp \
|
||||||
../../../src/client/renderer/Chunk.cpp \
|
../../../src/client/renderer/Chunk.cpp \
|
||||||
../../../src/client/renderer/EntityTileRenderer.cpp \
|
../../../src/client/renderer/EntityTileRenderer.cpp \
|
||||||
../../../src/client/renderer/GameRenderer.cpp \
|
../../../src/client/renderer/GameRenderer.cpp \
|
||||||
@@ -146,6 +147,7 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
|||||||
../../../src/util/StringUtils.cpp \
|
../../../src/util/StringUtils.cpp \
|
||||||
../../../src/util/PerfTimer.cpp \
|
../../../src/util/PerfTimer.cpp \
|
||||||
../../../src/util/PerfRenderer.cpp \
|
../../../src/util/PerfRenderer.cpp \
|
||||||
|
../../../src/util/Color.cpp \
|
||||||
../../../src/world/Direction.cpp \
|
../../../src/world/Direction.cpp \
|
||||||
../../../src/world/entity/AgableMob.cpp \
|
../../../src/world/entity/AgableMob.cpp \
|
||||||
../../../src/world/entity/Entity.cpp \
|
../../../src/world/entity/Entity.cpp \
|
||||||
@@ -209,6 +211,8 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
|||||||
../../../src/world/level/MobSpawner.cpp \
|
../../../src/world/level/MobSpawner.cpp \
|
||||||
../../../src/world/level/Region.cpp \
|
../../../src/world/level/Region.cpp \
|
||||||
../../../src/world/level/TickNextTickData.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/Biome.cpp \
|
||||||
../../../src/world/level/biome/BiomeSource.cpp \
|
../../../src/world/level/biome/BiomeSource.cpp \
|
||||||
../../../src/world/level/chunk/LevelChunk.cpp \
|
../../../src/world/level/chunk/LevelChunk.cpp \
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
|||||||
../../../src/client/player/RemotePlayer.cpp \
|
../../../src/client/player/RemotePlayer.cpp \
|
||||||
../../../src/client/player/input/KeyboardInput.cpp \
|
../../../src/client/player/input/KeyboardInput.cpp \
|
||||||
../../../src/client/player/input/touchscreen/TouchscreenInput.cpp \
|
../../../src/client/player/input/touchscreen/TouchscreenInput.cpp \
|
||||||
|
../../../src/client/renderer/Lighting.cpp \
|
||||||
../../../src/client/renderer/Chunk.cpp \
|
../../../src/client/renderer/Chunk.cpp \
|
||||||
../../../src/client/renderer/EntityTileRenderer.cpp \
|
../../../src/client/renderer/EntityTileRenderer.cpp \
|
||||||
../../../src/client/renderer/GameRenderer.cpp \
|
../../../src/client/renderer/GameRenderer.cpp \
|
||||||
@@ -122,6 +123,7 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
|||||||
../../../src/util/StringUtils.cpp \
|
../../../src/util/StringUtils.cpp \
|
||||||
../../../src/util/PerfTimer.cpp \
|
../../../src/util/PerfTimer.cpp \
|
||||||
../../../src/util/PerfRenderer.cpp \
|
../../../src/util/PerfRenderer.cpp \
|
||||||
|
../../../src/util/Color.cpp \
|
||||||
../../../src/world/Direction.cpp \
|
../../../src/world/Direction.cpp \
|
||||||
../../../src/world/entity/AgableMob.cpp \
|
../../../src/world/entity/AgableMob.cpp \
|
||||||
../../../src/world/entity/Entity.cpp \
|
../../../src/world/entity/Entity.cpp \
|
||||||
@@ -183,6 +185,8 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
|||||||
../../../src/world/level/MobSpawner.cpp \
|
../../../src/world/level/MobSpawner.cpp \
|
||||||
../../../src/world/level/Region.cpp \
|
../../../src/world/level/Region.cpp \
|
||||||
../../../src/world/level/TickNextTickData.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/Biome.cpp \
|
||||||
../../../src/world/level/biome/BiomeSource.cpp \
|
../../../src/world/level/biome/BiomeSource.cpp \
|
||||||
../../../src/world/level/chunk/LevelChunk.cpp \
|
../../../src/world/level/chunk/LevelChunk.cpp \
|
||||||
|
|||||||
@@ -129,6 +129,7 @@ public class SoundPlayer
|
|||||||
new SoundId(R.raw.eat1, "random.eat"),
|
new SoundId(R.raw.eat1, "random.eat"),
|
||||||
new SoundId(R.raw.eat2, "random.eat"),
|
new SoundId(R.raw.eat2, "random.eat"),
|
||||||
new SoundId(R.raw.eat3, "random.eat"),
|
new SoundId(R.raw.eat3, "random.eat"),
|
||||||
|
new SoundId(R.raw.burp1, "random.burp"),
|
||||||
new SoundId(R.raw.fuse, "random.fuse"),
|
new SoundId(R.raw.fuse, "random.fuse"),
|
||||||
|
|
||||||
new SoundId(R.raw.zpig1, "mob.zombiepig.zpig"),
|
new SoundId(R.raw.zpig1, "mob.zombiepig.zpig"),
|
||||||
|
|||||||
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 */; };
|
042A91AE16B17517007ABBC6 /* GuiElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A316B17517007ABBC6 /* GuiElement.cpp */; };
|
||||||
042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A516B17517007ABBC6 /* NinePatch.cpp */; };
|
042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A516B17517007ABBC6 /* NinePatch.cpp */; };
|
||||||
042A91B016B17517007ABBC6 /* OptionsGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A716B17517007ABBC6 /* OptionsGroup.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 */; };
|
042A91B216B17517007ABBC6 /* TextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91AB16B17517007ABBC6 /* TextBox.cpp */; };
|
||||||
044129071682FF9600B70EE6 /* MouseHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 044129061682FF9600B70EE6 /* MouseHandler.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 */; };
|
9D293CE716071C08000305C8 /* CreateNewWorld_iphone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9D293CE616071C08000305C8 /* CreateNewWorld_iphone.xib */; };
|
||||||
@@ -1147,6 +1146,41 @@
|
|||||||
D5F3B7DD14548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C814548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib */; };
|
D5F3B7DD14548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C814548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib */; };
|
||||||
D5F3B7DE14548E7900D25470 /* IASKSpecifierValuesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C914548E7900D25470 /* IASKSpecifierValuesView.xib */; };
|
D5F3B7DE14548E7900D25470 /* IASKSpecifierValuesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C914548E7900D25470 /* IASKSpecifierValuesView.xib */; };
|
||||||
D5F3B7E51454930400D25470 /* InAppSettings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7E41454930400D25470 /* InAppSettings.bundle */; };
|
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 */; };
|
||||||
|
BEEF202614CFF670005F0002 /* Lighting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEEF202614CFF670005F0001 /* Lighting.cpp */; };
|
||||||
|
BEEF202614CFF670005F0003 /* Lighting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEEF202614CFF670005F0001 /* Lighting.cpp */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
@@ -1208,10 +1242,8 @@
|
|||||||
042A91A616B17517007ABBC6 /* NinePatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NinePatch.h; sourceTree = "<group>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
9D293CEA160720D6000305C8 /* worldname_iphone5_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = worldname_iphone5_3.png; sourceTree = "<group>"; };
|
||||||
@@ -2017,7 +2049,7 @@
|
|||||||
D5B50D6914CFF66F005F7284 /* Multitouch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Multitouch.h; sourceTree = "<group>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
D5B50E5814CFF66F005F7284 /* terrain_5551.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = terrain_5551.h; sourceTree = "<group>"; };
|
||||||
@@ -2408,6 +2440,35 @@
|
|||||||
D5F3B7C814548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKPSToggleSwitchSpecifierViewCell.xib; sourceTree = "<group>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
||||||
|
BEEF202614CFF670005F0001 /* Lighting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Lighting.cpp; path = Lighting.cpp; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@@ -3226,8 +3287,6 @@
|
|||||||
042A91A616B17517007ABBC6 /* NinePatch.h */,
|
042A91A616B17517007ABBC6 /* NinePatch.h */,
|
||||||
042A91A716B17517007ABBC6 /* OptionsGroup.cpp */,
|
042A91A716B17517007ABBC6 /* OptionsGroup.cpp */,
|
||||||
042A91A816B17517007ABBC6 /* OptionsGroup.h */,
|
042A91A816B17517007ABBC6 /* OptionsGroup.h */,
|
||||||
042A91A916B17517007ABBC6 /* OptionsPane.cpp */,
|
|
||||||
042A91AA16B17517007ABBC6 /* OptionsPane.h */,
|
|
||||||
042A91AB16B17517007ABBC6 /* TextBox.cpp */,
|
042A91AB16B17517007ABBC6 /* TextBox.cpp */,
|
||||||
042A91AC16B17517007ABBC6 /* TextBox.h */,
|
042A91AC16B17517007ABBC6 /* TextBox.h */,
|
||||||
D5B50C2814CFF66F005F7284 /* Button.cpp */,
|
D5B50C2814CFF66F005F7284 /* Button.cpp */,
|
||||||
@@ -3477,6 +3536,7 @@
|
|||||||
D5B50CF114CFF66F005F7284 /* TileRenderer.cpp */,
|
D5B50CF114CFF66F005F7284 /* TileRenderer.cpp */,
|
||||||
D5B50CF214CFF66F005F7284 /* TileRenderer.h */,
|
D5B50CF214CFF66F005F7284 /* TileRenderer.h */,
|
||||||
D5B50CF314CFF66F005F7284 /* VertecDecl.h */,
|
D5B50CF314CFF66F005F7284 /* VertecDecl.h */,
|
||||||
|
BEEF202614CFF670005F0001 /* Lighting.cpp */,
|
||||||
);
|
);
|
||||||
path = renderer;
|
path = renderer;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -3714,6 +3774,7 @@
|
|||||||
D5B50E6914CFF66F005F7284 /* StringUtils.cpp */,
|
D5B50E6914CFF66F005F7284 /* StringUtils.cpp */,
|
||||||
D5B50E6A14CFF66F005F7284 /* StringUtils.h */,
|
D5B50E6A14CFF66F005F7284 /* StringUtils.h */,
|
||||||
D5B50E6B14CFF66F005F7284 /* WeighedRandom.h */,
|
D5B50E6B14CFF66F005F7284 /* WeighedRandom.h */,
|
||||||
|
F99F0FAE2F8436EB00F2B29A /* Color.cpp */,
|
||||||
);
|
);
|
||||||
path = util;
|
path = util;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -3978,6 +4039,8 @@
|
|||||||
D5B50F3714CFF66F005F7284 /* TickNextTickData.h */,
|
D5B50F3714CFF66F005F7284 /* TickNextTickData.h */,
|
||||||
D5B50F3814CFF66F005F7284 /* tile */,
|
D5B50F3814CFF66F005F7284 /* tile */,
|
||||||
D5B50F6814CFF66F005F7284 /* TilePos.h */,
|
D5B50F6814CFF66F005F7284 /* TilePos.h */,
|
||||||
|
F99F0FA82F84369F00F2B29A /* GrassColor.cpp */,
|
||||||
|
F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */,
|
||||||
);
|
);
|
||||||
path = level;
|
path = level;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -4256,6 +4319,7 @@
|
|||||||
D5CF9C37144C225000E4244F = {
|
D5CF9C37144C225000E4244F = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
F99D344D2F7372A100DC153E /* Launch Screen.storyboard */,
|
||||||
D5E1BA9A1451C8A0007DCC4F /* Default@2x.png */,
|
D5E1BA9A1451C8A0007DCC4F /* Default@2x.png */,
|
||||||
9D959AFF16036BEE00E23A6F /* Default-568h@2x.png */,
|
9D959AFF16036BEE00E23A6F /* Default-568h@2x.png */,
|
||||||
D5F07744145EF79B00EC30FB /* Default-Landscape~ipad.png */,
|
D5F07744145EF79B00EC30FB /* Default-Landscape~ipad.png */,
|
||||||
@@ -4267,6 +4331,30 @@
|
|||||||
D5CF9C45144C225000E4244F /* Frameworks */,
|
D5CF9C45144C225000E4244F /* Frameworks */,
|
||||||
D5CF9C43144C225000E4244F /* Products */,
|
D5CF9C43144C225000E4244F /* Products */,
|
||||||
D5B50C1614CFF66F005F7284 /* src */,
|
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>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
@@ -4527,10 +4615,16 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 0420;
|
LastUpgradeCheck = 0420;
|
||||||
|
TargetAttributes = {
|
||||||
|
D5CF9C41144C225000E4244F = {
|
||||||
|
DevelopmentTeam = PZUVNW8F2U;
|
||||||
|
ProvisioningStyle = Automatic;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
buildConfigurationList = D5CF9C3C144C225000E4244F /* Build configuration list for PBXProject "minecraftpe" */;
|
buildConfigurationList = D5CF9C3C144C225000E4244F /* Build configuration list for PBXProject "minecraftpe" */;
|
||||||
compatibilityVersion = "Xcode 3.2";
|
compatibilityVersion = "Xcode 3.2";
|
||||||
developmentRegion = English;
|
developmentRegion = en;
|
||||||
hasScannedForEncodings = 0;
|
hasScannedForEncodings = 0;
|
||||||
knownRegions = (
|
knownRegions = (
|
||||||
en,
|
en,
|
||||||
@@ -4599,6 +4693,7 @@
|
|||||||
D5B50A5614CFF492005F7284 /* pig.png in Resources */,
|
D5B50A5614CFF492005F7284 /* pig.png in Resources */,
|
||||||
D5B50A5814CFF492005F7284 /* sheep_fur.png in Resources */,
|
D5B50A5814CFF492005F7284 /* sheep_fur.png in Resources */,
|
||||||
D5B50A5A14CFF492005F7284 /* sheep.png in Resources */,
|
D5B50A5A14CFF492005F7284 /* sheep.png in Resources */,
|
||||||
|
F99D344F2F7372A100DC153E /* Launch Screen.storyboard in Resources */,
|
||||||
D5B50A5C14CFF492005F7284 /* skeleton.png in Resources */,
|
D5B50A5C14CFF492005F7284 /* skeleton.png in Resources */,
|
||||||
D5B50A5E14CFF492005F7284 /* spider.png in Resources */,
|
D5B50A5E14CFF492005F7284 /* spider.png in Resources */,
|
||||||
D5B50A6014CFF492005F7284 /* zombie.png in Resources */,
|
D5B50A6014CFF492005F7284 /* zombie.png in Resources */,
|
||||||
@@ -4935,6 +5030,7 @@
|
|||||||
D5ACF26F15C03DBF00E21C22 /* sand2.m4a in Resources */,
|
D5ACF26F15C03DBF00E21C22 /* sand2.m4a in Resources */,
|
||||||
D5ACF27115C03DBF00E21C22 /* sand3.m4a in Resources */,
|
D5ACF27115C03DBF00E21C22 /* sand3.m4a in Resources */,
|
||||||
D5ACF27315C03DBF00E21C22 /* sand4.m4a in Resources */,
|
D5ACF27315C03DBF00E21C22 /* sand4.m4a in Resources */,
|
||||||
|
F99D344E2F7372A100DC153E /* Launch Screen.storyboard in Resources */,
|
||||||
D5ACF27515C03DBF00E21C22 /* snow1.m4a in Resources */,
|
D5ACF27515C03DBF00E21C22 /* snow1.m4a in Resources */,
|
||||||
D5ACF27715C03DBF00E21C22 /* snow2.m4a in Resources */,
|
D5ACF27715C03DBF00E21C22 /* snow2.m4a in Resources */,
|
||||||
D5ACF27915C03DBF00E21C22 /* snow3.m4a in Resources */,
|
D5ACF27915C03DBF00E21C22 /* snow3.m4a in Resources */,
|
||||||
@@ -5011,18 +5107,22 @@
|
|||||||
D58BB544146A0B910002C9F5 /* IASKSettingsStore.m in Sources */,
|
D58BB544146A0B910002C9F5 /* IASKSettingsStore.m in Sources */,
|
||||||
D58BB545146A0B910002C9F5 /* IASKSettingsStoreFile.m in Sources */,
|
D58BB545146A0B910002C9F5 /* IASKSettingsStoreFile.m in Sources */,
|
||||||
D58BB546146A0B910002C9F5 /* IASKSettingsStoreUserDefaults.m in Sources */,
|
D58BB546146A0B910002C9F5 /* IASKSettingsStoreUserDefaults.m in Sources */,
|
||||||
|
F99D34232F736AD400DC153E /* TextOption.cpp in Sources */,
|
||||||
D58BB547146A0B910002C9F5 /* IASKSpecifier.m in Sources */,
|
D58BB547146A0B910002C9F5 /* IASKSpecifier.m in Sources */,
|
||||||
D58BB548146A0B910002C9F5 /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
D58BB548146A0B910002C9F5 /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
||||||
D58BB549146A0B910002C9F5 /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
D58BB549146A0B910002C9F5 /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
||||||
D58BB54A146A0B910002C9F5 /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
D58BB54A146A0B910002C9F5 /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
||||||
D58BB54B146A0B910002C9F5 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
|
D58BB54B146A0B910002C9F5 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
|
||||||
|
F99D343B2F736C3B00DC153E /* UsernameScreen.cpp in Sources */,
|
||||||
D58BB54C146A0B910002C9F5 /* IASKSlider.m in Sources */,
|
D58BB54C146A0B910002C9F5 /* IASKSlider.m in Sources */,
|
||||||
D58BB54D146A0B910002C9F5 /* IASKSwitch.m in Sources */,
|
D58BB54D146A0B910002C9F5 /* IASKSwitch.m in Sources */,
|
||||||
|
F99D34302F736BAD00DC153E /* ConsoleScreen.cpp in Sources */,
|
||||||
D58BB54E146A0B910002C9F5 /* IASKTextField.m in Sources */,
|
D58BB54E146A0B910002C9F5 /* IASKTextField.m in Sources */,
|
||||||
D58BB550146A0B910002C9F5 /* PVRTexture.m in Sources */,
|
D58BB550146A0B910002C9F5 /* PVRTexture.m in Sources */,
|
||||||
D5D43CC9146AF4B4002ED842 /* RenameMPWorldViewController.mm in Sources */,
|
D5D43CC9146AF4B4002ED842 /* RenameMPWorldViewController.mm in Sources */,
|
||||||
D5B50F7014CFF670005F7284 /* AppPlatform_iOS.mm in Sources */,
|
D5B50F7014CFF670005F7284 /* AppPlatform_iOS.mm in Sources */,
|
||||||
D5B50F7414CFF670005F7284 /* CreativeMode.cpp in Sources */,
|
D5B50F7414CFF670005F7284 /* CreativeMode.cpp in Sources */,
|
||||||
|
F99D34432F736F9400DC153E /* Option.cpp in Sources */,
|
||||||
D5B50F7614CFF670005F7284 /* GameMode.cpp in Sources */,
|
D5B50F7614CFF670005F7284 /* GameMode.cpp in Sources */,
|
||||||
D5B50F7814CFF670005F7284 /* Button.cpp in Sources */,
|
D5B50F7814CFF670005F7284 /* Button.cpp in Sources */,
|
||||||
D5B50F7A14CFF670005F7284 /* ImageButton.cpp in Sources */,
|
D5B50F7A14CFF670005F7284 /* ImageButton.cpp in Sources */,
|
||||||
@@ -5067,6 +5167,7 @@
|
|||||||
D5B50FC814CFF670005F7284 /* KeyboardInput.cpp in Sources */,
|
D5B50FC814CFF670005F7284 /* KeyboardInput.cpp in Sources */,
|
||||||
D5B50FCA14CFF670005F7284 /* TouchscreenInput.cpp in Sources */,
|
D5B50FCA14CFF670005F7284 /* TouchscreenInput.cpp in Sources */,
|
||||||
D5B50FCC14CFF670005F7284 /* LocalPlayer.cpp in Sources */,
|
D5B50FCC14CFF670005F7284 /* LocalPlayer.cpp in Sources */,
|
||||||
|
F99D34482F736FE800DC153E /* KeyOption.cpp in Sources */,
|
||||||
D5B50FCE14CFF670005F7284 /* Chunk.cpp in Sources */,
|
D5B50FCE14CFF670005F7284 /* Chunk.cpp in Sources */,
|
||||||
D5B50FD014CFF670005F7284 /* Frustum.cpp in Sources */,
|
D5B50FD014CFF670005F7284 /* Frustum.cpp in Sources */,
|
||||||
D5B50FD214CFF670005F7284 /* ChickenRenderer.cpp in Sources */,
|
D5B50FD214CFF670005F7284 /* ChickenRenderer.cpp in Sources */,
|
||||||
@@ -5109,6 +5210,7 @@
|
|||||||
D5B5111014CFF670005F7284 /* Mth.cpp in Sources */,
|
D5B5111014CFF670005F7284 /* Mth.cpp in Sources */,
|
||||||
D5B5111214CFF670005F7284 /* PerfRenderer.cpp in Sources */,
|
D5B5111214CFF670005F7284 /* PerfRenderer.cpp in Sources */,
|
||||||
D5B5111414CFF670005F7284 /* PerfTimer.cpp in Sources */,
|
D5B5111414CFF670005F7284 /* PerfTimer.cpp in Sources */,
|
||||||
|
F99F0FA92F84369F00F2B29A /* GrassColor.cpp in Sources */,
|
||||||
D5B5111614CFF670005F7284 /* StringUtils.cpp in Sources */,
|
D5B5111614CFF670005F7284 /* StringUtils.cpp in Sources */,
|
||||||
D5B5111814CFF670005F7284 /* Direction.cpp in Sources */,
|
D5B5111814CFF670005F7284 /* Direction.cpp in Sources */,
|
||||||
D5B5111A14CFF670005F7284 /* Animal.cpp in Sources */,
|
D5B5111A14CFF670005F7284 /* Animal.cpp in Sources */,
|
||||||
@@ -5125,17 +5227,21 @@
|
|||||||
D5B5113014CFF670005F7284 /* TripodCamera.cpp in Sources */,
|
D5B5113014CFF670005F7284 /* TripodCamera.cpp in Sources */,
|
||||||
D5B5113214CFF670005F7284 /* Mob.cpp in Sources */,
|
D5B5113214CFF670005F7284 /* Mob.cpp in Sources */,
|
||||||
D5B5113414CFF670005F7284 /* MobCategory.cpp in Sources */,
|
D5B5113414CFF670005F7284 /* MobCategory.cpp in Sources */,
|
||||||
|
F99D34282F736AFB00DC153E /* OptionsFile.cpp in Sources */,
|
||||||
D5B5113814CFF670005F7284 /* PathFinderMob.cpp in Sources */,
|
D5B5113814CFF670005F7284 /* PathFinderMob.cpp in Sources */,
|
||||||
D5B5113A14CFF670005F7284 /* Inventory.cpp in Sources */,
|
D5B5113A14CFF670005F7284 /* Inventory.cpp in Sources */,
|
||||||
D5B5113C14CFF670005F7284 /* Player.cpp in Sources */,
|
D5B5113C14CFF670005F7284 /* Player.cpp in Sources */,
|
||||||
|
F99F0FB02F8436EB00F2B29A /* Color.cpp in Sources */,
|
||||||
D5B5113E14CFF670005F7284 /* Arrow.cpp in Sources */,
|
D5B5113E14CFF670005F7284 /* Arrow.cpp in Sources */,
|
||||||
D5B5114014CFF670005F7284 /* Recipes.cpp in Sources */,
|
D5B5114014CFF670005F7284 /* Recipes.cpp in Sources */,
|
||||||
D5B5114214CFF670005F7284 /* ToolRecipes.cpp in Sources */,
|
D5B5114214CFF670005F7284 /* ToolRecipes.cpp in Sources */,
|
||||||
D5B5114414CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
|
D5B5114414CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
|
||||||
D5B5114614CFF670005F7284 /* HatchetItem.cpp in Sources */,
|
D5B5114614CFF670005F7284 /* HatchetItem.cpp in Sources */,
|
||||||
D5B5114814CFF670005F7284 /* Item.cpp in Sources */,
|
D5B5114814CFF670005F7284 /* Item.cpp in Sources */,
|
||||||
|
F99F0FAC2F8436CE00F2B29A /* FoliageColor.cpp in Sources */,
|
||||||
D5B5114A14CFF670005F7284 /* ItemInstance.cpp in Sources */,
|
D5B5114A14CFF670005F7284 /* ItemInstance.cpp in Sources */,
|
||||||
D5B5114C14CFF670005F7284 /* PickaxeItem.cpp in Sources */,
|
D5B5114C14CFF670005F7284 /* PickaxeItem.cpp in Sources */,
|
||||||
|
F99D344B2F7370CF00DC153E /* Slider.cpp in Sources */,
|
||||||
D5B5114E14CFF670005F7284 /* ShovelItem.cpp in Sources */,
|
D5B5114E14CFF670005F7284 /* ShovelItem.cpp in Sources */,
|
||||||
D5B5115014CFF670005F7284 /* Biome.cpp in Sources */,
|
D5B5115014CFF670005F7284 /* Biome.cpp in Sources */,
|
||||||
D5B5115214CFF670005F7284 /* BiomeSource.cpp in Sources */,
|
D5B5115214CFF670005F7284 /* BiomeSource.cpp in Sources */,
|
||||||
@@ -5186,6 +5292,7 @@
|
|||||||
D5251DBA1538192700FC82C8 /* CloudServer.cpp in Sources */,
|
D5251DBA1538192700FC82C8 /* CloudServer.cpp in Sources */,
|
||||||
D5251DBE1538192700FC82C8 /* CommandParserInterface.cpp in Sources */,
|
D5251DBE1538192700FC82C8 /* CommandParserInterface.cpp in Sources */,
|
||||||
D5251DC01538192700FC82C8 /* ConnectionGraph2.cpp in Sources */,
|
D5251DC01538192700FC82C8 /* ConnectionGraph2.cpp in Sources */,
|
||||||
|
F99D34402F736C8400DC153E /* GuiElementContainer.cpp in Sources */,
|
||||||
D5251DC21538192700FC82C8 /* ConsoleServer.cpp in Sources */,
|
D5251DC21538192700FC82C8 /* ConsoleServer.cpp in Sources */,
|
||||||
D5251DC41538192700FC82C8 /* DataCompressor.cpp in Sources */,
|
D5251DC41538192700FC82C8 /* DataCompressor.cpp in Sources */,
|
||||||
D5251DC61538192700FC82C8 /* DirectoryDeltaTransfer.cpp in Sources */,
|
D5251DC61538192700FC82C8 /* DirectoryDeltaTransfer.cpp in Sources */,
|
||||||
@@ -5210,6 +5317,8 @@
|
|||||||
D5251DEC1538192700FC82C8 /* HTTPConnection.cpp in Sources */,
|
D5251DEC1538192700FC82C8 /* HTTPConnection.cpp in Sources */,
|
||||||
D5251DEE1538192700FC82C8 /* IncrementalReadInterface.cpp in Sources */,
|
D5251DEE1538192700FC82C8 /* IncrementalReadInterface.cpp in Sources */,
|
||||||
D5251DF01538192700FC82C8 /* Itoa.cpp in Sources */,
|
D5251DF01538192700FC82C8 /* Itoa.cpp in Sources */,
|
||||||
|
F99D34202F736AA100DC153E /* HttpClient.cpp in Sources */,
|
||||||
|
F99D34382F736C1000DC153E /* JoinByIPScreen.cpp in Sources */,
|
||||||
D5251DF21538192700FC82C8 /* LinuxStrings.cpp in Sources */,
|
D5251DF21538192700FC82C8 /* LinuxStrings.cpp in Sources */,
|
||||||
D5251DF41538192700FC82C8 /* LocklessTypes.cpp in Sources */,
|
D5251DF41538192700FC82C8 /* LocklessTypes.cpp in Sources */,
|
||||||
D5251DF61538192700FC82C8 /* LogCommandParser.cpp in Sources */,
|
D5251DF61538192700FC82C8 /* LogCommandParser.cpp in Sources */,
|
||||||
@@ -5238,6 +5347,7 @@
|
|||||||
D5251E2A1538192700FC82C8 /* RakSleep.cpp in Sources */,
|
D5251E2A1538192700FC82C8 /* RakSleep.cpp in Sources */,
|
||||||
D5251E2C1538192700FC82C8 /* RakString.cpp in Sources */,
|
D5251E2C1538192700FC82C8 /* RakString.cpp in Sources */,
|
||||||
D5251E2E1538192700FC82C8 /* RakThread.cpp in Sources */,
|
D5251E2E1538192700FC82C8 /* RakThread.cpp in Sources */,
|
||||||
|
F99D34332F736BDA00DC153E /* CreditsScreen.cpp in Sources */,
|
||||||
D5251E301538192700FC82C8 /* RakWString.cpp in Sources */,
|
D5251E301538192700FC82C8 /* RakWString.cpp in Sources */,
|
||||||
D5251E321538192700FC82C8 /* Rand.cpp in Sources */,
|
D5251E321538192700FC82C8 /* Rand.cpp in Sources */,
|
||||||
D5251E341538192700FC82C8 /* rdlmalloc.cpp in Sources */,
|
D5251E341538192700FC82C8 /* rdlmalloc.cpp in Sources */,
|
||||||
@@ -5280,6 +5390,7 @@
|
|||||||
D5951EEB159349100043A12A /* TileEntity.cpp in Sources */,
|
D5951EEB159349100043A12A /* TileEntity.cpp in Sources */,
|
||||||
D5951EEF159349680043A12A /* FurnaceScreen.cpp in Sources */,
|
D5951EEF159349680043A12A /* FurnaceScreen.cpp in Sources */,
|
||||||
D5951EF215934A2D0043A12A /* Feature.cpp in Sources */,
|
D5951EF215934A2D0043A12A /* Feature.cpp in Sources */,
|
||||||
|
F99D342C2F736B6F00DC153E /* OptionsItem.cpp in Sources */,
|
||||||
D5951EF815934AC50043A12A /* BaseContainerMenu.cpp in Sources */,
|
D5951EF815934AC50043A12A /* BaseContainerMenu.cpp in Sources */,
|
||||||
D5951EFA15934AC50043A12A /* FurnaceMenu.cpp in Sources */,
|
D5951EFA15934AC50043A12A /* FurnaceMenu.cpp in Sources */,
|
||||||
D5D381F315A1A1CF00B6C50E /* FillingContainer.cpp in Sources */,
|
D5D381F315A1A1CF00B6C50E /* FillingContainer.cpp in Sources */,
|
||||||
@@ -5332,6 +5443,7 @@
|
|||||||
D5D8C4C41639341100FD35F0 /* Motive.cpp in Sources */,
|
D5D8C4C41639341100FD35F0 /* Motive.cpp in Sources */,
|
||||||
D5D8C4C8163934BB00FD35F0 /* HangingEntityItem.cpp in Sources */,
|
D5D8C4C8163934BB00FD35F0 /* HangingEntityItem.cpp in Sources */,
|
||||||
D5D8C4CC1639362F00FD35F0 /* NetherReactorPattern.cpp in Sources */,
|
D5D8C4CC1639362F00FD35F0 /* NetherReactorPattern.cpp in Sources */,
|
||||||
|
BEEF202614CFF670005F0002 /* Lighting.cpp in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -5339,8 +5451,10 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
F912B8CF2F6C3D5200BC60DF /* TextBox.h in Sources */,
|
||||||
D5CF9C57144C225000E4244F /* main.mm in Sources */,
|
D5CF9C57144C225000E4244F /* main.mm in Sources */,
|
||||||
D5CF9C5B144C225000E4244F /* minecraftpeAppDelegate.mm in Sources */,
|
D5CF9C5B144C225000E4244F /* minecraftpeAppDelegate.mm in Sources */,
|
||||||
|
F99D343C2F736C3B00DC153E /* UsernameScreen.cpp in Sources */,
|
||||||
D5CF9C65144C225000E4244F /* EAGLView.m in Sources */,
|
D5CF9C65144C225000E4244F /* EAGLView.m in Sources */,
|
||||||
D5CFA01D144C453900E4244F /* minecraftpeViewController.mm in Sources */,
|
D5CFA01D144C453900E4244F /* minecraftpeViewController.mm in Sources */,
|
||||||
D5A55E4914500EDE00A7571B /* CreateNewWorldViewController.mm in Sources */,
|
D5A55E4914500EDE00A7571B /* CreateNewWorldViewController.mm in Sources */,
|
||||||
@@ -5354,6 +5468,7 @@
|
|||||||
D5F3B7D014548E7900D25470 /* IASKSettingsStoreUserDefaults.m in Sources */,
|
D5F3B7D014548E7900D25470 /* IASKSettingsStoreUserDefaults.m in Sources */,
|
||||||
D5F3B7D114548E7900D25470 /* IASKSpecifier.m in Sources */,
|
D5F3B7D114548E7900D25470 /* IASKSpecifier.m in Sources */,
|
||||||
D5F3B7D214548E7900D25470 /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
D5F3B7D214548E7900D25470 /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
||||||
|
F99D34472F736FE800DC153E /* KeyOption.cpp in Sources */,
|
||||||
D5F3B7D314548E7900D25470 /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
D5F3B7D314548E7900D25470 /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
||||||
D5F3B7D414548E7900D25470 /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
D5F3B7D414548E7900D25470 /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
||||||
D5F3B7D514548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
|
D5F3B7D514548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
|
||||||
@@ -5433,6 +5548,7 @@
|
|||||||
D5B5102F14CFF670005F7284 /* main.cpp in Sources */,
|
D5B5102F14CFF670005F7284 /* main.cpp in Sources */,
|
||||||
D5B5103514CFF670005F7284 /* Tag.cpp in Sources */,
|
D5B5103514CFF670005F7284 /* Tag.cpp in Sources */,
|
||||||
D5B5103714CFF670005F7284 /* ClientSideNetworkHandler.cpp in Sources */,
|
D5B5103714CFF670005F7284 /* ClientSideNetworkHandler.cpp in Sources */,
|
||||||
|
F99F0FAF2F8436EB00F2B29A /* Color.cpp in Sources */,
|
||||||
D5B5103914CFF670005F7284 /* NetEventCallback.cpp in Sources */,
|
D5B5103914CFF670005F7284 /* NetEventCallback.cpp in Sources */,
|
||||||
D5B5103B14CFF670005F7284 /* Packet.cpp in Sources */,
|
D5B5103B14CFF670005F7284 /* Packet.cpp in Sources */,
|
||||||
D5B5103D14CFF670005F7284 /* RakNetInstance.cpp in Sources */,
|
D5B5103D14CFF670005F7284 /* RakNetInstance.cpp in Sources */,
|
||||||
@@ -5453,6 +5569,7 @@
|
|||||||
D5B5111514CFF670005F7284 /* StringUtils.cpp in Sources */,
|
D5B5111514CFF670005F7284 /* StringUtils.cpp in Sources */,
|
||||||
D5B5111714CFF670005F7284 /* Direction.cpp in Sources */,
|
D5B5111714CFF670005F7284 /* Direction.cpp in Sources */,
|
||||||
D5B5111914CFF670005F7284 /* Animal.cpp in Sources */,
|
D5B5111914CFF670005F7284 /* Animal.cpp in Sources */,
|
||||||
|
F99F0FAD2F8436CE00F2B29A /* FoliageColor.cpp in Sources */,
|
||||||
D5B5111B14CFF670005F7284 /* Chicken.cpp in Sources */,
|
D5B5111B14CFF670005F7284 /* Chicken.cpp in Sources */,
|
||||||
D5B5111D14CFF670005F7284 /* Cow.cpp in Sources */,
|
D5B5111D14CFF670005F7284 /* Cow.cpp in Sources */,
|
||||||
D5B5111F14CFF670005F7284 /* Pig.cpp in Sources */,
|
D5B5111F14CFF670005F7284 /* Pig.cpp in Sources */,
|
||||||
@@ -5465,11 +5582,13 @@
|
|||||||
D5B5112D14CFF670005F7284 /* PrimedTnt.cpp in Sources */,
|
D5B5112D14CFF670005F7284 /* PrimedTnt.cpp in Sources */,
|
||||||
D5B5112F14CFF670005F7284 /* TripodCamera.cpp in Sources */,
|
D5B5112F14CFF670005F7284 /* TripodCamera.cpp in Sources */,
|
||||||
D5B5113114CFF670005F7284 /* Mob.cpp in Sources */,
|
D5B5113114CFF670005F7284 /* Mob.cpp in Sources */,
|
||||||
|
F99D34442F736F9400DC153E /* Option.cpp in Sources */,
|
||||||
D5B5113314CFF670005F7284 /* MobCategory.cpp in Sources */,
|
D5B5113314CFF670005F7284 /* MobCategory.cpp in Sources */,
|
||||||
D5B5113714CFF670005F7284 /* PathFinderMob.cpp in Sources */,
|
D5B5113714CFF670005F7284 /* PathFinderMob.cpp in Sources */,
|
||||||
D5B5113914CFF670005F7284 /* Inventory.cpp in Sources */,
|
D5B5113914CFF670005F7284 /* Inventory.cpp in Sources */,
|
||||||
D5B5113B14CFF670005F7284 /* Player.cpp in Sources */,
|
D5B5113B14CFF670005F7284 /* Player.cpp in Sources */,
|
||||||
D5B5113D14CFF670005F7284 /* Arrow.cpp in Sources */,
|
D5B5113D14CFF670005F7284 /* Arrow.cpp in Sources */,
|
||||||
|
F99D343F2F736C8400DC153E /* GuiElementContainer.cpp in Sources */,
|
||||||
D5B5113F14CFF670005F7284 /* Recipes.cpp in Sources */,
|
D5B5113F14CFF670005F7284 /* Recipes.cpp in Sources */,
|
||||||
D5B5114114CFF670005F7284 /* ToolRecipes.cpp in Sources */,
|
D5B5114114CFF670005F7284 /* ToolRecipes.cpp in Sources */,
|
||||||
D5B5114314CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
|
D5B5114314CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
|
||||||
@@ -5501,16 +5620,19 @@
|
|||||||
D5B5117714CFF670005F7284 /* ExternalFileLevelStorageSource.cpp in Sources */,
|
D5B5117714CFF670005F7284 /* ExternalFileLevelStorageSource.cpp in Sources */,
|
||||||
D5B5117914CFF670005F7284 /* RegionFile.cpp in Sources */,
|
D5B5117914CFF670005F7284 /* RegionFile.cpp in Sources */,
|
||||||
D5B5117B14CFF670005F7284 /* TickNextTickData.cpp in Sources */,
|
D5B5117B14CFF670005F7284 /* TickNextTickData.cpp in Sources */,
|
||||||
|
F99F0FAA2F84369F00F2B29A /* GrassColor.cpp in Sources */,
|
||||||
D5B5117D14CFF670005F7284 /* DoorTile.cpp in Sources */,
|
D5B5117D14CFF670005F7284 /* DoorTile.cpp in Sources */,
|
||||||
D5B5118114CFF670005F7284 /* StoneSlabTile.cpp in Sources */,
|
D5B5118114CFF670005F7284 /* StoneSlabTile.cpp in Sources */,
|
||||||
D5B5118314CFF670005F7284 /* Tile.cpp in Sources */,
|
D5B5118314CFF670005F7284 /* Tile.cpp in Sources */,
|
||||||
D5B5118514CFF670005F7284 /* HitResult.cpp in Sources */,
|
D5B5118514CFF670005F7284 /* HitResult.cpp in Sources */,
|
||||||
D5B5118B14D03342005F7284 /* SynchedEntityData.cpp in Sources */,
|
D5B5118B14D03342005F7284 /* SynchedEntityData.cpp in Sources */,
|
||||||
D5B5118E14DEA27F005F7284 /* DeathScreen.cpp in Sources */,
|
D5B5118E14DEA27F005F7284 /* DeathScreen.cpp in Sources */,
|
||||||
|
F99D34242F736AD400DC153E /* TextOption.cpp in Sources */,
|
||||||
D5B5119114DEA2B7005F7284 /* LevelData.cpp in Sources */,
|
D5B5119114DEA2B7005F7284 /* LevelData.cpp in Sources */,
|
||||||
D5B5119414DEA2EF005F7284 /* DyePowderItem.cpp in Sources */,
|
D5B5119414DEA2EF005F7284 /* DyePowderItem.cpp in Sources */,
|
||||||
D584926D14FD234400741128 /* SharedConstants.cpp in Sources */,
|
D584926D14FD234400741128 /* SharedConstants.cpp in Sources */,
|
||||||
D584927314FD236700741128 /* MoveControl.cpp in Sources */,
|
D584927314FD236700741128 /* MoveControl.cpp in Sources */,
|
||||||
|
F99D344C2F7370CF00DC153E /* Slider.cpp in Sources */,
|
||||||
D584928614FD240D00741128 /* IConfigListener.cpp in Sources */,
|
D584928614FD240D00741128 /* IConfigListener.cpp in Sources */,
|
||||||
D584928914FD2FAF00741128 /* Path.cpp in Sources */,
|
D584928914FD2FAF00741128 /* Path.cpp in Sources */,
|
||||||
D5B86281153810BD00F3238A /* I18n.cpp in Sources */,
|
D5B86281153810BD00F3238A /* I18n.cpp in Sources */,
|
||||||
@@ -5562,6 +5684,7 @@
|
|||||||
D5251E011538192700FC82C8 /* NatTypeDetectionServer.cpp in Sources */,
|
D5251E011538192700FC82C8 /* NatTypeDetectionServer.cpp in Sources */,
|
||||||
D5251E031538192700FC82C8 /* NetworkIDManager.cpp in Sources */,
|
D5251E031538192700FC82C8 /* NetworkIDManager.cpp in Sources */,
|
||||||
D5251E051538192700FC82C8 /* NetworkIDObject.cpp in Sources */,
|
D5251E051538192700FC82C8 /* NetworkIDObject.cpp in Sources */,
|
||||||
|
F99D34372F736C1000DC153E /* JoinByIPScreen.cpp in Sources */,
|
||||||
D5251E071538192700FC82C8 /* PacketConsoleLogger.cpp in Sources */,
|
D5251E071538192700FC82C8 /* PacketConsoleLogger.cpp in Sources */,
|
||||||
D5251E091538192700FC82C8 /* PacketFileLogger.cpp in Sources */,
|
D5251E091538192700FC82C8 /* PacketFileLogger.cpp in Sources */,
|
||||||
D5251E0B1538192700FC82C8 /* PacketizedTCP.cpp in Sources */,
|
D5251E0B1538192700FC82C8 /* PacketizedTCP.cpp in Sources */,
|
||||||
@@ -5591,11 +5714,13 @@
|
|||||||
D5251E411538192700FC82C8 /* SendToThread.cpp in Sources */,
|
D5251E411538192700FC82C8 /* SendToThread.cpp in Sources */,
|
||||||
D5251E431538192700FC82C8 /* SHA1.cpp in Sources */,
|
D5251E431538192700FC82C8 /* SHA1.cpp in Sources */,
|
||||||
D5251E451538192700FC82C8 /* SignaledEvent.cpp in Sources */,
|
D5251E451538192700FC82C8 /* SignaledEvent.cpp in Sources */,
|
||||||
|
F99D34342F736BDA00DC153E /* CreditsScreen.cpp in Sources */,
|
||||||
D5251E471538192700FC82C8 /* SimpleMutex.cpp in Sources */,
|
D5251E471538192700FC82C8 /* SimpleMutex.cpp in Sources */,
|
||||||
D5251E491538192700FC82C8 /* SocketLayer.cpp in Sources */,
|
D5251E491538192700FC82C8 /* SocketLayer.cpp in Sources */,
|
||||||
D5251E4B1538192700FC82C8 /* StringCompressor.cpp in Sources */,
|
D5251E4B1538192700FC82C8 /* StringCompressor.cpp in Sources */,
|
||||||
D5251E4D1538192700FC82C8 /* StringTable.cpp in Sources */,
|
D5251E4D1538192700FC82C8 /* StringTable.cpp in Sources */,
|
||||||
D5251E4F1538192700FC82C8 /* SuperFastHash.cpp in Sources */,
|
D5251E4F1538192700FC82C8 /* SuperFastHash.cpp in Sources */,
|
||||||
|
F99D342B2F736B6F00DC153E /* OptionsItem.cpp in Sources */,
|
||||||
D5251E511538192700FC82C8 /* TableSerializer.cpp in Sources */,
|
D5251E511538192700FC82C8 /* TableSerializer.cpp in Sources */,
|
||||||
D5251E531538192700FC82C8 /* TCPInterface.cpp in Sources */,
|
D5251E531538192700FC82C8 /* TCPInterface.cpp in Sources */,
|
||||||
D5251E551538192700FC82C8 /* TeamBalancer.cpp in Sources */,
|
D5251E551538192700FC82C8 /* TeamBalancer.cpp in Sources */,
|
||||||
@@ -5618,6 +5743,7 @@
|
|||||||
D5951EDD159348C50043A12A /* ItemPane.cpp in Sources */,
|
D5951EDD159348C50043A12A /* ItemPane.cpp in Sources */,
|
||||||
D5951EE3159349000043A12A /* FurnaceTile.cpp in Sources */,
|
D5951EE3159349000043A12A /* FurnaceTile.cpp in Sources */,
|
||||||
D5951EE8159349100043A12A /* FurnaceTileEntity.cpp in Sources */,
|
D5951EE8159349100043A12A /* FurnaceTileEntity.cpp in Sources */,
|
||||||
|
F99D342F2F736BAD00DC153E /* ConsoleScreen.cpp in Sources */,
|
||||||
D5951EEA159349100043A12A /* TileEntity.cpp in Sources */,
|
D5951EEA159349100043A12A /* TileEntity.cpp in Sources */,
|
||||||
D5951EEE159349680043A12A /* FurnaceScreen.cpp in Sources */,
|
D5951EEE159349680043A12A /* FurnaceScreen.cpp in Sources */,
|
||||||
D5951EF115934A2D0043A12A /* Feature.cpp in Sources */,
|
D5951EF115934A2D0043A12A /* Feature.cpp in Sources */,
|
||||||
@@ -5654,6 +5780,7 @@
|
|||||||
D544941E15D13F45005FA9B0 /* PlayerRenderer.cpp in Sources */,
|
D544941E15D13F45005FA9B0 /* PlayerRenderer.cpp in Sources */,
|
||||||
D544942215D13F5E005FA9B0 /* RemotePlayer.cpp in Sources */,
|
D544942215D13F5E005FA9B0 /* RemotePlayer.cpp in Sources */,
|
||||||
D5B17ED515E226F50056E751 /* Throwable.cpp in Sources */,
|
D5B17ED515E226F50056E751 /* Throwable.cpp in Sources */,
|
||||||
|
F99D341F2F736AA100DC153E /* HttpClient.cpp in Sources */,
|
||||||
D5B17ED915E2273F0056E751 /* SurvivalMode.cpp in Sources */,
|
D5B17ED915E2273F0056E751 /* SurvivalMode.cpp in Sources */,
|
||||||
D5B17EDD15E227670056E751 /* TrapDoorTile.cpp in Sources */,
|
D5B17EDD15E227670056E751 /* TrapDoorTile.cpp in Sources */,
|
||||||
D5B17EE115E260910056E751 /* MoveFolder.mm in Sources */,
|
D5B17EE115E260910056E751 /* MoveFolder.mm in Sources */,
|
||||||
@@ -5689,6 +5816,7 @@
|
|||||||
0400453A16A4125C003EB6FA /* FallingTileRenderer.cpp in Sources */,
|
0400453A16A4125C003EB6FA /* FallingTileRenderer.cpp in Sources */,
|
||||||
0413970716A82E1E008A9F1A /* ArmorItem.cpp in Sources */,
|
0413970716A82E1E008A9F1A /* ArmorItem.cpp in Sources */,
|
||||||
0413970D16A82E6B008A9F1A /* CraftingFilters.cpp in Sources */,
|
0413970D16A82E6B008A9F1A /* CraftingFilters.cpp in Sources */,
|
||||||
|
F99D34272F736AFB00DC153E /* OptionsFile.cpp in Sources */,
|
||||||
0413970E16A82E6B008A9F1A /* StonecutterScreen.cpp in Sources */,
|
0413970E16A82E6B008A9F1A /* StonecutterScreen.cpp in Sources */,
|
||||||
0413971116A82E7B008A9F1A /* ArmorScreen.cpp in Sources */,
|
0413971116A82E7B008A9F1A /* ArmorScreen.cpp in Sources */,
|
||||||
0413971516A82EB9008A9F1A /* ArmorRecipes.cpp in Sources */,
|
0413971516A82EB9008A9F1A /* ArmorRecipes.cpp in Sources */,
|
||||||
@@ -5697,8 +5825,8 @@
|
|||||||
042A91AE16B17517007ABBC6 /* GuiElement.cpp in Sources */,
|
042A91AE16B17517007ABBC6 /* GuiElement.cpp in Sources */,
|
||||||
042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */,
|
042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */,
|
||||||
042A91B016B17517007ABBC6 /* OptionsGroup.cpp in Sources */,
|
042A91B016B17517007ABBC6 /* OptionsGroup.cpp in Sources */,
|
||||||
042A91B116B17517007ABBC6 /* OptionsPane.cpp in Sources */,
|
|
||||||
042A91B216B17517007ABBC6 /* TextBox.cpp in Sources */,
|
042A91B216B17517007ABBC6 /* TextBox.cpp in Sources */,
|
||||||
|
BEEF202614CFF670005F0003 /* Lighting.cpp in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -5735,25 +5863,29 @@
|
|||||||
D50BE20815EE05B8008AA75E /* Ad-Hoc */ = {
|
D50BE20815EE05B8008AA75E /* Ad-Hoc */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = YES;
|
||||||
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
|
ARCHS = "$(ARCHS_STANDARD)";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB";
|
||||||
COPY_PHASE_STRIP = YES;
|
COPY_PHASE_STRIP = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
|
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
|
||||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
GCC_VERSION = "";
|
||||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
||||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = 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";
|
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
||||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "C93D3524-5C6F-466E-B12B-833663B7EAE0";
|
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "C93D3524-5C6F-466E-B12B-833663B7EAE0";
|
||||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||||
SDKROOT = iphoneos6.0;
|
SDKROOT = iphoneos;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||||
|
USE_HEADERMAP = NO;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
};
|
};
|
||||||
name = "Ad-Hoc";
|
name = "Ad-Hoc";
|
||||||
@@ -5765,15 +5897,26 @@
|
|||||||
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = "";
|
GCC_PREPROCESSOR_DEFINITIONS = "";
|
||||||
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
||||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
GCC_VERSION = "";
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
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";
|
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)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||||
SDKROOT = iphoneos6.0;
|
SDKROOT = iphoneos;
|
||||||
VALID_ARCHS = "i386 armv6 armv7";
|
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;
|
WRAPPER_EXTENSION = app;
|
||||||
};
|
};
|
||||||
name = "Ad-Hoc";
|
name = "Ad-Hoc";
|
||||||
@@ -5846,24 +5989,28 @@
|
|||||||
D5A20ADB146AAD9C00A52FEC /* AppStore */ = {
|
D5A20ADB146AAD9C00A52FEC /* AppStore */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = YES;
|
||||||
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
|
ARCHS = "$(ARCHS_STANDARD)";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB";
|
||||||
COPY_PHASE_STRIP = YES;
|
COPY_PHASE_STRIP = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
GCC_VERSION = "";
|
||||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
||||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = 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";
|
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
||||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "64BA8967-1A9A-4980-972C-42E75AD5E023";
|
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "64BA8967-1A9A-4980-972C-42E75AD5E023";
|
||||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||||
SDKROOT = iphoneos6.0;
|
SDKROOT = iphoneos;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||||
|
USE_HEADERMAP = NO;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
};
|
};
|
||||||
name = AppStore;
|
name = AppStore;
|
||||||
@@ -5876,11 +6023,19 @@
|
|||||||
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
|
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
|
||||||
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
||||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
GCC_VERSION = "";
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
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";
|
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 = (
|
OTHER_CFLAGS = (
|
||||||
"-DNS_BLOCK_ASSERTIONS=1",
|
"-DNS_BLOCK_ASSERTIONS=1",
|
||||||
"-DANDROID_PUBLISH",
|
"-DANDROID_PUBLISH",
|
||||||
@@ -5888,8 +6043,10 @@
|
|||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "1B194957-98CF-49B7-A0E7-76692B4B722D";
|
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "1B194957-98CF-49B7-A0E7-76692B4B722D";
|
||||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||||
SDKROOT = iphoneos6.0;
|
SDKROOT = iphoneos;
|
||||||
VALID_ARCHS = "i386 armv6 armv7";
|
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;
|
WRAPPER_EXTENSION = app;
|
||||||
};
|
};
|
||||||
name = AppStore;
|
name = AppStore;
|
||||||
@@ -5922,8 +6079,8 @@
|
|||||||
D5CF9C6C144C225000E4244F /* Debug */ = {
|
D5CF9C6C144C225000E4244F /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = YES;
|
||||||
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
|
ARCHS = "$(ARCHS_STANDARD)";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
@@ -5935,41 +6092,50 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
);
|
);
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
GCC_VERSION = "";
|
||||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
||||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = 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;
|
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||||
SDKROOT = iphoneos6.0;
|
SDKROOT = iphoneos;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||||
|
USE_HEADERMAP = NO;
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
D5CF9C6D144C225000E4244F /* Release */ = {
|
D5CF9C6D144C225000E4244F /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = YES;
|
||||||
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
|
ARCHS = "$(ARCHS_STANDARD)";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
COPY_PHASE_STRIP = YES;
|
COPY_PHASE_STRIP = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
|
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
|
||||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
GCC_VERSION = "";
|
||||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
||||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = 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";
|
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
||||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||||
SDKROOT = iphoneos6.0;
|
SDKROOT = iphoneos;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||||
|
USE_HEADERMAP = NO;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
@@ -5977,19 +6143,34 @@
|
|||||||
D5CF9C6F144C225000E4244F /* Debug */ = {
|
D5CF9C6F144C225000E4244F /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEVELOPMENT_TEAM = PZUVNW8F2U;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
|
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
|
||||||
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
||||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
GCC_VERSION = "";
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
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";
|
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)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||||
SDKROOT = iphoneos6.0;
|
SDKROOT = iphoneos;
|
||||||
VALID_ARCHS = "i386 armv6 armv7";
|
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;
|
WRAPPER_EXTENSION = app;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
@@ -5997,19 +6178,34 @@
|
|||||||
D5CF9C70144C225000E4244F /* Release */ = {
|
D5CF9C70144C225000E4244F /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEVELOPMENT_TEAM = PZUVNW8F2U;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = "";
|
GCC_PREPROCESSOR_DEFINITIONS = "";
|
||||||
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
||||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
GCC_VERSION = "";
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
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";
|
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)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||||
SDKROOT = iphoneos6.0;
|
SDKROOT = iphoneos;
|
||||||
VALID_ARCHS = "i386 armv6 armv7";
|
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;
|
WRAPPER_EXTENSION = app;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>com.mojang.${PRODUCT_NAME:rfc1034identifier}</string>
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
@@ -58,6 +58,8 @@
|
|||||||
<array>
|
<array>
|
||||||
<string>minecraft.ttf</string>
|
<string>minecraft.ttf</string>
|
||||||
</array>
|
</array>
|
||||||
|
<key>UILaunchStoryboardName</key>
|
||||||
|
<string>Launch Screen</string>
|
||||||
<key>UIPrerenderedIcon</key>
|
<key>UIPrerenderedIcon</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>UIRequiresPersistentWiFi</key>
|
<key>UIRequiresPersistentWiFi</key>
|
||||||
|
|||||||
@@ -20,6 +20,10 @@
|
|||||||
#include <shellapi.h>
|
#include <shellapi.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __EMSCRIPTEN__
|
||||||
|
#include <emscripten/html5.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
static void png_funcReadFile(png_structp pngPtr, png_bytep data, png_size_t length) {
|
static void png_funcReadFile(png_structp pngPtr, png_bytep data, png_size_t length) {
|
||||||
((std::istream*)png_get_io_ptr(pngPtr))->read((char*)data, length);
|
((std::istream*)png_get_io_ptr(pngPtr))->read((char*)data, length);
|
||||||
}
|
}
|
||||||
@@ -102,12 +106,31 @@ public:
|
|||||||
return std::string(mbstr);
|
return std::string(mbstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int getScreenWidth() override { return 854; };
|
virtual int getScreenWidth() override {
|
||||||
virtual int getScreenHeight() override { return 480; };
|
#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 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) override {
|
virtual void hideCursor(bool hide) override {
|
||||||
int isHide = hide ? GLFW_CURSOR_NORMAL : GLFW_CURSOR_HIDDEN;
|
int isHide = hide ? GLFW_CURSOR_NORMAL : GLFW_CURSOR_HIDDEN;
|
||||||
@@ -120,6 +143,8 @@ public:
|
|||||||
#elif __linux__
|
#elif __linux__
|
||||||
std::string command = "xdg-open " + url;
|
std::string command = "xdg-open " + url;
|
||||||
system(command.c_str());
|
system(command.c_str());
|
||||||
|
#elif __EMSCRIPTEN__
|
||||||
|
emscripten_run_script(std::string("window.open('" + url + "', '_blank')").c_str());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,11 +52,10 @@ public:
|
|||||||
|
|
||||||
virtual StringVector getOptionStrings();
|
virtual StringVector getOptionStrings();
|
||||||
|
|
||||||
virtual bool isPowerVR() { return false; }
|
virtual bool isPowerVR();
|
||||||
virtual bool isSuperFast();
|
virtual bool isSuperFast();
|
||||||
virtual void showKeyboard();
|
virtual void showKeyboard();
|
||||||
virtual void hideKeyboard();
|
virtual void hideKeyboard();
|
||||||
virtual void isPowerVR();
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
std::string _basePath;
|
std::string _basePath;
|
||||||
|
|||||||
@@ -275,8 +275,10 @@ void AppPlatform_iOS::hideKeyboard() {
|
|||||||
[_viewController hideKeyboard];
|
[_viewController hideKeyboard];
|
||||||
super::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);
|
const char* s = (const char*)glGetString(GL_RENDERER);
|
||||||
if (!s) return false;
|
if (!s) return false;
|
||||||
return strstr(s, "SGX") != NULL;
|
return strstr(s, "SGX") != NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
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__*/
|
||||||
@@ -87,6 +87,14 @@ public:
|
|||||||
|
|
||||||
void update();
|
void update();
|
||||||
|
|
||||||
|
std::string gatherStats1();
|
||||||
|
|
||||||
|
std::string gatherStats2();
|
||||||
|
|
||||||
|
std::string gatherStats4();
|
||||||
|
|
||||||
|
std::string gatherStats3();
|
||||||
|
|
||||||
void tick(int nTick, int maxTick);
|
void tick(int nTick, int maxTick);
|
||||||
void tickInput();
|
void tickInput();
|
||||||
|
|
||||||
@@ -109,6 +117,8 @@ public:
|
|||||||
|
|
||||||
bool isLevelGenerated();
|
bool isLevelGenerated();
|
||||||
|
|
||||||
|
void handleMouseDown(int button, bool down);
|
||||||
|
|
||||||
void audioEngineOn();
|
void audioEngineOn();
|
||||||
void audioEngineOff();
|
void audioEngineOff();
|
||||||
|
|
||||||
@@ -219,6 +229,7 @@ private:
|
|||||||
bool _isCreativeMode;
|
bool _isCreativeMode;
|
||||||
//int _respawnPlayerTicks;
|
//int _respawnPlayerTicks;
|
||||||
Player* _pendingRemovePlayer; // @attn @todo @fix: remove this shait and fix the respawn behaviour
|
Player* _pendingRemovePlayer; // @attn @todo @fix: remove this shait and fix the respawn behaviour
|
||||||
|
// shit* lmao
|
||||||
|
|
||||||
PerfRenderer* _perfRenderer;
|
PerfRenderer* _perfRenderer;
|
||||||
CommandServer* _commandServer;
|
CommandServer* _commandServer;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#include <SDL/SDL.h>
|
#include <SDL/SDL.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PLATFORM_DESKTOP
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ void MouseHandler::grab() {
|
|||||||
SDL_ShowCursor(0);
|
SDL_ShowCursor(0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PLATFORM_DESKTOP
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||||
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -46,7 +46,7 @@ void MouseHandler::release() {
|
|||||||
SDL_ShowCursor(1);
|
SDL_ShowCursor(1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PLATFORM_DESKTOP
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||||
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,4 +104,4 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_value;
|
std::string m_value;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -54,12 +54,38 @@ OptionBool limitFramerate("limitFramerate", false);
|
|||||||
OptionBool vsync("vsync", true);
|
OptionBool vsync("vsync", true);
|
||||||
OptionBool fancyGraphics("fancyGraphics", true);
|
OptionBool fancyGraphics("fancyGraphics", true);
|
||||||
OptionBool viewBobbing("viewBobbing", true);
|
OptionBool viewBobbing("viewBobbing", true);
|
||||||
OptionBool ambientOcclusion("ao", false);
|
OptionBool ambientOcclusion("ao", true);
|
||||||
|
|
||||||
|
OptionBool useNormalLighting("normalLighting", true);
|
||||||
|
|
||||||
|
OptionBool beautifulSky("beautifulSky", true);
|
||||||
|
|
||||||
|
OptionBool useVignette("useVignette", true);
|
||||||
|
|
||||||
OptionBool useTouchscreen("useTouchscreen", true);
|
OptionBool useTouchscreen("useTouchscreen", true);
|
||||||
|
|
||||||
OptionBool serverVisible("servervisible", true);
|
OptionBool serverVisible("servervisible", true);
|
||||||
|
|
||||||
|
OptionBool foliageTint("foliagetint", true);
|
||||||
|
|
||||||
|
OptionInt fogType("fogType", 0, 0, 2);
|
||||||
|
|
||||||
|
OptionBool javaHud("javaHud", false);
|
||||||
|
|
||||||
|
OptionBool betaSky("betaSky", false);
|
||||||
|
|
||||||
|
OptionBool tintedSide("tintedSide", false);
|
||||||
|
|
||||||
|
OptionBool blockOutline("blockOutline", false);
|
||||||
|
|
||||||
|
OptionBool restoredAnims("restoredAnims", true);
|
||||||
|
|
||||||
|
OptionInt debugStyle("debugStyle", 0, 0, 1);
|
||||||
|
|
||||||
|
OptionInt menuStyle("menuStyle",0, 0, 2);
|
||||||
|
|
||||||
|
OptionBool windowScale("windowScale", false);
|
||||||
|
|
||||||
OptionInt keyForward("key.forward", Keyboard::KEY_W);
|
OptionInt keyForward("key.forward", Keyboard::KEY_W);
|
||||||
OptionInt keyLeft("key.left", Keyboard::KEY_A);
|
OptionInt keyLeft("key.left", Keyboard::KEY_A);
|
||||||
OptionInt keyBack("key.back", Keyboard::KEY_S);
|
OptionInt keyBack("key.back", Keyboard::KEY_S);
|
||||||
@@ -112,6 +138,7 @@ void Options::initTable() {
|
|||||||
|
|
||||||
|
|
||||||
m_options[OPTIONS_GUI_SCALE] = &guiScale;
|
m_options[OPTIONS_GUI_SCALE] = &guiScale;
|
||||||
|
m_options[OPTIONS_WINDOW_SCALE] = &windowScale;
|
||||||
|
|
||||||
m_options[OPTIONS_SKIN] = &skin;
|
m_options[OPTIONS_SKIN] = &skin;
|
||||||
m_options[OPTIONS_USERNAME] = &username;
|
m_options[OPTIONS_USERNAME] = &username;
|
||||||
@@ -136,8 +163,20 @@ void Options::initTable() {
|
|||||||
|
|
||||||
m_options[OPTIONS_USE_TOUCHSCREEN] = &useTouchscreen;
|
m_options[OPTIONS_USE_TOUCHSCREEN] = &useTouchscreen;
|
||||||
|
|
||||||
|
m_options[OPTIONS_BLOCK_OUTLINE] = &blockOutline;
|
||||||
|
|
||||||
|
m_options[OPTIONS_VIGNETTE] = &useVignette;
|
||||||
|
|
||||||
|
m_options[OPTIONS_BEAUTIFUL_SKY] = &beautifulSky;
|
||||||
|
|
||||||
|
m_options[OPTIONS_NORMAL_LIGHTING] = &useNormalLighting;
|
||||||
|
|
||||||
|
m_options[OPTIONS_RESTORED_ANIMS] = &restoredAnims;
|
||||||
|
|
||||||
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
|
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
|
||||||
|
|
||||||
|
m_options[OPTIONS_MENU_STYLE] = &menuStyle;
|
||||||
|
|
||||||
m_options[OPTIONS_KEY_FORWARD] = &keyForward;
|
m_options[OPTIONS_KEY_FORWARD] = &keyForward;
|
||||||
m_options[OPTIONS_KEY_LEFT] = &keyLeft;
|
m_options[OPTIONS_KEY_LEFT] = &keyLeft;
|
||||||
m_options[OPTIONS_KEY_BACK] = &keyBack;
|
m_options[OPTIONS_KEY_BACK] = &keyBack;
|
||||||
@@ -160,6 +199,18 @@ void Options::initTable() {
|
|||||||
m_options[OPTIONS_BAR_ON_TOP] = &barOnTop;
|
m_options[OPTIONS_BAR_ON_TOP] = &barOnTop;
|
||||||
m_options[OPTIONS_ALLOW_SPRINT] = &allowSprint;
|
m_options[OPTIONS_ALLOW_SPRINT] = &allowSprint;
|
||||||
m_options[OPTIONS_RPI_CURSOR] = &rpiCursor;
|
m_options[OPTIONS_RPI_CURSOR] = &rpiCursor;
|
||||||
|
m_options[OPTIONS_FOLIAGE_TINT] = &foliageTint;
|
||||||
|
|
||||||
|
// more options yay
|
||||||
|
m_options[OPTIONS_FOG_TYPE] = &fogType;
|
||||||
|
|
||||||
|
m_options[OPTIONS_DEBUG_STYLE] = &debugStyle;
|
||||||
|
|
||||||
|
m_options[OPTIONS_BETA_SKY] = &betaSky;
|
||||||
|
|
||||||
|
m_options[OPTIONS_TINTED_SIDE] = &tintedSide;
|
||||||
|
|
||||||
|
m_options[OPTIONS_JAVA_HUD] = &javaHud;
|
||||||
|
|
||||||
m_options[OPTIONS_AUTOJUMP] = &autoJump;
|
m_options[OPTIONS_AUTOJUMP] = &autoJump;
|
||||||
m_options[OPTIONS_LAST_IP] = &lastIp;
|
m_options[OPTIONS_LAST_IP] = &lastIp;
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ enum OptionId {
|
|||||||
OPTIONS_BAR_ON_TOP,
|
OPTIONS_BAR_ON_TOP,
|
||||||
OPTIONS_ALLOW_SPRINT,
|
OPTIONS_ALLOW_SPRINT,
|
||||||
OPTIONS_AUTOJUMP,
|
OPTIONS_AUTOJUMP,
|
||||||
|
OPTIONS_WINDOW_SCALE,
|
||||||
|
|
||||||
// Graphics
|
// Graphics
|
||||||
OPTIONS_RENDER_DEBUG,
|
OPTIONS_RENDER_DEBUG,
|
||||||
@@ -49,6 +50,8 @@ enum OptionId {
|
|||||||
OPTIONS_LIMIT_FRAMERATE,
|
OPTIONS_LIMIT_FRAMERATE,
|
||||||
OPTIONS_VSYNC,
|
OPTIONS_VSYNC,
|
||||||
OPTIONS_FANCY_GRAPHICS,
|
OPTIONS_FANCY_GRAPHICS,
|
||||||
|
OPTIONS_NORMAL_LIGHTING,
|
||||||
|
|
||||||
|
|
||||||
// Cheats / debug
|
// Cheats / debug
|
||||||
OPTIONS_FLY_SPEED,
|
OPTIONS_FLY_SPEED,
|
||||||
@@ -56,6 +59,7 @@ enum OptionId {
|
|||||||
OPTIONS_IS_FLYING,
|
OPTIONS_IS_FLYING,
|
||||||
|
|
||||||
// Control
|
// Control
|
||||||
|
OPTIONS_BLOCK_OUTLINE,
|
||||||
OPTIONS_USE_MOUSE_FOR_DIGGING,
|
OPTIONS_USE_MOUSE_FOR_DIGGING,
|
||||||
OPTIONS_IS_LEFT_HANDED,
|
OPTIONS_IS_LEFT_HANDED,
|
||||||
OPTIONS_IS_JOY_TOUCH_AREA,
|
OPTIONS_IS_JOY_TOUCH_AREA,
|
||||||
@@ -84,6 +88,17 @@ enum OptionId {
|
|||||||
OPTIONS_LAST_IP,
|
OPTIONS_LAST_IP,
|
||||||
|
|
||||||
OPTIONS_RPI_CURSOR,
|
OPTIONS_RPI_CURSOR,
|
||||||
|
OPTIONS_FOLIAGE_TINT,
|
||||||
|
OPTIONS_FOG_TYPE,
|
||||||
|
OPTIONS_JAVA_HUD,
|
||||||
|
OPTIONS_RESTORED_ANIMS,
|
||||||
|
OPTIONS_TINTED_SIDE,
|
||||||
|
OPTIONS_BETA_SKY,
|
||||||
|
OPTIONS_BEAUTIFUL_SKY,
|
||||||
|
OPTIONS_VIGNETTE,
|
||||||
|
OPTIONS_DEBUG_STYLE,
|
||||||
|
OPTIONS_COMPLETE_LIGHTING,
|
||||||
|
OPTIONS_MENU_STYLE,
|
||||||
// Should be last!
|
// Should be last!
|
||||||
OPTIONS_COUNT
|
OPTIONS_COUNT
|
||||||
};
|
};
|
||||||
@@ -94,6 +109,10 @@ typedef std::vector<std::string> StringVector;
|
|||||||
class Options
|
class Options
|
||||||
{
|
{
|
||||||
public:
|
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;
|
static bool debugGl;
|
||||||
|
|
||||||
Options(Minecraft* minecraft, const std::string& workingDirectory = "")
|
Options(Minecraft* minecraft, const std::string& workingDirectory = "")
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ OptionsFile::OptionsFile() {
|
|||||||
settingsPath = "./Documents/options.txt";
|
settingsPath = "./Documents/options.txt";
|
||||||
#elif defined(ANDROID)
|
#elif defined(ANDROID)
|
||||||
settingsPath = "options.txt";
|
settingsPath = "options.txt";
|
||||||
|
#elif defined(__EMSCRIPTEN__)
|
||||||
|
settingsPath = "/games/com.mojang/options.txt";
|
||||||
#else
|
#else
|
||||||
settingsPath = "options.txt";
|
settingsPath = "options.txt";
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,69 +1,56 @@
|
|||||||
#include "CreativeMode.h"
|
#include "CreativeMode.h"
|
||||||
#include "../Minecraft.h"
|
#include "../Minecraft.h"
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
#include "../particle/ParticleEngine.h"
|
#include "../particle/ParticleEngine.h"
|
||||||
#endif
|
#endif
|
||||||
#include "../player/LocalPlayer.h"
|
#include "../player/LocalPlayer.h"
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
#include "../renderer/LevelRenderer.h"
|
#include "../renderer/LevelRenderer.h"
|
||||||
#include "../sound/SoundEngine.h"
|
#include "../sound/SoundEngine.h"
|
||||||
#endif
|
#endif
|
||||||
#include "../../world/level/Level.h"
|
#include "../../world/level/Level.h"
|
||||||
//#include "../../network/Packet.h"
|
//#include "../../network/Packet.h"
|
||||||
#include "../../network/packet/RemoveBlockPacket.h"
|
#include "../../network/packet/RemoveBlockPacket.h"
|
||||||
#include "../../world/entity/player/Abilities.h"
|
#include "../../world/entity/player/Abilities.h"
|
||||||
|
|
||||||
static const int DestructionTickDelay = 5;
|
static const int DestructionTickDelay = 5;
|
||||||
|
|
||||||
CreativeMode::CreativeMode(Minecraft* minecraft)
|
CreativeMode::CreativeMode(Minecraft* minecraft)
|
||||||
: super(minecraft)
|
: super(minecraft)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreativeMode::startDestroyBlock(int x, int y, int z, int face) {
|
void CreativeMode::startDestroyBlock(int x, int y, int z, int face) {
|
||||||
if(minecraft->player->getCarriedItem() != NULL && minecraft->player->getCarriedItem()->id == Item::bow->id)
|
if(minecraft->player->getCarriedItem() != NULL && minecraft->player->getCarriedItem()->id == Item::bow->id)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
creativeDestroyBlock(x, y, z, face);
|
creativeDestroyBlock(x, y, z, face);
|
||||||
destroyDelay = DestructionTickDelay;
|
destroyDelay = DestructionTickDelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreativeMode::creativeDestroyBlock(int x, int y, int z, int face) {
|
void CreativeMode::creativeDestroyBlock(int x, int y, int z, int face) {
|
||||||
minecraft->level->extinguishFire(x, y, z, face);
|
minecraft->level->extinguishFire(x, y, z, face);
|
||||||
destroyBlock(x, y, z, face);
|
destroyBlock(x, y, z, face);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreativeMode::continueDestroyBlock(int x, int y, int z, int face) {
|
void CreativeMode::continueDestroyBlock(int x, int y, int z, int face) {
|
||||||
destroyDelay--;
|
destroyDelay--;
|
||||||
if (destroyDelay <= 0) {
|
if (destroyDelay <= 0) {
|
||||||
destroyDelay = DestructionTickDelay;
|
destroyDelay = DestructionTickDelay;
|
||||||
creativeDestroyBlock(x, y, z, face);
|
creativeDestroyBlock(x, y, z, face);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreativeMode::stopDestroyBlock() {
|
void CreativeMode::stopDestroyBlock() {
|
||||||
destroyDelay = 0;
|
destroyDelay = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreativeMode::initAbilities( Abilities& abilities ) {
|
void CreativeMode::initAbilities( Abilities& abilities ) {
|
||||||
abilities.mayfly = true;
|
abilities.mayfly = true;
|
||||||
abilities.instabuild = true;
|
abilities.instabuild = true;
|
||||||
abilities.invulnerable = true;
|
abilities.invulnerable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CreativeMode::isCreativeType() {
|
bool CreativeMode::isCreativeType() {
|
||||||
return true;
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,27 +1,26 @@
|
|||||||
#ifndef NET_MINECRAFT_CLIENT_GAMEMODE__CreativeMode_H__
|
#ifndef NET_MINECRAFT_CLIENT_GAMEMODE__CreativeMode_H__
|
||||||
#define NET_MINECRAFT_CLIENT_GAMEMODE__CreativeMode_H__
|
#define NET_MINECRAFT_CLIENT_GAMEMODE__CreativeMode_H__
|
||||||
|
|
||||||
//package net.minecraft.client.gamemode;
|
//package net.minecraft.client.gamemode;
|
||||||
|
|
||||||
#include "GameMode.h"
|
#include "GameMode.h"
|
||||||
|
|
||||||
class CreativeMode: public GameMode
|
class CreativeMode: public GameMode
|
||||||
{
|
{
|
||||||
typedef GameMode super;
|
typedef GameMode super;
|
||||||
public:
|
public:
|
||||||
CreativeMode(Minecraft* minecraft);
|
CreativeMode(Minecraft* minecraft);
|
||||||
|
|
||||||
void startDestroyBlock(int x, int y, int z, int face);
|
void startDestroyBlock(int x, int y, int z, int face);
|
||||||
void continueDestroyBlock(int x, int y, int z, int face);
|
void continueDestroyBlock(int x, int y, int z, int face);
|
||||||
void stopDestroyBlock();
|
void stopDestroyBlock();
|
||||||
|
|
||||||
bool isCreativeType();
|
bool isCreativeType();
|
||||||
|
|
||||||
void initAbilities(Abilities& abilities);
|
void initAbilities(Abilities& abilities);
|
||||||
|
|
||||||
void releaseUsingItem(Player* player);
|
private:
|
||||||
private:
|
void creativeDestroyBlock(int x, int y, int z, int face);
|
||||||
void creativeDestroyBlock(int x, int y, int z, int face);
|
};
|
||||||
};
|
|
||||||
|
#endif /*NET_MINECRAFT_CLIENT_GAMEMODE__CreativeMode_H__*/
|
||||||
#endif /*NET_MINECRAFT_CLIENT_GAMEMODE__CreativeMode_H__*/
|
|
||||||
|
|||||||
@@ -1,115 +1,102 @@
|
|||||||
#include "CreatorMode.h"
|
#include "CreatorMode.h"
|
||||||
#include "../Minecraft.h"
|
#include "../Minecraft.h"
|
||||||
#include "../particle/ParticleEngine.h"
|
#include "../particle/ParticleEngine.h"
|
||||||
#include "../player/LocalPlayer.h"
|
#include "../player/LocalPlayer.h"
|
||||||
#include "../renderer/LevelRenderer.h"
|
#include "../renderer/LevelRenderer.h"
|
||||||
#include "../sound/SoundEngine.h"
|
#include "../sound/SoundEngine.h"
|
||||||
#include "../../world/level/Level.h"
|
#include "../../world/level/Level.h"
|
||||||
//#include "../../network/Packet.h"
|
//#include "../../network/Packet.h"
|
||||||
#include "../../network/packet/RemoveBlockPacket.h"
|
#include "../../network/packet/RemoveBlockPacket.h"
|
||||||
#include "../../world/entity/player/Abilities.h"
|
#include "../../world/entity/player/Abilities.h"
|
||||||
|
|
||||||
static const int DestructionTickDelay = 5;
|
static const int DestructionTickDelay = 5;
|
||||||
|
|
||||||
class Creator: public ICreator {
|
class Creator: public ICreator {
|
||||||
//virtual void getEvents();
|
//virtual void getEvents();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Creator(/*int eventLifeTime*/)
|
Creator(/*int eventLifeTime*/)
|
||||||
: _tileEvents(32),
|
: _tileEvents(32),
|
||||||
_tickId(0)
|
_tickId(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void setTick(int tick) {
|
void setTick(int tick) {
|
||||||
_tickId = tick;
|
_tickId = tick;
|
||||||
}
|
}
|
||||||
|
|
||||||
EventList<TileEvent>& getTileEvents() { return _tileEvents; }
|
EventList<TileEvent>& getTileEvents() { return _tileEvents; }
|
||||||
|
|
||||||
void addevent_blockUse(int entityId, int x, int y, int z, int face) {
|
void addevent_blockUse(int entityId, int x, int y, int z, int face) {
|
||||||
TileEvent t = {
|
TileEvent t = {
|
||||||
entityId,
|
entityId,
|
||||||
x,y,z,
|
x,y,z,
|
||||||
face
|
face
|
||||||
};
|
};
|
||||||
_tileEvents.add(t, _tickId);
|
_tileEvents.add(t, _tickId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EventList<TileEvent> _tileEvents;
|
EventList<TileEvent> _tileEvents;
|
||||||
int _tickId;
|
int _tickId;
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatorMode::CreatorMode(Minecraft* minecraft)
|
CreatorMode::CreatorMode(Minecraft* minecraft)
|
||||||
: super(minecraft)
|
: super(minecraft)
|
||||||
{
|
{
|
||||||
_creator = new Creator();
|
_creator = new Creator();
|
||||||
}
|
}
|
||||||
|
|
||||||
CreatorMode::~CreatorMode() {
|
CreatorMode::~CreatorMode() {
|
||||||
delete _creator;
|
delete _creator;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreatorMode::startDestroyBlock(int x, int y, int z, int face) {
|
void CreatorMode::startDestroyBlock(int x, int y, int z, int face) {
|
||||||
if(minecraft->player->getCarriedItem() != NULL && minecraft->player->getCarriedItem()->id == Item::bow->id)
|
if(minecraft->player->getCarriedItem() != NULL && minecraft->player->getCarriedItem()->id == Item::bow->id)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CreatorDestroyBlock(x, y, z, face);
|
CreatorDestroyBlock(x, y, z, face);
|
||||||
destroyDelay = DestructionTickDelay;
|
destroyDelay = DestructionTickDelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreatorMode::CreatorDestroyBlock(int x, int y, int z, int face) {
|
void CreatorMode::CreatorDestroyBlock(int x, int y, int z, int face) {
|
||||||
minecraft->level->extinguishFire(x, y, z, face);
|
minecraft->level->extinguishFire(x, y, z, face);
|
||||||
destroyBlock(x, y, z, face);
|
destroyBlock(x, y, z, face);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreatorMode::continueDestroyBlock(int x, int y, int z, int face) {
|
void CreatorMode::continueDestroyBlock(int x, int y, int z, int face) {
|
||||||
destroyDelay--;
|
destroyDelay--;
|
||||||
if (destroyDelay <= 0) {
|
if (destroyDelay <= 0) {
|
||||||
destroyDelay = DestructionTickDelay;
|
destroyDelay = DestructionTickDelay;
|
||||||
CreatorDestroyBlock(x, y, z, face);
|
CreatorDestroyBlock(x, y, z, face);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CreatorMode::useItemOn( Player* player, Level* level, ItemInstance* item, int x, int y, int z, int face, const Vec3& hit ) {
|
bool CreatorMode::useItemOn( Player* player, Level* level, ItemInstance* item, int x, int y, int z, int face, const Vec3& hit ) {
|
||||||
if (item && item->id == ((Item*)Item::sword_iron)->id)
|
if (item && item->id == ((Item*)Item::sword_iron)->id)
|
||||||
_creator->addevent_blockUse(player->entityId, x, y, z, face);
|
_creator->addevent_blockUse(player->entityId, x, y, z, face);
|
||||||
return super::useItemOn(player, level, item, x, y, z, face, hit);
|
return super::useItemOn(player, level, item, x, y, z, face, hit);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreatorMode::stopDestroyBlock() {
|
void CreatorMode::stopDestroyBlock() {
|
||||||
destroyDelay = 0;
|
destroyDelay = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreatorMode::initAbilities( Abilities& abilities ) {
|
void CreatorMode::initAbilities( Abilities& abilities ) {
|
||||||
abilities.mayfly = true;
|
abilities.mayfly = true;
|
||||||
abilities.instabuild = true;
|
abilities.instabuild = true;
|
||||||
abilities.invulnerable = true;
|
abilities.invulnerable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CreatorMode::isCreativeType() {
|
bool CreatorMode::isCreativeType() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreatorMode::releaseUsingItem( Player* player ) {
|
ICreator* CreatorMode::getCreator() {
|
||||||
if(player->getCarriedItem() != NULL) {
|
return _creator;
|
||||||
int oldItemId = player->getCarriedItem()->id;
|
}
|
||||||
int oldAux = player->getAuxData();
|
|
||||||
super::releaseUsingItem(player);
|
void CreatorMode::tick() {
|
||||||
if(player->getCarriedItem() != NULL && player->getCarriedItem()->id == oldItemId) {
|
_creator->setTick(minecraft->level->getTime());
|
||||||
player->getCarriedItem()->setAuxValue(oldAux);
|
super::tick();
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
super::releaseUsingItem(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ICreator* CreatorMode::getCreator() {
|
|
||||||
return _creator;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CreatorMode::tick() {
|
|
||||||
_creator->setTick(minecraft->level->getTime());
|
|
||||||
super::tick();
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,61 +1,61 @@
|
|||||||
#ifndef NET_MINECRAFT_CLIENT_GAMEMODE__CreatorMode_H__
|
#ifndef NET_MINECRAFT_CLIENT_GAMEMODE__CreatorMode_H__
|
||||||
#define NET_MINECRAFT_CLIENT_GAMEMODE__CreatorMode_H__
|
#define NET_MINECRAFT_CLIENT_GAMEMODE__CreatorMode_H__
|
||||||
|
|
||||||
//package net.minecraft.client.gamemode;
|
//package net.minecraft.client.gamemode;
|
||||||
|
|
||||||
#include "GameMode.h"
|
#include "GameMode.h"
|
||||||
#include "../../world/PosTranslator.h"
|
#include "../../world/PosTranslator.h"
|
||||||
|
|
||||||
class ICreator {
|
class ICreator {
|
||||||
public:
|
public:
|
||||||
virtual ~ICreator() {}
|
virtual ~ICreator() {}
|
||||||
|
|
||||||
struct TileEvent {
|
struct TileEvent {
|
||||||
int entityId;
|
int entityId;
|
||||||
int x, y, z;
|
int x, y, z;
|
||||||
int face;
|
int face;
|
||||||
|
|
||||||
void write(std::stringstream& ss, IPosTranslator& t) const {
|
void write(std::stringstream& ss, IPosTranslator& t) const {
|
||||||
int xx = x, yy = y, zz = z;
|
int xx = x, yy = y, zz = z;
|
||||||
t.to(xx, yy, zz);
|
t.to(xx, yy, zz);
|
||||||
ss << xx << "," << yy << "," << zz << "," << face << "," << entityId;
|
ss << xx << "," << yy << "," << zz << "," << face << "," << entityId;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class EventList {
|
class EventList {
|
||||||
public:
|
public:
|
||||||
EventList(int size) {
|
EventList(int size) {
|
||||||
_events.reserve(size);
|
_events.reserve(size);
|
||||||
_maxSize = (int)size;
|
_maxSize = (int)size;
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
void clear() {
|
void clear() {
|
||||||
_index = -1;
|
_index = -1;
|
||||||
_size = 0;
|
_size = 0;
|
||||||
}
|
}
|
||||||
void add(const T& item, int tick) {
|
void add(const T& item, int tick) {
|
||||||
if (_size < _maxSize) {
|
if (_size < _maxSize) {
|
||||||
_events.push_back(Item());
|
_events.push_back(Item());
|
||||||
++_size;
|
++_size;
|
||||||
}
|
}
|
||||||
Item& e = _events[_nextIndex()];
|
Item& e = _events[_nextIndex()];
|
||||||
e.item = item;
|
e.item = item;
|
||||||
e.timestamp = tick;
|
e.timestamp = tick;
|
||||||
}
|
}
|
||||||
int size() const {
|
int size() const {
|
||||||
return _size;
|
return _size;
|
||||||
}
|
}
|
||||||
|
|
||||||
const T& operator[](int i) const {
|
const T& operator[](int i) const {
|
||||||
return _events[_getIndex(i)].item;
|
return _events[_getIndex(i)].item;
|
||||||
}
|
}
|
||||||
|
|
||||||
T& operator[](int i) {
|
T& operator[](int i) {
|
||||||
return _events[_getIndex(i)].item;
|
return _events[_getIndex(i)].item;
|
||||||
}
|
}
|
||||||
|
|
||||||
void write(std::stringstream& ss, IPosTranslator& t, int minTimetamp) const {
|
void write(std::stringstream& ss, IPosTranslator& t, int minTimetamp) const {
|
||||||
int i = _getFirstNewerIndex(minTimetamp);
|
int i = _getFirstNewerIndex(minTimetamp);
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
return;
|
return;
|
||||||
@@ -66,63 +66,62 @@ public:
|
|||||||
ss << "|";
|
ss << "|";
|
||||||
if (++i == _size) i = 0;
|
if (++i == _size) i = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _getIndex(int i) const { return (1 + _index + i) % _size; }
|
int _getIndex(int i) const { return (1 + _index + i) % _size; }
|
||||||
int _nextIndex() {
|
int _nextIndex() {
|
||||||
if (++_index == _size) _index = 0;
|
if (++_index == _size) _index = 0;
|
||||||
return _index;
|
return _index;
|
||||||
}
|
}
|
||||||
|
|
||||||
int _getFirstNewerIndex(int timestamp) const {
|
int _getFirstNewerIndex(int timestamp) const {
|
||||||
for (int i = _index + 1, j = 0; j < _size; ++i, ++j) {
|
for (int i = _index + 1, j = 0; j < _size; ++i, ++j) {
|
||||||
if (i == _size) i = 0;
|
if (i == _size) i = 0;
|
||||||
if (_events[i].timestamp >= timestamp) return i;
|
if (_events[i].timestamp >= timestamp) return i;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
struct Item {
|
struct Item {
|
||||||
int timestamp;
|
int timestamp;
|
||||||
T item;
|
T item;
|
||||||
};
|
};
|
||||||
|
|
||||||
int _index;
|
int _index;
|
||||||
int _size;
|
int _size;
|
||||||
int _maxSize;
|
int _maxSize;
|
||||||
std::vector<Item> _events;
|
std::vector<Item> _events;
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual EventList<TileEvent>& getTileEvents() = 0;
|
virtual EventList<TileEvent>& getTileEvents() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Creator;
|
class Creator;
|
||||||
|
|
||||||
class CreatorMode: public GameMode
|
class CreatorMode: public GameMode
|
||||||
{
|
{
|
||||||
typedef GameMode super;
|
typedef GameMode super;
|
||||||
public:
|
public:
|
||||||
CreatorMode(Minecraft* minecraft);
|
CreatorMode(Minecraft* minecraft);
|
||||||
~CreatorMode();
|
~CreatorMode();
|
||||||
|
|
||||||
void startDestroyBlock(int x, int y, int z, int face);
|
void startDestroyBlock(int x, int y, int z, int face);
|
||||||
void continueDestroyBlock(int x, int y, int z, int face);
|
void continueDestroyBlock(int x, int y, int z, int face);
|
||||||
void stopDestroyBlock();
|
void stopDestroyBlock();
|
||||||
|
|
||||||
bool useItemOn(Player* player, Level* level, ItemInstance* item, int x, int y, int z, int face, const Vec3& hit);
|
bool useItemOn(Player* player, Level* level, ItemInstance* item, int x, int y, int z, int face, const Vec3& hit);
|
||||||
|
|
||||||
void tick();
|
void tick();
|
||||||
ICreator* getCreator();
|
ICreator* getCreator();
|
||||||
|
|
||||||
bool isCreativeType();
|
bool isCreativeType();
|
||||||
|
|
||||||
void initAbilities(Abilities& abilities);
|
void initAbilities(Abilities& abilities);
|
||||||
|
|
||||||
void releaseUsingItem(Player* player);
|
private:
|
||||||
private:
|
void CreatorDestroyBlock(int x, int y, int z, int face);
|
||||||
void CreatorDestroyBlock(int x, int y, int z, int face);
|
|
||||||
|
Creator* _creator;
|
||||||
Creator* _creator;
|
};
|
||||||
};
|
|
||||||
|
#endif /*NET_MINECRAFT_CLIENT_GAMEMODE__CreatorMode_H__*/
|
||||||
#endif /*NET_MINECRAFT_CLIENT_GAMEMODE__CreatorMode_H__*/
|
|
||||||
|
|||||||
@@ -1,174 +1,174 @@
|
|||||||
#include "GameMode.h"
|
#include "GameMode.h"
|
||||||
#include "../Minecraft.h"
|
#include "../Minecraft.h"
|
||||||
#include "../../network/packet/UseItemPacket.h"
|
#include "../../network/packet/UseItemPacket.h"
|
||||||
#include "../../network/packet/PlayerActionPacket.h"
|
#include "../../network/packet/PlayerActionPacket.h"
|
||||||
#include "../../world/level/Level.h"
|
#include "../../world/level/Level.h"
|
||||||
#include "../../world/item/ItemInstance.h"
|
#include "../../world/item/ItemInstance.h"
|
||||||
#include "../player/LocalPlayer.h"
|
#include "../player/LocalPlayer.h"
|
||||||
#include "client/Options.h"
|
#include "client/Options.h"
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
#include "../sound/SoundEngine.h"
|
#include "../sound/SoundEngine.h"
|
||||||
#include "../particle/ParticleEngine.h"
|
#include "../particle/ParticleEngine.h"
|
||||||
#endif
|
#endif
|
||||||
#include "../../network/RakNetInstance.h"
|
#include "../../network/RakNetInstance.h"
|
||||||
#include "../../network/packet/RemoveBlockPacket.h"
|
#include "../../network/packet/RemoveBlockPacket.h"
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
#include "../renderer/LevelRenderer.h"
|
#include "../renderer/LevelRenderer.h"
|
||||||
#endif
|
#endif
|
||||||
#include "../../world/level/material/Material.h"
|
#include "../../world/level/material/Material.h"
|
||||||
|
|
||||||
GameMode::GameMode( Minecraft* minecraft)
|
GameMode::GameMode( Minecraft* minecraft)
|
||||||
: minecraft(minecraft),
|
: minecraft(minecraft),
|
||||||
destroyProgress(0),
|
destroyProgress(0),
|
||||||
oDestroyProgress(0),
|
oDestroyProgress(0),
|
||||||
destroyTicks(0),
|
destroyTicks(0),
|
||||||
destroyDelay(0)
|
destroyDelay(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/*virtual*/
|
/*virtual*/
|
||||||
Player* GameMode::createPlayer(Level* level) {
|
Player* GameMode::createPlayer(Level* level) {
|
||||||
return new LocalPlayer(minecraft, level, minecraft->options.getStringValue(OPTIONS_USERNAME), level->dimension->id, isCreativeType());
|
return new LocalPlayer(minecraft, level, minecraft->options.getStringValue(OPTIONS_USERNAME), level->dimension->id, isCreativeType());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*virtual*/
|
/*virtual*/
|
||||||
void GameMode::interact(Player* player, Entity* entity) {
|
void GameMode::interact(Player* player, Entity* entity) {
|
||||||
player->interact(entity);
|
player->interact(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*virtual*/
|
/*virtual*/
|
||||||
void GameMode::attack(Player* player, Entity* entity) {
|
void GameMode::attack(Player* player, Entity* entity) {
|
||||||
if (minecraft->level->adventureSettings.noPvP && entity->isPlayer())
|
if (minecraft->level->adventureSettings.noPvP && entity->isPlayer())
|
||||||
return;
|
return;
|
||||||
if (minecraft->level->adventureSettings.noPvM && entity->isMob())
|
if (minecraft->level->adventureSettings.noPvM && entity->isMob())
|
||||||
return;
|
return;
|
||||||
player->attack(entity);
|
player->attack(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* virtual */
|
/* virtual */
|
||||||
void GameMode::startDestroyBlock( int x, int y, int z, int face ) {
|
void GameMode::startDestroyBlock( int x, int y, int z, int face ) {
|
||||||
if(minecraft->player->getCarriedItem() != NULL && minecraft->player->getCarriedItem()->id == Item::bow->id)
|
if(minecraft->player->getCarriedItem() != NULL && minecraft->player->getCarriedItem()->id == Item::bow->id)
|
||||||
return;
|
return;
|
||||||
destroyBlock(x, y, z, face);
|
destroyBlock(x, y, z, face);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*virtual*/
|
/*virtual*/
|
||||||
bool GameMode::destroyBlock(int x, int y, int z, int face) {
|
bool GameMode::destroyBlock(int x, int y, int z, int face) {
|
||||||
Level* level = minecraft->level;
|
Level* level = minecraft->level;
|
||||||
Tile* oldTile = Tile::tiles[level->getTile(x, y, z)];
|
Tile* oldTile = Tile::tiles[level->getTile(x, y, z)];
|
||||||
if (!oldTile)
|
if (!oldTile)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (level->adventureSettings.immutableWorld) {
|
if (level->adventureSettings.immutableWorld) {
|
||||||
if (oldTile != (Tile*)Tile::leaves
|
if (oldTile != (Tile*)Tile::leaves
|
||||||
&& oldTile->material != Material::plant) {
|
&& oldTile->material != Material::plant) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
minecraft->particleEngine->destroy(x, y, z);
|
minecraft->particleEngine->destroy(x, y, z);
|
||||||
#endif
|
#endif
|
||||||
int data = level->getData(x, y, z);
|
int data = level->getData(x, y, z);
|
||||||
bool changed = level->setTile(x, y, z, 0);
|
bool changed = level->setTile(x, y, z, 0);
|
||||||
if (changed) {
|
if (changed) {
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
minecraft->soundEngine->play(oldTile->soundType->getBreakSound(), x + 0.5f, y + 0.5f, z + 0.5f, (oldTile->soundType->getVolume() + 1) / 2, oldTile->soundType->getPitch() * 0.8f);
|
minecraft->soundEngine->play(oldTile->soundType->getBreakSound(), x + 0.5f, y + 0.5f, z + 0.5f, (oldTile->soundType->getVolume() + 1) / 2, oldTile->soundType->getPitch() * 0.8f);
|
||||||
#endif
|
#endif
|
||||||
oldTile->destroy(level, x, y, z, data);
|
oldTile->destroy(level, x, y, z, data);
|
||||||
if (minecraft->options.getBooleanValue(OPTIONS_DESTROY_VIBRATION)) minecraft->platform()->vibrate(24);
|
if (minecraft->options.getBooleanValue(OPTIONS_DESTROY_VIBRATION)) minecraft->platform()->vibrate(24);
|
||||||
|
|
||||||
if (minecraft->isOnline()) {
|
if (minecraft->isOnline()) {
|
||||||
RemoveBlockPacket packet(minecraft->player, x, y, z);
|
RemoveBlockPacket packet(minecraft->player, x, y, z);
|
||||||
minecraft->raknetInstance->send(packet);
|
minecraft->raknetInstance->send(packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
/*virtual*/
|
/*virtual*/
|
||||||
bool GameMode::useItemOn(Player* player, Level* level, ItemInstance* item, int x, int y, int z, int face, const Vec3& hit) {
|
bool GameMode::useItemOn(Player* player, Level* level, ItemInstance* item, int x, int y, int z, int face, const Vec3& hit) {
|
||||||
float clickX = hit.x - x;
|
float clickX = hit.x - x;
|
||||||
float clickY = hit.y - y;
|
float clickY = hit.y - y;
|
||||||
float clickZ = hit.z - z;
|
float clickZ = hit.z - z;
|
||||||
item = player->inventory->getSelected();
|
if (level->isClientSide) {
|
||||||
if(level->isClientSide) {
|
item = player->inventory->getSelected();
|
||||||
UseItemPacket packet(x, y, z, face, item, player->entityId, clickX, clickY, clickZ);
|
UseItemPacket packet(x, y, z, face, item, player->entityId, clickX, clickY, clickZ);
|
||||||
minecraft->raknetInstance->send(packet);
|
minecraft->raknetInstance->send(packet);
|
||||||
}
|
}
|
||||||
int t = level->getTile(x, y, z);
|
int t = level->getTile(x, y, z);
|
||||||
if (t == Tile::invisible_bedrock->id) return false;
|
if (t == Tile::invisible_bedrock->id) return false;
|
||||||
if (t > 0 && Tile::tiles[t]->use(level, x, y, z, player))
|
if (t > 0 && Tile::tiles[t]->use(level, x, y, z, player))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (item == NULL) return false;
|
if (item == NULL) return false;
|
||||||
if(isCreativeType()) {
|
if(isCreativeType()) {
|
||||||
int aux = item->getAuxValue();
|
int aux = item->getAuxValue();
|
||||||
int count = item->count;
|
int count = item->count;
|
||||||
bool success = item->useOn(player, level, x, y, z, face, clickX, clickY, clickZ);
|
bool success = item->useOn(player, level, x, y, z, face, clickX, clickY, clickZ);
|
||||||
item->setAuxValue(aux);
|
item->setAuxValue(aux);
|
||||||
item->count = count;
|
item->count = count;
|
||||||
return success;
|
return success;
|
||||||
} else {
|
} else {
|
||||||
return item->useOn(player, level, x, y, z, face, clickX, clickY, clickZ);
|
return item->useOn(player, level, x, y, z, face, clickX, clickY, clickZ);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GameMode::useItem( Player* player, Level* level, ItemInstance* item ) {
|
bool GameMode::useItem( Player* player, Level* level, ItemInstance* item ) {
|
||||||
int oldCount = item->count;
|
int oldCount = item->count;
|
||||||
|
|
||||||
ItemInstance* itemInstance = item->use(level, player);
|
ItemInstance* itemInstance = item->use(level, player);
|
||||||
if(level->isClientSide) {
|
if(level->isClientSide) {
|
||||||
UseItemPacket packet(item, player->entityId, player->aimDirection);
|
UseItemPacket packet(item, player->entityId, player->aimDirection);
|
||||||
minecraft->raknetInstance->send(packet);
|
minecraft->raknetInstance->send(packet);
|
||||||
}
|
}
|
||||||
if (itemInstance != item || (itemInstance != NULL && itemInstance->count != oldCount)) {
|
if (itemInstance != item || (itemInstance != NULL && itemInstance->count != oldCount)) {
|
||||||
//player.inventory.items[player.inventory.selected] = itemInstance;
|
//player.inventory.items[player.inventory.selected] = itemInstance;
|
||||||
//if (itemInstance.count == 0) {
|
//if (itemInstance.count == 0) {
|
||||||
// player.inventory.items[player.inventory.selected] = NULL;
|
// player.inventory.items[player.inventory.selected] = NULL;
|
||||||
//}
|
//}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInstance* GameMode::handleInventoryMouseClick( int containerId, int slotNum, int buttonNum, Player* player ) {
|
ItemInstance* GameMode::handleInventoryMouseClick( int containerId, int slotNum, int buttonNum, Player* player ) {
|
||||||
//return player.containerMenu.clicked(slotNum, buttonNum, player);
|
//return player.containerMenu.clicked(slotNum, buttonNum, player);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameMode::handleCloseInventory( int containerId, Player* player ) {
|
void GameMode::handleCloseInventory( int containerId, Player* player ) {
|
||||||
//player.containerMenu.removed(player);
|
//player.containerMenu.removed(player);
|
||||||
//player.containerMenu = player.inventoryMenu;
|
//player.containerMenu = player.inventoryMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
float GameMode::getPickRange() {
|
float GameMode::getPickRange() {
|
||||||
return 5.0f;
|
return 5.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameMode::initPlayer( Player* player ) {
|
void GameMode::initPlayer( Player* player ) {
|
||||||
initAbilities(player->abilities);
|
initAbilities(player->abilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameMode::releaseUsingItem(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);
|
PlayerActionPacket packet(PlayerActionPacket::RELEASE_USE_ITEM, 0, 0, 0, 0, player->entityId);
|
||||||
minecraft->raknetInstance->send(packet);
|
minecraft->raknetInstance->send(packet);
|
||||||
}
|
}
|
||||||
player->releaseUsingItem();
|
player->releaseUsingItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameMode::tick() {
|
void GameMode::tick() {
|
||||||
oDestroyProgress = destroyProgress;
|
oDestroyProgress = destroyProgress;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameMode::render( float a ) {
|
void GameMode::render( float a ) {
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
if (destroyProgress <= 0) {
|
if (destroyProgress <= 0) {
|
||||||
minecraft->gui.progress = 0;
|
minecraft->gui.progress = 0;
|
||||||
minecraft->levelRenderer->destroyProgress = 0;
|
minecraft->levelRenderer->destroyProgress = 0;
|
||||||
} else {
|
} else {
|
||||||
float dp = oDestroyProgress + (destroyProgress - oDestroyProgress) * a;
|
float dp = oDestroyProgress + (destroyProgress - oDestroyProgress) * a;
|
||||||
minecraft->gui.progress = dp;
|
minecraft->gui.progress = dp;
|
||||||
minecraft->levelRenderer->destroyProgress = dp;
|
minecraft->levelRenderer->destroyProgress = dp;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include "screens/ConsoleScreen.h"
|
#include "screens/ConsoleScreen.h"
|
||||||
#include "../Minecraft.h"
|
#include "../Minecraft.h"
|
||||||
#include "../player/LocalPlayer.h"
|
#include "../player/LocalPlayer.h"
|
||||||
|
#include "../renderer/Chunk.h"
|
||||||
#include "../renderer/Tesselator.h"
|
#include "../renderer/Tesselator.h"
|
||||||
#include "../renderer/TileRenderer.h"
|
#include "../renderer/TileRenderer.h"
|
||||||
#include "../renderer/LevelRenderer.h"
|
#include "../renderer/LevelRenderer.h"
|
||||||
@@ -36,7 +37,7 @@ const float Gui::DropTicks = 40.0f;
|
|||||||
//#include <android/log.h>
|
//#include <android/log.h>
|
||||||
|
|
||||||
Gui::Gui(Minecraft* minecraft)
|
Gui::Gui(Minecraft* minecraft)
|
||||||
: minecraft(minecraft),
|
: minecraft(minecraft),
|
||||||
tickCount(0),
|
tickCount(0),
|
||||||
progress(0),
|
progress(0),
|
||||||
overlayMessageTime(0),
|
overlayMessageTime(0),
|
||||||
@@ -51,7 +52,8 @@ Gui::Gui(Minecraft* minecraft)
|
|||||||
_currentDropTicks(-1),
|
_currentDropTicks(-1),
|
||||||
_currentDropSlot(-1),
|
_currentDropSlot(-1),
|
||||||
MAX_MESSAGE_WIDTH(240),
|
MAX_MESSAGE_WIDTH(240),
|
||||||
itemNameOverlayTime(2)
|
itemNameOverlayTime(2),
|
||||||
|
_openInventorySlot(minecraft->useTouchscreen())
|
||||||
{
|
{
|
||||||
glGenBuffers2(1, &_inventoryRc.vboId);
|
glGenBuffers2(1, &_inventoryRc.vboId);
|
||||||
glGenBuffers2(1, &rcFeedbackInner.vboId);
|
glGenBuffers2(1, &rcFeedbackInner.vboId);
|
||||||
@@ -75,11 +77,8 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
|||||||
//minecraft->gameRenderer->setupGuiScreen();
|
//minecraft->gameRenderer->setupGuiScreen();
|
||||||
Font* font = minecraft->font;
|
Font* font = minecraft->font;
|
||||||
|
|
||||||
#ifdef PLATFORM_DESKTOP
|
|
||||||
const bool isTouchInterface = false;
|
|
||||||
#else
|
|
||||||
const bool isTouchInterface = minecraft->useTouchscreen();
|
const bool isTouchInterface = minecraft->useTouchscreen();
|
||||||
#endif
|
|
||||||
const int screenWidth = (int)(minecraft->width * InvGuiScale);
|
const int screenWidth = (int)(minecraft->width * InvGuiScale);
|
||||||
const int screenHeight = (int)(minecraft->height * InvGuiScale);
|
const int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||||
blitOffset = -90;
|
blitOffset = -90;
|
||||||
@@ -88,9 +87,9 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
|||||||
glColor4f2(1, 1, 1, 1);
|
glColor4f2(1, 1, 1, 1);
|
||||||
|
|
||||||
// H: 4
|
// H: 4
|
||||||
// T: 7
|
// T: 7
|
||||||
// L: 6
|
// L: 6
|
||||||
// F: 3
|
// F: 3
|
||||||
int ySlot = screenHeight - 16 - 3;
|
int ySlot = screenHeight - 16 - 3;
|
||||||
|
|
||||||
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
|
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
|
||||||
@@ -105,6 +104,12 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// viginette has been fixed, was due to gl_blend not being enabled, my bad
|
||||||
|
if (minecraft->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS) && minecraft->options.getBooleanValue(OPTIONS_VIGNETTE)){
|
||||||
|
renderVignette(this->minecraft->player->getBrightness(a), screenWidth, screenHeight);
|
||||||
|
}
|
||||||
|
// shredder end
|
||||||
|
|
||||||
if(minecraft->player->getSleepTimer() > 0) {
|
if(minecraft->player->getSleepTimer() > 0) {
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
glDisable(GL_ALPHA_TEST);
|
glDisable(GL_ALPHA_TEST);
|
||||||
@@ -115,38 +120,41 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
|||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
}
|
}
|
||||||
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
|
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
|
||||||
renderToolBar(a, ySlot, screenWidth);
|
renderToolBar(a, ySlot, screenWidth);
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
// font->drawShadow("Minecraft - Pocket Edition ", 2, 2, 0xffffffff);
|
||||||
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
|
// font->drawShadow("This is a demo, not the finished product", 2, 10 + 2, 0xffffffff);
|
||||||
unsigned int max = 10;
|
|
||||||
if (isChatting) {
|
glEnable(GL_BLEND);
|
||||||
int lineHeight = 9;
|
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
|
||||||
max = (screenHeight - 48) / lineHeight;
|
unsigned int max = 10;
|
||||||
if (max < 1) max = 1;
|
if (isChatting) {
|
||||||
int maxScroll = (int)guiMessages.size() - (int)max;
|
int lineHeight = 9;
|
||||||
if (maxScroll < 0) maxScroll = 0;
|
max = (screenHeight - 48) / lineHeight;
|
||||||
if (chatScrollOffset > maxScroll) chatScrollOffset = maxScroll;
|
if (max < 1) max = 1;
|
||||||
} else {
|
int maxScroll = (int)guiMessages.size() - (int)max;
|
||||||
chatScrollOffset = 0;
|
if (maxScroll < 0) maxScroll = 0;
|
||||||
}
|
if (chatScrollOffset > maxScroll) chatScrollOffset = maxScroll;
|
||||||
renderChatMessages(screenHeight, max, isChatting, font);
|
} else {
|
||||||
|
chatScrollOffset = 0;
|
||||||
|
}
|
||||||
|
renderChatMessages(screenHeight, max, isChatting, font);
|
||||||
#if !defined(RPI)
|
#if !defined(RPI)
|
||||||
renderOnSelectItemNameText(screenWidth, font, ySlot);
|
renderOnSelectItemNameText(screenWidth, font, ySlot);
|
||||||
#endif
|
#endif
|
||||||
#if defined(RPI)
|
#if defined(RPI)
|
||||||
renderDebugInfo();
|
renderDebugInfo();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (Keyboard::isKeyDown(Keyboard::KEY_TAB)) {
|
if (Keyboard::isKeyDown(Keyboard::KEY_TAB)) {
|
||||||
renderPlayerList(font, screenWidth, screenHeight);
|
renderPlayerList(font, screenWidth, screenHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (minecraft->options.getBooleanValue(OPTIONS_RENDER_DEBUG))
|
||||||
|
renderDebugInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (minecraft->options.getBooleanValue(OPTIONS_RENDER_DEBUG))
|
glDisable(GL_BLEND);
|
||||||
renderDebugInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
glDisable(GL_BLEND);
|
|
||||||
glEnable2(GL_ALPHA_TEST);
|
glEnable2(GL_ALPHA_TEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,7 +193,7 @@ void Gui::getSlotPos(int slot, int& posX, int& posY) {
|
|||||||
int screenWidth = (int)(minecraft->width * InvGuiScale);
|
int screenWidth = (int)(minecraft->width * InvGuiScale);
|
||||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||||
posX = screenWidth / 2 - getNumSlots() * 10 + slot * 20,
|
posX = screenWidth / 2 - getNumSlots() * 10 + slot * 20,
|
||||||
posY = screenHeight - 22;
|
posY = screenHeight - 22;
|
||||||
}
|
}
|
||||||
|
|
||||||
RectangleArea Gui::getRectangleArea(int extendSide) {
|
RectangleArea Gui::getRectangleArea(int extendSide) {
|
||||||
@@ -198,7 +206,7 @@ RectangleArea Gui::getRectangleArea(int extendSide) {
|
|||||||
return RectangleArea(0, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
|
return RectangleArea(0, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
|
||||||
if (extendSide > 0)
|
if (extendSide > 0)
|
||||||
return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, (float)minecraft->width, (float)minecraft->height);
|
return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, (float)minecraft->width, (float)minecraft->height);
|
||||||
|
|
||||||
return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
|
return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,16 +214,10 @@ void Gui::handleClick(int button, int x, int y) {
|
|||||||
if (button != MouseAction::ACTION_LEFT) return;
|
if (button != MouseAction::ACTION_LEFT) return;
|
||||||
|
|
||||||
int slot = getSlotIdAt(x, y);
|
int slot = getSlotIdAt(x, y);
|
||||||
if (slot != -1)
|
if (slot != -1) {
|
||||||
{
|
if (_openInventorySlot && slot == (getNumSlots()-1)) {
|
||||||
#ifndef PLATFORM_DESKTOP
|
|
||||||
if (slot == (getNumSlots()-1))
|
|
||||||
{
|
|
||||||
minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION);
|
minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
minecraft->player->inventory->selectSlot(slot);
|
minecraft->player->inventory->selectSlot(slot);
|
||||||
itemNameOverlayTime = 0;
|
itemNameOverlayTime = 0;
|
||||||
}
|
}
|
||||||
@@ -250,7 +252,7 @@ void Gui::handleKeyPressed(int key)
|
|||||||
if (key == Keyboard::KEY_F1) {
|
if (key == Keyboard::KEY_F1) {
|
||||||
minecraft->options.toggle(OPTIONS_HIDEGUI);
|
minecraft->options.toggle(OPTIONS_HIDEGUI);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key == 99)
|
if (key == 99)
|
||||||
{
|
{
|
||||||
if (minecraft->player->inventory->selected > 0)
|
if (minecraft->player->inventory->selected > 0)
|
||||||
@@ -298,11 +300,11 @@ void Gui::tick() {
|
|||||||
if(itemNameOverlayTime < 2)
|
if(itemNameOverlayTime < 2)
|
||||||
itemNameOverlayTime += 1.0f / SharedConstants::TicksPerSecond;
|
itemNameOverlayTime += 1.0f / SharedConstants::TicksPerSecond;
|
||||||
for (unsigned int i = 0; i < guiMessages.size(); i++) {
|
for (unsigned int i = 0; i < guiMessages.size(); i++) {
|
||||||
guiMessages.at(i).ticks++;
|
guiMessages.at(i).ticks++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!minecraft->isCreativeMode())
|
if (!minecraft->isCreativeMode())
|
||||||
tickItemDrop();
|
tickItemDrop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gui::addMessage(const std::string& _string) {
|
void Gui::addMessage(const std::string& _string) {
|
||||||
@@ -349,9 +351,11 @@ void Gui::setNowPlaying(const std::string& string) {
|
|||||||
void Gui::displayClientMessage(const std::string& messageId) {
|
void Gui::displayClientMessage(const std::string& messageId) {
|
||||||
//Language language = Language.getInstance();
|
//Language language = Language.getInstance();
|
||||||
//std::string languageString = language.getElement(messageId);
|
//std::string languageString = language.getElement(messageId);
|
||||||
addMessage(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) {
|
void Gui::renderVignette(float br, int w, int h) {
|
||||||
br = 1 - br;
|
br = 1 - br;
|
||||||
if (br < 0) br = 0;
|
if (br < 0) br = 0;
|
||||||
@@ -360,9 +364,13 @@ void Gui::renderVignette(float br, int w, int h) {
|
|||||||
|
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
glDepthMask(false);
|
glDepthMask(false);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc2(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
|
glBlendFunc2(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
|
||||||
glColor4f2(tbr, tbr, tbr, 1);
|
glColor4f2(tbr, tbr, tbr, 1);
|
||||||
|
|
||||||
minecraft->textures->loadAndBindTexture("misc/vignette.png");
|
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;
|
Tesselator& t = Tesselator::instance;
|
||||||
t.begin();
|
t.begin();
|
||||||
@@ -373,6 +381,7 @@ void Gui::renderVignette(float br, int w, int h) {
|
|||||||
t.draw();
|
t.draw();
|
||||||
glDepthMask(true);
|
glDepthMask(true);
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glDisable(GL_BLEND);
|
||||||
glColor4f2(1, 1, 1, 1);
|
glColor4f2(1, 1, 1, 1);
|
||||||
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
}
|
}
|
||||||
@@ -415,7 +424,7 @@ void Gui::inventoryUpdated() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Gui::onGraphicsReset() {
|
void Gui::onGraphicsReset() {
|
||||||
inventoryUpdated();
|
inventoryUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gui::texturesLoaded( Textures* textures ) {
|
void Gui::texturesLoaded( Textures* textures ) {
|
||||||
@@ -537,11 +546,7 @@ void Gui::tickItemDrop()
|
|||||||
static bool isCurrentlyActive = false;
|
static bool isCurrentlyActive = false;
|
||||||
isCurrentlyActive = false;
|
isCurrentlyActive = false;
|
||||||
|
|
||||||
int slots = getNumSlots();
|
int slots = getNumSlots() - _openInventorySlot;
|
||||||
|
|
||||||
#ifndef PLATFORM_DESKTOP
|
|
||||||
slots--;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (Mouse::isButtonDown(MouseAction::ACTION_LEFT)) {
|
if (Mouse::isButtonDown(MouseAction::ACTION_LEFT)) {
|
||||||
int slot = getSlotIdAt(Mouse::getX(), Mouse::getY());
|
int slot = getSlotIdAt(Mouse::getX(), Mouse::getY());
|
||||||
@@ -597,12 +602,13 @@ void Gui::renderProgressIndicator( const bool isTouchInterface, const int screen
|
|||||||
bool bowEquipped = currentItem != NULL ? currentItem->getItem() == Item::bow : false;
|
bool bowEquipped = currentItem != NULL ? currentItem->getItem() == Item::bow : false;
|
||||||
bool itemInUse = currentItem != NULL ? currentItem->getItem() == minecraft->player->getUseItem()->getItem() : false;
|
bool itemInUse = currentItem != NULL ? currentItem->getItem() == minecraft->player->getUseItem()->getItem() : false;
|
||||||
if ((!isTouchInterface || minecraft->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA)
|
if ((!isTouchInterface || minecraft->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA)
|
||||||
|| (bowEquipped && itemInUse)) && !minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
|
|| (bowEquipped && itemInUse)) && !minecraft->options.getBooleanValue(OPTIONS_HIDEGUI))
|
||||||
minecraft->textures->loadAndBindTexture("gui/icons.png");
|
{
|
||||||
glEnable(GL_BLEND);
|
minecraft->textures->loadAndBindTexture("gui/icons.png");
|
||||||
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
|
glEnable(GL_BLEND);
|
||||||
blit(screenWidth/2 - 8, screenHeight/2 - 8, 0, 0, 16, 16);
|
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
|
||||||
glDisable(GL_BLEND);
|
blit(screenWidth/2 - 8, screenHeight/2 - 8, 0, 0, 16, 16);
|
||||||
|
glDisable(GL_BLEND);
|
||||||
} else if(!bowEquipped) {
|
} else if(!bowEquipped) {
|
||||||
const float tprogress = minecraft->gameMode->destroyProgress;
|
const float tprogress = minecraft->gameMode->destroyProgress;
|
||||||
const float alpha = Mth::clamp(minecraft->inputHolder->alpha, 0.0f, 1.0f);
|
const float alpha = Mth::clamp(minecraft->inputHolder->alpha, 0.0f, 1.0f);
|
||||||
@@ -621,7 +627,7 @@ void Gui::renderProgressIndicator( const bool isTouchInterface, const int screen
|
|||||||
const float x = InvGuiScale * minecraft->inputHolder->mousex;
|
const float x = InvGuiScale * minecraft->inputHolder->mousex;
|
||||||
const float y = InvGuiScale * minecraft->inputHolder->mousey;
|
const float y = InvGuiScale * minecraft->inputHolder->mousey;
|
||||||
glTranslatef2(x, y, 0);
|
glTranslatef2(x, y, 0);
|
||||||
drawArrayVT(rcFeedbackOuter.vboId, rcFeedbackOuter.vertexCount, 24);
|
drawArrayVT(rcFeedbackOuter.vboId, rcFeedbackOuter.vertexCount, 36);
|
||||||
glTranslatef2(-x, -y, 0);
|
glTranslatef2(-x, -y, 0);
|
||||||
|
|
||||||
glEnable2(GL_TEXTURE_2D);
|
glEnable2(GL_TEXTURE_2D);
|
||||||
@@ -642,12 +648,12 @@ void Gui::renderProgressIndicator( const bool isTouchInterface, const int screen
|
|||||||
const float y = InvGuiScale * minecraft->inputHolder->mousey;
|
const float y = InvGuiScale * minecraft->inputHolder->mousey;
|
||||||
glPushMatrix2();
|
glPushMatrix2();
|
||||||
glTranslatef2(x, y, 0);
|
glTranslatef2(x, y, 0);
|
||||||
drawArrayVT(rcFeedbackOuter.vboId, rcFeedbackOuter.vertexCount, 24);
|
drawArrayVT(rcFeedbackOuter.vboId, rcFeedbackOuter.vertexCount, 36);
|
||||||
glScalef2(0.5f + progress, 0.5f + progress, 1);
|
glScalef2(0.5f + progress, 0.5f + progress, 1);
|
||||||
//glDisable2(GL_CULL_FACE);
|
//glDisable2(GL_CULL_FACE);
|
||||||
glColor4f2(1, 1, 1, 1);
|
glColor4f2(1, 1, 1, 1);
|
||||||
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
|
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
|
||||||
drawArrayVT(rcFeedbackInner.vboId, rcFeedbackInner.vertexCount, 24, GL_TRIANGLE_FAN);
|
drawArrayVT(rcFeedbackInner.vboId, rcFeedbackInner.vertexCount, 36, GL_TRIANGLE_FAN);
|
||||||
glPopMatrix2();
|
glPopMatrix2();
|
||||||
|
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
@@ -677,10 +683,10 @@ void Gui::renderHearts() {
|
|||||||
int ip2 = i + i + 1;
|
int ip2 = i + i + 1;
|
||||||
|
|
||||||
if (armor > 0) {
|
if (armor > 0) {
|
||||||
int xo = xx + 80 + i * 8 + 4;
|
int xo = xx + 80 + i * 8 + 4;
|
||||||
if (ip2 < armor) blit(xo, yo, 16 + 2 * 9, 9 * 1, 9, 9);
|
if (ip2 < armor) blit(xo, yo, 16 + 2 * 9, 9 * 1, 9, 9);
|
||||||
else if (ip2 == armor) blit(xo, yo, 16 + 4 * 9, 9 * 1, 9, 9);
|
else if (ip2 == armor) blit(xo, yo, 16 + 4 * 9, 9 * 1, 9, 9);
|
||||||
else if (ip2 > armor) blit(xo, yo, 16 + 0 * 9, 9 * 1, 9, 9);
|
else if (ip2 > armor) blit(xo, yo, 16 + 0 * 9, 9 * 1, 9, 9);
|
||||||
}
|
}
|
||||||
|
|
||||||
int bg = 0;
|
int bg = 0;
|
||||||
@@ -703,7 +709,7 @@ void Gui::renderBubbles() {
|
|||||||
if (minecraft->player->isUnderLiquid(Material::water)) {
|
if (minecraft->player->isUnderLiquid(Material::water)) {
|
||||||
int screenWidth = (int)(minecraft->width * InvGuiScale);
|
int screenWidth = (int)(minecraft->width * InvGuiScale);
|
||||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||||
|
|
||||||
int xx = (minecraft->options.getBooleanValue(OPTIONS_BAR_ON_TOP)) ? screenWidth / 2 - getNumSlots() * 10 - 1 : 2;
|
int xx = (minecraft->options.getBooleanValue(OPTIONS_BAR_ON_TOP)) ? screenWidth / 2 - getNumSlots() * 10 - 1 : 2;
|
||||||
int yo = (minecraft->options.getBooleanValue(OPTIONS_BAR_ON_TOP)) ? screenHeight - 42 : 12;
|
int yo = (minecraft->options.getBooleanValue(OPTIONS_BAR_ON_TOP)) ? screenHeight - 42 : 12;
|
||||||
int count = (int) std::ceil((minecraft->player->airSupply - 2) * 10.0f / Player::TOTAL_AIR_SUPPLY);
|
int count = (int) std::ceil((minecraft->player->airSupply - 2) * 10.0f / Player::TOTAL_AIR_SUPPLY);
|
||||||
@@ -726,13 +732,20 @@ void Gui::onLevelGenerated() {
|
|||||||
|
|
||||||
void Gui::renderDebugInfo() {
|
void Gui::renderDebugInfo() {
|
||||||
// FPS counter (updates once per second)
|
// FPS counter (updates once per second)
|
||||||
static float fps = 0.0f;
|
static int fps = 0;
|
||||||
static float fpsLastTime = 0.0f;
|
static int fpsLastTime = 0;
|
||||||
static int fpsFrames = 0;
|
static int fpsFrames = 0;
|
||||||
|
static int displayChunkUpdates = 0;
|
||||||
float now = getTimeS();
|
float now = getTimeS();
|
||||||
fpsFrames++;
|
fpsFrames++;
|
||||||
if (now - fpsLastTime >= 1.0f) {
|
if (now - fpsLastTime >= 1) {
|
||||||
fps = fpsFrames / (now - fpsLastTime);
|
fps = fpsFrames / (now - fpsLastTime);
|
||||||
|
|
||||||
|
displayChunkUpdates = Chunk::updates;
|
||||||
|
|
||||||
|
// 3. RESET the actual game counter to 0 for the next second
|
||||||
|
Chunk::updates = 0;
|
||||||
|
|
||||||
fpsFrames = 0;
|
fpsFrames = 0;
|
||||||
fpsLastTime = now;
|
fpsLastTime = now;
|
||||||
}
|
}
|
||||||
@@ -770,6 +783,47 @@ void Gui::renderDebugInfo() {
|
|||||||
long seed = lvl ? lvl->getSeed() : 0;
|
long seed = lvl ? lvl->getSeed() : 0;
|
||||||
|
|
||||||
// Build lines (NULL entry = blank gap)
|
// Build lines (NULL entry = blank gap)
|
||||||
|
Font* font = minecraft->font;
|
||||||
|
|
||||||
|
// @todo - add our own debug screen as an option alongside the restored java one, why does renderdebug have to be so jank - shredder
|
||||||
|
|
||||||
|
// if java beta's restored debug menu is enabled
|
||||||
|
if (minecraft->options.getIntValue(OPTIONS_DEBUG_STYLE) == 0){
|
||||||
|
|
||||||
|
char buf[128];
|
||||||
|
|
||||||
|
sprintf(buf, "Minecraft - Pocket Edition (%d fps, %d chunk updates)", (int)fps, displayChunkUpdates);
|
||||||
|
font->drawShadow(buf, 2, 2, 0xffffff);
|
||||||
|
|
||||||
|
font->drawShadow(minecraft->gatherStats1(), 2, 12, 0xFFFFFF);
|
||||||
|
font->drawShadow(minecraft->gatherStats2(), 2, 22, 0xFFFFFF);
|
||||||
|
font->drawShadow(minecraft->gatherStats3(), 2, 32, 0xFFFFFF);
|
||||||
|
font->drawShadow(minecraft->gatherStats4(), 2, 42, 0xFFFFFF);
|
||||||
|
|
||||||
|
sprintf(buf, "x: %.8f", minecraft->player->x);
|
||||||
|
drawString(font, buf, 2, 64, 0xE0E0E0);
|
||||||
|
|
||||||
|
sprintf(buf, "y: %.8f", minecraft->player->y);
|
||||||
|
drawString(font, buf, 2, 72, 0xE0E0E0);
|
||||||
|
|
||||||
|
sprintf(buf, "z: %.8f", minecraft->player->z);
|
||||||
|
drawString(font, buf, 2, 80, 0xE0E0E0);
|
||||||
|
|
||||||
|
sprintf(buf, "f: %d",Mth::floor(minecraft->player->yRot * 4.0f / 360.0f + 0.5) & 0x3);
|
||||||
|
drawString(font, buf, 2, 88, 0xE0E0E0);
|
||||||
|
|
||||||
|
sprintf(buf, "Seed: %.ld", lvl->getSeed());
|
||||||
|
drawString(font, buf, 2, 104, 0xE0E0E0);
|
||||||
|
|
||||||
|
sprintf(buf, "Dimension: %d (%s)", lvl->dimension->id, lvl->dimension->getDimension().c_str());
|
||||||
|
drawString(font, buf, 2, 114, 0xE0E0E0);
|
||||||
|
|
||||||
|
sprintf(buf, "Biome: %s", biomeName);
|
||||||
|
drawString(font, buf, 2, 124, 0xE0E0E0);
|
||||||
|
}
|
||||||
|
else if (minecraft->options.getIntValue(OPTIONS_DEBUG_STYLE) == 1){
|
||||||
|
|
||||||
|
|
||||||
static char ln[8][96];
|
static char ln[8][96];
|
||||||
sprintf(ln[0], "Minecraft PE 0.6.1 alpha (mcpe64)");
|
sprintf(ln[0], "Minecraft PE 0.6.1 alpha (mcpe64)");
|
||||||
sprintf(ln[1], "%.1f fps", fps);
|
sprintf(ln[1], "%.1f fps", fps);
|
||||||
@@ -784,8 +838,8 @@ void Gui::renderDebugInfo() {
|
|||||||
const float LH = (float)Font::DefaultLineHeight; // 10 font-pixels
|
const float LH = (float)Font::DefaultLineHeight; // 10 font-pixels
|
||||||
const float MGN = 2.0f; // left/top margin in font-pixels
|
const float MGN = 2.0f; // left/top margin in font-pixels
|
||||||
const float PAD = 2.0f; // horizontal padding for background
|
const float PAD = 2.0f; // horizontal padding for background
|
||||||
Font* font = minecraft->font;
|
// Font* font = minecraft->font;
|
||||||
|
|
||||||
// 1) Draw semi-transparent background boxes behind each line
|
// 1) Draw semi-transparent background boxes behind each line
|
||||||
for (int i = 0; i < N; i++) {
|
for (int i = 0; i < N; i++) {
|
||||||
if (ln[i][0] == '\0') continue;
|
if (ln[i][0] == '\0') continue;
|
||||||
@@ -807,6 +861,7 @@ void Gui::renderDebugInfo() {
|
|||||||
font->draw(ln[i], MGN, y, col);
|
font->draw(ln[i], MGN, y, col);
|
||||||
}
|
}
|
||||||
t.endOverrideAndDraw();
|
t.endOverrideAndDraw();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gui::renderPlayerList(Font* font, int screenWidth, int screenHeight) {
|
void Gui::renderPlayerList(Font* font, int screenWidth, int screenHeight) {
|
||||||
@@ -922,64 +977,64 @@ void Gui::renderOnSelectItemNameText( const int screenWidth, Font* font, int ySl
|
|||||||
|
|
||||||
// helper structure used by drawColoredString
|
// helper structure used by drawColoredString
|
||||||
struct ColorSegment {
|
struct ColorSegment {
|
||||||
std::string text;
|
std::string text;
|
||||||
uint32_t color;
|
uint32_t color;
|
||||||
};
|
};
|
||||||
|
|
||||||
// parse [tag] and [/tag] markers; tags may contain a color name (gold, green, etc.)
|
// parse [tag] and [/tag] markers; tags may contain a color name (gold, green, etc.)
|
||||||
static void parseColorTags(const std::string& in, std::vector<ColorSegment>& out) {
|
static void parseColorTags(const std::string& in, std::vector<ColorSegment>& out) {
|
||||||
uint32_t curColor = 0xffffff;
|
uint32_t curColor = 0xffffff;
|
||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
while (pos < in.size()) {
|
while (pos < in.size()) {
|
||||||
size_t open = in.find('[', pos);
|
size_t open = in.find('[', pos);
|
||||||
if (open == std::string::npos) {
|
if (open == std::string::npos) {
|
||||||
out.push_back({in.substr(pos), curColor});
|
out.push_back({in.substr(pos), curColor});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (open > pos) {
|
if (open > pos) {
|
||||||
out.push_back({in.substr(pos, open - pos), curColor});
|
out.push_back({in.substr(pos, open - pos), curColor});
|
||||||
}
|
}
|
||||||
size_t close = in.find(']', open);
|
size_t close = in.find(']', open);
|
||||||
if (close == std::string::npos) {
|
if (close == std::string::npos) {
|
||||||
out.push_back({in.substr(open), curColor});
|
out.push_back({in.substr(open), curColor});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
std::string tag = in.substr(open + 1, close - open - 1);
|
std::string tag = in.substr(open + 1, close - open - 1);
|
||||||
if (!tag.empty() && tag[0] == '/') {
|
if (!tag.empty() && tag[0] == '/') {
|
||||||
curColor = 0xffffff;
|
curColor = 0xffffff;
|
||||||
} else {
|
} else {
|
||||||
std::string lower;
|
std::string lower;
|
||||||
lower.resize(tag.size());
|
lower.resize(tag.size());
|
||||||
std::transform(tag.begin(), tag.end(), lower.begin(), ::tolower);
|
std::transform(tag.begin(), tag.end(), lower.begin(), ::tolower);
|
||||||
if (lower.find("gold") != std::string::npos) curColor = 0xffd700;
|
if (lower.find("gold") != std::string::npos) curColor = 0xffd700;
|
||||||
else if (lower.find("green") != std::string::npos) curColor = 0x00ff00;
|
else if (lower.find("green") != std::string::npos) curColor = 0x00ff00;
|
||||||
else if (lower.find("yellow") != std::string::npos) curColor = 0xffff00;
|
else if (lower.find("yellow") != std::string::npos) curColor = 0xffff00;
|
||||||
else if (lower.find("red") != std::string::npos) curColor = 0xff0000;
|
else if (lower.find("red") != std::string::npos) curColor = 0xff0000;
|
||||||
else if (lower.find("blue") != std::string::npos) curColor = 0x0000ff;
|
else if (lower.find("blue") != std::string::npos) curColor = 0x0000ff;
|
||||||
}
|
}
|
||||||
pos = close + 1;
|
pos = close + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gui::drawColoredString(Font* font, const std::string& text, float x, float y, int alpha) {
|
void Gui::drawColoredString(Font* font, const std::string& text, float x, float y, int alpha) {
|
||||||
std::vector<ColorSegment> segs;
|
std::vector<ColorSegment> segs;
|
||||||
parseColorTags(text, segs);
|
parseColorTags(text, segs);
|
||||||
float cx = x;
|
float cx = x;
|
||||||
for (auto &s : segs) {
|
for (auto &s : segs) {
|
||||||
int color = s.color + (alpha << 24);
|
int color = s.color + (alpha << 24);
|
||||||
font->drawShadow(s.text, cx, y, color);
|
font->drawShadow(s.text, cx, y, color);
|
||||||
cx += font->width(s.text);
|
cx += font->width(s.text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float Gui::getColoredWidth(Font* font, const std::string& text) {
|
float Gui::getColoredWidth(Font* font, const std::string& text) {
|
||||||
std::vector<ColorSegment> segs;
|
std::vector<ColorSegment> segs;
|
||||||
parseColorTags(text, segs);
|
parseColorTags(text, segs);
|
||||||
float w = 0;
|
float w = 0;
|
||||||
for (auto &s : segs) {
|
for (auto &s : segs) {
|
||||||
w += font->width(s.text);
|
w += font->width(s.text);
|
||||||
}
|
}
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isChatting, Font* font ) {
|
void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isChatting, Font* font ) {
|
||||||
@@ -1023,20 +1078,23 @@ void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isC
|
|||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
|
|
||||||
// special-case join/leave announcements
|
// special-case join/leave announcements
|
||||||
int baseColor = 0xffffff;
|
int baseColor = 0xffffff;
|
||||||
if (msg.find(" joined the game") != std::string::npos ||
|
if (msg.find(" joined the game") != std::string::npos ||
|
||||||
msg.find(" left the game") != std::string::npos) {
|
msg.find(" left the game") != std::string::npos) {
|
||||||
baseColor = 0xffff00; // yellow
|
baseColor = 0xffff00; // yellow
|
||||||
}
|
}
|
||||||
// replace previous logic; allow full colour tags now
|
// replace previous logic; allow full colour tags now
|
||||||
Gui::drawColoredString(font, msg, x, y, alpha);
|
Gui::drawColoredString(font, msg, x, y, alpha);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
|
void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
|
||||||
glColor4f2(1, 1, 1, .5);
|
glColor4f2(1, 1, 1, 1);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
minecraft->textures->loadAndBindTexture("gui/gui.png");
|
minecraft->textures->loadAndBindTexture("gui/gui.png");
|
||||||
|
|
||||||
Inventory* inventory = minecraft->player->inventory;
|
Inventory* inventory = minecraft->player->inventory;
|
||||||
@@ -1083,13 +1141,7 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
|
|||||||
|
|
||||||
float x = baseItemX;
|
float x = baseItemX;
|
||||||
|
|
||||||
int slots = getNumSlots();
|
int slots = getNumSlots() - _openInventorySlot;
|
||||||
|
|
||||||
// TODO: if using touchscreen
|
|
||||||
|
|
||||||
#ifndef PLATFORM_DESKTOP
|
|
||||||
slots--;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (int i = 0; i < slots; i++) {
|
for (int i = 0; i < slots; i++) {
|
||||||
renderSlot(i, (int)x, ySlot, a);
|
renderSlot(i, (int)x, ySlot, a);
|
||||||
@@ -1097,9 +1149,10 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
|
|||||||
}
|
}
|
||||||
_inventoryNeedsUpdate = false;
|
_inventoryNeedsUpdate = false;
|
||||||
|
|
||||||
#ifndef PLATFORM_DESKTOP
|
|
||||||
blit(screenWidth / 2 + 10 * getNumSlots() - 20 + 4, ySlot + 6, 242, 252, 14, 4, 14, 4);
|
if (_openInventorySlot) {
|
||||||
#endif
|
blit(screenWidth / 2 + 10 * getNumSlots() - 20 + 4, ySlot + 6, 242, 252, 14, 4, 14, 4);
|
||||||
|
}
|
||||||
|
|
||||||
minecraft->textures->loadAndBindTexture("gui/gui_blocks.png");
|
minecraft->textures->loadAndBindTexture("gui/gui_blocks.png");
|
||||||
t.endOverrideAndDraw();
|
t.endOverrideAndDraw();
|
||||||
@@ -1122,22 +1175,41 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
|
|||||||
|
|
||||||
// Draw count
|
// Draw count
|
||||||
//Tesselator& t = Tesselator::instance;
|
//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()) {
|
t.beginOverride();
|
||||||
x = baseItemX;
|
if (minecraft->gameMode->isSurvivalType()) {
|
||||||
for (int i = 0; i < slots; i++) {
|
x = baseItemX;
|
||||||
ItemInstance* item = minecraft->player->inventory->getItem(i);
|
for (int i = 0; i < slots; i++) {
|
||||||
if (item && item->count >= 0)
|
ItemInstance* item = minecraft->player->inventory->getItem(i);
|
||||||
renderSlotText(item, k*x, k*ySlot + 1, true, true);
|
if (item && item->count >= 0)
|
||||||
x += 20;
|
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();
|
||||||
}
|
}
|
||||||
minecraft->textures->loadAndBindTexture("font/default8.png");
|
|
||||||
t.endOverrideAndDraw();
|
|
||||||
|
|
||||||
glPopMatrix2();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,6 +127,8 @@ private:
|
|||||||
static const float DropTicks;
|
static const float DropTicks;
|
||||||
float _currentDropTicks;
|
float _currentDropTicks;
|
||||||
int _currentDropSlot;
|
int _currentDropSlot;
|
||||||
|
|
||||||
|
bool _openInventorySlot;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*NET_MINECRAFT_CLIENT_GUI__Gui_H__*/
|
#endif /*NET_MINECRAFT_CLIENT_GUI__Gui_H__*/
|
||||||
|
|||||||
@@ -177,9 +177,11 @@ void Screen::keyPressed( int eventKey )
|
|||||||
textbox->keyPressed(minecraft, eventKey);
|
textbox->keyPressed(minecraft, eventKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef TABBING
|
||||||
if (minecraft->useTouchscreen())
|
if (minecraft->useTouchscreen())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
// "Tabbing" the buttons (walking with keys)
|
// "Tabbing" the buttons (walking with keys)
|
||||||
const int tabButtonCount = tabButtons.size();
|
const int tabButtonCount = tabButtons.size();
|
||||||
if (!tabButtonCount)
|
if (!tabButtonCount)
|
||||||
@@ -199,6 +201,7 @@ void Screen::keyPressed( int eventKey )
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateTabButtonSelection();
|
updateTabButtonSelection();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Screen::charPressed(char inputChar) {
|
void Screen::charPressed(char inputChar) {
|
||||||
@@ -209,11 +212,13 @@ void Screen::charPressed(char inputChar) {
|
|||||||
|
|
||||||
void Screen::updateTabButtonSelection()
|
void Screen::updateTabButtonSelection()
|
||||||
{
|
{
|
||||||
|
#ifdef TABBING
|
||||||
if (minecraft->useTouchscreen())
|
if (minecraft->useTouchscreen())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < tabButtons.size(); ++i)
|
for (unsigned int i = 0; i < tabButtons.size(); ++i)
|
||||||
tabButtons[i]->selected = (i == tabButtonIndex);
|
tabButtons[i]->selected = (i == tabButtonIndex);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Screen::mouseClicked( int x, int y, int buttonNum )
|
void Screen::mouseClicked( int x, int y, int buttonNum )
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ void Button::renderBg( Minecraft* minecraft, int xm, int ym )
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Button::hovered(Minecraft* minecraft, int xm , int ym) {
|
bool Button::hovered(Minecraft* minecraft, int xm , int ym) {
|
||||||
return minecraft->useTouchscreen()? (_currentlyDown && isInside(xm, ym)) : false;
|
return minecraft->useTouchscreen()? (_currentlyDown && isInside(xm, ym)) : isInside(xm, ym);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Button::isInside( int xm, int 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 )
|
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");
|
minecraft->textures->loadAndBindTexture("gui/touchgui.png");
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ void ImageButton::render(Minecraft* minecraft, int xm, int ym) {
|
|||||||
//minecraft->textures->loadAndBindTexture("gui/gui.png");
|
//minecraft->textures->loadAndBindTexture("gui/gui.png");
|
||||||
glColor4f2(1, 1, 1, 1);
|
glColor4f2(1, 1, 1, 1);
|
||||||
|
|
||||||
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
|
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
|
||||||
bool IsSecondImage = isSecondImage(hovered);
|
bool IsSecondImage = isSecondImage(hovered);
|
||||||
|
|
||||||
//printf("ButtonId: %d - Hovered? %d (cause: %d, %d, %d, %d, <> %d, %d)\n", id, hovered, x, y, x+w, y+h, xm, ym);
|
//printf("ButtonId: %d - Hovered? %d (cause: %d, %d, %d, %d, <> %d, %d)\n", id, hovered, x, y, x+w, y+h, xm, ym);
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ void LargeImageButton::render(Minecraft* minecraft, int xm, int ym) {
|
|||||||
|
|
||||||
//minecraft->textures->loadAndBindTexture("gui/gui.png");
|
//minecraft->textures->loadAndBindTexture("gui/gui.png");
|
||||||
glColor4f2(1, 1, 1, 1);
|
glColor4f2(1, 1, 1, 1);
|
||||||
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : 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);
|
//printf("ButtonId: %d - Hovered? %d (cause: %d, %d, %d, %d, <> %d, %d)\n", id, hovered, x, y, x+w, y+h, xm, ym);
|
||||||
//int yImage = getYImage(hovered || selected);
|
//int yImage = getYImage(hovered || selected);
|
||||||
|
|||||||
@@ -36,6 +36,48 @@ void OptionsItem::render( Minecraft* minecraft, int xm, int ym ) {
|
|||||||
}
|
}
|
||||||
text += ": " + scaleText;
|
text += ": " + scaleText;
|
||||||
}
|
}
|
||||||
|
if (m_optionId == OPTIONS_FOG_TYPE) {
|
||||||
|
int value = minecraft->options.getIntValue(OPTIONS_FOG_TYPE);
|
||||||
|
std::string scaleText;
|
||||||
|
switch (value) {
|
||||||
|
case 0: scaleText = I18n::get("options.fogType.vanilla"); break;
|
||||||
|
case 1: scaleText = I18n::get("options.fogType.java"); break;
|
||||||
|
case 2: scaleText = I18n::get("options.fogType.unused"); break;
|
||||||
|
}
|
||||||
|
text += ": " + scaleText;
|
||||||
|
}
|
||||||
|
if (m_optionId == OPTIONS_DEBUG_STYLE) {
|
||||||
|
int value = minecraft->options.getIntValue(OPTIONS_DEBUG_STYLE);
|
||||||
|
std::string scaleText;
|
||||||
|
switch (value) {
|
||||||
|
case 0: scaleText = I18n::get("options.debugStyle.javaBeta"); break;
|
||||||
|
case 1: scaleText = I18n::get("options.debugStyle.custom"); break;
|
||||||
|
case 2: scaleText = I18n::get("options.fogType.unused"); break;
|
||||||
|
}
|
||||||
|
text += ": " + scaleText;
|
||||||
|
}
|
||||||
|
if (m_optionId == OPTIONS_MENU_STYLE) {
|
||||||
|
int value = minecraft->options.getIntValue(OPTIONS_MENU_STYLE);
|
||||||
|
std::string scaleText;
|
||||||
|
switch (value) {
|
||||||
|
case 0: scaleText = I18n::get("options.menuStyle.pocket"); break;
|
||||||
|
case 1: scaleText = I18n::get("options.menuStyle.xperia"); break;
|
||||||
|
case 2: scaleText = I18n::get("options.menuStyle.java"); break;
|
||||||
|
}
|
||||||
|
text += ": " + scaleText;
|
||||||
|
}
|
||||||
|
if (m_optionId == OPTIONS_VIEW_DISTANCE) {
|
||||||
|
int value = minecraft->options.getIntValue(OPTIONS_VIEW_DISTANCE);
|
||||||
|
std::string scaleText;
|
||||||
|
switch (value) {
|
||||||
|
case 0: scaleText = I18n::get("options.renderDistance.far"); break;
|
||||||
|
case 1: scaleText = I18n::get("options.renderDistance.normal"); break;
|
||||||
|
case 2: scaleText = I18n::get("options.renderDistance.short"); break;
|
||||||
|
case 3: scaleText = I18n::get("options.renderDistance.tiny"); break;
|
||||||
|
default: scaleText = "Debug"; break;
|
||||||
|
}
|
||||||
|
text += ": " + scaleText;
|
||||||
|
}
|
||||||
|
|
||||||
minecraft->font->draw(text, (float)x, (float)y + yOffset, 0x909090, false);
|
minecraft->font->draw(text, (float)x, (float)y + yOffset, 0x909090, false);
|
||||||
super::render(minecraft, xm, ym);
|
super::render(minecraft, xm, ym);
|
||||||
|
|||||||
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
@@ -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 kMinIndicatorLength = 34.0f / 3;
|
||||||
static const float PKScrollIndicatorEndSize = 3;
|
static const float PKScrollIndicatorEndSize = 3;
|
||||||
static const float PKScrollIndicatorThickness = 7.0f /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(
|
ScrollingPane::ScrollingPane(
|
||||||
int optionFlags,
|
int optionFlags,
|
||||||
@@ -70,13 +73,19 @@ ScrollingPane::ScrollingPane(
|
|||||||
}
|
}
|
||||||
//LOGI("%d, %d :: %d\n", bbox.w, itemBbox.w, this->columns);
|
//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 (columns * itemBbox.w <= bbox.w) flags |= SF_LockX;
|
||||||
if (rows * itemBbox.h <= bbox.h) flags |= SF_LockY;
|
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);
|
dragDeltas.reserve(128);
|
||||||
|
|
||||||
te_moved = 0;
|
te_moved = 0;
|
||||||
@@ -114,6 +123,34 @@ void ScrollingPane::tick() {
|
|||||||
updateScrollFade(vScroll);
|
updateScrollFade(vScroll);
|
||||||
updateScrollFade(hScroll);
|
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) {
|
bool ScrollingPane::getGridItemFor_slow(int itemIndex, GridItem& out) {
|
||||||
@@ -549,11 +586,39 @@ void ScrollingPane::stepThroughDecelerationAnimation(bool noAnimation) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ScrollingPane::scrollBy(float dx, float dy) {
|
void ScrollingPane::scrollBy(float dx, float dy) {
|
||||||
// adjust the translation offsets fpx/fpy by the requested amount
|
// compute target content offset from wheel delta (in screen-space w/ opposite sign)
|
||||||
float nfpx = fpx + dx;
|
float targetX = _contentOffset.x - dx;
|
||||||
float nfpy = fpy + dy;
|
float targetY = _contentOffset.y - dy;
|
||||||
// convert back to content offset (fpx = -contentOffset.x)
|
|
||||||
setContentOffset(Vec3(-nfpx, -nfpy, 0));
|
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) {
|
void ScrollingPane::setContentOffset(float x, float y) {
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
#include "GuiElement.h"
|
#include "GuiElement.h"
|
||||||
#include "../../../client/Options.h"
|
#include "../../../client/Options.h"
|
||||||
#include <client/Option.h>
|
|
||||||
|
|
||||||
class Slider : public GuiElement {
|
class Slider : public GuiElement {
|
||||||
typedef GuiElement super;
|
typedef GuiElement super;
|
||||||
|
|||||||
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
@@ -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
@@ -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()
|
void ConfirmScreen::init()
|
||||||
{
|
{
|
||||||
if (minecraft->useTouchscreen()) {
|
if (/* minecraft->useTouchscreen() */ true) {
|
||||||
yesButton = new Touch::TButton(0, 0, 0, yesButtonText),
|
yesButton = new Touch::TButton(0, 0, 0, yesButtonText),
|
||||||
noButton = new Touch::TButton(1, 0, 0, noButtonText);
|
noButton = new Touch::TButton(1, 0, 0, noButtonText);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ void CreditsScreen::init() {
|
|||||||
buttons.push_back(bHeader);
|
buttons.push_back(bHeader);
|
||||||
buttons.push_back(btnBack);
|
buttons.push_back(btnBack);
|
||||||
|
|
||||||
|
// TODO: rewrite it
|
||||||
// prepare text lines
|
// prepare text lines
|
||||||
_lines.clear();
|
_lines.clear();
|
||||||
_lines.push_back("Minecraft: Pocket Edition");
|
_lines.push_back("Minecraft: Pocket Edition");
|
||||||
@@ -39,6 +40,8 @@ void CreditsScreen::init() {
|
|||||||
_lines.push_back("Kolyah35");
|
_lines.push_back("Kolyah35");
|
||||||
_lines.push_back("karson");
|
_lines.push_back("karson");
|
||||||
_lines.push_back("deepfriedwaffles");
|
_lines.push_back("deepfriedwaffles");
|
||||||
|
_lines.push_back("EpikIzCool");
|
||||||
|
_lines.push_back("fileshredder");
|
||||||
_lines.push_back("");
|
_lines.push_back("");
|
||||||
// avoid color tags around the URL so it isn't mangled by the parser please
|
// 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");
|
_lines.push_back("Join our Discord server: https://discord.gg/c58YesBxve");
|
||||||
|
|||||||
@@ -23,12 +23,15 @@ DeathScreen::~DeathScreen()
|
|||||||
|
|
||||||
void DeathScreen::init()
|
void DeathScreen::init()
|
||||||
{
|
{
|
||||||
if (minecraft->useTouchscreen()) {
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
|
||||||
bRespawn = new Touch::TButton(1, "Respawn!");
|
bRespawn = new Touch::TButton(1, "Respawn!");
|
||||||
bTitle = new Touch::TButton(2, "Main menu");
|
bTitle = new Touch::TButton(2, "Main menu");
|
||||||
} else {
|
} else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) {
|
||||||
bRespawn = new Button(1, "Respawn!");
|
bRespawn = new Button(1, "Respawn!");
|
||||||
bTitle = new Button(2, "Main menu");
|
bTitle = new Button(2, "Main menu");
|
||||||
|
} else {
|
||||||
|
bRespawn = new Button(1, 0, 0, 200, 20, "Respawn");
|
||||||
|
bTitle = new Button(2, 0, 0, 200, 20, "Title menu");
|
||||||
}
|
}
|
||||||
buttons.push_back(bRespawn);
|
buttons.push_back(bRespawn);
|
||||||
buttons.push_back(bTitle);
|
buttons.push_back(bTitle);
|
||||||
@@ -39,13 +42,23 @@ void DeathScreen::init()
|
|||||||
|
|
||||||
void DeathScreen::setupPositions()
|
void DeathScreen::setupPositions()
|
||||||
{
|
{
|
||||||
bRespawn->width = bTitle->width = width / 4;
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||||
|
bRespawn->width = 200;
|
||||||
|
bTitle->width = 200;
|
||||||
|
|
||||||
|
int centerX = (width / 2) - (bRespawn->width / 2);
|
||||||
|
bRespawn->x = centerX;
|
||||||
|
bTitle->x = centerX;
|
||||||
|
|
||||||
|
bRespawn->y = (height / 2);
|
||||||
|
bTitle->y = bRespawn->y + 24;
|
||||||
|
} else {
|
||||||
|
bRespawn->width = bTitle->width = width / 4;
|
||||||
bRespawn->y = bTitle->y = height / 2;
|
bRespawn->y = bTitle->y = height / 2;
|
||||||
bRespawn->x = width/2 - bRespawn->width - 10;
|
bRespawn->x = width/2 - bRespawn->width - 10;
|
||||||
bTitle->x = width/2 + 10;
|
bTitle->x = width/2 + 10;
|
||||||
|
}
|
||||||
LOGI("xyz: %d, %d (%d, %d)\n", bTitle->x, bTitle->y, width, height);
|
// LOGI("xyz: %d, %d (%d, %d)\n", bTitle->x, bTitle->y, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeathScreen::tick() {
|
void DeathScreen::tick() {
|
||||||
@@ -56,10 +69,20 @@ void DeathScreen::render( int xm, int ym, float a )
|
|||||||
{
|
{
|
||||||
fillGradient(0, 0, width, height, 0x60500000, 0xa0803030);
|
fillGradient(0, 0, width, height, 0x60500000, 0xa0803030);
|
||||||
|
|
||||||
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||||
|
glPushMatrix2();
|
||||||
|
glScalef2(2, 2, 2);
|
||||||
|
drawCenteredString(font, "Game over!", width / 2 / 2, height / 8, 0xffffff);
|
||||||
|
glPopMatrix2();
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "Score: &e" << minecraft->player->getScore();
|
||||||
|
drawCenteredString(font, ss.str(), width / 2, (height / 4) + 32, 0xffffff);
|
||||||
|
} else {
|
||||||
glPushMatrix2();
|
glPushMatrix2();
|
||||||
glScalef2(2, 2, 2);
|
glScalef2(2, 2, 2);
|
||||||
drawCenteredString(font, "You died!", width / 2 / 2, height / 8, 0xffffff);
|
drawCenteredString(font, "You died!", width / 2 / 2, height / 8, 0xffffff);
|
||||||
glPopMatrix2();
|
glPopMatrix2();
|
||||||
|
}
|
||||||
|
|
||||||
if (_tick >= WAIT_TICKS)
|
if (_tick >= WAIT_TICKS)
|
||||||
Screen::render(xm, ym, a);
|
Screen::render(xm, ym, a);
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void init() {
|
void init() {
|
||||||
if (minecraft->useTouchscreen())
|
if (/* minecraft->useTouchscreen() */ true)
|
||||||
_back = new Touch::TButton(1, "Ok");
|
_back = new Touch::TButton(1, "Ok");
|
||||||
else
|
else
|
||||||
_back = new Button(1, "Ok");
|
_back = new Button(1, "Ok");
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ InBedScreen::~InBedScreen() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void InBedScreen::init() {
|
void InBedScreen::init() {
|
||||||
if (minecraft->useTouchscreen()) {
|
if (/* minecraft->useTouchscreen() */ true) {
|
||||||
bWakeUp = new Touch::TButton(1, "Leave Bed");
|
bWakeUp = new Touch::TButton(1, "Leave Bed");
|
||||||
} else {
|
} else {
|
||||||
bWakeUp = new Button(1, "Leave Bed");
|
bWakeUp = new Button(1, "Leave Bed");
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "IngameBlockSelectionScreen.h"
|
#include "IngameBlockSelectionScreen.h"
|
||||||
#include "../../renderer/TileRenderer.h"
|
#include "../../renderer/TileRenderer.h"
|
||||||
|
#include "../../renderer/Lighting.h"
|
||||||
#include "../../player/LocalPlayer.h"
|
#include "../../player/LocalPlayer.h"
|
||||||
#include "../../renderer/gles.h"
|
#include "../../renderer/gles.h"
|
||||||
#include "../../Minecraft.h"
|
#include "../../Minecraft.h"
|
||||||
@@ -11,6 +12,7 @@
|
|||||||
#include "../../renderer/Textures.h"
|
#include "../../renderer/Textures.h"
|
||||||
#include "../../gamemode/GameMode.h"
|
#include "../../gamemode/GameMode.h"
|
||||||
#include "ArmorScreen.h"
|
#include "ArmorScreen.h"
|
||||||
|
#include "crafting/WorkbenchScreen.h"
|
||||||
#include "../components/Button.h"
|
#include "../components/Button.h"
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
@@ -26,7 +28,8 @@ IngameBlockSelectionScreen::IngameBlockSelectionScreen()
|
|||||||
InventoryRows(1),
|
InventoryRows(1),
|
||||||
InventoryCols(1),
|
InventoryCols(1),
|
||||||
InventorySize(1),
|
InventorySize(1),
|
||||||
bArmor(1, "Armor")
|
bArmor(1, "Armor"),
|
||||||
|
bCrafting(1, "Crafting")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,6 +44,19 @@ void IngameBlockSelectionScreen::init()
|
|||||||
(float)getSlotPosY(0) - 4,
|
(float)getSlotPosY(0) - 4,
|
||||||
(float)getSlotPosX(InventoryCols) + 4,
|
(float)getSlotPosX(InventoryCols) + 4,
|
||||||
(float)getSlotPosY(InventoryRows) + 4);
|
(float)getSlotPosY(InventoryRows) + 4);
|
||||||
|
|
||||||
|
if (!minecraft->isCreativeMode()) {
|
||||||
|
bArmor.width = 42;
|
||||||
|
bCrafting.width = 42;
|
||||||
|
|
||||||
|
bArmor.x = 0;
|
||||||
|
bArmor.y = height - bArmor.height;
|
||||||
|
|
||||||
|
bCrafting.x = 0;
|
||||||
|
bCrafting.y = height - bCrafting.height - 30;
|
||||||
|
buttons.push_back(&bArmor);
|
||||||
|
buttons.push_back(&bCrafting);
|
||||||
|
}
|
||||||
|
|
||||||
ItemInstance* selected = inventory->getSelected();
|
ItemInstance* selected = inventory->getSelected();
|
||||||
if (!selected || selected->isNull()) {
|
if (!selected || selected->isNull()) {
|
||||||
@@ -57,13 +73,6 @@ void IngameBlockSelectionScreen::init()
|
|||||||
}
|
}
|
||||||
if (!isAllowed(selectedItem))
|
if (!isAllowed(selectedItem))
|
||||||
selectedItem = 0;
|
selectedItem = 0;
|
||||||
|
|
||||||
if (!minecraft->isCreativeMode()) {
|
|
||||||
bArmor.width = 42;
|
|
||||||
bArmor.x = 0;
|
|
||||||
bArmor.y = height - bArmor.height;
|
|
||||||
buttons.push_back(&bArmor);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IngameBlockSelectionScreen::removed()
|
void IngameBlockSelectionScreen::removed()
|
||||||
@@ -80,10 +89,10 @@ void IngameBlockSelectionScreen::renderSlots()
|
|||||||
|
|
||||||
blitOffset = -90;
|
blitOffset = -90;
|
||||||
|
|
||||||
//glEnable2(GL_RESCALE_NORMAL);
|
glEnable2(GL_RESCALE_NORMAL);
|
||||||
//glPushMatrix2();
|
//glPushMatrix2();
|
||||||
//glRotatef2(180, 1, 0, 0);
|
//glRotatef2(180, 1, 0, 0);
|
||||||
//Lighting::turnOn();
|
Lighting::turnOn(minecraft);
|
||||||
//glPopMatrix2();
|
//glPopMatrix2();
|
||||||
|
|
||||||
minecraft->textures->loadAndBindTexture("gui/gui.png");
|
minecraft->textures->loadAndBindTexture("gui/gui.png");
|
||||||
@@ -122,8 +131,8 @@ void IngameBlockSelectionScreen::renderSlots()
|
|||||||
//w.stop();
|
//w.stop();
|
||||||
//w.printEvery(1000, "render-blocksel");
|
//w.printEvery(1000, "render-blocksel");
|
||||||
|
|
||||||
//glDisable2(GL_RESCALE_NORMAL);
|
glDisable2(GL_RESCALE_NORMAL);
|
||||||
//Lighting::turnOn();
|
Lighting::turnOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
int IngameBlockSelectionScreen::getSlotPosX(int slotX) {
|
int IngameBlockSelectionScreen::getSlotPosX(int slotX) {
|
||||||
@@ -248,7 +257,7 @@ void IngameBlockSelectionScreen::mouseClicked(int x, int y, int buttonNum)
|
|||||||
//minecraft->soundEngine->playUI("random.click", 1, 1);
|
//minecraft->soundEngine->playUI("random.click", 1, 1);
|
||||||
} else {
|
} else {
|
||||||
_pendingQuit = !_area.isInside((float)x, (float)y)
|
_pendingQuit = !_area.isInside((float)x, (float)y)
|
||||||
&& !bArmor.isInside(x, y);
|
&& !bArmor.isInside(x, y) && !bCrafting.isInside(x, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!_pendingQuit)
|
if (!_pendingQuit)
|
||||||
@@ -337,5 +346,8 @@ void IngameBlockSelectionScreen::buttonClicked( Button* button )
|
|||||||
if (button == &bArmor) {
|
if (button == &bArmor) {
|
||||||
minecraft->setScreen(new ArmorScreen());
|
minecraft->setScreen(new ArmorScreen());
|
||||||
}
|
}
|
||||||
|
if (button == &bCrafting) {
|
||||||
|
minecraft->setScreen(new WorkbenchScreen(Recipe::SIZE_2X2));
|
||||||
|
}
|
||||||
super::buttonClicked(button);
|
super::buttonClicked(button);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ private:
|
|||||||
bool _pendingQuit;
|
bool _pendingQuit;
|
||||||
|
|
||||||
Button bArmor;
|
Button bArmor;
|
||||||
|
Button bCrafting;
|
||||||
|
|
||||||
RectangleArea _area;
|
RectangleArea _area;
|
||||||
};
|
};
|
||||||
|
|||||||
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 "../Screen.h"
|
||||||
#include "../components/Button.h"
|
#include "../components/Button.h"
|
||||||
#include "../../Minecraft.h"
|
#include "../../Minecraft.h"
|
||||||
#include "client/gui/components/ImageButton.h"
|
#include "../components/ImageButton.h"
|
||||||
#include "client/gui/components/TextBox.h"
|
#include "../components/TextBox.h"
|
||||||
|
|
||||||
class JoinByIPScreen: public Screen
|
class JoinByIPScreen: public Screen
|
||||||
{
|
{
|
||||||
@@ -25,4 +25,4 @@ private:
|
|||||||
Touch::THeader bHeader;
|
Touch::THeader bHeader;
|
||||||
Touch::TButton bJoin;
|
Touch::TButton bJoin;
|
||||||
ImageButton bBack;
|
ImageButton bBack;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ OptionsScreen::OptionsScreen()
|
|||||||
}
|
}
|
||||||
|
|
||||||
OptionsScreen::~OptionsScreen() {
|
OptionsScreen::~OptionsScreen() {
|
||||||
|
|
||||||
if (btnClose != NULL) {
|
if (btnClose != NULL) {
|
||||||
delete btnClose;
|
delete btnClose;
|
||||||
btnClose = NULL;
|
btnClose = NULL;
|
||||||
@@ -53,7 +52,6 @@ OptionsScreen::~OptionsScreen() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::init() {
|
void OptionsScreen::init() {
|
||||||
|
|
||||||
bHeader = new Touch::THeader(0, "Options");
|
bHeader = new Touch::THeader(0, "Options");
|
||||||
|
|
||||||
btnClose = new ImageButton(1, "");
|
btnClose = new ImageButton(1, "");
|
||||||
@@ -89,7 +87,6 @@ void OptionsScreen::init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::setupPositions() {
|
void OptionsScreen::setupPositions() {
|
||||||
|
|
||||||
int buttonHeight = btnClose->height;
|
int buttonHeight = btnClose->height;
|
||||||
|
|
||||||
btnClose->x = width - btnClose->width;
|
btnClose->x = width - btnClose->width;
|
||||||
@@ -134,7 +131,6 @@ void OptionsScreen::setupPositions() {
|
|||||||
|
|
||||||
|
|
||||||
void OptionsScreen::render(int xm, int ym, float a) {
|
void OptionsScreen::render(int xm, int ym, float a) {
|
||||||
|
|
||||||
renderBackground();
|
renderBackground();
|
||||||
|
|
||||||
int xmm = xm * width / minecraft->width;
|
int xmm = xm * width / minecraft->width;
|
||||||
@@ -142,7 +138,7 @@ void OptionsScreen::render(int xm, int ym, float a) {
|
|||||||
|
|
||||||
if (currentOptionsGroup != NULL)
|
if (currentOptionsGroup != NULL)
|
||||||
currentOptionsGroup->render(minecraft, xmm, ymm);
|
currentOptionsGroup->render(minecraft, xmm, ymm);
|
||||||
|
|
||||||
super::render(xm, ym, a);
|
super::render(xm, ym, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,10 +146,13 @@ void OptionsScreen::removed() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::buttonClicked(Button* button) {
|
void OptionsScreen::buttonClicked(Button* button) {
|
||||||
|
|
||||||
if (button == btnClose) {
|
if (button == btnClose) {
|
||||||
minecraft->options.save();
|
minecraft->options.save();
|
||||||
minecraft->screenChooser.setScreen(SCREEN_STARTMENU);
|
if (minecraft->screen != NULL) {
|
||||||
|
minecraft->setScreen(NULL);
|
||||||
|
} else {
|
||||||
|
minecraft->screenChooser.setScreen(SCREEN_STARTMENU);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (button->id > 1 && button->id < 7) {
|
else if (button->id > 1 && button->id < 7) {
|
||||||
int categoryButton = button->id - categoryButtons[0]->id;
|
int categoryButton = button->id - categoryButtons[0]->id;
|
||||||
@@ -165,7 +164,6 @@ void OptionsScreen::buttonClicked(Button* button) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::selectCategory(int index) {
|
void OptionsScreen::selectCategory(int index) {
|
||||||
|
|
||||||
int currentIndex = 0;
|
int currentIndex = 0;
|
||||||
|
|
||||||
for (std::vector<Touch::TButton*>::iterator it = categoryButtons.begin(); it != categoryButtons.end(); ++it) {
|
for (std::vector<Touch::TButton*>::iterator it = categoryButtons.begin(); it != categoryButtons.end(); ++it) {
|
||||||
@@ -199,6 +197,7 @@ void OptionsScreen::generateOptionScreens() {
|
|||||||
optionPanes[1]->addOptionItem(OPTIONS_DIFFICULTY, minecraft)
|
optionPanes[1]->addOptionItem(OPTIONS_DIFFICULTY, minecraft)
|
||||||
.addOptionItem(OPTIONS_SERVER_VISIBLE, minecraft)
|
.addOptionItem(OPTIONS_SERVER_VISIBLE, minecraft)
|
||||||
.addOptionItem(OPTIONS_THIRD_PERSON_VIEW, minecraft)
|
.addOptionItem(OPTIONS_THIRD_PERSON_VIEW, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_WINDOW_SCALE, minecraft)
|
||||||
.addOptionItem(OPTIONS_GUI_SCALE, minecraft)
|
.addOptionItem(OPTIONS_GUI_SCALE, minecraft)
|
||||||
.addOptionItem(OPTIONS_SENSITIVITY, minecraft)
|
.addOptionItem(OPTIONS_SENSITIVITY, minecraft)
|
||||||
.addOptionItem(OPTIONS_MUSIC_VOLUME, minecraft)
|
.addOptionItem(OPTIONS_MUSIC_VOLUME, minecraft)
|
||||||
@@ -209,7 +208,10 @@ void OptionsScreen::generateOptionScreens() {
|
|||||||
|
|
||||||
// // Controls Pane
|
// // Controls Pane
|
||||||
optionPanes[2]->addOptionItem(OPTIONS_INVERT_Y_MOUSE, minecraft)
|
optionPanes[2]->addOptionItem(OPTIONS_INVERT_Y_MOUSE, minecraft)
|
||||||
.addOptionItem(OPTIONS_USE_TOUCHSCREEN, minecraft);
|
.addOptionItem(OPTIONS_USE_TOUCHSCREEN, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_AUTOJUMP, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_BLOCK_OUTLINE, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_IS_JOY_TOUCH_AREA, minecraft);
|
||||||
|
|
||||||
for (int i = OPTIONS_KEY_FORWARD; i <= OPTIONS_KEY_USE; i++) {
|
for (int i = OPTIONS_KEY_FORWARD; i <= OPTIONS_KEY_USE; i++) {
|
||||||
optionPanes[2]->addOptionItem((OptionId)i, minecraft);
|
optionPanes[2]->addOptionItem((OptionId)i, minecraft);
|
||||||
@@ -217,20 +219,35 @@ void OptionsScreen::generateOptionScreens() {
|
|||||||
|
|
||||||
// // Graphics Pane
|
// // Graphics Pane
|
||||||
optionPanes[3]->addOptionItem(OPTIONS_FANCY_GRAPHICS, minecraft)
|
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_LIMIT_FRAMERATE, minecraft)
|
||||||
.addOptionItem(OPTIONS_VSYNC, minecraft)
|
.addOptionItem(OPTIONS_VSYNC, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_VIEW_DISTANCE, minecraft)
|
||||||
.addOptionItem(OPTIONS_RENDER_DEBUG, minecraft)
|
.addOptionItem(OPTIONS_RENDER_DEBUG, minecraft)
|
||||||
.addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft)
|
.addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft)
|
||||||
.addOptionItem(OPTIONS_VIEW_BOBBING, minecraft)
|
.addOptionItem(OPTIONS_VIEW_BOBBING, minecraft)
|
||||||
.addOptionItem(OPTIONS_AMBIENT_OCCLUSION, minecraft);
|
.addOptionItem(OPTIONS_AMBIENT_OCCLUSION, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_NORMAL_LIGHTING, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_BEAUTIFUL_SKY, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_VIGNETTE, minecraft);
|
||||||
|
|
||||||
optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
|
optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
|
||||||
.addOptionItem(OPTIONS_BAR_ON_TOP, minecraft)
|
.addOptionItem(OPTIONS_BAR_ON_TOP, minecraft)
|
||||||
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft);
|
.addOptionItem(OPTIONS_MENU_STYLE, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_FOLIAGE_TINT, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_TINTED_SIDE, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_JAVA_HUD, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_FOG_TYPE, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_BETA_SKY, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_RESTORED_ANIMS, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_DEBUG_STYLE, minecraft);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
|
void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
|
||||||
|
|
||||||
if (currentOptionsGroup != NULL)
|
if (currentOptionsGroup != NULL)
|
||||||
currentOptionsGroup->mouseClicked(minecraft, x, y, buttonNum);
|
currentOptionsGroup->mouseClicked(minecraft, x, y, buttonNum);
|
||||||
|
|
||||||
@@ -238,7 +255,6 @@ void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::mouseReleased(int x, int y, int buttonNum) {
|
void OptionsScreen::mouseReleased(int x, int y, int buttonNum) {
|
||||||
|
|
||||||
if (currentOptionsGroup != NULL)
|
if (currentOptionsGroup != NULL)
|
||||||
currentOptionsGroup->mouseReleased(minecraft, x, y, buttonNum);
|
currentOptionsGroup->mouseReleased(minecraft, x, y, buttonNum);
|
||||||
|
|
||||||
@@ -250,7 +266,7 @@ void OptionsScreen::keyPressed(int eventKey) {
|
|||||||
currentOptionsGroup->keyPressed(minecraft, eventKey);
|
currentOptionsGroup->keyPressed(minecraft, eventKey);
|
||||||
if (eventKey == Keyboard::KEY_ESCAPE)
|
if (eventKey == Keyboard::KEY_ESCAPE)
|
||||||
minecraft->options.save();
|
minecraft->options.save();
|
||||||
|
|
||||||
super::keyPressed(eventKey);
|
super::keyPressed(eventKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,19 +5,23 @@
|
|||||||
#include "../../../util/Mth.h"
|
#include "../../../util/Mth.h"
|
||||||
#include "../../../network/RakNetInstance.h"
|
#include "../../../network/RakNetInstance.h"
|
||||||
#include "../../../network/ServerSideNetworkHandler.h"
|
#include "../../../network/ServerSideNetworkHandler.h"
|
||||||
|
#include "client/Options.h"
|
||||||
|
#include "client/gui/components/Button.h"
|
||||||
|
#include "client/gui/screens/OptionsScreen.h"
|
||||||
|
|
||||||
PauseScreen::PauseScreen(bool wasBackPaused)
|
PauseScreen::PauseScreen(bool wasBackPaused)
|
||||||
: saveStep(0),
|
: saveStep(0),
|
||||||
visibleTime(0),
|
visibleTime(0),
|
||||||
bContinue(0),
|
bContinue(0),
|
||||||
bQuit(0),
|
bQuit(0),
|
||||||
|
bOptions(0),
|
||||||
bQuitAndSaveLocally(0),
|
bQuitAndSaveLocally(0),
|
||||||
bServerVisibility(0),
|
bServerVisibility(0),
|
||||||
// bThirdPerson(0),
|
// bThirdPerson(0),
|
||||||
wasBackPaused(wasBackPaused),
|
wasBackPaused(wasBackPaused),
|
||||||
// bSound(OPTIONS_SOUND_VOLUME, 1, 0),
|
// bSound(OPTIONS_SOUND_VOLUME, 1, 0),
|
||||||
bThirdPerson(OPTIONS_THIRD_PERSON_VIEW),
|
bThirdPerson(OPTIONS_THIRD_PERSON_VIEW),
|
||||||
bHideGui(OPTIONS_HIDEGUI)
|
bHideGui(OPTIONS_HIDEGUI)
|
||||||
{
|
{
|
||||||
ImageDef def;
|
ImageDef def;
|
||||||
def.setSrc(IntRectangle(160, 144, 39, 31));
|
def.setSrc(IntRectangle(160, 144, 39, 31));
|
||||||
@@ -30,7 +34,7 @@ PauseScreen::PauseScreen(bool wasBackPaused)
|
|||||||
// bSound.setImageDef(def, true);
|
// bSound.setImageDef(def, true);
|
||||||
defSrc.y += defSrc.h;
|
defSrc.y += defSrc.h;
|
||||||
bThirdPerson.setImageDef(def, true);
|
bThirdPerson.setImageDef(def, true);
|
||||||
bHideGui.setImageDef(def, true);
|
bHideGui.setImageDef(def, true);
|
||||||
//void setImageDef(ImageDef& imageDef, bool setButtonSize);
|
//void setImageDef(ImageDef& imageDef, bool setButtonSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,38 +43,48 @@ PauseScreen::~PauseScreen() {
|
|||||||
delete bQuit;
|
delete bQuit;
|
||||||
delete bQuitAndSaveLocally;
|
delete bQuitAndSaveLocally;
|
||||||
delete bServerVisibility;
|
delete bServerVisibility;
|
||||||
// delete bThirdPerson;
|
delete bOptions;
|
||||||
|
// delete bThirdPerson;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PauseScreen::init() {
|
void PauseScreen::init() {
|
||||||
if (minecraft->useTouchscreen()) {
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
|
||||||
bContinue = new Touch::TButton(1, "Back to game");
|
bContinue = new Touch::TButton(1, "Back to game");
|
||||||
|
bOptions = new Touch::TButton(5, "Options");
|
||||||
bQuit = new Touch::TButton(2, "Quit to title");
|
bQuit = new Touch::TButton(2, "Quit to title");
|
||||||
bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map");
|
bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map");
|
||||||
bServerVisibility = new Touch::TButton(4, "");
|
bServerVisibility = new Touch::TButton(4, "");
|
||||||
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
|
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
|
||||||
} else {
|
} else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) {
|
||||||
bContinue = new Button(1, "Back to game");
|
bContinue = new Button(1, "Back to game");
|
||||||
|
bOptions = new Button(5, "Options");
|
||||||
bQuit = new Button(2, "Quit to title");
|
bQuit = new Button(2, "Quit to title");
|
||||||
bQuitAndSaveLocally = new Button(3, "Quit and copy map");
|
bQuitAndSaveLocally = new Button(3, "Quit and copy map");
|
||||||
bServerVisibility = new Button(4, "");
|
bServerVisibility = new Button(4, "");
|
||||||
// bThirdPerson = new Button(5, "Toggle 3:rd person view");
|
// bThirdPerson = new Button(5, "Toggle 3:rd person view");
|
||||||
|
} else {
|
||||||
|
bContinue = new Button(1, 0, 0, 200, 20, "Back to game");
|
||||||
|
bServerVisibility = new Button(4, 0, 0, 200, 20, "");
|
||||||
|
bOptions = new Button(5, 0, 0, 200, 20, "Options...");
|
||||||
|
bQuit = new Button(2, 0, 0, 200, 20, "Save and quit to title");
|
||||||
|
bQuitAndSaveLocally = new Button(3, 0, 0, 200, 20, "Copy and quit map");
|
||||||
|
// bThirdPerson = new Button(5, "Toggle 3:rd person view");
|
||||||
}
|
}
|
||||||
|
|
||||||
buttons.push_back(bContinue);
|
buttons.push_back(bContinue);
|
||||||
buttons.push_back(bQuit);
|
buttons.push_back(bQuit);
|
||||||
|
buttons.push_back(bOptions);
|
||||||
// bSound.updateImage(&minecraft->options);
|
// bSound.updateImage(&minecraft->options);
|
||||||
bThirdPerson.updateImage(&minecraft->options);
|
bThirdPerson.updateImage(&minecraft->options);
|
||||||
bHideGui.updateImage(&minecraft->options);
|
bHideGui.updateImage(&minecraft->options);
|
||||||
// buttons.push_back(&bSound);
|
// buttons.push_back(&bSound);
|
||||||
buttons.push_back(&bThirdPerson);
|
buttons.push_back(&bThirdPerson);
|
||||||
//buttons.push_back(&bHideGui);
|
//buttons.push_back(&bHideGui);
|
||||||
|
|
||||||
// If Back wasn't pressed, set up additional items (more than Quit to menu
|
// If Back wasn't pressed, set up additional items (more than Quit to menu
|
||||||
// and Back to game) here
|
// and Back to game) here
|
||||||
|
|
||||||
#if !defined(APPLE_DEMO_PROMOTION) && !defined(RPI)
|
#if !defined(APPLE_DEMO_PROMOTION) && !defined(RPI)
|
||||||
if (true || !wasBackPaused) {
|
if (true || !wasBackPaused) {
|
||||||
if (minecraft->raknetInstance) {
|
if (minecraft->raknetInstance) {
|
||||||
if (minecraft->raknetInstance->isServer()) {
|
if (minecraft->raknetInstance->isServer()) {
|
||||||
@@ -78,14 +92,14 @@ void PauseScreen::init() {
|
|||||||
buttons.push_back(bServerVisibility);
|
buttons.push_back(bServerVisibility);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#if !defined(DEMO_MODE)
|
#if !defined(DEMO_MODE)
|
||||||
buttons.push_back(bQuitAndSaveLocally);
|
buttons.push_back(bQuitAndSaveLocally);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// buttons.push_back(bThirdPerson);
|
// buttons.push_back(bThirdPerson);
|
||||||
|
|
||||||
for (unsigned int i = 0; i < buttons.size(); ++i) {
|
for (unsigned int i = 0; i < buttons.size(); ++i) {
|
||||||
// if (buttons[i] == &bSound) continue;
|
// if (buttons[i] == &bSound) continue;
|
||||||
@@ -96,24 +110,48 @@ void PauseScreen::init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PauseScreen::setupPositions() {
|
void PauseScreen::setupPositions() {
|
||||||
saveStep = 0;
|
saveStep = 0;
|
||||||
int yBase = 16;
|
int yBase = 16;
|
||||||
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||||
|
yBase = 50;
|
||||||
|
|
||||||
bContinue->width = bQuit->width = /*bThirdPerson->w =*/ 160;
|
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 200;
|
||||||
bQuitAndSaveLocally->width = bServerVisibility->width = 160;
|
bQuitAndSaveLocally->width = bServerVisibility->width = 200;
|
||||||
|
|
||||||
bContinue->x = (width - bContinue->width) / 2;
|
bContinue->x = (width - bContinue->width) / 2;
|
||||||
bContinue->y = yBase + 32 * 1;
|
bContinue->y = yBase + 24 * 1;
|
||||||
|
|
||||||
bQuit->x = (width - bQuit->width) / 2;
|
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
||||||
bQuit->y = yBase + 32 * 2;
|
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 24 * 2;
|
||||||
|
|
||||||
|
bOptions->x = (width - bOptions->width) / 2;
|
||||||
|
bOptions->y = yBase + 24 * 3 + 24;
|
||||||
|
|
||||||
|
bQuit->x = (width - bQuit->width) / 2;
|
||||||
|
bQuit->y = yBase + 24 * 4 + 24;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
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 * 3;
|
||||||
|
|
||||||
#if APPLE_DEMO_PROMOTION
|
#if APPLE_DEMO_PROMOTION
|
||||||
bQuit->y += 16;
|
bQuit->y += 16;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
||||||
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 3;
|
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// bSound.y = bThirdPerson.y = 8;
|
// bSound.y = bThirdPerson.y = 8;
|
||||||
// bSound.x = 4;
|
// bSound.x = 4;
|
||||||
@@ -151,13 +189,15 @@ void PauseScreen::buttonClicked(Button* button) {
|
|||||||
minecraft->setScreen(NULL);
|
minecraft->setScreen(NULL);
|
||||||
//minecraft->grabMouse();
|
//minecraft->grabMouse();
|
||||||
}
|
}
|
||||||
if (button->id == bQuit->id) {
|
if (button->id == bQuit->id) {
|
||||||
minecraft->leaveGame();
|
minecraft->leaveGame();
|
||||||
}
|
}
|
||||||
if (button->id == bQuitAndSaveLocally->id) {
|
if (button->id == bQuitAndSaveLocally->id) {
|
||||||
minecraft->leaveGame(true);
|
minecraft->leaveGame(true);
|
||||||
}
|
}
|
||||||
|
if (button->id == bOptions->id) {
|
||||||
|
minecraft->setScreen(new OptionsScreen());
|
||||||
|
}
|
||||||
if (button->id == bServerVisibility->id) {
|
if (button->id == bServerVisibility->id) {
|
||||||
if (minecraft->raknetInstance && minecraft->netCallback && minecraft->raknetInstance->isServer()) {
|
if (minecraft->raknetInstance && minecraft->netCallback && minecraft->raknetInstance->isServer()) {
|
||||||
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
|
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
|
||||||
@@ -185,5 +225,5 @@ void PauseScreen::updateServerVisibilityText()
|
|||||||
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
|
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
|
||||||
bServerVisibility->msg = ss->allowsIncomingConnections()?
|
bServerVisibility->msg = ss->allowsIncomingConnections()?
|
||||||
"Server is visible"
|
"Server is visible"
|
||||||
: "Server is invisible";
|
: "Server is invisible";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,9 @@ private:
|
|||||||
Button* bQuit;
|
Button* bQuit;
|
||||||
Button* bQuitAndSaveLocally;
|
Button* bQuitAndSaveLocally;
|
||||||
Button* bServerVisibility;
|
Button* bServerVisibility;
|
||||||
// Button* bThirdPerson;
|
Button* bOptions;
|
||||||
|
|
||||||
|
// Button* bThirdPerson;
|
||||||
|
|
||||||
// OptionButton bSound;
|
// OptionButton bSound;
|
||||||
OptionButton bThirdPerson;
|
OptionButton bThirdPerson;
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ public:
|
|||||||
void render(int xm, int ym, float a);
|
void render(int xm, int ym, float a);
|
||||||
bool isInGameScreen();
|
bool isInGameScreen();
|
||||||
|
|
||||||
|
virtual void keyPressed(int eventKey) {}
|
||||||
|
|
||||||
void tick();
|
void tick();
|
||||||
private:
|
private:
|
||||||
int ticks;
|
int ticks;
|
||||||
|
|||||||
@@ -14,14 +14,14 @@
|
|||||||
|
|
||||||
#include "../../Minecraft.h"
|
#include "../../Minecraft.h"
|
||||||
|
|
||||||
#include <client/gui/screens/UsernameScreen.h>
|
#include "UsernameScreen.h"
|
||||||
|
|
||||||
Screen* ScreenChooser::createScreen( ScreenId id )
|
Screen* ScreenChooser::createScreen( ScreenId id )
|
||||||
{
|
{
|
||||||
Screen* screen = NULL;
|
Screen* screen = NULL;
|
||||||
|
|
||||||
// :sob:
|
// :sob:
|
||||||
if (_mc->useTouchscreen()) {
|
if (_mc->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break;
|
case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break;
|
||||||
case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break;
|
case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break;
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ void SimpleChooseLevelScreen::init()
|
|||||||
def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
|
def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
|
||||||
bBack->setImageDef(def, true);
|
bBack->setImageDef(def, true);
|
||||||
}
|
}
|
||||||
if (minecraft->useTouchscreen()) {
|
if (/* minecraft->useTouchscreen() */ true) {
|
||||||
bGamemode = new Touch::TButton(1, "Survival mode");
|
bGamemode = new Touch::TButton(1, "Survival mode");
|
||||||
bCheats = new Touch::TButton(4, "Cheats: Off");
|
bCheats = new Touch::TButton(4, "Cheats: Off");
|
||||||
bCreate = new Touch::TButton(3, "Create");
|
bCreate = new Touch::TButton(3, "Create");
|
||||||
|
|||||||
@@ -23,49 +23,62 @@
|
|||||||
|
|
||||||
// Some kind of default settings, might be overridden in ::init
|
// Some kind of default settings, might be overridden in ::init
|
||||||
StartMenuScreen::StartMenuScreen()
|
StartMenuScreen::StartMenuScreen()
|
||||||
: bHost( 2, 0, 0, 160, 24, "Start Game"),
|
|
||||||
bJoin( 3, 0, 0, 160, 24, "Join Game"),
|
|
||||||
bOptions( 4, 0, 0, 160, 24, "Options"),
|
|
||||||
bQuit( 5, "")
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
StartMenuScreen::~StartMenuScreen()
|
StartMenuScreen::~StartMenuScreen()
|
||||||
{
|
{
|
||||||
|
delete bHost;
|
||||||
|
delete bJoin;
|
||||||
|
delete bOptions;
|
||||||
|
delete bQuit;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartMenuScreen::init()
|
void StartMenuScreen::init()
|
||||||
{
|
{
|
||||||
bJoin.active = bHost.active = bOptions.active = true;
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||||
|
bHost = new Button( 2, 0, 0, 200, 20, "Singleplayer");
|
||||||
|
bJoin = new Button( 3, 0, 0, 200, 20, "Multiplayer");
|
||||||
|
bOptions = new Button( 4, 0, 0, 200, 20, "Options...");
|
||||||
|
bQuit = new Button( 5, 0, 0, 200, 20, "Ouit Game");
|
||||||
|
} else {
|
||||||
|
bHost = new Button( 2, 0, 0, 160, 24, "Start Game");
|
||||||
|
bJoin = new Button( 3, 0, 0, 160, 24, "Join Game");
|
||||||
|
bOptions = new Button( 4, 0, 0, 160, 24, "Options");
|
||||||
|
bQuit = new Button( 5, 0, 0, 160, 24, "Ouit Game");
|
||||||
|
}
|
||||||
|
bJoin->active = bHost->active = bOptions->active = true;
|
||||||
|
|
||||||
if (minecraft->options.getStringValue(OPTIONS_USERNAME).empty()) {
|
if (minecraft->options.getStringValue(OPTIONS_USERNAME).empty()) {
|
||||||
return; // tick() will redirect to UsernameScreen
|
return; // tick() will redirect to UsernameScreen
|
||||||
}
|
}
|
||||||
|
|
||||||
buttons.push_back(&bHost);
|
buttons.push_back(bHost);
|
||||||
buttons.push_back(&bJoin);
|
buttons.push_back(bJoin);
|
||||||
//buttons.push_back(&bTest);
|
//buttons.push_back(&bTest);
|
||||||
|
buttons.push_back(bQuit);
|
||||||
|
|
||||||
tabButtons.push_back(&bHost);
|
tabButtons.push_back(bHost);
|
||||||
tabButtons.push_back(&bJoin);
|
tabButtons.push_back(bJoin);
|
||||||
|
tabButtons.push_back(bQuit);
|
||||||
|
|
||||||
#ifndef RPI
|
#ifndef RPI
|
||||||
buttons.push_back(&bOptions);
|
buttons.push_back(bOptions);
|
||||||
tabButtons.push_back(&bOptions);
|
tabButtons.push_back(bOptions);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// add quit button (top right X icon) – match OptionsScreen style
|
//// add quit button (top right X icon) – match OptionsScreen style
|
||||||
{
|
//{
|
||||||
ImageDef def;
|
// ImageDef def;
|
||||||
def.name = "gui/touchgui.png";
|
// def.name = "gui/touchgui.png";
|
||||||
def.width = 34;
|
// def.width = 34;
|
||||||
def.height = 26;
|
// def.height = 26;
|
||||||
def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
|
// def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
|
||||||
bQuit.setImageDef(def, true);
|
// bQuit.setImageDef(def, true);
|
||||||
bQuit.scaleWhenPressed = false;
|
// bQuit.scaleWhenPressed = false;
|
||||||
buttons.push_back(&bQuit);
|
// buttons.push_back(&bQuit);
|
||||||
// don't include in tab navigation
|
// // don't include in tab navigation
|
||||||
}
|
//}
|
||||||
|
|
||||||
copyright = "\xffMojang AB";//. Do not distribute!";
|
copyright = "\xffMojang AB";//. Do not distribute!";
|
||||||
|
|
||||||
@@ -93,20 +106,30 @@ void StartMenuScreen::init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void StartMenuScreen::setupPositions() {
|
void StartMenuScreen::setupPositions() {
|
||||||
int yBase = height / 2;
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||||
|
int yBase = (height / 2) - 20;
|
||||||
|
|
||||||
bHost.y = yBase;
|
bHost->y = yBase;
|
||||||
bJoin.y = bHost.y + 24 + 4;
|
bJoin->y = bHost->y + 24;
|
||||||
bOptions.y = bJoin.y + 24 + 4;
|
bOptions->y = bJoin->y + 24;
|
||||||
|
bQuit->y = bOptions->y + 24;
|
||||||
|
} else {
|
||||||
|
int yBase = height / 2;
|
||||||
|
bHost->y = yBase;
|
||||||
|
bJoin->y = bHost->y + 24 + 4;
|
||||||
|
bOptions->y = bJoin->y + 24 + 4;
|
||||||
|
bQuit->y = bOptions->y + 24 + 4;
|
||||||
|
}
|
||||||
|
|
||||||
// Center buttons
|
// Center buttons
|
||||||
bHost.x = (width - bHost.width) / 2;
|
bHost->x = (width - bHost->width) / 2;
|
||||||
bJoin.x = (width - bJoin.width) / 2;
|
bJoin->x = (width - bJoin->width) / 2;
|
||||||
bOptions.x = (width - bOptions.width) / 2;
|
bOptions->x = (width - bOptions->width) / 2;
|
||||||
|
bQuit->x = (width - bQuit->width) / 2;
|
||||||
|
|
||||||
// position quit icon at top-right (use image-defined size)
|
//// position quit icon at top-right (use image-defined size)
|
||||||
bQuit.x = width - bQuit.width;
|
//bQuit.x = width - bQuit.width;
|
||||||
bQuit.y = 0;
|
//bQuit.y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartMenuScreen::tick() {
|
void StartMenuScreen::tick() {
|
||||||
@@ -114,7 +137,7 @@ void StartMenuScreen::tick() {
|
|||||||
|
|
||||||
void StartMenuScreen::buttonClicked(Button* button) {
|
void StartMenuScreen::buttonClicked(Button* button) {
|
||||||
|
|
||||||
if (button->id == bHost.id)
|
if (button->id == bHost->id)
|
||||||
{
|
{
|
||||||
#if defined(DEMO_MODE) || defined(APPLE_DEMO_PROMOTION)
|
#if defined(DEMO_MODE) || defined(APPLE_DEMO_PROMOTION)
|
||||||
minecraft->setScreen( new SimpleChooseLevelScreen("_DemoLevel") );
|
minecraft->setScreen( new SimpleChooseLevelScreen("_DemoLevel") );
|
||||||
@@ -122,16 +145,16 @@ void StartMenuScreen::buttonClicked(Button* button) {
|
|||||||
minecraft->screenChooser.setScreen(SCREEN_SELECTWORLD);
|
minecraft->screenChooser.setScreen(SCREEN_SELECTWORLD);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (button->id == bJoin.id)
|
if (button->id == bJoin->id)
|
||||||
{
|
{
|
||||||
minecraft->locateMultiplayer();
|
minecraft->locateMultiplayer();
|
||||||
minecraft->screenChooser.setScreen(SCREEN_JOINGAME);
|
minecraft->screenChooser.setScreen(SCREEN_JOINGAME);
|
||||||
}
|
}
|
||||||
if (button->id == bOptions.id)
|
if (button->id == bOptions->id)
|
||||||
{
|
{
|
||||||
minecraft->setScreen(new OptionsScreen());
|
minecraft->setScreen(new OptionsScreen());
|
||||||
}
|
}
|
||||||
if (button == &bQuit)
|
if (button->id == bQuit->id)
|
||||||
{
|
{
|
||||||
minecraft->quit();
|
minecraft->quit();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,10 +23,10 @@ public:
|
|||||||
bool isInGameScreen();
|
bool isInGameScreen();
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Button bHost;
|
Button* bHost;
|
||||||
Button bJoin;
|
Button* bJoin;
|
||||||
Button bOptions;
|
Button* bOptions;
|
||||||
ImageButton bQuit; // X button in top-right corner
|
Button* bQuit;
|
||||||
|
|
||||||
std::string copyright;
|
std::string copyright;
|
||||||
int copyrightPosX;
|
int copyrightPosX;
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ void UsernameScreen::setupPositions()
|
|||||||
// Make the done button match the touch-style option tabs
|
// Make the done button match the touch-style option tabs
|
||||||
_btnDone.width = 66;
|
_btnDone.width = 66;
|
||||||
_btnDone.height = 26;
|
_btnDone.height = 26;
|
||||||
_btnDone.x = (width - _btnDone.width) / 2;
|
_btnDone.x = cx - (_btnDone.width / 2);
|
||||||
_btnDone.y = height / 2 + 52;
|
_btnDone.y = cy + 52;
|
||||||
|
|
||||||
tUsername.width = 120;
|
tUsername.width = 120;
|
||||||
tUsername.height = 20;
|
tUsername.height = 20;
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
|
|
||||||
#include "../Screen.h"
|
#include "../Screen.h"
|
||||||
#include "../components/Button.h"
|
#include "../components/Button.h"
|
||||||
#include "client/gui/components/TextBox.h"
|
// this is cursed lol
|
||||||
|
#include "../../../client/gui/components/TextBox.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class UsernameScreen : public Screen
|
class UsernameScreen : public Screen
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public:
|
|||||||
//fill(x+1, y+1, x+w-1, y+h-1, 0xff999999);
|
//fill(x+1, y+1, x+w-1, y+h-1, 0xff999999);
|
||||||
|
|
||||||
bool hovered = active && (minecraft->useTouchscreen()?
|
bool hovered = active && (minecraft->useTouchscreen()?
|
||||||
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
|
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
|
||||||
|
|
||||||
if (hovered || *selectedPtr == this)
|
if (hovered || *selectedPtr == this)
|
||||||
statePressed->draw(Tesselator::instance, (float)x, (float)y);
|
statePressed->draw(Tesselator::instance, (float)x, (float)y);
|
||||||
@@ -547,7 +547,7 @@ void CraftButton::renderBg(Minecraft* minecraft, int xm, int ym) {
|
|||||||
//fill(x+1, y+1, x+w-1, y+h-1, 0xff999999);
|
//fill(x+1, y+1, x+w-1, y+h-1, 0xff999999);
|
||||||
|
|
||||||
bool hovered = active && (minecraft->useTouchscreen()?
|
bool hovered = active && (minecraft->useTouchscreen()?
|
||||||
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
|
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
|
||||||
|
|
||||||
if (hovered || selected)
|
if (hovered || selected)
|
||||||
bgSelected->draw(Tesselator::instance, (float)x, (float)y);
|
bgSelected->draw(Tesselator::instance, (float)x, (float)y);
|
||||||
|
|||||||
@@ -1,291 +1,293 @@
|
|||||||
#include "TouchIngameBlockSelectionScreen.h"
|
#include "TouchIngameBlockSelectionScreen.h"
|
||||||
#include "../crafting/WorkbenchScreen.h"
|
#include "../crafting/WorkbenchScreen.h"
|
||||||
#include "../../Screen.h"
|
#include "../../Screen.h"
|
||||||
#include "../../components/ImageButton.h"
|
#include "../../components/ImageButton.h"
|
||||||
#include "../../components/InventoryPane.h"
|
#include "../../components/InventoryPane.h"
|
||||||
#include "../../../gamemode/GameMode.h"
|
#include "../../../gamemode/GameMode.h"
|
||||||
#include "../../../renderer/TileRenderer.h"
|
#include "../../../renderer/TileRenderer.h"
|
||||||
#include "../../../player/LocalPlayer.h"
|
#include "../../../player/LocalPlayer.h"
|
||||||
#include "../../../renderer/gles.h"
|
#include "../../../renderer/gles.h"
|
||||||
#include "../../../renderer/entity/ItemRenderer.h"
|
#include "../../../renderer/entity/ItemRenderer.h"
|
||||||
#include "../../../renderer/Tesselator.h"
|
#include "../../../renderer/Tesselator.h"
|
||||||
#include "../../../renderer/Textures.h"
|
#include "../../../renderer/Textures.h"
|
||||||
#include "../../../Minecraft.h"
|
#include "../../../Minecraft.h"
|
||||||
#include "../../../sound/SoundEngine.h"
|
#include "../../../sound/SoundEngine.h"
|
||||||
#include "../../../../world/entity/player/Inventory.h"
|
#include "../../../../world/entity/player/Inventory.h"
|
||||||
#include "../../../../platform/input/Mouse.h"
|
#include "../../../../platform/input/Mouse.h"
|
||||||
#include "../../../../util/Mth.h"
|
#include "../../../../util/Mth.h"
|
||||||
#include "../../../../world/item/ItemInstance.h"
|
#include "../../../../world/item/ItemInstance.h"
|
||||||
#include "../../../../world/entity/player/Player.h"
|
#include "../../../../world/entity/player/Player.h"
|
||||||
#include "../../../../world/item/crafting/Recipe.h"
|
#include "../../../../world/item/crafting/Recipe.h"
|
||||||
#include "../../../player/input/touchscreen/TouchAreaModel.h"
|
#include "../../../player/input/touchscreen/TouchAreaModel.h"
|
||||||
#include "../ArmorScreen.h"
|
#include "../ArmorScreen.h"
|
||||||
|
|
||||||
namespace Touch {
|
namespace Touch {
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
static const std::string demoVersionString("Not available in the Lite version");
|
static const std::string demoVersionString("Not available in the Lite version");
|
||||||
#else
|
#else
|
||||||
static const std::string demoVersionString("Not available in the demo version");
|
static const std::string demoVersionString("Not available in the demo version");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
static const float BorderPixels = 4;
|
static const float BorderPixels = 4;
|
||||||
#ifdef DEMO_MODE
|
#ifdef DEMO_MODE
|
||||||
static const float BlockPixels = 22;
|
static const float BlockPixels = 22;
|
||||||
#else
|
#else
|
||||||
static const float BlockPixels = 22;
|
static const float BlockPixels = 22;
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
static const float BorderPixels = 4;
|
static const float BorderPixels = 4;
|
||||||
static const float BlockPixels = 24;
|
static const float BlockPixels = 24;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const int ItemSize = (int)(BlockPixels + 2*BorderPixels);
|
static const int ItemSize = (int)(BlockPixels + 2*BorderPixels);
|
||||||
|
|
||||||
static const int Bx = 10; // Border Frame width
|
static const int Bx = 10; // Border Frame width
|
||||||
static const int By = 6; // Border Frame height
|
static const int By = 6; // Border Frame height
|
||||||
|
|
||||||
//
|
//
|
||||||
// Block selection screen
|
// Block selection screen
|
||||||
//
|
//
|
||||||
IngameBlockSelectionScreen::IngameBlockSelectionScreen()
|
IngameBlockSelectionScreen::IngameBlockSelectionScreen()
|
||||||
: selectedItem(0),
|
: selectedItem(0),
|
||||||
_blockList(NULL),
|
_blockList(NULL),
|
||||||
_pendingClose(false),
|
_pendingClose(false),
|
||||||
bArmor (4, "Armor"),
|
bArmor (4, "Armor"),
|
||||||
bDone (3, ""),
|
bDone (3, ""),
|
||||||
//bDone (3, "Done"),
|
//bDone (3, "Done"),
|
||||||
bMenu (2, "Menu"),
|
bMenu (2, "Menu"),
|
||||||
bCraft (1, "Craft"),
|
bCraft (1, "Craft"),
|
||||||
bHeader (0, "Select blocks")
|
bHeader (0, "Select blocks")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
IngameBlockSelectionScreen::~IngameBlockSelectionScreen()
|
IngameBlockSelectionScreen::~IngameBlockSelectionScreen()
|
||||||
{
|
{
|
||||||
delete _blockList;
|
delete _blockList;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IngameBlockSelectionScreen::init()
|
void IngameBlockSelectionScreen::init()
|
||||||
{
|
{
|
||||||
Inventory* inventory = minecraft->player->inventory;
|
Inventory* inventory = minecraft->player->inventory;
|
||||||
|
|
||||||
//const int itemWidth = 2 * BorderPixels +
|
//const int itemWidth = 2 * BorderPixels +
|
||||||
|
|
||||||
int maxWidth = width - Bx - Bx;
|
int maxWidth = width - Bx - Bx;
|
||||||
InventoryColumns = maxWidth / ItemSize;
|
InventoryColumns = maxWidth / ItemSize;
|
||||||
const int realWidth = InventoryColumns * ItemSize;
|
const int realWidth = InventoryColumns * ItemSize;
|
||||||
const int realBx = (width - realWidth) / 2;
|
const int realBx = (width - realWidth) / 2;
|
||||||
|
|
||||||
IntRectangle rect(realBx,
|
IntRectangle rect(realBx,
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
24 + By - ((width==240)?1:0), realWidth, ((width==240)?1:0) + height-By-By-20-24);
|
24 + By - ((width==240)?1:0), realWidth, ((width==240)?1:0) + height-By-By-20-24);
|
||||||
#else
|
#else
|
||||||
24 + By, realWidth, height-By-By-20-24);
|
24 + By, realWidth, height-By-By-20-24);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_blockList = new InventoryPane(this, minecraft, rect, width, BorderPixels, inventory->getContainerSize() - Inventory::MAX_SELECTION_SIZE, ItemSize, (int)BorderPixels);
|
_blockList = new InventoryPane(this, minecraft, rect, width, BorderPixels, inventory->getContainerSize() - Inventory::MAX_SELECTION_SIZE, ItemSize, (int)BorderPixels);
|
||||||
_blockList->fillMarginX = realBx;
|
_blockList->fillMarginX = realBx;
|
||||||
|
|
||||||
//for (int i = 0; i < inventory->getContainerSize(); ++i)
|
//for (int i = 0; i < inventory->getContainerSize(); ++i)
|
||||||
//LOGI("> %d - %s\n", i, inventory->getItem(i)? inventory->getItem(i)->getDescriptionId().c_str() : "<-->\n");
|
//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.
|
||||||
InventoryRows = 1 + (InventorySize-1) / InventoryColumns;
|
InventorySize = inventory->getContainerSize() - Inventory::MAX_SELECTION_SIZE;
|
||||||
|
InventoryRows = 1 + (InventorySize-1) / InventoryColumns;
|
||||||
//
|
|
||||||
// Buttons
|
//
|
||||||
//
|
// Buttons
|
||||||
ImageDef def;
|
//
|
||||||
def.name = "gui/spritesheet.png";
|
ImageDef def;
|
||||||
def.x = 0;
|
def.name = "gui/spritesheet.png";
|
||||||
def.y = 1;
|
def.x = 0;
|
||||||
def.width = def.height = 18;
|
def.y = 1;
|
||||||
def.setSrc(IntRectangle(60, 0, 18, 18));
|
def.width = def.height = 18;
|
||||||
bDone.setImageDef(def, true);
|
def.setSrc(IntRectangle(60, 0, 18, 18));
|
||||||
bDone.width = bDone.height = 19;
|
bDone.setImageDef(def, true);
|
||||||
|
bDone.width = bDone.height = 19;
|
||||||
bDone.scaleWhenPressed = false;
|
|
||||||
|
bDone.scaleWhenPressed = false;
|
||||||
buttons.push_back(&bHeader);
|
|
||||||
buttons.push_back(&bDone);
|
buttons.push_back(&bHeader);
|
||||||
if (!minecraft->isCreativeMode()) {
|
buttons.push_back(&bDone);
|
||||||
buttons.push_back(&bCraft);
|
if (!minecraft->isCreativeMode()) {
|
||||||
buttons.push_back(&bArmor);
|
buttons.push_back(&bCraft);
|
||||||
}
|
buttons.push_back(&bArmor);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
void IngameBlockSelectionScreen::setupPositions() {
|
|
||||||
bHeader.y = bDone.y = bCraft.y = 0;
|
void IngameBlockSelectionScreen::setupPositions() {
|
||||||
bDone.x = width - bDone.width;
|
bHeader.y = bDone.y = bCraft.y = 0;
|
||||||
bCraft.x = 0;//width - bDone.w - bCraft.w;
|
bDone.x = width - bDone.width;
|
||||||
bCraft.width = bArmor.width = 48;
|
bCraft.x = 0;//width - bDone.w - bCraft.w;
|
||||||
bArmor.x = bCraft.width;
|
bCraft.width = bArmor.width = 48;
|
||||||
|
bArmor.x = bCraft.width;
|
||||||
if (minecraft->isCreativeMode()) {
|
|
||||||
bHeader.x = 0;
|
if (minecraft->isCreativeMode()) {
|
||||||
bHeader.width = width;// - bDone.w;
|
bHeader.x = 0;
|
||||||
bHeader.xText = width/2; // Center of the screen
|
bHeader.width = width;// - bDone.w;
|
||||||
} else {
|
bHeader.xText = width/2; // Center of the screen
|
||||||
bHeader.x = bCraft.width + bArmor.width;
|
} else {
|
||||||
bHeader.width = width - bCraft.width - bArmor.width;// - bDone.w;
|
bHeader.x = bCraft.width + bArmor.width;
|
||||||
bHeader.xText = bHeader.x + (bHeader.width - bDone.width) /2;
|
bHeader.width = width - bCraft.width - bArmor.width;// - bDone.w;
|
||||||
}
|
bHeader.xText = bHeader.x + (bHeader.width - bDone.width) /2;
|
||||||
|
}
|
||||||
clippingArea.x = 0;
|
|
||||||
clippingArea.w = minecraft->width;
|
clippingArea.x = 0;
|
||||||
clippingArea.y = 0;
|
clippingArea.w = minecraft->width;
|
||||||
clippingArea.h = (int)(Gui::GuiScale * 24);
|
clippingArea.y = 0;
|
||||||
}
|
clippingArea.h = (int)(Gui::GuiScale * 24);
|
||||||
|
}
|
||||||
void IngameBlockSelectionScreen::removed()
|
|
||||||
{
|
void IngameBlockSelectionScreen::removed()
|
||||||
minecraft->gui.inventoryUpdated();
|
{
|
||||||
}
|
minecraft->gui.inventoryUpdated();
|
||||||
|
}
|
||||||
int IngameBlockSelectionScreen::getSlotPosX(int slotX) {
|
|
||||||
// @todo: Number of columns
|
int IngameBlockSelectionScreen::getSlotPosX(int slotX) {
|
||||||
return width / 2 - InventoryColumns * 10 + slotX * 20 + 2;
|
// @todo: Number of columns
|
||||||
}
|
return width / 2 - InventoryColumns * 10 + slotX * 20 + 2;
|
||||||
|
}
|
||||||
int IngameBlockSelectionScreen::getSlotPosY(int slotY) {
|
|
||||||
return height - 16 - 3 - 22 * 2 - 22 * slotY;
|
int IngameBlockSelectionScreen::getSlotPosY(int slotY) {
|
||||||
}
|
return height - 16 - 3 - 22 * 2 - 22 * slotY;
|
||||||
|
}
|
||||||
int IngameBlockSelectionScreen::getSlotHeight() {
|
|
||||||
// same as non-touch implementation
|
int IngameBlockSelectionScreen::getSlotHeight() {
|
||||||
return 22;
|
// same as non-touch implementation
|
||||||
}
|
return 22;
|
||||||
|
}
|
||||||
void IngameBlockSelectionScreen::mouseClicked(int x, int y, int buttonNum) {
|
|
||||||
_pendingClose = _blockList->_clickArea->isInside((float)x, (float)y);
|
void IngameBlockSelectionScreen::mouseClicked(int x, int y, int buttonNum) {
|
||||||
if (!_pendingClose)
|
_pendingClose = _blockList->_clickArea->isInside((float)x, (float)y);
|
||||||
super::mouseClicked(x, y, buttonNum);
|
if (!_pendingClose)
|
||||||
}
|
super::mouseClicked(x, y, buttonNum);
|
||||||
|
}
|
||||||
void IngameBlockSelectionScreen::mouseReleased(int x, int y, int buttonNum) {
|
|
||||||
if (_pendingClose && _blockList->_clickArea->isInside((float)x, (float)y))
|
void IngameBlockSelectionScreen::mouseReleased(int x, int y, int buttonNum) {
|
||||||
minecraft->setScreen(NULL);
|
if (_pendingClose && _blockList->_clickArea->isInside((float)x, (float)y))
|
||||||
else
|
minecraft->setScreen(NULL);
|
||||||
super::mouseReleased(x, y, buttonNum);
|
else
|
||||||
}
|
super::mouseReleased(x, y, buttonNum);
|
||||||
|
}
|
||||||
void IngameBlockSelectionScreen::mouseWheel(int dx, int dy, int xm, int ym)
|
|
||||||
{
|
void IngameBlockSelectionScreen::mouseWheel(int dx, int dy, int xm, int ym)
|
||||||
if (dy == 0) return;
|
{
|
||||||
if (_blockList) {
|
if (dy == 0) return;
|
||||||
float amount = -dy * getSlotHeight();
|
if (_blockList) {
|
||||||
_blockList->scrollBy(0, amount);
|
float amount = -dy * getSlotHeight();
|
||||||
}
|
_blockList->scrollBy(0, amount);
|
||||||
int cols = InventoryColumns;
|
}
|
||||||
int maxIndex = InventorySize - 1;
|
int cols = InventoryColumns;
|
||||||
int idx = selectedItem;
|
int maxIndex = InventorySize - 1;
|
||||||
if (dy > 0) {
|
int idx = selectedItem;
|
||||||
if (idx >= cols) idx -= cols;
|
if (dy > 0) {
|
||||||
} else {
|
if (idx >= cols) idx -= cols;
|
||||||
if (idx + cols <= maxIndex) idx += cols;
|
} else {
|
||||||
}
|
if (idx + cols <= maxIndex) idx += cols;
|
||||||
selectedItem = idx;
|
}
|
||||||
}
|
selectedItem = idx;
|
||||||
|
}
|
||||||
bool IngameBlockSelectionScreen::addItem(const InventoryPane* pane, int itemId)
|
|
||||||
{
|
bool IngameBlockSelectionScreen::addItem(const InventoryPane* pane, int itemId)
|
||||||
Inventory* inventory = minecraft->player->inventory;
|
{
|
||||||
itemId += Inventory::MAX_SELECTION_SIZE;
|
Inventory* inventory = minecraft->player->inventory;
|
||||||
|
itemId += Inventory::MAX_SELECTION_SIZE;
|
||||||
if (!inventory->getItem(itemId))
|
|
||||||
return false;
|
if (!inventory->getItem(itemId))
|
||||||
|
return false;
|
||||||
inventory->moveToSelectionSlot(0, itemId, true);
|
|
||||||
|
inventory->moveToSelectionSlot(0, itemId, true);
|
||||||
inventory->selectSlot(0);
|
|
||||||
#ifdef __APPLE__
|
inventory->selectSlot(0);
|
||||||
minecraft->soundEngine->playUI("random.pop", 0.3f, 0.3f);//1.0f + 0.2f*(Mth::random()-Mth::random()));
|
#ifdef __APPLE__
|
||||||
#else
|
minecraft->soundEngine->playUI("random.pop", 0.3f, 0.3f);//1.0f + 0.2f*(Mth::random()-Mth::random()));
|
||||||
minecraft->soundEngine->playUI("random.pop2", 1.0f, 0.3f);//1.0f + 0.2f*(Mth::random()-Mth::random()));
|
#else
|
||||||
#endif
|
minecraft->soundEngine->playUI("random.pop2", 1.0f, 0.3f);//1.0f + 0.2f*(Mth::random()-Mth::random()));
|
||||||
|
#endif
|
||||||
// Flash the selected gui item
|
|
||||||
minecraft->gui.flashSlot(inventory->selected);
|
// Flash the selected gui item
|
||||||
return true;
|
minecraft->gui.flashSlot(inventory->selected);
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
void IngameBlockSelectionScreen::tick()
|
|
||||||
{
|
void IngameBlockSelectionScreen::tick()
|
||||||
_blockList->tick();
|
{
|
||||||
super::tick();
|
_blockList->tick();
|
||||||
}
|
super::tick();
|
||||||
|
}
|
||||||
void IngameBlockSelectionScreen::render( int xm, int ym, float a )
|
|
||||||
{
|
void IngameBlockSelectionScreen::render( int xm, int ym, float a )
|
||||||
glDisable2(GL_DEPTH_TEST);
|
{
|
||||||
glEnable2(GL_BLEND);
|
glDisable2(GL_DEPTH_TEST);
|
||||||
|
glEnable2(GL_BLEND);
|
||||||
Screen::render(xm, ym, a);
|
|
||||||
_blockList->render(xm, ym, a);
|
Screen::render(xm, ym, a);
|
||||||
|
_blockList->render(xm, ym, a);
|
||||||
// render frame
|
|
||||||
IntRectangle& bbox = _blockList->rect;
|
// render frame
|
||||||
Tesselator::instance.colorABGR(0xffffffff);
|
IntRectangle& bbox = _blockList->rect;
|
||||||
minecraft->textures->loadAndBindTexture("gui/itemframe.png");
|
Tesselator::instance.colorABGR(0xffffffff);
|
||||||
glEnable2(GL_BLEND);
|
minecraft->textures->loadAndBindTexture("gui/itemframe.png");
|
||||||
glColor4f2(1, 1, 1, 1);
|
glEnable2(GL_BLEND);
|
||||||
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glColor4f2(1, 1, 1, 1);
|
||||||
blit(0, bbox.y-By, 0, 0, width, bbox.h+By+By, 215, 256); // why bbox.h + 1*B?
|
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glDisable2(GL_BLEND);
|
blit(0, bbox.y-By, 0, 0, width, bbox.h+By+By, 215, 256); // why bbox.h + 1*B?
|
||||||
|
glDisable2(GL_BLEND);
|
||||||
glEnable2(GL_DEPTH_TEST);
|
|
||||||
}
|
glEnable2(GL_DEPTH_TEST);
|
||||||
|
}
|
||||||
void IngameBlockSelectionScreen::renderDemoOverlay() {
|
|
||||||
#ifdef DEMO_MODE
|
void IngameBlockSelectionScreen::renderDemoOverlay() {
|
||||||
fill( getSlotPosX(0) - 3, getSlotPosY(1) - 3,
|
#ifdef DEMO_MODE
|
||||||
getSlotPosX(9) - 3, getSlotPosY(-1) - 3, 0xa0 << 24);
|
fill( getSlotPosX(0) - 3, getSlotPosY(1) - 3,
|
||||||
|
getSlotPosX(9) - 3, getSlotPosY(-1) - 3, 0xa0 << 24);
|
||||||
const int centerX = (getSlotPosX(4) + getSlotPosX(5)) / 2;
|
|
||||||
const int centerY = (getSlotPosY(0) + getSlotPosY(1)) / 2 + 5;
|
const int centerX = (getSlotPosX(4) + getSlotPosX(5)) / 2;
|
||||||
drawCenteredString(minecraft->font, demoVersionString, centerX, centerY, 0xffffffff);
|
const int centerY = (getSlotPosY(0) + getSlotPosY(1)) / 2 + 5;
|
||||||
#endif /*DEMO_MODE*/
|
drawCenteredString(minecraft->font, demoVersionString, centerX, centerY, 0xffffffff);
|
||||||
}
|
#endif /*DEMO_MODE*/
|
||||||
|
}
|
||||||
void IngameBlockSelectionScreen::buttonClicked(Button* button) {
|
|
||||||
if (button->id == bDone.id)
|
void IngameBlockSelectionScreen::buttonClicked(Button* button) {
|
||||||
minecraft->setScreen(NULL);
|
if (button->id == bDone.id)
|
||||||
|
minecraft->setScreen(NULL);
|
||||||
if (button->id == bMenu.id)
|
|
||||||
minecraft->screenChooser.setScreen(SCREEN_PAUSE);
|
if (button->id == bMenu.id)
|
||||||
|
minecraft->screenChooser.setScreen(SCREEN_PAUSE);
|
||||||
if (button->id == bCraft.id)
|
|
||||||
minecraft->setScreen(new WorkbenchScreen(Recipe::SIZE_2X2));
|
if (button->id == bCraft.id)
|
||||||
|
minecraft->setScreen(new WorkbenchScreen(Recipe::SIZE_2X2));
|
||||||
if (button == &bArmor)
|
|
||||||
minecraft->setScreen(new ArmorScreen());
|
if (button == &bArmor)
|
||||||
}
|
minecraft->setScreen(new ArmorScreen());
|
||||||
|
}
|
||||||
bool IngameBlockSelectionScreen::isAllowed( int slot )
|
|
||||||
{
|
bool IngameBlockSelectionScreen::isAllowed( int slot )
|
||||||
if (slot < 0 || slot >= minecraft->player->inventory->getContainerSize())
|
{
|
||||||
return false;
|
const int gridCount = minecraft->player->inventory->getContainerSize() - Inventory::MAX_SELECTION_SIZE;
|
||||||
|
if (slot < 0 || slot >= gridCount)
|
||||||
#ifdef DEMO_MODE
|
return false;
|
||||||
if (slot >= (minecraft->isCreativeMode()? 28 : 27)) return false;
|
|
||||||
#endif
|
#ifdef DEMO_MODE
|
||||||
return true;
|
if (slot >= (minecraft->isCreativeMode()? 28 : 27)) return false;
|
||||||
}
|
#endif
|
||||||
|
return true;
|
||||||
bool IngameBlockSelectionScreen::hasClippingArea( IntRectangle& out )
|
}
|
||||||
{
|
|
||||||
out = clippingArea;
|
bool IngameBlockSelectionScreen::hasClippingArea( IntRectangle& out )
|
||||||
return true;
|
{
|
||||||
}
|
out = clippingArea;
|
||||||
|
return true;
|
||||||
std::vector<const ItemInstance*> IngameBlockSelectionScreen::getItems( const InventoryPane* forPane )
|
}
|
||||||
{
|
|
||||||
std::vector<const ItemInstance*> out;
|
std::vector<const ItemInstance*> IngameBlockSelectionScreen::getItems( const InventoryPane* forPane )
|
||||||
for (int i = Inventory::MAX_SELECTION_SIZE; i < minecraft->player->inventory->getContainerSize(); ++i)
|
{
|
||||||
out.push_back(minecraft->player->inventory->getItem(i));
|
std::vector<const ItemInstance*> out;
|
||||||
return out;
|
for (int i = Inventory::MAX_SELECTION_SIZE; i < minecraft->player->inventory->getContainerSize(); ++i)
|
||||||
}
|
out.push_back(minecraft->player->inventory->getItem(i));
|
||||||
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ void ModelPart::compile( float scale )
|
|||||||
void ModelPart::draw()
|
void ModelPart::draw()
|
||||||
{
|
{
|
||||||
#ifdef OPENGL_ES
|
#ifdef OPENGL_ES
|
||||||
drawArrayVT_NoState(vboId, cubes.size() * 2 * 3 * 6, 24);
|
drawArrayVTN_NoState(vboId, cubes.size() * 2 * 3 * 6, 36);
|
||||||
#else
|
#else
|
||||||
glCallList(list);
|
glCallList(list);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -43,6 +43,18 @@ void PolygonQuad::mirror() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PolygonQuad::render(Tesselator& t, float scale, int vboId /* = -1 */) {
|
void PolygonQuad::render(Tesselator& t, float scale, int vboId /* = -1 */) {
|
||||||
|
Vec3 v0 = vertices[0].pos - vertices[1].pos;
|
||||||
|
Vec3 v1 = vertices[2].pos - vertices[1].pos;
|
||||||
|
Vec3 n = v1.cross(v0).normalized();
|
||||||
|
if (_flipNormal == true)
|
||||||
|
{
|
||||||
|
t.normal(-n.x , -n.y , -n.z );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
t.normal(n.x , n.y , n.z );
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
VertexPT& v = vertices[i];
|
VertexPT& v = vertices[i];
|
||||||
t.vertexUV(v.pos.x * scale, v.pos.y * scale, v.pos.z * scale, v.u, v.v);
|
t.vertexUV(v.pos.x * scale, v.pos.y * scale, v.pos.z * scale, v.u, v.v);
|
||||||
|
|||||||
@@ -388,6 +388,12 @@ void LocalPlayer::calculateFlight(float xa, float ya, float za) {
|
|||||||
ya = 0;
|
ya = 0;
|
||||||
za = za * flySpeed;
|
za = za * flySpeed;
|
||||||
|
|
||||||
|
if (sprinting) {
|
||||||
|
float sprintBoost = getWalkingSpeedModifier(); // 1.3x
|
||||||
|
xa *= sprintBoost;
|
||||||
|
za *= sprintBoost;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef ANDROID
|
#ifdef ANDROID
|
||||||
if (Keyboard::isKeyDown(103)) ya = .2f * flySpeed;
|
if (Keyboard::isKeyDown(103)) ya = .2f * flySpeed;
|
||||||
if (Keyboard::isKeyDown(102)) ya = -.2f * flySpeed;
|
if (Keyboard::isKeyDown(102)) ya = -.2f * flySpeed;
|
||||||
@@ -506,7 +512,7 @@ void LocalPlayer::aiStep() {
|
|||||||
if (sprintDoubleTapTimer > 0) sprintDoubleTapTimer--;
|
if (sprintDoubleTapTimer > 0) sprintDoubleTapTimer--;
|
||||||
prevForwardHeld = forwardHeld;
|
prevForwardHeld = forwardHeld;
|
||||||
}
|
}
|
||||||
if (input->sneaking || abilities.flying)
|
if (input->sneaking)
|
||||||
sprinting = false;
|
sprinting = false;
|
||||||
|
|
||||||
if (input->sneaking) {
|
if (input->sneaking) {
|
||||||
|
|||||||
@@ -50,10 +50,8 @@ void KeyboardInput::tick( Player* player )
|
|||||||
ya *= 0.3f;
|
ya *= 0.3f;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(RPI) || defined(PLATFORM_DESKTOP)
|
wantUp = jumping;
|
||||||
wantUp = jumping;
|
wantDown = sneaking;
|
||||||
wantDown = sneaking;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (keys[KEY_CRAFT])
|
if (keys[KEY_CRAFT])
|
||||||
player->startCrafting((int)player->x, (int)player->y, (int)player->z, Recipe::SIZE_2X2);
|
player->startCrafting((int)player->x, (int)player->y, (int)player->z, Recipe::SIZE_2X2);
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ void TouchscreenInput_TestFps::onConfigChanged(const Config& c) {
|
|||||||
|
|
||||||
float maxPixels = _minecraft->pixelCalc.millimetersToPixels(10);
|
float maxPixels = _minecraft->pixelCalc.millimetersToPixels(10);
|
||||||
// float btnSize = Mth::Min(18 * Gui::GuiScale, maxPixels);
|
// 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_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));
|
_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)) {
|
if (Multitouch::isReleased(p)) {
|
||||||
_minecraft->soundEngine->playUI("random.click", 1, 1);
|
_minecraft->soundEngine->playUI("random.click", 1, 1);
|
||||||
_minecraft->screenChooser.setScreen(SCREEN_CONSOLE);
|
_minecraft->screenChooser.setScreen(SCREEN_CONSOLE);
|
||||||
|
_minecraft->platform()->showKeyboard();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,10 @@
|
|||||||
#include "../../world/level/Region.h"
|
#include "../../world/level/Region.h"
|
||||||
#include "../../world/level/chunk/LevelChunk.h"
|
#include "../../world/level/chunk/LevelChunk.h"
|
||||||
#include "../../util/Mth.h"
|
#include "../../util/Mth.h"
|
||||||
|
|
||||||
|
#include "../../world/level/biome/BiomeSource.h"
|
||||||
|
|
||||||
|
#include "../../world/level/Level.h"
|
||||||
//#include "../../platform/time.h"
|
//#include "../../platform/time.h"
|
||||||
|
|
||||||
/*static*/ int Chunk::updates = 0;
|
/*static*/ int Chunk::updates = 0;
|
||||||
@@ -259,4 +263,4 @@ void Chunk::resetUpdates()
|
|||||||
{
|
{
|
||||||
updates = 0;
|
updates = 0;
|
||||||
//swRebuild.reset();
|
//swRebuild.reset();
|
||||||
}
|
}
|
||||||
@@ -21,11 +21,12 @@
|
|||||||
#include "../../world/item/BowItem.h"
|
#include "../../world/item/BowItem.h"
|
||||||
#include "../../world/level/tile/LeafTile.h"
|
#include "../../world/level/tile/LeafTile.h"
|
||||||
#include "entity/HumanoidMobRenderer.h"
|
#include "entity/HumanoidMobRenderer.h"
|
||||||
|
#include "Lighting.h"
|
||||||
|
|
||||||
//static StopwatchHandler handler;
|
//static StopwatchHandler handler;
|
||||||
|
|
||||||
ItemInHandRenderer::ItemInHandRenderer( Minecraft* mc )
|
ItemInHandRenderer::ItemInHandRenderer( Minecraft* mc )
|
||||||
: mc(mc),
|
: mc(mc),
|
||||||
lastSlot(-1),
|
lastSlot(-1),
|
||||||
height(0),
|
height(0),
|
||||||
oHeight(0),
|
oHeight(0),
|
||||||
@@ -49,21 +50,47 @@ ItemInHandRenderer::ItemInHandRenderer( Minecraft* mc )
|
|||||||
void ItemInHandRenderer::tick()
|
void ItemInHandRenderer::tick()
|
||||||
{
|
{
|
||||||
oHeight = height;
|
oHeight = height;
|
||||||
item.id = 0;
|
//item.id = 0;
|
||||||
|
|
||||||
ItemInstance* itemInHand = mc->player->inventory->getSelected();
|
ItemInstance* itemInHand = mc->player->inventory->getSelected();
|
||||||
if (itemInHand && itemInHand->count > 0) {
|
bool sameItem = (itemInHand && item.id == itemInHand->id && item.getAuxValue() == itemInHand->getAuxValue());
|
||||||
item.id = itemInHand->id;
|
|
||||||
item.setAuxValue(itemInHand->getAuxValue());
|
|
||||||
|
|
||||||
|
if (mc->options.getBooleanValue(OPTIONS_RESTORED_ANIMS)) // if enabled, restores and fixes item switching animation
|
||||||
|
{
|
||||||
|
if (!itemInHand && item.id == 0) sameItem = true;
|
||||||
|
float max = 0.4f;
|
||||||
|
float tHeight = sameItem ? 1 : 0;
|
||||||
|
float dd = tHeight - height;
|
||||||
|
if (dd < -max) dd = -max;
|
||||||
|
if (dd > max) dd = max;
|
||||||
|
|
||||||
|
height += dd;
|
||||||
|
|
||||||
|
if (height < 0.1){
|
||||||
|
if (itemInHand && itemInHand->count > 0) {
|
||||||
|
item.id = itemInHand->id;
|
||||||
|
item.setAuxValue(itemInHand->getAuxValue());
|
||||||
|
} else {
|
||||||
|
item.id = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else // otherwise use vanilla broken behaviour where it instantly switches items/blocks
|
||||||
|
{
|
||||||
|
if (itemInHand && itemInHand->count > 0) {
|
||||||
|
item.id = itemInHand->id;
|
||||||
|
item.setAuxValue(itemInHand->getAuxValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
float max = 0.4f;
|
||||||
|
float tHeight = 1;//matches ? 1 : 0;
|
||||||
|
float dd = tHeight - height;
|
||||||
|
if (dd < -max) dd = -max;
|
||||||
|
if (dd > max) dd = max;
|
||||||
|
|
||||||
|
height += dd;
|
||||||
}
|
}
|
||||||
|
|
||||||
float max = 0.4f;
|
|
||||||
float tHeight = 1;//matches ? 1 : 0;
|
|
||||||
float dd = tHeight - height;
|
|
||||||
if (dd < -max) dd = -max;
|
|
||||||
if (dd > max) dd = max;
|
|
||||||
|
|
||||||
height += dd;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
||||||
@@ -92,7 +119,7 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
|||||||
if(mob != NULL) {
|
if(mob != NULL) {
|
||||||
itemIcon = mob->getItemInHandIcon(item, 0);
|
itemIcon = mob->getItemInHandIcon(item, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool reTesselate(false);
|
bool reTesselate(false);
|
||||||
if(itemIcon != lastIconRendered && lastItemRendered == itemId)
|
if(itemIcon != lastIconRendered && lastItemRendered == itemId)
|
||||||
reTesselate = true;
|
reTesselate = true;
|
||||||
@@ -139,9 +166,9 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
|||||||
float v1 = (vp * 16 + 15.99f) / 256.0f;
|
float v1 = (vp * 16 + 15.99f) / 256.0f;
|
||||||
|
|
||||||
float r = 1.0f;
|
float r = 1.0f;
|
||||||
// float xo = 0.0f;
|
// float xo = 0.0f;
|
||||||
// float yo = 0.3f;
|
// float yo = 0.3f;
|
||||||
/*
|
/*
|
||||||
//glEnable2(GL_RESCALE_NORMAL);
|
//glEnable2(GL_RESCALE_NORMAL);
|
||||||
glTranslatef2(-xo, -yo, 0);
|
glTranslatef2(-xo, -yo, 0);
|
||||||
float s = 1.5f;
|
float s = 1.5f;
|
||||||
@@ -150,19 +177,28 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
|||||||
glRotatef2(50, 0, 1, 0);
|
glRotatef2(50, 0, 1, 0);
|
||||||
glRotatef2(45 + 290, 0, 0, 1);
|
glRotatef2(45 + 290, 0, 0, 1);
|
||||||
glTranslatef2(-15 / 16.0f, -1 / 16.0f, 0);
|
glTranslatef2(-15 / 16.0f, -1 / 16.0f, 0);
|
||||||
*/
|
*/
|
||||||
float dd = 1 / 16.0f;
|
float dd = 1 / 16.0f;
|
||||||
|
float col = 1.0f;
|
||||||
|
float br = mc->player->getBrightness(0);
|
||||||
|
|
||||||
|
|
||||||
|
t.color(col*br,col*br,col*br,1.0f);
|
||||||
|
t.normal(0.0f, 0.0f, 1.0f);
|
||||||
t.vertexUV(0, 0, 0, u0, v1);
|
t.vertexUV(0, 0, 0, u0, v1);
|
||||||
t.vertexUV(r, 0, 0, u1, v1);
|
t.vertexUV(r, 0, 0, u1, v1);
|
||||||
t.vertexUV(r, 1, 0, u1, v0);
|
t.vertexUV(r, 1, 0, u1, v0);
|
||||||
t.vertexUV(0, 1, 0, u0, v0);
|
t.vertexUV(0, 1, 0, u0, v0);
|
||||||
|
|
||||||
|
t.normal(0.0f, 0.0f, -1.0f);
|
||||||
t.vertexUV(0, 1, 0 - dd, u0, v0);
|
t.vertexUV(0, 1, 0 - dd, u0, v0);
|
||||||
t.vertexUV(r, 1, 0 - dd, u1, v0);
|
t.vertexUV(r, 1, 0 - dd, u1, v0);
|
||||||
t.vertexUV(r, 0, 0 - dd, u1, v1);
|
t.vertexUV(r, 0, 0 - dd, u1, v1);
|
||||||
t.vertexUV(0, 0, 0 - dd, u0, v1);
|
t.vertexUV(0, 0, 0 - dd, u0, v1);
|
||||||
|
|
||||||
|
col = 0.8f;
|
||||||
|
t.color(col*br,col*br,col*br,1.0f);
|
||||||
|
t.normal(-1.0f, 0.0f, 0.0f);
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
float p = i / 16.0f;
|
float p = i / 16.0f;
|
||||||
float uu = u0 + (u1 - u0) * p - 0.5f / 256.0f;
|
float uu = u0 + (u1 - u0) * p - 0.5f / 256.0f;
|
||||||
@@ -172,6 +208,7 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
|||||||
t.vertexUV(xx, 1, 0, uu, v0);
|
t.vertexUV(xx, 1, 0, uu, v0);
|
||||||
t.vertexUV(xx, 1, 0 - dd, uu, v0);
|
t.vertexUV(xx, 1, 0 - dd, uu, v0);
|
||||||
}
|
}
|
||||||
|
t.normal(1.0f, 0.0f, 0.0f);
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
float p = i / 16.0f;
|
float p = i / 16.0f;
|
||||||
float uu = u0 + (u1 - u0) * p - 0.5f / 256.0f;
|
float uu = u0 + (u1 - u0) * p - 0.5f / 256.0f;
|
||||||
@@ -181,6 +218,10 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
|||||||
t.vertexUV(xx, 0, 0, uu, v1);
|
t.vertexUV(xx, 0, 0, uu, v1);
|
||||||
t.vertexUV(xx, 0, 0 - dd, uu, v1);
|
t.vertexUV(xx, 0, 0 - dd, uu, v1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
col = 0.6f;
|
||||||
|
t.color(col*br,col*br,col*br,1.0f);
|
||||||
|
t.normal(0.0f, 1.0f, 0.0f);
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
float p = i / 16.0f;
|
float p = i / 16.0f;
|
||||||
float vv = v1 + (v0 - v1) * p - 0.5f / 256.0f;
|
float vv = v1 + (v0 - v1) * p - 0.5f / 256.0f;
|
||||||
@@ -190,6 +231,7 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
|||||||
t.vertexUV(r, yy, 0 - dd, u1, vv);
|
t.vertexUV(r, yy, 0 - dd, u1, vv);
|
||||||
t.vertexUV(0, yy, 0 - dd, u0, vv);
|
t.vertexUV(0, yy, 0 - dd, u0, vv);
|
||||||
}
|
}
|
||||||
|
t.normal(0.0f, -1.0f, 0.0f);
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
float p = i / 16.0f;
|
float p = i / 16.0f;
|
||||||
float vv = v1 + (v0 - v1) * p - 0.5f / 256.0f;
|
float vv = v1 + (v0 - v1) * p - 0.5f / 256.0f;
|
||||||
@@ -219,7 +261,7 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
|||||||
}
|
}
|
||||||
mc->textures->loadAndBindTexture(renderObject.texture);
|
mc->textures->loadAndBindTexture(renderObject.texture);
|
||||||
|
|
||||||
drawArrayVT_NoState(renderObject.chunk.vboId, renderObject.chunk.vertexCount);
|
drawArrayVTN_NoState(renderObject.chunk.vboId, renderObject.chunk.vertexCount);
|
||||||
if (renderObject.isFlat)
|
if (renderObject.isFlat)
|
||||||
glPopMatrix2();
|
glPopMatrix2();
|
||||||
}
|
}
|
||||||
@@ -227,6 +269,7 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
|||||||
//handler.printEvery(100);
|
//handler.printEvery(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ItemInHandRenderer::render( float a )
|
void ItemInHandRenderer::render( float a )
|
||||||
{
|
{
|
||||||
//return;
|
//return;
|
||||||
@@ -241,6 +284,8 @@ void ItemInHandRenderer::render( float a )
|
|||||||
glPushMatrix2();
|
glPushMatrix2();
|
||||||
glRotatef2(player->xRotO + (player->xRot - player->xRotO) * a, 1, 0, 0);
|
glRotatef2(player->xRotO + (player->xRot - player->xRotO) * a, 1, 0, 0);
|
||||||
glRotatef2(player->yRotO + (player->yRot - player->yRotO) * a, 0, 1, 0);
|
glRotatef2(player->yRotO + (player->yRot - player->yRotO) * a, 0, 1, 0);
|
||||||
|
glEnable(GL_RESCALE_NORMAL);
|
||||||
|
Lighting::turnOn(mc);
|
||||||
glPopMatrix2();
|
glPopMatrix2();
|
||||||
|
|
||||||
float br = mc->level->getBrightness(Mth::floor(player->x), Mth::floor(player->y), Mth::floor(player->z));
|
float br = mc->level->getBrightness(Mth::floor(player->x), Mth::floor(player->y), Mth::floor(player->z));
|
||||||
@@ -293,7 +338,7 @@ void ItemInHandRenderer::render( float a )
|
|||||||
glTranslatef2(0.7f * d, -0.65f * d - (1 - h) * 0.6f, -0.9f * d);
|
glTranslatef2(0.7f * d, -0.65f * d - (1 - h) * 0.6f, -0.9f * d);
|
||||||
|
|
||||||
glRotatef2(45, 0, 1, 0);
|
glRotatef2(45, 0, 1, 0);
|
||||||
//glEnable2(GL_RESCALE_NORMAL);
|
glEnable2(GL_RESCALE_NORMAL);
|
||||||
glRotatef2(-swing3 * 20, 0, 1, 0);
|
glRotatef2(-swing3 * 20, 0, 1, 0);
|
||||||
glRotatef2(-swing2 * 20, 0, 0, 1);
|
glRotatef2(-swing2 * 20, 0, 0, 1);
|
||||||
glRotatef2(-swing2 * 80, 1, 0, 0);
|
glRotatef2(-swing2 * 80, 1, 0, 0);
|
||||||
@@ -330,7 +375,9 @@ void ItemInHandRenderer::render( float a )
|
|||||||
}
|
}
|
||||||
glEnableClientState2(GL_VERTEX_ARRAY);
|
glEnableClientState2(GL_VERTEX_ARRAY);
|
||||||
glEnableClientState2(GL_TEXTURE_COORD_ARRAY);
|
glEnableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||||
|
glEnableClientState2(GL_NORMAL_ARRAY);
|
||||||
renderItem(player, item);
|
renderItem(player, item);
|
||||||
|
glDisableClientState2(GL_NORMAL_ARRAY);
|
||||||
glDisableClientState2(GL_VERTEX_ARRAY);
|
glDisableClientState2(GL_VERTEX_ARRAY);
|
||||||
glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
|
glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||||
glPopMatrix2();
|
glPopMatrix2();
|
||||||
@@ -349,14 +396,15 @@ void ItemInHandRenderer::render( float a )
|
|||||||
glTranslatef2(0.8f * d, -0.75f * d - (1 - h) * 0.6f, -0.9f * d);
|
glTranslatef2(0.8f * d, -0.75f * d - (1 - h) * 0.6f, -0.9f * d);
|
||||||
|
|
||||||
glRotatef2(45, 0, 1, 0);
|
glRotatef2(45, 0, 1, 0);
|
||||||
//glEnable2(GL_RESCALE_NORMAL);
|
// glEnable2(GL_RESCALE_NORMAL);
|
||||||
|
glEnable(GL_NORMALIZE);
|
||||||
glRotatef2(swing2 * 70, 0, 1, 0);
|
glRotatef2(swing2 * 70, 0, 1, 0);
|
||||||
glRotatef2(-swing3 * 20, 0, 0, 1);
|
glRotatef2(-swing3 * 20, 0, 0, 1);
|
||||||
// glRotatef2(-swing2 * 80, 1, 0, 0);
|
// glRotatef2(-swing2 * 80, 1, 0, 0);
|
||||||
|
|
||||||
mc->textures->loadAndBindTexture(player->getTexture());
|
mc->textures->loadAndBindTexture(player->getTexture());
|
||||||
glTranslatef2(-1.0f, +3.6f, +3.5f);
|
glTranslatef2(-1.0f, +3.6f, +3.5f);
|
||||||
glRotatef2(120, 0, 0, 1);
|
glRotatef2(120, 0, 0, 1);
|
||||||
glRotatef2(180 + 20, 1, 0, 0);
|
glRotatef2(180 + 20, 1, 0, 0);
|
||||||
glRotatef2(-90 - 45, 0, 1, 0);
|
glRotatef2(-90 - 45, 0, 1, 0);
|
||||||
glScalef2(1.5f / 24.0f * 16, 1.5f / 24.0f * 16, 1.5f / 24.0f * 16);
|
glScalef2(1.5f / 24.0f * 16, 1.5f / 24.0f * 16, 1.5f / 24.0f * 16);
|
||||||
@@ -369,8 +417,8 @@ void ItemInHandRenderer::render( float a )
|
|||||||
playerRenderer->renderHand();
|
playerRenderer->renderHand();
|
||||||
glPopMatrix2();
|
glPopMatrix2();
|
||||||
}
|
}
|
||||||
//glDisable2(GL_RESCALE_NORMAL);
|
glDisable2(GL_RESCALE_NORMAL);
|
||||||
//Lighting.turnOff();
|
Lighting::turnOff();
|
||||||
//w.stop();
|
//w.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -395,10 +443,10 @@ void ItemInHandRenderer::renderScreenEffect( float a )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (mc->player->isUnderLiquid(Material::water)) {
|
if (mc->player->isUnderLiquid(Material::water)) {
|
||||||
//mc->textures->loadAndBindTexture("misc/water.png");
|
mc->textures->loadAndBindTexture("misc/water.png");
|
||||||
// renderWater(a);
|
renderWater(a);
|
||||||
// }
|
}
|
||||||
glEnable2(GL_ALPHA_TEST);
|
glEnable2(GL_ALPHA_TEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,9 @@
|
|||||||
|
|
||||||
#include "../../client/player/LocalPlayer.h"
|
#include "../../client/player/LocalPlayer.h"
|
||||||
|
|
||||||
|
#include "../../world/level/GrassColor.h"
|
||||||
|
#include "Lighting.h"
|
||||||
|
|
||||||
#ifdef GFX_SMALLER_CHUNKS
|
#ifdef GFX_SMALLER_CHUNKS
|
||||||
/* static */ const int LevelRenderer::CHUNK_SIZE = 8;
|
/* static */ const int LevelRenderer::CHUNK_SIZE = 8;
|
||||||
#else
|
#else
|
||||||
@@ -32,7 +35,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
LevelRenderer::LevelRenderer( Minecraft* mc)
|
LevelRenderer::LevelRenderer( Minecraft* mc)
|
||||||
: mc(mc),
|
: mc(mc),
|
||||||
textures(mc->textures),
|
textures(mc->textures),
|
||||||
level(NULL),
|
level(NULL),
|
||||||
cullStep(0),
|
cullStep(0),
|
||||||
@@ -47,6 +50,7 @@ LevelRenderer::LevelRenderer( Minecraft* mc)
|
|||||||
xMaxChunk(0), yMaxChunk(0), zMaxChunk(0),
|
xMaxChunk(0), yMaxChunk(0), zMaxChunk(0),
|
||||||
|
|
||||||
lastViewDistance(-1),
|
lastViewDistance(-1),
|
||||||
|
lastFogType(-1),
|
||||||
|
|
||||||
noEntityRenderFrames(2),
|
noEntityRenderFrames(2),
|
||||||
totalEntities(0),
|
totalEntities(0),
|
||||||
@@ -73,6 +77,9 @@ LevelRenderer::LevelRenderer( Minecraft* mc)
|
|||||||
//for (int i = 0; i < numListsOrBuffers; ++i) printf("bufId %d: %d\t", i, chunkBuffers[i]);
|
//for (int i = 0; i < numListsOrBuffers; ++i) printf("bufId %d: %d\t", i, chunkBuffers[i]);
|
||||||
|
|
||||||
glGenBuffers2(1, &skyBuffer);
|
glGenBuffers2(1, &skyBuffer);
|
||||||
|
glGenBuffers2(1, &voidBuffer);
|
||||||
|
glGenBuffers2(1, &starBuffer);
|
||||||
|
generateStars();
|
||||||
generateSky();
|
generateSky();
|
||||||
#else
|
#else
|
||||||
int maxChunksWidth = 1024 / CHUNK_SIZE;
|
int maxChunksWidth = 1024 / CHUNK_SIZE;
|
||||||
@@ -91,6 +98,8 @@ LevelRenderer::~LevelRenderer()
|
|||||||
#ifdef OPENGL_ES
|
#ifdef OPENGL_ES
|
||||||
glDeleteBuffers(numListsOrBuffers, chunkBuffers);
|
glDeleteBuffers(numListsOrBuffers, chunkBuffers);
|
||||||
glDeleteBuffers(1, &skyBuffer);
|
glDeleteBuffers(1, &skyBuffer);
|
||||||
|
glDeleteBuffers(1, &voidBuffer);
|
||||||
|
glDeleteBuffers(1, &starBuffer);
|
||||||
delete[] chunkBuffers;
|
delete[] chunkBuffers;
|
||||||
#else
|
#else
|
||||||
glDeleteLists(numListsOrBuffers, chunkLists);
|
glDeleteLists(numListsOrBuffers, chunkLists);
|
||||||
@@ -118,6 +127,25 @@ void LevelRenderer::generateSky() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
t.end(true, skyBuffer);
|
t.end(true, skyBuffer);
|
||||||
|
|
||||||
|
yy = (float) (-16);
|
||||||
|
t.begin();
|
||||||
|
|
||||||
|
// pretty much the same thing as the sky one above except uses inverted values to generate the void plane.
|
||||||
|
|
||||||
|
voidVertexCount = 0;
|
||||||
|
for (int xx = -s * d; xx <= s * d; xx += s) {
|
||||||
|
for (int zz = -s * d; zz <= s * d; zz += s) {
|
||||||
|
t.vertex((float) xx + 0, yy, (float) zz + s);
|
||||||
|
t.vertex((float)(xx + s), yy, (float) zz + s);
|
||||||
|
t.vertex((float)(xx + s), yy, (float)(zz + 0));
|
||||||
|
t.vertex((float) xx + 0, yy, (float)(zz + 0));
|
||||||
|
//LOGI("x, z: %d, %d\n", xx, zz);
|
||||||
|
voidVertexCount += 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
t.end(true, voidBuffer);
|
||||||
//LOGI("skyvertexcount: %d\n", skyVertexCount);
|
//LOGI("skyvertexcount: %d\n", skyVertexCount);
|
||||||
//glEndList();
|
//glEndList();
|
||||||
}
|
}
|
||||||
@@ -155,14 +183,24 @@ void LevelRenderer::allChanged()
|
|||||||
Tile::leaves_carried->setFancy(fancy);
|
Tile::leaves_carried->setFancy(fancy);
|
||||||
lastViewDistance = mc->options.getIntValue(OPTIONS_VIEW_DISTANCE);
|
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);
|
||||||
|
|
||||||
|
bool sideTint = mc->options.getBooleanValue(OPTIONS_TINTED_SIDE);
|
||||||
|
TileRenderer::setUseTint(sideTint);
|
||||||
|
|
||||||
|
|
||||||
int dist = (512 >> 3) << (3 - lastViewDistance);
|
int dist = (512 >> 3) << (3 - lastViewDistance);
|
||||||
if (lastViewDistance <= 2 && mc->isPowerVR())
|
if (lastViewDistance <= 2 && mc->isPowerVR())
|
||||||
dist = (int)((float)dist * 0.8f);
|
dist = (int)((float)dist * 0.8f);
|
||||||
LOGI("last: %d, power: %d\n", lastViewDistance, mc->isPowerVR());
|
LOGI("last: %d, power: %d\n", lastViewDistance, mc->isPowerVR());
|
||||||
|
|
||||||
#if defined(RPI)
|
#if defined(RPI)
|
||||||
dist *= 0.6f;
|
dist *= 0.6f;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (dist > 400) dist = 400;
|
if (dist > 400) dist = 400;
|
||||||
/*
|
/*
|
||||||
@@ -227,17 +265,17 @@ void LevelRenderer::allChanged()
|
|||||||
void LevelRenderer::deleteChunks()
|
void LevelRenderer::deleteChunks()
|
||||||
{
|
{
|
||||||
for (int z = 0; z < zChunks; ++z)
|
for (int z = 0; z < zChunks; ++z)
|
||||||
for (int y = 0; y < yChunks; ++y)
|
for (int y = 0; y < yChunks; ++y)
|
||||||
for (int x = 0; x < xChunks; ++x) {
|
for (int x = 0; x < xChunks; ++x) {
|
||||||
int c = getLinearCoord(x, y, z);
|
int c = getLinearCoord(x, y, z);
|
||||||
delete chunks[c];
|
delete chunks[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
delete[] chunks;
|
delete[] chunks;
|
||||||
chunks = NULL;
|
chunks = NULL;
|
||||||
|
|
||||||
delete[] sortedChunks;
|
delete[] sortedChunks;
|
||||||
sortedChunks = NULL;
|
sortedChunks = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LevelRenderer::resortChunks( int xc, int yc, int zc )
|
void LevelRenderer::resortChunks( int xc, int yc, int zc )
|
||||||
@@ -301,6 +339,48 @@ int LevelRenderer::render( Mob* player, int layer, float alpha )
|
|||||||
allChanged();
|
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();
|
||||||
|
}
|
||||||
|
bool SmoothLightState = mc->options.getBooleanValue(OPTIONS_AMBIENT_OCCLUSION);
|
||||||
|
if (SmoothLightState != mc->useAmbientOcclusion){
|
||||||
|
mc->useAmbientOcclusion = SmoothLightState;
|
||||||
|
allChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool tint = mc->options.getBooleanValue(OPTIONS_FOLIAGE_TINT);
|
||||||
|
if (tint != LastTint) {
|
||||||
|
LastTint = tint;
|
||||||
|
|
||||||
|
|
||||||
|
FoliageColor::setUseTint(tint);
|
||||||
|
GrassColor::setUseTint(tint);
|
||||||
|
|
||||||
|
allChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool sideTint = mc->options.getBooleanValue(OPTIONS_TINTED_SIDE);
|
||||||
|
|
||||||
|
if (sideTint != LastSideTint) {
|
||||||
|
LastSideTint = sideTint;
|
||||||
|
|
||||||
|
|
||||||
|
TileRenderer::setUseTint(sideTint);
|
||||||
|
|
||||||
|
allChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TIMER_PUSH("sortchunks");
|
TIMER_PUSH("sortchunks");
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
chunkFixOffs = (chunkFixOffs + 1) % chunksLength;
|
chunkFixOffs = (chunkFixOffs + 1) % chunksLength;
|
||||||
@@ -488,15 +568,15 @@ void LevelRenderer::render(const AABB& b) const
|
|||||||
{
|
{
|
||||||
Tesselator& t = Tesselator::instance;
|
Tesselator& t = Tesselator::instance;
|
||||||
|
|
||||||
glColor4f2(1, 1, 1, 1);
|
// glColor4f2(1, 1, 1, 1);
|
||||||
|
|
||||||
textures->loadAndBindTexture("terrain.png");
|
// textures->loadAndBindTexture("terrain.png"); // uh need to check java - shredder
|
||||||
|
|
||||||
//t.begin();
|
//t.begin();
|
||||||
t.color(255, 255, 255, 255);
|
// t.color(255, 255, 255, 255); // again not needed, for some reason the vanilla source code tints it... white? maybe this was used for something else in MCPE's dev at one point? - shredder
|
||||||
|
|
||||||
t.offset(((Mob*)mc->player)->getPos(0).negated());
|
|
||||||
|
|
||||||
|
// t.offset(((Mob*)mc->player)->getPos(0).negated()); // why does this even exist normally, it just makes the thing... not render
|
||||||
|
glLineWidth(2.0f); // make it more thick - shredder
|
||||||
t.begin(GL_LINE_STRIP);
|
t.begin(GL_LINE_STRIP);
|
||||||
t.vertex(b.x0, b.y0, b.z0);
|
t.vertex(b.x0, b.y0, b.z0);
|
||||||
t.vertex(b.x1, b.y0, b.z0);
|
t.vertex(b.x1, b.y0, b.z0);
|
||||||
@@ -569,11 +649,11 @@ int LevelRenderer::renderChunks( int from, int to, int layer, float alpha )
|
|||||||
|
|
||||||
for (unsigned int i = 0; i < _renderChunks.size(); ++i) {
|
for (unsigned int i = 0; i < _renderChunks.size(); ++i) {
|
||||||
Chunk* chunk = _renderChunks[i];
|
Chunk* chunk = _renderChunks[i];
|
||||||
#ifdef USE_VBO
|
#ifdef USE_VBO
|
||||||
renderList.addR(chunk->getRenderChunk(layer));
|
renderList.addR(chunk->getRenderChunk(layer));
|
||||||
#else
|
#else
|
||||||
renderList.add(chunk->getList(layer));
|
renderList.add(chunk->getList(layer));
|
||||||
#endif
|
#endif
|
||||||
renderList.next();
|
renderList.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -724,20 +804,20 @@ bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
|
|||||||
Chunk* chunk = dirtyChunks[cursor];
|
Chunk* chunk = dirtyChunks[cursor];
|
||||||
if (chunk != NULL) {
|
if (chunk != NULL) {
|
||||||
bool remove = false;
|
bool remove = false;
|
||||||
for (int i = 0; i < count && !remove; i++)
|
for (int i = 0; i < count && !remove; i++)
|
||||||
if (chunk == toAdd[i]) {
|
if (chunk == toAdd[i]) {
|
||||||
remove = true;
|
remove = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!remove) {
|
if (!remove) {
|
||||||
//if (chunk == toAdd[0] || chunk == toAdd[1] || chunk == toAdd[2]) {
|
//if (chunk == toAdd[0] || chunk == toAdd[1] || chunk == toAdd[2]) {
|
||||||
// ; // this chunk was rendered and should be removed
|
// ; // this chunk was rendered and should be removed
|
||||||
//} else {
|
//} else {
|
||||||
if (target != cursor) {
|
if (target != cursor) {
|
||||||
dirtyChunks[target] = chunk;
|
dirtyChunks[target] = chunk;
|
||||||
|
}
|
||||||
|
target++;
|
||||||
}
|
}
|
||||||
target++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
cursor++;
|
cursor++;
|
||||||
}
|
}
|
||||||
@@ -911,23 +991,23 @@ bool entityRenderPredicate(const Entity* a, const Entity* b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
|
void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
|
||||||
if (noEntityRenderFrames > 0) {
|
if (noEntityRenderFrames > 0) {
|
||||||
noEntityRenderFrames--;
|
noEntityRenderFrames--;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TIMER_PUSH("prepare");
|
TIMER_PUSH("prepare");
|
||||||
TileEntityRenderDispatcher::getInstance()->prepare(level, textures, mc->font, mc->cameraTargetPlayer, a);
|
TileEntityRenderDispatcher::getInstance()->prepare(level, textures, mc->font, mc->cameraTargetPlayer, a);
|
||||||
EntityRenderDispatcher::getInstance()->prepare(level, mc->font, mc->cameraTargetPlayer, &mc->options, a);
|
EntityRenderDispatcher::getInstance()->prepare(level, mc->font, mc->cameraTargetPlayer, &mc->options, a);
|
||||||
|
|
||||||
totalEntities = 0;
|
totalEntities = 0;
|
||||||
renderedEntities = 0;
|
renderedEntities = 0;
|
||||||
culledEntities = 0;
|
culledEntities = 0;
|
||||||
|
|
||||||
Entity* player = mc->cameraTargetPlayer;
|
Entity* player = mc->cameraTargetPlayer;
|
||||||
EntityRenderDispatcher::xOff = TileEntityRenderDispatcher::xOff = (player->xOld + (player->x - player->xOld) * a);
|
EntityRenderDispatcher::xOff = TileEntityRenderDispatcher::xOff = (player->xOld + (player->x - player->xOld) * a);
|
||||||
EntityRenderDispatcher::yOff = TileEntityRenderDispatcher::yOff = (player->yOld + (player->y - player->yOld) * a);
|
EntityRenderDispatcher::yOff = TileEntityRenderDispatcher::yOff = (player->yOld + (player->y - player->yOld) * a);
|
||||||
EntityRenderDispatcher::zOff = TileEntityRenderDispatcher::zOff = (player->zOld + (player->z - player->zOld) * a);
|
EntityRenderDispatcher::zOff = TileEntityRenderDispatcher::zOff = (player->zOld + (player->z - player->zOld) * a);
|
||||||
|
|
||||||
glEnableClientState2(GL_VERTEX_ARRAY);
|
glEnableClientState2(GL_VERTEX_ARRAY);
|
||||||
glEnableClientState2(GL_TEXTURE_COORD_ARRAY);
|
glEnableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||||
@@ -966,10 +1046,10 @@ void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
|
|||||||
delete[] toRender;
|
delete[] toRender;
|
||||||
}
|
}
|
||||||
|
|
||||||
TIMER_POP_PUSH("tileentities");
|
TIMER_POP_PUSH("tileentities");
|
||||||
for (unsigned int i = 0; i < level->tileEntities.size(); i++) {
|
for (unsigned int i = 0; i < level->tileEntities.size(); i++) {
|
||||||
TileEntityRenderDispatcher::getInstance()->render(level->tileEntities[i], a);
|
TileEntityRenderDispatcher::getInstance()->render(level->tileEntities[i], a);
|
||||||
}
|
}
|
||||||
|
|
||||||
glDisableClientState2(GL_VERTEX_ARRAY);
|
glDisableClientState2(GL_VERTEX_ARRAY);
|
||||||
glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
|
glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||||
@@ -980,50 +1060,209 @@ void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
|
|||||||
std::string LevelRenderer::gatherStats1() {
|
std::string LevelRenderer::gatherStats1() {
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "C: " << renderedChunks << "/" << totalChunks << ". F: " << offscreenChunks << ", O: " << occludedChunks << ", E: " << emptyChunks << "\n";
|
ss << "C: " << renderedChunks << "/" << totalChunks << ". F: " << offscreenChunks << ", O: " << occludedChunks << ", E: " << emptyChunks << "\n";
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// /*public*/ std::string gatherStats2() {
|
std::string LevelRenderer::gatherStats2() {
|
||||||
// return "E: " + renderedEntities + "/" + totalEntities + ". B: " + culledEntities + ", I: " + ((totalEntities - culledEntities) - renderedEntities);
|
std::stringstream ss;
|
||||||
// }
|
ss << "E: "<< renderedEntities << "/" << totalEntities << ". B: " << culledEntities << ", I: " << (totalEntities - culledEntities) - renderedEntities <<"\n";
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
//
|
//
|
||||||
// int[] toRender = new int[50000];
|
// int[] toRender = new int[50000];
|
||||||
// IntBuffer resultBuffer = MemoryTracker.createIntBuffer(64);
|
// IntBuffer resultBuffer = MemoryTracker.createIntBuffer(64);
|
||||||
|
|
||||||
|
void LevelRenderer::generateStars() {
|
||||||
|
// ported from java beta again,
|
||||||
|
// converted the doubles into floats to be consistent, shouldnt affect much - shredder
|
||||||
|
|
||||||
|
Random random = Random(10842L);
|
||||||
|
Tesselator& t = Tesselator::instance;
|
||||||
|
t.begin();
|
||||||
|
starVertexCount = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < 1500; i++) {
|
||||||
|
float d = random.nextFloat() * 2.0F - 1.0F;
|
||||||
|
float e = random.nextFloat() * 2.0F - 1.0F;
|
||||||
|
float f = random.nextFloat() * 2.0F - 1.0F;
|
||||||
|
float g = 0.25F + random.nextFloat() * 0.25F;
|
||||||
|
float h = d * d + e * e + f * f;
|
||||||
|
if (h < 1.0 && h > 0.01) {
|
||||||
|
h = 1.0 / Mth::sqrt(h);
|
||||||
|
d *= h;
|
||||||
|
e *= h;
|
||||||
|
f *= h;
|
||||||
|
float j = d * 100.0;
|
||||||
|
float k = e * 100.0;
|
||||||
|
float l = f * 100.0;
|
||||||
|
float m = Mth::atan2(d, f);
|
||||||
|
float n = Mth::sin(m);
|
||||||
|
float o = Mth::cos(m);
|
||||||
|
float p = Mth::atan2(Mth::sqrt(d * d + f * f), e);
|
||||||
|
float q = Mth::sin(p);
|
||||||
|
float r = Mth::cos(p);
|
||||||
|
float s = random.nextDouble() * Mth::PI * 2.0;
|
||||||
|
float t2 = Mth::sin(s);
|
||||||
|
float u = Mth::cos(s);
|
||||||
|
|
||||||
|
for (int v = 0; v < 4; v++) {
|
||||||
|
float w = 0.0;
|
||||||
|
float x = ((v & 2) - 1) * g;
|
||||||
|
float y = ((v + 1 & 2) - 1) * g;
|
||||||
|
float aa = x * u - y * t2;
|
||||||
|
float ab = y * u + x * t2;
|
||||||
|
float ad = aa * q + w * r;
|
||||||
|
float ae = w * q - aa * r;
|
||||||
|
float af = ae * n - ab * o;
|
||||||
|
float ah = ab * n + ae * o;
|
||||||
|
t.vertex(j + af, k + ad, l + ah);
|
||||||
|
}
|
||||||
|
starVertexCount += 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
t.end(true, starBuffer);
|
||||||
|
}
|
||||||
void LevelRenderer::renderSky(float alpha) {
|
void LevelRenderer::renderSky(float alpha) {
|
||||||
if (mc->level->dimension->foggy) return;
|
if (mc->level->dimension->foggy) return;
|
||||||
|
|
||||||
glDisable2(GL_TEXTURE_2D);
|
glDisable2(GL_TEXTURE_2D);
|
||||||
Vec3 sc = level->getSkyColor(mc->cameraTargetPlayer, alpha);
|
Vec3 sc = level->getSkyColor(mc->cameraTargetPlayer, alpha);
|
||||||
float sr = (float) sc.x;
|
float sr = (float) sc.x;
|
||||||
float sg = (float) sc.y;
|
float sg = (float) sc.y;
|
||||||
float sb = (float) sc.z;// + 0.5f;
|
float sb = (float) sc.z;// + 0.5f;
|
||||||
|
|
||||||
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) {
|
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) {
|
||||||
float srr = (sr * 30.0f + sg * 59.0f + sb * 11.0f) / 100.0f;
|
float srr = (sr * 30.0f + sg * 59.0f + sb * 11.0f) / 100.0f;
|
||||||
float sgg = (sr * 30.0f + sg * 70.0f) / (100.0f);
|
float sgg = (sr * 30.0f + sg * 70.0f) / (100.0f);
|
||||||
float sbb = (sr * 30.0f + sb * 70.0f) / (100.0f);
|
float sbb = (sr * 30.0f + sb * 70.0f) / (100.0f);
|
||||||
|
|
||||||
sr = srr;
|
sr = srr;
|
||||||
sg = sgg;
|
sg = sgg;
|
||||||
sb = sbb;
|
sb = sbb;
|
||||||
}
|
}
|
||||||
glColor4f2(sr, sg, Mth::Min(1.0f, sb), 1);
|
glColor4f2(sr, sg, Mth::Min(1.0f, sb), 1);
|
||||||
|
|
||||||
//Tesselator& t = Tesselator::instance;
|
Tesselator& t = Tesselator::instance;
|
||||||
|
// @TODO shredder - should not enable or disable depth mask if using legacy sky because mcpe sky rendering is awful and will render clouds above terrain
|
||||||
glEnable2(GL_FOG);
|
if(mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
|
||||||
glColor4f2(sr, sg, sb, 1.0f);
|
glDepthMask(false);
|
||||||
|
}
|
||||||
|
glEnable2(GL_FOG);
|
||||||
|
glColor4f2(sr, sg, sb, 1.0f);
|
||||||
|
|
||||||
#ifdef OPENGL_ES
|
#ifdef OPENGL_ES
|
||||||
drawArrayVT(skyBuffer, skyVertexCount);
|
drawArrayVT(skyBuffer, skyVertexCount);
|
||||||
#endif
|
#endif
|
||||||
glEnable2(GL_TEXTURE_2D);
|
glDisable(GL_FOG);
|
||||||
|
glDisable(GL_ALPHA_TEST);
|
||||||
|
|
||||||
|
// re ported this again from beta 1.6.6, thanks to the mcpe 0.1 decomp team's code for some bit of help about the void layer - shredder
|
||||||
|
|
||||||
|
// Sunrise
|
||||||
|
if (mc->options.getBooleanValue(OPTIONS_BEAUTIFUL_SKY)) {
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
Lighting::turnOff();
|
||||||
|
float* c = level->dimension->getSunriseColor(level->getTimeOfDay(alpha), alpha);
|
||||||
|
if (c != nullptr)
|
||||||
|
{
|
||||||
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
// glShadeModel(GL_SMOOTH); //
|
||||||
|
|
||||||
|
glPushMatrix();
|
||||||
|
glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
|
||||||
|
glRotatef(level->getTimeOfDay(alpha) > 0.5f ? 180 : 0, 0.0f, 0.0f, 1.0f);
|
||||||
|
t.begin(GL_TRIANGLE_FAN);
|
||||||
|
t.color(c[0], c[1], c[2], c[3]);
|
||||||
|
t.vertex(0.0f, 100.0f, 0.0f);
|
||||||
|
t.color(c[0], c[1], c[2], 0.0f);
|
||||||
|
|
||||||
|
int steps = 16;
|
||||||
|
for (int i = 0; i <= steps; i++)
|
||||||
|
{
|
||||||
|
float a = i * 3.1415927f * 2.0f / steps;
|
||||||
|
float sin = Mth::sin(a);
|
||||||
|
float cos = Mth::cos(a);
|
||||||
|
t.vertex((sin * 120.0f), (cos * 120.0f), (-cos * 40.0f * c[3]));
|
||||||
|
}
|
||||||
|
|
||||||
|
t.draw();
|
||||||
|
glPopMatrix();
|
||||||
|
// glShadeModel(GL_FLAT); //
|
||||||
|
}
|
||||||
|
|
||||||
|
// gets the time of day and rotates the sun and moon png based on the time
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||||
|
glPushMatrix();
|
||||||
|
|
||||||
|
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
glTranslatef(sc.x, sc.y, sc.z);
|
||||||
|
glRotatef(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
|
glRotatef(level->getTimeOfDay(alpha) * 360.0f, 1.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
|
float ss = 30.0f;
|
||||||
|
|
||||||
|
|
||||||
|
textures->loadAndBindTexture("terrain/sun.png");
|
||||||
|
t.begin();
|
||||||
|
t.vertexUV(-ss, 100.0f, -ss, 0.0f, 0.0f);
|
||||||
|
t.vertexUV(ss, 100.0f, -ss, 1.0f, 0.0f);
|
||||||
|
t.vertexUV(ss, 100.0f, ss, 1.0f, 1.0f);
|
||||||
|
t.vertexUV(-ss, 100.0f, ss, 0.0f, 1.0f);
|
||||||
|
t.draw();
|
||||||
|
|
||||||
|
ss = 20.0f;
|
||||||
|
textures->loadAndBindTexture("terrain/moon.png");
|
||||||
|
t.begin();
|
||||||
|
t.vertexUV(-ss, -100.0f, ss, 1.0f, 1.0f);
|
||||||
|
t.vertexUV(ss, -100.0f, ss, 0.0f, 1.0f);
|
||||||
|
t.vertexUV(ss, -100.0f, -ss, 0.0f, 0.0f);
|
||||||
|
t.vertexUV(-ss, -100.0f, -ss, 1.0f, 0.0f);
|
||||||
|
t.draw();
|
||||||
|
|
||||||
|
|
||||||
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
|
||||||
|
float a = level->getStarBrightness(alpha);
|
||||||
|
if (a > 0.0f)
|
||||||
|
{
|
||||||
|
glColor4f(a, a, a, a);
|
||||||
|
drawArrayVT(starBuffer, starVertexCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
glDisable(GL_BLEND);
|
||||||
|
glEnable(GL_ALPHA_TEST);
|
||||||
|
glEnable(GL_FOG);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
// ported over void plane (the blue bottom plane seen in java) because pocket edition lacks it @TODO test if it's buggy - shredder
|
||||||
|
|
||||||
|
// glColor3f(sc.x * 0.2f + 0.04f, sc.y * 0.2f + 0.04f, sc.z * 0.6f + 0.1f);
|
||||||
|
glColor4f(sc.x * 0.2f + 0.04f, sc.y * 0.2f + 0.04f, sc.z * 0.6f + 0.1f, 1.0f);
|
||||||
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
if(mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
|
||||||
|
drawArrayVT(voidBuffer, voidVertexCount);
|
||||||
|
}
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
|
||||||
|
// @TODO shredder - should not enable or disable depth mask if using legacy sky because mcpe sky rendering is awful and will render clouds above terrain
|
||||||
|
if(mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
|
||||||
|
glDepthMask(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LevelRenderer::renderClouds( float alpha ) {
|
void LevelRenderer::renderClouds( float alpha ) {
|
||||||
//if (!mc->level->dimension->isNaturalDimension()) return;
|
//if (!mc->level->dimension->isNaturalDimension()) return;
|
||||||
|
if (mc->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS) && mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
|
||||||
|
renderAdvancedClouds(alpha);
|
||||||
|
return;
|
||||||
|
}
|
||||||
glEnable2(GL_TEXTURE_2D);
|
glEnable2(GL_TEXTURE_2D);
|
||||||
glDisable(GL_CULL_FACE);
|
glDisable(GL_CULL_FACE);
|
||||||
float yOffs = (float) (mc->player->yOld + (mc->player->y - mc->player->yOld) * alpha);
|
float yOffs = (float) (mc->player->yOld + (mc->player->y - mc->player->yOld) * alpha);
|
||||||
@@ -1033,7 +1272,7 @@ void LevelRenderer::renderClouds( float alpha ) {
|
|||||||
|
|
||||||
//glBindTexture(GL_TEXTURE_2D, texturesloadTexture("/environment/clouds.png"));
|
//glBindTexture(GL_TEXTURE_2D, texturesloadTexture("/environment/clouds.png"));
|
||||||
textures->loadAndBindTexture("environment/clouds.png");
|
textures->loadAndBindTexture("environment/clouds.png");
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
@@ -1072,21 +1311,157 @@ void LevelRenderer::renderClouds( float alpha ) {
|
|||||||
glEnable(GL_CULL_FACE);
|
glEnable(GL_CULL_FACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LevelRenderer::renderAdvancedClouds(float alpha) {
|
||||||
|
|
||||||
|
// ported from java beta, tesselation code for the 3d clouds, renders broken if mcpe sky rendering option is used - shredder
|
||||||
|
|
||||||
|
glDisable(GL_CULL_FACE);
|
||||||
|
|
||||||
|
float px = mc->player->xOld + (mc->player->x - mc->player->xOld) * alpha;
|
||||||
|
float py = mc->player->yOld + (mc->player->y - mc->player->yOld) * alpha;
|
||||||
|
float pz = mc->player->zOld + (mc->player->z - mc->player->zOld) * alpha;
|
||||||
|
|
||||||
|
Tesselator& t = Tesselator::instance;
|
||||||
|
float ss = 12.0f;
|
||||||
|
float h = 4.0f;
|
||||||
|
|
||||||
|
float cloudTime = (float)ticks + alpha;
|
||||||
|
|
||||||
|
float xo = (px + cloudTime * 0.03f) / ss;
|
||||||
|
float zo = pz / ss + 0.33f;
|
||||||
|
|
||||||
|
float yy = 108.0f - py + 0.33f;
|
||||||
|
|
||||||
|
int xWraps = Mth::floor(xo / 2048.0);
|
||||||
|
int zWraps = Mth::floor(zo / 2048.0);
|
||||||
|
xo -= xWraps * 2048;
|
||||||
|
zo -= zWraps * 2048;
|
||||||
|
|
||||||
|
textures->loadAndBindTexture("environment/clouds.png");
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
|
Vec3 cc = level->getCloudColor(alpha);
|
||||||
|
float cr = cc.x;
|
||||||
|
float cg = cc.y;
|
||||||
|
float cb = cc.z;
|
||||||
|
|
||||||
|
float uvScale = 1.0f / 256.0f;
|
||||||
|
float uo = (float)Mth::floor(xo) * uvScale;
|
||||||
|
float vo = (float)Mth::floor(zo) * uvScale;
|
||||||
|
|
||||||
|
float xOffs = (float)(xo - Mth::floor(xo));
|
||||||
|
float zOffs = (float)(zo - Mth::floor(zo));
|
||||||
|
|
||||||
|
int D = 8;
|
||||||
|
int radius = 3;
|
||||||
|
float e = 1.0f / 1024.0f;
|
||||||
|
|
||||||
|
glPushMatrix();
|
||||||
|
glScalef(ss, 1.0f, ss);
|
||||||
|
|
||||||
|
for (int pass = 0; pass < 2; pass++) {
|
||||||
|
|
||||||
|
if (pass == 0) glColorMask(false, false, false, false);
|
||||||
|
else glColorMask(true, true, true, true);
|
||||||
|
|
||||||
|
for (int xPos = -radius + 1; xPos <= radius; xPos++) {
|
||||||
|
for (int zPos = -radius + 1; zPos <= radius; zPos++) {
|
||||||
|
t.begin();
|
||||||
|
float xx = (float)(xPos * D);
|
||||||
|
float zz = (float)(zPos * D);
|
||||||
|
float xp = xx - xOffs;
|
||||||
|
float zp = zz - zOffs;
|
||||||
|
|
||||||
|
|
||||||
|
if (yy > -h - 1.0f) {
|
||||||
|
t.color(cr * 0.7f, cg * 0.7f, cb * 0.7f, 0.8f);
|
||||||
|
t.normal(0.0f, -1.0f, 0.0f);
|
||||||
|
t.vertexUV(xp + 0, yy + 0, zp + D, (xx + 0) * uvScale + uo, (zz + D) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + D, yy + 0, zp + D, (xx + D) * uvScale + uo, (zz + D) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + D, yy + 0, zp + 0, (xx + D) * uvScale + uo, (zz + 0) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + 0, yy + 0, zp + 0, (xx + 0) * uvScale + uo, (zz + 0) * uvScale + vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (yy <= h + 1.0f) {
|
||||||
|
t.color(cr, cg, cb, 0.8f);
|
||||||
|
t.normal(0.0f, 1.0f, 0.0f);
|
||||||
|
t.vertexUV(xp + 0, yy + h - e, zp + D, (xx + 0) * uvScale + uo, (zz + D) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + D, yy + h - e, zp + D, (xx + D) * uvScale + uo, (zz + D) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + D, yy + h - e, zp + 0, (xx + D) * uvScale + uo, (zz + 0) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + 0, yy + h - e, zp + 0, (xx + 0) * uvScale + uo, (zz + 0) * uvScale + vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
t.color(cr * 0.9f, cg * 0.9f, cb * 0.9f, 0.8f);
|
||||||
|
|
||||||
|
|
||||||
|
if (xPos > -1) {
|
||||||
|
t.normal(-1.0f, 0.0f, 0.0f);
|
||||||
|
for (int i = 0; i < D; i++) {
|
||||||
|
t.vertexUV(xp + i + 0, yy + 0, zp + D, (xx + i + 0.5f) * uvScale + uo, (zz + D) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + i + 0, yy + h, zp + D, (xx + i + 0.5f) * uvScale + uo, (zz + D) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + i + 0, yy + h, zp + 0, (xx + i + 0.5f) * uvScale + uo, (zz + 0) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + i + 0, yy + 0, zp + 0, (xx + i + 0.5f) * uvScale + uo, (zz + 0) * uvScale + vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (xPos <= 1) {
|
||||||
|
t.normal(1.0f, 0.0f, 0.0f);
|
||||||
|
for (int i = 0; i < D; i++) {
|
||||||
|
t.vertexUV(xp + i + 1 - e, yy + 0, zp + D, (xx + i + 0.5f) * uvScale + uo, (zz + D) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + i + 1 - e, yy + h, zp + D, (xx + i + 0.5f) * uvScale + uo, (zz + D) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + i + 1 - e, yy + h, zp + 0, (xx + i + 0.5f) * uvScale + uo, (zz + 0) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + i + 1 - e, yy + 0, zp + 0, (xx + i + 0.5f) * uvScale + uo, (zz + 0) * uvScale + vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
t.color(cr * 0.8f, cg * 0.8f, cb * 0.8f, 0.8f);
|
||||||
|
|
||||||
|
|
||||||
|
if (zPos > -1) {
|
||||||
|
t.normal(0.0f, 0.0f, -1.0f);
|
||||||
|
for (int i = 0; i < D; i++) {
|
||||||
|
t.vertexUV(xp + 0, yy + h, zp + i + 0, (xx + 0) * uvScale + uo, (zz + i + 0.5f) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + D, yy + h, zp + i + 0, (xx + D) * uvScale + uo, (zz + i + 0.5f) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + D, yy + 0, zp + i + 0, (xx + D) * uvScale + uo, (zz + i + 0.5f) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + 0, yy + 0, zp + i + 0, (xx + 0) * uvScale + uo, (zz + i + 0.5f) * uvScale + vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (zPos <= 1) {
|
||||||
|
t.normal(0.0f, 0.0f, 1.0f);
|
||||||
|
for (int i = 0; i < D; i++) {
|
||||||
|
t.vertexUV(xp + 0, yy + h, zp + i + 1 - e, (xx + 0) * uvScale + uo, (zz + i + 0.5f) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + D, yy + h, zp + i + 1 - e, (xx + D) * uvScale + uo, (zz + i + 0.5f) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + D, yy + 0, zp + i + 1 - e, (xx + D) * uvScale + uo, (zz + i + 0.5f) * uvScale + vo);
|
||||||
|
t.vertexUV(xp + 0, yy + 0, zp + i + 1 - e, (xx + 0) * uvScale + uo, (zz + i + 0.5f) * uvScale + vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t.endOverrideAndDraw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
glPopMatrix();
|
||||||
|
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
glDisable(GL_BLEND);
|
||||||
|
glEnable(GL_CULL_FACE);
|
||||||
|
}
|
||||||
|
|
||||||
void LevelRenderer::playSound(const std::string& name, float x, float y, float z, float volume, float pitch) {
|
void LevelRenderer::playSound(const std::string& name, float x, float y, float z, float volume, float pitch) {
|
||||||
// @todo: deny sounds here if sound is off (rather than waiting 'til SoundEngine)
|
// @todo: deny sounds here if sound is off (rather than waiting 'til SoundEngine)
|
||||||
float dd = 16;
|
float dd = 16;
|
||||||
|
|
||||||
if (volume > 1) dd *= volume;
|
if (volume > 1) dd *= volume;
|
||||||
if (mc->cameraTargetPlayer->distanceToSqr(x, y, z) < dd * dd) {
|
if (mc->cameraTargetPlayer->distanceToSqr(x, y, z) < dd * dd) {
|
||||||
mc->soundEngine->play(name, x, y, z, volume, pitch);
|
mc->soundEngine->play(name, x, y, z, volume, pitch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LevelRenderer::addParticle(const std::string& name, float x, float y, float z, float xa, float ya, float za, int data) {
|
void LevelRenderer::addParticle(const std::string& name, float x, float y, float z, float xa, float ya, float za, int data) {
|
||||||
|
|
||||||
float xd = mc->cameraTargetPlayer->x - x;
|
float xd = mc->cameraTargetPlayer->x - x;
|
||||||
float yd = mc->cameraTargetPlayer->y - y;
|
float yd = mc->cameraTargetPlayer->y - y;
|
||||||
float zd = mc->cameraTargetPlayer->z - z;
|
float zd = mc->cameraTargetPlayer->z - z;
|
||||||
float distanceSquared = xd * xd + yd * yd + zd * zd;
|
float distanceSquared = xd * xd + yd * yd + zd * zd;
|
||||||
|
|
||||||
//Particle* p = NULL;
|
//Particle* p = NULL;
|
||||||
@@ -1100,27 +1475,27 @@ void LevelRenderer::addParticle(const std::string& name, float x, float y, float
|
|||||||
// return;
|
// return;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
const float particleDistance = 16;
|
const float particleDistance = 16;
|
||||||
if (distanceSquared > particleDistance * particleDistance) return;
|
if (distanceSquared > particleDistance * particleDistance) return;
|
||||||
|
|
||||||
//static Stopwatch sw;
|
//static Stopwatch sw;
|
||||||
//sw.start();
|
//sw.start();
|
||||||
|
|
||||||
if (name == "bubble") mc->particleEngine->add(new BubbleParticle(level, x, y, z, xa, ya, za));
|
if (name == "bubble") mc->particleEngine->add(new BubbleParticle(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "crit") mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za));
|
else if (name == "crit") mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "smoke") mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za));
|
else if (name == "smoke") mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za));
|
||||||
//else if (name == "note") mc->particleEngine->add(new NoteParticle(level, x, y, z, xa, ya, za));
|
//else if (name == "note") mc->particleEngine->add(new NoteParticle(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "explode") mc->particleEngine->add(new ExplodeParticle(level, x, y, z, xa, ya, za));
|
else if (name == "explode") mc->particleEngine->add(new ExplodeParticle(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "flame") mc->particleEngine->add(new FlameParticle(level, x, y, z, xa, ya, za));
|
else if (name == "flame") mc->particleEngine->add(new FlameParticle(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "lava") mc->particleEngine->add(new LavaParticle(level, x, y, z));
|
else if (name == "lava") mc->particleEngine->add(new LavaParticle(level, x, y, z));
|
||||||
//else if (name == "splash") mc->particleEngine->add(new SplashParticle(level, x, y, z, xa, ya, za));
|
//else if (name == "splash") mc->particleEngine->add(new SplashParticle(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "largesmoke") mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f));
|
else if (name == "largesmoke") mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f));
|
||||||
else if (name == "reddust") mc->particleEngine->add(new RedDustParticle(level, x, y, z, xa, ya, za));
|
else if (name == "reddust") mc->particleEngine->add(new RedDustParticle(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "iconcrack") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]));
|
else if (name == "iconcrack") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]));
|
||||||
else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
|
else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
|
||||||
//else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
|
//else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
|
||||||
//else if (name == "slime") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::slimeBall));
|
//else if (name == "slime") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::slimeBall));
|
||||||
//else if (name == "heart") mc->particleEngine->add(new HeartParticle(level, x, y, z, xa, ya, za));
|
//else if (name == "heart") mc->particleEngine->add(new HeartParticle(level, x, y, z, xa, ya, za));
|
||||||
|
|
||||||
//sw.stop();
|
//sw.stop();
|
||||||
//sw.printEvery(50, "add-particle-string");
|
//sw.printEvery(50, "add-particle-string");
|
||||||
@@ -1128,53 +1503,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) {
|
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 xd = mc->cameraTargetPlayer->x - x;
|
||||||
float yd = mc->cameraTargetPlayer->y - y;
|
float yd = mc->cameraTargetPlayer->y - y;
|
||||||
float zd = mc->cameraTargetPlayer->z - z;
|
float zd = mc->cameraTargetPlayer->z - z;
|
||||||
|
|
||||||
const float particleDistance = 16;
|
const float particleDistance = 16;
|
||||||
if (xd * xd + yd * yd + zd * zd > particleDistance * particleDistance) return;
|
if (xd * xd + yd * yd + zd * zd > particleDistance * particleDistance) return;
|
||||||
|
|
||||||
//static Stopwatch sw;
|
//static Stopwatch sw;
|
||||||
//sw.start();
|
//sw.start();
|
||||||
|
|
||||||
//Particle* p = NULL;
|
//Particle* p = NULL;
|
||||||
|
|
||||||
if (name == ParticleType::bubble) mc->particleEngine->add( new BubbleParticle(level, x, y, z, xa, ya, za) );
|
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::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::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::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::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::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::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::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]) );
|
else if (name == ParticleType::iconcrack) mc->particleEngine->add( new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]) );
|
||||||
|
|
||||||
//switch (name) {
|
//switch (name) {
|
||||||
// case ParticleType::bubble: p = new BubbleParticle(level, x, y, z, xa, ya, za); break;
|
// 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::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::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::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::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::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::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::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::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::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::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::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::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;
|
// //case ParticleType::heart: p = new HeartParticle(level, x, y, z, xa, ya, za); break;
|
||||||
// default:
|
// default:
|
||||||
// LOGW("Couldn't find particle of type: %d\n", name);
|
// LOGW("Couldn't find particle of type: %d\n", name);
|
||||||
// break;
|
// break;
|
||||||
//}
|
//}
|
||||||
//if (p) {
|
//if (p) {
|
||||||
// mc->particleEngine->add(p);
|
// mc->particleEngine->add(p);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
//sw.stop();
|
//sw.stop();
|
||||||
//sw.printEvery(50, "add-particle-enum");
|
//sw.printEvery(50, "add-particle-enum");
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -1192,7 +1567,7 @@ void LevelRenderer::renderHitSelect( Player* player, const HitResult& h, int mod
|
|||||||
glEnable2(GL_DEPTH_TEST);
|
glEnable2(GL_DEPTH_TEST);
|
||||||
|
|
||||||
textures->loadAndBindTexture("terrain.png");
|
textures->loadAndBindTexture("terrain.png");
|
||||||
|
|
||||||
int tileId = level->getTile(h.x, h.y, h.z);
|
int tileId = level->getTile(h.x, h.y, h.z);
|
||||||
Tile* tile = tileId > 0 ? Tile::tiles[tileId] : NULL;
|
Tile* tile = tileId > 0 ? Tile::tiles[tileId] : NULL;
|
||||||
glDisable2(GL_ALPHA_TEST);
|
glDisable2(GL_ALPHA_TEST);
|
||||||
@@ -1234,6 +1609,7 @@ void LevelRenderer::renderHitSelect( Player* player, const HitResult& h, int mod
|
|||||||
|
|
||||||
void LevelRenderer::onGraphicsReset()
|
void LevelRenderer::onGraphicsReset()
|
||||||
{
|
{
|
||||||
|
generateStars();
|
||||||
generateSky();
|
generateSky();
|
||||||
|
|
||||||
// Get new buffers
|
// Get new buffers
|
||||||
@@ -1289,11 +1665,11 @@ void LevelRenderer::takePicture( TripodCamera* cam, Entity* entity )
|
|||||||
void LevelRenderer::levelEvent(Player* player, int type, int x, int y, int z, int data) {
|
void LevelRenderer::levelEvent(Player* player, int type, int x, int y, int z, int data) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case LevelEvent::SOUND_OPEN_DOOR:
|
case LevelEvent::SOUND_OPEN_DOOR:
|
||||||
if (Mth::random() < 0.5f) {
|
if (Mth::random() < 0.5f) {
|
||||||
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_open", 1, level->random.nextFloat() * 0.1f + 0.9f);
|
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_open", 1, level->random.nextFloat() * 0.1f + 0.9f);
|
||||||
} else {
|
} else {
|
||||||
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_close", 1, level->random.nextFloat() * 0.1f + 0.9f);
|
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_close", 1, level->random.nextFloat() * 0.1f + 0.9f);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,9 @@ public:
|
|||||||
void renderDebug(const AABB& b, float a) const;
|
void renderDebug(const AABB& b, float a) const;
|
||||||
|
|
||||||
void renderSky(float alpha);
|
void renderSky(float alpha);
|
||||||
|
void generateStars();
|
||||||
void renderClouds(float alpha);
|
void renderClouds(float alpha);
|
||||||
|
void renderAdvancedClouds(float alpha);
|
||||||
void renderEntities(Vec3 cam, Culler* culler, float a);
|
void renderEntities(Vec3 cam, Culler* culler, float a);
|
||||||
void renderSameAsLast(int layer, float alpha);
|
void renderSameAsLast(int layer, float alpha);
|
||||||
void renderHit(Player* player, const HitResult& h, int mode, /*ItemInstance*/void* inventoryItem, float a);
|
void renderHit(Player* player, const HitResult& h, int mode, /*ItemInstance*/void* inventoryItem, float a);
|
||||||
@@ -67,6 +69,7 @@ public:
|
|||||||
void levelEvent(Player* source, int type, int x, int y, int z, int data);
|
void levelEvent(Player* source, int type, int x, int y, int z, int data);
|
||||||
|
|
||||||
std::string gatherStats1();
|
std::string gatherStats1();
|
||||||
|
std::string gatherStats2();
|
||||||
|
|
||||||
void render(const AABB& b) const;
|
void render(const AABB& b) const;
|
||||||
void onGraphicsReset();
|
void onGraphicsReset();
|
||||||
@@ -113,6 +116,12 @@ private:
|
|||||||
bool occlusionCheck;
|
bool occlusionCheck;
|
||||||
int lastViewDistance;
|
int lastViewDistance;
|
||||||
|
|
||||||
|
// shredder added again...
|
||||||
|
int lastFogType;
|
||||||
|
|
||||||
|
bool LastTint;
|
||||||
|
bool LastSideTint;
|
||||||
|
|
||||||
int ticks;
|
int ticks;
|
||||||
int starList, skyList, darkList;
|
int starList, skyList, darkList;
|
||||||
|
|
||||||
@@ -121,6 +130,12 @@ private:
|
|||||||
GLuint skyBuffer;
|
GLuint skyBuffer;
|
||||||
int skyVertexCount;
|
int skyVertexCount;
|
||||||
|
|
||||||
|
GLuint voidBuffer;
|
||||||
|
int voidVertexCount;
|
||||||
|
|
||||||
|
GLuint starBuffer;
|
||||||
|
int starVertexCount;
|
||||||
|
|
||||||
// /*public*/ std::vector<TileEntity*> renderableTileEntities;
|
// /*public*/ std::vector<TileEntity*> renderableTileEntities;
|
||||||
Textures* textures;
|
Textures* textures;
|
||||||
// /*private*/ TileRenderer tileRenderer;
|
// /*private*/ TileRenderer tileRenderer;
|
||||||
|
|||||||
49
src/client/renderer/Lighting.cpp
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
#include "Lighting.h"
|
||||||
|
#include "gles.h"
|
||||||
|
#include "../Minecraft.h"
|
||||||
|
|
||||||
|
void Lighting::turnOff() {
|
||||||
|
glDisable(GL_LIGHTING);
|
||||||
|
glDisable(GL_LIGHT0);
|
||||||
|
glDisable(GL_LIGHT1);
|
||||||
|
glDisable(GL_COLOR_MATERIAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Lighting::turnOn(Minecraft* minecraft) {
|
||||||
|
if (!minecraft->options.getBooleanValue(OPTIONS_NORMAL_LIGHTING)){ // if normal lighting is false, then just dont use the lighting system at all like in vanilla - shredder
|
||||||
|
turnOff();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
glEnable(GL_NORMALIZE);
|
||||||
|
// if normal lighting is true then enable GLES/OpenGL states to setup lighting
|
||||||
|
glEnable(GL_LIGHTING);
|
||||||
|
glEnable(GL_LIGHT0);
|
||||||
|
glEnable(GL_LIGHT1);
|
||||||
|
glEnable(GL_COLOR_MATERIAL);
|
||||||
|
// glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
|
||||||
|
|
||||||
|
constexpr float a = 0.4f;
|
||||||
|
constexpr float d = 0.6f;
|
||||||
|
constexpr float s = 0.0f;
|
||||||
|
|
||||||
|
|
||||||
|
//Vec3 l = world::phys::Vec3{0.2, 1.0, -0.7}.normalize();
|
||||||
|
constexpr float lightmodel_ambient[] = {a, a, a, 1.0f};
|
||||||
|
constexpr float diffuse[] = {d, d, d, 1.0f};
|
||||||
|
constexpr float ambient[] = {0.0f, 0.0f, 0.0f, 1.0f};
|
||||||
|
constexpr float specular[] = {s, s, s, 1.0f};
|
||||||
|
|
||||||
|
constexpr float pos0[] = {(float)(0.16169041989141428), (float)(0.8084520874101966), (float)(-0.5659164515496377), 0.0f};
|
||||||
|
glLightfv(GL_LIGHT0, GL_POSITION, pos0);
|
||||||
|
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
|
||||||
|
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
|
||||||
|
glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
|
||||||
|
|
||||||
|
constexpr float pos1[] = {(float)(-0.16169041989141428), (float)(0.8084520874101966), (float)(0.5659164515496377), 0.0f};
|
||||||
|
glLightfv(GL_LIGHT1, GL_POSITION, pos1);
|
||||||
|
glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse);
|
||||||
|
glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
|
||||||
|
glLightfv(GL_LIGHT1, GL_SPECULAR, specular);
|
||||||
|
glShadeModel(GL_FLAT);
|
||||||
|
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lightmodel_ambient);
|
||||||
|
}
|
||||||
12
src/client/renderer/Lighting.h
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#ifndef NET_MINECRAFT_CLIENT_RENDERER__Lighting_H__
|
||||||
|
#define NET_MINECRAFT_CLIENT_RENDERER__Lighting_H__
|
||||||
|
|
||||||
|
class Minecraft;
|
||||||
|
class Lighting
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static void turnOff();
|
||||||
|
static void turnOn(Minecraft* minecraft);
|
||||||
|
|
||||||
|
};
|
||||||
|
#endif /*NET_MINECRAFT_CLIENT_RENDERER__Lighting_H__*/
|
||||||
@@ -8,7 +8,7 @@ Tesselator Tesselator::instance(sizeof(GLfloat) * MAX_FLOATS); // max size in by
|
|||||||
const int VertexSizeBytes = sizeof(VERTEX);
|
const int VertexSizeBytes = sizeof(VERTEX);
|
||||||
|
|
||||||
Tesselator::Tesselator( int size )
|
Tesselator::Tesselator( int size )
|
||||||
: size(size),
|
: size(size),
|
||||||
vertices(0),
|
vertices(0),
|
||||||
u(0), v(0),
|
u(0), v(0),
|
||||||
_color(0),
|
_color(0),
|
||||||
@@ -20,7 +20,7 @@ Tesselator::Tesselator( int size )
|
|||||||
_noColor(false),
|
_noColor(false),
|
||||||
mode(0),
|
mode(0),
|
||||||
xo(0), yo(0), zo(0),
|
xo(0), yo(0), zo(0),
|
||||||
_normal(0),
|
_nx(0), _ny(0), _nz(0),
|
||||||
_sx(1), _sy(1),
|
_sx(1), _sy(1),
|
||||||
|
|
||||||
tesselating(false),
|
tesselating(false),
|
||||||
@@ -97,9 +97,9 @@ RenderChunk Tesselator::end( bool useMine, int bufferId )
|
|||||||
int access = GL_STATIC_DRAW;//(accessMode==ACCESS_DYNAMIC) ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW;
|
int access = GL_STATIC_DRAW;//(accessMode==ACCESS_DYNAMIC) ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW;
|
||||||
glBindBuffer2(GL_ARRAY_BUFFER, bufferId);
|
glBindBuffer2(GL_ARRAY_BUFFER, bufferId);
|
||||||
glBufferData2(GL_ARRAY_BUFFER, bytes, _varray, access); // GL_STREAM_DRAW
|
glBufferData2(GL_ARRAY_BUFFER, bytes, _varray, access); // GL_STREAM_DRAW
|
||||||
|
|
||||||
totalSize += bytes;
|
totalSize += bytes;
|
||||||
|
|
||||||
#ifndef USE_VBO
|
#ifndef USE_VBO
|
||||||
// 0 1 2 3 4 5 6 7
|
// 0 1 2 3 4 5 6 7
|
||||||
// x y z u v c
|
// x y z u v c
|
||||||
@@ -112,7 +112,7 @@ RenderChunk Tesselator::end( bool useMine, int bufferId )
|
|||||||
glEnableClientState2(GL_COLOR_ARRAY);
|
glEnableClientState2(GL_COLOR_ARRAY);
|
||||||
}
|
}
|
||||||
if (hasNormal) {
|
if (hasNormal) {
|
||||||
glNormalPointer(GL_BYTE, VertexSizeBytes, (GLvoid*) (6 * 4));
|
glNormalPointer(GL_FLOAT, VertexSizeBytes, (GLvoid*) (6 * 4));
|
||||||
glEnableClientState2(GL_NORMAL_ARRAY);
|
glEnableClientState2(GL_NORMAL_ARRAY);
|
||||||
}
|
}
|
||||||
glVertexPointer2(3, GL_FLOAT, VertexSizeBytes, 0);
|
glVertexPointer2(3, GL_FLOAT, VertexSizeBytes, 0);
|
||||||
@@ -278,9 +278,11 @@ void Tesselator::vertex( float x, float y, float z )
|
|||||||
if (hasColor) {
|
if (hasColor) {
|
||||||
dst.color = src.color;
|
dst.color = src.color;
|
||||||
}
|
}
|
||||||
//if (hasNormal) {
|
if (hasNormal) {
|
||||||
// dst.normal = src.normal;
|
dst.nx = src.nx;
|
||||||
//}
|
dst.ny = src.ny;
|
||||||
|
dst.nz = src.nz;
|
||||||
|
}
|
||||||
|
|
||||||
dst.x = src.x;
|
dst.x = src.x;
|
||||||
dst.y = src.y;
|
dst.y = src.y;
|
||||||
@@ -301,9 +303,11 @@ void Tesselator::vertex( float x, float y, float z )
|
|||||||
if (hasColor) {
|
if (hasColor) {
|
||||||
vertex.color = _color;
|
vertex.color = _color;
|
||||||
}
|
}
|
||||||
//if (hasNormal) {
|
if (hasNormal) {
|
||||||
// vertex.normal = _normal;
|
vertex.nx = _nx;
|
||||||
//}
|
vertex.ny = _ny;
|
||||||
|
vertex.nz = _nz;
|
||||||
|
}
|
||||||
|
|
||||||
vertex.x = _sx * (x + xo);
|
vertex.x = _sx * (x + xo);
|
||||||
vertex.y = _sy * (y + yo);
|
vertex.y = _sy * (y + yo);
|
||||||
@@ -332,18 +336,22 @@ void Tesselator::setAccessMode(int mode)
|
|||||||
|
|
||||||
void Tesselator::normal( float x, float y, float z )
|
void Tesselator::normal( float x, float y, float z )
|
||||||
{
|
{
|
||||||
static int _warn_t = 0;
|
//static int _warn_t = 0;
|
||||||
if ((++_warn_t & 32767) == 1)
|
//if ((++_warn_t & 32767) == 1)
|
||||||
LOGI("WARNING: Can't use normals (Tesselator::normal)\n");
|
// LOGI("WARNING: Can't use normals (Tesselator::normal)\n");
|
||||||
return;
|
//return;
|
||||||
|
|
||||||
if (!tesselating) printf("But..");
|
if (!tesselating) printf("But..");
|
||||||
hasNormal = true;
|
hasNormal = true;
|
||||||
char xx = (char) (x * 128);
|
//char xx = (char) (x * 128);
|
||||||
char yy = (char) (y * 127);
|
//char yy = (char) (y * 127);
|
||||||
char zz = (char) (z * 127);
|
//char zz = (char) (z * 127);
|
||||||
|
|
||||||
_normal = xx | (yy << 8) | (zz << 16);
|
//_normal = xx | (yy << 8) | (zz << 16);
|
||||||
|
// trying a new thing hopefully works
|
||||||
|
this->_nx = x;
|
||||||
|
this->_ny = y;
|
||||||
|
this->_nz = z;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tesselator::offset( float xo, float yo, float zo ) {
|
void Tesselator::offset( float xo, float yo, float zo ) {
|
||||||
@@ -389,7 +397,7 @@ void Tesselator::draw()
|
|||||||
vboId = 0;
|
vboId = 0;
|
||||||
|
|
||||||
int bufferId = vboIds[vboId];
|
int bufferId = vboIds[vboId];
|
||||||
|
|
||||||
int access = GL_DYNAMIC_DRAW;//(accessMode==ACCESS_DYNAMIC) ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW;
|
int access = GL_DYNAMIC_DRAW;//(accessMode==ACCESS_DYNAMIC) ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW;
|
||||||
glBindBuffer2(GL_ARRAY_BUFFER, bufferId);
|
glBindBuffer2(GL_ARRAY_BUFFER, bufferId);
|
||||||
glBufferData2(GL_ARRAY_BUFFER, bytes, _varray, access); // GL_STREAM_DRAW
|
glBufferData2(GL_ARRAY_BUFFER, bytes, _varray, access); // GL_STREAM_DRAW
|
||||||
@@ -404,10 +412,10 @@ void Tesselator::draw()
|
|||||||
//glColorPointer2(4, GL_UNSIGNED_BYTE, VertexSizeBytes, (GLvoid*) &_varray->color);
|
//glColorPointer2(4, GL_UNSIGNED_BYTE, VertexSizeBytes, (GLvoid*) &_varray->color);
|
||||||
glEnableClientState2(GL_COLOR_ARRAY);
|
glEnableClientState2(GL_COLOR_ARRAY);
|
||||||
}
|
}
|
||||||
//if (hasNormal) {
|
if (hasNormal) {
|
||||||
// glNormalPointer(GL_BYTE, VertexSizeBytes, (GLvoid*) (6 * 4));
|
glNormalPointer(GL_FLOAT, VertexSizeBytes, (GLvoid*) (6 * 4));
|
||||||
// glEnableClientState2(GL_NORMAL_ARRAY);
|
glEnableClientState2(GL_NORMAL_ARRAY);
|
||||||
//}
|
}
|
||||||
//glVertexPointer2(3, GL_FLOAT, VertexSizeBytes, (GLvoid*)&_varray);
|
//glVertexPointer2(3, GL_FLOAT, VertexSizeBytes, (GLvoid*)&_varray);
|
||||||
glVertexPointer2(3, GL_FLOAT, VertexSizeBytes, 0);
|
glVertexPointer2(3, GL_FLOAT, VertexSizeBytes, 0);
|
||||||
glEnableClientState2(GL_VERTEX_ARRAY);
|
glEnableClientState2(GL_VERTEX_ARRAY);
|
||||||
@@ -421,7 +429,7 @@ void Tesselator::draw()
|
|||||||
glDisableClientState2(GL_VERTEX_ARRAY);
|
glDisableClientState2(GL_VERTEX_ARRAY);
|
||||||
if (hasTexture) glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
|
if (hasTexture) glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||||
if (hasColor) glDisableClientState2(GL_COLOR_ARRAY);
|
if (hasColor) glDisableClientState2(GL_COLOR_ARRAY);
|
||||||
//if (hasNormal) glDisableClientState2(GL_NORMAL_ARRAY);
|
if (hasNormal) glDisableClientState2(GL_NORMAL_ARRAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
extern const int VertexSizeBytes;
|
extern const int VertexSizeBytes;
|
||||||
|
|
||||||
typedef VertexDeclPTC VERTEX;
|
typedef VertexDeclPTCN VERTEX;
|
||||||
typedef std::map<GLuint, GLsizei> IntGLMap;
|
typedef std::map<GLuint, GLsizei> IntGLMap;
|
||||||
|
|
||||||
|
|
||||||
@@ -98,7 +98,9 @@ private:
|
|||||||
float xo, yo, zo;
|
float xo, yo, zo;
|
||||||
float u, v;
|
float u, v;
|
||||||
unsigned int _color;
|
unsigned int _color;
|
||||||
int _normal;
|
// int _normal; // trying a new thing
|
||||||
|
float _nx, _ny, _nz;
|
||||||
|
|
||||||
float _sx, _sy;
|
float _sx, _sy;
|
||||||
|
|
||||||
bool hasColor;
|
bool hasColor;
|
||||||
|
|||||||
@@ -249,6 +249,37 @@ int Textures::crispBlend( int c0, int c1 )
|
|||||||
return (a << 24) | (r << 16) | (g << 8) | b;
|
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) {
|
///*public*/ int loadHttpTexture(std::string url, std::string backup) {
|
||||||
// HttpTexture texture = httpTextures.get(url);
|
// HttpTexture texture = httpTextures.get(url);
|
||||||
// if (texture != NULL) {
|
// if (texture != NULL) {
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ public:
|
|||||||
TextureId assignTexture(const std::string& resourceName, const TextureData& img);
|
TextureId assignTexture(const std::string& resourceName, const TextureData& img);
|
||||||
const TextureData* getTemporaryTextureData(TextureId id);
|
const TextureData* getTemporaryTextureData(TextureId id);
|
||||||
|
|
||||||
|
int* loadTexturePixels(TextureId texId, const std::string& resourceName);
|
||||||
|
|
||||||
void tick(bool uploadToGraphicsCard);
|
void tick(bool uploadToGraphicsCard);
|
||||||
|
|
||||||
void clear();
|
void clear();
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ class ThinFenceTile;
|
|||||||
class StairTile;
|
class StairTile;
|
||||||
class LevelSource;
|
class LevelSource;
|
||||||
class Material;
|
class Material;
|
||||||
|
class Minecraft;
|
||||||
|
|
||||||
class TileRenderer
|
class TileRenderer
|
||||||
{
|
{
|
||||||
@@ -34,6 +35,8 @@ public:
|
|||||||
bool tesselateFenceGateInWorld(FenceGateTile* tt, int x, int y, int z);
|
bool tesselateFenceGateInWorld(FenceGateTile* tt, int x, int y, int z);
|
||||||
bool tesselateBedInWorld(Tile *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 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 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);
|
void tesselateCrossTexture(Tile* tt, int data, float x, float y, float z);
|
||||||
@@ -58,6 +61,10 @@ public:
|
|||||||
void renderTile(Tile* tile, int data);
|
void renderTile(Tile* tile, int data);
|
||||||
void renderGuiTile(Tile* tile, int data);
|
void renderGuiTile(Tile* tile, int data);
|
||||||
|
|
||||||
|
static void setUseTint(bool value) {
|
||||||
|
sideTinting = value;
|
||||||
|
}
|
||||||
|
|
||||||
static bool canRender(int renderShape);
|
static bool canRender(int renderShape);
|
||||||
private:
|
private:
|
||||||
float getWaterHeight(int x, int y, int z, const Material* m);
|
float getWaterHeight(int x, int y, int z, const Material* m);
|
||||||
@@ -66,6 +73,7 @@ private:
|
|||||||
int fixedTexture;
|
int fixedTexture;
|
||||||
bool xFlipTexture;
|
bool xFlipTexture;
|
||||||
bool noCulling;
|
bool noCulling;
|
||||||
|
static bool sideTinting;
|
||||||
|
|
||||||
bool applyAmbienceOcclusion;
|
bool applyAmbienceOcclusion;
|
||||||
float ll000, llx00, ll0y0, ll00z, llX00, ll0Y0, ll00Z;
|
float ll000, llx00, ll0y0, ll00z, llX00, ll0Y0, ll00Z;
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ typedef struct VertexDeclPTCN
|
|||||||
GLfloat x, y, z;
|
GLfloat x, y, z;
|
||||||
GLfloat u, v;
|
GLfloat u, v;
|
||||||
GLuint color;
|
GLuint color;
|
||||||
GLuint normal;
|
// GLuint normal; // trying a new thing
|
||||||
|
GLfloat nx, ny, nz;
|
||||||
|
|
||||||
} VertexDeclPTCN;
|
} VertexDeclPTCN;
|
||||||
|
|
||||||
|
|||||||
@@ -40,18 +40,18 @@ EntityRenderDispatcher::EntityRenderDispatcher()
|
|||||||
{
|
{
|
||||||
//@note: The Models (model/armor) will be deleted by resp. MobRenderer
|
//@note: The Models (model/armor) will be deleted by resp. MobRenderer
|
||||||
assign( ER_ITEM_RENDERER, new ItemRenderer());
|
assign( ER_ITEM_RENDERER, new ItemRenderer());
|
||||||
assign( ER_HUMANOID_RENDERER, new HumanoidMobRenderer(new HumanoidModel(), 0));
|
assign( ER_HUMANOID_RENDERER, new HumanoidMobRenderer(new HumanoidModel(), 0.5));
|
||||||
assign( ER_PIG_RENDERER, new PigRenderer(new PigModel(), NULL/*new PigModel(0.5f)*/, 0));
|
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));
|
assign( ER_COW_RENDERER, new MobRenderer(new CowModel(), 0.7));
|
||||||
assign( ER_CHICKEN_RENDERER, new ChickenRenderer( new ChickenModel(), 0));
|
assign( ER_CHICKEN_RENDERER, new ChickenRenderer( new ChickenModel(), 0.3));
|
||||||
assign( ER_SHEEP_RENDERER, new SheepRenderer(new SheepModel(), new SheepFurModel(), 0));
|
assign( ER_SHEEP_RENDERER, new SheepRenderer(new SheepModel(), new SheepFurModel(), 0.7));
|
||||||
assign( ER_SKELETON_RENDERER, new HumanoidMobRenderer(new SkeletonModel(), 0.5f));
|
assign( ER_SKELETON_RENDERER, new HumanoidMobRenderer(new SkeletonModel(), 0.5f));
|
||||||
assign( ER_ZOMBIE_RENDERER, new HumanoidMobRenderer(new ZombieModel(), 0.5f));
|
assign( ER_ZOMBIE_RENDERER, new HumanoidMobRenderer(new ZombieModel(), 0.5f));
|
||||||
assign( ER_CREEPER_RENDERER, new CreeperRenderer());
|
assign( ER_CREEPER_RENDERER, new CreeperRenderer());
|
||||||
assign( ER_SPIDER_RENDERER, new SpiderRenderer());
|
assign( ER_SPIDER_RENDERER, new SpiderRenderer());
|
||||||
assign( ER_TNT_RENDERER, new TntRenderer());
|
assign( ER_TNT_RENDERER, new TntRenderer());
|
||||||
assign( ER_ARROW_RENDERER, new ArrowRenderer());
|
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_THROWNEGG_RENDERER, new ItemSpriteRenderer(Item::egg->getIcon(0)));
|
||||||
assign( ER_SNOWBALL_RENDERER, new ItemSpriteRenderer(Item::snowBall->getIcon(0)));
|
assign( ER_SNOWBALL_RENDERER, new ItemSpriteRenderer(Item::snowBall->getIcon(0)));
|
||||||
assign( ER_PAINTING_RENDERER, new PaintingRenderer());
|
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);
|
EntityRenderer* renderer = getRenderer(entity);
|
||||||
if (renderer != NULL) {
|
if (renderer != NULL) {
|
||||||
renderer->render(entity, x, y, z, rot, a);
|
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,18 @@
|
|||||||
#include "../gles.h"
|
#include "../gles.h"
|
||||||
#include "../../../world/phys/AABB.h"
|
#include "../../../world/phys/AABB.h"
|
||||||
#include "EntityRenderDispatcher.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"
|
||||||
|
|
||||||
|
#include "../Lighting.h"
|
||||||
EntityRenderDispatcher* EntityRenderer::entityRenderDispatcher = NULL;
|
EntityRenderDispatcher* EntityRenderer::entityRenderDispatcher = NULL;
|
||||||
|
|
||||||
EntityRenderer::EntityRenderer()
|
EntityRenderer::EntityRenderer()
|
||||||
: shadowRadius(0),
|
: shadowRadius(0),
|
||||||
shadowStrength(1.0f)
|
shadowStrength(1.0f)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -36,37 +43,37 @@ void EntityRenderer::render(const AABB& bb, float xo, float yo, float zo) {
|
|||||||
glColor4f2(1, 1, 1, 1);
|
glColor4f2(1, 1, 1, 1);
|
||||||
t.begin();
|
t.begin();
|
||||||
t.offset(xo, yo, zo);
|
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.x0, bb.y1, bb.z0);
|
||||||
t.vertex(bb.x1, bb.y1, bb.z0);
|
t.vertex(bb.x1, bb.y1, bb.z0);
|
||||||
t.vertex(bb.x1, bb.y0, bb.z0);
|
t.vertex(bb.x1, bb.y0, bb.z0);
|
||||||
t.vertex(bb.x0, 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.x0, bb.y0, bb.z1);
|
||||||
t.vertex(bb.x1, bb.y0, bb.z1);
|
t.vertex(bb.x1, bb.y0, bb.z1);
|
||||||
t.vertex(bb.x1, bb.y1, bb.z1);
|
t.vertex(bb.x1, bb.y1, bb.z1);
|
||||||
t.vertex(bb.x0, 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.x0, bb.y0, bb.z0);
|
||||||
t.vertex(bb.x1, bb.y0, bb.z0);
|
t.vertex(bb.x1, bb.y0, bb.z0);
|
||||||
t.vertex(bb.x1, bb.y0, bb.z1);
|
t.vertex(bb.x1, bb.y0, bb.z1);
|
||||||
t.vertex(bb.x0, 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.x0, bb.y1, bb.z1);
|
||||||
t.vertex(bb.x1, bb.y1, bb.z1);
|
t.vertex(bb.x1, bb.y1, bb.z1);
|
||||||
t.vertex(bb.x1, bb.y1, bb.z0);
|
t.vertex(bb.x1, bb.y1, bb.z0);
|
||||||
t.vertex(bb.x0, 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.y0, bb.z1);
|
||||||
t.vertex(bb.x0, bb.y1, bb.z1);
|
t.vertex(bb.x0, bb.y1, bb.z1);
|
||||||
t.vertex(bb.x0, bb.y1, bb.z0);
|
t.vertex(bb.x0, bb.y1, bb.z0);
|
||||||
t.vertex(bb.x0, bb.y0, 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.y0, bb.z0);
|
||||||
t.vertex(bb.x1, bb.y1, bb.z0);
|
t.vertex(bb.x1, bb.y1, bb.z0);
|
||||||
t.vertex(bb.x1, bb.y1, bb.z1);
|
t.vertex(bb.x1, bb.y1, bb.z1);
|
||||||
@@ -116,134 +123,141 @@ Font* EntityRenderer::getFont() {
|
|||||||
return entityRenderDispatcher->getFont();
|
return entityRenderDispatcher->getFont();
|
||||||
}
|
}
|
||||||
|
|
||||||
//void postRender(Entity entity, float x, float y, float z, float rot, float a) {
|
void EntityRenderer::postRender(Entity* entity, float x, float y, float z, float rot, float a) {
|
||||||
// if (entityRenderDispatcher.options.fancyGraphics && shadowRadius > 0) {
|
if (/*entityRenderDispatcher.options.fancyGraphics &&*/entityRenderDispatcher->minecraft->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS) && shadowRadius > 0) {
|
||||||
// float dist = entityRenderDispatcher.distanceToSqr(entity.x, entity.y, entity.z);
|
float dist = entityRenderDispatcher->distanceToSqr(entity->x, entity->y, entity->z);
|
||||||
// float pow = (float) ((1 - dist / (16.0f * 16.0f)) * shadowStrength);
|
float pow = (float) ((1 - dist / (16.0f * 16.0f)) * shadowStrength);
|
||||||
// if (pow > 0) {
|
if (pow > 0) {
|
||||||
// renderShadow(entity, x, y, z, pow, a);
|
renderShadow(entity, x, y, z, pow, a);
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// if (entity.isOnFire()) renderFlame(entity, x, y, z, a);
|
if (entity->isOnFire()) renderFlame(entity, x, y, z, a);
|
||||||
//}
|
}
|
||||||
|
void EntityRenderer::renderFlame(Entity* e, float x, float y, float z, float a) {
|
||||||
|
glDisable(GL_LIGHTING);
|
||||||
|
int tex = ((Tile*)Tile::fire)->tex;
|
||||||
|
|
||||||
//void renderFlame(Entity e, float x, float y, float z, float a) {
|
int xt = (tex & 0xf) << 4;
|
||||||
// glDisable2(GL_LIGHTING);
|
int yt = tex & 0xf0;
|
||||||
// int tex = Tile.fire.tex;
|
|
||||||
|
|
||||||
// int xt = (tex & 0xf) << 4;
|
float u0 = (xt) / 256.0f;
|
||||||
// int yt = tex & 0xf0;
|
float u1 = (xt + 15.99f) / 256.0f;
|
||||||
|
float v0 = (yt) / 256.0f;
|
||||||
|
float v1 = (yt + 15.99f) / 256.0f;
|
||||||
|
|
||||||
// float u0 = (xt) / 256.0f;
|
glPushMatrix2();
|
||||||
// float u1 = (xt + 15.99f) / 256.0f;
|
glTranslatef2((float) x, (float) y, (float) z);
|
||||||
// float v0 = (yt) / 256.0f;
|
|
||||||
// float v1 = (yt + 15.99f) / 256.0f;
|
|
||||||
|
|
||||||
// glPushMatrix2();
|
float s = e->bbWidth * 1.4f;
|
||||||
// glTranslatef2((float) x, (float) y, (float) z);
|
glScalef2(s, s, s);
|
||||||
|
bindTexture("terrain.png");
|
||||||
|
Tesselator& t = Tesselator::instance;
|
||||||
|
|
||||||
// float s = e.bbWidth * 1.4f;
|
float r = 1.0f;
|
||||||
// glScalef2(s, s, s);
|
float xo = 0.5f;
|
||||||
// bindTexture("terrain.png");
|
float yo = 0.0f;
|
||||||
// Tesselator t = Tesselator.instance;
|
|
||||||
|
|
||||||
// float r = 1.0f;
|
float h = e->bbHeight / e->bbWidth;
|
||||||
// float xo = 0.5f;
|
|
||||||
// float yo = 0.0f;
|
|
||||||
|
|
||||||
// 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.draw();
|
||||||
|
glPopMatrix2();
|
||||||
|
glEnable2(GL_LIGHTING);
|
||||||
|
}
|
||||||
|
|
||||||
// glRotatef2(-entityRenderDispatcher.playerRotY, 0, 1, 0);
|
void EntityRenderer::renderShadow(Entity* e, float x, float y, float z, float pow, float a) { //
|
||||||
// glTranslatef2(0, 0, -0.4f + ((int) h) * 0.02f);
|
glEnable2(GL_BLEND);
|
||||||
// glColor4f2(1, 1, 1, 1);
|
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
// // 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);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void renderShadow(Entity e, float x, float y, float z, float pow, float a) {
|
//Textures* textures = entityRenderDispatcher->textures;
|
||||||
// glEnable2(GL_BLEND);
|
//textures->bind(textures->loadTexture("%clamp%/environment/shadow.png"));
|
||||||
// glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
Textures* textures = entityRenderDispatcher->textures;
|
||||||
|
textures->loadAndBindTexture("/misc/shadow.png");
|
||||||
|
|
||||||
|
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
|
||||||
// Textures textures = entityRenderDispatcher.textures;
|
|
||||||
// textures.bind(textures.loadTexture("%clamp%/misc/shadow.png"));
|
|
||||||
|
|
||||||
// Level level = getLevel();
|
|
||||||
|
|
||||||
// glDepthMask(false);
|
Level* level = getLevel();
|
||||||
// float r = shadowRadius;
|
|
||||||
|
|
||||||
// float ex = e.xOld + (e.x - e.xOld) * a;
|
glDepthMask(false);
|
||||||
// float ey = e.yOld + (e.y - e.yOld) * a + e.getShadowHeightOffs();
|
float r = shadowRadius;
|
||||||
// float ez = e.zOld + (e.z - e.zOld) * a;
|
|
||||||
|
|
||||||
// int x0 = Mth.floor(ex - r);
|
float ex = e->xOld + (e->x - e->xOld) * a;
|
||||||
// int x1 = Mth.floor(ex + r);
|
float ey = e->yOld + (e->y - e->yOld) * a + e->getShadowHeightOffs();
|
||||||
// int y0 = Mth.floor(ey - r);
|
float ez = e->zOld + (e->z - e->zOld) * a;
|
||||||
// int y1 = Mth.floor(ey);
|
|
||||||
// int z0 = Mth.floor(ez - r);
|
|
||||||
// int z1 = Mth.floor(ez + r);
|
|
||||||
|
|
||||||
// float xo = x - ex;
|
int x0 = Mth::floor(ex - r);
|
||||||
// float yo = y - ey;
|
int x1 = Mth::floor(ex + r);
|
||||||
// float zo = z - ez;
|
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;
|
float xo = x - ex;
|
||||||
// tt.begin();
|
float yo = y - ey;
|
||||||
// for (int xt = x0; xt <= x1; xt++)
|
float zo = z - ez;
|
||||||
// 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();
|
|
||||||
|
|
||||||
// glColor4f2(1, 1, 1, 1);
|
Tesselator& tt = Tesselator::instance;
|
||||||
// glDisable2(GL_BLEND);
|
tt.begin();
|
||||||
// glDepthMask(true);
|
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() {
|
glColor4f2(1, 1, 1, 1);
|
||||||
// return entityRenderDispatcher.level;
|
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) {
|
Level* EntityRenderer::getLevel() {
|
||||||
// Tesselator t = Tesselator.instance;
|
return entityRenderDispatcher->level;
|
||||||
// if (!tt.isCubeShaped()) return;
|
}
|
||||||
|
|
||||||
// float a = ((pow - (y - (yt + yo)) / 2) * 0.5f) * getLevel().getBrightness(xt, yt, zt);
|
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) {
|
||||||
// if (a < 0) return;
|
Tesselator& t = Tesselator::instance;
|
||||||
// if (a > 1) a = 1;
|
if (!tt->isCubeShaped()) return;
|
||||||
// t.color(1, 1, 1, (float) a);
|
|
||||||
// // glColor4f2(1, 1, 1, (float) a);
|
|
||||||
|
|
||||||
// float x0 = xt + tt.xx0 + xo;
|
float a = ((pow - (y - (yt + yo)) / 2) * 0.5f) * getLevel()->getBrightness(xt, yt, zt);
|
||||||
// float x1 = xt + tt.xx1 + xo;
|
if (a < 0) return;
|
||||||
// float y0 = yt + tt.yy0 + yo + 1.0 / 64.0f;
|
if (a > 1) a = 1;
|
||||||
// float z0 = zt + tt.zz0 + zo;
|
// t.color(1, 1, 1, (float) a);
|
||||||
// float z1 = zt + tt.zz1 + zo;
|
glColor4f2(1, 1, 1, (float) a);
|
||||||
|
|
||||||
// float u0 = (float) ((x - (x0)) / 2 / r + 0.5f);
|
float x0 = xt + tt->xx0 + xo;
|
||||||
// float u1 = (float) ((x - (x1)) / 2 / r + 0.5f);
|
float x1 = xt + tt->xx1 + xo;
|
||||||
// float v0 = (float) ((z - (z0)) / 2 / r + 0.5f);
|
float y0 = yt + tt->yy0 + yo + 1.0 / 64.0f;
|
||||||
// float v1 = (float) ((z - (z1)) / 2 / r + 0.5f);
|
float z0 = zt + tt->zz0 + zo;
|
||||||
|
float z1 = zt + tt->zz1 + zo;
|
||||||
|
|
||||||
// t.vertexUV(x0, y0, z0, u0, v0);
|
float u0 = (float) ((x - (x0)) / 2 / r + 0.5f);
|
||||||
// t.vertexUV(x0, y0, z1, u0, v1);
|
float u1 = (float) ((x - (x1)) / 2 / r + 0.5f);
|
||||||
// t.vertexUV(x1, y0, z1, u1, v1);
|
float v0 = (float) ((z - (z0)) / 2 / r + 0.5f);
|
||||||
// t.vertexUV(x1, y0, z0, u1, v0);
|
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 Entity;
|
||||||
class AABB;
|
class AABB;
|
||||||
class Font;
|
class Font;
|
||||||
|
class Tile;
|
||||||
|
class Level;
|
||||||
|
|
||||||
class EntityRenderer
|
class EntityRenderer
|
||||||
{
|
{
|
||||||
@@ -24,6 +26,11 @@ public:
|
|||||||
virtual void render(Entity* entity, float x, float y, float z, float rot, float a) = 0;
|
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 render(const AABB& bb, float xo, float yo, float zo);
|
||||||
static void renderFlat(const AABB& bb);
|
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();
|
Font* getFont();
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ void ItemRenderer::render(Entity* itemEntity_, float x, float y, float z, float
|
|||||||
else if (item->count > 1) count = 2;
|
else if (item->count > 1) count = 2;
|
||||||
|
|
||||||
glTranslatef2((float) x, (float) y + bob, (float) z);
|
glTranslatef2((float) x, (float) y + bob, (float) z);
|
||||||
//glEnable2(GL_RESCALE_NORMAL);
|
glEnable2(GL_RESCALE_NORMAL);
|
||||||
if (item->id < 256 && TileRenderer::canRender(Tile::tiles[item->id]->getRenderShape())) {
|
if (item->id < 256 && TileRenderer::canRender(Tile::tiles[item->id]->getRenderShape())) {
|
||||||
glRotatef2(spin, 0, 1, 0);
|
glRotatef2(spin, 0, 1, 0);
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ void ItemRenderer::render(Entity* itemEntity_, float x, float y, float z, float
|
|||||||
}
|
}
|
||||||
glRotatef2(180 - entityRenderDispatcher->playerRotY, 0, 1, 0);
|
glRotatef2(180 - entityRenderDispatcher->playerRotY, 0, 1, 0);
|
||||||
t.begin();
|
t.begin();
|
||||||
//t.normal(0, 1, 0);
|
t.normal(0, 1, 0);
|
||||||
t.vertexUV(0 - xo, 0 - yo, 0, u0, v1);
|
t.vertexUV(0 - xo, 0 - yo, 0, u0, v1);
|
||||||
t.vertexUV(r - xo, 0 - yo, 0, u1, v1);
|
t.vertexUV(r - xo, 0 - yo, 0, u1, v1);
|
||||||
t.vertexUV(r - xo, 1 - yo, 0, u1, v0);
|
t.vertexUV(r - xo, 1 - yo, 0, u1, v0);
|
||||||
@@ -118,7 +118,7 @@ void ItemRenderer::render(Entity* itemEntity_, float x, float y, float z, float
|
|||||||
glPopMatrix2();
|
glPopMatrix2();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//glDisable2(GL_RESCALE_NORMAL);
|
glDisable2(GL_RESCALE_NORMAL);
|
||||||
glPopMatrix2();
|
glPopMatrix2();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -226,7 +226,42 @@ void ItemRenderer::renderGuiItem(Font* font, Textures* textures, const ItemInsta
|
|||||||
t.draw();
|
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) return;
|
||||||
if (item->count > 0 && item->isDamaged()) {
|
if (item->count > 0 && item->isDamaged()) {
|
||||||
float p = std::floor(13.5f - (float) item->getDamageValue() * 13.0f / (float) item->getMaxDamage());
|
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, bool fancy);
|
||||||
static void renderGuiItem(Font* font, Textures* textures, const ItemInstance* item, float x, float y, float w, float h, 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);
|
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 renderGuiItemDecorations(const ItemInstance* item, float x, float y);
|
||||||
|
|
||||||
static void blit(float x, float y, float sx, float sy, float w, float h);
|
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);
|
//glEnable2(GL_DEPTH_TEST);
|
||||||
|
|
||||||
glPopMatrix2();
|
glPopMatrix2();
|
||||||
|
postRender(mob, x, y, z, rot, a);
|
||||||
renderName(mob, x, y, z);
|
renderName(mob, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,10 +187,12 @@ void MobRenderer::scale(Mob* mob, float a) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MobRenderer::renderName(Mob* mob, float x, float y, float z) {
|
void MobRenderer::renderName(Mob* mob, float x, float y, float z) {
|
||||||
/*
|
|
||||||
std::stringstream ss; ss << mob->entityId;
|
std::stringstream ss; ss << mob->entityId;
|
||||||
|
if (entityRenderDispatcher->minecraft->options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||||
renderNameTag(mob, ss.str(), x, y, z, 64);
|
renderNameTag(mob, ss.str(), x, y, z, 64);
|
||||||
*/
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MobRenderer::renderNameTag(Mob* mob, const std::string& name, float x, float y, float z, int maxDist) {
|
void MobRenderer::renderNameTag(Mob* mob, const std::string& name, float x, float y, float z, int maxDist) {
|
||||||
@@ -205,7 +207,11 @@ void MobRenderer::renderNameTag(Mob* mob, const std::string& name, float x, floa
|
|||||||
float s = 1 / 60.0f * size;
|
float s = 1 / 60.0f * size;
|
||||||
|
|
||||||
glPushMatrix2();
|
glPushMatrix2();
|
||||||
glTranslatef2((float) x + 0, (float) y + 1.0f /*2.3f*/, (float) z);
|
if (mob->isPlayer()){
|
||||||
|
glTranslatef2((float) x + 0, (float) y + 1.0f, (float) z);
|
||||||
|
} else {
|
||||||
|
glTranslatef2((float) x + 0, (float) y + 2.3f, (float) z);
|
||||||
|
}
|
||||||
|
|
||||||
glRotatef2(-entityRenderDispatcher->playerRotY, 0, 1, 0);
|
glRotatef2(-entityRenderDispatcher->playerRotY, 0, 1, 0);
|
||||||
glRotatef2(entityRenderDispatcher->playerRotX, 1, 0, 0);
|
glRotatef2(entityRenderDispatcher->playerRotX, 1, 0, 0);
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ void PaintingRenderer::render( Entity* entity, float x, float y, float z, float
|
|||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(float(x), float(y), float(z));
|
glTranslatef(float(x), float(y), float(z));
|
||||||
glRotatef(rot, 0, 1.0f, 0);
|
glRotatef(rot, 0, 1.0f, 0);
|
||||||
//glEnable(GL_RESCALE_NORMAL);
|
glEnable(GL_RESCALE_NORMAL);
|
||||||
bindTexture("art/kz.png");
|
bindTexture("art/kz.png");
|
||||||
Painting* painting = (Painting*)entity;
|
Painting* painting = (Painting*)entity;
|
||||||
const Motive* motive = painting->motive;
|
const Motive* motive = painting->motive;
|
||||||
@@ -17,7 +17,7 @@ void PaintingRenderer::render( Entity* entity, float x, float y, float z, float
|
|||||||
float s = 1.0f / 16.0f;
|
float s = 1.0f / 16.0f;
|
||||||
glScalef(s, s, s);
|
glScalef(s, s, s);
|
||||||
renderPainting(painting, motive->w, motive->h, motive->uo, motive->vo, a);
|
renderPainting(painting, motive->w, motive->h, motive->uo, motive->vo, a);
|
||||||
//glDisable(GL_RESCALE_NORMAL);
|
glDisable(GL_RESCALE_NORMAL);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ PlayerRenderer::PlayerRenderer( HumanoidModel* humanoidModel, float shadow )
|
|||||||
: super(humanoidModel, shadow),
|
: super(humanoidModel, shadow),
|
||||||
playerModel64(humanoidModel),
|
playerModel64(humanoidModel),
|
||||||
playerModel32(new HumanoidModel(0, 0, 64, 32)),
|
playerModel32(new HumanoidModel(0, 0, 64, 32)),
|
||||||
armorParts1(new HumanoidModel(1.0f, 0, 64, 64)),
|
armorParts1(new HumanoidModel(1.0f, 0, 64, 32)),
|
||||||
armorParts2(new HumanoidModel(0.5f, 0, 64, 64))
|
armorParts2(new HumanoidModel(0.5f, 0, 64, 32))
|
||||||
{
|
{
|
||||||
// default to legacy skin path until we know the exact texture size
|
// default to legacy skin path until we know the exact texture size
|
||||||
model = playerModel32;
|
model = playerModel32;
|
||||||
@@ -77,10 +77,10 @@ void PlayerRenderer::render(Entity* mob_, float x, float y, float z, float rot,
|
|||||||
model = desired;
|
model = desired;
|
||||||
humanoidModel = desired;
|
humanoidModel = desired;
|
||||||
}
|
}
|
||||||
// LOGI("[PlayerRenderer] %s: skin=%s, modelTex=%dx%d, desired=%s\n",
|
// LOGI("[PlayerRenderer] %s: skin=%s, modelTex=%dx%d, desired=%s\n", // don't log it always, only for debug - shredder
|
||||||
// ((Player*)mob)->name.c_str(), mob->getTexture().c_str(),
|
// ((Player*)mob)->name.c_str(), mob->getTexture().c_str(),
|
||||||
// humanoidModel->texWidth, humanoidModel->texHeight,
|
// humanoidModel->texWidth, humanoidModel->texHeight,
|
||||||
// (desired == playerModel64 ? "64" : "32"));
|
// (desired == playerModel64 ? "64" : "32"));
|
||||||
HumanoidMobRenderer::render(mob_, x, y, z, rot, a);
|
HumanoidMobRenderer::render(mob_, x, y, z, rot, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -115,6 +115,41 @@ void drawArrayVTC_NoState(int bufferId, int vertices, int vertexSize /* = 24 */)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void drawArrayVTN(int bufferId, int vertices, int vertexSize /* = 24 */) {
|
||||||
|
//if (Options::debugGl) LOGI("drawArray\n");
|
||||||
|
//LOGI("draw-vtc: %d, %d, %d\n", bufferId, vertices, vertexSize);
|
||||||
|
glEnableClientState2(GL_VERTEX_ARRAY);
|
||||||
|
glEnableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||||
|
//glEnableClientState2(GL_COLOR_ARRAY);
|
||||||
|
glEnableClientState2(GL_NORMAL_ARRAY);
|
||||||
|
|
||||||
|
glBindBuffer2(GL_ARRAY_BUFFER, bufferId);
|
||||||
|
|
||||||
|
glVertexPointer2( 3, GL_FLOAT, vertexSize, 0);
|
||||||
|
glTexCoordPointer2(2, GL_FLOAT, vertexSize, (GLvoid*) (3 * 4));
|
||||||
|
//glColorPointer2(4, GL_UNSIGNED_BYTE, vertexSize, (GLvoid*) (5*4));
|
||||||
|
glNormalPointer(GL_FLOAT, vertexSize, (GLvoid*) (6 * 4));
|
||||||
|
|
||||||
|
glDrawArrays2(GL_TRIANGLES, 0, vertices);
|
||||||
|
|
||||||
|
glDisableClientState2(GL_VERTEX_ARRAY);
|
||||||
|
glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||||
|
//glDisableClientState2(GL_COLOR_ARRAY);
|
||||||
|
glDisableClientState2(GL_NORMAL_ARRAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef drawArrayVTN_NoState
|
||||||
|
void drawArrayVTCN_NoState(int bufferId, int vertices, int vertexSize /* = 24 */) {
|
||||||
|
glBindBuffer2(GL_ARRAY_BUFFER, bufferId);
|
||||||
|
|
||||||
|
glVertexPointer2( 3, GL_FLOAT, vertexSize, 0);
|
||||||
|
glTexCoordPointer2(2, GL_FLOAT, vertexSize, (GLvoid*) (3 * 4));
|
||||||
|
//glColorPointer2(4, GL_UNSIGNED_BYTE, vertexSize, (GLvoid*) (5*4));
|
||||||
|
glNormalPointer(GL_FLOAT, vertexSize, (GLvoid*) (6 * 4));
|
||||||
|
|
||||||
|
glDrawArrays2(GL_TRIANGLES, 0, vertices);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,21 +4,25 @@
|
|||||||
#include "../../platform/log.h"
|
#include "../../platform/log.h"
|
||||||
#include "../Options.h"
|
#include "../Options.h"
|
||||||
|
|
||||||
|
#if defined(__APPLE__)
|
||||||
|
#define GLES_SILENCE_DEPRECATION
|
||||||
|
#endif
|
||||||
|
|
||||||
// Android should always run OPENGL_ES
|
// Android should always run OPENGL_ES
|
||||||
#if defined(ANDROID) || defined(__APPLE__) || defined(RPI)
|
#if defined(ANDROID) || defined(__APPLE__) || defined(RPI)
|
||||||
#define OPENGL_ES
|
#define OPENGL_ES
|
||||||
#endif
|
#endif
|
||||||
|
#define GLES_SILENCE_DEPRECATION
|
||||||
// Other systems might run it, if they #define OPENGL_ES
|
// Other systems might run it, if they #define OPENGL_ES
|
||||||
// #if defined(OPENGL_ES) // || defined(ANDROID)
|
// #if defined(OPENGL_ES) // || defined(ANDROID)
|
||||||
#define USE_VBO
|
#define USE_VBO
|
||||||
#define GL_QUADS 0x0007
|
#define GL_QUADS 0x0007
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
#import <OpenGLES/ES1/gl.height>
|
#import <OpenGLES/ES1/gl.h>
|
||||||
#import <OpenGLES/ES1/glext.height>
|
#import <OpenGLES/ES1/glext.h>
|
||||||
#elif defined(ANDROID) || defined(__EMSCRIPTEN__)
|
#elif defined(ANDROID) || defined(__EMSCRIPTEN__)
|
||||||
#include <GLES/gl.h>
|
#import <GLES/gl.h>
|
||||||
#include <GLES/glext.h>
|
#import <GLES/glext.h>
|
||||||
#else
|
#else
|
||||||
#include <glad/glad.h>
|
#include <glad/glad.h>
|
||||||
|
|
||||||
@@ -55,13 +59,18 @@ void anGenBuffers(GLsizei n, GLuint* buffer);
|
|||||||
#ifdef USE_VBO
|
#ifdef USE_VBO
|
||||||
#define drawArrayVT_NoState drawArrayVT
|
#define drawArrayVT_NoState drawArrayVT
|
||||||
#define drawArrayVTC_NoState drawArrayVTC
|
#define drawArrayVTC_NoState drawArrayVTC
|
||||||
void drawArrayVT(int bufferId, int vertices, int vertexSize = 24, unsigned int mode = GL_TRIANGLES);
|
#define drawArrayVTN_NoState drawArrayVTN
|
||||||
|
void drawArrayVT(int bufferId, int vertices, int vertexSize = 36, unsigned int mode = GL_TRIANGLES);
|
||||||
#ifndef drawArrayVT_NoState
|
#ifndef drawArrayVT_NoState
|
||||||
//void drawArrayVT_NoState(int bufferId, int vertices, int vertexSize = 24);
|
//void drawArrayVT_NoState(int bufferId, int vertices, int vertexSize = 36);
|
||||||
#endif
|
#endif
|
||||||
void drawArrayVTC(int bufferId, int vertices, int vertexSize = 24);
|
void drawArrayVTC(int bufferId, int vertices, int vertexSize = 36);
|
||||||
#ifndef drawArrayVTC_NoState
|
#ifndef drawArrayVTC_NoState
|
||||||
void drawArrayVTC_NoState(int bufferId, int vertices, int vertexSize = 24);
|
void drawArrayVTC_NoState(int bufferId, int vertices, int vertexSize = 36);
|
||||||
|
#endif
|
||||||
|
void drawArrayVTN(int bufferId, int vertices, int vertexSize = 36);
|
||||||
|
#ifndef drawArrayVTN_NoState
|
||||||
|
void drawArrayVTCN_NoState(int bufferId, int vertices, int vertexSize = 36);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -114,6 +123,7 @@ int glhUnProjectf( float winx, float winy, float winz,
|
|||||||
#define glVertexPointer2 glVertexPointer
|
#define glVertexPointer2 glVertexPointer
|
||||||
#define glColorPointer2 glColorPointer
|
#define glColorPointer2 glColorPointer
|
||||||
#define glTexCoordPointer2 glTexCoordPointer
|
#define glTexCoordPointer2 glTexCoordPointer
|
||||||
|
#define glNormalPointer2 glNormalPointer
|
||||||
#define glEnableClientState2 glEnableClientState
|
#define glEnableClientState2 glEnableClientState
|
||||||
#define glDisableClientState2 glDisableClientState
|
#define glDisableClientState2 glDisableClientState
|
||||||
#define glDrawArrays2 glDrawArrays
|
#define glDrawArrays2 glDrawArrays
|
||||||
@@ -137,7 +147,7 @@ int glhUnProjectf( float winx, float winy, float winz,
|
|||||||
//
|
//
|
||||||
// Extensions
|
// Extensions
|
||||||
//
|
//
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#define glGetProcAddress(a) wglGetProcAddress(a)
|
#define glGetProcAddress(a) wglGetProcAddress(a)
|
||||||
#else
|
#else
|
||||||
#define glGetProcAddress(a) (void*(0))
|
#define glGetProcAddress(a) (void*(0))
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
// DynamicTexture
|
// DynamicTexture
|
||||||
//
|
//
|
||||||
DynamicTexture::DynamicTexture(int tex_)
|
DynamicTexture::DynamicTexture(int tex_)
|
||||||
: tex(tex_),
|
: tex(tex_),
|
||||||
replicate(1)
|
replicate(1)
|
||||||
{
|
{
|
||||||
memset(pixels, 0, 16*16*4);
|
memset(pixels, 0, 16*16*4);
|
||||||
@@ -29,8 +29,8 @@ void DynamicTexture::bindTexture(Textures* tex) {
|
|||||||
/*
|
/*
|
||||||
WaterTexture::WaterTexture()
|
WaterTexture::WaterTexture()
|
||||||
: super(Tile::water->tex),
|
: super(Tile::water->tex),
|
||||||
_tick(0),
|
_tick(0),
|
||||||
_frame(0)
|
_frame(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ void WaterTexture::tick() {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
WaterTexture::WaterTexture()
|
WaterTexture::WaterTexture()
|
||||||
: super(Tile::water->tex),
|
: super(Tile::water->tex),
|
||||||
_tick(0),
|
_tick(0),
|
||||||
_frame(0)
|
_frame(0)
|
||||||
{
|
{
|
||||||
@@ -76,55 +76,55 @@ void WaterTexture::tick()
|
|||||||
next[x + y * 16] = pow / 3.3f + heat[x + y * 16] * 0.8f;
|
next[x + y * 16] = pow / 3.3f + heat[x + y * 16] * 0.8f;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int x = 0; x < 16; x++)
|
for (int x = 0; x < 16; x++)
|
||||||
for (int y = 0; y < 16; y++) {
|
for (int y = 0; y < 16; y++) {
|
||||||
heat[x + y * 16] += heata[x + y * 16] * 0.05f;
|
heat[x + y * 16] += heata[x + y * 16] * 0.05f;
|
||||||
|
|
||||||
if (heat[x + y * 16] < 0) heat[x + y * 16] = 0;
|
if (heat[x + y * 16] < 0) heat[x + y * 16] = 0;
|
||||||
heata[x + y * 16] -= 0.1f;
|
heata[x + y * 16] -= 0.1f;
|
||||||
if (Mth::random() < 0.05f) {
|
if (Mth::random() < 0.05f) {
|
||||||
heata[x + y * 16] = 0.5f;
|
heata[x + y * 16] = 0.5f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
float* tmp = next;
|
float* tmp = next;
|
||||||
next = current;
|
next = current;
|
||||||
current = tmp;
|
current = tmp;
|
||||||
|
|
||||||
for (int i = 0; i < 256; i++) {
|
for (int i = 0; i < 256; i++) {
|
||||||
float pow = current[i];
|
float pow = current[i];
|
||||||
if (pow > 1) pow = 1;
|
if (pow > 1) pow = 1;
|
||||||
if (pow < 0) pow = 0;
|
if (pow < 0) pow = 0;
|
||||||
|
|
||||||
float pp = pow * pow;
|
float pp = pow * pow;
|
||||||
|
|
||||||
int r = (int) (32 + pp * 32);
|
int r = (int) (32 + pp * 32);
|
||||||
int g = (int) (50 + pp * 64);
|
int g = (int) (50 + pp * 64);
|
||||||
int b = (int) (255);
|
int b = (int) (255);
|
||||||
int a = (int) (146 + pp * 50);
|
int a = (int) (146 + pp * 50);
|
||||||
|
|
||||||
//if (anaglyph3d) {
|
//if (anaglyph3d) {
|
||||||
// int rr = (r * 30 + g * 59 + b * 11) / 100;
|
// int rr = (r * 30 + g * 59 + b * 11) / 100;
|
||||||
// int gg = (r * 30 + g * 70) / (100);
|
// int gg = (r * 30 + g * 70) / (100);
|
||||||
// int bb = (r * 30 + b * 70) / (100);
|
// int bb = (r * 30 + b * 70) / (100);
|
||||||
|
|
||||||
// r = rr;
|
// r = rr;
|
||||||
// g = gg;
|
// g = gg;
|
||||||
// b = bb;
|
// b = bb;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
pixels[i * 4 + 0] = r;
|
pixels[i * 4 + 0] = r;
|
||||||
pixels[i * 4 + 1] = g;
|
pixels[i * 4 + 1] = g;
|
||||||
pixels[i * 4 + 2] = b;
|
pixels[i * 4 + 2] = b;
|
||||||
pixels[i * 4 + 3] = a;
|
pixels[i * 4 + 3] = a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// WaterSideTexture
|
// WaterSideTexture
|
||||||
//
|
//
|
||||||
WaterSideTexture::WaterSideTexture()
|
WaterSideTexture::WaterSideTexture()
|
||||||
: super(Tile::water->tex + 1),
|
: super(Tile::water->tex + 1),
|
||||||
_tick(0),
|
_tick(0),
|
||||||
_frame(0),
|
_frame(0),
|
||||||
_tickCount(0)
|
_tickCount(0)
|
||||||
@@ -164,45 +164,321 @@ void WaterSideTexture::tick() {
|
|||||||
next[x + y * 16] = pow / 3.2f + heat[x + y * 16] * 0.8f;
|
next[x + y * 16] = pow / 3.2f + heat[x + y * 16] * 0.8f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int x = 0; x < 16; x++)
|
||||||
|
for (int y = 0; y < 16; y++) {
|
||||||
|
heat[x + y * 16] += heata[x + y * 16] * 0.05f;
|
||||||
|
|
||||||
|
if (heat[x + y * 16] < 0) heat[x + y * 16] = 0;
|
||||||
|
heata[x + y * 16] -= 0.3f;
|
||||||
|
if (Mth::random() < 0.2) {
|
||||||
|
heata[x + y * 16] = 0.5f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
float* tmp = next;
|
||||||
|
next = current;
|
||||||
|
current = tmp;
|
||||||
|
|
||||||
|
for (int i = 0; i < 256; i++) {
|
||||||
|
float pow = current[(i - _tickCount * 16) & 255];
|
||||||
|
if (pow > 1) pow = 1;
|
||||||
|
if (pow < 0) pow = 0;
|
||||||
|
|
||||||
|
float pp = pow * pow;
|
||||||
|
|
||||||
|
int r = (int) (32 + pp * 32);
|
||||||
|
int g = (int) (50 + pp * 64);
|
||||||
|
int b = (int) (255);
|
||||||
|
int a = (int) (146 + pp * 50);
|
||||||
|
|
||||||
|
//if (anaglyph3d) {
|
||||||
|
// int rr = (r * 30 + g * 59 + b * 11) / 100;
|
||||||
|
// int gg = (r * 30 + g * 70) / (100);
|
||||||
|
// int 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Lava Texture
|
||||||
|
///
|
||||||
|
|
||||||
|
LavaTexture::LavaTexture()
|
||||||
|
: super(Tile::lava->tex),
|
||||||
|
_tick(0),
|
||||||
|
_frame(0)
|
||||||
|
{
|
||||||
|
current = new float[16*16];
|
||||||
|
next = new float[16*16];
|
||||||
|
heat = new float[16*16];
|
||||||
|
heata = new float[16*16];
|
||||||
|
|
||||||
|
for (int i = 0; i < 256; ++i) {
|
||||||
|
current[i] = 0;
|
||||||
|
next[i] = 0;
|
||||||
|
heat[i] = 0;
|
||||||
|
heata[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LavaTexture::~LavaTexture() {
|
||||||
|
delete[] current;
|
||||||
|
delete[] next;
|
||||||
|
delete[] heat;
|
||||||
|
delete[] heata;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LavaTexture::tick()
|
||||||
|
{
|
||||||
for (int x = 0; x < 16; x++)
|
for (int x = 0; x < 16; x++)
|
||||||
for (int y = 0; y < 16; y++) {
|
for (int y = 0; y < 16; y++) {
|
||||||
heat[x + y * 16] += heata[x + y * 16] * 0.05f;
|
float pow = 0;
|
||||||
|
int xxo = (int)(Mth::sin((float)(y) * (float)(Mth::PI) * 2.0f / 16.0f) * 1.2f);
|
||||||
if (heat[x + y * 16] < 0) heat[x + y * 16] = 0;
|
int yyo = (int)(Mth::sin((float)(x) * (float)(Mth::PI) * 2.0f / 16.0f) * 1.2f);
|
||||||
heata[x + y * 16] -= 0.3f;
|
for (int xx = x - 1; xx <= x + 1; xx++) {
|
||||||
if (Mth::random() < 0.2) {
|
for (int yy = y - 1; yy <= y + 1; yy++) {
|
||||||
heata[x + y * 16] = 0.5f;
|
int xi = xx + xxo & 15;
|
||||||
|
int yi = yy + yyo & 15;
|
||||||
|
pow += current[xi + yi * 16];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next[x + y * 16] = pow / 10.0f + (heat[(x + 0 & 15) + (y + 0 & 15) * 16] + heat[(x + 1 & 15) + (y + 0 & 15) * 16] + heat[(x + 1 & 15) + (y + 1 & 15) * 16] + heat[(x + 0 & 15) + (y + 1 & 15) * 16]) / 4.0f * 0.8f;
|
||||||
|
heat[x + y * 16] = heat[x + y * 16] + heata[x + y * 16] * 0.01f;
|
||||||
|
if (heat[x + y * 16] < 0.0f) {
|
||||||
|
heat[x + y * 16] = 0.0f;
|
||||||
|
}
|
||||||
|
heata[x + y * 16] = heata[x + y * 16] - 0.06f;
|
||||||
|
if (Mth::random() < 0.005) {
|
||||||
|
heata[x + y * 16] = 1.5f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float* tmp = next;
|
||||||
|
next = current;
|
||||||
|
current = tmp;
|
||||||
|
|
||||||
|
for (int i = 0; i < 256; i++) {
|
||||||
|
float pow = current[i] * 2.0f;
|
||||||
|
if (pow > 1) pow = 1;
|
||||||
|
if (pow < 0) pow = 0;
|
||||||
|
|
||||||
|
float pp = pow * pow;
|
||||||
|
|
||||||
|
int r = (int) (pow * 100.0f + 155.0f);
|
||||||
|
int g = (int) (pp * 255.0f);
|
||||||
|
int b = (int) (pp * pp * 128.0f);
|
||||||
|
|
||||||
|
//if (anaglyph3d) {
|
||||||
|
// int rr = (r * 30 + g * 59 + b * 11) / 100;
|
||||||
|
// int gg = (r * 30 + g * 70) / (100);
|
||||||
|
// int 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] = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Lava Side Texture
|
||||||
|
///
|
||||||
|
|
||||||
|
LavaSideTexture::LavaSideTexture()
|
||||||
|
: super(Tile::lava->tex + 1),
|
||||||
|
_tick(0),
|
||||||
|
_frame(0),
|
||||||
|
_tickCount(0)
|
||||||
|
{
|
||||||
|
replicate = 2;
|
||||||
|
|
||||||
|
current = new float[16*16];
|
||||||
|
next = new float[16*16];
|
||||||
|
heat = new float[16*16];
|
||||||
|
heata = new float[16*16];
|
||||||
|
|
||||||
|
for (int i = 0; i < 256; ++i) {
|
||||||
|
current[i] = 0;
|
||||||
|
next[i] = 0;
|
||||||
|
heat[i] = 0;
|
||||||
|
heata[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LavaSideTexture::~LavaSideTexture() {
|
||||||
|
delete[] current;
|
||||||
|
delete[] next;
|
||||||
|
delete[] heat;
|
||||||
|
delete[] heata;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LavaSideTexture::tick() {
|
||||||
|
++_tickCount;
|
||||||
|
for (int x = 0; x < 16; x++)
|
||||||
|
for (int y = 0; y < 16; y++) {
|
||||||
|
float pow = 0;
|
||||||
|
int yl = (int)(Mth::sin((float)(y) * (float)(Mth::PI)* 2.0f / 16.0f) * 1.2f); // var2 is y
|
||||||
|
int xl = (int)(Mth::sin((float)(x) * (float)(Mth::PI)* 2.0f / 16.0f) * 1.2f); // var1 is x
|
||||||
|
for (int yy = x - 1; yy <= x + 1; yy++) {
|
||||||
|
for (int xx = y - 1; xx <= y + 1; xx++) {
|
||||||
|
int xi = (yy + yl) & 15; // var8
|
||||||
|
int yi = (xx + xl) & 15; //var9
|
||||||
|
pow += current[xi + yi * 16];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next[x + y * 16] =
|
||||||
|
next[x + y * 16] =
|
||||||
|
pow / 10.0f + (
|
||||||
|
heat[(x + 0 & 15) + (y + 0 & 15) *
|
||||||
|
16] + heat[
|
||||||
|
(x + 1 & 15) + (y + 0 & 15) * 16] + heat[(x + 1 & 15) + (y + 1 & 15) *
|
||||||
|
16] + heat[
|
||||||
|
(x + 0 & 15) + (y + 1 & 15) * 16]) / 4.0f
|
||||||
|
* 0.8f;
|
||||||
|
heat[x + y * 16] = heat[x + y * 16] + heata[x + y * 16] * 0.01f;
|
||||||
|
|
||||||
|
if (heat[x + y * 16] < 0.0f) {
|
||||||
|
heat[x + y * 16] = 0.0f;
|
||||||
|
}
|
||||||
|
heata[x + y * 16] = heata[x + y * 16] - 0.06f;
|
||||||
|
|
||||||
|
if (Mth::random() < 0.005) {
|
||||||
|
heata[x + y * 16] = 1.5f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
float* tmp = next;
|
||||||
|
next = current;
|
||||||
|
current = tmp;
|
||||||
|
|
||||||
|
for (int i = 0; i < 256; i++) {
|
||||||
|
float pow = current[(i - _tickCount / 3 * 16) & 255] * 2.0f;
|
||||||
|
if (pow > 1) pow = 1;
|
||||||
|
if (pow < 0) pow = 0;
|
||||||
|
|
||||||
|
float pp = pow * pow;
|
||||||
|
|
||||||
|
int r = (int) (pow * 100.0f + 155.0f);
|
||||||
|
int g = (int) (pow * pow * 255.0f);
|
||||||
|
int b = (int) (pow * pow * pow * pow * 128.0f);
|
||||||
|
// int a = (int) (146 + pp * 50);
|
||||||
|
|
||||||
|
//if (anaglyph3d) {
|
||||||
|
// int rr = (r * 30 + g * 59 + b * 11) / 100;
|
||||||
|
// int gg = (r * 30 + g * 70) / (100);
|
||||||
|
// int 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] = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FireTexture::FireTexture(int id)
|
||||||
|
: super(((Tile*)Tile::fire)->tex + id * 16),
|
||||||
|
_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;
|
float* tmp = next;
|
||||||
next = current;
|
next = current;
|
||||||
current = tmp;
|
current = tmp;
|
||||||
|
|
||||||
for (int i = 0; i < 256; i++) {
|
for (int i = 0; i < 256; i++) {
|
||||||
float pow = current[(i - _tickCount * 16) & 255];
|
float pow = this->current[i] * 1.8f;
|
||||||
if (pow > 1) pow = 1;
|
if (pow > 1.0f) {
|
||||||
if (pow < 0) pow = 0;
|
pow = 1.0f;
|
||||||
|
}
|
||||||
|
if (pow < 0.0f) {
|
||||||
|
pow = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
float pp = pow * pow;
|
|
||||||
|
|
||||||
int r = (int) (32 + pp * 32);
|
int r = (int) (pow * 155.0f + 100.0f);
|
||||||
int g = (int) (50 + pp * 64);
|
int g = (int)(pow * pow * 255.0f);
|
||||||
int b = (int) (255);
|
int b = (int)(pow * pow * pow * pow * pow * pow * pow * pow * pow * pow * 255.0f);
|
||||||
int a = (int) (146 + pp * 50);
|
int a = 255;
|
||||||
|
if (pow < 0.5f) {
|
||||||
|
a = 0;
|
||||||
|
}
|
||||||
|
|
||||||
//if (anaglyph3d) {
|
// @TODO: cant be arsed rn to implement the anaglyph3d check would be nice to check if it does - shredder
|
||||||
// int rr = (r * 30 + g * 59 + b * 11) / 100;
|
//if (this->anaglyph3d) {
|
||||||
// int gg = (r * 30 + g * 70) / (100);
|
// float rr = (r * 30 + g * 59 + b * 11) / 100;
|
||||||
// int bb = (r * 30 + b * 70) / (100);
|
// float gg = (r * 30 + g * 70) / 100;
|
||||||
|
// float bb = (r * 30 + b * 70) / 100;
|
||||||
// r = rr;
|
// r = rr;
|
||||||
// g = gg;
|
// g = gg;
|
||||||
// b = bb;
|
// b = bb;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
pixels[i * 4 + 0] = r;
|
pixels[i * 4 + 0] = r;
|
||||||
pixels[i * 4 + 1] = g;
|
pixels[i * 4 + 1] = g;
|
||||||
pixels[i * 4 + 2] = b;
|
pixels[i * 4 + 2] = b;
|
||||||
pixels[i * 4 + 3] = a;
|
pixels[i * 4 + 3] = a;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -56,4 +56,59 @@ public:
|
|||||||
void tick();
|
void tick();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class LavaTexture: public DynamicTexture
|
||||||
|
{
|
||||||
|
typedef DynamicTexture super;
|
||||||
|
int _tick;
|
||||||
|
int _frame;
|
||||||
|
|
||||||
|
float* current;
|
||||||
|
float* next;
|
||||||
|
float* heat;
|
||||||
|
float* heata;
|
||||||
|
|
||||||
|
public:
|
||||||
|
LavaTexture();
|
||||||
|
~LavaTexture();
|
||||||
|
|
||||||
|
void tick();
|
||||||
|
};
|
||||||
|
|
||||||
|
class LavaSideTexture: public DynamicTexture
|
||||||
|
{
|
||||||
|
typedef DynamicTexture super;
|
||||||
|
int _tick;
|
||||||
|
int _frame;
|
||||||
|
int _tickCount;
|
||||||
|
|
||||||
|
float* current;
|
||||||
|
float* next;
|
||||||
|
float* heat;
|
||||||
|
float* heata;
|
||||||
|
|
||||||
|
public:
|
||||||
|
LavaSideTexture();
|
||||||
|
~LavaSideTexture();
|
||||||
|
|
||||||
|
void tick();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class FireTexture: public DynamicTexture
|
||||||
|
{
|
||||||
|
typedef DynamicTexture super;
|
||||||
|
int _tick;
|
||||||
|
int _frame;
|
||||||
|
|
||||||
|
float* current;
|
||||||
|
float* next;
|
||||||
|
float* heat;
|
||||||
|
float* heata;
|
||||||
|
|
||||||
|
public:
|
||||||
|
FireTexture(int id);
|
||||||
|
~FireTexture();
|
||||||
|
|
||||||
|
void tick();
|
||||||
|
};
|
||||||
#endif /*NET_MINECRAFT_CLIENT_RENDERER_PTEXTURE__DynamicTexture_H__*/
|
#endif /*NET_MINECRAFT_CLIENT_RENDERER_PTEXTURE__DynamicTexture_H__*/
|
||||||
|
|||||||