77 Commits

Author SHA1 Message Date
676fd54982 Landscape mode on Android PWA 2026-05-13 13:52:00 +02:00
084607cc86 Merge remote-tracking branch 'origin/main' into web-changes-android
Merged main repo changes
2026-05-13 13:22:21 +02:00
ce182b676f Merge pull request 'added missing audio random.burp when finishing a food item' (#14) from sas3/minecraft-pe-0.6.1:main into main
Reviewed-on: Kolyah35/minecraft-pe-0.6.1#14
2026-05-12 21:50:28 +02:00
bbd81665a6 Fix multitouch on web 2026-05-12 17:40:10 +02:00
06398e98e2 Made progressive web app installable 2026-05-12 17:09:27 +02:00
7d9328b865 Adaptation to be able to play on android 2026-05-12 14:59:04 +02:00
f1111d06c2 Scroll on settings 2026-05-12 14:32:05 +02:00
ba9f1da758 Simple http server web 2026-05-12 14:23:26 +02:00
Shredder
4b69a1240a Some fixes
Fixed Missing Lighting calls and GL states which was causing stars to render too early

Split Controls should hopefully work on phones now

Chickens should hopefully lay eggs now
2026-05-12 02:25:04 +05:00
Shredder
8f34fbc1ec It isn't a commit without a linux compilation fail 2026-05-11 05:07:07 +05:00
Shredder
890604256b Fixes and New Additions
Added GUI Styles with 3 options: Java, Pi/Xperia and Pocket

Hopefully fixed touch input eating and breaking blocks bug

Fire should render on all mobs now

Fixed only one side of the first person burning animation being animated

Added Window Scaling Option for PC Users (Hasn't been tested on other platforms

Render Distance is now configurable from the settings menu

Tried to fix shadows again on IOS and Android, hopefully works?

Block Outline Selection now has a thicker outline for better visibility
2026-05-11 04:51:03 +05:00
Shredder
792d4b32e7 Fixed Grass Foliage color using foliagecolor.png instead of grasscolor.png
Debug Screen now also renders mob id nametags like in beta java

SkyDarken is now also no longer clamped in Java Fog Style
2026-05-09 06:27:30 +05:00
Shredder
2da05d94c8 should return some value in the debug stuff so nothing breaks 2026-05-07 14:06:01 +05:00
Shredder
a0e99e2f03 debug screen ifdef case because linux compilation is hell 2026-05-07 13:59:13 +05:00
Shredder
b6ea0c7dc3 this has to be an insanely hacky solution to get it working on linux again 2026-05-07 13:50:08 +05:00
Shredder
620b358ba7 i love when my errors are cryptic 2026-05-07 13:33:57 +05:00
Shredder
edc6985a6b opengl and gles and their damn deprecated functions 2026-05-05 01:18:57 +05:00
Shredder
9cd91b1508 should finally work hopefully... 2026-05-05 01:05:57 +05:00
Shredder
9c46d7094c sigh converted to_string calls to sprintf 2026-05-05 00:51:03 +05:00
Shredder
52afff463b left a debug opengl only feature accidentally in, and also hopefully fixed include mess 2026-05-05 00:21:37 +05:00
Shredder
0d23fadc3e how did this even slip past me 2026-05-05 00:13:05 +05:00
Shredder
614e018dc6 fixed merge 2026-05-05 00:05:17 +05:00
Shredder
e346df682c Another Huge Commit my bad - shredder
Restored Java's Debug Screen using partial unused code and ported code, avaliable in options menu as a style

Slight Water texture is now overlayed when in water

Vignette function has been fixed and can now be toggled in options

World Generation now includes Tall Grass and Ferns both

Broken Frame Chart Graph found in the source has now been fixed and enabled when debug screen is turned on

Pie Chart works now and will appear when debug screen is opened

Most changes have not been tested on anything besides windows, will test it
2026-05-04 01:28:27 +05:00
Shredder
31d80aedf8 Massive Java Parity Update - fileshredder
3D/Fancy Clouds have been ported over

Sky Rendering is now an option between Java and PE

Java Sky/Fog color option is now accurate using the original color ramp instead of PE's slightly lower one

Grass Sides are now tinted, and can be toggled in settings

Added stars, the sun, and the moon in the daylight cycle

Sunset color has been added, appears when the sun is rising or falling, buggy on PE's sky rendering option.

Fixed leaves being rendered bright green when foliage tinting was turned off.

Enabled Tall Grass generation code

Tall Grass is now tinted.

Other compile options have to be tested
2026-04-25 04:47:07 +05:00
Kolyah35
bc82f5c091 FIX: Completely remove renderSky() codeblock 2026-04-15 01:06:48 +03:00
8d7a1973e7 Merge pull request 'Fix upper sky cut when using fancy graphics' (#22) from Dram27/minecraft-pe-0.6.1:fix-height-based-culling into main
Reviewed-on: https://192.168.0.2:3000/Kolyah35/minecraft-pe-0.6.1/pulls/22
2026-04-15 00:04:39 +02:00
3a0f4c3647 Fix upper sky cut when using fancy graphics 2026-04-13 17:42:19 +02:00
Shredder
d6a3e477c1 forgot to move the clamp calls below 2026-04-12 02:29:27 +05:00
Shredder
4d68c4dff8 forgot to change vertex size for touch circle, also shadow attempt fix again 2026-04-12 02:26:54 +05:00
Shredder
e1c2210621 sigh, another attempt at fixing normal shading for android 2026-04-12 02:09:42 +05:00
Shredder
c188fa0ce2 Attempt to fix Normal Lighting and Shadows on Android, also disabled fancy trees temporarily due to performance issues on android. 2026-04-12 01:12:17 +05:00
Shredder
9db9f469cc xcode attempt 2 2026-04-11 20:40:56 +05:00
Shredder
db7a889962 please xcode work with me here 2026-04-11 20:33:14 +05:00
Shredder
95a193323c ios compile fix attempt again.... xcode my behated 2026-04-11 20:28:00 +05:00
Shredder
f19c2d24a3 Attempt to fix Normal Shading on Android and fix IOS compile, also hopefully fixes the millions of errors in the ios logs 2026-04-11 19:39:46 +05:00
Shredder
e1b81a7cc3 another attempt... i hate gles... 2026-04-11 15:21:21 +05:00
Shredder
baeefae94d synced branch

2026-04-11 14:46:36 +05:00
Shredder
aa9fa659df Extremely Big Update - fileshredder
(MAJOR)Added Java Beta/Normal Shading, toggleble in settings

Fixed and restored the unused Item Switching Animation, toggleble in tweaks too

Added Dynamic Texture for Lava

Added option to use Block Outline Selection which was unused normally

Added Split Touch Controls into Options

Mobs will now drop cooked variants of their meat if they died by fire

Fixed Untranslated Strings in Settings

(MAJOR) Ravines and Lava/Water pools have been fixed and renabled

Tweaked BasicTree to hopefully speed up generation a bit, might disable them temporarily if they keep being slow

You can now grow Fancy Oak Trees using saplings.
2026-04-11 14:45:47 +05:00
Kolyah35
6049239303 why tf apks in releases are zipped 2026-04-10 23:53:18 +03:00
Shredder
55d06f0590 Merge branch 'main' of https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1 2026-04-09 04:35:25 +05:00
Shredder
58b7724ba2 fileshredder - fixed fire tile's alpha transparency and fixed vanilla bug where hotbar slots are not rendered transparent like how they are in Beta Java 2026-04-09 04:34:10 +05:00
6ae787b90d Merge PR 'Support for iOS builds!' (#21) | Many thanks to deepfriedwaffles!
Reviewed-on: https://192.168.0.2:3000/Kolyah35/minecraft-pe-0.6.1/pulls/21
2026-04-06 21:58:19 +02:00
Kolyah35
fe73853a64 defined() would be better ig 2026-04-06 22:49:54 +03:00
845d721b1e fixed compile issues from main rebase and lowered ios minimum deployment back to 12 2026-04-06 14:48:46 -04:00
d7a02bfc90 Added iOS comppiling instructions to README 2026-04-06 14:28:07 -04:00
13fd830361 fixed the possible broken header search and added all jobs including ios to publish 2026-04-06 14:28:07 -04:00
Kolyah35
a96b942c17 FIX: web and android compilation 2026-04-06 14:28:07 -04:00
Kolyah35
c476153231 FIX: other platforms compilation 2026-04-06 14:28:07 -04:00
412a34562f Lowered minimum deployment to iOS 12, rather than iOS 14 2026-04-06 14:28:06 -04:00
98dd53e2f5 Update .github/workflows/build.yml
I keep messing this up. For now I am removing all the needs for publish except iOS
2026-04-06 14:28:06 -04:00
6f0c485a9f removed if line from publish to always run it. can we not skip publish thanks 2026-04-06 14:28:06 -04:00
7cc33b011d Fixed bugs in starting the game. ALso added build job for iOS ipa unsigned 2026-04-06 14:28:06 -04:00
aeb8e45879 fixed button not pressable on ios 2026-04-06 14:28:06 -04:00
d554767309 IT COMPILESgit add .! also added full screen support. see issues. 2026-04-06 14:28:06 -04:00
aec534d948 restore include paths for cross-platform builds because i messed absolutely every #include up. 2026-04-06 14:28:06 -04:00
8867878ccf more refactoring for iOS 2026-04-06 14:28:06 -04:00
44ece561e8 fixed slider for hopefully the final fucking time. Nether Reactor fix: Need to make the array for building it all unsigned integers as now Xcode is strict about the new C++ Standards as they have changed since 2011 2026-04-06 14:28:06 -04:00
22b59bd2cc Synced options UI files from main branch 2026-04-06 14:28:06 -04:00
705c4154ee gonna try changing all Options::Option* in the whole project to just Option* not sure if this works but it gets the compiler to shut up. if this breaks everything change all 'Option*' to 'Options::Option*' as it once was. 2026-04-06 14:28:06 -04:00
59898ca504 more header fixes 2026-04-06 14:28:06 -04:00
b658132dac fix missing file, commiting now because what im about to do might break Option class 2026-04-06 14:28:06 -04:00
ab5f177208 added needed missing files 2026-04-06 14:28:06 -04:00
72b68389b2 Started to port to iOS; fixing compiler errors here and there 2026-04-06 14:28:06 -04:00
Shredder
59ba8bfb7c my bad should be fixed now 2026-04-06 10:00:12 +05:00
Shredder
ef32fcfe08 attempt again 2026-04-06 02:26:46 +05:00
Shredder
2237515793 fileshredder - linux compile fix 2026-04-06 02:15:35 +05:00
Shredder
e272991159 fileshredder - minor goof up 2026-04-06 02:05:23 +05:00
Shredder
055f00be49 A bit big of a commit but
Added 3 Fog Choices (Pocket) (Java) (Unknown that was unused)

Restored Java Beta Sky Color code that was unused that depends on biome temperature (choosable using Java fog)

Tile Shadows and Entity Shadows that appear beneath them have been restored and fixed from the unused code, toggleable by turning fancy graphics on or off

Entities will now render flames on themselves when on fire, including the player

Added option to use Java Style Item Count text and position in tweaks

- fileshredder
2026-04-06 01:52:27 +05:00
Shredder
378dfe8e22 award for brain of a goldfish goes to me 2026-04-03 15:54:48 +05:00
Shredder
61f0124beb oops forgot to define some things 2026-04-03 15:37:15 +05:00
Shredder
ff5c57f6ba Added Foliage and Grass Color tinting, Started Basic Work on restoring ravines, New Option to Toggle Tinting. 2026-04-03 14:55:33 +05:00
Shredder
eac71a93d1 ok this should finally work now 2026-04-02 01:35:06 +05:00
Shredder
fa249728e5 hopefully fixes broken build 2026-04-02 01:19:47 +05:00
Shredder
84e8744387 oops forgot to include the other files. 2026-04-01 23:37:37 +05:00
Shredder
27f0287986 Ported over Spooner Trees (Fancy Trees), Flint and Steel can be used to ignite fire now and modified Forest and Rainforest to generate spooner trees. 2026-04-01 23:31:15 +05:00
Shredder
109bbcfdb1 Added Rendering and Dynamic texture for Fire and it's behaviour 2026-04-01 14:03:38 +05:00
SAS_OP
88ef7f3d17 added missing audio random.burp when finishing a food item 2026-03-25 06:07:49 +03:00
144 changed files with 9438 additions and 3261 deletions

View File

@@ -72,6 +72,30 @@ jobs:
${{github.workspace}}/build/OpenAL32.dll ${{github.workspace}}/build/OpenAL32.dll
${{github.workspace}}/build/libz.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: Build Linux name: Build Linux
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -192,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
@@ -266,8 +280,7 @@ jobs:
publish: publish:
name: Publish name: Publish
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [ build-windows, build-linux, build-android, build-web ] needs: [ build-windows, build-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
@@ -299,17 +312,10 @@ 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
uses: vimtor/action-zip@v1.2
with:
files: minecraftpe-apk-armeabi-v7a/minecraftpe-v7a-debug.apk
dest: minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.zip
- name: Zip Web Artifact - name: Zip Web Artifact
uses: vimtor/action-zip@v1.2 uses: vimtor/action-zip@v1.2
@@ -335,9 +341,9 @@ jobs:
MinecraftPE development release for commit ${{ github.sha }}. MinecraftPE development release for commit ${{ github.sha }}.
files: | files: |
./data.zip ./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 ./minecraftpe-${{ steps.ref.outputs.hash }}-web.zip

View File

@@ -166,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"
@@ -199,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"
@@ -258,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"
@@ -306,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"
) )
@@ -332,7 +339,11 @@ if(${PLATFORM} MATCHES "Web")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EM_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EM_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EM_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EM_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EM_FLAGS} --preload-file ${CMAKE_SOURCE_DIR}/data@/data") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EM_FLAGS} --preload-file \"${CMAKE_SOURCE_DIR}/data@/data\"")
set_target_properties(${PROJECT_NAME} PROPERTIES RULE_LAUNCH_LINK "set EMCC_WASM_OPT=0 &&")
# Remove -g (DWARF) to prevent wasm-opt post-link optimizations from running
string(REPLACE "-g" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
string(REPLACE "-g" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
target_compile_options(${PROJECT_NAME} PUBLIC target_compile_options(${PROJECT_NAME} PUBLIC
"-Os" "-Os"
@@ -348,7 +359,7 @@ if(${PLATFORM} MATCHES "Web")
"-sFORCE_FILESYSTEM=1" "-sFORCE_FILESYSTEM=1"
"-sLEGACY_GL_EMULATION=1" "-sLEGACY_GL_EMULATION=1"
"-sGL_UNSAFE_OPTS=0" "-sGL_UNSAFE_OPTS=0"
"-sEMULATE_FUNCTION_POINTER_CASTS=1" "-sEMULATE_FUNCTION_POINTER_CASTS=0"
"-sALLOW_TABLE_GROWTH=1" "-sALLOW_TABLE_GROWTH=1"
"-sEXPORTED_RUNTIME_METHODS=['FS','stringToUTF8','UTF8ToString','cwrap','ccall','HEAP8','HEAPU8','HEAP32','HEAPU32']" "-sEXPORTED_RUNTIME_METHODS=['FS','stringToUTF8','UTF8ToString','cwrap','ccall','HEAP8','HEAPU8','HEAP32','HEAPU32']"
"-sEXPORTED_FUNCTIONS=['_main']" "-sEXPORTED_FUNCTIONS=['_main']"
@@ -397,6 +408,10 @@ else()
TARGET ${PROJECT_NAME} TARGET ${PROJECT_NAME}
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/index.html" $<TARGET_FILE_DIR:${PROJECT_NAME}> COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/index.html" $<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/coi-serviceworker.js" $<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/manifest.json" $<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/icon-192.png" $<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/icon-512.png" $<TARGET_FILE_DIR:${PROJECT_NAME}>
) )
endif() endif()

View File

@@ -176,7 +176,7 @@ cmake --build .
2. Configure and build project: 2. Configure and build project:
``` ```
mkdir build && cd build mkdir build && cd build
cmake .. -B . -G Ninja "-DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE="$env:EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
cmake --build . --target MinecraftPE cmake --build . --target MinecraftPE
``` ```
> [!Note] > [!Note]
@@ -198,3 +198,38 @@ cmake --build .
``` ```
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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
data/images/misc/shadow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 868 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
data/images/misc/water.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

BIN
data/images/terrain/sun.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 799 B

View File

@@ -153,6 +153,32 @@ 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.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.autoJump=Auto Jump
options.thirdperson=Third Person options.thirdperson=Third Person
options.servervisible=Server Visible options.servervisible=Server Visible
@@ -181,6 +207,7 @@ options.graphics.fancy=Fancy
options.graphics.fast=Fast options.graphics.fast=Fast
options.guiScale=GUI Scale options.guiScale=GUI Scale
options.guiScale.auto=Auto options.guiScale.auto=Auto
options.guiScale.tiny=Tiny
options.guiScale.small=Small options.guiScale.small=Small
options.guiScale.medium=Medium options.guiScale.medium=Medium
options.guiScale.large=Large options.guiScale.large=Large
@@ -199,10 +226,17 @@ options.smoothCamera=Smooth camera
options.destroyVibration=Destroy vibration options.destroyVibration=Destroy vibration
options.isLeftHanded=Left handed options.isLeftHanded=Left handed
options.useTouchscreen=Use touchscreen options.useTouchscreen=Use touchscreen
options.touchOverride=Touch Mode Override
options.fancyGraphics=Fancy graphics 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

View File

@@ -0,0 +1,26 @@
/* coi-serviceworker.js - Cross-Origin Isolation + PWA support */
// Service Worker context
self.addEventListener("install", () => self.skipWaiting());
self.addEventListener("activate", (event) =>
event.waitUntil(self.clients.claim())
);
self.addEventListener("fetch", (event) => {
if (event.request.method !== "GET") return;
event.respondWith(
fetch(event.request).then((response) => {
if (response.status === 0 || response.type === "opaque") return response;
const headers = new Headers(response.headers);
headers.set("Cross-Origin-Embedder-Policy", "require-corp");
headers.set("Cross-Origin-Opener-Policy", "same-origin");
headers.set("Cross-Origin-Resource-Policy", "cross-origin");
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers,
});
}).catch(() => fetch(event.request))
);
});

BIN
misc/web/icon-192.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
misc/web/icon-512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -2,6 +2,12 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="manifest" href="manifest.json">
<meta name="theme-color" content="#000000">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="apple-touch-icon" href="icon-192.png">
<title>MCPE 0.6.1</title> <title>MCPE 0.6.1</title>
<style> <style>
html, body { html, body {
@@ -16,6 +22,10 @@
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
display: block; display: block;
touch-action: none;
user-select: none;
-webkit-user-select: none;
-webkit-tap-highlight-color: transparent;
} }
</style> </style>
</head> </head>
@@ -23,6 +33,40 @@
<canvas id="canvas"></canvas> <canvas id="canvas"></canvas>
<script>
if ('serviceWorker' in navigator) {
var reloadedForSw = false;
navigator.serviceWorker.register('./coi-serviceworker.js', { scope: './' }).then(function () {
navigator.serviceWorker.addEventListener('controllerchange', function () {
if (reloadedForSw) return;
reloadedForSw = true;
window.location.reload();
});
}).catch(function (error) {
console.warn('Service worker registration failed:', error);
});
}
</script>
<script>
function isAndroid() {
return /Android/i.test(navigator.userAgent || '');
}
function lockLandscapeOnAndroid() {
if (!isAndroid()) return;
var orientation = screen.orientation;
if (!orientation || typeof orientation.lock !== 'function') return;
orientation.lock('landscape').catch(function () {});
}
lockLandscapeOnAndroid();
window.addEventListener('pointerdown', lockLandscapeOnAndroid, { once: true });
window.addEventListener('touchstart', lockLandscapeOnAndroid, { once: true, passive: true });
</script>
<script> <script>
var Module = { var Module = {
canvas: document.getElementById('canvas'), canvas: document.getElementById('canvas'),

25
misc/web/manifest.json Normal file
View File

@@ -0,0 +1,25 @@
{
"name": "MCPE 0.6.1",
"short_name": "MCPE 0.6.1",
"description": "Minecraft Pocket Edition 0.6.1 Alpha - Web Build",
"id": "./",
"start_url": "./",
"scope": "./",
"display_override": ["standalone"],
"display": "standalone",
"orientation": "landscape",
"background_color": "#000000",
"theme_color": "#000000",
"icons": [
{
"src": "icon-192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "icon-512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}

View File

@@ -167,6 +167,7 @@ options.graphics.fancy=Fancy
options.graphics.fast=Fast options.graphics.fast=Fast
options.guiScale=GUI Scale options.guiScale=GUI Scale
options.guiScale.auto=Auto options.guiScale.auto=Auto
options.guiScale.tiny=Tiny
options.guiScale.small=Small options.guiScale.small=Small
options.guiScale.medium=Medium options.guiScale.medium=Medium
options.guiScale.large=Large options.guiScale.large=Large

View File

@@ -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 \

View File

@@ -167,6 +167,7 @@ options.graphics.fancy=Fancy
options.graphics.fast=Fast options.graphics.fast=Fast
options.guiScale=GUI Scale options.guiScale=GUI Scale
options.guiScale.auto=Auto options.guiScale.auto=Auto
options.guiScale.tiny=Tiny
options.guiScale.small=Small options.guiScale.small=Small
options.guiScale.medium=Medium options.guiScale.medium=Medium
options.guiScale.large=Large options.guiScale.large=Large

View File

@@ -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 \

View File

@@ -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"),

View 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>

View File

@@ -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;

View File

@@ -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>

View File

@@ -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;

View File

@@ -275,7 +275,9 @@ 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;

View File

@@ -115,10 +115,11 @@ void NinecraftApp::init()
LOGI("This: %p\n", this); LOGI("This: %p\n", this);
screenChooser.setScreen(SCREEN_STARTMENU); screenChooser.setScreen(SCREEN_STARTMENU);
if (options.getBooleanValue(OPTIONS_FIRST_LAUNCH)) { // Disabled: Show username screen on first launch
options.toggle(OPTIONS_FIRST_LAUNCH); // if (options.getBooleanValue(OPTIONS_FIRST_LAUNCH)) {
setScreen(new UsernameScreen()); // options.toggle(OPTIONS_FIRST_LAUNCH);
} // setScreen(new UsernameScreen());
// }
#else #else
hostMultiplayer(); hostMultiplayer();
#endif #endif

21
src/client/KeyMapping.h Normal file
View 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__*/

View File

@@ -8,6 +8,7 @@
#include <string> #include <string>
#include <cstdlib> #include <cstdlib>
#if defined(APPLE_DEMO_PROMOTION) #if defined(APPLE_DEMO_PROMOTION)
#define NO_NETWORK #define NO_NETWORK
#endif #endif
@@ -90,6 +91,10 @@
#include "../network/command/CommandServer.h" #include "../network/command/CommandServer.h"
#include "gamemode/CreatorMode.h" #include "gamemode/CreatorMode.h"
#include "../world/level/GrassColor.h"
#include "renderer/LevelRenderer.h"
#include "particle/ParticleEngine.h"
#include "../world/level/Level.h"
static void checkGlError(const char* tag) { static void checkGlError(const char* tag) {
#ifdef GLDEBUG #ifdef GLDEBUG
while (1) { while (1) {
@@ -474,19 +479,20 @@ void Minecraft::update() {
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
Multitouch::resetThisUpdate(); Multitouch::resetThisUpdate();
#endif #endif
TIMER_POP();
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
TIMER_POP();
checkGlError("Update finished"); checkGlError("Update finished");
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) { if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
#ifndef PLATFORM_DESKTOP //#ifndef PLATFORM_DESKTOP
if (!PerfTimer::enabled) { if (!PerfTimer::enabled) {
PerfTimer::reset(); PerfTimer::reset();
PerfTimer::enabled = true; PerfTimer::enabled = true;
} }
_perfRenderer->renderFpsMeter(1); _perfRenderer->renderFpsMeter(1);
checkGlError("render debug"); checkGlError("render debug");
#endif //#endif
} else { } else {
PerfTimer::enabled = false; PerfTimer::enabled = false;
} }
@@ -744,6 +750,7 @@ void Minecraft::tickInput() {
int dst = options.getIntValue(OPTIONS_VIEW_DISTANCE); int dst = options.getIntValue(OPTIONS_VIEW_DISTANCE);
options.set(OPTIONS_VIEW_DISTANCE, (dst + 1) % 4); options.set(OPTIONS_VIEW_DISTANCE, (dst + 1) % 4);
} }
#ifdef CHEATS #ifdef CHEATS
if (key == Keyboard::KEY_U) { if (key == Keyboard::KEY_U) {
onGraphicsReset(); onGraphicsReset();
@@ -827,10 +834,16 @@ void Minecraft::tickInput() {
} }
#endif #endif
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
if (key >= '0' && key <= '9') {
_perfRenderer->debugFpsMeterKeyPress(key - '0');
}
}
if (key == Keyboard::KEY_ESCAPE) if (key == Keyboard::KEY_ESCAPE)
pauseGame(false); pauseGame(false);
#ifndef OPENGL_ES #ifdef PLATFORM_DESKTOP
if (key == Keyboard::KEY_P) { if (key == Keyboard::KEY_P) {
static bool isWireFrame = false; static bool isWireFrame = false;
isWireFrame = !isWireFrame; isWireFrame = !isWireFrame;
@@ -851,6 +864,7 @@ void Minecraft::tickInput() {
static bool prevMouseDownLeft = false; static bool prevMouseDownLeft = false;
if (!useTouchscreen()) {
if (Mouse::getButtonState(MouseAction::ACTION_LEFT) == 0) { if (Mouse::getButtonState(MouseAction::ACTION_LEFT) == 0) {
gameMode->stopDestroyBlock(); gameMode->stopDestroyBlock();
} }
@@ -858,6 +872,7 @@ void Minecraft::tickInput() {
if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) { if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) {
gameMode->releaseUsingItem(player); gameMode->releaseUsingItem(player);
} }
}
if (useTouchscreen()) { if (useTouchscreen()) {
// Touch: gesture recognizer classifies the action type (turn/destroy/build) // Touch: gesture recognizer classifies the action type (turn/destroy/build)
@@ -1105,9 +1120,14 @@ void Minecraft::releaseMouse()
} }
bool Minecraft::useTouchscreen() { bool Minecraft::useTouchscreen() {
#ifdef RPI #if defined(TARGET_OS_IPHONE)
return true;
#elif defined(RPI)
return false; return false;
#endif #endif
if (options.getBooleanValue(OPTIONS_TOUCH_OVERRIDE)) {
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN);
}
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen; return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen;
} }
bool Minecraft::supportNonTouchScreen() { bool Minecraft::supportNonTouchScreen() {
@@ -1125,12 +1145,38 @@ void Minecraft::init()
textures = new Textures(&options, platform()); textures = new Textures(&options, platform());
textures->addDynamicTexture(new WaterTexture()); textures->addDynamicTexture(new WaterTexture());
textures->addDynamicTexture(new WaterSideTexture()); textures->addDynamicTexture(new WaterSideTexture());
textures->addDynamicTexture(new LavaTexture());
textures->addDynamicTexture(new LavaSideTexture());
textures->addDynamicTexture(new FireTexture(0));
textures->addDynamicTexture(new FireTexture(1));
gui.texturesLoaded(textures); gui.texturesLoaded(textures);
levelRenderer = new LevelRenderer(this); levelRenderer = new LevelRenderer(this);
gameRenderer = new GameRenderer(this); gameRenderer = new GameRenderer(this);
particleEngine = new ParticleEngine(level, textures); particleEngine = new ParticleEngine(level, textures);
// 4j's code for reference
// FoliageColor::init(textures->loadTexturePixels(L"misc/foliagecolor.png"));
// my code
TextureId foliageId = (textures->loadTexture("misc/foliagecolor.png")); // loading the uh png for foliage color
int* foliagePixels = textures->loadTexturePixels(foliageId, "misc/foliagecolor.png");
// now i can finally initialize foliage color, probably not the best way to handle this but i cant be arsed rn
FoliageColor::init(foliagePixels);
TextureId grassId = (textures->loadTexture("misc/grasscolor.png")); // loading the uh png for foliage color
int* grassPixels = textures->loadTexturePixels(grassId, "misc/grasscolor.png");
GrassColor::init(grassPixels);
bool tint = options.getBooleanValue(OPTIONS_FOLIAGE_TINT); // finally, toggleable foliage color
FoliageColor::setUseTint(tint);
GrassColor::setUseTint(tint);
bool sideTint = options.getBooleanValue(OPTIONS_TINTED_SIDE);
TileRenderer::setUseTint(sideTint);
// Platform specific initialization here // Platform specific initialization here
font = new Font(&options, "font/default8.png", textures); font = new Font(&options, "font/default8.png", textures);
@@ -1151,18 +1197,37 @@ void Minecraft::setSize(int w, int h) {
width = w; width = w;
height = h; height = h;
int screenWidth;
int screenHeight;
//#ifdef PLATFORM_DESKTOP
if (options.getBooleanValue(OPTIONS_WINDOW_SCALE)){ // scales with resolution using a formula instead of having hardcoded if checks
int guiScale = options.getIntValue(OPTIONS_GUI_SCALE);
if (guiScale == 0) {
guiScale = 1000;
}
// determine gui scale, optionally overriding auto
Gui::GuiScale = (float)Mth::Min(guiScale, Mth::Max(1, Mth::Min(width / 320, height / 240)));
} else {
int guiScale = options.getIntValue(OPTIONS_GUI_SCALE); int guiScale = options.getIntValue(OPTIONS_GUI_SCALE);
// determine gui scale, optionally overriding auto // determine gui scale, optionally overriding auto
if (guiScale != 0) { if (guiScale != 0) {
// manual selection: 1->small, 2->medium, 3->large, 4->larger, 5->largest // manual selection: 1->tiny, 2->small, 3->medium, 4->large, 5->larger, 6->largest
switch (guiScale) { switch (guiScale) {
case 1: Gui::GuiScale = 2.0f; break; case 1: Gui::GuiScale = 1.0f; break;
case 2: Gui::GuiScale = 3.0f; break; case 2: Gui::GuiScale = 2.0f; break;
case 3: Gui::GuiScale = 4.0f; break; case 3: Gui::GuiScale = 3.0f; break;
case 4: Gui::GuiScale = 5.0f; break; case 4: Gui::GuiScale = 4.0f; break;
case 5: Gui::GuiScale = 6.0f; break; case 5: Gui::GuiScale = 5.0f; break;
case 6: Gui::GuiScale = 6.0f; break;
default: Gui::GuiScale = 1.0f; break; // auto default: Gui::GuiScale = 1.0f; break; // auto
} }
} else { } else {
@@ -1187,16 +1252,21 @@ void Minecraft::setSize(int w, int h) {
Gui::GuiScale = 1.0f; Gui::GuiScale = 1.0f;
} }
Gui::InvGuiScale = 1.0f / Gui::GuiScale;
int screenWidth = (int)(width * Gui::InvGuiScale);
int screenHeight = (int)(height * Gui::InvGuiScale);
// if (platform()) { // if (platform()) {
// float pixelsPerMillimeter = options.getProgressValue(&Options::Option::PIXELS_PER_MILLIMETER); // float pixelsPerMillimeter = options.getProgressValue(&Option::PIXELS_PER_MILLIMETER);
// pixelCalc.setPixelsPerMillimeter(pixelsPerMillimeter); // pixelCalc.setPixelsPerMillimeter(pixelsPerMillimeter);
// pixelCalcUi.setPixelsPerMillimeter(pixelsPerMillimeter * Gui::InvGuiScale); // pixelCalcUi.setPixelsPerMillimeter(pixelsPerMillimeter * Gui::InvGuiScale);
// } // }
}
Gui::InvGuiScale = 1.0f / Gui::GuiScale;
screenWidth = (int)(width * Gui::InvGuiScale);
screenHeight = (int)(height * Gui::InvGuiScale);
Config config = createConfig(this); Config config = createConfig(this);
gui.onConfigChanged(config); gui.onConfigChanged(config);
@@ -1217,16 +1287,15 @@ void Minecraft::setSize(int w, int h) {
void Minecraft::reloadOptions() { void Minecraft::reloadOptions() {
options.save(); options.save();
bool wasTouchscreen = options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN);
options.set(OPTIONS_USE_TOUCHSCREEN, useTouchscreen());
options.save();
if ((wasTouchscreen != useTouchscreen()) || (inputHolder == 0)) bool useTouch = useTouchscreen();
_reloadInput(); _reloadInput();
gui.refreshTouchState();
// user->name = options.username; // user->name = options.username;
LOGI("Reloading-options\n"); LOGI("Reloading-options (touch=%d)\n", useTouch);
// @todo @fix Android and iOS behaves a bit differently when leaving // @todo @fix Android and iOS behaves a bit differently when leaving
// an options screen (Android recreates OpenGL surface) // an options screen (Android recreates OpenGL surface)
@@ -1381,6 +1450,12 @@ void Minecraft::_levelGenerated()
player->resetPos(false); player->resetPos(false);
} }
if (level && level->dimension) {
level->dimension->FogType = options.getIntValue(OPTIONS_FOG_TYPE);
}
this->cameraTargetPlayer = player; this->cameraTargetPlayer = player;
std::string serverName = options.getStringValue(OPTIONS_USERNAME) + " - " + level->getLevelData()->levelName; std::string serverName = options.getStringValue(OPTIONS_USERNAME) + " - " + level->getLevelData()->levelName;
@@ -1406,6 +1481,34 @@ void Minecraft::_levelGenerated()
_hasSignaledGeneratingLevelFinished = true; _hasSignaledGeneratingLevelFinished = true;
} }
std::string Minecraft::gatherStats1() {
#ifndef STANDALONE_SERVER
return levelRenderer->gatherStats1();
#endif
return "Blank";
}
std::string Minecraft::gatherStats2() {
#ifndef STANDALONE_SERVER
return levelRenderer->gatherStats2();
#endif
return "Blank";
}
std::string Minecraft::gatherStats3() {
#ifndef STANDALONE_SERVER
return ("P: " + particleEngine->countParticles() + ". T: " + (level->gatherStats()));
#endif
return "Blank";
}
std::string Minecraft::gatherStats4() {
return level->gatherChunkSourceStats();
}
Player* Minecraft::respawnPlayer(int playerId) { Player* Minecraft::respawnPlayer(int playerId) {
for (unsigned int i = 0; i < level->players.size(); ++i) { for (unsigned int i = 0; i < level->players.size(); ++i) {
if (level->players[i]->entityId == playerId) { if (level->players[i]->entityId == playerId) {

View File

@@ -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();
@@ -221,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;

View File

@@ -22,3 +22,5 @@ const char* OptionStrings::Controls_AutoJump = "ctrl_autojump";
const char* OptionStrings::Game_DifficultyLevel = "game_difficulty"; const char* OptionStrings::Game_DifficultyLevel = "game_difficulty";
const char* OptionStrings::Tweaks_TouchOverride = "options.touchOverride";

View File

@@ -30,6 +30,7 @@ public:
static const char* Tweaks_Sprint; static const char* Tweaks_Sprint;
static const char* Tweaks_BarOnTop; static const char* Tweaks_BarOnTop;
static const char* Tweaks_TouchOverride;
}; };

View File

@@ -27,14 +27,14 @@ OptionBool autoJump("autoJump", true);
OptionFloat flySpeed("flySpeed", 1.f); OptionFloat flySpeed("flySpeed", 1.f);
OptionFloat cameraSpeed("cameraSpeed", 1.f); OptionFloat cameraSpeed("cameraSpeed", 1.f);
OptionInt guiScale("guiScale", 0, 0, 5); OptionInt guiScale("guiScale", 0, 0, 6);
OptionString skin("skin", "Default"); OptionString skin("skin", "Default");
#ifdef RPI #ifdef RPI
OptionString username("username", "StevePi"); OptionString username("username", "test");
#else #else
OptionString username("username", "Steve"); OptionString username("username", "test");
#endif #endif
OptionBool destroyVibration("destroyVibration", true); OptionBool destroyVibration("destroyVibration", true);
@@ -54,12 +54,40 @@ 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 touchOverride("touchOverride", false);
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 +140,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 +165,22 @@ 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_TOUCH_OVERRIDE] = &touchOverride;
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 +203,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;

View File

@@ -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,18 @@ 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_TOUCH_OVERRIDE,
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 +110,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 = "")

View File

@@ -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"
@@ -103,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,6 +122,9 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) { if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
renderToolBar(a, ySlot, screenWidth); renderToolBar(a, ySlot, screenWidth);
// font->drawShadow("Minecraft - Pocket Edition ", 2, 2, 0xffffffff);
// font->drawShadow("This is a demo, not the finished product", 2, 10 + 2, 0xffffffff);
glEnable(GL_BLEND); glEnable(GL_BLEND);
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen))); bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
unsigned int max = 10; unsigned int max = 10;
@@ -344,6 +354,8 @@ void Gui::displayClientMessage(const std::string& messageId) {
addMessage(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;
@@ -352,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();
@@ -365,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);
} }
@@ -406,6 +423,10 @@ void Gui::inventoryUpdated() {
_inventoryNeedsUpdate = true; _inventoryNeedsUpdate = true;
} }
void Gui::refreshTouchState() {
_openInventorySlot = minecraft->useTouchscreen();
}
void Gui::onGraphicsReset() { void Gui::onGraphicsReset() {
inventoryUpdated(); inventoryUpdated();
} }
@@ -585,7 +606,8 @@ 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"); minecraft->textures->loadAndBindTexture("gui/icons.png");
glEnable(GL_BLEND); glEnable(GL_BLEND);
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR); glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
@@ -609,7 +631,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);
@@ -630,12 +652,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);
@@ -714,13 +736,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;
} }
@@ -758,6 +787,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);
@@ -772,7 +842,7 @@ 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++) {
@@ -796,6 +866,7 @@ void Gui::renderDebugInfo() {
} }
t.endOverrideAndDraw(); t.endOverrideAndDraw();
} }
}
void Gui::renderPlayerList(Font* font, int screenWidth, int screenHeight) { void Gui::renderPlayerList(Font* font, int screenWidth, int screenHeight) {
// only show when in game, no other screen // only show when in game, no other screen
@@ -1024,7 +1095,10 @@ void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isC
} }
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;
@@ -1105,22 +1179,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(); t.beginOverride();
if (minecraft->gameMode->isSurvivalType()) { if (minecraft->gameMode->isSurvivalType()) {
x = baseItemX; x = baseItemX;
for (int i = 0; i < slots; i++) { for (int i = 0; i < slots; i++) {
ItemInstance* item = minecraft->player->inventory->getItem(i); ItemInstance* item = minecraft->player->inventory->getItem(i);
if (item && item->count >= 0) if (item && item->count >= 0)
renderSlotText(item, k*x, k*ySlot + 1, true, true); ItemRenderer::renderGuiItemDecorations(minecraft->font, minecraft->textures, minecraft->player->inventory->getItem(i), x, (float)ySlot);
x += 20; x += 20;
} }
} }
minecraft->textures->loadAndBindTexture("font/default8.png"); minecraft->textures->loadAndBindTexture("font/default8.png");
t.endOverrideAndDraw(); 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(); glPopMatrix2();
} }
}

View File

@@ -71,6 +71,7 @@ public:
void onGraphicsReset(); void onGraphicsReset();
void inventoryUpdated(); void inventoryUpdated();
void refreshTouchState();
void setNowPlaying(const std::string& string); void setNowPlaying(const std::string& string);
void displayClientMessage(const std::string& messageId); void displayClientMessage(const std::string& messageId);

View File

@@ -35,6 +35,17 @@ void GuiElementContainer::removeChild( GuiElement* element ) {
children.erase(it); children.erase(it);
} }
bool GuiElementContainer::containsPointInChildren(int x, int y) const {
for (std::vector<GuiElement*>::const_iterator it = children.begin(); it != children.end(); ++it) {
GuiElement* child = *it;
if (child == NULL || !child->visible) continue;
if (child->pointInside(x, y)) return true;
const GuiElementContainer* container = dynamic_cast<const GuiElementContainer*>(child);
if (container != NULL && container->containsPointInChildren(x, y)) return true;
}
return false;
}
void GuiElementContainer::tick( Minecraft* minecraft ) { void GuiElementContainer::tick( Minecraft* minecraft ) {
for(std::vector<GuiElement*>::iterator it = children.begin(); it != children.end(); ++it) { for(std::vector<GuiElement*>::iterator it = children.begin(); it != children.end(); ++it) {
(*it)->tick(minecraft); (*it)->tick(minecraft);

View File

@@ -13,6 +13,7 @@ public:
virtual void setupPositions(); virtual void setupPositions();
virtual void addChild(GuiElement* element); virtual void addChild(GuiElement* element);
virtual void removeChild(GuiElement* element); virtual void removeChild(GuiElement* element);
bool containsPointInChildren(int x, int y) const;
virtual void tick( Minecraft* minecraft ); virtual void tick( Minecraft* minecraft );

View File

@@ -6,14 +6,36 @@
#include "../../../locale/I18n.h" #include "../../../locale/I18n.h"
#include "TextOption.h" #include "TextOption.h"
#include "KeyOption.h" #include "KeyOption.h"
#include <algorithm>
#include "../Gui.h"
#include "../Screen.h"
#include "../../../platform/input/Mouse.h"
#include "../../../util/Mth.h"
OptionsGroup::OptionsGroup( std::string labelID ) { OptionsGroup::OptionsGroup( std::string labelID )
: contentHeight(0),
scrollOffsetY(0.0f),
maxScrollOffsetY(0.0f),
trackingScrollGesture(false),
scrollingGesture(false),
touchDispatched(false),
dragStartX(0),
dragStartY(0),
lastDragY(0),
touchStartX(0),
touchStartY(0) {
label = I18n::get(labelID); label = I18n::get(labelID);
} }
void OptionsGroup::setupPositions() { void OptionsGroup::setupPositions() {
const int labelHeight = 18;
const int bottomPadding = 36;
const float requestedScroll = scrollOffsetY;
const int scrollOffset = (int)requestedScroll;
int curY = y + labelHeight - scrollOffset;
const int contentStartY = y + labelHeight;
// First we write the header and then we add the items // First we write the header and then we add the items
int curY = y + 18;
for(std::vector<GuiElement*>::iterator it = children.begin(); it != children.end(); ++it) { for(std::vector<GuiElement*>::iterator it = children.begin(); it != children.end(); ++it) {
(*it)->width = width - 5; (*it)->width = width - 5;
@@ -22,16 +44,109 @@ void OptionsGroup::setupPositions() {
(*it)->setupPositions(); (*it)->setupPositions();
curY += (*it)->height + 3; curY += (*it)->height + 3;
} }
height = curY; curY += bottomPadding;
contentHeight = std::max(0, curY - contentStartY + scrollOffset);
maxScrollOffsetY = std::max(0, contentHeight - (height - labelHeight));
const float clampedScroll = Mth::clamp(requestedScroll, 0.0f, maxScrollOffsetY);
if (clampedScroll != requestedScroll) {
scrollOffsetY = clampedScroll;
setupPositions();
}
} }
void OptionsGroup::render( Minecraft* minecraft, int xm, int ym ) { void OptionsGroup::render( Minecraft* minecraft, int xm, int ym ) {
float padX = 10.0f; float padX = 10.0f;
float padY = 5.0f; float padY = 5.0f;
const int labelHeight = 18;
minecraft->font->draw(label, (float)x + padX, (float)y + padY, 0xffffffff, false); minecraft->font->draw(label, (float)x + padX, (float)y + padY, 0xffffffff, false);
glEnable2(GL_SCISSOR_TEST);
glScissor(
Gui::GuiScale * x,
minecraft->height - Gui::GuiScale * (y + height),
Gui::GuiScale * width,
Gui::GuiScale * (height - labelHeight)
);
super::render(minecraft, xm, ym); super::render(minecraft, xm, ym);
glDisable2(GL_SCISSOR_TEST);
}
void OptionsGroup::tick(Minecraft* minecraft) {
int xm = Mouse::getX();
int ym = Mouse::getY();
if (minecraft->screen != NULL) {
minecraft->screen->toGUICoordinate(xm, ym);
}
bool leftDown = Mouse::isButtonDown(MouseAction::ACTION_LEFT);
if (trackingScrollGesture && leftDown) {
int dy = ym - lastDragY;
int dx = xm - dragStartX;
if (!scrollingGesture) {
int totalDx = xm - dragStartX;
int totalDy = ym - dragStartY;
if (std::abs(totalDx) >= ScrollStartThreshold || std::abs(totalDy) >= ScrollStartThreshold) {
if (std::abs(totalDy) >= std::abs(totalDx)) {
scrollingGesture = true;
} else if (!touchDispatched) {
super::mouseClicked(minecraft, touchStartX, touchStartY, MouseAction::ACTION_LEFT);
touchDispatched = true;
}
}
}
if (scrollingGesture && dy != 0) {
scrollByPixels((float)dy);
}
lastDragY = ym;
}
super::tick(minecraft);
}
void OptionsGroup::mouseClicked(Minecraft* minecraft, int x, int y, int buttonNum) {
trackingScrollGesture = false;
scrollingGesture = false;
touchDispatched = false;
if (buttonNum == MouseAction::ACTION_LEFT && pointInside(x, y)) {
trackingScrollGesture = true;
dragStartX = x;
dragStartY = y;
lastDragY = y;
touchStartX = x;
touchStartY = y;
return;
}
super::mouseClicked(minecraft, x, y, buttonNum);
}
void OptionsGroup::mouseReleased(Minecraft* minecraft, int x, int y, int buttonNum) {
bool wasScrolling = scrollingGesture;
bool wasTracking = trackingScrollGesture;
trackingScrollGesture = false;
scrollingGesture = false;
if (buttonNum == MouseAction::ACTION_LEFT && wasTracking && !touchDispatched && pointInside(touchStartX, touchStartY)) {
super::mouseClicked(minecraft, touchStartX, touchStartY, buttonNum);
touchDispatched = true;
}
if (!wasScrolling) {
super::mouseReleased(minecraft, x, y, buttonNum);
}
}
void OptionsGroup::scrollByPixels(float deltaY) {
if (deltaY == 0.0f || maxScrollOffsetY <= 0.0f) return;
scrollOffsetY = Mth::clamp(scrollOffsetY - deltaY, 0.0f, maxScrollOffsetY);
setupPositions();
}
bool OptionsGroup::isScrollingGestureActive() const {
return trackingScrollGesture || scrollingGesture;
} }
OptionsGroup& OptionsGroup::addOptionItem(OptionId optId, Minecraft* minecraft ) { OptionsGroup& OptionsGroup::addOptionItem(OptionId optId, Minecraft* minecraft ) {

View File

@@ -17,7 +17,12 @@ public:
OptionsGroup(std::string labelID); OptionsGroup(std::string labelID);
virtual void setupPositions(); virtual void setupPositions();
virtual void render(Minecraft* minecraft, int xm, int ym); virtual void render(Minecraft* minecraft, int xm, int ym);
virtual void tick(Minecraft* minecraft);
virtual void mouseClicked(Minecraft* minecraft, int x, int y, int buttonNum);
virtual void mouseReleased(Minecraft* minecraft, int x, int y, int buttonNum);
OptionsGroup& addOptionItem(OptionId optId, Minecraft* minecraft); OptionsGroup& addOptionItem(OptionId optId, Minecraft* minecraft);
void scrollByPixels(float deltaY);
bool isScrollingGestureActive() const;
protected: protected:
void createToggle(OptionId optId, Minecraft* minecraft); void createToggle(OptionId optId, Minecraft* minecraft);
@@ -27,6 +32,18 @@ protected:
void createKey(OptionId optId, Minecraft* minecraft); void createKey(OptionId optId, Minecraft* minecraft);
std::string label; std::string label;
int contentHeight;
float scrollOffsetY;
float maxScrollOffsetY;
bool trackingScrollGesture;
bool scrollingGesture;
bool touchDispatched;
int dragStartX;
int dragStartY;
int lastDragY;
int touchStartX;
int touchStartY;
static const int ScrollStartThreshold = 5;
}; };
#endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsGroup_H__*/ #endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsGroup_H__*/

View File

@@ -27,15 +27,58 @@ void OptionsItem::render( Minecraft* minecraft, int xm, int ym ) {
std::string scaleText; std::string scaleText;
switch (value) { switch (value) {
case 0: scaleText = I18n::get("options.guiScale.auto"); break; case 0: scaleText = I18n::get("options.guiScale.auto"); break;
case 1: scaleText = I18n::get("options.guiScale.small"); break; case 1: scaleText = I18n::get("options.guiScale.tiny"); break;
case 2: scaleText = I18n::get("options.guiScale.medium"); break; case 2: scaleText = I18n::get("options.guiScale.small"); break;
case 3: scaleText = I18n::get("options.guiScale.large"); break; case 3: scaleText = I18n::get("options.guiScale.medium"); break;
case 4: scaleText = I18n::get("options.guiScale.larger"); break; case 4: scaleText = I18n::get("options.guiScale.large"); break;
case 5: scaleText = I18n::get("options.guiScale.largest"); break; case 5: scaleText = I18n::get("options.guiScale.larger"); break;
case 6: scaleText = I18n::get("options.guiScale.largest"); break;
default: scaleText = I18n::get("options.guiScale.auto"); break; default: scaleText = I18n::get("options.guiScale.auto"); break;
} }
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);

View 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();
}

View 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__*/

View File

@@ -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;

View 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;
}

View 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__*/

View 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__*/

View File

@@ -41,6 +41,7 @@ void CreditsScreen::init() {
_lines.push_back("karson"); _lines.push_back("karson");
_lines.push_back("deepfriedwaffles"); _lines.push_back("deepfriedwaffles");
_lines.push_back("EpikIzCool"); _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");

View File

@@ -23,12 +23,15 @@ DeathScreen::~DeathScreen()
void DeathScreen::init() void DeathScreen::init()
{ {
if (/* minecraft->useTouchscreen() */ true) { 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);

View File

@@ -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")
{ {
} }
@@ -42,6 +45,19 @@ void IngameBlockSelectionScreen::init()
(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()) {
selectedItem = 0; selectedItem = 0;
@@ -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);
} }

View File

@@ -52,6 +52,7 @@ private:
bool _pendingQuit; bool _pendingQuit;
Button bArmor; Button bArmor;
Button bCrafting;
RectangleArea _area; RectangleArea _area;
}; };

View 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__*/

View File

@@ -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
{ {

View File

@@ -121,6 +121,7 @@ void OptionsScreen::setupPositions() {
(*it)->x = categoryButtons[0]->width; (*it)->x = categoryButtons[0]->width;
(*it)->y = bHeader->height; (*it)->y = bHeader->height;
(*it)->width = width - categoryButtons[0]->width; (*it)->width = width - categoryButtons[0]->width;
(*it)->height = height - bHeader->height;
(*it)->setupPositions(); (*it)->setupPositions();
} }
@@ -147,7 +148,7 @@ void OptionsScreen::removed() {
void OptionsScreen::buttonClicked(Button* button) { void OptionsScreen::buttonClicked(Button* button) {
if (button == btnClose) { if (button == btnClose) {
minecraft->options.save(); minecraft->reloadOptions();
if (minecraft->screen != NULL) { if (minecraft->screen != NULL) {
minecraft->setScreen(NULL); minecraft->setScreen(NULL);
} else { } else {
@@ -194,10 +195,11 @@ void OptionsScreen::generateOptionScreens() {
.addOptionItem(OPTIONS_SENSITIVITY, minecraft); .addOptionItem(OPTIONS_SENSITIVITY, minecraft);
// Game Pane // Game Pane
optionPanes[1]->addOptionItem(OPTIONS_DIFFICULTY, minecraft) optionPanes[1]->addOptionItem(OPTIONS_GUI_SCALE, minecraft)
.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_GUI_SCALE, minecraft) .addOptionItem(OPTIONS_WINDOW_SCALE, minecraft)
.addOptionItem(OPTIONS_SENSITIVITY, minecraft) .addOptionItem(OPTIONS_SENSITIVITY, minecraft)
.addOptionItem(OPTIONS_MUSIC_VOLUME, minecraft) .addOptionItem(OPTIONS_MUSIC_VOLUME, minecraft)
.addOptionItem(OPTIONS_SOUND_VOLUME, minecraft) .addOptionItem(OPTIONS_SOUND_VOLUME, minecraft)
@@ -208,7 +210,9 @@ 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_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);
@@ -216,16 +220,33 @@ 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_TOUCH_OVERRIDE, minecraft)
.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) {
@@ -242,11 +263,17 @@ void OptionsScreen::mouseReleased(int x, int y, int buttonNum) {
super::mouseReleased(x, y, buttonNum); super::mouseReleased(x, y, buttonNum);
} }
void OptionsScreen::mouseWheel(int dx, int dy, int xm, int ym) {
if (currentOptionsGroup != NULL && currentOptionsGroup->pointInside(xm, ym) && dy != 0) {
currentOptionsGroup->scrollByPixels((float)dy * 18.0f);
}
}
void OptionsScreen::keyPressed(int eventKey) { void OptionsScreen::keyPressed(int eventKey) {
if (currentOptionsGroup != NULL) if (currentOptionsGroup != NULL)
currentOptionsGroup->keyPressed(minecraft, eventKey); currentOptionsGroup->keyPressed(minecraft, eventKey);
if (eventKey == Keyboard::KEY_ESCAPE) if (eventKey == Keyboard::KEY_ESCAPE)
minecraft->options.save(); minecraft->reloadOptions();
super::keyPressed(eventKey); super::keyPressed(eventKey);
} }

View File

@@ -27,6 +27,7 @@ public:
virtual void mouseClicked(int x, int y, int buttonNum); virtual void mouseClicked(int x, int y, int buttonNum);
virtual void mouseReleased(int x, int y, int buttonNum); virtual void mouseReleased(int x, int y, int buttonNum);
virtual void mouseWheel(int dx, int dy, int xm, int ym);
virtual void keyPressed(int eventKey); virtual void keyPressed(int eventKey);
virtual void charPressed(char inputChar); virtual void charPressed(char inputChar);

View File

@@ -48,20 +48,27 @@ PauseScreen::~PauseScreen() {
} }
void PauseScreen::init() { void PauseScreen::init() {
if (/* minecraft->useTouchscreen() */ true) { 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"); 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"); 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);
@@ -105,7 +112,25 @@ 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 = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 200;
bQuitAndSaveLocally->width = bServerVisibility->width = 200;
bContinue->x = (width - bContinue->width) / 2;
bContinue->y = yBase + 24 * 1;
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 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; bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 160;
bQuitAndSaveLocally->width = bServerVisibility->width = 160; bQuitAndSaveLocally->width = bServerVisibility->width = 160;
@@ -124,6 +149,9 @@ void PauseScreen::setupPositions() {
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2; bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4; bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4;
}
// bSound.y = bThirdPerson.y = 8; // bSound.y = bThirdPerson.y = 8;
// bSound.x = 4; // bSound.x = 4;

View File

@@ -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() */ true) { 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;

View File

@@ -118,22 +118,15 @@ void SimpleChooseLevelScreen::setupPositions()
bGamemode->x = centerX - totalButtonWidth / 2; bGamemode->x = centerX - totalButtonWidth / 2;
bCheats->x = bGamemode->x + buttonWidth + buttonSpacing; bCheats->x = bGamemode->x + buttonWidth + buttonSpacing;
// compute vertical centre for buttons in remaining space // position Survival/Cheats buttons below the seed field
{ int buttonY = tSeed.y + tSeed.height + 20;
int bottomPad = 20; bGamemode->y = buttonY;
int availTop = buttonHeight + 20 + 30 + 10; // just below seed bCheats->y = buttonY;
int availBottom = height - bottomPad - bCreate->height - 10; // leave some gap before create
int availHeight = availBottom - availTop;
if (availHeight < 0) availHeight = 0;
int y = availTop + (availHeight - bGamemode->height) / 2;
bGamemode->y = y;
bCheats->y = y;
}
// position Create button just below with a small gap
bCreate->width = 100; bCreate->width = 100;
bCreate->x = centerX - bCreate->width / 2; bCreate->x = centerX - bCreate->width / 2;
int bottomPadding = 20; bCreate->y = buttonY + bGamemode->height + 40;
bCreate->y = height - bottomPadding - bCreate->height;
} }
void SimpleChooseLevelScreen::tick() void SimpleChooseLevelScreen::tick()

View File

@@ -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();
} }

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -4,6 +4,7 @@
#include "../../../gui/Gui.h" #include "../../../gui/Gui.h"
#include "../../../renderer/Tesselator.h" #include "../../../renderer/Tesselator.h"
#include "../../../../world/entity/player/Player.h" #include "../../../../world/entity/player/Player.h"
#include "../../../../util/Mth.h"
#include "../../../Minecraft.h" #include "../../../Minecraft.h"
#include "../../../../platform/log.h" #include "../../../../platform/log.h"
@@ -125,48 +126,80 @@ void TouchscreenInput_TestFps::onConfigChanged(const Config& c) {
*/ */
// Code for "D-pad with jump in center" // Code for "D-pad with jump in center"
float Bw = w * 0.11f;//0.08f; // Calculate button size so the full 3x3 grid fits on screen with margins
float Bh = Bw;//0.15f; const float margin = 12.0f;
float availW = w - margin * 2; // horizontal space available
float availH = h - margin * 2; // vertical space available
// Each button: 3 wide, 3 tall
float Bw = availW / 3.0f;
float Bh = availH / 3.0f;
// Use the smaller of the two to maintain square buttons
float btnSize = Mth::Min(Bw, Bh);
// If too large (like playing on Tablet) // Scale down to 65% of max available for a more comfortable, non-obtrusive size
btnSize *= 0.65f;
// Clamp to physical millimeters for consistency across DPIs
PixelCalc& pc = _minecraft->pixelCalc; PixelCalc& pc = _minecraft->pixelCalc;
if (pc.pixelsToMillimeters(Bw) > 200) { //14 float minBtnPx = pc.millimetersToPixels(35); // minimum touch target
Bw = Bh = pc.millimetersToPixels(200); //14 float maxBtnPx = pc.millimetersToPixels(90); // maximum
} if (btnSize < minBtnPx) btnSize = minBtnPx;
if (btnSize > maxBtnPx) btnSize = maxBtnPx;
float Bw2 = btnSize;
float Bh2 = btnSize;
// temp data // temp data
float xx; float xx;
float yy; float yy;
const float BaseY = -8 + h - 3.0f * Bh; // Position from top-left (or top-right for left-handed)
const float BaseX = _options->getBooleanValue(OPTIONS_IS_LEFT_HANDED)? -8 + w - 3 * Bw float dpadTotalW = 3.0f * Bw2;
: 8 + 0; float dpadTotalH = 3.0f * Bh2;
// Place at top of screen instead of bottom
float BaseY = margin;
if (BaseY + dpadTotalH > h - margin) BaseY = h - dpadTotalH - margin;
float BaseX = _options->getBooleanValue(OPTIONS_IS_LEFT_HANDED) ? w - dpadTotalW - margin : margin;
if (BaseX < margin) BaseX = margin;
if (BaseX + dpadTotalW > w - margin) BaseX = w - dpadTotalW - margin;
// Setup the bounding rectangle // Setup the bounding rectangle
_boundingRectangle = RectangleArea(BaseX, BaseY, BaseX + 3 * Bw, BaseY + 3 * Bh); _boundingRectangle = RectangleArea(BaseX, BaseY, BaseX + dpadTotalW, BaseY + dpadTotalH);
xx = BaseX + Bw; yy = BaseY; xx = BaseX + Bw2; yy = BaseY;
_model.addArea(AREA_DPAD_N, aUp = new RectangleArea(xx, yy, xx+Bw, yy+Bh)); _model.addArea(AREA_DPAD_N, aUp = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2));
xx = BaseX; xx = BaseX;
aUpLeft = new RectangleArea(xx, yy, xx+Bw, yy+Bh); aUpLeft = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2);
xx = BaseX + 2 * Bw; xx = BaseX + 2 * Bw2;
aUpRight = new RectangleArea(xx, yy, xx+Bw, yy+Bh); aUpRight = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2);
xx = BaseX + Bw; yy = BaseY + Bh; xx = BaseX + Bw2; yy = BaseY + Bh2;
_model.addArea(AREA_DPAD_C, aJump = new RectangleArea(xx, yy, xx+Bw, yy+Bh)); _model.addArea(AREA_DPAD_C, aJump = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2));
xx = BaseX + Bw; yy = BaseY + 2 * Bh; xx = BaseX + Bw2; yy = BaseY + 2 * Bh2;
_model.addArea(AREA_DPAD_S, aDown = new RectangleArea(xx, yy, xx+Bw, yy+Bh)); _model.addArea(AREA_DPAD_S, aDown = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2));
xx = BaseX; yy = BaseY + Bh; xx = BaseX; yy = BaseY + Bh2;
_model.addArea(AREA_DPAD_W, aLeft = new RectangleArea(xx, yy, xx+Bw, yy+Bh)); _model.addArea(AREA_DPAD_W, aLeft = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2));
xx = BaseX + 2 * Bw; yy = BaseY + Bh; xx = BaseX + 2 * Bw2; yy = BaseY + Bh2;
_model.addArea(AREA_DPAD_E, aRight = new RectangleArea(xx, yy, xx+Bw, yy+Bh)); _model.addArea(AREA_DPAD_E, aRight = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2));
float maxPixels = _minecraft->pixelCalc.millimetersToPixels(10); // Pause and chat buttons - sized relative to D-pad buttons, with bounds checking
// float btnSize = Mth::Min(18 * Gui::GuiScale, maxPixels); float actionBtnSize = Bw2 * 0.7f;
float btnSize = pc.millimetersToPixels(18 * Gui::GuiScale); float actionBtnMargin = 8.0f;
_model.addArea(AREA_PAUSE, aPause = new RectangleArea(w - 4 - btnSize, 4, w - 4, 4 + btnSize)); // Clamp action button size
_model.addArea(AREA_CHAT, aChat = new RectangleArea(w - 8 - btnSize * 2, 4, w - 8 - btnSize, 4 + btnSize)); if (actionBtnSize < pc.millimetersToPixels(30)) actionBtnSize = pc.millimetersToPixels(30);
if (actionBtnSize > pc.millimetersToPixels(120)) actionBtnSize = pc.millimetersToPixels(120);
_model.addArea(AREA_PAUSE, aPause = new RectangleArea(
w - actionBtnMargin - actionBtnSize, actionBtnMargin,
w - actionBtnMargin, actionBtnMargin + actionBtnSize));
_model.addArea(AREA_CHAT, aChat = new RectangleArea(
w - actionBtnMargin * 2 - actionBtnSize * 2, actionBtnMargin,
w - actionBtnMargin * 2 - actionBtnSize, actionBtnMargin + actionBtnSize));
//rebuild(); //rebuild();
} }

View File

@@ -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;

View File

@@ -1,7 +1,7 @@
#include "GameRenderer.h" #include "GameRenderer.h"
#include "client/Options.h" #include "client/Options.h"
#include "gles.h" #include "gles.h"
#include "Lighting.h"
#include "../../util/PerfTimer.h" #include "../../util/PerfTimer.h"
#include "LevelRenderer.h" #include "LevelRenderer.h"
@@ -101,6 +101,15 @@ void GameRenderer::setupCamera(float a, int eye) {
float stereoScale = 0.07f; float stereoScale = 0.07f;
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) glTranslatef2(-(eye * 2 - 1) * stereoScale, 0, 0); if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) glTranslatef2(-(eye * 2 - 1) * stereoScale, 0, 0);
if (mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
if (zoom != 1) {
glTranslatef2((float) zoom_x, (float) -zoom_y, 0);
glScalef2(zoom, zoom, 1);
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance * 2.0f);
} else {
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance * 2.0f);
}
} else {
if (zoom != 1) { if (zoom != 1) {
glTranslatef2((float) zoom_x, (float) -zoom_y, 0); glTranslatef2((float) zoom_x, (float) -zoom_y, 0);
glScalef2(zoom, zoom, 1); glScalef2(zoom, zoom, 1);
@@ -108,6 +117,7 @@ void GameRenderer::setupCamera(float a, int eye) {
} else { } else {
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance); gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance);
} }
}
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
glLoadIdentity2(); glLoadIdentity2();
@@ -272,17 +282,7 @@ void GameRenderer::renderLevel(float a) {
screenScissorArea.w, screenScissorArea.h); screenScissorArea.w, screenScissorArea.h);
} }
if(mc->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS)) {
setupFog(-1);
TIMER_POP_PUSH("sky");
glFogf(GL_FOG_START, renderDistance * 0.2f);
glFogf(GL_FOG_END, renderDistance *0.75);
levelRenderer->renderSky(a);
glFogf(GL_FOG_START, renderDistance * 0.6f);
glFogf(GL_FOG_END, renderDistance);
}
glEnable2(GL_FOG);
setupFog(1);
if (mc->options.getBooleanValue(OPTIONS_AMBIENT_OCCLUSION)) { if (mc->options.getBooleanValue(OPTIONS_AMBIENT_OCCLUSION)) {
glShadeModel2(GL_SMOOTH); glShadeModel2(GL_SMOOTH);
@@ -295,16 +295,39 @@ void GameRenderer::renderLevel(float a) {
TIMER_POP_PUSH("culling"); TIMER_POP_PUSH("culling");
mc->levelRenderer->cull(&frustum, a); mc->levelRenderer->cull(&frustum, a);
mc->levelRenderer->updateDirtyChunks(cameraEntity, false); mc->levelRenderer->updateDirtyChunks(cameraEntity, false);
// this sky rendering code below was originally before the frustrum and culling stuff but sunset color breaks for some reason in that place, so i moved i after those two - shredder
// if(mc->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS)) {
setupFog(-1);
TIMER_POP_PUSH("sky");
// @TODO - EXTREME JANK BELOW, it works but i have to do heavy cleanup here, also to test if the glfogf commands even affect fog in anyway.
if(mc->options.getBooleanValue(OPTIONS_BETA_SKY) && (mc->options.getIntValue(OPTIONS_VIEW_DISTANCE) < 2)){
levelRenderer->renderSky(a); // how java renders the sky instead of how pe doing prepareandrenderclouds.
} else if (!mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
glFogf(GL_FOG_START, renderDistance * 0.2f);
glFogf(GL_FOG_END, renderDistance *0.75);
glFogf(GL_FOG_START, renderDistance * 0.6f);
glFogf(GL_FOG_END, renderDistance);
}
// }
glEnable2(GL_FOG);
setupFog(1);
// MCPE renders clouds using this, but this method breaks 3d clouds and also breaks 2d clouds transparency viewed from above, add as a Legacy Sky or Fast Sky option. - shredder
if(!mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
if(mc->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS)) { if(mc->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS)) {
prepareAndRenderClouds(levelRenderer, a); prepareAndRenderClouds(levelRenderer, a);
} }
}
setupFog(0); setupFog(0);
glEnable2(GL_FOG); glEnable2(GL_FOG);
mc->textures->loadAndBindTexture("terrain.png"); mc->textures->loadAndBindTexture("terrain.png");
glDisable2(GL_ALPHA_TEST); Lighting::turnOff();
// glDisable2(GL_ALPHA_TEST); // vanilla pe disables alpha test here, i renable it so grass side textures dont become opaque - shredder
glEnable2(GL_ALPHA_TEST); //
glDisable2(GL_BLEND); glDisable2(GL_BLEND);
glEnable2(GL_CULL_FACE); glEnable2(GL_CULL_FACE);
TIMER_POP_PUSH("terrain-0"); TIMER_POP_PUSH("terrain-0");
@@ -315,20 +338,23 @@ void GameRenderer::renderLevel(float a) {
levelRenderer->render(cameraEntity, 1, a); levelRenderer->render(cameraEntity, 1, a);
glShadeModel2(GL_FLAT); glShadeModel2(GL_FLAT);
Lighting::turnOn(mc);
TIMER_POP_PUSH("entities"); TIMER_POP_PUSH("entities");
mc->levelRenderer->renderEntities(cameraEntity->getPos(a), &frustum, a); mc->levelRenderer->renderEntities(cameraEntity->getPos(a), &frustum, a);
// setupFog(0); // setupFog(0);
TIMER_POP_PUSH("particles"); TIMER_POP_PUSH("particles");
particleEngine->render(cameraEntity, a); particleEngine->render(cameraEntity, a);
Lighting::turnOff();
glDisable2(GL_BLEND); glDisable2(GL_BLEND);
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
setupFog(0); setupFog(0);
glEnable2(GL_BLEND); glEnable2(GL_BLEND);
glDisable2(GL_CULL_FACE); glDisable2(GL_CULL_FACE);
glDepthMask(GL_FALSE); glDepthMask(GL_FALSE); // @TODO commenting this out fixes Ice transparency and clouds are no longer visilbe underwater like normal beta - shredder
glDisable2(GL_ALPHA_TEST); glDisable2(GL_ALPHA_TEST);
mc->textures->loadAndBindTexture("terrain.png"); mc->textures->loadAndBindTexture("terrain.png");
// @TODO - below is a commented out double render system that fixes ice transparency, but probs harm performance, add it as an option - shredder
//if (mc->options.fancyGraphics) { //if (mc->options.fancyGraphics) {
// glColorMask(false, false, false, false); // glColorMask(false, false, false, false);
// int visibleWaterChunks = levelRenderer->render(cameraEntity, 1, a); // int visibleWaterChunks = levelRenderer->render(cameraEntity, 1, a);
@@ -361,18 +387,24 @@ void GameRenderer::renderLevel(float a) {
TIMER_POP_PUSH("select"); TIMER_POP_PUSH("select");
Player* player = (Player*) cameraEntity; Player* player = (Player*) cameraEntity;
// if (mc->useTouchscreen()) { // if (mc->useTouchscreen()) {
levelRenderer->renderHitSelect(player, mc->hitResult, 0, NULL, a); //player.inventory->getSelected(), a); if (mc->options.getBooleanValue(OPTIONS_BLOCK_OUTLINE)){
// } levelRenderer->renderHitOutline(player, mc->hitResult, 0, NULL, a); //player.inventory->getSelected(), a); // java block outline one
} else {
levelRenderer->renderHitSelect(player, mc->hitResult, 0, NULL, a); //player.inventory->getSelected(), a); // normal pe one - shredder
}
levelRenderer->renderHit(player, mc->hitResult, 0, NULL, a);//player->inventory.getSelected(), a); levelRenderer->renderHit(player, mc->hitResult, 0, NULL, a);//player->inventory.getSelected(), a);
} }
} }
glDisable2(GL_FOG); glDisable2(GL_FOG);
// // Normally this is commented out, but this is how java does it and should fix both 2d/3d clouds, a
// setupFog(0); if(mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
// glEnable2(GL_FOG); setupFog(0);
//// levelRenderer->renderClouds(a); glEnable2(GL_FOG);
// glDisable2(GL_FOG); levelRenderer->renderClouds(a);
glDisable2(GL_FOG);
}
// SHREDDER END
setupFog(1); setupFog(1);
if (zoom == 1 && !mc->options.getBooleanValue(OPTIONS_HIDEGUI)) { if (zoom == 1 && !mc->options.getBooleanValue(OPTIONS_HIDEGUI)) {
@@ -657,7 +689,7 @@ void GameRenderer::pick(float a) {
float range = mc->gameMode->getPickRange(); float range = mc->gameMode->getPickRange();
bool isPicking = true; bool isPicking = true;
bool freeform = mc->useTouchscreen(); //&& !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA); bool freeform = mc->useTouchscreen() && !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA);
if (freeform) { if (freeform) {
isPicking = updateFreeformPickDirection(a, pickDirection); isPicking = updateFreeformPickDirection(a, pickDirection);

View File

@@ -21,6 +21,7 @@
#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;
@@ -49,9 +50,34 @@ 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();
bool sameItem = (itemInHand && item.id == itemInHand->id && item.getAuxValue() == 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) { if (itemInHand && itemInHand->count > 0) {
item.id = itemInHand->id; item.id = itemInHand->id;
item.setAuxValue(itemInHand->getAuxValue()); item.setAuxValue(itemInHand->getAuxValue());
@@ -65,6 +91,7 @@ void ItemInHandRenderer::tick()
height += dd; height += dd;
} }
}
void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item ) void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
{ {
@@ -152,17 +179,26 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
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();
@@ -350,6 +397,7 @@ void ItemInHandRenderer::render( float a )
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);
@@ -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);
} }

View File

@@ -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
@@ -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,6 +183,16 @@ 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);
@@ -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);
@@ -984,13 +1064,66 @@ std::string LevelRenderer::gatherStats1() {
} }
// //
// /*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;
@@ -1011,19 +1144,125 @@ void LevelRenderer::renderSky(float alpha) {
} }
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
if(mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
glDepthMask(false);
}
glEnable2(GL_FOG); glEnable2(GL_FOG);
glColor4f2(sr, sg, sb, 1.0f); 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);
@@ -1072,6 +1311,142 @@ 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;
@@ -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

View File

@@ -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;

View 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);
}

View 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__*/

View File

@@ -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),
@@ -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 ) {
@@ -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();

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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();

View File

@@ -13,11 +13,14 @@
#include "../../world/level/tile/BedTile.h" #include "../../world/level/tile/BedTile.h"
#include "../../world/level/tile/StemTile.h" #include "../../world/level/tile/StemTile.h"
#include "../../world/level/tile/StairTile.h" #include "../../world/level/tile/StairTile.h"
#include "../../world/level/tile/FireTile.h"
#include "../../world/Direction.h" #include "../../world/Direction.h"
#include "../../world/Facing.h" #include "../../world/Facing.h"
#include "tileentity/TileEntityRenderer.h" #include "tileentity/TileEntityRenderer.h"
#include "EntityTileRenderer.h" #include "EntityTileRenderer.h"
bool TileRenderer::sideTinting = false;
TileRenderer::TileRenderer(LevelSource* level /* = NULL */ ) TileRenderer::TileRenderer(LevelSource* level /* = NULL */ )
: level(level), : level(level),
fixedTexture(-1), fixedTexture(-1),
@@ -57,6 +60,11 @@ bool TileRenderer::tesselateBlockInWorld( Tile* tt, int x, int y, int z, float r
float c2 = 0.8f; float c2 = 0.8f;
float c3 = 0.6f; float c3 = 0.6f;
// added these to get biome color and save it before its overriden - shredder
float biomeR = r;
float biomeG = g;
float biomeB = b;
float r11 = c11 * r; float r11 = c11 * r;
float g11 = c11 * g; float g11 = c11 * g;
@@ -100,6 +108,10 @@ bool TileRenderer::tesselateBlockInWorld( Tile* tt, int x, int y, int z, float r
if (tt->zz0 > 0) br = centerBrightness; if (tt->zz0 > 0) br = centerBrightness;
t.color(r2 * br, g2 * br, b2 * br); t.color(r2 * br, g2 * br, b2 * br);
renderNorth(tt, xf, yf, zf, tt->getTexture(level, x, y, z, 2)); renderNorth(tt, xf, yf, zf, tt->getTexture(level, x, y, z, 2));
if ((tt->getTexture(level, x, y, z, 2) == 3) && sideTinting) { // checking if the texture from terrain.png is the normal grass side texture
t.color(c2 * br * biomeR, c2 * br * biomeG, c2 * br * biomeB);
renderNorth(tt, xf, yf, zf, 38); // rendering an extra face over the side of the cube that is a grayscale grass fringe tinted by t.color using biome colors, kinda inefficient
}
changed = true; changed = true;
} }
@@ -108,6 +120,10 @@ bool TileRenderer::tesselateBlockInWorld( Tile* tt, int x, int y, int z, float r
if (tt->zz1 < 1) br = centerBrightness; if (tt->zz1 < 1) br = centerBrightness;
t.color(r2 * br, g2 * br, b2 * br); t.color(r2 * br, g2 * br, b2 * br);
renderSouth(tt, xf, yf, zf, tt->getTexture(level, x, y, z, 3)); renderSouth(tt, xf, yf, zf, tt->getTexture(level, x, y, z, 3));
if ((tt->getTexture(level, x, y, z, 3) == 3) && sideTinting){ // checking if the texture from terrain.png is the normal grass side texture
t.color(c2 * br * biomeR, c2 * br * biomeG, c2 * br * biomeB);
renderSouth(tt, xf, yf, zf, 38); // rendering an extra face over the side of the cube that is a grayscale grass fringe tinted by t.color using biome colors, kinda inefficient
}
changed = true; changed = true;
} }
@@ -116,6 +132,10 @@ bool TileRenderer::tesselateBlockInWorld( Tile* tt, int x, int y, int z, float r
if (tt->xx0 > 0) br = centerBrightness; if (tt->xx0 > 0) br = centerBrightness;
t.color(r3 * br, g3 * br, b3 * br); t.color(r3 * br, g3 * br, b3 * br);
renderWest(tt, xf, yf, zf, tt->getTexture(level, x, y, z, 4)); renderWest(tt, xf, yf, zf, tt->getTexture(level, x, y, z, 4));
if ((tt->getTexture(level, x, y, z, 4) == 3) && sideTinting) { // checking if the texture from terrain.png is the normal grass side texture
t.color(c2 * br * biomeR, c2 * br * biomeG, c2 * br * biomeB);
renderWest(tt, xf, yf, zf, 38); // rendering an extra face over the side of the cube that is a grayscale grass fringe tinted by t.color using biome colors, kinda inefficient
}
changed = true; changed = true;
} }
@@ -124,6 +144,10 @@ bool TileRenderer::tesselateBlockInWorld( Tile* tt, int x, int y, int z, float r
if (tt->xx1 < 1) br = centerBrightness; if (tt->xx1 < 1) br = centerBrightness;
t.color(r3 * br, g3 * br, b3 * br); t.color(r3 * br, g3 * br, b3 * br);
renderEast(tt, xf, yf, zf, tt->getTexture(level, x, y, z, 5)); renderEast(tt, xf, yf, zf, tt->getTexture(level, x, y, z, 5));
if ((tt->getTexture(level, x, y, z, 5) == 3) && sideTinting) { // checking if the texture from terrain.png is the normal grass side texture
t.color(c2 * br * biomeR, c2 * br * biomeG, c2 * br * biomeB);
renderEast(tt, xf, yf, zf, 38); // rendering an extra face over the side of the cube that is a grayscale grass fringe tinted by t.color using biome colors, kinda inefficient
}
changed = true; changed = true;
} }
@@ -157,8 +181,8 @@ bool TileRenderer::tesselateInWorld( Tile* tt, int x, int y, int z )
return tesselateRowInWorld(tt, x, y, z); return tesselateRowInWorld(tt, x, y, z);
} else if (shape == Tile::SHAPE_TORCH) { } else if (shape == Tile::SHAPE_TORCH) {
return tesselateTorchInWorld(tt, x, y, z); return tesselateTorchInWorld(tt, x, y, z);
//} else if (shape == Tile::SHAPE_FIRE) { } else if (shape == Tile::SHAPE_FIRE) {
// return tesselateFireInWorld(tt, x, y, z); return tesselateFireInWorld(tt, x, y, z);
//} else if (shape == Tile::SHAPE_RED_DUST) { //} else if (shape == Tile::SHAPE_RED_DUST) {
// return tesselateDustInWorld(tt, x, y, z); // return tesselateDustInWorld(tt, x, y, z);
} else if (shape == Tile::SHAPE_LADDER) { } else if (shape == Tile::SHAPE_LADDER) {
@@ -222,6 +246,278 @@ bool TileRenderer::tesselateTorchInWorld( Tile* tt, int x, int y, int z )
return true; return true;
} }
bool TileRenderer::tesselateFireInWorld( Tile* tt, int x, int y, int z )
{
// fire transparency has been fixed - shredder
Tesselator& t = Tesselator::instance;
int tex = tt->getTexture(0);
if (fixedTexture >= 0) tex = fixedTexture;
float br = tt->getBrightness( level, x, y, z );
t.color( br, br, br );
int xt = ((tex & 0xf) << 4);
int yt = tex & 0xf0;
float u0 = (xt) / 256.0f;
float u1 = (xt + 15.99f) / 256.0f;
float v0 = (yt) / 256.0f;
float v1 = (yt + 15.99f) / 256.0f;
float h = 1.4f;
if ( level->isSolidBlockingTile( x, y - 1, z ) || Tile::fire->canBurn( level, x, y - 1, z ) )
{
float x0 = x + 0.5f + 0.2f;
float x1 = x + 0.5f - 0.2f;
float z0 = z + 0.5f + 0.2f;
float z1 = z + 0.5f - 0.2f;
float x0_ = x + 0.5f - 0.3f;
float x1_ = x + 0.5f + 0.3f;
float z0_ = z + 0.5f - 0.3f;
float z1_ = z + 0.5f + 0.3f;
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v0 ) );
u0 = (xt) / 256.0f;
u1 = (xt + 15.99f) / 256.0f;
v0 = (yt) / 256.0f;
v1 = (yt + 15.99f) / 256.0f;
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
x0 = x + 0.5f - 0.5f;
x1 = x + 0.5f + 0.5f;
z0 = z + 0.5f - 0.5f;
z1 = z + 0.5f + 0.5f;
x0_ = x + 0.5f - 0.4f;
x1_ = x + 0.5f + 0.4f;
z0_ = z + 0.5f - 0.4f;
z1_ = z + 0.5f + 0.4f;
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v0 ) );
u0 = (xt) / 256.0f;
u1 = (xt + 15.99f) / 256.0f;
v0 = (yt) / 256.0f;
v1 = (yt + 15.99f) / 256.0f;
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
}
else
{
float r = 0.2f;
float yo = 1 / 16.0f;
if ( ( ( x + y + z ) & 1 ) == 1 )
{
u0 = (xt) / 256.0f;
u1 = (xt + 15.99f) / 256.0f;
v0 = (yt) / 256.0f;
v1 = (yt + 15.99f) / 256.0f;
}
if ( ( ( x / 2 + y / 2 + z / 2 ) & 1 ) == 1 )
{
float tmp = u1;
u1 = u0;
u0 = tmp;
}
if ( Tile::fire->canBurn( level, x - 1, y, z ) )
{
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v0 ) );
}
if ( Tile::fire->canBurn( level, x + 1, y, z ) )
{
t.vertexUV( ( float )( x + 1 - r ), ( float )( y + h + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1 - 0 ), ( float )( y + 0 + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1 - 0 ), ( float )( y + 0 + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1 - r ), ( float )( y + h + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1.0f - r ), ( float )( y + h + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1.0f - 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f - 0 ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f - r ), ( float )( y + h + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v0 ) );
}
if ( Tile::fire->canBurn( level, x, y, z - 1 ) )
{
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z +
r ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z +
r ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z +
r ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z +
r ), ( float )( u1 ), ( float )( v0 ) );
}
if ( Tile::fire->canBurn( level, x, y, z + 1 ) )
{
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
r ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
0.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
r ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
r ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
0.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
r ), ( float )( u0 ), ( float )( v0 ) );
}
if ( Tile::fire->canBurn( level, x, y + 1.0f, z ) )
{
double x0 = x + 0.5f + 0.5f;
double x1 = x + 0.5f - 0.5f;
double z0 = z + 0.5f + 0.5f;
double z1 = z + 0.5f - 0.5f;
double x0_ = x + 0.5f - 0.5f;
double x1_ = x + 0.5f + 0.5f;
double z0_ = z + 0.5f - 0.5f;
double z1_ = z + 0.5f + 0.5f;
u0 = (xt) / 256.0f;
u1 = (xt + 15.99f) / 256.0f;
v0 = (yt) / 256.0f;
v1 = (yt + 15.99f) / 256.0f;
y += 1;
h = -0.2f;
if ( ( ( x + y + z ) & 1 ) == 0 )
{
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z +
0 ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z +
0 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z +
1 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z +
1 ), ( float )( u0 ), ( float )( v0 ) );
u0 = (xt) / 256.0f;
u1 = (xt + 15.99f) / 256.0f;
v0 = (yt) / 256.0f;
v1 = (yt + 15.99f) / 256.0f;
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x1 ), ( float )( y + 0.0f ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x1 ), ( float )( y + 0.0f ), ( float )( z +
0 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z +
0 ), ( float )( u0 ), ( float )( v0 ) );
}
else
{
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
0.0f ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
0.0f ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
u0 = (xt) / 256.0f;
u1 = (xt + 15.99f) / 256.0f;
v0 = (yt) / 256.0f;
v1 = (yt + 15.99f) / 256.0f;
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
0.0f ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
0.0f ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
}
}
}
return true;
}
bool TileRenderer::tesselateLadderInWorld( Tile* tt, int x, int y, int z ) bool TileRenderer::tesselateLadderInWorld( Tile* tt, int x, int y, int z )
{ {
Tesselator& t = Tesselator::instance; Tesselator& t = Tesselator::instance;
@@ -924,6 +1220,15 @@ bool TileRenderer::tesselateBlockInWorldWithAmbienceOcclusion( Tile* tt, int pX,
c4g *= ll4; c4g *= ll4;
c4b *= ll4; c4b *= ll4;
renderNorth(tt, (float) pX, (float) pY, (float) pZ, tt->getTexture(level, pX, pY, pZ, 2)); renderNorth(tt, (float) pX, (float) pY, (float) pZ, tt->getTexture(level, pX, pY, pZ, 2));
if (tt->getTexture(level, pX, pY, pZ, 2) == 3 && sideTinting)
{
c1r *= pBaseRed; c1g *= pBaseGreen; c1b *= pBaseBlue;
c2r *= pBaseRed; c2g *= pBaseGreen; c2b *= pBaseBlue;
c3r *= pBaseRed; c3g *= pBaseGreen; c3b *= pBaseBlue;
c4r *= pBaseRed; c4g *= pBaseGreen; c4b *= pBaseBlue;
renderNorth(tt, (float) pX, (float) pY, (float) pZ, 38);
}
i = true; i = true;
} }
if ((noCulling) || (tt->shouldRenderFace(level, pX, pY, pZ + 1, 3))) { if ((noCulling) || (tt->shouldRenderFace(level, pX, pY, pZ + 1, 3))) {
@@ -977,6 +1282,15 @@ bool TileRenderer::tesselateBlockInWorldWithAmbienceOcclusion( Tile* tt, int pX,
c4g *= ll4; c4g *= ll4;
c4b *= ll4; c4b *= ll4;
renderSouth(tt, (float) pX, (float) pY, (float) pZ, tt->getTexture(level, pX, pY, pZ, 3)); renderSouth(tt, (float) pX, (float) pY, (float) pZ, tt->getTexture(level, pX, pY, pZ, 3));
if (tt->getTexture(level, pX, pY, pZ, 3) == 3 && sideTinting)
{
c1r *= pBaseRed; c1g *= pBaseGreen; c1b *= pBaseBlue;
c2r *= pBaseRed; c2g *= pBaseGreen; c2b *= pBaseBlue;
c3r *= pBaseRed; c3g *= pBaseGreen; c3b *= pBaseBlue;
c4r *= pBaseRed; c4g *= pBaseGreen; c4b *= pBaseBlue;
renderSouth(tt, (float) pX, (float) pY, (float) pZ, 38);
}
i = true; i = true;
} }
if ((noCulling) || (tt->shouldRenderFace(level, pX - 1, pY, pZ, 4))) { if ((noCulling) || (tt->shouldRenderFace(level, pX - 1, pY, pZ, 4))) {
@@ -1029,6 +1343,15 @@ bool TileRenderer::tesselateBlockInWorldWithAmbienceOcclusion( Tile* tt, int pX,
c4g *= ll4; c4g *= ll4;
c4b *= ll4; c4b *= ll4;
renderWest(tt, (float) pX, (float) pY, (float) pZ, tt->getTexture(level, pX, pY, pZ, 4)); renderWest(tt, (float) pX, (float) pY, (float) pZ, tt->getTexture(level, pX, pY, pZ, 4));
if (tt->getTexture(level, pX, pY, pZ, 4) == 3 && sideTinting)
{
c1r *= pBaseRed; c1g *= pBaseGreen; c1b *= pBaseBlue;
c2r *= pBaseRed; c2g *= pBaseGreen; c2b *= pBaseBlue;
c3r *= pBaseRed; c3g *= pBaseGreen; c3b *= pBaseBlue;
c4r *= pBaseRed; c4g *= pBaseGreen; c4b *= pBaseBlue;
renderWest(tt, (float) pX, (float) pY, (float) pZ, 38);
}
i = true; i = true;
} }
if ((noCulling) || (tt->shouldRenderFace(level, pX + 1, pY, pZ, 5))) { if ((noCulling) || (tt->shouldRenderFace(level, pX + 1, pY, pZ, 5))) {
@@ -1082,6 +1405,15 @@ bool TileRenderer::tesselateBlockInWorldWithAmbienceOcclusion( Tile* tt, int pX,
c4b *= ll4; c4b *= ll4;
renderEast(tt, (float) pX, (float) pY, (float) pZ, tt->getTexture(level, pX, pY, pZ, 5)); renderEast(tt, (float) pX, (float) pY, (float) pZ, tt->getTexture(level, pX, pY, pZ, 5));
if (tt->getTexture(level, pX, pY, pZ, 5) == 3 && sideTinting)
{
c1r *= pBaseRed; c1g *= pBaseGreen; c1b *= pBaseBlue;
c2r *= pBaseRed; c2g *= pBaseGreen; c2b *= pBaseBlue;
c3r *= pBaseRed; c3g *= pBaseGreen; c3b *= pBaseBlue;
c4r *= pBaseRed; c4g *= pBaseGreen; c4b *= pBaseBlue;
renderEast(tt, (float) pX, (float) pY, (float) pZ, 38);
}
i = true; i = true;
} }
applyAmbienceOcclusion = false; applyAmbienceOcclusion = false;
@@ -2036,29 +2368,53 @@ void TileRenderer::renderTile( Tile* tile, int data )
{ {
Tesselator& t = Tesselator::instance; Tesselator& t = Tesselator::instance;
t.color(0xff, 0xff, 0xff); t.color(0xff, 0xff, 0xff); // i disabled this, this is normally enabled in normal mcpe see if this fits OPTION_NORMAL_LIGHTING - shredder
int shape = tile->getRenderShape(); int shape = tile->getRenderShape();
if (shape == Tile::SHAPE_BLOCK) { if (shape == Tile::SHAPE_BLOCK) {
tile->updateDefaultShape(); tile->updateDefaultShape();
t.addOffset(-0.5f, -0.5f, -0.5f); t.addOffset(-0.5f, -0.5f, -0.5f);
t.begin(); t.begin();
t.normal(0.0f, -1.0f, 0.0f);// most normal calls in this file has been added me since they existed in java - shredder
renderFaceDown(tile, 0, 0, 0, tile->getTexture(0, data)); renderFaceDown(tile, 0, 0, 0, tile->getTexture(0, data));
t.normal(0.0f, 1.0f, 0.0f);
renderFaceUp(tile, 0, 0, 0, tile->getTexture(1, data)); renderFaceUp(tile, 0, 0, 0, tile->getTexture(1, data));
t.normal(0.0f, 0.0f, -1.0f);
renderNorth(tile, 0, 0, 0, tile->getTexture(2, data)); renderNorth(tile, 0, 0, 0, tile->getTexture(2, data));
t.normal(0.0f, 0.0f, 1.0f);
renderSouth(tile, 0, 0, 0, tile->getTexture(3, data)); renderSouth(tile, 0, 0, 0, tile->getTexture(3, data));
t.normal(-1.0f, 0.0f, 0.0f);
renderWest(tile, 0, 0, 0, tile->getTexture(4, data)); renderWest(tile, 0, 0, 0, tile->getTexture(4, data));
t.normal(1.0f, 0.0f, 0.0f);
renderEast(tile, 0, 0, 0, tile->getTexture(5, data)); renderEast(tile, 0, 0, 0, tile->getTexture(5, data));
t.draw(); t.draw();
t.addOffset(0.5f, 0.5f, 0.5f); t.addOffset(0.5f, 0.5f, 0.5f);
} else if (shape == Tile::SHAPE_CROSS_TEXTURE) { } else if (shape == Tile::SHAPE_CROSS_TEXTURE) { // uhh java has this but is this even ever used??? - shredder
t.begin(); t.begin();
t.normal(0.0f, -1.0f, 0.0f);
tesselateCrossTexture(tile, data, -0.5f, -0.5f, -0.5f); tesselateCrossTexture(tile, data, -0.5f, -0.5f, -0.5f);
t.draw(); t.draw();
} else if(shape == Tile::SHAPE_STEM) { } else if(shape == Tile::SHAPE_STEM) {
t.begin(); t.begin();
t.normal(0.0f, -1.0f, 0.0f);
tile->updateDefaultShape(); tile->updateDefaultShape();
tesselateStemTexture(tile, data, tile->yy1, -0.5f, -0.5f, -0.5f); tesselateStemTexture(tile, data, tile->yy1, -0.5f, -0.5f, -0.5f);
t.draw(); t.draw();
@@ -2067,16 +2423,39 @@ void TileRenderer::renderTile( Tile* tile, int data )
t.offset(-0.5f, -0.5f, -0.5f); t.offset(-0.5f, -0.5f, -0.5f);
float s = 1 / 16.0f; float s = 1 / 16.0f;
t.begin(); t.begin();
t.normal(0.0f, -1.0f, 0.0f);
renderFaceDown(tile, 0, 0, 0, tile->getTexture(0)); renderFaceDown(tile, 0, 0, 0, tile->getTexture(0));
t.normal(0.0f, 1.0f, 0.0f);
renderFaceUp(tile, 0, 0, 0, tile->getTexture(1)); renderFaceUp(tile, 0, 0, 0, tile->getTexture(1));
t.normal(0.0f, 0.0f, -1.0f);
t.addOffset(0, 0, s); t.addOffset(0, 0, s);
renderNorth(tile, 0, 0, 0, tile->getTexture(2)); renderNorth(tile, 0, 0, 0, tile->getTexture(2));
t.normal(0.0f, 0.0f, 1.0f);
t.addOffset(0, 0, -s); t.addOffset(0, 0, -s);
t.addOffset(0, 0, -s); t.addOffset(0, 0, -s);
renderSouth(tile, 0, 0, 0, tile->getTexture(3)); renderSouth(tile, 0, 0, 0, tile->getTexture(3));
t.normal(-1.0f, 0.0f, 0.0f);
t.addOffset(0, 0, s); t.addOffset(0, 0, s);
t.addOffset(s, 0, 0); t.addOffset(s, 0, 0);
renderWest(tile, 0, 0, 0, tile->getTexture(4)); renderWest(tile, 0, 0, 0, tile->getTexture(4));
t.normal(1.0f, 0.0f, 0.0f);
t.addOffset(-s, 0, 0); t.addOffset(-s, 0, 0);
t.addOffset(-s, 0, 0); t.addOffset(-s, 0, 0);
renderEast(tile, 0, 0, 0, tile->getTexture(5)); renderEast(tile, 0, 0, 0, tile->getTexture(5));
@@ -2090,7 +2469,7 @@ void TileRenderer::renderTile( Tile* tile, int data )
//} else if (shape == Tile::SHAPE_TORCH) { //} else if (shape == Tile::SHAPE_TORCH) {
//// t.begin(); //// t.begin();
//// t.normal(0, -1, 0); //// t.normal(0, -1, 0);
//// tesselateTorch(tile, -0.5f, -0.5f, -0.5f, 0, 0); /// tesselateTorch(tile, -0.5f, -0.5f, -0.5f, 0, 0);
//// t.end(); //// t.end();
} else if (shape == Tile::SHAPE_ENTITYTILE_ANIMATED) { } else if (shape == Tile::SHAPE_ENTITYTILE_ANIMATED) {
EntityTileRenderer::instance->render(tile, data, 1.0f); EntityTileRenderer::instance->render(tile, data, 1.0f);
@@ -2102,11 +2481,23 @@ void TileRenderer::renderTile( Tile* tile, int data )
if (i == 0) tile->setShape(0, 0, 0, 1, 1, 0.5f); if (i == 0) tile->setShape(0, 0, 0, 1, 1, 0.5f);
if (i == 1) tile->setShape(0, 0, 0.5f, 1, 0.5f, 1); if (i == 1) tile->setShape(0, 0, 0.5f, 1, 0.5f, 1);
t.normal(0.0f, -1.0f, 0.0f);
renderFaceDown(tile, 0, 0, 0, tile->getTexture(0)); renderFaceDown(tile, 0, 0, 0, tile->getTexture(0));
t.normal(0.0f, 1.0f, 0.0f);
renderFaceUp(tile, 0, 0, 0, tile->getTexture(1)); renderFaceUp(tile, 0, 0, 0, tile->getTexture(1));
t.normal(0.0f, 0.0f, -1.0f);
renderNorth(tile, 0, 0, 0, tile->getTexture(2)); renderNorth(tile, 0, 0, 0, tile->getTexture(2));
t.normal(0.0f, 0.0f, 1.0f);
renderSouth(tile, 0, 0, 0, tile->getTexture(3)); renderSouth(tile, 0, 0, 0, tile->getTexture(3));
t.normal(-1.0f, 0.0f, 0.0f);
renderWest(tile, 0, 0, 0, tile->getTexture(4)); renderWest(tile, 0, 0, 0, tile->getTexture(4));
t.normal(1.0f, 0.0f, 0.0f);
renderEast(tile, 0, 0, 0, tile->getTexture(5)); renderEast(tile, 0, 0, 0, tile->getTexture(5));
} }
t.draw(); t.draw();
@@ -2123,11 +2514,22 @@ void TileRenderer::renderTile( Tile* tile, int data )
if (i == 2) tile->setShape(0.5f - w, 1 - w * 3, -w * 2, 0.5f + w, 1 - w, 1 + w * 2); if (i == 2) tile->setShape(0.5f - w, 1 - w * 3, -w * 2, 0.5f + w, 1 - w, 1 + w * 2);
if (i == 3) tile->setShape(0.5f - w, 0.5f - w * 3, -w * 2, 0.5f + w, 0.5f - w, 1 + w * 2); if (i == 3) tile->setShape(0.5f - w, 0.5f - w * 3, -w * 2, 0.5f + w, 0.5f - w, 1 + w * 2);
t.normal(0.0f, -1.0f, 0.0f);
renderFaceDown(tile, 0, 0, 0, tile->getTexture(0)); renderFaceDown(tile, 0, 0, 0, tile->getTexture(0));
t.normal(0.0f, 1.0f, 0.0f);
renderFaceUp(tile, 0, 0, 0, tile->getTexture(1)); renderFaceUp(tile, 0, 0, 0, tile->getTexture(1));
t.normal(0.0f, 0.0f, -1.0f);
renderNorth(tile, 0, 0, 0, tile->getTexture(2)); renderNorth(tile, 0, 0, 0, tile->getTexture(2));
t.normal(0.0f, 0.0f, 1.0f);
renderSouth(tile, 0, 0, 0, tile->getTexture(3)); renderSouth(tile, 0, 0, 0, tile->getTexture(3));
t.normal(-1.0f, 0.0f, 0.0f);
renderWest(tile, 0, 0, 0, tile->getTexture(4)); renderWest(tile, 0, 0, 0, tile->getTexture(4));
t.normal(1.0f, 0.0f, 0.0f);
renderEast(tile, 0, 0, 0, tile->getTexture(5)); renderEast(tile, 0, 0, 0, tile->getTexture(5));
} }
t.draw(); t.draw();
@@ -2142,11 +2544,22 @@ void TileRenderer::renderTile( Tile* tile, int data )
if (i == 1) tile->setShape(0.5f - w, .3f, 1 - w * 2, 0.5f + w, 1, 1); if (i == 1) tile->setShape(0.5f - w, .3f, 1 - w * 2, 0.5f + w, 1, 1);
if (i == 2) tile->setShape(0.5f - w, .5f, w * 2, 0.5f + w, 1 - w, 1 - w * 2); if (i == 2) tile->setShape(0.5f - w, .5f, w * 2, 0.5f + w, 1 - w, 1 - w * 2);
renderFaceUp(tile, 0, 0, 0, tile->getTexture(0)); t.normal(0.0f, -1.0f, 0.0f);
renderFaceDown(tile, 0, 0, 0, tile->getTexture(1)); renderFaceDown(tile, 0, 0, 0, tile->getTexture(0));
t.normal(0.0f, 1.0f, 0.0f);
renderFaceUp(tile, 0, 0, 0, tile->getTexture(1));
t.normal(0.0f, 0.0f, -1.0f);
renderNorth(tile, 0, 0, 0, tile->getTexture(2)); renderNorth(tile, 0, 0, 0, tile->getTexture(2));
t.normal(0.0f, 0.0f, 1.0f);
renderSouth(tile, 0, 0, 0, tile->getTexture(3)); renderSouth(tile, 0, 0, 0, tile->getTexture(3));
t.normal(-1.0f, 0.0f, 0.0f);
renderWest(tile, 0, 0, 0, tile->getTexture(4)); renderWest(tile, 0, 0, 0, tile->getTexture(4));
t.normal(1.0f, 0.0f, 0.0f);
renderEast(tile, 0, 0, 0, tile->getTexture(5)); renderEast(tile, 0, 0, 0, tile->getTexture(5));
} }
t.draw(); t.draw();
@@ -2196,7 +2609,7 @@ void TileRenderer::renderGuiTile( Tile* tile, int data )
} else if (shape == Tile::SHAPE_CROSS_TEXTURE) { } else if (shape == Tile::SHAPE_CROSS_TEXTURE) {
t.begin(); t.begin();
//t.normal(0, -1, 0); t.normal(0, -1, 0);
tesselateCrossTexture(tile, data, -0.5f, -0.5f, -0.5f); tesselateCrossTexture(tile, data, -0.5f, -0.5f, -0.5f);
//t.end(); //t.end();
t.draw(); t.draw();

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);
} }
} }

View File

@@ -5,7 +5,14 @@
#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()
@@ -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");
// Textures textures = entityRenderDispatcher.textures;
// textures.bind(textures.loadTexture("%clamp%/misc/shadow.png"));
// Level level = getLevel(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
// glDepthMask(false);
// float r = shadowRadius;
// float ex = e.xOld + (e.x - e.xOld) * a;
// float ey = e.yOld + (e.y - e.yOld) * a + e.getShadowHeightOffs();
// float ez = e.zOld + (e.z - e.zOld) * a;
// int x0 = Mth.floor(ex - r); Level* level = getLevel();
// int x1 = Mth.floor(ex + r);
// int y0 = Mth.floor(ey - r);
// int y1 = Mth.floor(ey);
// int z0 = Mth.floor(ez - r);
// int z1 = Mth.floor(ez + r);
// float xo = x - ex; glDepthMask(false);
// float yo = y - ey; float r = shadowRadius;
// float zo = z - ez;
// Tesselator tt = Tesselator.instance; float ex = e->xOld + (e->x - e->xOld) * a;
// tt.begin(); float ey = e->yOld + (e->y - e->yOld) * a + e->getShadowHeightOffs();
// for (int xt = x0; xt <= x1; xt++) float ez = e->zOld + (e->z - e->zOld) * a;
// 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); int x0 = Mth::floor(ex - r);
// glDisable2(GL_BLEND); int x1 = Mth::floor(ex + r);
// glDepthMask(true); int y0 = Mth::floor(ey - r);
//} int y1 = Mth::floor(ey);
int z0 = Mth::floor(ez - r);
int z1 = Mth::floor(ez + r);
//Level* getLevel() { float xo = x - ex;
// return entityRenderDispatcher.level; float yo = y - ey;
//} float zo = z - ez;
//void renderTileShadow(Tile tt, float x, float y, float z, int xt, int yt, int zt, float pow, float r, float xo, float yo, float zo) { Tesselator& tt = Tesselator::instance;
// Tesselator t = Tesselator.instance; tt.begin();
// if (!tt.isCubeShaped()) return; 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();
// float a = ((pow - (y - (yt + yo)) / 2) * 0.5f) * getLevel().getBrightness(xt, yt, zt); glColor4f2(1, 1, 1, 1);
// if (a < 0) return; glDisable2(GL_BLEND);
// if (a > 1) a = 1; glDepthMask(true);
}
Level* EntityRenderer::getLevel() {
return entityRenderDispatcher->level;
}
void EntityRenderer::renderTileShadow(Tile* tt, float x, float y, float z, int xt, int yt, int zt, float pow, float r, float xo, float yo, float zo) {
Tesselator& t = Tesselator::instance;
if (!tt->isCubeShaped()) return;
float a = ((pow - (y - (yt + yo)) / 2) * 0.5f) * getLevel()->getBrightness(xt, yt, zt);
if (a < 0) return;
if (a > 1) a = 1;
// t.color(1, 1, 1, (float) a); // t.color(1, 1, 1, (float) a);
// // glColor4f2(1, 1, 1, (float) a); glColor4f2(1, 1, 1, (float) a);
// float x0 = xt + tt.xx0 + xo; float x0 = xt + tt->xx0 + xo;
// float x1 = xt + tt.xx1 + xo; float x1 = xt + tt->xx1 + xo;
// float y0 = yt + tt.yy0 + yo + 1.0 / 64.0f; float y0 = yt + tt->yy0 + yo + 1.0 / 64.0f;
// float z0 = zt + tt.zz0 + zo; float z0 = zt + tt->zz0 + zo;
// float z1 = zt + tt.zz1 + zo; float z1 = zt + tt->zz1 + zo;
// float u0 = (float) ((x - (x0)) / 2 / r + 0.5f); float u0 = (float) ((x - (x0)) / 2 / r + 0.5f);
// float u1 = (float) ((x - (x1)) / 2 / r + 0.5f); float u1 = (float) ((x - (x1)) / 2 / r + 0.5f);
// float v0 = (float) ((z - (z0)) / 2 / r + 0.5f); float v0 = (float) ((z - (z0)) / 2 / r + 0.5f);
// float v1 = (float) ((z - (z1)) / 2 / r + 0.5f); float v1 = (float) ((z - (z1)) / 2 / r + 0.5f);
// t.vertexUV(x0, y0, z0, u0, v0); t.vertexUV(x0, y0, z0, u0, v0);
// t.vertexUV(x0, y0, z1, u0, v1); t.vertexUV(x0, y0, z1, u0, v1);
// t.vertexUV(x1, y0, z1, u1, v1); t.vertexUV(x1, y0, z1, u1, v1);
// t.vertexUV(x1, y0, z0, u1, v0); t.vertexUV(x1, y0, z0, u1, v0);
//} }

View File

@@ -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();

View File

@@ -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());

View File

@@ -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);

View File

@@ -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);

View File

@@ -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();
} }

View File

@@ -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);
} }

View File

@@ -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

View File

@@ -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

View File

@@ -206,3 +206,279 @@ void WaterSideTexture::tick() {
pixels[i * 4 + 3] = a; 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 y = 0; y < 16; y++) {
float pow = 0;
int xxo = (int)(Mth::sin((float)(y) * (float)(Mth::PI) * 2.0f / 16.0f) * 1.2f);
int yyo = (int)(Mth::sin((float)(x) * (float)(Mth::PI) * 2.0f / 16.0f) * 1.2f);
for (int xx = x - 1; xx <= x + 1; xx++) {
for (int yy = y - 1; yy <= y + 1; yy++) {
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;
next = current;
current = tmp;
for (int i = 0; i < 256; i++) {
float pow = this->current[i] * 1.8f;
if (pow > 1.0f) {
pow = 1.0f;
}
if (pow < 0.0f) {
pow = 0.0f;
}
int r = (int) (pow * 155.0f + 100.0f);
int g = (int)(pow * pow * 255.0f);
int b = (int)(pow * pow * pow * pow * pow * pow * pow * pow * pow * pow * 255.0f);
int a = 255;
if (pow < 0.5f) {
a = 0;
}
// @TODO: cant be arsed rn to implement the anaglyph3d check would be nice to check if it does - shredder
//if (this->anaglyph3d) {
// float rr = (r * 30 + g * 59 + b * 11) / 100;
// float gg = (r * 30 + g * 70) / 100;
// float bb = (r * 30 + b * 70) / 100;
// r = rr;
// g = gg;
// b = bb;
//}
pixels[i * 4 + 0] = r;
pixels[i * 4 + 1] = g;
pixels[i * 4 + 2] = b;
pixels[i * 4 + 3] = a;
}
}

View File

@@ -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__*/

View File

@@ -111,6 +111,7 @@
#include "data/eat1.pcm" #include "data/eat1.pcm"
#include "data/eat2.pcm" #include "data/eat2.pcm"
#include "data/eat3.pcm" #include "data/eat3.pcm"
#include "data/burp1.pcm"
#include "data/fuse.pcm" #include "data/fuse.pcm"
SoundDesc SA_cloth1((char*)PCM_cloth1); SoundDesc SA_cloth1((char*)PCM_cloth1);
@@ -221,6 +222,7 @@ SoundDesc SA_creeperdeath((char*)PCM_creeperdeath);
SoundDesc SA_eat1((char*)PCM_eat1); SoundDesc SA_eat1((char*)PCM_eat1);
SoundDesc SA_eat2((char*)PCM_eat2); SoundDesc SA_eat2((char*)PCM_eat2);
SoundDesc SA_eat3((char*)PCM_eat3); SoundDesc SA_eat3((char*)PCM_eat3);
SoundDesc SA_burp1((char*)PCM_burp1);
SoundDesc SA_fuse((char*)PCM_fuse); SoundDesc SA_fuse((char*)PCM_fuse);
#endif /*!PRE_ANDROID23 && !__APPLE__*/ #endif /*!PRE_ANDROID23 && !__APPLE__*/

View File

@@ -172,6 +172,7 @@ extern SoundDesc SA_creeperdeath;
extern SoundDesc SA_eat1; extern SoundDesc SA_eat1;
extern SoundDesc SA_eat2; extern SoundDesc SA_eat2;
extern SoundDesc SA_eat3; extern SoundDesc SA_eat3;
extern SoundDesc SA_burp1;
extern SoundDesc SA_fuse; extern SoundDesc SA_fuse;
#endif /*!PRE_ANDROID23 && !__APPLE__*/ #endif /*!PRE_ANDROID23 && !__APPLE__*/

View File

@@ -144,6 +144,7 @@ void SoundEngine::init( Minecraft* mc, Options* options )
sounds.add("random.eat", SA_eat1); sounds.add("random.eat", SA_eat1);
sounds.add("random.eat", SA_eat2); sounds.add("random.eat", SA_eat2);
sounds.add("random.eat", SA_eat3); sounds.add("random.eat", SA_eat3);
sounds.add("random.burp", SA_burp1);
sounds.add("random.fuse", SA_fuse); sounds.add("random.fuse", SA_fuse);
#endif #endif

View File

@@ -227,6 +227,7 @@ void SoundEngine::init( Minecraft* mc, Options* options )
sounds.add( "random.eat", _pp("eat1")); sounds.add( "random.eat", _pp("eat1"));
sounds.add( "random.eat", _pp("eat2")); sounds.add( "random.eat", _pp("eat2"));
sounds.add( "random.eat", _pp("eat3")); sounds.add( "random.eat", _pp("eat3"));
sounds.add( "random.burp", _pp("burp1"));
sounds.add( "random.fuse", _pp("fuse")); sounds.add( "random.fuse", _pp("fuse"));
sounds.add( "step.cloth", _pp("cloth1")); sounds.add( "step.cloth", _pp("cloth1"));

File diff suppressed because it is too large Load Diff

View File

@@ -18,6 +18,87 @@
#endif #endif
static App* g_app = 0; static App* g_app = 0;
#ifdef __EMSCRIPTEN__
static int g_touchPointerIds[Multitouch::MAX_POINTERS];
static void resetTouchPointerIds() {
for (int i = 0; i < Multitouch::MAX_POINTERS; ++i) {
g_touchPointerIds[i] = -1;
}
}
static int getTouchPointerSlot(int touchId) {
for (int i = 0; i < Multitouch::MAX_POINTERS; ++i) {
if (g_touchPointerIds[i] == touchId) return i;
}
return -1;
}
static int allocateTouchPointerSlot(int touchId) {
int slot = getTouchPointerSlot(touchId);
if (slot >= 0) return slot;
for (int i = 0; i < Multitouch::MAX_POINTERS; ++i) {
if (g_touchPointerIds[i] < 0) {
g_touchPointerIds[i] = touchId;
return i;
}
}
return -1;
}
static void releaseTouchPointerSlot(int touchId) {
for (int i = 0; i < Multitouch::MAX_POINTERS; ++i) {
if (g_touchPointerIds[i] == touchId) {
g_touchPointerIds[i] = -1;
return;
}
}
}
static EM_BOOL touch_callback(int eventType, const EmscriptenTouchEvent* touchEvent, void* userData) {
if (!touchEvent) return 0;
const bool isStart = eventType == EMSCRIPTEN_EVENT_TOUCHSTART;
const bool isMove = eventType == EMSCRIPTEN_EVENT_TOUCHMOVE;
const bool isEnd = eventType == EMSCRIPTEN_EVENT_TOUCHEND;
const bool isCancel = eventType == EMSCRIPTEN_EVENT_TOUCHCANCEL;
if (isCancel) {
for (int i = 0; i < Multitouch::MAX_POINTERS; ++i) {
if (g_touchPointerIds[i] >= 0) {
Multitouch::feed(1, 0, Multitouch::getX(i), Multitouch::getY(i), i);
g_touchPointerIds[i] = -1;
}
}
return 1;
}
for (int i = 0; i < touchEvent->numTouches; ++i) {
const EmscriptenTouchPoint& touch = touchEvent->touches[i];
if (!touch.isChanged) continue;
const int slot = isEnd ? getTouchPointerSlot(touch.identifier) : allocateTouchPointerSlot(touch.identifier);
if (slot < 0) continue;
const short x = (short)touch.targetX;
const short y = (short)touch.targetY;
if (isStart) {
Multitouch::feed(1, 1, x, y, slot);
} else if (isMove) {
Multitouch::feed(0, 0, x, y, slot);
} else if (isEnd) {
Multitouch::feed(1, 0, x, y, slot);
releaseTouchPointerSlot(touch.identifier);
}
}
return 1;
}
#endif
int transformKey(int glfwkey) { int transformKey(int glfwkey) {
if (glfwkey >= GLFW_KEY_F1 && glfwkey <= GLFW_KEY_F12) { if (glfwkey >= GLFW_KEY_F1 && glfwkey <= GLFW_KEY_F12) {
return glfwkey - 178; return glfwkey - 178;
@@ -180,6 +261,13 @@ int main(void) {
glfwSetMouseButtonCallback(platform->window, mouse_button_callback); glfwSetMouseButtonCallback(platform->window, mouse_button_callback);
glfwSetScrollCallback(platform->window, scroll_callback); glfwSetScrollCallback(platform->window, scroll_callback);
glfwSetWindowSizeCallback(platform->window, window_size_callback); glfwSetWindowSizeCallback(platform->window, window_size_callback);
#ifdef __EMSCRIPTEN__
resetTouchPointerIds();
emscripten_set_touchstart_callback("#canvas", 0, 1, touch_callback);
emscripten_set_touchmove_callback("#canvas", 0, 1, touch_callback);
emscripten_set_touchend_callback("#canvas", 0, 1, touch_callback);
emscripten_set_touchcancel_callback("#canvas", 0, 1, touch_callback);
#endif
glfwMakeContextCurrent(platform->window); glfwMakeContextCurrent(platform->window);
#ifndef __EMSCRIPTEN__ #ifndef __EMSCRIPTEN__

View File

@@ -3,8 +3,14 @@
#include "SoundSystem.h" #include "SoundSystem.h"
// If audio breaks for other platforms, this is probably why. Here, I'm just calling where Apple's OpenAL headers live (they arent in just "AL"
#if defined(__APPLE__)
#include <OpenAL/al.h>
#include <OpenAL/alc.h>
#else
#include <AL/al.h> #include <AL/al.h>
#include <AL/alc.h> #include <AL/alc.h>
#endif
#include <vector> #include <vector>
#include <list> #include <list>

98
src/util/Color.cpp Normal file
View File

@@ -0,0 +1,98 @@
#include "Mth.h"
#include "Color.h"
#include <cassert>
//Creates an opaque sRGB color with the specified red, green, and blue values in the range (0.0 - 1.0).
//Alpha is defaulted to 1.0. The actual color used in rendering depends on finding the best match given the color space
//available for a particular output device.
//Parameters:
//r - the red component
//g - the green component
//b - the blue component
//Throws:
//IllegalArgumentException - if r, g or b are outside of the range 0.0 to 1.0, inclusive
Color::Color( float r, float g, float b)
{
assert( r >= 0.0f && r <= 1.0f );
assert( g >= 0.0f && g <= 1.0f );
assert( b >= 0.0f && b <= 1.0f );
//argb
colour = ( (0xFF<<24) | ( (int)(r*255)<<16 ) | ( (int)(g*255)<<8 ) | ( (int)(b*255) ) );
}
Color::Color( int r, int g, int b)
{
colour = ( (0xFF<<24) | ( (r&0xff)<<16 ) | ( (g&0xff)<<8 ) | ( (b&0xff) ) );
}
//Creates a Color object based on the specified values for the HSB color model.
//The s and b components should be floating-point values between zero and one (numbers in the range 0.0-1.0).
//The h component can be any floating-point number. The floor of this number is subtracted from it to create a fraction between 0 and 1.
//This fractional number is then multiplied by 360 to produce the hue angle in the HSB color model.
//
//Parameters:
//h - the hue component
//s - the saturation of the color
//b - the brightness of the color
//Returns:
//a Color object with the specified hue, saturation, and brightness.
Color Color::getHSBColor(float hue, float saturation, float brightness)
{
int r = 0, g = 0, b = 0;
if (saturation == 0)
{
r = g = b = (int) (brightness * 255.0f + 0.5f);
}
else
{
float h = (hue - (float)Mth::floor(hue)) * 6.0f;
float f = h - (float)Mth::floor(h);
float p = brightness * (1.0f - saturation);
float q = brightness * (1.0f - saturation * f);
float t = brightness * (1.0f - (saturation * (1.0f - f)));
switch ((int) h)
{
case 0:
r = (int) (brightness * 255.0f + 0.5f);
g = (int) (t * 255.0f + 0.5f);
b = (int) (p * 255.0f + 0.5f);
break;
case 1:
r = (int) (q * 255.0f + 0.5f);
g = (int) (brightness * 255.0f + 0.5f);
b = (int) (p * 255.0f + 0.5f);
break;
case 2:
r = (int) (p * 255.0f + 0.5f);
g = (int) (brightness * 255.0f + 0.5f);
b = (int) (t * 255.0f + 0.5f);
break;
case 3:
r = (int) (p * 255.0f + 0.5f);
g = (int) (q * 255.0f + 0.5f);
b = (int) (brightness * 255.0f + 0.5f);
break;
case 4:
r = (int) (t * 255.0f + 0.5f);
g = (int) (p * 255.0f + 0.5f);
b = (int) (brightness * 255.0f + 0.5f);
break;
case 5:
r = (int) (brightness * 255.0f + 0.5f);
g = (int) (p * 255.0f + 0.5f);
b = (int) (q * 255.0f + 0.5f);
break;
}
}
return Color( r, g, b );
}
int Color::getRGB()
{
return colour;
}

15
src/util/Color.h Normal file
View File

@@ -0,0 +1,15 @@
#pragma once
class Color
{
private:
int colour;
public:
//Creates an opaque sRGB color with the specified red, green, and blue values in the range (0.0 - 1.0).
Color( float r, float g, float b);
Color( int r, int g, int b);
static Color getHSBColor(float h, float s, float b);
int getRGB();
};

Some files were not shown because too many files have changed in this diff Show More