Compare commits
34 Commits
main
...
dedicated-
| Author | SHA1 | Date | |
|---|---|---|---|
| 4023d70687 | |||
| 4dc7055d9d | |||
| 1ec347d5d5 | |||
| 5194575092 | |||
| 3cfa2d9ee7 | |||
| f016f00eab | |||
| 470c28d83a | |||
| 4363157cd9 | |||
| ba3ed3b4dd | |||
| 5783fb93f3 | |||
| 73fb2a2b3d | |||
| bcf48eb5e3 | |||
| f5fecbc928 | |||
| 77d02fcca2 | |||
| 6d696af235 | |||
| 370363f792 | |||
| 61a2349b8b | |||
| eed3a6df61 | |||
| 97b0fb4d46 | |||
| 8be842a8ac | |||
| 6957f144e1 | |||
| f9d9a0f0f9 | |||
| 28febb4e63 | |||
| aeef442f76 | |||
| 8098ab8906 | |||
| f0cb6d0b7c | |||
| d1672c0ee2 | |||
| c234abe3aa | |||
| e4ff7728af | |||
| 41c5bdf243 | |||
| 96e8826f01 | |||
| db8993683f | |||
| 2c1b5e256e | |||
| 4beb5cb0f9 |
60
.github/workflows/build.yml
vendored
@@ -72,30 +72,6 @@ jobs:
|
||||
${{github.workspace}}/build/OpenAL32.dll
|
||||
${{github.workspace}}/build/libz.dll
|
||||
|
||||
build-ios:
|
||||
# credit to pengubow from deepfriedwaffles repo
|
||||
name: Build iOS
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@main
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
cd project/iosproj
|
||||
xcodebuild -scheme minecraftpe -derivedDataPath build -destination 'generic/platform=iOS' CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
|
||||
mkdir -p Payload
|
||||
cp -R build/Build/Products/Debug-iphoneos/minecraftpe.app Payload/
|
||||
zip -r minecraftpe.ipa Payload
|
||||
rm -rf Payload
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@main
|
||||
with:
|
||||
name: minecraftpe-ios
|
||||
path: project/iosproj/minecraftpe.ipa
|
||||
|
||||
build-linux:
|
||||
name: Build Linux
|
||||
runs-on: ubuntu-latest
|
||||
@@ -216,6 +192,16 @@ jobs:
|
||||
distribution: temurin
|
||||
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
|
||||
run: |
|
||||
chmod +x ./build.sh
|
||||
@@ -280,7 +266,8 @@ jobs:
|
||||
publish:
|
||||
name: Publish
|
||||
runs-on: ubuntu-latest
|
||||
needs: [ build-windows, build-ios, build-linux, build-android, build-web ]
|
||||
needs: [ build-windows, build-linux, build-android, build-web ]
|
||||
if: github.ref == 'refs/heads/main'
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
@@ -312,10 +299,17 @@ jobs:
|
||||
files: mcpe-linux/MinecraftPE-server
|
||||
dest: minecraftpe-server-${{ steps.ref.outputs.hash }}.zip
|
||||
|
||||
- name: Rename Android Artifacts
|
||||
run: |
|
||||
mv minecraftpe-apk-arm64-v8a/minecraftpe-v8a-debug.apk minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.apk
|
||||
mv minecraftpe-apk-armeabi-v7a/minecraftpe-v7a-debug.apk minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.apk
|
||||
- name: Zip Android arm64-v8a Artifact
|
||||
uses: vimtor/action-zip@v1.2
|
||||
with:
|
||||
files: minecraftpe-apk-arm64-v8a/minecraftpe-v8a-debug.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
|
||||
uses: vimtor/action-zip@v1.2
|
||||
@@ -341,9 +335,9 @@ jobs:
|
||||
MinecraftPE development release for commit ${{ github.sha }}.
|
||||
files: |
|
||||
./data.zip
|
||||
./minecraftpe-server-${{ steps.ref.outputs.hash }}.zip
|
||||
./minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip
|
||||
./minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
|
||||
./minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.apk
|
||||
./minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.apk
|
||||
./minecraftpe-${{ steps.ref.outputs.hash }}-web.zip
|
||||
./minecraftpe-server-${{ steps.ref.outputs.hash }}.zip
|
||||
./minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.zip
|
||||
./minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.zip
|
||||
./minecraftpe-${{ steps.ref.outputs.hash }}-web.zip
|
||||
@@ -111,7 +111,6 @@ CPMAddPackage(
|
||||
"ALSOFT_STATIC_LIBGCC ON"
|
||||
)
|
||||
|
||||
# TODO: Clear this paths with *
|
||||
file(GLOB SERVER_SOURCES
|
||||
"project/lib_projects/raknet/jni/RaknetSources/*.cpp"
|
||||
"src/NinecraftApp.cpp"
|
||||
@@ -166,7 +165,6 @@ file(GLOB SERVER_SOURCES
|
||||
"src/util/Mth.cpp"
|
||||
"src/util/PerfTimer.cpp"
|
||||
"src/util/StringUtils.cpp"
|
||||
"src/util/Color.cpp"
|
||||
|
||||
"src/world/Direction.cpp"
|
||||
|
||||
@@ -200,9 +198,6 @@ file(GLOB SERVER_SOURCES
|
||||
|
||||
"src/world/level/dimension/Dimension.cpp"
|
||||
|
||||
"src/world/level/dimension/FoliageColor.cpp"
|
||||
"src/world/level/GrassColor.cpp"
|
||||
|
||||
"src/world/level/levelgen/*.cpp"
|
||||
"src/world/level/levelgen/feature/Feature.cpp"
|
||||
"src/world/level/levelgen/synth/*.cpp"
|
||||
@@ -216,6 +211,7 @@ file(GLOB SERVER_SOURCES
|
||||
"src/world/level/tile/entity/*.cpp"
|
||||
|
||||
"src/world/phys/HitResult.cpp"
|
||||
"src/commands/*.cpp"
|
||||
)
|
||||
|
||||
file(GLOB CLIENT_SOURCES
|
||||
@@ -262,8 +258,6 @@ file(GLOB CLIENT_SOURCES
|
||||
|
||||
"src/util/**.cpp"
|
||||
|
||||
"src/util/Color.cpp"
|
||||
|
||||
"src/world/*.cpp"
|
||||
"src/world/phys/*.cpp"
|
||||
"src/world/entity/*.cpp"
|
||||
@@ -299,6 +293,8 @@ file(GLOB CLIENT_SOURCES
|
||||
|
||||
"src/AppPlatform_glfw.cpp"
|
||||
"src/main.cpp"
|
||||
|
||||
"src/commands/*.cpp"
|
||||
)
|
||||
|
||||
if (${PLATFORM} STREQUAL "Desktop")
|
||||
@@ -312,7 +308,6 @@ if(UNIX)
|
||||
target_compile_definitions("${PROJECT_NAME}-server" PUBLIC "STANDALONE_SERVER" "SERVER_PROFILER")
|
||||
|
||||
target_include_directories("${PROJECT_NAME}-server" PUBLIC
|
||||
"${CMAKE_SOURCE_DIR}/glad/include/"
|
||||
"${CMAKE_SOURCE_DIR}/src/"
|
||||
"project/lib_projects/raknet/jni/RaknetSources"
|
||||
)
|
||||
|
||||
37
README.md
@@ -197,39 +197,4 @@ cmake --build .
|
||||
3. Run game:
|
||||
```
|
||||
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.
|
||||
```
|
||||
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 868 B |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 306 B |
|
Before Width: | Height: | Size: 910 B |
|
Before Width: | Height: | Size: 799 B |
@@ -153,32 +153,6 @@ options.group.tweaks=Tweaks
|
||||
options.allowSprint=Allow sprint
|
||||
options.barOnTop=HUD above inventory
|
||||
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.thirdperson=Third Person
|
||||
options.servervisible=Server Visible
|
||||
@@ -229,12 +203,6 @@ options.fancyGraphics=Fancy graphics
|
||||
options.renderDebug=Debug render
|
||||
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.balanced=Balanced
|
||||
|
||||
@@ -98,7 +98,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
||||
../../../src/client/player/RemotePlayer.cpp \
|
||||
../../../src/client/player/input/KeyboardInput.cpp \
|
||||
../../../src/client/player/input/touchscreen/TouchscreenInput.cpp \
|
||||
../../../src/client/renderer/Lighting.cpp \
|
||||
../../../src/client/renderer/Chunk.cpp \
|
||||
../../../src/client/renderer/EntityTileRenderer.cpp \
|
||||
../../../src/client/renderer/GameRenderer.cpp \
|
||||
@@ -147,7 +146,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
||||
../../../src/util/StringUtils.cpp \
|
||||
../../../src/util/PerfTimer.cpp \
|
||||
../../../src/util/PerfRenderer.cpp \
|
||||
../../../src/util/Color.cpp \
|
||||
../../../src/world/Direction.cpp \
|
||||
../../../src/world/entity/AgableMob.cpp \
|
||||
../../../src/world/entity/Entity.cpp \
|
||||
@@ -211,8 +209,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
||||
../../../src/world/level/MobSpawner.cpp \
|
||||
../../../src/world/level/Region.cpp \
|
||||
../../../src/world/level/TickNextTickData.cpp \
|
||||
../../../src/world/level/FoliageColor.cpp \
|
||||
../../../src/world/level/GrassColor.cpp \
|
||||
../../../src/world/level/biome/Biome.cpp \
|
||||
../../../src/world/level/biome/BiomeSource.cpp \
|
||||
../../../src/world/level/chunk/LevelChunk.cpp \
|
||||
|
||||
@@ -75,7 +75,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
||||
../../../src/client/player/RemotePlayer.cpp \
|
||||
../../../src/client/player/input/KeyboardInput.cpp \
|
||||
../../../src/client/player/input/touchscreen/TouchscreenInput.cpp \
|
||||
../../../src/client/renderer/Lighting.cpp \
|
||||
../../../src/client/renderer/Chunk.cpp \
|
||||
../../../src/client/renderer/EntityTileRenderer.cpp \
|
||||
../../../src/client/renderer/GameRenderer.cpp \
|
||||
@@ -123,7 +122,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
||||
../../../src/util/StringUtils.cpp \
|
||||
../../../src/util/PerfTimer.cpp \
|
||||
../../../src/util/PerfRenderer.cpp \
|
||||
../../../src/util/Color.cpp \
|
||||
../../../src/world/Direction.cpp \
|
||||
../../../src/world/entity/AgableMob.cpp \
|
||||
../../../src/world/entity/Entity.cpp \
|
||||
@@ -185,8 +183,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
||||
../../../src/world/level/MobSpawner.cpp \
|
||||
../../../src/world/level/Region.cpp \
|
||||
../../../src/world/level/TickNextTickData.cpp \
|
||||
../../../src/world/level/FoliageColor.cpp \
|
||||
../../../src/world/level/GrassColor.cpp \
|
||||
../../../src/world/level/biome/Biome.cpp \
|
||||
../../../src/world/level/biome/BiomeSource.cpp \
|
||||
../../../src/world/level/chunk/LevelChunk.cpp \
|
||||
|
||||
@@ -129,7 +129,6 @@ public class SoundPlayer
|
||||
new SoundId(R.raw.eat1, "random.eat"),
|
||||
new SoundId(R.raw.eat2, "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.zpig1, "mob.zombiepig.zpig"),
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/>
|
||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="EHf-IW-A2E">
|
||||
<objects>
|
||||
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="obG-Y5-kRd">
|
||||
<rect key="frame" x="0.0" y="626.5" width="375" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="minecraftpe" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb">
|
||||
<rect key="frame" x="0.0" y="202" width="375" height="43"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="Bcu-3y-fUS" firstAttribute="centerX" secondItem="obG-Y5-kRd" secondAttribute="centerX" id="5cz-MP-9tL"/>
|
||||
<constraint firstItem="Bcu-3y-fUS" firstAttribute="centerX" secondItem="GJd-Yh-RWb" secondAttribute="centerX" id="Q3B-4B-g5h"/>
|
||||
<constraint firstItem="obG-Y5-kRd" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" constant="20" symbolic="YES" id="SfN-ll-jLj"/>
|
||||
<constraint firstAttribute="bottom" secondItem="obG-Y5-kRd" secondAttribute="bottom" constant="20" id="Y44-ml-fuU"/>
|
||||
<constraint firstItem="GJd-Yh-RWb" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="bottom" multiplier="1/3" constant="1" id="moa-c2-u7t"/>
|
||||
<constraint firstItem="GJd-Yh-RWb" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" constant="20" symbolic="YES" id="x7j-FC-K8j"/>
|
||||
</constraints>
|
||||
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="53" y="375"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
||||
@@ -41,6 +41,7 @@
|
||||
042A91AE16B17517007ABBC6 /* GuiElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A316B17517007ABBC6 /* GuiElement.cpp */; };
|
||||
042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A516B17517007ABBC6 /* NinePatch.cpp */; };
|
||||
042A91B016B17517007ABBC6 /* OptionsGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A716B17517007ABBC6 /* OptionsGroup.cpp */; };
|
||||
042A91B116B17517007ABBC6 /* OptionsPane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A916B17517007ABBC6 /* OptionsPane.cpp */; };
|
||||
042A91B216B17517007ABBC6 /* TextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91AB16B17517007ABBC6 /* TextBox.cpp */; };
|
||||
044129071682FF9600B70EE6 /* MouseHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 044129061682FF9600B70EE6 /* MouseHandler.cpp */; };
|
||||
9D293CE716071C08000305C8 /* CreateNewWorld_iphone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9D293CE616071C08000305C8 /* CreateNewWorld_iphone.xib */; };
|
||||
@@ -1146,41 +1147,6 @@
|
||||
D5F3B7DD14548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C814548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib */; };
|
||||
D5F3B7DE14548E7900D25470 /* IASKSpecifierValuesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C914548E7900D25470 /* IASKSpecifierValuesView.xib */; };
|
||||
D5F3B7E51454930400D25470 /* InAppSettings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7E41454930400D25470 /* InAppSettings.bundle */; };
|
||||
F912B8CF2F6C3D5200BC60DF /* TextBox.h in Sources */ = {isa = PBXBuildFile; fileRef = 042A91AC16B17517007ABBC6 /* TextBox.h */; };
|
||||
F99D341F2F736AA100DC153E /* HttpClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D341E2F736AA100DC153E /* HttpClient.cpp */; };
|
||||
F99D34202F736AA100DC153E /* HttpClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D341E2F736AA100DC153E /* HttpClient.cpp */; };
|
||||
F99D34232F736AD400DC153E /* TextOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34222F736AD400DC153E /* TextOption.cpp */; };
|
||||
F99D34242F736AD400DC153E /* TextOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34222F736AD400DC153E /* TextOption.cpp */; };
|
||||
F99D34272F736AFB00DC153E /* OptionsFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34262F736AFB00DC153E /* OptionsFile.cpp */; };
|
||||
F99D34282F736AFB00DC153E /* OptionsFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34262F736AFB00DC153E /* OptionsFile.cpp */; };
|
||||
F99D342B2F736B6F00DC153E /* OptionsItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D342A2F736B6F00DC153E /* OptionsItem.cpp */; };
|
||||
F99D342C2F736B6F00DC153E /* OptionsItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D342A2F736B6F00DC153E /* OptionsItem.cpp */; };
|
||||
F99D342F2F736BAD00DC153E /* ConsoleScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D342E2F736BAD00DC153E /* ConsoleScreen.cpp */; };
|
||||
F99D34302F736BAD00DC153E /* ConsoleScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D342E2F736BAD00DC153E /* ConsoleScreen.cpp */; };
|
||||
F99D34332F736BDA00DC153E /* CreditsScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34322F736BDA00DC153E /* CreditsScreen.cpp */; };
|
||||
F99D34342F736BDA00DC153E /* CreditsScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34322F736BDA00DC153E /* CreditsScreen.cpp */; };
|
||||
F99D34372F736C1000DC153E /* JoinByIPScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34362F736C1000DC153E /* JoinByIPScreen.cpp */; };
|
||||
F99D34382F736C1000DC153E /* JoinByIPScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34362F736C1000DC153E /* JoinByIPScreen.cpp */; };
|
||||
F99D343B2F736C3B00DC153E /* UsernameScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D343A2F736C3B00DC153E /* UsernameScreen.cpp */; };
|
||||
F99D343C2F736C3B00DC153E /* UsernameScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D343A2F736C3B00DC153E /* UsernameScreen.cpp */; };
|
||||
F99D343F2F736C8400DC153E /* GuiElementContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D343E2F736C8400DC153E /* GuiElementContainer.cpp */; };
|
||||
F99D34402F736C8400DC153E /* GuiElementContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D343E2F736C8400DC153E /* GuiElementContainer.cpp */; };
|
||||
F99D34432F736F9400DC153E /* Option.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34422F736F9400DC153E /* Option.cpp */; };
|
||||
F99D34442F736F9400DC153E /* Option.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34422F736F9400DC153E /* Option.cpp */; };
|
||||
F99D34472F736FE800DC153E /* KeyOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34462F736FE800DC153E /* KeyOption.cpp */; };
|
||||
F99D34482F736FE800DC153E /* KeyOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34462F736FE800DC153E /* KeyOption.cpp */; };
|
||||
F99D344B2F7370CF00DC153E /* Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D344A2F7370CF00DC153E /* Slider.cpp */; };
|
||||
F99D344C2F7370CF00DC153E /* Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D344A2F7370CF00DC153E /* Slider.cpp */; };
|
||||
F99D344E2F7372A100DC153E /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F99D344D2F7372A100DC153E /* Launch Screen.storyboard */; };
|
||||
F99D344F2F7372A100DC153E /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F99D344D2F7372A100DC153E /* Launch Screen.storyboard */; };
|
||||
F99F0FA92F84369F00F2B29A /* GrassColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FA82F84369F00F2B29A /* GrassColor.cpp */; };
|
||||
F99F0FAA2F84369F00F2B29A /* GrassColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FA82F84369F00F2B29A /* GrassColor.cpp */; };
|
||||
F99F0FAC2F8436CE00F2B29A /* FoliageColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */; };
|
||||
F99F0FAD2F8436CE00F2B29A /* FoliageColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */; };
|
||||
F99F0FAF2F8436EB00F2B29A /* Color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAE2F8436EB00F2B29A /* Color.cpp */; };
|
||||
F99F0FB02F8436EB00F2B29A /* Color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAE2F8436EB00F2B29A /* Color.cpp */; };
|
||||
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 */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
@@ -1242,8 +1208,10 @@
|
||||
042A91A616B17517007ABBC6 /* NinePatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NinePatch.h; sourceTree = "<group>"; };
|
||||
042A91A716B17517007ABBC6 /* OptionsGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OptionsGroup.cpp; sourceTree = "<group>"; };
|
||||
042A91A816B17517007ABBC6 /* OptionsGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionsGroup.h; sourceTree = "<group>"; };
|
||||
042A91A916B17517007ABBC6 /* OptionsPane.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OptionsPane.cpp; sourceTree = "<group>"; };
|
||||
042A91AA16B17517007ABBC6 /* OptionsPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionsPane.h; sourceTree = "<group>"; };
|
||||
042A91AB16B17517007ABBC6 /* TextBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextBox.cpp; sourceTree = "<group>"; };
|
||||
042A91AC16B17517007ABBC6 /* TextBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextBox.h; path = ../../src/client/gui/components/TextBox.h; sourceTree = SOURCE_ROOT; };
|
||||
042A91AC16B17517007ABBC6 /* TextBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextBox.h; 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>"; };
|
||||
9D293CEA160720D6000305C8 /* worldname_iphone5_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = worldname_iphone5_3.png; sourceTree = "<group>"; };
|
||||
@@ -2049,7 +2017,7 @@
|
||||
D5B50D6914CFF66F005F7284 /* Multitouch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Multitouch.h; sourceTree = "<group>"; };
|
||||
D5B50D6A14CFF66F005F7284 /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = "<group>"; };
|
||||
D5B50D6B14CFF66F005F7284 /* time.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = time.cpp; sourceTree = "<group>"; };
|
||||
D5B50D6C14CFF66F005F7284 /* time.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = time.h; sourceTree = "<group>"; };
|
||||
D5B50D6C14CFF66F005F7284 /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time.h; sourceTree = "<group>"; };
|
||||
D5B50E5614CFF66F005F7284 /* SharedConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedConstants.h; sourceTree = "<group>"; };
|
||||
D5B50E5714CFF66F005F7284 /* terrain_4444.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = terrain_4444.h; sourceTree = "<group>"; };
|
||||
D5B50E5814CFF66F005F7284 /* terrain_5551.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = terrain_5551.h; sourceTree = "<group>"; };
|
||||
@@ -2440,35 +2408,6 @@
|
||||
D5F3B7C814548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKPSToggleSwitchSpecifierViewCell.xib; sourceTree = "<group>"; };
|
||||
D5F3B7C914548E7900D25470 /* IASKSpecifierValuesView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKSpecifierValuesView.xib; sourceTree = "<group>"; };
|
||||
D5F3B7E41454930400D25470 /* InAppSettings.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.installer-pkg"; path = InAppSettings.bundle; sourceTree = "<group>"; };
|
||||
F99D341D2F736AA100DC153E /* HttpClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HttpClient.h; path = ../../src/platform/HttpClient.h; sourceTree = "<group>"; };
|
||||
F99D341E2F736AA100DC153E /* HttpClient.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = HttpClient.cpp; path = ../../src/platform/HttpClient.cpp; sourceTree = "<group>"; };
|
||||
F99D34212F736AD400DC153E /* TextOption.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TextOption.h; path = ../../src/client/gui/components/TextOption.h; sourceTree = "<group>"; };
|
||||
F99D34222F736AD400DC153E /* TextOption.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TextOption.cpp; path = ../../src/client/gui/components/TextOption.cpp; sourceTree = "<unknown>"; };
|
||||
F99D34252F736AFB00DC153E /* OptionsFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OptionsFile.h; path = ../../src/client/OptionsFile.h; sourceTree = "<group>"; };
|
||||
F99D34262F736AFB00DC153E /* OptionsFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = OptionsFile.cpp; path = ../../src/client/OptionsFile.cpp; sourceTree = "<group>"; };
|
||||
F99D34292F736B6F00DC153E /* OptionsItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OptionsItem.h; path = ../../src/client/gui/components/OptionsItem.h; sourceTree = "<group>"; };
|
||||
F99D342A2F736B6F00DC153E /* OptionsItem.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = OptionsItem.cpp; path = ../../src/client/gui/components/OptionsItem.cpp; sourceTree = "<group>"; };
|
||||
F99D342D2F736BAD00DC153E /* ConsoleScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ConsoleScreen.h; path = ../../src/client/gui/screens/ConsoleScreen.h; sourceTree = "<group>"; };
|
||||
F99D342E2F736BAD00DC153E /* ConsoleScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ConsoleScreen.cpp; path = ../../src/client/gui/screens/ConsoleScreen.cpp; sourceTree = "<group>"; };
|
||||
F99D34312F736BDA00DC153E /* CreditsScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CreditsScreen.h; path = ../../src/client/gui/screens/CreditsScreen.h; sourceTree = "<group>"; };
|
||||
F99D34322F736BDA00DC153E /* CreditsScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CreditsScreen.cpp; path = ../../src/client/gui/screens/CreditsScreen.cpp; sourceTree = "<group>"; };
|
||||
F99D34352F736C1000DC153E /* JoinByIPScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JoinByIPScreen.h; path = ../../src/client/gui/screens/JoinByIPScreen.h; sourceTree = "<group>"; };
|
||||
F99D34362F736C1000DC153E /* JoinByIPScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = JoinByIPScreen.cpp; path = ../../src/client/gui/screens/JoinByIPScreen.cpp; sourceTree = "<group>"; };
|
||||
F99D34392F736C3B00DC153E /* UsernameScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = UsernameScreen.h; path = ../../src/client/gui/screens/UsernameScreen.h; sourceTree = "<group>"; };
|
||||
F99D343A2F736C3B00DC153E /* UsernameScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = UsernameScreen.cpp; path = ../../src/client/gui/screens/UsernameScreen.cpp; sourceTree = "<group>"; };
|
||||
F99D343D2F736C8400DC153E /* GuiElementContainer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GuiElementContainer.h; path = ../../src/client/gui/components/GuiElementContainer.h; sourceTree = "<group>"; };
|
||||
F99D343E2F736C8400DC153E /* GuiElementContainer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = GuiElementContainer.cpp; path = ../../src/client/gui/components/GuiElementContainer.cpp; sourceTree = "<group>"; };
|
||||
F99D34412F736F9400DC153E /* Option.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Option.h; path = ../../src/client/Option.h; sourceTree = "<group>"; };
|
||||
F99D34422F736F9400DC153E /* Option.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Option.cpp; path = ../../src/client/Option.cpp; sourceTree = "<group>"; };
|
||||
F99D34452F736FE800DC153E /* KeyOption.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = KeyOption.h; path = ../../src/client/gui/components/KeyOption.h; sourceTree = "<group>"; };
|
||||
F99D34462F736FE800DC153E /* KeyOption.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = KeyOption.cpp; path = ../../src/client/gui/components/KeyOption.cpp; sourceTree = "<group>"; };
|
||||
F99D34492F7370CF00DC153E /* Slider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Slider.h; path = ../../src/client/gui/components/Slider.h; sourceTree = "<group>"; };
|
||||
F99D344A2F7370CF00DC153E /* Slider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Slider.cpp; path = ../../src/client/gui/components/Slider.cpp; sourceTree = "<group>"; };
|
||||
F99D344D2F7372A100DC153E /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
|
||||
F99F0FA82F84369F00F2B29A /* GrassColor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GrassColor.cpp; sourceTree = "<group>"; };
|
||||
F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FoliageColor.cpp; sourceTree = "<group>"; };
|
||||
F99F0FAE2F8436EB00F2B29A /* Color.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Color.cpp; sourceTree = "<group>"; };
|
||||
BEEF202614CFF670005F0001 /* Lighting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Lighting.cpp; path = Lighting.cpp; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -3287,6 +3226,8 @@
|
||||
042A91A616B17517007ABBC6 /* NinePatch.h */,
|
||||
042A91A716B17517007ABBC6 /* OptionsGroup.cpp */,
|
||||
042A91A816B17517007ABBC6 /* OptionsGroup.h */,
|
||||
042A91A916B17517007ABBC6 /* OptionsPane.cpp */,
|
||||
042A91AA16B17517007ABBC6 /* OptionsPane.h */,
|
||||
042A91AB16B17517007ABBC6 /* TextBox.cpp */,
|
||||
042A91AC16B17517007ABBC6 /* TextBox.h */,
|
||||
D5B50C2814CFF66F005F7284 /* Button.cpp */,
|
||||
@@ -3536,7 +3477,6 @@
|
||||
D5B50CF114CFF66F005F7284 /* TileRenderer.cpp */,
|
||||
D5B50CF214CFF66F005F7284 /* TileRenderer.h */,
|
||||
D5B50CF314CFF66F005F7284 /* VertecDecl.h */,
|
||||
BEEF202614CFF670005F0001 /* Lighting.cpp */,
|
||||
);
|
||||
path = renderer;
|
||||
sourceTree = "<group>";
|
||||
@@ -3774,7 +3714,6 @@
|
||||
D5B50E6914CFF66F005F7284 /* StringUtils.cpp */,
|
||||
D5B50E6A14CFF66F005F7284 /* StringUtils.h */,
|
||||
D5B50E6B14CFF66F005F7284 /* WeighedRandom.h */,
|
||||
F99F0FAE2F8436EB00F2B29A /* Color.cpp */,
|
||||
);
|
||||
path = util;
|
||||
sourceTree = "<group>";
|
||||
@@ -4039,8 +3978,6 @@
|
||||
D5B50F3714CFF66F005F7284 /* TickNextTickData.h */,
|
||||
D5B50F3814CFF66F005F7284 /* tile */,
|
||||
D5B50F6814CFF66F005F7284 /* TilePos.h */,
|
||||
F99F0FA82F84369F00F2B29A /* GrassColor.cpp */,
|
||||
F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */,
|
||||
);
|
||||
path = level;
|
||||
sourceTree = "<group>";
|
||||
@@ -4319,7 +4256,6 @@
|
||||
D5CF9C37144C225000E4244F = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F99D344D2F7372A100DC153E /* Launch Screen.storyboard */,
|
||||
D5E1BA9A1451C8A0007DCC4F /* Default@2x.png */,
|
||||
9D959AFF16036BEE00E23A6F /* Default-568h@2x.png */,
|
||||
D5F07744145EF79B00EC30FB /* Default-Landscape~ipad.png */,
|
||||
@@ -4331,30 +4267,6 @@
|
||||
D5CF9C45144C225000E4244F /* Frameworks */,
|
||||
D5CF9C43144C225000E4244F /* Products */,
|
||||
D5B50C1614CFF66F005F7284 /* src */,
|
||||
F99D341D2F736AA100DC153E /* HttpClient.h */,
|
||||
F99D341E2F736AA100DC153E /* HttpClient.cpp */,
|
||||
F99D34212F736AD400DC153E /* TextOption.h */,
|
||||
F99D34222F736AD400DC153E /* TextOption.cpp */,
|
||||
F99D34252F736AFB00DC153E /* OptionsFile.h */,
|
||||
F99D34262F736AFB00DC153E /* OptionsFile.cpp */,
|
||||
F99D34292F736B6F00DC153E /* OptionsItem.h */,
|
||||
F99D342A2F736B6F00DC153E /* OptionsItem.cpp */,
|
||||
F99D342D2F736BAD00DC153E /* ConsoleScreen.h */,
|
||||
F99D342E2F736BAD00DC153E /* ConsoleScreen.cpp */,
|
||||
F99D34312F736BDA00DC153E /* CreditsScreen.h */,
|
||||
F99D34322F736BDA00DC153E /* CreditsScreen.cpp */,
|
||||
F99D34352F736C1000DC153E /* JoinByIPScreen.h */,
|
||||
F99D34362F736C1000DC153E /* JoinByIPScreen.cpp */,
|
||||
F99D34392F736C3B00DC153E /* UsernameScreen.h */,
|
||||
F99D343A2F736C3B00DC153E /* UsernameScreen.cpp */,
|
||||
F99D343D2F736C8400DC153E /* GuiElementContainer.h */,
|
||||
F99D343E2F736C8400DC153E /* GuiElementContainer.cpp */,
|
||||
F99D34412F736F9400DC153E /* Option.h */,
|
||||
F99D34422F736F9400DC153E /* Option.cpp */,
|
||||
F99D34452F736FE800DC153E /* KeyOption.h */,
|
||||
F99D34462F736FE800DC153E /* KeyOption.cpp */,
|
||||
F99D34492F7370CF00DC153E /* Slider.h */,
|
||||
F99D344A2F7370CF00DC153E /* Slider.cpp */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
@@ -4615,16 +4527,10 @@
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0420;
|
||||
TargetAttributes = {
|
||||
D5CF9C41144C225000E4244F = {
|
||||
DevelopmentTeam = PZUVNW8F2U;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = D5CF9C3C144C225000E4244F /* Build configuration list for PBXProject "minecraftpe" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = en;
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
@@ -4693,7 +4599,6 @@
|
||||
D5B50A5614CFF492005F7284 /* pig.png in Resources */,
|
||||
D5B50A5814CFF492005F7284 /* sheep_fur.png in Resources */,
|
||||
D5B50A5A14CFF492005F7284 /* sheep.png in Resources */,
|
||||
F99D344F2F7372A100DC153E /* Launch Screen.storyboard in Resources */,
|
||||
D5B50A5C14CFF492005F7284 /* skeleton.png in Resources */,
|
||||
D5B50A5E14CFF492005F7284 /* spider.png in Resources */,
|
||||
D5B50A6014CFF492005F7284 /* zombie.png in Resources */,
|
||||
@@ -5030,7 +4935,6 @@
|
||||
D5ACF26F15C03DBF00E21C22 /* sand2.m4a in Resources */,
|
||||
D5ACF27115C03DBF00E21C22 /* sand3.m4a in Resources */,
|
||||
D5ACF27315C03DBF00E21C22 /* sand4.m4a in Resources */,
|
||||
F99D344E2F7372A100DC153E /* Launch Screen.storyboard in Resources */,
|
||||
D5ACF27515C03DBF00E21C22 /* snow1.m4a in Resources */,
|
||||
D5ACF27715C03DBF00E21C22 /* snow2.m4a in Resources */,
|
||||
D5ACF27915C03DBF00E21C22 /* snow3.m4a in Resources */,
|
||||
@@ -5107,22 +5011,18 @@
|
||||
D58BB544146A0B910002C9F5 /* IASKSettingsStore.m in Sources */,
|
||||
D58BB545146A0B910002C9F5 /* IASKSettingsStoreFile.m in Sources */,
|
||||
D58BB546146A0B910002C9F5 /* IASKSettingsStoreUserDefaults.m in Sources */,
|
||||
F99D34232F736AD400DC153E /* TextOption.cpp in Sources */,
|
||||
D58BB547146A0B910002C9F5 /* IASKSpecifier.m in Sources */,
|
||||
D58BB548146A0B910002C9F5 /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
||||
D58BB549146A0B910002C9F5 /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
||||
D58BB54A146A0B910002C9F5 /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
||||
D58BB54B146A0B910002C9F5 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
|
||||
F99D343B2F736C3B00DC153E /* UsernameScreen.cpp in Sources */,
|
||||
D58BB54C146A0B910002C9F5 /* IASKSlider.m in Sources */,
|
||||
D58BB54D146A0B910002C9F5 /* IASKSwitch.m in Sources */,
|
||||
F99D34302F736BAD00DC153E /* ConsoleScreen.cpp in Sources */,
|
||||
D58BB54E146A0B910002C9F5 /* IASKTextField.m in Sources */,
|
||||
D58BB550146A0B910002C9F5 /* PVRTexture.m in Sources */,
|
||||
D5D43CC9146AF4B4002ED842 /* RenameMPWorldViewController.mm in Sources */,
|
||||
D5B50F7014CFF670005F7284 /* AppPlatform_iOS.mm in Sources */,
|
||||
D5B50F7414CFF670005F7284 /* CreativeMode.cpp in Sources */,
|
||||
F99D34432F736F9400DC153E /* Option.cpp in Sources */,
|
||||
D5B50F7614CFF670005F7284 /* GameMode.cpp in Sources */,
|
||||
D5B50F7814CFF670005F7284 /* Button.cpp in Sources */,
|
||||
D5B50F7A14CFF670005F7284 /* ImageButton.cpp in Sources */,
|
||||
@@ -5167,7 +5067,6 @@
|
||||
D5B50FC814CFF670005F7284 /* KeyboardInput.cpp in Sources */,
|
||||
D5B50FCA14CFF670005F7284 /* TouchscreenInput.cpp in Sources */,
|
||||
D5B50FCC14CFF670005F7284 /* LocalPlayer.cpp in Sources */,
|
||||
F99D34482F736FE800DC153E /* KeyOption.cpp in Sources */,
|
||||
D5B50FCE14CFF670005F7284 /* Chunk.cpp in Sources */,
|
||||
D5B50FD014CFF670005F7284 /* Frustum.cpp in Sources */,
|
||||
D5B50FD214CFF670005F7284 /* ChickenRenderer.cpp in Sources */,
|
||||
@@ -5210,7 +5109,6 @@
|
||||
D5B5111014CFF670005F7284 /* Mth.cpp in Sources */,
|
||||
D5B5111214CFF670005F7284 /* PerfRenderer.cpp in Sources */,
|
||||
D5B5111414CFF670005F7284 /* PerfTimer.cpp in Sources */,
|
||||
F99F0FA92F84369F00F2B29A /* GrassColor.cpp in Sources */,
|
||||
D5B5111614CFF670005F7284 /* StringUtils.cpp in Sources */,
|
||||
D5B5111814CFF670005F7284 /* Direction.cpp in Sources */,
|
||||
D5B5111A14CFF670005F7284 /* Animal.cpp in Sources */,
|
||||
@@ -5227,21 +5125,17 @@
|
||||
D5B5113014CFF670005F7284 /* TripodCamera.cpp in Sources */,
|
||||
D5B5113214CFF670005F7284 /* Mob.cpp in Sources */,
|
||||
D5B5113414CFF670005F7284 /* MobCategory.cpp in Sources */,
|
||||
F99D34282F736AFB00DC153E /* OptionsFile.cpp in Sources */,
|
||||
D5B5113814CFF670005F7284 /* PathFinderMob.cpp in Sources */,
|
||||
D5B5113A14CFF670005F7284 /* Inventory.cpp in Sources */,
|
||||
D5B5113C14CFF670005F7284 /* Player.cpp in Sources */,
|
||||
F99F0FB02F8436EB00F2B29A /* Color.cpp in Sources */,
|
||||
D5B5113E14CFF670005F7284 /* Arrow.cpp in Sources */,
|
||||
D5B5114014CFF670005F7284 /* Recipes.cpp in Sources */,
|
||||
D5B5114214CFF670005F7284 /* ToolRecipes.cpp in Sources */,
|
||||
D5B5114414CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
|
||||
D5B5114614CFF670005F7284 /* HatchetItem.cpp in Sources */,
|
||||
D5B5114814CFF670005F7284 /* Item.cpp in Sources */,
|
||||
F99F0FAC2F8436CE00F2B29A /* FoliageColor.cpp in Sources */,
|
||||
D5B5114A14CFF670005F7284 /* ItemInstance.cpp in Sources */,
|
||||
D5B5114C14CFF670005F7284 /* PickaxeItem.cpp in Sources */,
|
||||
F99D344B2F7370CF00DC153E /* Slider.cpp in Sources */,
|
||||
D5B5114E14CFF670005F7284 /* ShovelItem.cpp in Sources */,
|
||||
D5B5115014CFF670005F7284 /* Biome.cpp in Sources */,
|
||||
D5B5115214CFF670005F7284 /* BiomeSource.cpp in Sources */,
|
||||
@@ -5292,7 +5186,6 @@
|
||||
D5251DBA1538192700FC82C8 /* CloudServer.cpp in Sources */,
|
||||
D5251DBE1538192700FC82C8 /* CommandParserInterface.cpp in Sources */,
|
||||
D5251DC01538192700FC82C8 /* ConnectionGraph2.cpp in Sources */,
|
||||
F99D34402F736C8400DC153E /* GuiElementContainer.cpp in Sources */,
|
||||
D5251DC21538192700FC82C8 /* ConsoleServer.cpp in Sources */,
|
||||
D5251DC41538192700FC82C8 /* DataCompressor.cpp in Sources */,
|
||||
D5251DC61538192700FC82C8 /* DirectoryDeltaTransfer.cpp in Sources */,
|
||||
@@ -5317,8 +5210,6 @@
|
||||
D5251DEC1538192700FC82C8 /* HTTPConnection.cpp in Sources */,
|
||||
D5251DEE1538192700FC82C8 /* IncrementalReadInterface.cpp in Sources */,
|
||||
D5251DF01538192700FC82C8 /* Itoa.cpp in Sources */,
|
||||
F99D34202F736AA100DC153E /* HttpClient.cpp in Sources */,
|
||||
F99D34382F736C1000DC153E /* JoinByIPScreen.cpp in Sources */,
|
||||
D5251DF21538192700FC82C8 /* LinuxStrings.cpp in Sources */,
|
||||
D5251DF41538192700FC82C8 /* LocklessTypes.cpp in Sources */,
|
||||
D5251DF61538192700FC82C8 /* LogCommandParser.cpp in Sources */,
|
||||
@@ -5347,7 +5238,6 @@
|
||||
D5251E2A1538192700FC82C8 /* RakSleep.cpp in Sources */,
|
||||
D5251E2C1538192700FC82C8 /* RakString.cpp in Sources */,
|
||||
D5251E2E1538192700FC82C8 /* RakThread.cpp in Sources */,
|
||||
F99D34332F736BDA00DC153E /* CreditsScreen.cpp in Sources */,
|
||||
D5251E301538192700FC82C8 /* RakWString.cpp in Sources */,
|
||||
D5251E321538192700FC82C8 /* Rand.cpp in Sources */,
|
||||
D5251E341538192700FC82C8 /* rdlmalloc.cpp in Sources */,
|
||||
@@ -5390,7 +5280,6 @@
|
||||
D5951EEB159349100043A12A /* TileEntity.cpp in Sources */,
|
||||
D5951EEF159349680043A12A /* FurnaceScreen.cpp in Sources */,
|
||||
D5951EF215934A2D0043A12A /* Feature.cpp in Sources */,
|
||||
F99D342C2F736B6F00DC153E /* OptionsItem.cpp in Sources */,
|
||||
D5951EF815934AC50043A12A /* BaseContainerMenu.cpp in Sources */,
|
||||
D5951EFA15934AC50043A12A /* FurnaceMenu.cpp in Sources */,
|
||||
D5D381F315A1A1CF00B6C50E /* FillingContainer.cpp in Sources */,
|
||||
@@ -5443,7 +5332,6 @@
|
||||
D5D8C4C41639341100FD35F0 /* Motive.cpp in Sources */,
|
||||
D5D8C4C8163934BB00FD35F0 /* HangingEntityItem.cpp in Sources */,
|
||||
D5D8C4CC1639362F00FD35F0 /* NetherReactorPattern.cpp in Sources */,
|
||||
BEEF202614CFF670005F0002 /* Lighting.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -5451,10 +5339,8 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
F912B8CF2F6C3D5200BC60DF /* TextBox.h in Sources */,
|
||||
D5CF9C57144C225000E4244F /* main.mm in Sources */,
|
||||
D5CF9C5B144C225000E4244F /* minecraftpeAppDelegate.mm in Sources */,
|
||||
F99D343C2F736C3B00DC153E /* UsernameScreen.cpp in Sources */,
|
||||
D5CF9C65144C225000E4244F /* EAGLView.m in Sources */,
|
||||
D5CFA01D144C453900E4244F /* minecraftpeViewController.mm in Sources */,
|
||||
D5A55E4914500EDE00A7571B /* CreateNewWorldViewController.mm in Sources */,
|
||||
@@ -5468,7 +5354,6 @@
|
||||
D5F3B7D014548E7900D25470 /* IASKSettingsStoreUserDefaults.m in Sources */,
|
||||
D5F3B7D114548E7900D25470 /* IASKSpecifier.m in Sources */,
|
||||
D5F3B7D214548E7900D25470 /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
||||
F99D34472F736FE800DC153E /* KeyOption.cpp in Sources */,
|
||||
D5F3B7D314548E7900D25470 /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
||||
D5F3B7D414548E7900D25470 /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
||||
D5F3B7D514548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
|
||||
@@ -5548,7 +5433,6 @@
|
||||
D5B5102F14CFF670005F7284 /* main.cpp in Sources */,
|
||||
D5B5103514CFF670005F7284 /* Tag.cpp in Sources */,
|
||||
D5B5103714CFF670005F7284 /* ClientSideNetworkHandler.cpp in Sources */,
|
||||
F99F0FAF2F8436EB00F2B29A /* Color.cpp in Sources */,
|
||||
D5B5103914CFF670005F7284 /* NetEventCallback.cpp in Sources */,
|
||||
D5B5103B14CFF670005F7284 /* Packet.cpp in Sources */,
|
||||
D5B5103D14CFF670005F7284 /* RakNetInstance.cpp in Sources */,
|
||||
@@ -5569,7 +5453,6 @@
|
||||
D5B5111514CFF670005F7284 /* StringUtils.cpp in Sources */,
|
||||
D5B5111714CFF670005F7284 /* Direction.cpp in Sources */,
|
||||
D5B5111914CFF670005F7284 /* Animal.cpp in Sources */,
|
||||
F99F0FAD2F8436CE00F2B29A /* FoliageColor.cpp in Sources */,
|
||||
D5B5111B14CFF670005F7284 /* Chicken.cpp in Sources */,
|
||||
D5B5111D14CFF670005F7284 /* Cow.cpp in Sources */,
|
||||
D5B5111F14CFF670005F7284 /* Pig.cpp in Sources */,
|
||||
@@ -5582,13 +5465,11 @@
|
||||
D5B5112D14CFF670005F7284 /* PrimedTnt.cpp in Sources */,
|
||||
D5B5112F14CFF670005F7284 /* TripodCamera.cpp in Sources */,
|
||||
D5B5113114CFF670005F7284 /* Mob.cpp in Sources */,
|
||||
F99D34442F736F9400DC153E /* Option.cpp in Sources */,
|
||||
D5B5113314CFF670005F7284 /* MobCategory.cpp in Sources */,
|
||||
D5B5113714CFF670005F7284 /* PathFinderMob.cpp in Sources */,
|
||||
D5B5113914CFF670005F7284 /* Inventory.cpp in Sources */,
|
||||
D5B5113B14CFF670005F7284 /* Player.cpp in Sources */,
|
||||
D5B5113D14CFF670005F7284 /* Arrow.cpp in Sources */,
|
||||
F99D343F2F736C8400DC153E /* GuiElementContainer.cpp in Sources */,
|
||||
D5B5113F14CFF670005F7284 /* Recipes.cpp in Sources */,
|
||||
D5B5114114CFF670005F7284 /* ToolRecipes.cpp in Sources */,
|
||||
D5B5114314CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
|
||||
@@ -5620,19 +5501,16 @@
|
||||
D5B5117714CFF670005F7284 /* ExternalFileLevelStorageSource.cpp in Sources */,
|
||||
D5B5117914CFF670005F7284 /* RegionFile.cpp in Sources */,
|
||||
D5B5117B14CFF670005F7284 /* TickNextTickData.cpp in Sources */,
|
||||
F99F0FAA2F84369F00F2B29A /* GrassColor.cpp in Sources */,
|
||||
D5B5117D14CFF670005F7284 /* DoorTile.cpp in Sources */,
|
||||
D5B5118114CFF670005F7284 /* StoneSlabTile.cpp in Sources */,
|
||||
D5B5118314CFF670005F7284 /* Tile.cpp in Sources */,
|
||||
D5B5118514CFF670005F7284 /* HitResult.cpp in Sources */,
|
||||
D5B5118B14D03342005F7284 /* SynchedEntityData.cpp in Sources */,
|
||||
D5B5118E14DEA27F005F7284 /* DeathScreen.cpp in Sources */,
|
||||
F99D34242F736AD400DC153E /* TextOption.cpp in Sources */,
|
||||
D5B5119114DEA2B7005F7284 /* LevelData.cpp in Sources */,
|
||||
D5B5119414DEA2EF005F7284 /* DyePowderItem.cpp in Sources */,
|
||||
D584926D14FD234400741128 /* SharedConstants.cpp in Sources */,
|
||||
D584927314FD236700741128 /* MoveControl.cpp in Sources */,
|
||||
F99D344C2F7370CF00DC153E /* Slider.cpp in Sources */,
|
||||
D584928614FD240D00741128 /* IConfigListener.cpp in Sources */,
|
||||
D584928914FD2FAF00741128 /* Path.cpp in Sources */,
|
||||
D5B86281153810BD00F3238A /* I18n.cpp in Sources */,
|
||||
@@ -5684,7 +5562,6 @@
|
||||
D5251E011538192700FC82C8 /* NatTypeDetectionServer.cpp in Sources */,
|
||||
D5251E031538192700FC82C8 /* NetworkIDManager.cpp in Sources */,
|
||||
D5251E051538192700FC82C8 /* NetworkIDObject.cpp in Sources */,
|
||||
F99D34372F736C1000DC153E /* JoinByIPScreen.cpp in Sources */,
|
||||
D5251E071538192700FC82C8 /* PacketConsoleLogger.cpp in Sources */,
|
||||
D5251E091538192700FC82C8 /* PacketFileLogger.cpp in Sources */,
|
||||
D5251E0B1538192700FC82C8 /* PacketizedTCP.cpp in Sources */,
|
||||
@@ -5714,13 +5591,11 @@
|
||||
D5251E411538192700FC82C8 /* SendToThread.cpp in Sources */,
|
||||
D5251E431538192700FC82C8 /* SHA1.cpp in Sources */,
|
||||
D5251E451538192700FC82C8 /* SignaledEvent.cpp in Sources */,
|
||||
F99D34342F736BDA00DC153E /* CreditsScreen.cpp in Sources */,
|
||||
D5251E471538192700FC82C8 /* SimpleMutex.cpp in Sources */,
|
||||
D5251E491538192700FC82C8 /* SocketLayer.cpp in Sources */,
|
||||
D5251E4B1538192700FC82C8 /* StringCompressor.cpp in Sources */,
|
||||
D5251E4D1538192700FC82C8 /* StringTable.cpp in Sources */,
|
||||
D5251E4F1538192700FC82C8 /* SuperFastHash.cpp in Sources */,
|
||||
F99D342B2F736B6F00DC153E /* OptionsItem.cpp in Sources */,
|
||||
D5251E511538192700FC82C8 /* TableSerializer.cpp in Sources */,
|
||||
D5251E531538192700FC82C8 /* TCPInterface.cpp in Sources */,
|
||||
D5251E551538192700FC82C8 /* TeamBalancer.cpp in Sources */,
|
||||
@@ -5743,7 +5618,6 @@
|
||||
D5951EDD159348C50043A12A /* ItemPane.cpp in Sources */,
|
||||
D5951EE3159349000043A12A /* FurnaceTile.cpp in Sources */,
|
||||
D5951EE8159349100043A12A /* FurnaceTileEntity.cpp in Sources */,
|
||||
F99D342F2F736BAD00DC153E /* ConsoleScreen.cpp in Sources */,
|
||||
D5951EEA159349100043A12A /* TileEntity.cpp in Sources */,
|
||||
D5951EEE159349680043A12A /* FurnaceScreen.cpp in Sources */,
|
||||
D5951EF115934A2D0043A12A /* Feature.cpp in Sources */,
|
||||
@@ -5780,7 +5654,6 @@
|
||||
D544941E15D13F45005FA9B0 /* PlayerRenderer.cpp in Sources */,
|
||||
D544942215D13F5E005FA9B0 /* RemotePlayer.cpp in Sources */,
|
||||
D5B17ED515E226F50056E751 /* Throwable.cpp in Sources */,
|
||||
F99D341F2F736AA100DC153E /* HttpClient.cpp in Sources */,
|
||||
D5B17ED915E2273F0056E751 /* SurvivalMode.cpp in Sources */,
|
||||
D5B17EDD15E227670056E751 /* TrapDoorTile.cpp in Sources */,
|
||||
D5B17EE115E260910056E751 /* MoveFolder.mm in Sources */,
|
||||
@@ -5816,7 +5689,6 @@
|
||||
0400453A16A4125C003EB6FA /* FallingTileRenderer.cpp in Sources */,
|
||||
0413970716A82E1E008A9F1A /* ArmorItem.cpp in Sources */,
|
||||
0413970D16A82E6B008A9F1A /* CraftingFilters.cpp in Sources */,
|
||||
F99D34272F736AFB00DC153E /* OptionsFile.cpp in Sources */,
|
||||
0413970E16A82E6B008A9F1A /* StonecutterScreen.cpp in Sources */,
|
||||
0413971116A82E7B008A9F1A /* ArmorScreen.cpp in Sources */,
|
||||
0413971516A82EB9008A9F1A /* ArmorRecipes.cpp in Sources */,
|
||||
@@ -5825,8 +5697,8 @@
|
||||
042A91AE16B17517007ABBC6 /* GuiElement.cpp in Sources */,
|
||||
042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */,
|
||||
042A91B016B17517007ABBC6 /* OptionsGroup.cpp in Sources */,
|
||||
042A91B116B17517007ABBC6 /* OptionsPane.cpp in Sources */,
|
||||
042A91B216B17517007ABBC6 /* TextBox.cpp in Sources */,
|
||||
BEEF202614CFF670005F0003 /* Lighting.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -5863,29 +5735,25 @@
|
||||
D50BE20815EE05B8008AA75E /* Ad-Hoc */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD)";
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
|
||||
GCC_VERSION = "";
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "C93D3524-5C6F-466E-B12B-833663B7EAE0";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SDKROOT = iphoneos6.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
USE_HEADERMAP = NO;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = "Ad-Hoc";
|
||||
@@ -5897,26 +5765,15 @@
|
||||
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = "";
|
||||
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
||||
GCC_VERSION = "";
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(SRCROOT)/../../src",
|
||||
"$(SRCROOT)/../../src/client/gui/components",
|
||||
"$(SRCROOT)/../../src/world",
|
||||
"$(SRCROOT)/../../src/platform/input",
|
||||
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
|
||||
);
|
||||
HEADER_SEARCH_PATHS = "";
|
||||
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SYSTEM_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../lib_projects/InAppSettingsKit/Models $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USE_HEADERMAP = NO;
|
||||
SDKROOT = iphoneos6.0;
|
||||
VALID_ARCHS = "i386 armv6 armv7";
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = "Ad-Hoc";
|
||||
@@ -5989,28 +5846,24 @@
|
||||
D5A20ADB146AAD9C00A52FEC /* AppStore */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD)";
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_VERSION = "";
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "64BA8967-1A9A-4980-972C-42E75AD5E023";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SDKROOT = iphoneos6.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
USE_HEADERMAP = NO;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = AppStore;
|
||||
@@ -6023,19 +5876,11 @@
|
||||
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
|
||||
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
||||
GCC_VERSION = "";
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(SRCROOT)/../../src",
|
||||
"$(SRCROOT)/../../src/client/gui/components",
|
||||
"$(SRCROOT)/../../src/world",
|
||||
"$(SRCROOT)/../../src/platform/input",
|
||||
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
|
||||
);
|
||||
HEADER_SEARCH_PATHS = "";
|
||||
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
OTHER_CFLAGS = (
|
||||
"-DNS_BLOCK_ASSERTIONS=1",
|
||||
"-DANDROID_PUBLISH",
|
||||
@@ -6043,10 +5888,8 @@
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "1B194957-98CF-49B7-A0E7-76692B4B722D";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SYSTEM_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../lib_projects/InAppSettingsKit/Models $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USE_HEADERMAP = NO;
|
||||
SDKROOT = iphoneos6.0;
|
||||
VALID_ARCHS = "i386 armv6 armv7";
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = AppStore;
|
||||
@@ -6079,8 +5922,8 @@
|
||||
D5CF9C6C144C225000E4244F /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD)";
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
@@ -6092,50 +5935,41 @@
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_VERSION = "";
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SDKROOT = iphoneos6.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
USE_HEADERMAP = NO;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
D5CF9C6D144C225000E4244F /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD)";
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
|
||||
GCC_VERSION = "";
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SDKROOT = iphoneos6.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
|
||||
USE_HEADERMAP = NO;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
@@ -6143,34 +5977,19 @@
|
||||
D5CF9C6F144C225000E4244F /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = PZUVNW8F2U;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
|
||||
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
||||
GCC_VERSION = "";
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(SRCROOT)/../../src",
|
||||
"$(SRCROOT)/../../src/client/gui/components",
|
||||
"$(SRCROOT)/../../src/world",
|
||||
"$(SRCROOT)/../../src/platform/input",
|
||||
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
|
||||
);
|
||||
HEADER_SEARCH_PATHS = "";
|
||||
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SYSTEM_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../lib_projects/InAppSettingsKit/Models $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USE_HEADERMAP = NO;
|
||||
SDKROOT = iphoneos6.0;
|
||||
VALID_ARCHS = "i386 armv6 armv7";
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = Debug;
|
||||
@@ -6178,34 +5997,19 @@
|
||||
D5CF9C70144C225000E4244F /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = PZUVNW8F2U;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = "";
|
||||
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
|
||||
GCC_VERSION = "";
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(SRCROOT)/../../src",
|
||||
"$(SRCROOT)/../../src/client/gui/components",
|
||||
"$(SRCROOT)/../../src/world",
|
||||
"$(SRCROOT)/../../src/platform/input",
|
||||
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
|
||||
);
|
||||
HEADER_SEARCH_PATHS = "";
|
||||
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
RUN_CLANG_STATIC_ANALYZER = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SYSTEM_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../lib_projects/InAppSettingsKit/Models $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
|
||||
USE_HEADERMAP = NO;
|
||||
SDKROOT = iphoneos6.0;
|
||||
VALID_ARCHS = "i386 armv6 armv7";
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = Release;
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
</dict>
|
||||
</dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<string>com.mojang.${PRODUCT_NAME:rfc1034identifier}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
@@ -58,8 +58,6 @@
|
||||
<array>
|
||||
<string>minecraft.ttf</string>
|
||||
</array>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>Launch Screen</string>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<true/>
|
||||
<key>UIRequiresPersistentWiFi</key>
|
||||
|
||||
@@ -52,10 +52,11 @@ public:
|
||||
|
||||
virtual StringVector getOptionStrings();
|
||||
|
||||
virtual bool isPowerVR();
|
||||
virtual bool isPowerVR() { return false; }
|
||||
virtual bool isSuperFast();
|
||||
virtual void showKeyboard();
|
||||
virtual void hideKeyboard();
|
||||
virtual void isPowerVR();
|
||||
private:
|
||||
|
||||
std::string _basePath;
|
||||
|
||||
@@ -275,10 +275,8 @@ void AppPlatform_iOS::hideKeyboard() {
|
||||
[_viewController hideKeyboard];
|
||||
super::hideKeyboard();
|
||||
}
|
||||
|
||||
// this was originally void but i changed it to bool because void cant return values
|
||||
bool AppPlatform_iOS::isPowerVR() {
|
||||
void AppPlatform_iOS::isPowerVR() {
|
||||
const char* s = (const char*)glGetString(GL_RENDERER);
|
||||
if (!s) return false;
|
||||
return strstr(s, "SGX") != NULL;
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
#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__*/
|
||||
@@ -2,19 +2,19 @@
|
||||
#include "Options.h"
|
||||
#include "client/Options.h"
|
||||
#include "client/player/input/IBuildInput.h"
|
||||
#include "commands/CommandManager.hpp"
|
||||
#include "platform/input/Keyboard.h"
|
||||
#include "world/item/Item.h"
|
||||
#include "world/item/ItemInstance.h"
|
||||
#include <string>
|
||||
#include <cstdlib>
|
||||
|
||||
|
||||
#if defined(APPLE_DEMO_PROMOTION)
|
||||
#define NO_NETWORK
|
||||
#define NO_NETWORK
|
||||
#endif
|
||||
|
||||
#if defined(RPI)
|
||||
#define CREATORMODE
|
||||
#define CREATORMODE
|
||||
#endif
|
||||
#include "../network/RakNetInstance.h"
|
||||
#include "../network/ClientSideNetworkHandler.h"
|
||||
@@ -91,15 +91,11 @@
|
||||
#include "../network/command/CommandServer.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) {
|
||||
#ifdef GLDEBUG
|
||||
while (1) {
|
||||
const int errCode = glGetError();
|
||||
if (errCode == GL_NO_ERROR) break;
|
||||
const int errCode = glGetError();
|
||||
if (errCode == GL_NO_ERROR) break;
|
||||
|
||||
LOGE("################\nOpenGL-error @ %s : #%d\n", tag, errCode);
|
||||
}
|
||||
@@ -117,7 +113,7 @@ const char* Minecraft::progressMessages[] = {
|
||||
int Minecraft::customDebugId = Minecraft::CDI_NONE;
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning( disable : 4355 ) // 'this' pointer in initialization list which is perfectly legal
|
||||
#pragma warning( disable : 4355 ) // 'this' pointer in initialization list which is perfectly legal
|
||||
#endif
|
||||
|
||||
bool Minecraft::useAmbientOcclusion = false;
|
||||
@@ -175,17 +171,18 @@ Minecraft::Minecraft() :
|
||||
width(1), height(1),
|
||||
//_respawnPlayerTicks(-1),
|
||||
#ifdef __APPLE__
|
||||
_isSuperFast(false),
|
||||
_isSuperFast(false),
|
||||
#endif
|
||||
_powerVr(false),
|
||||
commandPort(4711),
|
||||
reserved_d1(0),reserved_d2(0),
|
||||
reserved_f1(0),reserved_f2(0), options(this)
|
||||
reserved_f1(0),reserved_f2(0), options(this),
|
||||
m_commandManager()
|
||||
{
|
||||
//#ifdef ANDROID
|
||||
//#ifdef ANDROID
|
||||
|
||||
#if defined(NO_NETWORK)
|
||||
raknetInstance = new IRakNetInstance();
|
||||
raknetInstance = new IRakNetInstance();
|
||||
#else
|
||||
raknetInstance = new RakNetInstance();
|
||||
#endif
|
||||
@@ -265,7 +262,7 @@ void Minecraft::setLevel(Level* level, const std::string& message /* ="" */, Loc
|
||||
|
||||
if (level != NULL) {
|
||||
level->raknetInstance = raknetInstance;
|
||||
gameMode->initLevel(level);
|
||||
gameMode->initLevel(level);
|
||||
|
||||
if (!player && forceInsertPlayer)
|
||||
{
|
||||
@@ -280,6 +277,8 @@ void Minecraft::setLevel(Level* level, const std::string& message /* ="" */, Loc
|
||||
}
|
||||
}
|
||||
this->level = level;
|
||||
// So uhhh
|
||||
level->ops.emplace(options.getStringValue(OPTIONS_USERNAME));
|
||||
_hasSignaledGeneratingLevelFinished = false;
|
||||
#ifdef STANDALONE_SERVER
|
||||
const bool threadedLevelCreation = false;
|
||||
@@ -296,19 +295,19 @@ void Minecraft::setLevel(Level* level, const std::string& message /* ="" */, Loc
|
||||
// Non-threaded
|
||||
generateLevel("Currently not used", level);
|
||||
}
|
||||
} else {
|
||||
player = NULL;
|
||||
}
|
||||
} else {
|
||||
player = NULL;
|
||||
}
|
||||
|
||||
this->lastTickTime = 0;
|
||||
this->lastTickTime = 0;
|
||||
this->_running = true;
|
||||
}
|
||||
|
||||
void Minecraft::leaveGame(bool renameLevel /*=false*/)
|
||||
{
|
||||
if (isGeneratingLevel || !_hasSignaledGeneratingLevelFinished)
|
||||
return;
|
||||
|
||||
if (isGeneratingLevel || !_hasSignaledGeneratingLevelFinished)
|
||||
return;
|
||||
|
||||
isGeneratingLevel = false;
|
||||
bool saveLevel = level && (!level->isClientSide || renameLevel);
|
||||
|
||||
@@ -366,19 +365,19 @@ void Minecraft::prepareLevel(const std::string& title) {
|
||||
int Max = CHUNK_CACHE_WIDTH * CHUNK_CACHE_WIDTH;
|
||||
int pp = 0;
|
||||
for (int x = 8; x < (CHUNK_CACHE_WIDTH * CHUNK_WIDTH); x += CHUNK_WIDTH) {
|
||||
for (int z = 8; z < (CHUNK_CACHE_WIDTH * CHUNK_WIDTH); z += CHUNK_WIDTH) {
|
||||
progressStagePercentage = 100 * pp++ / Max;
|
||||
//printf("level generation progress %d\n", progressStagePercentage);
|
||||
for (int z = 8; z < (CHUNK_CACHE_WIDTH * CHUNK_WIDTH); z += CHUNK_WIDTH) {
|
||||
progressStagePercentage = 100 * pp++ / Max;
|
||||
//printf("level generation progress %d\n", progressStagePercentage);
|
||||
B.start();
|
||||
level->getTile(x, 64, z);
|
||||
level->getTile(x, 64, z);
|
||||
B.stop();
|
||||
L.start();
|
||||
if (level->isNew())
|
||||
while (level->updateLights())
|
||||
;
|
||||
L.stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
A.stop();
|
||||
level->setUpdateLights(true);
|
||||
|
||||
@@ -466,33 +465,32 @@ void Minecraft::update() {
|
||||
}
|
||||
TIMER_POP();
|
||||
|
||||
#ifndef STANDALONE_SERVER
|
||||
if (gameMode != NULL) gameMode->render(timer.a);
|
||||
TIMER_PUSH("sound");
|
||||
soundEngine->update(player, timer.a);
|
||||
TIMER_POP_PUSH("render");
|
||||
gameRenderer->render(timer.a);
|
||||
TIMER_POP();
|
||||
#else
|
||||
#ifndef STANDALONE_SERVER
|
||||
if (gameMode != NULL) gameMode->render(timer.a);
|
||||
TIMER_PUSH("sound");
|
||||
soundEngine->update(player, timer.a);
|
||||
TIMER_POP_PUSH("render");
|
||||
gameRenderer->render(timer.a);
|
||||
TIMER_POP();
|
||||
#else
|
||||
CThread::sleep(1);
|
||||
#endif
|
||||
#endif
|
||||
#ifndef STANDALONE_SERVER
|
||||
Multitouch::resetThisUpdate();
|
||||
#endif
|
||||
|
||||
#ifndef STANDALONE_SERVER
|
||||
TIMER_POP();
|
||||
#ifndef STANDALONE_SERVER
|
||||
checkGlError("Update finished");
|
||||
|
||||
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||
//#ifndef PLATFORM_DESKTOP
|
||||
#ifndef PLATFORM_DESKTOP
|
||||
if (!PerfTimer::enabled) {
|
||||
PerfTimer::reset();
|
||||
PerfTimer::enabled = true;
|
||||
}
|
||||
_perfRenderer->renderFpsMeter(1);
|
||||
checkGlError("render debug");
|
||||
//#endif
|
||||
#endif
|
||||
} else {
|
||||
PerfTimer::enabled = false;
|
||||
}
|
||||
@@ -559,7 +557,7 @@ void Minecraft::tick(int nTick, int maxTick) {
|
||||
level->tickEntities();
|
||||
level->tick();
|
||||
#ifndef STANDALONE_SERVER
|
||||
TIMER_POP_PUSH("animateTick");
|
||||
TIMER_POP_PUSH("animateTick");
|
||||
if (player) {
|
||||
level->animateTick(Mth::floor(player->x), Mth::floor(player->y), Mth::floor(player->z));
|
||||
}
|
||||
@@ -569,17 +567,17 @@ void Minecraft::tick(int nTick, int maxTick) {
|
||||
#ifndef STANDALONE_SERVER
|
||||
textures->loadAndBindTexture("terrain.png");
|
||||
if (!pause && !(screen && !screen->renderGameBehind())) {
|
||||
#if !defined(RPI)
|
||||
#ifdef __APPLE__
|
||||
if (isSuperFast())
|
||||
#endif
|
||||
{
|
||||
#if !defined(RPI)
|
||||
#ifdef __APPLE__
|
||||
if (isSuperFast())
|
||||
#endif
|
||||
{
|
||||
if (nTick == maxTick) {
|
||||
TIMER_POP_PUSH("textures");
|
||||
textures->tick(true);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
TIMER_POP_PUSH("particles");
|
||||
if (!pause) {
|
||||
@@ -641,8 +639,8 @@ void Minecraft::tickInput() {
|
||||
while (Mouse::next()) {
|
||||
//if (Mouse::getButtonState(MouseAction::ACTION_LEFT))
|
||||
// LOGI("mouse-down-at: %d, %d\n", Mouse::getX(), Mouse::getY());
|
||||
int passedTime = getTimeMs() - lastTickTime;
|
||||
if (passedTime > 200) continue; // @note: As long Mouse::clear CLEARS the whole buffer, it's safe to break here
|
||||
int passedTime = getTimeMs() - lastTickTime;
|
||||
if (passedTime > 200) continue; // @note: As long Mouse::clear CLEARS the whole buffer, it's safe to break here
|
||||
// But since it might be rewritten anyway (and hopefully there aren't a lot of messages, we just continue.
|
||||
|
||||
const MouseAction& e = Mouse::getEvent();
|
||||
@@ -673,14 +671,14 @@ void Minecraft::tickInput() {
|
||||
}
|
||||
/*
|
||||
if (mouseDiggable && options.useMouseForDigging) {
|
||||
if (Mouse::getEventButton() == MouseAction::ACTION_LEFT && Mouse::getEventButtonState()) {
|
||||
handleMouseClick(MouseAction::ACTION_LEFT);
|
||||
lastClickTick = ticks;
|
||||
}
|
||||
if (Mouse::getEventButton() == MouseAction::ACTION_RIGHT && Mouse::getEventButtonState()) {
|
||||
handleMouseClick(MouseAction::ACTION_RIGHT);
|
||||
lastClickTick = ticks;
|
||||
}
|
||||
if (Mouse::getEventButton() == MouseAction::ACTION_LEFT && Mouse::getEventButtonState()) {
|
||||
handleMouseClick(MouseAction::ACTION_LEFT);
|
||||
lastClickTick = ticks;
|
||||
}
|
||||
if (Mouse::getEventButton() == MouseAction::ACTION_RIGHT && Mouse::getEventButtonState()) {
|
||||
handleMouseClick(MouseAction::ACTION_RIGHT);
|
||||
lastClickTick = ticks;
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
@@ -701,20 +699,20 @@ void Minecraft::tickInput() {
|
||||
if (slot >= 0 && slot < gui.getNumSlots())
|
||||
player->inventory->selectSlot(slot);
|
||||
|
||||
#if defined(WIN32)
|
||||
if (digit >= 1 && GetAsyncKeyState(VK_CONTROL) < 0) {
|
||||
// Set adventure settings here!
|
||||
AdventureSettingsPacket p(level->adventureSettings);
|
||||
p.toggle((AdventureSettingsPacket::Flags)(1 << slot));
|
||||
p.fillIn(level->adventureSettings);
|
||||
raknetInstance->send(p);
|
||||
}
|
||||
if (digit == 0) {
|
||||
Pos pos((int)player->x, (int)player->y-1, (int)player->z);
|
||||
SetSpawnPositionPacket p(pos);
|
||||
raknetInstance->send(p);
|
||||
}
|
||||
#endif
|
||||
#if defined(WIN32)
|
||||
if (digit >= 1 && GetAsyncKeyState(VK_CONTROL) < 0) {
|
||||
// Set adventure settings here!
|
||||
AdventureSettingsPacket p(level->adventureSettings);
|
||||
p.toggle((AdventureSettingsPacket::Flags)(1 << slot));
|
||||
p.fillIn(level->adventureSettings);
|
||||
raknetInstance->send(p);
|
||||
}
|
||||
if (digit == 0) {
|
||||
Pos pos((int)player->x, (int)player->y-1, (int)player->z);
|
||||
SetSpawnPositionPacket p(pos);
|
||||
raknetInstance->send(p);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_LEFT_CTRL) {
|
||||
@@ -732,13 +730,28 @@ void Minecraft::tickInput() {
|
||||
if (key == Keyboard::KEY_F3) {
|
||||
options.toggle(OPTIONS_RENDER_DEBUG);
|
||||
}
|
||||
|
||||
// TODO: replace it with client /give command :face_vomiting:
|
||||
if (key == Keyboard::KEY_F4) {
|
||||
player->inventory->add(new ItemInstance(Tile::redBrick));
|
||||
player->inventory->add(new ItemInstance(Item::ironIngot, 64));
|
||||
player->inventory->add(new ItemInstance(Item::ironIngot, 34));
|
||||
player->inventory->add(new ItemInstance(Tile::stonecutterBench));
|
||||
player->inventory->add(new ItemInstance(Tile::workBench));
|
||||
player->inventory->add(new ItemInstance(Tile::furnace));
|
||||
player->inventory->add(new ItemInstance(Tile::wood, 54));
|
||||
player->inventory->add(new ItemInstance(Item::stick, 14));
|
||||
player->inventory->add(new ItemInstance(Item::coal, 31));
|
||||
player->inventory->add(new ItemInstance(Tile::sand, 6));
|
||||
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_F5) {
|
||||
options.toggle(OPTIONS_THIRD_PERSON_VIEW);
|
||||
/*
|
||||
ImprovedNoise noise;
|
||||
for (int i = 0; i < 16; ++i)
|
||||
printf("%d\t%f\n", i, noise.grad2(i, 3, 8));
|
||||
printf("%d\t%f\n", i, noise.grad2(i, 3, 8));
|
||||
*/
|
||||
}
|
||||
|
||||
@@ -750,129 +763,119 @@ void Minecraft::tickInput() {
|
||||
int dst = options.getIntValue(OPTIONS_VIEW_DISTANCE);
|
||||
options.set(OPTIONS_VIEW_DISTANCE, (dst + 1) % 4);
|
||||
}
|
||||
|
||||
#ifdef CHEATS
|
||||
if (key == Keyboard::KEY_U) {
|
||||
onGraphicsReset();
|
||||
player->heal(100);
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_B || key == 108) // Toggle the game mode
|
||||
setIsCreativeMode(!isCreativeMode());
|
||||
|
||||
if (key == Keyboard::KEY_P) // Step forward in time
|
||||
level->setTime( level->getTime() + 1000);
|
||||
|
||||
if (key == Keyboard::KEY_G) {
|
||||
setScreen(new ArmorScreen());
|
||||
/*
|
||||
std::vector<AABB>& boxs = level->getCubes(NULL, AABB(128.1f, 73, 128.1f, 128.9f, 74.9f, 128.9f));
|
||||
LOGI("boxes: %d\n", (int)boxs.size());
|
||||
*/
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_Y) {
|
||||
textures->reloadAll();
|
||||
player->hurtTo(2);
|
||||
}
|
||||
if (key == Keyboard::KEY_Z || key == 108) {
|
||||
for (int i = 0; i < 1; ++i) {
|
||||
Mob* mob = NULL;
|
||||
int forceId = 0;//MobTypes::Sheep;
|
||||
|
||||
int types[] = {
|
||||
MobTypes::Sheep,
|
||||
MobTypes::Pig,
|
||||
MobTypes::Chicken,
|
||||
MobTypes::Cow,
|
||||
};
|
||||
|
||||
int mobType = (forceId > 0)? forceId : types[Mth::random(sizeof(types) / sizeof(int))];
|
||||
mob = MobFactory::CreateMob(mobType, level);
|
||||
|
||||
//((Animal*)mob)->setAge(-1000);
|
||||
float dx = 4 - 8 * Mth::random() + 4 * Mth::sin(Mth::DEGRAD * player->yRot);
|
||||
float dz = 4 - 8 * Mth::random() + 4 * Mth::cos(Mth::DEGRAD * player->yRot);
|
||||
if (mob && !MobSpawner::addMob(level, mob, player->x + dx, player->y, player->z + dz, Mth::random()*360, 0, true))
|
||||
delete mob;
|
||||
#ifdef CHEATS
|
||||
if (key == Keyboard::KEY_U) {
|
||||
onGraphicsReset();
|
||||
player->heal(100);
|
||||
}
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_X) {
|
||||
const EntityList& entities = level->getAllEntities();
|
||||
for (int i = entities.size()-1; i >= 0; --i) {
|
||||
Entity* e = entities[i];
|
||||
if (!e->isPlayer())
|
||||
level->removeEntity(e);
|
||||
if (key == Keyboard::KEY_B || key == 108) // Toggle the game mode
|
||||
setIsCreativeMode(!isCreativeMode());
|
||||
|
||||
if (key == Keyboard::KEY_P) // Step forward in time
|
||||
level->setTime( level->getTime() + 1000);
|
||||
|
||||
if (key == Keyboard::KEY_G) {
|
||||
setScreen(new ArmorScreen());
|
||||
/*
|
||||
std::vector<AABB>& boxs = level->getCubes(NULL, AABB(128.1f, 73, 128.1f, 128.9f, 74.9f, 128.9f));
|
||||
LOGI("boxes: %d\n", (int)boxs.size());
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_C /*|| key == 4*/) {
|
||||
player->inventory->clearInventoryWithDefault();
|
||||
// @todo: Add saving here for benchmarking
|
||||
}
|
||||
if (key == Keyboard::KEY_H) {
|
||||
setScreen( new PrerenderTilesScreen() );
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_O) {
|
||||
for (int i = Inventory::MAX_SELECTION_SIZE; i < player->inventory->getContainerSize(); ++i)
|
||||
if (player->inventory->getItem(i))
|
||||
player->inventory->dropSlot(i, false);
|
||||
}
|
||||
if (key == Keyboard::KEY_M) {
|
||||
Difficulty difficulty = (Difficulty)options.getIntValue(OPTIONS_DIFFICULTY);
|
||||
options.set(OPTIONS_DIFFICULTY, (difficulty == Difficulty::PEACEFUL)?
|
||||
Difficulty::NORMAL : Difficulty::PEACEFUL);
|
||||
//setIsCreativeMode( !isCreativeMode() );
|
||||
}
|
||||
|
||||
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||
if (key >= '0' && key <= '9') {
|
||||
_perfRenderer->debugFpsMeterKeyPress(key - '0');
|
||||
if (key == Keyboard::KEY_Y) {
|
||||
textures->reloadAll();
|
||||
player->hurtTo(2);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (key == Keyboard::KEY_Z || key == 108) {
|
||||
for (int i = 0; i < 1; ++i) {
|
||||
Mob* mob = NULL;
|
||||
int forceId = 0;//MobTypes::Sheep;
|
||||
|
||||
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||
if (key >= '0' && key <= '9') {
|
||||
_perfRenderer->debugFpsMeterKeyPress(key - '0');
|
||||
int types[] = {
|
||||
MobTypes::Sheep,
|
||||
MobTypes::Pig,
|
||||
MobTypes::Chicken,
|
||||
MobTypes::Cow,
|
||||
};
|
||||
|
||||
int mobType = (forceId > 0)? forceId : types[Mth::random(sizeof(types) / sizeof(int))];
|
||||
mob = MobFactory::CreateMob(mobType, level);
|
||||
|
||||
//((Animal*)mob)->setAge(-1000);
|
||||
float dx = 4 - 8 * Mth::random() + 4 * Mth::sin(Mth::DEGRAD * player->yRot);
|
||||
float dz = 4 - 8 * Mth::random() + 4 * Mth::cos(Mth::DEGRAD * player->yRot);
|
||||
if (mob && !MobSpawner::addMob(level, mob, player->x + dx, player->y, player->z + dz, Mth::random()*360, 0, true))
|
||||
delete mob;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_X) {
|
||||
const EntityList& entities = level->getAllEntities();
|
||||
for (int i = entities.size()-1; i >= 0; --i) {
|
||||
Entity* e = entities[i];
|
||||
if (!e->isPlayer())
|
||||
level->removeEntity(e);
|
||||
}
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_C /*|| key == 4*/) {
|
||||
player->inventory->clearInventoryWithDefault();
|
||||
// @todo: Add saving here for benchmarking
|
||||
}
|
||||
if (key == Keyboard::KEY_H) {
|
||||
setScreen( new PrerenderTilesScreen() );
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_O) {
|
||||
for (int i = Inventory::MAX_SELECTION_SIZE; i < player->inventory->getContainerSize(); ++i)
|
||||
if (player->inventory->getItem(i))
|
||||
player->inventory->dropSlot(i, false);
|
||||
}
|
||||
if (key == Keyboard::KEY_M) {
|
||||
Difficulty difficulty = (Difficulty)options.getIntValue(OPTIONS_DIFFICULTY);
|
||||
options.set(OPTIONS_DIFFICULTY, (difficulty == Difficulty::PEACEFUL)?
|
||||
Difficulty::NORMAL : Difficulty::PEACEFUL);
|
||||
//setIsCreativeMode( !isCreativeMode() );
|
||||
}
|
||||
|
||||
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||
if (key >= '0' && key <= '9') {
|
||||
_perfRenderer->debugFpsMeterKeyPress(key - '0');
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (key == Keyboard::KEY_ESCAPE)
|
||||
pauseGame(false);
|
||||
|
||||
#ifdef PLATFORM_DESKTOP
|
||||
if (key == Keyboard::KEY_P) {
|
||||
static bool isWireFrame = false;
|
||||
isWireFrame = !isWireFrame;
|
||||
glPolygonMode(GL_FRONT, isWireFrame? GL_LINE : GL_FILL);
|
||||
//glPolygonMode(GL_BACK, isWireFrame? GL_LINE : GL_FILL);
|
||||
#ifndef OPENGL_ES
|
||||
if (key == Keyboard::KEY_P) {
|
||||
static bool isWireFrame = false;
|
||||
isWireFrame = !isWireFrame;
|
||||
glPolygonMode(GL_FRONT, isWireFrame? GL_LINE : GL_FILL);
|
||||
//glPolygonMode(GL_BACK, isWireFrame? GL_LINE : GL_FILL);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#ifdef WIN32
|
||||
if (key == Keyboard::KEY_M) {
|
||||
for (int i = 0; i < 5 * SharedConstants::TicksPerSecond; ++i)
|
||||
level->tick();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#ifdef WIN32
|
||||
if (key == Keyboard::KEY_M) {
|
||||
for (int i = 0; i < 5 * SharedConstants::TicksPerSecond; ++i)
|
||||
level->tick();
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
TIMER_POP_PUSH("handlemouse");
|
||||
|
||||
|
||||
static bool prevMouseDownLeft = false;
|
||||
|
||||
if (!useTouchscreen()) {
|
||||
if (Mouse::getButtonState(MouseAction::ACTION_LEFT) == 0) {
|
||||
gameMode->stopDestroyBlock();
|
||||
}
|
||||
if (Mouse::getButtonState(MouseAction::ACTION_LEFT) == 0) {
|
||||
gameMode->stopDestroyBlock();
|
||||
}
|
||||
|
||||
if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) {
|
||||
gameMode->releaseUsingItem(player);
|
||||
}
|
||||
if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) {
|
||||
gameMode->releaseUsingItem(player);
|
||||
}
|
||||
|
||||
if (useTouchscreen()) {
|
||||
@@ -883,9 +886,6 @@ void Minecraft::tickInput() {
|
||||
handleBuildAction(&bai);
|
||||
} else {
|
||||
gameMode->stopDestroyBlock();
|
||||
if (player && player->isUsingItem()) {
|
||||
gameMode->releaseUsingItem(player);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Desktop: left mouse = destroy/attack
|
||||
@@ -938,35 +938,35 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
|
||||
}
|
||||
if(player->isUsingItem())
|
||||
return;
|
||||
bool mayUse = true;
|
||||
bool mayUse = true;
|
||||
|
||||
if (!hitResult.isHit()) {
|
||||
if (action->isRemove() && !gameMode->isCreativeType()) {
|
||||
missTime = 10;
|
||||
}
|
||||
} else if (hitResult.type == ENTITY) {
|
||||
if (action->isAttack()) {
|
||||
} else if (hitResult.type == ENTITY) {
|
||||
if (action->isAttack()) {
|
||||
player->swing();
|
||||
//LOGI("attacking!\n");
|
||||
InteractPacket packet(InteractPacket::Attack, player->entityId, hitResult.entity->entityId);
|
||||
raknetInstance->send(packet);
|
||||
gameMode->attack(player, hitResult.entity);
|
||||
gameMode->attack(player, hitResult.entity);
|
||||
} else if (action->isInteract()) {
|
||||
if (hitResult.entity->interactPreventDefault())
|
||||
mayUse = false;
|
||||
//LOGI("interacting!\n");
|
||||
InteractPacket packet(InteractPacket::Interact, player->entityId, hitResult.entity->entityId);
|
||||
raknetInstance->send(packet);
|
||||
gameMode->interact(player, hitResult.entity);
|
||||
}
|
||||
} else if (hitResult.type == TILE) {
|
||||
gameMode->interact(player, hitResult.entity);
|
||||
}
|
||||
} else if (hitResult.type == TILE) {
|
||||
int x = hitResult.x;
|
||||
int y = hitResult.y;
|
||||
int z = hitResult.z;
|
||||
int face = hitResult.f;
|
||||
int y = hitResult.y;
|
||||
int z = hitResult.z;
|
||||
int face = hitResult.f;
|
||||
|
||||
int oldTileId = level->getTile(x, y, z);
|
||||
Tile* oldTile = Tile::tiles[oldTileId];
|
||||
Tile* oldTile = Tile::tiles[oldTileId];
|
||||
|
||||
//bool tryDestroyBlock = false;
|
||||
|
||||
@@ -975,8 +975,8 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
|
||||
return;
|
||||
|
||||
//LOGI("tile: %s - %d, %d, %d. b: %f - %f\n", oldTile->getDescriptionId().c_str(), x, y, z, oldTile->getBrightness(level, x, y, z), oldTile->getBrightness(level, x, y+1, z));
|
||||
level->extinguishFire(x, y, z, hitResult.f);
|
||||
|
||||
level->extinguishFire(x, y, z, hitResult.f);
|
||||
|
||||
if (action->isFirstRemove()) {
|
||||
gameMode->startDestroyBlock(x, y, z, hitResult.f);
|
||||
} else {
|
||||
@@ -985,16 +985,16 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
|
||||
|
||||
particleEngine->crack(x, y, z, hitResult.f);
|
||||
player->swing();
|
||||
}
|
||||
}
|
||||
else {
|
||||
ItemInstance* item = player->inventory->getSelected();
|
||||
if (gameMode->useItemOn(player, level, item, x, y, z, face, hitResult.pos)) {
|
||||
mayUse = false;
|
||||
player->swing();
|
||||
#ifdef RPI
|
||||
} else if (item && item->id == ((Item*)Item::sword_iron)->id) {
|
||||
player->swing();
|
||||
#endif
|
||||
if (gameMode->useItemOn(player, level, item, x, y, z, face, hitResult.pos)) {
|
||||
mayUse = false;
|
||||
player->swing();
|
||||
#ifdef RPI
|
||||
} else if (item && item->id == ((Item*)Item::sword_iron)->id) {
|
||||
player->swing();
|
||||
#endif
|
||||
}
|
||||
if (item && item->count <= 0) {
|
||||
player->inventory->clearSlot(player->inventory->selected);
|
||||
@@ -1020,7 +1020,7 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
|
||||
|
||||
bool Minecraft::isOnlineClient()
|
||||
{
|
||||
return (level != NULL && level->isClientSide);
|
||||
return (level != NULL && level->isClientSide);
|
||||
}
|
||||
|
||||
bool Minecraft::isOnline()
|
||||
@@ -1087,8 +1087,8 @@ void Minecraft::setScreen( Screen* screen )
|
||||
|
||||
if (screen->isInGameScreen() && level) {
|
||||
level->saveLevelData();
|
||||
level->saveGame();
|
||||
}
|
||||
level->saveGame();
|
||||
}
|
||||
|
||||
//noRender = false;
|
||||
} else {
|
||||
@@ -1124,9 +1124,7 @@ void Minecraft::releaseMouse()
|
||||
}
|
||||
|
||||
bool Minecraft::useTouchscreen() {
|
||||
#if defined(TARGET_OS_IPHONE)
|
||||
return true;
|
||||
#elif defined(RPI)
|
||||
#ifdef RPI
|
||||
return false;
|
||||
#endif
|
||||
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen;
|
||||
@@ -1146,38 +1144,12 @@ void Minecraft::init()
|
||||
textures = new Textures(&options, platform());
|
||||
textures->addDynamicTexture(new WaterTexture());
|
||||
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);
|
||||
|
||||
levelRenderer = new LevelRenderer(this);
|
||||
gameRenderer = new GameRenderer(this);
|
||||
particleEngine = new ParticleEngine(level, textures);
|
||||
|
||||
// 4j's code for reference
|
||||
// FoliageColor::init(textures->loadTexturePixels(L"misc/foliagecolor.png"));
|
||||
|
||||
|
||||
// my code
|
||||
TextureId foliageId = (textures->loadTexture("misc/foliagecolor.png")); // loading the uh png for foliage color
|
||||
int* foliagePixels = textures->loadTexturePixels(foliageId, "misc/foliagecolor.png");
|
||||
// now i can finally initialize foliage color, probably not the best way to handle this but i cant be arsed rn
|
||||
FoliageColor::init(foliagePixels);
|
||||
|
||||
TextureId grassId = (textures->loadTexture("misc/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
|
||||
font = new Font(&options, "font/default8.png", textures);
|
||||
|
||||
@@ -1194,82 +1166,59 @@ void Minecraft::init()
|
||||
|
||||
void Minecraft::setSize(int w, int h) {
|
||||
#ifndef STANDALONE_SERVER
|
||||
transformResolution(&w, &h);
|
||||
transformResolution(&w, &h);
|
||||
|
||||
width = w;
|
||||
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;
|
||||
|
||||
int guiScale = options.getIntValue(OPTIONS_GUI_SCALE);
|
||||
|
||||
// determine gui scale, optionally overriding auto
|
||||
if (guiScale != 0) {
|
||||
// manual selection: 1->small, 2->medium, 3->large, 4->larger, 5->largest
|
||||
switch (guiScale) {
|
||||
case 1: Gui::GuiScale = 2.0f; break;
|
||||
case 2: Gui::GuiScale = 3.0f; break;
|
||||
case 3: Gui::GuiScale = 4.0f; break;
|
||||
case 4: Gui::GuiScale = 5.0f; break;
|
||||
case 5: Gui::GuiScale = 6.0f; break;
|
||||
default: Gui::GuiScale = 1.0f; break; // auto
|
||||
}
|
||||
|
||||
// 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);
|
||||
|
||||
// determine gui scale, optionally overriding auto
|
||||
if (guiScale != 0) {
|
||||
// manual selection: 1->small, 2->medium, 3->large, 4->larger, 5->largest
|
||||
switch (guiScale) {
|
||||
case 1: Gui::GuiScale = 2.0f; break;
|
||||
case 2: Gui::GuiScale = 3.0f; break;
|
||||
case 3: Gui::GuiScale = 4.0f; break;
|
||||
case 4: Gui::GuiScale = 5.0f; break;
|
||||
case 5: Gui::GuiScale = 6.0f; break;
|
||||
default: Gui::GuiScale = 1.0f; break; // auto
|
||||
}
|
||||
} else {
|
||||
// auto compute from resolution
|
||||
if (width >= 1000) {
|
||||
// auto compute from resolution
|
||||
if (width >= 1000) {
|
||||
#ifdef __APPLE__
|
||||
Gui::GuiScale = (width > 2000)? 8.0f : 4.0f;
|
||||
#else
|
||||
Gui::GuiScale = 4.0f;
|
||||
#endif
|
||||
}
|
||||
else if (width >= 800) {
|
||||
#ifdef __APPLE__
|
||||
Gui::GuiScale = (width > 2000)? 8.0f : 4.0f;
|
||||
Gui::GuiScale = 4.0f;
|
||||
#else
|
||||
Gui::GuiScale = 4.0f;
|
||||
Gui::GuiScale = 3.0f;
|
||||
#endif
|
||||
}
|
||||
else if (width >= 800) {
|
||||
#ifdef __APPLE__
|
||||
Gui::GuiScale = 4.0f;
|
||||
#else
|
||||
Gui::GuiScale = 3.0f;
|
||||
#endif
|
||||
}
|
||||
else if (width >= 400)
|
||||
Gui::GuiScale = 2.0f;
|
||||
else
|
||||
Gui::GuiScale = 1.0f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// if (platform()) {
|
||||
// float pixelsPerMillimeter = options.getProgressValue(&Option::PIXELS_PER_MILLIMETER);
|
||||
// pixelCalc.setPixelsPerMillimeter(pixelsPerMillimeter);
|
||||
// pixelCalcUi.setPixelsPerMillimeter(pixelsPerMillimeter * Gui::InvGuiScale);
|
||||
// }
|
||||
|
||||
}
|
||||
else if (width >= 400)
|
||||
Gui::GuiScale = 2.0f;
|
||||
else
|
||||
Gui::GuiScale = 1.0f;
|
||||
}
|
||||
|
||||
|
||||
Gui::InvGuiScale = 1.0f / Gui::GuiScale;
|
||||
screenWidth = (int)(width * Gui::InvGuiScale);
|
||||
screenHeight = (int)(height * Gui::InvGuiScale);
|
||||
int screenWidth = (int)(width * Gui::InvGuiScale);
|
||||
int screenHeight = (int)(height * Gui::InvGuiScale);
|
||||
|
||||
// if (platform()) {
|
||||
// float pixelsPerMillimeter = options.getProgressValue(&Options::Option::PIXELS_PER_MILLIMETER);
|
||||
// pixelCalc.setPixelsPerMillimeter(pixelsPerMillimeter);
|
||||
// pixelCalcUi.setPixelsPerMillimeter(pixelsPerMillimeter * Gui::InvGuiScale);
|
||||
// }
|
||||
|
||||
Config config = createConfig(this);
|
||||
gui.onConfigChanged(config);
|
||||
|
||||
|
||||
if (screen)
|
||||
screen->setSize(screenWidth, screenHeight);
|
||||
|
||||
@@ -1298,9 +1247,9 @@ void Minecraft::reloadOptions() {
|
||||
|
||||
LOGI("Reloading-options\n");
|
||||
|
||||
// @todo @fix Android and iOS behaves a bit differently when leaving
|
||||
// an options screen (Android recreates OpenGL surface)
|
||||
setSize(width, height);
|
||||
// @todo @fix Android and iOS behaves a bit differently when leaving
|
||||
// an options screen (Android recreates OpenGL surface)
|
||||
setSize(width, height);
|
||||
}
|
||||
|
||||
void Minecraft::_reloadInput() {
|
||||
@@ -1311,17 +1260,17 @@ void Minecraft::_reloadInput() {
|
||||
if (useTouchHolder) {
|
||||
inputHolder = new TouchInputHolder(this, &options);
|
||||
} else {
|
||||
#if defined(ANDROID) || defined(__APPLE__)
|
||||
inputHolder = new CustomInputHolder(
|
||||
new XperiaPlayInput(&options),
|
||||
new ControllerTurnInput(2, ControllerTurnInput::MODE_DELTA),
|
||||
new IBuildInput());
|
||||
#else
|
||||
inputHolder = new CustomInputHolder(
|
||||
new KeyboardInput(&options),
|
||||
new MouseTurnInput(MouseTurnInput::MODE_DELTA, width/2, height/2),
|
||||
new MouseBuildInput());
|
||||
#endif
|
||||
#if defined(ANDROID) || defined(__APPLE__)
|
||||
inputHolder = new CustomInputHolder(
|
||||
new XperiaPlayInput(&options),
|
||||
new ControllerTurnInput(2, ControllerTurnInput::MODE_DELTA),
|
||||
new IBuildInput());
|
||||
#else
|
||||
inputHolder = new CustomInputHolder(
|
||||
new KeyboardInput(&options),
|
||||
new MouseTurnInput(MouseTurnInput::MODE_DELTA, width/2, height/2),
|
||||
new MouseBuildInput());
|
||||
#endif
|
||||
}
|
||||
|
||||
mouseHandler.setTurnInput(inputHolder->getTurnInput());
|
||||
@@ -1364,7 +1313,7 @@ bool Minecraft::joinMultiplayerFromString( const std::string& server )
|
||||
{
|
||||
std::string ip = "";
|
||||
std::string port = "19132";
|
||||
|
||||
|
||||
size_t pos = server.find(":");
|
||||
|
||||
if (pos != std::string::npos) {
|
||||
@@ -1375,7 +1324,7 @@ bool Minecraft::joinMultiplayerFromString( const std::string& server )
|
||||
}
|
||||
|
||||
printf("%s \n", port.c_str());
|
||||
|
||||
|
||||
if (isLookingForMultiplayer && netCallback) {
|
||||
isLookingForMultiplayer = false;
|
||||
printf("test");
|
||||
@@ -1386,18 +1335,18 @@ bool Minecraft::joinMultiplayerFromString( const std::string& server )
|
||||
}
|
||||
|
||||
void Minecraft::hostMultiplayer(int port) {
|
||||
// Tear down last instance
|
||||
raknetInstance->disconnect();
|
||||
delete netCallback;
|
||||
netCallback = NULL;
|
||||
// Tear down last instance
|
||||
raknetInstance->disconnect();
|
||||
delete netCallback;
|
||||
netCallback = NULL;
|
||||
|
||||
#if !defined(NO_NETWORK)
|
||||
netCallback = new ServerSideNetworkHandler(this, raknetInstance);
|
||||
#ifdef STANDALONE_SERVER
|
||||
raknetInstance->host("Server", port, 16);
|
||||
#else
|
||||
raknetInstance->host(options.getStringValue(OPTIONS_USERNAME), port);
|
||||
#endif
|
||||
#ifdef STANDALONE_SERVER
|
||||
raknetInstance->host("Server", port, 16);
|
||||
#else
|
||||
raknetInstance->host(options.getStringValue(OPTIONS_USERNAME), port);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1451,12 +1400,6 @@ void Minecraft::_levelGenerated()
|
||||
player->resetPos(false);
|
||||
}
|
||||
|
||||
if (level && level->dimension) {
|
||||
|
||||
level->dimension->FogType = options.getIntValue(OPTIONS_FOG_TYPE);
|
||||
}
|
||||
|
||||
|
||||
this->cameraTargetPlayer = player;
|
||||
|
||||
std::string serverName = options.getStringValue(OPTIONS_USERNAME) + " - " + level->getLevelData()->levelName;
|
||||
@@ -1482,34 +1425,6 @@ void Minecraft::_levelGenerated()
|
||||
_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) {
|
||||
for (unsigned int i = 0; i < level->players.size(); ++i) {
|
||||
if (level->players[i]->entityId == playerId) {
|
||||
@@ -1557,7 +1472,7 @@ void Minecraft::onGraphicsReset()
|
||||
{
|
||||
#ifndef STANDALONE_SERVER
|
||||
textures->clear();
|
||||
|
||||
|
||||
font->onGraphicsReset();
|
||||
gui.onGraphicsReset();
|
||||
|
||||
@@ -1596,12 +1511,12 @@ LevelStorageSource* Minecraft::getLevelSource()
|
||||
|
||||
void Minecraft::audioEngineOn() {
|
||||
#ifndef STANDALONE_SERVER
|
||||
soundEngine->enable(true);
|
||||
soundEngine->enable(true);
|
||||
#endif
|
||||
}
|
||||
void Minecraft::audioEngineOff() {
|
||||
#ifndef STANDALONE_SERVER
|
||||
soundEngine->enable(false);
|
||||
soundEngine->enable(false);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1672,17 +1587,25 @@ void Minecraft::optionUpdated(OptionId option, bool value ) {
|
||||
}
|
||||
|
||||
void Minecraft::optionUpdated(OptionId option, float value ) {
|
||||
// #ifndef STANDALONE_SERVER
|
||||
// if(option == OPTIONS_PIXELS_PER_MILLIMETER) {
|
||||
// pixelCalcUi.setPixelsPerMillimeter(value * Gui::InvGuiScale);
|
||||
// pixelCalc.setPixelsPerMillimeter(value);
|
||||
// }
|
||||
// #endif
|
||||
// #ifndef STANDALONE_SERVER
|
||||
// if(option == OPTIONS_PIXELS_PER_MILLIMETER) {
|
||||
// pixelCalcUi.setPixelsPerMillimeter(value * Gui::InvGuiScale);
|
||||
// pixelCalc.setPixelsPerMillimeter(value);
|
||||
// }
|
||||
// #endif
|
||||
}
|
||||
|
||||
void Minecraft::optionUpdated(OptionId option, int value ) {
|
||||
if(option == OPTIONS_GUI_SCALE) {
|
||||
// reapply screen scaling using current window size
|
||||
setSize(width, height);
|
||||
}
|
||||
if(option == OPTIONS_GUI_SCALE) {
|
||||
// reapply screen scaling using current window size
|
||||
setSize(width, height);
|
||||
}
|
||||
}
|
||||
|
||||
void Minecraft::addMessage(const std::string& msg) {
|
||||
#ifndef STANDALONE_SERVER
|
||||
gui.addMessage(msg);
|
||||
#else
|
||||
LOGI("%s", msg.c_str());
|
||||
#endif
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
#define NET_MINECRAFT_CLIENT__Minecraft_H__
|
||||
|
||||
#include "Options.h"
|
||||
#include "commands/CommandManager.hpp"
|
||||
#ifndef STANDALONE_SERVER
|
||||
#include "MouseHandler.h"
|
||||
#include "gui/Gui.h"
|
||||
@@ -87,14 +88,6 @@ public:
|
||||
|
||||
void update();
|
||||
|
||||
std::string gatherStats1();
|
||||
|
||||
std::string gatherStats2();
|
||||
|
||||
std::string gatherStats4();
|
||||
|
||||
std::string gatherStats3();
|
||||
|
||||
void tick(int nTick, int maxTick);
|
||||
void tickInput();
|
||||
|
||||
@@ -128,11 +121,17 @@ public:
|
||||
void optionUpdated(OptionId option, bool value);
|
||||
void optionUpdated(OptionId option, float value);
|
||||
void optionUpdated(OptionId option, int value);
|
||||
|
||||
int getTicks() { return ticks; }
|
||||
|
||||
void addMessage(const std::string& msg);
|
||||
#ifdef __APPLE__
|
||||
bool _isSuperFast;
|
||||
bool isSuperFast() { return _isSuperFast; }
|
||||
#endif
|
||||
|
||||
CommandManager& commandManager() { return m_commandManager; }
|
||||
|
||||
protected:
|
||||
void _levelGenerated();
|
||||
|
||||
@@ -205,7 +204,8 @@ public:
|
||||
std::string externalCacheStoragePath;
|
||||
protected:
|
||||
Timer timer;
|
||||
// @note @attn @warn: this is dangerous as fuck!
|
||||
|
||||
// @note @attn @warn: this is dangerous as fuck!
|
||||
volatile bool isGeneratingLevel;
|
||||
bool _hasSignaledGeneratingLevelFinished;
|
||||
|
||||
@@ -229,10 +229,11 @@ private:
|
||||
bool _isCreativeMode;
|
||||
//int _respawnPlayerTicks;
|
||||
Player* _pendingRemovePlayer; // @attn @todo @fix: remove this shait and fix the respawn behaviour
|
||||
// shit* lmao
|
||||
|
||||
PerfRenderer* _perfRenderer;
|
||||
CommandServer* _commandServer;
|
||||
|
||||
CommandManager m_commandManager;
|
||||
};
|
||||
|
||||
#endif /*NET_MINECRAFT_CLIENT__Minecraft_H__*/
|
||||
|
||||
@@ -104,4 +104,4 @@ public:
|
||||
|
||||
private:
|
||||
std::string m_value;
|
||||
};
|
||||
};
|
||||
@@ -54,38 +54,12 @@ OptionBool limitFramerate("limitFramerate", false);
|
||||
OptionBool vsync("vsync", true);
|
||||
OptionBool fancyGraphics("fancyGraphics", true);
|
||||
OptionBool viewBobbing("viewBobbing", true);
|
||||
OptionBool ambientOcclusion("ao", true);
|
||||
|
||||
OptionBool useNormalLighting("normalLighting", true);
|
||||
|
||||
OptionBool beautifulSky("beautifulSky", true);
|
||||
|
||||
OptionBool useVignette("useVignette", true);
|
||||
OptionBool ambientOcclusion("ao", false);
|
||||
|
||||
OptionBool useTouchscreen("useTouchscreen", 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 keyLeft("key.left", Keyboard::KEY_A);
|
||||
OptionInt keyBack("key.back", Keyboard::KEY_S);
|
||||
@@ -138,7 +112,6 @@ void Options::initTable() {
|
||||
|
||||
|
||||
m_options[OPTIONS_GUI_SCALE] = &guiScale;
|
||||
m_options[OPTIONS_WINDOW_SCALE] = &windowScale;
|
||||
|
||||
m_options[OPTIONS_SKIN] = &skin;
|
||||
m_options[OPTIONS_USERNAME] = &username;
|
||||
@@ -163,20 +136,8 @@ void Options::initTable() {
|
||||
|
||||
m_options[OPTIONS_USE_TOUCHSCREEN] = &useTouchscreen;
|
||||
|
||||
m_options[OPTIONS_BLOCK_OUTLINE] = &blockOutline;
|
||||
|
||||
m_options[OPTIONS_VIGNETTE] = &useVignette;
|
||||
|
||||
m_options[OPTIONS_BEAUTIFUL_SKY] = &beautifulSky;
|
||||
|
||||
m_options[OPTIONS_NORMAL_LIGHTING] = &useNormalLighting;
|
||||
|
||||
m_options[OPTIONS_RESTORED_ANIMS] = &restoredAnims;
|
||||
|
||||
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
|
||||
|
||||
m_options[OPTIONS_MENU_STYLE] = &menuStyle;
|
||||
|
||||
m_options[OPTIONS_KEY_FORWARD] = &keyForward;
|
||||
m_options[OPTIONS_KEY_LEFT] = &keyLeft;
|
||||
m_options[OPTIONS_KEY_BACK] = &keyBack;
|
||||
@@ -199,18 +160,6 @@ void Options::initTable() {
|
||||
m_options[OPTIONS_BAR_ON_TOP] = &barOnTop;
|
||||
m_options[OPTIONS_ALLOW_SPRINT] = &allowSprint;
|
||||
m_options[OPTIONS_RPI_CURSOR] = &rpiCursor;
|
||||
m_options[OPTIONS_FOLIAGE_TINT] = &foliageTint;
|
||||
|
||||
// more options yay
|
||||
m_options[OPTIONS_FOG_TYPE] = &fogType;
|
||||
|
||||
m_options[OPTIONS_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_LAST_IP] = &lastIp;
|
||||
|
||||
@@ -37,7 +37,6 @@ enum OptionId {
|
||||
OPTIONS_BAR_ON_TOP,
|
||||
OPTIONS_ALLOW_SPRINT,
|
||||
OPTIONS_AUTOJUMP,
|
||||
OPTIONS_WINDOW_SCALE,
|
||||
|
||||
// Graphics
|
||||
OPTIONS_RENDER_DEBUG,
|
||||
@@ -50,8 +49,6 @@ enum OptionId {
|
||||
OPTIONS_LIMIT_FRAMERATE,
|
||||
OPTIONS_VSYNC,
|
||||
OPTIONS_FANCY_GRAPHICS,
|
||||
OPTIONS_NORMAL_LIGHTING,
|
||||
|
||||
|
||||
// Cheats / debug
|
||||
OPTIONS_FLY_SPEED,
|
||||
@@ -59,7 +56,6 @@ enum OptionId {
|
||||
OPTIONS_IS_FLYING,
|
||||
|
||||
// Control
|
||||
OPTIONS_BLOCK_OUTLINE,
|
||||
OPTIONS_USE_MOUSE_FOR_DIGGING,
|
||||
OPTIONS_IS_LEFT_HANDED,
|
||||
OPTIONS_IS_JOY_TOUCH_AREA,
|
||||
@@ -88,17 +84,6 @@ enum OptionId {
|
||||
OPTIONS_LAST_IP,
|
||||
|
||||
OPTIONS_RPI_CURSOR,
|
||||
OPTIONS_FOLIAGE_TINT,
|
||||
OPTIONS_FOG_TYPE,
|
||||
OPTIONS_JAVA_HUD,
|
||||
OPTIONS_RESTORED_ANIMS,
|
||||
OPTIONS_TINTED_SIDE,
|
||||
OPTIONS_BETA_SKY,
|
||||
OPTIONS_BEAUTIFUL_SKY,
|
||||
OPTIONS_VIGNETTE,
|
||||
OPTIONS_DEBUG_STYLE,
|
||||
OPTIONS_COMPLETE_LIGHTING,
|
||||
OPTIONS_MENU_STYLE,
|
||||
// Should be last!
|
||||
OPTIONS_COUNT
|
||||
};
|
||||
@@ -109,10 +94,6 @@ typedef std::vector<std::string> StringVector;
|
||||
class Options
|
||||
{
|
||||
public:
|
||||
// deepfriedwaffles: for iOS, was getting compile errors saying: No member named 'sound' in 'Options' and No member named 'music' in 'Options' so I floated them here. 1.0f means full volume out of the box, but if everything is too loud, you might want to try adjusting this
|
||||
float sound = 1.0f;
|
||||
float music = 1.0f;
|
||||
|
||||
static bool debugGl;
|
||||
|
||||
Options(Minecraft* minecraft, const std::string& workingDirectory = "")
|
||||
|
||||
@@ -68,6 +68,7 @@ bool SurvivalMode::destroyBlock( int x, int y, int z, int face ) {
|
||||
minecraft->player->inventory->clearSlot(minecraft->player->inventory->selected);
|
||||
}
|
||||
}
|
||||
|
||||
if (changed && couldDestroy) {
|
||||
ItemInstance instance(t, 1, data);
|
||||
Tile::tiles[t]->playerDestroy(minecraft->level, minecraft->player, x, y, z, data);
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#include "screens/ConsoleScreen.h"
|
||||
#include "../Minecraft.h"
|
||||
#include "../player/LocalPlayer.h"
|
||||
#include "../renderer/Chunk.h"
|
||||
#include "../renderer/Tesselator.h"
|
||||
#include "../renderer/TileRenderer.h"
|
||||
#include "../renderer/LevelRenderer.h"
|
||||
@@ -37,7 +36,7 @@ const float Gui::DropTicks = 40.0f;
|
||||
//#include <android/log.h>
|
||||
|
||||
Gui::Gui(Minecraft* minecraft)
|
||||
: minecraft(minecraft),
|
||||
: minecraft(minecraft),
|
||||
tickCount(0),
|
||||
progress(0),
|
||||
overlayMessageTime(0),
|
||||
@@ -78,7 +77,7 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
||||
Font* font = minecraft->font;
|
||||
|
||||
const bool isTouchInterface = minecraft->useTouchscreen();
|
||||
|
||||
|
||||
const int screenWidth = (int)(minecraft->width * InvGuiScale);
|
||||
const int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||
blitOffset = -90;
|
||||
@@ -87,9 +86,9 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
|
||||
// H: 4
|
||||
// T: 7
|
||||
// L: 6
|
||||
// F: 3
|
||||
// T: 7
|
||||
// L: 6
|
||||
// F: 3
|
||||
int ySlot = screenHeight - 16 - 3;
|
||||
|
||||
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
|
||||
@@ -104,12 +103,6 @@ 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) {
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
@@ -120,41 +113,38 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
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);
|
||||
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
|
||||
unsigned int max = 10;
|
||||
if (isChatting) {
|
||||
int lineHeight = 9;
|
||||
max = (screenHeight - 48) / lineHeight;
|
||||
if (max < 1) max = 1;
|
||||
int maxScroll = (int)guiMessages.size() - (int)max;
|
||||
if (maxScroll < 0) maxScroll = 0;
|
||||
if (chatScrollOffset > maxScroll) chatScrollOffset = maxScroll;
|
||||
} else {
|
||||
chatScrollOffset = 0;
|
||||
}
|
||||
renderChatMessages(screenHeight, max, isChatting, font);
|
||||
glEnable(GL_BLEND);
|
||||
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
|
||||
unsigned int max = 10;
|
||||
if (isChatting) {
|
||||
int lineHeight = 9;
|
||||
max = (screenHeight - 48) / lineHeight;
|
||||
if (max < 1) max = 1;
|
||||
int maxScroll = (int)guiMessages.size() - (int)max;
|
||||
if (maxScroll < 0) maxScroll = 0;
|
||||
if (chatScrollOffset > maxScroll) chatScrollOffset = maxScroll;
|
||||
} else {
|
||||
chatScrollOffset = 0;
|
||||
}
|
||||
renderChatMessages(screenHeight, max, isChatting, font);
|
||||
#if !defined(RPI)
|
||||
renderOnSelectItemNameText(screenWidth, font, ySlot);
|
||||
renderOnSelectItemNameText(screenWidth, font, ySlot);
|
||||
#endif
|
||||
#if defined(RPI)
|
||||
renderDebugInfo();
|
||||
renderDebugInfo();
|
||||
#endif
|
||||
|
||||
if (Keyboard::isKeyDown(Keyboard::KEY_TAB)) {
|
||||
renderPlayerList(font, screenWidth, screenHeight);
|
||||
}
|
||||
|
||||
if (minecraft->options.getBooleanValue(OPTIONS_RENDER_DEBUG))
|
||||
renderDebugInfo();
|
||||
if (Keyboard::isKeyDown(Keyboard::KEY_TAB)) {
|
||||
renderPlayerList(font, screenWidth, screenHeight);
|
||||
}
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
if (minecraft->options.getBooleanValue(OPTIONS_RENDER_DEBUG))
|
||||
renderDebugInfo();
|
||||
}
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
glEnable2(GL_ALPHA_TEST);
|
||||
}
|
||||
|
||||
@@ -193,7 +183,7 @@ void Gui::getSlotPos(int slot, int& posX, int& posY) {
|
||||
int screenWidth = (int)(minecraft->width * InvGuiScale);
|
||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||
posX = screenWidth / 2 - getNumSlots() * 10 + slot * 20,
|
||||
posY = screenHeight - 22;
|
||||
posY = screenHeight - 22;
|
||||
}
|
||||
|
||||
RectangleArea Gui::getRectangleArea(int extendSide) {
|
||||
@@ -206,7 +196,7 @@ RectangleArea Gui::getRectangleArea(int extendSide) {
|
||||
return RectangleArea(0, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
|
||||
if (extendSide > 0)
|
||||
return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, (float)minecraft->width, (float)minecraft->height);
|
||||
|
||||
|
||||
return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
|
||||
}
|
||||
|
||||
@@ -224,59 +214,59 @@ void Gui::handleClick(int button, int x, int y) {
|
||||
}
|
||||
}
|
||||
|
||||
void Gui::handleKeyPressed(int key)
|
||||
{
|
||||
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
|
||||
if (isChatting) {
|
||||
// Allow scrolling the chat history with the mouse/keyboard when chat is open
|
||||
if (key == 38) { // VK_UP
|
||||
scrollChat(1);
|
||||
return;
|
||||
} else if (key == 40) { // VK_DOWN
|
||||
scrollChat(-1);
|
||||
return;
|
||||
} else if (key == 33) { // VK_PRIOR (Page Up)
|
||||
// Scroll by a page
|
||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||
int maxVisible = (screenHeight - 48) / 9;
|
||||
scrollChat(maxVisible);
|
||||
return;
|
||||
} else if (key == 34) { // VK_NEXT (Page Down)
|
||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||
int maxVisible = (screenHeight - 48) / 9;
|
||||
scrollChat(-maxVisible);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_F1) {
|
||||
minecraft->options.toggle(OPTIONS_HIDEGUI);
|
||||
}
|
||||
|
||||
if (key == 99)
|
||||
{
|
||||
if (minecraft->player->inventory->selected > 0)
|
||||
{
|
||||
minecraft->player->inventory->selected--;
|
||||
}
|
||||
}
|
||||
else if (key == 4)
|
||||
{
|
||||
if (minecraft->player->inventory->selected < (getNumSlots() - 2))
|
||||
{
|
||||
minecraft->player->inventory->selected++;
|
||||
}
|
||||
}
|
||||
else if (key == 100)
|
||||
{
|
||||
minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION);
|
||||
}
|
||||
else if (key == minecraft->options.getIntValue(OPTIONS_KEY_DROP))
|
||||
{
|
||||
minecraft->player->inventory->dropSlot(minecraft->player->inventory->selected, false);
|
||||
void Gui::handleKeyPressed(int key)
|
||||
{
|
||||
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
|
||||
if (isChatting) {
|
||||
// Allow scrolling the chat history with the mouse/keyboard when chat is open
|
||||
if (key == 38) { // VK_UP
|
||||
scrollChat(1);
|
||||
return;
|
||||
} else if (key == 40) { // VK_DOWN
|
||||
scrollChat(-1);
|
||||
return;
|
||||
} else if (key == 33) { // VK_PRIOR (Page Up)
|
||||
// Scroll by a page
|
||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||
int maxVisible = (screenHeight - 48) / 9;
|
||||
scrollChat(maxVisible);
|
||||
return;
|
||||
} else if (key == 34) { // VK_NEXT (Page Down)
|
||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||
int maxVisible = (screenHeight - 48) / 9;
|
||||
scrollChat(-maxVisible);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_F1) {
|
||||
minecraft->options.toggle(OPTIONS_HIDEGUI);
|
||||
}
|
||||
|
||||
if (key == 99)
|
||||
{
|
||||
if (minecraft->player->inventory->selected > 0)
|
||||
{
|
||||
minecraft->player->inventory->selected--;
|
||||
}
|
||||
}
|
||||
else if (key == 4)
|
||||
{
|
||||
if (minecraft->player->inventory->selected < (getNumSlots() - 2))
|
||||
{
|
||||
minecraft->player->inventory->selected++;
|
||||
}
|
||||
}
|
||||
else if (key == 100)
|
||||
{
|
||||
minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION);
|
||||
}
|
||||
else if (key == minecraft->options.getIntValue(OPTIONS_KEY_DROP))
|
||||
{
|
||||
minecraft->player->inventory->dropSlot(minecraft->player->inventory->selected, false);
|
||||
}
|
||||
}
|
||||
|
||||
void Gui::scrollChat(int delta) {
|
||||
if (delta == 0)
|
||||
return;
|
||||
@@ -300,11 +290,11 @@ void Gui::tick() {
|
||||
if(itemNameOverlayTime < 2)
|
||||
itemNameOverlayTime += 1.0f / SharedConstants::TicksPerSecond;
|
||||
for (unsigned int i = 0; i < guiMessages.size(); i++) {
|
||||
guiMessages.at(i).ticks++;
|
||||
guiMessages.at(i).ticks++;
|
||||
}
|
||||
|
||||
if (!minecraft->isCreativeMode())
|
||||
tickItemDrop();
|
||||
if (!minecraft->isCreativeMode())
|
||||
tickItemDrop();
|
||||
}
|
||||
|
||||
void Gui::addMessage(const std::string& _string) {
|
||||
@@ -354,8 +344,6 @@ void Gui::displayClientMessage(const std::string& messageId) {
|
||||
addMessage(messageId);
|
||||
}
|
||||
|
||||
|
||||
// @todo - shredder: Function seems to be completely fine and ported over from java beta, but renders opaque??? need to investigate
|
||||
void Gui::renderVignette(float br, int w, int h) {
|
||||
br = 1 - br;
|
||||
if (br < 0) br = 0;
|
||||
@@ -364,13 +352,9 @@ void Gui::renderVignette(float br, int w, int h) {
|
||||
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDepthMask(false);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc2(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
|
||||
glColor4f2(tbr, tbr, tbr, 1);
|
||||
|
||||
minecraft->textures->loadAndBindTexture("misc/vignette.png");
|
||||
glTexParameteri2(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri2(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
|
||||
Tesselator& t = Tesselator::instance;
|
||||
t.begin();
|
||||
@@ -381,7 +365,6 @@ void Gui::renderVignette(float br, int w, int h) {
|
||||
t.draw();
|
||||
glDepthMask(true);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDisable(GL_BLEND);
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
@@ -424,7 +407,7 @@ void Gui::inventoryUpdated() {
|
||||
}
|
||||
|
||||
void Gui::onGraphicsReset() {
|
||||
inventoryUpdated();
|
||||
inventoryUpdated();
|
||||
}
|
||||
|
||||
void Gui::texturesLoaded( Textures* textures ) {
|
||||
@@ -602,13 +585,12 @@ void Gui::renderProgressIndicator( const bool isTouchInterface, const int screen
|
||||
bool bowEquipped = currentItem != NULL ? currentItem->getItem() == Item::bow : false;
|
||||
bool itemInUse = currentItem != NULL ? currentItem->getItem() == minecraft->player->getUseItem()->getItem() : false;
|
||||
if ((!isTouchInterface || minecraft->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA)
|
||||
|| (bowEquipped && itemInUse)) && !minecraft->options.getBooleanValue(OPTIONS_HIDEGUI))
|
||||
{
|
||||
minecraft->textures->loadAndBindTexture("gui/icons.png");
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
|
||||
blit(screenWidth/2 - 8, screenHeight/2 - 8, 0, 0, 16, 16);
|
||||
glDisable(GL_BLEND);
|
||||
|| (bowEquipped && itemInUse)) && !minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
|
||||
minecraft->textures->loadAndBindTexture("gui/icons.png");
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
|
||||
blit(screenWidth/2 - 8, screenHeight/2 - 8, 0, 0, 16, 16);
|
||||
glDisable(GL_BLEND);
|
||||
} else if(!bowEquipped) {
|
||||
const float tprogress = minecraft->gameMode->destroyProgress;
|
||||
const float alpha = Mth::clamp(minecraft->inputHolder->alpha, 0.0f, 1.0f);
|
||||
@@ -627,7 +609,7 @@ void Gui::renderProgressIndicator( const bool isTouchInterface, const int screen
|
||||
const float x = InvGuiScale * minecraft->inputHolder->mousex;
|
||||
const float y = InvGuiScale * minecraft->inputHolder->mousey;
|
||||
glTranslatef2(x, y, 0);
|
||||
drawArrayVT(rcFeedbackOuter.vboId, rcFeedbackOuter.vertexCount, 36);
|
||||
drawArrayVT(rcFeedbackOuter.vboId, rcFeedbackOuter.vertexCount, 24);
|
||||
glTranslatef2(-x, -y, 0);
|
||||
|
||||
glEnable2(GL_TEXTURE_2D);
|
||||
@@ -648,12 +630,12 @@ void Gui::renderProgressIndicator( const bool isTouchInterface, const int screen
|
||||
const float y = InvGuiScale * minecraft->inputHolder->mousey;
|
||||
glPushMatrix2();
|
||||
glTranslatef2(x, y, 0);
|
||||
drawArrayVT(rcFeedbackOuter.vboId, rcFeedbackOuter.vertexCount, 36);
|
||||
drawArrayVT(rcFeedbackOuter.vboId, rcFeedbackOuter.vertexCount, 24);
|
||||
glScalef2(0.5f + progress, 0.5f + progress, 1);
|
||||
//glDisable2(GL_CULL_FACE);
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
|
||||
drawArrayVT(rcFeedbackInner.vboId, rcFeedbackInner.vertexCount, 36, GL_TRIANGLE_FAN);
|
||||
drawArrayVT(rcFeedbackInner.vboId, rcFeedbackInner.vertexCount, 24, GL_TRIANGLE_FAN);
|
||||
glPopMatrix2();
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
@@ -683,10 +665,10 @@ void Gui::renderHearts() {
|
||||
int ip2 = i + i + 1;
|
||||
|
||||
if (armor > 0) {
|
||||
int xo = xx + 80 + i * 8 + 4;
|
||||
if (ip2 < armor) blit(xo, yo, 16 + 2 * 9, 9 * 1, 9, 9);
|
||||
else if (ip2 == armor) blit(xo, yo, 16 + 4 * 9, 9 * 1, 9, 9);
|
||||
else if (ip2 > armor) blit(xo, yo, 16 + 0 * 9, 9 * 1, 9, 9);
|
||||
int xo = xx + 80 + i * 8 + 4;
|
||||
if (ip2 < armor) blit(xo, yo, 16 + 2 * 9, 9 * 1, 9, 9);
|
||||
else if (ip2 == armor) blit(xo, yo, 16 + 4 * 9, 9 * 1, 9, 9);
|
||||
else if (ip2 > armor) blit(xo, yo, 16 + 0 * 9, 9 * 1, 9, 9);
|
||||
}
|
||||
|
||||
int bg = 0;
|
||||
@@ -709,7 +691,7 @@ void Gui::renderBubbles() {
|
||||
if (minecraft->player->isUnderLiquid(Material::water)) {
|
||||
int screenWidth = (int)(minecraft->width * InvGuiScale);
|
||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||
|
||||
|
||||
int xx = (minecraft->options.getBooleanValue(OPTIONS_BAR_ON_TOP)) ? screenWidth / 2 - getNumSlots() * 10 - 1 : 2;
|
||||
int yo = (minecraft->options.getBooleanValue(OPTIONS_BAR_ON_TOP)) ? screenHeight - 42 : 12;
|
||||
int count = (int) std::ceil((minecraft->player->airSupply - 2) * 10.0f / Player::TOTAL_AIR_SUPPLY);
|
||||
@@ -732,20 +714,13 @@ void Gui::onLevelGenerated() {
|
||||
|
||||
void Gui::renderDebugInfo() {
|
||||
// FPS counter (updates once per second)
|
||||
static int fps = 0;
|
||||
static int fpsLastTime = 0;
|
||||
static float fps = 0.0f;
|
||||
static float fpsLastTime = 0.0f;
|
||||
static int fpsFrames = 0;
|
||||
static int displayChunkUpdates = 0;
|
||||
float now = getTimeS();
|
||||
fpsFrames++;
|
||||
if (now - fpsLastTime >= 1) {
|
||||
if (now - fpsLastTime >= 1.0f) {
|
||||
fps = fpsFrames / (now - fpsLastTime);
|
||||
|
||||
displayChunkUpdates = Chunk::updates;
|
||||
|
||||
// 3. RESET the actual game counter to 0 for the next second
|
||||
Chunk::updates = 0;
|
||||
|
||||
fpsFrames = 0;
|
||||
fpsLastTime = now;
|
||||
}
|
||||
@@ -755,7 +730,6 @@ void Gui::renderDebugInfo() {
|
||||
|
||||
// Position
|
||||
float px = p->x, py = p->y - p->heightOffset, pz = p->z;
|
||||
posTranslator.to(px, py, pz);
|
||||
int bx = (int)floorf(px), by = (int)floorf(py), bz = (int)floorf(pz);
|
||||
int cx = bx >> 4, cz = bz >> 4;
|
||||
|
||||
@@ -782,70 +756,7 @@ void Gui::renderDebugInfo() {
|
||||
long day = worldTime / Level::TICKS_PER_DAY;
|
||||
long seed = lvl ? lvl->getSeed() : 0;
|
||||
|
||||
// Block looking at
|
||||
std::string CurrentTile = "Air";
|
||||
if (minecraft->hitResult.type == TILE) {
|
||||
int LookingX = minecraft->hitResult.x;
|
||||
int LookingY = minecraft->hitResult.y;
|
||||
int LookingZ = minecraft->hitResult.z;
|
||||
|
||||
int tileID = minecraft->level->getTile(LookingX, LookingY, LookingZ);
|
||||
if (tileID > 0 && tileID < 256){
|
||||
Tile* LookingTile = Tile::tiles[tileID];
|
||||
if (LookingTile != NULL) {
|
||||
CurrentTile = LookingTile->getDescriptionId();
|
||||
} else {
|
||||
CurrentTile = "Unknown Tile";
|
||||
}
|
||||
} else {
|
||||
CurrentTile = "Air";
|
||||
}
|
||||
}
|
||||
// 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);
|
||||
|
||||
sprintf(buf, "Looking at: %s", CurrentTile.c_str());
|
||||
drawString(font, buf, 2, 134, 0xE0E0E0);
|
||||
}
|
||||
else if (minecraft->options.getIntValue(OPTIONS_DEBUG_STYLE) == 1){
|
||||
|
||||
|
||||
static char ln[8][96];
|
||||
sprintf(ln[0], "Minecraft PE 0.6.1 alpha (mcpe64)");
|
||||
sprintf(ln[1], "%.1f fps", fps);
|
||||
@@ -860,8 +771,8 @@ void Gui::renderDebugInfo() {
|
||||
const float LH = (float)Font::DefaultLineHeight; // 10 font-pixels
|
||||
const float MGN = 2.0f; // left/top margin in font-pixels
|
||||
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
|
||||
for (int i = 0; i < N; i++) {
|
||||
if (ln[i][0] == '\0') continue;
|
||||
@@ -883,7 +794,6 @@ void Gui::renderDebugInfo() {
|
||||
font->draw(ln[i], MGN, y, col);
|
||||
}
|
||||
t.endOverrideAndDraw();
|
||||
}
|
||||
}
|
||||
|
||||
void Gui::renderPlayerList(Font* font, int screenWidth, int screenHeight) {
|
||||
@@ -999,64 +909,64 @@ void Gui::renderOnSelectItemNameText( const int screenWidth, Font* font, int ySl
|
||||
|
||||
// helper structure used by drawColoredString
|
||||
struct ColorSegment {
|
||||
std::string text;
|
||||
uint32_t color;
|
||||
std::string text;
|
||||
uint32_t color;
|
||||
};
|
||||
|
||||
// parse [tag] and [/tag] markers; tags may contain a color name (gold, green, etc.)
|
||||
static void parseColorTags(const std::string& in, std::vector<ColorSegment>& out) {
|
||||
uint32_t curColor = 0xffffff;
|
||||
size_t pos = 0;
|
||||
while (pos < in.size()) {
|
||||
size_t open = in.find('[', pos);
|
||||
if (open == std::string::npos) {
|
||||
out.push_back({in.substr(pos), curColor});
|
||||
break;
|
||||
}
|
||||
if (open > pos) {
|
||||
out.push_back({in.substr(pos, open - pos), curColor});
|
||||
}
|
||||
size_t close = in.find(']', open);
|
||||
if (close == std::string::npos) {
|
||||
out.push_back({in.substr(open), curColor});
|
||||
break;
|
||||
}
|
||||
std::string tag = in.substr(open + 1, close - open - 1);
|
||||
if (!tag.empty() && tag[0] == '/') {
|
||||
curColor = 0xffffff;
|
||||
} else {
|
||||
std::string lower;
|
||||
lower.resize(tag.size());
|
||||
std::transform(tag.begin(), tag.end(), lower.begin(), ::tolower);
|
||||
if (lower.find("gold") != std::string::npos) curColor = 0xffd700;
|
||||
else if (lower.find("green") != std::string::npos) curColor = 0x00ff00;
|
||||
else if (lower.find("yellow") != std::string::npos) curColor = 0xffff00;
|
||||
else if (lower.find("red") != std::string::npos) curColor = 0xff0000;
|
||||
else if (lower.find("blue") != std::string::npos) curColor = 0x0000ff;
|
||||
}
|
||||
pos = close + 1;
|
||||
}
|
||||
uint32_t curColor = 0xffffff;
|
||||
size_t pos = 0;
|
||||
while (pos < in.size()) {
|
||||
size_t open = in.find('[', pos);
|
||||
if (open == std::string::npos) {
|
||||
out.push_back({in.substr(pos), curColor});
|
||||
break;
|
||||
}
|
||||
if (open > pos) {
|
||||
out.push_back({in.substr(pos, open - pos), curColor});
|
||||
}
|
||||
size_t close = in.find(']', open);
|
||||
if (close == std::string::npos) {
|
||||
out.push_back({in.substr(open), curColor});
|
||||
break;
|
||||
}
|
||||
std::string tag = in.substr(open + 1, close - open - 1);
|
||||
if (!tag.empty() && tag[0] == '/') {
|
||||
curColor = 0xffffff;
|
||||
} else {
|
||||
std::string lower;
|
||||
lower.resize(tag.size());
|
||||
std::transform(tag.begin(), tag.end(), lower.begin(), ::tolower);
|
||||
if (lower.find("gold") != std::string::npos) curColor = 0xffd700;
|
||||
else if (lower.find("green") != std::string::npos) curColor = 0x00ff00;
|
||||
else if (lower.find("yellow") != std::string::npos) curColor = 0xffff00;
|
||||
else if (lower.find("red") != std::string::npos) curColor = 0xff0000;
|
||||
else if (lower.find("blue") != std::string::npos) curColor = 0x0000ff;
|
||||
}
|
||||
pos = close + 1;
|
||||
}
|
||||
}
|
||||
|
||||
void Gui::drawColoredString(Font* font, const std::string& text, float x, float y, int alpha) {
|
||||
std::vector<ColorSegment> segs;
|
||||
parseColorTags(text, segs);
|
||||
float cx = x;
|
||||
for (auto &s : segs) {
|
||||
int color = s.color + (alpha << 24);
|
||||
font->drawShadow(s.text, cx, y, color);
|
||||
cx += font->width(s.text);
|
||||
}
|
||||
std::vector<ColorSegment> segs;
|
||||
parseColorTags(text, segs);
|
||||
float cx = x;
|
||||
for (auto &s : segs) {
|
||||
int color = s.color + (alpha << 24);
|
||||
font->drawShadow(s.text, cx, y, color);
|
||||
cx += font->width(s.text);
|
||||
}
|
||||
}
|
||||
|
||||
float Gui::getColoredWidth(Font* font, const std::string& text) {
|
||||
std::vector<ColorSegment> segs;
|
||||
parseColorTags(text, segs);
|
||||
float w = 0;
|
||||
for (auto &s : segs) {
|
||||
w += font->width(s.text);
|
||||
}
|
||||
return w;
|
||||
std::vector<ColorSegment> segs;
|
||||
parseColorTags(text, segs);
|
||||
float w = 0;
|
||||
for (auto &s : segs) {
|
||||
w += font->width(s.text);
|
||||
}
|
||||
return w;
|
||||
}
|
||||
|
||||
void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isChatting, Font* font ) {
|
||||
@@ -1100,23 +1010,20 @@ void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isC
|
||||
glEnable(GL_BLEND);
|
||||
|
||||
// special-case join/leave announcements
|
||||
int baseColor = 0xffffff;
|
||||
if (msg.find(" joined the game") != std::string::npos ||
|
||||
msg.find(" left the game") != std::string::npos) {
|
||||
baseColor = 0xffff00; // yellow
|
||||
}
|
||||
// replace previous logic; allow full colour tags now
|
||||
Gui::drawColoredString(font, msg, x, y, alpha);
|
||||
int baseColor = 0xffffff;
|
||||
if (msg.find(" joined the game") != std::string::npos ||
|
||||
msg.find(" left the game") != std::string::npos) {
|
||||
baseColor = 0xffff00; // yellow
|
||||
}
|
||||
// replace previous logic; allow full colour tags now
|
||||
Gui::drawColoredString(font, msg, x, y, alpha);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
glColor4f2(1, 1, 1, .5);
|
||||
minecraft->textures->loadAndBindTexture("gui/gui.png");
|
||||
|
||||
Inventory* inventory = minecraft->player->inventory;
|
||||
@@ -1197,41 +1104,22 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
|
||||
|
||||
// Draw count
|
||||
//Tesselator& t = Tesselator::instance;
|
||||
|
||||
glPushMatrix2();
|
||||
glScalef2(InvGuiScale + InvGuiScale, InvGuiScale + InvGuiScale, 1);
|
||||
const float k = 0.5f * GuiScale;
|
||||
if (minecraft->options.getBooleanValue(OPTIONS_JAVA_HUD)) // if true enables the java beta item count size and color and calls the java items decorations
|
||||
{
|
||||
t.beginOverride();
|
||||
if (minecraft->gameMode->isSurvivalType()) {
|
||||
x = baseItemX;
|
||||
for (int i = 0; i < slots; i++) {
|
||||
ItemInstance* item = minecraft->player->inventory->getItem(i);
|
||||
if (item && item->count >= 0)
|
||||
ItemRenderer::renderGuiItemDecorations(minecraft->font, minecraft->textures, minecraft->player->inventory->getItem(i), x, (float)ySlot);
|
||||
x += 20;
|
||||
}
|
||||
|
||||
t.beginOverride();
|
||||
if (minecraft->gameMode->isSurvivalType()) {
|
||||
x = baseItemX;
|
||||
for (int i = 0; i < slots; i++) {
|
||||
ItemInstance* item = minecraft->player->inventory->getItem(i);
|
||||
if (item && item->count >= 0)
|
||||
renderSlotText(item, k*x, k*ySlot + 1, true, true);
|
||||
x += 20;
|
||||
}
|
||||
minecraft->textures->loadAndBindTexture("font/default8.png");
|
||||
t.endOverrideAndDraw();
|
||||
}
|
||||
else { // otherwise uses the normal pocket edition one
|
||||
glPushMatrix2();
|
||||
glScalef2(InvGuiScale + InvGuiScale, InvGuiScale + InvGuiScale, 1);
|
||||
t.beginOverride();
|
||||
if (minecraft->gameMode->isSurvivalType()) {
|
||||
x = baseItemX;
|
||||
for (int i = 0; i < slots; i++) {
|
||||
ItemInstance* item = minecraft->player->inventory->getItem(i);
|
||||
if (item && item->count >= 0)
|
||||
renderSlotText(item, k*x, k*ySlot, true, true);
|
||||
x += 20;
|
||||
}
|
||||
}
|
||||
|
||||
minecraft->textures->loadAndBindTexture("font/default8.png");
|
||||
t.endOverrideAndDraw();
|
||||
|
||||
glPopMatrix2();
|
||||
}
|
||||
minecraft->textures->loadAndBindTexture("font/default8.png");
|
||||
t.endOverrideAndDraw();
|
||||
|
||||
glPopMatrix2();
|
||||
}
|
||||
|
||||
@@ -36,48 +36,6 @@ void OptionsItem::render( Minecraft* minecraft, int xm, int ym ) {
|
||||
}
|
||||
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);
|
||||
super::render(minecraft, xm, ym);
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
#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();
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
#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__*/
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "GuiElement.h"
|
||||
#include "../../../client/Options.h"
|
||||
#include <client/Option.h>
|
||||
|
||||
class Slider : public GuiElement {
|
||||
typedef GuiElement super;
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
#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;
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
#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__*/
|
||||
@@ -1,26 +0,0 @@
|
||||
#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__*/
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "../../../network/ServerSideNetworkHandler.h"
|
||||
#include "../../../network/packet/ChatPacket.h"
|
||||
#include "../../../platform/log.h"
|
||||
#include "util/StringUtils.h"
|
||||
|
||||
#include <sstream>
|
||||
#include <cstdlib>
|
||||
@@ -54,141 +55,37 @@ void ConsoleScreen::charPressed(char inputChar)
|
||||
_input += inputChar;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// execute: run _input as a command, print result, close screen
|
||||
// ---------------------------------------------------------------------------
|
||||
void ConsoleScreen::execute()
|
||||
{
|
||||
if (!minecraft->level) return;
|
||||
|
||||
if (_input.empty()) {
|
||||
minecraft->setScreen(NULL);
|
||||
return;
|
||||
return minecraft->setScreen(NULL);
|
||||
}
|
||||
|
||||
if (_input[0] == '/') {
|
||||
// Command
|
||||
std::string result = processCommand(_input);
|
||||
if (!result.empty())
|
||||
minecraft->gui.addMessage(result);
|
||||
_input = Util::stringTrim(_input.substr(1));
|
||||
|
||||
std::istringstream iss(minecraft->commandManager().execute(*minecraft, *minecraft->player, _input));
|
||||
for (std::string line; std::getline(iss, line); ) {
|
||||
minecraft->gui.addMessage(line);
|
||||
}
|
||||
} else {
|
||||
// Chat message: <name> message
|
||||
std::string msg = std::string("<") + minecraft->player->name + "> " + _input;
|
||||
// @ai @rewrite
|
||||
if (minecraft->netCallback && minecraft->raknetInstance->isServer()) {
|
||||
// Hosting a LAN game: displayGameMessage shows locally + broadcasts MessagePacket to clients
|
||||
static_cast<ServerSideNetworkHandler*>(minecraft->netCallback)->displayGameMessage(msg);
|
||||
static_cast<ServerSideNetworkHandler*>(minecraft->netCallback)->displayGameMessage(_input);
|
||||
} else if (minecraft->netCallback) {
|
||||
// Connected client: send ChatPacket to server; server echoes it back as MessagePacket
|
||||
ChatPacket chatPkt(msg);
|
||||
ChatPacket chatPkt(_input);
|
||||
minecraft->raknetInstance->send(chatPkt);
|
||||
} else {
|
||||
// Singleplayer: show locally only
|
||||
minecraft->gui.addMessage(msg);
|
||||
minecraft->gui.addMessage("<" + minecraft->player->name + "> " + _input);
|
||||
}
|
||||
}
|
||||
|
||||
minecraft->setScreen(NULL);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// processCommand
|
||||
// ---------------------------------------------------------------------------
|
||||
static std::string trim(const std::string& s) {
|
||||
size_t a = s.find_first_not_of(" \t");
|
||||
if (a == std::string::npos) return "";
|
||||
size_t b = s.find_last_not_of(" \t");
|
||||
return s.substr(a, b - a + 1);
|
||||
}
|
||||
|
||||
std::string ConsoleScreen::processCommand(const std::string& raw)
|
||||
{
|
||||
// strip leading '/'
|
||||
std::string line = raw;
|
||||
if (!line.empty() && line[0] == '/') line = line.substr(1);
|
||||
line = trim(line);
|
||||
|
||||
// tokenise
|
||||
std::vector<std::string> args;
|
||||
{
|
||||
std::istringstream ss(line);
|
||||
std::string tok;
|
||||
while (ss >> tok) args.push_back(tok);
|
||||
}
|
||||
|
||||
if (args.empty()) return "";
|
||||
|
||||
Level* level = minecraft->level;
|
||||
if (!level) return "No level loaded.";
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// /time ...
|
||||
// -----------------------------------------------------------------------
|
||||
if (args[0] == "time") {
|
||||
if (args.size() < 2)
|
||||
return "Usage: /time <add|set|query> ...";
|
||||
|
||||
const std::string& sub = args[1];
|
||||
|
||||
// -- time add <value> -----------------------------------------------
|
||||
if (sub == "add") {
|
||||
if (args.size() < 3) return "Usage: /time add <value>";
|
||||
long delta = std::atol(args[2].c_str());
|
||||
long newTime = level->getTime() + delta;
|
||||
level->setTime(newTime);
|
||||
std::ostringstream out;
|
||||
out << "Set the time to " << (newTime % Level::TICKS_PER_DAY);
|
||||
return out.str();
|
||||
}
|
||||
|
||||
// -- time set <value|day|night|noon|midnight> -----------------------
|
||||
if (sub == "set") {
|
||||
if (args.size() < 3) return "Usage: /time set <value|day|night|noon|midnight>";
|
||||
const std::string& val = args[2];
|
||||
|
||||
long t = -1;
|
||||
if (val == "day") t = 1000;
|
||||
else if (val == "noon") t = 6000;
|
||||
else if (val == "night") t = 13000;
|
||||
else if (val == "midnight") t = 18000;
|
||||
else {
|
||||
// numeric — accept positive integers only
|
||||
bool numeric = true;
|
||||
for (char c : val)
|
||||
if (!std::isdigit((unsigned char)c)) { numeric = false; break; }
|
||||
if (!numeric) return std::string("Unknown value: ") + val;
|
||||
t = std::atol(val.c_str());
|
||||
}
|
||||
|
||||
// Preserve the total day count so only the time-of-day changes
|
||||
long dayCount = level->getTime() / Level::TICKS_PER_DAY;
|
||||
long newTime = dayCount * Level::TICKS_PER_DAY + (t % Level::TICKS_PER_DAY);
|
||||
level->setTime(newTime);
|
||||
std::ostringstream out;
|
||||
out << "Set the time to " << t;
|
||||
return out.str();
|
||||
}
|
||||
|
||||
// -- time query <daytime|gametime|day> ------------------------------
|
||||
if (sub == "query") {
|
||||
if (args.size() < 3) return "Usage: /time query <daytime|gametime|day>";
|
||||
const std::string& what = args[2];
|
||||
|
||||
long total = level->getTime();
|
||||
long daytime = total % Level::TICKS_PER_DAY;
|
||||
long day = total / Level::TICKS_PER_DAY;
|
||||
|
||||
std::ostringstream out;
|
||||
if (what == "daytime") { out << "The time of day is " << daytime; }
|
||||
else if (what == "gametime") { out << "The game time is " << total; }
|
||||
else if (what == "day") { out << "The day is " << day; }
|
||||
else return std::string("Unknown query: ") + what;
|
||||
return out.str();
|
||||
}
|
||||
|
||||
return "Unknown sub-command. Usage: /time <add|set|query> ...";
|
||||
}
|
||||
|
||||
return std::string("Unknown command: /") + args[0];
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// render
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
@@ -25,7 +25,6 @@ public:
|
||||
|
||||
private:
|
||||
void execute();
|
||||
std::string processCommand(const std::string& cmd);
|
||||
|
||||
std::string _input;
|
||||
int _cursorBlink; // tick counter for cursor blink
|
||||
|
||||
@@ -41,7 +41,6 @@ void CreditsScreen::init() {
|
||||
_lines.push_back("karson");
|
||||
_lines.push_back("deepfriedwaffles");
|
||||
_lines.push_back("EpikIzCool");
|
||||
_lines.push_back("fileshredder");
|
||||
_lines.push_back("");
|
||||
// avoid color tags around the URL so it isn't mangled by the parser please
|
||||
_lines.push_back("Join our Discord server: https://discord.gg/c58YesBxve");
|
||||
|
||||
@@ -23,15 +23,12 @@ DeathScreen::~DeathScreen()
|
||||
|
||||
void DeathScreen::init()
|
||||
{
|
||||
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
|
||||
if (/* minecraft->useTouchscreen() */ true) {
|
||||
bRespawn = new Touch::TButton(1, "Respawn!");
|
||||
bTitle = new Touch::TButton(2, "Main menu");
|
||||
} else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) {
|
||||
} else {
|
||||
bRespawn = new Button(1, "Respawn!");
|
||||
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(bTitle);
|
||||
@@ -42,23 +39,13 @@ void DeathScreen::init()
|
||||
|
||||
void DeathScreen::setupPositions()
|
||||
{
|
||||
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->x = width/2 - bRespawn->width - 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() {
|
||||
@@ -69,20 +56,10 @@ void DeathScreen::render( int xm, int ym, float a )
|
||||
{
|
||||
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();
|
||||
glScalef2(2, 2, 2);
|
||||
drawCenteredString(font, "You died!", width / 2 / 2, height / 8, 0xffffff);
|
||||
glPopMatrix2();
|
||||
}
|
||||
|
||||
if (_tick >= WAIT_TICKS)
|
||||
Screen::render(xm, ym, a);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "IngameBlockSelectionScreen.h"
|
||||
#include "../../renderer/TileRenderer.h"
|
||||
#include "../../renderer/Lighting.h"
|
||||
#include "../../player/LocalPlayer.h"
|
||||
#include "../../renderer/gles.h"
|
||||
#include "../../Minecraft.h"
|
||||
@@ -12,7 +11,6 @@
|
||||
#include "../../renderer/Textures.h"
|
||||
#include "../../gamemode/GameMode.h"
|
||||
#include "ArmorScreen.h"
|
||||
#include "crafting/WorkbenchScreen.h"
|
||||
#include "../components/Button.h"
|
||||
|
||||
#if defined(__APPLE__)
|
||||
@@ -28,8 +26,7 @@ IngameBlockSelectionScreen::IngameBlockSelectionScreen()
|
||||
InventoryRows(1),
|
||||
InventoryCols(1),
|
||||
InventorySize(1),
|
||||
bArmor(1, "Armor"),
|
||||
bCrafting(1, "Crafting")
|
||||
bArmor(1, "Armor")
|
||||
{
|
||||
}
|
||||
|
||||
@@ -44,19 +41,6 @@ void IngameBlockSelectionScreen::init()
|
||||
(float)getSlotPosY(0) - 4,
|
||||
(float)getSlotPosX(InventoryCols) + 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();
|
||||
if (!selected || selected->isNull()) {
|
||||
@@ -73,6 +57,13 @@ void IngameBlockSelectionScreen::init()
|
||||
}
|
||||
if (!isAllowed(selectedItem))
|
||||
selectedItem = 0;
|
||||
|
||||
if (!minecraft->isCreativeMode()) {
|
||||
bArmor.width = 42;
|
||||
bArmor.x = 0;
|
||||
bArmor.y = height - bArmor.height;
|
||||
buttons.push_back(&bArmor);
|
||||
}
|
||||
}
|
||||
|
||||
void IngameBlockSelectionScreen::removed()
|
||||
@@ -89,10 +80,10 @@ void IngameBlockSelectionScreen::renderSlots()
|
||||
|
||||
blitOffset = -90;
|
||||
|
||||
glEnable2(GL_RESCALE_NORMAL);
|
||||
//glEnable2(GL_RESCALE_NORMAL);
|
||||
//glPushMatrix2();
|
||||
//glRotatef2(180, 1, 0, 0);
|
||||
Lighting::turnOn(minecraft);
|
||||
//Lighting::turnOn();
|
||||
//glPopMatrix2();
|
||||
|
||||
minecraft->textures->loadAndBindTexture("gui/gui.png");
|
||||
@@ -131,8 +122,8 @@ void IngameBlockSelectionScreen::renderSlots()
|
||||
//w.stop();
|
||||
//w.printEvery(1000, "render-blocksel");
|
||||
|
||||
glDisable2(GL_RESCALE_NORMAL);
|
||||
Lighting::turnOff();
|
||||
//glDisable2(GL_RESCALE_NORMAL);
|
||||
//Lighting::turnOn();
|
||||
}
|
||||
|
||||
int IngameBlockSelectionScreen::getSlotPosX(int slotX) {
|
||||
@@ -257,7 +248,7 @@ void IngameBlockSelectionScreen::mouseClicked(int x, int y, int buttonNum)
|
||||
//minecraft->soundEngine->playUI("random.click", 1, 1);
|
||||
} else {
|
||||
_pendingQuit = !_area.isInside((float)x, (float)y)
|
||||
&& !bArmor.isInside(x, y) && !bCrafting.isInside(x, y);
|
||||
&& !bArmor.isInside(x, y);
|
||||
}
|
||||
}
|
||||
if (!_pendingQuit)
|
||||
@@ -346,8 +337,5 @@ void IngameBlockSelectionScreen::buttonClicked( Button* button )
|
||||
if (button == &bArmor) {
|
||||
minecraft->setScreen(new ArmorScreen());
|
||||
}
|
||||
if (button == &bCrafting) {
|
||||
minecraft->setScreen(new WorkbenchScreen(Recipe::SIZE_2X2));
|
||||
}
|
||||
super::buttonClicked(button);
|
||||
}
|
||||
|
||||
@@ -52,7 +52,6 @@ private:
|
||||
bool _pendingQuit;
|
||||
|
||||
Button bArmor;
|
||||
Button bCrafting;
|
||||
|
||||
RectangleArea _area;
|
||||
};
|
||||
|
||||
@@ -1,107 +0,0 @@
|
||||
#ifndef NET_MINECRAFT_CLIENT_GUI_SCREENS__InvalidLicenseScreen_H__
|
||||
#define NET_MINECRAFT_CLIENT_GUI_SCREENS__InvalidLicenseScreen_H__
|
||||
|
||||
#include "../Screen.h"
|
||||
#include "../components/Button.h"
|
||||
#include "../../Minecraft.h"
|
||||
#include "../../../LicenseCodes.h"
|
||||
|
||||
class InvalidLicenseScreen: public Screen
|
||||
{
|
||||
public:
|
||||
InvalidLicenseScreen(int id, bool hasBuyButton)
|
||||
: _id(id),
|
||||
_hasBuyButton(hasBuyButton),
|
||||
_baseY(0),
|
||||
bOk(0),
|
||||
bBuy(0)
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~InvalidLicenseScreen() {
|
||||
delete bOk;
|
||||
delete bBuy;
|
||||
}
|
||||
|
||||
void init() {
|
||||
if (minecraft->useTouchscreen()) {
|
||||
bOk = new Touch::TButton(1, "Ok");
|
||||
bBuy = new Touch::TButton(2, "Buy");
|
||||
} else {
|
||||
bOk = new Button(1, "Ok");
|
||||
bBuy = new Button(2, "Buy");
|
||||
}
|
||||
|
||||
if (_hasBuyButton)
|
||||
bOk->msg = "Quit";
|
||||
|
||||
if (!LicenseCodes::isOk(_id)) {
|
||||
char buf[20] = {0};
|
||||
sprintf(buf, "%d", _id);
|
||||
|
||||
desc1 = "License verification failed (error ";
|
||||
desc1 += buf;
|
||||
desc1 += ")";
|
||||
desc2 = "Try again later.";
|
||||
hint = "You need to be connected to the internet\n";
|
||||
hint += "once while you start the game.";
|
||||
}
|
||||
|
||||
buttons.push_back(bOk);
|
||||
tabButtons.push_back(bOk);
|
||||
|
||||
if (_hasBuyButton) {
|
||||
buttons.push_back(bBuy);
|
||||
tabButtons.push_back(bBuy);
|
||||
}
|
||||
}
|
||||
|
||||
void setupPositions() {
|
||||
_baseY = height/5 + 6;
|
||||
//if (_hasBuyButton)
|
||||
_baseY -= 24;
|
||||
|
||||
bOk->width = bBuy->width = 200;
|
||||
bOk->x = bBuy->x = (width - bOk->width) / 2;
|
||||
bBuy->y = _baseY + 84;
|
||||
bOk->y = bBuy->y + bBuy->height + 4;
|
||||
|
||||
if (!_hasBuyButton)
|
||||
bOk->y -= 24;
|
||||
}
|
||||
|
||||
void tick() {}
|
||||
|
||||
//void keyPressed(int eventKey) {}
|
||||
|
||||
void render(int xm, int ym, float a) {
|
||||
renderDirtBackground(0);
|
||||
drawCenteredString(minecraft->font, desc1, width/2, _baseY, 0xffffff);
|
||||
drawCenteredString(minecraft->font, desc2, width/2, _baseY + 24, 0xffffff);
|
||||
|
||||
drawCenteredString(minecraft->font, hint, width/2, _baseY + 60, 0xffffff);
|
||||
|
||||
Screen::render(xm, ym, a);
|
||||
}
|
||||
|
||||
void buttonClicked(Button* button) {
|
||||
if (button->id == bOk->id) {
|
||||
minecraft->quit();
|
||||
}
|
||||
if (button->id == bBuy->id) {
|
||||
minecraft->platform()->buyGame();
|
||||
}
|
||||
};
|
||||
private:
|
||||
int _id;
|
||||
std::string desc1;
|
||||
std::string desc2;
|
||||
std::string hint;
|
||||
|
||||
Button* bOk;
|
||||
Button* bBuy;
|
||||
bool _hasBuyButton;
|
||||
int _baseY;
|
||||
};
|
||||
|
||||
#endif /*NET_MINECRAFT_CLIENT_GUI_SCREENS__InvalidLicenseScreen_H__*/
|
||||
@@ -2,8 +2,8 @@
|
||||
#include "../Screen.h"
|
||||
#include "../components/Button.h"
|
||||
#include "../../Minecraft.h"
|
||||
#include "../components/ImageButton.h"
|
||||
#include "../components/TextBox.h"
|
||||
#include "client/gui/components/ImageButton.h"
|
||||
#include "client/gui/components/TextBox.h"
|
||||
|
||||
class JoinByIPScreen: public Screen
|
||||
{
|
||||
@@ -25,4 +25,4 @@ private:
|
||||
Touch::THeader bHeader;
|
||||
Touch::TButton bJoin;
|
||||
ImageButton bBack;
|
||||
};
|
||||
};
|
||||
@@ -138,7 +138,7 @@ void OptionsScreen::render(int xm, int ym, float a) {
|
||||
|
||||
if (currentOptionsGroup != NULL)
|
||||
currentOptionsGroup->render(minecraft, xmm, ymm);
|
||||
|
||||
|
||||
super::render(xm, ym, a);
|
||||
}
|
||||
|
||||
@@ -197,7 +197,6 @@ void OptionsScreen::generateOptionScreens() {
|
||||
optionPanes[1]->addOptionItem(OPTIONS_DIFFICULTY, minecraft)
|
||||
.addOptionItem(OPTIONS_SERVER_VISIBLE, minecraft)
|
||||
.addOptionItem(OPTIONS_THIRD_PERSON_VIEW, minecraft)
|
||||
.addOptionItem(OPTIONS_WINDOW_SCALE, minecraft)
|
||||
.addOptionItem(OPTIONS_GUI_SCALE, minecraft)
|
||||
.addOptionItem(OPTIONS_SENSITIVITY, minecraft)
|
||||
.addOptionItem(OPTIONS_MUSIC_VOLUME, minecraft)
|
||||
@@ -209,9 +208,7 @@ void OptionsScreen::generateOptionScreens() {
|
||||
// // Controls Pane
|
||||
optionPanes[2]->addOptionItem(OPTIONS_INVERT_Y_MOUSE, minecraft)
|
||||
.addOptionItem(OPTIONS_USE_TOUCHSCREEN, minecraft)
|
||||
.addOptionItem(OPTIONS_AUTOJUMP, minecraft)
|
||||
.addOptionItem(OPTIONS_BLOCK_OUTLINE, minecraft)
|
||||
.addOptionItem(OPTIONS_IS_JOY_TOUCH_AREA, minecraft);
|
||||
.addOptionItem(OPTIONS_AUTOJUMP, minecraft);
|
||||
|
||||
for (int i = OPTIONS_KEY_FORWARD; i <= OPTIONS_KEY_USE; i++) {
|
||||
optionPanes[2]->addOptionItem((OptionId)i, minecraft);
|
||||
@@ -219,32 +216,16 @@ void OptionsScreen::generateOptionScreens() {
|
||||
|
||||
// // Graphics Pane
|
||||
optionPanes[3]->addOptionItem(OPTIONS_FANCY_GRAPHICS, minecraft)
|
||||
// .addOptionItem(&Option::VIEW_BOBBING, minecraft)
|
||||
// .addOptionItem(&Option::AMBIENT_OCCLUSION, minecraft)
|
||||
// .addOptionItem(&Option::ANAGLYPH, minecraft)
|
||||
.addOptionItem(OPTIONS_LIMIT_FRAMERATE, minecraft)
|
||||
.addOptionItem(OPTIONS_VSYNC, minecraft)
|
||||
.addOptionItem(OPTIONS_VIEW_DISTANCE, minecraft)
|
||||
.addOptionItem(OPTIONS_RENDER_DEBUG, minecraft)
|
||||
.addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft)
|
||||
.addOptionItem(OPTIONS_VIEW_BOBBING, minecraft)
|
||||
.addOptionItem(OPTIONS_AMBIENT_OCCLUSION, minecraft)
|
||||
.addOptionItem(OPTIONS_NORMAL_LIGHTING, minecraft)
|
||||
.addOptionItem(OPTIONS_BEAUTIFUL_SKY, minecraft)
|
||||
.addOptionItem(OPTIONS_VIGNETTE, minecraft);
|
||||
|
||||
.addOptionItem(OPTIONS_AMBIENT_OCCLUSION, minecraft);
|
||||
|
||||
optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
|
||||
.addOptionItem(OPTIONS_BAR_ON_TOP, 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);
|
||||
|
||||
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft);
|
||||
}
|
||||
|
||||
void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
|
||||
@@ -266,7 +247,7 @@ void OptionsScreen::keyPressed(int eventKey) {
|
||||
currentOptionsGroup->keyPressed(minecraft, eventKey);
|
||||
if (eventKey == Keyboard::KEY_ESCAPE)
|
||||
minecraft->options.save();
|
||||
|
||||
|
||||
super::keyPressed(eventKey);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,18 +10,18 @@
|
||||
#include "client/gui/screens/OptionsScreen.h"
|
||||
|
||||
PauseScreen::PauseScreen(bool wasBackPaused)
|
||||
: saveStep(0),
|
||||
: saveStep(0),
|
||||
visibleTime(0),
|
||||
bContinue(0),
|
||||
bQuit(0),
|
||||
bOptions(0),
|
||||
bQuitAndSaveLocally(0),
|
||||
bServerVisibility(0),
|
||||
// bThirdPerson(0),
|
||||
// bThirdPerson(0),
|
||||
wasBackPaused(wasBackPaused),
|
||||
// bSound(OPTIONS_SOUND_VOLUME, 1, 0),
|
||||
bThirdPerson(OPTIONS_THIRD_PERSON_VIEW),
|
||||
bHideGui(OPTIONS_HIDEGUI)
|
||||
bHideGui(OPTIONS_HIDEGUI)
|
||||
{
|
||||
ImageDef def;
|
||||
def.setSrc(IntRectangle(160, 144, 39, 31));
|
||||
@@ -34,7 +34,7 @@ PauseScreen::PauseScreen(bool wasBackPaused)
|
||||
// bSound.setImageDef(def, true);
|
||||
defSrc.y += defSrc.h;
|
||||
bThirdPerson.setImageDef(def, true);
|
||||
bHideGui.setImageDef(def, true);
|
||||
bHideGui.setImageDef(def, true);
|
||||
//void setImageDef(ImageDef& imageDef, bool setButtonSize);
|
||||
}
|
||||
|
||||
@@ -44,31 +44,24 @@ PauseScreen::~PauseScreen() {
|
||||
delete bQuitAndSaveLocally;
|
||||
delete bServerVisibility;
|
||||
delete bOptions;
|
||||
// delete bThirdPerson;
|
||||
// delete bThirdPerson;
|
||||
}
|
||||
|
||||
void PauseScreen::init() {
|
||||
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
|
||||
if (/* minecraft->useTouchscreen() */ true) {
|
||||
bContinue = new Touch::TButton(1, "Back to game");
|
||||
bOptions = new Touch::TButton(5, "Options");
|
||||
bQuit = new Touch::TButton(2, "Quit to title");
|
||||
bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map");
|
||||
bServerVisibility = new Touch::TButton(4, "");
|
||||
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
|
||||
} else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) {
|
||||
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
|
||||
} else {
|
||||
bContinue = new Button(1, "Back to game");
|
||||
bOptions = new Button(5, "Options");
|
||||
bQuit = new Button(2, "Quit to title");
|
||||
bQuitAndSaveLocally = new Button(3, "Quit and copy map");
|
||||
bServerVisibility = new Button(4, "");
|
||||
// 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");
|
||||
// bThirdPerson = new Button(5, "Toggle 3:rd person view");
|
||||
}
|
||||
|
||||
buttons.push_back(bContinue);
|
||||
@@ -79,12 +72,12 @@ void PauseScreen::init() {
|
||||
bHideGui.updateImage(&minecraft->options);
|
||||
// buttons.push_back(&bSound);
|
||||
buttons.push_back(&bThirdPerson);
|
||||
//buttons.push_back(&bHideGui);
|
||||
//buttons.push_back(&bHideGui);
|
||||
|
||||
// If Back wasn't pressed, set up additional items (more than Quit to menu
|
||||
// and Back to game) here
|
||||
|
||||
#if !defined(APPLE_DEMO_PROMOTION) && !defined(RPI)
|
||||
|
||||
#if !defined(APPLE_DEMO_PROMOTION) && !defined(RPI)
|
||||
if (true || !wasBackPaused) {
|
||||
if (minecraft->raknetInstance) {
|
||||
if (minecraft->raknetInstance->isServer()) {
|
||||
@@ -92,14 +85,14 @@ void PauseScreen::init() {
|
||||
buttons.push_back(bServerVisibility);
|
||||
}
|
||||
else {
|
||||
#if !defined(DEMO_MODE)
|
||||
buttons.push_back(bQuitAndSaveLocally);
|
||||
#endif
|
||||
#if !defined(DEMO_MODE)
|
||||
buttons.push_back(bQuitAndSaveLocally);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// buttons.push_back(bThirdPerson);
|
||||
#endif
|
||||
// buttons.push_back(bThirdPerson);
|
||||
|
||||
for (unsigned int i = 0; i < buttons.size(); ++i) {
|
||||
// if (buttons[i] == &bSound) continue;
|
||||
@@ -110,48 +103,27 @@ void PauseScreen::init() {
|
||||
}
|
||||
|
||||
void PauseScreen::setupPositions() {
|
||||
saveStep = 0;
|
||||
saveStep = 0;
|
||||
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->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 160;
|
||||
bQuitAndSaveLocally->width = bServerVisibility->width = 160;
|
||||
|
||||
bContinue->x = (width - bContinue->width) / 2;
|
||||
bContinue->y = yBase + 24 * 1;
|
||||
bContinue->x = (width - bContinue->width) / 2;
|
||||
bContinue->y = yBase + 32 * 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 + 32 * 2;
|
||||
|
||||
bOptions->x = (width - bOptions->width) / 2;
|
||||
bOptions->y = yBase + 24 * 3 + 24;
|
||||
|
||||
bQuit->x = (width - bQuit->width) / 2;
|
||||
bQuit->y = yBase + 24 * 4 + 24;
|
||||
|
||||
} else {
|
||||
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 160;
|
||||
bQuitAndSaveLocally->width = bServerVisibility->width = 160;
|
||||
|
||||
bContinue->x = (width - bContinue->width) / 2;
|
||||
bContinue->y = yBase + 32 * 1;
|
||||
|
||||
bOptions->x = (width - bOptions->width) / 2;
|
||||
bOptions->y = yBase + 32 * 2;
|
||||
|
||||
bQuit->x = (width - bQuit->width) / 2;
|
||||
bQuit->y = yBase + 32 * 3;
|
||||
bQuit->x = (width - bQuit->width) / 2;
|
||||
bQuit->y = yBase + 32 * 3;
|
||||
|
||||
#if APPLE_DEMO_PROMOTION
|
||||
bQuit->y += 16;
|
||||
bQuit->y += 16;
|
||||
#endif
|
||||
|
||||
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
||||
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
||||
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4;
|
||||
|
||||
// bSound.y = bThirdPerson.y = 8;
|
||||
// bSound.x = 4;
|
||||
@@ -189,9 +161,9 @@ void PauseScreen::buttonClicked(Button* button) {
|
||||
minecraft->setScreen(NULL);
|
||||
//minecraft->grabMouse();
|
||||
}
|
||||
if (button->id == bQuit->id) {
|
||||
if (button->id == bQuit->id) {
|
||||
minecraft->leaveGame();
|
||||
}
|
||||
}
|
||||
if (button->id == bQuitAndSaveLocally->id) {
|
||||
minecraft->leaveGame(true);
|
||||
}
|
||||
@@ -225,5 +197,5 @@ void PauseScreen::updateServerVisibilityText()
|
||||
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
|
||||
bServerVisibility->msg = ss->allowsIncomingConnections()?
|
||||
"Server is visible"
|
||||
: "Server is invisible";
|
||||
: "Server is invisible";
|
||||
}
|
||||
|
||||
@@ -14,14 +14,14 @@
|
||||
|
||||
#include "../../Minecraft.h"
|
||||
|
||||
#include "UsernameScreen.h"
|
||||
#include <client/gui/screens/UsernameScreen.h>
|
||||
|
||||
Screen* ScreenChooser::createScreen( ScreenId id )
|
||||
{
|
||||
Screen* screen = NULL;
|
||||
|
||||
// :sob:
|
||||
if (_mc->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
|
||||
if (/* _mc->useTouchscreen() */ true) {
|
||||
switch (id) {
|
||||
case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break;
|
||||
case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break;
|
||||
|
||||
@@ -23,62 +23,49 @@
|
||||
|
||||
// Some kind of default settings, might be overridden in ::init
|
||||
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()
|
||||
{
|
||||
delete bHost;
|
||||
delete bJoin;
|
||||
delete bOptions;
|
||||
delete bQuit;
|
||||
}
|
||||
|
||||
void StartMenuScreen::init()
|
||||
{
|
||||
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;
|
||||
bJoin.active = bHost.active = bOptions.active = true;
|
||||
|
||||
if (minecraft->options.getStringValue(OPTIONS_USERNAME).empty()) {
|
||||
return; // tick() will redirect to UsernameScreen
|
||||
}
|
||||
|
||||
buttons.push_back(bHost);
|
||||
buttons.push_back(bJoin);
|
||||
buttons.push_back(&bHost);
|
||||
buttons.push_back(&bJoin);
|
||||
//buttons.push_back(&bTest);
|
||||
buttons.push_back(bQuit);
|
||||
|
||||
tabButtons.push_back(bHost);
|
||||
tabButtons.push_back(bJoin);
|
||||
tabButtons.push_back(bQuit);
|
||||
tabButtons.push_back(&bHost);
|
||||
tabButtons.push_back(&bJoin);
|
||||
|
||||
#ifndef RPI
|
||||
buttons.push_back(bOptions);
|
||||
tabButtons.push_back(bOptions);
|
||||
buttons.push_back(&bOptions);
|
||||
tabButtons.push_back(&bOptions);
|
||||
#endif
|
||||
|
||||
//// add quit button (top right X icon) – match OptionsScreen style
|
||||
//{
|
||||
// ImageDef def;
|
||||
// def.name = "gui/touchgui.png";
|
||||
// def.width = 34;
|
||||
// def.height = 26;
|
||||
// def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
|
||||
// bQuit.setImageDef(def, true);
|
||||
// bQuit.scaleWhenPressed = false;
|
||||
// buttons.push_back(&bQuit);
|
||||
// // don't include in tab navigation
|
||||
//}
|
||||
// add quit button (top right X icon) – match OptionsScreen style
|
||||
{
|
||||
ImageDef def;
|
||||
def.name = "gui/touchgui.png";
|
||||
def.width = 34;
|
||||
def.height = 26;
|
||||
def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
|
||||
bQuit.setImageDef(def, true);
|
||||
bQuit.scaleWhenPressed = false;
|
||||
buttons.push_back(&bQuit);
|
||||
// don't include in tab navigation
|
||||
}
|
||||
|
||||
copyright = "\xffMojang AB";//. Do not distribute!";
|
||||
|
||||
@@ -106,30 +93,20 @@ void StartMenuScreen::init()
|
||||
}
|
||||
|
||||
void StartMenuScreen::setupPositions() {
|
||||
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||
int yBase = (height / 2) - 20;
|
||||
int yBase = height / 2;
|
||||
|
||||
bHost->y = yBase;
|
||||
bJoin->y = bHost->y + 24;
|
||||
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;
|
||||
}
|
||||
bHost.y = yBase;
|
||||
bJoin.y = bHost.y + 24 + 4;
|
||||
bOptions.y = bJoin.y + 24 + 4;
|
||||
|
||||
// Center buttons
|
||||
bHost->x = (width - bHost->width) / 2;
|
||||
bJoin->x = (width - bJoin->width) / 2;
|
||||
bOptions->x = (width - bOptions->width) / 2;
|
||||
bQuit->x = (width - bQuit->width) / 2;
|
||||
bHost.x = (width - bHost.width) / 2;
|
||||
bJoin.x = (width - bJoin.width) / 2;
|
||||
bOptions.x = (width - bOptions.width) / 2;
|
||||
|
||||
//// position quit icon at top-right (use image-defined size)
|
||||
//bQuit.x = width - bQuit.width;
|
||||
//bQuit.y = 0;
|
||||
// position quit icon at top-right (use image-defined size)
|
||||
bQuit.x = width - bQuit.width;
|
||||
bQuit.y = 0;
|
||||
}
|
||||
|
||||
void StartMenuScreen::tick() {
|
||||
@@ -137,7 +114,7 @@ void StartMenuScreen::tick() {
|
||||
|
||||
void StartMenuScreen::buttonClicked(Button* button) {
|
||||
|
||||
if (button->id == bHost->id)
|
||||
if (button->id == bHost.id)
|
||||
{
|
||||
#if defined(DEMO_MODE) || defined(APPLE_DEMO_PROMOTION)
|
||||
minecraft->setScreen( new SimpleChooseLevelScreen("_DemoLevel") );
|
||||
@@ -145,16 +122,16 @@ void StartMenuScreen::buttonClicked(Button* button) {
|
||||
minecraft->screenChooser.setScreen(SCREEN_SELECTWORLD);
|
||||
#endif
|
||||
}
|
||||
if (button->id == bJoin->id)
|
||||
if (button->id == bJoin.id)
|
||||
{
|
||||
minecraft->locateMultiplayer();
|
||||
minecraft->screenChooser.setScreen(SCREEN_JOINGAME);
|
||||
}
|
||||
if (button->id == bOptions->id)
|
||||
if (button->id == bOptions.id)
|
||||
{
|
||||
minecraft->setScreen(new OptionsScreen());
|
||||
}
|
||||
if (button->id == bQuit->id)
|
||||
if (button == &bQuit)
|
||||
{
|
||||
minecraft->quit();
|
||||
}
|
||||
|
||||
@@ -23,10 +23,10 @@ public:
|
||||
bool isInGameScreen();
|
||||
private:
|
||||
|
||||
Button* bHost;
|
||||
Button* bJoin;
|
||||
Button* bOptions;
|
||||
Button* bQuit;
|
||||
Button bHost;
|
||||
Button bJoin;
|
||||
Button bOptions;
|
||||
ImageButton bQuit; // X button in top-right corner
|
||||
|
||||
std::string copyright;
|
||||
int copyrightPosX;
|
||||
|
||||
@@ -35,8 +35,8 @@ void UsernameScreen::setupPositions()
|
||||
// Make the done button match the touch-style option tabs
|
||||
_btnDone.width = 66;
|
||||
_btnDone.height = 26;
|
||||
_btnDone.x = cx - (_btnDone.width / 2);
|
||||
_btnDone.y = cy + 52;
|
||||
_btnDone.x = (width - _btnDone.width) / 2;
|
||||
_btnDone.y = height / 2 + 52;
|
||||
|
||||
tUsername.width = 120;
|
||||
tUsername.height = 20;
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
|
||||
#include "../Screen.h"
|
||||
#include "../components/Button.h"
|
||||
// this is cursed lol
|
||||
#include "../../../client/gui/components/TextBox.h"
|
||||
#include "client/gui/components/TextBox.h"
|
||||
#include <string>
|
||||
|
||||
class UsernameScreen : public Screen
|
||||
|
||||
@@ -16,7 +16,12 @@
|
||||
#include "../../../../world/level/Level.h"
|
||||
#include "../../../../world/item/DyePowderItem.h"
|
||||
#include "../../../../world/item/crafting/Recipe.h"
|
||||
#include "network/RakNetInstance.h"
|
||||
#include "network/packet/WantCreatePacket.h"
|
||||
#include "platform/input/Keyboard.h"
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
static NinePatchLayer* guiPaneFrame = NULL;
|
||||
|
||||
@@ -193,6 +198,26 @@ void PaneCraftingScreen::setupPositions() {
|
||||
}
|
||||
|
||||
void PaneCraftingScreen::tick() {
|
||||
if (minecraft->isOnline()) {
|
||||
// TODO: Make better algorithm
|
||||
static std::map<uint8_t, uint16_t> oldMap = {};
|
||||
std::map<uint8_t, uint16_t> newMap = {};
|
||||
|
||||
for (int i = Inventory::MAX_SELECTION_SIZE; i < minecraft->player->inventory->getContainerSize(); ++i) {
|
||||
auto itm = minecraft->player->inventory->getItem(i);
|
||||
|
||||
if (itm != NULL) {
|
||||
newMap[itm->id] += itm->count;
|
||||
}
|
||||
}
|
||||
|
||||
if (oldMap != newMap) {
|
||||
oldMap = newMap;
|
||||
newMap = {};
|
||||
recheckRecipes();
|
||||
}
|
||||
}
|
||||
|
||||
if (pane) pane->tick();
|
||||
}
|
||||
|
||||
@@ -439,25 +464,29 @@ void PaneCraftingScreen::craftSelectedItem()
|
||||
ItemInstance resultItem = currentItem->item;
|
||||
|
||||
if (minecraft->player) {
|
||||
if (minecraft->isOnline()) {
|
||||
WantCreatePacket packet(minecraft->player->entityId, resultItem.count, resultItem.getAuxValue(), resultItem.id);
|
||||
minecraft->raknetInstance->send(packet);
|
||||
}
|
||||
// Remove all items required for the recipe and ...
|
||||
for (unsigned int i = 0; i < currentItem->neededItems.size(); ++i) {
|
||||
CItem::ReqItem& req = currentItem->neededItems[i];
|
||||
|
||||
// If the recipe allows any aux-value as ingredients, first deplete
|
||||
// aux == 0 from inventory. Since I'm not sure if this always is
|
||||
// correct, let's only do it for ingredient sandstone for now.
|
||||
ItemInstance toRemove = req.item;
|
||||
// If the recipe allows any aux-value as ingredients, first deplete
|
||||
// aux == 0 from inventory. Since I'm not sure if this always is
|
||||
// correct, let's only do it for ingredient sandstone for now.
|
||||
ItemInstance toRemove = req.item;
|
||||
|
||||
if (Tile::sandStone->id == req.item.id
|
||||
&& Recipe::ANY_AUX_VALUE == req.item.getAuxValue()) {
|
||||
toRemove.setAuxValue(0);
|
||||
toRemove.count = minecraft->player->inventory->removeResource(toRemove, true);
|
||||
toRemove.setAuxValue(Recipe::ANY_AUX_VALUE);
|
||||
}
|
||||
if (Tile::sandStone->id == req.item.id
|
||||
&& Recipe::ANY_AUX_VALUE == req.item.getAuxValue()) {
|
||||
toRemove.setAuxValue(0);
|
||||
toRemove.count = minecraft->player->inventory->removeResource(toRemove, true);
|
||||
toRemove.setAuxValue(Recipe::ANY_AUX_VALUE);
|
||||
}
|
||||
|
||||
if (toRemove.count > 0) {
|
||||
minecraft->player->inventory->removeResource(toRemove);
|
||||
}
|
||||
if (toRemove.count > 0) {
|
||||
minecraft->player->inventory->removeResource(toRemove);
|
||||
}
|
||||
}
|
||||
// ... add the new one! (in this order, to fill empty slots better)
|
||||
// if it doesn't fit, throw it on the ground!
|
||||
|
||||
@@ -40,9 +40,10 @@ HumanoidModel::HumanoidModel( float g /*= 0*/, float yOffset /*= 0*/, int texW /
|
||||
head.addBox(-4, -8, -4, 8, 8, 8, g); // Head
|
||||
head.setPos(0, 0 + yOffset, 0);
|
||||
|
||||
hair.addBox(-4, -8, -4, 8, 8, 8, g + 0.5f); // Outer head layer (hat)
|
||||
hair.setPos(0, 0 + yOffset, 0);
|
||||
|
||||
if (modernSkin) {
|
||||
hair.addBox(-4, -8, -4, 8, 8, 8, g + 0.5f); // Outer head layer (hat)
|
||||
hair.setPos(0, 0 + yOffset, 0);
|
||||
}
|
||||
|
||||
body.addBox(-4, 0, -2, 8, 12, 4, g); // Body
|
||||
body.setPos(0, 0 + yOffset, 0);
|
||||
@@ -98,17 +99,17 @@ void HumanoidModel::render(Entity* e, float time, float r, float bob, float yRot
|
||||
setupAnim(time, r, bob, yRot, xRot, scale);
|
||||
|
||||
// Sync overlay with head rotation/position
|
||||
|
||||
hair.xRot = head.xRot;
|
||||
hair.yRot = head.yRot;
|
||||
hair.zRot = head.zRot;
|
||||
hair.y = head.y;
|
||||
|
||||
if (texWidth == 64 && texHeight == 64) {
|
||||
hair.xRot = head.xRot;
|
||||
hair.yRot = head.yRot;
|
||||
hair.zRot = head.zRot;
|
||||
hair.y = head.y;
|
||||
}
|
||||
|
||||
head.render(scale);
|
||||
|
||||
hair.render(scale);
|
||||
|
||||
if (texWidth == 64 && texHeight == 64) {
|
||||
hair.render(scale);
|
||||
}
|
||||
body.render(scale);
|
||||
arm0.render(scale);
|
||||
arm1.render(scale);
|
||||
@@ -122,12 +123,12 @@ void HumanoidModel::render( HumanoidModel* model, float scale )
|
||||
head.yRot = model->head.yRot;
|
||||
head.y = model->head.y;
|
||||
head.xRot = model->head.xRot;
|
||||
|
||||
hair.yRot = head.yRot;
|
||||
hair.xRot = head.xRot;
|
||||
hair.zRot = head.zRot;
|
||||
hair.y = head.y;
|
||||
|
||||
if (texWidth == 64 && texHeight == 64) {
|
||||
hair.yRot = head.yRot;
|
||||
hair.xRot = head.xRot;
|
||||
hair.zRot = head.zRot;
|
||||
hair.y = head.y;
|
||||
}
|
||||
|
||||
arm0.xRot = model->arm0.xRot;
|
||||
arm0.zRot = model->arm0.zRot;
|
||||
@@ -272,7 +273,7 @@ void HumanoidModel::onGraphicsReset()
|
||||
arm1.onGraphicsReset();
|
||||
leg0.onGraphicsReset();
|
||||
leg1.onGraphicsReset();
|
||||
hair.onGraphicsReset();
|
||||
//hair.onGraphicsReset();
|
||||
}
|
||||
|
||||
//void renderHair(float scale) {
|
||||
|
||||
@@ -203,7 +203,7 @@ void ModelPart::compile( float scale )
|
||||
void ModelPart::draw()
|
||||
{
|
||||
#ifdef OPENGL_ES
|
||||
drawArrayVTN_NoState(vboId, cubes.size() * 2 * 3 * 6, 36);
|
||||
drawArrayVT_NoState(vboId, cubes.size() * 2 * 3 * 6, 24);
|
||||
#else
|
||||
glCallList(list);
|
||||
#endif
|
||||
|
||||
@@ -43,18 +43,6 @@ void PolygonQuad::mirror() {
|
||||
}
|
||||
|
||||
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++) {
|
||||
VertexPT& v = vertices[i];
|
||||
t.vertexUV(v.pos.x * scale, v.pos.y * scale, v.pos.z * scale, v.u, v.v);
|
||||
|
||||
@@ -355,11 +355,7 @@ LocalPlayer::LocalPlayer(Minecraft* minecraft, Level* level, const std::string&
|
||||
armorTypeHash(0),
|
||||
sprinting(false),
|
||||
sprintDoubleTapTimer(0),
|
||||
prevForwardHeld(false),
|
||||
xBob(0.0f),
|
||||
yBob(0.0f),
|
||||
xBobO(0.0f),
|
||||
yBobO(0.0f)
|
||||
prevForwardHeld(false)
|
||||
{
|
||||
this->dimension = dimension;
|
||||
_init();
|
||||
@@ -460,7 +456,7 @@ void LocalPlayer::tick() {
|
||||
{
|
||||
sentInventoryItemId = newItemId;
|
||||
sentInventoryItemData = newItemData;
|
||||
PlayerEquipmentPacket packet(entityId, newItemId, newItemData);
|
||||
PlayerEquipmentPacket packet(entityId, newItemId, newItemData, inventory->selected, inventory->getSlot(newItemId, newItemData));
|
||||
minecraft->raknetInstance->send(packet);
|
||||
}
|
||||
}
|
||||
@@ -554,10 +550,6 @@ void LocalPlayer::aiStep() {
|
||||
|
||||
//if (onGround && abilities.flying)
|
||||
// abilities.flying = false;
|
||||
yBobO = yBob;
|
||||
xBobO = xBob;
|
||||
xBob += (xRot - xBob) * 0.5;
|
||||
yBob += (yRot - yBob) * 0.5;
|
||||
|
||||
if (interpolateOnly())
|
||||
updateAi();
|
||||
|
||||
@@ -22,10 +22,6 @@ public:
|
||||
virtual void reset();
|
||||
|
||||
void tick();
|
||||
|
||||
float yBob, xBob; // shredder added from b1.8/4j for the hand swaying animation
|
||||
float yBobO, xBobO; // shredder added from b1.8/4j for the hand swaying animation
|
||||
|
||||
void move(float xa, float ya, float za);
|
||||
|
||||
void aiStep();
|
||||
|
||||
@@ -7,10 +7,6 @@
|
||||
#include "../../world/level/Region.h"
|
||||
#include "../../world/level/chunk/LevelChunk.h"
|
||||
#include "../../util/Mth.h"
|
||||
|
||||
#include "../../world/level/biome/BiomeSource.h"
|
||||
|
||||
#include "../../world/level/Level.h"
|
||||
//#include "../../platform/time.h"
|
||||
|
||||
/*static*/ int Chunk::updates = 0;
|
||||
@@ -263,4 +259,4 @@ void Chunk::resetUpdates()
|
||||
{
|
||||
updates = 0;
|
||||
//swRebuild.reset();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,12 +21,11 @@
|
||||
#include "../../world/item/BowItem.h"
|
||||
#include "../../world/level/tile/LeafTile.h"
|
||||
#include "entity/HumanoidMobRenderer.h"
|
||||
#include "Lighting.h"
|
||||
|
||||
//static StopwatchHandler handler;
|
||||
|
||||
ItemInHandRenderer::ItemInHandRenderer( Minecraft* mc )
|
||||
: mc(mc),
|
||||
: mc(mc),
|
||||
lastSlot(-1),
|
||||
height(0),
|
||||
oHeight(0),
|
||||
@@ -50,47 +49,21 @@ ItemInHandRenderer::ItemInHandRenderer( Minecraft* mc )
|
||||
void ItemInHandRenderer::tick()
|
||||
{
|
||||
oHeight = height;
|
||||
//item.id = 0;
|
||||
item.id = 0;
|
||||
|
||||
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) {
|
||||
item.id = itemInHand->id;
|
||||
item.setAuxValue(itemInHand->getAuxValue());
|
||||
}
|
||||
|
||||
float max = 0.4f;
|
||||
float tHeight = 1;//matches ? 1 : 0;
|
||||
float dd = tHeight - height;
|
||||
if (dd < -max) dd = -max;
|
||||
if (dd > max) dd = max;
|
||||
|
||||
height += dd;
|
||||
if (itemInHand && itemInHand->count > 0) {
|
||||
item.id = itemInHand->id;
|
||||
item.setAuxValue(itemInHand->getAuxValue());
|
||||
}
|
||||
|
||||
float max = 0.4f;
|
||||
float tHeight = 1;//matches ? 1 : 0;
|
||||
float dd = tHeight - height;
|
||||
if (dd < -max) dd = -max;
|
||||
if (dd > max) dd = max;
|
||||
|
||||
height += dd;
|
||||
}
|
||||
|
||||
void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
||||
@@ -119,7 +92,7 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
||||
if(mob != NULL) {
|
||||
itemIcon = mob->getItemInHandIcon(item, 0);
|
||||
}
|
||||
|
||||
|
||||
bool reTesselate(false);
|
||||
if(itemIcon != lastIconRendered && lastItemRendered == itemId)
|
||||
reTesselate = true;
|
||||
@@ -166,9 +139,9 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
||||
float v1 = (vp * 16 + 15.99f) / 256.0f;
|
||||
|
||||
float r = 1.0f;
|
||||
// float xo = 0.0f;
|
||||
// float yo = 0.3f;
|
||||
/*
|
||||
// float xo = 0.0f;
|
||||
// float yo = 0.3f;
|
||||
/*
|
||||
//glEnable2(GL_RESCALE_NORMAL);
|
||||
glTranslatef2(-xo, -yo, 0);
|
||||
float s = 1.5f;
|
||||
@@ -177,28 +150,19 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
||||
glRotatef2(50, 0, 1, 0);
|
||||
glRotatef2(45 + 290, 0, 0, 1);
|
||||
glTranslatef2(-15 / 16.0f, -1 / 16.0f, 0);
|
||||
*/
|
||||
*/
|
||||
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(r, 0, 0, u1, v1);
|
||||
t.vertexUV(r, 1, 0, u1, 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(r, 1, 0 - dd, u1, v0);
|
||||
t.vertexUV(r, 0, 0 - dd, u1, 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++) {
|
||||
float p = i / 16.0f;
|
||||
float uu = u0 + (u1 - u0) * p - 0.5f / 256.0f;
|
||||
@@ -208,7 +172,6 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
||||
t.vertexUV(xx, 1, 0, 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++) {
|
||||
float p = i / 16.0f;
|
||||
float uu = u0 + (u1 - u0) * p - 0.5f / 256.0f;
|
||||
@@ -218,10 +181,6 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
||||
t.vertexUV(xx, 0, 0, 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++) {
|
||||
float p = i / 16.0f;
|
||||
float vv = v1 + (v0 - v1) * p - 0.5f / 256.0f;
|
||||
@@ -231,7 +190,6 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
||||
t.vertexUV(r, yy, 0 - dd, u1, vv);
|
||||
t.vertexUV(0, yy, 0 - dd, u0, vv);
|
||||
}
|
||||
t.normal(0.0f, -1.0f, 0.0f);
|
||||
for (int i = 0; i < 16; i++) {
|
||||
float p = i / 16.0f;
|
||||
float vv = v1 + (v0 - v1) * p - 0.5f / 256.0f;
|
||||
@@ -261,7 +219,7 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
||||
}
|
||||
mc->textures->loadAndBindTexture(renderObject.texture);
|
||||
|
||||
drawArrayVTN_NoState(renderObject.chunk.vboId, renderObject.chunk.vertexCount);
|
||||
drawArrayVT_NoState(renderObject.chunk.vboId, renderObject.chunk.vertexCount);
|
||||
if (renderObject.isFlat)
|
||||
glPopMatrix2();
|
||||
}
|
||||
@@ -269,7 +227,6 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
|
||||
//handler.printEvery(100);
|
||||
}
|
||||
|
||||
|
||||
void ItemInHandRenderer::render( float a )
|
||||
{
|
||||
//return;
|
||||
@@ -280,27 +237,12 @@ void ItemInHandRenderer::render( float a )
|
||||
float h = oHeight + (height - oHeight) * a;
|
||||
Player* player = mc->player;
|
||||
// if (selectedTile==NULL) return;
|
||||
LocalPlayer* localPlayer = (LocalPlayer*)(player);
|
||||
|
||||
float xr = player->xRotO + (player->xRot - player->xRotO) * a; // shredder added for hand swaying
|
||||
|
||||
glPushMatrix2();
|
||||
glRotatef2(player->xRotO + (player->xRot - player->xRotO) * a, 1, 0, 0);
|
||||
glRotatef2(player->yRotO + (player->yRot - player->yRotO) * a, 0, 1, 0);
|
||||
glEnable(GL_RESCALE_NORMAL);
|
||||
Lighting::turnOn(mc);
|
||||
glPopMatrix2();
|
||||
|
||||
if (localPlayer) // shredder added, basically does the hand swaying animation from b1.8
|
||||
{
|
||||
float xrr = localPlayer->xBobO + (localPlayer->xBob - localPlayer->xBobO) * a;
|
||||
float yrr = localPlayer->yBobO + (localPlayer->yBob - localPlayer->yBobO) * a;
|
||||
// 4J - was using player->xRot and yRot directly here rather than interpolating between old & current with a
|
||||
float yr = player->yRotO + (player->yRot - player->yRotO) * a;
|
||||
glRotatef((xr - xrr) * 0.1f, 1, 0, 0);
|
||||
glRotatef((yr - yrr) * 0.1f, 0, 1, 0);
|
||||
}
|
||||
|
||||
float br = mc->level->getBrightness(Mth::floor(player->x), Mth::floor(player->y), Mth::floor(player->z));
|
||||
|
||||
ItemInstance* item;// = selectedItem;
|
||||
@@ -351,7 +293,7 @@ void ItemInHandRenderer::render( float a )
|
||||
glTranslatef2(0.7f * d, -0.65f * d - (1 - h) * 0.6f, -0.9f * d);
|
||||
|
||||
glRotatef2(45, 0, 1, 0);
|
||||
glEnable2(GL_RESCALE_NORMAL);
|
||||
//glEnable2(GL_RESCALE_NORMAL);
|
||||
glRotatef2(-swing3 * 20, 0, 1, 0);
|
||||
glRotatef2(-swing2 * 20, 0, 0, 1);
|
||||
glRotatef2(-swing2 * 80, 1, 0, 0);
|
||||
@@ -388,9 +330,7 @@ void ItemInHandRenderer::render( float a )
|
||||
}
|
||||
glEnableClientState2(GL_VERTEX_ARRAY);
|
||||
glEnableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||
glEnableClientState2(GL_NORMAL_ARRAY);
|
||||
renderItem(player, item);
|
||||
glDisableClientState2(GL_NORMAL_ARRAY);
|
||||
glDisableClientState2(GL_VERTEX_ARRAY);
|
||||
glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||
glPopMatrix2();
|
||||
@@ -409,15 +349,14 @@ void ItemInHandRenderer::render( float a )
|
||||
glTranslatef2(0.8f * d, -0.75f * d - (1 - h) * 0.6f, -0.9f * d);
|
||||
|
||||
glRotatef2(45, 0, 1, 0);
|
||||
// glEnable2(GL_RESCALE_NORMAL);
|
||||
glEnable(GL_NORMALIZE);
|
||||
//glEnable2(GL_RESCALE_NORMAL);
|
||||
glRotatef2(swing2 * 70, 0, 1, 0);
|
||||
glRotatef2(-swing3 * 20, 0, 0, 1);
|
||||
// glRotatef2(-swing2 * 80, 1, 0, 0);
|
||||
|
||||
mc->textures->loadAndBindTexture(player->getTexture());
|
||||
glTranslatef2(-1.0f, +3.6f, +3.5f);
|
||||
glRotatef2(120, 0, 0, 1);
|
||||
glRotatef2(120, 0, 0, 1);
|
||||
glRotatef2(180 + 20, 1, 0, 0);
|
||||
glRotatef2(-90 - 45, 0, 1, 0);
|
||||
glScalef2(1.5f / 24.0f * 16, 1.5f / 24.0f * 16, 1.5f / 24.0f * 16);
|
||||
@@ -430,8 +369,8 @@ void ItemInHandRenderer::render( float a )
|
||||
playerRenderer->renderHand();
|
||||
glPopMatrix2();
|
||||
}
|
||||
glDisable2(GL_RESCALE_NORMAL);
|
||||
Lighting::turnOff();
|
||||
//glDisable2(GL_RESCALE_NORMAL);
|
||||
//Lighting.turnOff();
|
||||
//w.stop();
|
||||
}
|
||||
|
||||
@@ -456,10 +395,10 @@ void ItemInHandRenderer::renderScreenEffect( float a )
|
||||
}
|
||||
}
|
||||
|
||||
if (mc->player->isUnderLiquid(Material::water)) {
|
||||
mc->textures->loadAndBindTexture("misc/water.png");
|
||||
renderWater(a);
|
||||
}
|
||||
// if (mc->player->isUnderLiquid(Material::water)) {
|
||||
//mc->textures->loadAndBindTexture("misc/water.png");
|
||||
// renderWater(a);
|
||||
// }
|
||||
glEnable2(GL_ALPHA_TEST);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,9 +25,6 @@
|
||||
|
||||
#include "../../client/player/LocalPlayer.h"
|
||||
|
||||
#include "../../world/level/GrassColor.h"
|
||||
#include "Lighting.h"
|
||||
|
||||
#ifdef GFX_SMALLER_CHUNKS
|
||||
/* static */ const int LevelRenderer::CHUNK_SIZE = 8;
|
||||
#else
|
||||
@@ -35,7 +32,7 @@
|
||||
#endif
|
||||
|
||||
LevelRenderer::LevelRenderer( Minecraft* mc)
|
||||
: mc(mc),
|
||||
: mc(mc),
|
||||
textures(mc->textures),
|
||||
level(NULL),
|
||||
cullStep(0),
|
||||
@@ -50,7 +47,6 @@ LevelRenderer::LevelRenderer( Minecraft* mc)
|
||||
xMaxChunk(0), yMaxChunk(0), zMaxChunk(0),
|
||||
|
||||
lastViewDistance(-1),
|
||||
lastFogType(-1),
|
||||
|
||||
noEntityRenderFrames(2),
|
||||
totalEntities(0),
|
||||
@@ -77,9 +73,6 @@ LevelRenderer::LevelRenderer( Minecraft* mc)
|
||||
//for (int i = 0; i < numListsOrBuffers; ++i) printf("bufId %d: %d\t", i, chunkBuffers[i]);
|
||||
|
||||
glGenBuffers2(1, &skyBuffer);
|
||||
glGenBuffers2(1, &voidBuffer);
|
||||
glGenBuffers2(1, &starBuffer);
|
||||
generateStars();
|
||||
generateSky();
|
||||
#else
|
||||
int maxChunksWidth = 1024 / CHUNK_SIZE;
|
||||
@@ -98,8 +91,6 @@ LevelRenderer::~LevelRenderer()
|
||||
#ifdef OPENGL_ES
|
||||
glDeleteBuffers(numListsOrBuffers, chunkBuffers);
|
||||
glDeleteBuffers(1, &skyBuffer);
|
||||
glDeleteBuffers(1, &voidBuffer);
|
||||
glDeleteBuffers(1, &starBuffer);
|
||||
delete[] chunkBuffers;
|
||||
#else
|
||||
glDeleteLists(numListsOrBuffers, chunkLists);
|
||||
@@ -127,25 +118,6 @@ void LevelRenderer::generateSky() {
|
||||
}
|
||||
|
||||
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);
|
||||
//glEndList();
|
||||
}
|
||||
@@ -183,24 +155,14 @@ void LevelRenderer::allChanged()
|
||||
Tile::leaves_carried->setFancy(fancy);
|
||||
lastViewDistance = mc->options.getIntValue(OPTIONS_VIEW_DISTANCE);
|
||||
|
||||
lastFogType = mc->options.getIntValue(OPTIONS_FOG_TYPE);
|
||||
|
||||
bool tint = mc->options.getBooleanValue(OPTIONS_FOLIAGE_TINT);
|
||||
FoliageColor::setUseTint(tint);
|
||||
GrassColor::setUseTint(tint);
|
||||
|
||||
bool sideTint = mc->options.getBooleanValue(OPTIONS_TINTED_SIDE);
|
||||
TileRenderer::setUseTint(sideTint);
|
||||
|
||||
|
||||
int dist = (512 >> 3) << (3 - lastViewDistance);
|
||||
if (lastViewDistance <= 2 && mc->isPowerVR())
|
||||
dist = (int)((float)dist * 0.8f);
|
||||
LOGI("last: %d, power: %d\n", lastViewDistance, mc->isPowerVR());
|
||||
|
||||
#if defined(RPI)
|
||||
dist *= 0.6f;
|
||||
#endif
|
||||
#if defined(RPI)
|
||||
dist *= 0.6f;
|
||||
#endif
|
||||
|
||||
if (dist > 400) dist = 400;
|
||||
/*
|
||||
@@ -265,17 +227,17 @@ void LevelRenderer::allChanged()
|
||||
void LevelRenderer::deleteChunks()
|
||||
{
|
||||
for (int z = 0; z < zChunks; ++z)
|
||||
for (int y = 0; y < yChunks; ++y)
|
||||
for (int x = 0; x < xChunks; ++x) {
|
||||
int c = getLinearCoord(x, y, z);
|
||||
delete chunks[c];
|
||||
}
|
||||
for (int y = 0; y < yChunks; ++y)
|
||||
for (int x = 0; x < xChunks; ++x) {
|
||||
int c = getLinearCoord(x, y, z);
|
||||
delete chunks[c];
|
||||
}
|
||||
|
||||
delete[] chunks;
|
||||
chunks = NULL;
|
||||
delete[] chunks;
|
||||
chunks = NULL;
|
||||
|
||||
delete[] sortedChunks;
|
||||
sortedChunks = NULL;
|
||||
delete[] sortedChunks;
|
||||
sortedChunks = NULL;
|
||||
}
|
||||
|
||||
void LevelRenderer::resortChunks( int xc, int yc, int zc )
|
||||
@@ -339,48 +301,6 @@ int LevelRenderer::render( Mob* player, int layer, float alpha )
|
||||
allChanged();
|
||||
}
|
||||
|
||||
int currentFogType = mc->options.getIntValue(OPTIONS_FOG_TYPE);
|
||||
if (currentFogType != lastFogType) {
|
||||
lastFogType = currentFogType;
|
||||
|
||||
if (level && level->dimension) {
|
||||
level->dimension->FogType = currentFogType; // use new fog stuff
|
||||
}
|
||||
|
||||
allChanged();
|
||||
}
|
||||
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");
|
||||
for (int i = 0; i < 10; i++) {
|
||||
chunkFixOffs = (chunkFixOffs + 1) % chunksLength;
|
||||
@@ -568,15 +488,15 @@ void LevelRenderer::render(const AABB& b) const
|
||||
{
|
||||
Tesselator& t = Tesselator::instance;
|
||||
|
||||
// glColor4f2(1, 1, 1, 1);
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
|
||||
// textures->loadAndBindTexture("terrain.png"); // uh need to check java - shredder
|
||||
textures->loadAndBindTexture("terrain.png");
|
||||
|
||||
//t.begin();
|
||||
// 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.color(255, 255, 255, 255);
|
||||
|
||||
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.vertex(b.x0, b.y0, b.z0);
|
||||
t.vertex(b.x1, b.y0, b.z0);
|
||||
@@ -649,11 +569,11 @@ int LevelRenderer::renderChunks( int from, int to, int layer, float alpha )
|
||||
|
||||
for (unsigned int i = 0; i < _renderChunks.size(); ++i) {
|
||||
Chunk* chunk = _renderChunks[i];
|
||||
#ifdef USE_VBO
|
||||
renderList.addR(chunk->getRenderChunk(layer));
|
||||
#else
|
||||
renderList.add(chunk->getList(layer));
|
||||
#endif
|
||||
#ifdef USE_VBO
|
||||
renderList.addR(chunk->getRenderChunk(layer));
|
||||
#else
|
||||
renderList.add(chunk->getList(layer));
|
||||
#endif
|
||||
renderList.next();
|
||||
}
|
||||
|
||||
@@ -804,20 +724,20 @@ bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
|
||||
Chunk* chunk = dirtyChunks[cursor];
|
||||
if (chunk != NULL) {
|
||||
bool remove = false;
|
||||
for (int i = 0; i < count && !remove; i++)
|
||||
if (chunk == toAdd[i]) {
|
||||
remove = true;
|
||||
}
|
||||
for (int i = 0; i < count && !remove; i++)
|
||||
if (chunk == toAdd[i]) {
|
||||
remove = true;
|
||||
}
|
||||
|
||||
if (!remove) {
|
||||
//if (chunk == toAdd[0] || chunk == toAdd[1] || chunk == toAdd[2]) {
|
||||
// ; // this chunk was rendered and should be removed
|
||||
//} else {
|
||||
if (target != cursor) {
|
||||
dirtyChunks[target] = chunk;
|
||||
}
|
||||
target++;
|
||||
if (!remove) {
|
||||
//if (chunk == toAdd[0] || chunk == toAdd[1] || chunk == toAdd[2]) {
|
||||
// ; // this chunk was rendered and should be removed
|
||||
//} else {
|
||||
if (target != cursor) {
|
||||
dirtyChunks[target] = chunk;
|
||||
}
|
||||
target++;
|
||||
}
|
||||
}
|
||||
cursor++;
|
||||
}
|
||||
@@ -991,23 +911,23 @@ bool entityRenderPredicate(const Entity* a, const Entity* b) {
|
||||
}
|
||||
|
||||
void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
|
||||
if (noEntityRenderFrames > 0) {
|
||||
noEntityRenderFrames--;
|
||||
return;
|
||||
}
|
||||
if (noEntityRenderFrames > 0) {
|
||||
noEntityRenderFrames--;
|
||||
return;
|
||||
}
|
||||
|
||||
TIMER_PUSH("prepare");
|
||||
TileEntityRenderDispatcher::getInstance()->prepare(level, textures, mc->font, mc->cameraTargetPlayer, a);
|
||||
EntityRenderDispatcher::getInstance()->prepare(level, mc->font, mc->cameraTargetPlayer, &mc->options, a);
|
||||
TileEntityRenderDispatcher::getInstance()->prepare(level, textures, mc->font, mc->cameraTargetPlayer, a);
|
||||
EntityRenderDispatcher::getInstance()->prepare(level, mc->font, mc->cameraTargetPlayer, &mc->options, a);
|
||||
|
||||
totalEntities = 0;
|
||||
renderedEntities = 0;
|
||||
culledEntities = 0;
|
||||
totalEntities = 0;
|
||||
renderedEntities = 0;
|
||||
culledEntities = 0;
|
||||
|
||||
Entity* player = mc->cameraTargetPlayer;
|
||||
EntityRenderDispatcher::xOff = TileEntityRenderDispatcher::xOff = (player->xOld + (player->x - player->xOld) * a);
|
||||
EntityRenderDispatcher::yOff = TileEntityRenderDispatcher::yOff = (player->yOld + (player->y - player->yOld) * a);
|
||||
EntityRenderDispatcher::zOff = TileEntityRenderDispatcher::zOff = (player->zOld + (player->z - player->zOld) * a);
|
||||
EntityRenderDispatcher::xOff = TileEntityRenderDispatcher::xOff = (player->xOld + (player->x - player->xOld) * a);
|
||||
EntityRenderDispatcher::yOff = TileEntityRenderDispatcher::yOff = (player->yOld + (player->y - player->yOld) * a);
|
||||
EntityRenderDispatcher::zOff = TileEntityRenderDispatcher::zOff = (player->zOld + (player->z - player->zOld) * a);
|
||||
|
||||
glEnableClientState2(GL_VERTEX_ARRAY);
|
||||
glEnableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||
@@ -1046,10 +966,10 @@ void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
|
||||
delete[] toRender;
|
||||
}
|
||||
|
||||
TIMER_POP_PUSH("tileentities");
|
||||
for (unsigned int i = 0; i < level->tileEntities.size(); i++) {
|
||||
TileEntityRenderDispatcher::getInstance()->render(level->tileEntities[i], a);
|
||||
}
|
||||
TIMER_POP_PUSH("tileentities");
|
||||
for (unsigned int i = 0; i < level->tileEntities.size(); i++) {
|
||||
TileEntityRenderDispatcher::getInstance()->render(level->tileEntities[i], a);
|
||||
}
|
||||
|
||||
glDisableClientState2(GL_VERTEX_ARRAY);
|
||||
glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||
@@ -1060,209 +980,50 @@ void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
|
||||
std::string LevelRenderer::gatherStats1() {
|
||||
std::stringstream ss;
|
||||
ss << "C: " << renderedChunks << "/" << totalChunks << ". F: " << offscreenChunks << ", O: " << occludedChunks << ", E: " << emptyChunks << "\n";
|
||||
return ss.str();
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
//
|
||||
std::string LevelRenderer::gatherStats2() {
|
||||
std::stringstream ss;
|
||||
ss << "E: "<< renderedEntities << "/" << totalEntities << ". B: " << culledEntities << ", I: " << (totalEntities - culledEntities) - renderedEntities <<"\n";
|
||||
return ss.str();
|
||||
}
|
||||
// /*public*/ std::string gatherStats2() {
|
||||
// return "E: " + renderedEntities + "/" + totalEntities + ". B: " + culledEntities + ", I: " + ((totalEntities - culledEntities) - renderedEntities);
|
||||
// }
|
||||
//
|
||||
// int[] toRender = new int[50000];
|
||||
// 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) {
|
||||
if (mc->level->dimension->foggy) return;
|
||||
if (mc->level->dimension->foggy) return;
|
||||
|
||||
glDisable2(GL_TEXTURE_2D);
|
||||
Vec3 sc = level->getSkyColor(mc->cameraTargetPlayer, alpha);
|
||||
float sr = (float) sc.x;
|
||||
float sg = (float) sc.y;
|
||||
float sb = (float) sc.z;// + 0.5f;
|
||||
glDisable2(GL_TEXTURE_2D);
|
||||
Vec3 sc = level->getSkyColor(mc->cameraTargetPlayer, alpha);
|
||||
float sr = (float) sc.x;
|
||||
float sg = (float) sc.y;
|
||||
float sb = (float) sc.z;// + 0.5f;
|
||||
|
||||
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) {
|
||||
float srr = (sr * 30.0f + sg * 59.0f + sb * 11.0f) / 100.0f;
|
||||
float sgg = (sr * 30.0f + sg * 70.0f) / (100.0f);
|
||||
float sbb = (sr * 30.0f + sb * 70.0f) / (100.0f);
|
||||
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) {
|
||||
float srr = (sr * 30.0f + sg * 59.0f + sb * 11.0f) / 100.0f;
|
||||
float sgg = (sr * 30.0f + sg * 70.0f) / (100.0f);
|
||||
float sbb = (sr * 30.0f + sb * 70.0f) / (100.0f);
|
||||
|
||||
sr = srr;
|
||||
sg = sgg;
|
||||
sb = sbb;
|
||||
}
|
||||
glColor4f2(sr, sg, Mth::Min(1.0f, sb), 1);
|
||||
sr = srr;
|
||||
sg = sgg;
|
||||
sb = sbb;
|
||||
}
|
||||
glColor4f2(sr, sg, Mth::Min(1.0f, sb), 1);
|
||||
|
||||
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);
|
||||
glColor4f2(sr, sg, sb, 1.0f);
|
||||
//Tesselator& t = Tesselator::instance;
|
||||
|
||||
glEnable2(GL_FOG);
|
||||
glColor4f2(sr, sg, sb, 1.0f);
|
||||
|
||||
#ifdef OPENGL_ES
|
||||
drawArrayVT(skyBuffer, skyVertexCount);
|
||||
#endif
|
||||
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);
|
||||
}
|
||||
glEnable2(GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
void LevelRenderer::renderClouds( float alpha ) {
|
||||
//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);
|
||||
glDisable(GL_CULL_FACE);
|
||||
float yOffs = (float) (mc->player->yOld + (mc->player->y - mc->player->yOld) * alpha);
|
||||
@@ -1272,7 +1033,7 @@ void LevelRenderer::renderClouds( float alpha ) {
|
||||
|
||||
//glBindTexture(GL_TEXTURE_2D, texturesloadTexture("/environment/clouds.png"));
|
||||
textures->loadAndBindTexture("environment/clouds.png");
|
||||
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
@@ -1311,157 +1072,21 @@ void LevelRenderer::renderClouds( float alpha ) {
|
||||
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) {
|
||||
// @todo: deny sounds here if sound is off (rather than waiting 'til SoundEngine)
|
||||
float dd = 16;
|
||||
|
||||
if (volume > 1) dd *= volume;
|
||||
if (mc->cameraTargetPlayer->distanceToSqr(x, y, z) < dd * dd) {
|
||||
mc->soundEngine->play(name, x, y, z, volume, pitch);
|
||||
}
|
||||
if (volume > 1) dd *= volume;
|
||||
if (mc->cameraTargetPlayer->distanceToSqr(x, y, z) < dd * dd) {
|
||||
mc->soundEngine->play(name, x, y, z, volume, pitch);
|
||||
}
|
||||
}
|
||||
|
||||
void LevelRenderer::addParticle(const std::string& name, float x, float y, float z, float xa, float ya, float za, int data) {
|
||||
|
||||
float xd = mc->cameraTargetPlayer->x - x;
|
||||
float yd = mc->cameraTargetPlayer->y - y;
|
||||
float zd = mc->cameraTargetPlayer->z - z;
|
||||
float yd = mc->cameraTargetPlayer->y - y;
|
||||
float zd = mc->cameraTargetPlayer->z - z;
|
||||
float distanceSquared = xd * xd + yd * yd + zd * zd;
|
||||
|
||||
//Particle* p = NULL;
|
||||
@@ -1475,27 +1100,27 @@ void LevelRenderer::addParticle(const std::string& name, float x, float y, float
|
||||
// return;
|
||||
//}
|
||||
|
||||
const float particleDistance = 16;
|
||||
if (distanceSquared > particleDistance * particleDistance) return;
|
||||
const float particleDistance = 16;
|
||||
if (distanceSquared > particleDistance * particleDistance) return;
|
||||
|
||||
//static Stopwatch sw;
|
||||
//sw.start();
|
||||
|
||||
if (name == "bubble") mc->particleEngine->add(new BubbleParticle(level, x, y, z, xa, ya, za));
|
||||
if (name == "bubble") mc->particleEngine->add(new BubbleParticle(level, x, y, z, xa, ya, za));
|
||||
else if (name == "crit") mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za));
|
||||
else if (name == "smoke") mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za));
|
||||
//else if (name == "note") mc->particleEngine->add(new NoteParticle(level, x, y, z, xa, ya, za));
|
||||
else if (name == "explode") mc->particleEngine->add(new ExplodeParticle(level, x, y, z, xa, ya, za));
|
||||
else if (name == "flame") mc->particleEngine->add(new FlameParticle(level, x, y, z, xa, ya, za));
|
||||
else if (name == "lava") mc->particleEngine->add(new LavaParticle(level, x, y, z));
|
||||
//else if (name == "splash") mc->particleEngine->add(new SplashParticle(level, x, y, z, xa, ya, za));
|
||||
//else if (name == "note") mc->particleEngine->add(new NoteParticle(level, x, y, z, xa, ya, za));
|
||||
else if (name == "explode") mc->particleEngine->add(new ExplodeParticle(level, x, y, z, xa, ya, za));
|
||||
else if (name == "flame") mc->particleEngine->add(new FlameParticle(level, x, y, z, xa, ya, za));
|
||||
else if (name == "lava") mc->particleEngine->add(new LavaParticle(level, x, y, z));
|
||||
//else if (name == "splash") mc->particleEngine->add(new SplashParticle(level, x, y, z, xa, ya, za));
|
||||
else if (name == "largesmoke") mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f));
|
||||
else if (name == "reddust") mc->particleEngine->add(new RedDustParticle(level, x, y, z, xa, ya, za));
|
||||
else if (name == "reddust") mc->particleEngine->add(new RedDustParticle(level, x, y, z, xa, ya, za));
|
||||
else if (name == "iconcrack") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]));
|
||||
else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
|
||||
//else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
|
||||
//else if (name == "slime") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::slimeBall));
|
||||
//else if (name == "heart") mc->particleEngine->add(new HeartParticle(level, x, y, z, xa, ya, za));
|
||||
//else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
|
||||
//else if (name == "slime") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::slimeBall));
|
||||
//else if (name == "heart") mc->particleEngine->add(new HeartParticle(level, x, y, z, xa, ya, za));
|
||||
|
||||
//sw.stop();
|
||||
//sw.printEvery(50, "add-particle-string");
|
||||
@@ -1503,53 +1128,53 @@ void LevelRenderer::addParticle(const std::string& name, float x, float y, float
|
||||
|
||||
/*
|
||||
void LevelRenderer::addParticle(ParticleType::Id name, float x, float y, float z, float xa, float ya, float za, int data) {
|
||||
float xd = mc->cameraTargetPlayer->x - x;
|
||||
float yd = mc->cameraTargetPlayer->y - y;
|
||||
float zd = mc->cameraTargetPlayer->z - z;
|
||||
float xd = mc->cameraTargetPlayer->x - x;
|
||||
float yd = mc->cameraTargetPlayer->y - y;
|
||||
float zd = mc->cameraTargetPlayer->z - z;
|
||||
|
||||
const float particleDistance = 16;
|
||||
if (xd * xd + yd * yd + zd * zd > particleDistance * particleDistance) return;
|
||||
const float particleDistance = 16;
|
||||
if (xd * xd + yd * yd + zd * zd > particleDistance * particleDistance) return;
|
||||
|
||||
//static Stopwatch sw;
|
||||
//sw.start();
|
||||
//static Stopwatch sw;
|
||||
//sw.start();
|
||||
|
||||
//Particle* p = NULL;
|
||||
//Particle* p = NULL;
|
||||
|
||||
if (name == ParticleType::bubble) mc->particleEngine->add( new BubbleParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::crit) mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::smoke) mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::explode) mc->particleEngine->add( new ExplodeParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::flame) mc->particleEngine->add( new FlameParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::lava) mc->particleEngine->add( new LavaParticle(level, x, y, z) );
|
||||
else if (name == ParticleType::largesmoke) mc->particleEngine->add( new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f) );
|
||||
else if (name == ParticleType::reddust) mc->particleEngine->add( new RedDustParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::iconcrack) mc->particleEngine->add( new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]) );
|
||||
if (name == ParticleType::bubble) mc->particleEngine->add( new BubbleParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::crit) mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::smoke) mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::explode) mc->particleEngine->add( new ExplodeParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::flame) mc->particleEngine->add( new FlameParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::lava) mc->particleEngine->add( new LavaParticle(level, x, y, z) );
|
||||
else if (name == ParticleType::largesmoke) mc->particleEngine->add( new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f) );
|
||||
else if (name == ParticleType::reddust) mc->particleEngine->add( new RedDustParticle(level, x, y, z, xa, ya, za) );
|
||||
else if (name == ParticleType::iconcrack) mc->particleEngine->add( new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]) );
|
||||
|
||||
//switch (name) {
|
||||
// case ParticleType::bubble: p = new BubbleParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::crit: p = new CritParticle2(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::smoke: p = new SmokeParticle(level, x, y, z, xa, ya, za); break;
|
||||
// //case ParticleType::note: p = new NoteParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::explode: p = new ExplodeParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::flame: p = new FlameParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::lava: p = new LavaParticle(level, x, y, z); break;
|
||||
// //case ParticleType::splash: p = new SplashParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::largesmoke: p = new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f); break;
|
||||
// case ParticleType::reddust: p = new RedDustParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::iconcrack: p = new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]); break;
|
||||
// //case ParticleType::snowballpoof: p = new BreakingItemParticle(level, x, y, z, Item::snowBall); break;
|
||||
// //case ParticleType::slime: p = new BreakingItemParticle(level, x, y, z, Item::slimeBall); break;
|
||||
// //case ParticleType::heart: p = new HeartParticle(level, x, y, z, xa, ya, za); break;
|
||||
// default:
|
||||
// LOGW("Couldn't find particle of type: %d\n", name);
|
||||
// break;
|
||||
//}
|
||||
//if (p) {
|
||||
// mc->particleEngine->add(p);
|
||||
//}
|
||||
//switch (name) {
|
||||
// case ParticleType::bubble: p = new BubbleParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::crit: p = new CritParticle2(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::smoke: p = new SmokeParticle(level, x, y, z, xa, ya, za); break;
|
||||
// //case ParticleType::note: p = new NoteParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::explode: p = new ExplodeParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::flame: p = new FlameParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::lava: p = new LavaParticle(level, x, y, z); break;
|
||||
// //case ParticleType::splash: p = new SplashParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::largesmoke: p = new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f); break;
|
||||
// case ParticleType::reddust: p = new RedDustParticle(level, x, y, z, xa, ya, za); break;
|
||||
// case ParticleType::iconcrack: p = new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]); break;
|
||||
// //case ParticleType::snowballpoof: p = new BreakingItemParticle(level, x, y, z, Item::snowBall); break;
|
||||
// //case ParticleType::slime: p = new BreakingItemParticle(level, x, y, z, Item::slimeBall); break;
|
||||
// //case ParticleType::heart: p = new HeartParticle(level, x, y, z, xa, ya, za); break;
|
||||
// default:
|
||||
// LOGW("Couldn't find particle of type: %d\n", name);
|
||||
// break;
|
||||
//}
|
||||
//if (p) {
|
||||
// mc->particleEngine->add(p);
|
||||
//}
|
||||
|
||||
//sw.stop();
|
||||
//sw.printEvery(50, "add-particle-enum");
|
||||
//sw.stop();
|
||||
//sw.printEvery(50, "add-particle-enum");
|
||||
}
|
||||
*/
|
||||
|
||||
@@ -1567,7 +1192,7 @@ void LevelRenderer::renderHitSelect( Player* player, const HitResult& h, int mod
|
||||
glEnable2(GL_DEPTH_TEST);
|
||||
|
||||
textures->loadAndBindTexture("terrain.png");
|
||||
|
||||
|
||||
int tileId = level->getTile(h.x, h.y, h.z);
|
||||
Tile* tile = tileId > 0 ? Tile::tiles[tileId] : NULL;
|
||||
glDisable2(GL_ALPHA_TEST);
|
||||
@@ -1609,7 +1234,6 @@ void LevelRenderer::renderHitSelect( Player* player, const HitResult& h, int mod
|
||||
|
||||
void LevelRenderer::onGraphicsReset()
|
||||
{
|
||||
generateStars();
|
||||
generateSky();
|
||||
|
||||
// Get new buffers
|
||||
@@ -1665,11 +1289,11 @@ void LevelRenderer::takePicture( TripodCamera* cam, Entity* entity )
|
||||
void LevelRenderer::levelEvent(Player* player, int type, int x, int y, int z, int data) {
|
||||
switch (type) {
|
||||
case LevelEvent::SOUND_OPEN_DOOR:
|
||||
if (Mth::random() < 0.5f) {
|
||||
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_open", 1, level->random.nextFloat() * 0.1f + 0.9f);
|
||||
} else {
|
||||
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_close", 1, level->random.nextFloat() * 0.1f + 0.9f);
|
||||
}
|
||||
break;
|
||||
if (Mth::random() < 0.5f) {
|
||||
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_open", 1, level->random.nextFloat() * 0.1f + 0.9f);
|
||||
} else {
|
||||
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_close", 1, level->random.nextFloat() * 0.1f + 0.9f);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,9 +43,7 @@ public:
|
||||
void renderDebug(const AABB& b, float a) const;
|
||||
|
||||
void renderSky(float alpha);
|
||||
void generateStars();
|
||||
void renderClouds(float alpha);
|
||||
void renderAdvancedClouds(float alpha);
|
||||
void renderEntities(Vec3 cam, Culler* culler, float a);
|
||||
void renderSameAsLast(int layer, float alpha);
|
||||
void renderHit(Player* player, const HitResult& h, int mode, /*ItemInstance*/void* inventoryItem, float a);
|
||||
@@ -69,7 +67,6 @@ public:
|
||||
void levelEvent(Player* source, int type, int x, int y, int z, int data);
|
||||
|
||||
std::string gatherStats1();
|
||||
std::string gatherStats2();
|
||||
|
||||
void render(const AABB& b) const;
|
||||
void onGraphicsReset();
|
||||
@@ -116,12 +113,6 @@ private:
|
||||
bool occlusionCheck;
|
||||
int lastViewDistance;
|
||||
|
||||
// shredder added again...
|
||||
int lastFogType;
|
||||
|
||||
bool LastTint;
|
||||
bool LastSideTint;
|
||||
|
||||
int ticks;
|
||||
int starList, skyList, darkList;
|
||||
|
||||
@@ -130,12 +121,6 @@ private:
|
||||
GLuint skyBuffer;
|
||||
int skyVertexCount;
|
||||
|
||||
GLuint voidBuffer;
|
||||
int voidVertexCount;
|
||||
|
||||
GLuint starBuffer;
|
||||
int starVertexCount;
|
||||
|
||||
// /*public*/ std::vector<TileEntity*> renderableTileEntities;
|
||||
Textures* textures;
|
||||
// /*private*/ TileRenderer tileRenderer;
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
#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);
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
#ifndef NET_MINECRAFT_CLIENT_RENDERER__Lighting_H__
|
||||
#define NET_MINECRAFT_CLIENT_RENDERER__Lighting_H__
|
||||
|
||||
class Minecraft;
|
||||
class Lighting
|
||||
{
|
||||
public:
|
||||
static void turnOff();
|
||||
static void turnOn(Minecraft* minecraft);
|
||||
|
||||
};
|
||||
#endif /*NET_MINECRAFT_CLIENT_RENDERER__Lighting_H__*/
|
||||
@@ -8,7 +8,7 @@ Tesselator Tesselator::instance(sizeof(GLfloat) * MAX_FLOATS); // max size in by
|
||||
const int VertexSizeBytes = sizeof(VERTEX);
|
||||
|
||||
Tesselator::Tesselator( int size )
|
||||
: size(size),
|
||||
: size(size),
|
||||
vertices(0),
|
||||
u(0), v(0),
|
||||
_color(0),
|
||||
@@ -20,7 +20,7 @@ Tesselator::Tesselator( int size )
|
||||
_noColor(false),
|
||||
mode(0),
|
||||
xo(0), yo(0), zo(0),
|
||||
_nx(0), _ny(0), _nz(0),
|
||||
_normal(0),
|
||||
_sx(1), _sy(1),
|
||||
|
||||
tesselating(false),
|
||||
@@ -97,9 +97,9 @@ RenderChunk Tesselator::end( bool useMine, int bufferId )
|
||||
int access = GL_STATIC_DRAW;//(accessMode==ACCESS_DYNAMIC) ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW;
|
||||
glBindBuffer2(GL_ARRAY_BUFFER, bufferId);
|
||||
glBufferData2(GL_ARRAY_BUFFER, bytes, _varray, access); // GL_STREAM_DRAW
|
||||
|
||||
|
||||
totalSize += bytes;
|
||||
|
||||
|
||||
#ifndef USE_VBO
|
||||
// 0 1 2 3 4 5 6 7
|
||||
// x y z u v c
|
||||
@@ -112,7 +112,7 @@ RenderChunk Tesselator::end( bool useMine, int bufferId )
|
||||
glEnableClientState2(GL_COLOR_ARRAY);
|
||||
}
|
||||
if (hasNormal) {
|
||||
glNormalPointer(GL_FLOAT, VertexSizeBytes, (GLvoid*) (6 * 4));
|
||||
glNormalPointer(GL_BYTE, VertexSizeBytes, (GLvoid*) (6 * 4));
|
||||
glEnableClientState2(GL_NORMAL_ARRAY);
|
||||
}
|
||||
glVertexPointer2(3, GL_FLOAT, VertexSizeBytes, 0);
|
||||
@@ -278,11 +278,9 @@ void Tesselator::vertex( float x, float y, float z )
|
||||
if (hasColor) {
|
||||
dst.color = src.color;
|
||||
}
|
||||
if (hasNormal) {
|
||||
dst.nx = src.nx;
|
||||
dst.ny = src.ny;
|
||||
dst.nz = src.nz;
|
||||
}
|
||||
//if (hasNormal) {
|
||||
// dst.normal = src.normal;
|
||||
//}
|
||||
|
||||
dst.x = src.x;
|
||||
dst.y = src.y;
|
||||
@@ -303,11 +301,9 @@ void Tesselator::vertex( float x, float y, float z )
|
||||
if (hasColor) {
|
||||
vertex.color = _color;
|
||||
}
|
||||
if (hasNormal) {
|
||||
vertex.nx = _nx;
|
||||
vertex.ny = _ny;
|
||||
vertex.nz = _nz;
|
||||
}
|
||||
//if (hasNormal) {
|
||||
// vertex.normal = _normal;
|
||||
//}
|
||||
|
||||
vertex.x = _sx * (x + xo);
|
||||
vertex.y = _sy * (y + yo);
|
||||
@@ -336,22 +332,18 @@ void Tesselator::setAccessMode(int mode)
|
||||
|
||||
void Tesselator::normal( float x, float y, float z )
|
||||
{
|
||||
//static int _warn_t = 0;
|
||||
//if ((++_warn_t & 32767) == 1)
|
||||
// LOGI("WARNING: Can't use normals (Tesselator::normal)\n");
|
||||
//return;
|
||||
static int _warn_t = 0;
|
||||
if ((++_warn_t & 32767) == 1)
|
||||
LOGI("WARNING: Can't use normals (Tesselator::normal)\n");
|
||||
return;
|
||||
|
||||
if (!tesselating) printf("But..");
|
||||
hasNormal = true;
|
||||
//char xx = (char) (x * 128);
|
||||
//char yy = (char) (y * 127);
|
||||
//char zz = (char) (z * 127);
|
||||
char xx = (char) (x * 128);
|
||||
char yy = (char) (y * 127);
|
||||
char zz = (char) (z * 127);
|
||||
|
||||
//_normal = xx | (yy << 8) | (zz << 16);
|
||||
// trying a new thing hopefully works
|
||||
this->_nx = x;
|
||||
this->_ny = y;
|
||||
this->_nz = z;
|
||||
_normal = xx | (yy << 8) | (zz << 16);
|
||||
}
|
||||
|
||||
void Tesselator::offset( float xo, float yo, float zo ) {
|
||||
@@ -397,7 +389,7 @@ void Tesselator::draw()
|
||||
vboId = 0;
|
||||
|
||||
int bufferId = vboIds[vboId];
|
||||
|
||||
|
||||
int access = GL_DYNAMIC_DRAW;//(accessMode==ACCESS_DYNAMIC) ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW;
|
||||
glBindBuffer2(GL_ARRAY_BUFFER, bufferId);
|
||||
glBufferData2(GL_ARRAY_BUFFER, bytes, _varray, access); // GL_STREAM_DRAW
|
||||
@@ -412,10 +404,10 @@ void Tesselator::draw()
|
||||
//glColorPointer2(4, GL_UNSIGNED_BYTE, VertexSizeBytes, (GLvoid*) &_varray->color);
|
||||
glEnableClientState2(GL_COLOR_ARRAY);
|
||||
}
|
||||
if (hasNormal) {
|
||||
glNormalPointer(GL_FLOAT, VertexSizeBytes, (GLvoid*) (6 * 4));
|
||||
glEnableClientState2(GL_NORMAL_ARRAY);
|
||||
}
|
||||
//if (hasNormal) {
|
||||
// glNormalPointer(GL_BYTE, VertexSizeBytes, (GLvoid*) (6 * 4));
|
||||
// glEnableClientState2(GL_NORMAL_ARRAY);
|
||||
//}
|
||||
//glVertexPointer2(3, GL_FLOAT, VertexSizeBytes, (GLvoid*)&_varray);
|
||||
glVertexPointer2(3, GL_FLOAT, VertexSizeBytes, 0);
|
||||
glEnableClientState2(GL_VERTEX_ARRAY);
|
||||
@@ -429,7 +421,7 @@ void Tesselator::draw()
|
||||
glDisableClientState2(GL_VERTEX_ARRAY);
|
||||
if (hasTexture) glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||
if (hasColor) glDisableClientState2(GL_COLOR_ARRAY);
|
||||
if (hasNormal) glDisableClientState2(GL_NORMAL_ARRAY);
|
||||
//if (hasNormal) glDisableClientState2(GL_NORMAL_ARRAY);
|
||||
}
|
||||
|
||||
clear();
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
extern const int VertexSizeBytes;
|
||||
|
||||
typedef VertexDeclPTCN VERTEX;
|
||||
typedef VertexDeclPTC VERTEX;
|
||||
typedef std::map<GLuint, GLsizei> IntGLMap;
|
||||
|
||||
|
||||
@@ -98,9 +98,7 @@ private:
|
||||
float xo, yo, zo;
|
||||
float u, v;
|
||||
unsigned int _color;
|
||||
// int _normal; // trying a new thing
|
||||
float _nx, _ny, _nz;
|
||||
|
||||
int _normal;
|
||||
float _sx, _sy;
|
||||
|
||||
bool hasColor;
|
||||
|
||||
@@ -249,37 +249,6 @@ int Textures::crispBlend( int c0, int c1 )
|
||||
return (a << 24) | (r << 16) | (g << 8) | b;
|
||||
}
|
||||
|
||||
// shredder here, moved the code from minecraft.cpp bcus that isnt the right place
|
||||
// had to implement this because i couldn't find a similar function in the code to do this
|
||||
int* Textures::loadTexturePixels(TextureId texId, const std::string& resourceName){
|
||||
|
||||
const TextureData* texture = getTemporaryTextureData(texId); // storing raw pixels
|
||||
|
||||
int size = texture->w * texture->h; // gets the size of our funny lil guy
|
||||
int* pixels = new int[size]; // memory leaks be galore
|
||||
unsigned char* raw = texture->data; // storing raw data into our beloved variable
|
||||
for (int i = 0; i < (texture->w * texture->h); i++){
|
||||
// my head hurts i hate working with this
|
||||
|
||||
|
||||
// uh since each pixel stores r g b a, aka the color channels which are each one byte, we multiply them by 4 to move from one pixel to another
|
||||
|
||||
int r = raw[i * 4 + 0]; // gets us the first channel aka red
|
||||
int g = raw[i * 4 + 1]; // gets us the second channel green
|
||||
int b = raw[i * 4 + 2]; // gets us the third channel blue
|
||||
int a = raw[i * 4 + 3]; // gets us the alpha channel
|
||||
|
||||
// woohoo pixels uh should have been seperated into their colors now hopefully
|
||||
|
||||
// r g b a
|
||||
// ugh we now got to turn it into the AA RR GGBB format aak 0xAARRGGBB
|
||||
// b gets 0 - 7 (8 bits), g gets 7 - 15 (8 bits), r gets 16 - 23 (8 bits), alpha gets the last ones 24 - 31 (8 bits),
|
||||
pixels[i] = (a << 24) | (r << 16) | (g << 8) | (b); // shuld combine them into one 32 bit int unless i did something dumb
|
||||
}
|
||||
return pixels; // your meal has been prepared john colors
|
||||
}
|
||||
|
||||
|
||||
///*public*/ int loadHttpTexture(std::string url, std::string backup) {
|
||||
// HttpTexture texture = httpTextures.get(url);
|
||||
// if (texture != NULL) {
|
||||
|
||||
@@ -44,8 +44,6 @@ public:
|
||||
TextureId assignTexture(const std::string& resourceName, const TextureData& img);
|
||||
const TextureData* getTemporaryTextureData(TextureId id);
|
||||
|
||||
int* loadTexturePixels(TextureId texId, const std::string& resourceName);
|
||||
|
||||
void tick(bool uploadToGraphicsCard);
|
||||
|
||||
void clear();
|
||||
|
||||
@@ -10,7 +10,6 @@ class ThinFenceTile;
|
||||
class StairTile;
|
||||
class LevelSource;
|
||||
class Material;
|
||||
class Minecraft;
|
||||
|
||||
class TileRenderer
|
||||
{
|
||||
@@ -35,8 +34,6 @@ public:
|
||||
bool tesselateFenceGateInWorld(FenceGateTile* tt, int x, int y, int z);
|
||||
bool tesselateBedInWorld(Tile *tt, int x, int y, int z);
|
||||
bool tesselateRowInWorld(Tile* tt, int x, int y, int z);
|
||||
bool tesselateFireInWorld(Tile* tt, int x, int y, int z);
|
||||
|
||||
|
||||
void tesselateTorch(Tile* tt, float x, float y, float z, float xxa, float zza);
|
||||
void tesselateCrossTexture(Tile* tt, int data, float x, float y, float z);
|
||||
@@ -61,10 +58,6 @@ public:
|
||||
void renderTile(Tile* tile, int data);
|
||||
void renderGuiTile(Tile* tile, int data);
|
||||
|
||||
static void setUseTint(bool value) {
|
||||
sideTinting = value;
|
||||
}
|
||||
|
||||
static bool canRender(int renderShape);
|
||||
private:
|
||||
float getWaterHeight(int x, int y, int z, const Material* m);
|
||||
@@ -73,7 +66,6 @@ private:
|
||||
int fixedTexture;
|
||||
bool xFlipTexture;
|
||||
bool noCulling;
|
||||
static bool sideTinting;
|
||||
|
||||
bool applyAmbienceOcclusion;
|
||||
float ll000, llx00, ll0y0, ll00z, llX00, ll0Y0, ll00Z;
|
||||
|
||||
@@ -14,8 +14,7 @@ typedef struct VertexDeclPTCN
|
||||
GLfloat x, y, z;
|
||||
GLfloat u, v;
|
||||
GLuint color;
|
||||
// GLuint normal; // trying a new thing
|
||||
GLfloat nx, ny, nz;
|
||||
GLuint normal;
|
||||
|
||||
} VertexDeclPTCN;
|
||||
|
||||
|
||||
@@ -40,18 +40,18 @@ EntityRenderDispatcher::EntityRenderDispatcher()
|
||||
{
|
||||
//@note: The Models (model/armor) will be deleted by resp. MobRenderer
|
||||
assign( ER_ITEM_RENDERER, new ItemRenderer());
|
||||
assign( ER_HUMANOID_RENDERER, new HumanoidMobRenderer(new HumanoidModel(), 0.5));
|
||||
assign( ER_PIG_RENDERER, new PigRenderer(new PigModel(0.5), NULL/*new PigModel(0.5f)*/, 0.7));
|
||||
assign( ER_COW_RENDERER, new MobRenderer(new CowModel(), 0.7));
|
||||
assign( ER_CHICKEN_RENDERER, new ChickenRenderer( new ChickenModel(), 0.3));
|
||||
assign( ER_SHEEP_RENDERER, new SheepRenderer(new SheepModel(), new SheepFurModel(), 0.7));
|
||||
assign( ER_HUMANOID_RENDERER, new HumanoidMobRenderer(new HumanoidModel(), 0));
|
||||
assign( ER_PIG_RENDERER, new PigRenderer(new PigModel(), NULL/*new PigModel(0.5f)*/, 0));
|
||||
assign( ER_COW_RENDERER, new MobRenderer(new CowModel(), 0));
|
||||
assign( ER_CHICKEN_RENDERER, new ChickenRenderer( new ChickenModel(), 0));
|
||||
assign( ER_SHEEP_RENDERER, new SheepRenderer(new SheepModel(), new SheepFurModel(), 0));
|
||||
assign( ER_SKELETON_RENDERER, new HumanoidMobRenderer(new SkeletonModel(), 0.5f));
|
||||
assign( ER_ZOMBIE_RENDERER, new HumanoidMobRenderer(new ZombieModel(), 0.5f));
|
||||
assign( ER_CREEPER_RENDERER, new CreeperRenderer());
|
||||
assign( ER_SPIDER_RENDERER, new SpiderRenderer());
|
||||
assign( ER_TNT_RENDERER, new TntRenderer());
|
||||
assign( ER_ARROW_RENDERER, new ArrowRenderer());
|
||||
assign( ER_PLAYER_RENDERER, new PlayerRenderer(new HumanoidModel(0, 0, 64, 64), 0.5));
|
||||
assign( ER_PLAYER_RENDERER, new PlayerRenderer(new HumanoidModel(0, 0, 64, 64), 0));
|
||||
assign( ER_THROWNEGG_RENDERER, new ItemSpriteRenderer(Item::egg->getIcon(0)));
|
||||
assign( ER_SNOWBALL_RENDERER, new ItemSpriteRenderer(Item::snowBall->getIcon(0)));
|
||||
assign( ER_PAINTING_RENDERER, new PaintingRenderer());
|
||||
@@ -133,7 +133,7 @@ void EntityRenderDispatcher::render( Entity* entity, float x, float y, float z,
|
||||
EntityRenderer* renderer = getRenderer(entity);
|
||||
if (renderer != NULL) {
|
||||
renderer->render(entity, x, y, z, rot, a);
|
||||
renderer->postRender(entity, x, y, z, rot, a);
|
||||
//renderer->postRender(entity, x, y, z, rot, a);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,18 +5,11 @@
|
||||
#include "../gles.h"
|
||||
#include "../../../world/phys/AABB.h"
|
||||
#include "EntityRenderDispatcher.h"
|
||||
#include "../../../util/Mth.h"
|
||||
#include "../../../world/level/Level.h"
|
||||
#include "../../../world/level/tile/Tile.h"
|
||||
|
||||
#include "../../Minecraft.h"
|
||||
#include "../../Option.h"
|
||||
|
||||
#include "../Lighting.h"
|
||||
EntityRenderDispatcher* EntityRenderer::entityRenderDispatcher = NULL;
|
||||
|
||||
EntityRenderer::EntityRenderer()
|
||||
: shadowRadius(0),
|
||||
: shadowRadius(0),
|
||||
shadowStrength(1.0f)
|
||||
{}
|
||||
|
||||
@@ -43,37 +36,37 @@ void EntityRenderer::render(const AABB& bb, float xo, float yo, float zo) {
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
t.begin();
|
||||
t.offset(xo, yo, zo);
|
||||
t.normal(0, 0, -1);
|
||||
//t.normal(0, 0, -1);
|
||||
t.vertex(bb.x0, bb.y1, bb.z0);
|
||||
t.vertex(bb.x1, bb.y1, bb.z0);
|
||||
t.vertex(bb.x1, bb.y0, bb.z0);
|
||||
t.vertex(bb.x0, bb.y0, bb.z0);
|
||||
|
||||
t.normal(0, 0, 1);
|
||||
//t.normal(0, 0, 1);
|
||||
t.vertex(bb.x0, bb.y0, bb.z1);
|
||||
t.vertex(bb.x1, bb.y0, bb.z1);
|
||||
t.vertex(bb.x1, bb.y1, bb.z1);
|
||||
t.vertex(bb.x0, bb.y1, bb.z1);
|
||||
|
||||
t.normal(0, -1, 0);
|
||||
//t.normal(0, -1, 0);
|
||||
t.vertex(bb.x0, bb.y0, bb.z0);
|
||||
t.vertex(bb.x1, bb.y0, bb.z0);
|
||||
t.vertex(bb.x1, bb.y0, bb.z1);
|
||||
t.vertex(bb.x0, bb.y0, bb.z1);
|
||||
|
||||
t.normal(0, 1, 0);
|
||||
//t.normal(0, 1, 0);
|
||||
t.vertex(bb.x0, bb.y1, bb.z1);
|
||||
t.vertex(bb.x1, bb.y1, bb.z1);
|
||||
t.vertex(bb.x1, bb.y1, bb.z0);
|
||||
t.vertex(bb.x0, bb.y1, bb.z0);
|
||||
|
||||
t.normal(-1, 0, 0);
|
||||
//t.normal(-1, 0, 0);
|
||||
t.vertex(bb.x0, bb.y0, bb.z1);
|
||||
t.vertex(bb.x0, bb.y1, bb.z1);
|
||||
t.vertex(bb.x0, bb.y1, bb.z0);
|
||||
t.vertex(bb.x0, bb.y0, bb.z0);
|
||||
|
||||
t.normal(1, 0, 0);
|
||||
//t.normal(1, 0, 0);
|
||||
t.vertex(bb.x1, bb.y0, bb.z0);
|
||||
t.vertex(bb.x1, bb.y1, bb.z0);
|
||||
t.vertex(bb.x1, bb.y1, bb.z1);
|
||||
@@ -123,214 +116,134 @@ Font* EntityRenderer::getFont() {
|
||||
return entityRenderDispatcher->getFont();
|
||||
}
|
||||
|
||||
void EntityRenderer::postRender(Entity* entity, float x, float y, float z, float rot, float a) {
|
||||
if (/*entityRenderDispatcher.options.fancyGraphics &&*/entityRenderDispatcher->minecraft->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS) && shadowRadius > 0) {
|
||||
float dist = entityRenderDispatcher->distanceToSqr(entity->x, entity->y, entity->z);
|
||||
float pow = (float) ((1 - dist / (16.0f * 16.0f)) * shadowStrength);
|
||||
if (pow > 0) {
|
||||
renderShadow(entity, x, y, z, pow, a);
|
||||
}
|
||||
}
|
||||
if (entity->isOnFire()) renderFlame(entity, x, y, z, a);
|
||||
}
|
||||
// duplicate renderflame below is the pre b1.6.6 way flame rendered on player and mobs, probs gonna make it an option. - shredder
|
||||
/*
|
||||
void EntityRenderer::renderFlame(Entity* e, float x, float y, float z, float a) {
|
||||
glDisable(GL_LIGHTING);
|
||||
int tex = ((Tile*)Tile::fire)->tex;
|
||||
//void postRender(Entity entity, float x, float y, float z, float rot, float a) {
|
||||
// if (entityRenderDispatcher.options.fancyGraphics && shadowRadius > 0) {
|
||||
// float dist = entityRenderDispatcher.distanceToSqr(entity.x, entity.y, entity.z);
|
||||
// float pow = (float) ((1 - dist / (16.0f * 16.0f)) * shadowStrength);
|
||||
// if (pow > 0) {
|
||||
// renderShadow(entity, x, y, z, pow, a);
|
||||
// }
|
||||
// }
|
||||
// if (entity.isOnFire()) renderFlame(entity, x, y, z, a);
|
||||
//}
|
||||
|
||||
int xt = (tex & 0xf) << 4;
|
||||
int yt = tex & 0xf0;
|
||||
//void renderFlame(Entity e, float x, float y, float z, float a) {
|
||||
// glDisable2(GL_LIGHTING);
|
||||
// int tex = Tile.fire.tex;
|
||||
|
||||
float u0 = (xt) / 256.0f;
|
||||
float u1 = (xt + 15.99f) / 256.0f;
|
||||
float v0 = (yt) / 256.0f;
|
||||
float v1 = (yt + 15.99f) / 256.0f;
|
||||
// int xt = (tex & 0xf) << 4;
|
||||
// int yt = tex & 0xf0;
|
||||
|
||||
glPushMatrix2();
|
||||
glTranslatef2((float) x, (float) y, (float) z);
|
||||
// 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 s = e->bbWidth * 1.4f;
|
||||
glScalef2(s, s, s);
|
||||
bindTexture("terrain.png");
|
||||
Tesselator& t = Tesselator::instance;
|
||||
// glPushMatrix2();
|
||||
// glTranslatef2((float) x, (float) y, (float) z);
|
||||
|
||||
float r = 1.0f;
|
||||
float xo = 0.5f;
|
||||
float yo = 0.0f;
|
||||
// float s = e.bbWidth * 1.4f;
|
||||
// glScalef2(s, s, s);
|
||||
// bindTexture("terrain.png");
|
||||
// Tesselator t = Tesselator.instance;
|
||||
|
||||
float h = e->bbHeight / e->bbWidth;
|
||||
// float r = 1.0f;
|
||||
// float xo = 0.5f;
|
||||
// float yo = 0.0f;
|
||||
|
||||
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);
|
||||
}
|
||||
*/
|
||||
// new renderflame ported from b1.6.6, fixes player height offset and also uses the newer style - shredder
|
||||
void EntityRenderer::renderFlame(Entity* e, float x, float y, float z, float a) {
|
||||
glDisable(GL_LIGHTING);
|
||||
int tex = ((Tile*)Tile::fire)->tex;
|
||||
// float h = e.bbHeight / e.bbWidth;
|
||||
|
||||
int xt = (tex & 0xf) << 4;
|
||||
int yt = tex & 0xf0;
|
||||
// glRotatef2(-entityRenderDispatcher.playerRotY, 0, 1, 0);
|
||||
// glTranslatef2(0, 0, -0.4f + ((int) h) * 0.02f);
|
||||
// glColor4f2(1, 1, 1, 1);
|
||||
// // glRotatef2(-playerRotX, 1, 0, 0);
|
||||
// t.begin();
|
||||
// while (h > 0) {
|
||||
// t.vertexUV(r - xo, 0 - yo, 0, u1, v1);
|
||||
// t.vertexUV(0 - xo, 0 - yo, 0, u0, v1);
|
||||
// t.vertexUV(0 - xo, 1.4f - yo, 0, u0, v0);
|
||||
// t.vertexUV(r - xo, 1.4f - yo, 0, u1, v0);
|
||||
// h -= 1;
|
||||
// yo -= 1;
|
||||
// r *= 0.9f;
|
||||
// glTranslatef2(0, 0, -0.04f);
|
||||
// }
|
||||
// t.end();
|
||||
// glPopMatrix2();
|
||||
// glEnable2(GL_LIGHTING);
|
||||
//}
|
||||
|
||||
float u0 = (xt) / 256.0f;
|
||||
float u1 = (xt + 15.99f) / 256.0f;
|
||||
float v0 = (yt) / 256.0f;
|
||||
float v1 = (yt + 15.99f) / 256.0f;
|
||||
//void renderShadow(Entity e, float x, float y, float z, float pow, float a) {
|
||||
// glEnable2(GL_BLEND);
|
||||
// glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
glPushMatrix2();
|
||||
glTranslatef2((float) x, (float) y, (float) z);
|
||||
// Textures textures = entityRenderDispatcher.textures;
|
||||
// textures.bind(textures.loadTexture("%clamp%/misc/shadow.png"));
|
||||
|
||||
float s = e->bbWidth * 1.4f;
|
||||
glScalef2(s, s, s);
|
||||
bindTexture("terrain.png");
|
||||
Tesselator& t = Tesselator::instance;
|
||||
// Level level = getLevel();
|
||||
|
||||
float r = 0.5f;
|
||||
float xo = 0.0f;
|
||||
// glDepthMask(false);
|
||||
// float r = shadowRadius;
|
||||
|
||||
float h = e->bbHeight / s;
|
||||
float yo = (float)(e->y - e->bb.y0) / s;
|
||||
// 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;
|
||||
|
||||
glRotatef2(-entityRenderDispatcher->playerRotY, 0, 1, 0);
|
||||
glTranslatef2(0, 0, -0.3f + ((int) h) * 0.02f);
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
|
||||
float zo = 0.0f;
|
||||
int cycle_counter = 0;
|
||||
// int x0 = Mth.floor(ex - r);
|
||||
// int x1 = Mth.floor(ex + r);
|
||||
// int y0 = Mth.floor(ey - r);
|
||||
// int y1 = Mth.floor(ey);
|
||||
// int z0 = Mth.floor(ez - r);
|
||||
// int z1 = Mth.floor(ez + r);
|
||||
|
||||
t.begin();
|
||||
while (h > 0.0f) {
|
||||
float current_u0 = u0;
|
||||
float current_u1 = u1;
|
||||
float current_v0 = v0;
|
||||
float current_v1 = v1;
|
||||
// float xo = x - ex;
|
||||
// float yo = y - ey;
|
||||
// float zo = z - ez;
|
||||
|
||||
if (cycle_counter % 2 != 0) {
|
||||
current_v0 = (yt + 16) / 256.0f;
|
||||
current_v1 = (yt + 16 + 15.99f) / 256.0f;
|
||||
}
|
||||
// Tesselator tt = Tesselator.instance;
|
||||
// tt.begin();
|
||||
// for (int xt = x0; xt <= x1; xt++)
|
||||
// for (int yt = y0; yt <= y1; yt++)
|
||||
// for (int zt = z0; zt <= z1; zt++) {
|
||||
// int t = level.getTile(xt, yt - 1, zt);
|
||||
// if (t > 0 && level.getRawBrightness(xt, yt, zt) > 3) {
|
||||
// renderTileShadow(Tile.tiles[t], x, y + e.getShadowHeightOffs(), z, xt, yt, zt, pow, r, xo, yo + e.getShadowHeightOffs(), zo);
|
||||
// }
|
||||
// }
|
||||
// tt.end();
|
||||
|
||||
if ((cycle_counter / 2) % 2 == 0) {
|
||||
float tmp = current_u1;
|
||||
current_u1 = current_u0;
|
||||
current_u0 = tmp;
|
||||
}
|
||||
// glColor4f2(1, 1, 1, 1);
|
||||
// glDisable2(GL_BLEND);
|
||||
// glDepthMask(true);
|
||||
//}
|
||||
|
||||
t.vertexUV(r - xo, 0.0f - yo, zo, current_u1, current_v1);
|
||||
t.vertexUV(-r - xo, 0.0f - yo, zo, current_u0, current_v1);
|
||||
t.vertexUV(-r - xo, 1.4f - yo, zo, current_u0, current_v0);
|
||||
t.vertexUV(r - xo, 1.4f - yo, zo, current_u1, current_v0);
|
||||
|
||||
h -= 0.45f;
|
||||
yo -= 0.45f;
|
||||
r *= 0.9f;
|
||||
zo += 0.03f;
|
||||
cycle_counter++;
|
||||
}
|
||||
t.draw();
|
||||
|
||||
glPopMatrix2();
|
||||
glEnable2(GL_LIGHTING);
|
||||
}
|
||||
//Level* getLevel() {
|
||||
// return entityRenderDispatcher.level;
|
||||
//}
|
||||
|
||||
void EntityRenderer::renderShadow(Entity* e, float x, float y, float z, float pow, float a) { //
|
||||
glEnable2(GL_BLEND);
|
||||
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
//void renderTileShadow(Tile tt, float x, float y, float z, int xt, int yt, int zt, float pow, float r, float xo, float yo, float zo) {
|
||||
// Tesselator t = Tesselator.instance;
|
||||
// if (!tt.isCubeShaped()) return;
|
||||
|
||||
//Textures* textures = entityRenderDispatcher->textures;
|
||||
//textures->bind(textures->loadTexture("%clamp%/environment/shadow.png"));
|
||||
Textures* textures = entityRenderDispatcher->textures;
|
||||
textures->loadAndBindTexture("/misc/shadow.png");
|
||||
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
// float a = ((pow - (y - (yt + yo)) / 2) * 0.5f) * getLevel().getBrightness(xt, yt, zt);
|
||||
// if (a < 0) return;
|
||||
// if (a > 1) a = 1;
|
||||
// t.color(1, 1, 1, (float) a);
|
||||
// // glColor4f2(1, 1, 1, (float) a);
|
||||
|
||||
// float x0 = xt + tt.xx0 + xo;
|
||||
// float x1 = xt + tt.xx1 + xo;
|
||||
// float y0 = yt + tt.yy0 + yo + 1.0 / 64.0f;
|
||||
// float z0 = zt + tt.zz0 + zo;
|
||||
// float z1 = zt + tt.zz1 + zo;
|
||||
|
||||
// float u0 = (float) ((x - (x0)) / 2 / r + 0.5f);
|
||||
// float u1 = (float) ((x - (x1)) / 2 / r + 0.5f);
|
||||
// float v0 = (float) ((z - (z0)) / 2 / r + 0.5f);
|
||||
// float v1 = (float) ((z - (z1)) / 2 / r + 0.5f);
|
||||
|
||||
Level* level = getLevel();
|
||||
|
||||
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);
|
||||
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;
|
||||
float yo = y - ey;
|
||||
float zo = z - ez;
|
||||
|
||||
Tesselator& tt = Tesselator::instance;
|
||||
tt.begin();
|
||||
for (int xt = x0; xt <= x1; xt++)
|
||||
for (int yt = y0; yt <= y1; yt++)
|
||||
for (int zt = z0; zt <= z1; zt++) {
|
||||
int t = level->getTile(xt, yt - 1, zt);
|
||||
if (t > 0 && level->getRawBrightness(xt, yt, zt) > 3) {
|
||||
renderTileShadow(Tile::tiles[t], x, y + e->getShadowHeightOffs(), z, xt, yt, zt, pow, r, xo, yo + e->getShadowHeightOffs(), zo);
|
||||
}
|
||||
}
|
||||
tt.draw();
|
||||
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
glDisable2(GL_BLEND);
|
||||
glDepthMask(true);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||
}
|
||||
|
||||
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);
|
||||
glColor4f2(1, 1, 1, (float) a);
|
||||
|
||||
float x0 = xt + tt->xx0 + xo;
|
||||
float x1 = xt + tt->xx1 + xo;
|
||||
float y0 = yt + tt->yy0 + yo + 1.0 / 64.0f;
|
||||
float z0 = zt + tt->zz0 + zo;
|
||||
float z1 = zt + tt->zz1 + zo;
|
||||
|
||||
float u0 = (float) ((x - (x0)) / 2 / r + 0.5f);
|
||||
float u1 = (float) ((x - (x1)) / 2 / r + 0.5f);
|
||||
float v0 = (float) ((z - (z0)) / 2 / r + 0.5f);
|
||||
float v1 = (float) ((z - (z1)) / 2 / r + 0.5f);
|
||||
|
||||
t.vertexUV(x0, y0, z0, u0, v0);
|
||||
t.vertexUV(x0, y0, z1, u0, v1);
|
||||
t.vertexUV(x1, y0, z1, u1, v1);
|
||||
t.vertexUV(x1, y0, z0, u1, v0);
|
||||
}
|
||||
// t.vertexUV(x0, y0, z0, u0, v0);
|
||||
// t.vertexUV(x0, y0, z1, u0, v1);
|
||||
// t.vertexUV(x1, y0, z1, u1, v1);
|
||||
// t.vertexUV(x1, y0, z0, u1, v0);
|
||||
//}
|
||||
|
||||
@@ -12,8 +12,6 @@ class EntityRenderDispatcher;
|
||||
class Entity;
|
||||
class AABB;
|
||||
class Font;
|
||||
class Tile;
|
||||
class Level;
|
||||
|
||||
class EntityRenderer
|
||||
{
|
||||
@@ -26,11 +24,6 @@ public:
|
||||
virtual void render(Entity* entity, float x, float y, float z, float rot, float a) = 0;
|
||||
static void render(const AABB& bb, float xo, float yo, float zo);
|
||||
static void renderFlat(const AABB& bb);
|
||||
void renderShadow(Entity* e, float x, float y, float z, float pow, float a);
|
||||
void renderTileShadow(Tile* tt, float x, float y, float z, int xt, int yt, int zt, float pow, float r, float xo, float yo, float zo);
|
||||
void renderFlame(Entity* e, float x, float y, float z, float a);
|
||||
void postRender(Entity* entity, float x, float y, float z, float rot, float a);
|
||||
Level* getLevel();
|
||||
|
||||
Font* getFont();
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ void ItemRenderer::render(Entity* itemEntity_, float x, float y, float z, float
|
||||
else if (item->count > 1) count = 2;
|
||||
|
||||
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())) {
|
||||
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);
|
||||
t.begin();
|
||||
t.normal(0, 1, 0);
|
||||
//t.normal(0, 1, 0);
|
||||
t.vertexUV(0 - xo, 0 - yo, 0, u0, v1);
|
||||
t.vertexUV(r - xo, 0 - yo, 0, u1, v1);
|
||||
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();
|
||||
}
|
||||
}
|
||||
glDisable2(GL_RESCALE_NORMAL);
|
||||
//glDisable2(GL_RESCALE_NORMAL);
|
||||
glPopMatrix2();
|
||||
}
|
||||
|
||||
@@ -226,42 +226,7 @@ void ItemRenderer::renderGuiItem(Font* font, Textures* textures, const ItemInsta
|
||||
t.draw();
|
||||
}
|
||||
|
||||
|
||||
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.
|
||||
void ItemRenderer::renderGuiItemDecorations(const ItemInstance* item, float x, float y) {
|
||||
if (!item) return;
|
||||
if (item->count > 0 && item->isDamaged()) {
|
||||
float p = std::floor(13.5f - (float) item->getDamageValue() * 13.0f / (float) item->getMaxDamage());
|
||||
|
||||
@@ -22,7 +22,7 @@ public:
|
||||
static void renderGuiItem(Font* font, Textures* textures, const ItemInstance* item, float x, float y, bool fancy);
|
||||
static void renderGuiItem(Font* font, Textures* textures, const ItemInstance* item, float x, float y, float w, float h, bool fancy);
|
||||
static void renderGuiItemCorrect(Font* font, Textures* textures, const ItemInstance* item, int x, int y);
|
||||
static void renderGuiItemDecorations(Font* font, Textures* textures, ItemInstance* item, int x, int y);
|
||||
//void renderGuiItemDecorations(Font* font, Textures* textures, ItemInstance* item, int x, int y);
|
||||
static void renderGuiItemDecorations(const ItemInstance* item, float x, float y);
|
||||
|
||||
static void blit(float x, float y, float sx, float sy, float w, float h);
|
||||
|
||||
@@ -135,7 +135,7 @@ void MobRenderer::render(Entity* e, float x, float y, float z, float rot, float
|
||||
//glEnable2(GL_DEPTH_TEST);
|
||||
|
||||
glPopMatrix2();
|
||||
postRender(mob, x, y, z, rot, a);
|
||||
|
||||
renderName(mob, x, y, z);
|
||||
}
|
||||
|
||||
@@ -187,12 +187,10 @@ void MobRenderer::scale(Mob* mob, float a) {
|
||||
}
|
||||
|
||||
void MobRenderer::renderName(Mob* mob, float x, float y, float z) {
|
||||
|
||||
/*
|
||||
std::stringstream ss; ss << mob->entityId;
|
||||
if (entityRenderDispatcher->minecraft->options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||
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) {
|
||||
@@ -207,19 +205,13 @@ void MobRenderer::renderNameTag(Mob* mob, const std::string& name, float x, floa
|
||||
float s = 1 / 60.0f * size;
|
||||
|
||||
glPushMatrix2();
|
||||
if (mob->isPlayer()){
|
||||
glTranslatef2((float) x + 0, (float) y + 1.0f, (float) z);
|
||||
} else {
|
||||
glTranslatef2((float) x + 0, (float) y + 2.3f, (float) z);
|
||||
}
|
||||
glTranslatef2((float) x + 0, (float) y + 1.0f /*2.3f*/, (float) z);
|
||||
|
||||
glRotatef2(-entityRenderDispatcher->playerRotY, 0, 1, 0);
|
||||
glRotatef2(entityRenderDispatcher->playerRotX, 1, 0, 0);
|
||||
|
||||
glScalef2(-s, -s, s);
|
||||
|
||||
glDisable(GL_LIGHTING);
|
||||
|
||||
glDepthMask(false);
|
||||
glDisable2(GL_DEPTH_TEST);
|
||||
glEnable2(GL_BLEND);
|
||||
@@ -243,7 +235,6 @@ void MobRenderer::renderNameTag(Mob* mob, const std::string& name, float x, floa
|
||||
|
||||
glDepthMask(true);
|
||||
font->draw(name, (float) fnameWidth, 0, 0xffffffff);
|
||||
glEnable(GL_LIGHTING);
|
||||
glDisable2(GL_BLEND);
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
glPopMatrix2();
|
||||
|
||||
@@ -9,7 +9,7 @@ void PaintingRenderer::render( Entity* entity, float x, float y, float z, float
|
||||
glPushMatrix();
|
||||
glTranslatef(float(x), float(y), float(z));
|
||||
glRotatef(rot, 0, 1.0f, 0);
|
||||
glEnable(GL_RESCALE_NORMAL);
|
||||
//glEnable(GL_RESCALE_NORMAL);
|
||||
bindTexture("art/kz.png");
|
||||
Painting* painting = (Painting*)entity;
|
||||
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;
|
||||
glScalef(s, s, s);
|
||||
renderPainting(painting, motive->w, motive->h, motive->uo, motive->vo, a);
|
||||
glDisable(GL_RESCALE_NORMAL);
|
||||
//glDisable(GL_RESCALE_NORMAL);
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
|
||||
@@ -77,10 +77,10 @@ void PlayerRenderer::render(Entity* mob_, float x, float y, float z, float rot,
|
||||
model = desired;
|
||||
humanoidModel = desired;
|
||||
}
|
||||
// LOGI("[PlayerRenderer] %s: skin=%s, modelTex=%dx%d, desired=%s\n", // don't log it always, only for debug - shredder
|
||||
// ((Player*)mob)->name.c_str(), mob->getTexture().c_str(),
|
||||
// humanoidModel->texWidth, humanoidModel->texHeight,
|
||||
// (desired == playerModel64 ? "64" : "32"));
|
||||
/* LOGI("[PlayerRenderer] %s: skin=%s, modelTex=%dx%d, desired=%s\n",
|
||||
((Player*)mob)->name.c_str(), mob->getTexture().c_str(),
|
||||
humanoidModel->texWidth, humanoidModel->texHeight,
|
||||
(desired == playerModel64 ? "64" : "32")); */
|
||||
HumanoidMobRenderer::render(mob_, x, y, z, rot, a);
|
||||
}
|
||||
|
||||
|
||||
@@ -115,41 +115,6 @@ void drawArrayVTC_NoState(int bufferId, int vertices, int vertexSize /* = 24 */)
|
||||
}
|
||||
#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
|
||||
|
||||
|
||||
|
||||
@@ -4,25 +4,21 @@
|
||||
#include "../../platform/log.h"
|
||||
#include "../Options.h"
|
||||
|
||||
#if defined(__APPLE__)
|
||||
#define GLES_SILENCE_DEPRECATION
|
||||
#endif
|
||||
|
||||
// Android should always run OPENGL_ES
|
||||
#if defined(ANDROID) || defined(__APPLE__) || defined(RPI)
|
||||
#define OPENGL_ES
|
||||
#endif
|
||||
#define GLES_SILENCE_DEPRECATION
|
||||
|
||||
// Other systems might run it, if they #define OPENGL_ES
|
||||
// #if defined(OPENGL_ES) // || defined(ANDROID)
|
||||
#define USE_VBO
|
||||
#define GL_QUADS 0x0007
|
||||
#if defined(__APPLE__)
|
||||
#import <OpenGLES/ES1/gl.h>
|
||||
#import <OpenGLES/ES1/glext.h>
|
||||
#import <OpenGLES/ES1/gl.height>
|
||||
#import <OpenGLES/ES1/glext.height>
|
||||
#elif defined(ANDROID) || defined(__EMSCRIPTEN__)
|
||||
#import <GLES/gl.h>
|
||||
#import <GLES/glext.h>
|
||||
#include <GLES/gl.h>
|
||||
#include <GLES/glext.h>
|
||||
#else
|
||||
#include <glad/glad.h>
|
||||
|
||||
@@ -59,18 +55,13 @@ void anGenBuffers(GLsizei n, GLuint* buffer);
|
||||
#ifdef USE_VBO
|
||||
#define drawArrayVT_NoState drawArrayVT
|
||||
#define drawArrayVTC_NoState drawArrayVTC
|
||||
#define drawArrayVTN_NoState drawArrayVTN
|
||||
void drawArrayVT(int bufferId, int vertices, int vertexSize = 36, unsigned int mode = GL_TRIANGLES);
|
||||
void drawArrayVT(int bufferId, int vertices, int vertexSize = 24, unsigned int mode = GL_TRIANGLES);
|
||||
#ifndef drawArrayVT_NoState
|
||||
//void drawArrayVT_NoState(int bufferId, int vertices, int vertexSize = 36);
|
||||
//void drawArrayVT_NoState(int bufferId, int vertices, int vertexSize = 24);
|
||||
#endif
|
||||
void drawArrayVTC(int bufferId, int vertices, int vertexSize = 36);
|
||||
void drawArrayVTC(int bufferId, int vertices, int vertexSize = 24);
|
||||
#ifndef drawArrayVTC_NoState
|
||||
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);
|
||||
void drawArrayVTC_NoState(int bufferId, int vertices, int vertexSize = 24);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -123,7 +114,6 @@ int glhUnProjectf( float winx, float winy, float winz,
|
||||
#define glVertexPointer2 glVertexPointer
|
||||
#define glColorPointer2 glColorPointer
|
||||
#define glTexCoordPointer2 glTexCoordPointer
|
||||
#define glNormalPointer2 glNormalPointer
|
||||
#define glEnableClientState2 glEnableClientState
|
||||
#define glDisableClientState2 glDisableClientState
|
||||
#define glDrawArrays2 glDrawArrays
|
||||
@@ -147,7 +137,7 @@ int glhUnProjectf( float winx, float winy, float winz,
|
||||
//
|
||||
// Extensions
|
||||
//
|
||||
#ifdef WIN32
|
||||
#ifdef WIN32
|
||||
#define glGetProcAddress(a) wglGetProcAddress(a)
|
||||
#else
|
||||
#define glGetProcAddress(a) (void*(0))
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// DynamicTexture
|
||||
//
|
||||
DynamicTexture::DynamicTexture(int tex_)
|
||||
: tex(tex_),
|
||||
: tex(tex_),
|
||||
replicate(1)
|
||||
{
|
||||
memset(pixels, 0, 16*16*4);
|
||||
@@ -29,8 +29,8 @@ void DynamicTexture::bindTexture(Textures* tex) {
|
||||
/*
|
||||
WaterTexture::WaterTexture()
|
||||
: super(Tile::water->tex),
|
||||
_tick(0),
|
||||
_frame(0)
|
||||
_tick(0),
|
||||
_frame(0)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ void WaterTexture::tick() {
|
||||
*/
|
||||
|
||||
WaterTexture::WaterTexture()
|
||||
: super(Tile::water->tex),
|
||||
: super(Tile::water->tex),
|
||||
_tick(0),
|
||||
_frame(0)
|
||||
{
|
||||
@@ -76,55 +76,55 @@ void WaterTexture::tick()
|
||||
next[x + y * 16] = pow / 3.3f + heat[x + y * 16] * 0.8f;
|
||||
}
|
||||
|
||||
for (int x = 0; x < 16; x++)
|
||||
for (int y = 0; y < 16; y++) {
|
||||
heat[x + y * 16] += heata[x + y * 16] * 0.05f;
|
||||
for (int x = 0; x < 16; x++)
|
||||
for (int y = 0; y < 16; y++) {
|
||||
heat[x + y * 16] += heata[x + y * 16] * 0.05f;
|
||||
|
||||
if (heat[x + y * 16] < 0) heat[x + y * 16] = 0;
|
||||
heata[x + y * 16] -= 0.1f;
|
||||
if (Mth::random() < 0.05f) {
|
||||
heata[x + y * 16] = 0.5f;
|
||||
}
|
||||
if (heat[x + y * 16] < 0) heat[x + y * 16] = 0;
|
||||
heata[x + y * 16] -= 0.1f;
|
||||
if (Mth::random() < 0.05f) {
|
||||
heata[x + y * 16] = 0.5f;
|
||||
}
|
||||
}
|
||||
|
||||
float* tmp = next;
|
||||
next = current;
|
||||
current = tmp;
|
||||
float* tmp = next;
|
||||
next = current;
|
||||
current = tmp;
|
||||
|
||||
for (int i = 0; i < 256; i++) {
|
||||
float pow = current[i];
|
||||
if (pow > 1) pow = 1;
|
||||
if (pow < 0) pow = 0;
|
||||
for (int i = 0; i < 256; i++) {
|
||||
float pow = current[i];
|
||||
if (pow > 1) pow = 1;
|
||||
if (pow < 0) pow = 0;
|
||||
|
||||
float pp = pow * pow;
|
||||
float pp = pow * pow;
|
||||
|
||||
int r = (int) (32 + pp * 32);
|
||||
int g = (int) (50 + pp * 64);
|
||||
int b = (int) (255);
|
||||
int a = (int) (146 + pp * 50);
|
||||
int r = (int) (32 + pp * 32);
|
||||
int g = (int) (50 + pp * 64);
|
||||
int b = (int) (255);
|
||||
int a = (int) (146 + pp * 50);
|
||||
|
||||
//if (anaglyph3d) {
|
||||
// int rr = (r * 30 + g * 59 + b * 11) / 100;
|
||||
// int gg = (r * 30 + g * 70) / (100);
|
||||
// int bb = (r * 30 + b * 70) / (100);
|
||||
//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;
|
||||
//}
|
||||
// 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;
|
||||
}
|
||||
pixels[i * 4 + 0] = r;
|
||||
pixels[i * 4 + 1] = g;
|
||||
pixels[i * 4 + 2] = b;
|
||||
pixels[i * 4 + 3] = a;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// WaterSideTexture
|
||||
//
|
||||
WaterSideTexture::WaterSideTexture()
|
||||
: super(Tile::water->tex + 1),
|
||||
: super(Tile::water->tex + 1),
|
||||
_tick(0),
|
||||
_frame(0),
|
||||
_tickCount(0)
|
||||
@@ -164,321 +164,45 @@ void WaterSideTexture::tick() {
|
||||
next[x + y * 16] = pow / 3.2f + heat[x + y * 16] * 0.8f;
|
||||
}
|
||||
|
||||
for (int x = 0; x < 16; x++)
|
||||
for (int y = 0; y < 16; y++) {
|
||||
heat[x + y * 16] += heata[x + y * 16] * 0.05f;
|
||||
|
||||
if (heat[x + y * 16] < 0) heat[x + y * 16] = 0;
|
||||
heata[x + y * 16] -= 0.3f;
|
||||
if (Mth::random() < 0.2) {
|
||||
heata[x + y * 16] = 0.5f;
|
||||
}
|
||||
}
|
||||
float* tmp = next;
|
||||
next = current;
|
||||
current = tmp;
|
||||
|
||||
for (int i = 0; i < 256; i++) {
|
||||
float pow = current[(i - _tickCount * 16) & 255];
|
||||
if (pow > 1) pow = 1;
|
||||
if (pow < 0) pow = 0;
|
||||
|
||||
float pp = pow * pow;
|
||||
|
||||
int r = (int) (32 + pp * 32);
|
||||
int g = (int) (50 + pp * 64);
|
||||
int b = (int) (255);
|
||||
int a = (int) (146 + pp * 50);
|
||||
|
||||
//if (anaglyph3d) {
|
||||
// int rr = (r * 30 + g * 59 + b * 11) / 100;
|
||||
// int gg = (r * 30 + g * 70) / (100);
|
||||
// int bb = (r * 30 + b * 70) / (100);
|
||||
|
||||
// r = rr;
|
||||
// g = gg;
|
||||
// b = bb;
|
||||
//}
|
||||
|
||||
pixels[i * 4 + 0] = r;
|
||||
pixels[i * 4 + 1] = g;
|
||||
pixels[i * 4 + 2] = b;
|
||||
pixels[i * 4 + 3] = a;
|
||||
}
|
||||
}
|
||||
|
||||
///
|
||||
/// Lava Texture
|
||||
///
|
||||
|
||||
LavaTexture::LavaTexture()
|
||||
: super(Tile::lava->tex),
|
||||
_tick(0),
|
||||
_frame(0)
|
||||
{
|
||||
current = new float[16*16];
|
||||
next = new float[16*16];
|
||||
heat = new float[16*16];
|
||||
heata = new float[16*16];
|
||||
|
||||
for (int i = 0; i < 256; ++i) {
|
||||
current[i] = 0;
|
||||
next[i] = 0;
|
||||
heat[i] = 0;
|
||||
heata[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
LavaTexture::~LavaTexture() {
|
||||
delete[] current;
|
||||
delete[] next;
|
||||
delete[] heat;
|
||||
delete[] heata;
|
||||
}
|
||||
|
||||
void LavaTexture::tick()
|
||||
{
|
||||
for (int x = 0; x < 16; x++)
|
||||
for (int 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;
|
||||
heat[x + y * 16] += heata[x + y * 16] * 0.05f;
|
||||
|
||||
if (heat[x + y * 16] < 0) heat[x + y * 16] = 0;
|
||||
heata[x + y * 16] -= 0.3f;
|
||||
if (Mth::random() < 0.2) {
|
||||
heata[x + y * 16] = 0.5f;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
float* tmp = next;
|
||||
next = current;
|
||||
current = tmp;
|
||||
|
||||
for (int i = 0; i < 256; i++) {
|
||||
float pow = current[i] * 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;
|
||||
}
|
||||
float pow = current[(i - _tickCount * 16) & 255];
|
||||
if (pow > 1) pow = 1;
|
||||
if (pow < 0) pow = 0;
|
||||
|
||||
float pp = pow * pow;
|
||||
|
||||
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;
|
||||
}
|
||||
int r = (int) (32 + pp * 32);
|
||||
int g = (int) (50 + pp * 64);
|
||||
int b = (int) (255);
|
||||
int a = (int) (146 + pp * 50);
|
||||
|
||||
// @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;
|
||||
//if (anaglyph3d) {
|
||||
// int rr = (r * 30 + g * 59 + b * 11) / 100;
|
||||
// int gg = (r * 30 + g * 70) / (100);
|
||||
// int bb = (r * 30 + b * 70) / (100);
|
||||
|
||||
// r = rr;
|
||||
// g = gg;
|
||||
// b = bb;
|
||||
//}
|
||||
|
||||
pixels[i * 4 + 0] = r;
|
||||
pixels[i * 4 + 1] = g;
|
||||
pixels[i * 4 + 2] = b;
|
||||
pixels[i * 4 + 3] = a;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,59 +56,4 @@ public:
|
||||
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__*/
|
||||
|
||||
@@ -111,7 +111,6 @@
|
||||
#include "data/eat1.pcm"
|
||||
#include "data/eat2.pcm"
|
||||
#include "data/eat3.pcm"
|
||||
#include "data/burp1.pcm"
|
||||
#include "data/fuse.pcm"
|
||||
|
||||
SoundDesc SA_cloth1((char*)PCM_cloth1);
|
||||
@@ -222,7 +221,6 @@ SoundDesc SA_creeperdeath((char*)PCM_creeperdeath);
|
||||
SoundDesc SA_eat1((char*)PCM_eat1);
|
||||
SoundDesc SA_eat2((char*)PCM_eat2);
|
||||
SoundDesc SA_eat3((char*)PCM_eat3);
|
||||
SoundDesc SA_burp1((char*)PCM_burp1);
|
||||
SoundDesc SA_fuse((char*)PCM_fuse);
|
||||
|
||||
#endif /*!PRE_ANDROID23 && !__APPLE__*/
|
||||
|
||||
@@ -172,7 +172,6 @@ extern SoundDesc SA_creeperdeath;
|
||||
extern SoundDesc SA_eat1;
|
||||
extern SoundDesc SA_eat2;
|
||||
extern SoundDesc SA_eat3;
|
||||
extern SoundDesc SA_burp1;
|
||||
extern SoundDesc SA_fuse;
|
||||
|
||||
#endif /*!PRE_ANDROID23 && !__APPLE__*/
|
||||
|
||||
@@ -144,7 +144,6 @@ void SoundEngine::init( Minecraft* mc, Options* options )
|
||||
sounds.add("random.eat", SA_eat1);
|
||||
sounds.add("random.eat", SA_eat2);
|
||||
sounds.add("random.eat", SA_eat3);
|
||||
sounds.add("random.burp", SA_burp1);
|
||||
sounds.add("random.fuse", SA_fuse);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -227,7 +227,6 @@ void SoundEngine::init( Minecraft* mc, Options* options )
|
||||
sounds.add( "random.eat", _pp("eat1"));
|
||||
sounds.add( "random.eat", _pp("eat2"));
|
||||
sounds.add( "random.eat", _pp("eat3"));
|
||||
sounds.add( "random.burp", _pp("burp1"));
|
||||
sounds.add( "random.fuse", _pp("fuse"));
|
||||
|
||||
sounds.add( "step.cloth", _pp("cloth1"));
|
||||
|
||||
7
src/commands/Command.cpp
Normal file
@@ -0,0 +1,7 @@
|
||||
#include "Command.hpp"
|
||||
#include "world/level/Level.h"
|
||||
#include <client/Minecraft.h>
|
||||
|
||||
bool Command::isPlayerOp(Minecraft& mc, Player& player) {
|
||||
return mc.level->ops.find(player.name) != mc.level->ops.end();
|
||||
}
|
||||
28
src/commands/Command.hpp
Normal file
@@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
enum CommandFlags {
|
||||
COMMAND_FLAG_SINGLEPLAYER_ONLY = (1 << 1),
|
||||
COMMAND_FLAG_NO_ARGS = (1 << 2),
|
||||
};
|
||||
|
||||
class Minecraft;
|
||||
class Player;
|
||||
|
||||
class Command {
|
||||
public:
|
||||
const std::string& getName() { return m_name; }
|
||||
const CommandFlags getFlags() { return m_flags; }
|
||||
|
||||
bool isPlayerOp(Minecraft& mc, Player& player);
|
||||
|
||||
virtual std::string execute(Minecraft& mc, Player& player, const std::vector<std::string>& args) = 0;
|
||||
virtual std::string help(Minecraft& mc) = 0;
|
||||
|
||||
protected:
|
||||
Command(const std::string& name, CommandFlags flags = (CommandFlags)0) : m_name(name), m_flags(flags) {}
|
||||
|
||||
const std::string m_name;
|
||||
const CommandFlags m_flags;
|
||||
};
|
||||
35
src/commands/CommandHelp.cpp
Normal file
@@ -0,0 +1,35 @@
|
||||
#include "CommandHelp.hpp"
|
||||
#include "commands/Command.hpp"
|
||||
#include "CommandManager.hpp"
|
||||
#include <client/Minecraft.h>
|
||||
#include <sstream>
|
||||
|
||||
CommandHelp::CommandHelp() : Command("help") {}
|
||||
|
||||
std::string CommandHelp::execute(Minecraft& mc, Player& player, const std::vector<std::string>& args) {
|
||||
if (args.empty()) {
|
||||
auto cmds = mc.commandManager().getListAllCommands();
|
||||
|
||||
std::ostringstream output;
|
||||
|
||||
output << "List of all commands:" << std::endl;
|
||||
|
||||
for (auto& cmd : cmds) {
|
||||
output << " - " + cmd << std::endl;;
|
||||
}
|
||||
|
||||
return output.str();
|
||||
}
|
||||
|
||||
Command* cmd = mc.commandManager().getCommand(args[0]);
|
||||
|
||||
if (cmd != nullptr) {
|
||||
return cmd->help(mc);
|
||||
}
|
||||
|
||||
return "help: command " + args[0] + " not found";
|
||||
}
|
||||
|
||||
std::string CommandHelp::help(Minecraft& mc) {
|
||||
return "Usage: /help <command>";
|
||||
}
|
||||
9
src/commands/CommandHelp.hpp
Normal file
@@ -0,0 +1,9 @@
|
||||
#include "Command.hpp"
|
||||
|
||||
class CommandHelp : public Command {
|
||||
public:
|
||||
CommandHelp();
|
||||
|
||||
std::string execute(Minecraft& mc, Player& player, const std::vector<std::string>& args);
|
||||
std::string help(Minecraft& mc);
|
||||
};
|
||||
41
src/commands/CommandKick.cpp
Normal file
@@ -0,0 +1,41 @@
|
||||
#include "CommandKick.hpp"
|
||||
#include "commands/Command.hpp"
|
||||
#include "network/RakNetInstance.h"
|
||||
#include "raknet/RakPeer.h"
|
||||
#include "world/level/Level.h"
|
||||
#include <algorithm>
|
||||
#include <client/Minecraft.h>
|
||||
|
||||
|
||||
CommandKick::CommandKick() : Command("kick") {}
|
||||
|
||||
std::string CommandKick::execute(Minecraft& mc, Player& player, const std::vector<std::string>& args) {
|
||||
if (!isPlayerOp(mc, player)) {
|
||||
return "You aren't enough priveleged to run this command";
|
||||
}
|
||||
|
||||
if (args.empty()) {
|
||||
return help(mc);
|
||||
}
|
||||
|
||||
auto it = std::find_if(mc.level->players.begin(), mc.level->players.end(), [args] (auto& it) -> bool {
|
||||
return it->name == args[0];
|
||||
});
|
||||
|
||||
if (it == mc.level->players.end()) {
|
||||
return "kick: can't find player with name " + args[0];
|
||||
}
|
||||
|
||||
if (*it == (Player*)mc.player) {
|
||||
return "kick: you can't kick urself lol";
|
||||
}
|
||||
|
||||
mc.level->removePlayer(*it);
|
||||
(*it)->remove();
|
||||
mc.raknetInstance->getPeer()->CloseConnection((*it)->owner, true);
|
||||
mc.addMessage("kick: successfully kicked player " + args[0]);
|
||||
}
|
||||
|
||||
std::string CommandKick::help(Minecraft& mc) {
|
||||
return "Usage: /kick <player>";
|
||||
}
|
||||
9
src/commands/CommandKick.hpp
Normal file
@@ -0,0 +1,9 @@
|
||||
#include "Command.hpp"
|
||||
|
||||
class CommandKick : public Command {
|
||||
public:
|
||||
CommandKick();
|
||||
|
||||
std::string execute(Minecraft& mc, Player& player, const std::vector<std::string>& args);
|
||||
std::string help(Minecraft& mc);
|
||||
};
|
||||
75
src/commands/CommandManager.cpp
Normal file
@@ -0,0 +1,75 @@
|
||||
#include "CommandManager.hpp"
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "client/Minecraft.h"
|
||||
#include "commands/Command.hpp"
|
||||
#include "commands/CommandHelp.hpp"
|
||||
#include "commands/CommandKick.hpp"
|
||||
#include "commands/CommandOp.hpp"
|
||||
#include "network/packet/ChatPacket.h"
|
||||
#include "network/RakNetInstance.h"
|
||||
#include "world/level/Level.h"
|
||||
|
||||
|
||||
|
||||
CommandManager::CommandManager() {
|
||||
registerAllCommands();
|
||||
}
|
||||
|
||||
void CommandManager::registerAllCommands() {
|
||||
m_commands.push_back(new CommandHelp());
|
||||
m_commands.push_back(new CommandKick());
|
||||
m_commands.push_back(new CommandOp());
|
||||
}
|
||||
|
||||
std::vector<std::string> CommandManager::getListAllCommands() {
|
||||
std::vector<std::string> ret;
|
||||
|
||||
for (auto& cmd : m_commands) {
|
||||
ret.push_back(cmd->getName());
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
std::string CommandManager::execute(Minecraft& mc, Player& player, const std::string& input) {
|
||||
std::istringstream ss(input);
|
||||
std::string cmd;
|
||||
|
||||
ss >> cmd;
|
||||
|
||||
auto it = std::find_if(m_commands.begin(), m_commands.end(), [cmd](auto& it) -> bool {
|
||||
return it->getName() == cmd;
|
||||
});
|
||||
|
||||
if (it == m_commands.end()) {
|
||||
return "Command /" + cmd + " not found";
|
||||
}
|
||||
|
||||
std::vector<std::string> args;
|
||||
|
||||
std::string tok;
|
||||
while (ss >> tok) args.push_back(tok);
|
||||
|
||||
if (!mc.level->isClientSide || (*it)->getFlags() & CommandFlags::COMMAND_FLAG_SINGLEPLAYER_ONLY) {
|
||||
return (*it)->execute(mc, player, args);
|
||||
} else {
|
||||
ChatPacket packet("/" + input);
|
||||
mc.raknetInstance->send(packet);
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
Command* CommandManager::getCommand(const std::string& name) {
|
||||
auto it = std::find_if(m_commands.begin(), m_commands.end(), [name](auto& it) -> bool {
|
||||
return it->getName() == name;
|
||||
});
|
||||
|
||||
if (it == m_commands.end()) {
|
||||
return *it;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
21
src/commands/CommandManager.hpp
Normal file
@@ -0,0 +1,21 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "Command.hpp"
|
||||
|
||||
class CommandManager {
|
||||
public:
|
||||
CommandManager();
|
||||
|
||||
std::vector<std::string> getListAllCommands();
|
||||
|
||||
std::string execute(Minecraft& mc, Player& player, const std::string& input);
|
||||
|
||||
Command* getCommand(const std::string& name);
|
||||
|
||||
private:
|
||||
void registerAllCommands();
|
||||
|
||||
std::vector<Command*> m_commands;
|
||||
};
|
||||
35
src/commands/CommandOp.cpp
Normal file
@@ -0,0 +1,35 @@
|
||||
#include "CommandOp.hpp"
|
||||
#include "commands/Command.hpp"
|
||||
#include "network/RakNetInstance.h"
|
||||
#include "raknet/RakPeer.h"
|
||||
#include "world/level/Level.h"
|
||||
#include <algorithm>
|
||||
#include <client/Minecraft.h>
|
||||
|
||||
|
||||
CommandOp::CommandOp() : Command("op") {}
|
||||
|
||||
std::string CommandOp::execute(Minecraft& mc, Player& player, const std::vector<std::string>& args) {
|
||||
if (!isPlayerOp(mc, player)) {
|
||||
return "You aren't enough priveleged to run this command";
|
||||
}
|
||||
|
||||
if (args.empty()) {
|
||||
return help(mc);
|
||||
}
|
||||
|
||||
auto it = std::find_if(mc.level->players.begin(), mc.level->players.end(), [args] (auto& it) -> bool {
|
||||
return it->name == args[0];
|
||||
});
|
||||
|
||||
if (mc.level->ops.find(args[0]) != mc.level->ops.end()) {
|
||||
return "op: player " + args[0] + " already opped";
|
||||
}
|
||||
|
||||
mc.level->ops.emplace((*it)->name);
|
||||
return "op: successfully opped player " + args[0];
|
||||
}
|
||||
|
||||
std::string CommandOp::help(Minecraft& mc) {
|
||||
return "Usage: /op <player>";
|
||||
}
|
||||
9
src/commands/CommandOp.hpp
Normal file
@@ -0,0 +1,9 @@
|
||||
#include "Command.hpp"
|
||||
|
||||
class CommandOp : public Command {
|
||||
public:
|
||||
CommandOp();
|
||||
|
||||
std::string execute(Minecraft& mc, Player& player, const std::vector<std::string>& args);
|
||||
std::string help(Minecraft& mc);
|
||||
};
|
||||
@@ -30,20 +30,29 @@ void signal_callback_handler(int signum) {
|
||||
int main(int numArguments, char* pszArgs[]) {
|
||||
ArgumentsSettings aSettings(numArguments, pszArgs);
|
||||
if(aSettings.getShowHelp()) {
|
||||
// TODO: Map with args and print it with std::cout and for loop
|
||||
// TODO: World size setting
|
||||
|
||||
ArgumentsSettings defaultSettings(0, NULL);
|
||||
|
||||
printf("Minecraft Pockect Edition Server %s\n", Common::getGameVersionString("").c_str());
|
||||
printf("-------------------------------------------------------\n");
|
||||
|
||||
printf("--cachepath - Path to where the server can store temp stuff (not sure if this is used) [default: \"%s\"]\n", defaultSettings.getCachePath().c_str());
|
||||
printf("--externalpath - The path to the place where the server should store the levels. [default: \"%s\"]\n", defaultSettings.getExternalPath().c_str());
|
||||
printf("--levelname - The name of the server [default: \"%s\"]\n", defaultSettings.getLevelName().c_str());
|
||||
printf("--gamemode - The name of the gamemode [default: \"%s\"]\n", defaultSettings.getGamemode().c_str());
|
||||
printf("--leveldir - The name of the server [default: \"%s\"]\n", defaultSettings.getLevelDir().c_str());
|
||||
printf("--help - Shows this message.\n");
|
||||
printf("--port - The port to run the server on. [default: %d]\n", defaultSettings.getPort());
|
||||
printf("--serverkey - The key that the server should use for API calls. [default: \"%s\"]\n", defaultSettings.getServerKey().c_str());
|
||||
|
||||
printf("-------------------------------------------------------\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
printf("Level Name: %s\n", aSettings.getLevelName().c_str());
|
||||
|
||||
AppContext appContext;
|
||||
appContext.platform = new AppPlatform();
|
||||
App* app = new MAIN_CLASS();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
#include "ClientSideNetworkHandler.h"
|
||||
#include "client/Options.h"
|
||||
#include "network/packet/LoginStatusPacket.h"
|
||||
#include "packet/PacketInclude.h"
|
||||
#include "RakNetInstance.h"
|
||||
#include "../world/level/chunk/ChunkSource.h"
|
||||
@@ -10,6 +11,7 @@
|
||||
#include "../world/entity/player/Inventory.h"
|
||||
#include "../client/Minecraft.h"
|
||||
#include "../client/gamemode/GameMode.h"
|
||||
#include "world/item/ItemInstance.h"
|
||||
#ifndef STANDALONE_SERVER
|
||||
#include "../client/gui/screens/DisconnectionScreen.h"
|
||||
#endif
|
||||
@@ -86,7 +88,7 @@ void ClientSideNetworkHandler::onConnect(const RakNet::RakNetGUID& hostGuid)
|
||||
serverGuid = hostGuid;
|
||||
|
||||
clearChunksLoaded();
|
||||
LoginPacket packet(minecraft->options.getStringValue(OPTIONS_USERNAME).c_str(), SharedConstants::NetworkProtocolVersion);
|
||||
LoginPacket packet(minecraft->options.getStringValue(OPTIONS_USERNAME).c_str(), SharedConstants::NetworkProtocolVersion, true);
|
||||
raknetInstance->send(packet);
|
||||
}
|
||||
|
||||
@@ -97,6 +99,7 @@ void ClientSideNetworkHandler::onUnableToConnect()
|
||||
|
||||
void ClientSideNetworkHandler::onDisconnect(const RakNet::RakNetGUID& guid)
|
||||
{
|
||||
// TODO: Good disconnecting
|
||||
LOGI("onDisconnect\n");
|
||||
if (level)
|
||||
{
|
||||
@@ -130,6 +133,12 @@ void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginSta
|
||||
LOGI("Disconnect! Server is outdated!\n");
|
||||
#ifndef STANDALONE_SERVER
|
||||
minecraft->setScreen(new DisconnectionScreen("Could not connect: Outdated server!"));
|
||||
#endif
|
||||
}
|
||||
if (packet->status == LoginStatus::Failed_TakenNickname) {
|
||||
LOGI("Disconnect! Nickname is taken!\n");
|
||||
#ifndef STANDALONE_SERVER
|
||||
minecraft->setScreen(new DisconnectionScreen("Could not connect: Nickname is taken!"));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -344,6 +353,7 @@ void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, AddItemE
|
||||
}
|
||||
|
||||
void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, TakeItemEntityPacket* packet) {
|
||||
printf("TakeItemEntityPacket \n");
|
||||
if (!level) return;
|
||||
|
||||
Entity* e = level->getEntity(packet->itemId);
|
||||
@@ -386,6 +396,54 @@ void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, MovePlay
|
||||
}
|
||||
}
|
||||
|
||||
void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, SendInventoryPacket* packet) {
|
||||
if (!level) return;
|
||||
|
||||
if (packet->entityId == minecraft->player->entityId) {
|
||||
auto items = packet->items;
|
||||
|
||||
minecraft->player->inventory->replace(items);
|
||||
|
||||
for (int i = 0; i < packet->linkedSlot.size(); i++) {
|
||||
minecraft->player->inventory->linkSlot(i, packet->linkedSlot[i].inventorySlot, true);
|
||||
LOGI("%i -> %i\n", packet->linkedSlot[i].inventorySlot, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, TakeItemPacket* packet) {
|
||||
if (!level) return;
|
||||
|
||||
LOGI("TakeItemPacket\n");
|
||||
|
||||
ItemInstance* item;
|
||||
|
||||
item->count = packet->count;
|
||||
item->id = packet->itemId;
|
||||
item->setAuxValue(packet->auxValue);
|
||||
|
||||
// if (minecraft->player->entityId == packet->playerId) {
|
||||
if (!minecraft->player->inventory->add(item)) {
|
||||
minecraft->player->drop(new ItemInstance(*item), false);
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, RemoveItemPacket* packet) {
|
||||
// Idk how it works...
|
||||
if (!level) return;
|
||||
|
||||
ItemInstance item;
|
||||
|
||||
item.count = packet->count;
|
||||
item.id = packet->itemId;
|
||||
item.setAuxValue(packet->auxValue);
|
||||
|
||||
// if (minecraft->player->entityId == packet->playerId) {
|
||||
minecraft->player->inventory->removeResource(item);
|
||||
// }
|
||||
}
|
||||
|
||||
void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, MoveEntityPacket* packet)
|
||||
{
|
||||
if (!level)
|
||||
@@ -782,6 +840,10 @@ void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, AnimateP
|
||||
}
|
||||
}
|
||||
|
||||
void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, WantCreatePacket* packet)
|
||||
{
|
||||
}
|
||||
|
||||
void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, UseItemPacket* packet)
|
||||
{
|
||||
}
|
||||
@@ -791,6 +853,7 @@ void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, SetHealt
|
||||
if (!level || !minecraft->player)
|
||||
return;
|
||||
|
||||
printf("SetHealthPacket \n");
|
||||
minecraft->player->hurtTo(packet->health);
|
||||
}
|
||||
|
||||
@@ -886,7 +949,11 @@ void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, Containe
|
||||
void ClientSideNetworkHandler::handle( const RakNet::RakNetGUID& source, ChatPacket* packet )
|
||||
{
|
||||
#ifndef STANDALONE_SERVER
|
||||
minecraft->gui.displayClientMessage(packet->message);
|
||||
// minecraft->gui.displayClientMessage(packet->message);
|
||||
std::istringstream iss(packet->message);
|
||||
for (std::string line; std::getline(iss, line); ) {
|
||||
minecraft->gui.addMessage(line);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -77,6 +77,11 @@ public:
|
||||
virtual void handle(const RakNet::RakNetGUID& source, ChatPacket* packet);
|
||||
virtual void handle(const RakNet::RakNetGUID& source, AdventureSettingsPacket* packet);
|
||||
virtual void handle(const RakNet::RakNetGUID& source, SignUpdatePacket* packet);
|
||||
virtual void handle(const RakNet::RakNetGUID& source, RemoveItemPacket* packet);
|
||||
virtual void handle(const RakNet::RakNetGUID& source, TakeItemPacket* packet);
|
||||
virtual void handle(const RakNet::RakNetGUID& source, WantCreatePacket* packet);
|
||||
virtual void handle(const RakNet::RakNetGUID& source, SendInventoryPacket* packet);
|
||||
|
||||
private:
|
||||
|
||||
void requestNextChunk();
|
||||
|
||||