20 Commits

Author SHA1 Message Date
561e8a3691 Added iOS comppiling instructions to README 2026-04-05 14:22:14 -04:00
59d4642413 fixed the possible broken header search and added all jobs including ios to publish 2026-04-04 20:44:22 -04:00
3737143842 Merge pull request 'FIX: other platforms compilation' (#20) from fix-ios-compilation into ios-support
It compiles fine. YOLO so i'm merging lol. Gonna make build.yml how it needs to be and then pr to main
2026-04-05 02:05:54 +02:00
Kolyah35
ce52bfd35c FIX: web and android compilation 2026-04-04 14:26:57 +03:00
Kolyah35
c70cd428fd FIX: other platforms compilation 2026-04-04 12:11:33 +03:00
1158644de7 Lowered minimum deployment to iOS 12, rather than iOS 14 2026-03-30 10:54:25 -04:00
03b62b60df Update .github/workflows/build.yml
I keep messing this up. For now I am removing all the needs for publish except iOS
2026-03-26 01:59:43 +02:00
dfa6dc4221 removed if line from publish to always run it. can we not skip publish thanks 2026-03-25 19:39:24 -04:00
8ea20b1da9 Fixed bugs in starting the game. ALso added build job for iOS ipa unsigned 2026-03-25 19:14:42 -04:00
2b4ff27043 fixed button not pressable on ios 2026-03-24 23:53:26 -04:00
ec76c0fc2c IT COMPILESgit add .! also added full screen support. see issues. 2026-03-24 21:38:31 -04:00
8708dc9c83 restore include paths for cross-platform builds because i messed absolutely every #include up. 2026-03-24 19:51:01 -04:00
7d485fdcd7 more refactoring for iOS 2026-03-24 12:44:08 -04:00
976366d6bf fixed slider for hopefully the final fucking time. Nether Reactor fix: Need to make the array for building it all unsigned integers as now Xcode is strict about the new C++ Standards as they have changed since 2011 2026-03-24 12:39:06 -04:00
663c1d4b3f Synced options UI files from main branch 2026-03-24 12:39:06 -04:00
0ef6822737 gonna try changing all Options::Option* in the whole project to just Option* not sure if this works but it gets the compiler to shut up. if this breaks everything change all 'Option*' to 'Options::Option*' as it once was. 2026-03-24 12:38:51 -04:00
442eb2d9c3 more header fixes 2026-03-24 12:34:02 -04:00
c0c5cbaa51 fix missing file, commiting now because what im about to do might break Option class 2026-03-24 12:34:02 -04:00
afbd79d9de added needed missing files 2026-03-24 12:34:02 -04:00
34858932f1 Started to port to iOS; fixing compiler errors here and there 2026-03-24 12:32:22 -04:00
117 changed files with 3184 additions and 8543 deletions

View File

@@ -216,6 +216,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
@@ -312,10 +322,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 +358,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-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

View File

@@ -166,7 +166,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 +199,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"
@@ -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"
@@ -312,7 +306,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"
)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 868 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 910 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

View File

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

View File

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

View File

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

View File

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

View File

@@ -1173,14 +1173,6 @@
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 */
@@ -2443,8 +2435,8 @@
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>"; };
F99D34222F736AD400DC153E /* TextOption.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TextOption.cpp; path = ../../src/client/gui/components/TextOption.cpp; };
F99D34252F736AFB00DC153E /* OptionsFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OptionsFile.h; path = ../../src/client/OptionsFile.h; sourceTree = "<group>"; 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>"; };
@@ -2465,10 +2457,6 @@
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 */
@@ -3536,7 +3524,6 @@
D5B50CF114CFF66F005F7284 /* TileRenderer.cpp */,
D5B50CF214CFF66F005F7284 /* TileRenderer.h */,
D5B50CF314CFF66F005F7284 /* VertecDecl.h */,
BEEF202614CFF670005F0001 /* Lighting.cpp */,
);
path = renderer;
sourceTree = "<group>";
@@ -3774,7 +3761,6 @@
D5B50E6914CFF66F005F7284 /* StringUtils.cpp */,
D5B50E6A14CFF66F005F7284 /* StringUtils.h */,
D5B50E6B14CFF66F005F7284 /* WeighedRandom.h */,
F99F0FAE2F8436EB00F2B29A /* Color.cpp */,
);
path = util;
sourceTree = "<group>";
@@ -4039,8 +4025,6 @@
D5B50F3714CFF66F005F7284 /* TickNextTickData.h */,
D5B50F3814CFF66F005F7284 /* tile */,
D5B50F6814CFF66F005F7284 /* TilePos.h */,
F99F0FA82F84369F00F2B29A /* GrassColor.cpp */,
F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */,
);
path = level;
sourceTree = "<group>";
@@ -5210,7 +5194,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 */,
@@ -5231,14 +5214,12 @@
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 */,
@@ -5443,7 +5424,6 @@
D5D8C4C41639341100FD35F0 /* Motive.cpp in Sources */,
D5D8C4C8163934BB00FD35F0 /* HangingEntityItem.cpp in Sources */,
D5D8C4CC1639362F00FD35F0 /* NetherReactorPattern.cpp in Sources */,
BEEF202614CFF670005F0002 /* Lighting.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5548,7 +5528,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 +5548,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 */,
@@ -5620,7 +5598,6 @@
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 */,
@@ -5826,7 +5803,6 @@
042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */,
042A91B016B17517007ABBC6 /* OptionsGroup.cpp in Sources */,
042A91B216B17517007ABBC6 /* TextBox.cpp in Sources */,
BEEF202614CFF670005F0003 /* Lighting.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5877,7 +5853,7 @@
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
IPHONEOS_DEPLOYMENT_TARGET = 12;
IPHONEOS_DEPLOYMENT_TARGET = 14;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "C93D3524-5C6F-466E-B12B-833663B7EAE0";
@@ -5908,7 +5884,7 @@
);
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
IPHONEOS_DEPLOYMENT_TARGET = 12;
IPHONEOS_DEPLOYMENT_TARGET = 14;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -6002,7 +5978,7 @@
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
IPHONEOS_DEPLOYMENT_TARGET = 12;
IPHONEOS_DEPLOYMENT_TARGET = 14;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "64BA8967-1A9A-4980-972C-42E75AD5E023";
@@ -6034,7 +6010,7 @@
);
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
IPHONEOS_DEPLOYMENT_TARGET = 12;
IPHONEOS_DEPLOYMENT_TARGET = 14;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = (
"-DNS_BLOCK_ASSERTIONS=1",
@@ -6100,7 +6076,7 @@
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
IPHONEOS_DEPLOYMENT_TARGET = 12;
IPHONEOS_DEPLOYMENT_TARGET = 14;
ONLY_ACTIVE_ARCH = YES;
RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos;
@@ -6128,7 +6104,7 @@
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
IPHONEOS_DEPLOYMENT_TARGET = 12;
IPHONEOS_DEPLOYMENT_TARGET = 14;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
RUN_CLANG_STATIC_ANALYZER = NO;
@@ -6161,7 +6137,7 @@
);
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
IPHONEOS_DEPLOYMENT_TARGET = 12;
IPHONEOS_DEPLOYMENT_TARGET = 14;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -6196,7 +6172,7 @@
);
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
IPHONEOS_DEPLOYMENT_TARGET = 12;
IPHONEOS_DEPLOYMENT_TARGET = 14;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
PRODUCT_NAME = "$(TARGET_NAME)";

View File

@@ -8,7 +8,6 @@
#include <string>
#include <cstdlib>
#if defined(APPLE_DEMO_PROMOTION)
#define NO_NETWORK
#endif
@@ -91,10 +90,6 @@
#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) {
@@ -479,20 +474,19 @@ void Minecraft::update() {
#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;
}
@@ -750,7 +744,6 @@ 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();
@@ -834,16 +827,10 @@ void Minecraft::tickInput() {
}
#endif
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
if (key >= '0' && key <= '9') {
_perfRenderer->debugFpsMeterKeyPress(key - '0');
}
}
if (key == Keyboard::KEY_ESCAPE)
pauseGame(false);
#ifdef PLATFORM_DESKTOP
#ifndef OPENGL_ES
if (key == Keyboard::KEY_P) {
static bool isWireFrame = false;
isWireFrame = !isWireFrame;
@@ -857,7 +844,6 @@ void Minecraft::tickInput() {
for (int i = 0; i < 5 * SharedConstants::TicksPerSecond; ++i)
level->tick();
}
#endif
}
@@ -865,7 +851,6 @@ void Minecraft::tickInput() {
static bool prevMouseDownLeft = false;
if (!useTouchscreen()) {
if (Mouse::getButtonState(MouseAction::ACTION_LEFT) == 0) {
gameMode->stopDestroyBlock();
}
@@ -873,7 +858,6 @@ void Minecraft::tickInput() {
if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) {
gameMode->releaseUsingItem(player);
}
}
if (useTouchscreen()) {
// Touch: gesture recognizer classifies the action type (turn/destroy/build)
@@ -883,9 +867,6 @@ void Minecraft::tickInput() {
handleBuildAction(&bai);
} else {
gameMode->stopDestroyBlock();
if (player && player->isUsingItem()) {
gameMode->releaseUsingItem(player);
}
}
} else {
// Desktop: left mouse = destroy/attack
@@ -1124,9 +1105,9 @@ void Minecraft::releaseMouse()
}
bool Minecraft::useTouchscreen() {
#if defined(TARGET_OS_IPHONE)
#if TARGET_OS_IPHONE
return true;
#elif defined(RPI)
#elif RPI
return false;
#endif
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen;
@@ -1146,38 +1127,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);
@@ -1198,24 +1153,6 @@ void Minecraft::setSize(int w, int 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;
}
// 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);
@@ -1252,7 +1189,9 @@ void Minecraft::setSize(int w, int h) {
Gui::GuiScale = 1.0f;
}
Gui::InvGuiScale = 1.0f / Gui::GuiScale;
int screenWidth = (int)(width * Gui::InvGuiScale);
int screenHeight = (int)(height * Gui::InvGuiScale);
// if (platform()) {
// float pixelsPerMillimeter = options.getProgressValue(&Option::PIXELS_PER_MILLIMETER);
@@ -1260,13 +1199,6 @@ void Minecraft::setSize(int w, int h) {
// pixelCalcUi.setPixelsPerMillimeter(pixelsPerMillimeter * Gui::InvGuiScale);
// }
}
Gui::InvGuiScale = 1.0f / Gui::GuiScale;
screenWidth = (int)(width * Gui::InvGuiScale);
screenHeight = (int)(height * Gui::InvGuiScale);
Config config = createConfig(this);
gui.onConfigChanged(config);
@@ -1451,12 +1383,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 +1408,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) {

View File

@@ -87,14 +87,6 @@ public:
void update();
std::string gatherStats1();
std::string gatherStats2();
std::string gatherStats4();
std::string gatherStats3();
void tick(int nTick, int maxTick);
void tickInput();

View File

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

View File

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

View File

@@ -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"
@@ -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);
@@ -122,9 +115,6 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
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;
@@ -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);
}
@@ -602,8 +585,7 @@ 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))
{
|| (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);
@@ -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);
@@ -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;
}
@@ -782,70 +757,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,7 +772,7 @@ 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++) {
@@ -884,7 +796,6 @@ void Gui::renderDebugInfo() {
}
t.endOverrideAndDraw();
}
}
void Gui::renderPlayerList(Font* font, int screenWidth, int screenHeight) {
// only show when in game, no other screen
@@ -1113,10 +1024,7 @@ void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isC
}
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 +1105,22 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
// Draw count
//Tesselator& t = Tesselator::instance;
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;
}
}
minecraft->textures->loadAndBindTexture("font/default8.png");
t.endOverrideAndDraw();
}
else { // otherwise uses the normal pocket edition one
glPushMatrix2();
glScalef2(InvGuiScale + InvGuiScale, InvGuiScale + InvGuiScale, 1);
const float k = 0.5f * GuiScale;
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);
renderSlotText(item, k*x, k*ySlot + 1, true, true);
x += 20;
}
}
minecraft->textures->loadAndBindTexture("font/default8.png");
t.endOverrideAndDraw();
glPopMatrix2();
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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);
@@ -224,27 +221,14 @@ void OptionsScreen::generateOptionScreens() {
// .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) {

View File

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

View File

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

View File

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

View File

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

View File

@@ -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);
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
if (texWidth == 64 && texHeight == 64) {
hair.xRot = head.xRot;
hair.yRot = head.yRot;
hair.zRot = head.zRot;
hair.y = head.y;
}
head.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;
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) {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -21,7 +21,6 @@
#include "../../world/item/BowItem.h"
#include "../../world/level/tile/LeafTile.h"
#include "entity/HumanoidMobRenderer.h"
#include "Lighting.h"
//static StopwatchHandler handler;
@@ -50,34 +49,9 @@ 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());
@@ -91,7 +65,6 @@ void ItemInHandRenderer::tick()
height += dd;
}
}
void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
{
@@ -179,26 +152,17 @@ void ItemInHandRenderer::renderItem(Mob* mob, ItemInstance* item )
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();
@@ -410,7 +350,6 @@ void ItemInHandRenderer::render( float a )
glRotatef2(45, 0, 1, 0);
//glEnable2(GL_RESCALE_NORMAL);
glEnable(GL_NORMALIZE);
glRotatef2(swing2 * 70, 0, 1, 0);
glRotatef2(-swing3 * 20, 0, 0, 1);
// glRotatef2(-swing2 * 80, 1, 0, 0);
@@ -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);
}

View File

@@ -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
@@ -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,16 +155,6 @@ 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);
@@ -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);
@@ -1064,66 +984,13 @@ std::string LevelRenderer::gatherStats1() {
}
//
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;
@@ -1144,125 +1011,19 @@ void LevelRenderer::renderSky(float alpha) {
}
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);
}
//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);
@@ -1311,142 +1072,6 @@ 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;
@@ -1609,7 +1234,6 @@ void LevelRenderer::renderHitSelect( Player* player, const HitResult& h, int mod
void LevelRenderer::onGraphicsReset()
{
generateStars();
generateSky();
// Get new buffers

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -5,14 +5,7 @@
#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()
@@ -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);
// 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 zo = 0.0f;
int cycle_counter = 0;
// float xo = x - ex;
// float yo = y - ey;
// float zo = z - ez;
t.begin();
while (h > 0.0f) {
float current_u0 = u0;
float current_u1 = u1;
float current_v0 = v0;
float current_v1 = v1;
// 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 != 0) {
current_v0 = (yt + 16) / 256.0f;
current_v1 = (yt + 16 + 15.99f) / 256.0f;
}
// glColor4f2(1, 1, 1, 1);
// glDisable2(GL_BLEND);
// glDepthMask(true);
//}
if ((cycle_counter / 2) % 2 == 0) {
float tmp = current_u1;
current_u1 = current_u0;
current_u0 = tmp;
}
//Level* getLevel() {
// return entityRenderDispatcher.level;
//}
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);
//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;
h -= 0.45f;
yo -= 0.45f;
r *= 0.9f;
zo += 0.03f;
cycle_counter++;
}
t.draw();
glPopMatrix2();
glEnable2(GL_LIGHTING);
}
void EntityRenderer::renderShadow(Entity* e, float x, float y, float z, float pow, float a) { //
glEnable2(GL_BLEND);
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//Textures* textures = entityRenderDispatcher->textures;
//textures->bind(textures->loadTexture("%clamp%/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);
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;
// 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);
// // 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 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);
// 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);
//}

View File

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

View File

@@ -45,7 +45,7 @@ void ItemRenderer::render(Entity* itemEntity_, float x, float y, float z, float
else if (item->count > 1) count = 2;
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());

View File

@@ -22,7 +22,7 @@ public:
static void renderGuiItem(Font* font, Textures* textures, const ItemInstance* item, float x, float y, bool fancy);
static void renderGuiItem(Font* font, Textures* textures, const ItemInstance* item, float x, float y, 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);

View File

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

View File

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

View File

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

View File

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

View File

@@ -4,15 +4,11 @@
#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
@@ -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

View File

@@ -206,279 +206,3 @@ void WaterSideTexture::tick() {
pixels[i * 4 + 3] = a;
}
}
///
/// Lava Texture
///
LavaTexture::LavaTexture()
: super(Tile::lava->tex),
_tick(0),
_frame(0)
{
current = new float[16*16];
next = new float[16*16];
heat = new float[16*16];
heata = new float[16*16];
for (int i = 0; i < 256; ++i) {
current[i] = 0;
next[i] = 0;
heat[i] = 0;
heata[i] = 0;
}
}
LavaTexture::~LavaTexture() {
delete[] current;
delete[] next;
delete[] heat;
delete[] heata;
}
void LavaTexture::tick()
{
for (int x = 0; x < 16; x++)
for (int y = 0; y < 16; y++) {
float pow = 0;
int xxo = (int)(Mth::sin((float)(y) * (float)(Mth::PI) * 2.0f / 16.0f) * 1.2f);
int yyo = (int)(Mth::sin((float)(x) * (float)(Mth::PI) * 2.0f / 16.0f) * 1.2f);
for (int xx = x - 1; xx <= x + 1; xx++) {
for (int yy = y - 1; yy <= y + 1; yy++) {
int xi = xx + xxo & 15;
int yi = yy + yyo & 15;
pow += current[xi + yi * 16];
}
}
next[x + y * 16] = pow / 10.0f + (heat[(x + 0 & 15) + (y + 0 & 15) * 16] + heat[(x + 1 & 15) + (y + 0 & 15) * 16] + heat[(x + 1 & 15) + (y + 1 & 15) * 16] + heat[(x + 0 & 15) + (y + 1 & 15) * 16]) / 4.0f * 0.8f;
heat[x + y * 16] = heat[x + y * 16] + heata[x + y * 16] * 0.01f;
if (heat[x + y * 16] < 0.0f) {
heat[x + y * 16] = 0.0f;
}
heata[x + y * 16] = heata[x + y * 16] - 0.06f;
if (Mth::random() < 0.005) {
heata[x + y * 16] = 1.5f;
}
}
float* tmp = next;
next = current;
current = tmp;
for (int i = 0; i < 256; i++) {
float pow = current[i] * 2.0f;
if (pow > 1) pow = 1;
if (pow < 0) pow = 0;
float pp = pow * pow;
int r = (int) (pow * 100.0f + 155.0f);
int g = (int) (pp * 255.0f);
int b = (int) (pp * pp * 128.0f);
//if (anaglyph3d) {
// int rr = (r * 30 + g * 59 + b * 11) / 100;
// int gg = (r * 30 + g * 70) / (100);
// int bb = (r * 30 + b * 70) / (100);
// r = rr;
// g = gg;
// b = bb;
//}
pixels[i * 4 + 0] = r;
pixels[i * 4 + 1] = g;
pixels[i * 4 + 2] = b;
pixels[i * 4 + 3] = -1;
}
}
///
/// Lava Side Texture
///
LavaSideTexture::LavaSideTexture()
: super(Tile::lava->tex + 1),
_tick(0),
_frame(0),
_tickCount(0)
{
replicate = 2;
current = new float[16*16];
next = new float[16*16];
heat = new float[16*16];
heata = new float[16*16];
for (int i = 0; i < 256; ++i) {
current[i] = 0;
next[i] = 0;
heat[i] = 0;
heata[i] = 0;
}
}
LavaSideTexture::~LavaSideTexture() {
delete[] current;
delete[] next;
delete[] heat;
delete[] heata;
}
void LavaSideTexture::tick() {
++_tickCount;
for (int x = 0; x < 16; x++)
for (int y = 0; y < 16; y++) {
float pow = 0;
int yl = (int)(Mth::sin((float)(y) * (float)(Mth::PI)* 2.0f / 16.0f) * 1.2f); // var2 is y
int xl = (int)(Mth::sin((float)(x) * (float)(Mth::PI)* 2.0f / 16.0f) * 1.2f); // var1 is x
for (int yy = x - 1; yy <= x + 1; yy++) {
for (int xx = y - 1; xx <= y + 1; xx++) {
int xi = (yy + yl) & 15; // var8
int yi = (xx + xl) & 15; //var9
pow += current[xi + yi * 16];
}
}
next[x + y * 16] =
next[x + y * 16] =
pow / 10.0f + (
heat[(x + 0 & 15) + (y + 0 & 15) *
16] + heat[
(x + 1 & 15) + (y + 0 & 15) * 16] + heat[(x + 1 & 15) + (y + 1 & 15) *
16] + heat[
(x + 0 & 15) + (y + 1 & 15) * 16]) / 4.0f
* 0.8f;
heat[x + y * 16] = heat[x + y * 16] + heata[x + y * 16] * 0.01f;
if (heat[x + y * 16] < 0.0f) {
heat[x + y * 16] = 0.0f;
}
heata[x + y * 16] = heata[x + y * 16] - 0.06f;
if (Mth::random() < 0.005) {
heata[x + y * 16] = 1.5f;
}
}
float* tmp = next;
next = current;
current = tmp;
for (int i = 0; i < 256; i++) {
float pow = current[(i - _tickCount / 3 * 16) & 255] * 2.0f;
if (pow > 1) pow = 1;
if (pow < 0) pow = 0;
float pp = pow * pow;
int r = (int) (pow * 100.0f + 155.0f);
int g = (int) (pow * pow * 255.0f);
int b = (int) (pow * pow * pow * pow * 128.0f);
// int a = (int) (146 + pp * 50);
//if (anaglyph3d) {
// int rr = (r * 30 + g * 59 + b * 11) / 100;
// int gg = (r * 30 + g * 70) / (100);
// int bb = (r * 30 + b * 70) / (100);
// r = rr;
// g = gg;
// b = bb;
//}
pixels[i * 4 + 0] = r;
pixels[i * 4 + 1] = g;
pixels[i * 4 + 2] = b;
pixels[i * 4 + 3] = -1;
}
}
FireTexture::FireTexture(int id)
: super(((Tile*)Tile::fire)->tex + id * 16),
_tick(0),
_frame(0)
{
current = new float[16*20];
next = new float[16*20];
heat = new float[16*20];
heata = new float[16*20];
for (int i = 0; i < 256; ++i) {
current[i] = 0;
next[i] = 0;
heat[i] = 0;
heata[i] = 0;
}
}
FireTexture::~FireTexture() {
delete[] current;
delete[] next;
delete[] heat;
delete[] heata;
}
// oh boy time to implement fire textures, i am so fucked - shredder
void FireTexture::tick() {
// loop generates fire texture on the empty texture grid, hopefully shouldnt be too taxing on older hardware - shredder
for (int x = 0; x < 16; x++) {
for (int y = 0; y < 20; y++) {
int count = 18;
float pow = this->current[x + (y + 1) % 20 * 16] * (float)(count);
for (int xx = x - 1; xx <= x + 1; xx++) {
for (int yy = y; yy <= y + 1; yy++) {
if (xx >= 0 && yy >= 0 && xx < 16 && yy < 20) {
pow += this->current[xx + yy * 16];
}
count++;
}
}
this->next[x + y * 16] = pow / (float(count) * 1.06f);
if (y >= 19) {
this->next[x + y * 16] = float(Mth::random() * Mth::random() * Mth::random() * 4.0 + Mth::random() * 0.1f + 0.2f);
}
}
}
// hopefully this doesn't cause any mysterious issues - shredder
float* tmp = next;
next = current;
current = tmp;
for (int i = 0; i < 256; i++) {
float pow = this->current[i] * 1.8f;
if (pow > 1.0f) {
pow = 1.0f;
}
if (pow < 0.0f) {
pow = 0.0f;
}
int r = (int) (pow * 155.0f + 100.0f);
int g = (int)(pow * pow * 255.0f);
int b = (int)(pow * pow * pow * pow * pow * pow * pow * pow * pow * pow * 255.0f);
int a = 255;
if (pow < 0.5f) {
a = 0;
}
// @TODO: cant be arsed rn to implement the anaglyph3d check would be nice to check if it does - shredder
//if (this->anaglyph3d) {
// float rr = (r * 30 + g * 59 + b * 11) / 100;
// float gg = (r * 30 + g * 70) / 100;
// float bb = (r * 30 + b * 70) / 100;
// r = rr;
// g = gg;
// b = bb;
//}
pixels[i * 4 + 0] = r;
pixels[i * 4 + 1] = g;
pixels[i * 4 + 2] = b;
pixels[i * 4 + 3] = a;
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@@ -75,7 +75,7 @@ void PerfRenderer::renderFpsMeter( float tickTime )
glDisable2(GL_TEXTURE_2D);
Tesselator& t = Tesselator::instance;
t.begin(GL_QUADS);
t.begin(GL_TRIANGLES);
int hh1 = (int) (usPer60Fps / 200);
float count = (float)frameTimes.size();
t.color(0x20000000);
@@ -117,8 +117,7 @@ void PerfRenderer::renderFpsMeter( float tickTime )
t.color(0xff000000 + cc * 256);
}
// float time = 10 * 1000 * frameTimes[i] / 200;
float time = frameTimes[i] * 4000.0f;
float time = 10 * 1000 * frameTimes[i] / 200;
float time2 = 10 * 1000 * tickTimes[i] / 200;
t.vertex(i + 0.5f, _mc->height - time + 0.5f, 0);
@@ -211,12 +210,12 @@ void PerfRenderer::renderFpsMeter( float tickTime )
msg << result.name;
float xx = (float)(x - r);
float yy = (float)(y + r/2 + i * 8 + 20);
_font->drawShadow(msg.str(), xx + 10 + 10, yy, result.getColor());
_font->drawShadow(msg.str(), xx, yy, result.getColor());
std::string msg2 = toPercentString(result.percentage);
//LOGI("name: %s: perc: %f == %s @ %d, %d\n", msg.str().c_str(), result.percentage, msg2.c_str(), xx, yy);
_font->drawShadow(msg2, xx + 10 + 10 - _font->width(msg2), yy, result.getColor());
_font->drawShadow(msg2, xx - 50 - _font->width(msg2), yy, result.getColor());
msg2 = toPercentString(result.globalPercentage);
_font->drawShadow(msg2, xx + 10 + 10 - _font->width(msg2), yy, result.getColor());
_font->drawShadow(msg2, xx - _font->width(msg2), yy, result.getColor());
}
}

View File

@@ -6,7 +6,7 @@
#include "StringUtils.h"
//package util;
//#ifdef PROFILER
#ifdef PROFILER
#define TIMER_PUSH(x) PerfTimer::push(x)
#define TIMER_POP() PerfTimer::pop()
#define TIMER_POP_PUSH(x) PerfTimer::popPush(x)
@@ -16,11 +16,11 @@
// #define TIMER_PUSH(x) ServerProfiler::push(x)
// #define TIMER_POP() ServerProfiler::pop()
// #define TIMER_POP_PUSH(x) ServerProfiler::popPush(x)
//#else
// #define TIMER_PUSH(x) ((void*)0)
// #define TIMER_POP() ((void*)0)
// #define TIMER_POP_PUSH(x) ((void*)0)
//#endif
#else
#define TIMER_PUSH(x) ((void*)0)
#define TIMER_POP() ((void*)0)
#define TIMER_POP_PUSH(x) ((void*)0)
#endif
class PerfTimer
{

View File

@@ -465,15 +465,6 @@ void Entity::tick()
baseTick();
}
void Entity::setOnFire(int numberOfSeconds)
{
int newValue = numberOfSeconds * 20;
if (onFire < newValue)
{
onFire = newValue;
}
}
void Entity::baseTick()
{
TIMER_PUSH("entityBaseTick");

View File

@@ -89,8 +89,6 @@ public:
virtual bool isAlive();
virtual bool isOnFire();
virtual void setOnFire(int numberOfSeconds);
virtual bool isPlayer();
virtual bool isCreativeModeAllowed();

View File

@@ -169,9 +169,7 @@ void Mob::playAmbientSound()
level->playSound(this, ambient, getSoundVolume(), getVoicePitch());
}
}
bool Mob::isOnFire() {
return onFire > 0 || getSharedFlag(SharedFlagsInformation::FLAG_ONFIRE);
}
void Mob::baseTick()
{
oAttackAnim = attackAnim;
@@ -179,18 +177,6 @@ void Mob::baseTick()
TIMER_PUSH("mobBaseTick");
// @TODO - check if this section i added to make fire render in mp doesnt break crap - shredder
if (!level->isClientSide) {
// Server side: Tell the client if this mob/player is still burning
setSharedFlag(SharedFlagsInformation::FLAG_ONFIRE, onFire > 0);
} else {
// Client side: If the server flag says we aren't on fire, extinguish local visual timer
if (!getSharedFlag(SharedFlagsInformation::FLAG_ONFIRE)) {
onFire = 0;
}
}
// todo ends here
if (((ambientSoundTime++ & 15) == 0) && random.nextInt(2000) < ambientSoundTime) {
ambientSoundTime = -getAmbientSoundInterval();
playAmbientSound();

View File

@@ -52,7 +52,6 @@ public:
virtual bool isPickable();
virtual bool isPushable();
virtual bool isOnFire();
virtual bool isShootable();
MoveControl* getMoveControl();

View File

@@ -51,13 +51,13 @@ void Chicken::aiStep()
flap += flapping * 2;
//@todo
if (!isBaby()) {
if (!level->isClientSide && --eggTime <= 0) {
level->playSound(this, "mob.chickenplop", 1.0f, (random.nextFloat() - random.nextFloat()) * 0.2f + 1.0f);
spawnAtLocation(Item::egg->id, 1);
eggTime = random.nextInt(SharedConstants::TicksPerSecond * 60 * 5) + SharedConstants::TicksPerSecond * 60 * 5;
}
}
//if (!isBaby()) {
// if (!level->isClientSide && --eggTime <= 0) {
// level->playSound(this, "mob.chickenplop", 1.0f, (random.nextFloat() - random.nextFloat()) * 0.2f + 1.0f);
// spawnAtLocation(Item::egg->id, 1);
// eggTime = random.nextInt(SharedConstants::TicksPerSecond * 60 * 5) + SharedConstants::TicksPerSecond * 60 * 5;
// }
//}
}
void Chicken::addAdditonalSaveData( CompoundTag* tag )
@@ -102,8 +102,8 @@ void Chicken::dropDeathLoot( /*bool wasKilledByPlayer, int playerBonusLevel*/ )
spawnAtLocation(Item::feather->id, 1);
}
//// and some meat
if (isOnFire()) spawnAtLocation(Item::chicken_cooked->id, 1); //@fire
else
//if (isOnFire()) spawnAtLocation(Item::chicken_cooked->id, 1); //@fire
//else
spawnAtLocation(Item::chicken_raw->id, 1);
}

View File

@@ -66,11 +66,11 @@ void Cow::dropDeathLoot( /*bool wasKilledByPlayer, int playerBonusLevel*/ ) {
// and some meat
count = random.nextInt(3) + 1;
for (int i = 0; i < count; i++) {
if (isOnFire()) { //@fire
spawnAtLocation(Item::beef_cooked->id, 1);
} else {
// if (isOnFire()) { //@fire
// spawnAtLocation(Item::beef_cooked->id, 1);
// } else {
spawnAtLocation(Item::beef_raw->id, 1);
}
// }
}
}

View File

@@ -54,8 +54,8 @@ std::string Pig::getDeathSound()
int Pig::getDeathLoot()
{
//@fire
if (isOnFire())
return Item::porkChop_cooked->id;
//if (isOnFire())
// return Item::porkChop_cooked->id;
return Item::porkChop_raw->id;
}

View File

@@ -1,6 +1,5 @@
#include "Sheep.h"
#include "../../item/DyePowderItem.h"
#include "../../level/tile/TallGrass.h"
#include "../../level/tile/LevelEvent.h"
const float Sheep::COLOR[][3] = {
@@ -199,7 +198,7 @@ void Sheep::updateAi()
int yy = Mth::floor(y);
int zz = Mth::floor(z);
if ((level->getTile(xx, yy, zz) == Tile::tallgrass->id && level->getData(xx, yy, zz) == TallGrass::TALL_GRASS) || level->getTile(xx, yy - 1, zz) == ((Tile*)Tile::grass)->id) {
if (/*(level->getTile(xx, yy, zz) == Tile::tallgrass->id && level->getData(xx, yy, zz) == TallGrass::TALL_GRASS) || */ level->getTile(xx, yy - 1, zz) == ((Tile*)Tile::grass)->id) {
eatAnimationTick = EAT_ANIMATION_TICKS;
level->broadcastEntityEvent(this, EntityEvent::EAT_GRASS);
}
@@ -209,11 +208,11 @@ void Sheep::updateAi()
int zz = Mth::floor(z);
bool ate = false;
if (level->getTile(xx, yy, zz) == Tile::tallgrass->id) {
level->levelEvent(NULL, LevelEvent::PARTICLES_DESTROY_BLOCK, xx, yy, zz, Tile::tallgrass->id + TallGrass::TALL_GRASS * 256);
/* if (level->getTile(xx, yy, zz) == Tile::tallgrass->id) {
level->levelEvent(LevelEvent::PARTICLES_DESTROY_BLOCK, xx, yy, zz, Tile::tallgrass->id + TallGrass::TALL_GRASS * 256);
level->setTile(xx, yy, zz, 0);
ate = true;
} else if (level->getTile(xx, yy - 1, zz) == ((Tile*)Tile::grass)->id) {
} else */if (level->getTile(xx, yy - 1, zz) == ((Tile*)Tile::grass)->id) {
level->levelEvent(NULL, LevelEvent::PARTICLES_DESTROY_BLOCK, xx, yy - 1, zz, ((Tile*)Tile::grass)->id);
level->setTile(xx, yy - 1, zz, Tile::dirt->id);
ate = true;

View File

@@ -19,7 +19,7 @@ void Skeleton::aiStep() {
float br = getBrightness(1);
if (br > 0.5f) {
if (level->canSeeSky(Mth::floor(x), Mth::floor(y), Mth::floor(z)) && random.nextFloat() * 3.5f < (br - 0.4f)) {
// hurt(NULL, 1); // no use anymore since i restored setOnFire - shredder
hurt(NULL, 1);
for (int i = 0; i < 5; ++i) {
float xa = (2.0f * random.nextFloat() - 1.0f) * (2.0f * random.nextFloat() - 1.0f) * 0.02f;
@@ -27,7 +27,7 @@ void Skeleton::aiStep() {
float za = (2.0f * random.nextFloat() - 1.0f) * (2.0f * random.nextFloat() - 1.0f) * 0.02f;
level->addParticle(PARTICLETYPE(explode), x + random.nextFloat() * bbWidth * 2 - bbWidth, y + random.nextFloat() * bbHeight, z + random.nextFloat() * bbWidth * 2 - bbWidth, xa, ya, za);
}
setOnFire(8); //@todo
//setOnFire(8); //@todo
}
}
}

View File

@@ -55,7 +55,7 @@ void Zombie::aiStep() {
float br = getBrightness(1);
if (br > 0.5f) {
if (level->canSeeSky(Mth::floor(x), Mth::floor(y), Mth::floor(z)) && random.nextFloat() * 3.5f < (br - 0.4f)) {
// hurt(NULL, 1); // no use anymore since i restored setOnFire - shredder
hurt(NULL, 1);
for (int i = 0; i < 5; ++i) {
float xa = (2.0f * random.nextFloat() - 1.0f) * (2.0f * random.nextFloat() - 1.0f) * 0.02f;
@@ -63,7 +63,7 @@ void Zombie::aiStep() {
float za = (2.0f * random.nextFloat() - 1.0f) * (2.0f * random.nextFloat() - 1.0f) * 0.02f;
level->addParticle(PARTICLETYPE(explode), x + random.nextFloat() * bbWidth * 2 - bbWidth, y + random.nextFloat() * bbHeight, z + random.nextFloat() * bbWidth * 2 - bbWidth, xa, ya, za);
}
setOnFire(8); //@todo
//setOnFire(8); //@todo
}
}
}

View File

@@ -245,7 +245,6 @@ void Inventory::setupDefault() {
addItem(new ItemInstance(Item::seeds_melon));
addItem(new ItemInstance(Item::dye_powder, 1, DyePowderItem::WHITE));
addItem(new ItemInstance(Item::hoe_iron));
addItem(new ItemInstance(Item::flintAndSteel));
#ifdef RPI
Sel[0] = addItem(new ItemInstance(Item::sword_iron));
#else

View File

@@ -216,7 +216,6 @@ bool Player::checkBed() {
return (level->getTile(bedPosition.x, bedPosition.y, bedPosition.z) == Tile::bed->id);
}
void Player::tick() {
bool shouldSleep = entityData.getFlag<SharedFlagsInformation::SharedFlagsInformationType>(DATA_PLAYER_FLAGS_ID, PLAYER_SLEEP_FLAG);
if(shouldSleep != isSleeping()) {
@@ -247,20 +246,7 @@ void Player::tick() {
}
super::tick();
if (!level->isClientSide) {
// @TODO - Awful Hack Start, MCPE 0.6 doesn't deal damage with fire to players for some reason on mp, so we force it here to do it, need a better way honestly - shredder
if (level->containsFireTile(this->bb)) {
hurt(NULL, 1);
if (!isInWater()) {
if (onFire <= 0) {
onFire = 20 * 15;
}
}
}
// Awful hack ends here
foodData.tick(this);
// if (containerMenu != NULL && !containerMenu->stillValid(this)) {
// closeContainer();

View File

@@ -10,7 +10,6 @@
#include "../level/tile/ClothTile.h"
#include "../level/tile/CropTile.h"
#include "../level/tile/StemTile.h"
#include "../level/tile/TallGrass.h"
const std::string DyePowderItem::COLOR_DESCS[] = {
"black", "red", "green", "brown", "blue", "purple", "cyan", "silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", "orange", "white"
@@ -92,9 +91,9 @@ bool DyePowderItem::useOn( ItemInstance* itemInstance, Player* player, Level* le
continue;
if (level->getTile(xx, yy, zz) == 0) {
if (random.nextInt(10) != 0) {
level->setTileAndData(xx, yy, zz, Tile::tallgrass->id, TallGrass::TALL_GRASS);
} else if (random.nextInt(3) != 0) {
/*if (random.nextInt(10) != 0) {
level->setTileAndData(xx, yy, zz, Tile::tallgrass.id, TallGrass.TALL_GRASS);
} else*/ if (random.nextInt(3) != 0) {
level->setTile(xx, yy, zz, Tile::flower->id);
} else {
level->setTile(xx, yy, zz, Tile::rose->id);

View File

@@ -19,7 +19,7 @@ public:
setMaxDamage(64);
}
/*
bool useOn(ItemInstance* instance, Player* player, Level* level, int x, int y, int z, int face, float clickX, float clickY, float clickZ) {
if (face == 0) y--;
if (face == 1) y++;
@@ -30,14 +30,14 @@ public:
int targetType = level->getTile(x, y, z);
if (targetType == 0) {
level->playSound(x + 0.5, y + 0.5, z + 0.5, "fire.ignite", 1, random.nextFloat() * 0.4f + 0.8f);
level->setTile(x, y, z, ((Tile*)Tile::fire)->id);
level->playSound(x + 0.5, y + 0.5, z + 0.5, "fire.ignite", 1, sharedRandom.nextFloat() * 0.4f + 0.8f);
level->setTile(x, y, z, Tile::fire->id);
}
instance->hurt(1);
return true;
}
*/
};
#endif /*NET_MINECRAFT_WORLD_ITEM__FlintAndSteelItem_H__*/

View File

@@ -22,7 +22,7 @@ public:
/*@Override*/
bool mineBlock(ItemInstance* itemInstance, int tile, int x, int y, int z/*, Mob* owner*/) {
if (tile == ((Tile*)Tile::leaves)->id || tile == Tile::web->id || tile == Tile::tallgrass->id /*|| tile == Tile::vine->id*/) {
if (tile == ((Tile*)Tile::leaves)->id || tile == Tile::web->id /*|| tile == Tile::tallgrass->id || tile == Tile::vine->id*/) {
itemInstance->hurt(1);//, owner);
return true;
}

View File

@@ -1,13 +0,0 @@
#include "FoliageColor.h"
// TODO: Probably move all the stuff from the header into here so it's a bit cleaner
bool FoliageColor::useTint = true;
int FoliageColor::get(float temp, float rain) {
rain *= temp;
int x = (int) ((1 - temp) * 255);
int y = (int) ((1 - rain) * 255);
return pixels[y << 8 | x];
}
int* FoliageColor::pixels = nullptr;

View File

@@ -6,16 +6,6 @@
class FoliageColor
{
public:
static bool useTint;
static void setUseTint(bool value) {
useTint = value;
}
/*
Shredder here, Ive converted the unused commented out code into their correct syntax, though if i did something incorrectly feel free to take reference from the
commented out code
*/
// static void init(int[] pixels) {
// FoliageColor::pixels = pixels;
// }
@@ -27,13 +17,6 @@ public:
// return pixels[y << 8 | x];
// }
static void init(int* p) {
pixels = p;
}
static int get(float temp, float rain);
static int getEvergreenColor() {
return 0x619961;
}
@@ -48,7 +31,6 @@ public:
private:
//static int pixels[256*256];
static int* pixels;
};
#endif /*NET_MINECRAFT_WORLD_LEVEL__FoliageColor_H__*/

View File

@@ -1,13 +0,0 @@
#include "GrassColor.h"
// TODO: Probably move all the stuff from the header into here so it's a bit cleaner
bool GrassColor::useTint = true;
int GrassColor::get(float temp, float rain) {
rain *= temp;
int x = (int) ((1 - temp) * 255);
int y = (int) ((1 - rain) * 255);
return pixels[y << 8 | x];
}
int* GrassColor::pixels = nullptr;

View File

@@ -1,42 +0,0 @@
#ifndef NET_MINECRAFT_WORLD_LEVEL__GrassColor_H__
#define NET_MINECRAFT_WORLD_LEVEL__GrassColor_H__
//package net.minecraft.world.level;
class GrassColor
{
public:
static bool useTint;
static void setUseTint(bool value) {
useTint = value;
}
/*
Shredder here, Ive converted the unused commented out code into their correct syntax, though if i did something incorrectly feel free to take reference from the
commented out code
*/
// static void init(int[] pixels) {
// GrassColor::pixels = pixels;
// }
//
// static int get(float temp, float rain) {
// rain *= temp;
// int x = (int) ((1 - temp) * 255);
// int y = (int) ((1 - rain) * 255);
// return pixels[y << 8 | x];
// }
static void init(int* p) {
pixels = p;
}
static int get(float temp, float rain);
private:
// static int pixels[256*256];
static int* pixels;
};
#endif /*NET_MINECRAFT_WORLD_LEVEL__GrassColor_H__*/

View File

@@ -1165,13 +1165,7 @@ int Level::getSkyDarken(float a) {
float br = 1 - (Mth::cos(td * Mth::PI * 2) * 2 + 0.5f);
if (br < 0.0f) br = 0.0f;
if (dimension->FogType == 1) // @TODO - probably make this not dependent on dimension type honestly - shredder
{
if (br > 1.0f) br = 1.0f; //@ uses the normal javasky color ramp when java sky type is choosen,
} else
{
if (br > 0.8f) br = 0.8f; //@note; was 1.0f
}
if (br > 0.80f) br = 0.80f; //@note; was 1.0f
return ((int) (br * 11));
}
@@ -1180,29 +1174,12 @@ Vec3 Level::getSkyColor(Entity* source, float a) {
float br = Mth::cos(td * Mth::PI * 2) * 2 + 0.5f;
if (br < 0.0f) br = 0.0f;
if (dimension->FogType == 1) // @TODO - probably make this not dependent on dimension type honestly - shredder
{
if (br > 1.0f) br = 1.0f; //@ uses the normal javasky color ramp when java sky type is choosen,
} else
{
if (br > 0.8f) br = 0.8f; //@note; was 1.0f
}
if (br > 0.75f) br = 0.75f; //@note; was 1.0f
int xx = Mth::floor(source->x);
int zz = Mth::floor(source->z);
// float temp = 0.5;//(float) getBiomeSource().getTemperature(xx, zz); // unused in normal pe too, just hardcoded temp values for some reason.
float temp = (float) getBiomeSource()->getTemperature(xx, zz);
int skyColor;
if (dimension->FogType == 1){ // 1 is java styled fog which should use temperatures!
skyColor = getBiomeSource()->getBiome(xx, zz)->getSkyColor(temp);
}
else { // otherwise default to the normal pocket edition skycolor
skyColor = 0x3070ff;
}
// int skyColor = 0x3070ff;//getBiomeSource().getBiome(xx, zz).getSkyColor(temp); // This is the vanilla way, add it as OPTION_SKY - shredder
// int xx = Mth::floor(source->x);
// int zz = Mth::floor(source->z);
// float temp = 0.5;//(float) getBiomeSource().getTemperature(xx, zz);
int skyColor = 0x3070ff;//getBiomeSource().getBiome(xx, zz).getSkyColor(temp);
float r = ((skyColor >> 16) & 0xff) / 255.0f;
float g = ((skyColor >> 8) & 0xff) / 255.0f;
@@ -1622,8 +1599,8 @@ bool Level::containsFireTile(const AABB& box) {
for (int z = z0; z < z1; z++) {
int t = getTile(x, y, z);
if (t == ((Tile*)(Tile::fire))->id
|| t == Tile::lava->id
if (/*t == ((Tile*)(Tile::fire))->id
||*/ t == Tile::lava->id
|| t == Tile::calmLava->id) {
return true;
}
@@ -1741,15 +1718,13 @@ void Level::extinguishFire(int x, int y, int z, int face) {
setTile(x, y, z, 0);
}
}
std::string Level::gatherStats() {
std::stringstream ss;
ss << "All: " << entities.size();
return ss.str();
}
std::string Level::gatherChunkSourceStats() {
return _chunkSource->gatherStats();
}
// String gatherStats() {
// return "All: " + this.entities.size();
// }
//
// String gatherChunkSourceStats() {
// return chunkSource.gatherStats();
// }
//
TileEntity* Level::getTileEntity(int x, int y, int z) {
LevelChunk* lc = getChunk(x >> 4, z >> 4);

View File

@@ -202,9 +202,6 @@ public:
bool checkAndHandleWater(const AABB& box, const Material* material, Entity* e);
void extinguishFire(int x, int y, int z, int face);
std::string gatherStats();
std::string gatherChunkSourceStats();
//void addEntities(const EntityList& list);
//void removeEntities(const EntityList& list);
//void ensureAdded(Entity* entity);

View File

@@ -3,9 +3,8 @@
//package net.minecraft.world.level;
class BiomeSource;
/*
class BiomeSource;
class TileEntity;
*/
class Material;
@@ -30,7 +29,7 @@ public:
virtual bool isSolidRenderTile(int x, int i, int z) = 0;
virtual bool isSolidBlockingTile(int x, int i, int z) = 0;
virtual BiomeSource* getBiomeSource() = 0;
//virtual BiomeSource* getBiomeSource() = 0;
virtual Biome* getBiome(int x, int z) = 0;
};

View File

@@ -4,7 +4,6 @@
#include "tile/Tile.h"
#include "Level.h"
Region::Region(Level* level, int x1, int y1, int z1, int x2, int y2, int z2) {
this->level = level;
@@ -136,6 +135,6 @@ Biome* Region::getBiome( int x, int z ) {
return level->getBiome(x, z);
}
BiomeSource* Region::getBiomeSource() {
return level->getBiomeSource();
}
//BiomeSource getBiomeSource() {
// return level.getBiomeSource();
//}

View File

@@ -5,7 +5,6 @@
#include "LevelSource.h"
class Level;
class Material;
class LevelChunk;
@@ -28,7 +27,6 @@ public:
int getData(int x, int y, int z);
const Material* getMaterial(int x, int y, int z);
Biome* getBiome(int x, int z);
BiomeSource* getBiomeSource() override;
private:
int xc1, zc1;
LevelChunk*** chunks;

View File

@@ -2,15 +2,11 @@
#include "../levelgen/feature/TreeFeature.h"
#include "../levelgen/feature/TallgrassFeature.h"
#include "../levelgen/feature/BasicTree.h"
#include "../../entity/EntityTypes.h"
#include "../../entity/MobCategory.h"
#include "../../level/tile/TallGrass.h"
#include "../../../util/Color.h"
#include "../GrassColor.h"
Biome* Biome::rainForest = NULL;
Biome* Biome::swampland = NULL;
Biome* Biome::seasonalForest = NULL;
@@ -144,7 +140,7 @@ void Biome::teardownBiomes() {
Feature* Biome::getTreeFeature( Random* random )
{
if (random->nextInt(10) == 0) {
// return new BasicTree(false); // temporarily disabled
//return /*new*/ BasicTree();
}
return new TreeFeature(false);
}
@@ -152,9 +148,6 @@ Feature* Biome::getGrassFeature( Random* random ) {
return new TallgrassFeature(Tile::tallgrass->id, TallGrass::TALL_GRASS);
}
Biome* Biome::getBiome( float temperature, float downfall )
{
int a = (int) (temperature * 63);
@@ -211,31 +204,11 @@ float Biome::adjustDepth( float depth )
int Biome::getSkyColor( float temp )
{
temp /= 3.f;
if (temp < -1) temp = -1;
if (temp > 1) temp = 1;
// return 0x80808080;This is the vanilla way, add it as OPTION_SKY or leave it like this bcus this function literally never gets used anyways if level has vanilla sky color - shredder
return Color::getHSBColor(224 / 360.0f - temp * 0.05f, 0.50f + temp * 0.1f, 1.0f).getRGB();
}
float Biome::getDownfall()
{
return downfall;
}
float Biome::getTemperature()
{
return temperature;
}
int Biome::getGrassColor()
{
float temp = Mth::clamp(getTemperature(), 0.0f, 1.0f);
float rain = Mth::clamp(getDownfall(), 0.0f, 1.0f);
return GrassColor::get(temp, rain);
// temp /= 3.f;
// if (temp < -1) temp = -1;
// if (temp > 1) temp = 1;
return 0x80808080;
//return Color.getHSBColor(224 / 360.0f - temp * 0.05f, 0.50f + temp * 0.1f, 1.0f).getRGB();
}
Biome::MobList& Biome::getMobs(const MobCategory& category)

View File

@@ -78,13 +78,7 @@ public:
virtual float adjustScale(float scale);
virtual float adjustDepth(float depth);
virtual int getSkyColor(float temp);
virtual int getGrassColor();
virtual float getDownfall();
virtual float getTemperature();
virtual MobList& getMobs(const MobCategory& category);
virtual float getCreatureProbability();
@@ -94,8 +88,6 @@ public:
char topMaterial;
char material;
int leafColor;
float temperature;
float downfall;
private:
static Biome* map[64*64];
};

View File

@@ -69,11 +69,11 @@ Biome* BiomeSource::getBiome( int x, int z )
return getBiomeBlock(x, z, 1, 1)[0];
}
float BiomeSource::getTemperature( int x, int z )
{
temperatures = temperatureMap->getRegion(temperatures, x, z, 1, 1, tempScale, tempScale, 0.5f);
return temperatures[0];
}
//float BiomeSource::getTemperature( int x, int z )
//{
// temperatures = temperatureMap->getRegion(temperatures, x, z, 1, 1, tempScale, tempScale, 0.5f);
// return temperatures[0];
//}
Biome** BiomeSource::getBiomeBlock( int x, int z, int w, int h )
{
@@ -123,7 +123,7 @@ Biome** BiomeSource::getBiomeBlock( Biome** biomes__, int x, int z, int w, int h
return biomes;
}
float* BiomeSource::getTemperatureBlock( float* temperatures__, int x, int z, int w, int h )
float* BiomeSource::getTemperatureBlock( /*float* temperatures__, */int x, int z, int w, int h )
{
//LOGI("gTempBlock: 1\n");
//const int size = w * h;
@@ -164,8 +164,8 @@ float* BiomeSource::getTemperatureBlock( float* temperatures__, int x, int z, in
return temperatures;
}
float* BiomeSource::getDownfallBlock( float* downfalls__, int x, int z, int w, int h )
{
//float* BiomeSource::getDownfallBlock( /*float* downfalls__,*/ int x, int z, int w, int h )
//{
// //const int size = w * h;
// //if (lenDownfalls < size) {
// // delete[] downfalls;
@@ -173,6 +173,6 @@ float* BiomeSource::getDownfallBlock( float* downfalls__, int x, int z, int w, i
// // lenDownfalls = size;
// //}
//
downfalls = downfallMap->getRegion(downfalls, x, z, w, w, downfallScale, downfallScale, 0.5f);
return downfalls;
}
// downfalls = downfallMap->getRegion(downfalls, x, z, w, w, downfallScale, downfallScale, 0.5f);
// return downfalls;
//}

View File

@@ -31,13 +31,13 @@ public:
virtual Biome* getBiome(const ChunkPos& chunk);
virtual Biome* getBiome(int x, int z);
virtual float getTemperature(int x, int z);
//virtual float getTemperature(int x, int z);
// Note: The arrays returned here are temporary in the meaning that their
// contents might change in the future. If you need to SAVE the
// values, do a shallow copy to an array of your own.
virtual float* getTemperatureBlock(float* temperatures, int x, int z, int w, int h);
virtual float* getDownfallBlock(float* downfalls, int x, int z, int w, int h);
virtual float* getTemperatureBlock(/*float* temperatures, */ int x, int z, int w, int h);
//virtual float* getDownfallBlock(/*float* downfalls, */int x, int z, int w, int h);
virtual Biome** getBiomeBlock(int x, int z, int w, int h);
private:

View File

@@ -6,7 +6,6 @@
#include "Biome.h"
#include "../levelgen/feature/TreeFeature.h"
#include "../levelgen/feature/BirchFeature.h"
#include "../levelgen/feature/BasicTree.h"
class ForestBiome: public Biome
{
@@ -16,7 +15,7 @@ public:
return new BirchFeature();
}
if (random->nextInt(3) == 0) {
// return new BasicTree(false); // temporarily disabled
//return new BasicTree();
}
return new TreeFeature(false);
}

View File

@@ -6,14 +6,13 @@
#include "Biome.h"
#include "../../../util/Random.h"
#include "../levelgen/feature/TreeFeature.h"
#include "../levelgen/feature/BasicTree.h"
class RainforestBiome: public Biome
{
public:
Feature* getTreeFeature(Random* random) {
if (random->nextInt(3) == 0) {
// return new BasicTree(false); // temporarily disabled
//return new BasicTree();
}
return new TreeFeature(false);
}

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