mirror of
https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
synced 2026-04-07 07:53:32 +00:00
Compare commits
15 Commits
main
...
1158644de7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1158644de7 | ||
|
|
03b62b60df | ||
|
|
dfa6dc4221 | ||
|
|
8ea20b1da9 | ||
|
|
2b4ff27043 | ||
|
|
ec76c0fc2c | ||
|
|
8708dc9c83 | ||
|
|
7d485fdcd7 | ||
|
|
976366d6bf | ||
|
|
663c1d4b3f | ||
|
|
0ef6822737 | ||
|
|
442eb2d9c3 | ||
|
|
c0c5cbaa51 | ||
|
|
afbd79d9de | ||
|
|
34858932f1 |
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -290,7 +290,7 @@ jobs:
|
|||||||
publish:
|
publish:
|
||||||
name: Publish
|
name: Publish
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [ build-windows, build-ios, build-linux, build-android, build-web ]
|
needs: [ build-ios ]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|||||||
@@ -166,7 +166,6 @@ file(GLOB SERVER_SOURCES
|
|||||||
"src/util/Mth.cpp"
|
"src/util/Mth.cpp"
|
||||||
"src/util/PerfTimer.cpp"
|
"src/util/PerfTimer.cpp"
|
||||||
"src/util/StringUtils.cpp"
|
"src/util/StringUtils.cpp"
|
||||||
"src/util/Color.cpp"
|
|
||||||
|
|
||||||
"src/world/Direction.cpp"
|
"src/world/Direction.cpp"
|
||||||
|
|
||||||
@@ -200,9 +199,6 @@ file(GLOB SERVER_SOURCES
|
|||||||
|
|
||||||
"src/world/level/dimension/Dimension.cpp"
|
"src/world/level/dimension/Dimension.cpp"
|
||||||
|
|
||||||
"src/world/level/dimension/FoliageColor.cpp"
|
|
||||||
"src/world/level/GrassColor.cpp"
|
|
||||||
|
|
||||||
"src/world/level/levelgen/*.cpp"
|
"src/world/level/levelgen/*.cpp"
|
||||||
"src/world/level/levelgen/feature/Feature.cpp"
|
"src/world/level/levelgen/feature/Feature.cpp"
|
||||||
"src/world/level/levelgen/synth/*.cpp"
|
"src/world/level/levelgen/synth/*.cpp"
|
||||||
@@ -262,8 +258,6 @@ file(GLOB CLIENT_SOURCES
|
|||||||
|
|
||||||
"src/util/**.cpp"
|
"src/util/**.cpp"
|
||||||
|
|
||||||
"src/util/Color.cpp"
|
|
||||||
|
|
||||||
"src/world/*.cpp"
|
"src/world/*.cpp"
|
||||||
"src/world/phys/*.cpp"
|
"src/world/phys/*.cpp"
|
||||||
"src/world/entity/*.cpp"
|
"src/world/entity/*.cpp"
|
||||||
|
|||||||
37
README.md
37
README.md
@@ -197,39 +197,4 @@ cmake --build .
|
|||||||
3. Run game:
|
3. Run game:
|
||||||
```
|
```
|
||||||
emrun --port 8080 .
|
emrun --port 8080 .
|
||||||
```
|
```
|
||||||
## iOS
|
|
||||||
### Xcode
|
|
||||||
> [Note!]
|
|
||||||
> There's a precompiled IPA artifact in the GitHub mirror under Actions for those who either don't have Macs or don't want to build themself. But if you want to build youself, you'll need a Mac with Xcode. Download Xcode from the Mac App Store.
|
|
||||||
|
|
||||||
### 1. Clone
|
|
||||||
Open your terminal and clone the repository
|
|
||||||
```bash
|
|
||||||
git clone https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
|
|
||||||
cd minecraft-pe-0.6.1
|
|
||||||
```
|
|
||||||
You can also build from the ios-support branch by checking out to it
|
|
||||||
```
|
|
||||||
git checkout ios-support
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Open in Xcode
|
|
||||||
|
|
||||||
The project file is in `minecraft-pe-0.6.1/project/iosproj/minecraftpe.xcodeproj`. Open it.
|
|
||||||
|
|
||||||
### 3. Configure Code Signing
|
|
||||||
|
|
||||||
Before you can deploy to an iPhone, you must sign the app with your own Apple Developer account:
|
|
||||||
|
|
||||||
1. Select the **minecraftpe** project in the left sidebar.
|
|
||||||
2. Go to **Signing & Capabilities**.
|
|
||||||
3. Change the **Bundle Identifier** to something unique (e.g., `com.yourname.mcpe`).
|
|
||||||
4. Select your **Team** from the dropdown menu.
|
|
||||||
|
|
||||||
### 4. Build and Run
|
|
||||||
|
|
||||||
1. Connect your iPhone via USB or LAN.
|
|
||||||
2. Select your device from the run destination menu at the top of Xcode.
|
|
||||||
3. Press **Cmd + R** (or the Play button).
|
|
||||||
4. **Note:** If you encounter a "Developer Mode" or "Untrusted Developer" error on your phone, go to **Settings > General > VPN & Device Management** to trust your certificate.
|
|
||||||
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 |
@@ -153,7 +153,6 @@ options.group.tweaks=Tweaks
|
|||||||
options.allowSprint=Allow sprint
|
options.allowSprint=Allow sprint
|
||||||
options.barOnTop=HUD above inventory
|
options.barOnTop=HUD above inventory
|
||||||
options.rpiCursor=Show Raspberry PI cursor
|
options.rpiCursor=Show Raspberry PI cursor
|
||||||
options.foliageTint=Tint Grass and Leaves
|
|
||||||
options.autoJump=Auto Jump
|
options.autoJump=Auto Jump
|
||||||
options.thirdperson=Third Person
|
options.thirdperson=Third Person
|
||||||
options.servervisible=Server Visible
|
options.servervisible=Server Visible
|
||||||
|
|||||||
@@ -146,7 +146,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
|||||||
../../../src/util/StringUtils.cpp \
|
../../../src/util/StringUtils.cpp \
|
||||||
../../../src/util/PerfTimer.cpp \
|
../../../src/util/PerfTimer.cpp \
|
||||||
../../../src/util/PerfRenderer.cpp \
|
../../../src/util/PerfRenderer.cpp \
|
||||||
../../../src/util/Color.cpp \
|
|
||||||
../../../src/world/Direction.cpp \
|
../../../src/world/Direction.cpp \
|
||||||
../../../src/world/entity/AgableMob.cpp \
|
../../../src/world/entity/AgableMob.cpp \
|
||||||
../../../src/world/entity/Entity.cpp \
|
../../../src/world/entity/Entity.cpp \
|
||||||
@@ -210,8 +209,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
|||||||
../../../src/world/level/MobSpawner.cpp \
|
../../../src/world/level/MobSpawner.cpp \
|
||||||
../../../src/world/level/Region.cpp \
|
../../../src/world/level/Region.cpp \
|
||||||
../../../src/world/level/TickNextTickData.cpp \
|
../../../src/world/level/TickNextTickData.cpp \
|
||||||
../../../src/world/level/FoliageColor.cpp \
|
|
||||||
../../../src/world/level/GrassColor.cpp \
|
|
||||||
../../../src/world/level/biome/Biome.cpp \
|
../../../src/world/level/biome/Biome.cpp \
|
||||||
../../../src/world/level/biome/BiomeSource.cpp \
|
../../../src/world/level/biome/BiomeSource.cpp \
|
||||||
../../../src/world/level/chunk/LevelChunk.cpp \
|
../../../src/world/level/chunk/LevelChunk.cpp \
|
||||||
|
|||||||
@@ -122,7 +122,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
|||||||
../../../src/util/StringUtils.cpp \
|
../../../src/util/StringUtils.cpp \
|
||||||
../../../src/util/PerfTimer.cpp \
|
../../../src/util/PerfTimer.cpp \
|
||||||
../../../src/util/PerfRenderer.cpp \
|
../../../src/util/PerfRenderer.cpp \
|
||||||
../../../src/util/Color.cpp \
|
|
||||||
../../../src/world/Direction.cpp \
|
../../../src/world/Direction.cpp \
|
||||||
../../../src/world/entity/AgableMob.cpp \
|
../../../src/world/entity/AgableMob.cpp \
|
||||||
../../../src/world/entity/Entity.cpp \
|
../../../src/world/entity/Entity.cpp \
|
||||||
@@ -184,8 +183,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
|||||||
../../../src/world/level/MobSpawner.cpp \
|
../../../src/world/level/MobSpawner.cpp \
|
||||||
../../../src/world/level/Region.cpp \
|
../../../src/world/level/Region.cpp \
|
||||||
../../../src/world/level/TickNextTickData.cpp \
|
../../../src/world/level/TickNextTickData.cpp \
|
||||||
../../../src/world/level/FoliageColor.cpp \
|
|
||||||
../../../src/world/level/GrassColor.cpp \
|
|
||||||
../../../src/world/level/biome/Biome.cpp \
|
../../../src/world/level/biome/Biome.cpp \
|
||||||
../../../src/world/level/biome/BiomeSource.cpp \
|
../../../src/world/level/biome/BiomeSource.cpp \
|
||||||
../../../src/world/level/chunk/LevelChunk.cpp \
|
../../../src/world/level/chunk/LevelChunk.cpp \
|
||||||
|
|||||||
@@ -1173,12 +1173,6 @@
|
|||||||
F99D344C2F7370CF00DC153E /* Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D344A2F7370CF00DC153E /* Slider.cpp */; };
|
F99D344C2F7370CF00DC153E /* Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D344A2F7370CF00DC153E /* Slider.cpp */; };
|
||||||
F99D344E2F7372A100DC153E /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F99D344D2F7372A100DC153E /* Launch Screen.storyboard */; };
|
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 */; };
|
F99D344F2F7372A100DC153E /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F99D344D2F7372A100DC153E /* Launch Screen.storyboard */; };
|
||||||
F99F0FA92F84369F00F2B29A /* GrassColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FA82F84369F00F2B29A /* GrassColor.cpp */; };
|
|
||||||
F99F0FAA2F84369F00F2B29A /* GrassColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FA82F84369F00F2B29A /* GrassColor.cpp */; };
|
|
||||||
F99F0FAC2F8436CE00F2B29A /* FoliageColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */; };
|
|
||||||
F99F0FAD2F8436CE00F2B29A /* FoliageColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */; };
|
|
||||||
F99F0FAF2F8436EB00F2B29A /* Color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAE2F8436EB00F2B29A /* Color.cpp */; };
|
|
||||||
F99F0FB02F8436EB00F2B29A /* Color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAE2F8436EB00F2B29A /* Color.cpp */; };
|
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
@@ -2463,9 +2457,6 @@
|
|||||||
F99D34492F7370CF00DC153E /* Slider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Slider.h; path = ../../src/client/gui/components/Slider.h; sourceTree = "<group>"; };
|
F99D34492F7370CF00DC153E /* Slider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Slider.h; path = ../../src/client/gui/components/Slider.h; sourceTree = "<group>"; };
|
||||||
F99D344A2F7370CF00DC153E /* Slider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Slider.cpp; path = ../../src/client/gui/components/Slider.cpp; sourceTree = "<group>"; };
|
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>"; };
|
F99D344D2F7372A100DC153E /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
|
||||||
F99F0FA82F84369F00F2B29A /* GrassColor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GrassColor.cpp; sourceTree = "<group>"; };
|
|
||||||
F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FoliageColor.cpp; sourceTree = "<group>"; };
|
|
||||||
F99F0FAE2F8436EB00F2B29A /* Color.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Color.cpp; sourceTree = "<group>"; };
|
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@@ -3770,7 +3761,6 @@
|
|||||||
D5B50E6914CFF66F005F7284 /* StringUtils.cpp */,
|
D5B50E6914CFF66F005F7284 /* StringUtils.cpp */,
|
||||||
D5B50E6A14CFF66F005F7284 /* StringUtils.h */,
|
D5B50E6A14CFF66F005F7284 /* StringUtils.h */,
|
||||||
D5B50E6B14CFF66F005F7284 /* WeighedRandom.h */,
|
D5B50E6B14CFF66F005F7284 /* WeighedRandom.h */,
|
||||||
F99F0FAE2F8436EB00F2B29A /* Color.cpp */,
|
|
||||||
);
|
);
|
||||||
path = util;
|
path = util;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -4035,8 +4025,6 @@
|
|||||||
D5B50F3714CFF66F005F7284 /* TickNextTickData.h */,
|
D5B50F3714CFF66F005F7284 /* TickNextTickData.h */,
|
||||||
D5B50F3814CFF66F005F7284 /* tile */,
|
D5B50F3814CFF66F005F7284 /* tile */,
|
||||||
D5B50F6814CFF66F005F7284 /* TilePos.h */,
|
D5B50F6814CFF66F005F7284 /* TilePos.h */,
|
||||||
F99F0FA82F84369F00F2B29A /* GrassColor.cpp */,
|
|
||||||
F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */,
|
|
||||||
);
|
);
|
||||||
path = level;
|
path = level;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -5206,7 +5194,6 @@
|
|||||||
D5B5111014CFF670005F7284 /* Mth.cpp in Sources */,
|
D5B5111014CFF670005F7284 /* Mth.cpp in Sources */,
|
||||||
D5B5111214CFF670005F7284 /* PerfRenderer.cpp in Sources */,
|
D5B5111214CFF670005F7284 /* PerfRenderer.cpp in Sources */,
|
||||||
D5B5111414CFF670005F7284 /* PerfTimer.cpp in Sources */,
|
D5B5111414CFF670005F7284 /* PerfTimer.cpp in Sources */,
|
||||||
F99F0FA92F84369F00F2B29A /* GrassColor.cpp in Sources */,
|
|
||||||
D5B5111614CFF670005F7284 /* StringUtils.cpp in Sources */,
|
D5B5111614CFF670005F7284 /* StringUtils.cpp in Sources */,
|
||||||
D5B5111814CFF670005F7284 /* Direction.cpp in Sources */,
|
D5B5111814CFF670005F7284 /* Direction.cpp in Sources */,
|
||||||
D5B5111A14CFF670005F7284 /* Animal.cpp in Sources */,
|
D5B5111A14CFF670005F7284 /* Animal.cpp in Sources */,
|
||||||
@@ -5227,14 +5214,12 @@
|
|||||||
D5B5113814CFF670005F7284 /* PathFinderMob.cpp in Sources */,
|
D5B5113814CFF670005F7284 /* PathFinderMob.cpp in Sources */,
|
||||||
D5B5113A14CFF670005F7284 /* Inventory.cpp in Sources */,
|
D5B5113A14CFF670005F7284 /* Inventory.cpp in Sources */,
|
||||||
D5B5113C14CFF670005F7284 /* Player.cpp in Sources */,
|
D5B5113C14CFF670005F7284 /* Player.cpp in Sources */,
|
||||||
F99F0FB02F8436EB00F2B29A /* Color.cpp in Sources */,
|
|
||||||
D5B5113E14CFF670005F7284 /* Arrow.cpp in Sources */,
|
D5B5113E14CFF670005F7284 /* Arrow.cpp in Sources */,
|
||||||
D5B5114014CFF670005F7284 /* Recipes.cpp in Sources */,
|
D5B5114014CFF670005F7284 /* Recipes.cpp in Sources */,
|
||||||
D5B5114214CFF670005F7284 /* ToolRecipes.cpp in Sources */,
|
D5B5114214CFF670005F7284 /* ToolRecipes.cpp in Sources */,
|
||||||
D5B5114414CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
|
D5B5114414CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
|
||||||
D5B5114614CFF670005F7284 /* HatchetItem.cpp in Sources */,
|
D5B5114614CFF670005F7284 /* HatchetItem.cpp in Sources */,
|
||||||
D5B5114814CFF670005F7284 /* Item.cpp in Sources */,
|
D5B5114814CFF670005F7284 /* Item.cpp in Sources */,
|
||||||
F99F0FAC2F8436CE00F2B29A /* FoliageColor.cpp in Sources */,
|
|
||||||
D5B5114A14CFF670005F7284 /* ItemInstance.cpp in Sources */,
|
D5B5114A14CFF670005F7284 /* ItemInstance.cpp in Sources */,
|
||||||
D5B5114C14CFF670005F7284 /* PickaxeItem.cpp in Sources */,
|
D5B5114C14CFF670005F7284 /* PickaxeItem.cpp in Sources */,
|
||||||
F99D344B2F7370CF00DC153E /* Slider.cpp in Sources */,
|
F99D344B2F7370CF00DC153E /* Slider.cpp in Sources */,
|
||||||
@@ -5543,7 +5528,6 @@
|
|||||||
D5B5102F14CFF670005F7284 /* main.cpp in Sources */,
|
D5B5102F14CFF670005F7284 /* main.cpp in Sources */,
|
||||||
D5B5103514CFF670005F7284 /* Tag.cpp in Sources */,
|
D5B5103514CFF670005F7284 /* Tag.cpp in Sources */,
|
||||||
D5B5103714CFF670005F7284 /* ClientSideNetworkHandler.cpp in Sources */,
|
D5B5103714CFF670005F7284 /* ClientSideNetworkHandler.cpp in Sources */,
|
||||||
F99F0FAF2F8436EB00F2B29A /* Color.cpp in Sources */,
|
|
||||||
D5B5103914CFF670005F7284 /* NetEventCallback.cpp in Sources */,
|
D5B5103914CFF670005F7284 /* NetEventCallback.cpp in Sources */,
|
||||||
D5B5103B14CFF670005F7284 /* Packet.cpp in Sources */,
|
D5B5103B14CFF670005F7284 /* Packet.cpp in Sources */,
|
||||||
D5B5103D14CFF670005F7284 /* RakNetInstance.cpp in Sources */,
|
D5B5103D14CFF670005F7284 /* RakNetInstance.cpp in Sources */,
|
||||||
@@ -5564,7 +5548,6 @@
|
|||||||
D5B5111514CFF670005F7284 /* StringUtils.cpp in Sources */,
|
D5B5111514CFF670005F7284 /* StringUtils.cpp in Sources */,
|
||||||
D5B5111714CFF670005F7284 /* Direction.cpp in Sources */,
|
D5B5111714CFF670005F7284 /* Direction.cpp in Sources */,
|
||||||
D5B5111914CFF670005F7284 /* Animal.cpp in Sources */,
|
D5B5111914CFF670005F7284 /* Animal.cpp in Sources */,
|
||||||
F99F0FAD2F8436CE00F2B29A /* FoliageColor.cpp in Sources */,
|
|
||||||
D5B5111B14CFF670005F7284 /* Chicken.cpp in Sources */,
|
D5B5111B14CFF670005F7284 /* Chicken.cpp in Sources */,
|
||||||
D5B5111D14CFF670005F7284 /* Cow.cpp in Sources */,
|
D5B5111D14CFF670005F7284 /* Cow.cpp in Sources */,
|
||||||
D5B5111F14CFF670005F7284 /* Pig.cpp in Sources */,
|
D5B5111F14CFF670005F7284 /* Pig.cpp in Sources */,
|
||||||
@@ -5615,7 +5598,6 @@
|
|||||||
D5B5117714CFF670005F7284 /* ExternalFileLevelStorageSource.cpp in Sources */,
|
D5B5117714CFF670005F7284 /* ExternalFileLevelStorageSource.cpp in Sources */,
|
||||||
D5B5117914CFF670005F7284 /* RegionFile.cpp in Sources */,
|
D5B5117914CFF670005F7284 /* RegionFile.cpp in Sources */,
|
||||||
D5B5117B14CFF670005F7284 /* TickNextTickData.cpp in Sources */,
|
D5B5117B14CFF670005F7284 /* TickNextTickData.cpp in Sources */,
|
||||||
F99F0FAA2F84369F00F2B29A /* GrassColor.cpp in Sources */,
|
|
||||||
D5B5117D14CFF670005F7284 /* DoorTile.cpp in Sources */,
|
D5B5117D14CFF670005F7284 /* DoorTile.cpp in Sources */,
|
||||||
D5B5118114CFF670005F7284 /* StoneSlabTile.cpp in Sources */,
|
D5B5118114CFF670005F7284 /* StoneSlabTile.cpp in Sources */,
|
||||||
D5B5118314CFF670005F7284 /* Tile.cpp in Sources */,
|
D5B5118314CFF670005F7284 /* Tile.cpp in Sources */,
|
||||||
|
|||||||
@@ -90,7 +90,6 @@
|
|||||||
#include "../network/command/CommandServer.h"
|
#include "../network/command/CommandServer.h"
|
||||||
#include "gamemode/CreatorMode.h"
|
#include "gamemode/CreatorMode.h"
|
||||||
|
|
||||||
#include "../world/level/GrassColor.h"
|
|
||||||
static void checkGlError(const char* tag) {
|
static void checkGlError(const char* tag) {
|
||||||
#ifdef GLDEBUG
|
#ifdef GLDEBUG
|
||||||
while (1) {
|
while (1) {
|
||||||
@@ -1106,9 +1105,9 @@ void Minecraft::releaseMouse()
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Minecraft::useTouchscreen() {
|
bool Minecraft::useTouchscreen() {
|
||||||
#if defined(TARGET_OS_IPHONE)
|
#if TARGET_OS_IPHONE
|
||||||
return true;
|
return true;
|
||||||
#elif defined(RPI)
|
#elif RPI
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen;
|
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen;
|
||||||
@@ -1128,31 +1127,12 @@ void Minecraft::init()
|
|||||||
textures = new Textures(&options, platform());
|
textures = new Textures(&options, platform());
|
||||||
textures->addDynamicTexture(new WaterTexture());
|
textures->addDynamicTexture(new WaterTexture());
|
||||||
textures->addDynamicTexture(new WaterSideTexture());
|
textures->addDynamicTexture(new WaterSideTexture());
|
||||||
textures->addDynamicTexture(new FireTexture());
|
|
||||||
gui.texturesLoaded(textures);
|
gui.texturesLoaded(textures);
|
||||||
|
|
||||||
levelRenderer = new LevelRenderer(this);
|
levelRenderer = new LevelRenderer(this);
|
||||||
gameRenderer = new GameRenderer(this);
|
gameRenderer = new GameRenderer(this);
|
||||||
particleEngine = new ParticleEngine(level, textures);
|
particleEngine = new ParticleEngine(level, textures);
|
||||||
|
|
||||||
// 4j's code for reference
|
|
||||||
// FoliageColor::init(textures->loadTexturePixels(L"misc/foliagecolor.png"));
|
|
||||||
|
|
||||||
|
|
||||||
// my code
|
|
||||||
TextureId foliageId = (textures->loadTexture("misc/foliagecolor.png")); // loading the uh png for foliage color
|
|
||||||
int* foliagePixels = textures->loadTexturePixels(foliageId, "misc/foliagecolor.png");
|
|
||||||
// now i can finally initialize foliage color, probably not the best way to handle this but i cant be arsed rn
|
|
||||||
FoliageColor::init(foliagePixels);
|
|
||||||
|
|
||||||
TextureId grassId = (textures->loadTexture("misc/foliagecolor.png")); // loading the uh png for foliage color
|
|
||||||
int* grassPixels = textures->loadTexturePixels(grassId, "misc/foliagecolor.png");
|
|
||||||
GrassColor::init(grassPixels);
|
|
||||||
|
|
||||||
bool tint = options.getBooleanValue(OPTIONS_FOLIAGE_TINT); // finally, toggleable foliage color
|
|
||||||
FoliageColor::setUseTint(tint);
|
|
||||||
GrassColor::setUseTint(tint);
|
|
||||||
|
|
||||||
// Platform specific initialization here
|
// Platform specific initialization here
|
||||||
font = new Font(&options, "font/default8.png", textures);
|
font = new Font(&options, "font/default8.png", textures);
|
||||||
|
|
||||||
@@ -1403,12 +1383,6 @@ void Minecraft::_levelGenerated()
|
|||||||
player->resetPos(false);
|
player->resetPos(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (level && level->dimension) {
|
|
||||||
// For example, if you want FogType or any other option
|
|
||||||
level->dimension->FogType = options.getBooleanValue(OPTIONS_FOG_TYPE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
this->cameraTargetPlayer = player;
|
this->cameraTargetPlayer = player;
|
||||||
|
|
||||||
std::string serverName = options.getStringValue(OPTIONS_USERNAME) + " - " + level->getLevelData()->levelName;
|
std::string serverName = options.getStringValue(OPTIONS_USERNAME) + " - " + level->getLevelData()->levelName;
|
||||||
|
|||||||
@@ -60,12 +60,6 @@ OptionBool useTouchscreen("useTouchscreen", true);
|
|||||||
|
|
||||||
OptionBool serverVisible("servervisible", true);
|
OptionBool serverVisible("servervisible", true);
|
||||||
|
|
||||||
OptionBool foliageTint("foliagetint", false);
|
|
||||||
|
|
||||||
OptionInt fogType("fogType", 0, 0, 2);
|
|
||||||
|
|
||||||
OptionBool javaHud("javaHud", false);
|
|
||||||
|
|
||||||
OptionInt keyForward("key.forward", Keyboard::KEY_W);
|
OptionInt keyForward("key.forward", Keyboard::KEY_W);
|
||||||
OptionInt keyLeft("key.left", Keyboard::KEY_A);
|
OptionInt keyLeft("key.left", Keyboard::KEY_A);
|
||||||
OptionInt keyBack("key.back", Keyboard::KEY_S);
|
OptionInt keyBack("key.back", Keyboard::KEY_S);
|
||||||
@@ -142,8 +136,6 @@ void Options::initTable() {
|
|||||||
|
|
||||||
m_options[OPTIONS_USE_TOUCHSCREEN] = &useTouchscreen;
|
m_options[OPTIONS_USE_TOUCHSCREEN] = &useTouchscreen;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
|
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
|
||||||
|
|
||||||
m_options[OPTIONS_KEY_FORWARD] = &keyForward;
|
m_options[OPTIONS_KEY_FORWARD] = &keyForward;
|
||||||
@@ -168,12 +160,6 @@ void Options::initTable() {
|
|||||||
m_options[OPTIONS_BAR_ON_TOP] = &barOnTop;
|
m_options[OPTIONS_BAR_ON_TOP] = &barOnTop;
|
||||||
m_options[OPTIONS_ALLOW_SPRINT] = &allowSprint;
|
m_options[OPTIONS_ALLOW_SPRINT] = &allowSprint;
|
||||||
m_options[OPTIONS_RPI_CURSOR] = &rpiCursor;
|
m_options[OPTIONS_RPI_CURSOR] = &rpiCursor;
|
||||||
m_options[OPTIONS_FOLIAGE_TINT] = &foliageTint;
|
|
||||||
|
|
||||||
// more options yay
|
|
||||||
m_options[OPTIONS_FOG_TYPE] = &fogType;
|
|
||||||
|
|
||||||
m_options[OPTIONS_JAVA_HUD] = &javaHud;
|
|
||||||
|
|
||||||
m_options[OPTIONS_AUTOJUMP] = &autoJump;
|
m_options[OPTIONS_AUTOJUMP] = &autoJump;
|
||||||
m_options[OPTIONS_LAST_IP] = &lastIp;
|
m_options[OPTIONS_LAST_IP] = &lastIp;
|
||||||
|
|||||||
@@ -84,9 +84,6 @@ enum OptionId {
|
|||||||
OPTIONS_LAST_IP,
|
OPTIONS_LAST_IP,
|
||||||
|
|
||||||
OPTIONS_RPI_CURSOR,
|
OPTIONS_RPI_CURSOR,
|
||||||
OPTIONS_FOLIAGE_TINT,
|
|
||||||
OPTIONS_FOG_TYPE,
|
|
||||||
OPTIONS_JAVA_HUD,
|
|
||||||
// Should be last!
|
// Should be last!
|
||||||
OPTIONS_COUNT
|
OPTIONS_COUNT
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ const float Gui::DropTicks = 40.0f;
|
|||||||
//#include <android/log.h>
|
//#include <android/log.h>
|
||||||
|
|
||||||
Gui::Gui(Minecraft* minecraft)
|
Gui::Gui(Minecraft* minecraft)
|
||||||
: minecraft(minecraft),
|
: minecraft(minecraft),
|
||||||
tickCount(0),
|
tickCount(0),
|
||||||
progress(0),
|
progress(0),
|
||||||
overlayMessageTime(0),
|
overlayMessageTime(0),
|
||||||
@@ -77,7 +77,7 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
|||||||
Font* font = minecraft->font;
|
Font* font = minecraft->font;
|
||||||
|
|
||||||
const bool isTouchInterface = minecraft->useTouchscreen();
|
const bool isTouchInterface = minecraft->useTouchscreen();
|
||||||
|
|
||||||
const int screenWidth = (int)(minecraft->width * InvGuiScale);
|
const int screenWidth = (int)(minecraft->width * InvGuiScale);
|
||||||
const int screenHeight = (int)(minecraft->height * InvGuiScale);
|
const int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||||
blitOffset = -90;
|
blitOffset = -90;
|
||||||
@@ -86,9 +86,9 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
|||||||
glColor4f2(1, 1, 1, 1);
|
glColor4f2(1, 1, 1, 1);
|
||||||
|
|
||||||
// H: 4
|
// H: 4
|
||||||
// T: 7
|
// T: 7
|
||||||
// L: 6
|
// L: 6
|
||||||
// F: 3
|
// F: 3
|
||||||
int ySlot = screenHeight - 16 - 3;
|
int ySlot = screenHeight - 16 - 3;
|
||||||
|
|
||||||
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
|
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
|
||||||
@@ -103,12 +103,6 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo - Shredder: I added this here but currently viginette is broken so i cant do much about it.
|
|
||||||
// if (minecraft->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS)){
|
|
||||||
// this->renderVignette(this->minecraft->player->getBrightness(a), screenWidth, screenHeight);
|
|
||||||
// }
|
|
||||||
// shredder end
|
|
||||||
|
|
||||||
if(minecraft->player->getSleepTimer() > 0) {
|
if(minecraft->player->getSleepTimer() > 0) {
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
glDisable(GL_ALPHA_TEST);
|
glDisable(GL_ALPHA_TEST);
|
||||||
@@ -119,38 +113,38 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
|
|||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
}
|
}
|
||||||
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
|
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
|
||||||
renderToolBar(a, ySlot, screenWidth);
|
renderToolBar(a, ySlot, screenWidth);
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
|
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
|
||||||
unsigned int max = 10;
|
unsigned int max = 10;
|
||||||
if (isChatting) {
|
if (isChatting) {
|
||||||
int lineHeight = 9;
|
int lineHeight = 9;
|
||||||
max = (screenHeight - 48) / lineHeight;
|
max = (screenHeight - 48) / lineHeight;
|
||||||
if (max < 1) max = 1;
|
if (max < 1) max = 1;
|
||||||
int maxScroll = (int)guiMessages.size() - (int)max;
|
int maxScroll = (int)guiMessages.size() - (int)max;
|
||||||
if (maxScroll < 0) maxScroll = 0;
|
if (maxScroll < 0) maxScroll = 0;
|
||||||
if (chatScrollOffset > maxScroll) chatScrollOffset = maxScroll;
|
if (chatScrollOffset > maxScroll) chatScrollOffset = maxScroll;
|
||||||
} else {
|
} else {
|
||||||
chatScrollOffset = 0;
|
chatScrollOffset = 0;
|
||||||
}
|
}
|
||||||
renderChatMessages(screenHeight, max, isChatting, font);
|
renderChatMessages(screenHeight, max, isChatting, font);
|
||||||
#if !defined(RPI)
|
#if !defined(RPI)
|
||||||
renderOnSelectItemNameText(screenWidth, font, ySlot);
|
renderOnSelectItemNameText(screenWidth, font, ySlot);
|
||||||
#endif
|
#endif
|
||||||
#if defined(RPI)
|
#if defined(RPI)
|
||||||
renderDebugInfo();
|
renderDebugInfo();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (Keyboard::isKeyDown(Keyboard::KEY_TAB)) {
|
if (Keyboard::isKeyDown(Keyboard::KEY_TAB)) {
|
||||||
renderPlayerList(font, screenWidth, screenHeight);
|
renderPlayerList(font, screenWidth, screenHeight);
|
||||||
}
|
|
||||||
|
|
||||||
if (minecraft->options.getBooleanValue(OPTIONS_RENDER_DEBUG))
|
|
||||||
renderDebugInfo();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
glDisable(GL_BLEND);
|
if (minecraft->options.getBooleanValue(OPTIONS_RENDER_DEBUG))
|
||||||
|
renderDebugInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
glDisable(GL_BLEND);
|
||||||
glEnable2(GL_ALPHA_TEST);
|
glEnable2(GL_ALPHA_TEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,7 +183,7 @@ void Gui::getSlotPos(int slot, int& posX, int& posY) {
|
|||||||
int screenWidth = (int)(minecraft->width * InvGuiScale);
|
int screenWidth = (int)(minecraft->width * InvGuiScale);
|
||||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||||
posX = screenWidth / 2 - getNumSlots() * 10 + slot * 20,
|
posX = screenWidth / 2 - getNumSlots() * 10 + slot * 20,
|
||||||
posY = screenHeight - 22;
|
posY = screenHeight - 22;
|
||||||
}
|
}
|
||||||
|
|
||||||
RectangleArea Gui::getRectangleArea(int extendSide) {
|
RectangleArea Gui::getRectangleArea(int extendSide) {
|
||||||
@@ -202,7 +196,7 @@ RectangleArea Gui::getRectangleArea(int extendSide) {
|
|||||||
return RectangleArea(0, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
|
return RectangleArea(0, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
|
||||||
if (extendSide > 0)
|
if (extendSide > 0)
|
||||||
return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, (float)minecraft->width, (float)minecraft->height);
|
return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, (float)minecraft->width, (float)minecraft->height);
|
||||||
|
|
||||||
return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
|
return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,7 +242,7 @@ void Gui::handleKeyPressed(int key)
|
|||||||
if (key == Keyboard::KEY_F1) {
|
if (key == Keyboard::KEY_F1) {
|
||||||
minecraft->options.toggle(OPTIONS_HIDEGUI);
|
minecraft->options.toggle(OPTIONS_HIDEGUI);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key == 99)
|
if (key == 99)
|
||||||
{
|
{
|
||||||
if (minecraft->player->inventory->selected > 0)
|
if (minecraft->player->inventory->selected > 0)
|
||||||
@@ -296,11 +290,11 @@ void Gui::tick() {
|
|||||||
if(itemNameOverlayTime < 2)
|
if(itemNameOverlayTime < 2)
|
||||||
itemNameOverlayTime += 1.0f / SharedConstants::TicksPerSecond;
|
itemNameOverlayTime += 1.0f / SharedConstants::TicksPerSecond;
|
||||||
for (unsigned int i = 0; i < guiMessages.size(); i++) {
|
for (unsigned int i = 0; i < guiMessages.size(); i++) {
|
||||||
guiMessages.at(i).ticks++;
|
guiMessages.at(i).ticks++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!minecraft->isCreativeMode())
|
if (!minecraft->isCreativeMode())
|
||||||
tickItemDrop();
|
tickItemDrop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gui::addMessage(const std::string& _string) {
|
void Gui::addMessage(const std::string& _string) {
|
||||||
@@ -350,8 +344,6 @@ void Gui::displayClientMessage(const std::string& messageId) {
|
|||||||
addMessage(messageId);
|
addMessage(messageId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// @todo - shredder: Function seems to be completely fine and ported over from java beta, but renders opaque??? need to investigate
|
|
||||||
void Gui::renderVignette(float br, int w, int h) {
|
void Gui::renderVignette(float br, int w, int h) {
|
||||||
br = 1 - br;
|
br = 1 - br;
|
||||||
if (br < 0) br = 0;
|
if (br < 0) br = 0;
|
||||||
@@ -362,10 +354,7 @@ void Gui::renderVignette(float br, int w, int h) {
|
|||||||
glDepthMask(false);
|
glDepthMask(false);
|
||||||
glBlendFunc2(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
|
glBlendFunc2(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
|
||||||
glColor4f2(tbr, tbr, tbr, 1);
|
glColor4f2(tbr, tbr, tbr, 1);
|
||||||
|
|
||||||
minecraft->textures->loadAndBindTexture("misc/vignette.png");
|
minecraft->textures->loadAndBindTexture("misc/vignette.png");
|
||||||
glTexParameteri2(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
||||||
glTexParameteri2(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
|
|
||||||
Tesselator& t = Tesselator::instance;
|
Tesselator& t = Tesselator::instance;
|
||||||
t.begin();
|
t.begin();
|
||||||
@@ -418,7 +407,7 @@ void Gui::inventoryUpdated() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Gui::onGraphicsReset() {
|
void Gui::onGraphicsReset() {
|
||||||
inventoryUpdated();
|
inventoryUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gui::texturesLoaded( Textures* textures ) {
|
void Gui::texturesLoaded( Textures* textures ) {
|
||||||
@@ -596,12 +585,12 @@ void Gui::renderProgressIndicator( const bool isTouchInterface, const int screen
|
|||||||
bool bowEquipped = currentItem != NULL ? currentItem->getItem() == Item::bow : false;
|
bool bowEquipped = currentItem != NULL ? currentItem->getItem() == Item::bow : false;
|
||||||
bool itemInUse = currentItem != NULL ? currentItem->getItem() == minecraft->player->getUseItem()->getItem() : false;
|
bool itemInUse = currentItem != NULL ? currentItem->getItem() == minecraft->player->getUseItem()->getItem() : false;
|
||||||
if ((!isTouchInterface || minecraft->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA)
|
if ((!isTouchInterface || minecraft->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA)
|
||||||
|| (bowEquipped && itemInUse)) && !minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
|
|| (bowEquipped && itemInUse)) && !minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
|
||||||
minecraft->textures->loadAndBindTexture("gui/icons.png");
|
minecraft->textures->loadAndBindTexture("gui/icons.png");
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
|
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
|
||||||
blit(screenWidth/2 - 8, screenHeight/2 - 8, 0, 0, 16, 16);
|
blit(screenWidth/2 - 8, screenHeight/2 - 8, 0, 0, 16, 16);
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
} else if(!bowEquipped) {
|
} else if(!bowEquipped) {
|
||||||
const float tprogress = minecraft->gameMode->destroyProgress;
|
const float tprogress = minecraft->gameMode->destroyProgress;
|
||||||
const float alpha = Mth::clamp(minecraft->inputHolder->alpha, 0.0f, 1.0f);
|
const float alpha = Mth::clamp(minecraft->inputHolder->alpha, 0.0f, 1.0f);
|
||||||
@@ -676,10 +665,10 @@ void Gui::renderHearts() {
|
|||||||
int ip2 = i + i + 1;
|
int ip2 = i + i + 1;
|
||||||
|
|
||||||
if (armor > 0) {
|
if (armor > 0) {
|
||||||
int xo = xx + 80 + i * 8 + 4;
|
int xo = xx + 80 + i * 8 + 4;
|
||||||
if (ip2 < armor) blit(xo, yo, 16 + 2 * 9, 9 * 1, 9, 9);
|
if (ip2 < armor) blit(xo, yo, 16 + 2 * 9, 9 * 1, 9, 9);
|
||||||
else if (ip2 == armor) blit(xo, yo, 16 + 4 * 9, 9 * 1, 9, 9);
|
else if (ip2 == armor) blit(xo, yo, 16 + 4 * 9, 9 * 1, 9, 9);
|
||||||
else if (ip2 > armor) blit(xo, yo, 16 + 0 * 9, 9 * 1, 9, 9);
|
else if (ip2 > armor) blit(xo, yo, 16 + 0 * 9, 9 * 1, 9, 9);
|
||||||
}
|
}
|
||||||
|
|
||||||
int bg = 0;
|
int bg = 0;
|
||||||
@@ -702,7 +691,7 @@ void Gui::renderBubbles() {
|
|||||||
if (minecraft->player->isUnderLiquid(Material::water)) {
|
if (minecraft->player->isUnderLiquid(Material::water)) {
|
||||||
int screenWidth = (int)(minecraft->width * InvGuiScale);
|
int screenWidth = (int)(minecraft->width * InvGuiScale);
|
||||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||||
|
|
||||||
int xx = (minecraft->options.getBooleanValue(OPTIONS_BAR_ON_TOP)) ? screenWidth / 2 - getNumSlots() * 10 - 1 : 2;
|
int xx = (minecraft->options.getBooleanValue(OPTIONS_BAR_ON_TOP)) ? screenWidth / 2 - getNumSlots() * 10 - 1 : 2;
|
||||||
int yo = (minecraft->options.getBooleanValue(OPTIONS_BAR_ON_TOP)) ? screenHeight - 42 : 12;
|
int yo = (minecraft->options.getBooleanValue(OPTIONS_BAR_ON_TOP)) ? screenHeight - 42 : 12;
|
||||||
int count = (int) std::ceil((minecraft->player->airSupply - 2) * 10.0f / Player::TOTAL_AIR_SUPPLY);
|
int count = (int) std::ceil((minecraft->player->airSupply - 2) * 10.0f / Player::TOTAL_AIR_SUPPLY);
|
||||||
@@ -921,64 +910,64 @@ void Gui::renderOnSelectItemNameText( const int screenWidth, Font* font, int ySl
|
|||||||
|
|
||||||
// helper structure used by drawColoredString
|
// helper structure used by drawColoredString
|
||||||
struct ColorSegment {
|
struct ColorSegment {
|
||||||
std::string text;
|
std::string text;
|
||||||
uint32_t color;
|
uint32_t color;
|
||||||
};
|
};
|
||||||
|
|
||||||
// parse [tag] and [/tag] markers; tags may contain a color name (gold, green, etc.)
|
// parse [tag] and [/tag] markers; tags may contain a color name (gold, green, etc.)
|
||||||
static void parseColorTags(const std::string& in, std::vector<ColorSegment>& out) {
|
static void parseColorTags(const std::string& in, std::vector<ColorSegment>& out) {
|
||||||
uint32_t curColor = 0xffffff;
|
uint32_t curColor = 0xffffff;
|
||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
while (pos < in.size()) {
|
while (pos < in.size()) {
|
||||||
size_t open = in.find('[', pos);
|
size_t open = in.find('[', pos);
|
||||||
if (open == std::string::npos) {
|
if (open == std::string::npos) {
|
||||||
out.push_back({in.substr(pos), curColor});
|
out.push_back({in.substr(pos), curColor});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (open > pos) {
|
if (open > pos) {
|
||||||
out.push_back({in.substr(pos, open - pos), curColor});
|
out.push_back({in.substr(pos, open - pos), curColor});
|
||||||
}
|
}
|
||||||
size_t close = in.find(']', open);
|
size_t close = in.find(']', open);
|
||||||
if (close == std::string::npos) {
|
if (close == std::string::npos) {
|
||||||
out.push_back({in.substr(open), curColor});
|
out.push_back({in.substr(open), curColor});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
std::string tag = in.substr(open + 1, close - open - 1);
|
std::string tag = in.substr(open + 1, close - open - 1);
|
||||||
if (!tag.empty() && tag[0] == '/') {
|
if (!tag.empty() && tag[0] == '/') {
|
||||||
curColor = 0xffffff;
|
curColor = 0xffffff;
|
||||||
} else {
|
} else {
|
||||||
std::string lower;
|
std::string lower;
|
||||||
lower.resize(tag.size());
|
lower.resize(tag.size());
|
||||||
std::transform(tag.begin(), tag.end(), lower.begin(), ::tolower);
|
std::transform(tag.begin(), tag.end(), lower.begin(), ::tolower);
|
||||||
if (lower.find("gold") != std::string::npos) curColor = 0xffd700;
|
if (lower.find("gold") != std::string::npos) curColor = 0xffd700;
|
||||||
else if (lower.find("green") != std::string::npos) curColor = 0x00ff00;
|
else if (lower.find("green") != std::string::npos) curColor = 0x00ff00;
|
||||||
else if (lower.find("yellow") != std::string::npos) curColor = 0xffff00;
|
else if (lower.find("yellow") != std::string::npos) curColor = 0xffff00;
|
||||||
else if (lower.find("red") != std::string::npos) curColor = 0xff0000;
|
else if (lower.find("red") != std::string::npos) curColor = 0xff0000;
|
||||||
else if (lower.find("blue") != std::string::npos) curColor = 0x0000ff;
|
else if (lower.find("blue") != std::string::npos) curColor = 0x0000ff;
|
||||||
}
|
}
|
||||||
pos = close + 1;
|
pos = close + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gui::drawColoredString(Font* font, const std::string& text, float x, float y, int alpha) {
|
void Gui::drawColoredString(Font* font, const std::string& text, float x, float y, int alpha) {
|
||||||
std::vector<ColorSegment> segs;
|
std::vector<ColorSegment> segs;
|
||||||
parseColorTags(text, segs);
|
parseColorTags(text, segs);
|
||||||
float cx = x;
|
float cx = x;
|
||||||
for (auto &s : segs) {
|
for (auto &s : segs) {
|
||||||
int color = s.color + (alpha << 24);
|
int color = s.color + (alpha << 24);
|
||||||
font->drawShadow(s.text, cx, y, color);
|
font->drawShadow(s.text, cx, y, color);
|
||||||
cx += font->width(s.text);
|
cx += font->width(s.text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float Gui::getColoredWidth(Font* font, const std::string& text) {
|
float Gui::getColoredWidth(Font* font, const std::string& text) {
|
||||||
std::vector<ColorSegment> segs;
|
std::vector<ColorSegment> segs;
|
||||||
parseColorTags(text, segs);
|
parseColorTags(text, segs);
|
||||||
float w = 0;
|
float w = 0;
|
||||||
for (auto &s : segs) {
|
for (auto &s : segs) {
|
||||||
w += font->width(s.text);
|
w += font->width(s.text);
|
||||||
}
|
}
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isChatting, Font* font ) {
|
void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isChatting, Font* font ) {
|
||||||
@@ -1022,13 +1011,13 @@ void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isC
|
|||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
|
|
||||||
// special-case join/leave announcements
|
// special-case join/leave announcements
|
||||||
int baseColor = 0xffffff;
|
int baseColor = 0xffffff;
|
||||||
if (msg.find(" joined the game") != std::string::npos ||
|
if (msg.find(" joined the game") != std::string::npos ||
|
||||||
msg.find(" left the game") != std::string::npos) {
|
msg.find(" left the game") != std::string::npos) {
|
||||||
baseColor = 0xffff00; // yellow
|
baseColor = 0xffff00; // yellow
|
||||||
}
|
}
|
||||||
// replace previous logic; allow full colour tags now
|
// replace previous logic; allow full colour tags now
|
||||||
Gui::drawColoredString(font, msg, x, y, alpha);
|
Gui::drawColoredString(font, msg, x, y, alpha);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1116,41 +1105,22 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
|
|||||||
|
|
||||||
// Draw count
|
// Draw count
|
||||||
//Tesselator& t = Tesselator::instance;
|
//Tesselator& t = Tesselator::instance;
|
||||||
|
glPushMatrix2();
|
||||||
|
glScalef2(InvGuiScale + InvGuiScale, InvGuiScale + InvGuiScale, 1);
|
||||||
const float k = 0.5f * GuiScale;
|
const float k = 0.5f * GuiScale;
|
||||||
if (minecraft->options.getBooleanValue(OPTIONS_JAVA_HUD)) // if true enables the java beta item count size and color and calls the java items decorations
|
|
||||||
{
|
t.beginOverride();
|
||||||
t.beginOverride();
|
if (minecraft->gameMode->isSurvivalType()) {
|
||||||
if (minecraft->gameMode->isSurvivalType()) {
|
x = baseItemX;
|
||||||
x = baseItemX;
|
for (int i = 0; i < slots; i++) {
|
||||||
for (int i = 0; i < slots; i++) {
|
ItemInstance* item = minecraft->player->inventory->getItem(i);
|
||||||
ItemInstance* item = minecraft->player->inventory->getItem(i);
|
if (item && item->count >= 0)
|
||||||
if (item && item->count >= 0)
|
renderSlotText(item, k*x, k*ySlot + 1, true, true);
|
||||||
ItemRenderer::renderGuiItemDecorations(minecraft->font, minecraft->textures, minecraft->player->inventory->getItem(i), x, (float)ySlot);
|
x += 20;
|
||||||
x += 20;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
minecraft->textures->loadAndBindTexture("font/default8.png");
|
|
||||||
t.endOverrideAndDraw();
|
|
||||||
}
|
|
||||||
else { // otherwise uses the normal pocket edition one
|
|
||||||
glPushMatrix2();
|
|
||||||
glScalef2(InvGuiScale + InvGuiScale, InvGuiScale + InvGuiScale, 1);
|
|
||||||
t.beginOverride();
|
|
||||||
if (minecraft->gameMode->isSurvivalType()) {
|
|
||||||
x = baseItemX;
|
|
||||||
for (int i = 0; i < slots; i++) {
|
|
||||||
ItemInstance* item = minecraft->player->inventory->getItem(i);
|
|
||||||
if (item && item->count >= 0)
|
|
||||||
renderSlotText(item, k*x, k*ySlot, true, true);
|
|
||||||
x += 20;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
minecraft->textures->loadAndBindTexture("font/default8.png");
|
|
||||||
t.endOverrideAndDraw();
|
|
||||||
|
|
||||||
glPopMatrix2();
|
|
||||||
}
|
}
|
||||||
|
minecraft->textures->loadAndBindTexture("font/default8.png");
|
||||||
|
t.endOverrideAndDraw();
|
||||||
|
|
||||||
|
glPopMatrix2();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
#include "ImageButton.h"
|
#include "ImageButton.h"
|
||||||
#include "Slider.h"
|
#include "Slider.h"
|
||||||
#include "../../Minecraft.h"
|
#include "../../Minecraft.h"
|
||||||
#include "client/Options.h"
|
|
||||||
|
|
||||||
OptionsPane::OptionsPane() {
|
OptionsPane::OptionsPane() {
|
||||||
|
|
||||||
@@ -29,7 +28,7 @@ OptionsGroup& OptionsPane::createOptionsGroup( std::string label ) {
|
|||||||
return *newGroup;
|
return *newGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsPane::createToggle( unsigned int group, std::string label, OptionId option ) {
|
void OptionsPane::createToggle( unsigned int group, std::string label, const Option* option ) {
|
||||||
if(group > children.size()) return;
|
if(group > children.size()) return;
|
||||||
ImageDef def;
|
ImageDef def;
|
||||||
def.setSrc(IntRectangle(160, 206, 39, 20));
|
def.setSrc(IntRectangle(160, 206, 39, 20));
|
||||||
@@ -38,27 +37,27 @@ void OptionsPane::createToggle( unsigned int group, std::string label, OptionId
|
|||||||
def.height = 20 * 0.7f;
|
def.height = 20 * 0.7f;
|
||||||
OptionButton* element = new OptionButton(option);
|
OptionButton* element = new OptionButton(option);
|
||||||
element->setImageDef(def, true);
|
element->setImageDef(def, true);
|
||||||
OptionsItem* item = new OptionsItem(option, label, element);
|
OptionsItem* item = new OptionsItem(label, element);
|
||||||
((OptionsGroup*)children[group])->addChild(item);
|
((OptionsGroup*)children[group])->addChild(item);
|
||||||
setupPositions();
|
setupPositions();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsPane::createProgressSlider( Minecraft* minecraft, unsigned int group, std::string label, OptionId option, float progressMin/*=1.0f*/, float progressMax/*=1.0f */ ) {
|
void OptionsPane::createProgressSlider( Minecraft* minecraft, unsigned int group, std::string label, const Option* option, float progressMin/*=1.0f*/, float progressMax/*=1.0f */ ) {
|
||||||
if(group > children.size()) return;
|
if(group > children.size()) return;
|
||||||
Slider* element = new SliderFloat(minecraft, option);
|
Slider* element = new Slider(minecraft, option, progressMin, progressMax);
|
||||||
element->width = 100;
|
element->width = 100;
|
||||||
element->height = 20;
|
element->height = 20;
|
||||||
OptionsItem* item = new OptionsItem(option, label, element);
|
OptionsItem* item = new OptionsItem(label, element);
|
||||||
((OptionsGroup*)children[group])->addChild(item);
|
((OptionsGroup*)children[group])->addChild(item);
|
||||||
setupPositions();
|
setupPositions();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsPane::createStepSlider( Minecraft* minecraft, unsigned int group, std::string label, OptionId option, const std::vector<int>& stepVec ) {
|
void OptionsPane::createStepSlider( Minecraft* minecraft, unsigned int group, std::string label, const Option* option, const std::vector<int>& stepVec ) {
|
||||||
if(group > children.size()) return;
|
if(group > children.size()) return;
|
||||||
Slider* element = new SliderInt(minecraft, option);
|
Slider* element = new Slider(minecraft, option, stepVec);
|
||||||
element->width = 100;
|
element->width = 100;
|
||||||
element->height = 20;
|
element->height = 20;
|
||||||
OptionsItem* item = new OptionsItem(option, label, element);
|
OptionsItem* item = new OptionsItem(label, element);
|
||||||
((OptionsGroup*)children[group])->addChild(item);
|
((OptionsGroup*)children[group])->addChild(item);
|
||||||
setupPositions();
|
setupPositions();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ class OptionsPane: public GuiElementContainer
|
|||||||
public:
|
public:
|
||||||
OptionsPane();
|
OptionsPane();
|
||||||
OptionsGroup& createOptionsGroup( std::string label );
|
OptionsGroup& createOptionsGroup( std::string label );
|
||||||
void createToggle( unsigned int group, std::string label, OptionId option );
|
void createToggle( unsigned int group, std::string label, const Option* option );
|
||||||
void createProgressSlider(Minecraft* minecraft, unsigned int group, std::string label, OptionId option, float progressMin=1.0f, float progressMax=1.0f );
|
void createProgressSlider(Minecraft* minecraft, unsigned int group, std::string label, const Option* option, float progressMin=1.0f, float progressMax=1.0f );
|
||||||
void createStepSlider(Minecraft* minecraft, unsigned int group, std::string label, OptionId option, const std::vector<int>& stepVec );
|
void createStepSlider(Minecraft* minecraft, unsigned int group, std::string label, const Option* option, const std::vector<int>& stepVec );
|
||||||
void setupPositions();
|
void setupPositions();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
#include "../Screen.h"
|
#include "../Screen.h"
|
||||||
#include "../components/Button.h"
|
#include "../components/Button.h"
|
||||||
#include "../../Minecraft.h"
|
#include "../../Minecraft.h"
|
||||||
#include "../components/ImageButton.h"
|
#include "ImageButton.h"
|
||||||
#include "../components/TextBox.h"
|
#include "TextBox.h"
|
||||||
|
|
||||||
class JoinByIPScreen: public Screen
|
class JoinByIPScreen: public Screen
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ void OptionsScreen::render(int xm, int ym, float a) {
|
|||||||
|
|
||||||
if (currentOptionsGroup != NULL)
|
if (currentOptionsGroup != NULL)
|
||||||
currentOptionsGroup->render(minecraft, xmm, ymm);
|
currentOptionsGroup->render(minecraft, xmm, ymm);
|
||||||
|
|
||||||
super::render(xm, ym, a);
|
super::render(xm, ym, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,14 +225,10 @@ void OptionsScreen::generateOptionScreens() {
|
|||||||
.addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft)
|
.addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft)
|
||||||
.addOptionItem(OPTIONS_VIEW_BOBBING, minecraft)
|
.addOptionItem(OPTIONS_VIEW_BOBBING, minecraft)
|
||||||
.addOptionItem(OPTIONS_AMBIENT_OCCLUSION, minecraft);
|
.addOptionItem(OPTIONS_AMBIENT_OCCLUSION, minecraft);
|
||||||
|
|
||||||
optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
|
optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
|
||||||
.addOptionItem(OPTIONS_BAR_ON_TOP, minecraft)
|
.addOptionItem(OPTIONS_BAR_ON_TOP, minecraft)
|
||||||
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft)
|
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft);
|
||||||
.addOptionItem(OPTIONS_FOLIAGE_TINT, minecraft)
|
|
||||||
.addOptionItem(OPTIONS_JAVA_HUD, minecraft)
|
|
||||||
.addOptionItem(OPTIONS_FOG_TYPE, minecraft);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
|
void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
|
||||||
@@ -254,7 +250,7 @@ void OptionsScreen::keyPressed(int eventKey) {
|
|||||||
currentOptionsGroup->keyPressed(minecraft, eventKey);
|
currentOptionsGroup->keyPressed(minecraft, eventKey);
|
||||||
if (eventKey == Keyboard::KEY_ESCAPE)
|
if (eventKey == Keyboard::KEY_ESCAPE)
|
||||||
minecraft->options.save();
|
minecraft->options.save();
|
||||||
|
|
||||||
super::keyPressed(eventKey);
|
super::keyPressed(eventKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
#include "../../../../world/level/Level.h"
|
#include "../../../../world/level/Level.h"
|
||||||
#include "../../../../world/item/DyePowderItem.h"
|
#include "../../../../world/item/DyePowderItem.h"
|
||||||
#include "../../../../world/item/crafting/Recipe.h"
|
#include "../../../../world/item/crafting/Recipe.h"
|
||||||
#include "platform/input/Keyboard.h"
|
#include "Keyboard.h"
|
||||||
|
|
||||||
static NinePatchLayer* guiPaneFrame = NULL;
|
static NinePatchLayer* guiPaneFrame = NULL;
|
||||||
|
|
||||||
|
|||||||
@@ -7,10 +7,6 @@
|
|||||||
#include "../../world/level/Region.h"
|
#include "../../world/level/Region.h"
|
||||||
#include "../../world/level/chunk/LevelChunk.h"
|
#include "../../world/level/chunk/LevelChunk.h"
|
||||||
#include "../../util/Mth.h"
|
#include "../../util/Mth.h"
|
||||||
|
|
||||||
#include "../../world/level/biome/BiomeSource.h"
|
|
||||||
|
|
||||||
#include "../../world/level/Level.h"
|
|
||||||
//#include "../../platform/time.h"
|
//#include "../../platform/time.h"
|
||||||
|
|
||||||
/*static*/ int Chunk::updates = 0;
|
/*static*/ int Chunk::updates = 0;
|
||||||
@@ -263,4 +259,4 @@ void Chunk::resetUpdates()
|
|||||||
{
|
{
|
||||||
updates = 0;
|
updates = 0;
|
||||||
//swRebuild.reset();
|
//swRebuild.reset();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,8 +25,6 @@
|
|||||||
|
|
||||||
#include "../../client/player/LocalPlayer.h"
|
#include "../../client/player/LocalPlayer.h"
|
||||||
|
|
||||||
#include "../../world/level/GrassColor.h"
|
|
||||||
|
|
||||||
#ifdef GFX_SMALLER_CHUNKS
|
#ifdef GFX_SMALLER_CHUNKS
|
||||||
/* static */ const int LevelRenderer::CHUNK_SIZE = 8;
|
/* static */ const int LevelRenderer::CHUNK_SIZE = 8;
|
||||||
#else
|
#else
|
||||||
@@ -34,7 +32,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
LevelRenderer::LevelRenderer( Minecraft* mc)
|
LevelRenderer::LevelRenderer( Minecraft* mc)
|
||||||
: mc(mc),
|
: mc(mc),
|
||||||
textures(mc->textures),
|
textures(mc->textures),
|
||||||
level(NULL),
|
level(NULL),
|
||||||
cullStep(0),
|
cullStep(0),
|
||||||
@@ -49,7 +47,6 @@ LevelRenderer::LevelRenderer( Minecraft* mc)
|
|||||||
xMaxChunk(0), yMaxChunk(0), zMaxChunk(0),
|
xMaxChunk(0), yMaxChunk(0), zMaxChunk(0),
|
||||||
|
|
||||||
lastViewDistance(-1),
|
lastViewDistance(-1),
|
||||||
lastFogType(-1),
|
|
||||||
|
|
||||||
noEntityRenderFrames(2),
|
noEntityRenderFrames(2),
|
||||||
totalEntities(0),
|
totalEntities(0),
|
||||||
@@ -146,10 +143,6 @@ void LevelRenderer::setLevel( Level* level )
|
|||||||
level->addListener(this);
|
level->addListener(this);
|
||||||
allChanged();
|
allChanged();
|
||||||
}
|
}
|
||||||
if (mc->options.getBooleanValue(OPTIONS_AMBIENT_OCCLUSION)) {
|
|
||||||
mc->useAmbientOcclusion = !mc->useAmbientOcclusion;
|
|
||||||
allChanged();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LevelRenderer::allChanged()
|
void LevelRenderer::allChanged()
|
||||||
@@ -162,21 +155,14 @@ void LevelRenderer::allChanged()
|
|||||||
Tile::leaves_carried->setFancy(fancy);
|
Tile::leaves_carried->setFancy(fancy);
|
||||||
lastViewDistance = mc->options.getIntValue(OPTIONS_VIEW_DISTANCE);
|
lastViewDistance = mc->options.getIntValue(OPTIONS_VIEW_DISTANCE);
|
||||||
|
|
||||||
lastFogType = mc->options.getIntValue(OPTIONS_FOG_TYPE);
|
|
||||||
|
|
||||||
bool tint = mc->options.getBooleanValue(OPTIONS_FOLIAGE_TINT);
|
|
||||||
FoliageColor::setUseTint(tint);
|
|
||||||
GrassColor::setUseTint(tint);
|
|
||||||
|
|
||||||
|
|
||||||
int dist = (512 >> 3) << (3 - lastViewDistance);
|
int dist = (512 >> 3) << (3 - lastViewDistance);
|
||||||
if (lastViewDistance <= 2 && mc->isPowerVR())
|
if (lastViewDistance <= 2 && mc->isPowerVR())
|
||||||
dist = (int)((float)dist * 0.8f);
|
dist = (int)((float)dist * 0.8f);
|
||||||
LOGI("last: %d, power: %d\n", lastViewDistance, mc->isPowerVR());
|
LOGI("last: %d, power: %d\n", lastViewDistance, mc->isPowerVR());
|
||||||
|
|
||||||
#if defined(RPI)
|
#if defined(RPI)
|
||||||
dist *= 0.6f;
|
dist *= 0.6f;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (dist > 400) dist = 400;
|
if (dist > 400) dist = 400;
|
||||||
/*
|
/*
|
||||||
@@ -241,17 +227,17 @@ void LevelRenderer::allChanged()
|
|||||||
void LevelRenderer::deleteChunks()
|
void LevelRenderer::deleteChunks()
|
||||||
{
|
{
|
||||||
for (int z = 0; z < zChunks; ++z)
|
for (int z = 0; z < zChunks; ++z)
|
||||||
for (int y = 0; y < yChunks; ++y)
|
for (int y = 0; y < yChunks; ++y)
|
||||||
for (int x = 0; x < xChunks; ++x) {
|
for (int x = 0; x < xChunks; ++x) {
|
||||||
int c = getLinearCoord(x, y, z);
|
int c = getLinearCoord(x, y, z);
|
||||||
delete chunks[c];
|
delete chunks[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
delete[] chunks;
|
delete[] chunks;
|
||||||
chunks = NULL;
|
chunks = NULL;
|
||||||
|
|
||||||
delete[] sortedChunks;
|
delete[] sortedChunks;
|
||||||
sortedChunks = NULL;
|
sortedChunks = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LevelRenderer::resortChunks( int xc, int yc, int zc )
|
void LevelRenderer::resortChunks( int xc, int yc, int zc )
|
||||||
@@ -315,17 +301,6 @@ int LevelRenderer::render( Mob* player, int layer, float alpha )
|
|||||||
allChanged();
|
allChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
int currentFogType = mc->options.getIntValue(OPTIONS_FOG_TYPE);
|
|
||||||
if (currentFogType != lastFogType) {
|
|
||||||
lastFogType = currentFogType;
|
|
||||||
|
|
||||||
if (level && level->dimension) {
|
|
||||||
level->dimension->FogType = currentFogType; // use new fog stuff
|
|
||||||
}
|
|
||||||
|
|
||||||
allChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
TIMER_PUSH("sortchunks");
|
TIMER_PUSH("sortchunks");
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
chunkFixOffs = (chunkFixOffs + 1) % chunksLength;
|
chunkFixOffs = (chunkFixOffs + 1) % chunksLength;
|
||||||
@@ -594,11 +569,11 @@ int LevelRenderer::renderChunks( int from, int to, int layer, float alpha )
|
|||||||
|
|
||||||
for (unsigned int i = 0; i < _renderChunks.size(); ++i) {
|
for (unsigned int i = 0; i < _renderChunks.size(); ++i) {
|
||||||
Chunk* chunk = _renderChunks[i];
|
Chunk* chunk = _renderChunks[i];
|
||||||
#ifdef USE_VBO
|
#ifdef USE_VBO
|
||||||
renderList.addR(chunk->getRenderChunk(layer));
|
renderList.addR(chunk->getRenderChunk(layer));
|
||||||
#else
|
#else
|
||||||
renderList.add(chunk->getList(layer));
|
renderList.add(chunk->getList(layer));
|
||||||
#endif
|
#endif
|
||||||
renderList.next();
|
renderList.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -749,20 +724,20 @@ bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
|
|||||||
Chunk* chunk = dirtyChunks[cursor];
|
Chunk* chunk = dirtyChunks[cursor];
|
||||||
if (chunk != NULL) {
|
if (chunk != NULL) {
|
||||||
bool remove = false;
|
bool remove = false;
|
||||||
for (int i = 0; i < count && !remove; i++)
|
for (int i = 0; i < count && !remove; i++)
|
||||||
if (chunk == toAdd[i]) {
|
if (chunk == toAdd[i]) {
|
||||||
remove = true;
|
remove = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!remove) {
|
if (!remove) {
|
||||||
//if (chunk == toAdd[0] || chunk == toAdd[1] || chunk == toAdd[2]) {
|
//if (chunk == toAdd[0] || chunk == toAdd[1] || chunk == toAdd[2]) {
|
||||||
// ; // this chunk was rendered and should be removed
|
// ; // this chunk was rendered and should be removed
|
||||||
//} else {
|
//} else {
|
||||||
if (target != cursor) {
|
if (target != cursor) {
|
||||||
dirtyChunks[target] = chunk;
|
dirtyChunks[target] = chunk;
|
||||||
}
|
|
||||||
target++;
|
|
||||||
}
|
}
|
||||||
|
target++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cursor++;
|
cursor++;
|
||||||
}
|
}
|
||||||
@@ -936,23 +911,23 @@ bool entityRenderPredicate(const Entity* a, const Entity* b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
|
void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
|
||||||
if (noEntityRenderFrames > 0) {
|
if (noEntityRenderFrames > 0) {
|
||||||
noEntityRenderFrames--;
|
noEntityRenderFrames--;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TIMER_PUSH("prepare");
|
TIMER_PUSH("prepare");
|
||||||
TileEntityRenderDispatcher::getInstance()->prepare(level, textures, mc->font, mc->cameraTargetPlayer, a);
|
TileEntityRenderDispatcher::getInstance()->prepare(level, textures, mc->font, mc->cameraTargetPlayer, a);
|
||||||
EntityRenderDispatcher::getInstance()->prepare(level, mc->font, mc->cameraTargetPlayer, &mc->options, a);
|
EntityRenderDispatcher::getInstance()->prepare(level, mc->font, mc->cameraTargetPlayer, &mc->options, a);
|
||||||
|
|
||||||
totalEntities = 0;
|
totalEntities = 0;
|
||||||
renderedEntities = 0;
|
renderedEntities = 0;
|
||||||
culledEntities = 0;
|
culledEntities = 0;
|
||||||
|
|
||||||
Entity* player = mc->cameraTargetPlayer;
|
Entity* player = mc->cameraTargetPlayer;
|
||||||
EntityRenderDispatcher::xOff = TileEntityRenderDispatcher::xOff = (player->xOld + (player->x - player->xOld) * a);
|
EntityRenderDispatcher::xOff = TileEntityRenderDispatcher::xOff = (player->xOld + (player->x - player->xOld) * a);
|
||||||
EntityRenderDispatcher::yOff = TileEntityRenderDispatcher::yOff = (player->yOld + (player->y - player->yOld) * a);
|
EntityRenderDispatcher::yOff = TileEntityRenderDispatcher::yOff = (player->yOld + (player->y - player->yOld) * a);
|
||||||
EntityRenderDispatcher::zOff = TileEntityRenderDispatcher::zOff = (player->zOld + (player->z - player->zOld) * a);
|
EntityRenderDispatcher::zOff = TileEntityRenderDispatcher::zOff = (player->zOld + (player->z - player->zOld) * a);
|
||||||
|
|
||||||
glEnableClientState2(GL_VERTEX_ARRAY);
|
glEnableClientState2(GL_VERTEX_ARRAY);
|
||||||
glEnableClientState2(GL_TEXTURE_COORD_ARRAY);
|
glEnableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||||
@@ -991,10 +966,10 @@ void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
|
|||||||
delete[] toRender;
|
delete[] toRender;
|
||||||
}
|
}
|
||||||
|
|
||||||
TIMER_POP_PUSH("tileentities");
|
TIMER_POP_PUSH("tileentities");
|
||||||
for (unsigned int i = 0; i < level->tileEntities.size(); i++) {
|
for (unsigned int i = 0; i < level->tileEntities.size(); i++) {
|
||||||
TileEntityRenderDispatcher::getInstance()->render(level->tileEntities[i], a);
|
TileEntityRenderDispatcher::getInstance()->render(level->tileEntities[i], a);
|
||||||
}
|
}
|
||||||
|
|
||||||
glDisableClientState2(GL_VERTEX_ARRAY);
|
glDisableClientState2(GL_VERTEX_ARRAY);
|
||||||
glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
|
glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
|
||||||
@@ -1005,7 +980,7 @@ void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
|
|||||||
std::string LevelRenderer::gatherStats1() {
|
std::string LevelRenderer::gatherStats1() {
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "C: " << renderedChunks << "/" << totalChunks << ". F: " << offscreenChunks << ", O: " << occludedChunks << ", E: " << emptyChunks << "\n";
|
ss << "C: " << renderedChunks << "/" << totalChunks << ". F: " << offscreenChunks << ", O: " << occludedChunks << ", E: " << emptyChunks << "\n";
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1017,34 +992,34 @@ std::string LevelRenderer::gatherStats1() {
|
|||||||
// IntBuffer resultBuffer = MemoryTracker.createIntBuffer(64);
|
// IntBuffer resultBuffer = MemoryTracker.createIntBuffer(64);
|
||||||
|
|
||||||
void LevelRenderer::renderSky(float alpha) {
|
void LevelRenderer::renderSky(float alpha) {
|
||||||
if (mc->level->dimension->foggy) return;
|
if (mc->level->dimension->foggy) return;
|
||||||
|
|
||||||
glDisable2(GL_TEXTURE_2D);
|
glDisable2(GL_TEXTURE_2D);
|
||||||
Vec3 sc = level->getSkyColor(mc->cameraTargetPlayer, alpha);
|
Vec3 sc = level->getSkyColor(mc->cameraTargetPlayer, alpha);
|
||||||
float sr = (float) sc.x;
|
float sr = (float) sc.x;
|
||||||
float sg = (float) sc.y;
|
float sg = (float) sc.y;
|
||||||
float sb = (float) sc.z;// + 0.5f;
|
float sb = (float) sc.z;// + 0.5f;
|
||||||
|
|
||||||
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) {
|
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) {
|
||||||
float srr = (sr * 30.0f + sg * 59.0f + sb * 11.0f) / 100.0f;
|
float srr = (sr * 30.0f + sg * 59.0f + sb * 11.0f) / 100.0f;
|
||||||
float sgg = (sr * 30.0f + sg * 70.0f) / (100.0f);
|
float sgg = (sr * 30.0f + sg * 70.0f) / (100.0f);
|
||||||
float sbb = (sr * 30.0f + sb * 70.0f) / (100.0f);
|
float sbb = (sr * 30.0f + sb * 70.0f) / (100.0f);
|
||||||
|
|
||||||
sr = srr;
|
sr = srr;
|
||||||
sg = sgg;
|
sg = sgg;
|
||||||
sb = sbb;
|
sb = sbb;
|
||||||
}
|
}
|
||||||
glColor4f2(sr, sg, Mth::Min(1.0f, sb), 1);
|
glColor4f2(sr, sg, Mth::Min(1.0f, sb), 1);
|
||||||
|
|
||||||
//Tesselator& t = Tesselator::instance;
|
//Tesselator& t = Tesselator::instance;
|
||||||
|
|
||||||
glEnable2(GL_FOG);
|
glEnable2(GL_FOG);
|
||||||
glColor4f2(sr, sg, sb, 1.0f);
|
glColor4f2(sr, sg, sb, 1.0f);
|
||||||
|
|
||||||
#ifdef OPENGL_ES
|
#ifdef OPENGL_ES
|
||||||
drawArrayVT(skyBuffer, skyVertexCount);
|
drawArrayVT(skyBuffer, skyVertexCount);
|
||||||
#endif
|
#endif
|
||||||
glEnable2(GL_TEXTURE_2D);
|
glEnable2(GL_TEXTURE_2D);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LevelRenderer::renderClouds( float alpha ) {
|
void LevelRenderer::renderClouds( float alpha ) {
|
||||||
@@ -1058,7 +1033,7 @@ void LevelRenderer::renderClouds( float alpha ) {
|
|||||||
|
|
||||||
//glBindTexture(GL_TEXTURE_2D, texturesloadTexture("/environment/clouds.png"));
|
//glBindTexture(GL_TEXTURE_2D, texturesloadTexture("/environment/clouds.png"));
|
||||||
textures->loadAndBindTexture("environment/clouds.png");
|
textures->loadAndBindTexture("environment/clouds.png");
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
@@ -1101,17 +1076,17 @@ void LevelRenderer::playSound(const std::string& name, float x, float y, float z
|
|||||||
// @todo: deny sounds here if sound is off (rather than waiting 'til SoundEngine)
|
// @todo: deny sounds here if sound is off (rather than waiting 'til SoundEngine)
|
||||||
float dd = 16;
|
float dd = 16;
|
||||||
|
|
||||||
if (volume > 1) dd *= volume;
|
if (volume > 1) dd *= volume;
|
||||||
if (mc->cameraTargetPlayer->distanceToSqr(x, y, z) < dd * dd) {
|
if (mc->cameraTargetPlayer->distanceToSqr(x, y, z) < dd * dd) {
|
||||||
mc->soundEngine->play(name, x, y, z, volume, pitch);
|
mc->soundEngine->play(name, x, y, z, volume, pitch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LevelRenderer::addParticle(const std::string& name, float x, float y, float z, float xa, float ya, float za, int data) {
|
void LevelRenderer::addParticle(const std::string& name, float x, float y, float z, float xa, float ya, float za, int data) {
|
||||||
|
|
||||||
float xd = mc->cameraTargetPlayer->x - x;
|
float xd = mc->cameraTargetPlayer->x - x;
|
||||||
float yd = mc->cameraTargetPlayer->y - y;
|
float yd = mc->cameraTargetPlayer->y - y;
|
||||||
float zd = mc->cameraTargetPlayer->z - z;
|
float zd = mc->cameraTargetPlayer->z - z;
|
||||||
float distanceSquared = xd * xd + yd * yd + zd * zd;
|
float distanceSquared = xd * xd + yd * yd + zd * zd;
|
||||||
|
|
||||||
//Particle* p = NULL;
|
//Particle* p = NULL;
|
||||||
@@ -1125,27 +1100,27 @@ void LevelRenderer::addParticle(const std::string& name, float x, float y, float
|
|||||||
// return;
|
// return;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
const float particleDistance = 16;
|
const float particleDistance = 16;
|
||||||
if (distanceSquared > particleDistance * particleDistance) return;
|
if (distanceSquared > particleDistance * particleDistance) return;
|
||||||
|
|
||||||
//static Stopwatch sw;
|
//static Stopwatch sw;
|
||||||
//sw.start();
|
//sw.start();
|
||||||
|
|
||||||
if (name == "bubble") mc->particleEngine->add(new BubbleParticle(level, x, y, z, xa, ya, za));
|
if (name == "bubble") mc->particleEngine->add(new BubbleParticle(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "crit") mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za));
|
else if (name == "crit") mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "smoke") mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za));
|
else if (name == "smoke") mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za));
|
||||||
//else if (name == "note") mc->particleEngine->add(new NoteParticle(level, x, y, z, xa, ya, za));
|
//else if (name == "note") mc->particleEngine->add(new NoteParticle(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "explode") mc->particleEngine->add(new ExplodeParticle(level, x, y, z, xa, ya, za));
|
else if (name == "explode") mc->particleEngine->add(new ExplodeParticle(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "flame") mc->particleEngine->add(new FlameParticle(level, x, y, z, xa, ya, za));
|
else if (name == "flame") mc->particleEngine->add(new FlameParticle(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "lava") mc->particleEngine->add(new LavaParticle(level, x, y, z));
|
else if (name == "lava") mc->particleEngine->add(new LavaParticle(level, x, y, z));
|
||||||
//else if (name == "splash") mc->particleEngine->add(new SplashParticle(level, x, y, z, xa, ya, za));
|
//else if (name == "splash") mc->particleEngine->add(new SplashParticle(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "largesmoke") mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f));
|
else if (name == "largesmoke") mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f));
|
||||||
else if (name == "reddust") mc->particleEngine->add(new RedDustParticle(level, x, y, z, xa, ya, za));
|
else if (name == "reddust") mc->particleEngine->add(new RedDustParticle(level, x, y, z, xa, ya, za));
|
||||||
else if (name == "iconcrack") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]));
|
else if (name == "iconcrack") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]));
|
||||||
else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
|
else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
|
||||||
//else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
|
//else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
|
||||||
//else if (name == "slime") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::slimeBall));
|
//else if (name == "slime") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::slimeBall));
|
||||||
//else if (name == "heart") mc->particleEngine->add(new HeartParticle(level, x, y, z, xa, ya, za));
|
//else if (name == "heart") mc->particleEngine->add(new HeartParticle(level, x, y, z, xa, ya, za));
|
||||||
|
|
||||||
//sw.stop();
|
//sw.stop();
|
||||||
//sw.printEvery(50, "add-particle-string");
|
//sw.printEvery(50, "add-particle-string");
|
||||||
@@ -1153,53 +1128,53 @@ void LevelRenderer::addParticle(const std::string& name, float x, float y, float
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
void LevelRenderer::addParticle(ParticleType::Id name, float x, float y, float z, float xa, float ya, float za, int data) {
|
void LevelRenderer::addParticle(ParticleType::Id name, float x, float y, float z, float xa, float ya, float za, int data) {
|
||||||
float xd = mc->cameraTargetPlayer->x - x;
|
float xd = mc->cameraTargetPlayer->x - x;
|
||||||
float yd = mc->cameraTargetPlayer->y - y;
|
float yd = mc->cameraTargetPlayer->y - y;
|
||||||
float zd = mc->cameraTargetPlayer->z - z;
|
float zd = mc->cameraTargetPlayer->z - z;
|
||||||
|
|
||||||
const float particleDistance = 16;
|
const float particleDistance = 16;
|
||||||
if (xd * xd + yd * yd + zd * zd > particleDistance * particleDistance) return;
|
if (xd * xd + yd * yd + zd * zd > particleDistance * particleDistance) return;
|
||||||
|
|
||||||
//static Stopwatch sw;
|
//static Stopwatch sw;
|
||||||
//sw.start();
|
//sw.start();
|
||||||
|
|
||||||
//Particle* p = NULL;
|
//Particle* p = NULL;
|
||||||
|
|
||||||
if (name == ParticleType::bubble) mc->particleEngine->add( new BubbleParticle(level, x, y, z, xa, ya, za) );
|
if (name == ParticleType::bubble) mc->particleEngine->add( new BubbleParticle(level, x, y, z, xa, ya, za) );
|
||||||
else if (name == ParticleType::crit) mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za) );
|
else if (name == ParticleType::crit) mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za) );
|
||||||
else if (name == ParticleType::smoke) mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za) );
|
else if (name == ParticleType::smoke) mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za) );
|
||||||
else if (name == ParticleType::explode) mc->particleEngine->add( new ExplodeParticle(level, x, y, z, xa, ya, za) );
|
else if (name == ParticleType::explode) mc->particleEngine->add( new ExplodeParticle(level, x, y, z, xa, ya, za) );
|
||||||
else if (name == ParticleType::flame) mc->particleEngine->add( new FlameParticle(level, x, y, z, xa, ya, za) );
|
else if (name == ParticleType::flame) mc->particleEngine->add( new FlameParticle(level, x, y, z, xa, ya, za) );
|
||||||
else if (name == ParticleType::lava) mc->particleEngine->add( new LavaParticle(level, x, y, z) );
|
else if (name == ParticleType::lava) mc->particleEngine->add( new LavaParticle(level, x, y, z) );
|
||||||
else if (name == ParticleType::largesmoke) mc->particleEngine->add( new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f) );
|
else if (name == ParticleType::largesmoke) mc->particleEngine->add( new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f) );
|
||||||
else if (name == ParticleType::reddust) mc->particleEngine->add( new RedDustParticle(level, x, y, z, xa, ya, za) );
|
else if (name == ParticleType::reddust) mc->particleEngine->add( new RedDustParticle(level, x, y, z, xa, ya, za) );
|
||||||
else if (name == ParticleType::iconcrack) mc->particleEngine->add( new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]) );
|
else if (name == ParticleType::iconcrack) mc->particleEngine->add( new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]) );
|
||||||
|
|
||||||
//switch (name) {
|
//switch (name) {
|
||||||
// case ParticleType::bubble: p = new BubbleParticle(level, x, y, z, xa, ya, za); break;
|
// case ParticleType::bubble: p = new BubbleParticle(level, x, y, z, xa, ya, za); break;
|
||||||
// case ParticleType::crit: p = new CritParticle2(level, x, y, z, xa, ya, za); break;
|
// case ParticleType::crit: p = new CritParticle2(level, x, y, z, xa, ya, za); break;
|
||||||
// case ParticleType::smoke: p = new SmokeParticle(level, x, y, z, xa, ya, za); break;
|
// case ParticleType::smoke: p = new SmokeParticle(level, x, y, z, xa, ya, za); break;
|
||||||
// //case ParticleType::note: p = new NoteParticle(level, x, y, z, xa, ya, za); break;
|
// //case ParticleType::note: p = new NoteParticle(level, x, y, z, xa, ya, za); break;
|
||||||
// case ParticleType::explode: p = new ExplodeParticle(level, x, y, z, xa, ya, za); break;
|
// case ParticleType::explode: p = new ExplodeParticle(level, x, y, z, xa, ya, za); break;
|
||||||
// case ParticleType::flame: p = new FlameParticle(level, x, y, z, xa, ya, za); break;
|
// case ParticleType::flame: p = new FlameParticle(level, x, y, z, xa, ya, za); break;
|
||||||
// case ParticleType::lava: p = new LavaParticle(level, x, y, z); break;
|
// case ParticleType::lava: p = new LavaParticle(level, x, y, z); break;
|
||||||
// //case ParticleType::splash: p = new SplashParticle(level, x, y, z, xa, ya, za); break;
|
// //case ParticleType::splash: p = new SplashParticle(level, x, y, z, xa, ya, za); break;
|
||||||
// case ParticleType::largesmoke: p = new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f); break;
|
// case ParticleType::largesmoke: p = new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f); break;
|
||||||
// case ParticleType::reddust: p = new RedDustParticle(level, x, y, z, xa, ya, za); break;
|
// case ParticleType::reddust: p = new RedDustParticle(level, x, y, z, xa, ya, za); break;
|
||||||
// case ParticleType::iconcrack: p = new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]); break;
|
// case ParticleType::iconcrack: p = new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]); break;
|
||||||
// //case ParticleType::snowballpoof: p = new BreakingItemParticle(level, x, y, z, Item::snowBall); break;
|
// //case ParticleType::snowballpoof: p = new BreakingItemParticle(level, x, y, z, Item::snowBall); break;
|
||||||
// //case ParticleType::slime: p = new BreakingItemParticle(level, x, y, z, Item::slimeBall); break;
|
// //case ParticleType::slime: p = new BreakingItemParticle(level, x, y, z, Item::slimeBall); break;
|
||||||
// //case ParticleType::heart: p = new HeartParticle(level, x, y, z, xa, ya, za); break;
|
// //case ParticleType::heart: p = new HeartParticle(level, x, y, z, xa, ya, za); break;
|
||||||
// default:
|
// default:
|
||||||
// LOGW("Couldn't find particle of type: %d\n", name);
|
// LOGW("Couldn't find particle of type: %d\n", name);
|
||||||
// break;
|
// break;
|
||||||
//}
|
//}
|
||||||
//if (p) {
|
//if (p) {
|
||||||
// mc->particleEngine->add(p);
|
// mc->particleEngine->add(p);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
//sw.stop();
|
//sw.stop();
|
||||||
//sw.printEvery(50, "add-particle-enum");
|
//sw.printEvery(50, "add-particle-enum");
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -1217,7 +1192,7 @@ void LevelRenderer::renderHitSelect( Player* player, const HitResult& h, int mod
|
|||||||
glEnable2(GL_DEPTH_TEST);
|
glEnable2(GL_DEPTH_TEST);
|
||||||
|
|
||||||
textures->loadAndBindTexture("terrain.png");
|
textures->loadAndBindTexture("terrain.png");
|
||||||
|
|
||||||
int tileId = level->getTile(h.x, h.y, h.z);
|
int tileId = level->getTile(h.x, h.y, h.z);
|
||||||
Tile* tile = tileId > 0 ? Tile::tiles[tileId] : NULL;
|
Tile* tile = tileId > 0 ? Tile::tiles[tileId] : NULL;
|
||||||
glDisable2(GL_ALPHA_TEST);
|
glDisable2(GL_ALPHA_TEST);
|
||||||
@@ -1314,11 +1289,11 @@ void LevelRenderer::takePicture( TripodCamera* cam, Entity* entity )
|
|||||||
void LevelRenderer::levelEvent(Player* player, int type, int x, int y, int z, int data) {
|
void LevelRenderer::levelEvent(Player* player, int type, int x, int y, int z, int data) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case LevelEvent::SOUND_OPEN_DOOR:
|
case LevelEvent::SOUND_OPEN_DOOR:
|
||||||
if (Mth::random() < 0.5f) {
|
if (Mth::random() < 0.5f) {
|
||||||
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_open", 1, level->random.nextFloat() * 0.1f + 0.9f);
|
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_open", 1, level->random.nextFloat() * 0.1f + 0.9f);
|
||||||
} else {
|
} else {
|
||||||
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_close", 1, level->random.nextFloat() * 0.1f + 0.9f);
|
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_close", 1, level->random.nextFloat() * 0.1f + 0.9f);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,9 +113,6 @@ private:
|
|||||||
bool occlusionCheck;
|
bool occlusionCheck;
|
||||||
int lastViewDistance;
|
int lastViewDistance;
|
||||||
|
|
||||||
// shredder added again...
|
|
||||||
int lastFogType;
|
|
||||||
|
|
||||||
int ticks;
|
int ticks;
|
||||||
int starList, skyList, darkList;
|
int starList, skyList, darkList;
|
||||||
|
|
||||||
|
|||||||
@@ -249,37 +249,6 @@ int Textures::crispBlend( int c0, int c1 )
|
|||||||
return (a << 24) | (r << 16) | (g << 8) | b;
|
return (a << 24) | (r << 16) | (g << 8) | b;
|
||||||
}
|
}
|
||||||
|
|
||||||
// shredder here, moved the code from minecraft.cpp bcus that isnt the right place
|
|
||||||
// had to implement this because i couldn't find a similar function in the code to do this
|
|
||||||
int* Textures::loadTexturePixels(TextureId texId, const std::string& resourceName){
|
|
||||||
|
|
||||||
const TextureData* texture = getTemporaryTextureData(texId); // storing raw pixels
|
|
||||||
|
|
||||||
int size = texture->w * texture->h; // gets the size of our funny lil guy
|
|
||||||
int* pixels = new int[size]; // memory leaks be galore
|
|
||||||
unsigned char* raw = texture->data; // storing raw data into our beloved variable
|
|
||||||
for (int i = 0; i < (texture->w * texture->h); i++){
|
|
||||||
// my head hurts i hate working with this
|
|
||||||
|
|
||||||
|
|
||||||
// uh since each pixel stores r g b a, aka the color channels which are each one byte, we multiply them by 4 to move from one pixel to another
|
|
||||||
|
|
||||||
int r = raw[i * 4 + 0]; // gets us the first channel aka red
|
|
||||||
int g = raw[i * 4 + 1]; // gets us the second channel green
|
|
||||||
int b = raw[i * 4 + 2]; // gets us the third channel blue
|
|
||||||
int a = raw[i * 4 + 3]; // gets us the alpha channel
|
|
||||||
|
|
||||||
// woohoo pixels uh should have been seperated into their colors now hopefully
|
|
||||||
|
|
||||||
// r g b a
|
|
||||||
// ugh we now got to turn it into the AA RR GGBB format aak 0xAARRGGBB
|
|
||||||
// b gets 0 - 7 (8 bits), g gets 7 - 15 (8 bits), r gets 16 - 23 (8 bits), alpha gets the last ones 24 - 31 (8 bits),
|
|
||||||
pixels[i] = (a << 24) | (r << 16) | (g << 8) | (b); // shuld combine them into one 32 bit int unless i did something dumb
|
|
||||||
}
|
|
||||||
return pixels; // your meal has been prepared john colors
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///*public*/ int loadHttpTexture(std::string url, std::string backup) {
|
///*public*/ int loadHttpTexture(std::string url, std::string backup) {
|
||||||
// HttpTexture texture = httpTextures.get(url);
|
// HttpTexture texture = httpTextures.get(url);
|
||||||
// if (texture != NULL) {
|
// if (texture != NULL) {
|
||||||
|
|||||||
@@ -44,8 +44,6 @@ public:
|
|||||||
TextureId assignTexture(const std::string& resourceName, const TextureData& img);
|
TextureId assignTexture(const std::string& resourceName, const TextureData& img);
|
||||||
const TextureData* getTemporaryTextureData(TextureId id);
|
const TextureData* getTemporaryTextureData(TextureId id);
|
||||||
|
|
||||||
int* loadTexturePixels(TextureId texId, const std::string& resourceName);
|
|
||||||
|
|
||||||
void tick(bool uploadToGraphicsCard);
|
void tick(bool uploadToGraphicsCard);
|
||||||
|
|
||||||
void clear();
|
void clear();
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
#include "../../world/level/tile/BedTile.h"
|
#include "../../world/level/tile/BedTile.h"
|
||||||
#include "../../world/level/tile/StemTile.h"
|
#include "../../world/level/tile/StemTile.h"
|
||||||
#include "../../world/level/tile/StairTile.h"
|
#include "../../world/level/tile/StairTile.h"
|
||||||
#include "../../world/level/tile/FireTile.h"
|
|
||||||
#include "../../world/Direction.h"
|
#include "../../world/Direction.h"
|
||||||
#include "../../world/Facing.h"
|
#include "../../world/Facing.h"
|
||||||
#include "tileentity/TileEntityRenderer.h"
|
#include "tileentity/TileEntityRenderer.h"
|
||||||
@@ -158,8 +157,8 @@ bool TileRenderer::tesselateInWorld( Tile* tt, int x, int y, int z )
|
|||||||
return tesselateRowInWorld(tt, x, y, z);
|
return tesselateRowInWorld(tt, x, y, z);
|
||||||
} else if (shape == Tile::SHAPE_TORCH) {
|
} else if (shape == Tile::SHAPE_TORCH) {
|
||||||
return tesselateTorchInWorld(tt, x, y, z);
|
return tesselateTorchInWorld(tt, x, y, z);
|
||||||
} else if (shape == Tile::SHAPE_FIRE) {
|
//} else if (shape == Tile::SHAPE_FIRE) {
|
||||||
return tesselateFireInWorld(tt, x, y, z);
|
// return tesselateFireInWorld(tt, x, y, z);
|
||||||
//} else if (shape == Tile::SHAPE_RED_DUST) {
|
//} else if (shape == Tile::SHAPE_RED_DUST) {
|
||||||
// return tesselateDustInWorld(tt, x, y, z);
|
// return tesselateDustInWorld(tt, x, y, z);
|
||||||
} else if (shape == Tile::SHAPE_LADDER) {
|
} else if (shape == Tile::SHAPE_LADDER) {
|
||||||
@@ -223,278 +222,6 @@ bool TileRenderer::tesselateTorchInWorld( Tile* tt, int x, int y, int z )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TileRenderer::tesselateFireInWorld( Tile* tt, int x, int y, int z )
|
|
||||||
{
|
|
||||||
// @todo: fire alpha transparency seems to be scuffed, also it seems i might have messed up the second layer while porting from lce/java , need to look into it - shredder
|
|
||||||
|
|
||||||
Tesselator& t = Tesselator::instance;
|
|
||||||
|
|
||||||
int tex = tt->getTexture(0);
|
|
||||||
|
|
||||||
if (fixedTexture >= 0) tex = fixedTexture;
|
|
||||||
|
|
||||||
float br = tt->getBrightness( level, x, y, z );
|
|
||||||
t.color( br, br, br );
|
|
||||||
|
|
||||||
int xt = ((tex & 0xf) << 4);
|
|
||||||
int yt = tex & 0xf0;
|
|
||||||
|
|
||||||
float u0 = (xt) / 256.0f;
|
|
||||||
float u1 = (xt + 15.99f) / 256.0f;
|
|
||||||
float v0 = (yt) / 256.0f;
|
|
||||||
float v1 = (yt + 15.99f) / 256.0f;
|
|
||||||
float h = 1.4f;
|
|
||||||
|
|
||||||
if ( level->isSolidBlockingTile( x, y - 1, z ) || Tile::fire->canBurn( level, x, y - 1, z ) )
|
|
||||||
{
|
|
||||||
float x0 = x + 0.5f + 0.2f;
|
|
||||||
float x1 = x + 0.5f - 0.2f;
|
|
||||||
float z0 = z + 0.5f + 0.2f;
|
|
||||||
float z1 = z + 0.5f - 0.2f;
|
|
||||||
|
|
||||||
float x0_ = x + 0.5f - 0.3f;
|
|
||||||
float x1_ = x + 0.5f + 0.3f;
|
|
||||||
float z0_ = z + 0.5f - 0.3f;
|
|
||||||
float z1_ = z + 0.5f + 0.3f;
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
u0 = (xt) / 256.0f;
|
|
||||||
u1 = (xt + 15.99f) / 256.0f;
|
|
||||||
v0 = (yt) / 256.0f;
|
|
||||||
v1 = (yt + 15.99f) / 256.0f;
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
|
|
||||||
x0 = x + 0.5f - 0.5f;
|
|
||||||
x1 = x + 0.5f + 0.5f;
|
|
||||||
z0 = z + 0.5f - 0.5f;
|
|
||||||
z1 = z + 0.5f + 0.5f;
|
|
||||||
|
|
||||||
x0_ = x + 0.5f - 0.4f;
|
|
||||||
x1_ = x + 0.5f + 0.4f;
|
|
||||||
z0_ = z + 0.5f - 0.4f;
|
|
||||||
z1_ = z + 0.5f + 0.4f;
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
|
|
||||||
|
|
||||||
u0 = (xt) / 256.0f;
|
|
||||||
u1 = (xt + 15.99f) / 256.0f;
|
|
||||||
v0 = (yt) / 256.0f;
|
|
||||||
v1 = (yt + 15.99f) / 256.0f;
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
float r = 0.2f;
|
|
||||||
float yo = 1 / 16.0f;
|
|
||||||
if ( ( ( x + y + z ) & 1 ) == 1 )
|
|
||||||
{
|
|
||||||
u0 = (xt) / 256.0f;
|
|
||||||
u1 = (xt + 15.99f) / 256.0f;
|
|
||||||
v0 = (yt) / 256.0f;
|
|
||||||
v1 = (yt + 15.99f) / 256.0f;
|
|
||||||
}
|
|
||||||
if ( ( ( x / 2 + y / 2 + z / 2 ) & 1 ) == 1 )
|
|
||||||
{
|
|
||||||
float tmp = u1;
|
|
||||||
u1 = u0;
|
|
||||||
u0 = tmp;
|
|
||||||
}
|
|
||||||
if ( Tile::fire->canBurn( level, x - 1, y, z ) )
|
|
||||||
{
|
|
||||||
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
|
|
||||||
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
|
||||||
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
|
||||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
|
|
||||||
0.0f ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
|
|
||||||
0.0f ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
|
||||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
|
||||||
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
|
|
||||||
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
}
|
|
||||||
if ( Tile::fire->canBurn( level, x + 1, y, z ) )
|
|
||||||
{
|
|
||||||
t.vertexUV( ( float )( x + 1 - r ), ( float )( y + h + yo ), ( float )( z +
|
|
||||||
0.0f ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1 - 0 ), ( float )( y + 0 + yo ), ( float )( z +
|
|
||||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1 - 0 ), ( float )( y + 0 + yo ), ( float )( z +
|
|
||||||
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1 - r ), ( float )( y + h + yo ), ( float )( z +
|
|
||||||
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x + 1.0f - r ), ( float )( y + h + yo ), ( float )( z +
|
|
||||||
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1.0f - 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
|
||||||
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1.0f - 0 ), ( float )( y + 0.0f + yo ), ( float )( z +
|
|
||||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1.0f - r ), ( float )( y + h + yo ), ( float )( z +
|
|
||||||
0.0f ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
}
|
|
||||||
if ( Tile::fire->canBurn( level, x, y, z - 1 ) )
|
|
||||||
{
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z +
|
|
||||||
r ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
|
||||||
0.0f ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
|
||||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z +
|
|
||||||
r ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z +
|
|
||||||
r ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
|
||||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
|
||||||
0.0f ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z +
|
|
||||||
r ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
}
|
|
||||||
if ( Tile::fire->canBurn( level, x, y, z + 1 ) )
|
|
||||||
{
|
|
||||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
|
|
||||||
r ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
|
|
||||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
|
|
||||||
0.0f ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
|
|
||||||
r ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
|
|
||||||
r ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
|
|
||||||
0.0f ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
|
|
||||||
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
|
|
||||||
r ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
}
|
|
||||||
if ( Tile::fire->canBurn( level, x, y + 1.0f, z ) )
|
|
||||||
{
|
|
||||||
double x0 = x + 0.5f + 0.5f;
|
|
||||||
double x1 = x + 0.5f - 0.5f;
|
|
||||||
double z0 = z + 0.5f + 0.5f;
|
|
||||||
double z1 = z + 0.5f - 0.5f;
|
|
||||||
|
|
||||||
double x0_ = x + 0.5f - 0.5f;
|
|
||||||
double x1_ = x + 0.5f + 0.5f;
|
|
||||||
double z0_ = z + 0.5f - 0.5f;
|
|
||||||
double z1_ = z + 0.5f + 0.5f;
|
|
||||||
|
|
||||||
u0 = (xt) / 256.0f;
|
|
||||||
u1 = (xt + 15.99f) / 256.0f;
|
|
||||||
v0 = (yt) / 256.0f;
|
|
||||||
v1 = (yt + 15.99f) / 256.0f;
|
|
||||||
|
|
||||||
y += 1;
|
|
||||||
h = -0.2f;
|
|
||||||
|
|
||||||
if ( ( ( x + y + z ) & 1 ) == 0 )
|
|
||||||
{
|
|
||||||
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z +
|
|
||||||
0 ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z +
|
|
||||||
0 ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z +
|
|
||||||
1 ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z +
|
|
||||||
1 ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
|
|
||||||
u0 = (xt) / 256.0f;
|
|
||||||
u1 = (xt + 15.99f) / 256.0f;
|
|
||||||
v0 = (yt) / 256.0f;
|
|
||||||
v1 = (yt + 15.99f) / 256.0f;
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z +
|
|
||||||
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x1 ), ( float )( y + 0.0f ), ( float )( z +
|
|
||||||
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x1 ), ( float )( y + 0.0f ), ( float )( z +
|
|
||||||
0 ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z +
|
|
||||||
0 ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
|
|
||||||
h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
|
|
||||||
0.0f ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
|
|
||||||
0.0f ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
|
|
||||||
h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
|
|
||||||
u0 = (xt) / 256.0f;
|
|
||||||
u1 = (xt + 15.99f) / 256.0f;
|
|
||||||
v0 = (yt) / 256.0f;
|
|
||||||
v1 = (yt + 15.99f) / 256.0f;
|
|
||||||
|
|
||||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
|
|
||||||
h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
|
|
||||||
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
|
|
||||||
0.0f ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
|
|
||||||
0.0f ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
|
|
||||||
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
|
|
||||||
h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool TileRenderer::tesselateLadderInWorld( Tile* tt, int x, int y, int z )
|
bool TileRenderer::tesselateLadderInWorld( Tile* tt, int x, int y, int z )
|
||||||
{
|
{
|
||||||
Tesselator& t = Tesselator::instance;
|
Tesselator& t = Tesselator::instance;
|
||||||
|
|||||||
@@ -34,8 +34,6 @@ public:
|
|||||||
bool tesselateFenceGateInWorld(FenceGateTile* tt, int x, int y, int z);
|
bool tesselateFenceGateInWorld(FenceGateTile* tt, int x, int y, int z);
|
||||||
bool tesselateBedInWorld(Tile *tt, int x, int y, int z);
|
bool tesselateBedInWorld(Tile *tt, int x, int y, int z);
|
||||||
bool tesselateRowInWorld(Tile* tt, int x, int y, int z);
|
bool tesselateRowInWorld(Tile* tt, int x, int y, int z);
|
||||||
bool tesselateFireInWorld(Tile* tt, int x, int y, int z);
|
|
||||||
|
|
||||||
|
|
||||||
void tesselateTorch(Tile* tt, float x, float y, float z, float xxa, float zza);
|
void tesselateTorch(Tile* tt, float x, float y, float z, float xxa, float zza);
|
||||||
void tesselateCrossTexture(Tile* tt, int data, float x, float y, float z);
|
void tesselateCrossTexture(Tile* tt, int data, float x, float y, float z);
|
||||||
|
|||||||
@@ -40,18 +40,18 @@ EntityRenderDispatcher::EntityRenderDispatcher()
|
|||||||
{
|
{
|
||||||
//@note: The Models (model/armor) will be deleted by resp. MobRenderer
|
//@note: The Models (model/armor) will be deleted by resp. MobRenderer
|
||||||
assign( ER_ITEM_RENDERER, new ItemRenderer());
|
assign( ER_ITEM_RENDERER, new ItemRenderer());
|
||||||
assign( ER_HUMANOID_RENDERER, new HumanoidMobRenderer(new HumanoidModel(), 0.5));
|
assign( ER_HUMANOID_RENDERER, new HumanoidMobRenderer(new HumanoidModel(), 0));
|
||||||
assign( ER_PIG_RENDERER, new PigRenderer(new PigModel(0.5), NULL/*new PigModel(0.5f)*/, 0.7));
|
assign( ER_PIG_RENDERER, new PigRenderer(new PigModel(), NULL/*new PigModel(0.5f)*/, 0));
|
||||||
assign( ER_COW_RENDERER, new MobRenderer(new CowModel(), 0.7));
|
assign( ER_COW_RENDERER, new MobRenderer(new CowModel(), 0));
|
||||||
assign( ER_CHICKEN_RENDERER, new ChickenRenderer( new ChickenModel(), 0.3));
|
assign( ER_CHICKEN_RENDERER, new ChickenRenderer( new ChickenModel(), 0));
|
||||||
assign( ER_SHEEP_RENDERER, new SheepRenderer(new SheepModel(), new SheepFurModel(), 0.7));
|
assign( ER_SHEEP_RENDERER, new SheepRenderer(new SheepModel(), new SheepFurModel(), 0));
|
||||||
assign( ER_SKELETON_RENDERER, new HumanoidMobRenderer(new SkeletonModel(), 0.5f));
|
assign( ER_SKELETON_RENDERER, new HumanoidMobRenderer(new SkeletonModel(), 0.5f));
|
||||||
assign( ER_ZOMBIE_RENDERER, new HumanoidMobRenderer(new ZombieModel(), 0.5f));
|
assign( ER_ZOMBIE_RENDERER, new HumanoidMobRenderer(new ZombieModel(), 0.5f));
|
||||||
assign( ER_CREEPER_RENDERER, new CreeperRenderer());
|
assign( ER_CREEPER_RENDERER, new CreeperRenderer());
|
||||||
assign( ER_SPIDER_RENDERER, new SpiderRenderer());
|
assign( ER_SPIDER_RENDERER, new SpiderRenderer());
|
||||||
assign( ER_TNT_RENDERER, new TntRenderer());
|
assign( ER_TNT_RENDERER, new TntRenderer());
|
||||||
assign( ER_ARROW_RENDERER, new ArrowRenderer());
|
assign( ER_ARROW_RENDERER, new ArrowRenderer());
|
||||||
assign( ER_PLAYER_RENDERER, new PlayerRenderer(new HumanoidModel(0, 0, 64, 64), 0.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_THROWNEGG_RENDERER, new ItemSpriteRenderer(Item::egg->getIcon(0)));
|
||||||
assign( ER_SNOWBALL_RENDERER, new ItemSpriteRenderer(Item::snowBall->getIcon(0)));
|
assign( ER_SNOWBALL_RENDERER, new ItemSpriteRenderer(Item::snowBall->getIcon(0)));
|
||||||
assign( ER_PAINTING_RENDERER, new PaintingRenderer());
|
assign( ER_PAINTING_RENDERER, new PaintingRenderer());
|
||||||
@@ -133,7 +133,7 @@ void EntityRenderDispatcher::render( Entity* entity, float x, float y, float z,
|
|||||||
EntityRenderer* renderer = getRenderer(entity);
|
EntityRenderer* renderer = getRenderer(entity);
|
||||||
if (renderer != NULL) {
|
if (renderer != NULL) {
|
||||||
renderer->render(entity, x, y, z, rot, a);
|
renderer->render(entity, x, y, z, rot, a);
|
||||||
renderer->postRender(entity, x, y, z, rot, a);
|
//renderer->postRender(entity, x, y, z, rot, a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,17 +5,11 @@
|
|||||||
#include "../gles.h"
|
#include "../gles.h"
|
||||||
#include "../../../world/phys/AABB.h"
|
#include "../../../world/phys/AABB.h"
|
||||||
#include "EntityRenderDispatcher.h"
|
#include "EntityRenderDispatcher.h"
|
||||||
#include "../../../util/Mth.h"
|
|
||||||
#include "../../../world/level/Level.h"
|
|
||||||
#include "../../../world/level/tile/Tile.h"
|
|
||||||
|
|
||||||
#include "../../Minecraft.h"
|
|
||||||
#include "../../Option.h"
|
|
||||||
|
|
||||||
EntityRenderDispatcher* EntityRenderer::entityRenderDispatcher = NULL;
|
EntityRenderDispatcher* EntityRenderer::entityRenderDispatcher = NULL;
|
||||||
|
|
||||||
EntityRenderer::EntityRenderer()
|
EntityRenderer::EntityRenderer()
|
||||||
: shadowRadius(0),
|
: shadowRadius(0),
|
||||||
shadowStrength(1.0f)
|
shadowStrength(1.0f)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -42,37 +36,37 @@ void EntityRenderer::render(const AABB& bb, float xo, float yo, float zo) {
|
|||||||
glColor4f2(1, 1, 1, 1);
|
glColor4f2(1, 1, 1, 1);
|
||||||
t.begin();
|
t.begin();
|
||||||
t.offset(xo, yo, zo);
|
t.offset(xo, yo, zo);
|
||||||
t.normal(0, 0, -1);
|
//t.normal(0, 0, -1);
|
||||||
t.vertex(bb.x0, bb.y1, bb.z0);
|
t.vertex(bb.x0, bb.y1, bb.z0);
|
||||||
t.vertex(bb.x1, bb.y1, bb.z0);
|
t.vertex(bb.x1, bb.y1, bb.z0);
|
||||||
t.vertex(bb.x1, bb.y0, bb.z0);
|
t.vertex(bb.x1, bb.y0, bb.z0);
|
||||||
t.vertex(bb.x0, bb.y0, bb.z0);
|
t.vertex(bb.x0, bb.y0, bb.z0);
|
||||||
|
|
||||||
t.normal(0, 0, 1);
|
//t.normal(0, 0, 1);
|
||||||
t.vertex(bb.x0, bb.y0, bb.z1);
|
t.vertex(bb.x0, bb.y0, bb.z1);
|
||||||
t.vertex(bb.x1, bb.y0, bb.z1);
|
t.vertex(bb.x1, bb.y0, bb.z1);
|
||||||
t.vertex(bb.x1, bb.y1, bb.z1);
|
t.vertex(bb.x1, bb.y1, bb.z1);
|
||||||
t.vertex(bb.x0, bb.y1, bb.z1);
|
t.vertex(bb.x0, bb.y1, bb.z1);
|
||||||
|
|
||||||
t.normal(0, -1, 0);
|
//t.normal(0, -1, 0);
|
||||||
t.vertex(bb.x0, bb.y0, bb.z0);
|
t.vertex(bb.x0, bb.y0, bb.z0);
|
||||||
t.vertex(bb.x1, bb.y0, bb.z0);
|
t.vertex(bb.x1, bb.y0, bb.z0);
|
||||||
t.vertex(bb.x1, bb.y0, bb.z1);
|
t.vertex(bb.x1, bb.y0, bb.z1);
|
||||||
t.vertex(bb.x0, bb.y0, bb.z1);
|
t.vertex(bb.x0, bb.y0, bb.z1);
|
||||||
|
|
||||||
t.normal(0, 1, 0);
|
//t.normal(0, 1, 0);
|
||||||
t.vertex(bb.x0, bb.y1, bb.z1);
|
t.vertex(bb.x0, bb.y1, bb.z1);
|
||||||
t.vertex(bb.x1, bb.y1, bb.z1);
|
t.vertex(bb.x1, bb.y1, bb.z1);
|
||||||
t.vertex(bb.x1, bb.y1, bb.z0);
|
t.vertex(bb.x1, bb.y1, bb.z0);
|
||||||
t.vertex(bb.x0, bb.y1, bb.z0);
|
t.vertex(bb.x0, bb.y1, bb.z0);
|
||||||
|
|
||||||
t.normal(-1, 0, 0);
|
//t.normal(-1, 0, 0);
|
||||||
t.vertex(bb.x0, bb.y0, bb.z1);
|
t.vertex(bb.x0, bb.y0, bb.z1);
|
||||||
t.vertex(bb.x0, bb.y1, bb.z1);
|
t.vertex(bb.x0, bb.y1, bb.z1);
|
||||||
t.vertex(bb.x0, bb.y1, bb.z0);
|
t.vertex(bb.x0, bb.y1, bb.z0);
|
||||||
t.vertex(bb.x0, bb.y0, bb.z0);
|
t.vertex(bb.x0, bb.y0, bb.z0);
|
||||||
|
|
||||||
t.normal(1, 0, 0);
|
//t.normal(1, 0, 0);
|
||||||
t.vertex(bb.x1, bb.y0, bb.z0);
|
t.vertex(bb.x1, bb.y0, bb.z0);
|
||||||
t.vertex(bb.x1, bb.y1, bb.z0);
|
t.vertex(bb.x1, bb.y1, bb.z0);
|
||||||
t.vertex(bb.x1, bb.y1, bb.z1);
|
t.vertex(bb.x1, bb.y1, bb.z1);
|
||||||
@@ -122,139 +116,134 @@ Font* EntityRenderer::getFont() {
|
|||||||
return entityRenderDispatcher->getFont();
|
return entityRenderDispatcher->getFont();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityRenderer::postRender(Entity* entity, float x, float y, float z, float rot, float a) {
|
//void 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) {
|
// if (entityRenderDispatcher.options.fancyGraphics && shadowRadius > 0) {
|
||||||
float dist = entityRenderDispatcher->distanceToSqr(entity->x, entity->y, entity->z);
|
// float dist = entityRenderDispatcher.distanceToSqr(entity.x, entity.y, entity.z);
|
||||||
float pow = (float) ((1 - dist / (16.0f * 16.0f)) * shadowStrength);
|
// float pow = (float) ((1 - dist / (16.0f * 16.0f)) * shadowStrength);
|
||||||
if (pow > 0) {
|
// if (pow > 0) {
|
||||||
renderShadow(entity, x, y, z, pow, a);
|
// renderShadow(entity, x, y, z, pow, a);
|
||||||
}
|
// }
|
||||||
//}
|
// }
|
||||||
if (entity->isOnFire()) renderFlame(entity, x, y, z, a);
|
// if (entity.isOnFire()) renderFlame(entity, x, y, z, a);
|
||||||
}
|
//}
|
||||||
}
|
|
||||||
void EntityRenderer::renderFlame(Entity* e, float x, float y, float z, float a) {
|
|
||||||
|
|
||||||
int tex = ((Tile*)Tile::fire)->tex;
|
//void renderFlame(Entity e, float x, float y, float z, float a) {
|
||||||
|
// glDisable2(GL_LIGHTING);
|
||||||
|
// int tex = Tile.fire.tex;
|
||||||
|
|
||||||
int xt = (tex & 0xf) << 4;
|
// int xt = (tex & 0xf) << 4;
|
||||||
int yt = tex & 0xf0;
|
// int yt = tex & 0xf0;
|
||||||
|
|
||||||
float u0 = (xt) / 256.0f;
|
// float u0 = (xt) / 256.0f;
|
||||||
float u1 = (xt + 15.99f) / 256.0f;
|
// float u1 = (xt + 15.99f) / 256.0f;
|
||||||
float v0 = (yt) / 256.0f;
|
// float v0 = (yt) / 256.0f;
|
||||||
float v1 = (yt + 15.99f) / 256.0f;
|
// float v1 = (yt + 15.99f) / 256.0f;
|
||||||
|
|
||||||
glPushMatrix2();
|
// glPushMatrix2();
|
||||||
glTranslatef2((float) x, (float) y, (float) z);
|
// glTranslatef2((float) x, (float) y, (float) z);
|
||||||
|
|
||||||
float s = e->bbWidth * 1.4f;
|
// float s = e.bbWidth * 1.4f;
|
||||||
glScalef2(s, s, s);
|
// glScalef2(s, s, s);
|
||||||
bindTexture("terrain.png");
|
// bindTexture("terrain.png");
|
||||||
Tesselator& t = Tesselator::instance;
|
// Tesselator t = Tesselator.instance;
|
||||||
|
|
||||||
float r = 1.0f;
|
// float r = 1.0f;
|
||||||
float xo = 0.5f;
|
// float xo = 0.5f;
|
||||||
float yo = 0.0f;
|
// float yo = 0.0f;
|
||||||
|
|
||||||
float h = e->bbHeight / e->bbWidth;
|
// float h = e.bbHeight / e.bbWidth;
|
||||||
|
|
||||||
glRotatef2(-entityRenderDispatcher->playerRotY, 0, 1, 0);
|
// glRotatef2(-entityRenderDispatcher.playerRotY, 0, 1, 0);
|
||||||
glTranslatef2(0, 0, -0.4f + ((int) h) * 0.02f);
|
// glTranslatef2(0, 0, -0.4f + ((int) h) * 0.02f);
|
||||||
glColor4f2(1, 1, 1, 1);
|
// glColor4f2(1, 1, 1, 1);
|
||||||
// glRotatef2(-playerRotX, 1, 0, 0);
|
// // glRotatef2(-playerRotX, 1, 0, 0);
|
||||||
t.begin();
|
// t.begin();
|
||||||
while (h > 0) {
|
// while (h > 0) {
|
||||||
t.vertexUV(r - xo, 0 - yo, 0, u1, v1);
|
// t.vertexUV(r - xo, 0 - yo, 0, u1, v1);
|
||||||
t.vertexUV(0 - xo, 0 - yo, 0, u0, v1);
|
// t.vertexUV(0 - xo, 0 - yo, 0, u0, v1);
|
||||||
t.vertexUV(0 - xo, 1.4f - yo, 0, u0, v0);
|
// t.vertexUV(0 - xo, 1.4f - yo, 0, u0, v0);
|
||||||
t.vertexUV(r - xo, 1.4f - yo, 0, u1, v0);
|
// t.vertexUV(r - xo, 1.4f - yo, 0, u1, v0);
|
||||||
h -= 1;
|
// h -= 1;
|
||||||
yo -= 1;
|
// yo -= 1;
|
||||||
r *= 0.9f;
|
// r *= 0.9f;
|
||||||
glTranslatef2(0, 0, -0.04f);
|
// glTranslatef2(0, 0, -0.04f);
|
||||||
}
|
// }
|
||||||
t.draw();
|
// t.end();
|
||||||
glPopMatrix2();
|
// glPopMatrix2();
|
||||||
// glEnable2(GL_LIGHTING);
|
// glEnable2(GL_LIGHTING);
|
||||||
}
|
//}
|
||||||
|
|
||||||
void EntityRenderer::renderShadow(Entity* e, float x, float y, float z, float pow, float a) { //
|
//void renderShadow(Entity e, float x, float y, float z, float pow, float a) {
|
||||||
glEnable2(GL_BLEND);
|
// glEnable2(GL_BLEND);
|
||||||
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
// glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
//Textures* textures = entityRenderDispatcher->textures;
|
// Textures textures = entityRenderDispatcher.textures;
|
||||||
//textures->bind(textures->loadTexture("%clamp%/environment/shadow.png"));
|
// textures.bind(textures.loadTexture("%clamp%/misc/shadow.png"));
|
||||||
Textures* textures = entityRenderDispatcher->textures;
|
|
||||||
textures->bind(textures->loadTexture("/misc/shadow.png"));
|
|
||||||
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
// Level level = getLevel();
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
||||||
|
|
||||||
Level* level = getLevel();
|
// glDepthMask(false);
|
||||||
|
// float r = shadowRadius;
|
||||||
|
|
||||||
glDepthMask(false);
|
// float ex = e.xOld + (e.x - e.xOld) * a;
|
||||||
float r = shadowRadius;
|
// float ey = e.yOld + (e.y - e.yOld) * a + e.getShadowHeightOffs();
|
||||||
|
// float ez = e.zOld + (e.z - e.zOld) * a;
|
||||||
|
|
||||||
float ex = e->xOld + (e->x - e->xOld) * a;
|
// int x0 = Mth.floor(ex - r);
|
||||||
float ey = e->yOld + (e->y - e->yOld) * a + e->getShadowHeightOffs();
|
// int x1 = Mth.floor(ex + r);
|
||||||
float ez = e->zOld + (e->z - e->zOld) * a;
|
// int y0 = Mth.floor(ey - r);
|
||||||
|
// int y1 = Mth.floor(ey);
|
||||||
|
// int z0 = Mth.floor(ez - r);
|
||||||
|
// int z1 = Mth.floor(ez + r);
|
||||||
|
|
||||||
int x0 = Mth::floor(ex - r);
|
// float xo = x - ex;
|
||||||
int x1 = Mth::floor(ex + r);
|
// float yo = y - ey;
|
||||||
int y0 = Mth::floor(ey - r);
|
// float zo = z - ez;
|
||||||
int y1 = Mth::floor(ey);
|
|
||||||
int z0 = Mth::floor(ez - r);
|
|
||||||
int z1 = Mth::floor(ez + r);
|
|
||||||
|
|
||||||
float xo = x - ex;
|
// Tesselator tt = Tesselator.instance;
|
||||||
float yo = y - ey;
|
// tt.begin();
|
||||||
float zo = z - ez;
|
// 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();
|
||||||
|
|
||||||
Tesselator& tt = Tesselator::instance;
|
// glColor4f2(1, 1, 1, 1);
|
||||||
tt.begin();
|
// glDisable2(GL_BLEND);
|
||||||
for (int xt = x0; xt <= x1; xt++)
|
// glDepthMask(true);
|
||||||
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);
|
//Level* getLevel() {
|
||||||
glDisable2(GL_BLEND);
|
// return entityRenderDispatcher.level;
|
||||||
glDepthMask(true);
|
//}
|
||||||
}
|
|
||||||
|
|
||||||
Level* EntityRenderer::getLevel() {
|
//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) {
|
||||||
return entityRenderDispatcher->level;
|
// Tesselator t = Tesselator.instance;
|
||||||
}
|
// if (!tt.isCubeShaped()) return;
|
||||||
|
|
||||||
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) {
|
// float a = ((pow - (y - (yt + yo)) / 2) * 0.5f) * getLevel().getBrightness(xt, yt, zt);
|
||||||
Tesselator& t = Tesselator::instance;
|
// if (a < 0) return;
|
||||||
if (!tt->isCubeShaped()) return;
|
// if (a > 1) a = 1;
|
||||||
|
// t.color(1, 1, 1, (float) a);
|
||||||
|
// // glColor4f2(1, 1, 1, (float) a);
|
||||||
|
|
||||||
float a = ((pow - (y - (yt + yo)) / 2) * 0.5f) * getLevel()->getBrightness(xt, yt, zt);
|
// float x0 = xt + tt.xx0 + xo;
|
||||||
if (a < 0) return;
|
// float x1 = xt + tt.xx1 + xo;
|
||||||
if (a > 1) a = 1;
|
// float y0 = yt + tt.yy0 + yo + 1.0 / 64.0f;
|
||||||
// t.color(1, 1, 1, (float) a);
|
// float z0 = zt + tt.zz0 + zo;
|
||||||
glColor4f2(1, 1, 1, (float) a);
|
// float z1 = zt + tt.zz1 + zo;
|
||||||
|
|
||||||
float x0 = xt + tt->xx0 + xo;
|
// float u0 = (float) ((x - (x0)) / 2 / r + 0.5f);
|
||||||
float x1 = xt + tt->xx1 + xo;
|
// float u1 = (float) ((x - (x1)) / 2 / r + 0.5f);
|
||||||
float y0 = yt + tt->yy0 + yo + 1.0 / 64.0f;
|
// float v0 = (float) ((z - (z0)) / 2 / r + 0.5f);
|
||||||
float z0 = zt + tt->zz0 + zo;
|
// float v1 = (float) ((z - (z1)) / 2 / r + 0.5f);
|
||||||
float z1 = zt + tt->zz1 + zo;
|
|
||||||
|
|
||||||
float u0 = (float) ((x - (x0)) / 2 / r + 0.5f);
|
// t.vertexUV(x0, y0, z0, u0, v0);
|
||||||
float u1 = (float) ((x - (x1)) / 2 / r + 0.5f);
|
// t.vertexUV(x0, y0, z1, u0, v1);
|
||||||
float v0 = (float) ((z - (z0)) / 2 / r + 0.5f);
|
// t.vertexUV(x1, y0, z1, u1, v1);
|
||||||
float v1 = (float) ((z - (z1)) / 2 / r + 0.5f);
|
// t.vertexUV(x1, y0, z0, u1, v0);
|
||||||
|
//}
|
||||||
t.vertexUV(x0, y0, z0, u0, v0);
|
|
||||||
t.vertexUV(x0, y0, z1, u0, v1);
|
|
||||||
t.vertexUV(x1, y0, z1, u1, v1);
|
|
||||||
t.vertexUV(x1, y0, z0, u1, v0);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -12,8 +12,6 @@ class EntityRenderDispatcher;
|
|||||||
class Entity;
|
class Entity;
|
||||||
class AABB;
|
class AABB;
|
||||||
class Font;
|
class Font;
|
||||||
class Tile;
|
|
||||||
class Level;
|
|
||||||
|
|
||||||
class EntityRenderer
|
class EntityRenderer
|
||||||
{
|
{
|
||||||
@@ -26,11 +24,6 @@ public:
|
|||||||
virtual void render(Entity* entity, float x, float y, float z, float rot, float a) = 0;
|
virtual void render(Entity* entity, float x, float y, float z, float rot, float a) = 0;
|
||||||
static void render(const AABB& bb, float xo, float yo, float zo);
|
static void render(const AABB& bb, float xo, float yo, float zo);
|
||||||
static void renderFlat(const AABB& bb);
|
static void renderFlat(const AABB& bb);
|
||||||
void renderShadow(Entity* e, float x, float y, float z, float pow, float a);
|
|
||||||
void renderTileShadow(Tile* tt, float x, float y, float z, int xt, int yt, int zt, float pow, float r, float xo, float yo, float zo);
|
|
||||||
void renderFlame(Entity* e, float x, float y, float z, float a);
|
|
||||||
void postRender(Entity* entity, float x, float y, float z, float rot, float a);
|
|
||||||
Level* getLevel();
|
|
||||||
|
|
||||||
Font* getFont();
|
Font* getFont();
|
||||||
|
|
||||||
|
|||||||
@@ -226,42 +226,7 @@ void ItemRenderer::renderGuiItem(Font* font, Textures* textures, const ItemInsta
|
|||||||
t.draw();
|
t.draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ItemRenderer::renderGuiItemDecorations(const ItemInstance* item, float x, float y) {
|
||||||
void ItemRenderer::renderGuiItemDecorations(Font* font, Textures* textures, ItemInstance* item, int x, int y){ // this is normally unused in the header but i ported it from java beta - shredder
|
|
||||||
if (item != NULL) {
|
|
||||||
if (item->count > 1) {
|
|
||||||
char buf[16];
|
|
||||||
sprintf(buf, "%d", item->count);
|
|
||||||
std::string countStr = buf;
|
|
||||||
// glDisable(GL_LIGHTING);
|
|
||||||
// glDisable(GL_DEPTH_TEST);
|
|
||||||
font->drawShadow(countStr, x + 19 - 2 - font->width(countStr),
|
|
||||||
y + 6 + 3, 0xFFFFFF);
|
|
||||||
// glEnable(GL_LIGHTING);
|
|
||||||
// glEnable(GL_DEPTH_TEST);
|
|
||||||
}
|
|
||||||
if (item->isDamaged()) {
|
|
||||||
float p = std::floor(13.5f - (float) item->getDamageValue() * 13.0f / (float) item->getMaxDamage() + 0.5);
|
|
||||||
int cc = (int) std::floor(255.5f - (float) item->getDamageValue() * 255.0f / (float) item->getMaxDamage() + 0.5);
|
|
||||||
// glDisable(GL_LIGHTING);
|
|
||||||
// glDisable(GL_DEPTH_TEST);
|
|
||||||
// glDisable(GL_TEXTURE_2D);
|
|
||||||
// auto var8 = ::net::minecraft::client::renderer::Tesselator::instance();
|
|
||||||
Tesselator& t = Tesselator::instance;
|
|
||||||
int ca = ((255 - cc)<< 16 | (cc << 8));
|
|
||||||
int cb = (((255 - cc) / 4) << 16 | 16128);
|
|
||||||
fillRect(t, x + 2, y + 13, 13, 2, 0);
|
|
||||||
fillRect(t, x + 2, y + 13, 12, 1, cb);
|
|
||||||
fillRect(t, x + 2, y + 13, p, 1, ca);
|
|
||||||
// glEnable(GL_TEXTURE_2D);
|
|
||||||
// glEnable(GL_LIGHTING);
|
|
||||||
// glEnable(GL_DEPTH_TEST);
|
|
||||||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ItemRenderer::renderGuiItemDecorations(const ItemInstance* item, float x, float y) { // nothing changed here this is the normal pocket edition one.
|
|
||||||
if (!item) return;
|
if (!item) return;
|
||||||
if (item->count > 0 && item->isDamaged()) {
|
if (item->count > 0 && item->isDamaged()) {
|
||||||
float p = std::floor(13.5f - (float) item->getDamageValue() * 13.0f / (float) item->getMaxDamage());
|
float p = std::floor(13.5f - (float) item->getDamageValue() * 13.0f / (float) item->getMaxDamage());
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public:
|
|||||||
static void renderGuiItem(Font* font, Textures* textures, const ItemInstance* item, float x, float y, bool fancy);
|
static void renderGuiItem(Font* font, Textures* textures, const ItemInstance* item, float x, float y, bool fancy);
|
||||||
static void renderGuiItem(Font* font, Textures* textures, const ItemInstance* item, float x, float y, float w, float h, bool fancy);
|
static void renderGuiItem(Font* font, Textures* textures, const ItemInstance* item, float x, float y, float w, float h, bool fancy);
|
||||||
static void renderGuiItemCorrect(Font* font, Textures* textures, const ItemInstance* item, int x, int y);
|
static void renderGuiItemCorrect(Font* font, Textures* textures, const ItemInstance* item, int x, int y);
|
||||||
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 renderGuiItemDecorations(const ItemInstance* item, float x, float y);
|
||||||
|
|
||||||
static void blit(float x, float y, float sx, float sy, float w, float h);
|
static void blit(float x, float y, float sx, float sy, float w, float h);
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ void MobRenderer::render(Entity* e, float x, float y, float z, float rot, float
|
|||||||
//glEnable2(GL_DEPTH_TEST);
|
//glEnable2(GL_DEPTH_TEST);
|
||||||
|
|
||||||
glPopMatrix2();
|
glPopMatrix2();
|
||||||
postRender(mob, x, y, z, rot, a);
|
|
||||||
renderName(mob, x, y, z);
|
renderName(mob, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
#import <OpenGLES/ES1/gl.h>
|
#import <OpenGLES/ES1/gl.h>
|
||||||
#import <OpenGLES/ES1/glext.h>
|
#import <OpenGLES/ES1/glext.h>
|
||||||
#elif defined(ANDROID) || defined(__EMSCRIPTEN__)
|
#elif defined(ANDROID) || defined(__EMSCRIPTEN__)
|
||||||
#import <GLES/gl.h>
|
#import <OpenGLES/ES1/gl.h>
|
||||||
#import <GLES/glext.h>
|
#import <OpenGLES/ES1/glext.h>
|
||||||
#else
|
#else
|
||||||
#include <glad/glad.h>
|
#include <glad/glad.h>
|
||||||
|
|
||||||
|
|||||||
@@ -206,93 +206,3 @@ void WaterSideTexture::tick() {
|
|||||||
pixels[i * 4 + 3] = a;
|
pixels[i * 4 + 3] = a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FireTexture::FireTexture()
|
|
||||||
: super(((Tile*)Tile::fire)->tex),
|
|
||||||
_tick(0),
|
|
||||||
_frame(0)
|
|
||||||
{
|
|
||||||
current = new float[16*20];
|
|
||||||
next = new float[16*20];
|
|
||||||
heat = new float[16*20];
|
|
||||||
heata = new float[16*20];
|
|
||||||
|
|
||||||
for (int i = 0; i < 256; ++i) {
|
|
||||||
current[i] = 0;
|
|
||||||
next[i] = 0;
|
|
||||||
heat[i] = 0;
|
|
||||||
heata[i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FireTexture::~FireTexture() {
|
|
||||||
delete[] current;
|
|
||||||
delete[] next;
|
|
||||||
delete[] heat;
|
|
||||||
delete[] heata;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// oh boy time to implement fire textures, i am so fucked - shredder
|
|
||||||
|
|
||||||
void FireTexture::tick() {
|
|
||||||
// loop generates fire texture on the empty texture grid, hopefully shouldnt be too taxing on older hardware - shredder
|
|
||||||
for (int x = 0; x < 16; x++) {
|
|
||||||
for (int y = 0; y < 20; y++) {
|
|
||||||
int count = 18;
|
|
||||||
float pow = this->current[x + (y + 1) % 20 * 16] * (float)(count);
|
|
||||||
for (int xx = x - 1; xx <= x + 1; xx++) {
|
|
||||||
for (int yy = y; yy <= y + 1; yy++) {
|
|
||||||
if (xx >= 0 && yy >= 0 && xx < 16 && yy < 20) {
|
|
||||||
pow += this->current[xx + yy * 16];
|
|
||||||
}
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this->next[x + y * 16] = pow / (float(count) * 1.06f);
|
|
||||||
if (y >= 19) {
|
|
||||||
this->next[x + y * 16] = float(Mth::random() * Mth::random() * Mth::random() * 4.0 + Mth::random() * 0.1f + 0.2f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// hopefully this doesn't cause any mysterious issues - shredder
|
|
||||||
float* tmp = next;
|
|
||||||
next = current;
|
|
||||||
current = tmp;
|
|
||||||
|
|
||||||
for (int i = 0; i < 256; i++) {
|
|
||||||
float pow = this->current[i] * 1.8f;
|
|
||||||
if (pow > 1.0f) {
|
|
||||||
pow = 1.0f;
|
|
||||||
}
|
|
||||||
if (pow < 0.0f) {
|
|
||||||
pow = 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int r = (int) (pow * 155.0f + 100.0f);
|
|
||||||
int g = (int)(pow * pow * 255.0f);
|
|
||||||
int b = (int)(pow * pow * pow * pow * pow * pow * pow * pow * pow * pow * 255.0f);
|
|
||||||
int a = 255;
|
|
||||||
if (pow < 0.5f) {
|
|
||||||
a = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// @TODO: cant be arsed rn to implement the anaglyph3d check would be nice to check if it does - shredder
|
|
||||||
//if (this->anaglyph3d) {
|
|
||||||
// float rr = (r * 30 + g * 59 + b * 11) / 100;
|
|
||||||
// float gg = (r * 30 + g * 70) / 100;
|
|
||||||
// float bb = (r * 30 + b * 70) / 100;
|
|
||||||
// r = rr;
|
|
||||||
// g = gg;
|
|
||||||
// b = bb;
|
|
||||||
//}
|
|
||||||
|
|
||||||
pixels[i * 4 + 0] = r;
|
|
||||||
pixels[i * 4 + 1] = g;
|
|
||||||
pixels[i * 4 + 2] = b;
|
|
||||||
pixels[i * 4 + 3] = a;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -56,21 +56,4 @@ public:
|
|||||||
void tick();
|
void tick();
|
||||||
};
|
};
|
||||||
|
|
||||||
class FireTexture: public DynamicTexture
|
|
||||||
{
|
|
||||||
typedef DynamicTexture super;
|
|
||||||
int _tick;
|
|
||||||
int _frame;
|
|
||||||
|
|
||||||
float* current;
|
|
||||||
float* next;
|
|
||||||
float* heat;
|
|
||||||
float* heata;
|
|
||||||
|
|
||||||
public:
|
|
||||||
FireTexture();
|
|
||||||
~FireTexture();
|
|
||||||
|
|
||||||
void tick();
|
|
||||||
};
|
|
||||||
#endif /*NET_MINECRAFT_CLIENT_RENDERER_PTEXTURE__DynamicTexture_H__*/
|
#endif /*NET_MINECRAFT_CLIENT_RENDERER_PTEXTURE__DynamicTexture_H__*/
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
@@ -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();
|
|
||||||
};
|
|
||||||
@@ -245,7 +245,6 @@ void Inventory::setupDefault() {
|
|||||||
addItem(new ItemInstance(Item::seeds_melon));
|
addItem(new ItemInstance(Item::seeds_melon));
|
||||||
addItem(new ItemInstance(Item::dye_powder, 1, DyePowderItem::WHITE));
|
addItem(new ItemInstance(Item::dye_powder, 1, DyePowderItem::WHITE));
|
||||||
addItem(new ItemInstance(Item::hoe_iron));
|
addItem(new ItemInstance(Item::hoe_iron));
|
||||||
addItem(new ItemInstance(Item::flintAndSteel));
|
|
||||||
#ifdef RPI
|
#ifdef RPI
|
||||||
Sel[0] = addItem(new ItemInstance(Item::sword_iron));
|
Sel[0] = addItem(new ItemInstance(Item::sword_iron));
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ public:
|
|||||||
setMaxDamage(64);
|
setMaxDamage(64);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
bool useOn(ItemInstance* instance, Player* player, Level* level, int x, int y, int z, int face, float clickX, float clickY, float clickZ) {
|
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 == 0) y--;
|
||||||
if (face == 1) y++;
|
if (face == 1) y++;
|
||||||
@@ -30,14 +30,14 @@ public:
|
|||||||
|
|
||||||
int targetType = level->getTile(x, y, z);
|
int targetType = level->getTile(x, y, z);
|
||||||
if (targetType == 0) {
|
if (targetType == 0) {
|
||||||
level->playSound(x + 0.5, y + 0.5, z + 0.5, "fire.ignite", 1, random.nextFloat() * 0.4f + 0.8f);
|
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*)Tile::fire)->id);
|
level->setTile(x, y, z, Tile::fire->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
instance->hurt(1);
|
instance->hurt(1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*NET_MINECRAFT_WORLD_ITEM__FlintAndSteelItem_H__*/
|
#endif /*NET_MINECRAFT_WORLD_ITEM__FlintAndSteelItem_H__*/
|
||||||
|
|||||||
@@ -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;
|
|
||||||
@@ -6,49 +6,31 @@
|
|||||||
class FoliageColor
|
class FoliageColor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static bool useTint;
|
// static void init(int[] pixels) {
|
||||||
|
// FoliageColor::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 setUseTint(bool value) {
|
static int getEvergreenColor() {
|
||||||
useTint = value;
|
return 0x619961;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
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) {
|
static int getBirchColor() {
|
||||||
// FoliageColor::pixels = pixels;
|
return 0x80a755;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// 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 int getDefaultColor() {
|
||||||
static void init(int* p) {
|
return 0x48b518;
|
||||||
pixels = p;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static int get(float temp, float rain);
|
|
||||||
|
|
||||||
static int getEvergreenColor() {
|
|
||||||
return 0x619961;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int getBirchColor() {
|
|
||||||
return 0x80a755;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int getDefaultColor() {
|
|
||||||
return 0xFFFFFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// static int pixels[256*256];
|
//static int pixels[256*256];
|
||||||
static int* pixels;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*NET_MINECRAFT_WORLD_LEVEL__FoliageColor_H__*/
|
#endif /*NET_MINECRAFT_WORLD_LEVEL__FoliageColor_H__*/
|
||||||
|
|||||||
@@ -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;
|
|
||||||
@@ -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__*/
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -3,9 +3,8 @@
|
|||||||
|
|
||||||
//package net.minecraft.world.level;
|
//package net.minecraft.world.level;
|
||||||
|
|
||||||
|
|
||||||
class BiomeSource;
|
|
||||||
/*
|
/*
|
||||||
|
class BiomeSource;
|
||||||
class TileEntity;
|
class TileEntity;
|
||||||
*/
|
*/
|
||||||
class Material;
|
class Material;
|
||||||
@@ -30,7 +29,7 @@ public:
|
|||||||
virtual bool isSolidRenderTile(int x, int i, int z) = 0;
|
virtual bool isSolidRenderTile(int x, int i, int z) = 0;
|
||||||
virtual bool isSolidBlockingTile(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;
|
virtual Biome* getBiome(int x, int z) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
#include "tile/Tile.h"
|
#include "tile/Tile.h"
|
||||||
#include "Level.h"
|
#include "Level.h"
|
||||||
|
|
||||||
|
|
||||||
Region::Region(Level* level, int x1, int y1, int z1, int x2, int y2, int z2) {
|
Region::Region(Level* level, int x1, int y1, int z1, int x2, int y2, int z2) {
|
||||||
this->level = level;
|
this->level = level;
|
||||||
|
|
||||||
@@ -136,6 +135,6 @@ Biome* Region::getBiome( int x, int z ) {
|
|||||||
return level->getBiome(x, z);
|
return level->getBiome(x, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
BiomeSource* Region::getBiomeSource() {
|
//BiomeSource getBiomeSource() {
|
||||||
return level->getBiomeSource();
|
// return level.getBiomeSource();
|
||||||
}
|
//}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
#include "LevelSource.h"
|
#include "LevelSource.h"
|
||||||
|
|
||||||
|
|
||||||
class Level;
|
class Level;
|
||||||
class Material;
|
class Material;
|
||||||
class LevelChunk;
|
class LevelChunk;
|
||||||
@@ -28,7 +27,6 @@ public:
|
|||||||
int getData(int x, int y, int z);
|
int getData(int x, int y, int z);
|
||||||
const Material* getMaterial(int x, int y, int z);
|
const Material* getMaterial(int x, int y, int z);
|
||||||
Biome* getBiome(int x, int z);
|
Biome* getBiome(int x, int z);
|
||||||
BiomeSource* getBiomeSource() override;
|
|
||||||
private:
|
private:
|
||||||
int xc1, zc1;
|
int xc1, zc1;
|
||||||
LevelChunk*** chunks;
|
LevelChunk*** chunks;
|
||||||
|
|||||||
@@ -2,14 +2,11 @@
|
|||||||
|
|
||||||
#include "../levelgen/feature/TreeFeature.h"
|
#include "../levelgen/feature/TreeFeature.h"
|
||||||
#include "../levelgen/feature/TallgrassFeature.h"
|
#include "../levelgen/feature/TallgrassFeature.h"
|
||||||
#include "../levelgen/feature/BasicTree.h"
|
|
||||||
|
|
||||||
#include "../../entity/EntityTypes.h"
|
#include "../../entity/EntityTypes.h"
|
||||||
#include "../../entity/MobCategory.h"
|
#include "../../entity/MobCategory.h"
|
||||||
#include "../../level/tile/TallGrass.h"
|
#include "../../level/tile/TallGrass.h"
|
||||||
|
|
||||||
#include "../../../util/Color.h"
|
|
||||||
|
|
||||||
Biome* Biome::rainForest = NULL;
|
Biome* Biome::rainForest = NULL;
|
||||||
Biome* Biome::swampland = NULL;
|
Biome* Biome::swampland = NULL;
|
||||||
Biome* Biome::seasonalForest = NULL;
|
Biome* Biome::seasonalForest = NULL;
|
||||||
@@ -143,7 +140,7 @@ void Biome::teardownBiomes() {
|
|||||||
Feature* Biome::getTreeFeature( Random* random )
|
Feature* Biome::getTreeFeature( Random* random )
|
||||||
{
|
{
|
||||||
if (random->nextInt(10) == 0) {
|
if (random->nextInt(10) == 0) {
|
||||||
return new BasicTree(false);
|
//return /*new*/ BasicTree();
|
||||||
}
|
}
|
||||||
return new TreeFeature(false);
|
return new TreeFeature(false);
|
||||||
}
|
}
|
||||||
@@ -151,9 +148,6 @@ Feature* Biome::getGrassFeature( Random* random ) {
|
|||||||
return new TallgrassFeature(Tile::tallgrass->id, TallGrass::TALL_GRASS);
|
return new TallgrassFeature(Tile::tallgrass->id, TallGrass::TALL_GRASS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Biome* Biome::getBiome( float temperature, float downfall )
|
Biome* Biome::getBiome( float temperature, float downfall )
|
||||||
{
|
{
|
||||||
int a = (int) (temperature * 63);
|
int a = (int) (temperature * 63);
|
||||||
@@ -210,11 +204,11 @@ float Biome::adjustDepth( float depth )
|
|||||||
|
|
||||||
int Biome::getSkyColor( float temp )
|
int Biome::getSkyColor( float temp )
|
||||||
{
|
{
|
||||||
temp /= 3.f;
|
// temp /= 3.f;
|
||||||
if (temp < -1) temp = -1;
|
// if (temp < -1) temp = -1;
|
||||||
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 0x80808080;
|
||||||
return Color::getHSBColor(224 / 360.0f - temp * 0.05f, 0.50f + temp * 0.1f, 1.0f).getRGB();
|
//return Color.getHSBColor(224 / 360.0f - temp * 0.05f, 0.50f + temp * 0.1f, 1.0f).getRGB();
|
||||||
}
|
}
|
||||||
|
|
||||||
Biome::MobList& Biome::getMobs(const MobCategory& category)
|
Biome::MobList& Biome::getMobs(const MobCategory& category)
|
||||||
|
|||||||
@@ -69,11 +69,11 @@ Biome* BiomeSource::getBiome( int x, int z )
|
|||||||
return getBiomeBlock(x, z, 1, 1)[0];
|
return getBiomeBlock(x, z, 1, 1)[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
float BiomeSource::getTemperature( int x, int z )
|
//float BiomeSource::getTemperature( int x, int z )
|
||||||
{
|
//{
|
||||||
temperatures = temperatureMap->getRegion(temperatures, x, z, 1, 1, tempScale, tempScale, 0.5f);
|
// temperatures = temperatureMap->getRegion(temperatures, x, z, 1, 1, tempScale, tempScale, 0.5f);
|
||||||
return temperatures[0];
|
// return temperatures[0];
|
||||||
}
|
//}
|
||||||
|
|
||||||
Biome** BiomeSource::getBiomeBlock( int x, int z, int w, int h )
|
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;
|
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");
|
//LOGI("gTempBlock: 1\n");
|
||||||
//const int size = w * h;
|
//const int size = w * h;
|
||||||
@@ -164,8 +164,8 @@ float* BiomeSource::getTemperatureBlock( float* temperatures__, int x, int z, in
|
|||||||
return temperatures;
|
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;
|
// //const int size = w * h;
|
||||||
// //if (lenDownfalls < size) {
|
// //if (lenDownfalls < size) {
|
||||||
// // delete[] downfalls;
|
// // delete[] downfalls;
|
||||||
@@ -173,6 +173,6 @@ float* BiomeSource::getDownfallBlock( float* downfalls__, int x, int z, int w, i
|
|||||||
// // lenDownfalls = size;
|
// // lenDownfalls = size;
|
||||||
// //}
|
// //}
|
||||||
//
|
//
|
||||||
downfalls = downfallMap->getRegion(downfalls, x, z, w, w, downfallScale, downfallScale, 0.5f);
|
// downfalls = downfallMap->getRegion(downfalls, x, z, w, w, downfallScale, downfallScale, 0.5f);
|
||||||
return downfalls;
|
// return downfalls;
|
||||||
}
|
//}
|
||||||
|
|||||||
@@ -31,13 +31,13 @@ public:
|
|||||||
virtual Biome* getBiome(const ChunkPos& chunk);
|
virtual Biome* getBiome(const ChunkPos& chunk);
|
||||||
virtual Biome* getBiome(int x, int z);
|
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
|
// Note: The arrays returned here are temporary in the meaning that their
|
||||||
// contents might change in the future. If you need to SAVE the
|
// contents might change in the future. If you need to SAVE the
|
||||||
// values, do a shallow copy to an array of your own.
|
// 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* 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* getDownfallBlock(/*float* downfalls, */int x, int z, int w, int h);
|
||||||
virtual Biome** getBiomeBlock(int x, int z, int w, int h);
|
virtual Biome** getBiomeBlock(int x, int z, int w, int h);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
#include "Biome.h"
|
#include "Biome.h"
|
||||||
#include "../levelgen/feature/TreeFeature.h"
|
#include "../levelgen/feature/TreeFeature.h"
|
||||||
#include "../levelgen/feature/BirchFeature.h"
|
#include "../levelgen/feature/BirchFeature.h"
|
||||||
#include "../levelgen/feature/BasicTree.h"
|
|
||||||
|
|
||||||
class ForestBiome: public Biome
|
class ForestBiome: public Biome
|
||||||
{
|
{
|
||||||
@@ -16,7 +15,7 @@ public:
|
|||||||
return new BirchFeature();
|
return new BirchFeature();
|
||||||
}
|
}
|
||||||
if (random->nextInt(3) == 0) {
|
if (random->nextInt(3) == 0) {
|
||||||
return new BasicTree(false);
|
//return new BasicTree();
|
||||||
}
|
}
|
||||||
return new TreeFeature(false);
|
return new TreeFeature(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,14 +6,13 @@
|
|||||||
#include "Biome.h"
|
#include "Biome.h"
|
||||||
#include "../../../util/Random.h"
|
#include "../../../util/Random.h"
|
||||||
#include "../levelgen/feature/TreeFeature.h"
|
#include "../levelgen/feature/TreeFeature.h"
|
||||||
#include "../levelgen/feature/BasicTree.h"
|
|
||||||
|
|
||||||
class RainforestBiome: public Biome
|
class RainforestBiome: public Biome
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Feature* getTreeFeature(Random* random) {
|
Feature* getTreeFeature(Random* random) {
|
||||||
if (random->nextInt(3) == 0) {
|
if (random->nextInt(3) == 0) {
|
||||||
return new BasicTree(false);
|
//return new BasicTree();
|
||||||
}
|
}
|
||||||
return new TreeFeature(false);
|
return new TreeFeature(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -262,14 +262,14 @@ void LevelChunk::recalcHeight(int x, int yStart, int z) {
|
|||||||
|
|
||||||
/*public*/
|
/*public*/
|
||||||
void LevelChunk::skyBrightnessChanged() {
|
void LevelChunk::skyBrightnessChanged() {
|
||||||
int x0 = xt;
|
// int x0 = xt;
|
||||||
int y0 = this->minHeight - 16;
|
// int y0 = this->minHeight - 16;
|
||||||
int z0 = zt;
|
// int z0 = zt;
|
||||||
int x1 = xt + 16;
|
// int x1 = xt + 16;
|
||||||
int y1 = Level::DEPTH - 1;
|
// int y1 = Level::DEPTH - 1;
|
||||||
int z1 = zt + 16;
|
// int z1 = zt + 16;
|
||||||
|
|
||||||
level->setTilesDirty(x0, y0, z0, x1, y1, z1);
|
//level->setTilesDirty(x0, y0, z0, x1, y1, z1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public*/
|
/*public*/
|
||||||
|
|||||||
@@ -15,8 +15,7 @@ Dimension::Dimension()
|
|||||||
ultraWarm(false),
|
ultraWarm(false),
|
||||||
hasCeiling(false),
|
hasCeiling(false),
|
||||||
biomeSource(NULL),
|
biomeSource(NULL),
|
||||||
id(0),
|
id(0)
|
||||||
fogColor(0x80daff)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,18 +93,6 @@ float* Dimension::getSunriseColor( float td, float a )
|
|||||||
|
|
||||||
Vec3 Dimension::getFogColor( float td, float a )
|
Vec3 Dimension::getFogColor( float td, float a )
|
||||||
{
|
{
|
||||||
if (FogType == 1)
|
|
||||||
{
|
|
||||||
fogColor = 0xc0d8ff; // 1 returns java beta styled fog color.
|
|
||||||
}
|
|
||||||
else if (FogType == 2)
|
|
||||||
{
|
|
||||||
fogColor = 0x406fe5; // 2 returns some type of unused fog color IDK what this one was used for possibly early pe??
|
|
||||||
}
|
|
||||||
else // otherwise as default we return the mcpe fog color
|
|
||||||
{
|
|
||||||
fogColor = 0x80daff;
|
|
||||||
}
|
|
||||||
float br = Mth::cos(td * Mth::PI * 2) * 2 + 0.5f;
|
float br = Mth::cos(td * Mth::PI * 2) * 2 + 0.5f;
|
||||||
if (br < 0.0f) br = 0.0f;
|
if (br < 0.0f) br = 0.0f;
|
||||||
if (br > 1.0f) br = 1.0f;
|
if (br > 1.0f) br = 1.0f;
|
||||||
@@ -117,8 +104,7 @@ Vec3 Dimension::getFogColor( float td, float a )
|
|||||||
g *= br * 0.94f + 0.06f;
|
g *= br * 0.94f + 0.06f;
|
||||||
b *= br * 0.91f + 0.09f;
|
b *= br * 0.91f + 0.09f;
|
||||||
return Vec3(r, g, b);
|
return Vec3(r, g, b);
|
||||||
|
//return Vec3(0.752941f, 0.847059f, 1);
|
||||||
//
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Dimension::mayRespawn()
|
bool Dimension::mayRespawn()
|
||||||
|
|||||||
@@ -49,11 +49,8 @@ public:
|
|||||||
bool hasCeiling;
|
bool hasCeiling;
|
||||||
float brightnessRamp[16];//Level::MAX_BRIGHTNESS + 1];
|
float brightnessRamp[16];//Level::MAX_BRIGHTNESS + 1];
|
||||||
int id;
|
int id;
|
||||||
|
|
||||||
// shredder added
|
|
||||||
int FogType; // lets us choose between what fog we want ig
|
|
||||||
protected:
|
protected:
|
||||||
long fogColor; //= 0x80daff;//0x406fe5;//0xc0d8ff;
|
static const long fogColor = 0x80daff;//0x406fe5;//0xc0d8ff;
|
||||||
float sunriseCol[4];
|
float sunriseCol[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
class NormalDayCycleDimension: public Dimension {
|
class NormalDayCycleDimension: public Dimension {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
float getTimeOfDay(long time, float a) {
|
float getTimeOfDay(long time, float a) {
|
||||||
int dayStep = (int) (time % Level::TICKS_PER_DAY);
|
int dayStep = (int) (time % Level::TICKS_PER_DAY);
|
||||||
float td = (dayStep + a) / Level::TICKS_PER_DAY - 0.25f;
|
float td = (dayStep + a) / Level::TICKS_PER_DAY - 0.25f;
|
||||||
@@ -21,18 +20,6 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
Vec3 getFogColor( float td, float a ) {
|
Vec3 getFogColor( float td, float a ) {
|
||||||
if (FogType == 1)
|
|
||||||
{
|
|
||||||
fogColor = 0xc0d8ff; // 1 returns java beta styled fog color.
|
|
||||||
}
|
|
||||||
else if (FogType == 2)
|
|
||||||
{
|
|
||||||
fogColor = 0x406fe5; // 2 returns some type of unused fog color IDK what this one was used for possibly early pe??
|
|
||||||
}
|
|
||||||
else // otherwise as default we return the mcpe fog color
|
|
||||||
{
|
|
||||||
fogColor = 0x80daff;
|
|
||||||
}
|
|
||||||
float br = cos(td * Mth::PI * 2) * 2 + 0.5f;
|
float br = cos(td * Mth::PI * 2) * 2 + 0.5f;
|
||||||
if (br < 0) br = 0;
|
if (br < 0) br = 0;
|
||||||
if (br > 1.f) br = 1.f;
|
if (br > 1.f) br = 1.f;
|
||||||
@@ -48,7 +35,7 @@ public:
|
|||||||
|
|
||||||
return Vec3(r, g, b);
|
return Vec3(r, g, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*NET_MINECRAFT_WORLD_LEVEL_DIMENSION__NormalDayCycleDimension_H__*/
|
#endif /*NET_MINECRAFT_WORLD_LEVEL_DIMENSION__NormalDayCycleDimension_H__*/
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
|
#if 0
|
||||||
|
|
||||||
#include "CanyonFeature.h"
|
#include "CanyonFeature.h"
|
||||||
|
|
||||||
@@ -138,7 +138,7 @@ void CanyonFeature::addTunnel( int xOffs, int zOffs, unsigned char* blocks, floa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CanyonFeature::addFeature(Level* level, int x, int z, int xOffs, int zOffs,unsigned char* blocks)
|
void CanyonFeature::addFeature( Level level, int x, int z, int xOffs, int zOffs, char* blocks )
|
||||||
{
|
{
|
||||||
if (random.nextInt(15) != 0) return;
|
if (random.nextInt(15) != 0) return;
|
||||||
|
|
||||||
@@ -151,7 +151,6 @@ void CanyonFeature::addFeature(Level* level, int x, int z, int xOffs, int zOffs,
|
|||||||
float thickness = (random.nextFloat() * 2 + random.nextFloat()) + 1;
|
float thickness = (random.nextFloat() * 2 + random.nextFloat()) + 1;
|
||||||
|
|
||||||
addTunnel(xOffs, zOffs, blocks, xCave, yCave, zCave, thickness, yRot, xRot, 0, 0, 5.0);
|
addTunnel(xOffs, zOffs, blocks, xCave, yCave, zCave, thickness, yRot, xRot, 0, 0, 5.0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* //private
|
/* //private
|
||||||
@@ -166,4 +165,4 @@ void CanyonFeature::addFeature(Level* level, int x, int z, int xOffs, int zOffs,
|
|||||||
for (int z = zOffs - r; z <= zOffs + r; z++) {
|
for (int z = zOffs - r; z <= zOffs + r; z++) {
|
||||||
random.setSeed((x * xScale + z * zScale) ^ level.seed);*/
|
random.setSeed((x * xScale + z * zScale) ^ level.seed);*/
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#ifndef NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__
|
#ifndef NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__
|
||||||
#define NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__
|
#define NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
//package net.minecraft.world.level.levelgen;
|
//package net.minecraft.world.level.levelgen;
|
||||||
|
|
||||||
@@ -12,8 +12,8 @@ class CanyonFeature: public LargeFeature {
|
|||||||
/*protected*/
|
/*protected*/
|
||||||
void addTunnel(int xOffs, int zOffs, unsigned char* blocks, float xCave, float yCave, float zCave, float thickness, float yRot, float xRot, int step, int dist, float yScale);
|
void addTunnel(int xOffs, int zOffs, unsigned char* blocks, float xCave, float yCave, float zCave, float thickness, float yRot, float xRot, int step, int dist, float yScale);
|
||||||
/*protected*/
|
/*protected*/
|
||||||
void addFeature(Level* level, int x, int z, int xOffs, int zOffs,unsigned char* blocks);
|
void addFeature(Level level, int x, int z, int xOffs, int zOffs, char* blocks);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
#endif /*NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__*/
|
#endif /*NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__*/
|
||||||
|
|||||||
@@ -370,18 +370,6 @@ void RandomLevelSource::postProcess(ChunkSource* parent, int xt, int zt) {
|
|||||||
}
|
}
|
||||||
//printf("placing tree at %d, %d, %d\n", x, y, z);
|
//printf("placing tree at %d, %d, %d\n", x, y, z);
|
||||||
}
|
}
|
||||||
// for (int i = 0; i < forests; i++) {
|
|
||||||
// int x = xo + random.nextInt(16) + 8;
|
|
||||||
// int z = zo + random.nextInt(16) + 8;
|
|
||||||
//int y = level->getHeightmap(x, z);
|
|
||||||
// Feature* tree = biome->getBasicTreeFeature(&random);
|
|
||||||
//if (tree) {
|
|
||||||
// tree->init(1, 1, 1);
|
|
||||||
// tree->place(level, &random, x, y, z);
|
|
||||||
// delete tree;
|
|
||||||
//}
|
|
||||||
////printf("placing tree at %d, %d, %d\n", x, y, z);
|
|
||||||
// }
|
|
||||||
|
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
int x = xo + random.nextInt(16) + 8;
|
int x = xo + random.nextInt(16) + 8;
|
||||||
@@ -473,7 +461,7 @@ void RandomLevelSource::postProcess(ChunkSource* parent, int xt, int zt) {
|
|||||||
MobSpawner::postProcessSpawnMobs(level, biome, xo + 8, zo + 8, 16, 16, &random);
|
MobSpawner::postProcessSpawnMobs(level, biome, xo + 8, zo + 8, 16, 16, &random);
|
||||||
|
|
||||||
//LOGI("Reading temp: 1\n");
|
//LOGI("Reading temp: 1\n");
|
||||||
float* temperatures = level->getBiomeSource()->getTemperatureBlock(NULL, xo + 8, zo + 8, 16, 16);
|
float* temperatures = level->getBiomeSource()->getTemperatureBlock(/*NULL,*/ xo + 8, zo + 8, 16, 16);
|
||||||
for (int x = xo + 8; x < xo + 8 + 16; x++)
|
for (int x = xo + 8; x < xo + 8 + 16; x++)
|
||||||
for (int z = zo + 8; z < zo + 8 + 16; z++) {
|
for (int z = zo + 8; z < zo + 8 + 16; z++) {
|
||||||
int xp = x - (xo + 8);
|
int xp = x - (xo + 8);
|
||||||
|
|||||||
@@ -1,446 +0,0 @@
|
|||||||
#ifndef NET_MINECRAFT_WORLD_LEVEL_LEVELGEN_FEATURE__BasicTree_H__
|
|
||||||
#define NET_MINECRAFT_WORLD_LEVEL_LEVELGEN_FEATURE__BasicTree_H__
|
|
||||||
|
|
||||||
//package net.minecraft.world.level.levelgen.feature;
|
|
||||||
|
|
||||||
#include "Feature.h"
|
|
||||||
|
|
||||||
#include "../../../../util/Random.h"
|
|
||||||
#include "../../Level.h"
|
|
||||||
|
|
||||||
#include "../../tile/TreeTile.h"
|
|
||||||
|
|
||||||
class Level;
|
|
||||||
|
|
||||||
class BasicTree : public Feature
|
|
||||||
{
|
|
||||||
typedef Feature super;
|
|
||||||
private:
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unsigned char axisConversionArray[6];
|
|
||||||
Random *rnd;
|
|
||||||
Level *thisLevel;
|
|
||||||
int origin[3];
|
|
||||||
int height;
|
|
||||||
int trunkHeight;
|
|
||||||
double trunkHeightScale;
|
|
||||||
double branchDensity;
|
|
||||||
double branchSlope;
|
|
||||||
double widthScale;
|
|
||||||
double foliageDensity;
|
|
||||||
int trunkWidth;
|
|
||||||
int heightVariance;
|
|
||||||
int foliageHeight;
|
|
||||||
int **foliageCoords;
|
|
||||||
int foliageCoordsLength;
|
|
||||||
void prepare(){
|
|
||||||
trunkHeight = (int) (height * trunkHeightScale);
|
|
||||||
if (trunkHeight >= height) trunkHeight = height - 1;
|
|
||||||
int clustersPerY = (int) (1.382 + pow(foliageDensity * height / 13.0, 2));
|
|
||||||
if (clustersPerY < 1) clustersPerY = 1;
|
|
||||||
int **tempFoliageCoords = new int *[clustersPerY * height];
|
|
||||||
for( int i = 0; i < clustersPerY * height; i++ )
|
|
||||||
{
|
|
||||||
tempFoliageCoords[i] = new int[4];
|
|
||||||
}
|
|
||||||
int y = origin[1] + height - foliageHeight;
|
|
||||||
int clusterCount = 1;
|
|
||||||
int trunkTop = origin[1] + trunkHeight;
|
|
||||||
int relativeY = y - origin[1];
|
|
||||||
|
|
||||||
tempFoliageCoords[0][0] = origin[0];
|
|
||||||
tempFoliageCoords[0][1] = y;
|
|
||||||
tempFoliageCoords[0][2] = origin[2];
|
|
||||||
tempFoliageCoords[0][3] = trunkTop;
|
|
||||||
y--;
|
|
||||||
|
|
||||||
while (relativeY >= 0)
|
|
||||||
{
|
|
||||||
int num = 0;
|
|
||||||
|
|
||||||
float shapefac = treeShape(relativeY);
|
|
||||||
if (shapefac < 0)
|
|
||||||
{
|
|
||||||
y--;
|
|
||||||
relativeY--;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
double originOffset = 0.5;
|
|
||||||
while (num < clustersPerY)
|
|
||||||
{
|
|
||||||
double radius = widthScale * (shapefac * (rnd->nextFloat() + 0.328));
|
|
||||||
double angle = rnd->nextFloat() * 2.0 * 3.14159;
|
|
||||||
int x = Mth::floor(radius * sin(angle) + origin[0] + originOffset);
|
|
||||||
int z = Mth::floor(radius * cos(angle) + origin[2] + originOffset);
|
|
||||||
int checkStart[] = { x, y, z };
|
|
||||||
int checkEnd[] = { x, y + foliageHeight, z };
|
|
||||||
if (checkLine(checkStart, checkEnd) == -1) {
|
|
||||||
int checkBranchBase[] = { origin[0], origin[1], origin[2] };
|
|
||||||
double distance = sqrt(pow(abs(origin[0] - checkStart[0]), 2.0) + pow(abs(origin[2] - checkStart[2]), 2.0));
|
|
||||||
double branchHeight = distance * branchSlope;
|
|
||||||
if ((checkStart[1] - branchHeight) > trunkTop)
|
|
||||||
{
|
|
||||||
checkBranchBase[1] = trunkTop;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
checkBranchBase[1] = (int) (checkStart[1] - branchHeight);
|
|
||||||
}
|
|
||||||
if (checkLine(checkBranchBase, checkStart) == -1)
|
|
||||||
{
|
|
||||||
tempFoliageCoords[clusterCount][0] = x;
|
|
||||||
tempFoliageCoords[clusterCount][1] = y;
|
|
||||||
tempFoliageCoords[clusterCount][2] = z;
|
|
||||||
tempFoliageCoords[clusterCount][3] = checkBranchBase[1];
|
|
||||||
clusterCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
num++;
|
|
||||||
}
|
|
||||||
y--;
|
|
||||||
relativeY--;
|
|
||||||
}
|
|
||||||
|
|
||||||
foliageCoordsLength = clusterCount;
|
|
||||||
foliageCoords = tempFoliageCoords;
|
|
||||||
|
|
||||||
for( int i = clusterCount; i < clustersPerY * height; i++ )
|
|
||||||
{
|
|
||||||
delete [] tempFoliageCoords[i];
|
|
||||||
tempFoliageCoords[i] = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void crossection(int x, int y, int z, float radius, unsigned char direction, int material)
|
|
||||||
{
|
|
||||||
|
|
||||||
int rad = (int) (radius + 0.618);
|
|
||||||
unsigned char secidx1 = axisConversionArray[direction];
|
|
||||||
unsigned char secidx2 = axisConversionArray[direction + 3];
|
|
||||||
int center[] = { x, y, z };
|
|
||||||
int position[] = { 0, 0, 0 };
|
|
||||||
int offset1 = -rad;
|
|
||||||
int offset2 = -rad;
|
|
||||||
int thismat;
|
|
||||||
position[direction] = center[direction];
|
|
||||||
while (offset1 <= rad)
|
|
||||||
{
|
|
||||||
position[secidx1] = center[secidx1] + offset1;
|
|
||||||
offset2 = -rad;
|
|
||||||
while (offset2 <= rad)
|
|
||||||
{
|
|
||||||
double thisdistance = pow(abs(offset1) + 0.5, 2) + pow(abs(offset2) + 0.5, 2);
|
|
||||||
if (thisdistance > radius * radius)
|
|
||||||
{
|
|
||||||
offset2++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
position[secidx2] = center[secidx2] + offset2;
|
|
||||||
|
|
||||||
thismat = thisLevel->getTile(position[0], position[1], position[2]);
|
|
||||||
|
|
||||||
if (!((thismat == 0) || (thismat == Tile::leaves->id)))
|
|
||||||
{
|
|
||||||
offset2++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
placeBlock(thisLevel, position[0], position[1], position[2], material, 0);
|
|
||||||
|
|
||||||
offset2++;
|
|
||||||
}
|
|
||||||
offset1++;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
float treeShape(int y){
|
|
||||||
if (y < (((float) height) * 0.3)) return (float) -1.618;
|
|
||||||
float radius = ((float) height) / ((float) 2.0);
|
|
||||||
float adjacent = (((float) height) / ((float) 2.0)) - y;
|
|
||||||
float distance;
|
|
||||||
if (adjacent == 0) distance = radius;
|
|
||||||
else if (abs(adjacent) >= radius) distance = (float) 0.0;
|
|
||||||
else distance = (float) sqrt(pow(abs(radius), 2) - pow(abs(adjacent), 2));
|
|
||||||
distance *= (float) 0.5;
|
|
||||||
return distance;
|
|
||||||
}
|
|
||||||
float foliageShape(int y){
|
|
||||||
if ((y < 0) || (y >= foliageHeight)) return (float) -1;
|
|
||||||
else if ((y == 0) || (y == (foliageHeight - 1))) return (float) 2;
|
|
||||||
else return (float) 3;
|
|
||||||
}
|
|
||||||
void foliageCluster(int x, int y, int z){
|
|
||||||
|
|
||||||
int topy = y + foliageHeight;
|
|
||||||
int cury = topy - 1;
|
|
||||||
float radius;
|
|
||||||
while (cury >= y)
|
|
||||||
{
|
|
||||||
radius = foliageShape(cury - y);
|
|
||||||
crossection(x, cury, z, radius, (unsigned char) 1, Tile::leaves->id);
|
|
||||||
cury--;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
void limb(int *start, int *end, int material)
|
|
||||||
{
|
|
||||||
int delta[] = { 0, 0, 0 };
|
|
||||||
unsigned char idx = 0;
|
|
||||||
unsigned char primidx = 0;
|
|
||||||
while (idx < 3)
|
|
||||||
{
|
|
||||||
delta[idx] = end[idx] - start[idx];
|
|
||||||
if (abs(delta[idx]) > abs(delta[primidx]))
|
|
||||||
{
|
|
||||||
primidx = idx;
|
|
||||||
}
|
|
||||||
idx++;
|
|
||||||
}
|
|
||||||
if (delta[primidx] == 0) return;
|
|
||||||
unsigned char secidx1 = axisConversionArray[primidx];
|
|
||||||
unsigned char secidx2 = axisConversionArray[primidx + 3];
|
|
||||||
char primsign;
|
|
||||||
if (delta[primidx] > 0) primsign = 1;
|
|
||||||
else primsign = -1;
|
|
||||||
double secfac1 = ((double) delta[secidx1]) / ((double) delta[primidx]);
|
|
||||||
double secfac2 = ((double) delta[secidx2]) / ((double) delta[primidx]);
|
|
||||||
int coordinate[] = { 0, 0, 0 };
|
|
||||||
int primoffset = 0;
|
|
||||||
int endoffset = delta[primidx] + primsign;
|
|
||||||
while (primoffset != endoffset)
|
|
||||||
{
|
|
||||||
coordinate[primidx] = Mth::floor(start[primidx] + primoffset + 0.5);
|
|
||||||
coordinate[secidx1] = Mth::floor(start[secidx1] + (primoffset * secfac1) + 0.5);
|
|
||||||
coordinate[secidx2] = Mth::floor(start[secidx2] + (primoffset * secfac2) + 0.5);
|
|
||||||
|
|
||||||
int dir = 0;
|
|
||||||
int xdiff = abs(coordinate[0] - start[0]);
|
|
||||||
int zdiff = abs(coordinate[2] - start[2]);
|
|
||||||
int maxdiff = (std::max)(xdiff, zdiff);
|
|
||||||
|
|
||||||
if (maxdiff > 0)
|
|
||||||
{
|
|
||||||
if (xdiff == maxdiff)
|
|
||||||
{
|
|
||||||
dir = 0;
|
|
||||||
}
|
|
||||||
else if (zdiff == maxdiff)
|
|
||||||
{
|
|
||||||
dir = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
placeBlock(thisLevel, coordinate[0], coordinate[1], coordinate[2], material, dir);
|
|
||||||
primoffset += primsign;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void makeFoliage(){
|
|
||||||
int idx = 0;
|
|
||||||
int finish = foliageCoordsLength;
|
|
||||||
while (idx < finish)
|
|
||||||
{
|
|
||||||
int x = foliageCoords[idx][0];
|
|
||||||
int y = foliageCoords[idx][1];
|
|
||||||
int z = foliageCoords[idx][2];
|
|
||||||
foliageCluster(x, y, z);
|
|
||||||
idx++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bool trimBranches(int localY){
|
|
||||||
if (localY < (height * 0.2)) return false;
|
|
||||||
else return true;
|
|
||||||
}
|
|
||||||
void makeTrunk(){
|
|
||||||
int x = origin[0];
|
|
||||||
int startY = origin[1];
|
|
||||||
int topY = origin[1] + trunkHeight;
|
|
||||||
int z = origin[2];
|
|
||||||
int startCoord[] = { x, startY, z };
|
|
||||||
int endCoord[] = { x, topY, z };
|
|
||||||
limb(startCoord, endCoord, Tile::treeTrunk->id);
|
|
||||||
if (trunkWidth == 2)
|
|
||||||
{
|
|
||||||
startCoord[0] += 1;
|
|
||||||
endCoord[0] += 1;
|
|
||||||
limb(startCoord, endCoord, Tile::treeTrunk->id);
|
|
||||||
startCoord[2] += 1;
|
|
||||||
endCoord[2] += 1;
|
|
||||||
limb(startCoord, endCoord, Tile::treeTrunk->id);
|
|
||||||
startCoord[0] += -1;
|
|
||||||
endCoord[0] += -1;
|
|
||||||
limb(startCoord, endCoord, Tile::treeTrunk->id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void makeBranches(){
|
|
||||||
int idx = 0;
|
|
||||||
int finish = foliageCoordsLength;
|
|
||||||
int baseCoord[] = { origin[0], origin[1], origin[2] };
|
|
||||||
while (idx < finish)
|
|
||||||
{
|
|
||||||
int *coordValues = foliageCoords[idx];
|
|
||||||
int endCoord[] = { coordValues[0], coordValues[1], coordValues[2] };
|
|
||||||
baseCoord[1] = coordValues[3];
|
|
||||||
int localY = baseCoord[1] - origin[1];
|
|
||||||
if (trimBranches(localY))
|
|
||||||
{
|
|
||||||
limb(baseCoord, endCoord, Tile::treeTrunk->id);
|
|
||||||
}
|
|
||||||
idx++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int checkLine(int *start, int *end){
|
|
||||||
|
|
||||||
int delta[] = { 0, 0, 0 };
|
|
||||||
unsigned char idx = 0;
|
|
||||||
unsigned char primidx = 0;
|
|
||||||
while (idx < 3)
|
|
||||||
{
|
|
||||||
delta[idx] = end[idx] - start[idx];
|
|
||||||
if (abs(delta[idx]) > abs(delta[primidx]))
|
|
||||||
{
|
|
||||||
primidx = idx;
|
|
||||||
}
|
|
||||||
idx++;
|
|
||||||
}
|
|
||||||
if (delta[primidx] == 0) return -1;
|
|
||||||
unsigned char secidx1 = axisConversionArray[primidx];
|
|
||||||
unsigned char secidx2 = axisConversionArray[primidx + 3];
|
|
||||||
char primsign;
|
|
||||||
if (delta[primidx] > 0) primsign = 1;
|
|
||||||
else primsign = -1;
|
|
||||||
double secfac1 = ((double) delta[secidx1]) / ((double) delta[primidx]);
|
|
||||||
double secfac2 = ((double) delta[secidx2]) / ((double) delta[primidx]);
|
|
||||||
int coordinate[] = { 0, 0, 0 };
|
|
||||||
int primoffset = 0;
|
|
||||||
int endoffset = delta[primidx] + primsign;
|
|
||||||
int thismat;
|
|
||||||
while (primoffset != endoffset)
|
|
||||||
{
|
|
||||||
coordinate[primidx] = start[primidx] + primoffset;
|
|
||||||
coordinate[secidx1] = Mth::floor(start[secidx1] + (primoffset * secfac1));
|
|
||||||
coordinate[secidx2] = Mth::floor(start[secidx2] + (primoffset * secfac2));
|
|
||||||
thismat = thisLevel->getTile(coordinate[0], coordinate[1], coordinate[2]);
|
|
||||||
if (!((thismat == 0) || (thismat == Tile::leaves->id)))
|
|
||||||
{
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
primoffset += primsign;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (primoffset == endoffset)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return abs(primoffset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bool checkLocation(){
|
|
||||||
|
|
||||||
int startPosition[] = { origin[0], origin[1], origin[2] };
|
|
||||||
int endPosition[] = { origin[0], origin[1] + height - 1, origin[2] };
|
|
||||||
|
|
||||||
|
|
||||||
int baseMaterial = thisLevel->getTile(origin[0], origin[1] - 1, origin[2]);
|
|
||||||
if (!((baseMaterial == 2) || (baseMaterial == 3)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
int allowedHeight = checkLine(startPosition, endPosition);
|
|
||||||
if (allowedHeight == -1)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (allowedHeight < 6)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
height = allowedHeight;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
BasicTree(bool doUpdate){
|
|
||||||
axisConversionArray[0] = 2;
|
|
||||||
axisConversionArray[1] = 0;
|
|
||||||
axisConversionArray[2] = 0;
|
|
||||||
axisConversionArray[3] = 1;
|
|
||||||
axisConversionArray[4] = 2;
|
|
||||||
axisConversionArray[5] = 1;
|
|
||||||
rnd = new Random();
|
|
||||||
origin[0] = 0;
|
|
||||||
origin[1] = 0;
|
|
||||||
origin[2] = 0;
|
|
||||||
height = 0;
|
|
||||||
trunkHeight = 0;
|
|
||||||
trunkHeightScale = 0.618;
|
|
||||||
branchDensity = 1.0;
|
|
||||||
branchSlope = 0.381;
|
|
||||||
widthScale = 1.0;
|
|
||||||
foliageDensity = 1.0;
|
|
||||||
trunkWidth = 1;
|
|
||||||
heightVariance = 12;
|
|
||||||
foliageHeight = 4;
|
|
||||||
foliageCoords = NULL;
|
|
||||||
foliageCoordsLength = 0;
|
|
||||||
}
|
|
||||||
virtual ~BasicTree(){
|
|
||||||
delete rnd;
|
|
||||||
|
|
||||||
for( int i = 0; i < foliageCoordsLength; i++ )
|
|
||||||
{
|
|
||||||
delete [] foliageCoords[i];
|
|
||||||
}
|
|
||||||
delete [] foliageCoords;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void init(double heightInit, double widthInit, double foliageDensityInit){
|
|
||||||
|
|
||||||
heightVariance = (int) (heightInit * 12);
|
|
||||||
if (heightInit > 0.5) foliageHeight = 5;
|
|
||||||
widthScale = widthInit;
|
|
||||||
foliageDensity = foliageDensityInit;
|
|
||||||
}
|
|
||||||
virtual bool place(Level *level, Random *random, int x, int y, int z){
|
|
||||||
|
|
||||||
thisLevel = level;
|
|
||||||
int seed = random->nextLong();
|
|
||||||
rnd->setSeed(seed);
|
|
||||||
origin[0] = x;
|
|
||||||
origin[1] = y;
|
|
||||||
origin[2] = z;
|
|
||||||
if (height == 0)
|
|
||||||
{
|
|
||||||
height = 5 + rnd->nextInt(heightVariance);
|
|
||||||
}
|
|
||||||
if (!(checkLocation()))
|
|
||||||
{
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
prepare();
|
|
||||||
|
|
||||||
makeFoliage();
|
|
||||||
|
|
||||||
makeTrunk();
|
|
||||||
|
|
||||||
makeBranches();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
#endif /*NET_MINECRAFT_WORLD_LEVEL_LEVELGEN_FEATURE__BasicTree_H__*/
|
|
||||||
@@ -38,7 +38,7 @@ public:
|
|||||||
setFlammable(Tile::tnt->id, FLAME_MEDIUM, BURN_INSTANT);
|
setFlammable(Tile::tnt->id, FLAME_MEDIUM, BURN_INSTANT);
|
||||||
setFlammable(Tile::cloth->id, FLAME_EASY, BURN_EASY);
|
setFlammable(Tile::cloth->id, FLAME_EASY, BURN_EASY);
|
||||||
|
|
||||||
setTicking(true); //@fire
|
//setTicking(true); //@fire
|
||||||
}
|
}
|
||||||
|
|
||||||
AABB* getAABB(Level* level, int x, int y, int z) {
|
AABB* getAABB(Level* level, int x, int y, int z) {
|
||||||
@@ -70,9 +70,9 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void tick(Level* level, int x, int y, int z, Random* random) {
|
void tick(Level* level, int x, int y, int z, Random* random) {
|
||||||
|
return; //@fire
|
||||||
|
|
||||||
bool infiniBurn = level->getTile(x, y - 1, z) == Tile::netherrack->id;
|
bool infiniBurn = false;//level->getTile(x, y - 1, z) == Tile::hellRock->id;
|
||||||
|
|
||||||
int age = level->getData(x, y, z);
|
int age = level->getData(x, y, z);
|
||||||
if (age < 15) {
|
if (age < 15) {
|
||||||
@@ -148,6 +148,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void neighborChanged(Level* level, int x, int y, int z, int type) {
|
void neighborChanged(Level* level, int x, int y, int z, int type) {
|
||||||
|
return; //@fire
|
||||||
if (!level->isSolidBlockingTile(x, y - 1, z) && !isValidFireLocation(level, x, y, z)) {
|
if (!level->isSolidBlockingTile(x, y - 1, z) && !isValidFireLocation(level, x, y, z)) {
|
||||||
level->setTile(x, y, z, 0);
|
level->setTile(x, y, z, 0);
|
||||||
return;
|
return;
|
||||||
@@ -155,6 +156,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void onPlace(Level* level, int x, int y, int z) {
|
void onPlace(Level* level, int x, int y, int z) {
|
||||||
|
return; //@fire
|
||||||
if (!level->isSolidBlockingTile(x, y - 1, z) && !isValidFireLocation(level, x, y, z)) {
|
if (!level->isSolidBlockingTile(x, y - 1, z) && !isValidFireLocation(level, x, y, z)) {
|
||||||
level->setTile(x, y, z, 0);
|
level->setTile(x, y, z, 0);
|
||||||
return;
|
return;
|
||||||
@@ -167,6 +169,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ignite(Level* level, int x, int y, int z) {
|
void ignite(Level* level, int x, int y, int z) {
|
||||||
|
return; //@fire
|
||||||
|
|
||||||
bool lit = false;
|
bool lit = false;
|
||||||
if (!lit) lit = tryIgnite(level, x, y + 1, z);
|
if (!lit) lit = tryIgnite(level, x, y + 1, z);
|
||||||
@@ -181,10 +184,11 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void animateTick(Level* level, int x, int y, int z, Random* random) {
|
void animateTick(Level* level, int x, int y, int z, Random* random) {
|
||||||
|
return; //@fire
|
||||||
|
|
||||||
if (random->nextInt(24) == 0) {
|
//if (random.nextInt(24) == 0) {
|
||||||
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "fire.fire", 1 + random->nextFloat(), random->nextFloat() * 0.7f + 0.3f);
|
// level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "fire.fire", 1 + random.nextFloat(), random.nextFloat() * 0.7f + 0.3f);
|
||||||
}
|
//}
|
||||||
|
|
||||||
if (level->isSolidBlockingTile(x, y - 1, z) || Tile::fire->canBurn(level, x, y - 1, z)) {
|
if (level->isSolidBlockingTile(x, y - 1, z) || Tile::fire->canBurn(level, x, y - 1, z)) {
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
@@ -244,6 +248,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void checkBurn(Level* level, int x, int y, int z, int chance, Random* random) {
|
void checkBurn(Level* level, int x, int y, int z, int chance, Random* random) {
|
||||||
|
return; //@fire
|
||||||
|
|
||||||
int odds = burnOdds[level->getTile(x, y, z)];
|
int odds = burnOdds[level->getTile(x, y, z)];
|
||||||
if (random->nextInt(chance) < odds) {
|
if (random->nextInt(chance) < odds) {
|
||||||
@@ -260,6 +265,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool isValidFireLocation(Level* level, int x, int y, int z) {
|
bool isValidFireLocation(Level* level, int x, int y, int z) {
|
||||||
|
return false; //@fire
|
||||||
|
|
||||||
if (canBurn(level, x + 1, y, z)) return true;
|
if (canBurn(level, x + 1, y, z)) return true;
|
||||||
if (canBurn(level, x - 1, y, z)) return true;
|
if (canBurn(level, x - 1, y, z)) return true;
|
||||||
@@ -272,6 +278,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
int getFireOdds(Level* level, int x, int y, int z) {
|
int getFireOdds(Level* level, int x, int y, int z) {
|
||||||
|
return 0; //@fire
|
||||||
|
|
||||||
int odds = 0;
|
int odds = 0;
|
||||||
if (!level->isEmptyTile(x, y, z)) return 0;
|
if (!level->isEmptyTile(x, y, z)) return 0;
|
||||||
@@ -287,6 +294,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool tryIgnite(Level* level, int x, int y, int z) {
|
bool tryIgnite(Level* level, int x, int y, int z) {
|
||||||
|
return false; //@fire
|
||||||
|
|
||||||
int t = level->getTile(x, y, z);
|
int t = level->getTile(x, y, z);
|
||||||
if (t == Tile::fire->id) return true;
|
if (t == Tile::fire->id) return true;
|
||||||
|
|||||||
@@ -1,11 +1,6 @@
|
|||||||
#include "GrassTile.h"
|
#include "GrassTile.h"
|
||||||
#include "../material/Material.h"
|
#include "../material/Material.h"
|
||||||
#include "../../entity/item/ItemEntity.h"
|
#include "../../entity/item/ItemEntity.h"
|
||||||
#include "../GrassColor.h"
|
|
||||||
#include "../Level.h"
|
|
||||||
#include "../LevelSource.h"
|
|
||||||
#include "../biome/BiomeSource.h"
|
|
||||||
#include "../../../client/Minecraft.h"
|
|
||||||
|
|
||||||
GrassTile::GrassTile(int id)
|
GrassTile::GrassTile(int id)
|
||||||
: super(id, Material::dirt)
|
: super(id, Material::dirt)
|
||||||
@@ -29,18 +24,11 @@ int GrassTile::getTexture( int face, int data ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int GrassTile::getColor( LevelSource* level, int x, int y, int z ) {
|
int GrassTile::getColor( LevelSource* level, int x, int y, int z ) {
|
||||||
|
//level.getBiomeSource().getBiomeBlock(x, z, 1, 1);
|
||||||
|
//float temp = level.getBiomeSource().temperatures[0];
|
||||||
|
//float rain = level.getBiomeSource().downfalls[0];
|
||||||
|
|
||||||
if(!GrassColor::useTint){
|
return 0x339933;//GrassColor.get(temp, rain);
|
||||||
return 0x339933;
|
|
||||||
}
|
|
||||||
|
|
||||||
level->getBiomeSource()->getBiomeBlock(x, z, 1, 1);
|
|
||||||
float temp = level->getBiomeSource()->temperatures[0];
|
|
||||||
float rain = level->getBiomeSource()->downfalls[0];
|
|
||||||
|
|
||||||
// return 0x339933;//GrassColor.get(temp, rain); // we need to hook this up with OPTION_FOLIAGE_TINT
|
|
||||||
|
|
||||||
return GrassColor::get(temp, rain);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GrassTile::tick( Level* level, int x, int y, int z, Random* random ) {
|
void GrassTile::tick( Level* level, int x, int y, int z, Random* random ) {
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ class GrassTile: public Tile
|
|||||||
{
|
{
|
||||||
typedef Tile super;
|
typedef Tile super;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static const int MIN_BRIGHTNESS = 4;
|
static const int MIN_BRIGHTNESS = 4;
|
||||||
|
|
||||||
GrassTile(int id);
|
GrassTile(int id);
|
||||||
|
|||||||
@@ -9,8 +9,6 @@
|
|||||||
#include "../../item/Item.h"
|
#include "../../item/Item.h"
|
||||||
#include "../../item/ItemInstance.h"
|
#include "../../item/ItemInstance.h"
|
||||||
#include "../FoliageColor.h"
|
#include "../FoliageColor.h"
|
||||||
#include "../LevelSource.h"
|
|
||||||
#include "../biome/BiomeSource.h"
|
|
||||||
|
|
||||||
class Entity;
|
class Entity;
|
||||||
|
|
||||||
@@ -56,16 +54,8 @@ public:
|
|||||||
if (data == BIRCH_LEAF) {
|
if (data == BIRCH_LEAF) {
|
||||||
return FoliageColor::getBirchColor();
|
return FoliageColor::getBirchColor();
|
||||||
}
|
}
|
||||||
if (!FoliageColor::useTint){
|
|
||||||
return FoliageColor::getDefaultColor();
|
|
||||||
}
|
|
||||||
|
|
||||||
// return FoliageColor::getDefaultColor(); we need to hook this up with OPTION_FOLIAGE_TINT
|
return FoliageColor::getDefaultColor();
|
||||||
level->getBiomeSource()->getBiomeBlock(x, z, 1, 1);
|
|
||||||
float temperature = level->getBiomeSource()->temperatures[0];
|
|
||||||
float rainfall = level->getBiomeSource()->downfalls[0];
|
|
||||||
return FoliageColor::get(temperature, rainfall);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void onRemove(Level* level, int x, int y, int z) {
|
void onRemove(Level* level, int x, int y, int z) {
|
||||||
|
|||||||
Reference in New Issue
Block a user