diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml
index 7d73c103d..e1ff0b0fd 100644
--- a/.github/workflows/build-linux.yml
+++ b/.github/workflows/build-linux.yml
@@ -1,132 +1,38 @@
-name: Build (Linux, x86_64)
+name: Build (Linux, x86-64)
on:
push:
- paths:
+ paths: &workflow_paths
- '**.cpp'
- '**.h'
- '**.c'
- - '**/meson.build'
- - 'meson.build'
- - '**/CMakeLists.txt'
- - 'CMakeLists.txt'
+ - '**.cc'
+ - '**.cxx'
+ - '**.hh'
+ - '**.hpp'
+ - '**.hxx'
+ - '**.inl'
+ - "**meson.build"
+ - "flake.nix"
- '.github/workflows/build-linux.yml'
+
pull_request:
- paths:
- - '**.cpp'
- - '**.h'
- - '**.c'
- - '**/meson.build'
- - 'meson.build'
- - '**/CMakeLists.txt'
- - 'CMakeLists.txt'
- - '.github/workflows/build-linux.yml'
+ paths: *workflow_paths
jobs:
build-linux:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- - name: Install system dependencies
- run: |
- sudo apt-get update
- sudo apt-get install -y build-essential ccache python3 python3-pip ninja-build libsdl2-dev libgl-dev libglu1-mesa-dev libpthread-stubs0-dev
- python -m pip install meson
- # Set a reasonable ccache size
- ccache -M 5G || true
-
- - name: Restore ccache
- uses: actions/cache@v4
+ - name: Install Nix
+ uses: cachix/install-nix-action@v31
with:
- path: ~/.ccache
- key: ${{ runner.os }}-ccache-${{ hashFiles('**/meson.build') }}
+ nix_path: nixpkgs=channel:nixos-unstable
- - name: Restore meson cache
- uses: actions/cache@v4
- with:
- path: ~/.cache/meson
- key: ${{ runner.os }}-meson-${{ hashFiles('**/meson.build') }}
+ - name: Build
+ run: nix build --print-build-logs
- - name: Configure Meson
- env:
- CC: "ccache clang"
- CXX: "ccache clang++"
- CCACHE_DIR: ${{ runner.temp }}/ccache
- run: |
- mkdir -p "$CCACHE_DIR"
- export CCACHE_DIR="$CCACHE_DIR"
- meson setup build_release --wipe --buildtype=release --native-file=./scripts/llvm_native.txt
-
- - name: Build with Meson
- env:
- CC: "ccache clang"
- CXX: "ccache clang++"
- CCACHE_DIR: ${{ runner.temp }}/ccache
- run: |
- export CCACHE_DIR="${{ runner.temp }}/ccache"
- # Use all available cores for faster parallel builds
- meson compile -C build_release -j $(nproc) -v Minecraft.Client
-
- - name: Install patchelf
- run: sudo apt-get install -y patchelf
-
- - name: Upload artifact
- uses: actions/upload-artifact@v4
- with:
- name: minecraft-client-linux-release_exe-${{ github.sha }}
- path: build_release/Minecraft.Client/Minecraft.Client
- retention-days: 7
- build-linux-debug:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Install system dependencies
- run: |
- sudo apt-get update
- sudo apt-get install -y build-essential ccache python3 python3-pip ninja-build libsdl2-dev libgl-dev libglu1-mesa-dev libpthread-stubs0-dev
- python -m pip install meson
- # Set a reasonable ccache size
- ccache -M 5G || true
-
- - name: Restore ccache
- uses: actions/cache@v4
- with:
- path: ~/.ccache
- key: ${{ runner.os }}-ccache-debug-${{ hashFiles('**/meson.build') }}
-
- - name: Restore meson cache
- uses: actions/cache@v4
- with:
- path: ~/.cache/meson
- key: ${{ runner.os }}-meson-debug-${{ hashFiles('**/meson.build') }}
-
- - name: Configure Meson (debug)
- env:
- CC: "ccache clang"
- CXX: "ccache clang++"
- CCACHE_DIR: ${{ runner.temp }}/ccache
- run: |
- mkdir -p "$CCACHE_DIR"
- export CCACHE_DIR="$CCACHE_DIR"
- meson setup build_debug --wipe --buildtype=debug --native-file=./scripts/llvm_native.txt
-
- - name: Build Debug with Meson
- env:
- CC: "ccache clang"
- CXX: "ccache clang++"
- CCACHE_DIR: ${{ runner.temp }}/ccache
- run: |
- export CCACHE_DIR="${{ runner.temp }}/ccache"
- # Use all available cores for faster parallel builds
- meson compile -C build_debug -j $(nproc) -v Minecraft.Client
-
- - name: Upload debug executable
- uses: actions/upload-artifact@v4
- with:
- name: minecraft-client-linux-debug_exe-${{ github.sha }}
- path: build_debug/Minecraft.Client/Minecraft.Client
- retention-days: 7
+ - name: Flake integrity
+ run: nix flake check
diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml
index 4965d4b15..84820ad88 100644
--- a/.github/workflows/clang-format.yml
+++ b/.github/workflows/clang-format.yml
@@ -1,22 +1,8 @@
-name: Clang Format
+name: Format Check
on:
push:
- paths:
- - '**.cpp'
- - '**.h'
- - '**.c'
- - '**.cc'
- - '**.cxx'
- - '**.hh'
- - '**.hpp'
- - '**.hxx'
- - '**.inl'
- - '.clang-format'
- - '.github/workflows/clang-format.yml'
- - '.github/scripts/check-clang-format.sh'
- pull_request:
- paths:
+ paths: &workflow_paths
- '**.cpp'
- '**.h'
- '**.c'
@@ -30,26 +16,29 @@ on:
- '.github/workflows/clang-format.yml'
- '.github/scripts/check-clang-format.sh'
+ pull_request:
+ paths: *workflow_paths
+
jobs:
clang-format:
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-latest
concurrency:
group: clang-format-${{ github.ref }}
cancel-in-progress: true
steps:
- name: Checkout repository
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
- fetch-depth: 0
+ fetch-depth: 2
- name: Install clang-format
- run: |
- sudo apt-get update
- sudo apt-get install -y clang-format-19
+ uses: daaku/gh-action-apt-install@v4
+ with:
+ packages: clang-format
- name: Check changed files
env:
- CLANG_FORMAT_BIN: clang-format-19
+ CLANG_FORMAT_BIN: clang-format
EVENT_NAME: ${{ github.event_name }}
PR_BASE_REF: ${{ github.event.pull_request.base.ref }}
PR_BASE_SHA: ${{ github.event.pull_request.base.sha }}
diff --git a/Minecraft.Assets/Common/res/1_2_2/gui/anvil.png b/Minecraft.Assets/Common/res/1_2_2/gui/anvil.png
new file mode 100644
index 000000000..34e8f9f9f
Binary files /dev/null and b/Minecraft.Assets/Common/res/1_2_2/gui/anvil.png differ
diff --git a/Minecraft.Assets/Common/res/1_2_2/gui/beacon.png b/Minecraft.Assets/Common/res/1_2_2/gui/beacon.png
new file mode 100644
index 000000000..f51a2ef51
Binary files /dev/null and b/Minecraft.Assets/Common/res/1_2_2/gui/beacon.png differ
diff --git a/Minecraft.Assets/Common/res/1_2_2/gui/brewing_stand.png b/Minecraft.Assets/Common/res/1_2_2/gui/brewing_stand.png
new file mode 100644
index 000000000..e7dc2031a
Binary files /dev/null and b/Minecraft.Assets/Common/res/1_2_2/gui/brewing_stand.png differ
diff --git a/Minecraft.Assets/Common/res/1_2_2/gui/hopper.png b/Minecraft.Assets/Common/res/1_2_2/gui/hopper.png
new file mode 100644
index 000000000..3d0054790
Binary files /dev/null and b/Minecraft.Assets/Common/res/1_2_2/gui/hopper.png differ
diff --git a/Minecraft.Assets/Common/res/1_2_2/gui/horse.png b/Minecraft.Assets/Common/res/1_2_2/gui/horse.png
new file mode 100644
index 000000000..194cc6bf6
Binary files /dev/null and b/Minecraft.Assets/Common/res/1_2_2/gui/horse.png differ
diff --git a/Minecraft.Assets/Common/res/1_2_2/gui/inventory.png b/Minecraft.Assets/Common/res/1_2_2/gui/inventory.png
index 4d9911690..d553c4f73 100644
Binary files a/Minecraft.Assets/Common/res/1_2_2/gui/inventory.png and b/Minecraft.Assets/Common/res/1_2_2/gui/inventory.png differ
diff --git a/Minecraft.Assets/Common/res/1_2_2/gui/villager.png b/Minecraft.Assets/Common/res/1_2_2/gui/villager.png
new file mode 100644
index 000000000..3211a7a00
Binary files /dev/null and b/Minecraft.Assets/Common/res/1_2_2/gui/villager.png differ
diff --git a/Minecraft.Assets/Common/res/1_2_2/title/bg/panorama.png b/Minecraft.Assets/Common/res/1_2_2/title/bg/panorama.png
new file mode 100644
index 000000000..65ae6070c
Binary files /dev/null and b/Minecraft.Assets/Common/res/1_2_2/title/bg/panorama.png differ
diff --git a/Minecraft.Assets/Common/res/lang/en_US.lang b/Minecraft.Assets/Common/res/lang/en_US.lang
index 752a60f39..44040b2b7 100644
--- a/Minecraft.Assets/Common/res/lang/en_US.lang
+++ b/Minecraft.Assets/Common/res/lang/en_US.lang
@@ -435,6 +435,9 @@ tile.oreEmerald.name=Emerald Ore
tile.blockEmerald.name=Block of Emerald
tile.tripWire.name=Tripwire
tile.tripWireSource.name=Tripwire Hook
+tile.beacon.name=Beacon
+tile.beacon.primary=Primary Power
+tile.beacon.secondary=Secondary Power
item.shovelIron.name=Iron Shovel
item.pickaxeIron.name=Iron Pickaxe
@@ -595,6 +598,9 @@ container.crafting=Crafting
container.dispenser=Dispenser
container.furnace=Furnace
container.enchant=Enchant
+container.repair=Repair & Name
+container.repair.cost=Enchantment Cost: %d
+container.repair.expensive=Too Expensive!
container.creative=Item Selection
container.brewing=Brewing Stand
container.chest=Chest
diff --git a/Minecraft.Assets/Windows64Media/loc/en-EN/strings.lang b/Minecraft.Assets/Windows64Media/loc/en-EN/strings.lang
index 752552227..f29d1e6a8 100644
--- a/Minecraft.Assets/Windows64Media/loc/en-EN/strings.lang
+++ b/Minecraft.Assets/Windows64Media/loc/en-EN/strings.lang
@@ -4760,6 +4760,9 @@ Would you like to unlock the full game?
Food
+
+ Search Items
+
Structures
@@ -7068,6 +7071,9 @@ All Ender Chests in a world are linked. Items placed into an Ender Chest are acc
OK
+
+ Cancel
+
SELECT
@@ -7195,6 +7201,9 @@ You can upload a world save to the save transfer area using Minecraft: PlayStati
Exit Game
+
+ Are you sure you want to exit the game?
+
You have been returned to the title screen because your Xbox profile was signed out
diff --git a/Minecraft.Assets/Windows64Media/loc/stringsGeneric.xml b/Minecraft.Assets/Windows64Media/loc/stringsGeneric.xml
index 36b521dd0..ec3b88e28 100644
--- a/Minecraft.Assets/Windows64Media/loc/stringsGeneric.xml
+++ b/Minecraft.Assets/Windows64Media/loc/stringsGeneric.xml
@@ -1,4 +1,4 @@
-
+
New Downloadable Content is available! Access it from the Minecraft Store button on the Main Menu.
@@ -6044,6 +6044,10 @@ Would you like to unlock the full game now?
Food
+
+ Search Items
+
+
Structures
@@ -8811,4 +8815,4 @@ All Ender Chests in a world are linked. Items placed into an Ender Chest are acc
Cure
-
\ No newline at end of file
+
diff --git a/Minecraft.Client/GameState/Options.cpp b/Minecraft.Client/GameState/Options.cpp
index e8e24827d..07549b5c4 100644
--- a/Minecraft.Client/GameState/Options.cpp
+++ b/Minecraft.Client/GameState/Options.cpp
@@ -89,8 +89,15 @@ const std::wstring Options::DIFFICULTY_NAMES[] = {
const std::wstring Options::GUI_SCALE[] = {
L"options.guiScale.auto", L"options.guiScale.small",
L"options.guiScale.normal", L"options.guiScale.large"};
+
+#ifdef ENABLE_VSYNC
const std::wstring Options::FRAMERATE_LIMITS[] = {
L"performance.max", L"performance.balanced", L"performance.powersaver"};
+#else
+const std::wstring Options::FRAMERATE_LIMITS[] = {
+ L"performance.max", L"performance.balanced", L"performance.powersaver",
+ L"performance.unlimited"};
+#endif
const std::wstring Options::PARTICLES[] = {L"options.particles.all",
L"options.particles.decreased",
@@ -231,21 +238,24 @@ void Options::toggle(const Options::Option* option, int dir) {
if (option == Option::PARTICLES) particles = (particles + dir) % 3;
// 4J-PB - changing
- // if (option == Option::VIEW_BOBBING) bobView = !bobView;
- if (option == Option::VIEW_BOBBING)
- ((dir == 0) ? bobView = false : bobView = true);
+ // 4jcraft: uncommented this so that the view bobbing option works
+ if (option == Option::VIEW_BOBBING) bobView = !bobView;
if (option == Option::RENDER_CLOUDS) renderClouds = !renderClouds;
if (option == Option::ADVANCED_OPENGL) {
advancedOpengl = !advancedOpengl;
- // 4jcraft: ensure level exists before applying
- if(minecraft->level) minecraft->levelRenderer->allChanged();
+ // 4jcraft: ensure level exists before applying
+ if (minecraft->level) minecraft->levelRenderer->allChanged();
}
if (option == Option::ANAGLYPH) {
anaglyph3d = !anaglyph3d;
minecraft->textures->reloadAll();
}
if (option == Option::FRAMERATE_LIMIT)
+#ifdef ENABLE_VSYNC
framerateLimit = (framerateLimit + dir + 3) % 3;
+#else
+ framerateLimit = (framerateLimit + dir + 4) % 4;
+#endif
// 4J-PB - Change for Xbox
// if (option == Option::DIFFICULTY) difficulty = (difficulty + dir) & 3;
@@ -255,13 +265,13 @@ void Options::toggle(const Options::Option* option, int dir) {
if (option == Option::GRAPHICS) {
fancyGraphics = !fancyGraphics;
- // 4jcraft: ensure level exists before applying
- if(minecraft->level) minecraft->levelRenderer->allChanged();
+ // 4jcraft: ensure level exists before applying
+ if (minecraft->level) minecraft->levelRenderer->allChanged();
}
if (option == Option::AMBIENT_OCCLUSION) {
ambientOcclusion = !ambientOcclusion;
- // 4jcraft: ensure level exists before applying
- if(minecraft->level) minecraft->levelRenderer->allChanged();
+ // 4jcraft: ensure level exists before applying
+ if (minecraft->level) minecraft->levelRenderer->allChanged();
}
// 4J-PB - don't do the file save on the xbox
diff --git a/Minecraft.Client/Level/ServerLevel.cpp b/Minecraft.Client/Level/ServerLevel.cpp
index 025190b7f..3deaa9dd0 100644
--- a/Minecraft.Client/Level/ServerLevel.cpp
+++ b/Minecraft.Client/Level/ServerLevel.cpp
@@ -1,3 +1,6 @@
+#include
+#include
+
#include "../Platform/stdafx.h"
#include "ServerLevel.h"
#include "../MinecraftServer.h"
@@ -1112,13 +1115,13 @@ std::shared_ptr ServerLevel::explode(std::shared_ptr source,
}
if (player->distanceToSqr(x, y, z) < 64 * 64) {
- Vec3* knockbackVec = explosion->getHitPlayerKnockback(player);
+ Vec3 knockbackVec = explosion->getHitPlayerKnockback(player);
// app.DebugPrintf("Sending %s with knockback (%f,%f,%f)\n",
// knockbackOnly?"knockbackOnly":"allExplosion",knockbackVec->x,knockbackVec->y,knockbackVec->z);
// If the player is not the primary on the system, then we only
// want to send info for the knockback
player->connection->send(std::shared_ptr(
- new ExplodePacket(x, y, z, r, &explosion->toBlow, knockbackVec,
+ new ExplodePacket(x, y, z, r, &explosion->toBlow, &knockbackVec,
knockbackOnly)));
sentTo.push_back(player);
}
@@ -1570,7 +1573,7 @@ int ServerLevel::runUpdate(void* lpParam) {
}
PIXEndNamedEvent();
#ifdef __PS3__
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
#endif //__PS3__
}
@@ -1584,4 +1587,4 @@ void ServerLevel::flagEntitiesToBeRemoved(unsigned int* flags,
if (chunkMap) {
chunkMap->flagEntitiesToBeRemoved(flags, removedFound);
}
-}
\ No newline at end of file
+}
diff --git a/Minecraft.Client/Minecraft.cpp b/Minecraft.Client/Minecraft.cpp
index 1e9a1c954..ee7ac2623 100644
--- a/Minecraft.Client/Minecraft.cpp
+++ b/Minecraft.Client/Minecraft.cpp
@@ -1,3 +1,6 @@
+#include
+#include
+
#include "Platform/stdafx.h"
#include "Minecraft.h"
#include "GameState/GameMode.h"
@@ -723,8 +726,6 @@ void Minecraft::run()
{
// try { // 4J - removed try/catch
// if (minecraftApplet != null && !minecraftApplet.isActive()) break; // 4J - removed
- AABB::resetPool();
- Vec3::resetPool();
// if (parent == NULL && Display.isCloseRequested()) { // 4J - removed
// stop();
@@ -781,7 +782,7 @@ void Minecraft::run()
{
this->toggleFullScreen();
}
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
*/
@@ -796,7 +797,7 @@ void Minecraft::run()
achievementPopup->render();
- Sleep(0); // 4J - was Thread.yield()
+ std::this_thread::sleep_for(std::chrono::milliseconds(0)); // 4J - was Thread.yield())
// if (Keyboard::isKeyDown(Keyboard::KEY_F7)) Display.update(); // 4J - removed condition
Display::update();
@@ -1280,8 +1281,6 @@ void Minecraft::run_middle() {
// try { // 4J - removed try/catch
// if (minecraftApplet != null &&
// !minecraftApplet.isActive()) break; // 4J - removed
- AABB::resetPool();
- Vec3::resetPool();
// if (parent == NULL && Display.isCloseRequested()) {
// // 4J - removed
@@ -1966,13 +1965,16 @@ void Minecraft::run_middle() {
// clear the stored button downs since the tick for this
// player will now have actioned them
player->ullButtonsPressed = 0LL;
+ } else if (screen != NULL) {
+ screen->updateEvents();
+ // 4jcraft: this fixes the title screen panorama running
+ // faster than it should
+ if (!idx) {
+ screen->tick();
+ }
}
}
- if (screen != NULL) {
- screen->updateEvents();
- }
-
ui.HandleGameTick();
setLocalPlayerIdx(ProfileManager.GetPrimaryPad());
@@ -2112,7 +2114,7 @@ void Minecraft::run_middle() {
{
this->toggleFullScreen();
}
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
*/
@@ -2141,7 +2143,10 @@ void Minecraft::run_middle() {
achievementPopup->render();
PIXBeginNamedEvent(0, "Sleeping");
- Sleep(0); // 4J - was Thread.yield()
+ std::this_thread::yield(); // 4jcraft added now that we have
+ // portable thread yield.
+ // std::this_thread::sleep_for(
+ // std::chrono::milliseconds(0)); // 4J - was Thread.yield())
PIXEndNamedEvent();
// if (Keyboard::isKeyDown(Keyboard::KEY_F7))
@@ -2222,8 +2227,6 @@ void Minecraft::run_end() { destroy(); }
void Minecraft::emergencySave() {
// 4J - lots of try/catches removed here, and garbage collector things
levelRenderer->clear();
- AABB::clearPool();
- Vec3::clearPool();
setLevel(NULL);
}
@@ -2399,8 +2402,6 @@ void Minecraft::levelTickUpdateFunc(void* pParam) {
}
void Minecraft::levelTickThreadInitFunc() {
- AABB::CreateNewThreadStorage();
- Vec3::CreateNewThreadStorage();
Compression::UseDefaultThreadStorage();
}
@@ -2750,7 +2751,7 @@ void Minecraft::tick(bool bFirst, bool bUpdateTextures) {
// 4J-PB - Call the useItemOn with the TestOnly flag set
bool bUseItemOn = gameMode->useItemOn(
player, level, itemInstance, x, y, z, face,
- hitResult->pos, true);
+ &hitResult->pos, true);
/* 4J-Jev:
* Moved this here so we have item tooltips to
@@ -3900,7 +3901,7 @@ void Minecraft::tick(bool bFirst, bool bUpdateTextures) {
bool usedItem = false;
gameMode->useItemOn(player, level, nullptr, hitResult->x,
hitResult->y, hitResult->z, 0,
- hitResult->pos, false, &usedItem);
+ &hitResult->pos, false, &usedItem);
} else {
ui.PlayUISFX(eSFX_Press);
app.LoadCrafting2x2Menu(iPad, player);
diff --git a/Minecraft.Client/MinecraftServer.cpp b/Minecraft.Client/MinecraftServer.cpp
index a08f48ac9..7009e71ef 100644
--- a/Minecraft.Client/MinecraftServer.cpp
+++ b/Minecraft.Client/MinecraftServer.cpp
@@ -2,6 +2,8 @@
// #include "Minecraft.h"
#include
+#include
+#include
#include "Input/ConsoleInput.h"
#include "Level/DerivedServerLevel.h"
@@ -229,7 +231,7 @@ bool MinecraftServer::initServer(__int64 seed, NetworkGameInitData* initData,
// 4J-JEV: Need to wait for levelGenerationOptions to load.
while (app.getLevelGenerationOptions() != NULL &&
!app.getLevelGenerationOptions()->hasLoadedData())
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
if (app.getLevelGenerationOptions() != NULL &&
!app.getLevelGenerationOptions()->ready()) {
@@ -314,8 +316,6 @@ int MinecraftServer::runPostUpdate(void* lpParam) {
MinecraftServer* server = (MinecraftServer*)lpParam;
Entity::useSmallIds(); // This thread can end up spawning entities as
// resources
- AABB::CreateNewThreadStorage();
- Vec3::CreateNewThreadStorage();
Compression::UseDefaultThreadStorage();
Level::enableLightingCache();
Tile::CreateNewThreadStorage();
@@ -336,7 +336,7 @@ int MinecraftServer::runPostUpdate(void* lpParam) {
} else {
LeaveCriticalSection(&server->m_postProcessCS);
}
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
} while (!server->m_postUpdateTerminate &&
ShutdownManager::ShouldRun(ShutdownManager::ePostProcessThread));
// #ifndef __PS3__
@@ -357,15 +357,13 @@ int MinecraftServer::runPostUpdate(void* lpParam) {
printf("processing request %00d\n",
server->m_postProcessRequests.size());
#endif
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
#endif
EnterCriticalSection(&server->m_postProcessCS);
}
LeaveCriticalSection(&server->m_postProcessCS);
// #endif //__PS3__
Tile::ReleaseThreadStorage();
- AABB::ReleaseThreadStorage();
- Vec3::ReleaseThreadStorage();
Level::destroyLightingCache();
ShutdownManager::HasFinished(ShutdownManager::ePostProcessThread);
@@ -1080,7 +1078,7 @@ void MinecraftServer::stopServer(bool didInit) {
// files have completed saving.
#if defined(_DURANGO) || defined(__ORBIS__) || defined(__PSVITA__)
while (StorageManager.GetSaveState() != C4JStorage::ESaveGame_Idle) {
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
#endif
@@ -1582,7 +1580,7 @@ void MinecraftServer::run(int64_t seed, void* lpParameter) {
app.SetXuiServerAction(i, eXuiServerAction_Idle);
}
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
}
// else
@@ -1590,7 +1588,7 @@ void MinecraftServer::run(int64_t seed, void* lpParameter) {
// while (running)
// {
// handleConsoleInputs();
- // Sleep(10);
+ // std::this_thread::sleep_for(std::chrono::milliseconds(10));
// }
// }
#if 0
@@ -1650,9 +1648,6 @@ void MinecraftServer::tick() {
ironTimers.erase(toRemove[i]);
}
- AABB::resetPool();
- Vec3::resetPool();
-
tickCount++;
// 4J We need to update client difficulty levels based on the servers
diff --git a/Minecraft.Client/Network/ClientConnection.cpp b/Minecraft.Client/Network/ClientConnection.cpp
index 8494759de..78cc2c789 100644
--- a/Minecraft.Client/Network/ClientConnection.cpp
+++ b/Minecraft.Client/Network/ClientConnection.cpp
@@ -46,6 +46,7 @@
#include "../ClientConstants.h"
#include "../../Minecraft.World/Util/SoundTypes.h"
#include "../Textures/Packs/TexturePackRepository.h"
+#include "UI/Screens/MerchantScreen.h"
#ifdef _XBOX
#include "../Platform/Common/XUI/XUI_Scene_Trading.h"
#else
@@ -1010,7 +1011,7 @@ void ClientConnection::handleMovePlayer(
player->xd = player->yd = player->zd = 0;
player->absMoveTo(x, y, z, yRot, xRot);
packet->x = player->x;
- packet->y = player->bb->y0;
+ packet->y = player->bb.y0;
packet->z = player->z;
packet->yView = player->y;
connection->send(packet);
@@ -3707,6 +3708,17 @@ void ClientConnection::handleCustomPayload(
ByteArrayInputStream bais(customPayloadPacket->data);
DataInputStream input(&bais);
int containerId = input.readInt();
+#ifdef ENABLE_JAVA_GUIS
+ // 4jcraft: use the java gui getMerchant() to get trader as we don't
+ // have iggy's screen anymore
+ if (minecraft->screen &&
+ dynamic_cast(minecraft->screen) &&
+ containerId == minecraft->localplayers[m_userIndex]
+ ->containerMenu->containerId) {
+ std::shared_ptr trader = nullptr;
+ MerchantScreen* screen = (MerchantScreen*)minecraft->screen;
+ trader = screen->getMerchant();
+#else
if (ui.IsSceneInStack(m_userIndex, eUIScene_TradingMenu) &&
containerId == minecraft->localplayers[m_userIndex]
->containerMenu->containerId) {
@@ -3729,7 +3741,7 @@ void ClientConnection::handleCustomPayload(
UIScene_TradingMenu* screen = (UIScene_TradingMenu*)scene;
trader = screen->getMerchant();
#endif
-
+#endif
MerchantRecipeList* recipeList =
MerchantRecipeList::createFromStream(&input);
trader->overrideOffers(recipeList);
diff --git a/Minecraft.Client/Network/PlayerConnection.cpp b/Minecraft.Client/Network/PlayerConnection.cpp
index 0e5038d86..cb70ca016 100644
--- a/Minecraft.Client/Network/PlayerConnection.cpp
+++ b/Minecraft.Client/Network/PlayerConnection.cpp
@@ -272,8 +272,9 @@ void PlayerConnection::handleMovePlayer(
*/
float r = 1 / 16.0f;
+ AABB shrunk = player->bb.shrink(r, r, r);
bool oldOk =
- level->getCubes(player, player->bb->copy()->shrink(r, r, r))
+ level->getCubes(player, &shrunk)
->empty();
if (player->onGround && !packet->onGround && yDist > 0) {
@@ -324,17 +325,19 @@ void PlayerConnection::handleMovePlayer(
}
player->absMoveTo(xt, yt, zt, yRotT, xRotT);
+ // TODO: check if this can be elided
+ shrunk = player->bb.shrink(r, r, r);
bool newOk =
- level->getCubes(player, player->bb->copy()->shrink(r, r, r))
+ level->getCubes(player, &shrunk)
->empty();
if (oldOk && (fail || !newOk) && !player->isSleeping()) {
teleport(xLastOk, yLastOk, zLastOk, yRotT, xRotT);
return;
}
- AABB* testBox = player->bb->copy()->grow(r, r, r)->expand(0, -0.55, 0);
+ AABB testBox = player->bb.grow(r, r, r).expand(0, -0.55, 0);
// && server.level.getCubes(player, testBox).size() == 0
if (!server->isFlightAllowed() && !player->gameMode->isCreative() &&
- !level->containsAnyBlocks(testBox) && !player->isAllowedToFly()) {
+ !level->containsAnyBlocks(&testBox) && !player->isAllowedToFly()) {
if (oyDist >= (-0.5f / 16.0f)) {
aboveGroundTickCount++;
if (aboveGroundTickCount > 80) {
@@ -1551,7 +1554,8 @@ void PlayerConnection::handlePlayerAbilities(
// StringBuilder result = new StringBuilder();
// for (String candidate : server.getAutoCompletions(player,
-//packet.getMessage())) { if (result.length() > 0) result.append("\0");
+// packet.getMessage())) { if (result.length() > 0)
+// result.append("\0");
// result.append(candidate);
// }
diff --git a/Minecraft.Client/Network/PlayerList.cpp b/Minecraft.Client/Network/PlayerList.cpp
index c3286234c..2eadfa824 100644
--- a/Minecraft.Client/Network/PlayerList.cpp
+++ b/Minecraft.Client/Network/PlayerList.cpp
@@ -416,7 +416,7 @@ void PlayerList::validatePlayerSpawnPosition(
player->y, player->z, player->dimension);
ServerLevel* level = server->getLevel(player->dimension);
- while (level->getCubes(player, player->bb)->size() != 0) {
+ while (level->getCubes(player, &player->bb)->size() != 0) {
player->setPos(player->x, player->y + 1, player->z);
}
app.DebugPrintf("Final pos is %f, %f, %f in dimension %d\n", player->x,
@@ -456,7 +456,7 @@ void PlayerList::validatePlayerSpawnPosition(
}
delete bedPosition;
}
- while (level->getCubes(player, player->bb)->size() != 0) {
+ while (level->getCubes(player, &player->bb)->size() != 0) {
player->setPos(player->x, player->y + 1, player->z);
}
@@ -749,7 +749,7 @@ std::shared_ptr PlayerList::respawn(
// Ensure the area the player is spawning in is loaded!
level->cache->create(((int)player->x) >> 4, ((int)player->z) >> 4);
- while (!level->getCubes(player, player->bb)->empty()) {
+ while (!level->getCubes(player, &player->bb)->empty()) {
player->setPos(player->x, player->y + 1, player->z);
}
diff --git a/Minecraft.Client/Network/ServerChunkCache.cpp b/Minecraft.Client/Network/ServerChunkCache.cpp
index a8b5b78c0..68c701155 100644
--- a/Minecraft.Client/Network/ServerChunkCache.cpp
+++ b/Minecraft.Client/Network/ServerChunkCache.cpp
@@ -1,3 +1,6 @@
+#include
+#include
+
#include "../Platform/stdafx.h"
#include "ServerChunkCache.h"
#include "../Level/ServerLevel.h"
@@ -277,7 +280,7 @@ LevelChunk* ServerChunkCache::create(
}
#ifdef __PS3__
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
#endif // __PS3__
return chunk;
}
diff --git a/Minecraft.Client/Platform/Common/Consoles_App.cpp b/Minecraft.Client/Platform/Common/Consoles_App.cpp
index 95053b713..4dbd93892 100644
--- a/Minecraft.Client/Platform/Common/Consoles_App.cpp
+++ b/Minecraft.Client/Platform/Common/Consoles_App.cpp
@@ -1,5 +1,4 @@
-
-#include "../Minecraft.World/Platform/stdafx.h"
+#include "../Minecraft.World/Platform/stdafx.h"
#include "../Minecraft.World/Recipes/Recipy.h"
#include "../Minecraft.Client/GameState/Options.h"
@@ -73,6 +72,9 @@
#include
#endif
+#include
+#include
+
#include "Leaderboards/LeaderboardManager.h"
// CMinecraftApp app;
@@ -4720,8 +4722,6 @@ int CMinecraftApp::EthernetDisconnectReturned(
int CMinecraftApp::SignoutExitWorldThreadProc(void* lpParameter) {
// Share AABB & Vec3 pools with default (main thread) - should be ok as long
// as we don't tick the main thread whilst this thread is running
- AABB::UseDefaultThreadStorage();
- Vec3::UseDefaultThreadStorage();
Compression::UseDefaultThreadStorage();
// app.SetGameStarted(false);
@@ -4847,7 +4847,7 @@ int CMinecraftApp::SignoutExitWorldThreadProc(void* lpParameter) {
// We can't start/join a new game until the session is destroyed, so wait
// for it to be idle again
while (g_NetworkManager.IsInSession()) {
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
return S_OK;
@@ -6347,7 +6347,7 @@ int CMinecraftApp::WarningTrialTexturePackReturned(
DLCPack *pDLCPack=pDLCTexPack->getDLCInfoParentPack();//tPack->getDLCPack();
const char *pchPackName=wstringtofilename(pDLCPack->getName());
app.DebugPrintf("Texture Pack - %s\n",pchPackName);
- SONYDLC *pSONYDLCInfo=app.GetSONYDLCInfo((char *)pchPackName);
+ SONYDLC *pSONYDLCInfo=app.GetSONYDLCInfo((char *)pchPackName);
if(pSONYDLCInfo!=NULL)
{
@@ -6368,14 +6368,14 @@ int CMinecraftApp::WarningTrialTexturePackReturned(
#if defined __ORBIS__ || defined __PSVITA__ || defined __PS3__
if(app.CheckForEmptyStore(iPad)==false)
#endif
- {
+ {
if(app.DLCAlreadyPurchased(chSkuID))
{
app.DownloadAlreadyPurchased(chSkuID);
}
else
{
- app.Checkout(chSkuID);
+ app.Checkout(chSkuID);
}
}
}
@@ -7712,8 +7712,6 @@ void CMinecraftApp::LeaveSaveNotificationSection() {
int CMinecraftApp::RemoteSaveThreadProc(void* lpParameter) {
// The game should be stopped while we are doing this, but the connections
// ticks may try to create some AABB's or Vec3's
- AABB::UseDefaultThreadStorage();
- Vec3::UseDefaultThreadStorage();
Compression::UseDefaultThreadStorage();
// 4J-PB - Xbox 360 - 163153 - [CRASH] TU17: Code: Multiplayer: During the
@@ -7741,7 +7739,7 @@ int CMinecraftApp::RemoteSaveThreadProc(void* lpParameter) {
eAppAction_WaitRemoteServerSaveComplete) {
// Tick all the games connections
pMinecraft->tickAllConnections();
- Sleep(100);
+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
if (app.GetXuiAction(ProfileManager.GetPrimaryPad()) !=
@@ -9244,7 +9242,8 @@ bool CMinecraftApp::RetrieveNextTMSPPContent() {
C4JStorage::ETMSStatus_Fail_ReadInProgress) {
app.DebugPrintf(
"TMSPP_ReadFile failed - read in progress\n");
- Sleep(50);
+ std::this_thread::sleep_for(
+ std::chrono::milliseconds(50));
LeaveCriticalSection(&csTMSPPDownloadQueue);
return false;
}
@@ -9283,7 +9282,8 @@ bool CMinecraftApp::RetrieveNextTMSPPContent() {
app.DebugPrintf(
"@@@@@@@@@@@@@@@@@ TMSPP_ReadFile failed - busy "
"(probably reading already)\n");
- Sleep(50);
+ std::this_thread::sleep_for(
+ std::chrono::milliseconds(50));
LeaveCriticalSection(&csTMSPPDownloadQueue);
return false;
}
@@ -10370,4 +10370,4 @@ std::wstring CMinecraftApp::getRootPath(std::uint32_t packId,
void CMinecraftApp::SetReachedMainMenu() { m_hasReachedMainMenu = true; }
bool CMinecraftApp::HasReachedMainMenu() { return m_hasReachedMainMenu; }
-#endif
\ No newline at end of file
+#endif
diff --git a/Minecraft.Client/Platform/Common/GameRules/ApplySchematicRuleDefinition.cpp b/Minecraft.Client/Platform/Common/GameRules/ApplySchematicRuleDefinition.cpp
index e7f25cf69..2101756d7 100644
--- a/Minecraft.Client/Platform/Common/GameRules/ApplySchematicRuleDefinition.cpp
+++ b/Minecraft.Client/Platform/Common/GameRules/ApplySchematicRuleDefinition.cpp
@@ -8,12 +8,13 @@
#include "ApplySchematicRuleDefinition.h"
#include "LevelGenerationOptions.h"
#include "ConsoleSchematicFile.h"
+#include "../../Minecraft.World/Util/AABB.h"
ApplySchematicRuleDefinition::ApplySchematicRuleDefinition(
LevelGenerationOptions* levelGenOptions) {
m_levelGenOptions = levelGenOptions;
- m_location = Vec3::newPermanent(0, 0, 0);
- m_locationBox = NULL;
+ m_location = Vec3(0, 0, 0);
+ m_locationBox = std::nullopt;
m_totalBlocksChanged = 0;
m_totalBlocksChangedLighting = 0;
m_rotation = ConsoleSchematicFile::eSchematicRot_0;
@@ -26,7 +27,6 @@ ApplySchematicRuleDefinition::~ApplySchematicRuleDefinition() {
app.DebugPrintf("Deleting ApplySchematicRuleDefinition.\n");
if (!m_completed) m_levelGenOptions->releaseSchematicFile(m_schematicName);
m_schematic = NULL;
- delete m_location;
}
void ApplySchematicRuleDefinition::writeAttributes(DataOutputStream* dos,
@@ -36,11 +36,11 @@ void ApplySchematicRuleDefinition::writeAttributes(DataOutputStream* dos,
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_filename);
dos->writeUTF(m_schematicName);
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_x);
- dos->writeUTF(_toString(m_location->x));
+ dos->writeUTF(_toString(m_location.x));
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_y);
- dos->writeUTF(_toString(m_location->y));
+ dos->writeUTF(_toString(m_location.y));
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_z);
- dos->writeUTF(_toString(m_location->z));
+ dos->writeUTF(_toString(m_location.z));
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_rot);
switch (m_rotation) {
@@ -76,19 +76,19 @@ void ApplySchematicRuleDefinition::addAttribute(
m_schematic = m_levelGenOptions->getSchematicFile(m_schematicName);
}
} else if (attributeName.compare(L"x") == 0) {
- m_location->x = _fromString(attributeValue);
- if (((int)abs(m_location->x)) % 2 != 0) m_location->x -= 1;
+ m_location.x = _fromString(attributeValue);
+ if (((int)abs(m_location.x)) % 2 != 0) m_location.x -= 1;
// app.DebugPrintf("ApplySchematicRuleDefinition: Adding parameter
// x=%f\n",m_location->x);
} else if (attributeName.compare(L"y") == 0) {
- m_location->y = _fromString(attributeValue);
- if (((int)abs(m_location->y)) % 2 != 0) m_location->y -= 1;
- if (m_location->y < 0) m_location->y = 0;
+ m_location.y = _fromString(attributeValue);
+ if (((int)abs(m_location.y)) % 2 != 0) m_location.y -= 1;
+ if (m_location.y < 0) m_location.y = 0;
// app.DebugPrintf("ApplySchematicRuleDefinition: Adding parameter
// y=%f\n",m_location->y);
} else if (attributeName.compare(L"z") == 0) {
- m_location->z = _fromString(attributeValue);
- if (((int)abs(m_location->z)) % 2 != 0) m_location->z -= 1;
+ m_location.z = _fromString(attributeValue);
+ if (((int)abs(m_location.z)) % 2 != 0) m_location.z -= 1;
// app.DebugPrintf("ApplySchematicRuleDefinition: Adding parameter
// z=%f\n",m_location->z);
} else if (attributeName.compare(L"rot") == 0) {
@@ -131,25 +131,25 @@ void ApplySchematicRuleDefinition::updateLocationBox() {
if (m_schematic == NULL)
m_schematic = m_levelGenOptions->getSchematicFile(m_schematicName);
- m_locationBox = AABB::newPermanent(0, 0, 0, 0, 0, 0);
+ m_locationBox = AABB(0, 0, 0, 0, 0, 0);
- m_locationBox->x0 = m_location->x;
- m_locationBox->y0 = m_location->y;
- m_locationBox->z0 = m_location->z;
+ m_locationBox->x0 = m_location.x;
+ m_locationBox->y0 = m_location.y;
+ m_locationBox->z0 = m_location.z;
- m_locationBox->y1 = m_location->y + m_schematic->getYSize();
+ m_locationBox->y1 = m_location.y + m_schematic->getYSize();
switch (m_rotation) {
case ConsoleSchematicFile::eSchematicRot_90:
case ConsoleSchematicFile::eSchematicRot_270:
- m_locationBox->x1 = m_location->x + m_schematic->getZSize();
- m_locationBox->z1 = m_location->z + m_schematic->getXSize();
+ m_locationBox->x1 = m_location.x + m_schematic->getZSize();
+ m_locationBox->z1 = m_location.z + m_schematic->getXSize();
break;
case ConsoleSchematicFile::eSchematicRot_0:
case ConsoleSchematicFile::eSchematicRot_180:
default:
- m_locationBox->x1 = m_location->x + m_schematic->getXSize();
- m_locationBox->z1 = m_location->z + m_schematic->getZSize();
+ m_locationBox->x1 = m_location.x + m_schematic->getXSize();
+ m_locationBox->z1 = m_location.z + m_schematic->getZSize();
break;
};
}
@@ -163,8 +163,8 @@ void ApplySchematicRuleDefinition::processSchematic(AABB* chunkBox,
if (m_schematic == NULL)
m_schematic = m_levelGenOptions->getSchematicFile(m_schematicName);
- if (m_locationBox == NULL) updateLocationBox();
- if (chunkBox->intersects(m_locationBox)) {
+ if (!m_locationBox.has_value()) updateLocationBox();
+ if (chunkBox->intersects(*m_locationBox)) {
m_locationBox->y1 =
std::min((double)Level::maxBuildHeight, m_locationBox->y1);
@@ -174,12 +174,12 @@ void ApplySchematicRuleDefinition::processSchematic(AABB* chunkBox,
#endif
PIXBeginNamedEvent(0, "Applying blocks and data");
m_totalBlocksChanged += m_schematic->applyBlocksAndData(
- chunk, chunkBox, m_locationBox, m_rotation);
+ chunk, chunkBox, &*m_locationBox, m_rotation);
PIXEndNamedEvent();
// Add the tileEntities
PIXBeginNamedEvent(0, "Applying tile entities");
- m_schematic->applyTileEntities(chunk, chunkBox, m_locationBox,
+ m_schematic->applyTileEntities(chunk, chunkBox, &*m_locationBox,
m_rotation);
PIXEndNamedEvent();
@@ -207,8 +207,8 @@ void ApplySchematicRuleDefinition::processSchematicLighting(AABB* chunkBox,
if (m_schematic == NULL)
m_schematic = m_levelGenOptions->getSchematicFile(m_schematicName);
- if (m_locationBox == NULL) updateLocationBox();
- if (chunkBox->intersects(m_locationBox)) {
+ if (!m_locationBox.has_value()) updateLocationBox();
+ if (chunkBox->intersects(*m_locationBox)) {
m_locationBox->y1 =
std::min((double)Level::maxBuildHeight, m_locationBox->y1);
@@ -218,7 +218,7 @@ void ApplySchematicRuleDefinition::processSchematicLighting(AABB* chunkBox,
#endif
PIXBeginNamedEvent(0, "Patching lighting");
m_totalBlocksChangedLighting += m_schematic->applyLighting(
- chunk, chunkBox, m_locationBox, m_rotation);
+ chunk, chunkBox, &*m_locationBox, m_rotation);
PIXEndNamedEvent();
// TODO This does not take into account things that go outside the
@@ -238,12 +238,12 @@ void ApplySchematicRuleDefinition::processSchematicLighting(AABB* chunkBox,
bool ApplySchematicRuleDefinition::checkIntersects(int x0, int y0, int z0,
int x1, int y1, int z1) {
- if (m_locationBox == NULL) updateLocationBox();
+ if (!m_locationBox.has_value()) updateLocationBox();
return m_locationBox->intersects(x0, y0, z0, x1, y1, z1);
}
int ApplySchematicRuleDefinition::getMinY() {
- if (m_locationBox == NULL) updateLocationBox();
+ if (!m_locationBox.has_value()) updateLocationBox();
return m_locationBox->y0;
}
@@ -251,4 +251,4 @@ void ApplySchematicRuleDefinition::reset() {
m_totalBlocksChanged = 0;
m_totalBlocksChangedLighting = 0;
m_completed = false;
-}
\ No newline at end of file
+}
diff --git a/Minecraft.Client/Platform/Common/GameRules/ApplySchematicRuleDefinition.h b/Minecraft.Client/Platform/Common/GameRules/ApplySchematicRuleDefinition.h
index e3c5b425f..1f5a5cbc1 100644
--- a/Minecraft.Client/Platform/Common/GameRules/ApplySchematicRuleDefinition.h
+++ b/Minecraft.Client/Platform/Common/GameRules/ApplySchematicRuleDefinition.h
@@ -1,6 +1,8 @@
#pragma once
+#include
#include "GameRuleDefinition.h"
#include "ConsoleSchematicFile.h"
+#include "../../Minecraft.World/Util/AABB.h"
class AABB;
class Vec3;
@@ -13,8 +15,8 @@ private:
LevelGenerationOptions* m_levelGenOptions;
std::wstring m_schematicName;
ConsoleSchematicFile* m_schematic;
- Vec3* m_location;
- AABB* m_locationBox;
+ Vec3 m_location;
+ std::optional m_locationBox;
ConsoleSchematicFile::ESchematicRotation m_rotation;
int m_dimension;
@@ -51,4 +53,4 @@ public:
* Reset any state to how it should be before a new game.
*/
void reset();
-};
\ No newline at end of file
+};
diff --git a/Minecraft.Client/Platform/Common/GameRules/ConsoleSchematicFile.cpp b/Minecraft.Client/Platform/Common/GameRules/ConsoleSchematicFile.cpp
index 04d7015c9..3ba460f65 100644
--- a/Minecraft.Client/Platform/Common/GameRules/ConsoleSchematicFile.cpp
+++ b/Minecraft.Client/Platform/Common/GameRules/ConsoleSchematicFile.cpp
@@ -155,8 +155,8 @@ void ConsoleSchematicFile::load(DataInputStream* dis) {
// app.DebugPrintf(1,"Loaded entity type %d at
// (%f,%f,%f)\n",(int)type,x,y,z);
#endif
- m_entities.push_back(std::pair(
- Vec3::newPermanent(x, y, z), (CompoundTag*)eTag->copy()));
+ m_entities.push_back(std::pair(
+ Vec3(x, y, z), (CompoundTag*)eTag->copy()));
}
}
delete tag;
@@ -463,7 +463,7 @@ void ConsoleSchematicFile::applyTileEntities(LevelChunk* chunk, AABB* chunkBox,
schematicCoordToChunkCoord(destinationBox, te->x, te->z, rot, targetX,
targetZ);
- Vec3* pos = Vec3::newTemp(targetX, targetY, targetZ);
+ Vec3 pos(targetX, targetY, targetZ);
if (chunkBox->containsIncludingLowerBound(pos)) {
std::shared_ptr teCopy = chunk->getTileEntity(
(int)targetX & 15, (int)targetY & 15, (int)targetZ & 15);
@@ -500,18 +500,17 @@ void ConsoleSchematicFile::applyTileEntities(LevelChunk* chunk, AABB* chunkBox,
}
}
for (AUTO_VAR(it, m_entities.begin()); it != m_entities.end();) {
- Vec3* source = it->first;
+ Vec3 source = it->first;
- double targetX = source->x;
- double targetY = source->y + destinationBox->y0;
- double targetZ = source->z;
- schematicCoordToChunkCoord(destinationBox, source->x, source->z, rot,
+ double targetX = source.x;
+ double targetY = source.y + destinationBox->y0;
+ double targetZ = source.z;
+ schematicCoordToChunkCoord(destinationBox, source.x, source.z, rot,
targetX, targetZ);
// Add 0.01 as the AABB::contains function returns false if a value is
// <= the lower bound
- Vec3* pos =
- Vec3::newTemp(targetX + 0.01, targetY + 0.01, targetZ + 0.01);
+ Vec3 pos(targetX + 0.01, targetY + 0.01, targetZ + 0.01);
if (!chunkBox->containsIncludingLowerBound(pos)) {
++it;
continue;
@@ -734,9 +733,9 @@ void ConsoleSchematicFile::generateSchematicFile(
}
tag.put(L"TileEntities", tileEntitiesTag);
- AABB* bb = AABB::newTemp(xStart, yStart, zStart, xEnd, yEnd, zEnd);
+ AABB bb(xStart, yStart, zStart, xEnd, yEnd, zEnd);
std::vector >* entities =
- level->getEntities(nullptr, bb);
+ level->getEntities(nullptr, &bb);
ListTag* entitiesTag = new ListTag(L"entities");
for (AUTO_VAR(it, entities->begin()); it != entities->end(); ++it) {
@@ -800,8 +799,8 @@ void ConsoleSchematicFile::getBlocksAndData(LevelChunk* chunk, byteArray* data,
// if (xs * ys * zs == LevelChunk::BLOCKS_LENGTH)
//{
// byteArray blockData = byteArray(data->data + blocksP,
- //Level::CHUNK_TILE_COUNT); chunk->getBlockData(blockData); blocksP +=
- //blockData.length;
+ // Level::CHUNK_TILE_COUNT); chunk->getBlockData(blockData);
+ // blocksP += blockData.length;
// byteArray dataData = byteArray(data->data + dataP, 16384);
// chunk->getBlockLightData(dataData);
diff --git a/Minecraft.Client/Platform/Common/GameRules/ConsoleSchematicFile.h b/Minecraft.Client/Platform/Common/GameRules/ConsoleSchematicFile.h
index 1990328a8..adf862a0b 100644
--- a/Minecraft.Client/Platform/Common/GameRules/ConsoleSchematicFile.h
+++ b/Minecraft.Client/Platform/Common/GameRules/ConsoleSchematicFile.h
@@ -54,7 +54,7 @@ public:
private:
int m_xSize, m_ySize, m_zSize;
std::vector > m_tileEntities;
- std::vector > m_entities;
+ std::vector > m_entities;
public:
byteArray m_data;
diff --git a/Minecraft.Client/Platform/Common/GameRules/LevelGenerationOptions.cpp b/Minecraft.Client/Platform/Common/GameRules/LevelGenerationOptions.cpp
index 8e2260a11..5e65c983f 100644
--- a/Minecraft.Client/Platform/Common/GameRules/LevelGenerationOptions.cpp
+++ b/Minecraft.Client/Platform/Common/GameRules/LevelGenerationOptions.cpp
@@ -253,13 +253,12 @@ void LevelGenerationOptions::addAttribute(const std::wstring& attributeName,
void LevelGenerationOptions::processSchematics(LevelChunk* chunk) {
PIXBeginNamedEvent(0, "Processing schematics for chunk (%d,%d)", chunk->x,
chunk->z);
- AABB* chunkBox =
- AABB::newTemp(chunk->x * 16, 0, chunk->z * 16, chunk->x * 16 + 16,
- Level::maxBuildHeight, chunk->z * 16 + 16);
+ AABB chunkBox(chunk->x * 16, 0, chunk->z * 16, chunk->x * 16 + 16,
+ Level::maxBuildHeight, chunk->z * 16 + 16);
for (AUTO_VAR(it, m_schematicRules.begin()); it != m_schematicRules.end();
++it) {
ApplySchematicRuleDefinition* rule = *it;
- rule->processSchematic(chunkBox, chunk);
+ rule->processSchematic(&chunkBox, chunk);
}
int cx = (chunk->x << 4);
@@ -282,13 +281,12 @@ void LevelGenerationOptions::processSchematics(LevelChunk* chunk) {
void LevelGenerationOptions::processSchematicsLighting(LevelChunk* chunk) {
PIXBeginNamedEvent(0, "Processing schematics (lighting) for chunk (%d,%d)",
chunk->x, chunk->z);
- AABB* chunkBox =
- AABB::newTemp(chunk->x * 16, 0, chunk->z * 16, chunk->x * 16 + 16,
- Level::maxBuildHeight, chunk->z * 16 + 16);
+ AABB chunkBox(chunk->x * 16, 0, chunk->z * 16, chunk->x * 16 + 16,
+ Level::maxBuildHeight, chunk->z * 16 + 16);
for (AUTO_VAR(it, m_schematicRules.begin()); it != m_schematicRules.end();
++it) {
ApplySchematicRuleDefinition* rule = *it;
- rule->processSchematicLighting(chunkBox, chunk);
+ rule->processSchematicLighting(&chunkBox, chunk);
}
PIXEndNamedEvent();
}
diff --git a/Minecraft.Client/Platform/Common/GameRules/NamedAreaRuleDefinition.cpp b/Minecraft.Client/Platform/Common/GameRules/NamedAreaRuleDefinition.cpp
index b09982ae9..da0524ff7 100644
--- a/Minecraft.Client/Platform/Common/GameRules/NamedAreaRuleDefinition.cpp
+++ b/Minecraft.Client/Platform/Common/GameRules/NamedAreaRuleDefinition.cpp
@@ -5,11 +5,9 @@
NamedAreaRuleDefinition::NamedAreaRuleDefinition() {
m_name = L"";
- m_area = AABB::newPermanent(0, 0, 0, 0, 0, 0);
+ m_area = AABB(0, 0, 0, 0, 0, 0);
}
-NamedAreaRuleDefinition::~NamedAreaRuleDefinition() { delete m_area; }
-
void NamedAreaRuleDefinition::writeAttributes(DataOutputStream* dos,
unsigned int numAttributes) {
GameRuleDefinition::writeAttributes(dos, numAttributes + 7);
@@ -18,18 +16,18 @@ void NamedAreaRuleDefinition::writeAttributes(DataOutputStream* dos,
dos->writeUTF(m_name);
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_x0);
- dos->writeUTF(_toString(m_area->x0));
+ dos->writeUTF(_toString(m_area.x0));
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_y0);
- dos->writeUTF(_toString(m_area->y0));
+ dos->writeUTF(_toString(m_area.y0));
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_z0);
- dos->writeUTF(_toString(m_area->z0));
+ dos->writeUTF(_toString(m_area.z0));
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_x1);
- dos->writeUTF(_toString(m_area->x1));
+ dos->writeUTF(_toString(m_area.x1));
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_y1);
- dos->writeUTF(_toString(m_area->y1));
+ dos->writeUTF(_toString(m_area.y1));
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_z1);
- dos->writeUTF(_toString(m_area->z1));
+ dos->writeUTF(_toString(m_area.z1));
}
void NamedAreaRuleDefinition::addAttribute(const std::wstring& attributeName,
@@ -41,31 +39,31 @@ void NamedAreaRuleDefinition::addAttribute(const std::wstring& attributeName,
m_name.c_str());
#endif
} else if (attributeName.compare(L"x0") == 0) {
- m_area->x0 = _fromString(attributeValue);
+ m_area.x0 = _fromString(attributeValue);
app.DebugPrintf("NamedAreaRuleDefinition: Adding parameter x0=%f\n",
- m_area->x0);
+ m_area.x0);
} else if (attributeName.compare(L"y0") == 0) {
- m_area->y0 = _fromString(attributeValue);
- if (m_area->y0 < 0) m_area->y0 = 0;
+ m_area.y0 = _fromString(attributeValue);
+ if (m_area.y0 < 0) m_area.y0 = 0;
app.DebugPrintf("NamedAreaRuleDefinition: Adding parameter y0=%f\n",
- m_area->y0);
+ m_area.y0);
} else if (attributeName.compare(L"z0") == 0) {
- m_area->z0 = _fromString(attributeValue);
+ m_area.z0 = _fromString(attributeValue);
app.DebugPrintf("NamedAreaRuleDefinition: Adding parameter z0=%f\n",
- m_area->z0);
+ m_area.z0);
} else if (attributeName.compare(L"x1") == 0) {
- m_area->x1 = _fromString(attributeValue);
+ m_area.x1 = _fromString(attributeValue);
app.DebugPrintf("NamedAreaRuleDefinition: Adding parameter x1=%f\n",
- m_area->x1);
+ m_area.x1);
} else if (attributeName.compare(L"y1") == 0) {
- m_area->y1 = _fromString(attributeValue);
- if (m_area->y1 < 0) m_area->y1 = 0;
+ m_area.y1 = _fromString(attributeValue);
+ if (m_area.y1 < 0) m_area.y1 = 0;
app.DebugPrintf("NamedAreaRuleDefinition: Adding parameter y1=%f\n",
- m_area->y1);
+ m_area.y1);
} else if (attributeName.compare(L"z1") == 0) {
- m_area->z1 = _fromString(attributeValue);
+ m_area.z1 = _fromString(attributeValue);
app.DebugPrintf("NamedAreaRuleDefinition: Adding parameter z1=%f\n",
- m_area->z1);
+ m_area.z1);
} else {
GameRuleDefinition::addAttribute(attributeName, attributeValue);
}
diff --git a/Minecraft.Client/Platform/Common/GameRules/NamedAreaRuleDefinition.h b/Minecraft.Client/Platform/Common/GameRules/NamedAreaRuleDefinition.h
index 93f8a0c47..81be6c4bc 100644
--- a/Minecraft.Client/Platform/Common/GameRules/NamedAreaRuleDefinition.h
+++ b/Minecraft.Client/Platform/Common/GameRules/NamedAreaRuleDefinition.h
@@ -1,15 +1,15 @@
#pragma once
#include "GameRuleDefinition.h"
+#include "../../Minecraft.World/Util/AABB.h"
class NamedAreaRuleDefinition : public GameRuleDefinition {
private:
std::wstring m_name;
- AABB* m_area;
+ AABB m_area;
public:
NamedAreaRuleDefinition();
- ~NamedAreaRuleDefinition();
virtual void writeAttributes(DataOutputStream* dos,
unsigned int numAttributes);
@@ -21,6 +21,6 @@ public:
virtual void addAttribute(const std::wstring& attributeName,
const std::wstring& attributeValue);
- AABB* getArea() { return m_area; }
+ AABB* getArea() { return &m_area; }
std::wstring getName() { return m_name; }
};
diff --git a/Minecraft.Client/Platform/Common/Leaderboards/SonyLeaderboardManager.cpp b/Minecraft.Client/Platform/Common/Leaderboards/SonyLeaderboardManager.cpp
index 88a4077d9..8153ac650 100644
--- a/Minecraft.Client/Platform/Common/Leaderboards/SonyLeaderboardManager.cpp
+++ b/Minecraft.Client/Platform/Common/Leaderboards/SonyLeaderboardManager.cpp
@@ -1,5 +1,7 @@
#include "../../stdafx.h"
+#include
+#include
#include
#include
// #include
@@ -54,7 +56,7 @@ SonyLeaderboardManager::~SonyLeaderboardManager() {
// 4J-JEV: Wait for thread to stop and hope it doesn't take too long.
long long startShutdown = System::currentTimeMillis();
while (m_threadScoreboard->isRunning()) {
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
assert((System::currentTimeMillis() - startShutdown) < 16);
}
@@ -87,7 +89,8 @@ int SonyLeaderboardManager::scoreboardThreadEntry(LPVOID lpParam) {
}
if ((!needsWriting) && (self->m_eStatsState != eStatsState_Getting)) {
- Sleep(50); // 4J-JEV: When we're not reading or writing.
+ std::this_thread::sleep_for(std::chrono::milliseconds(
+ 50)); // 4J-JEV: When we're not reading or writing.
}
} while ((self->m_running || self->m_eStatsState == eStatsState_Getting ||
diff --git a/Minecraft.Client/Platform/Common/Network/GameNetworkManager.cpp b/Minecraft.Client/Platform/Common/Network/GameNetworkManager.cpp
index a26addc80..06bf5ffec 100644
--- a/Minecraft.Client/Platform/Common/Network/GameNetworkManager.cpp
+++ b/Minecraft.Client/Platform/Common/Network/GameNetworkManager.cpp
@@ -1,3 +1,6 @@
+#include
+#include
+
#include "../../Minecraft.World/Platform/stdafx.h"
#include "../../Minecraft.World/Util/StringHelpers.h"
#include "../../Minecraft.World/Util/AABB.h"
@@ -344,7 +347,7 @@ bool CGameNetworkManager::StartNetworkGame(Minecraft* minecraft,
// message I could find
pMinecraft->progressRenderer->progressStagePercentage(
g_NetworkManager.GetJoiningReadyPercentage());
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
if (changedMessage) {
pMinecraft->progressRenderer->progressStagePercentage(100);
@@ -367,7 +370,7 @@ bool CGameNetworkManager::StartNetworkGame(Minecraft* minecraft,
// this
while (!app.DLCInstallProcessCompleted() && app.DLCInstallPending() &&
!g_NetworkManager.IsLeavingGame()) {
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
if (g_NetworkManager.IsLeavingGame()) {
MinecraftServer::HaltServer();
@@ -448,7 +451,7 @@ bool CGameNetworkManager::StartNetworkGame(Minecraft* minecraft,
// 4J Stu - We were ticking this way too fast which could cause the
// connection to time out The connections should tick at 20 per second
- Sleep(50);
+ std::this_thread::sleep_for(std::chrono::milliseconds(50));
} while ((IsInSession() && !connection->isStarted() &&
!connection->isClosed() && !g_NetworkManager.IsLeavingGame()) ||
tPack->isLoadingData() ||
@@ -548,7 +551,7 @@ bool CGameNetworkManager::StartNetworkGame(Minecraft* minecraft,
// 4J Stu - We were ticking this way too fast which could cause
// the connection to time out The connections should tick at 20
// per second
- Sleep(50);
+ std::this_thread::sleep_for(std::chrono::milliseconds(50));
app.DebugPrintf("<***> %d %d %d %d %d\n", IsInSession(),
!connection->isStarted(),
!connection->isClosed(),
@@ -947,8 +950,6 @@ bool CGameNetworkManager::IsNetworkThreadRunning() {
int CGameNetworkManager::RunNetworkGameThreadProc(void* lpParameter) {
// Share AABB & Vec3 pools with default (main thread) - should be ok as long
// as we don't tick the main thread whilst this thread is running
- AABB::UseDefaultThreadStorage();
- Vec3::UseDefaultThreadStorage();
Compression::UseDefaultThreadStorage();
Tile::CreateNewThreadStorage();
@@ -960,7 +961,7 @@ int CGameNetworkManager::RunNetworkGameThreadProc(void* lpParameter) {
while (tPack->isLoadingData() ||
(Minecraft::GetInstance()->skins->needsUIUpdate() ||
ui.IsReloadingSkin())) {
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
ui.CleanUpSkinReload();
if (app.GetDisconnectReason() == DisconnectPacket::eDisconnect_None) {
@@ -978,7 +979,7 @@ int CGameNetworkManager::RunNetworkGameThreadProc(void* lpParameter) {
#ifdef __PSVITA__
// 4J-JEV: Wait for the loading/saving to finish.
while (StorageManager.GetSaveState() != C4JStorage::ESaveGame_Idle)
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
#endif
Tile::ReleaseThreadStorage();
@@ -1000,15 +1001,13 @@ int CGameNetworkManager::ServerThreadProc(void* lpParameter) {
param->texturePackId)) {
while ((Minecraft::GetInstance()->skins->needsUIUpdate() ||
ui.IsReloadingSkin())) {
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
param->levelGen->loadBaseSaveData();
}
}
SetThreadName(-1, "Minecraft Server thread");
- AABB::CreateNewThreadStorage();
- Vec3::CreateNewThreadStorage();
Compression::UseDefaultThreadStorage();
OldChunkStorage::UseDefaultThreadStorage();
Entity::useSmallIds();
@@ -1021,8 +1020,6 @@ int CGameNetworkManager::ServerThreadProc(void* lpParameter) {
lpParameter); // saveData, app.GetGameHostOption(eGameHostOption_All));
Tile::ReleaseThreadStorage();
- AABB::ReleaseThreadStorage();
- Vec3::ReleaseThreadStorage();
Level::destroyLightingCache();
if (lpParameter != NULL) delete (NetworkGameInitData*)lpParameter;
@@ -1033,15 +1030,13 @@ int CGameNetworkManager::ServerThreadProc(void* lpParameter) {
int CGameNetworkManager::ExitAndJoinFromInviteThreadProc(void* lpParam) {
// Share AABB & Vec3 pools with default (main thread) - should be ok as long
// as we don't tick the main thread whilst this thread is running
- AABB::UseDefaultThreadStorage();
- Vec3::UseDefaultThreadStorage();
Compression::UseDefaultThreadStorage();
// app.SetGameStarted(false);
UIScene_PauseMenu::_ExitWorld(NULL);
while (g_NetworkManager.IsInSession()) {
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
// Xbox should always be online when receiving invites - on PS3 we need to
@@ -1186,8 +1181,6 @@ void CGameNetworkManager::_LeaveGame() {
int CGameNetworkManager::ChangeSessionTypeThreadProc(void* lpParam) {
// Share AABB & Vec3 pools with default (main thread) - should be ok as long
// as we don't tick the main thread whilst this thread is running
- AABB::UseDefaultThreadStorage();
- Vec3::UseDefaultThreadStorage();
Compression::UseDefaultThreadStorage();
Minecraft* pMinecraft = Minecraft::GetInstance();
@@ -1247,7 +1240,7 @@ int CGameNetworkManager::ChangeSessionTypeThreadProc(void* lpParam) {
while (app.GetXuiServerAction(ProfileManager.GetPrimaryPad()) !=
eXuiServerAction_Idle &&
!MinecraftServer::serverHalted()) {
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
app.SetXuiServerAction(ProfileManager.GetPrimaryPad(),
eXuiServerAction_PauseServer, (void*)TRUE);
@@ -1287,7 +1280,7 @@ int CGameNetworkManager::ChangeSessionTypeThreadProc(void* lpParam) {
// if we don't do this then there's an async thread running doing this,
// which could then finish at any inappropriate time later
while (s_pPlatformNetworkManager->IsAddingPlayer()) {
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
#endif
@@ -1318,7 +1311,7 @@ int CGameNetworkManager::ChangeSessionTypeThreadProc(void* lpParam) {
// wait for the current session to end
while (g_NetworkManager.IsInSession()) {
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
// Reset this flag as the we don't need to know that we only lost the room
@@ -1348,7 +1341,7 @@ int CGameNetworkManager::ChangeSessionTypeThreadProc(void* lpParam) {
// Wait for all the local players to rejoin the session
while (g_NetworkManager.GetPlayerCount() < numLocalPlayers) {
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
// Restore the network player of all the server players that are local
@@ -1398,7 +1391,7 @@ int CGameNetworkManager::ChangeSessionTypeThreadProc(void* lpParam) {
// Make sure that we have transitioned through any joining/creating stages
// so we're actually ready to set to play
while (!s_pPlatformNetworkManager->IsReadyToPlayOrIdle()) {
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
#endif
@@ -1407,7 +1400,7 @@ int CGameNetworkManager::ChangeSessionTypeThreadProc(void* lpParam) {
#ifndef _XBOX
// Wait until the message box has been closed
while (ui.IsSceneInStack(XUSER_INDEX_ANY, eUIScene_MessageBox)) {
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
#endif
@@ -1957,7 +1950,7 @@ void CGameNetworkManager::HandleInviteWhenInMenus(
#if 0
while( waitHere )
{
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
#endif
diff --git a/Minecraft.Client/Platform/Common/Network/Sony/SonyCommerce.cpp b/Minecraft.Client/Platform/Common/Network/Sony/SonyCommerce.cpp
index 3ce5ec6e0..d6bcd9b2f 100644
--- a/Minecraft.Client/Platform/Common/Network/Sony/SonyCommerce.cpp
+++ b/Minecraft.Client/Platform/Common/Network/Sony/SonyCommerce.cpp
@@ -1,8 +1,11 @@
+#include
+#include
+#include
+
#include "../../../Minecraft.World/Platform/stdafx.h"
#include "SonyCommerce.h"
#include "../../../../Platform/PS3/PS3Extras/ShutdownManager.h"
-#include
bool SonyCommerce::m_bCommerceInitialised = false;
SceNpCommerce2SessionInfo SonyCommerce::m_sessionInfo;
@@ -122,7 +125,8 @@ int SonyCommerce::TickLoop(void* lpParam) {
ShutdownManager::ShouldRun(ShutdownManager::eCommerceThread)) {
processEvent();
processMessage();
- Sleep(16); // sleep for a frame
+ std::this_thread::sleep_for(
+ std::chrono::milliseconds(16)); // sleep for a frame
}
ShutdownManager::HasFinished(ShutdownManager::eCommerceThread);
diff --git a/Minecraft.Client/Platform/Common/Network/Sony/SonyRemoteStorage.cpp b/Minecraft.Client/Platform/Common/Network/Sony/SonyRemoteStorage.cpp
index 132c17034..817763b78 100644
--- a/Minecraft.Client/Platform/Common/Network/Sony/SonyRemoteStorage.cpp
+++ b/Minecraft.Client/Platform/Common/Network/Sony/SonyRemoteStorage.cpp
@@ -1,4 +1,5 @@
-
+#include
+#include
#include "../../../Minecraft.World/Platform/stdafx.h"
#include "SonyRemoteStorage.h"
@@ -286,7 +287,7 @@ bool SonyRemoteStorage::shutdown() {
void SonyRemoteStorage::waitForStorageManagerIdle() {
C4JStorage::ESaveGameState storageState = StorageManager.GetSaveState();
while (storageState != C4JStorage::ESaveGame_Idle) {
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
// app.DebugPrintf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// >>>>> storageState = %d\n", storageState);
storageState = StorageManager.GetSaveState();
diff --git a/Minecraft.Client/Platform/Common/Tutorial/AreaConstraint.cpp b/Minecraft.Client/Platform/Common/Tutorial/AreaConstraint.cpp
index ddd57b539..2cf4ab5ee 100644
--- a/Minecraft.Client/Platform/Common/Tutorial/AreaConstraint.cpp
+++ b/Minecraft.Client/Platform/Common/Tutorial/AreaConstraint.cpp
@@ -10,23 +10,19 @@ AreaConstraint::AreaConstraint(int descriptionId, double x0, double y0,
bool contains /*= true*/,
bool restrictsMovement /*=true*/)
: TutorialConstraint(descriptionId) {
- messageArea =
- AABB::newPermanent(x0 + 2, y0 + 2, z0 + 2, x1 - 2, y1 - 2, z1 - 2);
- movementArea = AABB::newPermanent(x0, y0, z0, x1, y1, z1);
+ messageArea = AABB(x0 + 2, y0 + 2, z0 + 2, x1 - 2, y1 - 2, z1 - 2);
+ movementArea = AABB(x0, y0, z0, x1, y1, z1);
this->contains = contains;
m_restrictsMovement = restrictsMovement;
}
-AreaConstraint::~AreaConstraint() {
- delete messageArea;
- delete movementArea;
-}
-
bool AreaConstraint::isConstraintSatisfied(int iPad) {
Minecraft* minecraft = Minecraft::GetInstance();
- return messageArea->contains(minecraft->localplayers[iPad]->getPos(1)) ==
- contains;
+
+ // TODO: check if this can be elided
+ Vec3 ipad_player = minecraft->localplayers[iPad]->getPos(1);
+ return messageArea.contains(ipad_player) == contains;
}
bool AreaConstraint::isConstraintRestrictive(int iPad) {
@@ -37,15 +33,15 @@ bool AreaConstraint::canMoveToPosition(double xo, double yo, double zo,
double xt, double yt, double zt) {
if (!m_restrictsMovement) return true;
- Vec3* targetPos = Vec3::newTemp(xt, yt, zt);
+ Vec3 targetPos(xt, yt, zt);
Minecraft* minecraft = Minecraft::GetInstance();
- if (movementArea->contains(targetPos) == contains) {
+ if (movementArea.contains(targetPos) == contains) {
return true;
}
- Vec3* origPos = Vec3::newTemp(xo, yo, zo);
+ Vec3 origPos(xo, yo, zo);
- double currDist = origPos->distanceTo(movementArea);
- double targetDist = targetPos->distanceTo(movementArea);
+ double currDist = origPos.distanceTo(&movementArea);
+ double targetDist = targetPos.distanceTo(&movementArea);
return targetDist < currDist;
}
diff --git a/Minecraft.Client/Platform/Common/Tutorial/AreaConstraint.h b/Minecraft.Client/Platform/Common/Tutorial/AreaConstraint.h
index 721ab6eb1..05265b73f 100644
--- a/Minecraft.Client/Platform/Common/Tutorial/AreaConstraint.h
+++ b/Minecraft.Client/Platform/Common/Tutorial/AreaConstraint.h
@@ -6,8 +6,8 @@ class AABB;
class AreaConstraint : public TutorialConstraint {
private:
- AABB* movementArea;
- AABB* messageArea;
+ AABB movementArea;
+ AABB messageArea;
bool contains; // If true we must stay in this area, if false must stay out
// of this area
bool m_restrictsMovement;
@@ -18,10 +18,9 @@ public:
AreaConstraint(int descriptionId, double x0, double y0, double z0,
double x1, double y1, double z1, bool contains = true,
bool restrictsMovement = true);
- ~AreaConstraint();
virtual bool isConstraintSatisfied(int iPad);
virtual bool isConstraintRestrictive(int iPad);
virtual bool canMoveToPosition(double xo, double yo, double zo, double xt,
double yt, double zt);
-};
\ No newline at end of file
+};
diff --git a/Minecraft.Client/Platform/Common/Tutorial/AreaHint.cpp b/Minecraft.Client/Platform/Common/Tutorial/AreaHint.cpp
index 729b361d0..b3ebdf65a 100644
--- a/Minecraft.Client/Platform/Common/Tutorial/AreaHint.cpp
+++ b/Minecraft.Client/Platform/Common/Tutorial/AreaHint.cpp
@@ -12,7 +12,7 @@ AreaHint::AreaHint(eTutorial_Hint id, Tutorial* tutorial,
double x1, double y1, double z1, bool allowFade /*= false*/,
bool contains /*= true*/)
: TutorialHint(id, tutorial, descriptionId, e_Hint_Area, allowFade) {
- area = AABB::newPermanent(x0, y0, z0, x1, y1, z1);
+ area = AABB(x0, y0, z0, x1, y1, z1);
this->contains = contains;
@@ -20,14 +20,13 @@ AreaHint::AreaHint(eTutorial_Hint id, Tutorial* tutorial,
m_completeState = completeState;
}
-AreaHint::~AreaHint() { delete area; }
-
int AreaHint::tick() {
Minecraft* minecraft = Minecraft::GetInstance();
+ Vec3 player_pos = minecraft->player->getPos(1);
+
if ((m_displayState == e_Tutorial_State_Any ||
m_tutorial->getCurrentState() == m_displayState) &&
- m_hintNeeded &&
- area->contains(minecraft->player->getPos(1)) == contains) {
+ m_hintNeeded && area.contains(player_pos) == contains) {
if (m_completeState == e_Tutorial_State_None) {
m_hintNeeded = false;
} else if (m_tutorial->isStateCompleted(m_completeState)) {
diff --git a/Minecraft.Client/Platform/Common/Tutorial/AreaHint.h b/Minecraft.Client/Platform/Common/Tutorial/AreaHint.h
index 71d8219f2..68ec72ba5 100644
--- a/Minecraft.Client/Platform/Common/Tutorial/AreaHint.h
+++ b/Minecraft.Client/Platform/Common/Tutorial/AreaHint.h
@@ -6,7 +6,7 @@ class AABB;
class AreaHint : public TutorialHint {
private:
- AABB* area;
+ AABB area;
bool contains; // If true we must stay in this area, if false must stay out
// of this area
@@ -21,7 +21,6 @@ public:
eTutorial_State displayState, eTutorial_State completeState,
int descriptionId, double x0, double y0, double z0, double x1,
double y1, double z1, bool allowFade = true, bool contains = true);
- ~AreaHint();
virtual int tick();
-};
\ No newline at end of file
+};
diff --git a/Minecraft.Client/Platform/Common/Tutorial/ChangeStateConstraint.cpp b/Minecraft.Client/Platform/Common/Tutorial/ChangeStateConstraint.cpp
index 9d8d75e1d..4296a04bd 100644
--- a/Minecraft.Client/Platform/Common/Tutorial/ChangeStateConstraint.cpp
+++ b/Minecraft.Client/Platform/Common/Tutorial/ChangeStateConstraint.cpp
@@ -16,7 +16,7 @@ ChangeStateConstraint::ChangeStateConstraint(
bool contains /*= true*/, bool changeGameMode /*= false*/,
GameType* targetGameMode /*= 0*/)
: TutorialConstraint(-1) {
- movementArea = AABB::newPermanent(x0, y0, z0, x1, y1, z1);
+ movementArea = AABB(x0, y0, z0, x1, y1, z1);
this->contains = contains;
@@ -40,7 +40,6 @@ ChangeStateConstraint::ChangeStateConstraint(
}
ChangeStateConstraint::~ChangeStateConstraint() {
- delete movementArea;
if (m_sourceStatesCount > 0) delete[] m_sourceStates;
}
@@ -85,9 +84,11 @@ void ChangeStateConstraint::tick(int iPad) {
break;
}
}
+
+ // TODO: check if this can be elided
+ Vec3 ipad_player = minecraft->localplayers[iPad]->getPos(1);
if (!m_bHasChanged && inASourceState &&
- movementArea->contains(minecraft->localplayers[iPad]->getPos(1)) ==
- contains) {
+ movementArea.contains(ipad_player) == contains) {
m_bHasChanged = true;
m_changedFromState = m_tutorial->getCurrentState();
m_tutorial->changeTutorialState(m_targetState);
@@ -125,8 +126,7 @@ void ChangeStateConstraint::tick(int iPad) {
}
}
} else if (m_bHasChanged &&
- movementArea->contains(
- minecraft->localplayers[iPad]->getPos(1)) != contains) {
+ movementArea.contains(ipad_player) != contains) {
m_bHasChanged = false;
m_tutorial->changeTutorialState(m_changedFromState);
diff --git a/Minecraft.Client/Platform/Common/Tutorial/ChangeStateConstraint.h b/Minecraft.Client/Platform/Common/Tutorial/ChangeStateConstraint.h
index 5ec51d437..44c9b410b 100644
--- a/Minecraft.Client/Platform/Common/Tutorial/ChangeStateConstraint.h
+++ b/Minecraft.Client/Platform/Common/Tutorial/ChangeStateConstraint.h
@@ -11,7 +11,7 @@ class GameType;
class ChangeStateConstraint : public TutorialConstraint {
private:
- AABB* movementArea;
+ AABB movementArea;
bool contains; // If true we must stay in this area, if false must stay out
// of this area
bool m_changeGameMode;
diff --git a/Minecraft.Client/Platform/Common/UI/IUIScene_CreativeMenu.cpp b/Minecraft.Client/Platform/Common/UI/IUIScene_CreativeMenu.cpp
index 28a3773b4..2f609340b 100644
--- a/Minecraft.Client/Platform/Common/UI/IUIScene_CreativeMenu.cpp
+++ b/Minecraft.Client/Platform/Common/UI/IUIScene_CreativeMenu.cpp
@@ -469,6 +469,11 @@ void IUIScene_CreativeMenu::staticCtor() {
ITEM(Item::carrotGolden_Id)
ITEM(Item::pumpkinPie_Id)
+// 4jcraft: Search
+#ifdef ENABLE_JAVA_GUIS
+ DEF(eCreativeInventory_Search)
+#endif
+
// Tools, Armour and Weapons (Complete)
DEF(eCreativeInventory_ToolsArmourWeapons)
ITEM(Item::compass_Id)
@@ -856,6 +861,13 @@ void IUIScene_CreativeMenu::staticCtor() {
specs[eCreativeInventoryTab_Food] =
new TabSpec(L"Food", IDS_GROUPNAME_FOOD, 1, foodGroup);
+// 4jcraft
+#ifdef ENABLE_JAVA_GUIS
+ ECreative_Inventory_Groups searchGroup[] = {eCreativeInventory_Search};
+ specs[eCreativeInventoryTab_Search] =
+ new TabSpec(L"Search Items", IDS_GROUPNAME_SEARCH, 1, searchGroup);
+#endif
+
ECreative_Inventory_Groups toolsGroup[] = {
eCreativeInventory_ToolsArmourWeapons};
specs[eCreativeInventoryTab_ToolsWeaponsArmor] =
@@ -898,7 +910,7 @@ IUIScene_CreativeMenu::IUIScene_CreativeMenu() {
m_bCarryingCreativeItem = false;
m_creativeSlotX = m_creativeSlotY = m_inventorySlotX = m_inventorySlotY = 0;
- // 4J JEV - Settup Tabs
+ // 4J JEV - Setup Tabs
for (int i = 0; i < eCreativeInventoryTab_COUNT; i++) {
m_tabDynamicPos[i] = 0;
m_tabPage[i] = 0;
@@ -1523,4 +1535,4 @@ void IUIScene_CreativeMenu::BuildFirework(
}
list->push_back(firework);
-}
+}
\ No newline at end of file
diff --git a/Minecraft.Client/Platform/Common/UI/IUIScene_CreativeMenu.h b/Minecraft.Client/Platform/Common/UI/IUIScene_CreativeMenu.h
index 02967ac5a..fc2cb071e 100644
--- a/Minecraft.Client/Platform/Common/UI/IUIScene_CreativeMenu.h
+++ b/Minecraft.Client/Platform/Common/UI/IUIScene_CreativeMenu.h
@@ -7,20 +7,24 @@ class SimpleContainer;
class IUIScene_CreativeMenu : public virtual IUIScene_AbstractContainerMenu {
public:
- // 4J Stu - These map directly to the tabs seenon the screen
+ // 4J Stu - These map directly to the tabs seen on the screen
enum ECreativeInventoryTabs {
eCreativeInventoryTab_BuildingBlocks = 0,
eCreativeInventoryTab_Decorations,
eCreativeInventoryTab_RedstoneAndTransport,
eCreativeInventoryTab_Materials,
eCreativeInventoryTab_Food,
+// 4jcraft: java search tab
+#ifdef ENABLE_JAVA_GUIS
+ eCreativeInventoryTab_Search,
+#endif
eCreativeInventoryTab_ToolsWeaponsArmor,
eCreativeInventoryTab_Brewing,
eCreativeInventoryTab_Misc,
eCreativeInventoryTab_COUNT,
};
- // 4J Stu - These are logical groupings of items, and be be combined for
+ // 4J Stu - These are logical groupings of items, and are combined for
// tabs on-screen
enum ECreative_Inventory_Groups {
eCreativeInventory_BuildingBlocks,
@@ -29,6 +33,10 @@ public:
eCreativeInventory_Transport,
eCreativeInventory_Materials,
eCreativeInventory_Food,
+// 4jcraft
+#ifdef ENABLE_JAVA_GUIS
+ eCreativeInventory_Search,
+#endif
eCreativeInventory_ToolsArmourWeapons,
eCreativeInventory_Brewing,
eCreativeInventory_Potions_Basic,
@@ -97,7 +105,7 @@ public:
virtual void loopClick(int slotIndex, int buttonNum, bool quickKeyHeld,
std::shared_ptr player) {} // do nothing
}* itemPickerMenu;
-
+
// 4jcraft: changed these two from public to protected for the java UI
static std::vector >
categoryGroups[eCreativeInventoryGroupsCount];
@@ -148,4 +156,4 @@ protected:
static void BuildFirework(std::vector >* list,
uint8_t type, int color, int sulphur,
bool flicker, bool trail, int fadeColor = -1);
-};
\ No newline at end of file
+};
diff --git a/Minecraft.Client/Platform/Common/UI/IUIScene_PauseMenu.cpp b/Minecraft.Client/Platform/Common/UI/IUIScene_PauseMenu.cpp
index 65d52d39a..e815d7a5c 100644
--- a/Minecraft.Client/Platform/Common/UI/IUIScene_PauseMenu.cpp
+++ b/Minecraft.Client/Platform/Common/UI/IUIScene_PauseMenu.cpp
@@ -1,3 +1,6 @@
+#include
+#include
+
#include "../../Minecraft.World/Platform/stdafx.h"
#include "IUIScene_PauseMenu.h"
#include "UIScene.h"
@@ -380,8 +383,6 @@ int IUIScene_PauseMenu::SaveWorldThreadProc(void* lpParameter) {
// Share AABB & Vec3 pools with default (main thread) - should be ok as long
// as we don't tick the main thread whilst this thread is running
- AABB::UseDefaultThreadStorage();
- Vec3::UseDefaultThreadStorage();
Compression::UseDefaultThreadStorage();
Minecraft* pMinecraft = Minecraft::GetInstance();
@@ -394,7 +395,7 @@ int IUIScene_PauseMenu::SaveWorldThreadProc(void* lpParameter) {
while (app.GetXuiServerAction(ProfileManager.GetPrimaryPad()) !=
eXuiServerAction_Idle &&
!MinecraftServer::serverHalted()) {
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
if (!MinecraftServer::serverHalted() && !app.GetChangingSessionType())
@@ -418,8 +419,6 @@ int IUIScene_PauseMenu::SaveWorldThreadProc(void* lpParameter) {
int IUIScene_PauseMenu::ExitWorldThreadProc(void* lpParameter) {
// Share AABB & Vec3 pools with default (main thread) - should be ok as long
// as we don't tick the main thread whilst this thread is running
- AABB::UseDefaultThreadStorage();
- Vec3::UseDefaultThreadStorage();
Compression::UseDefaultThreadStorage();
// app.SetGameStarted(false);
@@ -663,7 +662,7 @@ void IUIScene_PauseMenu::_ExitWorld(void* lpParameter) {
// multiplayer client if host of the game will exit during the clients
// loading to created world.
while (g_NetworkManager.IsNetworkThreadRunning()) {
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
pMinecraft->setLevel(NULL, exitReasonStringId, nullptr, saveStats);
@@ -683,7 +682,7 @@ void IUIScene_PauseMenu::_ExitWorld(void* lpParameter) {
// loads saved data We can't start/join a new game until the session is
// destroyed, so wait for it to be idle again
while (g_NetworkManager.IsInSession()) {
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
app.SetChangingSessionType(false);
diff --git a/Minecraft.Client/Platform/Common/UI/UIControl.cpp b/Minecraft.Client/Platform/Common/UI/UIControl.cpp
index 234d9bb99..9a9426be3 100644
--- a/Minecraft.Client/Platform/Common/UI/UIControl.cpp
+++ b/Minecraft.Client/Platform/Common/UI/UIControl.cpp
@@ -10,7 +10,12 @@ UIControl::UIControl() {
m_controlName = "";
m_isVisible = true;
m_bHidden = false;
+ m_isValid = false;
m_eControlType = eNoControl;
+ m_x = 0;
+ m_y = 0;
+ m_width = 0;
+ m_height = 0;
}
bool UIControl::setupControl(UIScene* scene, IggyValuePath* parent,
@@ -20,6 +25,7 @@ bool UIControl::setupControl(UIScene* scene, IggyValuePath* parent,
rrbool res =
IggyValuePathMakeNameRef(&m_iggyPath, parent, controlName.c_str());
+ m_isValid = res ? true : false;
m_nameXPos = registerFastName(L"x");
m_nameYPos = registerFastName(L"y");
@@ -28,16 +34,32 @@ bool UIControl::setupControl(UIScene* scene, IggyValuePath* parent,
m_funcSetAlpha = registerFastName(L"SetControlAlpha");
m_nameVisible = registerFastName(L"visible");
- F64 fx, fy, fwidth, fheight;
- IggyValueGetF64RS(getIggyValuePath(), m_nameXPos, NULL, &fx);
- IggyValueGetF64RS(getIggyValuePath(), m_nameYPos, NULL, &fy);
- IggyValueGetF64RS(getIggyValuePath(), m_nameWidth, NULL, &fwidth);
- IggyValueGetF64RS(getIggyValuePath(), m_nameHeight, NULL, &fheight);
+ if (m_isValid) {
+ IggyDatatype controlType = IGGY_DATATYPE__invalid_request;
+ IggyResult typeResult =
+ IggyValueGetTypeRS(getIggyValuePath(), 0, NULL, &controlType);
+ m_isValid = typeResult == IGGY_RESULT_SUCCESS &&
+ controlType != IGGY_DATATYPE__invalid_request &&
+ controlType != IGGY_DATATYPE_undefined;
+ }
- m_x = (S32)fx;
- m_y = (S32)fy;
- m_width = (S32)Math::round(fwidth);
- m_height = (S32)Math::round(fheight);
+ if (m_isValid) {
+ F64 fx, fy, fwidth, fheight;
+ IggyValueGetF64RS(getIggyValuePath(), m_nameXPos, NULL, &fx);
+ IggyValueGetF64RS(getIggyValuePath(), m_nameYPos, NULL, &fy);
+ IggyValueGetF64RS(getIggyValuePath(), m_nameWidth, NULL, &fwidth);
+ IggyValueGetF64RS(getIggyValuePath(), m_nameHeight, NULL, &fheight);
+
+ m_x = (S32)fx;
+ m_y = (S32)fy;
+ m_width = (S32)Math::round(fwidth);
+ m_height = (S32)Math::round(fheight);
+ } else {
+ m_x = 0;
+ m_y = 0;
+ m_width = 0;
+ m_height = 0;
+ }
return res;
}
@@ -57,6 +79,8 @@ void UIControl::UpdateControl() {
#endif // __PSVITA__
void UIControl::ReInit() {
+ if (!m_isValid) return;
+
if (m_lastOpacity != 1.0f) {
IggyDataValue result;
IggyDataValue value[2];
@@ -91,6 +115,7 @@ S32 UIControl::getHeight() { return m_height; }
void UIControl::setOpacity(float percent) {
if (percent != m_lastOpacity) {
m_lastOpacity = percent;
+ if (!m_isValid) return;
IggyDataValue result;
IggyDataValue value[2];
@@ -112,6 +137,11 @@ void UIControl::setOpacity(float percent) {
void UIControl::setVisible(bool visible) {
if (visible != m_isVisible) {
+ if (!m_isValid) {
+ m_isVisible = visible;
+ return;
+ }
+
rrbool succ = IggyValueSetBooleanRS(getIggyValuePath(), m_nameVisible,
NULL, visible);
if (succ)
@@ -122,6 +152,8 @@ void UIControl::setVisible(bool visible) {
}
bool UIControl::getVisible() {
+ if (!m_isValid) return m_isVisible;
+
rrbool bVisible = false;
IggyResult result = IggyValueGetBooleanRS(getIggyValuePath(), m_nameVisible,
diff --git a/Minecraft.Client/Platform/Common/UI/UIControl.h b/Minecraft.Client/Platform/Common/UI/UIControl.h
index 19cdb9ad4..807daa5dd 100644
--- a/Minecraft.Client/Platform/Common/UI/UIControl.h
+++ b/Minecraft.Client/Platform/Common/UI/UIControl.h
@@ -34,6 +34,7 @@ protected:
eUIControlType m_eControlType;
int m_id;
bool m_bHidden; // set by the Remove call
+ bool m_isValid;
public:
void setControlType(eUIControlType eType) { m_eControlType = eType; }
@@ -83,6 +84,7 @@ public:
void setVisible(bool visible);
bool getVisible();
bool isVisible() { return m_isVisible; }
+ bool isValid() { return m_isValid; }
virtual bool hasFocus() { return false; }
diff --git a/Minecraft.Client/Platform/Common/UI/UIController.cpp b/Minecraft.Client/Platform/Common/UI/UIController.cpp
index 912e827df..6ee65e8ec 100644
--- a/Minecraft.Client/Platform/Common/UI/UIController.cpp
+++ b/Minecraft.Client/Platform/Common/UI/UIController.cpp
@@ -77,6 +77,16 @@ static void RADLINK WarningCallback(void* user_callback_data, Iggy* player,
// IGGY_RESULT_Error_UndefinedEntity = 504,
// IGGY_RESULT_Error_OutOfMemory = 1001,};
+ if (message != NULL) {
+ // 4jcraft: Some Linux movie variants do not ship these optional
+ // hooks/controls. We guard the call sites, so drop the residual Iggy
+ // warning noise.
+ if (strstr(message, "LabelGamertag") != NULL ||
+ strstr(message, "Method SetSafeZone was not a function") != NULL) {
+ return;
+ }
+ }
+
switch (code) {
case IGGY_RESULT_Warning_CannotSustainFrameRate:
// Ignore warning
@@ -3233,4 +3243,4 @@ void UIController::SendTouchInput(unsigned int iPad, unsigned int key,
}
}
-#endif
\ No newline at end of file
+#endif
diff --git a/Minecraft.Client/Platform/Common/UI/UIScene.cpp b/Minecraft.Client/Platform/Common/UI/UIScene.cpp
index c50a82230..d46b97b37 100644
--- a/Minecraft.Client/Platform/Common/UI/UIScene.cpp
+++ b/Minecraft.Client/Platform/Common/UI/UIScene.cpp
@@ -19,6 +19,7 @@ UIScene::UIScene(int iPad, UILayer* parentLayer) {
m_bVisible = true;
m_bCanHandleInput = false;
m_bIsReloading = false;
+ m_hasSetSafeZoneMethod = false;
m_iFocusControl = -1;
m_iFocusChild = 0;
@@ -53,6 +54,7 @@ void UIScene::destroyMovie() {
/* Destroy the Iggy player. */
IggyPlayerDestroy(swf);
swf = NULL;
+ m_hasSetSafeZoneMethod = false;
// Clear out the controls collection (doesn't delete the controls, and they
// get re-setup later)
@@ -76,6 +78,7 @@ void UIScene::reloadMovie(bool force) {
// Clear out the controls collection (doesn't delete the controls, and
// they get re-setup later)
m_controls.clear();
+ m_hasSetSafeZoneMethod = false;
// Clear out all the fast names for the current movie
m_fastNames.clear();
@@ -194,6 +197,8 @@ void UIScene::updateSafeZone() {
void UIScene::setSafeZone(S32 safeTop, S32 safeBottom, S32 safeLeft,
S32 safeRight) {
+ if (!m_hasSetSafeZoneMethod) return;
+
IggyDataValue result;
IggyDataValue value[4];
@@ -251,6 +256,13 @@ bool UIScene::mapElementsAndNames() {
m_funcSetAlpha = registerFastName(L"SetAlpha");
m_funcSetFocus = registerFastName(L"SetFocus");
m_funcHorizontalResizeCheck = registerFastName(L"DoHorizontalResizeCheck");
+
+ IggyDatatype safeZoneType = IGGY_DATATYPE__invalid_request;
+ IggyResult safeZoneResult = IggyValueGetTypeRS(
+ m_rootPath, m_funcSetSafeZone, NULL, &safeZoneType);
+ m_hasSetSafeZoneMethod =
+ safeZoneResult == IGGY_RESULT_SUCCESS &&
+ safeZoneType == IGGY_DATATYPE_function;
return true;
}
@@ -712,7 +724,7 @@ void UIScene::_customDrawSlotControl(CustomDrawData* region, int iPad,
}
glEnable(GL_RESCALE_NORMAL);
glPushMatrix();
- Lighting::turnOnGui();
+ Lighting::turnOn();
glRotatef(120, 1, 0, 0);
glPopMatrix();
diff --git a/Minecraft.Client/Platform/Common/UI/UIScene.h b/Minecraft.Client/Platform/Common/UI/UIScene.h
index b4948bfce..e7d746865 100644
--- a/Minecraft.Client/Platform/Common/UI/UIScene.h
+++ b/Minecraft.Client/Platform/Common/UI/UIScene.h
@@ -72,6 +72,7 @@ private:
bool m_bUpdateOpacity;
bool m_bVisible;
bool m_bCanHandleInput;
+ bool m_hasSetSafeZoneMethod;
UIScene* m_backScene;
size_t m_callbackUniqueId;
diff --git a/Minecraft.Client/Platform/Common/UI/UIScene_DebugSetCamera.cpp b/Minecraft.Client/Platform/Common/UI/UIScene_DebugSetCamera.cpp
index 89e872eb9..af850cb67 100644
--- a/Minecraft.Client/Platform/Common/UI/UIScene_DebugSetCamera.cpp
+++ b/Minecraft.Client/Platform/Common/UI/UIScene_DebugSetCamera.cpp
@@ -19,13 +19,13 @@ UIScene_DebugSetCamera::UIScene_DebugSetCamera(int iPad, void* initData,
Minecraft* pMinecraft = Minecraft::GetInstance();
if (pMinecraft != NULL) {
- Vec3* vec = pMinecraft->localplayers[playerNo]->getPos(1.0);
+ Vec3 vec = pMinecraft->localplayers[playerNo]->getPos(1.0);
- currentPosition->m_camX = vec->x;
+ currentPosition->m_camX = vec.x;
currentPosition->m_camY =
- vec->y -
+ vec.y -
1.62; // pMinecraft->localplayers[playerNo]->getHeadHeight();
- currentPosition->m_camZ = vec->z;
+ currentPosition->m_camZ = vec.z;
currentPosition->m_yRot = pMinecraft->localplayers[playerNo]->yRot;
currentPosition->m_elev = pMinecraft->localplayers[playerNo]->xRot;
diff --git a/Minecraft.Client/Platform/Common/UI/UIScene_EnchantingMenu.cpp b/Minecraft.Client/Platform/Common/UI/UIScene_EnchantingMenu.cpp
index 78fca71e5..0affa127f 100644
--- a/Minecraft.Client/Platform/Common/UI/UIScene_EnchantingMenu.cpp
+++ b/Minecraft.Client/Platform/Common/UI/UIScene_EnchantingMenu.cpp
@@ -5,8 +5,6 @@
#include "../../Minecraft.Client/Minecraft.h"
#include "UIScene_EnchantingMenu.h"
-#include
-
UIScene_EnchantingMenu::UIScene_EnchantingMenu(int iPad, void* _initData,
UILayer* parentLayer)
: UIScene_AbstractContainerMenu(iPad, parentLayer) {
diff --git a/Minecraft.Client/Platform/Common/UI/UIScene_LoadOrJoinMenu.cpp b/Minecraft.Client/Platform/Common/UI/UIScene_LoadOrJoinMenu.cpp
index 563124002..31e09f0fb 100644
--- a/Minecraft.Client/Platform/Common/UI/UIScene_LoadOrJoinMenu.cpp
+++ b/Minecraft.Client/Platform/Common/UI/UIScene_LoadOrJoinMenu.cpp
@@ -1,3 +1,6 @@
+#include
+#include
+
#include "../../Minecraft.World/Platform/stdafx.h"
#include "UI.h"
#include "UIScene_LoadOrJoinMenu.h"
@@ -2229,7 +2232,7 @@ int UIScene_LoadOrJoinMenu::MustSignInReturnedTexturePack(void* pParam,
while (commerceState != CConsoleMinecraftApp::eCommerce_State_Offline &&
commerceState != CConsoleMinecraftApp::eCommerce_State_Online &&
commerceState != CConsoleMinecraftApp::eCommerce_State_Error) {
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
commerceState = app.GetCommerceState();
}
@@ -2852,7 +2855,7 @@ int UIScene_LoadOrJoinMenu::DownloadSonyCrossSaveThreadProc(void* lpParameter) {
#if defined(_DURANGO) || defined(__ORBIS__)
while (StorageManager.GetSaveState() !=
C4JStorage::ESaveGame_Idle) {
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
StorageManager.Tick();
}
#endif
@@ -2999,7 +3002,7 @@ int UIScene_LoadOrJoinMenu::DownloadSonyCrossSaveThreadProc(void* lpParameter) {
// waiting to dismiss the dialog
break;
}
- Sleep(50);
+ std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
m_bSaveTransferRunning = false;
#ifdef __PS3__
@@ -3151,7 +3154,7 @@ int UIScene_LoadOrJoinMenu::UploadSonyCrossSaveThreadProc(void* lpParameter) {
// waiting for dialog to be dismissed
break;
}
- Sleep(50);
+ std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
return 0;
@@ -3247,7 +3250,7 @@ int UIScene_LoadOrJoinMenu::DownloadXbox360SaveThreadProc(void* lpParameter) {
while (StorageManager.SaveTransferClearState() !=
C4JStorage::eSaveTransfer_Idle) {
- Sleep(5);
+ std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
pStateContainer->m_bSaveTransferInProgress = true;
@@ -3432,7 +3435,7 @@ int UIScene_LoadOrJoinMenu::DownloadXbox360SaveThreadProc(void* lpParameter) {
while (StorageManager.GetSaveState() !=
C4JStorage::ESaveGame_Idle) {
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
// 4J Stu - DO NOT tick this here. The main thread should be
// the only place ticking the StorageManager. You WILL get
@@ -3470,7 +3473,7 @@ int UIScene_LoadOrJoinMenu::DownloadXbox360SaveThreadProc(void* lpParameter) {
break;
}
- Sleep(50);
+ std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
if (pStateContainer->m_bSaveTransferCancelled) {
@@ -3517,7 +3520,7 @@ void UIScene_LoadOrJoinMenu::RequestFileSize(SaveTransferStateContainer* pClass,
IDS_SAVETRANSFER_TITLE_GET);
pMinecraft->progressRenderer->progressStage(
IDS_SAVETRANSFER_STAGE_GET_DETAILS);
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
pClass->m_eSaveTransferState =
StorageManager.SaveTransferGetDetails(
pClass->m_iPad, C4JStorage::eGlobalStorage_TitleUser,
@@ -3573,7 +3576,7 @@ void UIScene_LoadOrJoinMenu::RequestFileData(SaveTransferStateContainer* pClass,
pMinecraft->progressRenderer->progressStart(
IDS_SAVETRANSFER_TITLE_GET);
pMinecraft->progressRenderer->progressStage(-1);
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
pClass->m_eSaveTransferState = StorageManager.SaveTransferGetData(
pClass->m_iPad, C4JStorage::eGlobalStorage_TitleUser, filename,
&UIScene_LoadOrJoinMenu::SaveTransferReturned,
@@ -3740,7 +3743,7 @@ int UIScene_LoadOrJoinMenu::CopySaveThreadProc(void* lpParameter) {
bool bContinue = true;
do {
- Sleep(100);
+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
ui.EnterCallbackIdCriticalSection();
pClass = (UIScene_LoadOrJoinMenu*)ui.GetSceneFromCallbackId(
(size_t)lpParameter);
diff --git a/Minecraft.Client/Platform/Common/UI/UIScene_MainMenu.cpp b/Minecraft.Client/Platform/Common/UI/UIScene_MainMenu.cpp
index 29fa2b306..064805692 100644
--- a/Minecraft.Client/Platform/Common/UI/UIScene_MainMenu.cpp
+++ b/Minecraft.Client/Platform/Common/UI/UIScene_MainMenu.cpp
@@ -363,7 +363,7 @@ void UIScene_MainMenu::handlePress(F64 controlId, F64 childId) {
signInReturnedFunc =
&UIScene_MainMenu::UnlockFullGame_SignInReturned;
break;
-#if defined _XBOX
+#if defined(_XBOX) || defined(__linux__)
case eControl_Exit:
if (ProfileManager.IsFullVersion()) {
unsigned int uiIDA[2];
@@ -372,14 +372,15 @@ void UIScene_MainMenu::handlePress(F64 controlId, F64 childId) {
ui.RequestErrorMessage(
IDS_WARNING_ARCADE_TITLE, IDS_WARNING_ARCADE_TEXT, uiIDA, 2,
XUSER_INDEX_ANY, &UIScene_MainMenu::ExitGameReturned, this);
- } else {
+ }
+ else {
#ifdef _XBOX_ONE
ui.ShowPlayerDisplayname(true);
#endif
ui.NavigateToScene(primaryPad, eUIScene_TrialExitUpsell);
}
- break;
#endif
+ break;
#ifdef _DURANGO
case eControl_XboxHelp:
diff --git a/Minecraft.Client/Platform/Common/XUI/XUI_Death.cpp b/Minecraft.Client/Platform/Common/XUI/XUI_Death.cpp
index 7902b427a..738499468 100644
--- a/Minecraft.Client/Platform/Common/XUI/XUI_Death.cpp
+++ b/Minecraft.Client/Platform/Common/XUI/XUI_Death.cpp
@@ -1,9 +1,12 @@
// Minecraft.cpp : Defines the entry point for the application.
//
+#include
+#include
+#include
+
#include "../../Minecraft.World/Platform/stdafx.h"
#include "XUI_Death.h"
-#include
#include "../../Minecraft.World/Util/AABB.h"
#include "../../Minecraft.World/Util/Vec3.h"
#include "../../Minecraft.World/Headers/net.minecraft.stats.h"
@@ -219,8 +222,6 @@ HRESULT CScene_Death::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled) {
}
int CScene_Death::RespawnThreadProc(void* lpParameter) {
- AABB::UseDefaultThreadStorage();
- Vec3::UseDefaultThreadStorage();
Compression::UseDefaultThreadStorage();
size_t iPad = (size_t)lpParameter;
@@ -235,7 +236,7 @@ int CScene_Death::RespawnThreadProc(void* lpParameter) {
// If we are offline, this should release straight away
// WaitForSingleObject( pMinecraft->m_hPlayerRespawned, INFINITE );
while (pMinecraft->localplayers[iPad]->GetPlayerRespawned() == false) {
- Sleep(50);
+ std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
return S_OK;
@@ -246,4 +247,4 @@ HRESULT CScene_Death::OnCustomMessage_Splitscreenplayer(bool bJoining,
bHandled = true;
return app.AdjustSplitscreenScene_PlayerChanged(m_hObj, &m_OriginalPosition,
m_iPad, bJoining);
-}
\ No newline at end of file
+}
diff --git a/Minecraft.Client/Platform/Common/XUI/XUI_Leaderboards.cpp b/Minecraft.Client/Platform/Common/XUI/XUI_Leaderboards.cpp
index 193ea0a01..978ca2335 100644
--- a/Minecraft.Client/Platform/Common/XUI/XUI_Leaderboards.cpp
+++ b/Minecraft.Client/Platform/Common/XUI/XUI_Leaderboards.cpp
@@ -7,6 +7,9 @@
#include "XUI_Ctrl_CraftIngredientSlot.h"
#include "XUI_XZP_Icons.h"
+#include
+#include
+
LPCWSTR CScene_Leaderboards::m_TitleIconNameA[7] = {
L"XuiHSlot1", L"XuiHSlot2", L"XuiHSlot3", L"XuiHSlot4",
L"XuiHSlot5", L"XuiHSlot6", L"XuiHSlot7",
@@ -283,7 +286,7 @@ HRESULT CScene_Leaderboards::OnDestroy() {
app.SetLiveLinkRequired(false);
while (m_isProcessingStatsRead) {
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
if (m_friends != NULL) delete[] m_friends;
diff --git a/Minecraft.Client/Platform/Common/XUI/XUI_MultiGameJoinLoad.cpp b/Minecraft.Client/Platform/Common/XUI/XUI_MultiGameJoinLoad.cpp
index 2e07152e6..d9fb16f46 100644
--- a/Minecraft.Client/Platform/Common/XUI/XUI_MultiGameJoinLoad.cpp
+++ b/Minecraft.Client/Platform/Common/XUI/XUI_MultiGameJoinLoad.cpp
@@ -1,6 +1,8 @@
#include "../../Minecraft.World/Platform/stdafx.h"
#include
#include
+#include
+#include
#include
#include "../../Minecraft.World/Util/StringHelpers.h"
#include "../Tutorial/TutorialMode.h"
@@ -2174,7 +2176,7 @@ bool CScene_MultiGameJoinLoad::WaitForTransferComplete(
// cancelled
return false;
}
- Sleep(50);
+ std::this_thread::sleep_for(std::chrono::milliseconds(50));
// update the progress
pMinecraft->progressRenderer->progressStagePercentage(
(unsigned int)(pClass->m_fProgress * 100.0f));
diff --git a/Minecraft.Client/Platform/Common/XUI/XUI_PauseMenu.cpp b/Minecraft.Client/Platform/Common/XUI/XUI_PauseMenu.cpp
index d77644991..a0c633adb 100644
--- a/Minecraft.Client/Platform/Common/XUI/XUI_PauseMenu.cpp
+++ b/Minecraft.Client/Platform/Common/XUI/XUI_PauseMenu.cpp
@@ -4,6 +4,8 @@
#include "../../Minecraft.World/Platform/stdafx.h"
#include
+#include
+#include
#include "../../Minecraft.World/Util/AABB.h"
#include "../../Minecraft.World/Util/Vec3.h"
#include "../../Minecraft.World/Headers/net.minecraft.stats.h"
@@ -1073,8 +1075,6 @@ int UIScene_PauseMenu::SaveWorldThreadProc(LPVOID lpParameter) {
// Share AABB & Vec3 pools with default (main thread) - should be ok as long
// as we don't tick the main thread whilst this thread is running
- AABB::UseDefaultThreadStorage();
- Vec3::UseDefaultThreadStorage();
Compression::UseDefaultThreadStorage();
Minecraft* pMinecraft = Minecraft::GetInstance();
@@ -1087,7 +1087,7 @@ int UIScene_PauseMenu::SaveWorldThreadProc(LPVOID lpParameter) {
while (app.GetXuiServerAction(ProfileManager.GetPrimaryPad()) !=
eXuiServerAction_Idle &&
!MinecraftServer::serverHalted()) {
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
if (!MinecraftServer::serverHalted() && !app.GetChangingSessionType())
@@ -1106,8 +1106,6 @@ int UIScene_PauseMenu::SaveWorldThreadProc(LPVOID lpParameter) {
int UIScene_PauseMenu::ExitWorldThreadProc(void* lpParameter) {
// Share AABB & Vec3 pools with default (main thread) - should be ok as long
// as we don't tick the main thread whilst this thread is running
- AABB::UseDefaultThreadStorage();
- Vec3::UseDefaultThreadStorage();
Compression::UseDefaultThreadStorage();
// app.SetGameStarted(false);
@@ -1297,7 +1295,7 @@ void UIScene_PauseMenu::_ExitWorld(LPVOID lpParameter) {
// multiplayer client if host of the game will exit during the clients
// loading to created world.
while (g_NetworkManager.IsNetworkThreadRunning()) {
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
pMinecraft->setLevel(NULL, exitReasonStringId, nullptr, saveStats);
@@ -1317,7 +1315,7 @@ void UIScene_PauseMenu::_ExitWorld(LPVOID lpParameter) {
// loads saved data We can't start/join a new game until the session is
// destroyed, so wait for it to be idle again
while (g_NetworkManager.IsInSession()) {
- Sleep(1);
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
app.SetChangingSessionType(false);
@@ -1326,4 +1324,4 @@ void UIScene_PauseMenu::_ExitWorld(LPVOID lpParameter) {
void UIScene_PauseMenu::SetIgnoreInput(bool ignoreInput) {
m_bIgnoreInput = ignoreInput;
-}
\ No newline at end of file
+}
diff --git a/Minecraft.Client/Platform/Common/XUI/XUI_TransferToXboxOne.cpp b/Minecraft.Client/Platform/Common/XUI/XUI_TransferToXboxOne.cpp
index 178c3607f..1dd0cc64d 100644
--- a/Minecraft.Client/Platform/Common/XUI/XUI_TransferToXboxOne.cpp
+++ b/Minecraft.Client/Platform/Common/XUI/XUI_TransferToXboxOne.cpp
@@ -2,6 +2,8 @@
#include
#include
#include
+#include
+#include
#include "XUI_Ctrl_4JList.h"
#include "XUI_Ctrl_4JIcon.h"
@@ -363,7 +365,7 @@ int CScene_TransferToXboxOne::UploadSaveForXboxOneThreadProc(
// loop waiting for the write to complete
uiComplete = 0;
while (pClass->m_bWaitingForWrite && (hr == S_OK)) {
- Sleep(50);
+ std::this_thread::sleep_for(std::chrono::milliseconds(50));
uiComplete++;
if (uiComplete > 100) uiComplete = 100;
@@ -380,7 +382,7 @@ int CScene_TransferToXboxOne::UploadSaveForXboxOneThreadProc(
// finish the bar
for (int i = uiComplete; i < 100; i++) {
- Sleep(5);
+ std::this_thread::sleep_for(std::chrono::milliseconds(5));
pMinecraft->progressRenderer->progressStagePercentage(i);
}
@@ -396,7 +398,7 @@ int CScene_TransferToXboxOne::UploadSaveForXboxOneThreadProc(
// sleep until we have the data
while (pClass->m_bSaveDataReceived == false) {
- Sleep(50);
+ std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
// write the save to user TMS
@@ -443,7 +445,7 @@ int CScene_TransferToXboxOne::UploadSaveForXboxOneThreadProc(
} else {
// loop waiting for the write to complete
while (pClass->m_bWaitingForWrite && (hr == S_OK)) {
- Sleep(50);
+ std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
uiComplete += uiPercentageChunk;
if (uiComplete > 100) uiComplete = 100;
diff --git a/Minecraft.Client/Platform/Durango/Durango_Minecraft.cpp b/Minecraft.Client/Platform/Durango/Durango_Minecraft.cpp
index dff64785d..30b9c8eb7 100644
--- a/Minecraft.Client/Platform/Durango/Durango_Minecraft.cpp
+++ b/Minecraft.Client/Platform/Durango/Durango_Minecraft.cpp
@@ -794,8 +794,6 @@ void oldWinMainInit() {
// Initialise TLS for tesselator, for this main thread
Tesselator::CreateNewThreadStorage(1024 * 1024);
// Initialise TLS for AABB and Vec3 pools, for this main thread
- AABB::CreateNewThreadStorage();
- Vec3::CreateNewThreadStorage();
OldChunkStorage::CreateNewThreadStorage();
Level::enableLightingCache();
Tile::CreateNewThreadStorage();
@@ -1143,9 +1141,6 @@ void oldWinMainTick() {
}
// Fix for #7318 - Title crashes after short soak in the leaderboards menu
- // A memory leak was caused because the icon renderer kept creating new
- // Vec3's because the pool wasn't reset
- Vec3::resetPool();
}
#ifdef MEMORY_TRACKING
diff --git a/Minecraft.Client/Platform/Linux/Iggy/gdraw/gdraw.c b/Minecraft.Client/Platform/Linux/Iggy/gdraw/gdraw.c
new file mode 100644
index 000000000..4fde9a91f
--- /dev/null
+++ b/Minecraft.Client/Platform/Linux/Iggy/gdraw/gdraw.c
@@ -0,0 +1,835 @@
+#define GDRAW_ASSERTS
+
+#include "../../../Windows64/Iggy/include/iggy.h"
+#include "../../../Windows64/Iggy/include/gdraw.h"
+#include "gdraw.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define true 1
+#define false 0
+
+#ifndef _ENABLEIGGY
+void* IggyGDrawMallocAnnotated(SINTa size, const char* file, int line) {
+ (void)file;
+ (void)line;
+ return malloc((size_t)size);
+}
+
+void IggyGDrawFree(void* ptr) { free(ptr); }
+
+void IggyGDrawSendWarning(Iggy* f, char const* message, ...) {
+ (void)f;
+ va_list args;
+ va_start(args, message);
+ fprintf(stderr, "[Iggy GDraw Warning] ");
+ vfprintf(stderr, message, args);
+ fprintf(stderr, "\n");
+ va_end(args);
+}
+
+void IggyDiscardVertexBufferCallback(void* owner, void* buf) {
+ (void)owner;
+ (void)buf;
+}
+#endif
+
+static void* get_gl_proc(const char* name) {
+ void* p = SDL_GL_GetProcAddress(name);
+ if (!p) p = dlsym(RTLD_DEFAULT, name);
+ if (!p) {
+ char buf[256];
+ strncpy(buf, name, sizeof(buf) - 1);
+ buf[255] = '\0';
+ char* ext = strstr(buf, "ARB");
+ if (!ext) ext = strstr(buf, "EXT");
+ if (ext && ext == buf + strlen(buf) - 3) {
+ *ext = '\0';
+ p = SDL_GL_GetProcAddress(buf);
+ if (!p) p = dlsym(RTLD_DEFAULT, buf);
+ }
+ }
+ return p;
+}
+
+#define GDRAW_GL_EXTENSION_LIST \
+ /* identifier import procname */ \
+ /* GL_ARB_vertex_buffer_object */ \
+ GLE(GenBuffers, "GenBuffersARB", GENBUFFERSARB) \
+ GLE(DeleteBuffers, "DeleteBuffersARB", DELETEBUFFERSARB) \
+ GLE(BindBuffer, "BindBufferARB", BINDBUFFERARB) \
+ GLE(BufferData, "BufferDataARB", BUFFERDATAARB) \
+ GLE(MapBuffer, "MapBufferARB", MAPBUFFERARB) \
+ GLE(UnmapBuffer, "UnmapBufferARB", UNMAPBUFFERARB) \
+ GLE(VertexAttribPointer, "VertexAttribPointerARB", VERTEXATTRIBPOINTERARB) \
+ GLE(EnableVertexAttribArray, "EnableVertexAttribArrayARB", \
+ ENABLEVERTEXATTRIBARRAYARB) \
+ GLE(DisableVertexAttribArray, "DisableVertexAttribArrayARB", \
+ DISABLEVERTEXATTRIBARRAYARB) \
+ /* GL_ARB_shader_objects */ \
+ GLE(CreateShader, "CreateShaderObjectARB", CREATESHADEROBJECTARB) \
+ GLE(DeleteShader, "DeleteObjectARB", DELETEOBJECTARB) \
+ GLE(ShaderSource, "ShaderSourceARB", SHADERSOURCEARB) \
+ GLE(CompileShader, "CompileShaderARB", COMPILESHADERARB) \
+ GLE(GetShaderiv, "GetObjectParameterivARB", GETOBJECTPARAMETERIVARB) \
+ GLE(GetShaderInfoLog, "GetInfoLogARB", GETINFOLOGARB) \
+ GLE(CreateProgram, "CreateProgramObjectARB", CREATEPROGRAMOBJECTARB) \
+ GLE(DeleteProgram, "DeleteObjectARB", DELETEOBJECTARB) \
+ GLE(AttachShader, "AttachObjectARB", ATTACHOBJECTARB) \
+ GLE(LinkProgram, "LinkProgramARB", LINKPROGRAMARB) \
+ GLE(GetUniformLocation, "GetUniformLocationARB", GETUNIFORMLOCATIONARB) \
+ GLE(UseProgram, "UseProgramObjectARB", USEPROGRAMOBJECTARB) \
+ GLE(GetProgramiv, "GetObjectParameterivARB", GETOBJECTPARAMETERIVARB) \
+ GLE(GetProgramInfoLog, "GetInfoLogARB", GETINFOLOGARB) \
+ GLE(Uniform1i, "Uniform1iARB", UNIFORM1IARB) \
+ GLE(Uniform4f, "Uniform4fARB", UNIFORM4FARB) \
+ GLE(Uniform4fv, "Uniform4fvARB", UNIFORM4FVARB) \
+ /* GL_ARB_vertex_shader */ \
+ GLE(BindAttribLocation, "BindAttribLocationARB", BINDATTRIBLOCATIONARB) \
+ /* Missing from WGL but needed by shared code */ \
+ GLE(Uniform1f, "Uniform1fARB", UNIFORM1FARB) \
+ /* GL_EXT_framebuffer_object */ \
+ GLE(GenRenderbuffers, "GenRenderbuffersEXT", GENRENDERBUFFERSEXT) \
+ GLE(DeleteRenderbuffers, "DeleteRenderbuffersEXT", DELETERENDERBUFFERSEXT) \
+ GLE(BindRenderbuffer, "BindRenderbufferEXT", BINDRENDERBUFFEREXT) \
+ GLE(RenderbufferStorage, "RenderbufferStorageEXT", RENDERBUFFERSTORAGEEXT) \
+ GLE(GenFramebuffers, "GenFramebuffersEXT", GENFRAMEBUFFERSEXT) \
+ GLE(DeleteFramebuffers, "DeleteFramebuffersEXT", DELETEFRAMEBUFFERSEXT) \
+ GLE(BindFramebuffer, "BindFramebufferEXT", BINDFRAMEBUFFEREXT) \
+ GLE(CheckFramebufferStatus, "CheckFramebufferStatusEXT", \
+ CHECKFRAMEBUFFERSTATUSEXT) \
+ GLE(FramebufferRenderbuffer, "FramebufferRenderbufferEXT", \
+ FRAMEBUFFERRENDERBUFFEREXT) \
+ GLE(FramebufferTexture2D, "FramebufferTexture2DEXT", \
+ FRAMEBUFFERTEXTURE2DEXT) \
+ GLE(GenerateMipmap, "GenerateMipmapEXT", GENERATEMIPMAPEXT) \
+ /* GL_EXT_framebuffer_blit */ \
+ GLE(BlitFramebuffer, "BlitFramebufferEXT", BLITFRAMEBUFFEREXT) \
+ /* GL_EXT_framebuffer_multisample */ \
+ GLE(RenderbufferStorageMultisample, "RenderbufferStorageMultisampleEXT", \
+ RENDERBUFFERSTORAGEMULTISAMPLEEXT) \
+ /* */
+
+// Shared .inl
+#define gdraw_GLx_(id) gdraw_GL_##id
+#define GDRAW_GLx_(id) GDRAW_GL_##id
+#define GDRAW_SHADERS "gdraw_gl_shaders.inl"
+
+// GLhandleARB is void* but shader functions use GLuint values.
+// homework stolen from gdraw_gl_shared.inl.
+#define GDrawGLProgram GLuint
+typedef GLuint GLhandle;
+typedef gdraw_gl_resourcetype gdraw_resourcetype;
+
+#define GLE(id, import, procname) static PFNGL##procname##PROC gl##id;
+GDRAW_GL_EXTENSION_LIST
+#undef GLE
+
+typedef const GLubyte*(APIENTRYP PFNGLGETSTRINGIPROC_)(GLenum name,
+ GLuint index);
+static PFNGLGETSTRINGIPROC_ gdraw_glGetStringi = NULL;
+
+typedef void(APIENTRYP PFNGLGENVERTEXARRAYSPROC_)(GLsizei n, GLuint* arrays);
+typedef void(APIENTRYP PFNGLBINDVERTEXARRAYPROC_)(GLuint array);
+static PFNGLGENVERTEXARRAYSPROC_ gdraw_glGenVertexArrays = NULL;
+static PFNGLBINDVERTEXARRAYPROC_ gdraw_glBindVertexArray = NULL;
+static GLuint gdraw_vao = 0;
+
+typedef void(APIENTRYP gdraw_vtxattrib_fn)(GLuint, GLint, GLenum, GLboolean,
+ GLsizei, const void*);
+static gdraw_vtxattrib_fn gdraw_real_vtxattrib = NULL;
+static GLuint gdraw_screenvbo = 0;
+static const void* gdraw_screenvbo_base = NULL;
+static size_t gdraw_expected_vbo_size = 0;
+
+typedef void(APIENTRYP gdraw_drawelements_fn)(GLenum mode, GLsizei count,
+ GLenum type, const void* indices);
+static gdraw_drawelements_fn gdraw_real_drawelements = NULL;
+static GLuint gdraw_screenibo = 0;
+
+typedef GLuint(APIENTRYP gdraw_createshader_fn)(GLenum);
+typedef void(APIENTRYP gdraw_shadersource_fn)(GLuint, GLsizei, const GLchar**,
+ const GLint*);
+typedef void(APIENTRYP gdraw_compileshader_fn)(GLuint);
+typedef void(APIENTRYP gdraw_linkprogram_fn)(GLuint);
+static gdraw_createshader_fn gdraw_real_createshader = NULL;
+static gdraw_shadersource_fn gdraw_real_shadersource = NULL;
+static gdraw_compileshader_fn gdraw_real_compileshader = NULL;
+static gdraw_linkprogram_fn gdraw_real_linkprogram = NULL;
+
+// some core reject p0
+
+typedef void(APIENTRYP gdraw_useprogram_fn)(GLuint);
+static gdraw_useprogram_fn gdraw_real_useprogram = NULL;
+static GLuint gdraw_null_program = 0;
+
+typedef void(APIENTRYP gdraw_teximage2d_fn)(GLenum, GLint, GLint, GLsizei,
+ GLsizei, GLint, GLenum, GLenum,
+ const void*);
+typedef void(APIENTRYP gdraw_texsubimage2d_fn)(GLenum, GLint, GLint, GLint,
+ GLsizei, GLsizei, GLenum, GLenum,
+ const void*);
+static gdraw_teximage2d_fn gdraw_real_teximage2d = NULL;
+static gdraw_texsubimage2d_fn gdraw_real_texsubimage2d = NULL;
+
+#define TRY(ptr, arb, core) \
+ do { \
+ void* _p = get_gl_proc(core); \
+ if (!_p) _p = get_gl_proc(arb); \
+ *(void**)&(ptr) = _p; \
+ } while (0)
+
+static void load_extensions(void) {
+// gl_shared requires ts shit ugh
+#define GLE(id, import, procname) \
+ gl##id = (PFNGL##procname##PROC)get_gl_proc("gl" import);
+ GDRAW_GL_EXTENSION_LIST
+#undef GLE
+
+ TRY(glCreateShader, "glCreateShaderObjectARB", "glCreateShader");
+ TRY(glDeleteShader, "glDeleteObjectARB", "glDeleteShader");
+ TRY(glShaderSource, "glShaderSourceARB", "glShaderSource");
+ TRY(glCompileShader, "glCompileShaderARB", "glCompileShader");
+ TRY(glGetShaderiv, "glGetObjectParameterivARB", "glGetShaderiv");
+ TRY(glGetShaderInfoLog, "glGetInfoLogARB", "glGetShaderInfoLog");
+ TRY(glCreateProgram, "glCreateProgramObjectARB", "glCreateProgram");
+ TRY(glDeleteProgram, "glDeleteObjectARB", "glDeleteProgram");
+ TRY(glAttachShader, "glAttachObjectARB", "glAttachShader");
+ TRY(glLinkProgram, "glLinkProgramARB", "glLinkProgram");
+ TRY(glGetUniformLocation, "glGetUniformLocationARB",
+ "glGetUniformLocation");
+ TRY(glUseProgram, "glUseProgramObjectARB", "glUseProgram");
+ TRY(glGetProgramiv, "glGetObjectParameterivARB", "glGetProgramiv");
+ TRY(glGetProgramInfoLog, "glGetInfoLogARB", "glGetProgramInfoLog");
+ TRY(glUniform1i, "glUniform1iARB", "glUniform1i");
+ TRY(glUniform4f, "glUniform4fARB", "glUniform4f");
+ TRY(glUniform4fv, "glUniform4fvARB", "glUniform4fv");
+ TRY(glUniform1f, "glUniform1fARB", "glUniform1f");
+ TRY(glBindAttribLocation, "glBindAttribLocationARB",
+ "glBindAttribLocation");
+
+ TRY(glGenBuffers, "glGenBuffersARB", "glGenBuffers");
+ TRY(glDeleteBuffers, "glDeleteBuffersARB", "glDeleteBuffers");
+ TRY(glBindBuffer, "glBindBufferARB", "glBindBuffer");
+ TRY(glBufferData, "glBufferDataARB", "glBufferData");
+ TRY(glMapBuffer, "glMapBufferARB", "glMapBuffer");
+ TRY(glUnmapBuffer, "glUnmapBufferARB", "glUnmapBuffer");
+ TRY(glVertexAttribPointer, "glVertexAttribPointerARB",
+ "glVertexAttribPointer");
+ TRY(glEnableVertexAttribArray, "glEnableVertexAttribArrayARB",
+ "glEnableVertexAttribArray");
+ TRY(glDisableVertexAttribArray, "glDisableVertexAttribArrayARB",
+ "glDisableVertexAttribArray");
+
+ TRY(glGenRenderbuffers, "glGenRenderbuffersEXT", "glGenRenderbuffers");
+ TRY(glDeleteRenderbuffers, "glDeleteRenderbuffersEXT",
+ "glDeleteRenderbuffers");
+ TRY(glBindRenderbuffer, "glBindRenderbufferEXT", "glBindRenderbuffer");
+ TRY(glRenderbufferStorage, "glRenderbufferStorageEXT",
+ "glRenderbufferStorage");
+ TRY(glGenFramebuffers, "glGenFramebuffersEXT", "glGenFramebuffers");
+ TRY(glDeleteFramebuffers, "glDeleteFramebuffersEXT",
+ "glDeleteFramebuffers");
+ TRY(glBindFramebuffer, "glBindFramebufferEXT", "glBindFramebuffer");
+ TRY(glCheckFramebufferStatus, "glCheckFramebufferStatusEXT",
+ "glCheckFramebufferStatus");
+ TRY(glFramebufferRenderbuffer, "glFramebufferRenderbufferEXT",
+ "glFramebufferRenderbuffer");
+ TRY(glFramebufferTexture2D, "glFramebufferTexture2DEXT",
+ "glFramebufferTexture2D");
+ TRY(glGenerateMipmap, "glGenerateMipmapEXT", "glGenerateMipmap");
+ TRY(glBlitFramebuffer, "glBlitFramebufferEXT", "glBlitFramebuffer");
+ TRY(glRenderbufferStorageMultisample, "glRenderbufferStorageMultisampleEXT",
+ "glRenderbufferStorageMultisample");
+
+ // Save raw pointers before we #define over the names below
+ gdraw_real_vtxattrib =
+ (gdraw_vtxattrib_fn)get_gl_proc("glVertexAttribPointer");
+ gdraw_real_createshader =
+ (gdraw_createshader_fn)get_gl_proc("glCreateShader");
+ gdraw_real_shadersource =
+ (gdraw_shadersource_fn)get_gl_proc("glShaderSource");
+ gdraw_real_compileshader =
+ (gdraw_compileshader_fn)get_gl_proc("glCompileShader");
+ gdraw_real_linkprogram = (gdraw_linkprogram_fn)get_gl_proc("glLinkProgram");
+ gdraw_real_teximage2d = (gdraw_teximage2d_fn)get_gl_proc("glTexImage2D");
+ gdraw_real_texsubimage2d =
+ (gdraw_texsubimage2d_fn)get_gl_proc("glTexSubImage2D");
+ gdraw_real_useprogram = (gdraw_useprogram_fn)get_gl_proc("glUseProgram");
+ gdraw_real_drawelements =
+ (gdraw_drawelements_fn)get_gl_proc("glDrawElements");
+
+ gdraw_glGetStringi = (PFNGLGETSTRINGIPROC_)get_gl_proc("glGetStringi");
+ gdraw_glGenVertexArrays =
+ (PFNGLGENVERTEXARRAYSPROC_)get_gl_proc("glGenVertexArrays");
+ gdraw_glBindVertexArray =
+ (PFNGLBINDVERTEXARRAYPROC_)get_gl_proc("glBindVertexArray");
+
+ if (gdraw_glGenVertexArrays && gdraw_glBindVertexArray && gdraw_vao == 0) {
+ gdraw_glGenVertexArrays(1, &gdraw_vao);
+ gdraw_glBindVertexArray(gdraw_vao);
+ }
+}
+
+#undef TRY
+
+// rebind vbo
+
+static void clear_renderstate_platform_specific(void) {
+ if (gdraw_glBindVertexArray && gdraw_vao)
+ gdraw_glBindVertexArray(gdraw_vao);
+}
+
+static void error_msg_platform_specific(const char* msg) {
+ fprintf(stderr, "[GDraw] %s\n", msg);
+}
+
+#define GDRAW_PLATFORM_REPORT_GL_SITE(site) \
+ do { \
+ if ((site) != NULL) \
+ fprintf(stderr, "[GDraw] GL error site: %s\n", (site)); \
+ } while (0)
+
+#define GDRAW_MULTISAMPLING
+
+// i wish i could improve this function
+#ifdef RR_BREAK
+#undef RR_BREAK
+#endif
+#define RR_BREAK() \
+ do { \
+ fprintf(stderr, "[GDraw] GL error at %s:%d\n", __FILE__, __LINE__); \
+ } while (0)
+
+// the magic number that tropical told me
+#define GDRAW_MAX_SHADERS 64
+static struct {
+ GLuint handle;
+ GLenum type;
+} gdraw_shader_types[GDRAW_MAX_SHADERS];
+static int gdraw_shader_type_count = 0;
+
+static GLenum gdraw_get_shader_type(GLuint shader) {
+ for (int i = 0; i < gdraw_shader_type_count; i++)
+ if (gdraw_shader_types[i].handle == shader)
+ return gdraw_shader_types[i].type;
+ return GL_FRAGMENT_SHADER;
+}
+
+static GLuint gdraw_CreateShaderTracked(GLenum type) {
+ GLuint h = gdraw_real_createshader(type);
+ if (h && gdraw_shader_type_count < GDRAW_MAX_SHADERS) {
+ gdraw_shader_types[gdraw_shader_type_count].handle = h;
+ gdraw_shader_types[gdraw_shader_type_count].type = type;
+ gdraw_shader_type_count++;
+ }
+ return h;
+}
+
+static void gdraw_CompileShaderAndLog(GLuint shader) {
+ GLint status = 0;
+ gdraw_real_compileshader(shader);
+ glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
+ if (!status) {
+ char log[2048];
+ GLint len = 0;
+ glGetShaderInfoLog(shader, (GLsizei)sizeof(log) - 1, &len, log);
+ log[len] = '\0';
+ fprintf(stderr, "[GDraw GLSL] compile FAILED shader=%u:\n%s\n", shader,
+ log);
+ }
+}
+
+static void gdraw_LinkProgramAndLog(GLuint program) {
+ GLint status = 0;
+ gdraw_real_linkprogram(program);
+ glGetProgramiv(program, GL_LINK_STATUS, &status);
+ if (!status) {
+ char log[2048];
+ GLint len = 0;
+ glGetProgramInfoLog(program, (GLsizei)sizeof(log) - 1, &len, log);
+ log[len] = '\0';
+ fprintf(stderr, "[GDraw GLSL] link FAILED program=%u:\n%s\n", program,
+ log);
+ }
+}
+
+#undef glCreateShader
+#define glCreateShader gdraw_CreateShaderTracked
+
+// This is the part that turns the old ugly shaders to 330
+static char* gdraw_strreplace(char* src, const char* find, const char* rep) {
+ char* result;
+ char* pos;
+ char* base = src;
+ size_t find_len = strlen(find);
+ size_t rep_len = strlen(rep);
+ size_t count = 0;
+ char* tmp = src;
+
+ while ((tmp = strstr(tmp, find))) {
+ count++;
+ tmp += find_len;
+ }
+ if (!count) return src;
+
+ result = (char*)malloc(strlen(src) + count * (rep_len + 1) + 1);
+ if (!result) return src;
+
+ tmp = result;
+ while ((pos = strstr(src, find))) {
+ size_t before = (size_t)(pos - src);
+ memcpy(tmp, src, before);
+ tmp += before;
+ memcpy(tmp, rep, rep_len);
+ tmp += rep_len;
+ src = pos + find_len;
+ }
+ strcpy(tmp, src);
+ free(base);
+ return result;
+}
+
+static void gdraw_ShaderSourceUpgraded(GLuint shader, GLsizei count,
+ const GLchar** strings,
+ const GLint* lengths) {
+ size_t total = 0;
+ for (int i = 0; i < count; i++)
+ total += lengths ? (lengths[i] >= 0 ? (size_t)lengths[i]
+ : strlen(strings[i]))
+ : strlen(strings[i]);
+
+ char* src = (char*)malloc(total + 1);
+ if (!src) {
+ gdraw_real_shadersource(shader, count, strings, lengths);
+ return;
+ }
+
+ src[0] = '\0';
+ for (int i = 0; i < count; i++) {
+ size_t len = lengths ? (lengths[i] >= 0 ? (size_t)lengths[i]
+ : strlen(strings[i]))
+ : strlen(strings[i]);
+ strncat(src, strings[i], len);
+ }
+
+ int is_vert = (gdraw_get_shader_type(shader) == GL_VERTEX_SHADER);
+
+ // Strip any existing #version directive as i'll add our own
+ {
+ char* vp = strstr(src, "#version");
+ if (vp) {
+ char* nl = strchr(vp, '\n');
+ if (nl)
+ memmove(vp, nl + 1, strlen(nl + 1) + 1);
+ else
+ *vp = '\0';
+ }
+ }
+
+ // Texture built-ins
+ src = gdraw_strreplace(src, "texture2DRect", "texture");
+ src = gdraw_strreplace(src, "texture2D", "texture");
+
+ // Attribute -> in
+ src = gdraw_strreplace(src, "attribute ", "in ");
+ src = gdraw_strreplace(src, "attribute\t", "in\t");
+ src = gdraw_strreplace(src, "attribute\n", "in\n");
+
+ // Varying -> out (vert) / in (frag)
+ if (is_vert) {
+ src = gdraw_strreplace(src, "varying ", "out ");
+ src = gdraw_strreplace(src, "varying\t", "out\t");
+ src = gdraw_strreplace(src, "varying\n", "out\n");
+ } else {
+ src = gdraw_strreplace(src, "varying ", "in ");
+ src = gdraw_strreplace(src, "varying\t", "in\t");
+ src = gdraw_strreplace(src, "varying\n", "in\n");
+ src = gdraw_strreplace(src, "gl_FragData[0]", "_gdraw_frag_out");
+ src = gdraw_strreplace(src, "gl_FragColor", "_gdraw_frag_out");
+ }
+
+ const char* header = is_vert
+ ? "#version 330 core\n"
+ : "#version 330 core\nout vec4 _gdraw_frag_out;\n";
+ char* patched = (char*)malloc(strlen(header) + strlen(src) + 2);
+ if (!patched) {
+ free(src);
+ gdraw_real_shadersource(shader, count, strings, lengths);
+ return;
+ }
+ strcpy(patched, header);
+ strcat(patched, src);
+ free(src);
+
+ const GLchar* patched_ptr = (const GLchar*)patched;
+ gdraw_real_shadersource(shader, 1, &patched_ptr, NULL);
+ free(patched);
+}
+
+#undef glShaderSource
+#define glShaderSource gdraw_ShaderSourceUpgraded
+
+// Remap all the deprecated internal formats to their modern equivalents
+// (idk why but just the word "swizzle" is cracking me up)
+static void gdraw_apply_swizzle(GLenum internal_fmt) {
+ if (internal_fmt == 0x1906 /* GL_ALPHA */ || internal_fmt == GL_RED) {
+ GLint sw[4] = {GL_ZERO, GL_ZERO, GL_ZERO, GL_RED};
+ glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, sw);
+ } else if (internal_fmt == 0x1909 /* GL_LUMINANCE */) {
+ GLint sw[4] = {GL_RED, GL_RED, GL_RED, GL_ONE};
+ glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, sw);
+ } else if (internal_fmt == 0x190A /* GL_LUMINANCE_ALPHA */) {
+ GLint sw[4] = {GL_RED, GL_RED, GL_RED, GL_GREEN};
+ glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, sw);
+ }
+}
+
+static GLenum gdraw_remap_fmt(GLenum fmt) {
+ switch (fmt) {
+ case 0x1906:
+ return GL_RED; // GL_ALPHA
+ case 0x1909:
+ return GL_RED; // GL_LUMINANCE
+ case 0x190A:
+ return GL_RG; // GL_LUMINANCE_ALPHA
+ case 0x8033:
+ return GL_RG; // GL_LUMINANCE4_ALPHA4
+ case 0x8045:
+ return GL_R8; // GL_LUMINANCE8
+ case 0x8048:
+ return GL_RG8; // GL_LUMINANCE8_ALPHA8
+ case 0x804F:
+ return GL_R8; // GL_INTENSITY4
+ case 0x8050:
+ return GL_R8; // GL_INTENSITY8
+ default:
+ return fmt;
+ }
+}
+
+static void gdraw_TexImage2D(GLenum target, GLint level, GLint ifmt, GLsizei w,
+ GLsizei h, GLint border, GLenum fmt, GLenum type,
+ const void* data) {
+ // ES strictly requires explicitly sized formats & stuff
+ if (ifmt == GL_RGBA && data == NULL) ifmt = GL_RGBA8;
+
+ GLenum new_ifmt = gdraw_remap_fmt((GLenum)ifmt);
+ GLenum new_fmt = gdraw_remap_fmt(fmt);
+ gdraw_real_teximage2d(target, level, (GLint)new_ifmt, w, h, border, new_fmt,
+ type, data);
+ if (new_ifmt != (GLenum)ifmt) gdraw_apply_swizzle((GLenum)ifmt);
+}
+
+static void gdraw_TexSubImage2D(GLenum target, GLint level, GLint xoff,
+ GLint yoff, GLsizei w, GLsizei h, GLenum fmt,
+ GLenum type, const void* data) {
+ GLenum new_fmt = gdraw_remap_fmt(fmt);
+ gdraw_real_texsubimage2d(target, level, xoff, yoff, w, h, new_fmt, type,
+ data);
+}
+
+#undef glTexImage2D
+#define glTexImage2D gdraw_TexImage2D
+#undef glTexSubImage2D
+#define glTexSubImage2D gdraw_TexSubImage2D
+
+// vbo emu
+static void gdraw_ClientVertexAttribPointer(GLuint index, GLint size,
+ GLenum type, GLboolean normalized,
+ GLsizei stride,
+ const void* pointer) {
+ if (gdraw_glBindVertexArray && gdraw_vao) {
+ GLint current_vao = 0;
+ glGetIntegerv(GL_VERTEX_ARRAY_BINDING, ¤t_vao);
+ if ((GLuint)current_vao != gdraw_vao)
+ gdraw_glBindVertexArray(gdraw_vao);
+ }
+
+ GLint current_vbo = 0;
+ glGetIntegerv(GL_ARRAY_BUFFER_BINDING, ¤t_vbo);
+
+ if (current_vbo != 0 && current_vbo != (GLint)gdraw_screenvbo) {
+ // no touchies
+ gdraw_real_vtxattrib(index, size, type, normalized, stride, pointer);
+ return;
+ }
+
+ if (pointer == NULL) {
+ gdraw_real_vtxattrib(index, size, type, normalized, stride, pointer);
+ return;
+ }
+
+ ptrdiff_t offset =
+ gdraw_screenvbo_base
+ ? ((const char*)pointer - (const char*)gdraw_screenvbo_base)
+ : -1;
+
+ if (gdraw_screenvbo_base == NULL || offset < 0 ||
+ offset >= (ptrdiff_t)gdraw_expected_vbo_size) {
+ if (!gdraw_screenvbo) glGenBuffers(1, &gdraw_screenvbo);
+ glBindBuffer(GL_ARRAY_BUFFER, gdraw_screenvbo);
+
+ size_t upload_size = gdraw_expected_vbo_size > 0
+ ? (gdraw_expected_vbo_size + 256)
+ : 65536;
+ glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)upload_size, pointer,
+ GL_STREAM_DRAW);
+
+ gdraw_screenvbo_base = pointer;
+ gdraw_real_vtxattrib(index, size, type, normalized, stride,
+ (const void*)0);
+ } else {
+ glBindBuffer(GL_ARRAY_BUFFER, gdraw_screenvbo);
+ gdraw_real_vtxattrib(index, size, type, normalized, stride,
+ (const void*)offset);
+ }
+}
+
+#undef glVertexAttribPointer
+#define glVertexAttribPointer gdraw_ClientVertexAttribPointer
+
+// fake ibo
+static void hooked_glDrawElements(GLenum mode, GLsizei count, GLenum type,
+ const void* indices) {
+ GLint current_ibo = 0;
+ glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, ¤t_ibo);
+
+ if (current_ibo == 0 && indices != NULL) {
+ if (!gdraw_screenibo) glGenBuffers(1, &gdraw_screenibo);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, gdraw_screenibo);
+
+ size_t index_size = (type == GL_UNSIGNED_SHORT) ? 2
+ : (type == GL_UNSIGNED_BYTE) ? 1
+ : 4;
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)(count * index_size),
+ indices, GL_STREAM_DRAW);
+
+ gdraw_real_drawelements(mode, count, type, (const void*)0);
+ } else {
+ gdraw_real_drawelements(mode, count, type, indices);
+ }
+}
+
+#define glDrawElements hooked_glDrawElements
+
+// dummy shader for glUseProgram(0) safety
+static void gdraw_UseProgramSafe(GLuint program) {
+ if (!program) {
+ if (!gdraw_null_program && gdraw_real_useprogram) {
+ const char* vs =
+ "#version 330 core\nvoid main(){gl_Position=vec4(0);}";
+ const char* fs =
+ "#version 330 core\nout vec4 c;\nvoid main(){c=vec4(0);}";
+ GLuint v = gdraw_real_createshader(GL_VERTEX_SHADER);
+ GLuint f = gdraw_real_createshader(GL_FRAGMENT_SHADER);
+ gdraw_real_shadersource(v, 1, &vs, NULL);
+ gdraw_real_shadersource(f, 1, &fs, NULL);
+ gdraw_real_compileshader(v);
+ gdraw_real_compileshader(f);
+ gdraw_null_program = glCreateProgram();
+ glAttachShader(gdraw_null_program, v);
+ glAttachShader(gdraw_null_program, f);
+ gdraw_real_linkprogram(gdraw_null_program);
+ glDeleteShader(v);
+ glDeleteShader(f);
+ }
+ gdraw_real_useprogram(gdraw_null_program);
+ return;
+ }
+ gdraw_real_useprogram(program);
+}
+
+#undef glUseProgram
+#define glUseProgram gdraw_UseProgramSafe
+#undef glCompileShader
+#define glCompileShader gdraw_CompileShaderAndLog
+#undef glLinkProgram
+#define glLinkProgram gdraw_LinkProgramAndLog
+
+static void gdraw_FramebufferRenderbufferSafe(GLenum target, GLenum attachment,
+ GLenum renderbuffertarget,
+ GLuint renderbuffer) {
+ static GLuint last_depth_rb = 0;
+
+ if (attachment == GL_DEPTH_ATTACHMENT) {
+ last_depth_rb = renderbuffer;
+ (glFramebufferRenderbuffer)(target, attachment, renderbuffertarget,
+ renderbuffer);
+ } else if (attachment == GL_STENCIL_ATTACHMENT) {
+ if (renderbuffer == last_depth_rb && renderbuffer != 0) {
+ // If identical, bind as packed depth-stencil to satisfy strict GLES
+ // ^ how greedy -n-
+ (glFramebufferRenderbuffer)(
+ target, 0x821A /* GL_DEPTH_STENCIL_ATTACHMENT */,
+ renderbuffertarget, renderbuffer);
+ } else {
+ (glFramebufferRenderbuffer)(target, attachment, renderbuffertarget,
+ renderbuffer);
+ }
+ } else {
+ (glFramebufferRenderbuffer)(target, attachment, renderbuffertarget,
+ renderbuffer);
+ }
+}
+#define glFramebufferRenderbuffer_SAFE gdraw_FramebufferRenderbufferSafe
+#define glFramebufferRenderbuffer glFramebufferRenderbuffer_SAFE
+
+#include "../../../Windows64/Iggy/gdraw/gdraw_gl_shared.inl"
+#undef glVertexAttribPointer
+#define glVertexAttribPointer gdraw_real_vtxattrib
+
+static int hasext_core(const char* name) {
+ GLint n = 0;
+ if (!gdraw_glGetStringi) return 0;
+ glGetIntegerv(GL_NUM_EXTENSIONS, &n);
+ for (GLint i = 0; i < n; i++) {
+ const char* e =
+ (const char*)gdraw_glGetStringi(GL_EXTENSIONS, (GLuint)i);
+ if (e && strcmp(e, name) == 0) return 1;
+ }
+ return 0;
+}
+
+static gdraw_draw_indexed_triangles* real_DrawIndexedTriangles = NULL;
+
+static void RADLINK hooked_DrawIndexedTriangles(GDrawRenderState* r,
+ GDrawPrimitive* prim,
+ GDrawVertexBuffer* buf,
+ GDrawStats* stats) {
+ if (buf == NULL && prim != NULL && prim->vertices != NULL) {
+ size_t stride = 8;
+ if (prim->vertex_format == GDRAW_vformat_v2aa)
+ stride = 16;
+ else if (prim->vertex_format == GDRAW_vformat_v2tc2)
+ stride = 16;
+ else if (prim->vertex_format == GDRAW_vformat_ihud1)
+ stride = 20;
+ gdraw_expected_vbo_size = prim->num_vertices * stride;
+ } else {
+ gdraw_expected_vbo_size = 0;
+ }
+ gdraw_screenvbo_base = NULL; // Force VBO re-upload for each primitive
+ real_DrawIndexedTriangles(r, prim, buf, stats);
+}
+
+static gdraw_filter_quad* real_FilterQuad = NULL;
+
+static void RADLINK hooked_FilterQuad(GDrawRenderState* r, S32 x0, S32 y0,
+ S32 x1, S32 y1, GDrawStats* stats) {
+ gdraw_expected_vbo_size = 4 * 20; // 4 vertices, max stride
+ gdraw_screenvbo_base = NULL;
+ real_FilterQuad(r, x0, y0, x1, y1, stats);
+}
+
+static gdraw_rendering_begin* real_RenderingBegin = NULL;
+
+// stupid hack
+static void RADLINK hooked_RenderingBegin(void) {
+ if (real_RenderingBegin) real_RenderingBegin();
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_CULL_FACE);
+ OPENGL_CHECK_SITE("hooked_RenderingBegin:post_state");
+}
+
+// Creating the context
+GDrawFunctions* gdraw_GL_CreateContext(S32 w, S32 h, S32 msaa_samples) {
+ static const TextureFormatDesc tex_formats[] = {
+ {IFT_FORMAT_rgba_8888, 1, 1, 4, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE},
+ {IFT_FORMAT_rgba_4444_LE, 1, 1, 2, GL_RGBA4, GL_RGBA,
+ GL_UNSIGNED_SHORT_4_4_4_4},
+ {IFT_FORMAT_rgba_5551_LE, 1, 1, 2, GL_RGB5_A1, GL_RGBA,
+ GL_UNSIGNED_SHORT_5_5_5_1},
+ {IFT_FORMAT_la_88, 1, 1, 2, GL_LUMINANCE8_ALPHA8, GL_LUMINANCE_ALPHA,
+ GL_UNSIGNED_BYTE},
+ {IFT_FORMAT_la_44, 1, 1, 1, GL_LUMINANCE4_ALPHA4, GL_LUMINANCE_ALPHA,
+ GL_UNSIGNED_BYTE},
+ {IFT_FORMAT_i_8, 1, 1, 1, GL_INTENSITY8, GL_ALPHA, GL_UNSIGNED_BYTE},
+ {IFT_FORMAT_i_4, 1, 1, 1, GL_INTENSITY4, GL_ALPHA, GL_UNSIGNED_BYTE},
+ {IFT_FORMAT_l_8, 1, 1, 1, GL_LUMINANCE8, GL_LUMINANCE,
+ GL_UNSIGNED_BYTE},
+ {IFT_FORMAT_l_4, 1, 1, 1, GL_LUMINANCE4, GL_LUMINANCE,
+ GL_UNSIGNED_BYTE},
+ {IFT_FORMAT_DXT1, 4, 4, 8, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 0,
+ GL_UNSIGNED_BYTE},
+ {IFT_FORMAT_DXT3, 4, 4, 16, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, 0,
+ GL_UNSIGNED_BYTE},
+ {IFT_FORMAT_DXT5, 4, 4, 16, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 0,
+ GL_UNSIGNED_BYTE},
+ {0, 0, 0, 0, 0, 0, 0},
+ };
+
+ GLint major = 0, minor = 0;
+ glGetIntegerv(GL_MAJOR_VERSION, &major);
+ glGetIntegerv(GL_MINOR_VERSION, &minor);
+ if (major < 3) {
+ fprintf(stderr, "[GDraw] GL 3.0 or higher required (got %d.%d)\n",
+ major, minor);
+ return NULL;
+ }
+
+ load_extensions();
+
+ if (gdraw_glBindVertexArray && gdraw_vao)
+ gdraw_glBindVertexArray(gdraw_vao);
+
+ GDrawFunctions* funcs = create_context(w, h);
+ if (!funcs) return NULL;
+
+ // hook the vtable entries for VBO reset and render state
+ real_DrawIndexedTriangles = funcs->DrawIndexedTriangles;
+ funcs->DrawIndexedTriangles = hooked_DrawIndexedTriangles;
+
+ real_FilterQuad = funcs->FilterQuad;
+ funcs->FilterQuad = hooked_FilterQuad;
+
+ real_RenderingBegin = funcs->RenderingBegin;
+ funcs->RenderingBegin = hooked_RenderingBegin;
+ funcs->ClearID = gdraw_ClearID;
+
+ gdraw->tex_formats = tex_formats;
+ gdraw->has_mapbuffer = false;
+ gdraw->has_depth24 = true;
+ gdraw->has_texture_max_level = true;
+
+ gdraw->has_packed_depth_stencil = true;
+
+ GLint n = 0;
+ glGetIntegerv(GL_MAX_TEXTURE_SIZE, &n);
+ gdraw->has_conditional_non_power_of_two = (n < 8192);
+
+ if (msaa_samples > 1) {
+ glGetIntegerv(GL_MAX_SAMPLES, &n);
+ gdraw->multisampling = RR_MIN(msaa_samples, n);
+ }
+
+ opengl_check();
+ fprintf(stderr, "[GDraw] Context created successfully (%dx%d, msaa=%d)\n",
+ w, h, msaa_samples);
+ return funcs;
+}
+
+// Custom draw callbacks
+void gdraw_GL_BeginCustomDraw_4J(IggyCustomDrawCallbackRegion* region,
+ F32* matrix) {
+ // rebind vbo
+ if (gdraw_glBindVertexArray && gdraw_vao)
+ gdraw_glBindVertexArray(gdraw_vao);
+ clear_renderstate();
+ gdraw_GetObjectSpaceMatrix(matrix, region->o2w, gdraw->projection,
+ depth_from_id(0), 0);
+}
+
+void gdraw_GL_CalculateCustomDraw_4J(IggyCustomDrawCallbackRegion* region,
+ F32* matrix) {
+ gdraw_GetObjectSpaceMatrix(matrix, region->o2w, gdraw->projection, 0.0f, 0);
+}
diff --git a/Minecraft.Client/Platform/Linux/Iggy/gdraw/gdraw_sdl.h b/Minecraft.Client/Platform/Linux/Iggy/gdraw/gdraw.h
similarity index 94%
rename from Minecraft.Client/Platform/Linux/Iggy/gdraw/gdraw_sdl.h
rename to Minecraft.Client/Platform/Linux/Iggy/gdraw/gdraw.h
index 063660297..326d5c5a5 100644
--- a/Minecraft.Client/Platform/Linux/Iggy/gdraw/gdraw_sdl.h
+++ b/Minecraft.Client/Platform/Linux/Iggy/gdraw/gdraw.h
@@ -1,7 +1,9 @@
-#ifndef __RAD_INCLUDE_GDRAW_SDL_H__
-#define __RAD_INCLUDE_GDRAW_SDL_H__
+#ifndef __LINUX_IGGY_GDRAW_H__
+#define __LINUX_IGGY_GDRAW_H__
+
#include "../../../Windows64/Iggy/include/gdraw.h"
#include "../../../Windows64/Iggy/include/iggy.h"
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -34,4 +36,5 @@ extern void gdraw_GL_DestroyTextureFromResource(GDrawTexture *tex);
#ifdef __cplusplus
}
#endif
-#endif // __RAD_INCLUDE_GDRAW_SDL_H__
\ No newline at end of file
+
+#endif // __LINUX_IGGY_GDRAW_H__
\ No newline at end of file
diff --git a/Minecraft.Client/Platform/Linux/Iggy/gdraw/gdraw_sdl.c b/Minecraft.Client/Platform/Linux/Iggy/gdraw/gdraw_sdl.c
deleted file mode 100644
index 7e3506367..000000000
--- a/Minecraft.Client/Platform/Linux/Iggy/gdraw/gdraw_sdl.c
+++ /dev/null
@@ -1,240 +0,0 @@
-// Rewrite of gdraw_GLFW to gdraw_SDL
-// I hope iggy gets fully implemented rrlllly quickly <3
-#define GDRAW_ASSERTS
-
-#include "../../../Windows64/Iggy/include/iggy.h"
-#include "../../../Windows64/Iggy/include/gdraw.h"
-#include "gdraw_sdl.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#define true 1
-#define false 0
-
-// Say hi to sdl
-
-#ifndef _ENABLEIGGY
-void *IggyGDrawMallocAnnotated(SINTa size, const char *file, int line)
-{
- (void)file; (void)line;
- return malloc((size_t)size);
-}
-
-void IggyGDrawFree(void *ptr)
-{
- free(ptr);
-}
-
-void IggyGDrawSendWarning(Iggy *f, char const *message, ...)
-{
- (void)f;
- va_list args;
- va_start(args, message);
- fprintf(stderr, "[Iggy GDraw Warning] ");
- vfprintf(stderr, message, args);
- fprintf(stderr, "\n");
- va_end(args);
-}
-
-void IggyDiscardVertexBufferCallback(void *owner, void *buf)
-{
- (void)owner; (void)buf;
-}
-#endif
-
-// glActiveTexture and glCompressedTexImage2D are core GL 1.3+ on Linux and
-// are declared directly in , so they are omitted from this list.
-#define GDRAW_GL_EXTENSION_LIST \
-/* identifier import procname */ \
-/* GL_ARB_vertex_buffer_object */ \
-GLE(GenBuffers, "GenBuffersARB", GENBUFFERSARB) \
-GLE(DeleteBuffers, "DeleteBuffersARB", DELETEBUFFERSARB) \
-GLE(BindBuffer, "BindBufferARB", BINDBUFFERARB) \
-GLE(BufferData, "BufferDataARB", BUFFERDATAARB) \
-GLE(MapBuffer, "MapBufferARB", MAPBUFFERARB) \
-GLE(UnmapBuffer, "UnmapBufferARB", UNMAPBUFFERARB) \
-GLE(VertexAttribPointer, "VertexAttribPointerARB", VERTEXATTRIBPOINTERARB) \
-GLE(EnableVertexAttribArray, "EnableVertexAttribArrayARB", ENABLEVERTEXATTRIBARRAYARB) \
-GLE(DisableVertexAttribArray, "DisableVertexAttribArrayARB", DISABLEVERTEXATTRIBARRAYARB) \
-/* GL_ARB_shader_objects */ \
-GLE(CreateShader, "CreateShaderObjectARB", CREATESHADEROBJECTARB) \
-GLE(DeleteShader, "DeleteObjectARB", DELETEOBJECTARB) \
-GLE(ShaderSource, "ShaderSourceARB", SHADERSOURCEARB) \
-GLE(CompileShader, "CompileShaderARB", COMPILESHADERARB) \
-GLE(GetShaderiv, "GetObjectParameterivARB", GETOBJECTPARAMETERIVARB) \
-GLE(GetShaderInfoLog, "GetInfoLogARB", GETINFOLOGARB) \
-GLE(CreateProgram, "CreateProgramObjectARB", CREATEPROGRAMOBJECTARB) \
-GLE(DeleteProgram, "DeleteObjectARB", DELETEOBJECTARB) \
-GLE(AttachShader, "AttachObjectARB", ATTACHOBJECTARB) \
-GLE(LinkProgram, "LinkProgramARB", LINKPROGRAMARB) \
-GLE(GetUniformLocation, "GetUniformLocationARB", GETUNIFORMLOCATIONARB) \
-GLE(UseProgram, "UseProgramObjectARB", USEPROGRAMOBJECTARB) \
-GLE(GetProgramiv, "GetObjectParameterivARB", GETOBJECTPARAMETERIVARB) \
-GLE(GetProgramInfoLog, "GetInfoLogARB", GETINFOLOGARB) \
-GLE(Uniform1i, "Uniform1iARB", UNIFORM1IARB) \
-GLE(Uniform4f, "Uniform4fARB", UNIFORM4FARB) \
-GLE(Uniform4fv, "Uniform4fvARB", UNIFORM4FVARB) \
-/* GL_ARB_vertex_shader */ \
-GLE(BindAttribLocation, "BindAttribLocationARB", BINDATTRIBLOCATIONARB) \
-/* Missing from WGL but needed by shared code */ \
-GLE(Uniform1f, "Uniform1fARB", UNIFORM1FARB) \
-/* GL_EXT_framebuffer_object */ \
-GLE(GenRenderbuffers, "GenRenderbuffersEXT", GENRENDERBUFFERSEXT) \
-GLE(DeleteRenderbuffers, "DeleteRenderbuffersEXT", DELETERENDERBUFFERSEXT) \
-GLE(BindRenderbuffer, "BindRenderbufferEXT", BINDRENDERBUFFEREXT) \
-GLE(RenderbufferStorage, "RenderbufferStorageEXT", RENDERBUFFERSTORAGEEXT) \
-GLE(GenFramebuffers, "GenFramebuffersEXT", GENFRAMEBUFFERSEXT) \
-GLE(DeleteFramebuffers, "DeleteFramebuffersEXT", DELETEFRAMEBUFFERSEXT) \
-GLE(BindFramebuffer, "BindFramebufferEXT", BINDFRAMEBUFFEREXT) \
-GLE(CheckFramebufferStatus, "CheckFramebufferStatusEXT", CHECKFRAMEBUFFERSTATUSEXT) \
-GLE(FramebufferRenderbuffer, "FramebufferRenderbufferEXT", FRAMEBUFFERRENDERBUFFEREXT) \
-GLE(FramebufferTexture2D, "FramebufferTexture2DEXT", FRAMEBUFFERTEXTURE2DEXT) \
-GLE(GenerateMipmap, "GenerateMipmapEXT", GENERATEMIPMAPEXT) \
-/* GL_EXT_framebuffer_blit */ \
-GLE(BlitFramebuffer, "BlitFramebufferEXT", BLITFRAMEBUFFEREXT) \
-/* GL_EXT_framebuffer_multisample */ \
-GLE(RenderbufferStorageMultisample, "RenderbufferStorageMultisampleEXT",RENDERBUFFERSTORAGEMULTISAMPLEEXT) \
-/* */
-
-#define gdraw_GLx_(id) gdraw_GL_##id
-#define GDRAW_GLx_(id) GDRAW_GL_##id
-#define GDRAW_SHADERS "gdraw_gl_shaders.inl"
-
-// On Linux, GLhandleARB is void* but shader functions use GLuint values.
-// Use GLuint as our handle type, matching the Mac pattern from gdraw_gl_shared.inl.
-#define GDrawGLProgram GLuint
-typedef GLuint GLhandle;
-typedef gdraw_gl_resourcetype gdraw_resourcetype;
-
-// Declare extension function pointers
-#define GLE(id, import, procname) static PFNGL##procname##PROC gl##id;
-GDRAW_GL_EXTENSION_LIST
-#undef GLE
-
-static void load_extensions(void)
-{
- #define GLE(id, import, procname) \
- gl##id = (PFNGL##procname##PROC) SDL_GL_GetProcAddress("gl" import);
- GDRAW_GL_EXTENSION_LIST
- #undef GLE
-}
-
-static void clear_renderstate_platform_specific(void)
-{
- glDisable(GL_ALPHA_TEST);
-}
-
-static void error_msg_platform_specific(const char *msg)
-{
- fprintf(stderr, "[GDraw SDL] %s\n", msg);
-}
-
-#define GDRAW_MULTISAMPLING
-
-// Suppress SIGTRAP from GL debug assertions on Linux
-#ifdef RR_BREAK
-#undef RR_BREAK
-#endif
-#define RR_BREAK() \
- do { fprintf(stderr, "[GDraw] RR_BREAK suppressed (GL error)\n"); } while(0)
-
-#include "../../../Windows64/Iggy/gdraw/gdraw_gl_shared.inl"
-
-// Context creation and management
-
-GDrawFunctions *gdraw_GL_CreateContext(S32 w, S32 h, S32 msaa_samples)
-{
- static const TextureFormatDesc tex_formats[] = {
- { IFT_FORMAT_rgba_8888, 1, 1, 4, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE },
- { IFT_FORMAT_rgba_4444_LE, 1, 1, 2, GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4 },
- { IFT_FORMAT_rgba_5551_LE, 1, 1, 2, GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1 },
- { IFT_FORMAT_la_88, 1, 1, 2, GL_LUMINANCE8_ALPHA8, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE },
- { IFT_FORMAT_la_44, 1, 1, 1, GL_LUMINANCE4_ALPHA4, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE },
- { IFT_FORMAT_i_8, 1, 1, 1, GL_INTENSITY8, GL_ALPHA, GL_UNSIGNED_BYTE },
- { IFT_FORMAT_i_4, 1, 1, 1, GL_INTENSITY4, GL_ALPHA, GL_UNSIGNED_BYTE },
- { IFT_FORMAT_l_8, 1, 1, 1, GL_LUMINANCE8, GL_LUMINANCE, GL_UNSIGNED_BYTE },
- { IFT_FORMAT_l_4, 1, 1, 1, GL_LUMINANCE4, GL_LUMINANCE, GL_UNSIGNED_BYTE },
- { IFT_FORMAT_DXT1, 4, 4, 8, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 0, GL_UNSIGNED_BYTE },
- { IFT_FORMAT_DXT3, 4, 4, 16, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, 0, GL_UNSIGNED_BYTE },
- { IFT_FORMAT_DXT5, 4, 4, 16, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 0, GL_UNSIGNED_BYTE },
- { 0, 0, 0, 0, 0, 0, 0 },
- };
-
- GDrawFunctions *funcs;
- const char *s;
- GLint n;
-
- // A current SDL2 GL context must be active before calling this, if it doesn't exist, just throw an warning-
- s = (const char *) glGetString(GL_EXTENSIONS);
- if (!s) {
- fprintf(stderr, "[GDraw SDL] glGetString(GL_EXTENSIONS) returned NULL - "
- "SDL GL context not current?\n");
- assert(s != NULL);
- return NULL;
- }
-
- // Verify required extensions
- if (!hasext(s, "GL_ARB_multitexture") ||
- !hasext(s, "GL_ARB_texture_compression") ||
- !hasext(s, "GL_ARB_texture_mirrored_repeat") ||
- !hasext(s, "GL_ARB_texture_non_power_of_two") ||
- !hasext(s, "GL_ARB_vertex_buffer_object") ||
- !hasext(s, "GL_EXT_framebuffer_object") ||
- !hasext(s, "GL_ARB_shader_objects") ||
- !hasext(s, "GL_ARB_vertex_shader") ||
- !hasext(s, "GL_ARB_fragment_shader"))
- {
- fprintf(stderr, "[GDraw SDL] Required GL extensions not available\n");
- return NULL;
- }
-
- if (!hasext(s, "GL_EXT_framebuffer_multisample") && msaa_samples > 1)
- return NULL;
-
- load_extensions();
- funcs = create_context(w, h);
- if (!funcs)
- return NULL;
-
- gdraw->tex_formats = tex_formats;
-
- gdraw->has_mapbuffer = true; // core in ARB_vertex_buffer_object
- gdraw->has_depth24 = true;
- gdraw->has_texture_max_level = true; // core GL
-
- if (hasext(s, "GL_EXT_packed_depth_stencil"))
- gdraw->has_packed_depth_stencil = true;
-
- glGetIntegerv(GL_MAX_TEXTURE_SIZE, &n);
- gdraw->has_conditional_non_power_of_two = (n < 8192);
-
- if (msaa_samples > 1) {
- glGetIntegerv(GL_MAX_SAMPLES, &n);
- gdraw->multisampling = RR_MIN(msaa_samples, n);
- }
-
- opengl_check();
-
- fprintf(stderr, "[GDraw SDL] Context created successfully (%dx%d, msaa=%d)\n",
- w, h, msaa_samples);
- return funcs;
-}
-
-void gdraw_GL_BeginCustomDraw_4J(IggyCustomDrawCallbackRegion *region, F32 *matrix)
-{
- clear_renderstate();
- gdraw_GetObjectSpaceMatrix(matrix, region->o2w, gdraw->projection, depth_from_id(0), 0);
-}
-
-void gdraw_GL_CalculateCustomDraw_4J(IggyCustomDrawCallbackRegion *region, F32 *matrix)
-{
- gdraw_GetObjectSpaceMatrix(matrix, region->o2w, gdraw->projection, 0.0f, 0);
-}
diff --git a/Minecraft.Client/Platform/Linux/LinuxGL.cpp b/Minecraft.Client/Platform/Linux/LinuxGL.cpp
index 351bb5d24..c7fff72d5 100644
--- a/Minecraft.Client/Platform/Linux/LinuxGL.cpp
+++ b/Minecraft.Client/Platform/Linux/LinuxGL.cpp
@@ -1,135 +1,113 @@
#ifdef __linux__
#include "../stdafx.h"
-
-#include
-#include
-#include
-#include
+#include "4J_Render.h"
#include "../../Minecraft.World/IO/Streams/IntBuffer.h"
#include "../../Minecraft.World/IO/Streams/FloatBuffer.h"
#include "../../Minecraft.World/IO/Streams/ByteBuffer.h"
-void LinuxGLLogLightmapState(const char* stage, int textureId, bool scaleLight) {
- static int logCount = 0;
- if (logCount >= 16) return;
+extern C4JRender RenderManager;
- ++logCount;
+#ifdef GLES
+extern "C" {
+extern void glClearDepthf(float depth);
+void glClearDepth(double depth) { glClearDepthf((float)depth); }
+void glTexGeni(unsigned int, unsigned int, int) {}
+void glTexGenfv(unsigned int, unsigned int, const float*) {}
+void glTexCoordPointer(int, unsigned int, int, const void*) {}
+void glNormalPointer(unsigned int, int, const void*) {}
+void glColorPointer(int, unsigned int, int, const void*) {}
+void glVertexPointer(int, unsigned int, int, const void*) {}
+void glEndList(void) {}
+void glCallLists(int, unsigned int, const void*) {}
+}
+#endif
- static bool loggedSymbols = false;
- if (!loggedSymbols) {
- loggedSymbols = true;
- app.DebugPrintf(
- "[linux-lightmap] linuxgl symbols glActiveTexture=%p "
- "glClientActiveTexture=%p glMultiTexCoord2f=%p\n",
- reinterpret_cast(::glActiveTexture),
- reinterpret_cast(::glClientActiveTexture),
- reinterpret_cast(::glMultiTexCoord2f));
+inline int* getIntPtr(IntBuffer* buf) {
+ return buf ? (int*)buf->getBuffer() + buf->position() : nullptr;
+}
+inline void* getBytePtr(ByteBuffer* buf) {
+ return buf ? (char*)buf->getBuffer() + buf->position() : nullptr;
+}
+
+void glGenTextures_4J(IntBuffer* buf) {
+ if (!buf) return;
+ int n = buf->limit() - buf->position();
+ int* dst = getIntPtr(buf);
+ for (int i = 0; i < n; i++) dst[i] = RenderManager.TextureCreate();
+}
+
+void glDeleteTextures_4J(IntBuffer* buf) {
+ if (!buf) return;
+ int n = buf->limit() - buf->position();
+ int* src = getIntPtr(buf);
+ for (int i = 0; i < n; i++) RenderManager.TextureFree(src[i]);
+}
+
+void glTexImage2D_4J(int target, int level, int internalformat, int width,
+ int height, int border, int format, int type,
+ ByteBuffer* pixels) {
+ (void)target;
+ (void)internalformat;
+ (void)border;
+ (void)format;
+ (void)type;
+ RenderManager.TextureData(width, height, getBytePtr(pixels), level,
+ C4JRender::TEXTURE_FORMAT_RxGyBzAw);
+}
+
+void glLight_4J(int light, int pname, FloatBuffer* params) {
+ const float* p = params->_getDataPointer();
+ int idx = (light == 0x4001) ? 1 : 0;
+ if (pname == 0x1203)
+ RenderManager.StateSetLightDirection(idx, p[0], p[1], p[2]);
+ else if (pname == 0x1201)
+ RenderManager.StateSetLightColour(idx, p[0], p[1], p[2]);
+ else if (pname == 0x1200)
+ RenderManager.StateSetLightAmbientColour(p[0], p[1], p[2]);
+}
+
+void glLightModel_4J(int pname, FloatBuffer* params) {
+ if (pname == 0x0B53) {
+ const float* p = params->_getDataPointer();
+ RenderManager.StateSetLightAmbientColour(p[0], p[1], p[2]);
}
-
- GLint activeTexture = 0;
- GLint matrixMode = 0;
- ::glGetIntegerv(GL_ACTIVE_TEXTURE, &activeTexture);
- ::glGetIntegerv(GL_MATRIX_MODE, &matrixMode);
-
- const GLint restoreTexture = activeTexture;
- ::glActiveTexture(GL_TEXTURE1);
-
- GLint unit1Binding = 0;
- ::glGetIntegerv(GL_TEXTURE_BINDING_2D, &unit1Binding);
- const bool unit1Enabled = (::glIsEnabled(GL_TEXTURE_2D) == GL_TRUE);
-
- GLfloat textureMatrix[16];
- ::glGetFloatv(GL_TEXTURE_MATRIX, textureMatrix);
-
- ::glActiveTexture(restoreTexture);
-
- app.DebugPrintf(
- "[linux-lightmap] %s tex=%d scale=%d active=%#x matrixMode=%#x "
- "unit1Bound=%d unit1Enabled=%d texMatrix=[%.4f %.4f %.4f %.4f]\n",
- stage, textureId, scaleLight ? 1 : 0, activeTexture, matrixMode,
- unit1Binding, unit1Enabled ? 1 : 0, textureMatrix[0], textureMatrix[5],
- textureMatrix[12], textureMatrix[13]);
}
-int glGenTextures() {
- GLuint id = 0;
- ::glGenTextures(1, &id);
- return (int)id;
+void glFog_4J(int pname, FloatBuffer* params) {
+ const float* p = params->_getDataPointer();
+ if (pname == 0x0B66) RenderManager.StateSetFogColour(p[0], p[1], p[2]);
}
-void glGenTextures(IntBuffer* buf) {
- GLuint id = 0;
- ::glGenTextures(1, &id);
- buf->put((int)id);
- buf->flip();
+void glGetFloat_4J(int pname, FloatBuffer* params) {
+ const float* m = RenderManager.MatrixGet(pname);
+ if (m) memcpy(params->_getDataPointer(), m, 16 * sizeof(float));
}
-void glDeleteTextures(int id) {
- GLuint uid = (GLuint)id;
- ::glDeleteTextures(1, &uid);
-}
-
-void glDeleteTextures(IntBuffer* buf) {
- int id = buf->get(0);
- GLuint uid = (GLuint)id;
- ::glDeleteTextures(1, &uid);
-}
-
-void glLight(int light, int pname, FloatBuffer* params) {
- ::glLightfv((GLenum)light, (GLenum)pname, params->_getDataPointer());
-}
-
-void glLightModel(int pname, FloatBuffer* params) {
- ::glLightModelfv((GLenum)pname, params->_getDataPointer());
-}
-
-void glGetFloat(int pname, FloatBuffer* params) {
- ::glGetFloatv((GLenum)pname, params->_getDataPointer());
-}
-
-void glTexGen(int coord, int pname, FloatBuffer* params) {
- ::glTexGenfv((GLenum)coord, (GLenum)pname, params->_getDataPointer());
-}
-
-void glFog(int pname, FloatBuffer* params) {
- ::glFogfv((GLenum)pname, params->_getDataPointer());
-}
-
-void glTexCoordPointer(int size, int type, FloatBuffer* pointer) {
- ::glTexCoordPointer(size, (GLenum)type, 0, pointer->_getDataPointer());
-}
-
-void glNormalPointer(int type, ByteBuffer* pointer) {
- ::glNormalPointer((GLenum)type, 0, pointer->getBuffer());
-}
-
-void glColorPointer(int size, bool normalized, int stride,
- ByteBuffer* pointer) {
- (void)normalized;
- ::glColorPointer(size, GL_UNSIGNED_BYTE, stride, pointer->getBuffer());
-}
-
-void glVertexPointer(int size, int type, FloatBuffer* pointer) {
- ::glVertexPointer(size, (GLenum)type, 0, pointer->_getDataPointer());
-}
-
-void glEndList(int) { ::glEndList(); }
-
-void glTexImage2D(int target, int level, int internalformat, int width,
- int height, int border, int format, int type,
- ByteBuffer* pixels) {
- void* data = pixels ? pixels->getBuffer() : nullptr;
- ::glTexImage2D((GLenum)target, level, internalformat, width, height, border,
- (GLenum)format, (GLenum)type, data);
-}
-
-void glCallLists(IntBuffer* lists) {
+void glCallLists_4J(IntBuffer* lists) {
+ if (!lists) return;
int count = lists->limit() - lists->position();
- ::glCallLists(count, GL_INT, lists->getBuffer());
+ int* ids = getIntPtr(lists);
+ for (int i = 0; i < count; i++) RenderManager.CBuffCall(ids[i], false);
}
+void glReadPixels_4J(int x, int y, int w, int h, int f, int t, ByteBuffer* p) {
+ (void)f;
+ (void)t;
+ RenderManager.ReadPixels(x, y, w, h, getBytePtr(p));
+}
+
+// dead stubs
+void glTexCoordPointer_4J(int, int, FloatBuffer*) {}
+void glNormalPointer_4J(int, ByteBuffer*) {}
+void glColorPointer_4J(int, bool, int, ByteBuffer*) {}
+void glVertexPointer_4J(int, int, FloatBuffer*) {}
+void glEndList_4J(int) {}
+void glTexGen_4J(int, int, FloatBuffer*) {}
+
+// query objects
+#include
static PFNGLGENQUERIESARBPROC _glGenQueriesARB = nullptr;
static PFNGLBEGINQUERYARBPROC _glBeginQueryARB = nullptr;
static PFNGLENDQUERYARBPROC _glEndQueryARB = nullptr;
@@ -148,40 +126,41 @@ static void initQueryFuncs() {
RTLD_DEFAULT, "glGetQueryObjectuivARB");
}
-void glGenQueriesARB(IntBuffer* buf) {
+void glGenQueriesARB_4J(IntBuffer* buf) {
initQueryFuncs();
- if (_glGenQueriesARB) {
- GLuint id = 0;
- _glGenQueriesARB(1, &id);
- buf->put((int)id);
- buf->flip();
+ if (_glGenQueriesARB && buf) {
+ int n = buf->limit() - buf->position();
+ if (n > 0) _glGenQueriesARB(n, (GLuint*)getIntPtr(buf));
}
}
-void glBeginQueryARB(int target, int id) {
+void glBeginQueryARB_4J(int target, int id) {
initQueryFuncs();
if (_glBeginQueryARB) _glBeginQueryARB((GLenum)target, (GLuint)id);
}
-void glEndQueryARB(int target) {
+void glEndQueryARB_4J(int target) {
initQueryFuncs();
if (_glEndQueryARB) _glEndQueryARB((GLenum)target);
}
-void glGetQueryObjectuARB(int id, int pname, IntBuffer* params) {
+void glGetQueryObjectuARB_4J(int id, int pname, IntBuffer* params) {
initQueryFuncs();
- if (_glGetQueryObjectuivARB) {
- GLuint val = 0;
- _glGetQueryObjectuivARB((GLuint)id, (GLenum)pname, &val);
- params->put((int)val);
- params->flip();
- }
+ if (_glGetQueryObjectuivARB && params)
+ // LWJGL does not change limits/positions during these calls, it
+ // reads/writes exactly at pointer!!
+ _glGetQueryObjectuivARB((GLuint)id, (GLenum)pname,
+ (GLuint*)getIntPtr(params));
}
-
-void glReadPixels(int x, int y, int width, int height, int format, int type,
- ByteBuffer* pixels) {
- ::glReadPixels(x, y, width, height, (GLenum)format, (GLenum)type,
- pixels->getBuffer());
+void glGetFloat(int pname, FloatBuffer* params) {
+ glGetFloat_4J(pname, params);
}
-
-#endif
+void LinuxGLLogLightmapState(const char* stage, int textureId,
+ bool scaleLight) {
+ static int logCount = 0;
+ if (logCount >= 16) return;
+ ++logCount;
+ fprintf(stderr, "[linux-lightmap] %s tex=%d scale=%d\n", stage, textureId,
+ scaleLight ? 1 : 0);
+}
+#endif
\ No newline at end of file
diff --git a/Minecraft.Client/Platform/Linux/Linux_Minecraft.cpp b/Minecraft.Client/Platform/Linux/Linux_Minecraft.cpp
index 852dbb58c..f7cb7d184 100644
--- a/Minecraft.Client/Platform/Linux/Linux_Minecraft.cpp
+++ b/Minecraft.Client/Platform/Linux/Linux_Minecraft.cpp
@@ -5,7 +5,6 @@
#include
// #include
-#include
#if defined(__linux__) && defined(__GLIBC__)
#include
#include
@@ -710,16 +709,6 @@ void CleanupDevice() {
}
#endif
-int StartMinecraftThreadProc(void* lpParameter) {
- Vec3::UseDefaultThreadStorage();
- AABB::UseDefaultThreadStorage();
- Tesselator::CreateNewThreadStorage(1024 * 1024);
- RenderManager.InitialiseContext();
- Minecraft::start(std::wstring(), std::wstring());
- delete Tesselator::getInstance();
- return 0;
-}
-
int main(int argc, const char* argv[]) {
#if defined(__linux__) && defined(__GLIBC__)
struct sigaction sa;
@@ -867,8 +856,6 @@ return -1;
// Initialise TLS for tesselator, for this main thread
Tesselator::CreateNewThreadStorage(1024 * 1024);
// Initialise TLS for AABB and Vec3 pools, for this main thread
- AABB::CreateNewThreadStorage();
- Vec3::CreateNewThreadStorage();
Compression::CreateNewThreadStorage();
OldChunkStorage::CreateNewThreadStorage();
Level::enableLightingCache();
@@ -1103,9 +1090,6 @@ PIXEndNamedEvent();
}
// Fix for #7318 - Title crashes after short soak in the leaderboards
- // menu A memory leak was caused because the icon renderer kept creating
- // new Vec3's because the pool wasn't reset
- Vec3::resetPool();
} // end game loop
// Graceful shutdown: destroy GL context and GLFW before any C++ dtors run.
@@ -1202,7 +1186,7 @@ void FreeRichPresenceStrings() {
vRichPresenceStrings.clear();
}
-#ifdef MEMORY_TRACKING
+#if 0 // #ifdef MEMORY_TRACKING
int totalAllocGen = 0;
std::unordered_map allocCounts;
diff --git a/Minecraft.Client/Platform/Linux/Linux_UIController.cpp b/Minecraft.Client/Platform/Linux/Linux_UIController.cpp
index 4a39e85ef..855c10b9d 100644
--- a/Minecraft.Client/Platform/Linux/Linux_UIController.cpp
+++ b/Minecraft.Client/Platform/Linux/Linux_UIController.cpp
@@ -1,12 +1,8 @@
#include "../../../Minecraft.World/Platform/stdafx.h"
#include "Linux_UIController.h"
-// Temp
-#include "../../Minecraft.h"
-#include "../../Textures/Textures.h"
-
// GDraw GL backend for Linux
-#include "Iggy/gdraw/gdraw_sdl.h"
+#include "Iggy/gdraw/gdraw.h"
ConsoleUIController ui;
@@ -22,14 +18,12 @@ static void restoreFixedFunctionStateAfterIggy() {
glClientActiveTexture(GL_TEXTURE1);
glActiveTexture(GL_TEXTURE1);
glDisable(GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glClientActiveTexture(GL_TEXTURE0);
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
@@ -54,7 +48,7 @@ void ConsoleUIController::init(S32 w, S32 h) {
gdraw_GL_SetResourceLimits(GDRAW_GL_RESOURCE_texture, 5000,
128 * 1024 * 1024);
gdraw_GL_SetResourceLimits(GDRAW_GL_RESOURCE_rendertarget, 10,
- 32 * 1024 * 1024);
+ 64 * 1024 * 1024);
IggySetGDraw(gdraw_funcs);
#endif
diff --git a/Minecraft.Client/Platform/Linux/Stubs/iggy_stubs.h b/Minecraft.Client/Platform/Linux/Stubs/iggy_stubs.h
index 701ad994f..ca0c47ff1 100644
--- a/Minecraft.Client/Platform/Linux/Stubs/iggy_stubs.h
+++ b/Minecraft.Client/Platform/Linux/Stubs/iggy_stubs.h
@@ -254,6 +254,14 @@ RADEXPFUNC inline void* RADEXPLINK IggyPerfmonCreate(
}
RADEXPFUNC inline void RADEXPLINK IggyInstallPerfmon(void* perfmon) { STUBBED; }
+RADEXPFUNC inline IggyResult RADEXPLINK IggyValueGetTypeRS(IggyValuePath* var,
+ IggyName sub_name,
+ char const* sub_name_utf8,
+ IggyDatatype* result) {
+ STUBBED;
+ return IGGY_RESULT_SUCCESS;
+}
+
// GDraw memory/warning functions are defined in gdraw_glfw.c (C linkage)
// Juicey you stupid idiot do NOT define them here
diff --git a/Minecraft.Client/Platform/Linux/Stubs/winapi_stubs.h b/Minecraft.Client/Platform/Linux/Stubs/winapi_stubs.h
index 452562fad..ca2741f9c 100644
--- a/Minecraft.Client/Platform/Linux/Stubs/winapi_stubs.h
+++ b/Minecraft.Client/Platform/Linux/Stubs/winapi_stubs.h
@@ -306,28 +306,6 @@ static inline ULONG TryEnterCriticalSection(
return pthread_mutex_trylock(CriticalSection) == 0;
}
-// https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-tlsalloc
-static inline DWORD TlsAlloc(VOID) {
- pthread_key_t key;
- if (pthread_key_create(&key, NULL) == 0) return key;
- return TLS_OUT_OF_INDEXES;
-}
-
-// https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-tlsfree
-static inline BOOL TlsFree(DWORD dwTlsIndex) {
- return pthread_key_delete(dwTlsIndex) == 0;
-}
-
-// https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-tlsgetvalue
-static inline LPVOID TlsGetValue(DWORD dwTlsIndex) {
- return pthread_getspecific(dwTlsIndex);
-}
-
-// https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-tlssetvalue
-static inline BOOL TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue) {
- return pthread_setspecific(dwTlsIndex, lpTlsValue) == 0;
-}
-
// https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-globalmemorystatus
static inline VOID GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer) {
// TODO: Parse /proc/meminfo and set lpBuffer based on that. Probably will
@@ -336,17 +314,7 @@ static inline VOID GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer) {
static inline DWORD GetLastError(VOID) { return errno; }
-static inline VOID Sleep(DWORD dwMilliseconds) {
- struct timespec ts;
- ts.tv_nsec = (dwMilliseconds * 1000000) % 1000000000;
- ts.tv_sec = dwMilliseconds / 1000;
-
- int ret;
- do {
- ret = nanosleep(&ts, &ts);
- } while (ret == -1 && errno == EINTR);
-}
-
+#ifdef __LP64__
static inline LONG64 InterlockedCompareExchangeRelease64(
LONG64 volatile* Destination, LONG64 Exchange, LONG64 Comperand) {
LONG64 expected = Comperand;
@@ -354,6 +322,15 @@ static inline LONG64 InterlockedCompareExchangeRelease64(
__ATOMIC_RELEASE, __ATOMIC_RELAXED);
return expected;
}
+#else
+static inline LONG64 InterlockedCompareExchangeRelease(
+ LONG volatile* Destination, LONG Exchange, LONG Comperand) {
+ LONG expected = Comperand;
+ __atomic_compare_exchange_n(Destination, &expected, Exchange, false,
+ __ATOMIC_RELEASE, __ATOMIC_RELAXED);
+ return expected;
+}
+#endif
// internal helper: convert time_t to FILETIME (100ns intervals since
// 1601-01-01)
diff --git a/Minecraft.Client/Platform/Orbis/Orbis_Minecraft.cpp b/Minecraft.Client/Platform/Orbis/Orbis_Minecraft.cpp
index 7dfd2c385..5744dc9d9 100644
--- a/Minecraft.Client/Platform/Orbis/Orbis_Minecraft.cpp
+++ b/Minecraft.Client/Platform/Orbis/Orbis_Minecraft.cpp
@@ -1040,8 +1040,6 @@ void RegisterAwardsWithProfileManager() {
}
int StartMinecraftThreadProc(void* lpParameter) {
- Vec3::UseDefaultThreadStorage();
- AABB::UseDefaultThreadStorage();
Tesselator::CreateNewThreadStorage(1024 * 1024);
RenderManager.InitialiseContext();
Minecraft::start(std::wstring(), std::wstring());
@@ -1377,8 +1375,6 @@ int main(int argc, const char* argv[]) {
// Initialise TLS for tesselator, for this main thread
Tesselator::CreateNewThreadStorage(1024 * 1024);
// Initialise TLS for AABB and Vec3 pools, for this main thread
- AABB::CreateNewThreadStorage();
- Vec3::CreateNewThreadStorage();
Compression::CreateNewThreadStorage();
OldChunkStorage::CreateNewThreadStorage();
Level::enableLightingCache();
@@ -1737,9 +1733,6 @@ int main(int argc, const char* argv[]) {
app.PatchAvailableDialogTick();
// Fix for #7318 - Title crashes after short soak in the leaderboards
- // menu A memory leak was caused because the icon renderer kept creating
- // new Vec3's because the pool wasn't reset
- Vec3::resetPool();
}
// Free resources, unregister custom classes, and exit.
diff --git a/Minecraft.Client/Platform/PS3/PS3Extras/boost_1_53_0/boost/spirit/home/lex/lexer/lexertl/lexer.hpp b/Minecraft.Client/Platform/PS3/PS3Extras/boost_1_53_0/boost/spirit/home/lex/lexer/lexertl/lexer.hpp
index 0f8af55d0..f73cb4e09 100644
--- a/Minecraft.Client/Platform/PS3/PS3Extras/boost_1_53_0/boost/spirit/home/lex/lexer/lexertl/lexer.hpp
+++ b/Minecraft.Client/Platform/PS3/PS3Extras/boost_1_53_0/boost/spirit/home/lex/lexer/lexertl/lexer.hpp
@@ -27,373 +27,359 @@
#include
-namespace boost { namespace spirit { namespace lex { namespace lexertl
-{
- ///////////////////////////////////////////////////////////////////////////
- namespace detail
- {
- ///////////////////////////////////////////////////////////////////////
- // The must_escape function checks if the given character value needs
- // to be preceded by a backslash character to disable its special
- // meaning in the context of a regular expression
- ///////////////////////////////////////////////////////////////////////
- template
- inline bool must_escape(Char c)
- {
- // FIXME: more needed?
- switch (c) {
- case '+': case '/': case '*': case '?':
- case '|':
- case '(': case ')':
- case '[': case ']':
- case '{': case '}':
- case '.':
- case '^': case '$':
- case '\\':
- case '"':
- return true;
+namespace boost {
+namespace spirit {
+namespace lex {
+namespace lexertl {
+///////////////////////////////////////////////////////////////////////////
+namespace detail {
+///////////////////////////////////////////////////////////////////////
+// The must_escape function checks if the given character value needs
+// to be preceded by a backslash character to disable its special
+// meaning in the context of a regular expression
+///////////////////////////////////////////////////////////////////////
+template
+inline bool must_escape(Char c) {
+ // FIXME: more needed?
+ switch (c) {
+ case '+':
+ case '/':
+ case '*':
+ case '?':
+ case '|':
+ case '(':
+ case ')':
+ case '[':
+ case ']':
+ case '{':
+ case '}':
+ case '.':
+ case '^':
+ case '$':
+ case '\\':
+ case '"':
+ return true;
- default:
- break;
- }
- return false;
- }
+ default:
+ break;
+ }
+ return false;
+}
- ///////////////////////////////////////////////////////////////////////
- // The escape function returns the string representation of the given
- // character value, possibly escaped with a backslash character, to
- // allow it being safely used in a regular expression definition.
- ///////////////////////////////////////////////////////////////////////
- template
- inline std::basic_string escape(Char ch)
- {
- std::basic_string result(1, ch);
- if (detail::must_escape(ch))
- {
- typedef typename std::basic_string::size_type size_type;
- result.insert((size_type)0, 1, '\\');
- }
- return result;
- }
+///////////////////////////////////////////////////////////////////////
+// The escape function returns the string representation of the given
+// character value, possibly escaped with a backslash character, to
+// allow it being safely used in a regular expression definition.
+///////////////////////////////////////////////////////////////////////
+template
+inline std::basic_string escape(Char ch) {
+ std::basic_string result(1, ch);
+ if (detail::must_escape(ch)) {
+ typedef typename std::basic_string::size_type size_type;
+ result.insert((size_type)0, 1, '\\');
+ }
+ return result;
+}
- ///////////////////////////////////////////////////////////////////////
- //
- ///////////////////////////////////////////////////////////////////////
- inline boost::lexer::regex_flags map_flags(unsigned int flags)
- {
- unsigned int retval = boost::lexer::none;
- if (flags & match_flags::match_not_dot_newline)
- retval |= boost::lexer::dot_not_newline;
- if (flags & match_flags::match_icase)
- retval |= boost::lexer::icase;
+///////////////////////////////////////////////////////////////////////
+//
+///////////////////////////////////////////////////////////////////////
+inline boost::lexer::regex_flags map_flags(unsigned int flags) {
+ unsigned int retval = boost::lexer::none;
+ if (flags & match_flags::match_not_dot_newline)
+ retval |= boost::lexer::dot_not_newline;
+ if (flags & match_flags::match_icase) retval |= boost::lexer::icase;
- return boost::lexer::regex_flags(retval);
- }
+ return boost::lexer::regex_flags(retval);
+}
+} // namespace detail
+
+///////////////////////////////////////////////////////////////////////////
+template
+bool generate_static(Lexer const&,
+ std::basic_ostream&,
+ typename Lexer::char_type const*, F);
+
+///////////////////////////////////////////////////////////////////////////
+//
+// Every lexer type to be used as a lexer for Spirit has to conform to
+// the following public interface:
+//
+// typedefs:
+// iterator_type The type of the iterator exposed by this lexer.
+// token_type The type of the tokens returned from the exposed
+// iterators.
+//
+// functions:
+// default constructor
+// Since lexers are instantiated as base classes
+// only it might be a good idea to make this
+// constructor protected.
+// begin, end Return a pair of iterators, when dereferenced
+// returning the sequence of tokens recognized in
+// the input stream given as the parameters to the
+// begin() function.
+// add_token Should add the definition of a token to be
+// recognized by this lexer.
+// clear Should delete all current token definitions
+// associated with the given state of this lexer
+// object.
+//
+// template parameters:
+// Iterator The type of the iterator used to access the
+// underlying character stream.
+// Token The type of the tokens to be returned from the
+// exposed token iterator.
+// Functor The type of the InputPolicy to use to instantiate
+// the multi_pass iterator type to be used as the
+// token iterator (returned from begin()/end()).
+//
+///////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////
+//
+// The lexer class is a implementation of a Spirit.Lex lexer on
+// top of Ben Hanson's lexertl library as outlined above (For more
+// information about lexertl go here: http://www.benhanson.net/lexertl.html).
+//
+// This class is supposed to be used as the first and only template
+// parameter while instantiating instances of a lex::lexer class.
+//
+///////////////////////////////////////////////////////////////////////////
+template ,
+ typename Iterator = typename Token::iterator_type,
+ typename Functor = functor >
+class lexer {
+private:
+ struct dummy {
+ void true_() {}
+ };
+ typedef void (dummy::*safe_bool)();
+
+ static std::size_t const all_states_id = static_cast(-2);
+
+public:
+ operator safe_bool() const { return initialized_dfa_ ? &dummy::true_ : 0; }
+
+ typedef
+ typename boost::detail::iterator_traits::value_type char_type;
+ typedef std::basic_string string_type;
+
+ typedef boost::lexer::basic_rules basic_rules_type;
+
+ // Every lexer type to be used as a lexer for Spirit has to conform to
+ // a public interface .
+ typedef Token token_type;
+ typedef typename Token::id_type id_type;
+ typedef iterator iterator_type;
+
+private:
+ // this type is purely used for the iterator_type construction below
+ struct iterator_data_type {
+ typedef typename Functor::semantic_actions_type semantic_actions_type;
+
+ iterator_data_type(
+ boost::lexer::basic_state_machine const& sm,
+ boost::lexer::basic_rules const& rules,
+ semantic_actions_type const& actions)
+ : state_machine_(sm), rules_(rules), actions_(actions) {}
+
+ boost::lexer::basic_state_machine const& state_machine_;
+ boost::lexer::basic_rules const& rules_;
+ semantic_actions_type const& actions_;
+
+ private:
+ // silence MSVC warning C4512: assignment operator could not be
+ // generated
+ iterator_data_type& operator=(iterator_data_type const&);
+ };
+
+public:
+ // Return the start iterator usable for iterating over the generated
+ // tokens.
+ iterator_type begin(Iterator& first, Iterator const& last,
+ char_type const* initial_state = 0) const {
+ if (!init_dfa()) // never minimize DFA for dynamic lexers
+ return iterator_type();
+
+ iterator_data_type iterator_data(state_machine_, rules_, actions_);
+ return iterator_type(iterator_data, first, last, initial_state);
}
- ///////////////////////////////////////////////////////////////////////////
- template
- bool generate_static(Lexer const&
- , std::basic_ostream&
- , typename Lexer::char_type const*, F);
+ // Return the end iterator usable to stop iterating over the generated
+ // tokens.
+ iterator_type end() const { return iterator_type(); }
- ///////////////////////////////////////////////////////////////////////////
- //
- // Every lexer type to be used as a lexer for Spirit has to conform to
- // the following public interface:
- //
- // typedefs:
- // iterator_type The type of the iterator exposed by this lexer.
- // token_type The type of the tokens returned from the exposed
- // iterators.
- //
- // functions:
- // default constructor
- // Since lexers are instantiated as base classes
- // only it might be a good idea to make this
- // constructor protected.
- // begin, end Return a pair of iterators, when dereferenced
- // returning the sequence of tokens recognized in
- // the input stream given as the parameters to the
- // begin() function.
- // add_token Should add the definition of a token to be
- // recognized by this lexer.
- // clear Should delete all current token definitions
- // associated with the given state of this lexer
- // object.
- //
- // template parameters:
- // Iterator The type of the iterator used to access the
- // underlying character stream.
- // Token The type of the tokens to be returned from the
- // exposed token iterator.
- // Functor The type of the InputPolicy to use to instantiate
- // the multi_pass iterator type to be used as the
- // token iterator (returned from begin()/end()).
- //
- ///////////////////////////////////////////////////////////////////////////
+protected:
+ // Lexer instances can be created by means of a derived class only.
+ lexer(unsigned int flags)
+ : flags_(detail::map_flags(flags)),
+ rules_(flags_),
+ initialized_dfa_(false) {}
- ///////////////////////////////////////////////////////////////////////////
- //
- // The lexer class is a implementation of a Spirit.Lex lexer on
- // top of Ben Hanson's lexertl library as outlined above (For more
- // information about lexertl go here: http://www.benhanson.net/lexertl.html).
- //
- // This class is supposed to be used as the first and only template
- // parameter while instantiating instances of a lex::lexer class.
- //
- ///////////////////////////////////////////////////////////////////////////
- template
- , typename Iterator = typename Token::iterator_type
- , typename Functor = functor >
- class lexer
- {
- private:
- struct dummy { void true_() {} };
- typedef void (dummy::*safe_bool)();
+public:
+ // interface for token definition management
+ std::size_t add_token(char_type const* state, char_type tokendef,
+ std::size_t token_id, char_type const* targetstate) {
+ add_state(state);
+ initialized_dfa_ = false;
+ if (state == all_states())
+ return rules_.add(state, detail::escape(tokendef), token_id,
+ rules_.dot());
- static std::size_t const all_states_id = static_cast(-2);
+ if (0 == targetstate)
+ targetstate = state;
+ else
+ add_state(targetstate);
+ return rules_.add(state, detail::escape(tokendef), token_id,
+ targetstate);
+ }
+ std::size_t add_token(char_type const* state, string_type const& tokendef,
+ std::size_t token_id, char_type const* targetstate) {
+ add_state(state);
+ initialized_dfa_ = false;
+ if (state == all_states())
+ return rules_.add(state, tokendef, token_id, rules_.dot());
- public:
- operator safe_bool() const
- { return initialized_dfa_ ? &dummy::true_ : 0; }
+ if (0 == targetstate)
+ targetstate = state;
+ else
+ add_state(targetstate);
+ return rules_.add(state, tokendef, token_id, targetstate);
+ }
- typedef typename boost::detail::iterator_traits::value_type
- char_type;
- typedef std::basic_string string_type;
+ // interface for pattern definition management
+ void add_pattern(char_type const* state, string_type const& name,
+ string_type const& patterndef) {
+ add_state(state);
+ rules_.add_macro(name.c_str(), patterndef);
+ initialized_dfa_ = false;
+ }
- typedef boost::lexer::basic_rules basic_rules_type;
+ boost::lexer::rules const& get_rules() const { return rules_; }
- // Every lexer type to be used as a lexer for Spirit has to conform to
- // a public interface .
- typedef Token token_type;
- typedef typename Token::id_type id_type;
- typedef iterator iterator_type;
+ void clear(char_type const* state) {
+ std::size_t s = rules_.state(state);
+ if (boost::lexer::npos != s) rules_.clear(state);
+ initialized_dfa_ = false;
+ }
+ std::size_t add_state(char_type const* state) {
+ if (state == all_states()) return all_states_id;
- private:
- // this type is purely used for the iterator_type construction below
- struct iterator_data_type
- {
- typedef typename Functor::semantic_actions_type semantic_actions_type;
-
- iterator_data_type(
- boost::lexer::basic_state_machine const& sm
- , boost::lexer::basic_rules const& rules
- , semantic_actions_type const& actions)
- : state_machine_(sm), rules_(rules), actions_(actions)
- {}
-
- boost::lexer::basic_state_machine const& state_machine_;
- boost::lexer::basic_rules const& rules_;
- semantic_actions_type const& actions_;
-
- private:
- // silence MSVC warning C4512: assignment operator could not be generated
- iterator_data_type& operator= (iterator_data_type const&);
- };
-
- public:
- // Return the start iterator usable for iterating over the generated
- // tokens.
- iterator_type begin(Iterator& first, Iterator const& last
- , char_type const* initial_state = 0) const
- {
- if (!init_dfa()) // never minimize DFA for dynamic lexers
- return iterator_type();
-
- iterator_data_type iterator_data(state_machine_, rules_, actions_);
- return iterator_type(iterator_data, first, last, initial_state);
- }
-
- // Return the end iterator usable to stop iterating over the generated
- // tokens.
- iterator_type end() const
- {
- return iterator_type();
- }
-
- protected:
- // Lexer instances can be created by means of a derived class only.
- lexer(unsigned int flags)
- : flags_(detail::map_flags(flags))
- , rules_(flags_)
- , initialized_dfa_(false)
- {}
-
- public:
- // interface for token definition management
- std::size_t add_token(char_type const* state, char_type tokendef,
- std::size_t token_id, char_type const* targetstate)
- {
- add_state(state);
- initialized_dfa_ = false;
- if (state == all_states())
- return rules_.add(state, detail::escape(tokendef), token_id, rules_.dot());
-
- if (0 == targetstate)
- targetstate = state;
- else
- add_state(targetstate);
- return rules_.add(state, detail::escape(tokendef), token_id, targetstate);
- }
- std::size_t add_token(char_type const* state, string_type const& tokendef,
- std::size_t token_id, char_type const* targetstate)
- {
- add_state(state);
- initialized_dfa_ = false;
- if (state == all_states())
- return rules_.add(state, tokendef, token_id, rules_.dot());
-
- if (0 == targetstate)
- targetstate = state;
- else
- add_state(targetstate);
- return rules_.add(state, tokendef, token_id, targetstate);
- }
-
- // interface for pattern definition management
- void add_pattern (char_type const* state, string_type const& name,
- string_type const& patterndef)
- {
- add_state(state);
- rules_.add_macro(name.c_str(), patterndef);
+ std::size_t stateid = rules_.state(state);
+ if (boost::lexer::npos == stateid) {
+ stateid = rules_.add_state(state);
initialized_dfa_ = false;
}
+ return stateid;
+ }
+ string_type initial_state() const { return string_type(rules_.initial()); }
+ string_type all_states() const { return string_type(rules_.all_states()); }
- boost::lexer::rules const& get_rules() const { return rules_; }
-
- void clear(char_type const* state)
- {
- std::size_t s = rules_.state(state);
- if (boost::lexer::npos != s)
- rules_.clear(state);
- initialized_dfa_ = false;
- }
- std::size_t add_state(char_type const* state)
- {
- if (state == all_states())
- return all_states_id;
-
- std::size_t stateid = rules_.state(state);
- if (boost::lexer::npos == stateid) {
- stateid = rules_.add_state(state);
- initialized_dfa_ = false;
- }
- return stateid;
- }
- string_type initial_state() const
- {
- return string_type(rules_.initial());
- }
- string_type all_states() const
- {
- return string_type(rules_.all_states());
- }
-
- // Register a semantic action with the given id
- template
- void add_action(std::size_t unique_id, std::size_t state, F act)
- {
- // If you see an error here stating add_action is not a member of
- // fusion::unused_type then you are probably having semantic actions
- // attached to at least one token in the lexer definition without
- // using the lex::lexertl::actor_lexer<> as its base class.
- typedef typename Functor::wrap_action_type wrapper_type;
- if (state == all_states_id) {
- // add the action to all known states
- typedef typename
- basic_rules_type::string_size_t_map::value_type
+ // Register a semantic action with the given id
+ template
+ void add_action(std::size_t unique_id, std::size_t state, F act) {
+ // If you see an error here stating add_action is not a member of
+ // fusion::unused_type then you are probably having semantic actions
+ // attached to at least one token in the lexer definition without
+ // using the lex::lexertl::actor_lexer<> as its base class.
+ typedef typename Functor::wrap_action_type wrapper_type;
+ if (state == all_states_id) {
+ // add the action to all known states
+ typedef typename basic_rules_type::string_size_t_map::value_type
state_type;
- std::size_t states = rules_.statemap().size();
- BOOST_FOREACH(state_type const& s, rules_.statemap()) {
- for (std::size_t j = 0; j < states; ++j)
- actions_.add_action(unique_id + j, s.second, wrapper_type::call(act));
- }
- }
- else {
- actions_.add_action(unique_id, state, wrapper_type::call(act));
+ std::size_t states = rules_.statemap().size();
+ BOOST_FOREACH (state_type const& s, rules_.statemap()) {
+ for (std::size_t j = 0; j < states; ++j)
+ actions_.add_action(unique_id + j, s.second,
+ wrapper_type::call(act));
}
+ } else {
+ actions_.add_action(unique_id, state, wrapper_type::call(act));
}
-// template
-// void add_action(std::size_t unique_id, char_type const* state, F act)
-// {
-// typedef typename Functor::wrap_action_type wrapper_type;
-// actions_.add_action(unique_id, add_state(state), wrapper_type::call(act));
-// }
+ }
+ // template
+ // void add_action(std::size_t unique_id, char_type const* state, F
+ // act)
+ // {
+ // typedef typename Functor::wrap_action_type wrapper_type;
+ // actions_.add_action(unique_id, add_state(state),
+ // wrapper_type::call(act));
+ // }
- // We do not minimize the state machine by default anymore because
- // Ben said: "If you can afford to generate a lexer at runtime, there
- // is little point in calling minimise."
- // Go figure.
- bool init_dfa(bool minimize = false) const
- {
- if (!initialized_dfa_) {
- state_machine_.clear();
- typedef boost::lexer::basic_generator generator;
- generator::build (rules_, state_machine_);
- if (minimize)
- generator::minimise (state_machine_);
+ // We do not minimize the state machine by default anymore because
+ // Ben said: "If you can afford to generate a lexer at runtime, there
+ // is little point in calling minimise."
+ // Go figure.
+ bool init_dfa(bool minimize = false) const {
+ if (!initialized_dfa_) {
+ state_machine_.clear();
+ typedef boost::lexer::basic_generator generator;
+ generator::build(rules_, state_machine_);
+ if (minimize) generator::minimise(state_machine_);
#if defined(BOOST_SPIRIT_LEXERTL_DEBUG)
- boost::lexer::debug::dump(state_machine_, std::cerr);
+ boost::lexer::debug::dump(state_machine_, std::cerr);
#endif
- initialized_dfa_ = true;
+ initialized_dfa_ = true;
-// // release memory held by rules description
-// basic_rules_type rules;
-// rules.init_state_info(rules_); // preserve states
-// std::swap(rules, rules_);
- }
- return true;
+ // // release memory held by rules description
+ // basic_rules_type rules;
+ // rules.init_state_info(rules_); // preserve
+ // states std::swap(rules, rules_);
}
+ return true;
+ }
- private:
- // lexertl specific data
- mutable boost::lexer::basic_state_machine state_machine_;
- boost::lexer::regex_flags flags_;
- /*mutable*/ basic_rules_type rules_;
+private:
+ // lexertl specific data
+ mutable boost::lexer::basic_state_machine state_machine_;
+ boost::lexer::regex_flags flags_;
+ /*mutable*/ basic_rules_type rules_;
- typename Functor::semantic_actions_type actions_;
- mutable bool initialized_dfa_;
+ typename Functor::semantic_actions_type actions_;
+ mutable bool initialized_dfa_;
- // generator functions must be able to access members directly
- template
- friend bool generate_static(Lexer const&
- , std::basic_ostream&
- , typename Lexer::char_type const*, F);
- };
+ // generator functions must be able to access members directly
+ template
+ friend bool generate_static(Lexer const&,
+ std::basic_ostream&,
+ typename Lexer::char_type const*, F);
+};
- ///////////////////////////////////////////////////////////////////////////
- //
- // The actor_lexer class is another implementation of a Spirit.Lex
- // lexer on top of Ben Hanson's lexertl library as outlined above (For
- // more information about lexertl go here:
- // http://www.benhanson.net/lexertl.html).
- //
- // The only difference to the lexer class above is that token_def
- // definitions may have semantic (lexer) actions attached while being
- // defined:
- //
- // int w;
- // token_def word = "[^ \t\n]+";
- // self = word[++ref(w)]; // see example: word_count_lexer
- //
- // This class is supposed to be used as the first and only template
- // parameter while instantiating instances of a lex::lexer class.
- //
- ///////////////////////////////////////////////////////////////////////////
- template
- , typename Iterator = typename Token::iterator_type
- , typename Functor = functor >
- class actor_lexer : public lexer
- {
- protected:
- // Lexer instances can be created by means of a derived class only.
- actor_lexer(unsigned int flags)
- : lexer(flags) {}
- };
+///////////////////////////////////////////////////////////////////////////
+//
+// The actor_lexer class is another implementation of a Spirit.Lex
+// lexer on top of Ben Hanson's lexertl library as outlined above (For
+// more information about lexertl go here:
+// http://www.benhanson.net/lexertl.html).
+//
+// The only difference to the lexer class above is that token_def
+// definitions may have semantic (lexer) actions attached while being
+// defined:
+//
+// int w;
+// token_def word = "[^ \t\n]+";
+// self = word[++ref(w)]; // see example: word_count_lexer
+//
+// This class is supposed to be used as the first and only template
+// parameter while instantiating instances of a lex::lexer class.
+//
+///////////////////////////////////////////////////////////////////////////
+template ,
+ typename Iterator = typename Token::iterator_type,
+ typename Functor =
+ functor >
+class actor_lexer : public lexer {
+protected:
+ // Lexer instances can be created by means of a derived class only.
+ actor_lexer(unsigned int flags) : lexer(flags) {}
+};
-}}}}
+} // namespace lexertl
+} // namespace lex
+} // namespace spirit
+} // namespace boost
#endif
diff --git a/Minecraft.Client/Platform/PS3/PS3_Minecraft.cpp b/Minecraft.Client/Platform/PS3/PS3_Minecraft.cpp
index 2582fd0cc..6aaced5fd 100644
--- a/Minecraft.Client/Platform/PS3/PS3_Minecraft.cpp
+++ b/Minecraft.Client/Platform/PS3/PS3_Minecraft.cpp
@@ -1210,8 +1210,6 @@ int main() {
// Initialise TLS for tesselator, for this main thread
Tesselator::CreateNewThreadStorage(1024 * 1024);
// Initialise TLS for AABB and Vec3 pools, for this main thread
- AABB::CreateNewThreadStorage();
- Vec3::CreateNewThreadStorage();
OldChunkStorage::CreateNewThreadStorage();
Level::enableLightingCache();
Tile::CreateNewThreadStorage();
@@ -1547,7 +1545,6 @@ int main() {
// Fix for #7318 - Title crashes after short soak in the leaderboards
// menu A memory leak was caused because the icon renderer kept creating
// new Vec3's because the pool wasn't reset
- Vec3::resetPool();
}
// Free resources, unregister custom classes, and exit.
diff --git a/Minecraft.Client/Platform/PS3/SPU_Tasks/ChunkUpdate/TileRenderer_SPU.cpp b/Minecraft.Client/Platform/PS3/SPU_Tasks/ChunkUpdate/TileRenderer_SPU.cpp
index d7d5af1cd..efe51f37a 100644
--- a/Minecraft.Client/Platform/PS3/SPU_Tasks/ChunkUpdate/TileRenderer_SPU.cpp
+++ b/Minecraft.Client/Platform/PS3/SPU_Tasks/ChunkUpdate/TileRenderer_SPU.cpp
@@ -26,7 +26,7 @@
#ifdef SN_TARGET_PS3_SPU
#include "../Common/spu_assert.h"
-#endif
+#endif
static const float MATH_PI = 3.141592654f;
@@ -35,7 +35,8 @@ static const float MATH_PI = 3.141592654f;
// #include "../../../../Textures/Textures.h"
// #include "../../../../../Minecraft.World/Headers/net.minecraft.world.level.h"
// #include "../../../Minecraft.World/net.minecraft.world.level.tile.h"
-// #include "../../../../../Minecraft.World/Headers/net.minecraft.world.level.material.h"
+// #include
+// "../../../../../Minecraft.World/Headers/net.minecraft.world.level.material.h"
// #include "../../../../../Minecraft.World/Headers/net.minecraft.h"
// #include "../../../../../Minecraft.World/Headers/net.minecraft.world.h"
// #include "../../../Minecraft.World/net.minecraft.world.level.tile.h"
@@ -44,7 +45,7 @@ static const float MATH_PI = 3.141592654f;
#ifdef SN_TARGET_PS3_SPU
#include "Stubs_SPU.h"
-#endif // SN_TARGET_PS3_SPU
+#endif // SN_TARGET_PS3_SPU
// #include "../../../../../Minecraft.World/Util/SharedConstants.h"
#include "Facing_SPU.h"
@@ -54,629 +55,589 @@ static const float MATH_PI = 3.141592654f;
// #define DISABLE_TESS_FUNCS
#ifdef SN_TARGET_PS3_SPU
-class SharedConstants
-{
+class SharedConstants {
public:
- static const bool TEXTURE_LIGHTING = true;
- static const int WORLD_RESOLUTION = 16;
+ static const bool TEXTURE_LIGHTING = true;
+ static const int WORLD_RESOLUTION = 16;
};
#endif
// #define SN_TARGET_PS3_SPU
bool TileRenderer_SPU::fancy = true;
-bool g_ambientOcclusionMax = false; // minecraft->options->ambientOcclusion >= Options::AO_MAX
-const float smallUV = ( 1.0f / 16.0f );
+bool g_ambientOcclusionMax =
+ false; // minecraft->options->ambientOcclusion >= Options::AO_MAX
+const float smallUV = (1.0f / 16.0f);
+void TileRenderer_SPU::_init() {
+ fixedTexture = NULL;
+ xFlipTexture = false;
+ noCulling = false;
+ blsmooth = 1;
+ applyAmbienceOcclusion = false;
+ setColor = true;
+ northFlip = FLIP_NONE;
+ southFlip = FLIP_NONE;
+ eastFlip = FLIP_NONE;
+ westFlip = FLIP_NONE;
+ upFlip = FLIP_NONE;
+ downFlip = FLIP_NONE;
-void TileRenderer_SPU::_init()
-{
- fixedTexture = NULL;
- xFlipTexture = false;
- noCulling = false;
- blsmooth = 1;
- applyAmbienceOcclusion = false;
- setColor = true;
- northFlip = FLIP_NONE;
- southFlip = FLIP_NONE;
- eastFlip = FLIP_NONE;
- westFlip = FLIP_NONE;
- upFlip = FLIP_NONE;
- downFlip = FLIP_NONE;
-
- tileShapeX0 = 0.0;
- tileShapeX1 = 0.0;
- tileShapeY0 = 0.0;
- tileShapeY1 = 0.0;
- tileShapeZ0 = 0.0;
- tileShapeZ1 = 0.0;
- fixedShape = false;
- smoothShapeLighting = false;
-// minecraft = Minecraft::GetInstance();
+ tileShapeX0 = 0.0;
+ tileShapeX1 = 0.0;
+ tileShapeY0 = 0.0;
+ tileShapeY1 = 0.0;
+ tileShapeZ0 = 0.0;
+ tileShapeZ1 = 0.0;
+ fixedShape = false;
+ smoothShapeLighting = false;
+ // minecraft = Minecraft::GetInstance();
}
-TileRenderer_SPU::TileRenderer_SPU( ChunkRebuildData* level )
-{
- this->level = level;
- _init();
+TileRenderer_SPU::TileRenderer_SPU(ChunkRebuildData* level) {
+ this->level = level;
+ _init();
}
-TileRenderer_SPU::TileRenderer_SPU()
-{
- this->level = NULL;
- _init();
+TileRenderer_SPU::TileRenderer_SPU() {
+ this->level = NULL;
+ _init();
}
-Tesselator_SPU* TileRenderer_SPU::getTesselator()
-{
- Tesselator_SPU* t = &level->m_tesselator;
- return t;
+Tesselator_SPU* TileRenderer_SPU::getTesselator() {
+ Tesselator_SPU* t = &level->m_tesselator;
+ return t;
}
-
-
-void TileRenderer_SPU::setFixedTexture( Icon_SPU *fixedTexture )
-{
- this->fixedTexture = fixedTexture;
+void TileRenderer_SPU::setFixedTexture(Icon_SPU* fixedTexture) {
+ this->fixedTexture = fixedTexture;
}
-void TileRenderer_SPU::clearFixedTexture()
-{
- this->fixedTexture = NULL;
+void TileRenderer_SPU::clearFixedTexture() { this->fixedTexture = NULL; }
+
+bool TileRenderer_SPU::hasFixedTexture() { return fixedTexture != NULL; }
+
+void TileRenderer_SPU::setShape(float x0, float y0, float z0, float x1,
+ float y1, float z1) {
+ if (!fixedShape) {
+ tileShapeX0 = x0;
+ tileShapeX1 = x1;
+ tileShapeY0 = y0;
+ tileShapeY1 = y1;
+ tileShapeZ0 = z0;
+ tileShapeZ1 = z1;
+ smoothShapeLighting =
+ (tileShapeX0 > 0 || tileShapeX1 < 1 || tileShapeY0 > 0 ||
+ tileShapeY1 < 1 || tileShapeZ0 > 0 || tileShapeZ1 < 1);
+ }
}
-bool TileRenderer_SPU::hasFixedTexture()
-{
- return fixedTexture != NULL;
+void TileRenderer_SPU::setShape(Tile_SPU* tt) {
+ if (!fixedShape) {
+ tileShapeX0 = tt->getShapeX0();
+ tileShapeX1 = tt->getShapeX1();
+ tileShapeY0 = tt->getShapeY0();
+ tileShapeY1 = tt->getShapeY1();
+ tileShapeZ0 = tt->getShapeZ0();
+ tileShapeZ1 = tt->getShapeZ1();
+ smoothShapeLighting =
+ (tileShapeX0 > 0 || tileShapeX1 < 1 || tileShapeY0 > 0 ||
+ tileShapeY1 < 1 || tileShapeZ0 > 0 || tileShapeZ1 < 1);
+ }
}
-void TileRenderer_SPU::setShape(float x0, float y0, float z0, float x1, float y1, float z1)
-{
- if (!fixedShape)
- {
- tileShapeX0 = x0;
- tileShapeX1 = x1;
- tileShapeY0 = y0;
- tileShapeY1 = y1;
- tileShapeZ0 = z0;
- tileShapeZ1 = z1;
- smoothShapeLighting = (tileShapeX0 > 0 || tileShapeX1 < 1 || tileShapeY0 > 0 || tileShapeY1 < 1 || tileShapeZ0 > 0 || tileShapeZ1 < 1);
- }
+void TileRenderer_SPU::setFixedShape(float x0, float y0, float z0, float x1,
+ float y1, float z1) {
+ tileShapeX0 = x0;
+ tileShapeX1 = x1;
+ tileShapeY0 = y0;
+ tileShapeY1 = y1;
+ tileShapeZ0 = z0;
+ tileShapeZ1 = z1;
+ fixedShape = true;
+
+ smoothShapeLighting =
+ (tileShapeX0 > 0 || tileShapeX1 < 1 || tileShapeY0 > 0 ||
+ tileShapeY1 < 1 || tileShapeZ0 > 0 || tileShapeZ1 < 1);
}
-void TileRenderer_SPU::setShape(Tile_SPU *tt)
+void TileRenderer_SPU::clearFixedShape() { fixedShape = false; }
+
+void TileRenderer_SPU::tesselateInWorldFixedTexture(
+ Tile_SPU* tile, int x, int y, int z,
+ Icon_SPU*
+ fixedTexture) // 4J renamed to differentiate from tesselateInWorld
{
- if (!fixedShape)
- {
- tileShapeX0 = tt->getShapeX0();
- tileShapeX1 = tt->getShapeX1();
- tileShapeY0 = tt->getShapeY0();
- tileShapeY1 = tt->getShapeY1();
- tileShapeZ0 = tt->getShapeZ0();
- tileShapeZ1 = tt->getShapeZ1();
- smoothShapeLighting = (tileShapeX0 > 0 || tileShapeX1 < 1 || tileShapeY0 > 0 || tileShapeY1 < 1 || tileShapeZ0 > 0 || tileShapeZ1 < 1);
- }
+ this->setFixedTexture(fixedTexture);
+ tesselateInWorld(tile, x, y, z);
+ this->clearFixedTexture();
}
-void TileRenderer_SPU::setFixedShape(float x0, float y0, float z0, float x1, float y1, float z1)
+void TileRenderer_SPU::tesselateInWorldNoCulling(
+ Tile_SPU* tile, int x, int y, int z, int forceData,
+ TileEntity* forceEntity) // 4J added forceData, forceEntity param
{
- tileShapeX0 = x0;
- tileShapeX1 = x1;
- tileShapeY0 = y0;
- tileShapeY1 = y1;
- tileShapeZ0 = z0;
- tileShapeZ1 = z1;
- fixedShape = true;
-
- smoothShapeLighting = (tileShapeX0 > 0 || tileShapeX1 < 1 || tileShapeY0 > 0 || tileShapeY1 < 1 || tileShapeZ0 > 0 || tileShapeZ1 < 1);
+ noCulling = true;
+ tesselateInWorld(tile, x, y, z, forceData);
+ noCulling = false;
}
-void TileRenderer_SPU::clearFixedShape()
-{
- fixedShape = false;
+bool TileRenderer_SPU::hasRenderer(Tile_SPU* tt) {
+ int shape = tt->getRenderShape();
+ bool retVal = false;
+ switch (shape) {
+ case Tile_SPU::SHAPE_BLOCK:
+ case Tile_SPU::SHAPE_WATER:
+ case Tile_SPU::SHAPE_CACTUS:
+ case Tile_SPU::SHAPE_STEM:
+ case Tile_SPU::SHAPE_LILYPAD:
+ case Tile_SPU::SHAPE_ROWS:
+ case Tile_SPU::SHAPE_TORCH:
+ case Tile_SPU::SHAPE_FIRE:
+ case Tile_SPU::SHAPE_LADDER:
+ case Tile_SPU::SHAPE_DOOR:
+ case Tile_SPU::SHAPE_RAIL:
+ case Tile_SPU::SHAPE_EGG:
+ case Tile_SPU::SHAPE_VINE:
+ case Tile_SPU::SHAPE_BREWING_STAND:
+ case Tile_SPU::SHAPE_CROSS_TEXTURE:
+ case Tile_SPU::SHAPE_FENCE:
+ retVal = true;
+ break;
+
+ case Tile_SPU::SHAPE_FENCE_GATE:
+ case Tile_SPU::SHAPE_RED_DUST:
+ case Tile_SPU::SHAPE_STAIRS:
+ case Tile_SPU::SHAPE_DIODE:
+ case Tile_SPU::SHAPE_LEVER:
+ case Tile_SPU::SHAPE_BED:
+ case Tile_SPU::SHAPE_PISTON_BASE:
+ case Tile_SPU::SHAPE_PISTON_EXTENSION:
+ case Tile_SPU::SHAPE_IRON_FENCE:
+ case Tile_SPU::SHAPE_CAULDRON:
+ case Tile_SPU::SHAPE_PORTAL_FRAME:
+ retVal = false;
+ break;
+ }
+
+ return retVal;
}
-void TileRenderer_SPU::tesselateInWorldFixedTexture( Tile_SPU* tile, int x, int y, int z, Icon_SPU *fixedTexture ) // 4J renamed to differentiate from tesselateInWorld
+bool TileRenderer_SPU::tesselateInWorld(
+ Tile_SPU* tt, int x, int y, int z, int forceData,
+ TileEntity* forceEntity) // 4J added forceData, forceEntity param
{
- this->setFixedTexture(fixedTexture);
- tesselateInWorld( tile, x, y, z );
- this->clearFixedTexture();
+ Tesselator_SPU* t = getTesselator();
+
+ int shape = tt->getRenderShape();
+ tt->updateShape(level, x, y, z, forceData, forceEntity);
+ setShape(tt);
+ t->setMipmapEnable(level->m_tileData.mipmapEnable[tt->id]); // 4J added
+
+ bool retVal = false;
+ switch (shape) {
+ case Tile_SPU::SHAPE_BLOCK:
+ retVal = tesselateBlockInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_TREE:
+ retVal = tesselateTreeInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_QUARTZ:
+ retVal = tesselateQuartzInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_WATER:
+ retVal = tesselateWaterInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_CACTUS:
+ retVal = tesselateCactusInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_CROSS_TEXTURE:
+ retVal = tesselateCrossInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_STEM:
+ retVal = tesselateStemInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_LILYPAD:
+ retVal = tesselateLilypadInWorld((WaterlilyTile_SPU*)tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_ROWS:
+ retVal = tesselateRowInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_TORCH:
+ retVal = tesselateTorchInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_FIRE:
+ retVal = tesselateFireInWorld((FireTile_SPU*)tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_RED_DUST:
+ retVal = tesselateDustInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_LADDER:
+ retVal = tesselateLadderInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_DOOR:
+ retVal = tesselateDoorInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_RAIL:
+ retVal = tesselateRailInWorld((RailTile_SPU*)tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_STAIRS:
+ retVal = tesselateStairsInWorld((StairTile_SPU*)tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_EGG:
+ retVal = tesselateEggInWorld((EggTile_SPU*)tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_FENCE:
+ retVal = tesselateFenceInWorld((FenceTile_SPU*)tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_WALL:
+ retVal = tesselateWallInWorld((WallTile_SPU*)tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_LEVER:
+ retVal = tesselateLeverInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_TRIPWIRE_SOURCE:
+ retVal = tesselateTripwireSourceInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_TRIPWIRE:
+ retVal = tesselateTripwireInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_BED:
+ retVal = tesselateBedInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_DIODE:
+ retVal = tesselateDiodeInWorld((DiodeTile_SPU*)tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_PISTON_BASE:
+ retVal = tesselatePistonBaseInWorld(tt, x, y, z, false, forceData);
+ break;
+ case Tile_SPU::SHAPE_PISTON_EXTENSION:
+ retVal =
+ tesselatePistonExtensionInWorld(tt, x, y, z, true, forceData);
+ break;
+ case Tile_SPU::SHAPE_IRON_FENCE:
+ retVal = tesselateThinFenceInWorld((ThinFenceTile*)tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_VINE:
+ retVal = tesselateVineInWorld(tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_FENCE_GATE:
+ retVal = tesselateFenceGateInWorld((FenceGateTile_SPU*)tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_CAULDRON:
+ retVal = tesselateCauldronInWorld((CauldronTile_SPU*)tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_FLOWER_POT:
+ retVal = tesselateFlowerPotInWorld((FlowerPotTile_SPU*)tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_ANVIL:
+ retVal = tesselateAnvilInWorld((AnvilTile_SPU*)tt, x, y, z);
+ break;
+ case Tile_SPU::SHAPE_BREWING_STAND:
+ retVal = tesselateBrewingStandInWorld((BrewingStandTile_SPU*)tt, x,
+ y, z);
+ break;
+ case Tile_SPU::SHAPE_PORTAL_FRAME:
+ retVal = tesselateAirPortalFrameInWorld((TheEndPortalFrameTile*)tt,
+ x, y, z);
+ break;
+ case Tile_SPU::SHAPE_COCOA:
+ retVal = tesselateCocoaInWorld((CocoaTile_SPU*)tt, x, y, z);
+ break;
+ };
+
+ t->setMipmapEnable(true); // 4J added
+ return retVal;
}
-void TileRenderer_SPU::tesselateInWorldNoCulling( Tile_SPU* tile, int x, int y, int z, int forceData,
- TileEntity* forceEntity ) // 4J added forceData, forceEntity param
-{
- noCulling = true;
- tesselateInWorld( tile, x, y, z, forceData );
- noCulling = false;
-}
-
-bool TileRenderer_SPU::hasRenderer(Tile_SPU* tt)
-{
- int shape = tt->getRenderShape();
- bool retVal = false;
- switch(shape)
- {
- case Tile_SPU::SHAPE_BLOCK:
- case Tile_SPU::SHAPE_WATER:
- case Tile_SPU::SHAPE_CACTUS:
- case Tile_SPU::SHAPE_STEM:
- case Tile_SPU::SHAPE_LILYPAD:
- case Tile_SPU::SHAPE_ROWS:
- case Tile_SPU::SHAPE_TORCH:
- case Tile_SPU::SHAPE_FIRE:
- case Tile_SPU::SHAPE_LADDER:
- case Tile_SPU::SHAPE_DOOR:
- case Tile_SPU::SHAPE_RAIL:
- case Tile_SPU::SHAPE_EGG:
- case Tile_SPU::SHAPE_VINE:
- case Tile_SPU::SHAPE_BREWING_STAND:
- case Tile_SPU::SHAPE_CROSS_TEXTURE:
- case Tile_SPU::SHAPE_FENCE:
- retVal = true;
- break;
-
- case Tile_SPU::SHAPE_FENCE_GATE:
- case Tile_SPU::SHAPE_RED_DUST:
- case Tile_SPU::SHAPE_STAIRS:
- case Tile_SPU::SHAPE_DIODE:
- case Tile_SPU::SHAPE_LEVER:
- case Tile_SPU::SHAPE_BED:
- case Tile_SPU::SHAPE_PISTON_BASE:
- case Tile_SPU::SHAPE_PISTON_EXTENSION:
- case Tile_SPU::SHAPE_IRON_FENCE:
- case Tile_SPU::SHAPE_CAULDRON:
- case Tile_SPU::SHAPE_PORTAL_FRAME:
- retVal = false;
- break;
- }
-
- return retVal;
-}
-
-
-bool TileRenderer_SPU::tesselateInWorld( Tile_SPU* tt, int x, int y, int z, int forceData,
- TileEntity* forceEntity ) // 4J added forceData, forceEntity param
-{
- Tesselator_SPU* t = getTesselator();
-
- int shape = tt->getRenderShape();
- tt->updateShape( level, x, y, z, forceData, forceEntity );
- setShape(tt);
- t->setMipmapEnable( level->m_tileData.mipmapEnable[tt->id] ); // 4J added
-
- bool retVal = false;
- switch(shape)
- {
- case Tile_SPU::SHAPE_BLOCK:
- retVal = tesselateBlockInWorld( tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_TREE:
- retVal = tesselateTreeInWorld(tt, x, y, z);
- break;
- case Tile_SPU::SHAPE_QUARTZ:
- retVal = tesselateQuartzInWorld(tt, x, y, z);
- break;
- case Tile_SPU::SHAPE_WATER:
- retVal = tesselateWaterInWorld( tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_CACTUS:
- retVal = tesselateCactusInWorld( tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_CROSS_TEXTURE:
- retVal = tesselateCrossInWorld( tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_STEM:
- retVal = tesselateStemInWorld( tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_LILYPAD:
- retVal = tesselateLilypadInWorld( (WaterlilyTile_SPU*)tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_ROWS:
- retVal = tesselateRowInWorld( tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_TORCH:
- retVal = tesselateTorchInWorld( tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_FIRE:
- retVal = tesselateFireInWorld( (FireTile_SPU *)tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_RED_DUST:
- retVal = tesselateDustInWorld( tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_LADDER:
- retVal = tesselateLadderInWorld( tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_DOOR:
- retVal = tesselateDoorInWorld( tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_RAIL:
- retVal = tesselateRailInWorld( ( RailTile_SPU* )tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_STAIRS:
- retVal = tesselateStairsInWorld( (StairTile_SPU *)tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_EGG:
- retVal = tesselateEggInWorld((EggTile_SPU*) tt, x, y, z);
- break;
- case Tile_SPU::SHAPE_FENCE:
- retVal = tesselateFenceInWorld( ( FenceTile_SPU* )tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_WALL:
- retVal = tesselateWallInWorld( (WallTile_SPU *) tt, x, y, z);
- break;
- case Tile_SPU::SHAPE_LEVER:
- retVal = tesselateLeverInWorld( tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_TRIPWIRE_SOURCE:
- retVal = tesselateTripwireSourceInWorld(tt, x, y, z);
- break;
- case Tile_SPU::SHAPE_TRIPWIRE:
- retVal = tesselateTripwireInWorld(tt, x, y, z);
- break;
- case Tile_SPU::SHAPE_BED:
- retVal = tesselateBedInWorld( tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_DIODE:
- retVal = tesselateDiodeInWorld( (DiodeTile_SPU *)tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_PISTON_BASE:
- retVal = tesselatePistonBaseInWorld( tt, x, y, z, false, forceData );
- break;
- case Tile_SPU::SHAPE_PISTON_EXTENSION:
- retVal = tesselatePistonExtensionInWorld( tt, x, y, z, true, forceData );
- break;
- case Tile_SPU::SHAPE_IRON_FENCE:
- retVal = tesselateThinFenceInWorld( ( ThinFenceTile* )tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_VINE:
- retVal = tesselateVineInWorld( tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_FENCE_GATE:
- retVal = tesselateFenceGateInWorld( ( FenceGateTile_SPU* )tt, x, y, z );
- break;
- case Tile_SPU::SHAPE_CAULDRON:
- retVal = tesselateCauldronInWorld((CauldronTile_SPU* ) tt, x, y, z);
- break;
- case Tile_SPU::SHAPE_FLOWER_POT:
- retVal = tesselateFlowerPotInWorld((FlowerPotTile_SPU *) tt, x, y, z);
- break;
- case Tile_SPU::SHAPE_ANVIL:
- retVal = tesselateAnvilInWorld((AnvilTile_SPU *) tt, x, y, z);
- break;
- case Tile_SPU::SHAPE_BREWING_STAND:
- retVal = tesselateBrewingStandInWorld((BrewingStandTile_SPU* ) tt, x, y, z);
- break;
- case Tile_SPU::SHAPE_PORTAL_FRAME:
- retVal = tesselateAirPortalFrameInWorld((TheEndPortalFrameTile *)tt, x, y, z);
- break;
- case Tile_SPU::SHAPE_COCOA:
- retVal = tesselateCocoaInWorld((CocoaTile_SPU *) tt, x, y, z);
- break;
-
- };
-
-
- t->setMipmapEnable( true ); // 4J added
- return retVal;
-
-}
-
-bool TileRenderer_SPU::tesselateAirPortalFrameInWorld(TheEndPortalFrameTile *tt, int x, int y, int z)
-{
+bool TileRenderer_SPU::tesselateAirPortalFrameInWorld(TheEndPortalFrameTile* tt,
+ int x, int y, int z) {
#ifdef DISABLE_TESS_FUNCS
int data = level->getData(x, y, z);
int direction = data & 3;
- if (direction == Direction::SOUTH)
- {
+ if (direction == Direction::SOUTH) {
upFlip = FLIP_180;
- }
- else if (direction == Direction::EAST)
- {
+ } else if (direction == Direction::EAST) {
upFlip = FLIP_CW;
- }
- else if (direction == Direction::WEST)
- {
+ } else if (direction == Direction::WEST) {
upFlip = FLIP_CCW;
}
- if (!TheEndPortalFrameTile::hasEye(data))
- {
-// EnterCriticalSection( &Tile_SPU::m_csShape );
+ if (!TheEndPortalFrameTile::hasEye(data)) {
+ // EnterCriticalSection( &Tile_SPU::m_csShape );
setShape(0, 0, 0, 1, 13.0f / 16.0f, 1);
tesselateBlockInWorld(tt, x, y, z);
-// LeaveCriticalSection( &Tile_SPU::m_csShape );
+ // LeaveCriticalSection( &Tile_SPU::m_csShape );
upFlip = FLIP_NONE;
return true;
}
-// EnterCriticalSection( &Tile_SPU::m_csShape );
- noCulling = true;
+ // EnterCriticalSection( &Tile_SPU::m_csShape );
+ noCulling = true;
setShape(0, 0, 0, 1, 13.0f / 16.0f, 1);
tesselateBlockInWorld(tt, x, y, z);
setFixedTexture(tt->getEye());
- setShape(4.0f / 16.0f, 13.0f / 16.0f, 4.0f / 16.0f, 12.0f / 16.0f, 1, 12.0f / 16.0f);
+ setShape(4.0f / 16.0f, 13.0f / 16.0f, 4.0f / 16.0f, 12.0f / 16.0f, 1,
+ 12.0f / 16.0f);
tesselateBlockInWorld(tt, x, y, z);
- noCulling = false;
+ noCulling = false;
clearFixedTexture();
-// LeaveCriticalSection( &Tile_SPU::m_csShape );
+ // LeaveCriticalSection( &Tile_SPU::m_csShape );
upFlip = FLIP_NONE;
-#endif // DISABLE_TESS_FUNCS
+#endif // DISABLE_TESS_FUNCS
return true;
}
-bool TileRenderer_SPU::tesselateBedInWorld( Tile_SPU* tt, int x, int y, int z )
-{
+bool TileRenderer_SPU::tesselateBedInWorld(Tile_SPU* tt, int x, int y, int z) {
#ifdef DISABLE_TESS_FUNCS
- Tesselator_SPU* t = getTesselator();
+ Tesselator_SPU* t = getTesselator();
- int data = level->getData( x, y, z );
- int direction = BedTile::getDirection( data );
- bool isHead = BedTile::isHeadPiece( data );
+ int data = level->getData(x, y, z);
+ int direction = BedTile::getDirection(data);
+ bool isHead = BedTile::isHeadPiece(data);
- float c10 = 0.5f;
- float c11 = 1.0f;
- float c2 = 0.8f;
- float c3 = 0.6f;
+ float c10 = 0.5f;
+ float c11 = 1.0f;
+ float c2 = 0.8f;
+ float c3 = 0.6f;
- float r11 = c11;
- float g11 = c11;
- float b11 = c11;
+ float r11 = c11;
+ float g11 = c11;
+ float b11 = c11;
- float r10 = c10;
- float r2 = c2;
- float r3 = c3;
+ float r10 = c10;
+ float r2 = c2;
+ float r3 = c3;
- float g10 = c10;
- float g2 = c2;
- float g3 = c3;
+ float g10 = c10;
+ float g2 = c2;
+ float g3 = c3;
- float b10 = c10;
- float b2 = c2;
- float b3 = c3;
+ float b10 = c10;
+ float b2 = c2;
+ float b3 = c3;
- // 4J - change brought forward from 1.8.2
- int centerColor;
- float centerBrightness;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- centerColor = tt->getLightColor( level, x, y, z );
- }
- else
- {
- centerBrightness = tt->getBrightness( level, x, y, z );
- }
+ // 4J - change brought forward from 1.8.2
+ int centerColor;
+ float centerBrightness;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ centerColor = tt->getLightColor(level, x, y, z);
+ } else {
+ centerBrightness = tt->getBrightness(level, x, y, z);
+ }
- // render wooden underside
- {
- // 4J - change brought forward from 1.8.2
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( centerColor );
- t->color( r10, g10, b10 );
- }
- else
- {
- t->color( r10 * centerBrightness, g10 * centerBrightness, b10 * centerBrightness );
- }
+ // render wooden underside
+ {
+ // 4J - change brought forward from 1.8.2
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(centerColor);
+ t->color(r10, g10, b10);
+ } else {
+ t->color(r10 * centerBrightness, g10 * centerBrightness,
+ b10 * centerBrightness);
+ }
- Icon_SPU *tex = getTexture( tt, level, x, y, z, Facing::DOWN );
+ Icon_SPU* tex = getTexture(tt, level, x, y, z, Facing::DOWN);
- float u0 = tex->getU0();
- float u1 = tex->getU1();
- float v0 = tex->getV0();
- float v1 = tex->getV1();
+ float u0 = tex->getU0();
+ float u1 = tex->getU1();
+ float v0 = tex->getV0();
+ float v1 = tex->getV1();
- float x0 = x + tileShapeX0;
- float x1 = x + tileShapeX1;
- float y0 = y + tileShapeY0 + 3.0 / 16.0;
- float z0 = z + tileShapeZ0;
- float z1 = z + tileShapeZ1;
+ float x0 = x + tileShapeX0;
+ float x1 = x + tileShapeX1;
+ float y0 = y + tileShapeY0 + 3.0 / 16.0;
+ float z0 = z + tileShapeZ0;
+ float z1 = z + tileShapeZ1;
- t->vertexUV( x0 , y0 , z1 , u0 , v1 );
- t->vertexUV( x0 , y0 , z0 , u0 , v0 );
- t->vertexUV( x1 , y0 , z0 , u1 , v0 );
- t->vertexUV( x1 , y0 , z1 , u1 , v1 );
- }
+ t->vertexUV(x0, y0, z1, u0, v1);
+ t->vertexUV(x0, y0, z0, u0, v0);
+ t->vertexUV(x1, y0, z0, u1, v0);
+ t->vertexUV(x1, y0, z1, u1, v1);
+ }
- // render bed top
- // 4J - change brought forward from 1.8.2
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y + 1, z ) );
- t->color( r11, g11, b11 );
- }
- else
- {
- float brightness = tt->getBrightness( level, x, y + 1, z );
- t->color( r11 * brightness, g11 * brightness, b11 * brightness );
- }
+ // render bed top
+ // 4J - change brought forward from 1.8.2
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y + 1, z));
+ t->color(r11, g11, b11);
+ } else {
+ float brightness = tt->getBrightness(level, x, y + 1, z);
+ t->color(r11 * brightness, g11 * brightness, b11 * brightness);
+ }
- Icon_SPU *tex = getTexture( tt, level, x, y, z, Facing::UP );
+ Icon_SPU* tex = getTexture(tt, level, x, y, z, Facing::UP);
- float u0 = tex->getU0();
- float u1 = tex->getU1();
- float v0 = tex->getV0();
- float v1 = tex->getV1();
+ float u0 = tex->getU0();
+ float u1 = tex->getU1();
+ float v0 = tex->getV0();
+ float v1 = tex->getV1();
- float topLeftU = u0;
- float topRightU = u1;
- float topLeftV = v0;
- float topRightV = v0;
- float bottomLeftU = u0;
- float bottomRightU = u1;
- float bottomLeftV = v1;
- float bottomRightV = v1;
+ float topLeftU = u0;
+ float topRightU = u1;
+ float topLeftV = v0;
+ float topRightV = v0;
+ float bottomLeftU = u0;
+ float bottomRightU = u1;
+ float bottomLeftV = v1;
+ float bottomRightV = v1;
- if ( direction == Direction::SOUTH )
- {
- // rotate 90 degrees clockwise
- topRightU = u0;
- topLeftV = v1;
- bottomLeftU = u1;
- bottomRightV = v0;
- }
- else if ( direction == Direction::NORTH )
- {
- // rotate 90 degrees counter-clockwise
- topLeftU = u1;
- topRightV = v1;
- bottomRightU = u0;
- bottomLeftV = v0;
- }
- else if ( direction == Direction::EAST )
- {
- // rotate 180 degrees
- topLeftU = u1;
- topRightV = v1;
- bottomRightU = u0;
- bottomLeftV = v0;
- topRightU = u0;
- topLeftV = v1;
- bottomLeftU = u1;
- bottomRightV = v0;
- }
+ if (direction == Direction::SOUTH) {
+ // rotate 90 degrees clockwise
+ topRightU = u0;
+ topLeftV = v1;
+ bottomLeftU = u1;
+ bottomRightV = v0;
+ } else if (direction == Direction::NORTH) {
+ // rotate 90 degrees counter-clockwise
+ topLeftU = u1;
+ topRightV = v1;
+ bottomRightU = u0;
+ bottomLeftV = v0;
+ } else if (direction == Direction::EAST) {
+ // rotate 180 degrees
+ topLeftU = u1;
+ topRightV = v1;
+ bottomRightU = u0;
+ bottomLeftV = v0;
+ topRightU = u0;
+ topLeftV = v1;
+ bottomLeftU = u1;
+ bottomRightV = v0;
+ }
- float x0 = x + tileShapeX0;
- float x1 = x + tileShapeX1;
- float y1 = y + tileShapeY1;
- float z0 = z + tileShapeZ0;
- float z1 = z + tileShapeZ1;
+ float x0 = x + tileShapeX0;
+ float x1 = x + tileShapeX1;
+ float y1 = y + tileShapeY1;
+ float z0 = z + tileShapeZ0;
+ float z1 = z + tileShapeZ1;
- t->vertexUV( x1 , y1 , z1 , bottomLeftU ,bottomLeftV );
- t->vertexUV( x1 , y1 , z0 , topLeftU , topLeftV );
- t->vertexUV( x0 , y1 , z0 , topRightU ,topRightV );
- t->vertexUV( x0 , y1 , z1 , bottomRightU ,bottomRightV );
+ t->vertexUV(x1, y1, z1, bottomLeftU, bottomLeftV);
+ t->vertexUV(x1, y1, z0, topLeftU, topLeftV);
+ t->vertexUV(x0, y1, z0, topRightU, topRightV);
+ t->vertexUV(x0, y1, z1, bottomRightU, bottomRightV);
- // determine which edge to skip (the one between foot and head piece)
- int skipEdge = Direction::DIRECTION_FACING[direction];
- if ( isHead )
- {
- skipEdge = Direction::DIRECTION_FACING[Direction::DIRECTION_OPPOSITE[direction]];
- }
- // and which edge to x-flip
- int flipEdge = Facing::WEST;
- switch ( direction )
- {
- case Direction::NORTH:
- break;
- case Direction::SOUTH:
- flipEdge = Facing::EAST;
- break;
- case Direction::EAST:
- flipEdge = Facing::NORTH;
- break;
- case Direction::WEST:
- flipEdge = Facing::SOUTH;
- break;
- }
+ // determine which edge to skip (the one between foot and head piece)
+ int skipEdge = Direction::DIRECTION_FACING[direction];
+ if (isHead) {
+ skipEdge = Direction::DIRECTION_FACING
+ [Direction::DIRECTION_OPPOSITE[direction]];
+ }
+ // and which edge to x-flip
+ int flipEdge = Facing::WEST;
+ switch (direction) {
+ case Direction::NORTH:
+ break;
+ case Direction::SOUTH:
+ flipEdge = Facing::EAST;
+ break;
+ case Direction::EAST:
+ flipEdge = Facing::NORTH;
+ break;
+ case Direction::WEST:
+ flipEdge = Facing::SOUTH;
+ break;
+ }
- if ( ( skipEdge != Facing::NORTH ) && ( noCulling || tt->shouldRenderFace( level, x, y, z - 1, Facing::NORTH ) ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeZ0 > 0 ? centerColor : tt->getLightColor( level, x, y, z - 1 ) );
- t->color( r2, g2, b2 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z - 1 );
- if ( tileShapeZ0 > 0 ) br = centerBrightness;
- t->color( r2 * br, g2 * br, b2 * br );
- }
- xFlipTexture = flipEdge == Facing::NORTH;
- renderNorth( tt, x, y, z, getTexture( tt, level, x, y, z, 2 ) );
- }
+ if ((skipEdge != Facing::NORTH) &&
+ (noCulling ||
+ tt->shouldRenderFace(level, x, y, z - 1, Facing::NORTH))) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeZ0 > 0 ? centerColor
+ : tt->getLightColor(level, x, y, z - 1));
+ t->color(r2, g2, b2);
+ } else {
+ float br = tt->getBrightness(level, x, y, z - 1);
+ if (tileShapeZ0 > 0) br = centerBrightness;
+ t->color(r2 * br, g2 * br, b2 * br);
+ }
+ xFlipTexture = flipEdge == Facing::NORTH;
+ renderNorth(tt, x, y, z, getTexture(tt, level, x, y, z, 2));
+ }
- if ( ( skipEdge != Facing::SOUTH ) && ( noCulling || tt->shouldRenderFace( level, x, y, z + 1, Facing::SOUTH ) ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeZ1 < 1 ? centerColor : tt->getLightColor( level, x, y, z + 1 ) );
- t->color( r2, g2, b2 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z + 1 );
- if ( tileShapeZ1 < 1 ) br = centerBrightness;
- t->color( r2 * br, g2 * br, b2 * br );
- }
+ if ((skipEdge != Facing::SOUTH) &&
+ (noCulling ||
+ tt->shouldRenderFace(level, x, y, z + 1, Facing::SOUTH))) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeZ1 < 1 ? centerColor
+ : tt->getLightColor(level, x, y, z + 1));
+ t->color(r2, g2, b2);
+ } else {
+ float br = tt->getBrightness(level, x, y, z + 1);
+ if (tileShapeZ1 < 1) br = centerBrightness;
+ t->color(r2 * br, g2 * br, b2 * br);
+ }
- xFlipTexture = flipEdge == Facing::SOUTH;
- renderSouth( tt, x, y, z, getTexture( tt, level, x, y, z, 3 ) );
- }
+ xFlipTexture = flipEdge == Facing::SOUTH;
+ renderSouth(tt, x, y, z, getTexture(tt, level, x, y, z, 3));
+ }
- if ( ( skipEdge != Facing::WEST ) && ( noCulling || tt->shouldRenderFace( level, x - 1, y, z, Facing::WEST ) ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeZ0 > 0 ? centerColor : tt->getLightColor( level, x - 1, y, z ) );
- t->color( r3, g3, b3 );
- }
- else
- {
- float br = tt->getBrightness( level, x - 1, y, z );
- if ( tileShapeX0 > 0 ) br = centerBrightness;
- t->color( r3 * br, g3 * br, b3 * br );
- }
- xFlipTexture = flipEdge == Facing::WEST;
- renderWest( tt, x, y, z, getTexture( tt, level, x, y, z, 4 ) );
- }
+ if ((skipEdge != Facing::WEST) &&
+ (noCulling || tt->shouldRenderFace(level, x - 1, y, z, Facing::WEST))) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeZ0 > 0 ? centerColor
+ : tt->getLightColor(level, x - 1, y, z));
+ t->color(r3, g3, b3);
+ } else {
+ float br = tt->getBrightness(level, x - 1, y, z);
+ if (tileShapeX0 > 0) br = centerBrightness;
+ t->color(r3 * br, g3 * br, b3 * br);
+ }
+ xFlipTexture = flipEdge == Facing::WEST;
+ renderWest(tt, x, y, z, getTexture(tt, level, x, y, z, 4));
+ }
- if ( ( skipEdge != Facing::EAST ) && ( noCulling || tt->shouldRenderFace( level, x + 1, y, z, Facing::EAST ) ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeZ1 < 1 ? centerColor : tt->getLightColor( level, x + 1, y, z ) );
- t->color( r3, g3, b3 );
- }
- else
- {
- float br = tt->getBrightness( level, x + 1, y, z );
- if ( tileShapeX1 < 1 ) br = centerBrightness;
- t->color( r3 * br, g3 * br, b3 * br );
- }
- xFlipTexture = flipEdge == Facing::EAST;
- renderEast( tt, x, y, z, getTexture( tt, level, x, y, z, 5 ) );
- }
- xFlipTexture = false;
-#endif // DISABLE_TESS_FUNCS
-
- return true;
+ if ((skipEdge != Facing::EAST) &&
+ (noCulling || tt->shouldRenderFace(level, x + 1, y, z, Facing::EAST))) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeZ1 < 1 ? centerColor
+ : tt->getLightColor(level, x + 1, y, z));
+ t->color(r3, g3, b3);
+ } else {
+ float br = tt->getBrightness(level, x + 1, y, z);
+ if (tileShapeX1 < 1) br = centerBrightness;
+ t->color(r3 * br, g3 * br, b3 * br);
+ }
+ xFlipTexture = flipEdge == Facing::EAST;
+ renderEast(tt, x, y, z, getTexture(tt, level, x, y, z, 5));
+ }
+ xFlipTexture = false;
+#endif // DISABLE_TESS_FUNCS
+ return true;
}
-bool TileRenderer_SPU::tesselateBrewingStandInWorld(BrewingStandTile_SPU *tt, int x, int y, int z)
-{
-
-// EnterCriticalSection( &Tile_SPU::m_csShape );
+bool TileRenderer_SPU::tesselateBrewingStandInWorld(BrewingStandTile_SPU* tt,
+ int x, int y, int z) {
+ // EnterCriticalSection( &Tile_SPU::m_csShape );
// bounding box first
- setShape(7.0f / 16.0f, 0.0f, 7.0f / 16.0f, 9.0f / 16.0f, 14.0f / 16.0f, 9.0f / 16.0f);
+ setShape(7.0f / 16.0f, 0.0f, 7.0f / 16.0f, 9.0f / 16.0f, 14.0f / 16.0f,
+ 9.0f / 16.0f);
tesselateBlockInWorld(tt, x, y, z);
setFixedTexture(tt->getBaseTexture());
- setShape(9.0f / 16.0f, 0.0f, 5.0f / 16.0f, 15.0f / 16.0f, 2 / 16.0f, 11.0f / 16.0f);
+ setShape(9.0f / 16.0f, 0.0f, 5.0f / 16.0f, 15.0f / 16.0f, 2 / 16.0f,
+ 11.0f / 16.0f);
tesselateBlockInWorld(tt, x, y, z);
- setShape(2.0f / 16.0f, 0.0f, 1.0f / 16.0f, 8.0f / 16.0f, 2 / 16.0f, 7.0f / 16.0f);
+ setShape(2.0f / 16.0f, 0.0f, 1.0f / 16.0f, 8.0f / 16.0f, 2 / 16.0f,
+ 7.0f / 16.0f);
tesselateBlockInWorld(tt, x, y, z);
- setShape(2.0f / 16.0f, 0.0f, 9.0f / 16.0f, 8.0f / 16.0f, 2 / 16.0f, 15.0f / 16.0f);
+ setShape(2.0f / 16.0f, 0.0f, 9.0f / 16.0f, 8.0f / 16.0f, 2 / 16.0f,
+ 15.0f / 16.0f);
tesselateBlockInWorld(tt, x, y, z);
clearFixedTexture();
- Tesselator_SPU* t = getTesselator();
+ Tesselator_SPU* t = getTesselator();
float br;
- if (SharedConstants::TEXTURE_LIGHTING)
- {
+ if (SharedConstants::TEXTURE_LIGHTING) {
t->tex2(tt->getLightColor(level, x, y, z));
br = 1;
- }
- else
- {
+ } else {
br = tt->getBrightness(level, x, y, z);
}
int col = tt->getColor(level, x, y, z);
@@ -686,31 +647,29 @@ bool TileRenderer_SPU::tesselateBrewingStandInWorld(BrewingStandTile_SPU *tt, in
t->color(br * r, br * g, br * b);
- Icon_SPU *tex = getTexture(tt, 0, 0);
+ Icon_SPU* tex = getTexture(tt, 0, 0);
- if (hasFixedTexture()) tex = fixedTexture;
- float v0 = tex->getV0();
- float v1 = tex->getV1();
+ if (hasFixedTexture()) tex = fixedTexture;
+ float v0 = tex->getV0();
+ float v1 = tex->getV1();
int data = level->getData(x, y, z);
- for (int arm = 0; arm < 3; arm++)
- {
-
+ for (int arm = 0; arm < 3; arm++) {
float angle = arm * MATH_PI * 2.0f / 3.0f + MATH_PI * 0.5f;
- float u0 = tex->getU(8);
- float u1 = tex->getU1();
-// if (brewEntity != null && brewEntity.getItem(arm) != null) {
- if ((data & (1 << arm)) != 0)
- {
+ float u0 = tex->getU(8);
+ float u1 = tex->getU1();
+ // if (brewEntity != null && brewEntity.getItem(arm) != null)
+ // {
+ if ((data & (1 << arm)) != 0) {
u1 = tex->getU0();
}
- float x0 = x + 8.0f / 16.0f;
- float x1 = x + 8.0f / 16.0f + sin(angle) * 8.0f / 16.0f;
- float z0 = z + 8.0f / 16.0f;
- float z1 = z + 8.0f / 16.0f + cos(angle) * 8.0f / 16.0f;
+ float x0 = x + 8.0f / 16.0f;
+ float x1 = x + 8.0f / 16.0f + sin(angle) * 8.0f / 16.0f;
+ float z0 = z + 8.0f / 16.0f;
+ float z1 = z + 8.0f / 16.0f + cos(angle) * 8.0f / 16.0f;
t->vertexUV(x0, y + 1.0f, z0, u0, v0);
t->vertexUV(x0, y + 0.0f, z0, u0, v1);
@@ -725,27 +684,24 @@ bool TileRenderer_SPU::tesselateBrewingStandInWorld(BrewingStandTile_SPU *tt, in
tt->updateDefaultShape();
-// LeaveCriticalSection( &Tile_SPU::m_csShape );
+ // LeaveCriticalSection( &Tile_SPU::m_csShape );
return true;
}
-bool TileRenderer_SPU::tesselateCauldronInWorld(CauldronTile_SPU *tt, int x, int y, int z)
-{
+bool TileRenderer_SPU::tesselateCauldronInWorld(CauldronTile_SPU* tt, int x,
+ int y, int z) {
#ifdef DISABLE_TESS_FUNCS
// bounding box first
tesselateBlockInWorld(tt, x, y, z);
- Tesselator_SPU* t = getTesselator();
+ Tesselator_SPU* t = getTesselator();
float br;
- if (SharedConstants::TEXTURE_LIGHTING)
- {
+ if (SharedConstants::TEXTURE_LIGHTING) {
t->tex2(tt->getLightColor(level, x, y, z));
br = 1;
- }
- else
- {
+ } else {
br = tt->getBrightness(level, x, y, z);
}
int col = tt->getColor(level, x, y, z);
@@ -756,3058 +712,3045 @@ bool TileRenderer_SPU::tesselateCauldronInWorld(CauldronTile_SPU *tt, int x, int
t->color(br * r, br * g, br * b);
// render inside
- Icon_SPU *insideTex = tt->getTexture(Facing::NORTH);
- const float cWidth = ( 2.0f / 16.0f ) - ( 1.0f / 128.0f ); // 4J - Moved by 1/128th (smallest movement possible with our vertex storage) to remove gap at edge of cauldron
+ Icon_SPU* insideTex = tt->getTexture(Facing::NORTH);
+ const float cWidth =
+ (2.0f / 16.0f) -
+ (1.0f /
+ 128.0f); // 4J - Moved by 1/128th (smallest movement possible with our
+ // vertex storage) to remove gap at edge of cauldron
renderEast(tt, x - 1.0f + cWidth, y, z, insideTex);
renderWest(tt, x + 1.0f - cWidth, y, z, insideTex);
renderSouth(tt, x, y, z - 1.0f + cWidth, insideTex);
renderNorth(tt, x, y, z + 1.0f - cWidth, insideTex);
- Icon_SPU *bottomTex = CauldronTile::getTexture(CauldronTile::TEXTURE_INSIDE);
+ Icon_SPU* bottomTex =
+ CauldronTile::getTexture(CauldronTile::TEXTURE_INSIDE);
renderFaceUp(tt, x, y - 1.0f + 4.0f / 16.0f, z, bottomTex);
renderFaceDown(tt, x, y + 1.0f - 12.0f / 16.0f, z, bottomTex);
int waterLevel = level->getData(x, y, z);
- if (waterLevel > 0)
- {
- Icon_SPU *liquidTex = LiquidTile_SPU::getTexture(LiquidTile_SPU::TEXTURE_WATER_STILL);
+ if (waterLevel > 0) {
+ Icon_SPU* liquidTex =
+ LiquidTile_SPU::getTexture(LiquidTile_SPU::TEXTURE_WATER_STILL);
- if (waterLevel > 3)
- {
+ if (waterLevel > 3) {
waterLevel = 3;
}
- renderFaceUp(tt, x, y - 1.0f + (6.0f + waterLevel * 3.0f) / 16.0f, z, liquidTex);
+ renderFaceUp(tt, x, y - 1.0f + (6.0f + waterLevel * 3.0f) / 16.0f, z,
+ liquidTex);
}
-#endif // DISABLE_TESS_FUNCS
+#endif // DISABLE_TESS_FUNCS
return true;
-
}
-bool TileRenderer_SPU::tesselateFlowerPotInWorld(FlowerPotTile_SPU *tt, int x, int y, int z)
-{
+bool TileRenderer_SPU::tesselateFlowerPotInWorld(FlowerPotTile_SPU* tt, int x,
+ int y, int z) {
#ifdef DISABLE_TESS_FUNCS
- // bounding box first
- tesselateBlockInWorld(tt, x, y, z);
+ // bounding box first
+ tesselateBlockInWorld(tt, x, y, z);
- Tesselator *t = Tesselator::getInstance();
+ Tesselator* t = Tesselator::getInstance();
- float br;
- if (SharedConstants::TEXTURE_LIGHTING)
- {
- t->tex2(tt->getLightColor(level, x, y, z));
- br = 1;
- }
- else
- {
- br = tt->getBrightness(level, x, y, z);
- }
- int col = tt->getColor(level, x, y, z);
- Icon *tex = getTexture(tt, 0);
- float r = ((col >> 16) & 0xff) / 255.0f;
- float g = ((col >> 8) & 0xff) / 255.0f;
- float b = ((col) & 0xff) / 255.0f;
+ float br;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ br = 1;
+ } else {
+ br = tt->getBrightness(level, x, y, z);
+ }
+ int col = tt->getColor(level, x, y, z);
+ Icon* tex = getTexture(tt, 0);
+ float r = ((col >> 16) & 0xff) / 255.0f;
+ float g = ((col >> 8) & 0xff) / 255.0f;
+ float b = ((col) & 0xff) / 255.0f;
- if (GameRenderer::anaglyph3d)
- {
- float cr = (r * 30 + g * 59 + b * 11) / 100;
- float cg = (r * 30 + g * 70) / (100);
- float cb = (r * 30 + b * 70) / (100);
+ if (GameRenderer::anaglyph3d) {
+ float cr = (r * 30 + g * 59 + b * 11) / 100;
+ float cg = (r * 30 + g * 70) / (100);
+ float cb = (r * 30 + b * 70) / (100);
- r = cr;
- g = cg;
- b = cb;
- }
- t->color(br * r, br * g, br * b);
+ r = cr;
+ g = cg;
+ b = cb;
+ }
+ t->color(br * r, br * g, br * b);
- // render inside
+ // render inside
- float halfWidth = (6.0f / 16.0f) / 2 - 0.001f;
- renderEast(tt, x - 0.5f + halfWidth, y, z, tex);
- renderWest(tt, x + 0.5f - halfWidth, y, z, tex);
- renderSouth(tt, x, y, z - 0.5f + halfWidth, tex);
- renderNorth(tt, x, y, z + 0.5f - halfWidth, tex);
+ float halfWidth = (6.0f / 16.0f) / 2 - 0.001f;
+ renderEast(tt, x - 0.5f + halfWidth, y, z, tex);
+ renderWest(tt, x + 0.5f - halfWidth, y, z, tex);
+ renderSouth(tt, x, y, z - 0.5f + halfWidth, tex);
+ renderNorth(tt, x, y, z + 0.5f - halfWidth, tex);
- renderFaceUp(tt, x, y - 0.5f + halfWidth + 3.0f / 16.0f, z, getTexture(Tile::dirt));
+ renderFaceUp(tt, x, y - 0.5f + halfWidth + 3.0f / 16.0f, z,
+ getTexture(Tile::dirt));
- int type = level->getData(x, y, z);
+ int type = level->getData(x, y, z);
- if (type != 0)
- {
- float xOff = 0;
- float yOff = 4;
- float zOff = 0;
- Tile *plant = NULL;
+ if (type != 0) {
+ float xOff = 0;
+ float yOff = 4;
+ float zOff = 0;
+ Tile* plant = NULL;
- switch (type)
- {
- case FlowerPotTile::TYPE_FLOWER_RED:
- plant = Tile::rose;
- break;
- case FlowerPotTile::TYPE_FLOWER_YELLOW:
- plant = Tile::flower;
- break;
- case FlowerPotTile::TYPE_MUSHROOM_BROWN:
- plant = Tile::mushroom1;
- break;
- case FlowerPotTile::TYPE_MUSHROOM_RED:
- plant = Tile::mushroom2;
- break;
- }
+ switch (type) {
+ case FlowerPotTile::TYPE_FLOWER_RED:
+ plant = Tile::rose;
+ break;
+ case FlowerPotTile::TYPE_FLOWER_YELLOW:
+ plant = Tile::flower;
+ break;
+ case FlowerPotTile::TYPE_MUSHROOM_BROWN:
+ plant = Tile::mushroom1;
+ break;
+ case FlowerPotTile::TYPE_MUSHROOM_RED:
+ plant = Tile::mushroom2;
+ break;
+ }
- t->addOffset(xOff / 16.0f, yOff / 16.0f, zOff / 16.0f);
+ t->addOffset(xOff / 16.0f, yOff / 16.0f, zOff / 16.0f);
- if (plant != NULL)
- {
- tesselateInWorld(plant, x, y, z);
- }
- else
- {
- if (type == FlowerPotTile::TYPE_CACTUS)
- {
+ if (plant != NULL) {
+ tesselateInWorld(plant, x, y, z);
+ } else {
+ if (type == FlowerPotTile::TYPE_CACTUS) {
+ // Force drawing of all faces else the cactus misses faces
+ // when a block is adjacent
+ noCulling = true;
- // Force drawing of all faces else the cactus misses faces
- // when a block is adjacent
- noCulling = true;
+ float halfSize = 0.25f / 2;
+ setShape(0.5f - halfSize, 0.0f, 0.5f - halfSize,
+ 0.5f + halfSize, 0.25f, 0.5f + halfSize);
+ tesselateBlockInWorld(Tile::cactus, x, y, z);
+ setShape(0.5f - halfSize, 0.25f, 0.5f - halfSize,
+ 0.5f + halfSize, 0.5f, 0.5f + halfSize);
+ tesselateBlockInWorld(Tile::cactus, x, y, z);
+ setShape(0.5f - halfSize, 0.5f, 0.5f - halfSize,
+ 0.5f + halfSize, 0.75f, 0.5f + halfSize);
+ tesselateBlockInWorld(Tile::cactus, x, y, z);
- float halfSize = 0.25f / 2;
- setShape(0.5f - halfSize, 0.0f, 0.5f - halfSize, 0.5f + halfSize, 0.25f, 0.5f + halfSize);
- tesselateBlockInWorld(Tile::cactus, x, y, z);
- setShape(0.5f - halfSize, 0.25f, 0.5f - halfSize, 0.5f + halfSize, 0.5f, 0.5f + halfSize);
- tesselateBlockInWorld(Tile::cactus, x, y, z);
- setShape(0.5f - halfSize, 0.5f, 0.5f - halfSize, 0.5f + halfSize, 0.75f, 0.5f + halfSize);
- tesselateBlockInWorld(Tile::cactus, x, y, z);
+ noCulling = false;
- noCulling = false;
+ setShape(0, 0, 0, 1, 1, 1);
+ } else if (type == FlowerPotTile::TYPE_SAPLING_DEFAULT) {
+ tesselateCrossTexture(Tile::sapling, Sapling::TYPE_DEFAULT, x,
+ y, z, 0.75f);
+ } else if (type == FlowerPotTile::TYPE_SAPLING_BIRCH) {
+ tesselateCrossTexture(Tile::sapling, Sapling::TYPE_BIRCH, x, y,
+ z, 0.75f);
+ } else if (type == FlowerPotTile::TYPE_SAPLING_EVERGREEN) {
+ tesselateCrossTexture(Tile::sapling, Sapling::TYPE_EVERGREEN, x,
+ y, z, 0.75f);
+ } else if (type == FlowerPotTile::TYPE_SAPLING_JUNGLE) {
+ tesselateCrossTexture(Tile::sapling, Sapling::TYPE_JUNGLE, x, y,
+ z, 0.75f);
+ } else if (type == FlowerPotTile::TYPE_FERN) {
+ col = Tile::tallgrass->getColor(level, x, y, z);
+ r = ((col >> 16) & 0xff) / 255.0f;
+ g = ((col >> 8) & 0xff) / 255.0f;
+ b = ((col) & 0xff) / 255.0f;
+ t->color(br * r, br * g, br * b);
+ tesselateCrossTexture(Tile::tallgrass, TallGrass::FERN, x, y, z,
+ 0.75f);
+ } else if (type == FlowerPotTile::TYPE_DEAD_BUSH) {
+ tesselateCrossTexture(Tile::deadBush, TallGrass::FERN, x, y, z,
+ 0.75f);
+ }
+ }
- setShape(0, 0, 0, 1, 1, 1);
- }
- else if (type == FlowerPotTile::TYPE_SAPLING_DEFAULT)
- {
- tesselateCrossTexture(Tile::sapling, Sapling::TYPE_DEFAULT, x, y, z, 0.75f);
- }
- else if (type == FlowerPotTile::TYPE_SAPLING_BIRCH)
- {
- tesselateCrossTexture(Tile::sapling, Sapling::TYPE_BIRCH, x, y, z, 0.75f);
- }
- else if (type == FlowerPotTile::TYPE_SAPLING_EVERGREEN)
- {
- tesselateCrossTexture(Tile::sapling, Sapling::TYPE_EVERGREEN, x, y, z, 0.75f);
- }
- else if (type == FlowerPotTile::TYPE_SAPLING_JUNGLE)
- {
- tesselateCrossTexture(Tile::sapling, Sapling::TYPE_JUNGLE, x, y, z, 0.75f);
- }
- else if (type == FlowerPotTile::TYPE_FERN)
- {
- col = Tile::tallgrass->getColor(level, x, y, z);
- r = ((col >> 16) & 0xff) / 255.0f;
- g = ((col >> 8) & 0xff) / 255.0f;
- b = ((col) & 0xff) / 255.0f;
- t->color(br * r, br * g, br * b);
- tesselateCrossTexture(Tile::tallgrass, TallGrass::FERN, x, y, z, 0.75f);
- }
- else if (type == FlowerPotTile::TYPE_DEAD_BUSH)
- {
- tesselateCrossTexture(Tile::deadBush, TallGrass::FERN, x, y, z, 0.75f);
- }
- }
+ t->addOffset(-xOff / 16.0f, -yOff / 16.0f, -zOff / 16.0f);
+ }
+#endif // DISABLE_TESS_FUNCS
- t->addOffset(-xOff / 16.0f, -yOff / 16.0f, -zOff / 16.0f);
- }
-#endif //DISABLE_TESS_FUNCS
-
- return true;
+ return true;
}
-bool TileRenderer_SPU::tesselateAnvilInWorld(AnvilTile_SPU *tt, int x, int y, int z)
-{
- return tesselateAnvilInWorld(tt, x, y, z, level->getData(x, y, z));
-
+bool TileRenderer_SPU::tesselateAnvilInWorld(AnvilTile_SPU* tt, int x, int y,
+ int z) {
+ return tesselateAnvilInWorld(tt, x, y, z, level->getData(x, y, z));
}
-bool TileRenderer_SPU::tesselateAnvilInWorld(AnvilTile_SPU *tt, int x, int y, int z, int data)
-{
+bool TileRenderer_SPU::tesselateAnvilInWorld(AnvilTile_SPU* tt, int x, int y,
+ int z, int data) {
#ifdef DISABLE_TESS_FUNCS
- Tesselator *t = Tesselator::getInstance();
+ Tesselator* t = Tesselator::getInstance();
- float br;
- if (SharedConstants::TEXTURE_LIGHTING)
- {
- t->tex2(tt->getLightColor(level, x, y, z));
- br = 1;
- }
- else
- {
- br = tt->getBrightness(level, x, y, z);
- }
- int col = tt->getColor(level, x, y, z);
- float r = ((col >> 16) & 0xff) / 255.0f;
- float g = ((col >> 8) & 0xff) / 255.0f;
- float b = ((col) & 0xff) / 255.0f;
+ float br;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ br = 1;
+ } else {
+ br = tt->getBrightness(level, x, y, z);
+ }
+ int col = tt->getColor(level, x, y, z);
+ float r = ((col >> 16) & 0xff) / 255.0f;
+ float g = ((col >> 8) & 0xff) / 255.0f;
+ float b = ((col) & 0xff) / 255.0f;
- if (GameRenderer::anaglyph3d)
- {
- float cr = (r * 30 + g * 59 + b * 11) / 100;
- float cg = (r * 30 + g * 70) / (100);
- float cb = (r * 30 + b * 70) / (100);
+ if (GameRenderer::anaglyph3d) {
+ float cr = (r * 30 + g * 59 + b * 11) / 100;
+ float cg = (r * 30 + g * 70) / (100);
+ float cb = (r * 30 + b * 70) / (100);
- r = cr;
- g = cg;
- b = cb;
- }
- t->color(br * r, br * g, br * b);
-#endif // DISABLE_TESS_FUNCS
+ r = cr;
+ g = cg;
+ b = cb;
+ }
+ t->color(br * r, br * g, br * b);
+#endif // DISABLE_TESS_FUNCS
-
- return tesselateAnvilInWorld(tt, x, y, z, data, false);
+ return tesselateAnvilInWorld(tt, x, y, z, data, false);
}
-bool TileRenderer_SPU::tesselateAnvilInWorld(AnvilTile_SPU *tt, int x, int y, int z, int data, bool render)
-{
+bool TileRenderer_SPU::tesselateAnvilInWorld(AnvilTile_SPU* tt, int x, int y,
+ int z, int data, bool render) {
#ifdef DISABLE_TESS_FUNCS
- int facing = render ? 0 : data & 3;
- boolean rotate = false;
- float bottom = 0;
+ int facing = render ? 0 : data & 3;
+ boolean rotate = false;
+ float bottom = 0;
- switch (facing)
- {
- case Direction::NORTH:
- eastFlip = FLIP_CW;
- westFlip = FLIP_CCW;
- break;
- case Direction::SOUTH:
- eastFlip = FLIP_CCW;
- westFlip = FLIP_CW;
- upFlip = FLIP_180;
- downFlip = FLIP_180;
- break;
- case Direction::WEST:
- northFlip = FLIP_CW;
- southFlip = FLIP_CCW;
- upFlip = FLIP_CCW;
- downFlip = FLIP_CW;
- rotate = true;
- break;
- case Direction::EAST:
- northFlip = FLIP_CCW;
- southFlip = FLIP_CW;
- upFlip = FLIP_CW;
- downFlip = FLIP_CCW;
- rotate = true;
- break;
- }
+ switch (facing) {
+ case Direction::NORTH:
+ eastFlip = FLIP_CW;
+ westFlip = FLIP_CCW;
+ break;
+ case Direction::SOUTH:
+ eastFlip = FLIP_CCW;
+ westFlip = FLIP_CW;
+ upFlip = FLIP_180;
+ downFlip = FLIP_180;
+ break;
+ case Direction::WEST:
+ northFlip = FLIP_CW;
+ southFlip = FLIP_CCW;
+ upFlip = FLIP_CCW;
+ downFlip = FLIP_CW;
+ rotate = true;
+ break;
+ case Direction::EAST:
+ northFlip = FLIP_CCW;
+ southFlip = FLIP_CW;
+ upFlip = FLIP_CW;
+ downFlip = FLIP_CCW;
+ rotate = true;
+ break;
+ }
- bottom = tesselateAnvilPiece(tt, x, y, z, AnvilTile::PART_BASE, bottom, 12.0f / 16.0f, 4.0f / 16.0f, 12.0f / 16.0f, rotate, render, data);
- bottom = tesselateAnvilPiece(tt, x, y, z, AnvilTile::PART_JOINT, bottom, 8.0f / 16.0f, 1.0f / 16.0f, 10.0f / 16.0f, rotate, render, data);
- bottom = tesselateAnvilPiece(tt, x, y, z, AnvilTile::PART_COLUMN, bottom, 4.0f / 16.0f, 5.0f / 16.0f, 8.0f / 16.0f, rotate, render, data);
- bottom = tesselateAnvilPiece(tt, x, y, z, AnvilTile::PART_TOP, bottom, 10.0f / 16.0f, 6.0f / 16.0f, 16.0f / 16.0f, rotate, render, data);
+ bottom = tesselateAnvilPiece(tt, x, y, z, AnvilTile::PART_BASE, bottom,
+ 12.0f / 16.0f, 4.0f / 16.0f, 12.0f / 16.0f,
+ rotate, render, data);
+ bottom = tesselateAnvilPiece(tt, x, y, z, AnvilTile::PART_JOINT, bottom,
+ 8.0f / 16.0f, 1.0f / 16.0f, 10.0f / 16.0f,
+ rotate, render, data);
+ bottom = tesselateAnvilPiece(tt, x, y, z, AnvilTile::PART_COLUMN, bottom,
+ 4.0f / 16.0f, 5.0f / 16.0f, 8.0f / 16.0f,
+ rotate, render, data);
+ bottom = tesselateAnvilPiece(tt, x, y, z, AnvilTile::PART_TOP, bottom,
+ 10.0f / 16.0f, 6.0f / 16.0f, 16.0f / 16.0f,
+ rotate, render, data);
- setShape(0, 0, 0, 1, 1, 1);
- northFlip = FLIP_NONE;
- southFlip = FLIP_NONE;
- eastFlip = FLIP_NONE;
- westFlip = FLIP_NONE;
- upFlip = FLIP_NONE;
- downFlip = FLIP_NONE;
-#endif // DISABLE_TESS_FUNCS
+ setShape(0, 0, 0, 1, 1, 1);
+ northFlip = FLIP_NONE;
+ southFlip = FLIP_NONE;
+ eastFlip = FLIP_NONE;
+ westFlip = FLIP_NONE;
+ upFlip = FLIP_NONE;
+ downFlip = FLIP_NONE;
+#endif // DISABLE_TESS_FUNCS
- return true;
+ return true;
}
-float TileRenderer_SPU::tesselateAnvilPiece(AnvilTile_SPU *tt, int x, int y, int z, int part, float bottom, float width, float height, float length, bool rotate, bool render, int data)
+float TileRenderer_SPU::tesselateAnvilPiece(AnvilTile_SPU* tt, int x, int y,
+ int z, int part, float bottom,
+ float width, float height,
+ float length, bool rotate,
+ bool render, int data) {
+#ifdef DISABLE_TESS_FUNCS
+ if (rotate) {
+ float swap = width;
+ width = length;
+ length = swap;
+ }
+
+ width /= 2;
+ length /= 2;
+
+ ms_pTileData->anvilPart = part;
+ setShape(0.5f - width, bottom, 0.5f - length, 0.5f + width, bottom + height,
+ 0.5f + length);
+
+ if (render) {
+ Tesselator* t = Tesselator::getInstance();
+ t->begin();
+ t->normal(0, -1, 0);
+ renderFaceDown(tt, 0, 0, 0, getTexture(tt, 0, data));
+ t->end();
+
+ t->begin();
+ t->normal(0, 1, 0);
+ renderFaceUp(tt, 0, 0, 0, getTexture(tt, 1, data));
+ t->end();
+
+ t->begin();
+ t->normal(0, 0, -1);
+ renderNorth(tt, 0, 0, 0, getTexture(tt, 2, data));
+ t->end();
+
+ t->begin();
+ t->normal(0, 0, 1);
+ renderSouth(tt, 0, 0, 0, getTexture(tt, 3, data));
+ t->end();
+
+ t->begin();
+ t->normal(-1, 0, 0);
+ renderWest(tt, 0, 0, 0, getTexture(tt, 4, data));
+ t->end();
+
+ t->begin();
+ t->normal(1, 0, 0);
+ renderEast(tt, 0, 0, 0, getTexture(tt, 5, data));
+ t->end();
+ } else {
+ tesselateBlockInWorld(tt, x, y, z);
+ }
+#endif // DISABLE_TESS_FUNCS
+
+ return bottom + height;
+}
+
+bool TileRenderer_SPU::tesselateTorchInWorld(Tile_SPU* tt, int x, int y,
+ int z) {
+ int dir = level->getData(x, y, z);
+
+ Tesselator_SPU* t = getTesselator();
+
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ t->color(1.0f, 1.0f, 1.0f);
+ } else {
+ float br = tt->getBrightness(level, x, y, z);
+ if (level->m_tileData.lightEmission[tt->id] > 0) br = 1.0f;
+ t->color(br, br, br);
+ }
+
+ float r = 0.40f;
+ float r2 = 0.5f - r;
+ float h = 0.20f;
+ if (dir == 1) {
+ tesselateTorch(tt, (float)x - r2, (float)y + h, (float)z, -r, 0.0f, 0);
+ } else if (dir == 2) {
+ tesselateTorch(tt, (float)x + r2, (float)y + h, (float)z, +r, 0.0f, 0);
+ } else if (dir == 3) {
+ tesselateTorch(tt, (float)x, (float)y + h, z - r2, 0.0f, -r, 0);
+ } else if (dir == 4) {
+ tesselateTorch(tt, (float)x, (float)y + h, (float)z + r2, 0.0f, +r, 0);
+ } else {
+ tesselateTorch(tt, (float)x, (float)y, (float)z, 0.0f, 0.0f, 0);
+ }
+ return true;
+}
+
+bool TileRenderer_SPU::tesselateDiodeInWorld(DiodeTile_SPU* tt, int x, int y,
+ int z) {
+#ifdef DISABLE_TESS_FUNCS
+ Tesselator_SPU* t = getTesselator();
+
+ tesselateDiodeInWorld(
+ tt, x, y, z, level->getData(x, y, z) & DiodeTile_SPU::DIRECTION_MASK);
+ return true;
+#endif // #ifdef DISABLE_TESS_FUNCS
+ return false;
+}
+
+void TileRenderer_SPU::tesselateDiodeInWorld(DiodeTile_SPU* tt, int x, int y,
+ int z, int dir) {
+#ifdef DISABLE_TESS_FUNCS
+ // render half-block edges
+ tesselateBlockInWorld(tt, x, y, z);
+
+ Tesselator_SPU* t = getTesselator();
+
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ t->color(1.0f, 1.0f, 1.0f);
+ } else {
+ float br = tt->getBrightness(level, x, y, z);
+ if (level->m_tileData.lightEmission[tt->id] > 0) br = 1.0f;
+ t->color(br, br, br);
+ }
+
+ int data = level->getData(x, y, z);
+
+ // 4J Stu - This block gets moved in a later version, but we don't need that
+ // yet BEGIN TORCH SECTION
+ {
+ int dir = data & DiodeTile_SPU::DIRECTION_MASK;
+ int delay =
+ (data & DiodeTile_SPU::DELAY_MASK) >> DiodeTile_SPU::DELAY_SHIFT;
+ float h = -3.0f / 16.0f;
+ float transmitterX = 0.0f;
+ float transmitterZ = 0.0f;
+ float receiverX = 0.0f;
+ float receiverZ = 0.0f;
+
+ switch (dir) {
+ case Direction::SOUTH:
+ receiverZ = -5.0f / 16.0f;
+ transmitterZ = DiodeTile_SPU::DELAY_RENDER_OFFSETS[delay];
+ break;
+ case Direction::NORTH:
+ receiverZ = 5.0f / 16.0f;
+ transmitterZ = -DiodeTile_SPU::DELAY_RENDER_OFFSETS[delay];
+ break;
+ case Direction::EAST:
+ receiverX = -5.0f / 16.0f;
+ transmitterX = DiodeTile_SPU::DELAY_RENDER_OFFSETS[delay];
+ break;
+ case Direction::WEST:
+ receiverX = 5.0f / 16.0f;
+ transmitterX = -DiodeTile_SPU::DELAY_RENDER_OFFSETS[delay];
+ break;
+ }
+
+ // render transmitter
+ tesselateTorch(tt, x + transmitterX, y + h, z + transmitterZ, 0.0f,
+ 0.0f, 0);
+ // render receiver
+ tesselateTorch(tt, x + receiverX, y + h, z + receiverZ, 0.0f, 0.0f, 0);
+ }
+ // END TORCH SECTION
+
+ Icon_SPU* tex = getTexture(tt, Facing::UP, data);
+ float u0 = tex->getU0();
+ float u1 = tex->getU1();
+ float v0 = tex->getV0();
+ float v1 = tex->getV1();
+
+ float r = 2.0f / 16.0f;
+
+ float x0 = (float)(x + 1.0f);
+ float x1 = (float)(x + 1.0f);
+ float x2 = (float)(x + 0.0f);
+ float x3 = (float)(x + 0.0f);
+
+ float z0 = (float)(z + 0.0f);
+ float z1 = (float)(z + 1.0f);
+ float z2 = (float)(z + 1.0f);
+ float z3 = (float)(z + 0.0f);
+
+ float y0 = (float)(y + r);
+
+ if (dir == Direction::NORTH) {
+ // rotate 180 degrees
+ x0 = x1 = (float)(x + 0.0f);
+ x2 = x3 = (float)(x + 1.0f);
+ z0 = z3 = (float)(z + 1.0f);
+ z1 = z2 = (float)(z + 0.0f);
+ } else if (dir == Direction::EAST) {
+ // rotate 90 degrees counter-clockwise
+ x0 = x3 = (float)(x + 0.0f);
+ x1 = x2 = (float)(x + 1.0f);
+ z0 = z1 = (float)(z + 0.0f);
+ z2 = z3 = (float)(z + 1.0f);
+ } else if (dir == Direction::WEST) {
+ // rotate 90 degrees clockwise
+ x0 = x3 = (float)(x + 1.0f);
+ x1 = x2 = (float)(x + 0.0f);
+ z0 = z1 = (float)(z + 1.0f);
+ z2 = z3 = (float)(z + 0.0f);
+ }
+
+ t->vertexUV(x3, y0, z3, u0, v0);
+ t->vertexUV(x2, y0, z2, u0, v1);
+ t->vertexUV(x1, y0, z1, u1, v1);
+ t->vertexUV(x0, y0, z0, u1, v0);
+#endif // #ifdef DISABLE_TESS_FUNCS
+}
+
+void TileRenderer_SPU::tesselatePistonBaseForceExtended(
+ Tile_SPU* tile, int x, int y, int z,
+ int forceData) // 4J added forceData param
{
#ifdef DISABLE_TESS_FUNCS
- if (rotate)
- {
- float swap = width;
- width = length;
- length = swap;
- }
-
- width /= 2;
- length /= 2;
-
- ms_pTileData->anvilPart = part;
- setShape(0.5f - width, bottom, 0.5f - length, 0.5f + width, bottom + height, 0.5f + length);
-
- if (render)
- {
- Tesselator *t = Tesselator::getInstance();
- t->begin();
- t->normal(0, -1, 0);
- renderFaceDown(tt, 0, 0, 0, getTexture(tt, 0, data));
- t->end();
-
- t->begin();
- t->normal(0, 1, 0);
- renderFaceUp(tt, 0, 0, 0, getTexture(tt, 1, data));
- t->end();
-
- t->begin();
- t->normal(0, 0, -1);
- renderNorth(tt, 0, 0, 0, getTexture(tt, 2, data));
- t->end();
-
- t->begin();
- t->normal(0, 0, 1);
- renderSouth(tt, 0, 0, 0, getTexture(tt, 3, data));
- t->end();
-
- t->begin();
- t->normal(-1, 0, 0);
- renderWest(tt, 0, 0, 0, getTexture(tt, 4, data));
- t->end();
-
- t->begin();
- t->normal(1, 0, 0);
- renderEast(tt, 0, 0, 0, getTexture(tt, 5, data));
- t->end();
- }
- else
- {
- tesselateBlockInWorld(tt, x, y, z);
- }
-#endif // DISABLE_TESS_FUNCS
-
- return bottom + height;
+ noCulling = true;
+ tesselatePistonBaseInWorld(tile, x, y, z, true, forceData);
+ noCulling = false;
+#endif // DISABLE_TESS_FUNCS
}
-
-bool TileRenderer_SPU::tesselateTorchInWorld( Tile_SPU* tt, int x, int y, int z )
-{
- int dir = level->getData( x, y, z );
-
- Tesselator_SPU* t = getTesselator();
-
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y, z ) );
- t->color( 1.0f, 1.0f, 1.0f );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z );
- if ( level->m_tileData.lightEmission[tt->id] > 0 ) br = 1.0f;
- t->color( br, br, br );
- }
-
- float r = 0.40f;
- float r2 = 0.5f - r;
- float h = 0.20f;
- if ( dir == 1 )
- {
- tesselateTorch( tt, (float)x - r2, (float)y + h, (float)z, -r, 0.0f, 0 );
- }
- else if ( dir == 2 )
- {
- tesselateTorch( tt, (float)x + r2, (float)y + h, (float)z, +r, 0.0f, 0 );
- }
- else if ( dir == 3 )
- {
- tesselateTorch( tt, (float)x, (float)y + h, z - r2, 0.0f, -r, 0 );
- }
- else if ( dir == 4 )
- {
- tesselateTorch( tt, (float)x, (float)y + h, (float)z + r2, 0.0f, +r, 0 );
- }
- else
- {
- tesselateTorch( tt, (float)x, (float)y, (float)z, 0.0f, 0.0f, 0 );
- }
- return true;
-
-}
-
-bool TileRenderer_SPU::tesselateDiodeInWorld(DiodeTile_SPU *tt, int x, int y, int z)
+bool TileRenderer_SPU::tesselatePistonBaseInWorld(
+ Tile_SPU* tt, int x, int y, int z, bool forceExtended,
+ int forceData) // 4J added forceData param
{
#ifdef DISABLE_TESS_FUNCS
- Tesselator_SPU* t = getTesselator();
+ int data = (forceData == -1) ? level->getData(x, y, z) : forceData;
+ bool extended = forceExtended || (data & PistonBaseTile::EXTENDED_BIT) != 0;
+ int facing = PistonBaseTile::getFacing(data);
- tesselateDiodeInWorld(tt, x, y, z, level->getData(x, y, z) & DiodeTile_SPU::DIRECTION_MASK);
- return true;
-#endif // #ifdef DISABLE_TESS_FUNCS
- return false;
-}
+ const float thickness = PistonBaseTile::PLATFORM_THICKNESS / 16.0f;
-void TileRenderer_SPU::tesselateDiodeInWorld( DiodeTile_SPU* tt, int x, int y, int z, int dir )
-{
-#ifdef DISABLE_TESS_FUNCS
- // render half-block edges
- tesselateBlockInWorld( tt, x, y, z );
-
- Tesselator_SPU* t = getTesselator();
-
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y, z ) );
- t->color( 1.0f, 1.0f, 1.0f );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z );
- if ( level->m_tileData.lightEmission[tt->id] > 0 ) br = 1.0f;
- t->color( br, br, br );
- }
-
- int data = level->getData(x, y, z);
-
- // 4J Stu - This block gets moved in a later version, but we don't need that yet
- // BEGIN TORCH SECTION
- {
- int dir = data & DiodeTile_SPU::DIRECTION_MASK;
- int delay = ( data & DiodeTile_SPU::DELAY_MASK ) >> DiodeTile_SPU::DELAY_SHIFT;
- float h = -3.0f / 16.0f;
- float transmitterX = 0.0f;
- float transmitterZ = 0.0f;
- float receiverX = 0.0f;
- float receiverZ = 0.0f;
-
- switch ( dir )
- {
- case Direction::SOUTH:
- receiverZ = -5.0f / 16.0f;
- transmitterZ = DiodeTile_SPU::DELAY_RENDER_OFFSETS[delay];
- break;
- case Direction::NORTH:
- receiverZ = 5.0f / 16.0f;
- transmitterZ = -DiodeTile_SPU::DELAY_RENDER_OFFSETS[delay];
- break;
- case Direction::EAST:
- receiverX = -5.0f / 16.0f;
- transmitterX = DiodeTile_SPU::DELAY_RENDER_OFFSETS[delay];
- break;
- case Direction::WEST:
- receiverX = 5.0f / 16.0f;
- transmitterX = -DiodeTile_SPU::DELAY_RENDER_OFFSETS[delay];
- break;
- }
-
- // render transmitter
- tesselateTorch( tt, x + transmitterX, y + h, z + transmitterZ, 0.0f, 0.0f, 0 );
- // render receiver
- tesselateTorch( tt, x + receiverX, y + h, z + receiverZ, 0.0f, 0.0f, 0 );
- }
- // END TORCH SECTION
-
- Icon_SPU *tex = getTexture(tt, Facing::UP, data);
- float u0 = tex->getU0();
- float u1 = tex->getU1();
- float v0 = tex->getV0();
- float v1 = tex->getV1();
-
- float r = 2.0f / 16.0f;
-
- float x0 = ( float )( x + 1.0f );
- float x1 = ( float )( x + 1.0f );
- float x2 = ( float )( x + 0.0f );
- float x3 = ( float )( x + 0.0f );
-
- float z0 = ( float )( z + 0.0f );
- float z1 = ( float )( z + 1.0f );
- float z2 = ( float )( z + 1.0f );
- float z3 = ( float )( z + 0.0f );
-
- float y0 = ( float )( y + r );
-
- if ( dir == Direction::NORTH )
- {
- // rotate 180 degrees
- x0 = x1 = ( float )( x + 0.0f );
- x2 = x3 = ( float )( x + 1.0f );
- z0 = z3 = ( float )( z + 1.0f );
- z1 = z2 = ( float )( z + 0.0f );
- }
- else if ( dir == Direction::EAST )
- {
- // rotate 90 degrees counter-clockwise
- x0 = x3 = ( float )( x + 0.0f );
- x1 = x2 = ( float )( x + 1.0f );
- z0 = z1 = ( float )( z + 0.0f );
- z2 = z3 = ( float )( z + 1.0f );
- }
- else if ( dir == Direction::WEST )
- {
- // rotate 90 degrees clockwise
- x0 = x3 = ( float )( x + 1.0f );
- x1 = x2 = ( float )( x + 0.0f );
- z0 = z1 = ( float )( z + 1.0f );
- z2 = z3 = ( float )( z + 0.0f );
- }
-
- t->vertexUV( x3 , y0 , z3 , u0 , v0 );
- t->vertexUV( x2 , y0 , z2 , u0 , v1 );
- t->vertexUV( x1 , y0 , z1 , u1 , v1 );
- t->vertexUV( x0 , y0 , z0 , u1 , v0 );
-#endif // #ifdef DISABLE_TESS_FUNCS
-}
-
-void TileRenderer_SPU::tesselatePistonBaseForceExtended( Tile_SPU* tile, int x, int y, int z, int forceData ) // 4J added forceData param
-{
-#ifdef DISABLE_TESS_FUNCS
- noCulling = true;
- tesselatePistonBaseInWorld( tile, x, y, z, true, forceData );
- noCulling = false;
-#endif // DISABLE_TESS_FUNCS
-
-}
-
-bool TileRenderer_SPU::tesselatePistonBaseInWorld( Tile_SPU* tt, int x, int y, int z, bool forceExtended, int forceData ) // 4J added forceData param
-{
-#ifdef DISABLE_TESS_FUNCS
- int data = ( forceData == -1 ) ? level->getData( x, y, z ) : forceData;
- bool extended = forceExtended || ( data & PistonBaseTile::EXTENDED_BIT ) != 0;
- int facing = PistonBaseTile::getFacing( data );
-
- const float thickness = PistonBaseTile::PLATFORM_THICKNESS / 16.0f;
-
-// EnterCriticalSection( &Tile_SPU::m_csShape );
- if ( extended )
- {
- switch ( facing )
- {
- case Facing::DOWN:
- northFlip = FLIP_180;
- southFlip = FLIP_180;
- eastFlip = FLIP_180;
- westFlip = FLIP_180;
- setShape( 0.0f, thickness, 0.0f, 1.0f, 1.0f, 1.0f );
- break;
- case Facing::UP:
- setShape( 0.0f, 0.0f, 0.0f, 1.0f, 1.0f - thickness, 1.0f );
- break;
- case Facing::NORTH:
- eastFlip = FLIP_CW;
- westFlip = FLIP_CCW;
- setShape( 0.0f, 0.0f, thickness, 1.0f, 1.0f, 1.0f );
- break;
- case Facing::SOUTH:
- eastFlip = FLIP_CCW;
- westFlip = FLIP_CW;
- upFlip = FLIP_180;
- downFlip = FLIP_180;
- setShape( 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f - thickness );
- break;
- case Facing::WEST:
- northFlip = FLIP_CW;
- southFlip = FLIP_CCW;
- upFlip = FLIP_CCW;
- downFlip = FLIP_CW;
- setShape( thickness, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f );
- break;
- case Facing::EAST:
- northFlip = FLIP_CCW;
- southFlip = FLIP_CW;
- upFlip = FLIP_CW;
- downFlip = FLIP_CCW;
- setShape( 0.0f, 0.0f, 0.0f, 1.0f - thickness, 1.0f, 1.0f );
- break;
- }
- // weird way of telling the piston to use the
- // "inside" texture for the forward-facing edge
- ((PistonBaseTile *) tt)->updateShape((float) tileShapeX0, (float) tileShapeY0, (float) tileShapeZ0, (float) tileShapeX1, (float) tileShapeY1, (float) tileShapeZ1);
- tesselateBlockInWorld( tt, x, y, z );
- northFlip = FLIP_NONE;
- southFlip = FLIP_NONE;
- eastFlip = FLIP_NONE;
- westFlip = FLIP_NONE;
- upFlip = FLIP_NONE;
- downFlip = FLIP_NONE;
- ((PistonBaseTile *) tt)->updateShape((float) tileShapeX0, (float) tileShapeY0, (float) tileShapeZ0, (float) tileShapeX1, (float) tileShapeY1, (float) tileShapeZ1);
- }
- else
- {
- switch ( facing )
- {
- case Facing::DOWN:
- northFlip = FLIP_180;
- southFlip = FLIP_180;
- eastFlip = FLIP_180;
- westFlip = FLIP_180;
- break;
- case Facing::UP:
- break;
- case Facing::NORTH:
- eastFlip = FLIP_CW;
- westFlip = FLIP_CCW;
- break;
- case Facing::SOUTH:
- eastFlip = FLIP_CCW;
- westFlip = FLIP_CW;
- upFlip = FLIP_180;
- downFlip = FLIP_180;
- break;
- case Facing::WEST:
- northFlip = FLIP_CW;
- southFlip = FLIP_CCW;
- upFlip = FLIP_CCW;
- downFlip = FLIP_CW;
- break;
- case Facing::EAST:
- northFlip = FLIP_CCW;
- southFlip = FLIP_CW;
- upFlip = FLIP_CW;
- downFlip = FLIP_CCW;
- break;
- }
- tesselateBlockInWorld( tt, x, y, z );
- northFlip = FLIP_NONE;
- southFlip = FLIP_NONE;
- eastFlip = FLIP_NONE;
- westFlip = FLIP_NONE;
- upFlip = FLIP_NONE;
- downFlip = FLIP_NONE;
- }
+ // EnterCriticalSection( &Tile_SPU::m_csShape );
+ if (extended) {
+ switch (facing) {
+ case Facing::DOWN:
+ northFlip = FLIP_180;
+ southFlip = FLIP_180;
+ eastFlip = FLIP_180;
+ westFlip = FLIP_180;
+ setShape(0.0f, thickness, 0.0f, 1.0f, 1.0f, 1.0f);
+ break;
+ case Facing::UP:
+ setShape(0.0f, 0.0f, 0.0f, 1.0f, 1.0f - thickness, 1.0f);
+ break;
+ case Facing::NORTH:
+ eastFlip = FLIP_CW;
+ westFlip = FLIP_CCW;
+ setShape(0.0f, 0.0f, thickness, 1.0f, 1.0f, 1.0f);
+ break;
+ case Facing::SOUTH:
+ eastFlip = FLIP_CCW;
+ westFlip = FLIP_CW;
+ upFlip = FLIP_180;
+ downFlip = FLIP_180;
+ setShape(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f - thickness);
+ break;
+ case Facing::WEST:
+ northFlip = FLIP_CW;
+ southFlip = FLIP_CCW;
+ upFlip = FLIP_CCW;
+ downFlip = FLIP_CW;
+ setShape(thickness, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
+ break;
+ case Facing::EAST:
+ northFlip = FLIP_CCW;
+ southFlip = FLIP_CW;
+ upFlip = FLIP_CW;
+ downFlip = FLIP_CCW;
+ setShape(0.0f, 0.0f, 0.0f, 1.0f - thickness, 1.0f, 1.0f);
+ break;
+ }
+ // weird way of telling the piston to use the
+ // "inside" texture for the forward-facing edge
+ ((PistonBaseTile*)tt)
+ ->updateShape((float)tileShapeX0, (float)tileShapeY0,
+ (float)tileShapeZ0, (float)tileShapeX1,
+ (float)tileShapeY1, (float)tileShapeZ1);
+ tesselateBlockInWorld(tt, x, y, z);
+ northFlip = FLIP_NONE;
+ southFlip = FLIP_NONE;
+ eastFlip = FLIP_NONE;
+ westFlip = FLIP_NONE;
+ upFlip = FLIP_NONE;
+ downFlip = FLIP_NONE;
+ ((PistonBaseTile*)tt)
+ ->updateShape((float)tileShapeX0, (float)tileShapeY0,
+ (float)tileShapeZ0, (float)tileShapeX1,
+ (float)tileShapeY1, (float)tileShapeZ1);
+ } else {
+ switch (facing) {
+ case Facing::DOWN:
+ northFlip = FLIP_180;
+ southFlip = FLIP_180;
+ eastFlip = FLIP_180;
+ westFlip = FLIP_180;
+ break;
+ case Facing::UP:
+ break;
+ case Facing::NORTH:
+ eastFlip = FLIP_CW;
+ westFlip = FLIP_CCW;
+ break;
+ case Facing::SOUTH:
+ eastFlip = FLIP_CCW;
+ westFlip = FLIP_CW;
+ upFlip = FLIP_180;
+ downFlip = FLIP_180;
+ break;
+ case Facing::WEST:
+ northFlip = FLIP_CW;
+ southFlip = FLIP_CCW;
+ upFlip = FLIP_CCW;
+ downFlip = FLIP_CW;
+ break;
+ case Facing::EAST:
+ northFlip = FLIP_CCW;
+ southFlip = FLIP_CW;
+ upFlip = FLIP_CW;
+ downFlip = FLIP_CCW;
+ break;
+ }
+ tesselateBlockInWorld(tt, x, y, z);
+ northFlip = FLIP_NONE;
+ southFlip = FLIP_NONE;
+ eastFlip = FLIP_NONE;
+ westFlip = FLIP_NONE;
+ upFlip = FLIP_NONE;
+ downFlip = FLIP_NONE;
+ }
// LeaveCriticalSection( &Tile_SPU::m_csShape );
-#endif // DISABLE_TESS_FUNCS
-
- return true;
+#endif // DISABLE_TESS_FUNCS
+ return true;
}
-void TileRenderer_SPU::renderPistonArmUpDown( float x0, float x1, float y0, float y1, float z0, float z1, float br,
- float armLengthPixels )
-{
+void TileRenderer_SPU::renderPistonArmUpDown(float x0, float x1, float y0,
+ float y1, float z0, float z1,
+ float br, float armLengthPixels) {
#ifdef DISABLE_TESS_FUNCS
- Icon_SPU *armTex = PistonBaseTile::getTexture(PistonBaseTile::EDGE_TEX);
- if (hasFixedTexture()) armTex = fixedTexture;
+ Icon_SPU* armTex = PistonBaseTile::getTexture(PistonBaseTile::EDGE_TEX);
+ if (hasFixedTexture()) armTex = fixedTexture;
- Tesselator_SPU* t = getTesselator();
+ Tesselator_SPU* t = getTesselator();
- // upwards arm
- float u00 = armTex->getU0();
- float v00 = armTex->getV0();
- float u11 = armTex->getU(armLengthPixels);
- float v11 = armTex->getV(PistonBaseTile::PLATFORM_THICKNESS);
+ // upwards arm
+ float u00 = armTex->getU0();
+ float v00 = armTex->getV0();
+ float u11 = armTex->getU(armLengthPixels);
+ float v11 = armTex->getV(PistonBaseTile::PLATFORM_THICKNESS);
- t->color( br, br, br );
-
- t->vertexUV( x0, y1, z0, u11, v00 );
- t->vertexUV( x0, y0, z0, u00, v00 );
- t->vertexUV( x1, y0, z1, u00, v11 );
- t->vertexUV( x1, y1, z1, u11, v11 );
-#endif // DISABLE_TESS_FUNCS
+ t->color(br, br, br);
+ t->vertexUV(x0, y1, z0, u11, v00);
+ t->vertexUV(x0, y0, z0, u00, v00);
+ t->vertexUV(x1, y0, z1, u00, v11);
+ t->vertexUV(x1, y1, z1, u11, v11);
+#endif // DISABLE_TESS_FUNCS
}
-void TileRenderer_SPU::renderPistonArmNorthSouth( float x0, float x1, float y0, float y1, float z0, float z1,
- float br, float armLengthPixels )
-{
+void TileRenderer_SPU::renderPistonArmNorthSouth(float x0, float x1, float y0,
+ float y1, float z0, float z1,
+ float br,
+ float armLengthPixels) {
#ifdef DISABLE_TESS_FUNCS
- Icon_SPU *armTex = PistonBaseTile::getTexture(PistonBaseTile::EDGE_TEX);
- if (hasFixedTexture()) armTex = fixedTexture;
+ Icon_SPU* armTex = PistonBaseTile::getTexture(PistonBaseTile::EDGE_TEX);
+ if (hasFixedTexture()) armTex = fixedTexture;
- Tesselator_SPU* t = getTesselator();
+ Tesselator_SPU* t = getTesselator();
- // upwards arm
- float u00 = armTex->getU0();
- float v00 = armTex->getV0();
- float u11 = armTex->getU(armLengthPixels);
- float v11 = armTex->getV(PistonBaseTile::PLATFORM_THICKNESS);
+ // upwards arm
+ float u00 = armTex->getU0();
+ float v00 = armTex->getV0();
+ float u11 = armTex->getU(armLengthPixels);
+ float v11 = armTex->getV(PistonBaseTile::PLATFORM_THICKNESS);
- t->color( br, br, br );
+ t->color(br, br, br);
- t->vertexUV( x0, y0, z1, u11, v00 );
- t->vertexUV( x0, y0, z0, u00, v00 );
- t->vertexUV( x1, y1, z0, u00, v11 );
- t->vertexUV( x1, y1, z1, u11, v11 );
-#endif // DISABLE_TESS_FUNCS
+ t->vertexUV(x0, y0, z1, u11, v00);
+ t->vertexUV(x0, y0, z0, u00, v00);
+ t->vertexUV(x1, y1, z0, u00, v11);
+ t->vertexUV(x1, y1, z1, u11, v11);
+#endif // DISABLE_TESS_FUNCS
}
-void TileRenderer_SPU::renderPistonArmEastWest( float x0, float x1, float y0, float y1, float z0, float z1, float br,
- float armLengthPixels )
-{
+void TileRenderer_SPU::renderPistonArmEastWest(float x0, float x1, float y0,
+ float y1, float z0, float z1,
+ float br,
+ float armLengthPixels) {
#ifdef DISABLE_TESS_FUNCS
- Icon_SPU *armTex = PistonBaseTile::getTexture(PistonBaseTile::EDGE_TEX);
- if (hasFixedTexture()) armTex = fixedTexture;
+ Icon_SPU* armTex = PistonBaseTile::getTexture(PistonBaseTile::EDGE_TEX);
+ if (hasFixedTexture()) armTex = fixedTexture;
- Tesselator_SPU* t = getTesselator();
+ Tesselator_SPU* t = getTesselator();
- // upwards arm
- float u00 = armTex->getU0();
- float v00 = armTex->getV0();
- float u11 = armTex->getU(armLengthPixels);
- float v11 = armTex->getV(PistonBaseTile::PLATFORM_THICKNESS);
+ // upwards arm
+ float u00 = armTex->getU0();
+ float v00 = armTex->getV0();
+ float u11 = armTex->getU(armLengthPixels);
+ float v11 = armTex->getV(PistonBaseTile::PLATFORM_THICKNESS);
- t->color( br, br, br );
+ t->color(br, br, br);
- t->vertexUV( x1, y0, z0, u11, v00 );
- t->vertexUV( x0, y0, z0, u00, v00 );
- t->vertexUV( x0, y1, z1, u00, v11 );
- t->vertexUV( x1, y1, z1, u11, v11 );
-#endif // DISABLE_TESS_FUNCS
+ t->vertexUV(x1, y0, z0, u11, v00);
+ t->vertexUV(x0, y0, z0, u00, v00);
+ t->vertexUV(x0, y1, z1, u00, v11);
+ t->vertexUV(x1, y1, z1, u11, v11);
+#endif // DISABLE_TESS_FUNCS
}
-void TileRenderer_SPU::tesselatePistonArmNoCulling( Tile_SPU* tile, int x, int y, int z, bool fullArm, int forceData ) // 4J added forceData param
+void TileRenderer_SPU::tesselatePistonArmNoCulling(
+ Tile_SPU* tile, int x, int y, int z, bool fullArm,
+ int forceData) // 4J added forceData param
{
#ifdef DISABLE_TESS_FUNCS
- noCulling = true;
- tesselatePistonExtensionInWorld( tile, x, y, z, fullArm );
- noCulling = false;
-#endif // DISABLE_TESS_FUNCS
+ noCulling = true;
+ tesselatePistonExtensionInWorld(tile, x, y, z, fullArm);
+ noCulling = false;
+#endif // DISABLE_TESS_FUNCS
}
-bool TileRenderer_SPU::tesselatePistonExtensionInWorld( Tile_SPU* tt, int x, int y, int z, bool fullArm, int forceData ) // 4J added forceData param
+bool TileRenderer_SPU::tesselatePistonExtensionInWorld(
+ Tile_SPU* tt, int x, int y, int z, bool fullArm,
+ int forceData) // 4J added forceData param
{
#ifdef DISABLE_TESS_FUNCS
- int data = ( forceData == -1 ) ? level->getData( x, y, z ) : forceData;
- int facing = PistonExtensionTile::getFacing( data );
+ int data = (forceData == -1) ? level->getData(x, y, z) : forceData;
+ int facing = PistonExtensionTile::getFacing(data);
- const float thickness = PistonBaseTile::PLATFORM_THICKNESS / 16.0f;
- const float leftEdge = ( 8.0f - ( PistonBaseTile::PLATFORM_THICKNESS / 2.0f ) ) / 16.0f;
- const float rightEdge = ( 8.0f + ( PistonBaseTile::PLATFORM_THICKNESS / 2.0f ) ) / 16.0f;
- const float br = tt->getBrightness( level, x, y, z );
- const float armLength = fullArm ? 1.0f : 0.5f;
- const float armLengthPixels = fullArm ? 16.0f : 8.0f;
+ const float thickness = PistonBaseTile::PLATFORM_THICKNESS / 16.0f;
+ const float leftEdge =
+ (8.0f - (PistonBaseTile::PLATFORM_THICKNESS / 2.0f)) / 16.0f;
+ const float rightEdge =
+ (8.0f + (PistonBaseTile::PLATFORM_THICKNESS / 2.0f)) / 16.0f;
+ const float br = tt->getBrightness(level, x, y, z);
+ const float armLength = fullArm ? 1.0f : 0.5f;
+ const float armLengthPixels = fullArm ? 16.0f : 8.0f;
-// EnterCriticalSection( &Tile_SPU::m_csShape );
- Tesselator_SPU* t = getTesselator();
+ // EnterCriticalSection( &Tile_SPU::m_csShape );
+ Tesselator_SPU* t = getTesselator();
- switch ( facing )
- {
- case Facing::DOWN:
- northFlip = FLIP_180;
- southFlip = FLIP_180;
- eastFlip = FLIP_180;
- westFlip = FLIP_180;
- setShape( 0.0f, 0.0f, 0.0f, 1.0f, thickness, 1.0f );
- tesselateBlockInWorld( tt, x, y, z );
+ switch (facing) {
+ case Facing::DOWN:
+ northFlip = FLIP_180;
+ southFlip = FLIP_180;
+ eastFlip = FLIP_180;
+ westFlip = FLIP_180;
+ setShape(0.0f, 0.0f, 0.0f, 1.0f, thickness, 1.0f);
+ tesselateBlockInWorld(tt, x, y, z);
- t->tex2( getLightColor(tt, level, x, y , z ) ); // 4J added - renderPistonArmDown doesn't set its own tex2 so just inherited from previous tesselateBlockInWorld
- renderPistonArmUpDown( x + leftEdge, x + rightEdge, y + thickness, y + thickness + armLength,
- z + rightEdge, z + rightEdge, br * 0.8f, armLengthPixels );
- renderPistonArmUpDown( x + rightEdge, x + leftEdge, y + thickness, y + thickness + armLength, z + leftEdge,
- z + leftEdge, br * 0.8f, armLengthPixels );
- renderPistonArmUpDown( x + leftEdge, x + leftEdge, y + thickness, y + thickness + armLength, z + leftEdge,
- z + rightEdge, br * 0.6f, armLengthPixels );
- renderPistonArmUpDown( x + rightEdge, x + rightEdge, y + thickness, y + thickness + armLength,
- z + rightEdge, z + leftEdge, br * 0.6f, armLengthPixels );
+ t->tex2(getLightColor(
+ tt, level, x, y,
+ z)); // 4J added - renderPistonArmDown doesn't set its own tex2
+ // so just inherited from previous tesselateBlockInWorld
+ renderPistonArmUpDown(x + leftEdge, x + rightEdge, y + thickness,
+ y + thickness + armLength, z + rightEdge,
+ z + rightEdge, br * 0.8f, armLengthPixels);
+ renderPistonArmUpDown(x + rightEdge, x + leftEdge, y + thickness,
+ y + thickness + armLength, z + leftEdge,
+ z + leftEdge, br * 0.8f, armLengthPixels);
+ renderPistonArmUpDown(x + leftEdge, x + leftEdge, y + thickness,
+ y + thickness + armLength, z + leftEdge,
+ z + rightEdge, br * 0.6f, armLengthPixels);
+ renderPistonArmUpDown(x + rightEdge, x + rightEdge, y + thickness,
+ y + thickness + armLength, z + rightEdge,
+ z + leftEdge, br * 0.6f, armLengthPixels);
- break;
- case Facing::UP:
- setShape( 0.0f, 1.0f - thickness, 0.0f, 1.0f, 1.0f, 1.0f );
- tesselateBlockInWorld( tt, x, y, z );
+ break;
+ case Facing::UP:
+ setShape(0.0f, 1.0f - thickness, 0.0f, 1.0f, 1.0f, 1.0f);
+ tesselateBlockInWorld(tt, x, y, z);
- t->tex2( getLightColor(tt, level, x, y , z ) ); // 4J added - renderPistonArmDown doesn't set its own tex2 so just inherited from previous tesselateBlockInWorld
- renderPistonArmUpDown( x + leftEdge, x + rightEdge, y - thickness + 1.0f - armLength, y - thickness + 1.0f,
- z + rightEdge, z + rightEdge, br * 0.8f, armLengthPixels );
- renderPistonArmUpDown( x + rightEdge, x + leftEdge, y - thickness + 1.0f - armLength, y - thickness + 1.0f,
- z + leftEdge, z + leftEdge, br * 0.8f, armLengthPixels );
- renderPistonArmUpDown( x + leftEdge, x + leftEdge, y - thickness + 1.0f - armLength, y - thickness + 1.0f,
- z + leftEdge, z + rightEdge, br * 0.6f, armLengthPixels );
- renderPistonArmUpDown( x + rightEdge, x + rightEdge, y - thickness + 1.0f - armLength,
- y - thickness + 1.0f, z + rightEdge, z + leftEdge, br * 0.6f, armLengthPixels );
- break;
- case Facing::NORTH:
- eastFlip = FLIP_CW;
- westFlip = FLIP_CCW;
- setShape( 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, thickness );
- tesselateBlockInWorld( tt, x, y, z );
+ t->tex2(getLightColor(
+ tt, level, x, y,
+ z)); // 4J added - renderPistonArmDown doesn't set its own tex2
+ // so just inherited from previous tesselateBlockInWorld
+ renderPistonArmUpDown(x + leftEdge, x + rightEdge,
+ y - thickness + 1.0f - armLength,
+ y - thickness + 1.0f, z + rightEdge,
+ z + rightEdge, br * 0.8f, armLengthPixels);
+ renderPistonArmUpDown(x + rightEdge, x + leftEdge,
+ y - thickness + 1.0f - armLength,
+ y - thickness + 1.0f, z + leftEdge,
+ z + leftEdge, br * 0.8f, armLengthPixels);
+ renderPistonArmUpDown(x + leftEdge, x + leftEdge,
+ y - thickness + 1.0f - armLength,
+ y - thickness + 1.0f, z + leftEdge,
+ z + rightEdge, br * 0.6f, armLengthPixels);
+ renderPistonArmUpDown(x + rightEdge, x + rightEdge,
+ y - thickness + 1.0f - armLength,
+ y - thickness + 1.0f, z + rightEdge,
+ z + leftEdge, br * 0.6f, armLengthPixels);
+ break;
+ case Facing::NORTH:
+ eastFlip = FLIP_CW;
+ westFlip = FLIP_CCW;
+ setShape(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, thickness);
+ tesselateBlockInWorld(tt, x, y, z);
- t->tex2( getLightColor(tt, level, x, y , z ) ); // 4J added - renderPistonArmDown doesn't set its own tex2 so just inherited from previous tesselateBlockInWorld
- renderPistonArmNorthSouth( x + leftEdge, x + leftEdge, y + rightEdge, y + leftEdge, z + thickness,
- z + thickness + armLength, br * 0.6f, armLengthPixels );
- renderPistonArmNorthSouth( x + rightEdge, x + rightEdge, y + leftEdge, y + rightEdge, z + thickness,
- z + thickness + armLength, br * 0.6f, armLengthPixels );
- renderPistonArmNorthSouth( x + leftEdge, x + rightEdge, y + leftEdge, y + leftEdge, z + thickness,
- z + thickness + armLength, br * 0.5f, armLengthPixels );
- renderPistonArmNorthSouth( x + rightEdge, x + leftEdge, y + rightEdge, y + rightEdge, z + thickness,
- z + thickness + armLength, br, armLengthPixels );
- break;
- case Facing::SOUTH:
- eastFlip = FLIP_CCW;
- westFlip = FLIP_CW;
- upFlip = FLIP_180;
- downFlip = FLIP_180;
- setShape( 0.0f, 0.0f, 1.0f - thickness, 1.0f, 1.0f, 1.0f );
- tesselateBlockInWorld( tt, x, y, z );
+ t->tex2(getLightColor(
+ tt, level, x, y,
+ z)); // 4J added - renderPistonArmDown doesn't set its own tex2
+ // so just inherited from previous tesselateBlockInWorld
+ renderPistonArmNorthSouth(x + leftEdge, x + leftEdge, y + rightEdge,
+ y + leftEdge, z + thickness,
+ z + thickness + armLength, br * 0.6f,
+ armLengthPixels);
+ renderPistonArmNorthSouth(x + rightEdge, x + rightEdge,
+ y + leftEdge, y + rightEdge,
+ z + thickness, z + thickness + armLength,
+ br * 0.6f, armLengthPixels);
+ renderPistonArmNorthSouth(x + leftEdge, x + rightEdge, y + leftEdge,
+ y + leftEdge, z + thickness,
+ z + thickness + armLength, br * 0.5f,
+ armLengthPixels);
+ renderPistonArmNorthSouth(
+ x + rightEdge, x + leftEdge, y + rightEdge, y + rightEdge,
+ z + thickness, z + thickness + armLength, br, armLengthPixels);
+ break;
+ case Facing::SOUTH:
+ eastFlip = FLIP_CCW;
+ westFlip = FLIP_CW;
+ upFlip = FLIP_180;
+ downFlip = FLIP_180;
+ setShape(0.0f, 0.0f, 1.0f - thickness, 1.0f, 1.0f, 1.0f);
+ tesselateBlockInWorld(tt, x, y, z);
- t->tex2( getLightColor(tt, level, x, y , z ) ); // 4J added - renderPistonArmDown doesn't set its own tex2 so just inherited from previous tesselateBlockInWorld
- renderPistonArmNorthSouth( x + leftEdge, x + leftEdge, y + rightEdge, y + leftEdge,
- z - thickness + 1.0f - armLength, z - thickness + 1.0f, br * 0.6f,
- armLengthPixels );
- renderPistonArmNorthSouth( x + rightEdge, x + rightEdge, y + leftEdge, y + rightEdge,
- z - thickness + 1.0f - armLength, z - thickness + 1.0f, br * 0.6f,
- armLengthPixels );
- renderPistonArmNorthSouth( x + leftEdge, x + rightEdge, y + leftEdge, y + leftEdge,
- z - thickness + 1.0f - armLength, z - thickness + 1.0f, br * 0.5f,
- armLengthPixels );
- renderPistonArmNorthSouth( x + rightEdge, x + leftEdge, y + rightEdge, y + rightEdge,
- z - thickness + 1.0f - armLength, z - thickness + 1.0f, br, armLengthPixels );
- break;
- case Facing::WEST:
- northFlip = FLIP_CW;
- southFlip = FLIP_CCW;
- upFlip = FLIP_CCW;
- downFlip = FLIP_CW;
- setShape( 0.0f, 0.0f, 0.0f, thickness, 1.0f, 1.0f );
- tesselateBlockInWorld( tt, x, y, z ); // 4J added - renderPistonArmDown doesn't set its own tex2 so just inherited from previous tesselateBlockInWorld
+ t->tex2(getLightColor(
+ tt, level, x, y,
+ z)); // 4J added - renderPistonArmDown doesn't set its own tex2
+ // so just inherited from previous tesselateBlockInWorld
+ renderPistonArmNorthSouth(
+ x + leftEdge, x + leftEdge, y + rightEdge, y + leftEdge,
+ z - thickness + 1.0f - armLength, z - thickness + 1.0f,
+ br * 0.6f, armLengthPixels);
+ renderPistonArmNorthSouth(
+ x + rightEdge, x + rightEdge, y + leftEdge, y + rightEdge,
+ z - thickness + 1.0f - armLength, z - thickness + 1.0f,
+ br * 0.6f, armLengthPixels);
+ renderPistonArmNorthSouth(
+ x + leftEdge, x + rightEdge, y + leftEdge, y + leftEdge,
+ z - thickness + 1.0f - armLength, z - thickness + 1.0f,
+ br * 0.5f, armLengthPixels);
+ renderPistonArmNorthSouth(
+ x + rightEdge, x + leftEdge, y + rightEdge, y + rightEdge,
+ z - thickness + 1.0f - armLength, z - thickness + 1.0f, br,
+ armLengthPixels);
+ break;
+ case Facing::WEST:
+ northFlip = FLIP_CW;
+ southFlip = FLIP_CCW;
+ upFlip = FLIP_CCW;
+ downFlip = FLIP_CW;
+ setShape(0.0f, 0.0f, 0.0f, thickness, 1.0f, 1.0f);
+ tesselateBlockInWorld(
+ tt, x, y,
+ z); // 4J added - renderPistonArmDown doesn't set its own tex2
+ // so just inherited from previous tesselateBlockInWorld
- t->tex2( getLightColor(tt, level, x, y , z ) );
- renderPistonArmEastWest( x + thickness, x + thickness + armLength, y + leftEdge, y + leftEdge,
- z + rightEdge, z + leftEdge, br * 0.5f, armLengthPixels );
- renderPistonArmEastWest( x + thickness, x + thickness + armLength, y + rightEdge, y + rightEdge,
- z + leftEdge, z + rightEdge, br, armLengthPixels );
- renderPistonArmEastWest( x + thickness, x + thickness + armLength, y + leftEdge, y + rightEdge,
- z + leftEdge, z + leftEdge, br * 0.6f, armLengthPixels );
- renderPistonArmEastWest( x + thickness, x + thickness + armLength, y + rightEdge, y + leftEdge,
- z + rightEdge, z + rightEdge, br * 0.6f, armLengthPixels );
- break;
- case Facing::EAST:
- northFlip = FLIP_CCW;
- southFlip = FLIP_CW;
- upFlip = FLIP_CW;
- downFlip = FLIP_CCW;
- setShape( 1.0f - thickness, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f );
- tesselateBlockInWorld( tt, x, y, z );
+ t->tex2(getLightColor(tt, level, x, y, z));
+ renderPistonArmEastWest(x + thickness, x + thickness + armLength,
+ y + leftEdge, y + leftEdge, z + rightEdge,
+ z + leftEdge, br * 0.5f, armLengthPixels);
+ renderPistonArmEastWest(x + thickness, x + thickness + armLength,
+ y + rightEdge, y + rightEdge, z + leftEdge,
+ z + rightEdge, br, armLengthPixels);
+ renderPistonArmEastWest(x + thickness, x + thickness + armLength,
+ y + leftEdge, y + rightEdge, z + leftEdge,
+ z + leftEdge, br * 0.6f, armLengthPixels);
+ renderPistonArmEastWest(x + thickness, x + thickness + armLength,
+ y + rightEdge, y + leftEdge, z + rightEdge,
+ z + rightEdge, br * 0.6f, armLengthPixels);
+ break;
+ case Facing::EAST:
+ northFlip = FLIP_CCW;
+ southFlip = FLIP_CW;
+ upFlip = FLIP_CW;
+ downFlip = FLIP_CCW;
+ setShape(1.0f - thickness, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
+ tesselateBlockInWorld(tt, x, y, z);
- t->tex2( getLightColor(tt, level, x, y , z ) ); // 4J added - renderPistonArmDown doesn't set its own tex2 so just inherited from previous tesselateBlockInWorld
- renderPistonArmEastWest( x - thickness + 1.0f - armLength, x - thickness + 1.0f, y + leftEdge,
- y + leftEdge, z + rightEdge, z + leftEdge, br * 0.5f, armLengthPixels );
- renderPistonArmEastWest( x - thickness + 1.0f - armLength, x - thickness + 1.0f, y + rightEdge,
- y + rightEdge, z + leftEdge, z + rightEdge, br, armLengthPixels );
- renderPistonArmEastWest( x - thickness + 1.0f - armLength, x - thickness + 1.0f, y + leftEdge,
- y + rightEdge, z + leftEdge, z + leftEdge, br * 0.6f, armLengthPixels );
- renderPistonArmEastWest( x - thickness + 1.0f - armLength, x - thickness + 1.0f, y + rightEdge,
- y + leftEdge, z + rightEdge, z + rightEdge, br * 0.6f, armLengthPixels );
- break;
- }
- northFlip = FLIP_NONE;
- southFlip = FLIP_NONE;
- eastFlip = FLIP_NONE;
- westFlip = FLIP_NONE;
- upFlip = FLIP_NONE;
- downFlip = FLIP_NONE;
- setShape( 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f );
+ t->tex2(getLightColor(
+ tt, level, x, y,
+ z)); // 4J added - renderPistonArmDown doesn't set its own tex2
+ // so just inherited from previous tesselateBlockInWorld
+ renderPistonArmEastWest(x - thickness + 1.0f - armLength,
+ x - thickness + 1.0f, y + leftEdge,
+ y + leftEdge, z + rightEdge, z + leftEdge,
+ br * 0.5f, armLengthPixels);
+ renderPistonArmEastWest(x - thickness + 1.0f - armLength,
+ x - thickness + 1.0f, y + rightEdge,
+ y + rightEdge, z + leftEdge, z + rightEdge,
+ br, armLengthPixels);
+ renderPistonArmEastWest(x - thickness + 1.0f - armLength,
+ x - thickness + 1.0f, y + leftEdge,
+ y + rightEdge, z + leftEdge, z + leftEdge,
+ br * 0.6f, armLengthPixels);
+ renderPistonArmEastWest(x - thickness + 1.0f - armLength,
+ x - thickness + 1.0f, y + rightEdge,
+ y + leftEdge, z + rightEdge, z + rightEdge,
+ br * 0.6f, armLengthPixels);
+ break;
+ }
+ northFlip = FLIP_NONE;
+ southFlip = FLIP_NONE;
+ eastFlip = FLIP_NONE;
+ westFlip = FLIP_NONE;
+ upFlip = FLIP_NONE;
+ downFlip = FLIP_NONE;
+ setShape(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
// LeaveCriticalSection( &Tile_SPU::m_csShape );
-#endif // DISABLE_TESS_FUNCS
-
- return true;
+#endif // DISABLE_TESS_FUNCS
+ return true;
}
-bool TileRenderer_SPU::tesselateLeverInWorld( Tile_SPU* tt, int x, int y, int z )
-{
+bool TileRenderer_SPU::tesselateLeverInWorld(Tile_SPU* tt, int x, int y,
+ int z) {
#ifdef DISABLE_TESS_FUNCS
- int data = level->getData( x, y, z );
+ int data = level->getData(x, y, z);
- int dir = data & 7;
- bool flipped = ( data & 8 ) > 0;
+ int dir = data & 7;
+ bool flipped = (data & 8) > 0;
- Tesselator_SPU* t = getTesselator();
+ Tesselator_SPU* t = getTesselator();
- bool hadFixed = hasFixedTexture();
- if (!hadFixed) this->setFixedTexture(getTexture(Tile_SPU::stoneBrick));
- float w1 = 4.0f / 16.0f;
- float w2 = 3.0f / 16.0f;
- float h = 3.0f / 16.0f;
-// EnterCriticalSection( &Tile_SPU::m_csShape );
- if ( dir == 5 )
- {
- setShape( 0.5f - w2, 0.0f, 0.5f - w1, 0.5f + w2, h, 0.5f + w1 );
- }
- else if ( dir == 6 )
- {
- setShape( 0.5f - w1, 0.0f, 0.5f - w2, 0.5f + w1, h, 0.5f + w2 );
- }
- else if ( dir == 4 )
- {
- setShape( 0.5f - w2, 0.5f - w1, 1.0f - h, 0.5f + w2, 0.5f + w1, 1.0f );
- }
- else if ( dir == 3 )
- {
- setShape( 0.5f - w2, 0.5f - w1, 0, 0.5f + w2, 0.5f + w1, h );
- }
- else if ( dir == 2 )
- {
- setShape( 1.0f - h, 0.5f - w1, 0.5f - w2, 1.0f, 0.5f + w1, 0.5f + w2 );
- }
- else if ( dir == 1 )
- {
- setShape( 0, 0.5f - w1, 0.5f - w2, h, 0.5f + w1, 0.5f + w2 );
- }
- else if (dir == 0)
- {
- setShape(0.5f - w1, 1 - h, 0.5f - w2, 0.5f + w1, 1, 0.5f + w2);
- }
- else if (dir == 7)
- {
- setShape(0.5f - w2, 1 - h, 0.5f - w1, 0.5f + w2, 1, 0.5f + w1);
- }
- this->tesselateBlockInWorld( tt, x, y, z );
-// LeaveCriticalSection( &Tile_SPU::m_csShape );
- if ( !hadFixed ) this->clearFixedTexture();
+ bool hadFixed = hasFixedTexture();
+ if (!hadFixed) this->setFixedTexture(getTexture(Tile_SPU::stoneBrick));
+ float w1 = 4.0f / 16.0f;
+ float w2 = 3.0f / 16.0f;
+ float h = 3.0f / 16.0f;
+ // EnterCriticalSection( &Tile_SPU::m_csShape );
+ if (dir == 5) {
+ setShape(0.5f - w2, 0.0f, 0.5f - w1, 0.5f + w2, h, 0.5f + w1);
+ } else if (dir == 6) {
+ setShape(0.5f - w1, 0.0f, 0.5f - w2, 0.5f + w1, h, 0.5f + w2);
+ } else if (dir == 4) {
+ setShape(0.5f - w2, 0.5f - w1, 1.0f - h, 0.5f + w2, 0.5f + w1, 1.0f);
+ } else if (dir == 3) {
+ setShape(0.5f - w2, 0.5f - w1, 0, 0.5f + w2, 0.5f + w1, h);
+ } else if (dir == 2) {
+ setShape(1.0f - h, 0.5f - w1, 0.5f - w2, 1.0f, 0.5f + w1, 0.5f + w2);
+ } else if (dir == 1) {
+ setShape(0, 0.5f - w1, 0.5f - w2, h, 0.5f + w1, 0.5f + w2);
+ } else if (dir == 0) {
+ setShape(0.5f - w1, 1 - h, 0.5f - w2, 0.5f + w1, 1, 0.5f + w2);
+ } else if (dir == 7) {
+ setShape(0.5f - w2, 1 - h, 0.5f - w1, 0.5f + w2, 1, 0.5f + w1);
+ }
+ this->tesselateBlockInWorld(tt, x, y, z);
+ // LeaveCriticalSection( &Tile_SPU::m_csShape );
+ if (!hadFixed) this->clearFixedTexture();
- float br;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y, z ) );
- br = 1;
- }
- else
- {
- br = tt->getBrightness( level, x, y, z );
- }
- if ( Tile_SPU::lightEmission[tt->id] > 0 ) br = 1.0f;
- t->color( br, br, br );
- Icon_SPU *tex = getTexture(tt, 0);
+ float br;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ br = 1;
+ } else {
+ br = tt->getBrightness(level, x, y, z);
+ }
+ if (Tile_SPU::lightEmission[tt->id] > 0) br = 1.0f;
+ t->color(br, br, br);
+ Icon_SPU* tex = getTexture(tt, 0);
- if (hasFixedTexture()) tex = fixedTexture;
- float u0 = tex->getU0();
- float v0 = tex->getV0();
- float u1 = tex->getU1();
- float v1 = tex->getV1();
+ if (hasFixedTexture()) tex = fixedTexture;
+ float u0 = tex->getU0();
+ float v0 = tex->getV0();
+ float u1 = tex->getU1();
+ float v1 = tex->getV1();
- Vec3* corners[8];
- float xv = 1.0f / 16.0f;
- float zv = 1.0f / 16.0f;
- float yv = 10.0f / 16.0f;
- corners[0] = Vec3::newTemp( -xv, -0, -zv );
- corners[1] = Vec3::newTemp( +xv, -0, -zv );
- corners[2] = Vec3::newTemp( +xv, -0, +zv );
- corners[3] = Vec3::newTemp( -xv, -0, +zv );
- corners[4] = Vec3::newTemp( -xv, +yv, -zv );
- corners[5] = Vec3::newTemp( +xv, +yv, -zv );
- corners[6] = Vec3::newTemp( +xv, +yv, +zv );
- corners[7] = Vec3::newTemp( -xv, +yv, +zv );
+ Vec3* corners[8];
+ float xv = 1.0f / 16.0f;
+ float zv = 1.0f / 16.0f;
+ float yv = 10.0f / 16.0f;
+ corners[0] = Vec3::newTemp(-xv, -0, -zv);
+ corners[1] = Vec3::newTemp(+xv, -0, -zv);
+ corners[2] = Vec3::newTemp(+xv, -0, +zv);
+ corners[3] = Vec3::newTemp(-xv, -0, +zv);
+ corners[4] = Vec3::newTemp(-xv, +yv, -zv);
+ corners[5] = Vec3::newTemp(+xv, +yv, -zv);
+ corners[6] = Vec3::newTemp(+xv, +yv, +zv);
+ corners[7] = Vec3::newTemp(-xv, +yv, +zv);
- for ( int i = 0; i < 8; i++ )
- {
- if ( flipped )
- {
- corners[i]->z -= 1 / 16.0f;
- corners[i]->xRot( 40 * PI / 180 );
- }
- else
- {
- corners[i]->z += 1 / 16.0f;
- corners[i]->xRot( -40 * PI / 180 );
- }
- if (dir == 0 || dir == 7)
- {
- corners[i]->zRot(180 * PI / 180);
- }
- if ( dir == 6 || dir == 0 )
- {
- corners[i]->yRot( 90 * PI / 180 );
- }
+ for (int i = 0; i < 8; i++) {
+ if (flipped) {
+ corners[i]->z -= 1 / 16.0f;
+ corners[i]->xRot(40 * PI / 180);
+ } else {
+ corners[i]->z += 1 / 16.0f;
+ corners[i]->xRot(-40 * PI / 180);
+ }
+ if (dir == 0 || dir == 7) {
+ corners[i]->zRot(180 * PI / 180);
+ }
+ if (dir == 6 || dir == 0) {
+ corners[i]->yRot(90 * PI / 180);
+ }
- if ( dir > 0 && dir < 5 )
- {
- corners[i]->y -= 6 / 16.0f;
- corners[i]->xRot( 90 * PI / 180 );
+ if (dir > 0 && dir < 5) {
+ corners[i]->y -= 6 / 16.0f;
+ corners[i]->xRot(90 * PI / 180);
- if ( dir == 4 ) corners[i]->yRot( 0 * PI / 180 );
- if ( dir == 3 ) corners[i]->yRot( 180 * PI / 180 );
- if ( dir == 2 ) corners[i]->yRot( 90 * PI / 180 );
- if ( dir == 1 ) corners[i]->yRot( -90 * PI / 180 );
+ if (dir == 4) corners[i]->yRot(0 * PI / 180);
+ if (dir == 3) corners[i]->yRot(180 * PI / 180);
+ if (dir == 2) corners[i]->yRot(90 * PI / 180);
+ if (dir == 1) corners[i]->yRot(-90 * PI / 180);
- corners[i]->x += x + 0.5;
- corners[i]->y += y + 8 / 16.0f;
- corners[i]->z += z + 0.5;
- }
- else if (dir == 0 || dir == 7)
- {
- corners[i]->x += x + 0.5;
- corners[i]->y += y + 14 / 16.0f;
- corners[i]->z += z + 0.5;
- }
- else
- {
- corners[i]->x += x + 0.5;
- corners[i]->y += y + 2 / 16.0f;
- corners[i]->z += z + 0.5;
- }
- }
-
- Vec3* c0 = NULL, *c1 = NULL, *c2 = NULL, *c3 = NULL;
- for ( int i = 0; i < 6; i++ )
- {
- if ( i == 0 )
- {
- u0 = tex->getU(7);
- v0 = tex->getV(6);
- u1 = tex->getU(9);
- v1 = tex->getV(8);
- }
- else if ( i == 2 )
- {
- u0 = tex->getU(7);
- v0 = tex->getV(6);
- u1 = tex->getU(9);
- v1 = tex->getV1();
- }
- if ( i == 0 )
- {
- c0 = corners[0];
- c1 = corners[1];
- c2 = corners[2];
- c3 = corners[3];
- }
- else if ( i == 1 )
- {
- c0 = corners[7];
- c1 = corners[6];
- c2 = corners[5];
- c3 = corners[4];
- }
- else if ( i == 2 )
- {
- c0 = corners[1];
- c1 = corners[0];
- c2 = corners[4];
- c3 = corners[5];
- }
- else if ( i == 3 )
- {
- c0 = corners[2];
- c1 = corners[1];
- c2 = corners[5];
- c3 = corners[6];
- }
- else if ( i == 4 )
- {
- c0 = corners[3];
- c1 = corners[2];
- c2 = corners[6];
- c3 = corners[7];
- }
- else if ( i == 5 )
- {
- c0 = corners[0];
- c1 = corners[3];
- c2 = corners[7];
- c3 = corners[4];
- }
- t->vertexUV( ( float )( c0->x ), ( float )( c0->y ), ( float )( c0->z ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( c1->x ), ( float )( c1->y ), ( float )( c1->z ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( c2->x ), ( float )( c2->y ), ( float )( c2->z ), ( float )( u1 ), ( float )( v0 ) );
- t->vertexUV( ( float )( c3->x ), ( float )( c3->y ), ( float )( c3->z ), ( float )( u0 ), ( float )( v0 ) );
- }
-#endif // DISABLE_TESS_FUNCS
- return true;
+ corners[i]->x += x + 0.5;
+ corners[i]->y += y + 8 / 16.0f;
+ corners[i]->z += z + 0.5;
+ } else if (dir == 0 || dir == 7) {
+ corners[i]->x += x + 0.5;
+ corners[i]->y += y + 14 / 16.0f;
+ corners[i]->z += z + 0.5;
+ } else {
+ corners[i]->x += x + 0.5;
+ corners[i]->y += y + 2 / 16.0f;
+ corners[i]->z += z + 0.5;
+ }
+ }
+ Vec3 *c0 = NULL, *c1 = NULL, *c2 = NULL, *c3 = NULL;
+ for (int i = 0; i < 6; i++) {
+ if (i == 0) {
+ u0 = tex->getU(7);
+ v0 = tex->getV(6);
+ u1 = tex->getU(9);
+ v1 = tex->getV(8);
+ } else if (i == 2) {
+ u0 = tex->getU(7);
+ v0 = tex->getV(6);
+ u1 = tex->getU(9);
+ v1 = tex->getV1();
+ }
+ if (i == 0) {
+ c0 = corners[0];
+ c1 = corners[1];
+ c2 = corners[2];
+ c3 = corners[3];
+ } else if (i == 1) {
+ c0 = corners[7];
+ c1 = corners[6];
+ c2 = corners[5];
+ c3 = corners[4];
+ } else if (i == 2) {
+ c0 = corners[1];
+ c1 = corners[0];
+ c2 = corners[4];
+ c3 = corners[5];
+ } else if (i == 3) {
+ c0 = corners[2];
+ c1 = corners[1];
+ c2 = corners[5];
+ c3 = corners[6];
+ } else if (i == 4) {
+ c0 = corners[3];
+ c1 = corners[2];
+ c2 = corners[6];
+ c3 = corners[7];
+ } else if (i == 5) {
+ c0 = corners[0];
+ c1 = corners[3];
+ c2 = corners[7];
+ c3 = corners[4];
+ }
+ t->vertexUV((float)(c0->x), (float)(c0->y), (float)(c0->z), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(c1->x), (float)(c1->y), (float)(c1->z), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(c2->x), (float)(c2->y), (float)(c2->z), (float)(u1),
+ (float)(v0));
+ t->vertexUV((float)(c3->x), (float)(c3->y), (float)(c3->z), (float)(u0),
+ (float)(v0));
+ }
+#endif // DISABLE_TESS_FUNCS
+ return true;
}
-bool TileRenderer_SPU::tesselateTripwireSourceInWorld(Tile_SPU *tt, int x, int y, int z)
-{
+bool TileRenderer_SPU::tesselateTripwireSourceInWorld(Tile_SPU* tt, int x,
+ int y, int z) {
#ifdef DISABLE_TESS_FUNCS
- Tesselator *t = Tesselator::getInstance();
- int data = level->getData(x, y, z);
- int dir = data & TripWireSourceTile::MASK_DIR;
- bool attached = (data & TripWireSourceTile::MASK_ATTACHED) == TripWireSourceTile::MASK_ATTACHED;
- bool powered = (data & TripWireSourceTile::MASK_POWERED) == TripWireSourceTile::MASK_POWERED;
- bool suspended = !level->isTopSolidBlocking(x, y - 1, z);
+ Tesselator* t = Tesselator::getInstance();
+ int data = level->getData(x, y, z);
+ int dir = data & TripWireSourceTile::MASK_DIR;
+ bool attached = (data & TripWireSourceTile::MASK_ATTACHED) ==
+ TripWireSourceTile::MASK_ATTACHED;
+ bool powered = (data & TripWireSourceTile::MASK_POWERED) ==
+ TripWireSourceTile::MASK_POWERED;
+ bool suspended = !level->isTopSolidBlocking(x, y - 1, z);
- bool hadFixed = hasFixedTexture();
- if (!hadFixed) this->setFixedTexture(getTexture(Tile::wood));
+ bool hadFixed = hasFixedTexture();
+ if (!hadFixed) this->setFixedTexture(getTexture(Tile::wood));
- float boxHeight = 4 / 16.0f;
- float boxWidth = 2 / 16.0f;
- float boxDepth = 2 / 16.0f;
+ float boxHeight = 4 / 16.0f;
+ float boxWidth = 2 / 16.0f;
+ float boxDepth = 2 / 16.0f;
- float boxy0 = 0.3f - boxHeight;
- float boxy1 = 0.3f + boxHeight;
- if (dir == Direction::NORTH)
- {
- setShape(0.5f - boxWidth, boxy0, 1 - boxDepth, 0.5f + boxWidth, boxy1, 1);
- }
- else if (dir == Direction::SOUTH)
- {
- setShape(0.5f - boxWidth, boxy0, 0, 0.5f + boxWidth, boxy1, boxDepth);
- }
- else if (dir == Direction::WEST)
- {
- setShape(1 - boxDepth, boxy0, 0.5f - boxWidth, 1, boxy1, 0.5f + boxWidth);
- }
- else if (dir == Direction::EAST)
- {
- setShape(0, boxy0, 0.5f - boxWidth, boxDepth, boxy1, 0.5f + boxWidth);
- }
+ float boxy0 = 0.3f - boxHeight;
+ float boxy1 = 0.3f + boxHeight;
+ if (dir == Direction::NORTH) {
+ setShape(0.5f - boxWidth, boxy0, 1 - boxDepth, 0.5f + boxWidth, boxy1,
+ 1);
+ } else if (dir == Direction::SOUTH) {
+ setShape(0.5f - boxWidth, boxy0, 0, 0.5f + boxWidth, boxy1, boxDepth);
+ } else if (dir == Direction::WEST) {
+ setShape(1 - boxDepth, boxy0, 0.5f - boxWidth, 1, boxy1,
+ 0.5f + boxWidth);
+ } else if (dir == Direction::EAST) {
+ setShape(0, boxy0, 0.5f - boxWidth, boxDepth, boxy1, 0.5f + boxWidth);
+ }
- this->tesselateBlockInWorld(tt, x, y, z);
- if (!hadFixed) this->clearFixedTexture();
+ this->tesselateBlockInWorld(tt, x, y, z);
+ if (!hadFixed) this->clearFixedTexture();
- float brightness;
- if (SharedConstants::TEXTURE_LIGHTING)
- {
- t->tex2(tt->getLightColor(level, x, y, z));
- brightness = 1;
- }
- else
- {
- brightness = tt->getBrightness(level, x, y, z);
- }
- if (Tile::lightEmission[tt->id] > 0) brightness = 1.0f;
- t->color(brightness, brightness, brightness);
- Icon *tex = getTexture(tt, 0);
+ float brightness;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ brightness = 1;
+ } else {
+ brightness = tt->getBrightness(level, x, y, z);
+ }
+ if (Tile::lightEmission[tt->id] > 0) brightness = 1.0f;
+ t->color(brightness, brightness, brightness);
+ Icon* tex = getTexture(tt, 0);
- if (hasFixedTexture()) tex = fixedTexture;
- double u0 = tex->getU0();
- double v0 = tex->getV0();
- double u1 = tex->getU1();
- double v1 = tex->getV1();
+ if (hasFixedTexture()) tex = fixedTexture;
+ double u0 = tex->getU0();
+ double v0 = tex->getV0();
+ double u1 = tex->getU1();
+ double v1 = tex->getV1();
- Vec3 *corners[8];
- float stickWidth = 0.75f / 16.0f;
- float stickHeight = 0.75f / 16.0f;
- float stickLength = 5 / 16.0f;
- corners[0] = Vec3::newTemp(-stickWidth, -0, -stickHeight);
- corners[1] = Vec3::newTemp(+stickWidth, -0, -stickHeight);
- corners[2] = Vec3::newTemp(+stickWidth, -0, +stickHeight);
- corners[3] = Vec3::newTemp(-stickWidth, -0, +stickHeight);
- corners[4] = Vec3::newTemp(-stickWidth, +stickLength, -stickHeight);
- corners[5] = Vec3::newTemp(+stickWidth, +stickLength, -stickHeight);
- corners[6] = Vec3::newTemp(+stickWidth, +stickLength, +stickHeight);
- corners[7] = Vec3::newTemp(-stickWidth, +stickLength, +stickHeight);
+ Vec3* corners[8];
+ float stickWidth = 0.75f / 16.0f;
+ float stickHeight = 0.75f / 16.0f;
+ float stickLength = 5 / 16.0f;
+ corners[0] = Vec3::newTemp(-stickWidth, -0, -stickHeight);
+ corners[1] = Vec3::newTemp(+stickWidth, -0, -stickHeight);
+ corners[2] = Vec3::newTemp(+stickWidth, -0, +stickHeight);
+ corners[3] = Vec3::newTemp(-stickWidth, -0, +stickHeight);
+ corners[4] = Vec3::newTemp(-stickWidth, +stickLength, -stickHeight);
+ corners[5] = Vec3::newTemp(+stickWidth, +stickLength, -stickHeight);
+ corners[6] = Vec3::newTemp(+stickWidth, +stickLength, +stickHeight);
+ corners[7] = Vec3::newTemp(-stickWidth, +stickLength, +stickHeight);
- for (int i = 0; i < 8; i++)
- {
- corners[i]->z += 1 / 16.0f;
+ for (int i = 0; i < 8; i++) {
+ corners[i]->z += 1 / 16.0f;
- if (powered)
- {
- corners[i]->xRot(30 * PI / 180);
- corners[i]->y -= 7 / 16.0f;
- }
- else if (attached)
- {
- corners[i]->xRot(5 * PI / 180);
- corners[i]->y -= 7 / 16.0f;
- }
- else
- {
- corners[i]->xRot(-40 * PI / 180);
- corners[i]->y -= 6 / 16.0f;
- }
+ if (powered) {
+ corners[i]->xRot(30 * PI / 180);
+ corners[i]->y -= 7 / 16.0f;
+ } else if (attached) {
+ corners[i]->xRot(5 * PI / 180);
+ corners[i]->y -= 7 / 16.0f;
+ } else {
+ corners[i]->xRot(-40 * PI / 180);
+ corners[i]->y -= 6 / 16.0f;
+ }
- corners[i]->xRot(90 * PI / 180);
+ corners[i]->xRot(90 * PI / 180);
- if (dir == Direction::NORTH) corners[i]->yRot(0 * PI / 180);
- if (dir == Direction::SOUTH) corners[i]->yRot(180 * PI / 180);
- if (dir == Direction::WEST) corners[i]->yRot(90 * PI / 180);
- if (dir == Direction::EAST) corners[i]->yRot(-90 * PI / 180);
+ if (dir == Direction::NORTH) corners[i]->yRot(0 * PI / 180);
+ if (dir == Direction::SOUTH) corners[i]->yRot(180 * PI / 180);
+ if (dir == Direction::WEST) corners[i]->yRot(90 * PI / 180);
+ if (dir == Direction::EAST) corners[i]->yRot(-90 * PI / 180);
- corners[i]->x += x + 0.5;
- corners[i]->y += y + 5 / 16.0f;
- corners[i]->z += z + 0.5;
- }
+ corners[i]->x += x + 0.5;
+ corners[i]->y += y + 5 / 16.0f;
+ corners[i]->z += z + 0.5;
+ }
- Vec3 *c0 = NULL, *c1 = NULL, *c2 = NULL, *c3 = NULL;
- int stickX0 = 7;
- int stickX1 = 9;
- int stickY0 = 9;
- int stickY1 = 16;
+ Vec3 *c0 = NULL, *c1 = NULL, *c2 = NULL, *c3 = NULL;
+ int stickX0 = 7;
+ int stickX1 = 9;
+ int stickY0 = 9;
+ int stickY1 = 16;
- for (int i = 0; i < 6; i++)
- {
- if (i == 0)
- {
- c0 = corners[0];
- c1 = corners[1];
- c2 = corners[2];
- c3 = corners[3];
- u0 = tex->getU(stickX0);
- v0 = tex->getV(stickY0);
- u1 = tex->getU(stickX1);
- v1 = tex->getV(stickY0 + 2);
- }
- else if (i == 1)
- {
- c0 = corners[7];
- c1 = corners[6];
- c2 = corners[5];
- c3 = corners[4];
- }
- else if (i == 2)
- {
- c0 = corners[1];
- c1 = corners[0];
- c2 = corners[4];
- c3 = corners[5];
- u0 = tex->getU(stickX0);
- v0 = tex->getV(stickY0);
- u1 = tex->getU(stickX1);
- v1 = tex->getV(stickY1);
- }
- else if (i == 3)
- {
- c0 = corners[2];
- c1 = corners[1];
- c2 = corners[5];
- c3 = corners[6];
- }
- else if (i == 4)
- {
- c0 = corners[3];
- c1 = corners[2];
- c2 = corners[6];
- c3 = corners[7];
- }
- else if (i == 5)
- {
- c0 = corners[0];
- c1 = corners[3];
- c2 = corners[7];
- c3 = corners[4];
- }
- t->vertexUV(c0->x, c0->y, c0->z, u0, v1);
- t->vertexUV(c1->x, c1->y, c1->z, u1, v1);
- t->vertexUV(c2->x, c2->y, c2->z, u1, v0);
- t->vertexUV(c3->x, c3->y, c3->z, u0, v0);
- }
+ for (int i = 0; i < 6; i++) {
+ if (i == 0) {
+ c0 = corners[0];
+ c1 = corners[1];
+ c2 = corners[2];
+ c3 = corners[3];
+ u0 = tex->getU(stickX0);
+ v0 = tex->getV(stickY0);
+ u1 = tex->getU(stickX1);
+ v1 = tex->getV(stickY0 + 2);
+ } else if (i == 1) {
+ c0 = corners[7];
+ c1 = corners[6];
+ c2 = corners[5];
+ c3 = corners[4];
+ } else if (i == 2) {
+ c0 = corners[1];
+ c1 = corners[0];
+ c2 = corners[4];
+ c3 = corners[5];
+ u0 = tex->getU(stickX0);
+ v0 = tex->getV(stickY0);
+ u1 = tex->getU(stickX1);
+ v1 = tex->getV(stickY1);
+ } else if (i == 3) {
+ c0 = corners[2];
+ c1 = corners[1];
+ c2 = corners[5];
+ c3 = corners[6];
+ } else if (i == 4) {
+ c0 = corners[3];
+ c1 = corners[2];
+ c2 = corners[6];
+ c3 = corners[7];
+ } else if (i == 5) {
+ c0 = corners[0];
+ c1 = corners[3];
+ c2 = corners[7];
+ c3 = corners[4];
+ }
+ t->vertexUV(c0->x, c0->y, c0->z, u0, v1);
+ t->vertexUV(c1->x, c1->y, c1->z, u1, v1);
+ t->vertexUV(c2->x, c2->y, c2->z, u1, v0);
+ t->vertexUV(c3->x, c3->y, c3->z, u0, v0);
+ }
+ float hoopWidth = 1.5f / 16.0f;
+ float hoopHeight = 1.5f / 16.0f;
+ float hoopLength = 0.5f / 16.0f;
+ corners[0] = Vec3::newTemp(-hoopWidth, -0, -hoopHeight);
+ corners[1] = Vec3::newTemp(+hoopWidth, -0, -hoopHeight);
+ corners[2] = Vec3::newTemp(+hoopWidth, -0, +hoopHeight);
+ corners[3] = Vec3::newTemp(-hoopWidth, -0, +hoopHeight);
+ corners[4] = Vec3::newTemp(-hoopWidth, +hoopLength, -hoopHeight);
+ corners[5] = Vec3::newTemp(+hoopWidth, +hoopLength, -hoopHeight);
+ corners[6] = Vec3::newTemp(+hoopWidth, +hoopLength, +hoopHeight);
+ corners[7] = Vec3::newTemp(-hoopWidth, +hoopLength, +hoopHeight);
- float hoopWidth = 1.5f / 16.0f;
- float hoopHeight = 1.5f / 16.0f;
- float hoopLength = 0.5f / 16.0f;
- corners[0] = Vec3::newTemp(-hoopWidth, -0, -hoopHeight);
- corners[1] = Vec3::newTemp(+hoopWidth, -0, -hoopHeight);
- corners[2] = Vec3::newTemp(+hoopWidth, -0, +hoopHeight);
- corners[3] = Vec3::newTemp(-hoopWidth, -0, +hoopHeight);
- corners[4] = Vec3::newTemp(-hoopWidth, +hoopLength, -hoopHeight);
- corners[5] = Vec3::newTemp(+hoopWidth, +hoopLength, -hoopHeight);
- corners[6] = Vec3::newTemp(+hoopWidth, +hoopLength, +hoopHeight);
- corners[7] = Vec3::newTemp(-hoopWidth, +hoopLength, +hoopHeight);
+ for (int i = 0; i < 8; i++) {
+ corners[i]->z += 3.5f / 16.0f;
- for (int i = 0; i < 8; i++)
- {
- corners[i]->z += 3.5f / 16.0f;
+ if (powered) {
+ corners[i]->y -= 1.5 / 16.0f;
+ corners[i]->z -= 2.6 / 16.0f;
+ corners[i]->xRot(0 * PI / 180);
+ } else if (attached) {
+ corners[i]->y += 0.25 / 16.0f;
+ corners[i]->z -= 2.75 / 16.0f;
+ corners[i]->xRot(10 * PI / 180);
+ } else {
+ corners[i]->xRot(50 * PI / 180);
+ }
- if (powered)
- {
- corners[i]->y -= 1.5 / 16.0f;
- corners[i]->z -= 2.6 / 16.0f;
- corners[i]->xRot(0 * PI / 180);
- }
- else if (attached)
- {
- corners[i]->y += 0.25 / 16.0f;
- corners[i]->z -= 2.75 / 16.0f;
- corners[i]->xRot(10 * PI / 180);
- }
- else
- {
- corners[i]->xRot(50 * PI / 180);
- }
+ if (dir == Direction::NORTH) corners[i]->yRot(0 * PI / 180);
+ if (dir == Direction::SOUTH) corners[i]->yRot(180 * PI / 180);
+ if (dir == Direction::WEST) corners[i]->yRot(90 * PI / 180);
+ if (dir == Direction::EAST) corners[i]->yRot(-90 * PI / 180);
- if (dir == Direction::NORTH) corners[i]->yRot(0 * PI / 180);
- if (dir == Direction::SOUTH) corners[i]->yRot(180 * PI / 180);
- if (dir == Direction::WEST) corners[i]->yRot(90 * PI / 180);
- if (dir == Direction::EAST) corners[i]->yRot(-90 * PI / 180);
+ corners[i]->x += x + 0.5;
+ corners[i]->y += y + 5 / 16.0f;
+ corners[i]->z += z + 0.5;
+ }
- corners[i]->x += x + 0.5;
- corners[i]->y += y + 5 / 16.0f;
- corners[i]->z += z + 0.5;
- }
+ int hoopX0 = 5;
+ int hoopX1 = 11;
+ int hoopY0 = 3;
+ int hoopY1 = 9;
- int hoopX0 = 5;
- int hoopX1 = 11;
- int hoopY0 = 3;
- int hoopY1 = 9;
+ for (int i = 0; i < 6; i++) {
+ if (i == 0) {
+ c0 = corners[0];
+ c1 = corners[1];
+ c2 = corners[2];
+ c3 = corners[3];
+ u0 = tex->getU(hoopX0);
+ v0 = tex->getV(hoopY0);
+ u1 = tex->getU(hoopX1);
+ v1 = tex->getV(hoopY1);
+ } else if (i == 1) {
+ c0 = corners[7];
+ c1 = corners[6];
+ c2 = corners[5];
+ c3 = corners[4];
+ } else if (i == 2) {
+ c0 = corners[1];
+ c1 = corners[0];
+ c2 = corners[4];
+ c3 = corners[5];
+ u0 = tex->getU(hoopX0);
+ v0 = tex->getV(hoopY0);
+ u1 = tex->getU(hoopX1);
+ v1 = tex->getV(hoopY0 + 2);
+ } else if (i == 3) {
+ c0 = corners[2];
+ c1 = corners[1];
+ c2 = corners[5];
+ c3 = corners[6];
+ } else if (i == 4) {
+ c0 = corners[3];
+ c1 = corners[2];
+ c2 = corners[6];
+ c3 = corners[7];
+ } else if (i == 5) {
+ c0 = corners[0];
+ c1 = corners[3];
+ c2 = corners[7];
+ c3 = corners[4];
+ }
+ t->vertexUV(c0->x, c0->y, c0->z, u0, v1);
+ t->vertexUV(c1->x, c1->y, c1->z, u1, v1);
+ t->vertexUV(c2->x, c2->y, c2->z, u1, v0);
+ t->vertexUV(c3->x, c3->y, c3->z, u0, v0);
+ }
- for (int i = 0; i < 6; i++)
- {
- if (i == 0)
- {
- c0 = corners[0];
- c1 = corners[1];
- c2 = corners[2];
- c3 = corners[3];
- u0 = tex->getU(hoopX0);
- v0 = tex->getV(hoopY0);
- u1 = tex->getU(hoopX1);
- v1 = tex->getV(hoopY1);
- }
- else if (i == 1)
- {
- c0 = corners[7];
- c1 = corners[6];
- c2 = corners[5];
- c3 = corners[4];
- }
- else if (i == 2)
- {
- c0 = corners[1];
- c1 = corners[0];
- c2 = corners[4];
- c3 = corners[5];
- u0 = tex->getU(hoopX0);
- v0 = tex->getV(hoopY0);
- u1 = tex->getU(hoopX1);
- v1 = tex->getV(hoopY0 + 2);
- }
- else if (i == 3)
- {
- c0 = corners[2];
- c1 = corners[1];
- c2 = corners[5];
- c3 = corners[6];
- }
- else if (i == 4)
- {
- c0 = corners[3];
- c1 = corners[2];
- c2 = corners[6];
- c3 = corners[7];
- }
- else if (i == 5)
- {
- c0 = corners[0];
- c1 = corners[3];
- c2 = corners[7];
- c3 = corners[4];
- }
- t->vertexUV(c0->x, c0->y, c0->z, u0, v1);
- t->vertexUV(c1->x, c1->y, c1->z, u1, v1);
- t->vertexUV(c2->x, c2->y, c2->z, u1, v0);
- t->vertexUV(c3->x, c3->y, c3->z, u0, v0);
- }
+ if (attached) {
+ double hoopBottomY = corners[0]->y;
+ float width = 0.5f / 16.0f;
+ float top = 0.5f - (width / 2);
+ float bottom = top + width;
+ Icon* wireTex = getTexture(Tile::tripWire);
+ double wireX0 = tex->getU0();
+ double wireY0 = tex->getV(attached ? 2 : 0);
+ double wireX1 = tex->getU1();
+ double wireY1 = tex->getV(attached ? 4 : 2);
+ double floating = (suspended ? 3.5f : 1.5f) / 16.0;
- if (attached)
- {
- double hoopBottomY = corners[0]->y;
- float width = 0.5f / 16.0f;
- float top = 0.5f - (width / 2);
- float bottom = top + width;
- Icon *wireTex = getTexture(Tile::tripWire);
- double wireX0 = tex->getU0();
- double wireY0 = tex->getV(attached ? 2 : 0);
- double wireX1 = tex->getU1();
- double wireY1 = tex->getV(attached ? 4 : 2);
- double floating = (suspended ? 3.5f : 1.5f) / 16.0;
+ brightness = tt->getBrightness(level, x, y, z) * 0.75f;
+ t->color(brightness, brightness, brightness);
- brightness = tt->getBrightness(level, x, y, z) * 0.75f;
- t->color(brightness, brightness, brightness);
+ if (dir == Direction::NORTH) {
+ t->vertexUV(x + top, y + floating, z + 0.25, wireX0, wireY0);
+ t->vertexUV(x + bottom, y + floating, z + 0.25, wireX0, wireY1);
+ t->vertexUV(x + bottom, y + floating, z, wireX1, wireY1);
+ t->vertexUV(x + top, y + floating, z, wireX1, wireY0);
- if (dir == Direction::NORTH)
- {
- t->vertexUV(x + top, y + floating, z + 0.25, wireX0, wireY0);
- t->vertexUV(x + bottom, y + floating, z + 0.25, wireX0, wireY1);
- t->vertexUV(x + bottom, y + floating, z, wireX1, wireY1);
- t->vertexUV(x + top, y + floating, z, wireX1, wireY0);
+ t->vertexUV(x + top, hoopBottomY, z + 0.5, wireX0, wireY0);
+ t->vertexUV(x + bottom, hoopBottomY, z + 0.5, wireX0, wireY1);
+ t->vertexUV(x + bottom, y + floating, z + 0.25, wireX1, wireY1);
+ t->vertexUV(x + top, y + floating, z + 0.25, wireX1, wireY0);
+ } else if (dir == Direction::SOUTH) {
+ t->vertexUV(x + top, y + floating, z + 0.75, wireX0, wireY0);
+ t->vertexUV(x + bottom, y + floating, z + 0.75, wireX0, wireY1);
+ t->vertexUV(x + bottom, hoopBottomY, z + 0.5, wireX1, wireY1);
+ t->vertexUV(x + top, hoopBottomY, z + 0.5, wireX1, wireY0);
- t->vertexUV(x + top, hoopBottomY, z + 0.5, wireX0, wireY0);
- t->vertexUV(x + bottom, hoopBottomY, z + 0.5, wireX0, wireY1);
- t->vertexUV(x + bottom, y + floating, z + 0.25, wireX1, wireY1);
- t->vertexUV(x + top, y + floating, z + 0.25, wireX1, wireY0);
- }
- else if (dir == Direction::SOUTH)
- {
- t->vertexUV(x + top, y + floating, z + 0.75, wireX0, wireY0);
- t->vertexUV(x + bottom, y + floating, z + 0.75, wireX0, wireY1);
- t->vertexUV(x + bottom, hoopBottomY, z + 0.5, wireX1, wireY1);
- t->vertexUV(x + top, hoopBottomY, z + 0.5, wireX1, wireY0);
+ t->vertexUV(x + top, y + floating, z + 1, wireX0, wireY0);
+ t->vertexUV(x + bottom, y + floating, z + 1, wireX0, wireY1);
+ t->vertexUV(x + bottom, y + floating, z + 0.75, wireX1, wireY1);
+ t->vertexUV(x + top, y + floating, z + 0.75, wireX1, wireY0);
+ } else if (dir == Direction::WEST) {
+ t->vertexUV(x, y + floating, z + bottom, wireX0, wireY1);
+ t->vertexUV(x + 0.25, y + floating, z + bottom, wireX1, wireY1);
+ t->vertexUV(x + 0.25, y + floating, z + top, wireX1, wireY0);
+ t->vertexUV(x, y + floating, z + top, wireX0, wireY0);
- t->vertexUV(x + top, y + floating, z + 1, wireX0, wireY0);
- t->vertexUV(x + bottom, y + floating, z + 1, wireX0, wireY1);
- t->vertexUV(x + bottom, y + floating, z + 0.75, wireX1, wireY1);
- t->vertexUV(x + top, y + floating, z + 0.75, wireX1, wireY0);
- }
- else if (dir == Direction::WEST)
- {
- t->vertexUV(x, y + floating, z + bottom, wireX0, wireY1);
- t->vertexUV(x + 0.25, y + floating, z + bottom, wireX1, wireY1);
- t->vertexUV(x + 0.25, y + floating, z + top, wireX1, wireY0);
- t->vertexUV(x, y + floating, z + top, wireX0, wireY0);
+ t->vertexUV(x + 0.25, y + floating, z + bottom, wireX0, wireY1);
+ t->vertexUV(x + 0.5, hoopBottomY, z + bottom, wireX1, wireY1);
+ t->vertexUV(x + 0.5, hoopBottomY, z + top, wireX1, wireY0);
+ t->vertexUV(x + 0.25, y + floating, z + top, wireX0, wireY0);
+ } else {
+ t->vertexUV(x + 0.5, hoopBottomY, z + bottom, wireX0, wireY1);
+ t->vertexUV(x + 0.75, y + floating, z + bottom, wireX1, wireY1);
+ t->vertexUV(x + 0.75, y + floating, z + top, wireX1, wireY0);
+ t->vertexUV(x + 0.5, hoopBottomY, z + top, wireX0, wireY0);
- t->vertexUV(x + 0.25, y + floating, z + bottom, wireX0, wireY1);
- t->vertexUV(x + 0.5, hoopBottomY, z + bottom, wireX1, wireY1);
- t->vertexUV(x + 0.5, hoopBottomY, z + top, wireX1, wireY0);
- t->vertexUV(x + 0.25, y + floating, z + top, wireX0, wireY0);
- }
- else
- {
- t->vertexUV(x + 0.5, hoopBottomY, z + bottom, wireX0, wireY1);
- t->vertexUV(x + 0.75, y + floating, z + bottom, wireX1, wireY1);
- t->vertexUV(x + 0.75, y + floating, z + top, wireX1, wireY0);
- t->vertexUV(x + 0.5, hoopBottomY, z + top, wireX0, wireY0);
+ t->vertexUV(x + 0.75, y + floating, z + bottom, wireX0, wireY1);
+ t->vertexUV(x + 1, y + floating, z + bottom, wireX1, wireY1);
+ t->vertexUV(x + 1, y + floating, z + top, wireX1, wireY0);
+ t->vertexUV(x + 0.75, y + floating, z + top, wireX0, wireY0);
+ }
+ }
+#endif // #ifdef DISABLE_TESS_FUNCS
- t->vertexUV(x + 0.75, y + floating, z + bottom, wireX0, wireY1);
- t->vertexUV(x + 1, y + floating, z + bottom, wireX1, wireY1);
- t->vertexUV(x + 1, y + floating, z + top, wireX1, wireY0);
- t->vertexUV(x + 0.75, y + floating, z + top, wireX0, wireY0);
- }
- }
-#endif // #ifdef DISABLE_TESS_FUNCS
-
- return true;
+ return true;
}
-bool TileRenderer_SPU::tesselateTripwireInWorld(Tile_SPU *tt, int x, int y, int z)
-{
+bool TileRenderer_SPU::tesselateTripwireInWorld(Tile_SPU* tt, int x, int y,
+ int z) {
#ifdef DISABLE_TESS_FUNCS
- Tesselator *t = Tesselator::getInstance();
- Icon *tex = getTexture(tt, 0);
- int data = level->getData(x, y, z);
- bool attached = (data & TripWireTile::MASK_ATTACHED) == TripWireTile::MASK_ATTACHED;
- bool suspended = (data & TripWireTile::MASK_SUSPENDED) == TripWireTile::MASK_SUSPENDED;
+ Tesselator* t = Tesselator::getInstance();
+ Icon* tex = getTexture(tt, 0);
+ int data = level->getData(x, y, z);
+ bool attached =
+ (data & TripWireTile::MASK_ATTACHED) == TripWireTile::MASK_ATTACHED;
+ bool suspended =
+ (data & TripWireTile::MASK_SUSPENDED) == TripWireTile::MASK_SUSPENDED;
- if (hasFixedTexture()) tex = fixedTexture;
+ if (hasFixedTexture()) tex = fixedTexture;
- float brightness;
- if (SharedConstants::TEXTURE_LIGHTING)
- {
- t->tex2(tt->getLightColor(level, x, y, z));
- }
- brightness = tt->getBrightness(level, x, y, z) * 0.75f;
- t->color(brightness, brightness, brightness);
+ float brightness;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ }
+ brightness = tt->getBrightness(level, x, y, z) * 0.75f;
+ t->color(brightness, brightness, brightness);
- double wireX0 = tex->getU0();
- double wireY0 = tex->getV(attached ? 2 : 0);
- double wireX1 = tex->getU1();
- double wireY1 = tex->getV(attached ? 4 : 2);
- double floating = (suspended ? 3.5f : 1.5f) / 16.0;
+ double wireX0 = tex->getU0();
+ double wireY0 = tex->getV(attached ? 2 : 0);
+ double wireX1 = tex->getU1();
+ double wireY1 = tex->getV(attached ? 4 : 2);
+ double floating = (suspended ? 3.5f : 1.5f) / 16.0;
- bool w = TripWireTile::shouldConnectTo(level, x, y, z, data, Direction::WEST);
- bool e = TripWireTile::shouldConnectTo(level, x, y, z, data, Direction::EAST);
- bool n = TripWireTile::shouldConnectTo(level, x, y, z, data, Direction::NORTH);
- bool s = TripWireTile::shouldConnectTo(level, x, y, z, data, Direction::SOUTH);
+ bool w =
+ TripWireTile::shouldConnectTo(level, x, y, z, data, Direction::WEST);
+ bool e =
+ TripWireTile::shouldConnectTo(level, x, y, z, data, Direction::EAST);
+ bool n =
+ TripWireTile::shouldConnectTo(level, x, y, z, data, Direction::NORTH);
+ bool s =
+ TripWireTile::shouldConnectTo(level, x, y, z, data, Direction::SOUTH);
- float width = 0.5f / 16.0f;
- float top = 0.5f - (width / 2);
- float bottom = top + width;
+ float width = 0.5f / 16.0f;
+ float top = 0.5f - (width / 2);
+ float bottom = top + width;
- if (!n && !e && !s && !w)
- {
- n = true;
- s = true;
- }
+ if (!n && !e && !s && !w) {
+ n = true;
+ s = true;
+ }
- if (n)
- {
- t->vertexUV(x + top, y + floating, z + 0.25, wireX0, wireY0);
- t->vertexUV(x + bottom, y + floating, z + 0.25, wireX0, wireY1);
- t->vertexUV(x + bottom, y + floating, z, wireX1, wireY1);
- t->vertexUV(x + top, y + floating, z, wireX1, wireY0);
+ if (n) {
+ t->vertexUV(x + top, y + floating, z + 0.25, wireX0, wireY0);
+ t->vertexUV(x + bottom, y + floating, z + 0.25, wireX0, wireY1);
+ t->vertexUV(x + bottom, y + floating, z, wireX1, wireY1);
+ t->vertexUV(x + top, y + floating, z, wireX1, wireY0);
- t->vertexUV(x + top, y + floating, z, wireX1, wireY0);
- t->vertexUV(x + bottom, y + floating, z, wireX1, wireY1);
- t->vertexUV(x + bottom, y + floating, z + 0.25, wireX0, wireY1);
- t->vertexUV(x + top, y + floating, z + 0.25, wireX0, wireY0);
- }
- if (n || (s && !e && !w))
- {
- t->vertexUV(x + top, y + floating, z + 0.5, wireX0, wireY0);
- t->vertexUV(x + bottom, y + floating, z + 0.5, wireX0, wireY1);
- t->vertexUV(x + bottom, y + floating, z + 0.25, wireX1, wireY1);
- t->vertexUV(x + top, y + floating, z + 0.25, wireX1, wireY0);
+ t->vertexUV(x + top, y + floating, z, wireX1, wireY0);
+ t->vertexUV(x + bottom, y + floating, z, wireX1, wireY1);
+ t->vertexUV(x + bottom, y + floating, z + 0.25, wireX0, wireY1);
+ t->vertexUV(x + top, y + floating, z + 0.25, wireX0, wireY0);
+ }
+ if (n || (s && !e && !w)) {
+ t->vertexUV(x + top, y + floating, z + 0.5, wireX0, wireY0);
+ t->vertexUV(x + bottom, y + floating, z + 0.5, wireX0, wireY1);
+ t->vertexUV(x + bottom, y + floating, z + 0.25, wireX1, wireY1);
+ t->vertexUV(x + top, y + floating, z + 0.25, wireX1, wireY0);
- t->vertexUV(x + top, y + floating, z + 0.25, wireX1, wireY0);
- t->vertexUV(x + bottom, y + floating, z + 0.25, wireX1, wireY1);
- t->vertexUV(x + bottom, y + floating, z + 0.5, wireX0, wireY1);
- t->vertexUV(x + top, y + floating, z + 0.5, wireX0, wireY0);
- }
- if (s || (n && !e && !w))
- {
- t->vertexUV(x + top, y + floating, z + 0.75, wireX0, wireY0);
- t->vertexUV(x + bottom, y + floating, z + 0.75, wireX0, wireY1);
- t->vertexUV(x + bottom, y + floating, z + 0.5, wireX1, wireY1);
- t->vertexUV(x + top, y + floating, z + 0.5, wireX1, wireY0);
+ t->vertexUV(x + top, y + floating, z + 0.25, wireX1, wireY0);
+ t->vertexUV(x + bottom, y + floating, z + 0.25, wireX1, wireY1);
+ t->vertexUV(x + bottom, y + floating, z + 0.5, wireX0, wireY1);
+ t->vertexUV(x + top, y + floating, z + 0.5, wireX0, wireY0);
+ }
+ if (s || (n && !e && !w)) {
+ t->vertexUV(x + top, y + floating, z + 0.75, wireX0, wireY0);
+ t->vertexUV(x + bottom, y + floating, z + 0.75, wireX0, wireY1);
+ t->vertexUV(x + bottom, y + floating, z + 0.5, wireX1, wireY1);
+ t->vertexUV(x + top, y + floating, z + 0.5, wireX1, wireY0);
- t->vertexUV(x + top, y + floating, z + 0.5, wireX1, wireY0);
- t->vertexUV(x + bottom, y + floating, z + 0.5, wireX1, wireY1);
- t->vertexUV(x + bottom, y + floating, z + 0.75, wireX0, wireY1);
- t->vertexUV(x + top, y + floating, z + 0.75, wireX0, wireY0);
- }
- if (s)
- {
- t->vertexUV(x + top, y + floating, z + 1, wireX0, wireY0);
- t->vertexUV(x + bottom, y + floating, z + 1, wireX0, wireY1);
- t->vertexUV(x + bottom, y + floating, z + 0.75, wireX1, wireY1);
- t->vertexUV(x + top, y + floating, z + 0.75, wireX1, wireY0);
+ t->vertexUV(x + top, y + floating, z + 0.5, wireX1, wireY0);
+ t->vertexUV(x + bottom, y + floating, z + 0.5, wireX1, wireY1);
+ t->vertexUV(x + bottom, y + floating, z + 0.75, wireX0, wireY1);
+ t->vertexUV(x + top, y + floating, z + 0.75, wireX0, wireY0);
+ }
+ if (s) {
+ t->vertexUV(x + top, y + floating, z + 1, wireX0, wireY0);
+ t->vertexUV(x + bottom, y + floating, z + 1, wireX0, wireY1);
+ t->vertexUV(x + bottom, y + floating, z + 0.75, wireX1, wireY1);
+ t->vertexUV(x + top, y + floating, z + 0.75, wireX1, wireY0);
- t->vertexUV(x + top, y + floating, z + 0.75, wireX1, wireY0);
- t->vertexUV(x + bottom, y + floating, z + 0.75, wireX1, wireY1);
- t->vertexUV(x + bottom, y + floating, z + 1, wireX0, wireY1);
- t->vertexUV(x + top, y + floating, z + 1, wireX0, wireY0);
- }
+ t->vertexUV(x + top, y + floating, z + 0.75, wireX1, wireY0);
+ t->vertexUV(x + bottom, y + floating, z + 0.75, wireX1, wireY1);
+ t->vertexUV(x + bottom, y + floating, z + 1, wireX0, wireY1);
+ t->vertexUV(x + top, y + floating, z + 1, wireX0, wireY0);
+ }
- if (w)
- {
- t->vertexUV(x, y + floating, z + bottom, wireX0, wireY1);
- t->vertexUV(x + 0.25, y + floating, z + bottom, wireX1, wireY1);
- t->vertexUV(x + 0.25, y + floating, z + top, wireX1, wireY0);
- t->vertexUV(x, y + floating, z + top, wireX0, wireY0);
+ if (w) {
+ t->vertexUV(x, y + floating, z + bottom, wireX0, wireY1);
+ t->vertexUV(x + 0.25, y + floating, z + bottom, wireX1, wireY1);
+ t->vertexUV(x + 0.25, y + floating, z + top, wireX1, wireY0);
+ t->vertexUV(x, y + floating, z + top, wireX0, wireY0);
- t->vertexUV(x, y + floating, z + top, wireX0, wireY0);
- t->vertexUV(x + 0.25, y + floating, z + top, wireX1, wireY0);
- t->vertexUV(x + 0.25, y + floating, z + bottom, wireX1, wireY1);
- t->vertexUV(x, y + floating, z + bottom, wireX0, wireY1);
- }
- if (w || (e && !n && !s))
- {
- t->vertexUV(x + 0.25, y + floating, z + bottom, wireX0, wireY1);
- t->vertexUV(x + 0.5, y + floating, z + bottom, wireX1, wireY1);
- t->vertexUV(x + 0.5, y + floating, z + top, wireX1, wireY0);
- t->vertexUV(x + 0.25, y + floating, z + top, wireX0, wireY0);
+ t->vertexUV(x, y + floating, z + top, wireX0, wireY0);
+ t->vertexUV(x + 0.25, y + floating, z + top, wireX1, wireY0);
+ t->vertexUV(x + 0.25, y + floating, z + bottom, wireX1, wireY1);
+ t->vertexUV(x, y + floating, z + bottom, wireX0, wireY1);
+ }
+ if (w || (e && !n && !s)) {
+ t->vertexUV(x + 0.25, y + floating, z + bottom, wireX0, wireY1);
+ t->vertexUV(x + 0.5, y + floating, z + bottom, wireX1, wireY1);
+ t->vertexUV(x + 0.5, y + floating, z + top, wireX1, wireY0);
+ t->vertexUV(x + 0.25, y + floating, z + top, wireX0, wireY0);
- t->vertexUV(x + 0.25, y + floating, z + top, wireX0, wireY0);
- t->vertexUV(x + 0.5, y + floating, z + top, wireX1, wireY0);
- t->vertexUV(x + 0.5, y + floating, z + bottom, wireX1, wireY1);
- t->vertexUV(x + 0.25, y + floating, z + bottom, wireX0, wireY1);
- }
- if (e || (w && !n && !s))
- {
- t->vertexUV(x + 0.5, y + floating, z + bottom, wireX0, wireY1);
- t->vertexUV(x + 0.75, y + floating, z + bottom, wireX1, wireY1);
- t->vertexUV(x + 0.75, y + floating, z + top, wireX1, wireY0);
- t->vertexUV(x + 0.5, y + floating, z + top, wireX0, wireY0);
+ t->vertexUV(x + 0.25, y + floating, z + top, wireX0, wireY0);
+ t->vertexUV(x + 0.5, y + floating, z + top, wireX1, wireY0);
+ t->vertexUV(x + 0.5, y + floating, z + bottom, wireX1, wireY1);
+ t->vertexUV(x + 0.25, y + floating, z + bottom, wireX0, wireY1);
+ }
+ if (e || (w && !n && !s)) {
+ t->vertexUV(x + 0.5, y + floating, z + bottom, wireX0, wireY1);
+ t->vertexUV(x + 0.75, y + floating, z + bottom, wireX1, wireY1);
+ t->vertexUV(x + 0.75, y + floating, z + top, wireX1, wireY0);
+ t->vertexUV(x + 0.5, y + floating, z + top, wireX0, wireY0);
- t->vertexUV(x + 0.5, y + floating, z + top, wireX0, wireY0);
- t->vertexUV(x + 0.75, y + floating, z + top, wireX1, wireY0);
- t->vertexUV(x + 0.75, y + floating, z + bottom, wireX1, wireY1);
- t->vertexUV(x + 0.5, y + floating, z + bottom, wireX0, wireY1);
- }
- if (e)
- {
- t->vertexUV(x + 0.75, y + floating, z + bottom, wireX0, wireY1);
- t->vertexUV(x + 1, y + floating, z + bottom, wireX1, wireY1);
- t->vertexUV(x + 1, y + floating, z + top, wireX1, wireY0);
- t->vertexUV(x + 0.75, y + floating, z + top, wireX0, wireY0);
+ t->vertexUV(x + 0.5, y + floating, z + top, wireX0, wireY0);
+ t->vertexUV(x + 0.75, y + floating, z + top, wireX1, wireY0);
+ t->vertexUV(x + 0.75, y + floating, z + bottom, wireX1, wireY1);
+ t->vertexUV(x + 0.5, y + floating, z + bottom, wireX0, wireY1);
+ }
+ if (e) {
+ t->vertexUV(x + 0.75, y + floating, z + bottom, wireX0, wireY1);
+ t->vertexUV(x + 1, y + floating, z + bottom, wireX1, wireY1);
+ t->vertexUV(x + 1, y + floating, z + top, wireX1, wireY0);
+ t->vertexUV(x + 0.75, y + floating, z + top, wireX0, wireY0);
- t->vertexUV(x + 0.75, y + floating, z + top, wireX0, wireY0);
- t->vertexUV(x + 1, y + floating, z + top, wireX1, wireY0);
- t->vertexUV(x + 1, y + floating, z + bottom, wireX1, wireY1);
- t->vertexUV(x + 0.75, y + floating, z + bottom, wireX0, wireY1);
- }
-#endif // DISABLE_TESS_FUNCS
+ t->vertexUV(x + 0.75, y + floating, z + top, wireX0, wireY0);
+ t->vertexUV(x + 1, y + floating, z + top, wireX1, wireY0);
+ t->vertexUV(x + 1, y + floating, z + bottom, wireX1, wireY1);
+ t->vertexUV(x + 0.75, y + floating, z + bottom, wireX0, wireY1);
+ }
+#endif // DISABLE_TESS_FUNCS
- return true;
+ return true;
}
+bool TileRenderer_SPU::tesselateFireInWorld(FireTile_SPU* tt, int x, int y,
+ int z) {
+ Tesselator_SPU* t = getTesselator();
+ Icon_SPU* firstTex = tt->getTextureLayer(0);
+ Icon_SPU* secondTex = tt->getTextureLayer(1);
+ Icon_SPU* tex = firstTex;
-bool TileRenderer_SPU::tesselateFireInWorld( FireTile_SPU* tt, int x, int y, int z )
-{
- Tesselator_SPU* t = getTesselator();
+ if (hasFixedTexture()) tex = fixedTexture;
- Icon_SPU *firstTex = tt->getTextureLayer(0);
- Icon_SPU *secondTex = tt->getTextureLayer(1);
- Icon_SPU *tex = firstTex;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->color(1.0f, 1.0f, 1.0f);
+ t->tex2(tt->getLightColor(level, x, y, z));
+ } else {
+ float br = tt->getBrightness(level, x, y, z);
+ t->color(br, br, br);
+ }
+ float u0 = tex->getU0();
+ float v0 = tex->getV0();
+ float u1 = tex->getU1();
+ float v1 = tex->getV1();
+ float h = 1.4f;
- if (hasFixedTexture()) tex = fixedTexture;
+ if (level->isSolidBlockingTile(x, y - 1, z) ||
+ FireTile_SPU::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;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->color( 1.0f, 1.0f, 1.0f );
- t->tex2( tt->getLightColor( level, x, y, z ) );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z );
- t->color( br, br, br );
- }
- float u0 = tex->getU0();
- float v0 = tex->getV0();
- float u1 = tex->getU1();
- float v1 = tex->getV1();
- float h = 1.4f;
+ 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;
- if ( level->isSolidBlockingTile( x, y - 1, z ) || FireTile_SPU::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;
+ 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));
- 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)(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));
- 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 ) );
+ tex = secondTex;
+ u0 = tex->getU0();
+ v0 = tex->getV0();
+ u1 = tex->getU1();
+ v1 = tex->getV1();
- 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 ) );
+ 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));
- tex = secondTex;
- u0 = tex->getU0();
- v0 = tex->getV0();
- u1 = tex->getU1();
- v1 = tex->getV1();
+ 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));
- 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 ) );
+ x0 = x + 0.5f - 0.5f;
+ x1 = x + 0.5f + 0.5f;
+ z0 = z + 0.5f - 0.5f;
+ z1 = z + 0.5f + 0.5f;
- 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.4f;
+ x1_ = x + 0.5f + 0.4f;
+ z0_ = z + 0.5f - 0.4f;
+ z1_ = z + 0.5f + 0.4f;
- x0 = x + 0.5f - 0.5f;
- x1 = x + 0.5f + 0.5f;
- z0 = z + 0.5f - 0.5f;
- z1 = z + 0.5f + 0.5f;
+ 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));
- 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)(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));
- 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 ) );
+ tex = firstTex;
+ u0 = tex->getU0();
+ v0 = tex->getV0();
+ u1 = tex->getU1();
+ v1 = tex->getV1();
- 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 ) );
+ 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));
- tex = firstTex;
- u0 = tex->getU0();
- v0 = tex->getV0();
- u1 = tex->getU1();
- v1 = tex->getV1();
+ 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) {
+ tex = secondTex;
+ u0 = tex->getU0();
+ v0 = tex->getV0();
+ u1 = tex->getU1();
+ v1 = tex->getV1();
+ }
+ if (((x / 2 + y / 2 + z / 2) & 1) == 1) {
+ float tmp = u1;
+ u1 = u0;
+ u0 = tmp;
+ }
+ if (FireTile_SPU::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 + 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 + 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 (FireTile_SPU::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 ), ( 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 )
- {
- tex = secondTex;
- u0 = tex->getU0();
- v0 = tex->getV0();
- u1 = tex->getU1();
- v1 = tex->getV1();
- }
- if ( ( ( x / 2 + y / 2 + z / 2 ) & 1 ) == 1 )
- {
- float tmp = u1;
- u1 = u0;
- u0 = tmp;
- }
- if ( FireTile_SPU::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 + 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 (FireTile_SPU::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 + 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 ( FireTile_SPU::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), (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 (FireTile_SPU::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 + 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 ( FireTile_SPU::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 + 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 (FireTile_SPU::canBurn(level, x, y + 1.0f, z)) {
+ float x0 = x + 0.5f + 0.5f;
+ float x1 = x + 0.5f - 0.5f;
+ float z0 = z + 0.5f + 0.5f;
+ float z1 = z + 0.5f - 0.5f;
- 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 ( FireTile_SPU::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 ) );
+ float x0_ = x + 0.5f - 0.5f;
+ float x1_ = x + 0.5f + 0.5f;
+ float z0_ = z + 0.5f - 0.5f;
+ float z1_ = z + 0.5f + 0.5f;
- 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 ( FireTile_SPU::canBurn( level, x, y + 1.0f, z ) )
- {
- float x0 = x + 0.5f + 0.5f;
- float x1 = x + 0.5f - 0.5f;
- float z0 = z + 0.5f + 0.5f;
- float z1 = z + 0.5f - 0.5f;
+ tex = firstTex;
+ u0 = tex->getU0();
+ v0 = tex->getV0();
+ u1 = tex->getU1();
+ v1 = tex->getV1();
- float x0_ = x + 0.5f - 0.5f;
- float x1_ = x + 0.5f + 0.5f;
- float z0_ = z + 0.5f - 0.5f;
- float z1_ = z + 0.5f + 0.5f;
+ y += 1;
+ h = -0.2f;
- tex = firstTex;
- u0 = tex->getU0();
- v0 = tex->getV0();
- u1 = tex->getU1();
- v1 = tex->getV1();
+ 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));
- y += 1;
- h = -0.2f;
+ tex = secondTex;
+ u0 = tex->getU0();
+ v0 = tex->getV0();
+ u1 = tex->getU1();
+ v1 = tex->getV1();
- 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 ) );
+ 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));
- tex = secondTex;
- u0 = tex->getU0();
- v0 = tex->getV0();
- u1 = tex->getU1();
- v1 = tex->getV1();
+ tex = secondTex;
+ u0 = tex->getU0();
+ v0 = tex->getV0();
+ u1 = tex->getU1();
+ v1 = tex->getV1();
- 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 ) );
-
- tex = secondTex;
- u0 = tex->getU0();
- v0 = tex->getV0();
- u1 = tex->getU1();
- v1 = tex->getV1();
-
- 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;
+ 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_SPU::tesselateDustInWorld( Tile_SPU* tt, int x, int y, int z )
-{
+bool TileRenderer_SPU::tesselateDustInWorld(Tile_SPU* tt, int x, int y, int z) {
#ifdef DISABLE_TESS_FUNCS
- Tesselator_SPU* t = getTesselator();
+ Tesselator_SPU* t = getTesselator();
- int data = level->getData( x, y, z );
- Icon_SPU *crossTexture = RedStoneDustTile_SPU::getTextureByName(RedStoneDustTile_SPU::TEXTURE_CROSS);
- Icon_SPU *lineTexture = RedStoneDustTile_SPU::getTextureByName(RedStoneDustTile_SPU::TEXTURE_LINE);
- Icon_SPU *crossTextureOverlay = RedStoneDustTile_SPU::getTextureByName(RedStoneDustTile_SPU::TEXTURE_CROSS_OVERLAY);
- Icon_SPU *lineTextureOverlay = RedStoneDustTile_SPU::getTextureByName(RedStoneDustTile_SPU::TEXTURE_LINE_OVERLAY);
+ int data = level->getData(x, y, z);
+ Icon_SPU* crossTexture = RedStoneDustTile_SPU::getTextureByName(
+ RedStoneDustTile_SPU::TEXTURE_CROSS);
+ Icon_SPU* lineTexture = RedStoneDustTile_SPU::getTextureByName(
+ RedStoneDustTile_SPU::TEXTURE_LINE);
+ Icon_SPU* crossTextureOverlay = RedStoneDustTile_SPU::getTextureByName(
+ RedStoneDustTile_SPU::TEXTURE_CROSS_OVERLAY);
+ Icon_SPU* lineTextureOverlay = RedStoneDustTile_SPU::getTextureByName(
+ RedStoneDustTile_SPU::TEXTURE_LINE_OVERLAY);
- float br;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y, z ) );
- br = 1;
- }
- else
- {
- br = tt->getBrightness( level, x, y, z );
- }
- float pow = ( data / 15.0f );
- float red = pow * 0.6f + 0.4f;
- if ( data == 0 ) red = 0.3f;
+ float br;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ br = 1;
+ } else {
+ br = tt->getBrightness(level, x, y, z);
+ }
+ float pow = (data / 15.0f);
+ float red = pow * 0.6f + 0.4f;
+ if (data == 0) red = 0.3f;
- float green = pow * pow * 0.7f - 0.5f;
- float blue = pow * pow * 0.6f - 0.7f;
- if ( green < 0 ) green = 0;
- if ( blue < 0 ) blue = 0;
+ float green = pow * pow * 0.7f - 0.5f;
+ float blue = pow * pow * 0.6f - 0.7f;
+ if (green < 0) green = 0;
+ if (blue < 0) blue = 0;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->color( red, green, blue );
- }
- else
- {
- t->color( br * red, br * green, br * blue );
- }
- const float dustOffset = 0.25f / 16.0f;
- const float overlayOffset = 0.25f / 16.0f;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->color(red, green, blue);
+ } else {
+ t->color(br * red, br * green, br * blue);
+ }
+ const float dustOffset = 0.25f / 16.0f;
+ const float overlayOffset = 0.25f / 16.0f;
- bool w = RedStoneDustTile_SPU::shouldConnectTo( level, x - 1, y, z, Direction::WEST )
- || ( !level->isSolidBlockingTile( x - 1, y, z ) && RedStoneDustTile_SPU::shouldConnectTo( level, x - 1, y - 1, z,
- Direction::UNDEFINED ) );
- bool e = RedStoneDustTile_SPU::shouldConnectTo( level, x + 1, y, z, Direction::EAST )
- || ( !level->isSolidBlockingTile( x + 1, y, z ) && RedStoneDustTile_SPU::shouldConnectTo( level, x + 1, y - 1, z,
- Direction::UNDEFINED ) );
- bool n = RedStoneDustTile_SPU::shouldConnectTo( level, x, y, z - 1, Direction::NORTH )
- || ( !level->isSolidBlockingTile( x, y, z - 1 ) && RedStoneDustTile_SPU::shouldConnectTo( level, x, y - 1, z - 1,
- Direction::UNDEFINED ) );
- bool s = RedStoneDustTile_SPU::shouldConnectTo( level, x, y, z + 1, Direction::SOUTH )
- || ( !level->isSolidBlockingTile( x, y, z + 1 ) && RedStoneDustTile_SPU::shouldConnectTo( level, x, y - 1, z + 1,
- Direction::UNDEFINED ) );
- if ( !level->isSolidBlockingTile( x, y + 1, z ) )
- {
- if ( level->isSolidBlockingTile( x - 1, y, z ) && RedStoneDustTile_SPU::shouldConnectTo( level, x - 1, y + 1, z,
- Direction::UNDEFINED ) ) w
- = true;
- if ( level->isSolidBlockingTile( x + 1, y, z ) && RedStoneDustTile_SPU::shouldConnectTo( level, x + 1, y + 1, z,
- Direction::UNDEFINED ) ) e
- = true;
- if ( level->isSolidBlockingTile( x, y, z - 1 ) && RedStoneDustTile_SPU::shouldConnectTo( level, x, y + 1, z - 1,
- Direction::UNDEFINED ) ) n
- = true;
- if ( level->isSolidBlockingTile( x, y, z + 1 ) && RedStoneDustTile_SPU::shouldConnectTo( level, x, y + 1, z + 1,
- Direction::UNDEFINED ) ) s
- = true;
- }
- float x0 = ( float )( x + 0.0f );
- float x1 = ( float )( x + 1.0f );
- float z0 = ( float )( z + 0.0f );
- float z1 = ( float )( z + 1.0f );
+ bool w = RedStoneDustTile_SPU::shouldConnectTo(level, x - 1, y, z,
+ Direction::WEST) ||
+ (!level->isSolidBlockingTile(x - 1, y, z) &&
+ RedStoneDustTile_SPU::shouldConnectTo(level, x - 1, y - 1, z,
+ Direction::UNDEFINED));
+ bool e = RedStoneDustTile_SPU::shouldConnectTo(level, x + 1, y, z,
+ Direction::EAST) ||
+ (!level->isSolidBlockingTile(x + 1, y, z) &&
+ RedStoneDustTile_SPU::shouldConnectTo(level, x + 1, y - 1, z,
+ Direction::UNDEFINED));
+ bool n = RedStoneDustTile_SPU::shouldConnectTo(level, x, y, z - 1,
+ Direction::NORTH) ||
+ (!level->isSolidBlockingTile(x, y, z - 1) &&
+ RedStoneDustTile_SPU::shouldConnectTo(level, x, y - 1, z - 1,
+ Direction::UNDEFINED));
+ bool s = RedStoneDustTile_SPU::shouldConnectTo(level, x, y, z + 1,
+ Direction::SOUTH) ||
+ (!level->isSolidBlockingTile(x, y, z + 1) &&
+ RedStoneDustTile_SPU::shouldConnectTo(level, x, y - 1, z + 1,
+ Direction::UNDEFINED));
+ if (!level->isSolidBlockingTile(x, y + 1, z)) {
+ if (level->isSolidBlockingTile(x - 1, y, z) &&
+ RedStoneDustTile_SPU::shouldConnectTo(level, x - 1, y + 1, z,
+ Direction::UNDEFINED))
+ w = true;
+ if (level->isSolidBlockingTile(x + 1, y, z) &&
+ RedStoneDustTile_SPU::shouldConnectTo(level, x + 1, y + 1, z,
+ Direction::UNDEFINED))
+ e = true;
+ if (level->isSolidBlockingTile(x, y, z - 1) &&
+ RedStoneDustTile_SPU::shouldConnectTo(level, x, y + 1, z - 1,
+ Direction::UNDEFINED))
+ n = true;
+ if (level->isSolidBlockingTile(x, y, z + 1) &&
+ RedStoneDustTile_SPU::shouldConnectTo(level, x, y + 1, z + 1,
+ Direction::UNDEFINED))
+ s = true;
+ }
+ float x0 = (float)(x + 0.0f);
+ float x1 = (float)(x + 1.0f);
+ float z0 = (float)(z + 0.0f);
+ float z1 = (float)(z + 1.0f);
- int pic = 0;
- if ( ( w || e ) && ( !n && !s ) ) pic = 1;
- if ( ( n || s ) && ( !e && !w ) ) pic = 2;
+ int pic = 0;
+ if ((w || e) && (!n && !s)) pic = 1;
+ if ((n || s) && (!e && !w)) pic = 2;
- if ( pic == 0 )
- {
-// if ( e || n || s || w )
- int u0 = 0;
- int v0 = 0;
- int u1 = SharedConstants::WORLD_RESOLUTION;
- int v1 = SharedConstants::WORLD_RESOLUTION;
+ if (pic == 0) {
+ // if ( e || n || s || w )
+ int u0 = 0;
+ int v0 = 0;
+ int u1 = SharedConstants::WORLD_RESOLUTION;
+ int v1 = SharedConstants::WORLD_RESOLUTION;
- int cutDistance = 5;
- if (!w) x0 += cutDistance / (float) SharedConstants::WORLD_RESOLUTION;
- if (!w) u0 += cutDistance;
- if (!e) x1 -= cutDistance / (float) SharedConstants::WORLD_RESOLUTION;
- if (!e) u1 -= cutDistance;
- if (!n) z0 += cutDistance / (float) SharedConstants::WORLD_RESOLUTION;
- if (!n) v0 += cutDistance;
- if (!s) z1 -= cutDistance / (float) SharedConstants::WORLD_RESOLUTION;
- if (!s) v1 -= cutDistance;
- t->vertexUV( ( float )( x1 ), ( float )( y + dustOffset ), ( float )( z1 ), crossTexture->getU(u1), crossTexture->getV(v1) );
- t->vertexUV( ( float )( x1 ), ( float )( y + dustOffset ), ( float )( z0 ), crossTexture->getU(u1), crossTexture->getV(v0) );
- t->vertexUV( ( float )( x0 ), ( float )( y + dustOffset ), ( float )( z0 ), crossTexture->getU(u0), crossTexture->getV(v0) );
- t->vertexUV( ( float )( x0 ), ( float )( y + dustOffset ), ( float )( z1 ), crossTexture->getU(u0), crossTexture->getV(v1) );
+ int cutDistance = 5;
+ if (!w) x0 += cutDistance / (float)SharedConstants::WORLD_RESOLUTION;
+ if (!w) u0 += cutDistance;
+ if (!e) x1 -= cutDistance / (float)SharedConstants::WORLD_RESOLUTION;
+ if (!e) u1 -= cutDistance;
+ if (!n) z0 += cutDistance / (float)SharedConstants::WORLD_RESOLUTION;
+ if (!n) v0 += cutDistance;
+ if (!s) z1 -= cutDistance / (float)SharedConstants::WORLD_RESOLUTION;
+ if (!s) v1 -= cutDistance;
+ t->vertexUV((float)(x1), (float)(y + dustOffset), (float)(z1),
+ crossTexture->getU(u1), crossTexture->getV(v1));
+ t->vertexUV((float)(x1), (float)(y + dustOffset), (float)(z0),
+ crossTexture->getU(u1), crossTexture->getV(v0));
+ t->vertexUV((float)(x0), (float)(y + dustOffset), (float)(z0),
+ crossTexture->getU(u0), crossTexture->getV(v0));
+ t->vertexUV((float)(x0), (float)(y + dustOffset), (float)(z1),
+ crossTexture->getU(u0), crossTexture->getV(v1));
- t->color( br, br, br );
- t->vertexUV( ( float )( x1 ), ( float )( y + dustOffset ), ( float )( z1 ), crossTextureOverlay->getU(u1), crossTextureOverlay->getV(v1) );
- t->vertexUV( ( float )( x1 ), ( float )( y + dustOffset ), ( float )( z0 ), crossTextureOverlay->getU(u1), crossTextureOverlay->getV(v0) );
- t->vertexUV( ( float )( x0 ), ( float )( y + dustOffset ), ( float )( z0 ), crossTextureOverlay->getU(u0), crossTextureOverlay->getV(v0) );
- t->vertexUV( ( float )( x0 ), ( float )( y + dustOffset ), ( float )( z1 ), crossTextureOverlay->getU(u0), crossTextureOverlay->getV(v1) );
- }
- else if ( pic == 1 )
- {
- t->vertexUV( ( float )( x1 ), ( float )( y + dustOffset ), ( float )( z1 ), lineTexture->getU1(), lineTexture->getV1() );
- t->vertexUV( ( float )( x1 ), ( float )( y + dustOffset ), ( float )( z0 ), lineTexture->getU1(), lineTexture->getV0() );
- t->vertexUV( ( float )( x0 ), ( float )( y + dustOffset ), ( float )( z0 ), lineTexture->getU0(), lineTexture->getV0() );
- t->vertexUV( ( float )( x0 ), ( float )( y + dustOffset ), ( float )( z1 ), lineTexture->getU0(), lineTexture->getV1() );
+ t->color(br, br, br);
+ t->vertexUV((float)(x1), (float)(y + dustOffset), (float)(z1),
+ crossTextureOverlay->getU(u1),
+ crossTextureOverlay->getV(v1));
+ t->vertexUV((float)(x1), (float)(y + dustOffset), (float)(z0),
+ crossTextureOverlay->getU(u1),
+ crossTextureOverlay->getV(v0));
+ t->vertexUV((float)(x0), (float)(y + dustOffset), (float)(z0),
+ crossTextureOverlay->getU(u0),
+ crossTextureOverlay->getV(v0));
+ t->vertexUV((float)(x0), (float)(y + dustOffset), (float)(z1),
+ crossTextureOverlay->getU(u0),
+ crossTextureOverlay->getV(v1));
+ } else if (pic == 1) {
+ t->vertexUV((float)(x1), (float)(y + dustOffset), (float)(z1),
+ lineTexture->getU1(), lineTexture->getV1());
+ t->vertexUV((float)(x1), (float)(y + dustOffset), (float)(z0),
+ lineTexture->getU1(), lineTexture->getV0());
+ t->vertexUV((float)(x0), (float)(y + dustOffset), (float)(z0),
+ lineTexture->getU0(), lineTexture->getV0());
+ t->vertexUV((float)(x0), (float)(y + dustOffset), (float)(z1),
+ lineTexture->getU0(), lineTexture->getV1());
- t->color( br, br, br );
- t->vertexUV( ( float )( x1 ), ( float )( y + overlayOffset ), ( float )( z1 ), lineTextureOverlay->getU1(), lineTextureOverlay->getV1() );
- t->vertexUV( ( float )( x1 ), ( float )( y + overlayOffset ), ( float )( z0 ), lineTextureOverlay->getU1(), lineTextureOverlay->getV0() );
- t->vertexUV( ( float )( x0 ), ( float )( y + overlayOffset ), ( float )( z0 ), lineTextureOverlay->getU0(), lineTextureOverlay->getV0() );
- t->vertexUV( ( float )( x0 ), ( float )( y + overlayOffset ), ( float )( z1 ), lineTextureOverlay->getU0(), lineTextureOverlay->getV1() );
- }
- else
- {
- t->vertexUV( ( float )( x1 ), ( float )( y + dustOffset ), ( float )( z1 ), lineTexture->getU1(), lineTexture->getV1() );
- t->vertexUV( ( float )( x1 ), ( float )( y + dustOffset ), ( float )( z0 ), lineTexture->getU0(), lineTexture->getV1() );
- t->vertexUV( ( float )( x0 ), ( float )( y + dustOffset ), ( float )( z0 ), lineTexture->getU0(), lineTexture->getV0() );
- t->vertexUV( ( float )( x0 ), ( float )( y + dustOffset ), ( float )( z1 ), lineTexture->getU1(), lineTexture->getV0() );
+ t->color(br, br, br);
+ t->vertexUV((float)(x1), (float)(y + overlayOffset), (float)(z1),
+ lineTextureOverlay->getU1(), lineTextureOverlay->getV1());
+ t->vertexUV((float)(x1), (float)(y + overlayOffset), (float)(z0),
+ lineTextureOverlay->getU1(), lineTextureOverlay->getV0());
+ t->vertexUV((float)(x0), (float)(y + overlayOffset), (float)(z0),
+ lineTextureOverlay->getU0(), lineTextureOverlay->getV0());
+ t->vertexUV((float)(x0), (float)(y + overlayOffset), (float)(z1),
+ lineTextureOverlay->getU0(), lineTextureOverlay->getV1());
+ } else {
+ t->vertexUV((float)(x1), (float)(y + dustOffset), (float)(z1),
+ lineTexture->getU1(), lineTexture->getV1());
+ t->vertexUV((float)(x1), (float)(y + dustOffset), (float)(z0),
+ lineTexture->getU0(), lineTexture->getV1());
+ t->vertexUV((float)(x0), (float)(y + dustOffset), (float)(z0),
+ lineTexture->getU0(), lineTexture->getV0());
+ t->vertexUV((float)(x0), (float)(y + dustOffset), (float)(z1),
+ lineTexture->getU1(), lineTexture->getV0());
- t->color( br, br, br );
- t->vertexUV( ( float )( x1 ), ( float )( y + overlayOffset ), ( float )( z1 ), lineTextureOverlay->getU1(), lineTextureOverlay->getV1() );
- t->vertexUV( ( float )( x1 ), ( float )( y + overlayOffset ), ( float )( z0 ), lineTextureOverlay->getU0(), lineTextureOverlay->getV1() );
- t->vertexUV( ( float )( x0 ), ( float )( y + overlayOffset ), ( float )( z0 ), lineTextureOverlay->getU0(), lineTextureOverlay->getV0() );
- t->vertexUV( ( float )( x0 ), ( float )( y + overlayOffset ), ( float )( z1 ), lineTextureOverlay->getU1(), lineTextureOverlay->getV0() );
- }
+ t->color(br, br, br);
+ t->vertexUV((float)(x1), (float)(y + overlayOffset), (float)(z1),
+ lineTextureOverlay->getU1(), lineTextureOverlay->getV1());
+ t->vertexUV((float)(x1), (float)(y + overlayOffset), (float)(z0),
+ lineTextureOverlay->getU0(), lineTextureOverlay->getV1());
+ t->vertexUV((float)(x0), (float)(y + overlayOffset), (float)(z0),
+ lineTextureOverlay->getU0(), lineTextureOverlay->getV0());
+ t->vertexUV((float)(x0), (float)(y + overlayOffset), (float)(z1),
+ lineTextureOverlay->getU1(), lineTextureOverlay->getV0());
+ }
- if ( !level->isSolidBlockingTile( x, y + 1, z ) )
- {
- const float yStretch = .35f / 16.0f;
+ if (!level->isSolidBlockingTile(x, y + 1, z)) {
+ const float yStretch = .35f / 16.0f;
- if ( level->isSolidBlockingTile( x - 1, y, z ) && level->getTile( x - 1, y + 1, z ) == Tile_SPU::redStoneDust_Id )
- {
- t->color( br * red, br * green, br * blue );
- t->vertexUV( ( float )( x + dustOffset ), ( float )( y + 1 + yStretch ), ( float )( z + 1 ), lineTexture->getU1(), lineTexture->getV0() );
- t->vertexUV( ( float )( x + dustOffset ), ( float )( y + 0 ), ( float )( z + 1 ), lineTexture->getU0(), lineTexture->getV0() );
- t->vertexUV( ( float )( x + dustOffset ), ( float )( y + 0 ), ( float )( z + 0 ), lineTexture->getU0(), lineTexture->getV1() );
- t->vertexUV( ( float )( x + dustOffset ), ( float )( y + 1 + yStretch ), ( float )( z + 0 ), lineTexture->getU1(), lineTexture->getV1() );
+ if (level->isSolidBlockingTile(x - 1, y, z) &&
+ level->getTile(x - 1, y + 1, z) == Tile_SPU::redStoneDust_Id) {
+ t->color(br * red, br * green, br * blue);
+ t->vertexUV((float)(x + dustOffset), (float)(y + 1 + yStretch),
+ (float)(z + 1), lineTexture->getU1(),
+ lineTexture->getV0());
+ t->vertexUV((float)(x + dustOffset), (float)(y + 0), (float)(z + 1),
+ lineTexture->getU0(), lineTexture->getV0());
+ t->vertexUV((float)(x + dustOffset), (float)(y + 0), (float)(z + 0),
+ lineTexture->getU0(), lineTexture->getV1());
+ t->vertexUV((float)(x + dustOffset), (float)(y + 1 + yStretch),
+ (float)(z + 0), lineTexture->getU1(),
+ lineTexture->getV1());
- t->color( br, br, br );
- t->vertexUV( ( float )( x + overlayOffset ), ( float )( y + 1 + yStretch ), ( float )( z + 1 ), lineTextureOverlay->getU1(), lineTextureOverlay->getV0() );
- t->vertexUV( ( float )( x + overlayOffset ), ( float )( y + 0 ), ( float )( z + 1 ), lineTextureOverlay->getU0(), lineTextureOverlay->getV0() );
- t->vertexUV( ( float )( x + overlayOffset ), ( float )( y + 0 ), ( float )( z + 0 ), lineTextureOverlay->getU0(), lineTextureOverlay->getV1() );
- t->vertexUV( ( float )( x + overlayOffset ), ( float )( y + 1 + yStretch ), ( float )( z + 0 ), lineTextureOverlay->getU1(), lineTextureOverlay->getV1() );
- }
- if ( level->isSolidBlockingTile( x + 1, y, z ) && level->getTile( x + 1, y + 1, z ) == Tile_SPU::redStoneDust_Id )
- {
- t->color( br * red, br * green, br * blue );
- t->vertexUV( ( float )( x + 1 - dustOffset ), ( float )( y + 0 ), ( float )( z + 1 ), lineTexture->getU0(), lineTexture->getV1() );
- t->vertexUV( ( float )( x + 1 - dustOffset ), ( float )( y + 1 + yStretch ), ( float )( z + 1 ), lineTexture->getU1(), lineTexture->getV1() );
- t->vertexUV( ( float )( x + 1 - dustOffset ), ( float )( y + 1 + yStretch ), ( float )( z + 0 ), lineTexture->getU1(), lineTexture->getV0() );
- t->vertexUV( ( float )( x + 1 - dustOffset ), ( float )( y + 0 ), ( float )( z + 0 ), lineTexture->getU0(), lineTexture->getV0() );
+ t->color(br, br, br);
+ t->vertexUV((float)(x + overlayOffset), (float)(y + 1 + yStretch),
+ (float)(z + 1), lineTextureOverlay->getU1(),
+ lineTextureOverlay->getV0());
+ t->vertexUV((float)(x + overlayOffset), (float)(y + 0),
+ (float)(z + 1), lineTextureOverlay->getU0(),
+ lineTextureOverlay->getV0());
+ t->vertexUV((float)(x + overlayOffset), (float)(y + 0),
+ (float)(z + 0), lineTextureOverlay->getU0(),
+ lineTextureOverlay->getV1());
+ t->vertexUV((float)(x + overlayOffset), (float)(y + 1 + yStretch),
+ (float)(z + 0), lineTextureOverlay->getU1(),
+ lineTextureOverlay->getV1());
+ }
+ if (level->isSolidBlockingTile(x + 1, y, z) &&
+ level->getTile(x + 1, y + 1, z) == Tile_SPU::redStoneDust_Id) {
+ t->color(br * red, br * green, br * blue);
+ t->vertexUV((float)(x + 1 - dustOffset), (float)(y + 0),
+ (float)(z + 1), lineTexture->getU0(),
+ lineTexture->getV1());
+ t->vertexUV((float)(x + 1 - dustOffset), (float)(y + 1 + yStretch),
+ (float)(z + 1), lineTexture->getU1(),
+ lineTexture->getV1());
+ t->vertexUV((float)(x + 1 - dustOffset), (float)(y + 1 + yStretch),
+ (float)(z + 0), lineTexture->getU1(),
+ lineTexture->getV0());
+ t->vertexUV((float)(x + 1 - dustOffset), (float)(y + 0),
+ (float)(z + 0), lineTexture->getU0(),
+ lineTexture->getV0());
- t->color( br, br, br );
- t->vertexUV( ( float )( x + 1 - overlayOffset ), ( float )( y + 0 ), ( float )( z + 1 ), lineTextureOverlay->getU0(), lineTextureOverlay->getV1() );
- t->vertexUV( ( float )( x + 1 - overlayOffset ), ( float )( y + 1 + yStretch ), ( float )( z + 1 ), lineTextureOverlay->getU1(), lineTextureOverlay->getV1() );
- t->vertexUV( ( float )( x + 1 - overlayOffset ), ( float )( y + 1 + yStretch ), ( float )( z + 0 ), lineTextureOverlay->getU1(), lineTextureOverlay->getV0() );
- t->vertexUV( ( float )( x + 1 - overlayOffset ), ( float )( y + 0 ), ( float )( z + 0 ), lineTextureOverlay->getU0(), lineTextureOverlay->getV0() );
- }
- if ( level->isSolidBlockingTile( x, y, z - 1 ) && level->getTile( x, y + 1, z - 1 ) == Tile_SPU::redStoneDust_Id )
- {
- t->color( br * red, br * green, br * blue );
- t->vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z + dustOffset ), lineTexture->getU0(), lineTexture->getV1() );
- t->vertexUV( ( float )( x + 1 ), ( float )( y + 1 + yStretch ), ( float )( z + dustOffset ), lineTexture->getU1(), lineTexture->getV1() );
- t->vertexUV( ( float )( x + 0 ), ( float )( y + 1 + yStretch ), ( float )( z + dustOffset ), lineTexture->getU1(), lineTexture->getV0() );
- t->vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z + dustOffset ), lineTexture->getU0(), lineTexture->getV0() );
+ t->color(br, br, br);
+ t->vertexUV((float)(x + 1 - overlayOffset), (float)(y + 0),
+ (float)(z + 1), lineTextureOverlay->getU0(),
+ lineTextureOverlay->getV1());
+ t->vertexUV((float)(x + 1 - overlayOffset),
+ (float)(y + 1 + yStretch), (float)(z + 1),
+ lineTextureOverlay->getU1(),
+ lineTextureOverlay->getV1());
+ t->vertexUV((float)(x + 1 - overlayOffset),
+ (float)(y + 1 + yStretch), (float)(z + 0),
+ lineTextureOverlay->getU1(),
+ lineTextureOverlay->getV0());
+ t->vertexUV((float)(x + 1 - overlayOffset), (float)(y + 0),
+ (float)(z + 0), lineTextureOverlay->getU0(),
+ lineTextureOverlay->getV0());
+ }
+ if (level->isSolidBlockingTile(x, y, z - 1) &&
+ level->getTile(x, y + 1, z - 1) == Tile_SPU::redStoneDust_Id) {
+ t->color(br * red, br * green, br * blue);
+ t->vertexUV((float)(x + 1), (float)(y + 0), (float)(z + dustOffset),
+ lineTexture->getU0(), lineTexture->getV1());
+ t->vertexUV((float)(x + 1), (float)(y + 1 + yStretch),
+ (float)(z + dustOffset), lineTexture->getU1(),
+ lineTexture->getV1());
+ t->vertexUV((float)(x + 0), (float)(y + 1 + yStretch),
+ (float)(z + dustOffset), lineTexture->getU1(),
+ lineTexture->getV0());
+ t->vertexUV((float)(x + 0), (float)(y + 0), (float)(z + dustOffset),
+ lineTexture->getU0(), lineTexture->getV0());
- t->color( br, br, br );
- t->vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z + overlayOffset ), lineTextureOverlay->getU0(), lineTextureOverlay->getV1() );
- t->vertexUV( ( float )( x + 1 ), ( float )( y + 1 + yStretch ), ( float )( z + overlayOffset ), lineTextureOverlay->getU1(), lineTextureOverlay->getV1() );
- t->vertexUV( ( float )( x + 0 ), ( float )( y + 1 + yStretch ), ( float )( z + overlayOffset ), lineTextureOverlay->getU1(), lineTextureOverlay->getV0() );
- t->vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z + overlayOffset ), lineTextureOverlay->getU0(), lineTextureOverlay->getV0() );
- }
- if ( level->isSolidBlockingTile( x, y, z + 1 ) && level->getTile( x, y + 1, z + 1 ) == Tile_SPU::redStoneDust_Id )
- {
- t->color( br * red, br * green, br * blue );
- t->vertexUV( ( float )( x + 1 ), ( float )( y + 1 + yStretch ), ( float )( z + 1 - dustOffset ), lineTexture->getU1(), lineTexture->getV0() );
- t->vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z + 1 - dustOffset ), lineTexture->getU0(), lineTexture->getV0() );
- t->vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z + 1 - dustOffset ), lineTexture->getU0(), lineTexture->getV1() );
- t->vertexUV( ( float )( x + 0 ), ( float )( y + 1 + yStretch ), ( float )( z + 1 - dustOffset ), lineTexture->getU1(), lineTexture->getV1() );
+ t->color(br, br, br);
+ t->vertexUV((float)(x + 1), (float)(y + 0),
+ (float)(z + overlayOffset), lineTextureOverlay->getU0(),
+ lineTextureOverlay->getV1());
+ t->vertexUV((float)(x + 1), (float)(y + 1 + yStretch),
+ (float)(z + overlayOffset), lineTextureOverlay->getU1(),
+ lineTextureOverlay->getV1());
+ t->vertexUV((float)(x + 0), (float)(y + 1 + yStretch),
+ (float)(z + overlayOffset), lineTextureOverlay->getU1(),
+ lineTextureOverlay->getV0());
+ t->vertexUV((float)(x + 0), (float)(y + 0),
+ (float)(z + overlayOffset), lineTextureOverlay->getU0(),
+ lineTextureOverlay->getV0());
+ }
+ if (level->isSolidBlockingTile(x, y, z + 1) &&
+ level->getTile(x, y + 1, z + 1) == Tile_SPU::redStoneDust_Id) {
+ t->color(br * red, br * green, br * blue);
+ t->vertexUV((float)(x + 1), (float)(y + 1 + yStretch),
+ (float)(z + 1 - dustOffset), lineTexture->getU1(),
+ lineTexture->getV0());
+ t->vertexUV((float)(x + 1), (float)(y + 0),
+ (float)(z + 1 - dustOffset), lineTexture->getU0(),
+ lineTexture->getV0());
+ t->vertexUV((float)(x + 0), (float)(y + 0),
+ (float)(z + 1 - dustOffset), lineTexture->getU0(),
+ lineTexture->getV1());
+ t->vertexUV((float)(x + 0), (float)(y + 1 + yStretch),
+ (float)(z + 1 - dustOffset), lineTexture->getU1(),
+ lineTexture->getV1());
- t->color( br, br, br );
- t->vertexUV( ( float )( x + 1 ), ( float )( y + 1 + yStretch ), ( float )( z + 1 - overlayOffset ), lineTextureOverlay->getU1(), lineTextureOverlay->getV0() );
- t->vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z + 1 - overlayOffset ), lineTextureOverlay->getU0(), lineTextureOverlay->getV0() );
- t->vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z + 1 - overlayOffset ), lineTextureOverlay->getU0(), lineTextureOverlay->getV1() );
- t->vertexUV( ( float )( x + 0 ), ( float )( y + 1 + yStretch ), ( float )( z + 1 - overlayOffset ), lineTextureOverlay->getU1(), lineTextureOverlay->getV1() );
- }
- }
-#endif // #ifdef DISABLE_TESS_FUNCS
+ t->color(br, br, br);
+ t->vertexUV((float)(x + 1), (float)(y + 1 + yStretch),
+ (float)(z + 1 - overlayOffset),
+ lineTextureOverlay->getU1(),
+ lineTextureOverlay->getV0());
+ t->vertexUV(
+ (float)(x + 1), (float)(y + 0), (float)(z + 1 - overlayOffset),
+ lineTextureOverlay->getU0(), lineTextureOverlay->getV0());
+ t->vertexUV(
+ (float)(x + 0), (float)(y + 0), (float)(z + 1 - overlayOffset),
+ lineTextureOverlay->getU0(), lineTextureOverlay->getV1());
+ t->vertexUV((float)(x + 0), (float)(y + 1 + yStretch),
+ (float)(z + 1 - overlayOffset),
+ lineTextureOverlay->getU1(),
+ lineTextureOverlay->getV1());
+ }
+ }
+#endif // #ifdef DISABLE_TESS_FUNCS
- return true;
+ return true;
}
-bool TileRenderer_SPU::tesselateRailInWorld( RailTile_SPU* tt, int x, int y, int z )
-{
- Tesselator_SPU* t = getTesselator();
- int data = level->getData( x, y, z );
+bool TileRenderer_SPU::tesselateRailInWorld(RailTile_SPU* tt, int x, int y,
+ int z) {
+ Tesselator_SPU* t = getTesselator();
+ int data = level->getData(x, y, z);
- Icon_SPU *tex = getTexture(tt, 0, data);
- if (hasFixedTexture()) tex = fixedTexture;
+ Icon_SPU* tex = getTexture(tt, 0, data);
+ if (hasFixedTexture()) tex = fixedTexture;
- if ( tt->isUsesDataBit() )
- {
- data &= RailTile_SPU::RAIL_DIRECTION_MASK;
- }
+ if (tt->isUsesDataBit()) {
+ data &= RailTile_SPU::RAIL_DIRECTION_MASK;
+ }
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y, z ) );
- t->color( 1.0f, 1.0f, 1.0f );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z );
- t->color( br, br, br );
- }
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ t->color(1.0f, 1.0f, 1.0f);
+ } else {
+ float br = tt->getBrightness(level, x, y, z);
+ t->color(br, br, br);
+ }
- float u0 = tex->getU0();
- float v0 = tex->getV0();
- float u1 = tex->getU1();
- float v1 = tex->getV1();
+ float u0 = tex->getU0();
+ float v0 = tex->getV0();
+ float u1 = tex->getU1();
+ float v1 = tex->getV1();
- float r = 1 / 16.0f;
+ float r = 1 / 16.0f;
- float x0 = ( float )( x + 1 );
- float x1 = ( float )( x + 1 );
- float x2 = ( float )( x + 0 );
- float x3 = ( float )( x + 0 );
+ float x0 = (float)(x + 1);
+ float x1 = (float)(x + 1);
+ float x2 = (float)(x + 0);
+ float x3 = (float)(x + 0);
- float z0 = ( float )( z + 0 );
- float z1 = ( float )( z + 1 );
- float z2 = ( float )( z + 1 );
- float z3 = ( float )( z + 0 );
+ float z0 = (float)(z + 0);
+ float z1 = (float)(z + 1);
+ float z2 = (float)(z + 1);
+ float z3 = (float)(z + 0);
- float y0 = ( float )( y + r );
- float y1 = ( float )( y + r );
- float y2 = ( float )( y + r );
- float y3 = ( float )( y + r );
+ float y0 = (float)(y + r);
+ float y1 = (float)(y + r);
+ float y2 = (float)(y + r);
+ float y3 = (float)(y + r);
- if ( data == 1 || data == 2 || data == 3 || data == 7 )
- {
- x0 = x3 = ( float )( x + 1 );
- x1 = x2 = ( float )( x + 0 );
- z0 = z1 = ( float )( z + 1 );
- z2 = z3 = ( float )( z + 0 );
- }
- else if ( data == 8 )
- {
- x0 = x1 = ( float )( x + 0 );
- x2 = x3 = ( float )( x + 1 );
- z0 = z3 = ( float )( z + 1 );
- z1 = z2 = ( float )( z + 0 );
- }
- else if ( data == 9 )
- {
- x0 = x3 = ( float )( x + 0 );
- x1 = x2 = ( float )( x + 1 );
- z0 = z1 = ( float )( z + 0 );
- z2 = z3 = ( float )( z + 1 );
- }
+ if (data == 1 || data == 2 || data == 3 || data == 7) {
+ x0 = x3 = (float)(x + 1);
+ x1 = x2 = (float)(x + 0);
+ z0 = z1 = (float)(z + 1);
+ z2 = z3 = (float)(z + 0);
+ } else if (data == 8) {
+ x0 = x1 = (float)(x + 0);
+ x2 = x3 = (float)(x + 1);
+ z0 = z3 = (float)(z + 1);
+ z1 = z2 = (float)(z + 0);
+ } else if (data == 9) {
+ x0 = x3 = (float)(x + 0);
+ x1 = x2 = (float)(x + 1);
+ z0 = z1 = (float)(z + 0);
+ z2 = z3 = (float)(z + 1);
+ }
- if ( data == 2 || data == 4 )
- {
- y0 += 1;
- y3 += 1;
- }
- else if ( data == 3 || data == 5 )
- {
- y1 += 1;
- y2 += 1;
- }
+ if (data == 2 || data == 4) {
+ y0 += 1;
+ y3 += 1;
+ } else if (data == 3 || data == 5) {
+ y1 += 1;
+ y2 += 1;
+ }
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x2 ), ( float )( y2 ), ( float )( z2 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x3 ), ( float )( y3 ), ( float )( z3 ), ( float )( u0 ), ( float )( v0 ) );
+ t->vertexUV((float)(x0), (float)(y0), (float)(z0), (float)(u1),
+ (float)(v0));
+ t->vertexUV((float)(x1), (float)(y1), (float)(z1), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x2), (float)(y2), (float)(z2), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x3), (float)(y3), (float)(z3), (float)(u0),
+ (float)(v0));
- t->vertexUV( ( float )( x3 ), ( float )( y3 ), ( float )( z3 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x2 ), ( float )( y2 ), ( float )( z2 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v0 ) );
-
- return true;
+ t->vertexUV((float)(x3), (float)(y3), (float)(z3), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x2), (float)(y2), (float)(z2), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x1), (float)(y1), (float)(z1), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y0), (float)(z0), (float)(u1),
+ (float)(v0));
+ return true;
}
-bool TileRenderer_SPU::tesselateLadderInWorld( Tile_SPU* tt, int x, int y, int z )
-{
- Tesselator_SPU* t = getTesselator();
+bool TileRenderer_SPU::tesselateLadderInWorld(Tile_SPU* tt, int x, int y,
+ int z) {
+ Tesselator_SPU* t = getTesselator();
- Icon_SPU *tex = getTexture(tt, 0);
+ Icon_SPU* tex = getTexture(tt, 0);
- if (hasFixedTexture()) tex = fixedTexture;
+ if (hasFixedTexture()) tex = fixedTexture;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y, z ) );
- float br = 1;
- t->color( br, br, br );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z );
- t->color( br, br, br );
- }
- float u0 = tex->getU0();
- float v0 = tex->getV0();
- float u1 = tex->getU1();
- float v1 = tex->getV1();
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ float br = 1;
+ t->color(br, br, br);
+ } else {
+ float br = tt->getBrightness(level, x, y, z);
+ t->color(br, br, br);
+ }
+ float u0 = tex->getU0();
+ float v0 = tex->getV0();
+ float u1 = tex->getU1();
+ float v1 = tex->getV1();
- int face = level->getData( x, y, z );
+ int face = level->getData(x, y, z);
- float o = 0 / 16.0f;
- float r = 0.05f;
- if ( face == 5 )
- {
- t->vertexUV( ( float )( x + r ), ( float )( y + 1 + o ), ( float )( z + 1 +
- o ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x + r ), ( float )( y + 0 - o ), ( float )( z + 1 +
- o ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x + r ), ( float )( y + 0 - o ), ( float )( z + 0 -
- o ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x + r ), ( float )( y + 1 + o ), ( float )( z + 0 -
- o ), ( float )( u1 ), ( float )( v0 ) );
- }
- if ( face == 4 )
- {
- t->vertexUV( ( float )( x + 1 - r ), ( float )( y + 0 - o ), ( float )( z + 1 +
- o ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x + 1 - r ), ( float )( y + 1 + o ), ( float )( z + 1 +
- o ), ( float )( u1 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x + 1 - r ), ( float )( y + 1 + o ), ( float )( z + 0 -
- o ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x + 1 - r ), ( float )( y + 0 - o ), ( float )( z + 0 -
- o ), ( float )( u0 ), ( float )( v1 ) );
- }
- if ( face == 3 )
- {
- t->vertexUV( ( float )( x + 1 + o ), ( float )( y + 0 - o ), ( float )( z +
- r ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x + 1 + o ), ( float )( y + 1 + o ), ( float )( z +
- r ), ( float )( u1 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x + 0 - o ), ( float )( y + 1 + o ), ( float )( z +
- r ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x + 0 - o ), ( float )( y + 0 - o ), ( float )( z +
- r ), ( float )( u0 ), ( float )( v1 ) );
- }
- if ( face == 2 )
- {
- t->vertexUV( ( float )( x + 1 + o ), ( float )( y + 1 + o ), ( float )( z + 1 -
- r ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x + 1 + o ), ( float )( y + 0 - o ), ( float )( z + 1 -
- r ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x + 0 - o ), ( float )( y + 0 - o ), ( float )( z + 1 -
- r ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x + 0 - o ), ( float )( y + 1 + o ), ( float )( z + 1 -
- r ), ( float )( u1 ), ( float )( v0 ) );
- }
- return true;
+ float o = 0 / 16.0f;
+ float r = 0.05f;
+ if (face == 5) {
+ t->vertexUV((float)(x + r), (float)(y + 1 + o), (float)(z + 1 + o),
+ (float)(u0), (float)(v0));
+ t->vertexUV((float)(x + r), (float)(y + 0 - o), (float)(z + 1 + o),
+ (float)(u0), (float)(v1));
+ t->vertexUV((float)(x + r), (float)(y + 0 - o), (float)(z + 0 - o),
+ (float)(u1), (float)(v1));
+ t->vertexUV((float)(x + r), (float)(y + 1 + o), (float)(z + 0 - o),
+ (float)(u1), (float)(v0));
+ }
+ if (face == 4) {
+ t->vertexUV((float)(x + 1 - r), (float)(y + 0 - o), (float)(z + 1 + o),
+ (float)(u1), (float)(v1));
+ t->vertexUV((float)(x + 1 - r), (float)(y + 1 + o), (float)(z + 1 + o),
+ (float)(u1), (float)(v0));
+ t->vertexUV((float)(x + 1 - r), (float)(y + 1 + o), (float)(z + 0 - o),
+ (float)(u0), (float)(v0));
+ t->vertexUV((float)(x + 1 - r), (float)(y + 0 - o), (float)(z + 0 - o),
+ (float)(u0), (float)(v1));
+ }
+ if (face == 3) {
+ t->vertexUV((float)(x + 1 + o), (float)(y + 0 - o), (float)(z + r),
+ (float)(u1), (float)(v1));
+ t->vertexUV((float)(x + 1 + o), (float)(y + 1 + o), (float)(z + r),
+ (float)(u1), (float)(v0));
+ t->vertexUV((float)(x + 0 - o), (float)(y + 1 + o), (float)(z + r),
+ (float)(u0), (float)(v0));
+ t->vertexUV((float)(x + 0 - o), (float)(y + 0 - o), (float)(z + r),
+ (float)(u0), (float)(v1));
+ }
+ if (face == 2) {
+ t->vertexUV((float)(x + 1 + o), (float)(y + 1 + o), (float)(z + 1 - r),
+ (float)(u0), (float)(v0));
+ t->vertexUV((float)(x + 1 + o), (float)(y + 0 - o), (float)(z + 1 - r),
+ (float)(u0), (float)(v1));
+ t->vertexUV((float)(x + 0 - o), (float)(y + 0 - o), (float)(z + 1 - r),
+ (float)(u1), (float)(v1));
+ t->vertexUV((float)(x + 0 - o), (float)(y + 1 + o), (float)(z + 1 - r),
+ (float)(u1), (float)(v0));
+ }
+ return true;
}
-bool TileRenderer_SPU::tesselateVineInWorld( Tile_SPU* tt, int x, int y, int z )
-{
- Tesselator_SPU* t = getTesselator();
+bool TileRenderer_SPU::tesselateVineInWorld(Tile_SPU* tt, int x, int y, int z) {
+ Tesselator_SPU* t = getTesselator();
- Icon_SPU *tex = getTexture(tt, 0);
+ Icon_SPU* tex = getTexture(tt, 0);
- if (hasFixedTexture()) tex = fixedTexture;
+ if (hasFixedTexture()) tex = fixedTexture;
+ float br = 1;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ } else {
+ br = tt->getBrightness(level, x, y, z);
+ }
+ {
+ int col = tt->getColor(level, x, y, z);
+ float r = ((col >> 16) & 0xff) / 255.0f;
+ float g = ((col >> 8) & 0xff) / 255.0f;
+ float b = ((col) & 0xff) / 255.0f;
- float br = 1;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y, z ) );
- }
- else
- {
- br = tt->getBrightness( level, x, y, z );
- }
- {
- int col = tt->getColor( level, x, y, z );
- float r = ( ( col >> 16 ) & 0xff ) / 255.0f;
- float g = ( ( col >> 8 ) & 0xff ) / 255.0f;
- float b = ( ( col )& 0xff ) / 255.0f;
+ t->color(br * r, br * g, br * b);
+ }
- t->color( br * r, br * g, br * b );
- }
+ float u0 = tex->getU0();
+ float v0 = tex->getV0();
+ float u1 = tex->getU1();
+ float v1 = tex->getV1();
- float u0 = tex->getU0();
- float v0 = tex->getV0();
- float u1 = tex->getU1();
- float v1 = tex->getV1();
+ float r = 0.05f;
+ int facings = level->getData(x, y, z);
- float r = 0.05f;
- int facings = level->getData( x, y, z );
+ if ((facings & VineTile_SPU::VINE_WEST) != 0) {
+ t->vertexUV(x + r, y + 1, z + 1, u0, v0);
+ t->vertexUV(x + r, y + 0, z + 1, u0, v1);
+ t->vertexUV(x + r, y + 0, z + 0, u1, v1);
+ t->vertexUV(x + r, y + 1, z + 0, u1, v0);
- if ( ( facings & VineTile_SPU::VINE_WEST ) != 0 )
- {
- t->vertexUV( x + r, y + 1, z + 1, u0, v0 );
- t->vertexUV( x + r, y + 0, z + 1, u0, v1 );
- t->vertexUV( x + r, y + 0, z + 0, u1, v1 );
- t->vertexUV( x + r, y + 1, z + 0, u1, v0 );
+ t->vertexUV(x + r, y + 1, z + 0, u1, v0);
+ t->vertexUV(x + r, y + 0, z + 0, u1, v1);
+ t->vertexUV(x + r, y + 0, z + 1, u0, v1);
+ t->vertexUV(x + r, y + 1, z + 1, u0, v0);
+ }
+ if ((facings & VineTile_SPU::VINE_EAST) != 0) {
+ t->vertexUV(x + 1 - r, y + 0, z + 1, u1, v1);
+ t->vertexUV(x + 1 - r, y + 1, z + 1, u1, v0);
+ t->vertexUV(x + 1 - r, y + 1, z + 0, u0, v0);
+ t->vertexUV(x + 1 - r, y + 0, z + 0, u0, v1);
- t->vertexUV( x + r, y + 1, z + 0, u1, v0 );
- t->vertexUV( x + r, y + 0, z + 0, u1, v1 );
- t->vertexUV( x + r, y + 0, z + 1, u0, v1 );
- t->vertexUV( x + r, y + 1, z + 1, u0, v0 );
- }
- if ( ( facings & VineTile_SPU::VINE_EAST ) != 0 )
- {
- t->vertexUV( x + 1 - r, y + 0, z + 1, u1, v1 );
- t->vertexUV( x + 1 - r, y + 1, z + 1, u1, v0 );
- t->vertexUV( x + 1 - r, y + 1, z + 0, u0, v0 );
- t->vertexUV( x + 1 - r, y + 0, z + 0, u0, v1 );
+ t->vertexUV(x + 1 - r, y + 0, z + 0, u0, v1);
+ t->vertexUV(x + 1 - r, y + 1, z + 0, u0, v0);
+ t->vertexUV(x + 1 - r, y + 1, z + 1, u1, v0);
+ t->vertexUV(x + 1 - r, y + 0, z + 1, u1, v1);
+ }
+ if ((facings & VineTile_SPU::VINE_NORTH) != 0) {
+ t->vertexUV(x + 1, y + 0, z + r, u1, v1);
+ t->vertexUV(x + 1, y + 1, z + r, u1, v0);
+ t->vertexUV(x + 0, y + 1, z + r, u0, v0);
+ t->vertexUV(x + 0, y + 0, z + r, u0, v1);
- t->vertexUV( x + 1 - r, y + 0, z + 0, u0, v1 );
- t->vertexUV( x + 1 - r, y + 1, z + 0, u0, v0 );
- t->vertexUV( x + 1 - r, y + 1, z + 1, u1, v0 );
- t->vertexUV( x + 1 - r, y + 0, z + 1, u1, v1 );
- }
- if ( ( facings & VineTile_SPU::VINE_NORTH ) != 0 )
- {
- t->vertexUV( x + 1, y + 0, z + r, u1, v1 );
- t->vertexUV( x + 1, y + 1, z + r, u1, v0 );
- t->vertexUV( x + 0, y + 1, z + r, u0, v0 );
- t->vertexUV( x + 0, y + 0, z + r, u0, v1 );
+ t->vertexUV(x + 0, y + 0, z + r, u0, v1);
+ t->vertexUV(x + 0, y + 1, z + r, u0, v0);
+ t->vertexUV(x + 1, y + 1, z + r, u1, v0);
+ t->vertexUV(x + 1, y + 0, z + r, u1, v1);
+ }
+ if ((facings & VineTile_SPU::VINE_SOUTH) != 0) {
+ t->vertexUV(x + 1, y + 1, z + 1 - r, u0, v0);
+ t->vertexUV(x + 1, y + 0, z + 1 - r, u0, v1);
+ t->vertexUV(x + 0, y + 0, z + 1 - r, u1, v1);
+ t->vertexUV(x + 0, y + 1, z + 1 - r, u1, v0);
- t->vertexUV( x + 0, y + 0, z + r, u0, v1 );
- t->vertexUV( x + 0, y + 1, z + r, u0, v0 );
- t->vertexUV( x + 1, y + 1, z + r, u1, v0 );
- t->vertexUV( x + 1, y + 0, z + r, u1, v1 );
- }
- if ( ( facings & VineTile_SPU::VINE_SOUTH ) != 0 )
- {
- t->vertexUV( x + 1, y + 1, z + 1 - r, u0, v0 );
- t->vertexUV( x + 1, y + 0, z + 1 - r, u0, v1 );
- t->vertexUV( x + 0, y + 0, z + 1 - r, u1, v1 );
- t->vertexUV( x + 0, y + 1, z + 1 - r, u1, v0 );
-
- t->vertexUV( x + 0, y + 1, z + 1 - r, u1, v0 );
- t->vertexUV( x + 0, y + 0, z + 1 - r, u1, v1 );
- t->vertexUV( x + 1, y + 0, z + 1 - r, u0, v1 );
- t->vertexUV( x + 1, y + 1, z + 1 - r, u0, v0 );
- }
- if ( level->isSolidBlockingTile( x, y + 1, z ) )
- {
- t->vertexUV( x + 1, y + 1 - r, z + 0, u0, v0 );
- t->vertexUV( x + 1, y + 1 - r, z + 1, u0, v1 );
- t->vertexUV( x + 0, y + 1 - r, z + 1, u1, v1 );
- t->vertexUV( x + 0, y + 1 - r, z + 0, u1, v0 );
- }
- return true;
+ t->vertexUV(x + 0, y + 1, z + 1 - r, u1, v0);
+ t->vertexUV(x + 0, y + 0, z + 1 - r, u1, v1);
+ t->vertexUV(x + 1, y + 0, z + 1 - r, u0, v1);
+ t->vertexUV(x + 1, y + 1, z + 1 - r, u0, v0);
+ }
+ if (level->isSolidBlockingTile(x, y + 1, z)) {
+ t->vertexUV(x + 1, y + 1 - r, z + 0, u0, v0);
+ t->vertexUV(x + 1, y + 1 - r, z + 1, u0, v1);
+ t->vertexUV(x + 0, y + 1 - r, z + 1, u1, v1);
+ t->vertexUV(x + 0, y + 1 - r, z + 0, u1, v0);
+ }
+ return true;
}
-bool TileRenderer_SPU::tesselateThinFenceInWorld( ThinFenceTile* tt, int x, int y, int z )
-{
+bool TileRenderer_SPU::tesselateThinFenceInWorld(ThinFenceTile* tt, int x,
+ int y, int z) {
#ifdef DISABLE_TESS_FUNCS
- int depth = level->getDepth();
- Tesselator_SPU* t = getTesselator();
+ int depth = level->getDepth();
+ Tesselator_SPU* t = getTesselator();
- float br;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y, z ) );
- br = 1;
- }
- else
- {
- br = tt->getBrightness( level, x, y, z );
- }
- int col = tt->getColor( level, x, y, z );
- float r = ( ( col >> 16 ) & 0xff ) / 255.0f;
- float g = ( ( col >> 8 ) & 0xff ) / 255.0f;
- float b = ( ( col )& 0xff ) / 255.0f;
+ float br;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ br = 1;
+ } else {
+ br = tt->getBrightness(level, x, y, z);
+ }
+ int col = tt->getColor(level, x, y, z);
+ float r = ((col >> 16) & 0xff) / 255.0f;
+ float g = ((col >> 8) & 0xff) / 255.0f;
+ float b = ((col) & 0xff) / 255.0f;
- if ( GameRenderer::anaglyph3d )
- {
- float cr = ( r * 30 + g * 59 + b * 11 ) / 100;
- float cg = ( r * 30 + g * 70 ) / ( 100 );
- float cb = ( r * 30 + b * 70 ) / ( 100 );
+ if (GameRenderer::anaglyph3d) {
+ float cr = (r * 30 + g * 59 + b * 11) / 100;
+ float cg = (r * 30 + g * 70) / (100);
+ float cb = (r * 30 + b * 70) / (100);
- r = cr;
- g = cg;
- b = cb;
- }
- t->color( br * r, br * g, br * b );
+ r = cr;
+ g = cg;
+ b = cb;
+ }
+ t->color(br * r, br * g, br * b);
- Icon_SPU *tex;
- Icon_SPU *edgeTex;
+ Icon_SPU* tex;
+ Icon_SPU* edgeTex;
- if ( hasFixedTexture() )
- {
- tex = fixedTexture;
- edgeTex = fixedTexture;
- }
- else
- {
- int data = level->getData( x, y, z );
- tex = getTexture( tt, 0, data );
- edgeTex = tt->getEdgeTexture();
- }
+ if (hasFixedTexture()) {
+ tex = fixedTexture;
+ edgeTex = fixedTexture;
+ } else {
+ int data = level->getData(x, y, z);
+ tex = getTexture(tt, 0, data);
+ edgeTex = tt->getEdgeTexture();
+ }
- int xt = tex->getX();
- int yt = tex->getY();
- float u0 = tex->getU0();
- float u1 = tex->getU(8);
- float u2 = tex->getU1();
- float v0 = tex->getV0();
- float v2 = tex->getV1();
+ int xt = tex->getX();
+ int yt = tex->getY();
+ float u0 = tex->getU0();
+ float u1 = tex->getU(8);
+ float u2 = tex->getU1();
+ float v0 = tex->getV0();
+ float v2 = tex->getV1();
- int xet = edgeTex->getX();
- int yet = edgeTex->getY();
+ int xet = edgeTex->getX();
+ int yet = edgeTex->getY();
- float iu0 = edgeTex->getU(7);
- float iu1 = edgeTex->getU(9);
- float iv0 = edgeTex->getV0();
- float iv1 = edgeTex->getV(8);
- float iv2 = edgeTex->getV1();
+ float iu0 = edgeTex->getU(7);
+ float iu1 = edgeTex->getU(9);
+ float iv0 = edgeTex->getV0();
+ float iv1 = edgeTex->getV(8);
+ float iv2 = edgeTex->getV1();
- float x0 = (float)x;
- float x1 = x + 0.5f;
- float x2 = x + 1.0f;
- float z0 = (float)z;
- float z1 = z + 0.5f;
- float z2 = z + 1.0f;
- float ix0 = x + 0.5f - 1.0f / 16.0f;
- float ix1 = x + 0.5f + 1.0f / 16.0f;
- float iz0 = z + 0.5f - 1.0f / 16.0f;
- float iz1 = z + 0.5f + 1.0f / 16.0f;
+ float x0 = (float)x;
+ float x1 = x + 0.5f;
+ float x2 = x + 1.0f;
+ float z0 = (float)z;
+ float z1 = z + 0.5f;
+ float z2 = z + 1.0f;
+ float ix0 = x + 0.5f - 1.0f / 16.0f;
+ float ix1 = x + 0.5f + 1.0f / 16.0f;
+ float iz0 = z + 0.5f - 1.0f / 16.0f;
+ float iz1 = z + 0.5f + 1.0f / 16.0f;
- bool n = tt->attachsTo( level->getTile( x, y, z - 1 ) );
- bool s = tt->attachsTo( level->getTile( x, y, z + 1 ) );
- bool w = tt->attachsTo( level->getTile( x - 1, y, z ) );
- bool e = tt->attachsTo( level->getTile( x + 1, y, z ) );
+ bool n = tt->attachsTo(level->getTile(x, y, z - 1));
+ bool s = tt->attachsTo(level->getTile(x, y, z + 1));
+ bool w = tt->attachsTo(level->getTile(x - 1, y, z));
+ bool e = tt->attachsTo(level->getTile(x + 1, y, z));
- bool up = tt->shouldRenderFace( level, x, y + 1, z, Facing::UP );
- bool down = tt->shouldRenderFace( level, x, y - 1, z, Facing::DOWN );
+ bool up = tt->shouldRenderFace(level, x, y + 1, z, Facing::UP);
+ bool down = tt->shouldRenderFace(level, x, y - 1, z, Facing::DOWN);
- const float noZFightingOffset = 0.01f;
- const float noZFightingOffsetB = 0.005;
+ const float noZFightingOffset = 0.01f;
+ const float noZFightingOffsetB = 0.005;
- if ( ( w && e ) || ( !w && !e && !n && !s ) )
- {
- t->vertexUV( x0, y + 1, z1, u0, v0 );
- t->vertexUV( x0, y + 0, z1, u0, v2 );
- t->vertexUV( x2, y + 0, z1, u2, v2 );
- t->vertexUV( x2, y + 1, z1, u2, v0 );
+ if ((w && e) || (!w && !e && !n && !s)) {
+ t->vertexUV(x0, y + 1, z1, u0, v0);
+ t->vertexUV(x0, y + 0, z1, u0, v2);
+ t->vertexUV(x2, y + 0, z1, u2, v2);
+ t->vertexUV(x2, y + 1, z1, u2, v0);
- t->vertexUV( x2, y + 1, z1, u0, v0 );
- t->vertexUV( x2, y + 0, z1, u0, v2 );
- t->vertexUV( x0, y + 0, z1, u2, v2 );
- t->vertexUV( x0, y + 1, z1, u2, v0 );
+ t->vertexUV(x2, y + 1, z1, u0, v0);
+ t->vertexUV(x2, y + 0, z1, u0, v2);
+ t->vertexUV(x0, y + 0, z1, u2, v2);
+ t->vertexUV(x0, y + 1, z1, u2, v0);
- if ( up )
- {
- // small edge texture
- t->vertexUV( x0, y + 1 + noZFightingOffset, iz1, iu1, iv2 );
- t->vertexUV( x2, y + 1 + noZFightingOffset, iz1, iu1, iv0 );
- t->vertexUV( x2, y + 1 + noZFightingOffset, iz0, iu0, iv0 );
- t->vertexUV( x0, y + 1 + noZFightingOffset, iz0, iu0, iv2 );
+ if (up) {
+ // small edge texture
+ t->vertexUV(x0, y + 1 + noZFightingOffset, iz1, iu1, iv2);
+ t->vertexUV(x2, y + 1 + noZFightingOffset, iz1, iu1, iv0);
+ t->vertexUV(x2, y + 1 + noZFightingOffset, iz0, iu0, iv0);
+ t->vertexUV(x0, y + 1 + noZFightingOffset, iz0, iu0, iv2);
- t->vertexUV( x2, y + 1 + noZFightingOffset, iz1, iu1, iv2 );
- t->vertexUV( x0, y + 1 + noZFightingOffset, iz1, iu1, iv0 );
- t->vertexUV( x0, y + 1 + noZFightingOffset, iz0, iu0, iv0 );
- t->vertexUV( x2, y + 1 + noZFightingOffset, iz0, iu0, iv2 );
- }
- else
- {
- if ( y < ( depth - 1 ) && level->isEmptyTile( x - 1, y + 1, z ) )
- {
- t->vertexUV( x0, y + 1 + noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz1, iu1, iv2 );
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz0, iu0, iv2 );
- t->vertexUV( x0, y + 1 + noZFightingOffset, iz0, iu0, iv1 );
+ t->vertexUV(x2, y + 1 + noZFightingOffset, iz1, iu1, iv2);
+ t->vertexUV(x0, y + 1 + noZFightingOffset, iz1, iu1, iv0);
+ t->vertexUV(x0, y + 1 + noZFightingOffset, iz0, iu0, iv0);
+ t->vertexUV(x2, y + 1 + noZFightingOffset, iz0, iu0, iv2);
+ } else {
+ if (y < (depth - 1) && level->isEmptyTile(x - 1, y + 1, z)) {
+ t->vertexUV(x0, y + 1 + noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz1, iu1, iv2);
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz0, iu0, iv2);
+ t->vertexUV(x0, y + 1 + noZFightingOffset, iz0, iu0, iv1);
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x0, y + 1 + noZFightingOffset, iz1, iu1, iv2 );
- t->vertexUV( x0, y + 1 + noZFightingOffset, iz0, iu0, iv2 );
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz0, iu0, iv1 );
- }
- if ( y < ( depth - 1 ) && level->isEmptyTile( x + 1, y + 1, z ) )
- {
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz1, iu1, iv0 );
- t->vertexUV( x2, y + 1 + noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x2, y + 1 + noZFightingOffset, iz0, iu0, iv1 );
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz0, iu0, iv0 );
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x0, y + 1 + noZFightingOffset, iz1, iu1, iv2);
+ t->vertexUV(x0, y + 1 + noZFightingOffset, iz0, iu0, iv2);
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz0, iu0, iv1);
+ }
+ if (y < (depth - 1) && level->isEmptyTile(x + 1, y + 1, z)) {
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz1, iu1, iv0);
+ t->vertexUV(x2, y + 1 + noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x2, y + 1 + noZFightingOffset, iz0, iu0, iv1);
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz0, iu0, iv0);
- t->vertexUV( x2, y + 1 + noZFightingOffset, iz1, iu1, iv0 );
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz0, iu0, iv1 );
- t->vertexUV( x2, y + 1 + noZFightingOffset, iz0, iu0, iv0 );
- }
- }
- if ( down )
- {
- // small edge texture
- t->vertexUV( x0, y - noZFightingOffset, iz1, iu1, iv2 );
- t->vertexUV( x2, y - noZFightingOffset, iz1, iu1, iv0 );
- t->vertexUV( x2, y - noZFightingOffset, iz0, iu0, iv0 );
- t->vertexUV( x0, y - noZFightingOffset, iz0, iu0, iv2 );
+ t->vertexUV(x2, y + 1 + noZFightingOffset, iz1, iu1, iv0);
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz0, iu0, iv1);
+ t->vertexUV(x2, y + 1 + noZFightingOffset, iz0, iu0, iv0);
+ }
+ }
+ if (down) {
+ // small edge texture
+ t->vertexUV(x0, y - noZFightingOffset, iz1, iu1, iv2);
+ t->vertexUV(x2, y - noZFightingOffset, iz1, iu1, iv0);
+ t->vertexUV(x2, y - noZFightingOffset, iz0, iu0, iv0);
+ t->vertexUV(x0, y - noZFightingOffset, iz0, iu0, iv2);
- t->vertexUV( x2, y - noZFightingOffset, iz1, iu1, iv2 );
- t->vertexUV( x0, y - noZFightingOffset, iz1, iu1, iv0 );
- t->vertexUV( x0, y - noZFightingOffset, iz0, iu0, iv0 );
- t->vertexUV( x2, y - noZFightingOffset, iz0, iu0, iv2 );
- }
- else
- {
- if ( y > 1 && level->isEmptyTile( x - 1, y - 1, z ) )
- {
- t->vertexUV( x0, y - noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x1, y - noZFightingOffset, iz1, iu1, iv2 );
- t->vertexUV( x1, y - noZFightingOffset, iz0, iu0, iv2 );
- t->vertexUV( x0, y - noZFightingOffset, iz0, iu0, iv1 );
+ t->vertexUV(x2, y - noZFightingOffset, iz1, iu1, iv2);
+ t->vertexUV(x0, y - noZFightingOffset, iz1, iu1, iv0);
+ t->vertexUV(x0, y - noZFightingOffset, iz0, iu0, iv0);
+ t->vertexUV(x2, y - noZFightingOffset, iz0, iu0, iv2);
+ } else {
+ if (y > 1 && level->isEmptyTile(x - 1, y - 1, z)) {
+ t->vertexUV(x0, y - noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x1, y - noZFightingOffset, iz1, iu1, iv2);
+ t->vertexUV(x1, y - noZFightingOffset, iz0, iu0, iv2);
+ t->vertexUV(x0, y - noZFightingOffset, iz0, iu0, iv1);
- t->vertexUV( x1, y - noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x0, y - noZFightingOffset, iz1, iu1, iv2 );
- t->vertexUV( x0, y - noZFightingOffset, iz0, iu0, iv2 );
- t->vertexUV( x1, y - noZFightingOffset, iz0, iu0, iv1 );
- }
- if ( y > 1 && level->isEmptyTile( x + 1, y - 1, z ) )
- {
- t->vertexUV( x1, y - noZFightingOffset, iz1, iu1, iv0 );
- t->vertexUV( x2, y - noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x2, y - noZFightingOffset, iz0, iu0, iv1 );
- t->vertexUV( x1, y - noZFightingOffset, iz0, iu0, iv0 );
+ t->vertexUV(x1, y - noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x0, y - noZFightingOffset, iz1, iu1, iv2);
+ t->vertexUV(x0, y - noZFightingOffset, iz0, iu0, iv2);
+ t->vertexUV(x1, y - noZFightingOffset, iz0, iu0, iv1);
+ }
+ if (y > 1 && level->isEmptyTile(x + 1, y - 1, z)) {
+ t->vertexUV(x1, y - noZFightingOffset, iz1, iu1, iv0);
+ t->vertexUV(x2, y - noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x2, y - noZFightingOffset, iz0, iu0, iv1);
+ t->vertexUV(x1, y - noZFightingOffset, iz0, iu0, iv0);
- t->vertexUV( x2, y - noZFightingOffset, iz1, iu1, iv0 );
- t->vertexUV( x1, y - noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x1, y - noZFightingOffset, iz0, iu0, iv1 );
- t->vertexUV( x2, y - noZFightingOffset, iz0, iu0, iv0 );
- }
- }
- }
- else if ( w && !e )
- {
- // half-step towards west
- t->vertexUV( x0, y + 1, z1, u0, v0 );
- t->vertexUV( x0, y + 0, z1, u0, v2 );
- t->vertexUV( x1, y + 0, z1, u1, v2 );
- t->vertexUV( x1, y + 1, z1, u1, v0 );
+ t->vertexUV(x2, y - noZFightingOffset, iz1, iu1, iv0);
+ t->vertexUV(x1, y - noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x1, y - noZFightingOffset, iz0, iu0, iv1);
+ t->vertexUV(x2, y - noZFightingOffset, iz0, iu0, iv0);
+ }
+ }
+ } else if (w && !e) {
+ // half-step towards west
+ t->vertexUV(x0, y + 1, z1, u0, v0);
+ t->vertexUV(x0, y + 0, z1, u0, v2);
+ t->vertexUV(x1, y + 0, z1, u1, v2);
+ t->vertexUV(x1, y + 1, z1, u1, v0);
- t->vertexUV( x1, y + 1, z1, u0, v0 );
- t->vertexUV( x1, y + 0, z1, u0, v2 );
- t->vertexUV( x0, y + 0, z1, u1, v2 );
- t->vertexUV( x0, y + 1, z1, u1, v0 );
+ t->vertexUV(x1, y + 1, z1, u0, v0);
+ t->vertexUV(x1, y + 0, z1, u0, v2);
+ t->vertexUV(x0, y + 0, z1, u1, v2);
+ t->vertexUV(x0, y + 1, z1, u1, v0);
- // small edge texture
- if ( !s && !n )
- {
- t->vertexUV( x1, y + 1, iz1, iu0, iv0 );
- t->vertexUV( x1, y + 0, iz1, iu0, iv2 );
- t->vertexUV( x1, y + 0, iz0, iu1, iv2 );
- t->vertexUV( x1, y + 1, iz0, iu1, iv0 );
+ // small edge texture
+ if (!s && !n) {
+ t->vertexUV(x1, y + 1, iz1, iu0, iv0);
+ t->vertexUV(x1, y + 0, iz1, iu0, iv2);
+ t->vertexUV(x1, y + 0, iz0, iu1, iv2);
+ t->vertexUV(x1, y + 1, iz0, iu1, iv0);
- t->vertexUV( x1, y + 1, iz0, iu0, iv0 );
- t->vertexUV( x1, y + 0, iz0, iu0, iv2 );
- t->vertexUV( x1, y + 0, iz1, iu1, iv2 );
- t->vertexUV( x1, y + 1, iz1, iu1, iv0 );
- }
+ t->vertexUV(x1, y + 1, iz0, iu0, iv0);
+ t->vertexUV(x1, y + 0, iz0, iu0, iv2);
+ t->vertexUV(x1, y + 0, iz1, iu1, iv2);
+ t->vertexUV(x1, y + 1, iz1, iu1, iv0);
+ }
- if ( up || ( y < ( depth - 1 ) && level->isEmptyTile( x - 1, y + 1, z ) ) )
- {
- // small edge texture
- t->vertexUV( x0, y + 1 + noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz1, iu1, iv2 );
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz0, iu0, iv2 );
- t->vertexUV( x0, y + 1 + noZFightingOffset, iz0, iu0, iv1 );
+ if (up || (y < (depth - 1) && level->isEmptyTile(x - 1, y + 1, z))) {
+ // small edge texture
+ t->vertexUV(x0, y + 1 + noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz1, iu1, iv2);
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz0, iu0, iv2);
+ t->vertexUV(x0, y + 1 + noZFightingOffset, iz0, iu0, iv1);
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x0, y + 1 + noZFightingOffset, iz1, iu1, iv2 );
- t->vertexUV( x0, y + 1 + noZFightingOffset, iz0, iu0, iv2 );
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz0, iu0, iv1 );
- }
- if ( down || ( y > 1 && level->isEmptyTile( x - 1, y - 1, z ) ) )
- {
- // small edge texture
- t->vertexUV( x0, y - noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x1, y - noZFightingOffset, iz1, iu1, iv2 );
- t->vertexUV( x1, y - noZFightingOffset, iz0, iu0, iv2 );
- t->vertexUV( x0, y - noZFightingOffset, iz0, iu0, iv1 );
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x0, y + 1 + noZFightingOffset, iz1, iu1, iv2);
+ t->vertexUV(x0, y + 1 + noZFightingOffset, iz0, iu0, iv2);
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz0, iu0, iv1);
+ }
+ if (down || (y > 1 && level->isEmptyTile(x - 1, y - 1, z))) {
+ // small edge texture
+ t->vertexUV(x0, y - noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x1, y - noZFightingOffset, iz1, iu1, iv2);
+ t->vertexUV(x1, y - noZFightingOffset, iz0, iu0, iv2);
+ t->vertexUV(x0, y - noZFightingOffset, iz0, iu0, iv1);
- t->vertexUV( x1, y - noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x0, y - noZFightingOffset, iz1, iu1, iv2 );
- t->vertexUV( x0, y - noZFightingOffset, iz0, iu0, iv2 );
- t->vertexUV( x1, y - noZFightingOffset, iz0, iu0, iv1 );
- }
+ t->vertexUV(x1, y - noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x0, y - noZFightingOffset, iz1, iu1, iv2);
+ t->vertexUV(x0, y - noZFightingOffset, iz0, iu0, iv2);
+ t->vertexUV(x1, y - noZFightingOffset, iz0, iu0, iv1);
+ }
- }
- else if ( !w && e )
- {
- // half-step towards east
- t->vertexUV( x1, y + 1, z1, u1, v0 );
- t->vertexUV( x1, y + 0, z1, u1, v2 );
- t->vertexUV( x2, y + 0, z1, u2, v2 );
- t->vertexUV( x2, y + 1, z1, u2, v0 );
+ } else if (!w && e) {
+ // half-step towards east
+ t->vertexUV(x1, y + 1, z1, u1, v0);
+ t->vertexUV(x1, y + 0, z1, u1, v2);
+ t->vertexUV(x2, y + 0, z1, u2, v2);
+ t->vertexUV(x2, y + 1, z1, u2, v0);
- t->vertexUV( x2, y + 1, z1, u1, v0 );
- t->vertexUV( x2, y + 0, z1, u1, v2 );
- t->vertexUV( x1, y + 0, z1, u2, v2 );
- t->vertexUV( x1, y + 1, z1, u2, v0 );
+ t->vertexUV(x2, y + 1, z1, u1, v0);
+ t->vertexUV(x2, y + 0, z1, u1, v2);
+ t->vertexUV(x1, y + 0, z1, u2, v2);
+ t->vertexUV(x1, y + 1, z1, u2, v0);
- // small edge texture
- if ( !s && !n )
- {
- t->vertexUV( x1, y + 1, iz0, iu0, iv0 );
- t->vertexUV( x1, y + 0, iz0, iu0, iv2 );
- t->vertexUV( x1, y + 0, iz1, iu1, iv2 );
- t->vertexUV( x1, y + 1, iz1, iu1, iv0 );
+ // small edge texture
+ if (!s && !n) {
+ t->vertexUV(x1, y + 1, iz0, iu0, iv0);
+ t->vertexUV(x1, y + 0, iz0, iu0, iv2);
+ t->vertexUV(x1, y + 0, iz1, iu1, iv2);
+ t->vertexUV(x1, y + 1, iz1, iu1, iv0);
- t->vertexUV( x1, y + 1, iz1, iu0, iv0 );
- t->vertexUV( x1, y + 0, iz1, iu0, iv2 );
- t->vertexUV( x1, y + 0, iz0, iu1, iv2 );
- t->vertexUV( x1, y + 1, iz0, iu1, iv0 );
- }
+ t->vertexUV(x1, y + 1, iz1, iu0, iv0);
+ t->vertexUV(x1, y + 0, iz1, iu0, iv2);
+ t->vertexUV(x1, y + 0, iz0, iu1, iv2);
+ t->vertexUV(x1, y + 1, iz0, iu1, iv0);
+ }
- if ( up || ( y < ( depth - 1 ) && level->isEmptyTile( x + 1, y + 1, z ) ) )
- {
- // small edge texture
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz1, iu1, iv0 );
- t->vertexUV( x2, y + 1 + noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x2, y + 1 + noZFightingOffset, iz0, iu0, iv1 );
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz0, iu0, iv0 );
+ if (up || (y < (depth - 1) && level->isEmptyTile(x + 1, y + 1, z))) {
+ // small edge texture
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz1, iu1, iv0);
+ t->vertexUV(x2, y + 1 + noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x2, y + 1 + noZFightingOffset, iz0, iu0, iv1);
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz0, iu0, iv0);
- t->vertexUV( x2, y + 1 + noZFightingOffset, iz1, iu1, iv0 );
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x1, y + 1 + noZFightingOffset, iz0, iu0, iv1 );
- t->vertexUV( x2, y + 1 + noZFightingOffset, iz0, iu0, iv0 );
- }
- if ( down || ( y > 1 && level->isEmptyTile( x + 1, y - 1, z ) ) )
- {
- // small edge texture
- t->vertexUV( x1, y - noZFightingOffset, iz1, iu1, iv0 );
- t->vertexUV( x2, y - noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x2, y - noZFightingOffset, iz0, iu0, iv1 );
- t->vertexUV( x1, y - noZFightingOffset, iz0, iu0, iv0 );
+ t->vertexUV(x2, y + 1 + noZFightingOffset, iz1, iu1, iv0);
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x1, y + 1 + noZFightingOffset, iz0, iu0, iv1);
+ t->vertexUV(x2, y + 1 + noZFightingOffset, iz0, iu0, iv0);
+ }
+ if (down || (y > 1 && level->isEmptyTile(x + 1, y - 1, z))) {
+ // small edge texture
+ t->vertexUV(x1, y - noZFightingOffset, iz1, iu1, iv0);
+ t->vertexUV(x2, y - noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x2, y - noZFightingOffset, iz0, iu0, iv1);
+ t->vertexUV(x1, y - noZFightingOffset, iz0, iu0, iv0);
- t->vertexUV( x2, y - noZFightingOffset, iz1, iu1, iv0 );
- t->vertexUV( x1, y - noZFightingOffset, iz1, iu1, iv1 );
- t->vertexUV( x1, y - noZFightingOffset, iz0, iu0, iv1 );
- t->vertexUV( x2, y - noZFightingOffset, iz0, iu0, iv0 );
- }
+ t->vertexUV(x2, y - noZFightingOffset, iz1, iu1, iv0);
+ t->vertexUV(x1, y - noZFightingOffset, iz1, iu1, iv1);
+ t->vertexUV(x1, y - noZFightingOffset, iz0, iu0, iv1);
+ t->vertexUV(x2, y - noZFightingOffset, iz0, iu0, iv0);
+ }
+ }
- }
+ if ((n && s) || (!w && !e && !n && !s)) {
+ // straight north-south
+ t->vertexUV(x1, y + 1, z2, u0, v0);
+ t->vertexUV(x1, y + 0, z2, u0, v2);
+ t->vertexUV(x1, y + 0, z0, u2, v2);
+ t->vertexUV(x1, y + 1, z0, u2, v0);
- if ( ( n && s ) || ( !w && !e && !n && !s ) )
- {
- // straight north-south
- t->vertexUV( x1, y + 1, z2, u0, v0 );
- t->vertexUV( x1, y + 0, z2, u0, v2 );
- t->vertexUV( x1, y + 0, z0, u2, v2 );
- t->vertexUV( x1, y + 1, z0, u2, v0 );
+ t->vertexUV(x1, y + 1, z0, u0, v0);
+ t->vertexUV(x1, y + 0, z0, u0, v2);
+ t->vertexUV(x1, y + 0, z2, u2, v2);
+ t->vertexUV(x1, y + 1, z2, u2, v0);
- t->vertexUV( x1, y + 1, z0, u0, v0 );
- t->vertexUV( x1, y + 0, z0, u0, v2 );
- t->vertexUV( x1, y + 0, z2, u2, v2 );
- t->vertexUV( x1, y + 1, z2, u2, v0 );
+ if (up) {
+ // small edge texture
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z2, iu1, iv2);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z0, iu1, iv0);
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z0, iu0, iv0);
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z2, iu0, iv2);
- if ( up )
- {
- // small edge texture
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z2, iu1, iv2 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z0, iu1, iv0 );
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z0, iu0, iv0 );
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z2, iu0, iv2 );
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z0, iu1, iv2);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z2, iu1, iv0);
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z2, iu0, iv0);
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z0, iu0, iv2);
+ } else {
+ if (y < (depth - 1) && level->isEmptyTile(x, y + 1, z - 1)) {
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z0, iu1, iv0);
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z1, iu1, iv1);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z1, iu0, iv1);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z0, iu0, iv0);
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z0, iu1, iv2 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z2, iu1, iv0 );
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z2, iu0, iv0 );
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z0, iu0, iv2 );
- }
- else
- {
- if ( y < ( depth - 1 ) && level->isEmptyTile( x, y + 1, z - 1 ) )
- {
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z0, iu1, iv0 );
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z1, iu1, iv1 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z1, iu0, iv1 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z0, iu0, iv0 );
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z1, iu1, iv0);
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z0, iu1, iv1);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z0, iu0, iv1);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z1, iu0, iv0);
+ }
+ if (y < (depth - 1) && level->isEmptyTile(x, y + 1, z + 1)) {
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z1, iu0, iv1);
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z2, iu0, iv2);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z2, iu1, iv2);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z1, iu1, iv1);
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z1, iu1, iv0 );
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z0, iu1, iv1 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z0, iu0, iv1 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z1, iu0, iv0 );
- }
- if ( y < ( depth - 1 ) && level->isEmptyTile( x, y + 1, z + 1 ) )
- {
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z1, iu0, iv1 );
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z2, iu0, iv2 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z2, iu1, iv2 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z1, iu1, iv1 );
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z2, iu0, iv1);
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z1, iu0, iv2);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z1, iu1, iv2);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z2, iu1, iv1);
+ }
+ }
+ if (down) {
+ // small edge texture
+ t->vertexUV(ix1, y - noZFightingOffset, z2, iu1, iv2);
+ t->vertexUV(ix1, y - noZFightingOffset, z0, iu1, iv0);
+ t->vertexUV(ix0, y - noZFightingOffset, z0, iu0, iv0);
+ t->vertexUV(ix0, y - noZFightingOffset, z2, iu0, iv2);
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z2, iu0, iv1 );
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z1, iu0, iv2 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z1, iu1, iv2 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z2, iu1, iv1 );
- }
- }
- if ( down )
- {
- // small edge texture
- t->vertexUV( ix1, y - noZFightingOffset, z2, iu1, iv2 );
- t->vertexUV( ix1, y - noZFightingOffset, z0, iu1, iv0 );
- t->vertexUV( ix0, y - noZFightingOffset, z0, iu0, iv0 );
- t->vertexUV( ix0, y - noZFightingOffset, z2, iu0, iv2 );
+ t->vertexUV(ix1, y - noZFightingOffset, z0, iu1, iv2);
+ t->vertexUV(ix1, y - noZFightingOffset, z2, iu1, iv0);
+ t->vertexUV(ix0, y - noZFightingOffset, z2, iu0, iv0);
+ t->vertexUV(ix0, y - noZFightingOffset, z0, iu0, iv2);
+ } else {
+ if (y > 1 && level->isEmptyTile(x, y - 1, z - 1)) {
+ // north half-step
+ t->vertexUV(ix0, y - noZFightingOffset, z0, iu1, iv0);
+ t->vertexUV(ix0, y - noZFightingOffset, z1, iu1, iv1);
+ t->vertexUV(ix1, y - noZFightingOffset, z1, iu0, iv1);
+ t->vertexUV(ix1, y - noZFightingOffset, z0, iu0, iv0);
- t->vertexUV( ix1, y - noZFightingOffset, z0, iu1, iv2 );
- t->vertexUV( ix1, y - noZFightingOffset, z2, iu1, iv0 );
- t->vertexUV( ix0, y - noZFightingOffset, z2, iu0, iv0 );
- t->vertexUV( ix0, y - noZFightingOffset, z0, iu0, iv2 );
- }
- else
- {
- if ( y > 1 && level->isEmptyTile( x, y - 1, z - 1 ) )
- {
- // north half-step
- t->vertexUV( ix0, y - noZFightingOffset, z0, iu1, iv0 );
- t->vertexUV( ix0, y - noZFightingOffset, z1, iu1, iv1 );
- t->vertexUV( ix1, y - noZFightingOffset, z1, iu0, iv1 );
- t->vertexUV( ix1, y - noZFightingOffset, z0, iu0, iv0 );
+ t->vertexUV(ix0, y - noZFightingOffset, z1, iu1, iv0);
+ t->vertexUV(ix0, y - noZFightingOffset, z0, iu1, iv1);
+ t->vertexUV(ix1, y - noZFightingOffset, z0, iu0, iv1);
+ t->vertexUV(ix1, y - noZFightingOffset, z1, iu0, iv0);
+ }
+ if (y > 1 && level->isEmptyTile(x, y - 1, z + 1)) {
+ // south half-step
+ t->vertexUV(ix0, y - noZFightingOffset, z1, iu0, iv1);
+ t->vertexUV(ix0, y - noZFightingOffset, z2, iu0, iv2);
+ t->vertexUV(ix1, y - noZFightingOffset, z2, iu1, iv2);
+ t->vertexUV(ix1, y - noZFightingOffset, z1, iu1, iv1);
- t->vertexUV( ix0, y - noZFightingOffset, z1, iu1, iv0 );
- t->vertexUV( ix0, y - noZFightingOffset, z0, iu1, iv1 );
- t->vertexUV( ix1, y - noZFightingOffset, z0, iu0, iv1 );
- t->vertexUV( ix1, y - noZFightingOffset, z1, iu0, iv0 );
- }
- if ( y > 1 && level->isEmptyTile( x, y - 1, z + 1 ) )
- {
- // south half-step
- t->vertexUV( ix0, y - noZFightingOffset, z1, iu0, iv1 );
- t->vertexUV( ix0, y - noZFightingOffset, z2, iu0, iv2 );
- t->vertexUV( ix1, y - noZFightingOffset, z2, iu1, iv2 );
- t->vertexUV( ix1, y - noZFightingOffset, z1, iu1, iv1 );
+ t->vertexUV(ix0, y - noZFightingOffset, z2, iu0, iv1);
+ t->vertexUV(ix0, y - noZFightingOffset, z1, iu0, iv2);
+ t->vertexUV(ix1, y - noZFightingOffset, z1, iu1, iv2);
+ t->vertexUV(ix1, y - noZFightingOffset, z2, iu1, iv1);
+ }
+ }
- t->vertexUV( ix0, y - noZFightingOffset, z2, iu0, iv1 );
- t->vertexUV( ix0, y - noZFightingOffset, z1, iu0, iv2 );
- t->vertexUV( ix1, y - noZFightingOffset, z1, iu1, iv2 );
- t->vertexUV( ix1, y - noZFightingOffset, z2, iu1, iv1 );
- }
- }
+ } else if (n && !s) {
+ // half-step towards north
+ t->vertexUV(x1, y + 1, z0, u0, v0);
+ t->vertexUV(x1, y + 0, z0, u0, v2);
+ t->vertexUV(x1, y + 0, z1, u1, v2);
+ t->vertexUV(x1, y + 1, z1, u1, v0);
- }
- else if ( n && !s )
- {
- // half-step towards north
- t->vertexUV( x1, y + 1, z0, u0, v0 );
- t->vertexUV( x1, y + 0, z0, u0, v2 );
- t->vertexUV( x1, y + 0, z1, u1, v2 );
- t->vertexUV( x1, y + 1, z1, u1, v0 );
+ t->vertexUV(x1, y + 1, z1, u0, v0);
+ t->vertexUV(x1, y + 0, z1, u0, v2);
+ t->vertexUV(x1, y + 0, z0, u1, v2);
+ t->vertexUV(x1, y + 1, z0, u1, v0);
- t->vertexUV( x1, y + 1, z1, u0, v0 );
- t->vertexUV( x1, y + 0, z1, u0, v2 );
- t->vertexUV( x1, y + 0, z0, u1, v2 );
- t->vertexUV( x1, y + 1, z0, u1, v0 );
+ // small edge texture
+ if (!e && !w) {
+ t->vertexUV(ix0, y + 1, z1, iu0, iv0);
+ t->vertexUV(ix0, y + 0, z1, iu0, iv2);
+ t->vertexUV(ix1, y + 0, z1, iu1, iv2);
+ t->vertexUV(ix1, y + 1, z1, iu1, iv0);
- // small edge texture
- if ( !e && !w )
- {
- t->vertexUV( ix0, y + 1, z1, iu0, iv0 );
- t->vertexUV( ix0, y + 0, z1, iu0, iv2 );
- t->vertexUV( ix1, y + 0, z1, iu1, iv2 );
- t->vertexUV( ix1, y + 1, z1, iu1, iv0 );
+ t->vertexUV(ix1, y + 1, z1, iu0, iv0);
+ t->vertexUV(ix1, y + 0, z1, iu0, iv2);
+ t->vertexUV(ix0, y + 0, z1, iu1, iv2);
+ t->vertexUV(ix0, y + 1, z1, iu1, iv0);
+ }
- t->vertexUV( ix1, y + 1, z1, iu0, iv0 );
- t->vertexUV( ix1, y + 0, z1, iu0, iv2 );
- t->vertexUV( ix0, y + 0, z1, iu1, iv2 );
- t->vertexUV( ix0, y + 1, z1, iu1, iv0 );
- }
+ if (up || (y < (depth - 1) && level->isEmptyTile(x, y + 1, z - 1))) {
+ // small edge texture
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z0, iu1, iv0);
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z1, iu1, iv1);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z1, iu0, iv1);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z0, iu0, iv0);
- if ( up || ( y < ( depth - 1 ) && level->isEmptyTile( x, y + 1, z - 1 ) ) )
- {
- // small edge texture
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z0, iu1, iv0 );
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z1, iu1, iv1 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z1, iu0, iv1 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z0, iu0, iv0 );
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z1, iu1, iv0);
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z0, iu1, iv1);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z0, iu0, iv1);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z1, iu0, iv0);
+ }
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z1, iu1, iv0 );
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z0, iu1, iv1 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z0, iu0, iv1 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z1, iu0, iv0 );
- }
+ if (down || (y > 1 && level->isEmptyTile(x, y - 1, z - 1))) {
+ // small edge texture
+ t->vertexUV(ix0, y - noZFightingOffset, z0, iu1, iv0);
+ t->vertexUV(ix0, y - noZFightingOffset, z1, iu1, iv1);
+ t->vertexUV(ix1, y - noZFightingOffset, z1, iu0, iv1);
+ t->vertexUV(ix1, y - noZFightingOffset, z0, iu0, iv0);
- if ( down || ( y > 1 && level->isEmptyTile( x, y - 1, z - 1 ) ) )
- {
- // small edge texture
- t->vertexUV( ix0, y - noZFightingOffset, z0, iu1, iv0 );
- t->vertexUV( ix0, y - noZFightingOffset, z1, iu1, iv1 );
- t->vertexUV( ix1, y - noZFightingOffset, z1, iu0, iv1 );
- t->vertexUV( ix1, y - noZFightingOffset, z0, iu0, iv0 );
+ t->vertexUV(ix0, y - noZFightingOffset, z1, iu1, iv0);
+ t->vertexUV(ix0, y - noZFightingOffset, z0, iu1, iv1);
+ t->vertexUV(ix1, y - noZFightingOffset, z0, iu0, iv1);
+ t->vertexUV(ix1, y - noZFightingOffset, z1, iu0, iv0);
+ }
- t->vertexUV( ix0, y - noZFightingOffset, z1, iu1, iv0 );
- t->vertexUV( ix0, y - noZFightingOffset, z0, iu1, iv1 );
- t->vertexUV( ix1, y - noZFightingOffset, z0, iu0, iv1 );
- t->vertexUV( ix1, y - noZFightingOffset, z1, iu0, iv0 );
- }
+ } else if (!n && s) {
+ // half-step towards south
+ t->vertexUV(x1, y + 1, z1, u1, v0);
+ t->vertexUV(x1, y + 0, z1, u1, v2);
+ t->vertexUV(x1, y + 0, z2, u2, v2);
+ t->vertexUV(x1, y + 1, z2, u2, v0);
- }
- else if ( !n && s )
- {
- // half-step towards south
- t->vertexUV( x1, y + 1, z1, u1, v0 );
- t->vertexUV( x1, y + 0, z1, u1, v2 );
- t->vertexUV( x1, y + 0, z2, u2, v2 );
- t->vertexUV( x1, y + 1, z2, u2, v0 );
+ t->vertexUV(x1, y + 1, z2, u1, v0);
+ t->vertexUV(x1, y + 0, z2, u1, v2);
+ t->vertexUV(x1, y + 0, z1, u2, v2);
+ t->vertexUV(x1, y + 1, z1, u2, v0);
- t->vertexUV( x1, y + 1, z2, u1, v0 );
- t->vertexUV( x1, y + 0, z2, u1, v2 );
- t->vertexUV( x1, y + 0, z1, u2, v2 );
- t->vertexUV( x1, y + 1, z1, u2, v0 );
+ // small edge texture
+ if (!e && !w) {
+ t->vertexUV(ix1, y + 1, z1, iu0, iv0);
+ t->vertexUV(ix1, y + 0, z1, iu0, iv2);
+ t->vertexUV(ix0, y + 0, z1, iu1, iv2);
+ t->vertexUV(ix0, y + 1, z1, iu1, iv0);
- // small edge texture
- if ( !e && !w )
- {
- t->vertexUV( ix1, y + 1, z1, iu0, iv0 );
- t->vertexUV( ix1, y + 0, z1, iu0, iv2 );
- t->vertexUV( ix0, y + 0, z1, iu1, iv2 );
- t->vertexUV( ix0, y + 1, z1, iu1, iv0 );
+ t->vertexUV(ix0, y + 1, z1, iu0, iv0);
+ t->vertexUV(ix0, y + 0, z1, iu0, iv2);
+ t->vertexUV(ix1, y + 0, z1, iu1, iv2);
+ t->vertexUV(ix1, y + 1, z1, iu1, iv0);
+ }
- t->vertexUV( ix0, y + 1, z1, iu0, iv0 );
- t->vertexUV( ix0, y + 0, z1, iu0, iv2 );
- t->vertexUV( ix1, y + 0, z1, iu1, iv2 );
- t->vertexUV( ix1, y + 1, z1, iu1, iv0 );
- }
+ if (up || (y < (depth - 1) && level->isEmptyTile(x, y + 1, z + 1))) {
+ // small edge texture
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z1, iu0, iv1);
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z2, iu0, iv2);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z2, iu1, iv2);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z1, iu1, iv1);
- if ( up || ( y < ( depth - 1 ) && level->isEmptyTile( x, y + 1, z + 1 ) ) )
- {
- // small edge texture
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z1, iu0, iv1 );
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z2, iu0, iv2 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z2, iu1, iv2 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z1, iu1, iv1 );
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z2, iu0, iv1);
+ t->vertexUV(ix0, y + 1 + noZFightingOffset, z1, iu0, iv2);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z1, iu1, iv2);
+ t->vertexUV(ix1, y + 1 + noZFightingOffset, z2, iu1, iv1);
+ }
+ if (down || (y > 1 && level->isEmptyTile(x, y - 1, z + 1))) {
+ // small edge texture
+ t->vertexUV(ix0, y - noZFightingOffset, z1, iu0, iv1);
+ t->vertexUV(ix0, y - noZFightingOffset, z2, iu0, iv2);
+ t->vertexUV(ix1, y - noZFightingOffset, z2, iu1, iv2);
+ t->vertexUV(ix1, y - noZFightingOffset, z1, iu1, iv1);
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z2, iu0, iv1 );
- t->vertexUV( ix0, y + 1 + noZFightingOffset, z1, iu0, iv2 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z1, iu1, iv2 );
- t->vertexUV( ix1, y + 1 + noZFightingOffset, z2, iu1, iv1 );
- }
- if ( down || ( y > 1 && level->isEmptyTile( x, y - 1, z + 1 ) ) )
- {
- // small edge texture
- t->vertexUV( ix0, y - noZFightingOffset, z1, iu0, iv1 );
- t->vertexUV( ix0, y - noZFightingOffset, z2, iu0, iv2 );
- t->vertexUV( ix1, y - noZFightingOffset, z2, iu1, iv2 );
- t->vertexUV( ix1, y - noZFightingOffset, z1, iu1, iv1 );
+ t->vertexUV(ix0, y - noZFightingOffset, z2, iu0, iv1);
+ t->vertexUV(ix0, y - noZFightingOffset, z1, iu0, iv2);
+ t->vertexUV(ix1, y - noZFightingOffset, z1, iu1, iv2);
+ t->vertexUV(ix1, y - noZFightingOffset, z2, iu1, iv1);
+ }
+ }
+#endif // DISABLE_TESS_FUNCS
- t->vertexUV( ix0, y - noZFightingOffset, z2, iu0, iv1 );
- t->vertexUV( ix0, y - noZFightingOffset, z1, iu0, iv2 );
- t->vertexUV( ix1, y - noZFightingOffset, z1, iu1, iv2 );
- t->vertexUV( ix1, y - noZFightingOffset, z2, iu1, iv1 );
- }
-
- }
-#endif // DISABLE_TESS_FUNCS
-
- return true;
+ return true;
}
-bool TileRenderer_SPU::tesselateCrossInWorld( Tile_SPU* tt, int x, int y, int z )
-{
- Tesselator_SPU* t = getTesselator();
+bool TileRenderer_SPU::tesselateCrossInWorld(Tile_SPU* tt, int x, int y,
+ int z) {
+ Tesselator_SPU* t = getTesselator();
- float br;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y, z ) );
- br = 1;
- }
- else
- {
- br = tt->getBrightness( level, x, y, z );
- }
+ float br;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ br = 1;
+ } else {
+ br = tt->getBrightness(level, x, y, z);
+ }
- int col = tt->getColor( level, x, y, z );
- float r = ( ( col >> 16 ) & 0xff ) / 255.0f;
- float g = ( ( col >> 8 ) & 0xff ) / 255.0f;
- float b = ( ( col )& 0xff ) / 255.0f;
+ int col = tt->getColor(level, x, y, z);
+ float r = ((col >> 16) & 0xff) / 255.0f;
+ float g = ((col >> 8) & 0xff) / 255.0f;
+ float b = ((col) & 0xff) / 255.0f;
- if ( isAnaglyph3d() )
- {
- float cr = ( r * 30 + g * 59 + b * 11 ) / 100;
- float cg = ( r * 30 + g * 70 ) / ( 100 );
- float cb = ( r * 30 + b * 70 ) / ( 100 );
+ if (isAnaglyph3d()) {
+ float cr = (r * 30 + g * 59 + b * 11) / 100;
+ float cg = (r * 30 + g * 70) / (100);
+ float cb = (r * 30 + b * 70) / (100);
- r = cr;
- g = cg;
- b = cb;
- }
- t->color( br * r, br * g, br * b );
+ r = cr;
+ g = cg;
+ b = cb;
+ }
+ t->color(br * r, br * g, br * b);
- float xt = (float)x;
- float yt = (float)y;
- float zt = (float)z;
+ float xt = (float)x;
+ float yt = (float)y;
+ float zt = (float)z;
- if (tt->id == Tile_SPU::tallgrass_Id)
- {
- int64_t seed = (x * 3129871) ^ (z * 116129781l) ^ (y);
- seed = seed * seed * 42317861 + seed * 11;
-
- xt += ((((seed >> 16) & 0xf) / 15.0f) - 0.5f) * 0.5f;
- yt += ((((seed >> 20) & 0xf) / 15.0f) - 1.0f) * 0.2f;
- zt += ((((seed >> 24) & 0xf) / 15.0f) - 0.5f) * 0.5f;
- }
+ if (tt->id == Tile_SPU::tallgrass_Id) {
+ int64_t seed = (x * 3129871) ^ (z * 116129781l) ^ (y);
+ seed = seed * seed * 42317861 + seed * 11;
- tesselateCrossTexture( tt, level->getData( x, y, z ), xt, yt, zt, 1 );
- return true;
+ xt += ((((seed >> 16) & 0xf) / 15.0f) - 0.5f) * 0.5f;
+ yt += ((((seed >> 20) & 0xf) / 15.0f) - 1.0f) * 0.2f;
+ zt += ((((seed >> 24) & 0xf) / 15.0f) - 0.5f) * 0.5f;
+ }
+
+ tesselateCrossTexture(tt, level->getData(x, y, z), xt, yt, zt, 1);
+ return true;
}
-bool TileRenderer_SPU::tesselateStemInWorld( Tile_SPU* _tt, int x, int y, int z )
-{
- StemTile_SPU* tt = ( StemTile_SPU* )_tt;
- Tesselator_SPU* t = getTesselator();
+bool TileRenderer_SPU::tesselateStemInWorld(Tile_SPU* _tt, int x, int y,
+ int z) {
+ StemTile_SPU* tt = (StemTile_SPU*)_tt;
+ Tesselator_SPU* t = getTesselator();
- float br;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y, z ) );
- br = 1;
- }
- else
- {
- br = tt->getBrightness( level, x, y, z );
- }
- int col = tt->getColor( level, x, y, z );
- float r = ( ( col >> 16 ) & 0xff ) / 255.0f;
- float g = ( ( col >> 8 ) & 0xff ) / 255.0f;
- float b = ( ( col )& 0xff ) / 255.0f;
+ float br;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ br = 1;
+ } else {
+ br = tt->getBrightness(level, x, y, z);
+ }
+ int col = tt->getColor(level, x, y, z);
+ float r = ((col >> 16) & 0xff) / 255.0f;
+ float g = ((col >> 8) & 0xff) / 255.0f;
+ float b = ((col) & 0xff) / 255.0f;
- if ( isAnaglyph3d())
- {
- float cr = ( r * 30.0f + g * 59.0f + b * 11.0f ) / 100.0f;
- float cg = ( r * 30.0f + g * 70.0f ) / ( 100.0f );
- float cb = ( r * 30.0f + b * 70.0f ) / ( 100.0f );
+ if (isAnaglyph3d()) {
+ float cr = (r * 30.0f + g * 59.0f + b * 11.0f) / 100.0f;
+ float cg = (r * 30.0f + g * 70.0f) / (100.0f);
+ float cb = (r * 30.0f + b * 70.0f) / (100.0f);
- r = cr;
- g = cg;
- b = cb;
- }
- t->color( br * r, br * g, br * b );
+ r = cr;
+ g = cg;
+ b = cb;
+ }
+ t->color(br * r, br * g, br * b);
- tt->updateShape( level, x, y, z );
- int dir = tt->getConnectDir( level, x, y, z );
- if ( dir < 0 )
- {
- tesselateStemTexture( tt, level->getData( x, y, z ), tileShapeY1, x, y - 1 / 16.0f, z );
- }
- else
- {
- tesselateStemTexture( tt, level->getData( x, y, z ), 0.5f, x, y - 1 / 16.0f, z );
- tesselateStemDirTexture( tt, level->getData( x, y, z ), dir, tileShapeY1, x, y - 1 / 16.0f, z );
- }
- return true;
+ tt->updateShape(level, x, y, z);
+ int dir = tt->getConnectDir(level, x, y, z);
+ if (dir < 0) {
+ tesselateStemTexture(tt, level->getData(x, y, z), tileShapeY1, x,
+ y - 1 / 16.0f, z);
+ } else {
+ tesselateStemTexture(tt, level->getData(x, y, z), 0.5f, x,
+ y - 1 / 16.0f, z);
+ tesselateStemDirTexture(tt, level->getData(x, y, z), dir, tileShapeY1,
+ x, y - 1 / 16.0f, z);
+ }
+ return true;
}
-bool TileRenderer_SPU::tesselateRowInWorld( Tile_SPU* tt, int x, int y, int z )
-{
- Tesselator_SPU* t = getTesselator();
+bool TileRenderer_SPU::tesselateRowInWorld(Tile_SPU* tt, int x, int y, int z) {
+ Tesselator_SPU* t = getTesselator();
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y, z ) );
- t->color( 1.0f, 1.0f, 1.0f );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z );
- t->color( br, br, br );
- }
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ t->color(1.0f, 1.0f, 1.0f);
+ } else {
+ float br = tt->getBrightness(level, x, y, z);
+ t->color(br, br, br);
+ }
- tesselateRowTexture( tt, level->getData( x, y, z ), x, y - 1.0f / 16.0f, z );
- return true;
+ tesselateRowTexture(tt, level->getData(x, y, z), x, y - 1.0f / 16.0f, z);
+ return true;
}
-void TileRenderer_SPU::tesselateTorch( Tile_SPU* tt, float x, float y, float z, float xxa, float zza, int data )
-{
- Tesselator_SPU* t = getTesselator();
+void TileRenderer_SPU::tesselateTorch(Tile_SPU* tt, float x, float y, float z,
+ float xxa, float zza, int data) {
+ Tesselator_SPU* t = getTesselator();
- Icon_SPU *tex = getTexture(tt, Facing::DOWN, data);
+ Icon_SPU* tex = getTexture(tt, Facing::DOWN, data);
- if (hasFixedTexture()) tex = fixedTexture;
- float u0 = tex->getU0();
- float v0 = tex->getV0();
- float u1 = tex->getU1();
- float v1 = tex->getV1();
+ if (hasFixedTexture()) tex = fixedTexture;
+ float u0 = tex->getU0();
+ float v0 = tex->getV0();
+ float u1 = tex->getU1();
+ float v1 = tex->getV1();
- float ut0 = tex->getU(7);
- float vt0 = tex->getV(6);
- float ut1 = tex->getU(9);
- float vt1 = tex->getV(8);
+ float ut0 = tex->getU(7);
+ float vt0 = tex->getV(6);
+ float ut1 = tex->getU(9);
+ float vt1 = tex->getV(8);
- float ub0 = tex->getU(7);
- float vb0 = tex->getV(13);
- float ub1 = tex->getU(9);
- float vb1 = tex->getV(15);
+ float ub0 = tex->getU(7);
+ float vb0 = tex->getV(13);
+ float ub1 = tex->getU(9);
+ float vb1 = tex->getV(15);
- x += 0.5f;
- z += 0.5f;
+ x += 0.5f;
+ z += 0.5f;
- float x0 = x - 0.5f;
- float x1 = x + 0.5f;
- float z0 = z - 0.5f;
- float z1 = z + 0.5f;
- float r = 1 / 16.0f;
+ float x0 = x - 0.5f;
+ float x1 = x + 0.5f;
+ float z0 = z - 0.5f;
+ float z1 = z + 0.5f;
+ float r = 1 / 16.0f;
- float h = 10.0f / 16.0f;
- t->vertexUV( ( float )( x + xxa * ( 1 - h ) - r ), ( float )( y + h ), ( float )( z + zza * ( 1 - h ) - r ), ut0, vt0 );
- t->vertexUV( ( float )( x + xxa * ( 1 - h ) - r ), ( float )( y + h ), ( float )( z + zza * ( 1 - h ) + r ), ut0, vt1 );
- t->vertexUV( ( float )( x + xxa * ( 1 - h ) + r ), ( float )( y + h ), ( float )( z + zza * ( 1 - h ) + r ), ut1, vt1 );
- t->vertexUV( ( float )( x + xxa * ( 1 - h ) + r ), ( float )( y + h ), ( float )( z + zza * ( 1 - h ) - r ), ut1, vt0 );
+ float h = 10.0f / 16.0f;
+ t->vertexUV((float)(x + xxa * (1 - h) - r), (float)(y + h),
+ (float)(z + zza * (1 - h) - r), ut0, vt0);
+ t->vertexUV((float)(x + xxa * (1 - h) - r), (float)(y + h),
+ (float)(z + zza * (1 - h) + r), ut0, vt1);
+ t->vertexUV((float)(x + xxa * (1 - h) + r), (float)(y + h),
+ (float)(z + zza * (1 - h) + r), ut1, vt1);
+ t->vertexUV((float)(x + xxa * (1 - h) + r), (float)(y + h),
+ (float)(z + zza * (1 - h) - r), ut1, vt0);
- t->vertexUV( (float)(x + r + xxa), (float) y, (float)(z - r + zza), ub1, vb0);
- t->vertexUV( (float)(x + r + xxa), (float) y, (float)(z + r + zza), ub1, vb1);
- t->vertexUV( (float)(x - r + xxa), (float) y, (float)(z + r + zza), ub0, vb1);
- t->vertexUV( (float)(x - r + xxa), (float) y, (float)(z - r + zza), ub0, vb0);
+ t->vertexUV((float)(x + r + xxa), (float)y, (float)(z - r + zza), ub1, vb0);
+ t->vertexUV((float)(x + r + xxa), (float)y, (float)(z + r + zza), ub1, vb1);
+ t->vertexUV((float)(x - r + xxa), (float)y, (float)(z + r + zza), ub0, vb1);
+ t->vertexUV((float)(x - r + xxa), (float)y, (float)(z - r + zza), ub0, vb0);
- t->vertexUV( ( float )( x - r ), ( float )( y + 1 ), ( float )( z0 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x - r + xxa ), ( float )( y + 0 ), ( float )( z0 +
- zza ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x - r + xxa ), ( float )( y + 0 ), ( float )( z1 +
- zza ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x - r ), ( float )( y + 1 ), ( float )( z1 ), ( float )( u1 ), ( float )( v0 ) );
+ t->vertexUV((float)(x - r), (float)(y + 1), (float)(z0), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x - r + xxa), (float)(y + 0), (float)(z0 + zza),
+ (float)(u0), (float)(v1));
+ t->vertexUV((float)(x - r + xxa), (float)(y + 0), (float)(z1 + zza),
+ (float)(u1), (float)(v1));
+ t->vertexUV((float)(x - r), (float)(y + 1), (float)(z1), (float)(u1),
+ (float)(v0));
- t->vertexUV( ( float )( x + r ), ( float )( y + 1 ), ( float )( z1 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x + xxa + r ), ( float )( y + 0 ), ( float )( z1 +
- zza ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x + xxa + r ), ( float )( y + 0 ), ( float )( z0 +
- zza ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x + r ), ( float )( y + 1 ), ( float )( z0 ), ( float )( u1 ), ( float )( v0 ) );
+ t->vertexUV((float)(x + r), (float)(y + 1), (float)(z1), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x + xxa + r), (float)(y + 0), (float)(z1 + zza),
+ (float)(u0), (float)(v1));
+ t->vertexUV((float)(x + xxa + r), (float)(y + 0), (float)(z0 + zza),
+ (float)(u1), (float)(v1));
+ t->vertexUV((float)(x + r), (float)(y + 1), (float)(z0), (float)(u1),
+ (float)(v0));
- t->vertexUV( ( float )( x0 ), ( float )( y + 1 ), ( float )( z + r ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x0 + xxa ), ( float )( y + 0 ), ( float )( z + r +
- zza ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 + xxa ), ( float )( y + 0 ), ( float )( z + r +
- zza ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 1 ), ( float )( z + r ), ( float )( u1 ), ( float )( v0 ) );
+ t->vertexUV((float)(x0), (float)(y + 1), (float)(z + r), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x0 + xxa), (float)(y + 0), (float)(z + r + zza),
+ (float)(u0), (float)(v1));
+ t->vertexUV((float)(x1 + xxa), (float)(y + 0), (float)(z + r + zza),
+ (float)(u1), (float)(v1));
+ t->vertexUV((float)(x1), (float)(y + 1), (float)(z + r), (float)(u1),
+ (float)(v0));
- t->vertexUV( ( float )( x1 ), ( float )( y + 1 ), ( float )( z - r ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x1 + xxa ), ( float )( y + 0 ), ( float )( z - r +
- zza ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 + xxa ), ( float )( y + 0 ), ( float )( z - r +
- zza ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 1 ), ( float )( z - r ), ( float )( u1 ), ( float )( v0 ) );
+ t->vertexUV((float)(x1), (float)(y + 1), (float)(z - r), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x1 + xxa), (float)(y + 0), (float)(z - r + zza),
+ (float)(u0), (float)(v1));
+ t->vertexUV((float)(x0 + xxa), (float)(y + 0), (float)(z - r + zza),
+ (float)(u1), (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + 1), (float)(z - r), (float)(u1),
+ (float)(v0));
}
-void TileRenderer_SPU::tesselateCrossTexture( Tile_SPU* tt, int data, float x, float y, float z, float scale )
-{
- Tesselator_SPU* t = getTesselator();
+void TileRenderer_SPU::tesselateCrossTexture(Tile_SPU* tt, int data, float x,
+ float y, float z, float scale) {
+ Tesselator_SPU* t = getTesselator();
- Icon_SPU *tex = getTexture(tt, 0, data);
+ Icon_SPU* tex = getTexture(tt, 0, data);
- if (hasFixedTexture()) tex = fixedTexture;
- float u0 = tex->getU0();
- float v0 = tex->getV0();
- float u1 = tex->getU1();
- float v1 = tex->getV1();
+ if (hasFixedTexture()) tex = fixedTexture;
+ float u0 = tex->getU0();
+ float v0 = tex->getV0();
+ float u1 = tex->getU1();
+ float v1 = tex->getV1();
- float width = 0.45 * scale;
- float x0 = x + 0.5 - width;
- float x1 = x + 0.5 + width;
- float z0 = z + 0.5 - width;
- float z1 = z + 0.5 + width;
+ float width = 0.45 * scale;
+ float x0 = x + 0.5 - width;
+ float x1 = x + 0.5 + width;
+ float z0 = z + 0.5 - width;
+ float z1 = z + 0.5 + width;
- t->vertexUV( ( float )( x0 ), ( float )( y + scale ), ( float )( z0 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + scale ), ( float )( z1 ), ( float )( u1 ), ( float )( v0 ) );
+ t->vertexUV((float)(x0), (float)(y + scale), (float)(z0), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x0), (float)(y + 0), (float)(z0), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x1), (float)(y + 0), (float)(z1), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x1), (float)(y + scale), (float)(z1), (float)(u1),
+ (float)(v0));
- t->vertexUV( ( float )( x1 ), ( float )( y + scale ), ( float )( z1 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + scale ), ( float )( z0 ), ( float )( u1 ), ( float )( v0 ) );
+ t->vertexUV((float)(x1), (float)(y + scale), (float)(z1), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x1), (float)(y + 0), (float)(z1), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + 0), (float)(z0), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + scale), (float)(z0), (float)(u1),
+ (float)(v0));
- t->vertexUV( ( float )( x0 ), ( float )( y + scale ), ( float )( z1 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + scale ), ( float )( z0 ), ( float )( u1 ), ( float )( v0 ) );
+ t->vertexUV((float)(x0), (float)(y + scale), (float)(z1), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x0), (float)(y + 0), (float)(z1), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x1), (float)(y + 0), (float)(z0), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x1), (float)(y + scale), (float)(z0), (float)(u1),
+ (float)(v0));
- t->vertexUV( ( float )( x1 ), ( float )( y + scale ), ( float )( z0 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + scale ), ( float )( z1 ), ( float )( u1 ), ( float )( v0 ) );
+ t->vertexUV((float)(x1), (float)(y + scale), (float)(z0), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x1), (float)(y + 0), (float)(z0), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + 0), (float)(z1), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + scale), (float)(z1), (float)(u1),
+ (float)(v0));
}
-void TileRenderer_SPU::tesselateStemTexture( Tile_SPU* tt, int data, float h, float x, float y, float z )
-{
-// #ifdef DISABLE_TESS_FUNCS
- Tesselator_SPU* t = getTesselator();
+void TileRenderer_SPU::tesselateStemTexture(Tile_SPU* tt, int data, float h,
+ float x, float y, float z) {
+ // #ifdef DISABLE_TESS_FUNCS
+ Tesselator_SPU* t = getTesselator();
- Icon_SPU *tex = getTexture(tt, 0, data);
+ Icon_SPU* tex = getTexture(tt, 0, data);
- if (hasFixedTexture()) tex = fixedTexture;
- float u0 = tex->getU0();
- float v0 = tex->getV0();
- float u1 = tex->getU1();
- float v1 = tex->getV(h * SharedConstants::WORLD_RESOLUTION);
+ if (hasFixedTexture()) tex = fixedTexture;
+ float u0 = tex->getU0();
+ float v0 = tex->getV0();
+ float u1 = tex->getU1();
+ float v1 = tex->getV(h * SharedConstants::WORLD_RESOLUTION);
- float x0 = x + 0.5f - 0.45f;
- float x1 = x + 0.5f + 0.45f;
- float z0 = z + 0.5f - 0.45f;
- float z1 = z + 0.5f + 0.45f;
+ float x0 = x + 0.5f - 0.45f;
+ float x1 = x + 0.5f + 0.45f;
+ float z0 = z + 0.5f - 0.45f;
+ float z1 = z + 0.5f + 0.45f;
- t->vertexUV( x0, y + h, z0, u0, v0 );
- t->vertexUV( x0, y + 0, z0, u0, v1 );
- t->vertexUV( x1, y + 0, z1, u1, v1 );
- t->vertexUV( x1, y + h, z1, u1, v0 );
+ t->vertexUV(x0, y + h, z0, u0, v0);
+ t->vertexUV(x0, y + 0, z0, u0, v1);
+ t->vertexUV(x1, y + 0, z1, u1, v1);
+ t->vertexUV(x1, y + h, z1, u1, v0);
- t->vertexUV( x1, y + h, z1, u0, v0 );
- t->vertexUV( x1, y + 0, z1, u0, v1 );
- t->vertexUV( x0, y + 0, z0, u1, v1 );
- t->vertexUV( x0, y + h, z0, u1, v0 );
+ t->vertexUV(x1, y + h, z1, u0, v0);
+ t->vertexUV(x1, y + 0, z1, u0, v1);
+ t->vertexUV(x0, y + 0, z0, u1, v1);
+ t->vertexUV(x0, y + h, z0, u1, v0);
- t->vertexUV( x0, y + h, z1, u0, v0 );
- t->vertexUV( x0, y + 0, z1, u0, v1 );
- t->vertexUV( x1, y + 0, z0, u1, v1 );
- t->vertexUV( x1, y + h, z0, u1, v0 );
+ t->vertexUV(x0, y + h, z1, u0, v0);
+ t->vertexUV(x0, y + 0, z1, u0, v1);
+ t->vertexUV(x1, y + 0, z0, u1, v1);
+ t->vertexUV(x1, y + h, z0, u1, v0);
- t->vertexUV( x1, y + h, z0, u0, v0 );
- t->vertexUV( x1, y + 0, z0, u0, v1 );
- t->vertexUV( x0, y + 0, z1, u1, v1 );
- t->vertexUV( x0, y + h, z1, u1, v0 );
-// #endif // DISABLE_TESS_FUNCS
+ t->vertexUV(x1, y + h, z0, u0, v0);
+ t->vertexUV(x1, y + 0, z0, u0, v1);
+ t->vertexUV(x0, y + 0, z1, u1, v1);
+ t->vertexUV(x0, y + h, z1, u1, v0);
+ // #endif // DISABLE_TESS_FUNCS
}
-bool TileRenderer_SPU::tesselateLilypadInWorld(WaterlilyTile_SPU *tt, int x, int y, int z)
-{
- Tesselator_SPU* t = getTesselator();
+bool TileRenderer_SPU::tesselateLilypadInWorld(WaterlilyTile_SPU* tt, int x,
+ int y, int z) {
+ Tesselator_SPU* t = getTesselator();
- Icon_SPU *tex = getTexture(tt, Facing::UP);
+ Icon_SPU* tex = getTexture(tt, Facing::UP);
- if (hasFixedTexture()) tex = fixedTexture;
+ if (hasFixedTexture()) tex = fixedTexture;
float h = 0.25f / 16.0f;
- float u0 = tex->getU0();
- float v0 = tex->getV0();
- float u1 = tex->getU1();
- float v1 = tex->getV1();
+ float u0 = tex->getU0();
+ float v0 = tex->getV0();
+ float u1 = tex->getU1();
+ float v1 = tex->getV1();
int64_t seed = (x * 3129871) ^ (z * 116129781l) ^ (y);
seed = seed * seed * 42317861 + seed * 11;
- int dir = (int) ((seed >> 16) & 0x3);
-
-
+ int dir = (int)((seed >> 16) & 0x3);
t->tex2(tt->getLightColor(level, x, y, z));
@@ -3831,2700 +3774,2735 @@ bool TileRenderer_SPU::tesselateLilypadInWorld(WaterlilyTile_SPU *tt, int x, int
return true;
}
-void TileRenderer_SPU::tesselateStemDirTexture( StemTile_SPU* tt, int data, int dir, float h, float x, float y, float z )
-{
- Tesselator_SPU* t = getTesselator();
+void TileRenderer_SPU::tesselateStemDirTexture(StemTile_SPU* tt, int data,
+ int dir, float h, float x,
+ float y, float z) {
+ Tesselator_SPU* t = getTesselator();
- Icon_SPU *tex = tt->getAngledTexture();
+ Icon_SPU* tex = tt->getAngledTexture();
- if (hasFixedTexture()) tex = fixedTexture;
- float u0 = tex->getU0();
- float v0 = tex->getV0();
- float u1 = tex->getU1();
- float v1 = tex->getV1();
+ if (hasFixedTexture()) tex = fixedTexture;
+ float u0 = tex->getU0();
+ float v0 = tex->getV0();
+ float u1 = tex->getU1();
+ float v1 = tex->getV1();
- float x0 = x + 0.5f - 0.5f;
- float x1 = x + 0.5f + 0.5f;
- float z0 = z + 0.5f - 0.5f;
- float z1 = z + 0.5f + 0.5f;
+ float x0 = x + 0.5f - 0.5f;
+ float x1 = x + 0.5f + 0.5f;
+ float z0 = z + 0.5f - 0.5f;
+ float z1 = z + 0.5f + 0.5f;
- float xm = x + 0.5f;
- float zm = z + 0.5f;
+ float xm = x + 0.5f;
+ float zm = z + 0.5f;
- if ( ( dir + 1 ) / 2 % 2 == 1 )
- {
- float tmp = u1;
- u1 = u0;
- u0 = tmp;
- }
+ if ((dir + 1) / 2 % 2 == 1) {
+ float tmp = u1;
+ u1 = u0;
+ u0 = tmp;
+ }
- if ( dir < 2 )
- {
- t->vertexUV( x0, y + h, zm, u0, v0 );
- t->vertexUV( x0, y + 0, zm, u0, v1 );
- t->vertexUV( x1, y + 0, zm, u1, v1 );
- t->vertexUV( x1, y + h, zm, u1, v0 );
+ if (dir < 2) {
+ t->vertexUV(x0, y + h, zm, u0, v0);
+ t->vertexUV(x0, y + 0, zm, u0, v1);
+ t->vertexUV(x1, y + 0, zm, u1, v1);
+ t->vertexUV(x1, y + h, zm, u1, v0);
- t->vertexUV( x1, y + h, zm, u1, v0 );
- t->vertexUV( x1, y + 0, zm, u1, v1 );
- t->vertexUV( x0, y + 0, zm, u0, v1 );
- t->vertexUV( x0, y + h, zm, u0, v0 );
- }
- else
- {
- t->vertexUV( xm, y + h, z1, u0, v0 );
- t->vertexUV( xm, y + 0, z1, u0, v1 );
- t->vertexUV( xm, y + 0, z0, u1, v1 );
- t->vertexUV( xm, y + h, z0, u1, v0 );
+ t->vertexUV(x1, y + h, zm, u1, v0);
+ t->vertexUV(x1, y + 0, zm, u1, v1);
+ t->vertexUV(x0, y + 0, zm, u0, v1);
+ t->vertexUV(x0, y + h, zm, u0, v0);
+ } else {
+ t->vertexUV(xm, y + h, z1, u0, v0);
+ t->vertexUV(xm, y + 0, z1, u0, v1);
+ t->vertexUV(xm, y + 0, z0, u1, v1);
+ t->vertexUV(xm, y + h, z0, u1, v0);
- t->vertexUV( xm, y + h, z0, u1, v0 );
- t->vertexUV( xm, y + 0, z0, u1, v1 );
- t->vertexUV( xm, y + 0, z1, u0, v1 );
- t->vertexUV( xm, y + h, z1, u0, v0 );
- }
+ t->vertexUV(xm, y + h, z0, u1, v0);
+ t->vertexUV(xm, y + 0, z0, u1, v1);
+ t->vertexUV(xm, y + 0, z1, u0, v1);
+ t->vertexUV(xm, y + h, z1, u0, v0);
+ }
}
+void TileRenderer_SPU::tesselateRowTexture(Tile_SPU* tt, int data, float x,
+ float y, float z) {
+ Tesselator_SPU* t = getTesselator();
-void TileRenderer_SPU::tesselateRowTexture( Tile_SPU* tt, int data, float x, float y, float z )
-{
- Tesselator_SPU* t = getTesselator();
+ Icon_SPU* tex = getTexture(tt, 0, data);
- Icon_SPU *tex = getTexture(tt, 0, data);
+ if (hasFixedTexture()) tex = fixedTexture;
+ float u0 = tex->getU0();
+ float v0 = tex->getV0();
+ float u1 = tex->getU1();
+ float v1 = tex->getV1();
- if (hasFixedTexture()) tex = fixedTexture;
- float u0 = tex->getU0();
- float v0 = tex->getV0();
- float u1 = tex->getU1();
- float v1 = tex->getV1();
+ float x0 = x + 0.5f - 0.25f;
+ float x1 = x + 0.5f + 0.25f;
+ float z0 = z + 0.5f - 0.5f;
+ float z1 = z + 0.5f + 0.5f;
- float x0 = x + 0.5f - 0.25f;
- float x1 = x + 0.5f + 0.25f;
- float z0 = z + 0.5f - 0.5f;
- float z1 = z + 0.5f + 0.5f;
+ t->vertexUV((float)(x0), (float)(y + 1), (float)(z0), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x0), (float)(y + 0), (float)(z0), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + 0), (float)(z1), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + 1), (float)(z1), (float)(u1),
+ (float)(v0));
- t->vertexUV( ( float )( x0 ), ( float )( y + 1 ), ( float )( z0 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 1 ), ( float )( z1 ), ( float )( u1 ), ( float )( v0 ) );
+ t->vertexUV((float)(x0), (float)(y + 1), (float)(z1), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x0), (float)(y + 0), (float)(z1), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + 0), (float)(z0), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + 1), (float)(z0), (float)(u1),
+ (float)(v0));
- t->vertexUV( ( float )( x0 ), ( float )( y + 1 ), ( float )( z1 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 1 ), ( float )( z0 ), ( float )( u1 ), ( float )( v0 ) );
+ t->vertexUV((float)(x1), (float)(y + 1), (float)(z1), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x1), (float)(y + 0), (float)(z1), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x1), (float)(y + 0), (float)(z0), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x1), (float)(y + 1), (float)(z0), (float)(u1),
+ (float)(v0));
- t->vertexUV( ( float )( x1 ), ( float )( y + 1 ), ( float )( z1 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 1 ), ( float )( z0 ), ( float )( u1 ), ( float )( v0 ) );
+ t->vertexUV((float)(x1), (float)(y + 1), (float)(z0), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x1), (float)(y + 0), (float)(z0), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x1), (float)(y + 0), (float)(z1), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x1), (float)(y + 1), (float)(z1), (float)(u1),
+ (float)(v0));
- t->vertexUV( ( float )( x1 ), ( float )( y + 1 ), ( float )( z0 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 1 ), ( float )( z1 ), ( float )( u1 ), ( float )( v0 ) );
+ x0 = x + 0.5f - 0.5f;
+ x1 = x + 0.5f + 0.5f;
+ z0 = z + 0.5f - 0.25f;
+ z1 = z + 0.5f + 0.25f;
- x0 = x + 0.5f - 0.5f;
- x1 = x + 0.5f + 0.5f;
- z0 = z + 0.5f - 0.25f;
- z1 = z + 0.5f + 0.25f;
+ t->vertexUV((float)(x0), (float)(y + 1), (float)(z0), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x0), (float)(y + 0), (float)(z0), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x1), (float)(y + 0), (float)(z0), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x1), (float)(y + 1), (float)(z0), (float)(u1),
+ (float)(v0));
- t->vertexUV( ( float )( x0 ), ( float )( y + 1 ), ( float )( z0 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 1 ), ( float )( z0 ), ( float )( u1 ), ( float )( v0 ) );
+ t->vertexUV((float)(x1), (float)(y + 1), (float)(z0), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x1), (float)(y + 0), (float)(z0), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + 0), (float)(z0), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + 1), (float)(z0), (float)(u1),
+ (float)(v0));
- t->vertexUV( ( float )( x1 ), ( float )( y + 1 ), ( float )( z0 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 1 ), ( float )( z0 ), ( float )( u1 ), ( float )( v0 ) );
-
- t->vertexUV( ( float )( x1 ), ( float )( y + 1 ), ( float )( z1 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 1 ), ( float )( z1 ), ( float )( u1 ), ( float )( v0 ) );
-
- t->vertexUV( ( float )( x0 ), ( float )( y + 1 ), ( float )( z1 ), ( float )( u0 ), ( float )( v0 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 1 ), ( float )( z1 ), ( float )( u1 ), ( float )( v0 ) );
+ t->vertexUV((float)(x1), (float)(y + 1), (float)(z1), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x1), (float)(y + 0), (float)(z1), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + 0), (float)(z1), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + 1), (float)(z1), (float)(u1),
+ (float)(v0));
+ t->vertexUV((float)(x0), (float)(y + 1), (float)(z1), (float)(u0),
+ (float)(v0));
+ t->vertexUV((float)(x0), (float)(y + 0), (float)(z1), (float)(u0),
+ (float)(v1));
+ t->vertexUV((float)(x1), (float)(y + 0), (float)(z1), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x1), (float)(y + 1), (float)(z1), (float)(u1),
+ (float)(v0));
}
-bool TileRenderer_SPU::tesselateWaterInWorld( Tile_SPU* tt, int x, int y, int z )
-{
- // 4J Java comment
- // TODO: This all needs to change. Somehow.
- Tesselator_SPU* t = getTesselator();
+bool TileRenderer_SPU::tesselateWaterInWorld(Tile_SPU* tt, int x, int y,
+ int z) {
+ // 4J Java comment
+ // TODO: This all needs to change. Somehow.
+ Tesselator_SPU* t = getTesselator();
- int col = tt->getColor( level, x, y, z );
- float r = ( col >> 16 & 0xff ) / 255.0f;
- float g = ( col >> 8 & 0xff ) / 255.0f;
- float b = ( col & 0xff ) / 255.0f;
- bool up = tt->shouldRenderFace( level, x, y + 1, z, 1 );
- bool down = tt->shouldRenderFace( level, x, y - 1, z, 0 );
- bool dirs[4];
- dirs[0] = tt->shouldRenderFace( level, x, y, z - 1, 2 );
- dirs[1] = tt->shouldRenderFace( level, x, y, z + 1, 3 );
- dirs[2] = tt->shouldRenderFace( level, x - 1, y, z, 4 );
- dirs[3] = tt->shouldRenderFace( level, x + 1, y, z, 5 );
+ int col = tt->getColor(level, x, y, z);
+ float r = (col >> 16 & 0xff) / 255.0f;
+ float g = (col >> 8 & 0xff) / 255.0f;
+ float b = (col & 0xff) / 255.0f;
+ bool up = tt->shouldRenderFace(level, x, y + 1, z, 1);
+ bool down = tt->shouldRenderFace(level, x, y - 1, z, 0);
+ bool dirs[4];
+ dirs[0] = tt->shouldRenderFace(level, x, y, z - 1, 2);
+ dirs[1] = tt->shouldRenderFace(level, x, y, z + 1, 3);
+ dirs[2] = tt->shouldRenderFace(level, x - 1, y, z, 4);
+ dirs[3] = tt->shouldRenderFace(level, x + 1, y, z, 5);
- if ( !up && !down && !dirs[0] && !dirs[1] && !dirs[2] && !dirs[3] ) return false;
+ if (!up && !down && !dirs[0] && !dirs[1] && !dirs[2] && !dirs[3])
+ return false;
- bool changed = false;
- float c10 = 0.5f;
- float c11 = 1;
- float c2 = 0.8f;
- float c3 = 0.6f;
+ bool changed = false;
+ float c10 = 0.5f;
+ float c11 = 1;
+ float c2 = 0.8f;
+ float c3 = 0.6f;
- float yo0 = 0;
- float yo1 = 1;
+ float yo0 = 0;
+ float yo1 = 1;
- Material_SPU* m = tt->getMaterial();
- int data = level->getData( x, y, z );
+ Material_SPU* m = tt->getMaterial();
+ int data = level->getData(x, y, z);
- float h0 = getWaterHeight( x, y, z, m );
- float h1 = getWaterHeight( x, y, z + 1, m );
- float h2 = getWaterHeight( x + 1, y, z + 1, m );
- float h3 = getWaterHeight( x + 1, y, z, m );
+ float h0 = getWaterHeight(x, y, z, m);
+ float h1 = getWaterHeight(x, y, z + 1, m);
+ float h2 = getWaterHeight(x + 1, y, z + 1, m);
+ float h3 = getWaterHeight(x + 1, y, z, m);
float offs = 0.001f;
- // 4J - added. Farm tiles often found beside water, but they consider themselves non-solid as they only extend up to 15.0f / 16.0f.
- // If the max height of this water is below that level, don't bother rendering sides bordering onto farmland.
- float maxh = h0;
- if ( h1 > maxh ) maxh = h1;
- if ( h2 > maxh ) maxh = h2;
- if ( h3 > maxh ) maxh = h3;
- if ( maxh <= ( 15.0f / 16.0f ) )
- {
- if ( level->getTile( x, y, z - 1 ) == Tile_SPU::farmland_Id )
- {
- dirs[0] = false;
- }
- if ( level->getTile( x, y, z + 1 ) == Tile_SPU::farmland_Id )
- {
- dirs[1] = false;
- }
- if ( level->getTile( x - 1, y, z ) == Tile_SPU::farmland_Id )
- {
- dirs[2] = false;
- }
- if ( level->getTile( x + 1, y, z ) == Tile_SPU::farmland_Id )
- {
- dirs[3] = false;
- }
- }
+ // 4J - added. Farm tiles often found beside water, but they consider
+ // themselves non-solid as they only extend up to 15.0f / 16.0f. If the max
+ // height of this water is below that level, don't bother rendering sides
+ // bordering onto farmland.
+ float maxh = h0;
+ if (h1 > maxh) maxh = h1;
+ if (h2 > maxh) maxh = h2;
+ if (h3 > maxh) maxh = h3;
+ if (maxh <= (15.0f / 16.0f)) {
+ if (level->getTile(x, y, z - 1) == Tile_SPU::farmland_Id) {
+ dirs[0] = false;
+ }
+ if (level->getTile(x, y, z + 1) == Tile_SPU::farmland_Id) {
+ dirs[1] = false;
+ }
+ if (level->getTile(x - 1, y, z) == Tile_SPU::farmland_Id) {
+ dirs[2] = false;
+ }
+ if (level->getTile(x + 1, y, z) == Tile_SPU::farmland_Id) {
+ dirs[3] = false;
+ }
+ }
- if ( noCulling || up )
- {
- changed = true;
- Icon_SPU *tex = getTexture( tt, 1, data );
- float angle = ( float )LiquidTile_SPU::getSlopeAngle( level, x, y, z, m );
- if ( angle > -999 )
- {
- tex = getTexture( tt, 2, data );
- }
+ if (noCulling || up) {
+ changed = true;
+ Icon_SPU* tex = getTexture(tt, 1, data);
+ float angle = (float)LiquidTile_SPU::getSlopeAngle(level, x, y, z, m);
+ if (angle > -999) {
+ tex = getTexture(tt, 2, data);
+ }
h0 -= offs;
h1 -= offs;
h2 -= offs;
h3 -= offs;
- float u00, u01, u10, u11;
- float v00, v01, v10, v11;
- if ( angle < -999 )
- {
- u00 = tex->getU(0);
- v00 = tex->getV(0);
- u01 = u00;
- v01 = tex->getV(SharedConstants::WORLD_RESOLUTION);
- u10 = tex->getU(SharedConstants::WORLD_RESOLUTION);
- v10 = v01;
- u11 = u10;
- v11 = v00;
- }
- else
- {
- float s = sinf(angle) * .25f;
- float c = cosf(angle) * .25f;
- float cc = SharedConstants::WORLD_RESOLUTION * .5f;
- u00 = tex->getU(cc + (-c - s) * SharedConstants::WORLD_RESOLUTION);
- v00 = tex->getV(cc + (-c + s) * SharedConstants::WORLD_RESOLUTION);
- u01 = tex->getU(cc + (-c + s) * SharedConstants::WORLD_RESOLUTION);
- v01 = tex->getV(cc + (+c + s) * SharedConstants::WORLD_RESOLUTION);
- u10 = tex->getU(cc + (+c + s) * SharedConstants::WORLD_RESOLUTION);
- v10 = tex->getV(cc + (+c - s) * SharedConstants::WORLD_RESOLUTION);
- u11 = tex->getU(cc + (+c - s) * SharedConstants::WORLD_RESOLUTION);
- v11 = tex->getV(cc + (-c - s) * SharedConstants::WORLD_RESOLUTION);
- }
+ float u00, u01, u10, u11;
+ float v00, v01, v10, v11;
+ if (angle < -999) {
+ u00 = tex->getU(0);
+ v00 = tex->getV(0);
+ u01 = u00;
+ v01 = tex->getV(SharedConstants::WORLD_RESOLUTION);
+ u10 = tex->getU(SharedConstants::WORLD_RESOLUTION);
+ v10 = v01;
+ u11 = u10;
+ v11 = v00;
+ } else {
+ float s = sinf(angle) * .25f;
+ float c = cosf(angle) * .25f;
+ float cc = SharedConstants::WORLD_RESOLUTION * .5f;
+ u00 = tex->getU(cc + (-c - s) * SharedConstants::WORLD_RESOLUTION);
+ v00 = tex->getV(cc + (-c + s) * SharedConstants::WORLD_RESOLUTION);
+ u01 = tex->getU(cc + (-c + s) * SharedConstants::WORLD_RESOLUTION);
+ v01 = tex->getV(cc + (+c + s) * SharedConstants::WORLD_RESOLUTION);
+ u10 = tex->getU(cc + (+c + s) * SharedConstants::WORLD_RESOLUTION);
+ v10 = tex->getV(cc + (+c - s) * SharedConstants::WORLD_RESOLUTION);
+ u11 = tex->getU(cc + (+c - s) * SharedConstants::WORLD_RESOLUTION);
+ v11 = tex->getV(cc + (-c - s) * SharedConstants::WORLD_RESOLUTION);
+ }
- float br;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y, z ) );
- br = 1;
- }
- else
- {
- br = tt->getBrightness( level, x, y, z );
- }
- t->color( c11 * br * r, c11 * br * g, c11 * br * b );
- t->vertexUV( ( float )( x + 0.0f ), ( float )( y + h0 ), ( float )( z + 0.0f ), u00, v00 );
- t->vertexUV( ( float )( x + 0.0f ), ( float )( y + h1 ), ( float )( z + 1.0f ), u01, v01 );
- t->vertexUV( ( float )( x + 1.0f ), ( float )( y + h2 ), ( float )( z + 1.0f ), u10, v10 );
- t->vertexUV( ( float )( x + 1.0f ), ( float )( y + h3 ), ( float )( z + 0.0f ), u11, v11 );
- }
+ float br;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ br = 1;
+ } else {
+ br = tt->getBrightness(level, x, y, z);
+ }
+ t->color(c11 * br * r, c11 * br * g, c11 * br * b);
+ t->vertexUV((float)(x + 0.0f), (float)(y + h0), (float)(z + 0.0f), u00,
+ v00);
+ t->vertexUV((float)(x + 0.0f), (float)(y + h1), (float)(z + 1.0f), u01,
+ v01);
+ t->vertexUV((float)(x + 1.0f), (float)(y + h2), (float)(z + 1.0f), u10,
+ v10);
+ t->vertexUV((float)(x + 1.0f), (float)(y + h3), (float)(z + 0.0f), u11,
+ v11);
+ }
- if ( noCulling || down )
- {
- float br;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y - 1, z ) );
- br = 1;
- }
- else
- {
- br = tt->getBrightness( level, x, y - 1, z );
- }
- t->color( c10 * br, c10 * br, c10 * br );
- renderFaceDown( tt, x, y + offs, z, getTexture( tt, 0 ) );
- changed = true;
- }
+ if (noCulling || down) {
+ float br;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y - 1, z));
+ br = 1;
+ } else {
+ br = tt->getBrightness(level, x, y - 1, z);
+ }
+ t->color(c10 * br, c10 * br, c10 * br);
+ renderFaceDown(tt, x, y + offs, z, getTexture(tt, 0));
+ changed = true;
+ }
- for ( int face = 0; face < 4; face++ )
- {
- int xt = x;
- int yt = y;
- int zt = z;
+ for (int face = 0; face < 4; face++) {
+ int xt = x;
+ int yt = y;
+ int zt = z;
- if ( face == 0 ) zt--;
- if ( face == 1 ) zt++;
- if ( face == 2 ) xt--;
- if ( face == 3 ) xt++;
+ if (face == 0) zt--;
+ if (face == 1) zt++;
+ if (face == 2) xt--;
+ if (face == 3) xt++;
- Icon_SPU *tex = getTexture(tt, face + 2, data);
+ Icon_SPU* tex = getTexture(tt, face + 2, data);
- if ( noCulling || dirs[face] )
- {
- float hh0;
- float hh1;
- float x0, z0, x1, z1;
- if ( face == 0 )
- {
- hh0 = ( float )( h0 );
- hh1 = ( float )( h3 );
- x0 = ( float )( x );
- x1 = ( float )( x + 1 );
- z0 = ( float )( z + offs);
- z1 = ( float )( z + offs);
- }
- else if ( face == 1 )
- {
- hh0 = ( float )( h2 );
- hh1 = ( float )( h1 );
- x0 = ( float )( x + 1 );
- x1 = ( float )( x );
- z0 = ( float )( z + 1 - offs);
- z1 = ( float )( z + 1 - offs);
- }
- else if ( face == 2 )
- {
- hh0 = ( float )( h1 );
- hh1 = ( float )( h0 );
- x0 = ( float )( x + offs);
- x1 = ( float )( x + offs);
- z0 = ( float )( z + 1 );
- z1 = ( float )( z );
- }
- else
- {
- hh0 = ( float )( h3 );
- hh1 = ( float )( h2 );
- x0 = ( float )( x + 1 - offs);
- x1 = ( float )( x + 1 - offs);
- z0 = ( float )( z );
- z1 = ( float )( z + 1 );
- }
+ if (noCulling || dirs[face]) {
+ float hh0;
+ float hh1;
+ float x0, z0, x1, z1;
+ if (face == 0) {
+ hh0 = (float)(h0);
+ hh1 = (float)(h3);
+ x0 = (float)(x);
+ x1 = (float)(x + 1);
+ z0 = (float)(z + offs);
+ z1 = (float)(z + offs);
+ } else if (face == 1) {
+ hh0 = (float)(h2);
+ hh1 = (float)(h1);
+ x0 = (float)(x + 1);
+ x1 = (float)(x);
+ z0 = (float)(z + 1 - offs);
+ z1 = (float)(z + 1 - offs);
+ } else if (face == 2) {
+ hh0 = (float)(h1);
+ hh1 = (float)(h0);
+ x0 = (float)(x + offs);
+ x1 = (float)(x + offs);
+ z0 = (float)(z + 1);
+ z1 = (float)(z);
+ } else {
+ hh0 = (float)(h3);
+ hh1 = (float)(h2);
+ x0 = (float)(x + 1 - offs);
+ x1 = (float)(x + 1 - offs);
+ z0 = (float)(z);
+ z1 = (float)(z + 1);
+ }
+ changed = true;
+ float u0 = tex->getU(0);
+ float u1 = tex->getU(SharedConstants::WORLD_RESOLUTION * .5f);
- changed = true;
- float u0 = tex->getU(0);
- float u1 = tex->getU(SharedConstants::WORLD_RESOLUTION * .5f);
+ // int yTex = tex->getY();
+ float v01 =
+ tex->getV((1 - hh0) * SharedConstants::WORLD_RESOLUTION * .5f);
+ float v02 =
+ tex->getV((1 - hh1) * SharedConstants::WORLD_RESOLUTION * .5f);
+ float v1 = tex->getV(SharedConstants::WORLD_RESOLUTION * .5f);
-// int yTex = tex->getY();
- float v01 = tex->getV((1 - hh0) * SharedConstants::WORLD_RESOLUTION * .5f);
- float v02 = tex->getV((1 - hh1) * SharedConstants::WORLD_RESOLUTION * .5f);
- float v1 = tex->getV(SharedConstants::WORLD_RESOLUTION * .5f);
+ float br;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, xt, yt, zt));
+ br = 1;
+ } else {
+ br = tt->getBrightness(level, xt, yt, zt);
+ }
+ if (face < 2)
+ br *= c2;
+ else
+ br *= c3;
- float br;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, xt, yt, zt ) );
- br = 1;
- }
- else
- {
- br = tt->getBrightness( level, xt, yt, zt );
- }
- if ( face < 2 ) br *= c2;
- else
- br *= c3;
+ t->color(c11 * br * r, c11 * br * g, c11 * br * b);
+ t->vertexUV((float)(x0), (float)(y + hh0), (float)(z0), (float)(u0),
+ (float)(v01));
+ t->vertexUV((float)(x1), (float)(y + hh1), (float)(z1), (float)(u1),
+ (float)(v02));
+ t->vertexUV((float)(x1), (float)(y + 0), (float)(z1), (float)(u1),
+ (float)(v1));
+ t->vertexUV((float)(x0), (float)(y + 0), (float)(z0), (float)(u0),
+ (float)(v1));
+ }
+ }
- t->color( c11 * br * r, c11 * br * g, c11 * br * b );
- t->vertexUV( ( float )( x0 ), ( float )( y + hh0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v01 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + hh1 ), ( float )( z1 ), ( float )( u1 ), ( float )( v02 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
+ tileShapeY0 = yo0;
+ tileShapeY1 = yo1;
- }
-
- }
-
- tileShapeY0 = yo0;
- tileShapeY1 = yo1;
-
- return changed;
+ return changed;
}
-float TileRenderer_SPU::getWaterHeight( int x, int y, int z, Material_SPU* m )
-{
- int count = 0;
- float h = 0;
- for ( int i = 0; i < 4; i++ )
- {
- int xx = x - ( i & 1 );
- int yy = y;
- int zz = z - ( ( i >> 1 ) & 1 );
- if ( level->getMaterial( xx, yy + 1, zz ) == m )
- {
- return 1;
- }
- Material_SPU* tm = level->getMaterial( xx, yy, zz );
- if ( tm == m )
- {
- int d = level->getData( xx, yy, zz );
- if ( d >= 8 || d == 0 )
- {
- h += ( LiquidTile_SPU::getHeight( d ) )* 10;
- count += 10;
- }
- h += LiquidTile_SPU::getHeight( d );
- count++;
- }
- else if ( !tm->isSolid() )
- {
- h += 1;
- count++;
- }
- }
- return 1 - h / count;
+float TileRenderer_SPU::getWaterHeight(int x, int y, int z, Material_SPU* m) {
+ int count = 0;
+ float h = 0;
+ for (int i = 0; i < 4; i++) {
+ int xx = x - (i & 1);
+ int yy = y;
+ int zz = z - ((i >> 1) & 1);
+ if (level->getMaterial(xx, yy + 1, zz) == m) {
+ return 1;
+ }
+ Material_SPU* tm = level->getMaterial(xx, yy, zz);
+ if (tm == m) {
+ int d = level->getData(xx, yy, zz);
+ if (d >= 8 || d == 0) {
+ h += (LiquidTile_SPU::getHeight(d)) * 10;
+ count += 10;
+ }
+ h += LiquidTile_SPU::getHeight(d);
+ count++;
+ } else if (!tm->isSolid()) {
+ h += 1;
+ count++;
+ }
+ }
+ return 1 - h / count;
}
-void TileRenderer_SPU::renderBlock( Tile_SPU* tt, ChunkRebuildData* level, int x, int y, int z )
-{
- renderBlock(tt, level, x, y, z, 0);
+void TileRenderer_SPU::renderBlock(Tile_SPU* tt, ChunkRebuildData* level, int x,
+ int y, int z) {
+ renderBlock(tt, level, x, y, z, 0);
}
-void TileRenderer_SPU::renderBlock(Tile_SPU *tt, ChunkRebuildData *level, int x, int y, int z, int data)
-{
- float c10 = 0.5f;
- float c11 = 1;
- float c2 = 0.8f;
- float c3 = 0.6f;
+void TileRenderer_SPU::renderBlock(Tile_SPU* tt, ChunkRebuildData* level, int x,
+ int y, int z, int data) {
+ float c10 = 0.5f;
+ float c11 = 1;
+ float c2 = 0.8f;
+ float c3 = 0.6f;
- Tesselator_SPU* t = getTesselator();
- t->begin();
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tt->getLightColor( level, x, y, z ) );
- }
- float center = SharedConstants::TEXTURE_LIGHTING ? 1 : tt->getBrightness( level, x, y, z );
- float br = SharedConstants::TEXTURE_LIGHTING ? 1 : tt->getBrightness( level, x, y - 1, z );
+ Tesselator_SPU* t = getTesselator();
+ t->begin();
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ }
+ float center = SharedConstants::TEXTURE_LIGHTING
+ ? 1
+ : tt->getBrightness(level, x, y, z);
+ float br = SharedConstants::TEXTURE_LIGHTING
+ ? 1
+ : tt->getBrightness(level, x, y - 1, z);
- if ( br < center ) br = center;
- t->color( c10 * br, c10 * br, c10 * br );
- renderFaceDown( tt, -0.5f, -0.5f, -0.5f, getTexture( tt, 0, data ) );
+ if (br < center) br = center;
+ t->color(c10 * br, c10 * br, c10 * br);
+ renderFaceDown(tt, -0.5f, -0.5f, -0.5f, getTexture(tt, 0, data));
- br = SharedConstants::TEXTURE_LIGHTING ? 1 : tt->getBrightness( level, x, y + 1, z );
- if ( br < center ) br = center;
- t->color( c11 * br, c11 * br, c11 * br );
- renderFaceUp( tt, -0.5f, -0.5f, -0.5f, getTexture( tt, 1, data ) );
+ br = SharedConstants::TEXTURE_LIGHTING
+ ? 1
+ : tt->getBrightness(level, x, y + 1, z);
+ if (br < center) br = center;
+ t->color(c11 * br, c11 * br, c11 * br);
+ renderFaceUp(tt, -0.5f, -0.5f, -0.5f, getTexture(tt, 1, data));
- br = SharedConstants::TEXTURE_LIGHTING ? 1 : tt->getBrightness( level, x, y, z - 1 );
- if ( br < center ) br = center;
- t->color( c2 * br, c2 * br, c2 * br );
- renderNorth( tt, -0.5f, -0.5f, -0.5f, getTexture( tt, 2, data ) );
+ br = SharedConstants::TEXTURE_LIGHTING
+ ? 1
+ : tt->getBrightness(level, x, y, z - 1);
+ if (br < center) br = center;
+ t->color(c2 * br, c2 * br, c2 * br);
+ renderNorth(tt, -0.5f, -0.5f, -0.5f, getTexture(tt, 2, data));
- br = SharedConstants::TEXTURE_LIGHTING ? 1 : tt->getBrightness( level, x, y, z + 1 );
- if ( br < center ) br = center;
- t->color( c2 * br, c2 * br, c2 * br );
- renderSouth( tt, -0.5f, -0.5f, -0.5f, getTexture( tt, 3, data ) );
+ br = SharedConstants::TEXTURE_LIGHTING
+ ? 1
+ : tt->getBrightness(level, x, y, z + 1);
+ if (br < center) br = center;
+ t->color(c2 * br, c2 * br, c2 * br);
+ renderSouth(tt, -0.5f, -0.5f, -0.5f, getTexture(tt, 3, data));
- br = SharedConstants::TEXTURE_LIGHTING ? 1 : tt->getBrightness( level, x - 1, y, z );
- if ( br < center ) br = center;
- t->color( c3 * br, c3 * br, c3 * br );
- renderWest( tt, -0.5f, -0.5f, -0.5f, getTexture( tt, 4, data ) );
-
- br = SharedConstants::TEXTURE_LIGHTING ? 1 : tt->getBrightness( level, x + 1, y, z );
- if ( br < center ) br = center;
- t->color( c3 * br, c3 * br, c3 * br );
- renderEast( tt, -0.5f, -0.5f, -0.5f, getTexture( tt, 5, data ) );
- t->end();
+ br = SharedConstants::TEXTURE_LIGHTING
+ ? 1
+ : tt->getBrightness(level, x - 1, y, z);
+ if (br < center) br = center;
+ t->color(c3 * br, c3 * br, c3 * br);
+ renderWest(tt, -0.5f, -0.5f, -0.5f, getTexture(tt, 4, data));
+ br = SharedConstants::TEXTURE_LIGHTING
+ ? 1
+ : tt->getBrightness(level, x + 1, y, z);
+ if (br < center) br = center;
+ t->color(c3 * br, c3 * br, c3 * br);
+ renderEast(tt, -0.5f, -0.5f, -0.5f, getTexture(tt, 5, data));
+ t->end();
}
-bool TileRenderer_SPU::tesselateBlockInWorld( Tile_SPU* tt, int x, int y, int z )
-{
- int col = tt->getColor( level, x, y, z );
- float r = ( ( col >> 16 ) & 0xff ) / 255.0f;
- float g = ( ( col >> 8 ) & 0xff ) / 255.0f;
- float b = ( ( col )& 0xff ) / 255.0f;
+bool TileRenderer_SPU::tesselateBlockInWorld(Tile_SPU* tt, int x, int y,
+ int z) {
+ int col = tt->getColor(level, x, y, z);
+ float r = ((col >> 16) & 0xff) / 255.0f;
+ float g = ((col >> 8) & 0xff) / 255.0f;
+ float b = ((col) & 0xff) / 255.0f;
- if ( isAnaglyph3d())
- {
- float cr = ( r * 30 + g * 59 + b * 11 ) / 100;
- float cg = ( r * 30 + g * 70 ) / ( 100 );
- float cb = ( r * 30 + b * 70 ) / ( 100 );
+ if (isAnaglyph3d()) {
+ float cr = (r * 30 + g * 59 + b * 11) / 100;
+ float cg = (r * 30 + g * 70) / (100);
+ float cb = (r * 30 + b * 70) / (100);
- r = cr;
- g = cg;
- b = cb;
- }
+ r = cr;
+ g = cg;
+ b = cb;
+ }
- if ( level->m_tileData.lightEmission[tt->id] == 0 )//4J - TODO/remove (Minecraft::useAmbientOcclusion())
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- return tesselateBlockInWorldWithAmbienceOcclusionTexLighting( tt, x, y, z, r, g, b );
- }
- else
- {
- return tesselateBlockInWorldWithAmbienceOcclusionOldLighting( tt, x, y, z, r, g, b );
- }
- }
- else
- {
- return tesselateBlockInWorld( tt, x, y, z, r, g, b );
- }
+ if (level->m_tileData.lightEmission[tt->id] ==
+ 0) // 4J - TODO/remove (Minecraft::useAmbientOcclusion())
+ {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ return tesselateBlockInWorldWithAmbienceOcclusionTexLighting(
+ tt, x, y, z, r, g, b);
+ } else {
+ return tesselateBlockInWorldWithAmbienceOcclusionOldLighting(
+ tt, x, y, z, r, g, b);
+ }
+ } else {
+ return tesselateBlockInWorld(tt, x, y, z, r, g, b);
+ }
}
-bool TileRenderer_SPU::tesselateTreeInWorld(Tile_SPU *tt, int x, int y, int z)
-{
- int data = level->getData(x, y, z);
- int facing = data & TreeTile_SPU::MASK_FACING;
+bool TileRenderer_SPU::tesselateTreeInWorld(Tile_SPU* tt, int x, int y, int z) {
+ int data = level->getData(x, y, z);
+ int facing = data & TreeTile_SPU::MASK_FACING;
- if (facing == TreeTile_SPU::FACING_X)
- {
- northFlip = FLIP_CW;
- southFlip = FLIP_CW;
- upFlip = FLIP_CW;
- downFlip = FLIP_CW;
- }
- else if (facing == TreeTile_SPU::FACING_Z)
- {
- eastFlip = FLIP_CW;
- westFlip = FLIP_CW;
- }
+ if (facing == TreeTile_SPU::FACING_X) {
+ northFlip = FLIP_CW;
+ southFlip = FLIP_CW;
+ upFlip = FLIP_CW;
+ downFlip = FLIP_CW;
+ } else if (facing == TreeTile_SPU::FACING_Z) {
+ eastFlip = FLIP_CW;
+ westFlip = FLIP_CW;
+ }
- bool result = tesselateBlockInWorld(tt, x, y, z);
+ bool result = tesselateBlockInWorld(tt, x, y, z);
- eastFlip = 0;
- northFlip = 0;
- southFlip = 0;
- westFlip = 0;
- upFlip = 0;
- downFlip = 0;
+ eastFlip = 0;
+ northFlip = 0;
+ southFlip = 0;
+ westFlip = 0;
+ upFlip = 0;
+ downFlip = 0;
- return result;
+ return result;
}
-bool TileRenderer_SPU::tesselateQuartzInWorld(Tile_SPU *tt, int x, int y, int z)
-{
- int data = level->getData(x, y, z);
+bool TileRenderer_SPU::tesselateQuartzInWorld(Tile_SPU* tt, int x, int y,
+ int z) {
+ int data = level->getData(x, y, z);
- if (data == QuartzBlockTile_SPU::TYPE_LINES_X)
- {
- northFlip = FLIP_CW;
- southFlip = FLIP_CW;
- upFlip = FLIP_CW;
- downFlip = FLIP_CW;
- }
- else if (data == QuartzBlockTile_SPU::TYPE_LINES_Z)
- {
- eastFlip = FLIP_CW;
- westFlip = FLIP_CW;
- }
+ if (data == QuartzBlockTile_SPU::TYPE_LINES_X) {
+ northFlip = FLIP_CW;
+ southFlip = FLIP_CW;
+ upFlip = FLIP_CW;
+ downFlip = FLIP_CW;
+ } else if (data == QuartzBlockTile_SPU::TYPE_LINES_Z) {
+ eastFlip = FLIP_CW;
+ westFlip = FLIP_CW;
+ }
- bool result = tesselateBlockInWorld(tt, x, y, z);
+ bool result = tesselateBlockInWorld(tt, x, y, z);
- eastFlip = 0;
- northFlip = 0;
- southFlip = 0;
- westFlip = 0;
- upFlip = 0;
- downFlip = 0;
+ eastFlip = 0;
+ northFlip = 0;
+ southFlip = 0;
+ westFlip = 0;
+ upFlip = 0;
+ downFlip = 0;
- return result;
+ return result;
}
-bool TileRenderer_SPU::tesselateCocoaInWorld(CocoaTile_SPU *tt, int x, int y, int z)
-{
+bool TileRenderer_SPU::tesselateCocoaInWorld(CocoaTile_SPU* tt, int x, int y,
+ int z) {
#ifdef DISABLE_TESS_FUNCS
- Tesselator *t = Tesselator::getInstance();
+ Tesselator* t = Tesselator::getInstance();
- if (SharedConstants::TEXTURE_LIGHTING)
- {
- t->tex2(tt->getLightColor(level, x, y, z));
- t->color(1.0f, 1.0f, 1.0f);
- }
- else
- {
- float br = tt->getBrightness(level, x, y, z);
- if (Tile::lightEmission[tt->id] > 0) br = 1.0f;
- t->color(br, br, br);
- }
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tt->getLightColor(level, x, y, z));
+ t->color(1.0f, 1.0f, 1.0f);
+ } else {
+ float br = tt->getBrightness(level, x, y, z);
+ if (Tile::lightEmission[tt->id] > 0) br = 1.0f;
+ t->color(br, br, br);
+ }
- int data = level->getData(x, y, z);
- int dir = DirectionalTile::getDirection(data);
- int age = CocoaTile::getAge(data);
- Icon *tex = tt->getTextureForAge(age);
+ int data = level->getData(x, y, z);
+ int dir = DirectionalTile::getDirection(data);
+ int age = CocoaTile::getAge(data);
+ Icon* tex = tt->getTextureForAge(age);
- int cocoaWidth = 4 + age * 2;
- int cocoaHeight = 5 + age * 2;
+ int cocoaWidth = 4 + age * 2;
+ int cocoaHeight = 5 + age * 2;
- double us = 15.0 - cocoaWidth;
- double ue = 15.0;
- double vs = 4.0;
- double ve = 4.0 + cocoaHeight;
- double u0 = tex->getU(us, true);
- double u1 = tex->getU(ue, true);
- double v0 = tex->getV(vs, true);
- double v1 = tex->getV(ve, true);
+ double us = 15.0 - cocoaWidth;
+ double ue = 15.0;
+ double vs = 4.0;
+ double ve = 4.0 + cocoaHeight;
+ double u0 = tex->getU(us, true);
+ double u1 = tex->getU(ue, true);
+ double v0 = tex->getV(vs, true);
+ double v1 = tex->getV(ve, true);
+ double offX = 0;
+ double offZ = 0;
- double offX = 0;
- double offZ = 0;
+ switch (dir) {
+ case Direction::NORTH:
+ offX = 8.0 - cocoaWidth / 2;
+ offZ = 1.0;
+ break;
+ case Direction::SOUTH:
+ offX = 8.0 - cocoaWidth / 2;
+ offZ = 15.0 - cocoaWidth;
+ break;
+ case Direction::EAST:
+ offX = 15.0 - cocoaWidth;
+ offZ = 8.0 - cocoaWidth / 2;
+ break;
+ case Direction::WEST:
+ offX = 1.0;
+ offZ = 8.0 - cocoaWidth / 2;
+ break;
+ }
- switch (dir)
- {
- case Direction::NORTH:
- offX = 8.0 - cocoaWidth / 2;
- offZ = 1.0;
- break;
- case Direction::SOUTH:
- offX = 8.0 - cocoaWidth / 2;
- offZ = 15.0 - cocoaWidth;
- break;
- case Direction::EAST:
- offX = 15.0 - cocoaWidth;
- offZ = 8.0 - cocoaWidth / 2;
- break;
- case Direction::WEST:
- offX = 1.0;
- offZ = 8.0 - cocoaWidth / 2;
- break;
- }
+ double x0 = x + offX / 16.0;
+ double x1 = x + (offX + cocoaWidth) / 16.0;
+ double y0 = y + (12.0 - cocoaHeight) / 16.0;
+ double y1 = y + 12.0 / 16.0;
+ double z0 = z + offZ / 16.0;
+ double z1 = z + (offZ + cocoaWidth) / 16.0;
- double x0 = x + offX / 16.0;
- double x1 = x + (offX + cocoaWidth) / 16.0;
- double y0 = y + (12.0 - cocoaHeight) / 16.0;
- double y1 = y + 12.0 / 16.0;
- double z0 = z + offZ / 16.0;
- double z1 = z + (offZ + cocoaWidth) / 16.0;
+ // west
+ {
+ t->vertexUV(x0, y0, z0, u0, v1);
+ t->vertexUV(x0, y0, z1, u1, v1);
+ t->vertexUV(x0, y1, z1, u1, v0);
+ t->vertexUV(x0, y1, z0, u0, v0);
+ }
+ // east
+ {
+ t->vertexUV(x1, y0, z1, u0, v1);
+ t->vertexUV(x1, y0, z0, u1, v1);
+ t->vertexUV(x1, y1, z0, u1, v0);
+ t->vertexUV(x1, y1, z1, u0, v0);
+ }
+ // north
+ {
+ t->vertexUV(x1, y0, z0, u0, v1);
+ t->vertexUV(x0, y0, z0, u1, v1);
+ t->vertexUV(x0, y1, z0, u1, v0);
+ t->vertexUV(x1, y1, z0, u0, v0);
+ }
+ // south
+ {
+ t->vertexUV(x0, y0, z1, u0, v1);
+ t->vertexUV(x1, y0, z1, u1, v1);
+ t->vertexUV(x1, y1, z1, u1, v0);
+ t->vertexUV(x0, y1, z1, u0, v0);
+ }
- // west
- {
- t->vertexUV(x0, y0, z0, u0, v1);
- t->vertexUV(x0, y0, z1, u1, v1);
- t->vertexUV(x0, y1, z1, u1, v0);
- t->vertexUV(x0, y1, z0, u0, v0);
- }
- // east
- {
- t->vertexUV(x1, y0, z1, u0, v1);
- t->vertexUV(x1, y0, z0, u1, v1);
- t->vertexUV(x1, y1, z0, u1, v0);
- t->vertexUV(x1, y1, z1, u0, v0);
- }
- // north
- {
- t->vertexUV(x1, y0, z0, u0, v1);
- t->vertexUV(x0, y0, z0, u1, v1);
- t->vertexUV(x0, y1, z0, u1, v0);
- t->vertexUV(x1, y1, z0, u0, v0);
- }
- // south
- {
- t->vertexUV(x0, y0, z1, u0, v1);
- t->vertexUV(x1, y0, z1, u1, v1);
- t->vertexUV(x1, y1, z1, u1, v0);
- t->vertexUV(x0, y1, z1, u0, v0);
- }
+ int topWidth = cocoaWidth;
+ if (age >= 2) {
+ // special case because the top piece didn't fit
+ topWidth--;
+ }
- int topWidth = cocoaWidth;
- if (age >= 2)
- {
- // special case because the top piece didn't fit
- topWidth--;
- }
+ u0 = tex->getU0(true);
+ u1 = tex->getU(topWidth, true);
+ v0 = tex->getV0(true);
+ v1 = tex->getV(topWidth, true);
- u0 = tex->getU0(true);
- u1 = tex->getU(topWidth, true);
- v0 = tex->getV0(true);
- v1 = tex->getV(topWidth, true);
+ // top
+ {
+ t->vertexUV(x0, y1, z1, u0, v1);
+ t->vertexUV(x1, y1, z1, u1, v1);
+ t->vertexUV(x1, y1, z0, u1, v0);
+ t->vertexUV(x0, y1, z0, u0, v0);
+ }
+ // bottom
+ {
+ t->vertexUV(x0, y0, z0, u0, v0);
+ t->vertexUV(x1, y0, z0, u1, v0);
+ t->vertexUV(x1, y0, z1, u1, v1);
+ t->vertexUV(x0, y0, z1, u0, v1);
+ }
- // top
- {
- t->vertexUV(x0, y1, z1, u0, v1);
- t->vertexUV(x1, y1, z1, u1, v1);
- t->vertexUV(x1, y1, z0, u1, v0);
- t->vertexUV(x0, y1, z0, u0, v0);
- }
- // bottom
- {
- t->vertexUV(x0, y0, z0, u0, v0);
- t->vertexUV(x1, y0, z0, u1, v0);
- t->vertexUV(x1, y0, z1, u1, v1);
- t->vertexUV(x0, y0, z1, u0, v1);
- }
+ // stalk
+ u0 = tex->getU(12, true);
+ u1 = tex->getU1(true);
+ v0 = tex->getV0(true);
+ v1 = tex->getV(4, true);
- // stalk
- u0 = tex->getU(12, true);
- u1 = tex->getU1(true);
- v0 = tex->getV0(true);
- v1 = tex->getV(4, true);
+ offX = 8;
+ offZ = 0;
- offX = 8;
- offZ = 0;
+ switch (dir) {
+ case Direction::NORTH:
+ offX = 8.0;
+ offZ = 0.0;
+ break;
+ case Direction::SOUTH:
+ offX = 8;
+ offZ = 12;
+ {
+ double temp = u0;
+ u0 = u1;
+ u1 = temp;
+ }
+ break;
+ case Direction::EAST:
+ offX = 12.0;
+ offZ = 8.0;
+ {
+ double temp = u0;
+ u0 = u1;
+ u1 = temp;
+ }
+ break;
+ case Direction::WEST:
+ offX = 0.0;
+ offZ = 8.0;
+ break;
+ }
- switch (dir)
- {
- case Direction::NORTH:
- offX = 8.0;
- offZ = 0.0;
- break;
- case Direction::SOUTH:
- offX = 8;
- offZ = 12;
- {
- double temp = u0;
- u0 = u1;
- u1 = temp;
- }
- break;
- case Direction::EAST:
- offX = 12.0;
- offZ = 8.0;
- {
- double temp = u0;
- u0 = u1;
- u1 = temp;
- }
- break;
- case Direction::WEST:
- offX = 0.0;
- offZ = 8.0;
- break;
- }
+ x0 = x + offX / 16.0;
+ x1 = x + (offX + 4.0) / 16.0;
+ y0 = y + 12.0 / 16.0;
+ y1 = y + 16.0 / 16.0;
+ z0 = z + offZ / 16.0;
+ z1 = z + (offZ + 4.0) / 16.0;
+ if (dir == Direction::NORTH || dir == Direction::SOUTH) {
+ // west
+ {
+ t->vertexUV(x0, y0, z0, u1, v1);
+ t->vertexUV(x0, y0, z1, u0, v1);
+ t->vertexUV(x0, y1, z1, u0, v0);
+ t->vertexUV(x0, y1, z0, u1, v0);
+ }
+ // east
+ {
+ t->vertexUV(x0, y0, z1, u0, v1);
+ t->vertexUV(x0, y0, z0, u1, v1);
+ t->vertexUV(x0, y1, z0, u1, v0);
+ t->vertexUV(x0, y1, z1, u0, v0);
+ }
+ } else if (dir == Direction::WEST || dir == Direction::EAST) {
+ // north
+ {
+ t->vertexUV(x1, y0, z0, u0, v1);
+ t->vertexUV(x0, y0, z0, u1, v1);
+ t->vertexUV(x0, y1, z0, u1, v0);
+ t->vertexUV(x1, y1, z0, u0, v0);
+ }
+ // south
+ {
+ t->vertexUV(x0, y0, z0, u1, v1);
+ t->vertexUV(x1, y0, z0, u0, v1);
+ t->vertexUV(x1, y1, z0, u0, v0);
+ t->vertexUV(x0, y1, z0, u1, v0);
+ }
+ }
- x0 = x + offX / 16.0;
- x1 = x + (offX + 4.0) / 16.0;
- y0 = y + 12.0 / 16.0;
- y1 = y + 16.0 / 16.0;
- z0 = z + offZ / 16.0;
- z1 = z + (offZ + 4.0) / 16.0;
- if (dir == Direction::NORTH || dir == Direction::SOUTH)
- {
- // west
- {
- t->vertexUV(x0, y0, z0, u1, v1);
- t->vertexUV(x0, y0, z1, u0, v1);
- t->vertexUV(x0, y1, z1, u0, v0);
- t->vertexUV(x0, y1, z0, u1, v0);
- }
- // east
- {
- t->vertexUV(x0, y0, z1, u0, v1);
- t->vertexUV(x0, y0, z0, u1, v1);
- t->vertexUV(x0, y1, z0, u1, v0);
- t->vertexUV(x0, y1, z1, u0, v0);
- }
- }
- else if (dir == Direction::WEST || dir == Direction::EAST)
- {
- // north
- {
- t->vertexUV(x1, y0, z0, u0, v1);
- t->vertexUV(x0, y0, z0, u1, v1);
- t->vertexUV(x0, y1, z0, u1, v0);
- t->vertexUV(x1, y1, z0, u0, v0);
- }
- // south
- {
- t->vertexUV(x0, y0, z0, u1, v1);
- t->vertexUV(x1, y0, z0, u0, v1);
- t->vertexUV(x1, y1, z0, u0, v0);
- t->vertexUV(x0, y1, z0, u1, v0);
- }
- }
-
-#endif // DISABLE_TESS_FUNCS
- return true;
+#endif // DISABLE_TESS_FUNCS
+ return true;
}
// 4J - brought changes forward from 1.8.2
-bool TileRenderer_SPU::tesselateBlockInWorldWithAmbienceOcclusionTexLighting( Tile_SPU* tt, int pX, int pY, int pZ,
- float pBaseRed, float pBaseGreen,
- float pBaseBlue )
-{
- // 4J - added these faceFlags so we can detect whether this block is going to have no visible faces and early out
- // the original code checked noCulling and shouldRenderFace directly where faceFlags is used now
- int faceFlags = 0;
- if ( noCulling )
- {
- faceFlags = 0x3f;
- }
- else
- {
-/*#ifdef _DEBUG
- if(dynamic_cast(tt)!=NULL)
- {
- // stair tile
- faceFlags |= tt->shouldRenderFace( level, pX, pY - 1, pZ, 0 ) ? 0x01 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX, pY + 1, pZ, 1 ) ? 0x02 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX, pY, pZ - 1, 2 ) ? 0x04 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX, pY, pZ + 1, 3 ) ? 0x08 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX - 1, pY, pZ, 4 ) ? 0x10 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX + 1, pY, pZ, 5 ) ? 0x20 : 0;
+bool TileRenderer_SPU::tesselateBlockInWorldWithAmbienceOcclusionTexLighting(
+ Tile_SPU* tt, int pX, int pY, int pZ, float pBaseRed, float pBaseGreen,
+ float pBaseBlue) {
+ // 4J - added these faceFlags so we can detect whether this block is going
+ // to have no visible faces and early out the original code checked
+ // noCulling and shouldRenderFace directly where faceFlags is used now
+ int faceFlags = 0;
+ if (noCulling) {
+ faceFlags = 0x3f;
+ } else {
+ /*#ifdef _DEBUG
+ if(dynamic_cast(tt)!=NULL)
+ {
+ // stair tile
+ faceFlags |= tt->shouldRenderFace( level, pX, pY
+ - 1, pZ, 0 ) ? 0x01 : 0; faceFlags |= tt->shouldRenderFace( level, pX,
+ pY + 1, pZ, 1 ) ? 0x02 : 0; faceFlags |= tt->shouldRenderFace( level,
+ pX, pY, pZ - 1, 2 ) ? 0x04 : 0; faceFlags |= tt->shouldRenderFace(
+ level, pX, pY, pZ + 1, 3 ) ? 0x08 : 0; faceFlags |=
+ tt->shouldRenderFace( level, pX - 1, pY, pZ, 4 ) ? 0x10 : 0; faceFlags
+ |= tt->shouldRenderFace( level, pX + 1, pY, pZ, 5 ) ? 0x20 : 0;
- printf("Stair tile\n");
- }
- else
- {
- faceFlags |= tt->shouldRenderFace( level, pX, pY - 1, pZ, 0 ) ? 0x01 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX, pY + 1, pZ, 1 ) ? 0x02 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX, pY, pZ - 1, 2 ) ? 0x04 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX, pY, pZ + 1, 3 ) ? 0x08 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX - 1, pY, pZ, 4 ) ? 0x10 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX + 1, pY, pZ, 5 ) ? 0x20 : 0;
+ printf("Stair tile\n");
+ }
+ else
+ {
+ faceFlags |= tt->shouldRenderFace( level, pX, pY
+ - 1, pZ, 0 ) ? 0x01 : 0; faceFlags |= tt->shouldRenderFace( level, pX,
+ pY + 1, pZ, 1 ) ? 0x02 : 0; faceFlags |= tt->shouldRenderFace( level,
+ pX, pY, pZ - 1, 2 ) ? 0x04 : 0; faceFlags |= tt->shouldRenderFace(
+ level, pX, pY, pZ + 1, 3 ) ? 0x08 : 0; faceFlags |=
+ tt->shouldRenderFace( level, pX - 1, pY, pZ, 4 ) ? 0x10 : 0; faceFlags
+ |= tt->shouldRenderFace( level, pX + 1, pY, pZ, 5 ) ? 0x20 : 0;
- }
-#else*/
- faceFlags |= tt->shouldRenderFace( level, pX, pY - 1, pZ, 0 ) ? 0x01 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX, pY + 1, pZ, 1 ) ? 0x02 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX, pY, pZ - 1, 2 ) ? 0x04 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX, pY, pZ + 1, 3 ) ? 0x08 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX - 1, pY, pZ, 4 ) ? 0x10 : 0;
- faceFlags |= tt->shouldRenderFace( level, pX + 1, pY, pZ, 5 ) ? 0x20 : 0;
-//#endif
- }
- if ( faceFlags == 0 )
- {
- return false;
- }
+ }
+ #else*/
+ faceFlags |= tt->shouldRenderFace(level, pX, pY - 1, pZ, 0) ? 0x01 : 0;
+ faceFlags |= tt->shouldRenderFace(level, pX, pY + 1, pZ, 1) ? 0x02 : 0;
+ faceFlags |= tt->shouldRenderFace(level, pX, pY, pZ - 1, 2) ? 0x04 : 0;
+ faceFlags |= tt->shouldRenderFace(level, pX, pY, pZ + 1, 3) ? 0x08 : 0;
+ faceFlags |= tt->shouldRenderFace(level, pX - 1, pY, pZ, 4) ? 0x10 : 0;
+ faceFlags |= tt->shouldRenderFace(level, pX + 1, pY, pZ, 5) ? 0x20 : 0;
+ // #endif
+ }
+ if (faceFlags == 0) {
+ return false;
+ }
+ // If we are only rendering the bottom face and we're at the bottom of the
+ // world, we shouldn't be able to see this - don't render anything
+ if ((faceFlags == 1) && (pY == 0)) {
+ return false;
+ }
- // If we are only rendering the bottom face and we're at the bottom of the world, we shouldn't be able to see this - don't render anything
- if( ( faceFlags == 1 ) && ( pY == 0 ) )
- {
- return false;
- }
+ applyAmbienceOcclusion = true;
+ float ll1 = ll000;
+ float ll2 = ll000;
+ float ll3 = ll000;
+ float ll4 = ll000;
+ bool tint0 = true;
+ bool tint1 = true;
+ bool tint2 = true;
+ bool tint3 = true;
+ bool tint4 = true;
+ bool tint5 = true;
- applyAmbienceOcclusion = true;
- float ll1 = ll000;
- float ll2 = ll000;
- float ll3 = ll000;
- float ll4 = ll000;
- bool tint0 = true;
- bool tint1 = true;
- bool tint2 = true;
- bool tint3 = true;
- bool tint4 = true;
- bool tint5 = true;
+ ll000 = tt->getShadeBrightness(level, pX, pY, pZ);
+ // Tile* t2 = Tile::tiles[tt->id];
+ // if(t2->getShadeBrightness(level->m_pRegion, pX, pY, pZ) != ll000)
+ // {
+ // app.DebugPrintf("Failed\n");
+ // ll000 = tt->getShadeBrightness( level, pX, pY, pZ );
+ // ll000 = t2->getShadeBrightness(level->m_pRegion, pX, pY, pZ);
+ // }
+ llx00 = tt->getShadeBrightness(level, pX - 1, pY, pZ);
+ ll0y0 = tt->getShadeBrightness(level, pX, pY - 1, pZ);
+ ll00z = tt->getShadeBrightness(level, pX, pY, pZ - 1);
+ llX00 = tt->getShadeBrightness(level, pX + 1, pY, pZ);
+ ll0Y0 = tt->getShadeBrightness(level, pX, pY + 1, pZ);
+ ll00Z = tt->getShadeBrightness(level, pX, pY, pZ + 1);
+ // 4J - these changes brought forward from 1.2.3
+ int centerColor = tt->getLightColor(level, pX, pY, pZ);
+ int ccx00 = centerColor;
+ int cc0y0 = centerColor;
+ int cc00z = centerColor;
+ int ccX00 = centerColor;
+ int cc0Y0 = centerColor;
+ int cc00Z = centerColor;
- ll000 = tt->getShadeBrightness( level, pX, pY, pZ );
-// Tile* t2 = Tile::tiles[tt->id];
-// if(t2->getShadeBrightness(level->m_pRegion, pX, pY, pZ) != ll000)
-// {
-// app.DebugPrintf("Failed\n");
-// ll000 = tt->getShadeBrightness( level, pX, pY, pZ );
-// ll000 = t2->getShadeBrightness(level->m_pRegion, pX, pY, pZ);
-// }
- llx00 = tt->getShadeBrightness( level, pX - 1, pY, pZ );
- ll0y0 = tt->getShadeBrightness( level, pX, pY - 1, pZ );
- ll00z = tt->getShadeBrightness( level, pX, pY, pZ - 1 );
- llX00 = tt->getShadeBrightness( level, pX + 1, pY, pZ );
- ll0Y0 = tt->getShadeBrightness( level, pX, pY + 1, pZ );
- ll00Z = tt->getShadeBrightness( level, pX, pY, pZ + 1 );
+ if (tileShapeY0 <= 0 || !level->isSolidRenderTile(pX, pY - 1, pZ))
+ cc0y0 = tt->getLightColor(level, pX, pY - 1, pZ);
+ if (tileShapeY1 >= 1 || !level->isSolidRenderTile(pX, pY + 1, pZ))
+ cc0Y0 = tt->getLightColor(level, pX, pY + 1, pZ);
+ if (tileShapeX0 <= 0 || !level->isSolidRenderTile(pX - 1, pY, pZ))
+ ccx00 = tt->getLightColor(level, pX - 1, pY, pZ);
+ if (tileShapeX1 >= 1 || !level->isSolidRenderTile(pX + 1, pY, pZ))
+ ccX00 = tt->getLightColor(level, pX + 1, pY, pZ);
+ if (tileShapeZ0 <= 0 || !level->isSolidRenderTile(pX, pY, pZ - 1))
+ cc00z = tt->getLightColor(level, pX, pY, pZ - 1);
+ if (tileShapeZ1 >= 1 || !level->isSolidRenderTile(pX, pY, pZ + 1))
+ cc00Z = tt->getLightColor(level, pX, pY, pZ + 1);
+ Tesselator_SPU* t = getTesselator();
+ t->tex2(0xf000f);
+ llTransXY0 =
+ level->m_tileData.transculent[level->getTile(pX + 1, pY + 1, pZ)];
+ llTransXy0 =
+ level->m_tileData.transculent[level->getTile(pX + 1, pY - 1, pZ)];
+ llTransX0Z =
+ level->m_tileData.transculent[level->getTile(pX + 1, pY, pZ + 1)];
+ llTransX0z =
+ level->m_tileData.transculent[level->getTile(pX + 1, pY, pZ - 1)];
+ llTransxY0 =
+ level->m_tileData.transculent[level->getTile(pX - 1, pY + 1, pZ)];
+ llTransxy0 =
+ level->m_tileData.transculent[level->getTile(pX - 1, pY - 1, pZ)];
+ llTransx0z =
+ level->m_tileData.transculent[level->getTile(pX - 1, pY, pZ - 1)];
+ llTransx0Z =
+ level->m_tileData.transculent[level->getTile(pX - 1, pY, pZ + 1)];
+ llTrans0YZ =
+ level->m_tileData.transculent[level->getTile(pX, pY + 1, pZ + 1)];
+ llTrans0Yz =
+ level->m_tileData.transculent[level->getTile(pX, pY + 1, pZ - 1)];
+ llTrans0yZ =
+ level->m_tileData.transculent[level->getTile(pX, pY - 1, pZ + 1)];
+ llTrans0yz =
+ level->m_tileData.transculent[level->getTile(pX, pY - 1, pZ - 1)];
- // 4J - these changes brought forward from 1.2.3
- int centerColor = tt->getLightColor( level, pX, pY, pZ );
- int ccx00 = centerColor;
- int cc0y0 = centerColor;
- int cc00z = centerColor;
- int ccX00 = centerColor;
- int cc0Y0 = centerColor;
- int cc00Z = centerColor;
+ if (getTexture(tt) == &Tile_SPU::ms_pTileData->grass_iconTop)
+ tint0 = tint2 = tint3 = tint4 = tint5 = false;
+ if (hasFixedTexture()) tint0 = tint2 = tint3 = tint4 = tint5 = false;
+ if (faceFlags & 0x01) {
+ if (blsmooth > 0) {
+ if (tileShapeY0 <= 0)
+ pY--; // 4J - condition brought forwardEnterCriticalSection
+ // from 1.2.3
- if (tileShapeY0 <= 0 || !level->isSolidRenderTile(pX, pY - 1, pZ)) cc0y0 = tt->getLightColor(level, pX, pY - 1, pZ);
- if (tileShapeY1 >= 1 || !level->isSolidRenderTile(pX, pY + 1, pZ)) cc0Y0 = tt->getLightColor(level, pX, pY + 1, pZ);
- if (tileShapeX0 <= 0 || !level->isSolidRenderTile(pX - 1, pY, pZ)) ccx00 = tt->getLightColor(level, pX - 1, pY, pZ);
- if (tileShapeX1 >= 1 || !level->isSolidRenderTile(pX + 1, pY, pZ)) ccX00 = tt->getLightColor(level, pX + 1, pY, pZ);
- if (tileShapeZ0 <= 0 || !level->isSolidRenderTile(pX, pY, pZ - 1)) cc00z = tt->getLightColor(level, pX, pY, pZ - 1);
- if (tileShapeZ1 >= 1 || !level->isSolidRenderTile(pX, pY, pZ + 1)) cc00Z = tt->getLightColor(level, pX, pY, pZ + 1);
+ ccxy0 = tt->getLightColor(level, pX - 1, pY, pZ);
+ cc0yz = tt->getLightColor(level, pX, pY, pZ - 1);
+ cc0yZ = tt->getLightColor(level, pX, pY, pZ + 1);
+ ccXy0 = tt->getLightColor(level, pX + 1, pY, pZ);
+ llxy0 = tt->getShadeBrightness(level, pX - 1, pY, pZ);
+ ll0yz = tt->getShadeBrightness(level, pX, pY, pZ - 1);
+ ll0yZ = tt->getShadeBrightness(level, pX, pY, pZ + 1);
+ llXy0 = tt->getShadeBrightness(level, pX + 1, pY, pZ);
- Tesselator_SPU* t = getTesselator();
- t->tex2( 0xf000f );
+ if (llTrans0yz || llTransxy0) {
+ llxyz = tt->getShadeBrightness(level, pX - 1, pY, pZ - 1);
+ ccxyz = tt->getLightColor(level, pX - 1, pY, pZ - 1);
+ } else {
+ llxyz = llxy0;
+ ccxyz = ccxy0;
+ }
+ if (llTrans0yZ || llTransxy0) {
+ llxyZ = tt->getShadeBrightness(level, pX - 1, pY, pZ + 1);
+ ccxyZ = tt->getLightColor(level, pX - 1, pY, pZ + 1);
+ } else {
+ llxyZ = llxy0;
+ ccxyZ = ccxy0;
+ }
+ if (llTrans0yz || llTransXy0) {
+ llXyz = tt->getShadeBrightness(level, pX + 1, pY, pZ - 1);
+ ccXyz = tt->getLightColor(level, pX + 1, pY, pZ - 1);
+ } else {
+ llXyz = llXy0;
+ ccXyz = ccXy0;
+ }
+ if (llTrans0yZ || llTransXy0) {
+ llXyZ = tt->getShadeBrightness(level, pX + 1, pY, pZ + 1);
+ ccXyZ = tt->getLightColor(level, pX + 1, pY, pZ + 1);
+ } else {
+ llXyZ = llXy0;
+ ccXyZ = ccXy0;
+ }
- llTransXY0 = level->m_tileData.transculent[level->getTile( pX + 1, pY + 1, pZ )];
- llTransXy0 = level->m_tileData.transculent[level->getTile( pX + 1, pY - 1, pZ )];
- llTransX0Z = level->m_tileData.transculent[level->getTile( pX + 1, pY, pZ + 1 )];
- llTransX0z = level->m_tileData.transculent[level->getTile( pX + 1, pY, pZ - 1 )];
- llTransxY0 = level->m_tileData.transculent[level->getTile( pX - 1, pY + 1, pZ )];
- llTransxy0 = level->m_tileData.transculent[level->getTile( pX - 1, pY - 1, pZ )];
- llTransx0z = level->m_tileData.transculent[level->getTile( pX - 1, pY, pZ - 1 )];
- llTransx0Z = level->m_tileData.transculent[level->getTile( pX - 1, pY, pZ + 1 )];
- llTrans0YZ = level->m_tileData.transculent[level->getTile( pX, pY + 1, pZ + 1 )];
- llTrans0Yz = level->m_tileData.transculent[level->getTile( pX, pY + 1, pZ - 1 )];
- llTrans0yZ = level->m_tileData.transculent[level->getTile( pX, pY - 1, pZ + 1 )];
- llTrans0yz = level->m_tileData.transculent[level->getTile( pX, pY - 1, pZ - 1 )];
+ if (tileShapeY0 <= 0)
+ pY++; // 4J - condition brought forward from 1.2.3
+ ll1 = (llxyZ + llxy0 + ll0yZ + ll0y0) / 4.0f;
+ ll4 = (ll0yZ + ll0y0 + llXyZ + llXy0) / 4.0f;
+ ll3 = (ll0y0 + ll0yz + llXy0 + llXyz) / 4.0f;
+ ll2 = (llxy0 + llxyz + ll0y0 + ll0yz) / 4.0f;
- if ( getTexture(tt)== &Tile_SPU::ms_pTileData->grass_iconTop )
- tint0 = tint2 = tint3 = tint4 = tint5 = false;
- if ( hasFixedTexture() ) tint0 = tint2 = tint3 = tint4 = tint5 = false;
+ tc1 = blend(ccxyZ, ccxy0, cc0yZ, cc0y0);
+ tc4 = blend(cc0yZ, ccXyZ, ccXy0, cc0y0);
+ tc3 = blend(cc0yz, ccXy0, ccXyz, cc0y0);
+ tc2 = blend(ccxy0, ccxyz, cc0yz, cc0y0);
+ } else {
+ ll1 = ll2 = ll3 = ll4 = ll0y0;
+ tc1 = tc2 = tc3 = tc4 = ccxy0;
+ }
+ c1r = c2r = c3r = c4r = (tint0 ? pBaseRed : 1.0f) * 0.5f;
+ c1g = c2g = c3g = c4g = (tint0 ? pBaseGreen : 1.0f) * 0.5f;
+ c1b = c2b = c3b = c4b = (tint0 ? pBaseBlue : 1.0f) * 0.5f;
+ c1r *= ll1;
+ c1g *= ll1;
+ c1b *= ll1;
+ c2r *= ll2;
+ c2g *= ll2;
+ c2b *= ll2;
+ c3r *= ll3;
+ c3g *= ll3;
+ c3b *= ll3;
+ c4r *= ll4;
+ c4g *= ll4;
+ c4b *= ll4;
- if ( faceFlags & 0x01 )
- {
- if ( blsmooth > 0 )
- {
- if ( tileShapeY0 <= 0 ) pY--; // 4J - condition brought forwardEnterCriticalSection from 1.2.3
+ renderFaceDown(tt, (float)pX, (float)pY, (float)pZ,
+ getTexture(tt, level, pX, pY, pZ, 0));
+ }
+ if (faceFlags & 0x02) {
+ if (blsmooth > 0) {
+ if (tileShapeY1 >= 1)
+ pY++; // 4J - condition brought forward from 1.2.3
- ccxy0 = tt->getLightColor( level, pX - 1, pY, pZ );
- cc0yz = tt->getLightColor( level, pX, pY, pZ - 1 );
- cc0yZ = tt->getLightColor( level, pX, pY, pZ + 1 );
- ccXy0 = tt->getLightColor( level, pX + 1, pY, pZ );
+ ccxY0 = tt->getLightColor(level, pX - 1, pY, pZ);
+ ccXY0 = tt->getLightColor(level, pX + 1, pY, pZ);
+ cc0Yz = tt->getLightColor(level, pX, pY, pZ - 1);
+ cc0YZ = tt->getLightColor(level, pX, pY, pZ + 1);
- llxy0 = tt->getShadeBrightness( level, pX - 1, pY, pZ );
- ll0yz = tt->getShadeBrightness( level, pX, pY, pZ - 1 );
- ll0yZ = tt->getShadeBrightness( level, pX, pY, pZ + 1 );
- llXy0 = tt->getShadeBrightness( level, pX + 1, pY, pZ );
+ llxY0 = tt->getShadeBrightness(level, pX - 1, pY, pZ);
+ llXY0 = tt->getShadeBrightness(level, pX + 1, pY, pZ);
+ ll0Yz = tt->getShadeBrightness(level, pX, pY, pZ - 1);
+ ll0YZ = tt->getShadeBrightness(level, pX, pY, pZ + 1);
- if ( llTrans0yz || llTransxy0 )
- {
- llxyz = tt->getShadeBrightness( level, pX - 1, pY, pZ - 1 );
- ccxyz = tt->getLightColor( level, pX - 1, pY, pZ - 1 );
- }
- else
- {
- llxyz = llxy0;
- ccxyz = ccxy0;
- }
- if ( llTrans0yZ || llTransxy0 )
- {
- llxyZ = tt->getShadeBrightness( level, pX - 1, pY, pZ + 1 );
- ccxyZ = tt->getLightColor( level, pX - 1, pY, pZ + 1 );
- }
- else
- {
- llxyZ = llxy0;
- ccxyZ = ccxy0;
- }
- if ( llTrans0yz || llTransXy0 )
- {
- llXyz = tt->getShadeBrightness( level, pX + 1, pY, pZ - 1 );
- ccXyz = tt->getLightColor( level, pX + 1, pY, pZ - 1 );
- }
- else
- {
- llXyz = llXy0;
- ccXyz = ccXy0;
- }
- if ( llTrans0yZ || llTransXy0 )
- {
- llXyZ = tt->getShadeBrightness( level, pX + 1, pY, pZ + 1 );
- ccXyZ = tt->getLightColor( level, pX + 1, pY, pZ + 1 );
- }
- else
- {
- llXyZ = llXy0;
- ccXyZ = ccXy0;
- }
+ if (llTrans0Yz || llTransxY0) {
+ llxYz = tt->getShadeBrightness(level, pX - 1, pY, pZ - 1);
+ ccxYz = tt->getLightColor(level, pX - 1, pY, pZ - 1);
+ } else {
+ llxYz = llxY0;
+ ccxYz = ccxY0;
+ }
+ if (llTrans0Yz || llTransXY0) {
+ llXYz = tt->getShadeBrightness(level, pX + 1, pY, pZ - 1);
+ ccXYz = tt->getLightColor(level, pX + 1, pY, pZ - 1);
+ } else {
+ llXYz = llXY0;
+ ccXYz = ccXY0;
+ }
+ if (llTrans0YZ || llTransxY0) {
+ llxYZ = tt->getShadeBrightness(level, pX - 1, pY, pZ + 1);
+ ccxYZ = tt->getLightColor(level, pX - 1, pY, pZ + 1);
+ } else {
+ llxYZ = llxY0;
+ ccxYZ = ccxY0;
+ }
+ if (llTrans0YZ || llTransXY0) {
+ llXYZ = tt->getShadeBrightness(level, pX + 1, pY, pZ + 1);
+ ccXYZ = tt->getLightColor(level, pX + 1, pY, pZ + 1);
+ } else {
+ llXYZ = llXY0;
+ ccXYZ = ccXY0;
+ }
+ if (tileShapeY1 >= 1)
+ pY--; // 4J - condition brought forward from 1.2.3
- if ( tileShapeY0 <= 0 ) pY++; // 4J - condition brought forward from 1.2.3
- ll1 = ( llxyZ + llxy0 + ll0yZ + ll0y0 ) / 4.0f;
- ll4 = ( ll0yZ + ll0y0 + llXyZ + llXy0 ) / 4.0f;
- ll3 = ( ll0y0 + ll0yz + llXy0 + llXyz ) / 4.0f;
- ll2 = ( llxy0 + llxyz + ll0y0 + ll0yz ) / 4.0f;
+ ll4 = (llxYZ + llxY0 + ll0YZ + ll0Y0) / 4.0f;
+ ll1 = (ll0YZ + ll0Y0 + llXYZ + llXY0) / 4.0f;
+ ll2 = (ll0Y0 + ll0Yz + llXY0 + llXYz) / 4.0f;
+ ll3 = (llxY0 + llxYz + ll0Y0 + ll0Yz) / 4.0f;
- tc1 = blend( ccxyZ, ccxy0, cc0yZ, cc0y0 );
- tc4 = blend( cc0yZ, ccXyZ, ccXy0, cc0y0 );
- tc3 = blend( cc0yz, ccXy0, ccXyz, cc0y0 );
- tc2 = blend( ccxy0, ccxyz, cc0yz, cc0y0 );
- }
- else
- {
- ll1 = ll2 = ll3 = ll4 = ll0y0;
- tc1 = tc2 = tc3 = tc4 = ccxy0;
- }
- c1r = c2r = c3r = c4r = ( tint0 ? pBaseRed : 1.0f ) * 0.5f;
- c1g = c2g = c3g = c4g = ( tint0 ? pBaseGreen : 1.0f ) * 0.5f;
- c1b = c2b = c3b = c4b = ( tint0 ? pBaseBlue : 1.0f ) * 0.5f;
- c1r *= ll1;
- c1g *= ll1;
- c1b *= ll1;
- c2r *= ll2;
- c2g *= ll2;
- c2b *= ll2;
- c3r *= ll3;
- c3g *= ll3;
- c3b *= ll3;
- c4r *= ll4;
- c4g *= ll4;
- c4b *= ll4;
+ tc4 = blend(ccxYZ, ccxY0, cc0YZ, cc0Y0);
+ tc1 = blend(cc0YZ, ccXYZ, ccXY0, cc0Y0);
+ tc2 = blend(cc0Yz, ccXY0, ccXYz, cc0Y0);
+ tc3 = blend(ccxY0, ccxYz, cc0Yz, cc0Y0);
+ } else {
+ ll1 = ll2 = ll3 = ll4 = ll0Y0;
+ tc1 = tc2 = tc3 = tc4 = cc0Y0;
+ }
+ c1r = c2r = c3r = c4r = (tint1 ? pBaseRed : 1.0f);
+ c1g = c2g = c3g = c4g = (tint1 ? pBaseGreen : 1.0f);
+ c1b = c2b = c3b = c4b = (tint1 ? pBaseBlue : 1.0f);
+ c1r *= ll1;
+ c1g *= ll1;
+ c1b *= ll1;
+ c2r *= ll2;
+ c2g *= ll2;
+ c2b *= ll2;
+ c3r *= ll3;
+ c3g *= ll3;
+ c3b *= ll3;
+ c4r *= ll4;
+ c4g *= ll4;
+ c4b *= ll4;
- renderFaceDown( tt, ( float )pX, ( float )pY, ( float )pZ, getTexture( tt, level, pX, pY, pZ, 0 ) );
- }
- if ( faceFlags & 0x02 )
- {
- if ( blsmooth > 0 )
- {
- if ( tileShapeY1 >= 1 ) pY++; // 4J - condition brought forward from 1.2.3
+ renderFaceUp(tt, (float)pX, (float)pY, (float)pZ,
+ getTexture(tt, level, pX, pY, pZ, 1));
+ }
+ if (faceFlags & 0x04) {
+ if (blsmooth > 0) {
+ if (tileShapeZ0 <= 0)
+ pZ--; // 4J - condition brought forward from 1.2.3
+ llx0z = tt->getShadeBrightness(level, pX - 1, pY, pZ);
+ ll0yz = tt->getShadeBrightness(level, pX, pY - 1, pZ);
+ ll0Yz = tt->getShadeBrightness(level, pX, pY + 1, pZ);
+ llX0z = tt->getShadeBrightness(level, pX + 1, pY, pZ);
- ccxY0 = tt->getLightColor( level, pX - 1, pY, pZ );
- ccXY0 = tt->getLightColor( level, pX + 1, pY, pZ );
- cc0Yz = tt->getLightColor( level, pX, pY, pZ - 1 );
- cc0YZ = tt->getLightColor( level, pX, pY, pZ + 1 );
+ ccx0z = tt->getLightColor(level, pX - 1, pY, pZ);
+ cc0yz = tt->getLightColor(level, pX, pY - 1, pZ);
+ cc0Yz = tt->getLightColor(level, pX, pY + 1, pZ);
+ ccX0z = tt->getLightColor(level, pX + 1, pY, pZ);
- llxY0 = tt->getShadeBrightness( level, pX - 1, pY, pZ );
- llXY0 = tt->getShadeBrightness( level, pX + 1, pY, pZ );
- ll0Yz = tt->getShadeBrightness( level, pX, pY, pZ - 1 );
- ll0YZ = tt->getShadeBrightness( level, pX, pY, pZ + 1 );
-
- if ( llTrans0Yz || llTransxY0 )
- {
- llxYz = tt->getShadeBrightness( level, pX - 1, pY, pZ - 1 );
- ccxYz = tt->getLightColor( level, pX - 1, pY, pZ - 1 );
- }
- else
- {
- llxYz = llxY0;
- ccxYz = ccxY0;
- }
- if ( llTrans0Yz || llTransXY0 )
- {
- llXYz = tt->getShadeBrightness( level, pX + 1, pY, pZ - 1 );
- ccXYz = tt->getLightColor( level, pX + 1, pY, pZ - 1 );
- }
- else
- {
- llXYz = llXY0;
- ccXYz = ccXY0;
- }
- if ( llTrans0YZ || llTransxY0 )
- {
- llxYZ = tt->getShadeBrightness( level, pX - 1, pY, pZ + 1 );
- ccxYZ = tt->getLightColor( level, pX - 1, pY, pZ + 1 );
- }
- else
- {
- llxYZ = llxY0;
- ccxYZ = ccxY0;
- }
- if ( llTrans0YZ || llTransXY0 )
- {
- llXYZ = tt->getShadeBrightness( level, pX + 1, pY, pZ + 1 );
- ccXYZ = tt->getLightColor( level, pX + 1, pY, pZ + 1 );
- }
- else
- {
- llXYZ = llXY0;
- ccXYZ = ccXY0;
- }
- if ( tileShapeY1 >= 1 ) pY--; // 4J - condition brought forward from 1.2.3
-
- ll4 = ( llxYZ + llxY0 + ll0YZ + ll0Y0 ) / 4.0f;
- ll1 = ( ll0YZ + ll0Y0 + llXYZ + llXY0 ) / 4.0f;
- ll2 = ( ll0Y0 + ll0Yz + llXY0 + llXYz ) / 4.0f;
- ll3 = ( llxY0 + llxYz + ll0Y0 + ll0Yz ) / 4.0f;
-
- tc4 = blend( ccxYZ, ccxY0, cc0YZ, cc0Y0 );
- tc1 = blend( cc0YZ, ccXYZ, ccXY0, cc0Y0 );
- tc2 = blend( cc0Yz, ccXY0, ccXYz, cc0Y0 );
- tc3 = blend( ccxY0, ccxYz, cc0Yz, cc0Y0 );
- }
- else
- {
- ll1 = ll2 = ll3 = ll4 = ll0Y0;
- tc1 = tc2 = tc3 = tc4 = cc0Y0;
- }
- c1r = c2r = c3r = c4r = ( tint1 ? pBaseRed : 1.0f );
- c1g = c2g = c3g = c4g = ( tint1 ? pBaseGreen : 1.0f );
- c1b = c2b = c3b = c4b = ( tint1 ? pBaseBlue : 1.0f );
- c1r *= ll1;
- c1g *= ll1;
- c1b *= ll1;
- c2r *= ll2;
- c2g *= ll2;
- c2b *= ll2;
- c3r *= ll3;
- c3g *= ll3;
- c3b *= ll3;
- c4r *= ll4;
- c4g *= ll4;
- c4b *= ll4;
-
-
- renderFaceUp( tt, ( float )pX, ( float )pY, ( float )pZ, getTexture( tt, level, pX, pY, pZ, 1 ) );
- }
- if ( faceFlags & 0x04 )
- {
- if ( blsmooth > 0 )
- {
- if ( tileShapeZ0 <= 0 ) pZ--; // 4J - condition brought forward from 1.2.3
- llx0z = tt->getShadeBrightness( level, pX - 1, pY, pZ );
- ll0yz = tt->getShadeBrightness( level, pX, pY - 1, pZ );
- ll0Yz = tt->getShadeBrightness( level, pX, pY + 1, pZ );
- llX0z = tt->getShadeBrightness( level, pX + 1, pY, pZ );
-
- ccx0z = tt->getLightColor( level, pX - 1, pY, pZ );
- cc0yz = tt->getLightColor( level, pX, pY - 1, pZ );
- cc0Yz = tt->getLightColor( level, pX, pY + 1, pZ );
- ccX0z = tt->getLightColor( level, pX + 1, pY, pZ );
-
- if ( llTransx0z || llTrans0yz )
- {
- llxyz = tt->getShadeBrightness( level, pX - 1, pY - 1, pZ );
- ccxyz = tt->getLightColor( level, pX - 1, pY - 1, pZ );
- }
- else
- {
- llxyz = llx0z;
- ccxyz = ccx0z;
- }
- if ( llTransx0z || llTrans0Yz )
- {
- llxYz = tt->getShadeBrightness( level, pX - 1, pY + 1, pZ );
- ccxYz = tt->getLightColor( level, pX - 1, pY + 1, pZ );
- }
- else
- {
- llxYz = llx0z;
- ccxYz = ccx0z;
- }
- if ( llTransX0z || llTrans0yz )
- {
- llXyz = tt->getShadeBrightness( level, pX + 1, pY - 1, pZ );
- ccXyz = tt->getLightColor( level, pX + 1, pY - 1, pZ );
- }
- else
- {
- llXyz = llX0z;
- ccXyz = ccX0z;
- }
- if ( llTransX0z || llTrans0Yz )
- {
- llXYz = tt->getShadeBrightness( level, pX + 1, pY + 1, pZ );
- ccXYz = tt->getLightColor( level, pX + 1, pY + 1, pZ );
- }
- else
- {
- llXYz = llX0z;
- ccXYz = ccX0z;
- }
- if ( tileShapeZ0 <= 0 ) pZ++; // 4J - condition brought forward from 1.2.3
+ if (llTransx0z || llTrans0yz) {
+ llxyz = tt->getShadeBrightness(level, pX - 1, pY - 1, pZ);
+ ccxyz = tt->getLightColor(level, pX - 1, pY - 1, pZ);
+ } else {
+ llxyz = llx0z;
+ ccxyz = ccx0z;
+ }
+ if (llTransx0z || llTrans0Yz) {
+ llxYz = tt->getShadeBrightness(level, pX - 1, pY + 1, pZ);
+ ccxYz = tt->getLightColor(level, pX - 1, pY + 1, pZ);
+ } else {
+ llxYz = llx0z;
+ ccxYz = ccx0z;
+ }
+ if (llTransX0z || llTrans0yz) {
+ llXyz = tt->getShadeBrightness(level, pX + 1, pY - 1, pZ);
+ ccXyz = tt->getLightColor(level, pX + 1, pY - 1, pZ);
+ } else {
+ llXyz = llX0z;
+ ccXyz = ccX0z;
+ }
+ if (llTransX0z || llTrans0Yz) {
+ llXYz = tt->getShadeBrightness(level, pX + 1, pY + 1, pZ);
+ ccXYz = tt->getLightColor(level, pX + 1, pY + 1, pZ);
+ } else {
+ llXYz = llX0z;
+ ccXYz = ccX0z;
+ }
+ if (tileShapeZ0 <= 0)
+ pZ++; // 4J - condition brought forward from 1.2.3
#ifdef _XBOX
- #pragma message(__LOC__"ambientOcclusion NEEDS CHANGED FROM A BOOL ")
+#pragma message(__LOC__ "ambientOcclusion NEEDS CHANGED FROM A BOOL ")
#endif
- if (smoothShapeLighting && g_ambientOcclusionMax)//minecraft->options->ambientOcclusion >= Options::AO_MAX)
- {
- float _ll1 = (llx0z + llxYz + ll00z + ll0Yz) / 4.0f;
- float _ll2 = (ll00z + ll0Yz + llX0z + llXYz) / 4.0f;
- float _ll3 = (ll0yz + ll00z + llXyz + llX0z) / 4.0f;
- float _ll4 = (llxyz + llx0z + ll0yz + ll00z) / 4.0f;
- ll1 = (float) (_ll1 * tileShapeY1 * (1.0 - tileShapeX0) + _ll2 * tileShapeY0 * tileShapeX0 + _ll3 * (1.0 - tileShapeY1) * tileShapeX0 + _ll4 * (1.0 - tileShapeY1)
- * (1.0 - tileShapeX0));
- ll2 = (float) (_ll1 * tileShapeY1 * (1.0 - tileShapeX1) + _ll2 * tileShapeY1 * tileShapeX1 + _ll3 * (1.0 - tileShapeY1) * tileShapeX1 + _ll4 * (1.0 - tileShapeY1)
- * (1.0 - tileShapeX1));
- ll3 = (float) (_ll1 * tileShapeY0 * (1.0 - tileShapeX1) + _ll2 * tileShapeY0 * tileShapeX1 + _ll3 * (1.0 - tileShapeY0) * tileShapeX1 + _ll4 * (1.0 - tileShapeY0)
- * (1.0 - tileShapeX1));
- ll4 = (float) (_ll1 * tileShapeY0 * (1.0 - tileShapeX0) + _ll2 * tileShapeY0 * tileShapeX0 + _ll3 * (1.0 - tileShapeY0) * tileShapeX0 + _ll4 * (1.0 - tileShapeY0)
- * (1.0 - tileShapeX0));
+ if (smoothShapeLighting &&
+ g_ambientOcclusionMax) // minecraft->options->ambientOcclusion
+ // >= Options::AO_MAX)
+ {
+ float _ll1 = (llx0z + llxYz + ll00z + ll0Yz) / 4.0f;
+ float _ll2 = (ll00z + ll0Yz + llX0z + llXYz) / 4.0f;
+ float _ll3 = (ll0yz + ll00z + llXyz + llX0z) / 4.0f;
+ float _ll4 = (llxyz + llx0z + ll0yz + ll00z) / 4.0f;
+ ll1 = (float)(_ll1 * tileShapeY1 * (1.0 - tileShapeX0) +
+ _ll2 * tileShapeY0 * tileShapeX0 +
+ _ll3 * (1.0 - tileShapeY1) * tileShapeX0 +
+ _ll4 * (1.0 - tileShapeY1) * (1.0 - tileShapeX0));
+ ll2 = (float)(_ll1 * tileShapeY1 * (1.0 - tileShapeX1) +
+ _ll2 * tileShapeY1 * tileShapeX1 +
+ _ll3 * (1.0 - tileShapeY1) * tileShapeX1 +
+ _ll4 * (1.0 - tileShapeY1) * (1.0 - tileShapeX1));
+ ll3 = (float)(_ll1 * tileShapeY0 * (1.0 - tileShapeX1) +
+ _ll2 * tileShapeY0 * tileShapeX1 +
+ _ll3 * (1.0 - tileShapeY0) * tileShapeX1 +
+ _ll4 * (1.0 - tileShapeY0) * (1.0 - tileShapeX1));
+ ll4 = (float)(_ll1 * tileShapeY0 * (1.0 - tileShapeX0) +
+ _ll2 * tileShapeY0 * tileShapeX0 +
+ _ll3 * (1.0 - tileShapeY0) * tileShapeX0 +
+ _ll4 * (1.0 - tileShapeY0) * (1.0 - tileShapeX0));
- int _tc1 = blend(ccx0z, ccxYz, cc0Yz, cc00z);
- int _tc2 = blend(cc0Yz, ccX0z, ccXYz, cc00z);
- int _tc3 = blend(cc0yz, ccXyz, ccX0z, cc00z);
- int _tc4 = blend(ccxyz, ccx0z, cc0yz, cc00z);
- tc1 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY1 * (1.0 - tileShapeX0), tileShapeY1 * tileShapeX0, (1.0 - tileShapeY1) * tileShapeX0, (1.0 - tileShapeY1) * (1.0 - tileShapeX0));
- tc2 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY1 * (1.0 - tileShapeX1), tileShapeY1 * tileShapeX1, (1.0 - tileShapeY1) * tileShapeX1, (1.0 - tileShapeY1) * (1.0 - tileShapeX1));
- tc3 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY0 * (1.0 - tileShapeX1), tileShapeY0 * tileShapeX1, (1.0 - tileShapeY0) * tileShapeX1, (1.0 - tileShapeY0) * (1.0 - tileShapeX1));
- tc4 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY0 * (1.0 - tileShapeX0), tileShapeY0 * tileShapeX0, (1.0 - tileShapeY0) * tileShapeX0, (1.0 - tileShapeY0) * (1.0 - tileShapeX0));
- } else {
- ll1 = ( llx0z + llxYz + ll00z + ll0Yz ) / 4.0f;
- ll2 = ( ll00z + ll0Yz + llX0z + llXYz ) / 4.0f;
- ll3 = ( ll0yz + ll00z + llXyz + llX0z ) / 4.0f;
- ll4 = ( llxyz + llx0z + ll0yz + ll00z ) / 4.0f;
+ int _tc1 = blend(ccx0z, ccxYz, cc0Yz, cc00z);
+ int _tc2 = blend(cc0Yz, ccX0z, ccXYz, cc00z);
+ int _tc3 = blend(cc0yz, ccXyz, ccX0z, cc00z);
+ int _tc4 = blend(ccxyz, ccx0z, cc0yz, cc00z);
+ tc1 = blend(_tc1, _tc2, _tc3, _tc4,
+ tileShapeY1 * (1.0 - tileShapeX0),
+ tileShapeY1 * tileShapeX0,
+ (1.0 - tileShapeY1) * tileShapeX0,
+ (1.0 - tileShapeY1) * (1.0 - tileShapeX0));
+ tc2 = blend(_tc1, _tc2, _tc3, _tc4,
+ tileShapeY1 * (1.0 - tileShapeX1),
+ tileShapeY1 * tileShapeX1,
+ (1.0 - tileShapeY1) * tileShapeX1,
+ (1.0 - tileShapeY1) * (1.0 - tileShapeX1));
+ tc3 = blend(_tc1, _tc2, _tc3, _tc4,
+ tileShapeY0 * (1.0 - tileShapeX1),
+ tileShapeY0 * tileShapeX1,
+ (1.0 - tileShapeY0) * tileShapeX1,
+ (1.0 - tileShapeY0) * (1.0 - tileShapeX1));
+ tc4 = blend(_tc1, _tc2, _tc3, _tc4,
+ tileShapeY0 * (1.0 - tileShapeX0),
+ tileShapeY0 * tileShapeX0,
+ (1.0 - tileShapeY0) * tileShapeX0,
+ (1.0 - tileShapeY0) * (1.0 - tileShapeX0));
+ } else {
+ ll1 = (llx0z + llxYz + ll00z + ll0Yz) / 4.0f;
+ ll2 = (ll00z + ll0Yz + llX0z + llXYz) / 4.0f;
+ ll3 = (ll0yz + ll00z + llXyz + llX0z) / 4.0f;
+ ll4 = (llxyz + llx0z + ll0yz + ll00z) / 4.0f;
- tc1 = blend( ccx0z, ccxYz, cc0Yz, cc00z );
- tc2 = blend( cc0Yz, ccX0z, ccXYz, cc00z );
- tc3 = blend( cc0yz, ccXyz, ccX0z, cc00z );
- tc4 = blend( ccxyz, ccx0z, cc0yz, cc00z );
- }
- }
- else
- {
- ll1 = ll2 = ll3 = ll4 = ll00z;
- tc1 = tc2 = tc3 = tc4 = cc00z;
- }
- c1r = c2r = c3r = c4r = ( tint2 ? pBaseRed : 1.0f ) * 0.8f;
- c1g = c2g = c3g = c4g = ( tint2 ? pBaseGreen : 1.0f ) * 0.8f;
- c1b = c2b = c3b = c4b = ( tint2 ? pBaseBlue : 1.0f ) * 0.8f;
- c1r *= ll1;
- c1g *= ll1;
- c1b *= ll1;
- c2r *= ll2;
- c2g *= ll2;
- c2b *= ll2;
- c3r *= ll3;
- c3g *= ll3;
- c3b *= ll3;
- c4r *= ll4;
- c4g *= ll4;
- c4b *= ll4;
+ tc1 = blend(ccx0z, ccxYz, cc0Yz, cc00z);
+ tc2 = blend(cc0Yz, ccX0z, ccXYz, cc00z);
+ tc3 = blend(cc0yz, ccXyz, ccX0z, cc00z);
+ tc4 = blend(ccxyz, ccx0z, cc0yz, cc00z);
+ }
+ } else {
+ ll1 = ll2 = ll3 = ll4 = ll00z;
+ tc1 = tc2 = tc3 = tc4 = cc00z;
+ }
+ c1r = c2r = c3r = c4r = (tint2 ? pBaseRed : 1.0f) * 0.8f;
+ c1g = c2g = c3g = c4g = (tint2 ? pBaseGreen : 1.0f) * 0.8f;
+ c1b = c2b = c3b = c4b = (tint2 ? pBaseBlue : 1.0f) * 0.8f;
+ c1r *= ll1;
+ c1g *= ll1;
+ c1b *= ll1;
+ c2r *= ll2;
+ c2g *= ll2;
+ c2b *= ll2;
+ c3r *= ll3;
+ c3g *= ll3;
+ c3b *= ll3;
+ c4r *= ll4;
+ c4g *= ll4;
+ c4b *= ll4;
+ Icon_SPU* tex = getTexture(tt, level, pX, pY, pZ, 2);
+ renderNorth(tt, (float)pX, (float)pY, (float)pZ, tex);
- Icon_SPU *tex = getTexture(tt, level, pX, pY, pZ, 2);
- renderNorth( tt, ( float )pX, ( float )pY, ( float )pZ, tex );
+ if (fancy &&
+ (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] &&
+ !hasFixedTexture())) {
+ c1r *= pBaseRed;
+ c2r *= pBaseRed;
+ c3r *= pBaseRed;
+ c4r *= pBaseRed;
+ c1g *= pBaseGreen;
+ c2g *= pBaseGreen;
+ c3g *= pBaseGreen;
+ c4g *= pBaseGreen;
+ c1b *= pBaseBlue;
+ c2b *= pBaseBlue;
+ c3b *= pBaseBlue;
+ c4b *= pBaseBlue;
+ bool prev = t->setMipmapEnable(
+ false); // 4J added - this is rendering the little bit of grass
+ // at the top of the side of dirt, don't mipmap it
+ renderNorth(tt, (float)pX, (float)pY, (float)pZ,
+ GrassTile_SPU::getSideTextureOverlay());
+ t->setMipmapEnable(prev);
+ }
+ }
+ if (faceFlags & 0x08) {
+ if (blsmooth > 0) {
+ if (tileShapeZ1 >= 1)
+ pZ++; // 4J - condition brought forward from 1.2.3
- if ( fancy && (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] && !hasFixedTexture() ))
- {
- c1r *= pBaseRed;
- c2r *= pBaseRed;
- c3r *= pBaseRed;
- c4r *= pBaseRed;
- c1g *= pBaseGreen;
- c2g *= pBaseGreen;
- c3g *= pBaseGreen;
- c4g *= pBaseGreen;
- c1b *= pBaseBlue;
- c2b *= pBaseBlue;
- c3b *= pBaseBlue;
- c4b *= pBaseBlue;
- bool prev = t->setMipmapEnable( false ); // 4J added - this is rendering the little bit of grass at the top of the side of dirt, don't mipmap it
- renderNorth( tt, ( float )pX, ( float )pY, ( float )pZ, GrassTile_SPU::getSideTextureOverlay() );
- t->setMipmapEnable( prev );
- }
- }
- if ( faceFlags & 0x08 )
- {
- if ( blsmooth > 0 )
- {
- if ( tileShapeZ1 >= 1 ) pZ++; // 4J - condition brought forward from 1.2.3
+ llx0Z = tt->getShadeBrightness(level, pX - 1, pY, pZ);
+ llX0Z = tt->getShadeBrightness(level, pX + 1, pY, pZ);
+ ll0yZ = tt->getShadeBrightness(level, pX, pY - 1, pZ);
+ ll0YZ = tt->getShadeBrightness(level, pX, pY + 1, pZ);
- llx0Z = tt->getShadeBrightness( level, pX - 1, pY, pZ );
- llX0Z = tt->getShadeBrightness( level, pX + 1, pY, pZ );
- ll0yZ = tt->getShadeBrightness( level, pX, pY - 1, pZ );
- ll0YZ = tt->getShadeBrightness( level, pX, pY + 1, pZ );
+ ccx0Z = tt->getLightColor(level, pX - 1, pY, pZ);
+ ccX0Z = tt->getLightColor(level, pX + 1, pY, pZ);
+ cc0yZ = tt->getLightColor(level, pX, pY - 1, pZ);
+ cc0YZ = tt->getLightColor(level, pX, pY + 1, pZ);
- ccx0Z = tt->getLightColor( level, pX - 1, pY, pZ );
- ccX0Z = tt->getLightColor( level, pX + 1, pY, pZ );
- cc0yZ = tt->getLightColor( level, pX, pY - 1, pZ );
- cc0YZ = tt->getLightColor( level, pX, pY + 1, pZ );
+ if (llTransx0Z || llTrans0yZ) {
+ llxyZ = tt->getShadeBrightness(level, pX - 1, pY - 1, pZ);
+ ccxyZ = tt->getLightColor(level, pX - 1, pY - 1, pZ);
+ } else {
+ llxyZ = llx0Z;
+ ccxyZ = ccx0Z;
+ }
+ if (llTransx0Z || llTrans0YZ) {
+ llxYZ = tt->getShadeBrightness(level, pX - 1, pY + 1, pZ);
+ ccxYZ = tt->getLightColor(level, pX - 1, pY + 1, pZ);
+ } else {
+ llxYZ = llx0Z;
+ ccxYZ = ccx0Z;
+ }
+ if (llTransX0Z || llTrans0yZ) {
+ llXyZ = tt->getShadeBrightness(level, pX + 1, pY - 1, pZ);
+ ccXyZ = tt->getLightColor(level, pX + 1, pY - 1, pZ);
+ } else {
+ llXyZ = llX0Z;
+ ccXyZ = ccX0Z;
+ }
+ if (llTransX0Z || llTrans0YZ) {
+ llXYZ = tt->getShadeBrightness(level, pX + 1, pY + 1, pZ);
+ ccXYZ = tt->getLightColor(level, pX + 1, pY + 1, pZ);
+ } else {
+ llXYZ = llX0Z;
+ ccXYZ = ccX0Z;
+ }
+ if (tileShapeZ1 >= 1)
+ pZ--; // 4J - condition brought forward from 1.2.3
+ if (smoothShapeLighting &&
+ g_ambientOcclusionMax) // minecraft->options->ambientOcclusion
+ // >= Options::AO_MAX)
+ {
+ float _ll1 = (llx0Z + llxYZ + ll00Z + ll0YZ) / 4.0f;
+ float _ll4 = (ll00Z + ll0YZ + llX0Z + llXYZ) / 4.0f;
+ float _ll3 = (ll0yZ + ll00Z + llXyZ + llX0Z) / 4.0f;
+ float _ll2 = (llxyZ + llx0Z + ll0yZ + ll00Z) / 4.0f;
+ ll1 = (float)(_ll1 * tileShapeY1 * (1.0 - tileShapeX0) +
+ _ll4 * tileShapeY1 * tileShapeX0 +
+ _ll3 * (1.0 - tileShapeY1) * tileShapeX0 +
+ _ll2 * (1.0 - tileShapeY1) * (1.0 - tileShapeX0));
+ ll2 = (float)(_ll1 * tileShapeY0 * (1.0 - tileShapeX0) +
+ _ll4 * tileShapeY0 * tileShapeX0 +
+ _ll3 * (1.0 - tileShapeY0) * tileShapeX0 +
+ _ll2 * (1.0 - tileShapeY0) * (1.0 - tileShapeX0));
+ ll3 = (float)(_ll1 * tileShapeY0 * (1.0 - tileShapeX1) +
+ _ll4 * tileShapeY0 * tileShapeX1 +
+ _ll3 * (1.0 - tileShapeY0) * tileShapeX1 +
+ _ll2 * (1.0 - tileShapeY0) * (1.0 - tileShapeX1));
+ ll4 = (float)(_ll1 * tileShapeY1 * (1.0 - tileShapeX1) +
+ _ll4 * tileShapeY1 * tileShapeX1 +
+ _ll3 * (1.0 - tileShapeY1) * tileShapeX1 +
+ _ll2 * (1.0 - tileShapeY1) * (1.0 - tileShapeX1));
- if ( llTransx0Z || llTrans0yZ )
- {
- llxyZ = tt->getShadeBrightness( level, pX - 1, pY - 1, pZ );
- ccxyZ = tt->getLightColor( level, pX - 1, pY - 1, pZ );
- }
- else
- {
- llxyZ = llx0Z;
- ccxyZ = ccx0Z;
- }
- if ( llTransx0Z || llTrans0YZ )
- {
- llxYZ = tt->getShadeBrightness( level, pX - 1, pY + 1, pZ );
- ccxYZ = tt->getLightColor( level, pX - 1, pY + 1, pZ );
- }
- else
- {
- llxYZ = llx0Z;
- ccxYZ = ccx0Z;
- }
- if ( llTransX0Z || llTrans0yZ )
- {
- llXyZ = tt->getShadeBrightness( level, pX + 1, pY - 1, pZ );
- ccXyZ = tt->getLightColor( level, pX + 1, pY - 1, pZ );
- }
- else
- {
- llXyZ = llX0Z;
- ccXyZ = ccX0Z;
- }
- if ( llTransX0Z || llTrans0YZ )
- {
- llXYZ = tt->getShadeBrightness( level, pX + 1, pY + 1, pZ );
- ccXYZ = tt->getLightColor( level, pX + 1, pY + 1, pZ );
- }
- else
- {
- llXYZ = llX0Z;
- ccXYZ = ccX0Z;
- }
- if ( tileShapeZ1 >= 1 ) pZ--; // 4J - condition brought forward from 1.2.3
- if (smoothShapeLighting && g_ambientOcclusionMax)//minecraft->options->ambientOcclusion >= Options::AO_MAX)
- {
- float _ll1 = (llx0Z + llxYZ + ll00Z + ll0YZ) / 4.0f;
- float _ll4 = (ll00Z + ll0YZ + llX0Z + llXYZ) / 4.0f;
- float _ll3 = (ll0yZ + ll00Z + llXyZ + llX0Z) / 4.0f;
- float _ll2 = (llxyZ + llx0Z + ll0yZ + ll00Z) / 4.0f;
- ll1 = (float) (_ll1 * tileShapeY1 * (1.0 - tileShapeX0) + _ll4 * tileShapeY1 * tileShapeX0 + _ll3 * (1.0 - tileShapeY1) * tileShapeX0 + _ll2 * (1.0 - tileShapeY1)
- * (1.0 - tileShapeX0));
- ll2 = (float) (_ll1 * tileShapeY0 * (1.0 - tileShapeX0) + _ll4 * tileShapeY0 * tileShapeX0 + _ll3 * (1.0 - tileShapeY0) * tileShapeX0 + _ll2 * (1.0 - tileShapeY0)
- * (1.0 - tileShapeX0));
- ll3 = (float) (_ll1 * tileShapeY0 * (1.0 - tileShapeX1) + _ll4 * tileShapeY0 * tileShapeX1 + _ll3 * (1.0 - tileShapeY0) * tileShapeX1 + _ll2 * (1.0 - tileShapeY0)
- * (1.0 - tileShapeX1));
- ll4 = (float) (_ll1 * tileShapeY1 * (1.0 - tileShapeX1) + _ll4 * tileShapeY1 * tileShapeX1 + _ll3 * (1.0 - tileShapeY1) * tileShapeX1 + _ll2 * (1.0 - tileShapeY1)
- * (1.0 - tileShapeX1));
+ int _tc1 = blend(ccx0Z, ccxYZ, cc0YZ, cc00Z);
+ int _tc4 = blend(cc0YZ, ccX0Z, ccXYZ, cc00Z);
+ int _tc3 = blend(cc0yZ, ccXyZ, ccX0Z, cc00Z);
+ int _tc2 = blend(ccxyZ, ccx0Z, cc0yZ, cc00Z);
+ tc1 = blend(_tc1, _tc2, _tc3, _tc4,
+ tileShapeY1 * (1.0 - tileShapeX0),
+ (1.0 - tileShapeY1) * (1.0 - tileShapeX0),
+ (1.0 - tileShapeY1) * tileShapeX0,
+ tileShapeY1 * tileShapeX0);
+ tc2 = blend(_tc1, _tc2, _tc3, _tc4,
+ tileShapeY0 * (1.0 - tileShapeX0),
+ (1.0 - tileShapeY0) * (1.0 - tileShapeX0),
+ (1.0 - tileShapeY0) * tileShapeX0,
+ tileShapeY0 * tileShapeX0);
+ tc3 = blend(_tc1, _tc2, _tc3, _tc4,
+ tileShapeY0 * (1.0 - tileShapeX1),
+ (1.0 - tileShapeY0) * (1.0 - tileShapeX1),
+ (1.0 - tileShapeY0) * tileShapeX1,
+ tileShapeY0 * tileShapeX1);
+ tc4 = blend(_tc1, _tc2, _tc3, _tc4,
+ tileShapeY1 * (1.0 - tileShapeX1),
+ (1.0 - tileShapeY1) * (1.0 - tileShapeX1),
+ (1.0 - tileShapeY1) * tileShapeX1,
+ tileShapeY1 * tileShapeX1);
+ } else {
+ ll1 = (llx0Z + llxYZ + ll00Z + ll0YZ) / 4.0f;
+ ll4 = (ll00Z + ll0YZ + llX0Z + llXYZ) / 4.0f;
+ ll3 = (ll0yZ + ll00Z + llXyZ + llX0Z) / 4.0f;
+ ll2 = (llxyZ + llx0Z + ll0yZ + ll00Z) / 4.0f;
- int _tc1 = blend(ccx0Z, ccxYZ, cc0YZ, cc00Z);
- int _tc4 = blend(cc0YZ, ccX0Z, ccXYZ, cc00Z);
- int _tc3 = blend(cc0yZ, ccXyZ, ccX0Z, cc00Z);
- int _tc2 = blend(ccxyZ, ccx0Z, cc0yZ, cc00Z);
- tc1 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY1 * (1.0 - tileShapeX0), (1.0 - tileShapeY1) * (1.0 - tileShapeX0), (1.0 - tileShapeY1) * tileShapeX0, tileShapeY1 * tileShapeX0);
- tc2 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY0 * (1.0 - tileShapeX0), (1.0 - tileShapeY0) * (1.0 - tileShapeX0), (1.0 - tileShapeY0) * tileShapeX0, tileShapeY0 * tileShapeX0);
- tc3 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY0 * (1.0 - tileShapeX1), (1.0 - tileShapeY0) * (1.0 - tileShapeX1), (1.0 - tileShapeY0) * tileShapeX1, tileShapeY0 * tileShapeX1);
- tc4 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY1 * (1.0 - tileShapeX1), (1.0 - tileShapeY1) * (1.0 - tileShapeX1), (1.0 - tileShapeY1) * tileShapeX1, tileShapeY1 * tileShapeX1);
- }
- else
- {
- ll1 = ( llx0Z + llxYZ + ll00Z + ll0YZ ) / 4.0f;
- ll4 = ( ll00Z + ll0YZ + llX0Z + llXYZ ) / 4.0f;
- ll3 = ( ll0yZ + ll00Z + llXyZ + llX0Z ) / 4.0f;
- ll2 = ( llxyZ + llx0Z + ll0yZ + ll00Z ) / 4.0f;
+ tc1 = blend(ccx0Z, ccxYZ, cc0YZ, cc00Z);
+ tc4 = blend(cc0YZ, ccX0Z, ccXYZ, cc00Z);
+ tc3 = blend(cc0yZ, ccXyZ, ccX0Z, cc00Z);
+ tc2 = blend(ccxyZ, ccx0Z, cc0yZ, cc00Z);
+ }
+ } else {
+ ll1 = ll2 = ll3 = ll4 = ll00Z;
+ tc1 = tc2 = tc3 = tc4 = cc00Z;
+ }
+ c1r = c2r = c3r = c4r = (tint3 ? pBaseRed : 1.0f) * 0.8f;
+ c1g = c2g = c3g = c4g = (tint3 ? pBaseGreen : 1.0f) * 0.8f;
+ c1b = c2b = c3b = c4b = (tint3 ? pBaseBlue : 1.0f) * 0.8f;
+ c1r *= ll1;
+ c1g *= ll1;
+ c1b *= ll1;
+ c2r *= ll2;
+ c2g *= ll2;
+ c2b *= ll2;
+ c3r *= ll3;
+ c3g *= ll3;
+ c3b *= ll3;
+ c4r *= ll4;
+ c4g *= ll4;
+ c4b *= ll4;
+ Icon_SPU* tex = getTexture(tt, level, pX, pY, pZ, 3);
+ renderSouth(tt, (float)pX, (float)pY, (float)pZ,
+ getTexture(tt, level, pX, pY, pZ, 3));
- tc1 = blend( ccx0Z, ccxYZ, cc0YZ, cc00Z );
- tc4 = blend( cc0YZ, ccX0Z, ccXYZ, cc00Z );
- tc3 = blend( cc0yZ, ccXyZ, ccX0Z, cc00Z );
- tc2 = blend( ccxyZ, ccx0Z, cc0yZ, cc00Z );
- }
- }
- else
- {
- ll1 = ll2 = ll3 = ll4 = ll00Z;
- tc1 = tc2 = tc3 = tc4 = cc00Z;
- }
- c1r = c2r = c3r = c4r = ( tint3 ? pBaseRed : 1.0f ) * 0.8f;
- c1g = c2g = c3g = c4g = ( tint3 ? pBaseGreen : 1.0f ) * 0.8f;
- c1b = c2b = c3b = c4b = ( tint3 ? pBaseBlue : 1.0f ) * 0.8f;
- c1r *= ll1;
- c1g *= ll1;
- c1b *= ll1;
- c2r *= ll2;
- c2g *= ll2;
- c2b *= ll2;
- c3r *= ll3;
- c3g *= ll3;
- c3b *= ll3;
- c4r *= ll4;
- c4g *= ll4;
- c4b *= ll4;
- Icon_SPU *tex = getTexture(tt, level, pX, pY, pZ, 3);
- renderSouth( tt, ( float )pX, ( float )pY, ( float )pZ, getTexture(tt, level, pX, pY, pZ, 3 ) );
+ if (fancy &&
+ (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] &&
+ !hasFixedTexture())) {
+ c1r *= pBaseRed;
+ c2r *= pBaseRed;
+ c3r *= pBaseRed;
+ c4r *= pBaseRed;
+ c1g *= pBaseGreen;
+ c2g *= pBaseGreen;
+ c3g *= pBaseGreen;
+ c4g *= pBaseGreen;
+ c1b *= pBaseBlue;
+ c2b *= pBaseBlue;
+ c3b *= pBaseBlue;
+ c4b *= pBaseBlue;
+ bool prev = t->setMipmapEnable(
+ false); // 4J added - this is rendering the little bit of grass
+ // at the top of the side of dirt, don't mipmap it
+ renderSouth(tt, (float)pX, (float)pY, (float)pZ,
+ GrassTile_SPU::getSideTextureOverlay());
+ t->setMipmapEnable(prev);
+ }
+ }
+ if (faceFlags & 0x10) {
+ if (blsmooth > 0) {
+ if (tileShapeX0 <= 0)
+ pX--; // 4J - condition brought forward from 1.2.3
+ llxy0 = tt->getShadeBrightness(level, pX, pY - 1, pZ);
+ llx0z = tt->getShadeBrightness(level, pX, pY, pZ - 1);
+ llx0Z = tt->getShadeBrightness(level, pX, pY, pZ + 1);
+ llxY0 = tt->getShadeBrightness(level, pX, pY + 1, pZ);
- if ( fancy && (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] && !hasFixedTexture() ))
- {
- c1r *= pBaseRed;
- c2r *= pBaseRed;
- c3r *= pBaseRed;
- c4r *= pBaseRed;
- c1g *= pBaseGreen;
- c2g *= pBaseGreen;
- c3g *= pBaseGreen;
- c4g *= pBaseGreen;
- c1b *= pBaseBlue;
- c2b *= pBaseBlue;
- c3b *= pBaseBlue;
- c4b *= pBaseBlue;
- bool prev = t->setMipmapEnable( false ); // 4J added - this is rendering the little bit of grass at the top of the side of dirt, don't mipmap it
- renderSouth( tt, ( float )pX, ( float )pY, ( float )pZ, GrassTile_SPU::getSideTextureOverlay() );
- t->setMipmapEnable( prev );
- }
- }
- if ( faceFlags & 0x10 )
- {
- if ( blsmooth > 0 )
- {
- if ( tileShapeX0 <= 0 ) pX--; // 4J - condition brought forward from 1.2.3
- llxy0 = tt->getShadeBrightness( level, pX, pY - 1, pZ );
- llx0z = tt->getShadeBrightness( level, pX, pY, pZ - 1 );
- llx0Z = tt->getShadeBrightness( level, pX, pY, pZ + 1 );
- llxY0 = tt->getShadeBrightness( level, pX, pY + 1, pZ );
+ ccxy0 = tt->getLightColor(level, pX, pY - 1, pZ);
+ ccx0z = tt->getLightColor(level, pX, pY, pZ - 1);
+ ccx0Z = tt->getLightColor(level, pX, pY, pZ + 1);
+ ccxY0 = tt->getLightColor(level, pX, pY + 1, pZ);
- ccxy0 = tt->getLightColor( level, pX, pY - 1, pZ );
- ccx0z = tt->getLightColor( level, pX, pY, pZ - 1 );
- ccx0Z = tt->getLightColor( level, pX, pY, pZ + 1 );
- ccxY0 = tt->getLightColor( level, pX, pY + 1, pZ );
+ if (llTransx0z || llTransxy0) {
+ llxyz = tt->getShadeBrightness(level, pX, pY - 1, pZ - 1);
+ ccxyz = tt->getLightColor(level, pX, pY - 1, pZ - 1);
+ } else {
+ llxyz = llx0z;
+ ccxyz = ccx0z;
+ }
+ if (llTransx0Z || llTransxy0) {
+ llxyZ = tt->getShadeBrightness(level, pX, pY - 1, pZ + 1);
+ ccxyZ = tt->getLightColor(level, pX, pY - 1, pZ + 1);
+ } else {
+ llxyZ = llx0Z;
+ ccxyZ = ccx0Z;
+ }
+ if (llTransx0z || llTransxY0) {
+ llxYz = tt->getShadeBrightness(level, pX, pY + 1, pZ - 1);
+ ccxYz = tt->getLightColor(level, pX, pY + 1, pZ - 1);
+ } else {
+ llxYz = llx0z;
+ ccxYz = ccx0z;
+ }
+ if (llTransx0Z || llTransxY0) {
+ llxYZ = tt->getShadeBrightness(level, pX, pY + 1, pZ + 1);
+ ccxYZ = tt->getLightColor(level, pX, pY + 1, pZ + 1);
+ } else {
+ llxYZ = llx0Z;
+ ccxYZ = ccx0Z;
+ }
+ if (tileShapeX0 <= 0)
+ pX++; // 4J - condition brought forward from 1.2.3
+ if (smoothShapeLighting &&
+ g_ambientOcclusionMax) // minecraft->options->ambientOcclusion
+ // >= Options::AO_MAX)
+ {
+ float _ll4 = (llxy0 + llxyZ + llx00 + llx0Z) / 4.0f;
+ float _ll1 = (llx00 + llx0Z + llxY0 + llxYZ) / 4.0f;
+ float _ll2 = (llx0z + llx00 + llxYz + llxY0) / 4.0f;
+ float _ll3 = (llxyz + llxy0 + llx0z + llx00) / 4.0f;
+ ll1 = (float)(_ll1 * tileShapeY1 * tileShapeZ1 +
+ _ll2 * tileShapeY1 * (1.0 - tileShapeZ1) +
+ _ll3 * (1.0 - tileShapeY1) * (1.0 - tileShapeZ1) +
+ _ll4 * (1.0 - tileShapeY1) * tileShapeZ1);
+ ll2 = (float)(_ll1 * tileShapeY1 * tileShapeZ0 +
+ _ll2 * tileShapeY1 * (1.0 - tileShapeZ0) +
+ _ll3 * (1.0 - tileShapeY1) * (1.0 - tileShapeZ0) +
+ _ll4 * (1.0 - tileShapeY1) * tileShapeZ0);
+ ll3 = (float)(_ll1 * tileShapeY0 * tileShapeZ0 +
+ _ll2 * tileShapeY0 * (1.0 - tileShapeZ0) +
+ _ll3 * (1.0 - tileShapeY0) * (1.0 - tileShapeZ0) +
+ _ll4 * (1.0 - tileShapeY0) * tileShapeZ0);
+ ll4 = (float)(_ll1 * tileShapeY0 * tileShapeZ1 +
+ _ll2 * tileShapeY0 * (1.0 - tileShapeZ1) +
+ _ll3 * (1.0 - tileShapeY0) * (1.0 - tileShapeZ1) +
+ _ll4 * (1.0 - tileShapeY0) * tileShapeZ1);
- if ( llTransx0z || llTransxy0 )
- {
- llxyz = tt->getShadeBrightness( level, pX, pY - 1, pZ - 1 );
- ccxyz = tt->getLightColor( level, pX, pY - 1, pZ - 1 );
- }
- else
- {
- llxyz = llx0z;
- ccxyz = ccx0z;
- }
- if ( llTransx0Z || llTransxy0 )
- {
- llxyZ = tt->getShadeBrightness( level, pX, pY - 1, pZ + 1 );
- ccxyZ = tt->getLightColor( level, pX, pY - 1, pZ + 1 );
- }
- else
- {
- llxyZ = llx0Z;
- ccxyZ = ccx0Z;
- }
- if ( llTransx0z || llTransxY0 )
- {
- llxYz = tt->getShadeBrightness( level, pX, pY + 1, pZ - 1 );
- ccxYz = tt->getLightColor( level, pX, pY + 1, pZ - 1 );
- }
- else
- {
- llxYz = llx0z;
- ccxYz = ccx0z;
- }
- if ( llTransx0Z || llTransxY0 )
- {
- llxYZ = tt->getShadeBrightness( level, pX, pY + 1, pZ + 1 );
- ccxYZ = tt->getLightColor( level, pX, pY + 1, pZ + 1 );
- }
- else
- {
- llxYZ = llx0Z;
- ccxYZ = ccx0Z;
- }
- if ( tileShapeX0 <= 0 ) pX++; // 4J - condition brought forward from 1.2.3
- if (smoothShapeLighting && g_ambientOcclusionMax)//minecraft->options->ambientOcclusion >= Options::AO_MAX)
- {
- float _ll4 = (llxy0 + llxyZ + llx00 + llx0Z) / 4.0f;
- float _ll1 = (llx00 + llx0Z + llxY0 + llxYZ) / 4.0f;
- float _ll2 = (llx0z + llx00 + llxYz + llxY0) / 4.0f;
- float _ll3 = (llxyz + llxy0 + llx0z + llx00) / 4.0f;
- ll1 = (float) (_ll1 * tileShapeY1 * tileShapeZ1 + _ll2 * tileShapeY1 * (1.0 - tileShapeZ1) + _ll3 * (1.0 - tileShapeY1) * (1.0 - tileShapeZ1) + _ll4 * (1.0 - tileShapeY1)
- * tileShapeZ1);
- ll2 = (float) (_ll1 * tileShapeY1 * tileShapeZ0 + _ll2 * tileShapeY1 * (1.0 - tileShapeZ0) + _ll3 * (1.0 - tileShapeY1) * (1.0 - tileShapeZ0) + _ll4 * (1.0 - tileShapeY1)
- * tileShapeZ0);
- ll3 = (float) (_ll1 * tileShapeY0 * tileShapeZ0 + _ll2 * tileShapeY0 * (1.0 - tileShapeZ0) + _ll3 * (1.0 - tileShapeY0) * (1.0 - tileShapeZ0) + _ll4 * (1.0 - tileShapeY0)
- * tileShapeZ0);
- ll4 = (float) (_ll1 * tileShapeY0 * tileShapeZ1 + _ll2 * tileShapeY0 * (1.0 - tileShapeZ1) + _ll3 * (1.0 - tileShapeY0) * (1.0 - tileShapeZ1) + _ll4 * (1.0 - tileShapeY0)
- * tileShapeZ1);
+ int _tc4 = blend(ccxy0, ccxyZ, ccx0Z, ccx00);
+ int _tc1 = blend(ccx0Z, ccxY0, ccxYZ, ccx00);
+ int _tc2 = blend(ccx0z, ccxYz, ccxY0, ccx00);
+ int _tc3 = blend(ccxyz, ccxy0, ccx0z, ccx00);
+ tc1 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY1 * tileShapeZ1,
+ tileShapeY1 * (1.0 - tileShapeZ1),
+ (1.0 - tileShapeY1) * (1.0 - tileShapeZ1),
+ (1.0 - tileShapeY1) * tileShapeZ1);
+ tc2 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY1 * tileShapeZ0,
+ tileShapeY1 * (1.0 - tileShapeZ0),
+ (1.0 - tileShapeY1) * (1.0 - tileShapeZ0),
+ (1.0 - tileShapeY1) * tileShapeZ0);
+ tc3 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY0 * tileShapeZ0,
+ tileShapeY0 * (1.0 - tileShapeZ0),
+ (1.0 - tileShapeY0) * (1.0 - tileShapeZ0),
+ (1.0 - tileShapeY0) * tileShapeZ0);
+ tc4 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY0 * tileShapeZ1,
+ tileShapeY0 * (1.0 - tileShapeZ1),
+ (1.0 - tileShapeY0) * (1.0 - tileShapeZ1),
+ (1.0 - tileShapeY0) * tileShapeZ1);
+ } else {
+ ll4 = (llxy0 + llxyZ + llx00 + llx0Z) / 4.0f;
+ ll1 = (llx00 + llx0Z + llxY0 + llxYZ) / 4.0f;
+ ll2 = (llx0z + llx00 + llxYz + llxY0) / 4.0f;
+ ll3 = (llxyz + llxy0 + llx0z + llx00) / 4.0f;
- int _tc4 = blend(ccxy0, ccxyZ, ccx0Z, ccx00);
- int _tc1 = blend(ccx0Z, ccxY0, ccxYZ, ccx00);
- int _tc2 = blend(ccx0z, ccxYz, ccxY0, ccx00);
- int _tc3 = blend(ccxyz, ccxy0, ccx0z, ccx00);
- tc1 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY1 * tileShapeZ1, tileShapeY1 * (1.0 - tileShapeZ1), (1.0 - tileShapeY1) * (1.0 - tileShapeZ1), (1.0 - tileShapeY1) * tileShapeZ1);
- tc2 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY1 * tileShapeZ0, tileShapeY1 * (1.0 - tileShapeZ0), (1.0 - tileShapeY1) * (1.0 - tileShapeZ0), (1.0 - tileShapeY1) * tileShapeZ0);
- tc3 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY0 * tileShapeZ0, tileShapeY0 * (1.0 - tileShapeZ0), (1.0 - tileShapeY0) * (1.0 - tileShapeZ0), (1.0 - tileShapeY0) * tileShapeZ0);
- tc4 = blend(_tc1, _tc2, _tc3, _tc4, tileShapeY0 * tileShapeZ1, tileShapeY0 * (1.0 - tileShapeZ1), (1.0 - tileShapeY0) * (1.0 - tileShapeZ1), (1.0 - tileShapeY0) * tileShapeZ1);
- }
- else
- {
- ll4 = ( llxy0 + llxyZ + llx00 + llx0Z ) / 4.0f;
- ll1 = ( llx00 + llx0Z + llxY0 + llxYZ ) / 4.0f;
- ll2 = ( llx0z + llx00 + llxYz + llxY0 ) / 4.0f;
- ll3 = ( llxyz + llxy0 + llx0z + llx00 ) / 4.0f;
+ tc4 = blend(ccxy0, ccxyZ, ccx0Z, ccx00);
+ tc1 = blend(ccx0Z, ccxY0, ccxYZ, ccx00);
+ tc2 = blend(ccx0z, ccxYz, ccxY0, ccx00);
+ tc3 = blend(ccxyz, ccxy0, ccx0z, ccx00);
+ }
+ } else {
+ ll1 = ll2 = ll3 = ll4 = llx00;
+ tc1 = tc2 = tc3 = tc4 = ccx00;
+ }
+ c1r = c2r = c3r = c4r = (tint4 ? pBaseRed : 1.0f) * 0.6f;
+ c1g = c2g = c3g = c4g = (tint4 ? pBaseGreen : 1.0f) * 0.6f;
+ c1b = c2b = c3b = c4b = (tint4 ? pBaseBlue : 1.0f) * 0.6f;
+ c1r *= ll1;
+ c1g *= ll1;
+ c1b *= ll1;
+ c2r *= ll2;
+ c2g *= ll2;
+ c2b *= ll2;
+ c3r *= ll3;
+ c3g *= ll3;
+ c3b *= ll3;
+ c4r *= ll4;
+ c4g *= ll4;
+ c4b *= ll4;
+ Icon_SPU* tex = getTexture(tt, level, pX, pY, pZ, 4);
+ renderWest(tt, (float)pX, (float)pY, (float)pZ, tex);
- tc4 = blend( ccxy0, ccxyZ, ccx0Z, ccx00 );
- tc1 = blend( ccx0Z, ccxY0, ccxYZ, ccx00 );
- tc2 = blend( ccx0z, ccxYz, ccxY0, ccx00 );
- tc3 = blend( ccxyz, ccxy0, ccx0z, ccx00 );
- }
- }
- else
- {
- ll1 = ll2 = ll3 = ll4 = llx00;
- tc1 = tc2 = tc3 = tc4 = ccx00;
- }
- c1r = c2r = c3r = c4r = ( tint4 ? pBaseRed : 1.0f ) * 0.6f;
- c1g = c2g = c3g = c4g = ( tint4 ? pBaseGreen : 1.0f ) * 0.6f;
- c1b = c2b = c3b = c4b = ( tint4 ? pBaseBlue : 1.0f ) * 0.6f;
- c1r *= ll1;
- c1g *= ll1;
- c1b *= ll1;
- c2r *= ll2;
- c2g *= ll2;
- c2b *= ll2;
- c3r *= ll3;
- c3g *= ll3;
- c3b *= ll3;
- c4r *= ll4;
- c4g *= ll4;
- c4b *= ll4;
- Icon_SPU *tex = getTexture(tt, level, pX, pY, pZ, 4);
- renderWest( tt, ( float )pX, ( float )pY, ( float )pZ, tex );
+ if (fancy &&
+ (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] &&
+ !hasFixedTexture())) {
+ c1r *= pBaseRed;
+ c2r *= pBaseRed;
+ c3r *= pBaseRed;
+ c4r *= pBaseRed;
+ c1g *= pBaseGreen;
+ c2g *= pBaseGreen;
+ c3g *= pBaseGreen;
+ c4g *= pBaseGreen;
+ c1b *= pBaseBlue;
+ c2b *= pBaseBlue;
+ c3b *= pBaseBlue;
+ c4b *= pBaseBlue;
+ bool prev = t->setMipmapEnable(
+ false); // 4J added - this is rendering the little bit of grass
+ // at the top of the side of dirt, don't mipmap it
+ renderWest(tt, (float)pX, (float)pY, (float)pZ,
+ GrassTile_SPU::getSideTextureOverlay());
+ t->setMipmapEnable(prev);
+ }
+ }
+ if (faceFlags & 0x20) {
+ if (blsmooth > 0) {
+ if (tileShapeX1 >= 1)
+ pX++; // 4J - condition brought forward from 1.2.3
+ llXy0 = tt->getShadeBrightness(level, pX, pY - 1, pZ);
+ llX0z = tt->getShadeBrightness(level, pX, pY, pZ - 1);
+ llX0Z = tt->getShadeBrightness(level, pX, pY, pZ + 1);
+ llXY0 = tt->getShadeBrightness(level, pX, pY + 1, pZ);
- if ( fancy && (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] && !hasFixedTexture() ))
- {
- c1r *= pBaseRed;
- c2r *= pBaseRed;
- c3r *= pBaseRed;
- c4r *= pBaseRed;
- c1g *= pBaseGreen;
- c2g *= pBaseGreen;
- c3g *= pBaseGreen;
- c4g *= pBaseGreen;
- c1b *= pBaseBlue;
- c2b *= pBaseBlue;
- c3b *= pBaseBlue;
- c4b *= pBaseBlue;
- bool prev = t->setMipmapEnable( false ); // 4J added - this is rendering the little bit of grass at the top of the side of dirt, don't mipmap it
- renderWest( tt, ( float )pX, ( float )pY, ( float )pZ, GrassTile_SPU::getSideTextureOverlay() );
- t->setMipmapEnable( prev );
- }
- }
- if ( faceFlags & 0x20 )
- {
- if ( blsmooth > 0 )
- {
- if ( tileShapeX1 >= 1 ) pX++; // 4J - condition brought forward from 1.2.3
- llXy0 = tt->getShadeBrightness( level, pX, pY - 1, pZ );
- llX0z = tt->getShadeBrightness( level, pX, pY, pZ - 1 );
- llX0Z = tt->getShadeBrightness( level, pX, pY, pZ + 1 );
- llXY0 = tt->getShadeBrightness( level, pX, pY + 1, pZ );
+ ccXy0 = tt->getLightColor(level, pX, pY - 1, pZ);
+ ccX0z = tt->getLightColor(level, pX, pY, pZ - 1);
+ ccX0Z = tt->getLightColor(level, pX, pY, pZ + 1);
+ ccXY0 = tt->getLightColor(level, pX, pY + 1, pZ);
- ccXy0 = tt->getLightColor( level, pX, pY - 1, pZ );
- ccX0z = tt->getLightColor( level, pX, pY, pZ - 1 );
- ccX0Z = tt->getLightColor( level, pX, pY, pZ + 1 );
- ccXY0 = tt->getLightColor( level, pX, pY + 1, pZ );
+ if (llTransXy0 || llTransX0z) {
+ llXyz = tt->getShadeBrightness(level, pX, pY - 1, pZ - 1);
+ ccXyz = tt->getLightColor(level, pX, pY - 1, pZ - 1);
+ } else {
+ llXyz = llX0z;
+ ccXyz = ccX0z;
+ }
+ if (llTransXy0 || llTransX0Z) {
+ llXyZ = tt->getShadeBrightness(level, pX, pY - 1, pZ + 1);
+ ccXyZ = tt->getLightColor(level, pX, pY - 1, pZ + 1);
+ } else {
+ llXyZ = llX0Z;
+ ccXyZ = ccX0Z;
+ }
+ if (llTransXY0 || llTransX0z) {
+ llXYz = tt->getShadeBrightness(level, pX, pY + 1, pZ - 1);
+ ccXYz = tt->getLightColor(level, pX, pY + 1, pZ - 1);
+ } else {
+ llXYz = llX0z;
+ ccXYz = ccX0z;
+ }
+ if (llTransXY0 || llTransX0Z) {
+ llXYZ = tt->getShadeBrightness(level, pX, pY + 1, pZ + 1);
+ ccXYZ = tt->getLightColor(level, pX, pY + 1, pZ + 1);
+ } else {
+ llXYZ = llX0Z;
+ ccXYZ = ccX0Z;
+ }
+ if (tileShapeX1 >= 1)
+ pX--; // 4J - condition brought forward from 1.2.3
+ if (smoothShapeLighting &&
+ g_ambientOcclusionMax) // minecraft->options->ambientOcclusion
+ // >= Options::AO_MAX)
+ {
+ float _ll1 = (llXy0 + llXyZ + llX00 + llX0Z) / 4.0f;
+ float _ll2 = (llXyz + llXy0 + llX0z + llX00) / 4.0f;
+ float _ll3 = (llX0z + llX00 + llXYz + llXY0) / 4.0f;
+ float _ll4 = (llX00 + llX0Z + llXY0 + llXYZ) / 4.0f;
+ ll1 = (float)(_ll1 * (1.0 - tileShapeY0) * tileShapeZ1 +
+ _ll2 * (1.0 - tileShapeY0) * (1.0 - tileShapeZ1) +
+ _ll3 * tileShapeY0 * (1.0 - tileShapeZ1) +
+ _ll4 * tileShapeY0 * tileShapeZ1);
+ ll2 = (float)(_ll1 * (1.0 - tileShapeY0) * tileShapeZ0 +
+ _ll2 * (1.0 - tileShapeY0) * (1.0 - tileShapeZ0) +
+ _ll3 * tileShapeY0 * (1.0 - tileShapeZ0) +
+ _ll4 * tileShapeY0 * tileShapeZ0);
+ ll3 = (float)(_ll1 * (1.0 - tileShapeY1) * tileShapeZ0 +
+ _ll2 * (1.0 - tileShapeY1) * (1.0 - tileShapeZ0) +
+ _ll3 * tileShapeY1 * (1.0 - tileShapeZ0) +
+ _ll4 * tileShapeY1 * tileShapeZ0);
+ ll4 = (float)(_ll1 * (1.0 - tileShapeY1) * tileShapeZ1 +
+ _ll2 * (1.0 - tileShapeY1) * (1.0 - tileShapeZ1) +
+ _ll3 * tileShapeY1 * (1.0 - tileShapeZ1) +
+ _ll4 * tileShapeY1 * tileShapeZ1);
- if ( llTransXy0 || llTransX0z )
- {
- llXyz = tt->getShadeBrightness( level, pX, pY - 1, pZ - 1 );
- ccXyz = tt->getLightColor( level, pX, pY - 1, pZ - 1 );
- }
- else
- {
- llXyz = llX0z;
- ccXyz = ccX0z;
- }
- if ( llTransXy0 || llTransX0Z )
- {
- llXyZ = tt->getShadeBrightness( level, pX, pY - 1, pZ + 1 );
- ccXyZ = tt->getLightColor( level, pX, pY - 1, pZ + 1 );
- }
- else
- {
- llXyZ = llX0Z;
- ccXyZ = ccX0Z;
- }
- if ( llTransXY0 || llTransX0z )
- {
- llXYz = tt->getShadeBrightness( level, pX, pY + 1, pZ - 1 );
- ccXYz = tt->getLightColor( level, pX, pY + 1, pZ - 1 );
- }
- else
- {
- llXYz = llX0z;
- ccXYz = ccX0z;
- }
- if ( llTransXY0 || llTransX0Z )
- {
- llXYZ = tt->getShadeBrightness( level, pX, pY + 1, pZ + 1 );
- ccXYZ = tt->getLightColor( level, pX, pY + 1, pZ + 1 );
- }
- else
- {
- llXYZ = llX0Z;
- ccXYZ = ccX0Z;
- }
- if ( tileShapeX1 >= 1 ) pX--; // 4J - condition brought forward from 1.2.3
- if (smoothShapeLighting && g_ambientOcclusionMax)//minecraft->options->ambientOcclusion >= Options::AO_MAX)
- {
- float _ll1 = (llXy0 + llXyZ + llX00 + llX0Z) / 4.0f;
- float _ll2 = (llXyz + llXy0 + llX0z + llX00) / 4.0f;
- float _ll3 = (llX0z + llX00 + llXYz + llXY0) / 4.0f;
- float _ll4 = (llX00 + llX0Z + llXY0 + llXYZ) / 4.0f;
- ll1 = (float) (_ll1 * (1.0 - tileShapeY0) * tileShapeZ1 + _ll2 * (1.0 - tileShapeY0) * (1.0 - tileShapeZ1) + _ll3 * tileShapeY0 * (1.0 - tileShapeZ1) + _ll4 * tileShapeY0
- * tileShapeZ1);
- ll2 = (float) (_ll1 * (1.0 - tileShapeY0) * tileShapeZ0 + _ll2 * (1.0 - tileShapeY0) * (1.0 - tileShapeZ0) + _ll3 * tileShapeY0 * (1.0 - tileShapeZ0) + _ll4 * tileShapeY0
- * tileShapeZ0);
- ll3 = (float) (_ll1 * (1.0 - tileShapeY1) * tileShapeZ0 + _ll2 * (1.0 - tileShapeY1) * (1.0 - tileShapeZ0) + _ll3 * tileShapeY1 * (1.0 - tileShapeZ0) + _ll4 * tileShapeY1
- * tileShapeZ0);
- ll4 = (float) (_ll1 * (1.0 - tileShapeY1) * tileShapeZ1 + _ll2 * (1.0 - tileShapeY1) * (1.0 - tileShapeZ1) + _ll3 * tileShapeY1 * (1.0 - tileShapeZ1) + _ll4 * tileShapeY1
- * tileShapeZ1);
+ int _tc1 = blend(ccXy0, ccXyZ, ccX0Z, ccX00);
+ int _tc4 = blend(ccX0Z, ccXY0, ccXYZ, ccX00);
+ int _tc3 = blend(ccX0z, ccXYz, ccXY0, ccX00);
+ int _tc2 = blend(ccXyz, ccXy0, ccX0z, ccX00);
+ tc1 = blend(_tc1, _tc2, _tc3, _tc4,
+ (1.0 - tileShapeY0) * tileShapeZ1,
+ (1.0 - tileShapeY0) * (1.0 - tileShapeZ1),
+ tileShapeY0 * (1.0 - tileShapeZ1),
+ tileShapeY0 * tileShapeZ1);
+ tc2 = blend(_tc1, _tc2, _tc3, _tc4,
+ (1.0 - tileShapeY0) * tileShapeZ0,
+ (1.0 - tileShapeY0) * (1.0 - tileShapeZ0),
+ tileShapeY0 * (1.0 - tileShapeZ0),
+ tileShapeY0 * tileShapeZ0);
+ tc3 = blend(_tc1, _tc2, _tc3, _tc4,
+ (1.0 - tileShapeY1) * tileShapeZ0,
+ (1.0 - tileShapeY1) * (1.0 - tileShapeZ0),
+ tileShapeY1 * (1.0 - tileShapeZ0),
+ tileShapeY1 * tileShapeZ0);
+ tc4 = blend(_tc1, _tc2, _tc3, _tc4,
+ (1.0 - tileShapeY1) * tileShapeZ1,
+ (1.0 - tileShapeY1) * (1.0 - tileShapeZ1),
+ tileShapeY1 * (1.0 - tileShapeZ1),
+ tileShapeY1 * tileShapeZ1);
+ } else {
+ ll1 = (llXy0 + llXyZ + llX00 + llX0Z) / 4.0f;
+ ll2 = (llXyz + llXy0 + llX0z + llX00) / 4.0f;
+ ll3 = (llX0z + llX00 + llXYz + llXY0) / 4.0f;
+ ll4 = (llX00 + llX0Z + llXY0 + llXYZ) / 4.0f;
- int _tc1 = blend(ccXy0, ccXyZ, ccX0Z, ccX00);
- int _tc4 = blend(ccX0Z, ccXY0, ccXYZ, ccX00);
- int _tc3 = blend(ccX0z, ccXYz, ccXY0, ccX00);
- int _tc2 = blend(ccXyz, ccXy0, ccX0z, ccX00);
- tc1 = blend(_tc1, _tc2, _tc3, _tc4, (1.0 - tileShapeY0) * tileShapeZ1, (1.0 - tileShapeY0) * (1.0 - tileShapeZ1), tileShapeY0 * (1.0 - tileShapeZ1), tileShapeY0 * tileShapeZ1);
- tc2 = blend(_tc1, _tc2, _tc3, _tc4, (1.0 - tileShapeY0) * tileShapeZ0, (1.0 - tileShapeY0) * (1.0 - tileShapeZ0), tileShapeY0 * (1.0 - tileShapeZ0), tileShapeY0 * tileShapeZ0);
- tc3 = blend(_tc1, _tc2, _tc3, _tc4, (1.0 - tileShapeY1) * tileShapeZ0, (1.0 - tileShapeY1) * (1.0 - tileShapeZ0), tileShapeY1 * (1.0 - tileShapeZ0), tileShapeY1 * tileShapeZ0);
- tc4 = blend(_tc1, _tc2, _tc3, _tc4, (1.0 - tileShapeY1) * tileShapeZ1, (1.0 - tileShapeY1) * (1.0 - tileShapeZ1), tileShapeY1 * (1.0 - tileShapeZ1), tileShapeY1 * tileShapeZ1);
- }
- else
- {
- ll1 = (llXy0 + llXyZ + llX00 + llX0Z) / 4.0f;
- ll2 = (llXyz + llXy0 + llX0z + llX00) / 4.0f;
- ll3 = (llX0z + llX00 + llXYz + llXY0) / 4.0f;
- ll4 = (llX00 + llX0Z + llXY0 + llXYZ) / 4.0f;
+ tc1 = blend(ccXy0, ccXyZ, ccX0Z, ccX00);
+ tc4 = blend(ccX0Z, ccXY0, ccXYZ, ccX00);
+ tc3 = blend(ccX0z, ccXYz, ccXY0, ccX00);
+ tc2 = blend(ccXyz, ccXy0, ccX0z, ccX00);
+ }
+ } else {
+ ll1 = ll2 = ll3 = ll4 = llX00;
+ tc1 = tc2 = tc3 = tc4 = ccX00;
+ }
+ c1r = c2r = c3r = c4r = (tint5 ? pBaseRed : 1.0f) * 0.6f;
+ c1g = c2g = c3g = c4g = (tint5 ? pBaseGreen : 1.0f) * 0.6f;
+ c1b = c2b = c3b = c4b = (tint5 ? pBaseBlue : 1.0f) * 0.6f;
+ c1r *= ll1;
+ c1g *= ll1;
+ c1b *= ll1;
+ c2r *= ll2;
+ c2g *= ll2;
+ c2b *= ll2;
+ c3r *= ll3;
+ c3g *= ll3;
+ c3b *= ll3;
+ c4r *= ll4;
+ c4g *= ll4;
+ c4b *= ll4;
- tc1 = blend(ccXy0, ccXyZ, ccX0Z, ccX00);
- tc4 = blend(ccX0Z, ccXY0, ccXYZ, ccX00);
- tc3 = blend(ccX0z, ccXYz, ccXY0, ccX00);
- tc2 = blend(ccXyz, ccXy0, ccX0z, ccX00);
- }
- }
- else
- {
- ll1 = ll2 = ll3 = ll4 = llX00;
- tc1 = tc2 = tc3 = tc4 = ccX00;
- }
- c1r = c2r = c3r = c4r = ( tint5 ? pBaseRed : 1.0f ) * 0.6f;
- c1g = c2g = c3g = c4g = ( tint5 ? pBaseGreen : 1.0f ) * 0.6f;
- c1b = c2b = c3b = c4b = ( tint5 ? pBaseBlue : 1.0f ) * 0.6f;
- c1r *= ll1;
- c1g *= ll1;
- c1b *= ll1;
- c2r *= ll2;
- c2g *= ll2;
- c2b *= ll2;
- c3r *= ll3;
- c3g *= ll3;
- c3b *= ll3;
- c4r *= ll4;
- c4g *= ll4;
- c4b *= ll4;
+ Icon_SPU* tex = getTexture(tt, level, pX, pY, pZ, 5);
+ renderEast(tt, (float)pX, (float)pY, (float)pZ, tex);
+ if (fancy &&
+ (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] &&
+ !hasFixedTexture())) {
+ c1r *= pBaseRed;
+ c2r *= pBaseRed;
+ c3r *= pBaseRed;
+ c4r *= pBaseRed;
+ c1g *= pBaseGreen;
+ c2g *= pBaseGreen;
+ c3g *= pBaseGreen;
+ c4g *= pBaseGreen;
+ c1b *= pBaseBlue;
+ c2b *= pBaseBlue;
+ c3b *= pBaseBlue;
+ c4b *= pBaseBlue;
- Icon_SPU *tex = getTexture(tt, level, pX, pY, pZ, 5);
- renderEast( tt, ( float )pX, ( float )pY, ( float )pZ, tex );
- if ( fancy && (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] && !hasFixedTexture() ))
- {
- c1r *= pBaseRed;
- c2r *= pBaseRed;
- c3r *= pBaseRed;
- c4r *= pBaseRed;
- c1g *= pBaseGreen;
- c2g *= pBaseGreen;
- c3g *= pBaseGreen;
- c4g *= pBaseGreen;
- c1b *= pBaseBlue;
- c2b *= pBaseBlue;
- c3b *= pBaseBlue;
- c4b *= pBaseBlue;
-
- bool prev = t->setMipmapEnable( false ); // 4J added - this is rendering the little bit of grass at the top of the side of dirt, don't mipmap it
- renderEast( tt, ( float )pX, ( float )pY, ( float )pZ, GrassTile_SPU::getSideTextureOverlay() );
- t->setMipmapEnable( prev );
- }
- }
- applyAmbienceOcclusion = false;
-
- return true;
+ bool prev = t->setMipmapEnable(
+ false); // 4J added - this is rendering the little bit of grass
+ // at the top of the side of dirt, don't mipmap it
+ renderEast(tt, (float)pX, (float)pY, (float)pZ,
+ GrassTile_SPU::getSideTextureOverlay());
+ t->setMipmapEnable(prev);
+ }
+ }
+ applyAmbienceOcclusion = false;
+ return true;
}
-bool TileRenderer_SPU::tesselateBlockInWorldWithAmbienceOcclusionOldLighting( Tile_SPU* tt, int pX, int pY, int pZ,
- float pBaseRed, float pBaseGreen,
- float pBaseBlue )
-{
-//
-// // 4J - added these faceFlags so we can detect whether this block is going to have no visible faces and early out
-// // the original code checked noCulling and shouldRenderFace directly where faceFlags is used now
-// int faceFlags = 0;
-// if ( noCulling )
-// {
-// faceFlags = 0x3f;
-// }
-// else
-// {
-// faceFlags |= tt->shouldRenderFace( level, pX, pY - 1, pZ, 0 ) ? 0x01 : 0;
-// faceFlags |= tt->shouldRenderFace( level, pX, pY + 1, pZ, 1 ) ? 0x02 : 0;
-// faceFlags |= tt->shouldRenderFace( level, pX, pY, pZ - 1, 2 ) ? 0x04 : 0;
-// faceFlags |= tt->shouldRenderFace( level, pX, pY, pZ + 1, 3 ) ? 0x08 : 0;
-// faceFlags |= tt->shouldRenderFace( level, pX - 1, pY, pZ, 4 ) ? 0x10 : 0;
-// faceFlags |= tt->shouldRenderFace( level, pX + 1, pY, pZ, 5 ) ? 0x20 : 0;
-// }
-// if ( faceFlags == 0 )
-// {
-// return false;
-// }
-//
-// applyAmbienceOcclusion = true;
-// float ll1 = ll000;
-// float ll2 = ll000;
-// float ll3 = ll000;
-// float ll4 = ll000;
-// bool tint0 = true;
-// bool tint1 = true;
-// bool tint2 = true;
-// bool tint3 = true;
-// bool tint4 = true;
-// bool tint5 = true;
-//
-//
-// ll000 = tt->getBrightness( level, pX, pY, pZ );
-// llx00 = tt->getBrightness( level, pX - 1, pY, pZ );
-// ll0y0 = tt->getBrightness( level, pX, pY - 1, pZ );
-// ll00z = tt->getBrightness( level, pX, pY, pZ - 1 );
-// llX00 = tt->getBrightness( level, pX + 1, pY, pZ );
-// ll0Y0 = tt->getBrightness( level, pX, pY + 1, pZ );
-// ll00Z = tt->getBrightness( level, pX, pY, pZ + 1 );
-//
-// llTransXY0 = level->m_tileData.transculent[level->getTile( pX + 1, pY + 1, pZ )];
-// llTransXy0 = level->m_tileData.transculent[level->getTile( pX + 1, pY - 1, pZ )];
-// llTransX0Z = level->m_tileData.transculent[level->getTile( pX + 1, pY, pZ + 1 )];
-// llTransX0z = level->m_tileData.transculent[level->getTile( pX + 1, pY, pZ - 1 )];
-// llTransxY0 = level->m_tileData.transculent[level->getTile( pX - 1, pY + 1, pZ )];
-// llTransxy0 = level->m_tileData.transculent[level->getTile( pX - 1, pY - 1, pZ )];
-// llTransx0z = level->m_tileData.transculent[level->getTile( pX - 1, pY, pZ - 1 )];
-// llTransx0Z = level->m_tileData.transculent[level->getTile( pX - 1, pY, pZ + 1 )];
-// llTrans0YZ = level->m_tileData.transculent[level->getTile( pX, pY + 1, pZ + 1 )];
-// llTrans0Yz = level->m_tileData.transculent[level->getTile( pX, pY + 1, pZ - 1 )];
-// llTrans0yZ = level->m_tileData.transculent[level->getTile( pX, pY - 1, pZ + 1 )];
-// llTrans0yz = level->m_tileData.transculent[level->getTile( pX, pY - 1, pZ - 1 )];
-//
-// spu_print("Have to add texture name check here\n");
-// if ( getTexture(tt)->getName().compare(L"grass_top") == 0 ) tint0 = tint2 = tint3 = tint4 = tint5 = false;
-// if ( hasFixedTexture() ) tint0 = tint2 = tint3 = tint4 = tint5 = false;
-//
-// if ( faceFlags & 0x01 )
-// {
-// if ( blsmooth > 0 )
-// {
-// pY--;
-//
-// llxy0 = tt->getBrightness( level, pX - 1, pY, pZ );
-// ll0yz = tt->getBrightness( level, pX, pY, pZ - 1 );
-// ll0yZ = tt->getBrightness( level, pX, pY, pZ + 1 );
-// llXy0 = tt->getBrightness( level, pX + 1, pY, pZ );
-//
-// if ( llTrans0yz || llTransxy0 )
-// {
-// llxyz = tt->getBrightness( level, pX - 1, pY, pZ - 1 );
-// }
-// else
-// {
-// llxyz = llxy0;
-// }
-// if ( llTrans0yZ || llTransxy0 )
-// {
-// llxyZ = tt->getBrightness( level, pX - 1, pY, pZ + 1 );
-// }
-// else
-// {
-// llxyZ = llxy0;
-// }
-// if ( llTrans0yz || llTransXy0 )
-// {
-// llXyz = tt->getBrightness( level, pX + 1, pY, pZ - 1 );
-// }
-// else
-// {
-// llXyz = llXy0;
-// }
-// if ( llTrans0yZ || llTransXy0 )
-// {
-// llXyZ = tt->getBrightness( level, pX + 1, pY, pZ + 1 );
-// }
-// else
-// {
-// llXyZ = llXy0;
-// }
-//
-// pY++;
-// ll1 = ( llxyZ + llxy0 + ll0yZ + ll0y0 ) / 4.0f;
-// ll4 = ( ll0yZ + ll0y0 + llXyZ + llXy0 ) / 4.0f;
-// ll3 = ( ll0y0 + ll0yz + llXy0 + llXyz ) / 4.0f;
-// ll2 = ( llxy0 + llxyz + ll0y0 + ll0yz ) / 4.0f;
-// }
-// else
-// {
-// ll1 = ll2 = ll3 = ll4 = ll0y0;
-// }
-// c1r = c2r = c3r = c4r = ( tint0 ? pBaseRed : 1.0f ) * 0.5f;
-// c1g = c2g = c3g = c4g = ( tint0 ? pBaseGreen : 1.0f ) * 0.5f;
-// c1b = c2b = c3b = c4b = ( tint0 ? pBaseBlue : 1.0f ) * 0.5f;
-// c1r *= ll1;
-// c1g *= ll1;
-// c1b *= ll1;
-// c2r *= ll2;
-// c2g *= ll2;
-// c2b *= ll2;
-// c3r *= ll3;
-// c3g *= ll3;
-// c3b *= ll3;
-// c4r *= ll4;
-// c4g *= ll4;
-// c4b *= ll4;
-//
-// renderFaceDown( tt, ( float )pX, ( float )pY, ( float )pZ, getTexture( tt, level, pX, pY, pZ, 0 ) );
-// }
-// if ( faceFlags & 0x02 )
-// {
-// if ( blsmooth > 0 )
-// {
-// pY++;
-//
-// llxY0 = tt->getBrightness( level, pX - 1, pY, pZ );
-// llXY0 = tt->getBrightness( level, pX + 1, pY, pZ );
-// ll0Yz = tt->getBrightness( level, pX, pY, pZ - 1 );
-// ll0YZ = tt->getBrightness( level, pX, pY, pZ + 1 );
-//
-// if ( llTrans0Yz || llTransxY0 )
-// {
-// llxYz = tt->getBrightness( level, pX - 1, pY, pZ - 1 );
-// }
-// else
-// {
-// llxYz = llxY0;
-// }
-// if ( llTrans0Yz || llTransXY0 )
-// {
-// llXYz = tt->getBrightness( level, pX + 1, pY, pZ - 1 );
-// }
-// else
-// {
-// llXYz = llXY0;
-// }
-// if ( llTrans0YZ || llTransxY0 )
-// {
-// llxYZ = tt->getBrightness( level, pX - 1, pY, pZ + 1 );
-// }
-// else
-// {
-// llxYZ = llxY0;
-// }
-// if ( llTrans0YZ || llTransXY0 )
-// {
-// llXYZ = tt->getBrightness( level, pX + 1, pY, pZ + 1 );
-// }
-// else
-// {
-// llXYZ = llXY0;
-// }
-// pY--;
-//
-// ll4 = ( llxYZ + llxY0 + ll0YZ + ll0Y0 ) / 4.0f;
-// ll1 = ( ll0YZ + ll0Y0 + llXYZ + llXY0 ) / 4.0f;
-// ll2 = ( ll0Y0 + ll0Yz + llXY0 + llXYz ) / 4.0f;
-// ll3 = ( llxY0 + llxYz + ll0Y0 + ll0Yz ) / 4.0f;
-// }
-// else
-// {
-// ll1 = ll2 = ll3 = ll4 = ll0Y0;
-// }
-// c1r = c2r = c3r = c4r = ( tint1 ? pBaseRed : 1.0f );
-// c1g = c2g = c3g = c4g = ( tint1 ? pBaseGreen : 1.0f );
-// c1b = c2b = c3b = c4b = ( tint1 ? pBaseBlue : 1.0f );
-// c1r *= ll1;
-// c1g *= ll1;
-// c1b *= ll1;
-// c2r *= ll2;
-// c2g *= ll2;
-// c2b *= ll2;
-// c3r *= ll3;
-// c3g *= ll3;
-// c3b *= ll3;
-// c4r *= ll4;
-// c4g *= ll4;
-// c4b *= ll4;
-// renderFaceUp( tt, ( float )pX, ( float )pY, ( float )pZ, getTexture( tt, level, pX, pY, pZ, 1 ) );
-// }
-// if ( faceFlags & 0x04 )
-// {
-// if ( blsmooth > 0 )
-// {
-// pZ--;
-// llx0z = tt->getBrightness( level, pX - 1, pY, pZ );
-// ll0yz = tt->getBrightness( level, pX, pY - 1, pZ );
-// ll0Yz = tt->getBrightness( level, pX, pY + 1, pZ );
-// llX0z = tt->getBrightness( level, pX + 1, pY, pZ );
-//
-// if ( llTransx0z || llTrans0yz )
-// {
-// llxyz = tt->getBrightness( level, pX - 1, pY - 1, pZ );
-// }
-// else
-// {
-// llxyz = llx0z;
-// }
-// if ( llTransx0z || llTrans0Yz )
-// {
-// llxYz = tt->getBrightness( level, pX - 1, pY + 1, pZ );
-// }
-// else
-// {
-// llxYz = llx0z;
-// }
-// if ( llTransX0z || llTrans0yz )
-// {
-// llXyz = tt->getBrightness( level, pX + 1, pY - 1, pZ );
-// }
-// else
-// {
-// llXyz = llX0z;
-// }
-// if ( llTransX0z || llTrans0Yz )
-// {
-// llXYz = tt->getBrightness( level, pX + 1, pY + 1, pZ );
-// }
-// else
-// {
-// llXYz = llX0z;
-// }
-// pZ++;
-// ll1 = ( llx0z + llxYz + ll00z + ll0Yz ) / 4.0f;
-// ll2 = ( ll00z + ll0Yz + llX0z + llXYz ) / 4.0f;
-// ll3 = ( ll0yz + ll00z + llXyz + llX0z ) / 4.0f;
-// ll4 = ( llxyz + llx0z + ll0yz + ll00z ) / 4.0f;
-// }
-// else
-// {
-// ll1 = ll2 = ll3 = ll4 = ll00z;
-// }
-// c1r = c2r = c3r = c4r = ( tint2 ? pBaseRed : 1.0f ) * 0.8f;
-// c1g = c2g = c3g = c4g = ( tint2 ? pBaseGreen : 1.0f ) * 0.8f;
-// c1b = c2b = c3b = c4b = ( tint2 ? pBaseBlue : 1.0f ) * 0.8f;
-// c1r *= ll1;
-// c1g *= ll1;
-// c1b *= ll1;
-// c2r *= ll2;
-// c2g *= ll2;
-// c2b *= ll2;
-// c3r *= ll3;
-// c3g *= ll3;
-// c3b *= ll3;
-// c4r *= ll4;
-// c4g *= ll4;
-// c4b *= ll4;
-//
-// Icon_SPU *tex = getTexture(tt, level, pX, pY, pZ, 2);
-// renderNorth( tt, ( float )pX, ( float )pY, ( float )pZ, tex );
-//
-// if ( fancy && (tex->getName().compare(L"grass_side") == 0) && !hasFixedTexture())
-// {
-// c1r *= pBaseRed;
-// c2r *= pBaseRed;
-// c3r *= pBaseRed;
-// c4r *= pBaseRed;
-// c1g *= pBaseGreen;
-// c2g *= pBaseGreen;
-// c3g *= pBaseGreen;
-// c4g *= pBaseGreen;
-// c1b *= pBaseBlue;
-// c2b *= pBaseBlue;
-// c3b *= pBaseBlue;
-// c4b *= pBaseBlue;
-// renderNorth( tt, ( float )pX, ( float )pY, ( float )pZ, getGrassSideTextureOverlay() );
-// }
-// }
-// if ( faceFlags & 0x08 )
-// {
-// if ( blsmooth > 0 )
-// {
-// pZ++;
-//
-// llx0Z = tt->getBrightness( level, pX - 1, pY, pZ );
-// llX0Z = tt->getBrightness( level, pX + 1, pY, pZ );
-// ll0yZ = tt->getBrightness( level, pX, pY - 1, pZ );
-// ll0YZ = tt->getBrightness( level, pX, pY + 1, pZ );
-//
-// if ( llTransx0Z || llTrans0yZ )
-// {
-// llxyZ = tt->getBrightness( level, pX - 1, pY - 1, pZ );
-// }
-// else
-// {
-// llxyZ = llx0Z;
-// }
-// if ( llTransx0Z || llTrans0YZ )
-// {
-// llxYZ = tt->getBrightness( level, pX - 1, pY + 1, pZ );
-// }
-// else
-// {
-// llxYZ = llx0Z;
-// }
-// if ( llTransX0Z || llTrans0yZ )
-// {
-// llXyZ = tt->getBrightness( level, pX + 1, pY - 1, pZ );
-// }
-// else
-// {
-// llXyZ = llX0Z;
-// }
-// if ( llTransX0Z || llTrans0YZ )
-// {
-// llXYZ = tt->getBrightness( level, pX + 1, pY + 1, pZ );
-// }
-// else
-// {
-// llXYZ = llX0Z;
-// }
-// pZ--;
-// ll1 = ( llx0Z + llxYZ + ll00Z + ll0YZ ) / 4.0f;
-// ll4 = ( ll00Z + ll0YZ + llX0Z + llXYZ ) / 4.0f;
-// ll3 = ( ll0yZ + ll00Z + llXyZ + llX0Z ) / 4.0f;
-// ll2 = ( llxyZ + llx0Z + ll0yZ + ll00Z ) / 4.0f;
-// }
-// else
-// {
-// ll1 = ll2 = ll3 = ll4 = ll00Z;
-// }
-// c1r = c2r = c3r = c4r = ( tint3 ? pBaseRed : 1.0f ) * 0.8f;
-// c1g = c2g = c3g = c4g = ( tint3 ? pBaseGreen : 1.0f ) * 0.8f;
-// c1b = c2b = c3b = c4b = ( tint3 ? pBaseBlue : 1.0f ) * 0.8f;
-// c1r *= ll1;
-// c1g *= ll1;
-// c1b *= ll1;
-// c2r *= ll2;
-// c2g *= ll2;
-// c2b *= ll2;
-// c3r *= ll3;
-// c3g *= ll3;
-// c3b *= ll3;
-// c4r *= ll4;
-// c4g *= ll4;
-// c4b *= ll4;
-// Icon_SPU *tex = getTexture(tt, level, pX, pY, pZ, 3);
-// renderSouth( tt, ( float )pX, ( float )pY, ( float )pZ, getTexture(tt, level, pX, pY, pZ, 3 ) );
-// if ( fancy && (tex->getName().compare(L"grass_side") == 0) && !hasFixedTexture() )
-// {
-// c1r *= pBaseRed;
-// c2r *= pBaseRed;
-// c3r *= pBaseRed;
-// c4r *= pBaseRed;
-// c1g *= pBaseGreen;
-// c2g *= pBaseGreen;
-// c3g *= pBaseGreen;
-// c4g *= pBaseGreen;
-// c1b *= pBaseBlue;
-// c2b *= pBaseBlue;
-// c3b *= pBaseBlue;
-// c4b *= pBaseBlue;
-// renderSouth( tt, ( float )pX, ( float )pY, ( float )pZ, getGrassSideTextureOverlay() );
-// }
-// }
-// if ( faceFlags & 0x10 )
-// {
-// if ( blsmooth > 0 )
-// {
-// pX--;
-// llxy0 = tt->getBrightness( level, pX, pY - 1, pZ );
-// llx0z = tt->getBrightness( level, pX, pY, pZ - 1 );
-// llx0Z = tt->getBrightness( level, pX, pY, pZ + 1 );
-// llxY0 = tt->getBrightness( level, pX, pY + 1, pZ );
-//
-// if ( llTransx0z || llTransxy0 )
-// {
-// llxyz = tt->getBrightness( level, pX, pY - 1, pZ - 1 );
-// }
-// else
-// {
-// llxyz = llx0z;
-// }
-// if ( llTransx0Z || llTransxy0 )
-// {
-// llxyZ = tt->getBrightness( level, pX, pY - 1, pZ + 1 );
-// }
-// else
-// {
-// llxyZ = llx0Z;
-// }
-// if ( llTransx0z || llTransxY0 )
-// {
-// llxYz = tt->getBrightness( level, pX, pY + 1, pZ - 1 );
-// }
-// else
-// {
-// llxYz = llx0z;
-// }
-// if ( llTransx0Z || llTransxY0 )
-// {
-// llxYZ = tt->getBrightness( level, pX, pY + 1, pZ + 1 );
-// }
-// else
-// {
-// llxYZ = llx0Z;
-// }
-// pX++;
-// ll4 = ( llxy0 + llxyZ + llx00 + llx0Z ) / 4.0f;
-// ll1 = ( llx00 + llx0Z + llxY0 + llxYZ ) / 4.0f;
-// ll2 = ( llx0z + llx00 + llxYz + llxY0 ) / 4.0f;
-// ll3 = ( llxyz + llxy0 + llx0z + llx00 ) / 4.0f;
-// }
-// else
-// {
-// ll1 = ll2 = ll3 = ll4 = llx00;
-// }
-// c1r = c2r = c3r = c4r = ( tint4 ? pBaseRed : 1.0f ) * 0.6f;
-// c1g = c2g = c3g = c4g = ( tint4 ? pBaseGreen : 1.0f ) * 0.6f;
-// c1b = c2b = c3b = c4b = ( tint4 ? pBaseBlue : 1.0f ) * 0.6f;
-// c1r *= ll1;
-// c1g *= ll1;
-// c1b *= ll1;
-// c2r *= ll2;
-// c2g *= ll2;
-// c2b *= ll2;
-// c3r *= ll3;
-// c3g *= ll3;
-// c3b *= ll3;
-// c4r *= ll4;
-// c4g *= ll4;
-// c4b *= ll4;
-// Icon_SPU *tex = getTexture(tt, level, pX, pY, pZ, 4);
-// renderWest( tt, ( float )pX, ( float )pY, ( float )pZ, tex );
-// if ( fancy &&(tex->getName().compare(L"grass_side") == 0) && !hasFixedTexture() )
-// {
-// c1r *= pBaseRed;
-// c2r *= pBaseRed;
-// c3r *= pBaseRed;
-// c4r *= pBaseRed;
-// c1g *= pBaseGreen;
-// c2g *= pBaseGreen;
-// c3g *= pBaseGreen;
-// c4g *= pBaseGreen;
-// c1b *= pBaseBlue;
-// c2b *= pBaseBlue;
-// c3b *= pBaseBlue;
-// c4b *= pBaseBlue;
-// renderWest( tt, ( float )pX, ( float )pY, ( float )pZ, getGrassSideTextureOverlay() );
-// }
-// }
-// if ( faceFlags & 0x20 )
-// {
-// if ( blsmooth > 0 )
-// {
-// pX++;
-// llXy0 = tt->getBrightness( level, pX, pY - 1, pZ );
-// llX0z = tt->getBrightness( level, pX, pY, pZ - 1 );
-// llX0Z = tt->getBrightness( level, pX, pY, pZ + 1 );
-// llXY0 = tt->getBrightness( level, pX, pY + 1, pZ );
-//
-// if ( llTransXy0 || llTransX0z )
-// {
-// llXyz = tt->getBrightness( level, pX, pY - 1, pZ - 1 );
-// }
-// else
-// {
-// llXyz = llX0z;
-// }
-// if ( llTransXy0 || llTransX0Z )
-// {
-// llXyZ = tt->getBrightness( level, pX, pY - 1, pZ + 1 );
-// }
-// else
-// {
-// llXyZ = llX0Z;
-// }
-// if ( llTransXY0 || llTransX0z )
-// {
-// llXYz = tt->getBrightness( level, pX, pY + 1, pZ - 1 );
-// }
-// else
-// {
-// llXYz = llX0z;
-// }
-// if ( llTransXY0 || llTransX0Z )
-// {
-// llXYZ = tt->getBrightness( level, pX, pY + 1, pZ + 1 );
-// }
-// else
-// {
-// llXYZ = llX0Z;
-// }
-// pX--;
-// ll1 = ( llXy0 + llXyZ + llX00 + llX0Z ) / 4.0f;
-// ll4 = ( llX00 + llX0Z + llXY0 + llXYZ ) / 4.0f;
-// ll3 = ( llX0z + llX00 + llXYz + llXY0 ) / 4.0f;
-// ll2 = ( llXyz + llXy0 + llX0z + llX00 ) / 4.0f;
-// }
-// else
-// {
-// ll1 = ll2 = ll3 = ll4 = llX00;
-// }
-// c1r = c2r = c3r = c4r = ( tint5 ? pBaseRed : 1.0f ) * 0.6f;
-// c1g = c2g = c3g = c4g = ( tint5 ? pBaseGreen : 1.0f ) * 0.6f;
-// c1b = c2b = c3b = c4b = ( tint5 ? pBaseBlue : 1.0f ) * 0.6f;
-// c1r *= ll1;
-// c1g *= ll1;
-// c1b *= ll1;
-// c2r *= ll2;
-// c2g *= ll2;
-// c2b *= ll2;
-// c3r *= ll3;
-// c3g *= ll3;
-// c3b *= ll3;
-// c4r *= ll4;
-// c4g *= ll4;
-// c4b *= ll4;
-//
-// Icon_SPU *tex = getTexture(tt, level, pX, pY, pZ, 5);
-// renderEast( tt, ( float )pX, ( float )pY, ( float )pZ, tex );
-// if ( fancy && (tex->getName().compare(L"grass_side") == 0) && !hasFixedTexture() )
-// {
-// c1r *= pBaseRed;
-// c2r *= pBaseRed;
-// c3r *= pBaseRed;
-// c4r *= pBaseRed;
-// c1g *= pBaseGreen;
-// c2g *= pBaseGreen;
-// c3g *= pBaseGreen;
-// c4g *= pBaseGreen;
-// c1b *= pBaseBlue;
-// c2b *= pBaseBlue;
-// c3b *= pBaseBlue;
-// c4b *= pBaseBlue;
-// renderEast( tt, ( float )pX, ( float )pY, ( float )pZ, getGrassSideTextureOverlay() );
-// }
-// }
-// applyAmbienceOcclusion = false;
-//
- return true;
-
+bool TileRenderer_SPU::tesselateBlockInWorldWithAmbienceOcclusionOldLighting(
+ Tile_SPU* tt, int pX, int pY, int pZ, float pBaseRed, float pBaseGreen,
+ float pBaseBlue) {
+ //
+ // // 4J - added these faceFlags so we can detect whether this block is
+ // going to have no visible faces and early out
+ // // the original code checked noCulling and shouldRenderFace directly
+ // where faceFlags is used now int faceFlags = 0; if (
+ // noCulling )
+ // {
+ // faceFlags = 0x3f;
+ // }
+ // else
+ // {
+ // faceFlags |= tt->shouldRenderFace( level, pX, pY - 1, pZ, 0 ) ?
+ // 0x01 : 0; faceFlags |= tt->shouldRenderFace( level, pX, pY
+ // + 1, pZ, 1 ) ? 0x02 : 0; faceFlags |=
+ // tt->shouldRenderFace( level, pX, pY, pZ - 1, 2 ) ? 0x04 : 0;
+ // faceFlags |= tt->shouldRenderFace( level, pX, pY, pZ + 1, 3 ) ? 0x08 : 0;
+ // faceFlags |= tt->shouldRenderFace( level, pX - 1, pY, pZ, 4 ) ? 0x10 : 0;
+ // faceFlags |= tt->shouldRenderFace( level, pX + 1, pY, pZ, 5 ) ? 0x20 : 0;
+ // }
+ // if ( faceFlags == 0 )
+ // {
+ // return false;
+ // }
+ //
+ // applyAmbienceOcclusion = true;
+ // float ll1 = ll000;
+ // float ll2 = ll000;
+ // float ll3 = ll000;
+ // float ll4 = ll000;
+ // bool tint0 = true;
+ // bool tint1 = true;
+ // bool tint2 = true;
+ // bool tint3 = true;
+ // bool tint4 = true;
+ // bool tint5 = true;
+ //
+ //
+ // ll000 = tt->getBrightness( level, pX, pY, pZ );
+ // llx00 = tt->getBrightness( level, pX - 1, pY, pZ );
+ // ll0y0 = tt->getBrightness( level, pX, pY - 1, pZ );
+ // ll00z = tt->getBrightness( level, pX, pY, pZ - 1 );
+ // llX00 = tt->getBrightness( level, pX + 1, pY, pZ );
+ // ll0Y0 = tt->getBrightness( level, pX, pY + 1, pZ );
+ // ll00Z = tt->getBrightness( level, pX, pY, pZ + 1 );
+ //
+ // llTransXY0 = level->m_tileData.transculent[level->getTile( pX + 1, pY +
+ // 1, pZ )]; llTransXy0 =
+ // level->m_tileData.transculent[level->getTile( pX + 1, pY - 1, pZ )];
+ // llTransX0Z = level->m_tileData.transculent[level->getTile( pX + 1, pY, pZ
+ // + 1 )]; llTransX0z = level->m_tileData.transculent[level->getTile( pX +
+ // 1, pY, pZ - 1 )]; llTransxY0 =
+ // level->m_tileData.transculent[level->getTile( pX
+ // - 1, pY + 1, pZ )]; llTransxy0 =
+ // level->m_tileData.transculent[level->getTile( pX - 1, pY - 1, pZ )];
+ // llTransx0z = level->m_tileData.transculent[level->getTile( pX - 1, pY,
+ // pZ - 1 )]; llTransx0Z =
+ // level->m_tileData.transculent[level->getTile( pX
+ // - 1, pY, pZ + 1 )]; llTrans0YZ =
+ // level->m_tileData.transculent[level->getTile( pX, pY + 1, pZ + 1 )];
+ // llTrans0Yz = level->m_tileData.transculent[level->getTile( pX, pY + 1,
+ // pZ - 1 )]; llTrans0yZ =
+ // level->m_tileData.transculent[level->getTile( pX, pY - 1, pZ + 1 )];
+ // llTrans0yz = level->m_tileData.transculent[level->getTile( pX, pY - 1, pZ
+ // - 1 )];
+ //
+ // spu_print("Have to add texture name check here\n");
+ // if ( getTexture(tt)->getName().compare(L"grass_top") == 0 ) tint0 =
+ // tint2 = tint3 = tint4 = tint5 = false; if ( hasFixedTexture() ) tint0 =
+ // tint2 = tint3 = tint4 = tint5 = false;
+ //
+ // if ( faceFlags & 0x01 )
+ // {
+ // if ( blsmooth > 0 )
+ // {
+ // pY--;
+ //
+ // llxy0 = tt->getBrightness( level, pX - 1, pY, pZ );
+ // ll0yz = tt->getBrightness( level, pX, pY, pZ - 1 );
+ // ll0yZ = tt->getBrightness( level, pX, pY, pZ + 1 );
+ // llXy0 = tt->getBrightness( level, pX + 1, pY, pZ );
+ //
+ // if ( llTrans0yz || llTransxy0 )
+ // {
+ // llxyz = tt->getBrightness( level, pX - 1, pY, pZ
+ // - 1 );
+ // }
+ // else
+ // {
+ // llxyz = llxy0;
+ // }
+ // if ( llTrans0yZ || llTransxy0 )
+ // {
+ // llxyZ = tt->getBrightness( level, pX - 1, pY, pZ
+ // + 1 );
+ // }
+ // else
+ // {
+ // llxyZ = llxy0;
+ // }
+ // if ( llTrans0yz || llTransXy0 )
+ // {
+ // llXyz = tt->getBrightness( level, pX + 1, pY, pZ
+ // - 1 );
+ // }
+ // else
+ // {
+ // llXyz = llXy0;
+ // }
+ // if ( llTrans0yZ || llTransXy0 )
+ // {
+ // llXyZ = tt->getBrightness( level, pX + 1, pY, pZ
+ // + 1 );
+ // }
+ // else
+ // {
+ // llXyZ = llXy0;
+ // }
+ //
+ // pY++;
+ // ll1 = ( llxyZ + llxy0 + ll0yZ + ll0y0 ) / 4.0f;
+ // ll4 = ( ll0yZ + ll0y0 + llXyZ + llXy0 ) / 4.0f;
+ // ll3 = ( ll0y0 + ll0yz + llXy0 + llXyz ) / 4.0f;
+ // ll2 = ( llxy0 + llxyz + ll0y0 + ll0yz ) / 4.0f;
+ // }
+ // else
+ // {
+ // ll1 = ll2 = ll3 = ll4 = ll0y0;
+ // }
+ // c1r = c2r = c3r = c4r = ( tint0 ? pBaseRed : 1.0f ) * 0.5f;
+ // c1g = c2g = c3g = c4g = ( tint0 ? pBaseGreen : 1.0f ) * 0.5f;
+ // c1b = c2b = c3b = c4b = ( tint0 ? pBaseBlue : 1.0f ) * 0.5f;
+ // c1r *= ll1;
+ // c1g *= ll1;
+ // c1b *= ll1;
+ // c2r *= ll2;
+ // c2g *= ll2;
+ // c2b *= ll2;
+ // c3r *= ll3;
+ // c3g *= ll3;
+ // c3b *= ll3;
+ // c4r *= ll4;
+ // c4g *= ll4;
+ // c4b *= ll4;
+ //
+ // renderFaceDown( tt, ( float )pX, ( float )pY, ( float )pZ,
+ // getTexture( tt, level, pX, pY, pZ, 0 ) );
+ // }
+ // if ( faceFlags & 0x02 )
+ // {
+ // if ( blsmooth > 0 )
+ // {
+ // pY++;
+ //
+ // llxY0 = tt->getBrightness( level, pX - 1, pY, pZ );
+ // llXY0 = tt->getBrightness( level, pX + 1, pY, pZ );
+ // ll0Yz = tt->getBrightness( level, pX, pY, pZ - 1 );
+ // ll0YZ = tt->getBrightness( level, pX, pY, pZ + 1 );
+ //
+ // if ( llTrans0Yz || llTransxY0 )
+ // {
+ // llxYz = tt->getBrightness( level, pX - 1, pY, pZ
+ // - 1 );
+ // }
+ // else
+ // {
+ // llxYz = llxY0;
+ // }
+ // if ( llTrans0Yz || llTransXY0 )
+ // {
+ // llXYz = tt->getBrightness( level, pX + 1, pY, pZ
+ // - 1 );
+ // }
+ // else
+ // {
+ // llXYz = llXY0;
+ // }
+ // if ( llTrans0YZ || llTransxY0 )
+ // {
+ // llxYZ = tt->getBrightness( level, pX - 1, pY, pZ
+ // + 1 );
+ // }
+ // else
+ // {
+ // llxYZ = llxY0;
+ // }
+ // if ( llTrans0YZ || llTransXY0 )
+ // {
+ // llXYZ = tt->getBrightness( level, pX + 1, pY, pZ
+ // + 1 );
+ // }
+ // else
+ // {
+ // llXYZ = llXY0;
+ // }
+ // pY--;
+ //
+ // ll4 = ( llxYZ + llxY0 + ll0YZ + ll0Y0 ) / 4.0f;
+ // ll1 = ( ll0YZ + ll0Y0 + llXYZ + llXY0 ) / 4.0f;
+ // ll2 = ( ll0Y0 + ll0Yz + llXY0 + llXYz ) / 4.0f;
+ // ll3 = ( llxY0 + llxYz + ll0Y0 + ll0Yz ) / 4.0f;
+ // }
+ // else
+ // {
+ // ll1 = ll2 = ll3 = ll4 = ll0Y0;
+ // }
+ // c1r = c2r = c3r = c4r = ( tint1 ? pBaseRed : 1.0f );
+ // c1g = c2g = c3g = c4g = ( tint1 ? pBaseGreen : 1.0f );
+ // c1b = c2b = c3b = c4b = ( tint1 ? pBaseBlue : 1.0f );
+ // c1r *= ll1;
+ // c1g *= ll1;
+ // c1b *= ll1;
+ // c2r *= ll2;
+ // c2g *= ll2;
+ // c2b *= ll2;
+ // c3r *= ll3;
+ // c3g *= ll3;
+ // c3b *= ll3;
+ // c4r *= ll4;
+ // c4g *= ll4;
+ // c4b *= ll4;
+ // renderFaceUp( tt, ( float )pX, ( float )pY, ( float )pZ,
+ // getTexture( tt, level, pX, pY, pZ, 1 ) );
+ // }
+ // if ( faceFlags & 0x04 )
+ // {
+ // if ( blsmooth > 0 )
+ // {
+ // pZ--;
+ // llx0z = tt->getBrightness( level, pX - 1, pY, pZ );
+ // ll0yz = tt->getBrightness( level, pX, pY - 1, pZ );
+ // ll0Yz = tt->getBrightness( level, pX, pY + 1, pZ );
+ // llX0z = tt->getBrightness( level, pX + 1, pY, pZ );
+ //
+ // if ( llTransx0z || llTrans0yz )
+ // {
+ // llxyz = tt->getBrightness( level, pX - 1, pY -
+ // 1, pZ );
+ // }
+ // else
+ // {
+ // llxyz = llx0z;
+ // }
+ // if ( llTransx0z || llTrans0Yz )
+ // {
+ // llxYz = tt->getBrightness( level, pX - 1, pY +
+ // 1, pZ );
+ // }
+ // else
+ // {
+ // llxYz = llx0z;
+ // }
+ // if ( llTransX0z || llTrans0yz )
+ // {
+ // llXyz = tt->getBrightness( level, pX + 1, pY -
+ // 1, pZ );
+ // }
+ // else
+ // {
+ // llXyz = llX0z;
+ // }
+ // if ( llTransX0z || llTrans0Yz )
+ // {
+ // llXYz = tt->getBrightness( level, pX + 1, pY +
+ // 1, pZ );
+ // }
+ // else
+ // {
+ // llXYz = llX0z;
+ // }
+ // pZ++;
+ // ll1 = ( llx0z + llxYz + ll00z + ll0Yz ) / 4.0f;
+ // ll2 = ( ll00z + ll0Yz + llX0z + llXYz ) / 4.0f;
+ // ll3 = ( ll0yz + ll00z + llXyz + llX0z ) / 4.0f;
+ // ll4 = ( llxyz + llx0z + ll0yz + ll00z ) / 4.0f;
+ // }
+ // else
+ // {
+ // ll1 = ll2 = ll3 = ll4 = ll00z;
+ // }
+ // c1r = c2r = c3r = c4r = ( tint2 ? pBaseRed : 1.0f ) * 0.8f;
+ // c1g = c2g = c3g = c4g = ( tint2 ? pBaseGreen : 1.0f ) * 0.8f;
+ // c1b = c2b = c3b = c4b = ( tint2 ? pBaseBlue : 1.0f ) * 0.8f;
+ // c1r *= ll1;
+ // c1g *= ll1;
+ // c1b *= ll1;
+ // c2r *= ll2;
+ // c2g *= ll2;
+ // c2b *= ll2;
+ // c3r *= ll3;
+ // c3g *= ll3;
+ // c3b *= ll3;
+ // c4r *= ll4;
+ // c4g *= ll4;
+ // c4b *= ll4;
+ //
+ // Icon_SPU *tex = getTexture(tt, level, pX, pY, pZ, 2);
+ // renderNorth( tt, ( float )pX, ( float )pY, ( float )pZ, tex );
+ //
+ // if ( fancy && (tex->getName().compare(L"grass_side") == 0) &&
+ // !hasFixedTexture())
+ // {
+ // c1r *= pBaseRed;
+ // c2r *= pBaseRed;
+ // c3r *= pBaseRed;
+ // c4r *= pBaseRed;
+ // c1g *= pBaseGreen;
+ // c2g *= pBaseGreen;
+ // c3g *= pBaseGreen;
+ // c4g *= pBaseGreen;
+ // c1b *= pBaseBlue;
+ // c2b *= pBaseBlue;
+ // c3b *= pBaseBlue;
+ // c4b *= pBaseBlue;
+ // renderNorth( tt, ( float )pX, ( float )pY, ( float )pZ,
+ // getGrassSideTextureOverlay() );
+ // }
+ // }
+ // if ( faceFlags & 0x08 )
+ // {
+ // if ( blsmooth > 0 )
+ // {
+ // pZ++;
+ //
+ // llx0Z = tt->getBrightness( level, pX - 1, pY, pZ );
+ // llX0Z = tt->getBrightness( level, pX + 1, pY, pZ );
+ // ll0yZ = tt->getBrightness( level, pX, pY - 1, pZ );
+ // ll0YZ = tt->getBrightness( level, pX, pY + 1, pZ );
+ //
+ // if ( llTransx0Z || llTrans0yZ )
+ // {
+ // llxyZ = tt->getBrightness( level, pX - 1, pY -
+ // 1, pZ );
+ // }
+ // else
+ // {
+ // llxyZ = llx0Z;
+ // }
+ // if ( llTransx0Z || llTrans0YZ )
+ // {
+ // llxYZ = tt->getBrightness( level, pX - 1, pY +
+ // 1, pZ );
+ // }
+ // else
+ // {
+ // llxYZ = llx0Z;
+ // }
+ // if ( llTransX0Z || llTrans0yZ )
+ // {
+ // llXyZ = tt->getBrightness( level, pX + 1, pY -
+ // 1, pZ );
+ // }
+ // else
+ // {
+ // llXyZ = llX0Z;
+ // }
+ // if ( llTransX0Z || llTrans0YZ )
+ // {
+ // llXYZ = tt->getBrightness( level, pX + 1, pY +
+ // 1, pZ );
+ // }
+ // else
+ // {
+ // llXYZ = llX0Z;
+ // }
+ // pZ--;
+ // ll1 = ( llx0Z + llxYZ + ll00Z + ll0YZ ) / 4.0f;
+ // ll4 = ( ll00Z + ll0YZ + llX0Z + llXYZ ) / 4.0f;
+ // ll3 = ( ll0yZ + ll00Z + llXyZ + llX0Z ) / 4.0f;
+ // ll2 = ( llxyZ + llx0Z + ll0yZ + ll00Z ) / 4.0f;
+ // }
+ // else
+ // {
+ // ll1 = ll2 = ll3 = ll4 = ll00Z;
+ // }
+ // c1r = c2r = c3r = c4r = ( tint3 ? pBaseRed : 1.0f ) * 0.8f;
+ // c1g = c2g = c3g = c4g = ( tint3 ? pBaseGreen : 1.0f ) * 0.8f;
+ // c1b = c2b = c3b = c4b = ( tint3 ? pBaseBlue : 1.0f ) * 0.8f;
+ // c1r *= ll1;
+ // c1g *= ll1;
+ // c1b *= ll1;
+ // c2r *= ll2;
+ // c2g *= ll2;
+ // c2b *= ll2;
+ // c3r *= ll3;
+ // c3g *= ll3;
+ // c3b *= ll3;
+ // c4r *= ll4;
+ // c4g *= ll4;
+ // c4b *= ll4;
+ // Icon_SPU *tex = getTexture(tt, level, pX, pY, pZ, 3);
+ // renderSouth( tt, ( float )pX, ( float )pY, ( float )pZ,
+ // getTexture(tt, level, pX, pY, pZ, 3 ) ); if ( fancy &&
+ // (tex->getName().compare(L"grass_side") == 0) && !hasFixedTexture() )
+ // {
+ // c1r *= pBaseRed;
+ // c2r *= pBaseRed;
+ // c3r *= pBaseRed;
+ // c4r *= pBaseRed;
+ // c1g *= pBaseGreen;
+ // c2g *= pBaseGreen;
+ // c3g *= pBaseGreen;
+ // c4g *= pBaseGreen;
+ // c1b *= pBaseBlue;
+ // c2b *= pBaseBlue;
+ // c3b *= pBaseBlue;
+ // c4b *= pBaseBlue;
+ // renderSouth( tt, ( float )pX, ( float )pY, ( float )pZ,
+ // getGrassSideTextureOverlay() );
+ // }
+ // }
+ // if ( faceFlags & 0x10 )
+ // {
+ // if ( blsmooth > 0 )
+ // {
+ // pX--;
+ // llxy0 = tt->getBrightness( level, pX, pY - 1, pZ );
+ // llx0z = tt->getBrightness( level, pX, pY, pZ - 1 );
+ // llx0Z = tt->getBrightness( level, pX, pY, pZ + 1 );
+ // llxY0 = tt->getBrightness( level, pX, pY + 1, pZ );
+ //
+ // if ( llTransx0z || llTransxy0 )
+ // {
+ // llxyz = tt->getBrightness( level, pX, pY - 1, pZ
+ // - 1 );
+ // }
+ // else
+ // {
+ // llxyz = llx0z;
+ // }
+ // if ( llTransx0Z || llTransxy0 )
+ // {
+ // llxyZ = tt->getBrightness( level, pX, pY - 1, pZ
+ // + 1 );
+ // }
+ // else
+ // {
+ // llxyZ = llx0Z;
+ // }
+ // if ( llTransx0z || llTransxY0 )
+ // {
+ // llxYz = tt->getBrightness( level, pX, pY + 1, pZ
+ // - 1 );
+ // }
+ // else
+ // {
+ // llxYz = llx0z;
+ // }
+ // if ( llTransx0Z || llTransxY0 )
+ // {
+ // llxYZ = tt->getBrightness( level, pX, pY + 1, pZ
+ // + 1 );
+ // }
+ // else
+ // {
+ // llxYZ = llx0Z;
+ // }
+ // pX++;
+ // ll4 = ( llxy0 + llxyZ + llx00 + llx0Z ) / 4.0f;
+ // ll1 = ( llx00 + llx0Z + llxY0 + llxYZ ) / 4.0f;
+ // ll2 = ( llx0z + llx00 + llxYz + llxY0 ) / 4.0f;
+ // ll3 = ( llxyz + llxy0 + llx0z + llx00 ) / 4.0f;
+ // }
+ // else
+ // {
+ // ll1 = ll2 = ll3 = ll4 = llx00;
+ // }
+ // c1r = c2r = c3r = c4r = ( tint4 ? pBaseRed : 1.0f ) * 0.6f;
+ // c1g = c2g = c3g = c4g = ( tint4 ? pBaseGreen : 1.0f ) * 0.6f;
+ // c1b = c2b = c3b = c4b = ( tint4 ? pBaseBlue : 1.0f ) * 0.6f;
+ // c1r *= ll1;
+ // c1g *= ll1;
+ // c1b *= ll1;
+ // c2r *= ll2;
+ // c2g *= ll2;
+ // c2b *= ll2;
+ // c3r *= ll3;
+ // c3g *= ll3;
+ // c3b *= ll3;
+ // c4r *= ll4;
+ // c4g *= ll4;
+ // c4b *= ll4;
+ // Icon_SPU *tex = getTexture(tt, level, pX, pY, pZ, 4);
+ // renderWest( tt, ( float )pX, ( float )pY, ( float )pZ, tex );
+ // if ( fancy &&(tex->getName().compare(L"grass_side") == 0) &&
+ // !hasFixedTexture() )
+ // {
+ // c1r *= pBaseRed;
+ // c2r *= pBaseRed;
+ // c3r *= pBaseRed;
+ // c4r *= pBaseRed;
+ // c1g *= pBaseGreen;
+ // c2g *= pBaseGreen;
+ // c3g *= pBaseGreen;
+ // c4g *= pBaseGreen;
+ // c1b *= pBaseBlue;
+ // c2b *= pBaseBlue;
+ // c3b *= pBaseBlue;
+ // c4b *= pBaseBlue;
+ // renderWest( tt, ( float )pX, ( float )pY, ( float )pZ,
+ // getGrassSideTextureOverlay() );
+ // }
+ // }
+ // if ( faceFlags & 0x20 )
+ // {
+ // if ( blsmooth > 0 )
+ // {
+ // pX++;
+ // llXy0 = tt->getBrightness( level, pX, pY - 1, pZ );
+ // llX0z = tt->getBrightness( level, pX, pY, pZ - 1 );
+ // llX0Z = tt->getBrightness( level, pX, pY, pZ + 1 );
+ // llXY0 = tt->getBrightness( level, pX, pY + 1, pZ );
+ //
+ // if ( llTransXy0 || llTransX0z )
+ // {
+ // llXyz = tt->getBrightness( level, pX, pY - 1, pZ
+ // - 1 );
+ // }
+ // else
+ // {
+ // llXyz = llX0z;
+ // }
+ // if ( llTransXy0 || llTransX0Z )
+ // {
+ // llXyZ = tt->getBrightness( level, pX, pY - 1, pZ
+ // + 1 );
+ // }
+ // else
+ // {
+ // llXyZ = llX0Z;
+ // }
+ // if ( llTransXY0 || llTransX0z )
+ // {
+ // llXYz = tt->getBrightness( level, pX, pY + 1, pZ
+ // - 1 );
+ // }
+ // else
+ // {
+ // llXYz = llX0z;
+ // }
+ // if ( llTransXY0 || llTransX0Z )
+ // {
+ // llXYZ = tt->getBrightness( level, pX, pY + 1, pZ
+ // + 1 );
+ // }
+ // else
+ // {
+ // llXYZ = llX0Z;
+ // }
+ // pX--;
+ // ll1 = ( llXy0 + llXyZ + llX00 + llX0Z ) / 4.0f;
+ // ll4 = ( llX00 + llX0Z + llXY0 + llXYZ ) / 4.0f;
+ // ll3 = ( llX0z + llX00 + llXYz + llXY0 ) / 4.0f;
+ // ll2 = ( llXyz + llXy0 + llX0z + llX00 ) / 4.0f;
+ // }
+ // else
+ // {
+ // ll1 = ll2 = ll3 = ll4 = llX00;
+ // }
+ // c1r = c2r = c3r = c4r = ( tint5 ? pBaseRed : 1.0f ) * 0.6f;
+ // c1g = c2g = c3g = c4g = ( tint5 ? pBaseGreen : 1.0f ) * 0.6f;
+ // c1b = c2b = c3b = c4b = ( tint5 ? pBaseBlue : 1.0f ) * 0.6f;
+ // c1r *= ll1;
+ // c1g *= ll1;
+ // c1b *= ll1;
+ // c2r *= ll2;
+ // c2g *= ll2;
+ // c2b *= ll2;
+ // c3r *= ll3;
+ // c3g *= ll3;
+ // c3b *= ll3;
+ // c4r *= ll4;
+ // c4g *= ll4;
+ // c4b *= ll4;
+ //
+ // Icon_SPU *tex = getTexture(tt, level, pX, pY, pZ, 5);
+ // renderEast( tt, ( float )pX, ( float )pY, ( float )pZ, tex );
+ // if ( fancy && (tex->getName().compare(L"grass_side") == 0) &&
+ // !hasFixedTexture() )
+ // {
+ // c1r *= pBaseRed;
+ // c2r *= pBaseRed;
+ // c3r *= pBaseRed;
+ // c4r *= pBaseRed;
+ // c1g *= pBaseGreen;
+ // c2g *= pBaseGreen;
+ // c3g *= pBaseGreen;
+ // c4g *= pBaseGreen;
+ // c1b *= pBaseBlue;
+ // c2b *= pBaseBlue;
+ // c3b *= pBaseBlue;
+ // c4b *= pBaseBlue;
+ // renderEast( tt, ( float )pX, ( float )pY, ( float )pZ,
+ // getGrassSideTextureOverlay() );
+ // }
+ // }
+ // applyAmbienceOcclusion = false;
+ //
+ return true;
}
// 4J - brought forward from 1.8.2
-int TileRenderer_SPU::blend( int a, int b, int c, int def )
-{
- if ( a == 0 ) a = def;
- if ( b == 0 ) b = def;
- if ( c == 0 ) c = def;
- return ( ( a + b + c + def ) >> 2 ) & 0xff00ff;
+int TileRenderer_SPU::blend(int a, int b, int c, int def) {
+ if (a == 0) a = def;
+ if (b == 0) b = def;
+ if (c == 0) c = def;
+ return ((a + b + c + def) >> 2) & 0xff00ff;
}
-int TileRenderer_SPU::blend(int a, int b, int c, int d, float fa, float fb, float fc, float fd)
-{
-
- int top = (int) ((float) ((a >> 16) & 0xff) * fa + (float) ((b >> 16) & 0xff) * fb + (float) ((c >> 16) & 0xff) * fc + (float) ((d >> 16) & 0xff) * fd) & 0xff;
- int bottom = (int) ((float) (a & 0xff) * fa + (float) (b & 0xff) * fb + (float) (c & 0xff) * fc + (float) (d & 0xff) * fd) & 0xff;
- return (top << 16) | bottom;
+int TileRenderer_SPU::blend(int a, int b, int c, int d, float fa, float fb,
+ float fc, float fd) {
+ int top =
+ (int)((float)((a >> 16) & 0xff) * fa + (float)((b >> 16) & 0xff) * fb +
+ (float)((c >> 16) & 0xff) * fc + (float)((d >> 16) & 0xff) * fd) &
+ 0xff;
+ int bottom = (int)((float)(a & 0xff) * fa + (float)(b & 0xff) * fb +
+ (float)(c & 0xff) * fc + (float)(d & 0xff) * fd) &
+ 0xff;
+ return (top << 16) | bottom;
}
-bool TileRenderer_SPU::tesselateBlockInWorld( Tile_SPU* tt, int x, int y, int z, float r, float g, float b )
-{
- applyAmbienceOcclusion = false;
+bool TileRenderer_SPU::tesselateBlockInWorld(Tile_SPU* tt, int x, int y, int z,
+ float r, float g, float b) {
+ applyAmbienceOcclusion = false;
- Tesselator_SPU* t = getTesselator();
+ Tesselator_SPU* t = getTesselator();
- bool changed = false;
- float c10 = 0.5f;
- float c11 = 1;
- float c2 = 0.8f;
- float c3 = 0.6f;
+ bool changed = false;
+ float c10 = 0.5f;
+ float c11 = 1;
+ float c2 = 0.8f;
+ float c3 = 0.6f;
- float r11 = c11 * r;
- float g11 = c11 * g;
- float b11 = c11 * b;
+ float r11 = c11 * r;
+ float g11 = c11 * g;
+ float b11 = c11 * b;
- float r10 = c10;
- float r2 = c2;
- float r3 = c3;
+ float r10 = c10;
+ float r2 = c2;
+ float r3 = c3;
- float g10 = c10;
- float g2 = c2;
- float g3 = c3;
+ float g10 = c10;
+ float g2 = c2;
+ float g3 = c3;
- float b10 = c10;
- float b2 = c2;
- float b3 = c3;
+ float b10 = c10;
+ float b2 = c2;
+ float b3 = c3;
- if ( tt->id != Tile_SPU::grass_Id )
- {
- r10 *= r;
- r2 *= r;
- r3 *= r;
+ if (tt->id != Tile_SPU::grass_Id) {
+ r10 *= r;
+ r2 *= r;
+ r3 *= r;
- g10 *= g;
- g2 *= g;
- g3 *= g;
+ g10 *= g;
+ g2 *= g;
+ g3 *= g;
- b10 *= b;
- b2 *= b;
- b3 *= b;
- }
+ b10 *= b;
+ b2 *= b;
+ b3 *= b;
+ }
- int centerColor = 0;
- float centerBrightness = 0.0f;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- centerColor = tt->getLightColor( level, x, y, z );
- }
- else
- {
- centerBrightness = tt->getBrightness( level, x, y, z );
- }
+ int centerColor = 0;
+ float centerBrightness = 0.0f;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ centerColor = tt->getLightColor(level, x, y, z);
+ } else {
+ centerBrightness = tt->getBrightness(level, x, y, z);
+ }
- if ( noCulling || tt->shouldRenderFace( level, x, y - 1, z, Facing::DOWN ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeY0 > 0 ? centerColor : tt->getLightColor( level, x, y - 1, z ) );
- t->color( r10, g10, b10 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y - 1, z );
- t->color( r10 * br, g10 * br, b10 * br );
- }
- renderFaceDown( tt, x, y, z, getTexture(tt, level, x, y, z, 0 ) );
- changed = true;
- }
+ if (noCulling || tt->shouldRenderFace(level, x, y - 1, z, Facing::DOWN)) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeY0 > 0 ? centerColor
+ : tt->getLightColor(level, x, y - 1, z));
+ t->color(r10, g10, b10);
+ } else {
+ float br = tt->getBrightness(level, x, y - 1, z);
+ t->color(r10 * br, g10 * br, b10 * br);
+ }
+ renderFaceDown(tt, x, y, z, getTexture(tt, level, x, y, z, 0));
+ changed = true;
+ }
- if ( noCulling || tt->shouldRenderFace( level, x, y + 1, z, Facing::UP ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeY1 < 1 ? centerColor : tt->getLightColor( level, x, y + 1, z ) );
- t->color( r11, g11, b11 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y + 1, z );
- // spu_print("need to add material settings\n");
-// if ( tileShapeY1 != 1 && !tt->material->isLiquid() ) br = centerBrightness;
- t->color( r11 * br, g11 * br, b11 * br );
- }
- renderFaceUp( tt, x, y, z, getTexture(tt, level, x, y, z, 1 ) );
- changed = true;
- }
+ if (noCulling || tt->shouldRenderFace(level, x, y + 1, z, Facing::UP)) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeY1 < 1 ? centerColor
+ : tt->getLightColor(level, x, y + 1, z));
+ t->color(r11, g11, b11);
+ } else {
+ float br = tt->getBrightness(level, x, y + 1, z);
+ // spu_print("need to add material settings\n");
+ // if ( tileShapeY1 != 1 &&
+ //! tt->material->isLiquid() ) br = centerBrightness;
+ t->color(r11 * br, g11 * br, b11 * br);
+ }
+ renderFaceUp(tt, x, y, z, getTexture(tt, level, x, y, z, 1));
+ changed = true;
+ }
- if ( noCulling || tt->shouldRenderFace( level, x, y, z - 1, Facing::NORTH ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeZ0 > 0 ? centerColor : tt->getLightColor( level, x, y, z - 1 ) );
- t->color( r2, g2, b2 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z - 1 );
- if ( tileShapeZ0 > 0 ) br = centerBrightness;
- t->color( r2 * br, g2 * br, b2 * br );
- }
+ if (noCulling || tt->shouldRenderFace(level, x, y, z - 1, Facing::NORTH)) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeZ0 > 0 ? centerColor
+ : tt->getLightColor(level, x, y, z - 1));
+ t->color(r2, g2, b2);
+ } else {
+ float br = tt->getBrightness(level, x, y, z - 1);
+ if (tileShapeZ0 > 0) br = centerBrightness;
+ t->color(r2 * br, g2 * br, b2 * br);
+ }
- Icon_SPU *tex = getTexture(tt, level, x, y, z, 2);
- renderNorth( tt, x, y, z, tex );
+ Icon_SPU* tex = getTexture(tt, level, x, y, z, 2);
+ renderNorth(tt, x, y, z, tex);
- if ( fancy && (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] && !hasFixedTexture() ))
- {
- t->color( r2 * r, g2 * g, b2 * b );
- renderNorth( tt, x, y, z, GrassTile_SPU::getSideTextureOverlay() );
- }
- changed = true;
- }
+ if (fancy &&
+ (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] &&
+ !hasFixedTexture())) {
+ t->color(r2 * r, g2 * g, b2 * b);
+ renderNorth(tt, x, y, z, GrassTile_SPU::getSideTextureOverlay());
+ }
+ changed = true;
+ }
- if ( noCulling || tt->shouldRenderFace( level, x, y, z + 1, Facing::SOUTH ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeZ1 < 1 ? centerColor : tt->getLightColor( level, x, y, z + 1 ) );
- t->color( r2, g2, b2 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z + 1 );
- if ( tileShapeZ1 < 1 ) br = centerBrightness;
- t->color( r2 * br, g2 * br, b2 * br );
- }
- Icon_SPU *tex = getTexture(tt, level, x, y, z, 3);
- renderSouth( tt, x, y, z, tex );
+ if (noCulling || tt->shouldRenderFace(level, x, y, z + 1, Facing::SOUTH)) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeZ1 < 1 ? centerColor
+ : tt->getLightColor(level, x, y, z + 1));
+ t->color(r2, g2, b2);
+ } else {
+ float br = tt->getBrightness(level, x, y, z + 1);
+ if (tileShapeZ1 < 1) br = centerBrightness;
+ t->color(r2 * br, g2 * br, b2 * br);
+ }
+ Icon_SPU* tex = getTexture(tt, level, x, y, z, 3);
+ renderSouth(tt, x, y, z, tex);
- if ( fancy && (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] && !hasFixedTexture() ))
- {
- t->color( r2 * r, g2 * g, b2 * b );
- renderSouth( tt, x, y, z, GrassTile_SPU::getSideTextureOverlay() );
- }
- changed = true;
- }
+ if (fancy &&
+ (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] &&
+ !hasFixedTexture())) {
+ t->color(r2 * r, g2 * g, b2 * b);
+ renderSouth(tt, x, y, z, GrassTile_SPU::getSideTextureOverlay());
+ }
+ changed = true;
+ }
- if ( noCulling || tt->shouldRenderFace( level, x - 1, y, z, Facing::WEST ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeX0 > 0 ? centerColor : tt->getLightColor( level, x - 1, y, z ) );
- t->color( r3, g3, b3 );
- }
- else
- {
- float br = tt->getBrightness( level, x - 1, y, z );
- if ( tileShapeX0 > 0 ) br = centerBrightness;
- t->color( r3 * br, g3 * br, b3 * br );
- }
- Icon_SPU *tex = getTexture(tt, level, x, y, z, 4);
- renderWest( tt, x, y, z, tex );
+ if (noCulling || tt->shouldRenderFace(level, x - 1, y, z, Facing::WEST)) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeX0 > 0 ? centerColor
+ : tt->getLightColor(level, x - 1, y, z));
+ t->color(r3, g3, b3);
+ } else {
+ float br = tt->getBrightness(level, x - 1, y, z);
+ if (tileShapeX0 > 0) br = centerBrightness;
+ t->color(r3 * br, g3 * br, b3 * br);
+ }
+ Icon_SPU* tex = getTexture(tt, level, x, y, z, 4);
+ renderWest(tt, x, y, z, tex);
- if ( fancy && (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] && !hasFixedTexture() ))
- {
- t->color( r3 * r, g3 * g, b3 * b );
- renderWest( tt, x, y, z, GrassTile_SPU::getSideTextureOverlay() );
- }
- changed = true;
- }
+ if (fancy &&
+ (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] &&
+ !hasFixedTexture())) {
+ t->color(r3 * r, g3 * g, b3 * b);
+ renderWest(tt, x, y, z, GrassTile_SPU::getSideTextureOverlay());
+ }
+ changed = true;
+ }
- if ( noCulling || tt->shouldRenderFace( level, x + 1, y, z, Facing::EAST ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeX1 < 1 ? centerColor : tt->getLightColor( level, x + 1, y, z ) );
- t->color( r3, g3, b3 );
- }
- else
- {
- float br = tt->getBrightness( level, x + 1, y, z );
- if ( tileShapeX1 < 1 ) br = centerBrightness;
- t->color( r3 * br, g3 * br, b3 * br );
- }
- Icon_SPU *tex = getTexture(tt, level, x, y, z, 5);
- renderEast( tt, x, y, z, tex );
+ if (noCulling || tt->shouldRenderFace(level, x + 1, y, z, Facing::EAST)) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeX1 < 1 ? centerColor
+ : tt->getLightColor(level, x + 1, y, z));
+ t->color(r3, g3, b3);
+ } else {
+ float br = tt->getBrightness(level, x + 1, y, z);
+ if (tileShapeX1 < 1) br = centerBrightness;
+ t->color(r3 * br, g3 * br, b3 * br);
+ }
+ Icon_SPU* tex = getTexture(tt, level, x, y, z, 5);
+ renderEast(tt, x, y, z, tex);
- if ( fancy && (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] && !hasFixedTexture() ))
- {
- t->color( r3 * r, g3 * g, b3 * b );
- renderEast( tt, x, y, z, GrassTile_SPU::getSideTextureOverlay() );
- }
- changed = true;
- }
-
- return changed;
+ if (fancy &&
+ (tex == &Tile_SPU::ms_pTileData->iconData[Tile_SPU::grass_Id] &&
+ !hasFixedTexture())) {
+ t->color(r3 * r, g3 * g, b3 * b);
+ renderEast(tt, x, y, z, GrassTile_SPU::getSideTextureOverlay());
+ }
+ changed = true;
+ }
+ return changed;
}
-bool TileRenderer_SPU::tesselateCactusInWorld( Tile_SPU* tt, int x, int y, int z )
-{
- int col = tt->getColor( level, x, y, z );
- float r = ( ( col >> 16 ) & 0xff ) / 255.0f;
- float g = ( ( col >> 8 ) & 0xff ) / 255.0f;
- float b = ( ( col )& 0xff ) / 255.0f;
+bool TileRenderer_SPU::tesselateCactusInWorld(Tile_SPU* tt, int x, int y,
+ int z) {
+ int col = tt->getColor(level, x, y, z);
+ float r = ((col >> 16) & 0xff) / 255.0f;
+ float g = ((col >> 8) & 0xff) / 255.0f;
+ float b = ((col) & 0xff) / 255.0f;
- if ( isAnaglyph3d() )
- {
- float cr = ( r * 30 + g * 59 + b * 11 ) / 100;
- float cg = ( r * 30 + g * 70 ) / ( 100 );
- float cb = ( r * 30 + b * 70 ) / ( 100 );
+ if (isAnaglyph3d()) {
+ float cr = (r * 30 + g * 59 + b * 11) / 100;
+ float cg = (r * 30 + g * 70) / (100);
+ float cb = (r * 30 + b * 70) / (100);
- r = cr;
- g = cg;
- b = cb;
- }
- return tesselateCactusInWorld( tt, x, y, z, r, g, b );
+ r = cr;
+ g = cg;
+ b = cb;
+ }
+ return tesselateCactusInWorld(tt, x, y, z, r, g, b);
}
-bool TileRenderer_SPU::tesselateCactusInWorld( Tile_SPU* tt, int x, int y, int z, float r, float g, float b )
-{
- Tesselator_SPU* t = getTesselator();
+bool TileRenderer_SPU::tesselateCactusInWorld(Tile_SPU* tt, int x, int y, int z,
+ float r, float g, float b) {
+ Tesselator_SPU* t = getTesselator();
- bool changed = false;
- float c10 = 0.5f;
- float c11 = 1;
- float c2 = 0.8f;
- float c3 = 0.6f;
+ bool changed = false;
+ float c10 = 0.5f;
+ float c11 = 1;
+ float c2 = 0.8f;
+ float c3 = 0.6f;
- float r10 = c10 * r;
- float r11 = c11 * r;
- float r2 = c2 * r;
- float r3 = c3 * r;
+ float r10 = c10 * r;
+ float r11 = c11 * r;
+ float r2 = c2 * r;
+ float r3 = c3 * r;
- float g10 = c10 * g;
- float g11 = c11 * g;
- float g2 = c2 * g;
- float g3 = c3 * g;
+ float g10 = c10 * g;
+ float g11 = c11 * g;
+ float g2 = c2 * g;
+ float g3 = c3 * g;
- float b10 = c10 * b;
- float b11 = c11 * b;
- float b2 = c2 * b;
- float b3 = c3 * b;
+ float b10 = c10 * b;
+ float b11 = c11 * b;
+ float b2 = c2 * b;
+ float b3 = c3 * b;
- float s = 1 / 16.0f;
+ float s = 1 / 16.0f;
- float centerBrightness = 0.0f;
- int centerColor = 0;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- centerColor = tt->getLightColor( level, x, y, z );
- }
- else
- {
- centerBrightness = tt->getBrightness( level, x, y, z );
- }
+ float centerBrightness = 0.0f;
+ int centerColor = 0;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ centerColor = tt->getLightColor(level, x, y, z);
+ } else {
+ centerBrightness = tt->getBrightness(level, x, y, z);
+ }
- if ( noCulling || tt->shouldRenderFace( level, x, y - 1, z, 0 ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeY0 > 0 ? centerColor : tt->getLightColor( level, x, y - 1, z ) );
- t->color( r10, g10, b10 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y - 1, z );
- t->color( r10 * br, g10 * br, b10 * br );
- }
- renderFaceDown( tt, x, y, z, getTexture( tt, level, x, y, z, 0 ) );
- changed = true;
- }
+ if (noCulling || tt->shouldRenderFace(level, x, y - 1, z, 0)) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeY0 > 0 ? centerColor
+ : tt->getLightColor(level, x, y - 1, z));
+ t->color(r10, g10, b10);
+ } else {
+ float br = tt->getBrightness(level, x, y - 1, z);
+ t->color(r10 * br, g10 * br, b10 * br);
+ }
+ renderFaceDown(tt, x, y, z, getTexture(tt, level, x, y, z, 0));
+ changed = true;
+ }
- if ( noCulling || tt->shouldRenderFace( level, x, y + 1, z, 1 ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeY1 < 1 ? centerColor : tt->getLightColor( level, x, y + 1, z ) );
- t->color( r11, g11, b11 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y + 1, z );
- if ( tileShapeY1 != 1 && !tt->getMaterial()->isLiquid() ) br = centerBrightness;
- t->color( r11 * br, g11 * br, b11 * br );
- }
- renderFaceUp( tt, x, y, z, getTexture( tt, level, x, y, z, 1 ) );
- changed = true;
- }
+ if (noCulling || tt->shouldRenderFace(level, x, y + 1, z, 1)) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeY1 < 1 ? centerColor
+ : tt->getLightColor(level, x, y + 1, z));
+ t->color(r11, g11, b11);
+ } else {
+ float br = tt->getBrightness(level, x, y + 1, z);
+ if (tileShapeY1 != 1 && !tt->getMaterial()->isLiquid())
+ br = centerBrightness;
+ t->color(r11 * br, g11 * br, b11 * br);
+ }
+ renderFaceUp(tt, x, y, z, getTexture(tt, level, x, y, z, 1));
+ changed = true;
+ }
- if ( noCulling || tt->shouldRenderFace( level, x, y, z - 1, 2 ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeZ0 > 0 ? centerColor : tt->getLightColor( level, x, y, z - 1 ) );
- t->color( r2, g2, b2 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z - 1 );
- if ( tileShapeZ0 > 0 ) br = centerBrightness;
- t->color( r2 * br, g2 * br, b2 * br );
- }
- t->addOffset( 0, 0, s );
- renderNorth( tt, x, y, z, getTexture(tt, level, x, y, z, 2 ) );
- t->addOffset( 0, 0, -s );
- changed = true;
- }
+ if (noCulling || tt->shouldRenderFace(level, x, y, z - 1, 2)) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeZ0 > 0 ? centerColor
+ : tt->getLightColor(level, x, y, z - 1));
+ t->color(r2, g2, b2);
+ } else {
+ float br = tt->getBrightness(level, x, y, z - 1);
+ if (tileShapeZ0 > 0) br = centerBrightness;
+ t->color(r2 * br, g2 * br, b2 * br);
+ }
+ t->addOffset(0, 0, s);
+ renderNorth(tt, x, y, z, getTexture(tt, level, x, y, z, 2));
+ t->addOffset(0, 0, -s);
+ changed = true;
+ }
- if ( noCulling || tt->shouldRenderFace( level, x, y, z + 1, 3 ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeZ1 < 1 ? centerColor : tt->getLightColor( level, x, y, z + 1 ) );
- t->color( r2, g2, b2 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z + 1 );
- if ( tileShapeZ1 < 1 ) br = centerBrightness;
- t->color( r2 * br, g2 * br, b2 * br );
- }
+ if (noCulling || tt->shouldRenderFace(level, x, y, z + 1, 3)) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeZ1 < 1 ? centerColor
+ : tt->getLightColor(level, x, y, z + 1));
+ t->color(r2, g2, b2);
+ } else {
+ float br = tt->getBrightness(level, x, y, z + 1);
+ if (tileShapeZ1 < 1) br = centerBrightness;
+ t->color(r2 * br, g2 * br, b2 * br);
+ }
- t->addOffset( 0, 0, -s );
- renderSouth( tt, x, y, z, getTexture(tt, level, x, y, z, 3 ) );
- t->addOffset( 0, 0, s );
- changed = true;
- }
+ t->addOffset(0, 0, -s);
+ renderSouth(tt, x, y, z, getTexture(tt, level, x, y, z, 3));
+ t->addOffset(0, 0, s);
+ changed = true;
+ }
- if ( noCulling || tt->shouldRenderFace( level, x - 1, y, z, 4 ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeX0 > 0 ? centerColor : tt->getLightColor( level, x - 1, y, z ) );
- t->color( r3, g3, b3 );
- }
- else
- {
- float br = tt->getBrightness( level, x - 1, y, z );
- if ( tileShapeX0 > 0 ) br = centerBrightness;
- t->color( r3 * br, g3 * br, b3 * br );
- }
- t->addOffset( s, 0, 0 );
- renderWest( tt, x, y, z, getTexture(tt, level, x, y, z, 4 ) );
- t->addOffset( -s, 0, 0 );
- changed = true;
- }
+ if (noCulling || tt->shouldRenderFace(level, x - 1, y, z, 4)) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeX0 > 0 ? centerColor
+ : tt->getLightColor(level, x - 1, y, z));
+ t->color(r3, g3, b3);
+ } else {
+ float br = tt->getBrightness(level, x - 1, y, z);
+ if (tileShapeX0 > 0) br = centerBrightness;
+ t->color(r3 * br, g3 * br, b3 * br);
+ }
+ t->addOffset(s, 0, 0);
+ renderWest(tt, x, y, z, getTexture(tt, level, x, y, z, 4));
+ t->addOffset(-s, 0, 0);
+ changed = true;
+ }
- if ( noCulling || tt->shouldRenderFace( level, x + 1, y, z, 5 ) )
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeX1 < 1 ? centerColor : tt->getLightColor( level, x + 1, y, z ) );
- t->color( r3, g3, b3 );
- }
- else
- {
- float br = tt->getBrightness( level, x + 1, y, z );
- if ( tileShapeX1 < 1 ) br = centerBrightness;
- t->color( r3 * br, g3 * br, b3 * br );
- }
- t->addOffset( -s, 0, 0 );
- renderEast( tt, x, y, z, getTexture(tt, level, x, y, z, 5 ) );
- t->addOffset( s, 0, 0 );
- changed = true;
- }
+ if (noCulling || tt->shouldRenderFace(level, x + 1, y, z, 5)) {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeX1 < 1 ? centerColor
+ : tt->getLightColor(level, x + 1, y, z));
+ t->color(r3, g3, b3);
+ } else {
+ float br = tt->getBrightness(level, x + 1, y, z);
+ if (tileShapeX1 < 1) br = centerBrightness;
+ t->color(r3 * br, g3 * br, b3 * br);
+ }
+ t->addOffset(-s, 0, 0);
+ renderEast(tt, x, y, z, getTexture(tt, level, x, y, z, 5));
+ t->addOffset(s, 0, 0);
+ changed = true;
+ }
- return changed;
+ return changed;
}
-bool TileRenderer_SPU::tesselateFenceInWorld( FenceTile_SPU* tt, int x, int y, int z )
-{
-// #ifdef DISABLE_TESS_FUNCS
- bool changed = false;
+bool TileRenderer_SPU::tesselateFenceInWorld(FenceTile_SPU* tt, int x, int y,
+ int z) {
+ // #ifdef DISABLE_TESS_FUNCS
+ bool changed = false;
- float a = 6 / 16.0f;
- float b = 10 / 16.0f;
-// EnterCriticalSection( &Tile_SPU::m_csShape );
- setShape( a, 0, a, b, 1, b );
- tesselateBlockInWorld( tt, x, y, z );
- changed = true;
+ float a = 6 / 16.0f;
+ float b = 10 / 16.0f;
+ // EnterCriticalSection( &Tile_SPU::m_csShape );
+ setShape(a, 0, a, b, 1, b);
+ tesselateBlockInWorld(tt, x, y, z);
+ changed = true;
- bool vertical = false;
- bool horizontal = false;
+ bool vertical = false;
+ bool horizontal = false;
- if (tt->connectsTo(level, x - 1, y, z) || tt->connectsTo(level, x + 1, y, z)) vertical = true;
- if (tt->connectsTo(level, x, y, z - 1) || tt->connectsTo(level, x, y, z + 1)) horizontal = true;
+ if (tt->connectsTo(level, x - 1, y, z) ||
+ tt->connectsTo(level, x + 1, y, z))
+ vertical = true;
+ if (tt->connectsTo(level, x, y, z - 1) ||
+ tt->connectsTo(level, x, y, z + 1))
+ horizontal = true;
- bool l = tt->connectsTo(level, x - 1, y, z);
- bool r = tt->connectsTo(level, x + 1, y, z);
- bool u = tt->connectsTo(level, x, y, z - 1);
- bool d = tt->connectsTo(level, x, y, z + 1);
+ bool l = tt->connectsTo(level, x - 1, y, z);
+ bool r = tt->connectsTo(level, x + 1, y, z);
+ bool u = tt->connectsTo(level, x, y, z - 1);
+ bool d = tt->connectsTo(level, x, y, z + 1);
- if ( !vertical && !horizontal ) vertical = true;
+ if (!vertical && !horizontal) vertical = true;
- a = 7 / 16.0f;
- b = 9 / 16.0f;
- float h0 = 12 / 16.0f;
- float h1 = 15 / 16.0f;
+ a = 7 / 16.0f;
+ b = 9 / 16.0f;
+ float h0 = 12 / 16.0f;
+ float h1 = 15 / 16.0f;
- float x0 = l ? 0 : a;
- float x1 = r ? 1 : b;
- float z0 = u ? 0 : a;
- float z1 = d ? 1 : b;
- if ( vertical )
- {
- setShape( x0, h0, a, x1, h1, b );
- tesselateBlockInWorld( tt, x, y, z );
- changed = true;
- }
- if ( horizontal )
- {
- setShape( a, h0, z0, b, h1, z1 );
- tesselateBlockInWorld( tt, x, y, z );
- changed = true;
- }
+ float x0 = l ? 0 : a;
+ float x1 = r ? 1 : b;
+ float z0 = u ? 0 : a;
+ float z1 = d ? 1 : b;
+ if (vertical) {
+ setShape(x0, h0, a, x1, h1, b);
+ tesselateBlockInWorld(tt, x, y, z);
+ changed = true;
+ }
+ if (horizontal) {
+ setShape(a, h0, z0, b, h1, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ changed = true;
+ }
- h0 = 6 / 16.0f;
- h1 = 9 / 16.0f;
- if ( vertical )
- {
- setShape( x0, h0, a, x1, h1, b );
- tesselateBlockInWorld( tt, x, y, z );
- changed = true;
- }
- if ( horizontal )
- {
- setShape( a, h0, z0, b, h1, z1 );
- tesselateBlockInWorld( tt, x, y, z );
- changed = true;
- }
+ h0 = 6 / 16.0f;
+ h1 = 9 / 16.0f;
+ if (vertical) {
+ setShape(x0, h0, a, x1, h1, b);
+ tesselateBlockInWorld(tt, x, y, z);
+ changed = true;
+ }
+ if (horizontal) {
+ setShape(a, h0, z0, b, h1, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ changed = true;
+ }
- tt->updateShape(level, x, y, z);
-// LeaveCriticalSection( &Tile_SPU::m_csShape );
- return changed;
-// #endif // #ifdef DISABLE_TESS_FUNCS
- return false;
+ tt->updateShape(level, x, y, z);
+ // LeaveCriticalSection( &Tile_SPU::m_csShape );
+ return changed;
+ // #endif // #ifdef DISABLE_TESS_FUNCS
+ return false;
}
-bool TileRenderer_SPU::tesselateWallInWorld(WallTile_SPU *tt, int x, int y, int z)
-{
- bool w = tt->connectsTo(level, x - 1, y, z);
- bool e = tt->connectsTo(level, x + 1, y, z);
- bool n = tt->connectsTo(level, x, y, z - 1);
- bool s = tt->connectsTo(level, x, y, z + 1);
+bool TileRenderer_SPU::tesselateWallInWorld(WallTile_SPU* tt, int x, int y,
+ int z) {
+ bool w = tt->connectsTo(level, x - 1, y, z);
+ bool e = tt->connectsTo(level, x + 1, y, z);
+ bool n = tt->connectsTo(level, x, y, z - 1);
+ bool s = tt->connectsTo(level, x, y, z + 1);
- bool vertical = (n && s && !w && !e);
- bool horizontal = (!n && !s && w && e);
- bool emptyAbove = level->isEmptyTile(x, y + 1, z);
+ bool vertical = (n && s && !w && !e);
+ bool horizontal = (!n && !s && w && e);
+ bool emptyAbove = level->isEmptyTile(x, y + 1, z);
- if ((!vertical && !horizontal) || !emptyAbove)
- {
- // center post
- setShape(.5f - WallTile_SPU::POST_WIDTH, 0, .5f - WallTile_SPU::POST_WIDTH, .5f + WallTile_SPU::POST_WIDTH, WallTile_SPU::POST_HEIGHT, .5f + WallTile_SPU::POST_WIDTH);
- tesselateBlockInWorld(tt, x, y, z);
+ if ((!vertical && !horizontal) || !emptyAbove) {
+ // center post
+ setShape(.5f - WallTile_SPU::POST_WIDTH, 0,
+ .5f - WallTile_SPU::POST_WIDTH, .5f + WallTile_SPU::POST_WIDTH,
+ WallTile_SPU::POST_HEIGHT, .5f + WallTile_SPU::POST_WIDTH);
+ tesselateBlockInWorld(tt, x, y, z);
- if (w)
- {
- setShape(0, 0, .5f - WallTile_SPU::WALL_WIDTH, .5f - WallTile_SPU::POST_WIDTH, WallTile_SPU::WALL_HEIGHT, .5f + WallTile_SPU::WALL_WIDTH);
- tesselateBlockInWorld(tt, x, y, z);
- }
- if (e)
- {
- setShape(.5f + WallTile_SPU::POST_WIDTH, 0, .5f - WallTile_SPU::WALL_WIDTH, 1, WallTile_SPU::WALL_HEIGHT, .5f + WallTile_SPU::WALL_WIDTH);
- tesselateBlockInWorld(tt, x, y, z);
- }
- if (n)
- {
- setShape(.5f - WallTile_SPU::WALL_WIDTH, 0, 0, .5f + WallTile_SPU::WALL_WIDTH, WallTile_SPU::WALL_HEIGHT, .5f - WallTile_SPU::POST_WIDTH);
- tesselateBlockInWorld(tt, x, y, z);
- }
- if (s)
- {
- setShape(.5f - WallTile_SPU::WALL_WIDTH, 0, .5f + WallTile_SPU::POST_WIDTH, .5f + WallTile_SPU::WALL_WIDTH, WallTile_SPU::WALL_HEIGHT, 1);
- tesselateBlockInWorld(tt, x, y, z);
- }
- }
- else if (vertical)
- {
- // north-south wall
- setShape(.5f - WallTile_SPU::WALL_WIDTH, 0, 0, .5f + WallTile_SPU::WALL_WIDTH, WallTile_SPU::WALL_HEIGHT, 1);
- tesselateBlockInWorld(tt, x, y, z);
- }
- else
- {
- // west-east wall
- setShape(0, 0, .5f - WallTile_SPU::WALL_WIDTH, 1, WallTile_SPU::WALL_HEIGHT, .5f + WallTile_SPU::WALL_WIDTH);
- tesselateBlockInWorld(tt, x, y, z);
- }
+ if (w) {
+ setShape(0, 0, .5f - WallTile_SPU::WALL_WIDTH,
+ .5f - WallTile_SPU::POST_WIDTH, WallTile_SPU::WALL_HEIGHT,
+ .5f + WallTile_SPU::WALL_WIDTH);
+ tesselateBlockInWorld(tt, x, y, z);
+ }
+ if (e) {
+ setShape(.5f + WallTile_SPU::POST_WIDTH, 0,
+ .5f - WallTile_SPU::WALL_WIDTH, 1,
+ WallTile_SPU::WALL_HEIGHT, .5f + WallTile_SPU::WALL_WIDTH);
+ tesselateBlockInWorld(tt, x, y, z);
+ }
+ if (n) {
+ setShape(.5f - WallTile_SPU::WALL_WIDTH, 0, 0,
+ .5f + WallTile_SPU::WALL_WIDTH, WallTile_SPU::WALL_HEIGHT,
+ .5f - WallTile_SPU::POST_WIDTH);
+ tesselateBlockInWorld(tt, x, y, z);
+ }
+ if (s) {
+ setShape(.5f - WallTile_SPU::WALL_WIDTH, 0,
+ .5f + WallTile_SPU::POST_WIDTH,
+ .5f + WallTile_SPU::WALL_WIDTH, WallTile_SPU::WALL_HEIGHT,
+ 1);
+ tesselateBlockInWorld(tt, x, y, z);
+ }
+ } else if (vertical) {
+ // north-south wall
+ setShape(.5f - WallTile_SPU::WALL_WIDTH, 0, 0,
+ .5f + WallTile_SPU::WALL_WIDTH, WallTile_SPU::WALL_HEIGHT, 1);
+ tesselateBlockInWorld(tt, x, y, z);
+ } else {
+ // west-east wall
+ setShape(0, 0, .5f - WallTile_SPU::WALL_WIDTH, 1,
+ WallTile_SPU::WALL_HEIGHT, .5f + WallTile_SPU::WALL_WIDTH);
+ tesselateBlockInWorld(tt, x, y, z);
+ }
- tt->updateShape(level, x, y, z);
- return true;
+ tt->updateShape(level, x, y, z);
+ return true;
}
-
-bool TileRenderer_SPU::tesselateEggInWorld(EggTile_SPU *tt, int x, int y, int z)
-{
- bool changed = false;
-// EnterCriticalSection( &Tile_SPU::m_csShape );
+bool TileRenderer_SPU::tesselateEggInWorld(EggTile_SPU* tt, int x, int y,
+ int z) {
+ bool changed = false;
+ // EnterCriticalSection( &Tile_SPU::m_csShape );
int y0 = 0;
- for (int i = 0; i < 8; i++)
- {
+ for (int i = 0; i < 8; i++) {
int ww = 0;
int hh = 1;
if (i == 0) ww = 2;
if (i == 1) ww = 3;
if (i == 2) ww = 4;
- if (i == 3)
- {
+ if (i == 3) {
ww = 5;
hh = 2;
}
- if (i == 4)
- {
+ if (i == 4) {
ww = 6;
hh = 3;
}
- if (i == 5)
- {
+ if (i == 5) {
ww = 7;
hh = 5;
}
- if (i == 6)
- {
+ if (i == 6) {
ww = 6;
hh = 2;
}
@@ -6539,12 +6517,12 @@ bool TileRenderer_SPU::tesselateEggInWorld(EggTile_SPU *tt, int x, int y, int z)
changed = true;
setShape(0, 0, 0, 1, 1, 1);
-// LeaveCriticalSection( &Tile_SPU::m_csShape );
+ // LeaveCriticalSection( &Tile_SPU::m_csShape );
return changed;
}
-bool TileRenderer_SPU::tesselateFenceGateInWorld(FenceGateTile_SPU *tt, int x, int y, int z)
-{
+bool TileRenderer_SPU::tesselateFenceGateInWorld(FenceGateTile_SPU* tt, int x,
+ int y, int z) {
bool changed = true;
#ifdef DISABLE_TESS_FUNCS
@@ -6559,25 +6537,28 @@ bool TileRenderer_SPU::tesselateFenceGateInWorld(FenceGateTile_SPU *tt, int x, i
float h20 = 5 / 16.0f;
float h21 = 16 / 16.0f;
- //if (((direction == Direction::NORTH || direction == Direction::SOUTH) && level->getTile(x - 1, y, z) == Tile_SPU::cobbleWall_Id && level->getTile(x + 1, y, z) == Tile_SPU::cobbleWall_Id)
- // || ((direction == Direction::EAST || direction == Direction::WEST) && level->getTile(x, y, z - 1) == Tile_SPU::cobbleWall_Id && level->getTile(x, y, z + 1) == Tile_SPU::cobbleWall_Id))
- //{
- // h00 -= 3.0f / 16.0f;
- // h01 -= 3.0f / 16.0f;
- // h10 -= 3.0f / 16.0f;
- // h11 -= 3.0f / 16.0f;
- // h20 -= 3.0f / 16.0f;
- // h21 -= 3.0f / 16.0f;
- //}
+ // if (((direction == Direction::NORTH || direction == Direction::SOUTH) &&
+ // level->getTile(x - 1, y, z) == Tile_SPU::cobbleWall_Id &&
+ // level->getTile(x + 1, y, z) == Tile_SPU::cobbleWall_Id)
+ // || ((direction == Direction::EAST || direction == Direction::WEST) &&
+ // level->getTile(x, y, z - 1) == Tile_SPU::cobbleWall_Id &&
+ // level->getTile(x, y, z + 1) == Tile_SPU::cobbleWall_Id))
+ //{
+ // h00 -= 3.0f / 16.0f;
+ // h01 -= 3.0f / 16.0f;
+ // h10 -= 3.0f / 16.0f;
+ // h11 -= 3.0f / 16.0f;
+ // h20 -= 3.0f / 16.0f;
+ // h21 -= 3.0f / 16.0f;
+ // }
- noCulling = true;
+ noCulling = true;
-// EnterCriticalSection( &Tile_SPU::m_csShape );
+ // EnterCriticalSection( &Tile_SPU::m_csShape );
// edge sticks
- if (direction == Direction::EAST || direction == Direction::WEST)
- {
- upFlip = FLIP_CW;
+ if (direction == Direction::EAST || direction == Direction::WEST) {
+ upFlip = FLIP_CW;
float x0 = 7 / 16.0f;
float x1 = 9 / 16.0f;
float z0 = 0 / 16.0f;
@@ -6589,10 +6570,8 @@ bool TileRenderer_SPU::tesselateFenceGateInWorld(FenceGateTile_SPU *tt, int x, i
z1 = 16 / 16.0f;
setShape(x0, h20, z0, x1, h21, z1);
tesselateBlockInWorld(tt, x, y, z);
- upFlip = FLIP_NONE;
- }
- else
- {
+ upFlip = FLIP_NONE;
+ } else {
float x0 = 0 / 16.0f;
float x1 = 2 / 16.0f;
float z0 = 7 / 16.0f;
@@ -6605,1031 +6584,1009 @@ bool TileRenderer_SPU::tesselateFenceGateInWorld(FenceGateTile_SPU *tt, int x, i
setShape(x0, h20, z0, x1, h21, z1);
tesselateBlockInWorld(tt, x, y, z);
}
- if (isOpen)
- {
- if (direction == Direction::NORTH || direction == Direction::SOUTH)
- {
- upFlip = FLIP_CW;
- }
- if (direction == Direction::EAST)
- {
+ if (isOpen) {
+ if (direction == Direction::NORTH || direction == Direction::SOUTH) {
+ upFlip = FLIP_CW;
+ }
+ if (direction == Direction::EAST) {
+ const float z00 = 0 / 16.0f;
+ const float z01 = 2 / 16.0f;
+ const float z10 = 14 / 16.0f;
+ const float z11 = 16 / 16.0f;
- const float z00 = 0 / 16.0f;
- const float z01 = 2 / 16.0f;
- const float z10 = 14 / 16.0f;
- const float z11 = 16 / 16.0f;
+ const float x0 = 9 / 16.0f;
+ const float x1 = 13 / 16.0f;
+ const float x2 = 15 / 16.0f;
- const float x0 = 9 / 16.0f;
- const float x1 = 13 / 16.0f;
- const float x2 = 15 / 16.0f;
+ setShape(x1, h00, z00, x2, h11, z01);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x1, h00, z10, x2, h11, z11);
+ tesselateBlockInWorld(tt, x, y, z);
- setShape(x1, h00, z00, x2, h11, z01);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x1, h00, z10, x2, h11, z11);
- tesselateBlockInWorld(tt, x, y, z);
+ setShape(x0, h00, z00, x1, h01, z01);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x0, h00, z10, x1, h01, z11);
+ tesselateBlockInWorld(tt, x, y, z);
- setShape(x0, h00, z00, x1, h01, z01);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x0, h00, z10, x1, h01, z11);
- tesselateBlockInWorld(tt, x, y, z);
+ setShape(x0, h10, z00, x1, h11, z01);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x0, h10, z10, x1, h11, z11);
+ tesselateBlockInWorld(tt, x, y, z);
+ } else if (direction == Direction::WEST) {
+ const float z00 = 0 / 16.0f;
+ const float z01 = 2 / 16.0f;
+ const float z10 = 14 / 16.0f;
+ const float z11 = 16 / 16.0f;
- setShape(x0, h10, z00, x1, h11, z01);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x0, h10, z10, x1, h11, z11);
- tesselateBlockInWorld(tt, x, y, z);
- }
- else if (direction == Direction::WEST)
- {
- const float z00 = 0 / 16.0f;
- const float z01 = 2 / 16.0f;
- const float z10 = 14 / 16.0f;
- const float z11 = 16 / 16.0f;
+ const float x0 = 1 / 16.0f;
+ const float x1 = 3 / 16.0f;
+ const float x2 = 7 / 16.0f;
- const float x0 = 1 / 16.0f;
- const float x1 = 3 / 16.0f;
- const float x2 = 7 / 16.0f;
+ setShape(x0, h00, z00, x1, h11, z01);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x0, h00, z10, x1, h11, z11);
+ tesselateBlockInWorld(tt, x, y, z);
- setShape(x0, h00, z00, x1, h11, z01);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x0, h00, z10, x1, h11, z11);
- tesselateBlockInWorld(tt, x, y, z);
+ setShape(x1, h00, z00, x2, h01, z01);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x1, h00, z10, x2, h01, z11);
+ tesselateBlockInWorld(tt, x, y, z);
- setShape(x1, h00, z00, x2, h01, z01);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x1, h00, z10, x2, h01, z11);
- tesselateBlockInWorld(tt, x, y, z);
+ setShape(x1, h10, z00, x2, h11, z01);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x1, h10, z10, x2, h11, z11);
+ tesselateBlockInWorld(tt, x, y, z);
+ } else if (direction == Direction::SOUTH) {
+ const float x00 = 0 / 16.0f;
+ const float x01 = 2 / 16.0f;
+ const float x10 = 14 / 16.0f;
+ const float x11 = 16 / 16.0f;
- setShape(x1, h10, z00, x2, h11, z01);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x1, h10, z10, x2, h11, z11);
- tesselateBlockInWorld(tt, x, y, z);
- }
- else if (direction == Direction::SOUTH)
- {
+ const float z0 = 9 / 16.0f;
+ const float z1 = 13 / 16.0f;
+ const float z2 = 15 / 16.0f;
- const float x00 = 0 / 16.0f;
- const float x01 = 2 / 16.0f;
- const float x10 = 14 / 16.0f;
- const float x11 = 16 / 16.0f;
+ setShape(x00, h00, z1, x01, h11, z2);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x10, h00, z1, x11, h11, z2);
+ tesselateBlockInWorld(tt, x, y, z);
- const float z0 = 9 / 16.0f;
- const float z1 = 13 / 16.0f;
- const float z2 = 15 / 16.0f;
+ setShape(x00, h00, z0, x01, h01, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x10, h00, z0, x11, h01, z1);
+ tesselateBlockInWorld(tt, x, y, z);
- setShape(x00, h00, z1, x01, h11, z2);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x10, h00, z1, x11, h11, z2);
- tesselateBlockInWorld(tt, x, y, z);
+ setShape(x00, h10, z0, x01, h11, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x10, h10, z0, x11, h11, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ } else if (direction == Direction::NORTH) {
+ const float x00 = 0 / 16.0f;
+ const float x01 = 2 / 16.0f;
+ const float x10 = 14 / 16.0f;
+ const float x11 = 16 / 16.0f;
- setShape(x00, h00, z0, x01, h01, z1);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x10, h00, z0, x11, h01, z1);
- tesselateBlockInWorld(tt, x, y, z);
+ const float z0 = 1 / 16.0f;
+ const float z1 = 3 / 16.0f;
+ const float z2 = 7 / 16.0f;
- setShape(x00, h10, z0, x01, h11, z1);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x10, h10, z0, x11, h11, z1);
- tesselateBlockInWorld(tt, x, y, z);
- }
- else if (direction == Direction::NORTH)
- {
- const float x00 = 0 / 16.0f;
- const float x01 = 2 / 16.0f;
- const float x10 = 14 / 16.0f;
- const float x11 = 16 / 16.0f;
+ setShape(x00, h00, z0, x01, h11, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x10, h00, z0, x11, h11, z1);
+ tesselateBlockInWorld(tt, x, y, z);
- const float z0 = 1 / 16.0f;
- const float z1 = 3 / 16.0f;
- const float z2 = 7 / 16.0f;
+ setShape(x00, h00, z1, x01, h01, z2);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x10, h00, z1, x11, h01, z2);
+ tesselateBlockInWorld(tt, x, y, z);
- setShape(x00, h00, z0, x01, h11, z1);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x10, h00, z0, x11, h11, z1);
- tesselateBlockInWorld(tt, x, y, z);
-
- setShape(x00, h00, z1, x01, h01, z2);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x10, h00, z1, x11, h01, z2);
- tesselateBlockInWorld(tt, x, y, z);
-
- setShape(x00, h10, z1, x01, h11, z2);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x10, h10, z1, x11, h11, z2);
- tesselateBlockInWorld(tt, x, y, z);
- }
- }
- else
- {
- if (direction == Direction::EAST || direction == Direction::WEST)
- {
- upFlip = FLIP_CW;
- float x0 = 7 / 16.0f;
- float x1 = 9 / 16.0f;
- float z0 = 6 / 16.0f;
- float z1 = 8 / 16.0f;
- setShape(x0, h00, z0, x1, h11, z1);
- tesselateBlockInWorld(tt, x, y, z);
- z0 = 8 / 16.0f;
- z1 = 10 / 16.0f;
- setShape(x0, h00, z0, x1, h11, z1);
- tesselateBlockInWorld(tt, x, y, z);
- z0 = 10 / 16.0f;
- z1 = 14 / 16.0f;
- setShape(x0, h00, z0, x1, h01, z1);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x0, h10, z0, x1, h11, z1);
- tesselateBlockInWorld(tt, x, y, z);
- z0 = 2 / 16.0f;
- z1 = 6 / 16.0f;
- setShape(x0, h00, z0, x1, h01, z1);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x0, h10, z0, x1, h11, z1);
- tesselateBlockInWorld(tt, x, y, z);
- }
- else
- {
- float x0 = 6 / 16.0f;
- float x1 = 8 / 16.0f;
- float z0 = 7 / 16.0f;
- float z1 = 9 / 16.0f;
- setShape(x0, h00, z0, x1, h11, z1);
- tesselateBlockInWorld(tt, x, y, z);
- x0 = 8 / 16.0f;
- x1 = 10 / 16.0f;
- setShape(x0, h00, z0, x1, h11, z1);
- tesselateBlockInWorld(tt, x, y, z);
- x0 = 10 / 16.0f;
- x1 = 14 / 16.0f;
- setShape(x0, h00, z0, x1, h01, z1);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x0, h10, z0, x1, h11, z1);
- tesselateBlockInWorld(tt, x, y, z);
- x0 = 2 / 16.0f;
- x1 = 6 / 16.0f;
- setShape(x0, h00, z0, x1, h01, z1);
- tesselateBlockInWorld(tt, x, y, z);
- setShape(x0, h10, z0, x1, h11, z1);
- tesselateBlockInWorld(tt, x, y, z);
-
- }
- }
- noCulling = false;
- upFlip = FLIP_NONE;
+ setShape(x00, h10, z1, x01, h11, z2);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x10, h10, z1, x11, h11, z2);
+ tesselateBlockInWorld(tt, x, y, z);
+ }
+ } else {
+ if (direction == Direction::EAST || direction == Direction::WEST) {
+ upFlip = FLIP_CW;
+ float x0 = 7 / 16.0f;
+ float x1 = 9 / 16.0f;
+ float z0 = 6 / 16.0f;
+ float z1 = 8 / 16.0f;
+ setShape(x0, h00, z0, x1, h11, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ z0 = 8 / 16.0f;
+ z1 = 10 / 16.0f;
+ setShape(x0, h00, z0, x1, h11, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ z0 = 10 / 16.0f;
+ z1 = 14 / 16.0f;
+ setShape(x0, h00, z0, x1, h01, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x0, h10, z0, x1, h11, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ z0 = 2 / 16.0f;
+ z1 = 6 / 16.0f;
+ setShape(x0, h00, z0, x1, h01, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x0, h10, z0, x1, h11, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ } else {
+ float x0 = 6 / 16.0f;
+ float x1 = 8 / 16.0f;
+ float z0 = 7 / 16.0f;
+ float z1 = 9 / 16.0f;
+ setShape(x0, h00, z0, x1, h11, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ x0 = 8 / 16.0f;
+ x1 = 10 / 16.0f;
+ setShape(x0, h00, z0, x1, h11, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ x0 = 10 / 16.0f;
+ x1 = 14 / 16.0f;
+ setShape(x0, h00, z0, x1, h01, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x0, h10, z0, x1, h11, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ x0 = 2 / 16.0f;
+ x1 = 6 / 16.0f;
+ setShape(x0, h00, z0, x1, h01, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ setShape(x0, h10, z0, x1, h11, z1);
+ tesselateBlockInWorld(tt, x, y, z);
+ }
+ }
+ noCulling = false;
+ upFlip = FLIP_NONE;
setShape(0, 0, 0, 1, 1, 1);
// LeaveCriticalSection( &Tile_SPU::m_csShape );
-#endif // #ifdef DISABLE_TESS_FUNCS
+#endif // #ifdef DISABLE_TESS_FUNCS
return changed;
}
-bool TileRenderer_SPU::tesselateStairsInWorld( StairTile_SPU* tt, int x, int y, int z )
-{
+bool TileRenderer_SPU::tesselateStairsInWorld(StairTile_SPU* tt, int x, int y,
+ int z) {
#ifdef DISABLE_TESS_FUNCS
- // EnterCriticalSection( &Tile_SPU::m_csShape );
- tt->setBaseShape(level, x, y, z);
- setShape(tt);
- tesselateBlockInWorld(tt, x, y, z);
+ // EnterCriticalSection( &Tile_SPU::m_csShape );
+ tt->setBaseShape(level, x, y, z);
+ setShape(tt);
+ tesselateBlockInWorld(tt, x, y, z);
- bool checkInnerPiece = tt->setStepShape(level, x, y, z);
- setShape(tt);
- tesselateBlockInWorld(tt, x, y, z);
+ bool checkInnerPiece = tt->setStepShape(level, x, y, z);
+ setShape(tt);
+ tesselateBlockInWorld(tt, x, y, z);
- if (checkInnerPiece)
- {
- if (tt->setInnerPieceShape(level, x, y, z))
- {
- setShape(tt);
- tesselateBlockInWorld(tt, x, y, z);
- }
- }
+ if (checkInnerPiece) {
+ if (tt->setInnerPieceShape(level, x, y, z)) {
+ setShape(tt);
+ tesselateBlockInWorld(tt, x, y, z);
+ }
+ }
// LeaveCriticalSection( &Tile_SPU::m_csShape );
-#endif // #ifdef DISABLE_TESS_FUNCS
- return true;
+#endif // #ifdef DISABLE_TESS_FUNCS
+ return true;
}
-bool TileRenderer_SPU::tesselateDoorInWorld( Tile_SPU* tt, int x, int y, int z )
-{
- Tesselator_SPU* t = getTesselator();
+bool TileRenderer_SPU::tesselateDoorInWorld(Tile_SPU* tt, int x, int y, int z) {
+ Tesselator_SPU* t = getTesselator();
- // skip rendering if the other half of the door is missing,
- // to avoid rendering doors that are about to be removed
- int data = level->getData(x, y, z);
- if ((data & DoorTile_SPU::UPPER_BIT) != 0)
- {
- if (level->getTile(x, y - 1, z) != tt->id)
- {
- return false;
- }
- }
- else {
- if (level->getTile(x, y + 1, z) != tt->id)
- {
- return false;
- }
- }
+ // skip rendering if the other half of the door is missing,
+ // to avoid rendering doors that are about to be removed
+ int data = level->getData(x, y, z);
+ if ((data & DoorTile_SPU::UPPER_BIT) != 0) {
+ if (level->getTile(x, y - 1, z) != tt->id) {
+ return false;
+ }
+ } else {
+ if (level->getTile(x, y + 1, z) != tt->id) {
+ return false;
+ }
+ }
- bool changed = false;
- float c10 = 0.5f;
- float c11 = 1;
- float c2 = 0.8f;
- float c3 = 0.6f;
+ bool changed = false;
+ float c10 = 0.5f;
+ float c11 = 1;
+ float c2 = 0.8f;
+ float c3 = 0.6f;
- int centerColor = 0;
- float centerBrightness = 0.0f;
+ int centerColor = 0;
+ float centerBrightness = 0.0f;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- centerColor = tt->getLightColor( level, x, y, z );
- }
- else
- {
- centerBrightness = tt->getBrightness( level, x, y, z );
- }
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ centerColor = tt->getLightColor(level, x, y, z);
+ } else {
+ centerBrightness = tt->getBrightness(level, x, y, z);
+ }
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeY0 > 0 ? centerColor
+ : tt->getLightColor(level, x, y - 1, z));
+ t->color(c10, c10, c10);
+ } else {
+ float br = tt->getBrightness(level, x, y - 1, z);
+ if (tileShapeY0 > 0) br = centerBrightness;
+ if (level->m_tileData.lightEmission[tt->id] > 0) br = 1.0f;
+ t->color(c10 * br, c10 * br, c10 * br);
+ }
+ renderFaceDown(tt, x, y, z, getTexture(tt, level, x, y, z, 0));
+ changed = true;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeY0 > 0 ? centerColor : tt->getLightColor( level, x, y - 1, z ) );
- t->color( c10, c10, c10 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y - 1, z );
- if ( tileShapeY0 > 0 ) br = centerBrightness;
- if (level->m_tileData.lightEmission[tt->id] > 0 ) br = 1.0f;
- t->color( c10 * br, c10 * br, c10 * br );
- }
- renderFaceDown( tt, x, y, z, getTexture(tt, level, x, y, z, 0 ) );
- changed = true;
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeY1 < 1 ? centerColor
+ : tt->getLightColor(level, x, y + 1, z));
+ t->color(c11, c11, c11);
+ } else {
+ float br = tt->getBrightness(level, x, y + 1, z);
+ if (tileShapeY1 < 1) br = centerBrightness;
+ if (level->m_tileData.lightEmission[tt->id] > 0) br = 1.0f;
+ t->color(c11 * br, c11 * br, c11 * br);
+ }
+ renderFaceUp(tt, x, y, z, getTexture(tt, level, x, y, z, 1));
+ changed = true;
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeY1 < 1 ? centerColor : tt->getLightColor( level, x, y + 1, z ) );
- t->color( c11, c11, c11 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y + 1, z );
- if ( tileShapeY1 < 1 ) br = centerBrightness;
- if ( level->m_tileData.lightEmission[tt->id] > 0 ) br = 1.0f;
- t->color( c11 * br, c11 * br, c11 * br );
- }
- renderFaceUp( tt, x, y, z, getTexture(tt, level, x, y, z, 1 ) );
- changed = true;
-
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeZ0 > 0 ? centerColor : tt->getLightColor( level, x, y, z - 1 ) );
- t->color( c2, c2, c2 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z - 1 );
- if ( tileShapeZ0 > 0 ) br = centerBrightness;
- if ( level->m_tileData.lightEmission[tt->id] > 0 ) br = 1.0f;
- t->color( c2 * br, c2 * br, c2 * br );
- }
- Icon_SPU *tex = getTexture(tt, level, x, y, z, 2 );
- renderNorth( tt, x, y, z, tex );
- changed = true;
- xFlipTexture = false;
- }
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeZ1 < 1 ? centerColor : tt->getLightColor( level, x, y, z + 1 ) );
- t->color( c2, c2, c2 );
- }
- else
- {
- float br = tt->getBrightness( level, x, y, z + 1 );
- if ( tileShapeZ1 < 1 ) br = centerBrightness;
- if ( level->m_tileData.lightEmission[tt->id] > 0 ) br = 1.0f;
- t->color( c2 * br, c2 * br, c2 * br );
- }
- Icon_SPU *tex = getTexture( tt, level, x, y, z, 3 );
- renderSouth( tt, x, y, z, tex );
- changed = true;
- xFlipTexture = false;
- }
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeX0 > 0 ? centerColor : tt->getLightColor( level, x - 1, y, z ) );
- t->color( c3, c3, c3 );
- }
- else
- {
- float br = tt->getBrightness( level, x - 1, y, z );
- if ( tileShapeX0 > 0 ) br = centerBrightness;
- if ( level->m_tileData.lightEmission[tt->id] > 0 ) br = 1.0f;
- t->color( c3 * br, c3 * br, c3 * br );
- }
- Icon_SPU *tex = getTexture(tt, level, x, y, z, 4 );
- renderWest( tt, x, y, z, tex );
- changed = true;
- xFlipTexture = false;
- }
- {
- if ( SharedConstants::TEXTURE_LIGHTING )
- {
- t->tex2( tileShapeX1 < 1 ? centerColor : tt->getLightColor( level, x + 1, y, z ) );
- t->color( c3, c3, c3 );
- }
- else
- {
- float br = tt->getBrightness( level, x + 1, y, z );
- if ( tileShapeX1 < 1 ) br = centerBrightness;
- if ( level->m_tileData.lightEmission[tt->id] > 0 ) br = 1.0f;
- t->color( c3 * br, c3 * br, c3 * br );
- }
- Icon_SPU *tex = getTexture(tt, level, x, y, z, 5 );
- renderEast( tt, x, y, z, tex );
- changed = true;
- xFlipTexture = false;
- }
- return changed;
+ {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeZ0 > 0 ? centerColor
+ : tt->getLightColor(level, x, y, z - 1));
+ t->color(c2, c2, c2);
+ } else {
+ float br = tt->getBrightness(level, x, y, z - 1);
+ if (tileShapeZ0 > 0) br = centerBrightness;
+ if (level->m_tileData.lightEmission[tt->id] > 0) br = 1.0f;
+ t->color(c2 * br, c2 * br, c2 * br);
+ }
+ Icon_SPU* tex = getTexture(tt, level, x, y, z, 2);
+ renderNorth(tt, x, y, z, tex);
+ changed = true;
+ xFlipTexture = false;
+ }
+ {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeZ1 < 1 ? centerColor
+ : tt->getLightColor(level, x, y, z + 1));
+ t->color(c2, c2, c2);
+ } else {
+ float br = tt->getBrightness(level, x, y, z + 1);
+ if (tileShapeZ1 < 1) br = centerBrightness;
+ if (level->m_tileData.lightEmission[tt->id] > 0) br = 1.0f;
+ t->color(c2 * br, c2 * br, c2 * br);
+ }
+ Icon_SPU* tex = getTexture(tt, level, x, y, z, 3);
+ renderSouth(tt, x, y, z, tex);
+ changed = true;
+ xFlipTexture = false;
+ }
+ {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeX0 > 0 ? centerColor
+ : tt->getLightColor(level, x - 1, y, z));
+ t->color(c3, c3, c3);
+ } else {
+ float br = tt->getBrightness(level, x - 1, y, z);
+ if (tileShapeX0 > 0) br = centerBrightness;
+ if (level->m_tileData.lightEmission[tt->id] > 0) br = 1.0f;
+ t->color(c3 * br, c3 * br, c3 * br);
+ }
+ Icon_SPU* tex = getTexture(tt, level, x, y, z, 4);
+ renderWest(tt, x, y, z, tex);
+ changed = true;
+ xFlipTexture = false;
+ }
+ {
+ if (SharedConstants::TEXTURE_LIGHTING) {
+ t->tex2(tileShapeX1 < 1 ? centerColor
+ : tt->getLightColor(level, x + 1, y, z));
+ t->color(c3, c3, c3);
+ } else {
+ float br = tt->getBrightness(level, x + 1, y, z);
+ if (tileShapeX1 < 1) br = centerBrightness;
+ if (level->m_tileData.lightEmission[tt->id] > 0) br = 1.0f;
+ t->color(c3 * br, c3 * br, c3 * br);
+ }
+ Icon_SPU* tex = getTexture(tt, level, x, y, z, 5);
+ renderEast(tt, x, y, z, tex);
+ changed = true;
+ xFlipTexture = false;
+ }
+ return changed;
}
-void TileRenderer_SPU::renderFaceDown( Tile_SPU* tt, float x, float y, float z, Icon_SPU *tex )
-{
- Tesselator_SPU* t = getTesselator();
+void TileRenderer_SPU::renderFaceDown(Tile_SPU* tt, float x, float y, float z,
+ Icon_SPU* tex) {
+ Tesselator_SPU* t = getTesselator();
- if (hasFixedTexture()) tex = fixedTexture;
- float u00 = tex->getU(tileShapeX0 * 16.0f);
- float u11 = tex->getU(tileShapeX1 * 16.0f);
- float v00 = tex->getV(tileShapeZ0 * 16.0f);
- float v11 = tex->getV(tileShapeZ1 * 16.0f);
+ if (hasFixedTexture()) tex = fixedTexture;
+ float u00 = tex->getU(tileShapeX0 * 16.0f);
+ float u11 = tex->getU(tileShapeX1 * 16.0f);
+ float v00 = tex->getV(tileShapeZ0 * 16.0f);
+ float v11 = tex->getV(tileShapeZ1 * 16.0f);
- if ( tileShapeX0 < 0 || tileShapeX1 > 1 )
- {
- u00 = tex->getU0();
- u11 = tex->getU1();
- }
- if ( tileShapeZ0 < 0 || tileShapeZ1 > 1 )
- {
- v00 = tex->getV0();
- v11 = tex->getV1();
- }
+ if (tileShapeX0 < 0 || tileShapeX1 > 1) {
+ u00 = tex->getU0();
+ u11 = tex->getU1();
+ }
+ if (tileShapeZ0 < 0 || tileShapeZ1 > 1) {
+ v00 = tex->getV0();
+ v11 = tex->getV1();
+ }
- float u01 = u11, u10 = u00, v01 = v00, v10 = v11;
- if ( downFlip == FLIP_CCW )
- {
- u00 = tex->getU(tileShapeZ0 * 16.0f);
- v00 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
- u11 = tex->getU(tileShapeZ1 * 16.0f);
- v11 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
+ float u01 = u11, u10 = u00, v01 = v00, v10 = v11;
+ if (downFlip == FLIP_CCW) {
+ u00 = tex->getU(tileShapeZ0 * 16.0f);
+ v00 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
+ u11 = tex->getU(tileShapeZ1 * 16.0f);
+ v11 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- u01 = u00;
- u10 = u11;
- v00 = v11;
- v11 = v01;
- }
- else if ( downFlip == FLIP_CW )
- {
- // reshape
- u00 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
- v00 = tex->getV(tileShapeX0 * 16.0f);
- u11 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
- v11 = tex->getV(tileShapeX1 * 16.0f);
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ u01 = u00;
+ u10 = u11;
+ v00 = v11;
+ v11 = v01;
+ } else if (downFlip == FLIP_CW) {
+ // reshape
+ u00 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
+ v00 = tex->getV(tileShapeX0 * 16.0f);
+ u11 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
+ v11 = tex->getV(tileShapeX1 * 16.0f);
- // rotate
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- u00 = u01;
- u11 = u10;
- v01 = v11;
- v10 = v00;
- }
- else if ( downFlip == FLIP_180 )
- {
- u00 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
- u11 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
- v00 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
- v11 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
+ // rotate
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ u00 = u01;
+ u11 = u10;
+ v01 = v11;
+ v10 = v00;
+ } else if (downFlip == FLIP_180) {
+ u00 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
+ u11 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
+ v00 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
+ v11 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- }
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ }
- float x0 = x + tileShapeX0;
- float x1 = x + tileShapeX1;
- float y0 = y + tileShapeY0;
- float z0 = z + tileShapeZ0;
- float z1 = z + tileShapeZ1;
+ float x0 = x + tileShapeX0;
+ float x1 = x + tileShapeX1;
+ float y0 = y + tileShapeY0;
+ float z0 = z + tileShapeZ0;
+ float z1 = z + tileShapeZ1;
- if ( applyAmbienceOcclusion )
- {
- t->color( c1r, c1g, c1b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc1 );
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z1 ), ( float )( u10 ), ( float )( v10 ) );
- t->color( c2r, c2g, c2b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc2 );
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z0 ), ( float )( u00 ), ( float )( v00 ) );
- t->color( c3r, c3g, c3b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc3 );
- t->vertexUV( ( float )( x1 ), ( float )( y0 ), ( float )( z0 ), ( float )( u01 ), ( float )( v01 ) );
- t->color( c4r, c4g, c4b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc4 );
- t->vertexUV( ( float )( x1 ), ( float )( y0 ), ( float )( z1 ), ( float )( u11 ), ( float )( v11 ) );
- }
- else
- {
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z1 ), ( float )( u10 ), ( float )( v10 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z0 ), ( float )( u00 ), ( float )( v00 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y0 ), ( float )( z0 ), ( float )( u01 ), ( float )( v01 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y0 ), ( float )( z1 ), ( float )( u11 ), ( float )( v11 ) );
- }
+ if (applyAmbienceOcclusion) {
+ t->color(c1r, c1g, c1b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc1);
+ t->vertexUV((float)(x0), (float)(y0), (float)(z1), (float)(u10),
+ (float)(v10));
+ t->color(c2r, c2g, c2b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc2);
+ t->vertexUV((float)(x0), (float)(y0), (float)(z0), (float)(u00),
+ (float)(v00));
+ t->color(c3r, c3g, c3b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc3);
+ t->vertexUV((float)(x1), (float)(y0), (float)(z0), (float)(u01),
+ (float)(v01));
+ t->color(c4r, c4g, c4b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc4);
+ t->vertexUV((float)(x1), (float)(y0), (float)(z1), (float)(u11),
+ (float)(v11));
+ } else {
+ t->vertexUV((float)(x0), (float)(y0), (float)(z1), (float)(u10),
+ (float)(v10));
+ t->vertexUV((float)(x0), (float)(y0), (float)(z0), (float)(u00),
+ (float)(v00));
+ t->vertexUV((float)(x1), (float)(y0), (float)(z0), (float)(u01),
+ (float)(v01));
+ t->vertexUV((float)(x1), (float)(y0), (float)(z1), (float)(u11),
+ (float)(v11));
+ }
}
-void TileRenderer_SPU::renderFaceUp( Tile_SPU* tt, float x, float y, float z, Icon_SPU *tex )
-{
- Tesselator_SPU* t = getTesselator();
+void TileRenderer_SPU::renderFaceUp(Tile_SPU* tt, float x, float y, float z,
+ Icon_SPU* tex) {
+ Tesselator_SPU* t = getTesselator();
- if (hasFixedTexture()) tex = fixedTexture;
- float u00 = tex->getU(tileShapeX0 * 16.0f);
- float u11 = tex->getU(tileShapeX1 * 16.0f);
- float v00 = tex->getV(tileShapeZ0 * 16.0f);
- float v11 = tex->getV(tileShapeZ1 * 16.0f);
+ if (hasFixedTexture()) tex = fixedTexture;
+ float u00 = tex->getU(tileShapeX0 * 16.0f);
+ float u11 = tex->getU(tileShapeX1 * 16.0f);
+ float v00 = tex->getV(tileShapeZ0 * 16.0f);
+ float v11 = tex->getV(tileShapeZ1 * 16.0f);
- if ( tileShapeX0 < 0 || tileShapeX1 > 1 )
- {
- u00 = tex->getU0();
- u11 = tex->getU1();
- }
- if ( tileShapeZ0 < 0 || tileShapeZ1 > 1 )
- {
- v00 = tex->getV0();
- v11 = tex->getV1();
- }
+ if (tileShapeX0 < 0 || tileShapeX1 > 1) {
+ u00 = tex->getU0();
+ u11 = tex->getU1();
+ }
+ if (tileShapeZ0 < 0 || tileShapeZ1 > 1) {
+ v00 = tex->getV0();
+ v11 = tex->getV1();
+ }
- float u01 = u11, u10 = u00, v01 = v00, v10 = v11;
+ float u01 = u11, u10 = u00, v01 = v00, v10 = v11;
- if ( upFlip == FLIP_CW )
- {
- u00 = tex->getU(tileShapeZ0 * 16.0f);
- v00 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
- u11 = tex->getU(tileShapeZ1 * 16.0f);
- v11 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
+ if (upFlip == FLIP_CW) {
+ u00 = tex->getU(tileShapeZ0 * 16.0f);
+ v00 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
+ u11 = tex->getU(tileShapeZ1 * 16.0f);
+ v11 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- u01 = u00;
- u10 = u11;
- v00 = v11;
- v11 = v01;
- }
- else if ( upFlip == FLIP_CCW )
- {
- // reshape
- u00 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
- v00 = tex->getV(tileShapeX0 * 16.0f);
- u11 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
- v11 = tex->getV(tileShapeX1 * 16.0f);
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ u01 = u00;
+ u10 = u11;
+ v00 = v11;
+ v11 = v01;
+ } else if (upFlip == FLIP_CCW) {
+ // reshape
+ u00 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
+ v00 = tex->getV(tileShapeX0 * 16.0f);
+ u11 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
+ v11 = tex->getV(tileShapeX1 * 16.0f);
- // rotate
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- u00 = u01;
- u11 = u10;
- v01 = v11;
- v10 = v00;
- }
- else if ( upFlip == FLIP_180 )
- {
- u00 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
- u11 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
- v00 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
- v11 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
+ // rotate
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ u00 = u01;
+ u11 = u10;
+ v01 = v11;
+ v10 = v00;
+ } else if (upFlip == FLIP_180) {
+ u00 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
+ u11 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
+ v00 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
+ v11 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- }
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ }
+ float x0 = x + tileShapeX0;
+ float x1 = x + tileShapeX1;
+ float y1 = y + tileShapeY1;
+ float z0 = z + tileShapeZ0;
+ float z1 = z + tileShapeZ1;
- float x0 = x + tileShapeX0;
- float x1 = x + tileShapeX1;
- float y1 = y + tileShapeY1;
- float z0 = z + tileShapeZ0;
- float z1 = z + tileShapeZ1;
-
- if ( applyAmbienceOcclusion )
- {
- t->color( c1r, c1g, c1b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc1 );
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z1 ), ( float )( u11 ), ( float )( v11 ) );
- t->color( c2r, c2g, c2b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc2 );
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z0 ), ( float )( u01 ), ( float )( v01 ) );
- t->color( c3r, c3g, c3b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc3 );
- t->vertexUV( ( float )( x0 ), ( float )( y1 ), ( float )( z0 ), ( float )( u00 ), ( float )( v00 ) );
- t->color( c4r, c4g, c4b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc4 );
- t->vertexUV( ( float )( x0 ), ( float )( y1 ), ( float )( z1 ), ( float )( u10 ), ( float )( v10 ) );
- }
- else
- {
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z1 ), ( float )( u11 ), ( float )( v11 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z0 ), ( float )( u01 ), ( float )( v01 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y1 ), ( float )( z0 ), ( float )( u00 ), ( float )( v00 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y1 ), ( float )( z1 ), ( float )( u10 ), ( float )( v10 ) );
- }
-
+ if (applyAmbienceOcclusion) {
+ t->color(c1r, c1g, c1b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc1);
+ t->vertexUV((float)(x1), (float)(y1), (float)(z1), (float)(u11),
+ (float)(v11));
+ t->color(c2r, c2g, c2b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc2);
+ t->vertexUV((float)(x1), (float)(y1), (float)(z0), (float)(u01),
+ (float)(v01));
+ t->color(c3r, c3g, c3b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc3);
+ t->vertexUV((float)(x0), (float)(y1), (float)(z0), (float)(u00),
+ (float)(v00));
+ t->color(c4r, c4g, c4b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc4);
+ t->vertexUV((float)(x0), (float)(y1), (float)(z1), (float)(u10),
+ (float)(v10));
+ } else {
+ t->vertexUV((float)(x1), (float)(y1), (float)(z1), (float)(u11),
+ (float)(v11));
+ t->vertexUV((float)(x1), (float)(y1), (float)(z0), (float)(u01),
+ (float)(v01));
+ t->vertexUV((float)(x0), (float)(y1), (float)(z0), (float)(u00),
+ (float)(v00));
+ t->vertexUV((float)(x0), (float)(y1), (float)(z1), (float)(u10),
+ (float)(v10));
+ }
}
-void TileRenderer_SPU::renderNorth( Tile_SPU* tt, float x, float y, float z, Icon_SPU *tex )
-{
- Tesselator_SPU* t = getTesselator();
+void TileRenderer_SPU::renderNorth(Tile_SPU* tt, float x, float y, float z,
+ Icon_SPU* tex) {
+ Tesselator_SPU* t = getTesselator();
- if (hasFixedTexture()) tex = fixedTexture;
- float u00 = tex->getU(tileShapeX0 * 16.0f);
- float u11 = tex->getU(tileShapeX1 * 16.0f);
- float v00 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
- float v11 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
- if ( xFlipTexture )
- {
- float tmp = u00;
- u00 = u11;
- u11 = tmp;
- }
+ if (hasFixedTexture()) tex = fixedTexture;
+ float u00 = tex->getU(tileShapeX0 * 16.0f);
+ float u11 = tex->getU(tileShapeX1 * 16.0f);
+ float v00 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
+ float v11 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
+ if (xFlipTexture) {
+ float tmp = u00;
+ u00 = u11;
+ u11 = tmp;
+ }
- if ( tileShapeX0 < 0 || tileShapeX1 > 1 )
- {
- u00 = tex->getU0();
- u11 = tex->getU1();
- }
- if ( tileShapeY0 < 0 || tileShapeY1 > 1 )
- {
- v00 = tex->getV0();
- v11 = tex->getV1();
- }
+ if (tileShapeX0 < 0 || tileShapeX1 > 1) {
+ u00 = tex->getU0();
+ u11 = tex->getU1();
+ }
+ if (tileShapeY0 < 0 || tileShapeY1 > 1) {
+ v00 = tex->getV0();
+ v11 = tex->getV1();
+ }
- float u01 = u11, u10 = u00, v01 = v00, v10 = v11;
+ float u01 = u11, u10 = u00, v01 = v00, v10 = v11;
- if ( northFlip == FLIP_CCW )
- {
- u00 = tex->getU(tileShapeY0 * 16.0f);
- v00 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
- u11 = tex->getU(tileShapeY1 * 16.0f);
- v11 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
+ if (northFlip == FLIP_CCW) {
+ u00 = tex->getU(tileShapeY0 * 16.0f);
+ v00 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
+ u11 = tex->getU(tileShapeY1 * 16.0f);
+ v11 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- u01 = u00;
- u10 = u11;
- v00 = v11;
- v11 = v01;
- }
- else if ( northFlip == FLIP_CW )
- {
- // reshape
- u00 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
- v00 = tex->getV(tileShapeX1 * 16.0f);
- u11 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
- v11 = tex->getV(tileShapeX0 * 16.0f);
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ u01 = u00;
+ u10 = u11;
+ v00 = v11;
+ v11 = v01;
+ } else if (northFlip == FLIP_CW) {
+ // reshape
+ u00 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
+ v00 = tex->getV(tileShapeX1 * 16.0f);
+ u11 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
+ v11 = tex->getV(tileShapeX0 * 16.0f);
- // rotate
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- u00 = u01;
- u11 = u10;
- v01 = v11;
- v10 = v00;
- }
- else if ( northFlip == FLIP_180 )
- {
- u00 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
- u11 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
- v00 = tex->getV(tileShapeY1 * 16.0f);
- v11 = tex->getV(tileShapeY0 * 16.0f);
+ // rotate
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ u00 = u01;
+ u11 = u10;
+ v01 = v11;
+ v10 = v00;
+ } else if (northFlip == FLIP_180) {
+ u00 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
+ u11 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
+ v00 = tex->getV(tileShapeY1 * 16.0f);
+ v11 = tex->getV(tileShapeY0 * 16.0f);
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- }
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ }
+ float x0 = x + tileShapeX0;
+ float x1 = x + tileShapeX1;
+ float y0 = y + tileShapeY0;
+ float y1 = y + tileShapeY1;
+ float z0 = z + tileShapeZ0;
- float x0 = x + tileShapeX0;
- float x1 = x + tileShapeX1;
- float y0 = y + tileShapeY0;
- float y1 = y + tileShapeY1;
- float z0 = z + tileShapeZ0;
-
- if ( applyAmbienceOcclusion )
- {
- t->color( c1r, c1g, c1b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc1 );
- t->vertexUV( ( float )( x0 ), ( float )( y1 ), ( float )( z0 ), ( float )( u01 ), ( float )( v01 ) );
- t->color( c2r, c2g, c2b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc2 );
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z0 ), ( float )( u00 ), ( float )( v00 ) );
- t->color( c3r, c3g, c3b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc3 );
- t->vertexUV( ( float )( x1 ), ( float )( y0 ), ( float )( z0 ), ( float )( u10 ), ( float )( v10 ) );
- t->color( c4r, c4g, c4b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc4 );
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z0 ), ( float )( u11 ), ( float )( v11 ) );
- }
- else
- {
- t->vertexUV( ( float )( x0 ), ( float )( y1 ), ( float )( z0 ), ( float )( u01 ), ( float )( v01 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z0 ), ( float )( u00 ), ( float )( v00 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y0 ), ( float )( z0 ), ( float )( u10 ), ( float )( v10 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z0 ), ( float )( u11 ), ( float )( v11 ) );
- }
-
+ if (applyAmbienceOcclusion) {
+ t->color(c1r, c1g, c1b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc1);
+ t->vertexUV((float)(x0), (float)(y1), (float)(z0), (float)(u01),
+ (float)(v01));
+ t->color(c2r, c2g, c2b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc2);
+ t->vertexUV((float)(x1), (float)(y1), (float)(z0), (float)(u00),
+ (float)(v00));
+ t->color(c3r, c3g, c3b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc3);
+ t->vertexUV((float)(x1), (float)(y0), (float)(z0), (float)(u10),
+ (float)(v10));
+ t->color(c4r, c4g, c4b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc4);
+ t->vertexUV((float)(x0), (float)(y0), (float)(z0), (float)(u11),
+ (float)(v11));
+ } else {
+ t->vertexUV((float)(x0), (float)(y1), (float)(z0), (float)(u01),
+ (float)(v01));
+ t->vertexUV((float)(x1), (float)(y1), (float)(z0), (float)(u00),
+ (float)(v00));
+ t->vertexUV((float)(x1), (float)(y0), (float)(z0), (float)(u10),
+ (float)(v10));
+ t->vertexUV((float)(x0), (float)(y0), (float)(z0), (float)(u11),
+ (float)(v11));
+ }
}
-void TileRenderer_SPU::renderSouth( Tile_SPU* tt, float x, float y, float z, Icon_SPU *tex )
-{
- Tesselator_SPU* t = getTesselator();
+void TileRenderer_SPU::renderSouth(Tile_SPU* tt, float x, float y, float z,
+ Icon_SPU* tex) {
+ Tesselator_SPU* t = getTesselator();
- if (hasFixedTexture()) tex = fixedTexture;
- float u00 = tex->getU(tileShapeX0 * 16.0f);
- float u11 = tex->getU(tileShapeX1 * 16.0f);
- float v00 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
- float v11 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
- if ( xFlipTexture )
- {
- float tmp = u00;
- u00 = u11;
- u11 = tmp;
- }
+ if (hasFixedTexture()) tex = fixedTexture;
+ float u00 = tex->getU(tileShapeX0 * 16.0f);
+ float u11 = tex->getU(tileShapeX1 * 16.0f);
+ float v00 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
+ float v11 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
+ if (xFlipTexture) {
+ float tmp = u00;
+ u00 = u11;
+ u11 = tmp;
+ }
- if ( tileShapeX0 < 0 || tileShapeX1 > 1 )
- {
- u00 = tex->getU0();
- u11 = tex->getU1();
- }
- if ( tileShapeY0 < 0 || tileShapeY1 > 1 )
- {
- v00 = tex->getV0();
- v11 = tex->getV1();
- }
+ if (tileShapeX0 < 0 || tileShapeX1 > 1) {
+ u00 = tex->getU0();
+ u11 = tex->getU1();
+ }
+ if (tileShapeY0 < 0 || tileShapeY1 > 1) {
+ v00 = tex->getV0();
+ v11 = tex->getV1();
+ }
- float u01 = u11, u10 = u00, v01 = v00, v10 = v11;
+ float u01 = u11, u10 = u00, v01 = v00, v10 = v11;
- if ( southFlip == FLIP_CW )
- {
- u00 = tex->getU(tileShapeY0 * 16.0f);
- v11 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
- u11 = tex->getU(tileShapeY1 * 16.0f);
- v00 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
+ if (southFlip == FLIP_CW) {
+ u00 = tex->getU(tileShapeY0 * 16.0f);
+ v11 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
+ u11 = tex->getU(tileShapeY1 * 16.0f);
+ v00 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- u01 = u00;
- u10 = u11;
- v00 = v11;
- v11 = v01;
- }
- else if ( southFlip == FLIP_CCW )
- {
- // reshape
- u00 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
- v00 = tex->getV(tileShapeX0 * 16.0f);
- u11 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
- v11 = tex->getV(tileShapeX1 * 16.0f);
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ u01 = u00;
+ u10 = u11;
+ v00 = v11;
+ v11 = v01;
+ } else if (southFlip == FLIP_CCW) {
+ // reshape
+ u00 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
+ v00 = tex->getV(tileShapeX0 * 16.0f);
+ u11 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
+ v11 = tex->getV(tileShapeX1 * 16.0f);
- // rotate
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- u00 = u01;
- u11 = u10;
- v01 = v11;
- v10 = v00;
- }
- else if ( southFlip == FLIP_180 )
- {
- u00 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
- u11 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
- v00 = tex->getV(tileShapeY1 * 16.0f);
- v11 = tex->getV(tileShapeY0 * 16.0f);
+ // rotate
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ u00 = u01;
+ u11 = u10;
+ v01 = v11;
+ v10 = v00;
+ } else if (southFlip == FLIP_180) {
+ u00 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX0 * 16.0f);
+ u11 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeX1 * 16.0f);
+ v00 = tex->getV(tileShapeY1 * 16.0f);
+ v11 = tex->getV(tileShapeY0 * 16.0f);
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- }
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ }
+ float x0 = x + tileShapeX0;
+ float x1 = x + tileShapeX1;
+ float y0 = y + tileShapeY0;
+ float y1 = y + tileShapeY1;
+ float z1 = z + tileShapeZ1;
- float x0 = x + tileShapeX0;
- float x1 = x + tileShapeX1;
- float y0 = y + tileShapeY0;
- float y1 = y + tileShapeY1;
- float z1 = z + tileShapeZ1;
-
- if ( applyAmbienceOcclusion )
- {
- t->color( c1r, c1g, c1b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc1 );
- t->vertexUV( ( float )( x0 ), ( float )( y1 ), ( float )( z1 ), ( float )( u00 ), ( float )( v00 ) );
- t->color( c2r, c2g, c2b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc2 );
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z1 ), ( float )( u10 ), ( float )( v10 ) );
- t->color( c3r, c3g, c3b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc3 );
- t->vertexUV( ( float )( x1 ), ( float )( y0 ), ( float )( z1 ), ( float )( u11 ), ( float )( v11 ) );
- t->color( c4r, c4g, c4b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc4 );
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z1 ), ( float )( u01 ), ( float )( v01 ) );
- }
- else
- {
- t->vertexUV( ( float )( x0 ), ( float )( y1 ), ( float )( z1 ), ( float )( u00 ), ( float )( v00 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z1 ), ( float )( u10 ), ( float )( v10 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y0 ), ( float )( z1 ), ( float )( u11 ), ( float )( v11 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z1 ), ( float )( u01 ), ( float )( v01 ) );
- }
-
+ if (applyAmbienceOcclusion) {
+ t->color(c1r, c1g, c1b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc1);
+ t->vertexUV((float)(x0), (float)(y1), (float)(z1), (float)(u00),
+ (float)(v00));
+ t->color(c2r, c2g, c2b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc2);
+ t->vertexUV((float)(x0), (float)(y0), (float)(z1), (float)(u10),
+ (float)(v10));
+ t->color(c3r, c3g, c3b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc3);
+ t->vertexUV((float)(x1), (float)(y0), (float)(z1), (float)(u11),
+ (float)(v11));
+ t->color(c4r, c4g, c4b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc4);
+ t->vertexUV((float)(x1), (float)(y1), (float)(z1), (float)(u01),
+ (float)(v01));
+ } else {
+ t->vertexUV((float)(x0), (float)(y1), (float)(z1), (float)(u00),
+ (float)(v00));
+ t->vertexUV((float)(x0), (float)(y0), (float)(z1), (float)(u10),
+ (float)(v10));
+ t->vertexUV((float)(x1), (float)(y0), (float)(z1), (float)(u11),
+ (float)(v11));
+ t->vertexUV((float)(x1), (float)(y1), (float)(z1), (float)(u01),
+ (float)(v01));
+ }
}
-void TileRenderer_SPU::renderWest( Tile_SPU* tt, float x, float y, float z, Icon_SPU *tex )
-{
- Tesselator_SPU* t = getTesselator();
+void TileRenderer_SPU::renderWest(Tile_SPU* tt, float x, float y, float z,
+ Icon_SPU* tex) {
+ Tesselator_SPU* t = getTesselator();
- if (hasFixedTexture()) tex = fixedTexture;
- float u00 = tex->getU(tileShapeZ0 * 16.0f);
- float u11 = tex->getU(tileShapeZ1 * 16.0f);
- float v00 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
- float v11 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
- if ( xFlipTexture )
- {
- float tmp = u00;
- u00 = u11;
- u11 = tmp;
- }
+ if (hasFixedTexture()) tex = fixedTexture;
+ float u00 = tex->getU(tileShapeZ0 * 16.0f);
+ float u11 = tex->getU(tileShapeZ1 * 16.0f);
+ float v00 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
+ float v11 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
+ if (xFlipTexture) {
+ float tmp = u00;
+ u00 = u11;
+ u11 = tmp;
+ }
- if ( tileShapeZ0 < 0 || tileShapeZ1 > 1 )
- {
- u00 = tex->getU0();
- u11 = tex->getU1();
- }
- if ( tileShapeY0 < 0 || tileShapeY1 > 1 )
- {
- v00 = tex->getV0();
- v11 = tex->getV1();
- }
+ if (tileShapeZ0 < 0 || tileShapeZ1 > 1) {
+ u00 = tex->getU0();
+ u11 = tex->getU1();
+ }
+ if (tileShapeY0 < 0 || tileShapeY1 > 1) {
+ v00 = tex->getV0();
+ v11 = tex->getV1();
+ }
- float u01 = u11, u10 = u00, v01 = v00, v10 = v11;
+ float u01 = u11, u10 = u00, v01 = v00, v10 = v11;
- if ( westFlip == FLIP_CW )
- {
- u00 = tex->getU(tileShapeY0 * 16.0f);
- v00 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
- u11 = tex->getU(tileShapeY1 * 16.0f);
- v11 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
+ if (westFlip == FLIP_CW) {
+ u00 = tex->getU(tileShapeY0 * 16.0f);
+ v00 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
+ u11 = tex->getU(tileShapeY1 * 16.0f);
+ v11 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- u01 = u00;
- u10 = u11;
- v00 = v11;
- v11 = v01;
- }
- else if ( westFlip == FLIP_CCW )
- {
- // reshape
- u00 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
- v00 = tex->getV(tileShapeZ0 * 16.0f);
- u11 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
- v11 = tex->getV(tileShapeZ1 * 16.0f);
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ u01 = u00;
+ u10 = u11;
+ v00 = v11;
+ v11 = v01;
+ } else if (westFlip == FLIP_CCW) {
+ // reshape
+ u00 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
+ v00 = tex->getV(tileShapeZ0 * 16.0f);
+ u11 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
+ v11 = tex->getV(tileShapeZ1 * 16.0f);
- // rotate
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- u00 = u01;
- u11 = u10;
- v01 = v11;
- v10 = v00;
- }
- else if ( westFlip == FLIP_180 )
- {
- u00 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
- u11 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
- v00 = tex->getV(tileShapeY1 * 16.0f);
- v11 = tex->getV(tileShapeY0 * 16.0f);
+ // rotate
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ u00 = u01;
+ u11 = u10;
+ v01 = v11;
+ v10 = v00;
+ } else if (westFlip == FLIP_180) {
+ u00 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
+ u11 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
+ v00 = tex->getV(tileShapeY1 * 16.0f);
+ v11 = tex->getV(tileShapeY0 * 16.0f);
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ }
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- }
-
- float x0 = x + tileShapeX0;
- float y0 = y + tileShapeY0;
- float y1 = y + tileShapeY1;
- float z0 = z + tileShapeZ0;
- float z1 = z + tileShapeZ1;
-
- if ( applyAmbienceOcclusion )
- {
- t->color( c1r, c1g, c1b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc1 );
- t->vertexUV( ( float )( x0 ), ( float )( y1 ), ( float )( z1 ), ( float )( u01 ), ( float )( v01 ) );
- t->color( c2r, c2g, c2b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc2 );
- t->vertexUV( ( float )( x0 ), ( float )( y1 ), ( float )( z0 ), ( float )( u00 ), ( float )( v00 ) );
- t->color( c3r, c3g, c3b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc3 );
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z0 ), ( float )( u10 ), ( float )( v10 ) );
- t->color( c4r, c4g, c4b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc4 );
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z1 ), ( float )( u11 ), ( float )( v11 ) );
- }
- else
- {
- t->vertexUV( ( float )( x0 ), ( float )( y1 ), ( float )( z1 ), ( float )( u01 ), ( float )( v01 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y1 ), ( float )( z0 ), ( float )( u00 ), ( float )( v00 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z0 ), ( float )( u10 ), ( float )( v10 ) );
- t->vertexUV( ( float )( x0 ), ( float )( y0 ), ( float )( z1 ), ( float )( u11 ), ( float )( v11 ) );
- }
+ float x0 = x + tileShapeX0;
+ float y0 = y + tileShapeY0;
+ float y1 = y + tileShapeY1;
+ float z0 = z + tileShapeZ0;
+ float z1 = z + tileShapeZ1;
+ if (applyAmbienceOcclusion) {
+ t->color(c1r, c1g, c1b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc1);
+ t->vertexUV((float)(x0), (float)(y1), (float)(z1), (float)(u01),
+ (float)(v01));
+ t->color(c2r, c2g, c2b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc2);
+ t->vertexUV((float)(x0), (float)(y1), (float)(z0), (float)(u00),
+ (float)(v00));
+ t->color(c3r, c3g, c3b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc3);
+ t->vertexUV((float)(x0), (float)(y0), (float)(z0), (float)(u10),
+ (float)(v10));
+ t->color(c4r, c4g, c4b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc4);
+ t->vertexUV((float)(x0), (float)(y0), (float)(z1), (float)(u11),
+ (float)(v11));
+ } else {
+ t->vertexUV((float)(x0), (float)(y1), (float)(z1), (float)(u01),
+ (float)(v01));
+ t->vertexUV((float)(x0), (float)(y1), (float)(z0), (float)(u00),
+ (float)(v00));
+ t->vertexUV((float)(x0), (float)(y0), (float)(z0), (float)(u10),
+ (float)(v10));
+ t->vertexUV((float)(x0), (float)(y0), (float)(z1), (float)(u11),
+ (float)(v11));
+ }
}
-void TileRenderer_SPU::renderEast( Tile_SPU* tt, float x, float y, float z, Icon_SPU *tex )
-{
- Tesselator_SPU* t = getTesselator();
+void TileRenderer_SPU::renderEast(Tile_SPU* tt, float x, float y, float z,
+ Icon_SPU* tex) {
+ Tesselator_SPU* t = getTesselator();
- if (hasFixedTexture()) tex = fixedTexture;
- float u00 = tex->getU(tileShapeZ0 * 16.0f);
- float u11 = tex->getU(tileShapeZ1 * 16.0f);
- float v00 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
- float v11 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
- if ( xFlipTexture )
- {
- float tmp = u00;
- u00 = u11;
- u11 = tmp;
- }
+ if (hasFixedTexture()) tex = fixedTexture;
+ float u00 = tex->getU(tileShapeZ0 * 16.0f);
+ float u11 = tex->getU(tileShapeZ1 * 16.0f);
+ float v00 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
+ float v11 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
+ if (xFlipTexture) {
+ float tmp = u00;
+ u00 = u11;
+ u11 = tmp;
+ }
- if ( tileShapeZ0 < 0 || tileShapeZ1 > 1 )
- {
- u00 = tex->getU0();
- u11 = tex->getU1();
- }
- if ( tileShapeY0 < 0 || tileShapeY1 > 1 )
- {
- v00 = tex->getV0();
- v11 = tex->getV1();
- }
+ if (tileShapeZ0 < 0 || tileShapeZ1 > 1) {
+ u00 = tex->getU0();
+ u11 = tex->getU1();
+ }
+ if (tileShapeY0 < 0 || tileShapeY1 > 1) {
+ v00 = tex->getV0();
+ v11 = tex->getV1();
+ }
- float u01 = u11, u10 = u00, v01 = v00, v10 = v11;
+ float u01 = u11, u10 = u00, v01 = v00, v10 = v11;
- if ( eastFlip == FLIP_CCW )
- {
- u00 = tex->getU(tileShapeY0 * 16.0f);
- v00 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
- u11 = tex->getU(tileShapeY1 * 16.0f);
- v11 = tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
+ if (eastFlip == FLIP_CCW) {
+ u00 = tex->getU(tileShapeY0 * 16.0f);
+ v00 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
+ u11 = tex->getU(tileShapeY1 * 16.0f);
+ v11 =
+ tex->getV(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- u01 = u00;
- u10 = u11;
- v00 = v11;
- v11 = v01;
- }
- else if ( eastFlip == FLIP_CW )
- {
- // reshape
- u00 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
- v00 = tex->getV(tileShapeZ1 * 16.0f);
- u11 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
- v11 = tex->getV(tileShapeZ0 * 16.0f);
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ u01 = u00;
+ u10 = u11;
+ v00 = v11;
+ v11 = v01;
+ } else if (eastFlip == FLIP_CW) {
+ // reshape
+ u00 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY1 * 16.0f);
+ v00 = tex->getV(tileShapeZ1 * 16.0f);
+ u11 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeY0 * 16.0f);
+ v11 = tex->getV(tileShapeZ0 * 16.0f);
- // rotate
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- u00 = u01;
- u11 = u10;
- v01 = v11;
- v10 = v00;
- }
- else if ( eastFlip == FLIP_180 )
- {
- u00 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
- u11 = tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
- v00 = tex->getV(tileShapeY1 * 16.0f);
- v11 = tex->getV(tileShapeY0 * 16.0f);
+ // rotate
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ u00 = u01;
+ u11 = u10;
+ v01 = v11;
+ v10 = v00;
+ } else if (eastFlip == FLIP_180) {
+ u00 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ0 * 16.0f);
+ u11 =
+ tex->getU(SharedConstants::WORLD_RESOLUTION - tileShapeZ1 * 16.0f);
+ v00 = tex->getV(tileShapeY1 * 16.0f);
+ v11 = tex->getV(tileShapeY0 * 16.0f);
- u01 = u11;
- u10 = u00;
- v01 = v00;
- v10 = v11;
- }
+ u01 = u11;
+ u10 = u00;
+ v01 = v00;
+ v10 = v11;
+ }
- float x1 = x + tileShapeX1;
- float y0 = y + tileShapeY0;
- float y1 = y + tileShapeY1;
- float z0 = z + tileShapeZ0;
- float z1 = z + tileShapeZ1;
-
- if ( applyAmbienceOcclusion )
- {
- t->color( c1r, c1g, c1b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc1 );
- t->vertexUV( ( float )( x1 ), ( float )( y0 ), ( float )( z1 ), ( float )( u10 ), ( float )( v10 ) );
- t->color( c2r, c2g, c2b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc2 );
- t->vertexUV( ( float )( x1 ), ( float )( y0 ), ( float )( z0 ), ( float )( u11 ), ( float )( v11 ) );
- t->color( c3r, c3g, c3b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc3 );
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z0 ), ( float )( u01 ), ( float )( v01 ) );
- t->color( c4r, c4g, c4b );
- if ( SharedConstants::TEXTURE_LIGHTING ) t->tex2( tc4 );
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z1 ), ( float )( u00 ), ( float )( v00 ) );
- }
- else
- {
- t->vertexUV( ( float )( x1 ), ( float )( y0 ), ( float )( z1 ), ( float )( u10 ), ( float )( v10 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y0 ), ( float )( z0 ), ( float )( u11 ), ( float )( v11 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z0 ), ( float )( u01 ), ( float )( v01 ) );
- t->vertexUV( ( float )( x1 ), ( float )( y1 ), ( float )( z1 ), ( float )( u00 ), ( float )( v00 ) );
- }
+ float x1 = x + tileShapeX1;
+ float y0 = y + tileShapeY0;
+ float y1 = y + tileShapeY1;
+ float z0 = z + tileShapeZ0;
+ float z1 = z + tileShapeZ1;
+ if (applyAmbienceOcclusion) {
+ t->color(c1r, c1g, c1b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc1);
+ t->vertexUV((float)(x1), (float)(y0), (float)(z1), (float)(u10),
+ (float)(v10));
+ t->color(c2r, c2g, c2b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc2);
+ t->vertexUV((float)(x1), (float)(y0), (float)(z0), (float)(u11),
+ (float)(v11));
+ t->color(c3r, c3g, c3b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc3);
+ t->vertexUV((float)(x1), (float)(y1), (float)(z0), (float)(u01),
+ (float)(v01));
+ t->color(c4r, c4g, c4b);
+ if (SharedConstants::TEXTURE_LIGHTING) t->tex2(tc4);
+ t->vertexUV((float)(x1), (float)(y1), (float)(z1), (float)(u00),
+ (float)(v00));
+ } else {
+ t->vertexUV((float)(x1), (float)(y0), (float)(z1), (float)(u10),
+ (float)(v10));
+ t->vertexUV((float)(x1), (float)(y0), (float)(z0), (float)(u11),
+ (float)(v11));
+ t->vertexUV((float)(x1), (float)(y1), (float)(z0), (float)(u01),
+ (float)(v01));
+ t->vertexUV((float)(x1), (float)(y1), (float)(z1), (float)(u00),
+ (float)(v00));
+ }
}
-bool TileRenderer_SPU::canRender( int renderShape )
-{
- if ( renderShape == Tile_SPU::SHAPE_BLOCK ) return true;
- if ( renderShape == Tile_SPU::SHAPE_TREE ) return true;
- if ( renderShape == Tile_SPU::SHAPE_QUARTZ) return true;
- if ( renderShape == Tile_SPU::SHAPE_CACTUS ) return true;
- if ( renderShape == Tile_SPU::SHAPE_STAIRS ) return true;
- if ( renderShape == Tile_SPU::SHAPE_FENCE ) return true;
- if ( renderShape == Tile_SPU::SHAPE_EGG) return true;
- if ( renderShape == Tile_SPU::SHAPE_ENTITYTILE_ANIMATED) return true;
- if ( renderShape == Tile_SPU::SHAPE_FENCE_GATE) return true;
- if ( renderShape == Tile_SPU::SHAPE_PISTON_BASE ) return true;
- if ( renderShape == Tile_SPU::SHAPE_PORTAL_FRAME ) return true;
- if ( renderShape == Tile_SPU::SHAPE_WALL) return true;
- if ( renderShape == Tile_SPU::SHAPE_ANVIL) return true;
- return false;
+bool TileRenderer_SPU::canRender(int renderShape) {
+ if (renderShape == Tile_SPU::SHAPE_BLOCK) return true;
+ if (renderShape == Tile_SPU::SHAPE_TREE) return true;
+ if (renderShape == Tile_SPU::SHAPE_QUARTZ) return true;
+ if (renderShape == Tile_SPU::SHAPE_CACTUS) return true;
+ if (renderShape == Tile_SPU::SHAPE_STAIRS) return true;
+ if (renderShape == Tile_SPU::SHAPE_FENCE) return true;
+ if (renderShape == Tile_SPU::SHAPE_EGG) return true;
+ if (renderShape == Tile_SPU::SHAPE_ENTITYTILE_ANIMATED) return true;
+ if (renderShape == Tile_SPU::SHAPE_FENCE_GATE) return true;
+ if (renderShape == Tile_SPU::SHAPE_PISTON_BASE) return true;
+ if (renderShape == Tile_SPU::SHAPE_PORTAL_FRAME) return true;
+ if (renderShape == Tile_SPU::SHAPE_WALL) return true;
+ if (renderShape == Tile_SPU::SHAPE_ANVIL) return true;
+ return false;
}
-Icon_SPU *TileRenderer_SPU::getTexture(Tile_SPU *tile, ChunkRebuildData *level, int x, int y, int z, int face)
-{
- return getTextureOrMissing(tile->getTexture(level, x, y, z, face));
+Icon_SPU* TileRenderer_SPU::getTexture(Tile_SPU* tile, ChunkRebuildData* level,
+ int x, int y, int z, int face) {
+ return getTextureOrMissing(tile->getTexture(level, x, y, z, face));
}
-Icon_SPU *TileRenderer_SPU::getTexture(Tile_SPU *tile, int face, int data)
-{
- return getTextureOrMissing(tile->getTexture(face, data));
+Icon_SPU* TileRenderer_SPU::getTexture(Tile_SPU* tile, int face, int data) {
+ return getTextureOrMissing(tile->getTexture(face, data));
}
-Icon_SPU *TileRenderer_SPU::getTexture(Tile_SPU *tile, int face)
-{
- return getTextureOrMissing(tile->getTexture(face));
+Icon_SPU* TileRenderer_SPU::getTexture(Tile_SPU* tile, int face) {
+ return getTextureOrMissing(tile->getTexture(face));
}
-Icon_SPU *TileRenderer_SPU::getTexture(Tile_SPU *tile)
-{
- return getTextureOrMissing(tile->getTexture(Facing::UP));
+Icon_SPU* TileRenderer_SPU::getTexture(Tile_SPU* tile) {
+ return getTextureOrMissing(tile->getTexture(Facing::UP));
}
-Icon_SPU *TileRenderer_SPU::getTextureOrMissing(Icon_SPU *Icon_SPU)
-{
- if (Icon_SPU == NULL)
- {
- assert(0);
- // return minecraft->textures->getMissingIcon_SPU(Icon_SPU::TYPE_TERRAIN);
- }
- return Icon_SPU;
-}
\ No newline at end of file
+Icon_SPU* TileRenderer_SPU::getTextureOrMissing(Icon_SPU* Icon_SPU) {
+ if (Icon_SPU == NULL) {
+ assert(0);
+ // return
+ // minecraft->textures->getMissingIcon_SPU(Icon_SPU::TYPE_TERRAIN);
+ }
+ return Icon_SPU;
+}
diff --git a/Minecraft.Client/Platform/PS3/SPU_Tasks/ChunkUpdate/Tile_SPU.cpp b/Minecraft.Client/Platform/PS3/SPU_Tasks/ChunkUpdate/Tile_SPU.cpp
index eb768ac4c..8e7a0af90 100644
--- a/Minecraft.Client/Platform/PS3/SPU_Tasks/ChunkUpdate/Tile_SPU.cpp
+++ b/Minecraft.Client/Platform/PS3/SPU_Tasks/ChunkUpdate/Tile_SPU.cpp
@@ -96,36 +96,28 @@ TileData_SPU* Tile_SPU::ms_pTileData = NULL;
Tile_SPU Tile_SPU::m_tiles[256];
+int Tile_SPU::getRenderShape() { return SHAPE_BLOCK; }
-
-int Tile_SPU::getRenderShape()
-{
- return SHAPE_BLOCK;
+void Tile_SPU::setShape(float x0, float y0, float z0, float x1, float y1,
+ float z1) {
+ ms_pTileData->xx0[id] = x0;
+ ms_pTileData->yy0[id] = y0;
+ ms_pTileData->zz0[id] = z0;
+ ms_pTileData->xx1[id] = x1;
+ ms_pTileData->yy1[id] = y1;
+ ms_pTileData->zz1[id] = z1;
}
-
-void Tile_SPU::setShape(float x0, float y0, float z0, float x1, float y1, float z1)
-{
- ms_pTileData->xx0[id] = x0;
- ms_pTileData->yy0[id] = y0;
- ms_pTileData->zz0[id] = z0;
- ms_pTileData->xx1[id] = x1;
- ms_pTileData->yy1[id] = y1;
- ms_pTileData->zz1[id] = z1;
+float Tile_SPU::getBrightness(ChunkRebuildData* level, int x, int y, int z) {
+ return level->getBrightness(x, y, z, ms_pTileData->lightEmission[id]);
}
-
-float Tile_SPU::getBrightness(ChunkRebuildData *level, int x, int y, int z)
-{
- return level->getBrightness(x, y, z, ms_pTileData->lightEmission[id]);
-}
-//
+//
// // 4J - brought forward from 1.8.2
-int Tile_SPU::getLightColor(ChunkRebuildData *level, int x, int y, int z)
-{
- int tileID = level->getTile(x, y, z);
- return level->getLightColor(x, y, z, ms_pTileData->lightEmission[tileID]);
+int Tile_SPU::getLightColor(ChunkRebuildData* level, int x, int y, int z) {
+ int tileID = level->getTile(x, y, z);
+ return level->getLightColor(x, y, z, ms_pTileData->lightEmission[tileID]);
}
-//
+//
// bool Tile_SPU::isFaceVisible(Level *level, int x, int y, int z, int f)
// {
// if (f == 0) y--;
@@ -136,197 +128,198 @@ int Tile_SPU::getLightColor(ChunkRebuildData *level, int x, int y, int z)
// if (f == 5) x++;
// return !level->isSolidRenderTile(x, y, z);
// }
-//
-bool Tile_SPU::shouldRenderFace(ChunkRebuildData *level, int x, int y, int z, int face)
-{
- if (face == 0 && getShapeY0() > 0) return true;
- if (face == 1 && getShapeY1() < 1) return true;
- if (face == 2 && getShapeZ0() > 0) return true;
- if (face == 3 && getShapeZ1() < 1) return true;
- if (face == 4 && getShapeX0() > 0) return true;
- if (face == 5 && getShapeX1() < 1) return true;
- return (!level->isSolidRenderTile(x, y, z));
+//
+bool Tile_SPU::shouldRenderFace(ChunkRebuildData* level, int x, int y, int z,
+ int face) {
+ if (face == 0 && getShapeY0() > 0) return true;
+ if (face == 1 && getShapeY1() < 1) return true;
+ if (face == 2 && getShapeZ0() > 0) return true;
+ if (face == 3 && getShapeZ1() < 1) return true;
+ if (face == 4 && getShapeX0() > 0) return true;
+ if (face == 5 && getShapeX1() < 1) return true;
+ return (!level->isSolidRenderTile(x, y, z));
}
-//
-bool Tile_SPU::isSolidFace(ChunkRebuildData *level, int x, int y, int z, int face)
-{
- return (level->getMaterial(x, y, z)->isSolid());
+//
+bool Tile_SPU::isSolidFace(ChunkRebuildData* level, int x, int y, int z,
+ int face) {
+ return (level->getMaterial(x, y, z)->isSolid());
}
-Icon_SPU *Tile_SPU::getTexture(ChunkRebuildData *level, int x, int y, int z, int face)
-{
- // 4J - addition here to make rendering big blocks of leaves more efficient. Normally leaves never consider themselves as solid, so
- // blocks of leaves will have all sides of each block completely visible. Changing to consider as solid if this block is surrounded by
- // other leaves. This is paired with another change in Level::isSolidRenderTile/Region::isSolidRenderTile which makes things solid
- // code-wise (ie for determining visible sides of neighbouring blocks). This change just makes the texture a solid one (tex + 1) which
- // we already have in the texture map for doing non-fancy graphics. Note: this tile-specific code is here rather than making some new virtual
- // method in the tiles, for the sake of efficiency - I don't imagine we'll be doing much more of this sort of thing
+Icon_SPU* Tile_SPU::getTexture(ChunkRebuildData* level, int x, int y, int z,
+ int face) {
+ // 4J - addition here to make rendering big blocks of leaves more efficient.
+ // Normally leaves never consider themselves as solid, so blocks of leaves
+ // will have all sides of each block completely visible. Changing to
+ // consider as solid if this block is surrounded by other leaves. This is
+ // paired with another change in
+ // Level::isSolidRenderTile/Region::isSolidRenderTile which makes things
+ // solid code-wise (ie for determining visible sides of neighbouring
+ // blocks). This change just makes the texture a solid one (tex + 1) which
+ // we already have in the texture map for doing non-fancy graphics. Note:
+ // this tile-specific code is here rather than making some new virtual
+ // method in the tiles, for the sake of efficiency - I don't imagine we'll
+ // be doing much more of this sort of thing
- int tileId = level->getTile(x, y, z);
- int tileData = level->getData(x, y, z);
+ int tileId = level->getTile(x, y, z);
+ int tileData = level->getData(x, y, z);
- if( tileId == Tile_SPU::leaves_Id )
- {
- bool opaque = true;
- int axo[6] = { 1,-1, 0, 0, 0, 0};
- int ayo[6] = { 0, 0, 1,-1, 0, 0};
- int azo[6] = { 0, 0, 0, 0, 1,-1};
- for( int i = 0; (i < 6) && opaque; i++ )
- {
- int t = level->getTile(x + axo[i], y + ayo[i] , z + azo[i]);
- if( ( t != Tile_SPU::leaves_Id ) && ( ( Tile_SPU::m_tiles[t].id == -1) || !Tile_SPU::m_tiles[t].isSolidRender() ) )
- {
- opaque = false;
- }
- }
+ if (tileId == Tile_SPU::leaves_Id) {
+ bool opaque = true;
+ int axo[6] = {1, -1, 0, 0, 0, 0};
+ int ayo[6] = {0, 0, 1, -1, 0, 0};
+ int azo[6] = {0, 0, 0, 0, 1, -1};
+ for (int i = 0; (i < 6) && opaque; i++) {
+ int t = level->getTile(x + axo[i], y + ayo[i], z + azo[i]);
+ if ((t != Tile_SPU::leaves_Id) &&
+ ((Tile_SPU::m_tiles[t].id == -1) ||
+ !Tile_SPU::m_tiles[t].isSolidRender())) {
+ opaque = false;
+ }
+ }
-
- Icon_SPU *icon = NULL;
- if(opaque)
- {
- LeafTile_SPU::setFancy(false);
- icon = getTexture(face, tileData);
- LeafTile_SPU::setFancy(true);
- }
- else
- {
- icon = getTexture(face, tileData);
- }
- return icon;
- }
- return getTexture(face, tileData);
+ Icon_SPU* icon = NULL;
+ if (opaque) {
+ LeafTile_SPU::setFancy(false);
+ icon = getTexture(face, tileData);
+ LeafTile_SPU::setFancy(true);
+ } else {
+ icon = getTexture(face, tileData);
+ }
+ return icon;
+ }
+ return getTexture(face, tileData);
}
-//
-Icon_SPU *Tile_SPU::getTexture(int face, int data)
-{
- return &ms_pTileData->iconData[id];
+//
+Icon_SPU* Tile_SPU::getTexture(int face, int data) {
+ return &ms_pTileData->iconData[id];
}
-//
-Icon_SPU *Tile_SPU::getTexture(int face)
-{
- return getTexture(face, 0);
-}
-//
+//
+Icon_SPU* Tile_SPU::getTexture(int face) { return getTexture(face, 0); }
+//
// AABB *Tile_SPU::getTileAABB(Level *level, int x, int y, int z)
// {
-// return AABB::newTemp(x + xx0, y + yy0, z + zz0, x + xx1, y + yy1, z + zz1);
+// return AABB::newTemp(x + xx0, y + yy0, z + zz0, x + xx1, y + yy1, z +
+// zz1);
// }
-//
-// void Tile_SPU::addAABBs(Level *level, int x, int y, int z, AABB *box, AABBList *boxes, Entity *source)
+//
+// void Tile_SPU::addAABBs(Level *level, int x, int y, int z, AABB *box,
+// AABBList *boxes, Entity *source)
// {
// AABB *aabb = getAABB(level, x, y, z);
// if (aabb != NULL && box->intersects(aabb)) boxes->push_back(aabb);
// }
-//
-// void Tile_SPU::addAABBs(Level *level, int x, int y, int z, AABB *box, AABBList *boxes)
+//
+// void Tile_SPU::addAABBs(Level *level, int x, int y, int z, AABB *box,
+// AABBList *boxes)
// {
// AABB *aabb = getAABB(level, x, y, z);
// if (aabb != NULL && box->intersects(aabb)) boxes->push_back(aabb);
// }
-//
+//
// AABB *Tile_SPU::getAABB(Level *level, int x, int y, int z)
// {
-// return AABB::newTemp(x + xx0, y + yy0, z + zz0, x + xx1, y + yy1, z + zz1);
+// return AABB::newTemp(x + xx0, y + yy0, z + zz0, x + xx1, y + yy1, z +
+// zz1);
// }
-//
- bool Tile_SPU::isSolidRender(bool isServerLevel)
- {
- return true;
- }
-
+//
+bool Tile_SPU::isSolidRender(bool isServerLevel) { return true; }
// bool Tile_SPU::mayPick(int data, bool liquid)
// {
// return mayPick();
// }
-//
+//
// bool Tile_SPU::mayPick()
// {
// return true;
// }
-//
+//
// void Tile_SPU::tick(Level *level, int x, int y, int z, Random *random)
// {
// }
-//
+//
// void Tile_SPU::animateTick(Level *level, int x, int y, int z, Random *random)
// {
// }
-//
+//
// void Tile_SPU::destroy(Level *level, int x, int y, int z, int data)
// {
// }
-//
+//
// void Tile_SPU::neighborChanged(Level *level, int x, int y, int z, int type)
// {
// }
-//
+//
// void Tile_SPU::addLights(Level *level, int x, int y, int z)
// {
// }
-//
+//
// int Tile_SPU::getTickDelay()
// {
// return 10;
// }
-//
+//
// void Tile_SPU::onPlace(Level *level, int x, int y, int z)
// {
// }
-//
+//
// void Tile_SPU::onRemove(Level *level, int x, int y, int z)
// {
// }
-//
+//
// int Tile_SPU::getResourceCount(Random *random)
// {
// return 1;
// }
-//
+//
// int Tile_SPU::getResource(int data, Random *random, int playerBonusLevel)
// {
// return id;
// }
-//
+//
// float Tile_SPU::getDestroyProgress(std::shared_ptr player)
// {
// if (destroySpeed < 0) return 0;
// if (!player->canDestroy(this)) return 1 / destroySpeed / 100.0f;
// return (player->getDestroySpeed(this) / destroySpeed) / 30;
// }
-//
-// void Tile_SPU::spawnResources(Level *level, int x, int y, int z, int data, int playerBonusLevel)
+//
+// void Tile_SPU::spawnResources(Level *level, int x, int y, int z, int data,
+// int playerBonusLevel)
// {
// spawnResources(level, x, y, z, data, 1, playerBonusLevel);
// }
-//
-// void Tile_SPU::spawnResources(Level *level, int x, int y, int z, int data, float odds, int playerBonusLevel)
+//
+// void Tile_SPU::spawnResources(Level *level, int x, int y, int z, int data,
+// float odds, int playerBonusLevel)
// {
// if (level->isClientSide) return;
-// int count = getResourceCountForLootBonus(playerBonusLevel, level->random);
-// for (int i = 0; i < count; i++)
+// int count = getResourceCountForLootBonus(playerBonusLevel,
+// level->random); for (int i = 0; i < count; i++)
// {
// if (level->random->nextFloat() > odds) continue;
// int type = getResource(data, level->random, playerBonusLevel);
// if (type <= 0) continue;
-//
-// popResource(level, x, y, z, std::shared_ptr( new ItemInstance(type, 1, getSpawnResourcesAuxValue(data) ) ) );
+//
+// popResource(level, x, y, z, std::shared_ptr( new
+// ItemInstance(type, 1, getSpawnResourcesAuxValue(data) ) ) );
// }
// }
-//
-// void Tile_SPU::popResource(Level *level, int x, int y, int z, std::shared_ptr itemInstance)
+//
+// void Tile_SPU::popResource(Level *level, int x, int y, int z,
+// std::shared_ptr itemInstance)
// {
// if( level->isClientSide ) return;
-//
+//
// float s = 0.7f;
// double xo = level->random->nextFloat() * s + (1 - s) * 0.5;
// double yo = level->random->nextFloat() * s + (1 - s) * 0.5;
// double zo = level->random->nextFloat() * s + (1 - s) * 0.5;
-// std::shared_ptr item = std::shared_ptr( new ItemEntity(level, x + xo, y + yo, z + zo, itemInstance ) );
-// item->throwTime = 10;
-// level->addEntity(item);
+// std::shared_ptr item = std::shared_ptr( new
+// ItemEntity(level, x + xo, y + yo, z + zo, itemInstance ) ); item->throwTime
+// = 10; level->addEntity(item);
// }
-//
+//
// // Brought forward for TU7
// void Tile_SPU::popExperience(Level *level, int x, int y, int z, int amount)
// {
@@ -334,184 +327,192 @@ Icon_SPU *Tile_SPU::getTexture(int face)
// {
// while (amount > 0)
// {
-// int newCount = ExperienceOrb::getExperienceValue(amount);
-// amount -= newCount;
-// level->addEntity(std::shared_ptr( new ExperienceOrb(level, x + .5, y + .5, z + .5, newCount)));
+// int newCount =
+// ExperienceOrb::getExperienceValue(amount); amount -=
+// newCount; level->addEntity(std::shared_ptr(
+// new ExperienceOrb(level, x + .5, y + .5, z + .5, newCount)));
// }
// }
// }
-//
+//
// int Tile_SPU::getSpawnResourcesAuxValue(int data)
// {
// return 0;
// }
-//
+//
// float Tile_SPU::getExplosionResistance(std::shared_ptr source)
// {
// return explosionResistance / 5.0f;
// }
-//
-// HitResult *Tile_SPU::clip(Level *level, int xt, int yt, int zt, Vec3 *a, Vec3 *b)
+//
+// HitResult *Tile_SPU::clip(Level *level, int xt, int yt, int zt, Vec3 *a, Vec3
+// *b)
// {
// EnterCriticalSection(&m_csShape);
// updateShape(level, xt, yt, zt);
-//
+//
// a = a->add(-xt, -yt, -zt);
// b = b->add(-xt, -yt, -zt);
-//
+//
// Vec3 *xh0 = a->clipX(b, xx0);
// Vec3 *xh1 = a->clipX(b, xx1);
-//
+//
// Vec3 *yh0 = a->clipY(b, yy0);
// Vec3 *yh1 = a->clipY(b, yy1);
-//
+//
// Vec3 *zh0 = a->clipZ(b, zz0);
// Vec3 *zh1 = a->clipZ(b, zz1);
-//
+//
// Vec3 *closest = NULL;
-//
-// if (containsX(xh0) && (closest == NULL || a->distanceTo(xh0) < a->distanceTo(closest))) closest = xh0;
-// if (containsX(xh1) && (closest == NULL || a->distanceTo(xh1) < a->distanceTo(closest))) closest = xh1;
-// if (containsY(yh0) && (closest == NULL || a->distanceTo(yh0) < a->distanceTo(closest))) closest = yh0;
-// if (containsY(yh1) && (closest == NULL || a->distanceTo(yh1) < a->distanceTo(closest))) closest = yh1;
-// if (containsZ(zh0) && (closest == NULL || a->distanceTo(zh0) < a->distanceTo(closest))) closest = zh0;
-// if (containsZ(zh1) && (closest == NULL || a->distanceTo(zh1) < a->distanceTo(closest))) closest = zh1;
-//
+//
+// if (containsX(xh0) && (closest == NULL || a->distanceTo(xh0) <
+// a->distanceTo(closest))) closest = xh0; if (containsX(xh1) && (closest
+// == NULL || a->distanceTo(xh1) < a->distanceTo(closest))) closest = xh1;
+// if (containsY(yh0) && (closest == NULL || a->distanceTo(yh0) <
+// a->distanceTo(closest))) closest = yh0; if (containsY(yh1) && (closest
+// == NULL || a->distanceTo(yh1) < a->distanceTo(closest))) closest = yh1;
+// if (containsZ(zh0) && (closest == NULL || a->distanceTo(zh0) <
+// a->distanceTo(closest))) closest = zh0; if (containsZ(zh1) && (closest
+// == NULL || a->distanceTo(zh1) < a->distanceTo(closest))) closest = zh1;
+//
// LeaveCriticalSection(&m_csShape);
-//
+//
// if (closest == NULL) return NULL;
-//
+//
// int face = -1;
-//
+//
// if (closest == xh0) face = 4;
// if (closest == xh1) face = 5;
// if (closest == yh0) face = 0;
// if (closest == yh1) face = 1;
// if (closest == zh0) face = 2;
// if (closest == zh1) face = 3;
-//
+//
// return new HitResult(xt, yt, zt, face, closest->add(xt, yt, zt));
// }
-//
+//
// bool Tile_SPU::containsX(Vec3 *v)
// {
// if( v == NULL) return false;
// return v->y >= yy0 && v->y <= yy1 && v->z >= zz0 && v->z <= zz1;
// }
-//
+//
// bool Tile_SPU::containsY(Vec3 *v)
// {
// if( v == NULL) return false;
// return v->x >= xx0 && v->x <= xx1 && v->z >= zz0 && v->z <= zz1;
// }
-//
+//
// bool Tile_SPU::containsZ(Vec3 *v)
// {
// if( v == NULL) return false;
// return v->x >= xx0 && v->x <= xx1 && v->y >= yy0 && v->y <= yy1;
// }
-//
+//
// void Tile_SPU::wasExploded(Level *level, int x, int y, int z)
// {
// }
-//
-int Tile_SPU::getRenderLayer()
-{
- return 0;
-}
-//
+//
+int Tile_SPU::getRenderLayer() { return 0; }
+//
// bool Tile_SPU::mayPlace(Level *level, int x, int y, int z, int face)
// {
// return mayPlace(level, x, y, z);
// }
-//
+//
// bool Tile_SPU::mayPlace(Level *level, int x, int y, int z)
// {
// int t = level->getTile(x, y, z);
// return t == 0 || Tile_SPU::tiles[t]->material->isReplaceable();
// }
-//
+//
// // 4J-PB - Adding a TestUse for tooltip display
// bool Tile_SPU::TestUse()
// {
// return false;
// }
-//
-// bool Tile_SPU::TestUse(Level *level, int x, int y, int z, std::shared_ptr player)
+//
+// bool Tile_SPU::TestUse(Level *level, int x, int y, int z,
+// std::shared_ptr player)
// {
// return false;
// }
-//
-// bool Tile_SPU::use(Level *level, int x, int y, int z, std::shared_ptr player, int clickedFace, float clickX, float clickY, float clickZ, bool soundOnly/*=false*/) // 4J added soundOnly param
+//
+// bool Tile_SPU::use(Level *level, int x, int y, int z, std::shared_ptr
+// player, int clickedFace, float clickX, float clickY, float clickZ, bool
+// soundOnly/*=false*/) // 4J added soundOnly param
// {
// return false;
// }
-//
-// void Tile_SPU::stepOn(Level *level, int x, int y, int z, std::shared_ptr entity)
+//
+// void Tile_SPU::stepOn(Level *level, int x, int y, int z,
+// std::shared_ptr entity)
// {
// }
-//
+//
// void Tile_SPU::setPlacedOnFace(Level *level, int x, int y, int z, int face)
// {
// }
-//
+//
// void Tile_SPU::prepareRender(Level *level, int x, int y, int z)
// {
// }
-//
-// void Tile_SPU::attack(Level *level, int x, int y, int z, std::shared_ptr player)
+//
+// void Tile_SPU::attack(Level *level, int x, int y, int z,
+// std::shared_ptr player)
// {
// }
-//
-// void Tile_SPU::handleEntityInside(Level *level, int x, int y, int z, std::shared_ptr e, Vec3 *current)
+//
+// void Tile_SPU::handleEntityInside(Level *level, int x, int y, int z,
+// std::shared_ptr e, Vec3 *current)
// {
// }
-//
-void Tile_SPU::updateShape(ChunkRebuildData *level, int x, int y, int z, int forceData, TileEntity* forceEntity) // 4J added forceData, forceEntity param
-{
-}
-//
+//
+void Tile_SPU::updateShape(
+ ChunkRebuildData* level, int x, int y, int z, int forceData,
+ TileEntity* forceEntity) // 4J added forceData, forceEntity param
+{}
+//
-int Tile_SPU::getColor(ChunkRebuildData *level, int x, int y, int z)
-{
- return 0xffffff;
+int Tile_SPU::getColor(ChunkRebuildData* level, int x, int y, int z) {
+ return 0xffffff;
}
-//
+//
// int Tile_SPU::getColor(LevelSource *level, int x, int y, int z, int data)
// {
// return 0xffffff;
// }
-//
+//
// bool Tile_SPU::getSignal(LevelSource *level, int x, int y, int z)
// {
// return false;
// }
-//
+//
// bool Tile_SPU::getSignal(LevelSource *level, int x, int y, int z, int dir)
// {
// return false;
// }
-//
+//
// bool Tile_SPU::isSignalSource()
// {
// return false;
// }
-//
-// void Tile_SPU::entityInside(Level *level, int x, int y, int z, std::shared_ptr entity)
+//
+// void Tile_SPU::entityInside(Level *level, int x, int y, int z,
+// std::shared_ptr entity)
// {
// }
-//
+//
// bool Tile_SPU::getDirectSignal(Level *level, int x, int y, int z, int dir)
// {
// return false;
// }
-//
-void Tile_SPU::updateDefaultShape()
-{
-}
-//
-// void Tile_SPU::playerDestroy(Level *level, std::shared_ptr player, int x, int y, int z, int data)
+//
+void Tile_SPU::updateDefaultShape() {}
+//
+// void Tile_SPU::playerDestroy(Level *level, std::shared_ptr player,
+// int x, int y, int z, int data)
// {
// // 4J Stu - Special case - only record a crop destroy if is fully grown
// if(id==Tile_SPU::crops_Id)
@@ -523,14 +524,16 @@ void Tile_SPU::updateDefaultShape()
// {
// player->awardStat(Stats::blocksMined[id], 1);
// }
-// player->awardStat(Stats::totalBlocksMined, 1); // 4J : WESTY : Added for other award.
-// player->causeFoodExhaustion(FoodConstants::EXHAUSTION_MINE);
-//
+// player->awardStat(Stats::totalBlocksMined, 1); // 4J : WESTY : Added
+// for other award.
+// player->causeFoodExhaustion(FoodConstants::EXHAUSTION_MINE);
+//
// if( id == Tile_SPU::treeTrunk_Id )
// player->awardStat(Achievements::mineWood);
-//
-//
-// if (isCubeShaped() && !isEntityTile[id] && EnchantmentHelper::hasSilkTouch(player->inventory))
+//
+//
+// if (isCubeShaped() && !isEntityTile[id] &&
+// EnchantmentHelper::hasSilkTouch(player->inventory))
// {
// std::shared_ptr item = getSilkTouchItemInstance(data);
// if (item != NULL)
@@ -540,360 +543,354 @@ void Tile_SPU::updateDefaultShape()
// }
// else
// {
-// int playerBonusLevel = EnchantmentHelper::getDiggingLootBonus(player->inventory);
+// int playerBonusLevel =
+// EnchantmentHelper::getDiggingLootBonus(player->inventory);
// spawnResources(level, x, y, z, data, playerBonusLevel);
// }
// }
-//
+//
// std::shared_ptr Tile_SPU::getSilkTouchItemInstance(int data)
// {
// int popData = 0;
-// if (id >= 0 && id < Item::items.length && Item::items[id]->isStackedByData())
+// if (id >= 0 && id < Item::items.length &&
+// Item::items[id]->isStackedByData())
// {
// popData = data;
// }
// return std::shared_ptr(new ItemInstance(id, 1, popData));
// }
-//
+//
// int Tile_SPU::getResourceCountForLootBonus(int bonusLevel, Random *random)
// {
// return getResourceCount(random);
// }
-//
+//
// bool Tile_SPU::canSurvive(Level *level, int x, int y, int z)
// {
// return true;
// }
-//
-// void Tile_SPU::setPlacedBy(Level *level, int x, int y, int z, std::shared_ptr by)
+//
+// void Tile_SPU::setPlacedBy(Level *level, int x, int y, int z,
+// std::shared_ptr by)
// {
// }
-//
+//
// Tile *Tile_SPU::setDescriptionId(unsigned int id)
// {
// this->descriptionId = id;
// return this;
// }
-//
+//
// std::wstring Tile_SPU::getName()
// {
// return I18n::get(getDescriptionId() + L".name");
// }
-//
+//
// unsigned int Tile_SPU::getDescriptionId(int iData /*= -1*/)
// {
// return descriptionId;
// }
-//
+//
// Tile *Tile_SPU::setUseDescriptionId(unsigned int id)
// {
// this->useDescriptionId = id;
// return this;
// }
-//
+//
// unsigned int Tile_SPU::getUseDescriptionId()
// {
// return useDescriptionId;
// }
-//
-// void Tile_SPU::triggerEvent(Level *level, int x, int y, int z, int b0, int b1)
+//
+// void Tile_SPU::triggerEvent(Level *level, int x, int y, int z, int b0, int
+// b1)
// {
// }
-//
+//
// bool Tile_SPU::isCollectStatistics()
// {
// return collectStatistics;
// }
-//
+//
// Tile *Tile_SPU::setNotCollectStatistics()
// {
// collectStatistics = false;
// return this;
// }
-//
+//
// int Tile_SPU::getPistonPushReaction()
// {
// return material->getPushReaction();
// }
-//
+//
// // 4J - brought forward from 1.8.2
-float Tile_SPU::getShadeBrightness(ChunkRebuildData *level, int x, int y, int z)
-{
- return level->isSolidBlockingTile(x, y, z) ? 0.2f : 1.0f;
+float Tile_SPU::getShadeBrightness(ChunkRebuildData* level, int x, int y,
+ int z) {
+ return level->isSolidBlockingTile(x, y, z) ? 0.2f : 1.0f;
}
-Tile_SPU* Tile_SPU::createFromID( int tileID )
-{
- if(tileID == 0)
- return NULL;
+Tile_SPU* Tile_SPU::createFromID(int tileID) {
+ if (tileID == 0) return NULL;
+
+ if (m_tiles[tileID].id != -1) return &m_tiles[tileID];
- if(m_tiles[tileID].id != -1)
- return &m_tiles[tileID];
-
#ifndef SN_TARGET_PS3_SPU
- app.DebugPrintf("missing tile ID %d\n", tileID);
+ app.DebugPrintf("missing tile ID %d\n", tileID);
#else
- spu_print("missing tile ID %d\n", tileID);
-#endif
- return &m_tiles[1];
-
+ spu_print("missing tile ID %d\n", tileID);
+#endif
+ return &m_tiles[1];
}
-Material_SPU* Tile_SPU::getMaterial()
-{
- int matID = ms_pTileData->materialIDs[id];
- return &ms_pTileData->materials[matID];
+Material_SPU* Tile_SPU::getMaterial() {
+ int matID = ms_pTileData->materialIDs[id];
+ return &ms_pTileData->materials[matID];
}
-//
-// void Tile_SPU::fallOn(Level *level, int x, int y, int z, std::shared_ptr entity, float fallDistance)
+//
+// void Tile_SPU::fallOn(Level *level, int x, int y, int z,
+// std::shared_ptr entity, float fallDistance)
// {
// }
-//
+//
// void Tile_SPU::registerIcons(IconRegister *iconRegister)
// {
// icon = iconRegister->registerIcon(m_textureName);
// }
-//
+//
// std::wstring Tile_SPU::getTileItemIconName()
// {
// return L"";
// }
-//
+//
// Tile *Tile_SPU::setTextureName(const std::wstring &name)
// {
// m_textureName = name;
// return this;
// }
+void Tile_SPU::initTilePointers() {
+#define CREATE_TILE_TYPE(index, className) \
+ new (&m_tiles[index]) className(index);
+ CREATE_TILE_TYPE(grass_Id, GrassTile_SPU);
+ CREATE_TILE_TYPE(stoneSlab_Id, StoneSlabTile_SPU);
+ CREATE_TILE_TYPE(stoneSlabHalf_Id, StoneSlabTile_SPU);
+ CREATE_TILE_TYPE(woodSlab_Id, WoodSlabTile_SPU);
+ CREATE_TILE_TYPE(woodSlabHalf_Id, WoodSlabTile_SPU);
-void Tile_SPU::initTilePointers()
-{
+ CREATE_TILE_TYPE(chest_Id, ChestTile_SPU);
-#define CREATE_TILE_TYPE(index, className) new (&m_tiles[index]) className(index);
+ CREATE_TILE_TYPE(ironFence_Id, ThinFenceTile_SPU);
+ CREATE_TILE_TYPE(thinGlass_Id, ThinFenceTile_SPU);
+ CREATE_TILE_TYPE(fence_Id, FenceTile_SPU);
+ CREATE_TILE_TYPE(netherFence_Id, FenceTile_SPU);
- CREATE_TILE_TYPE(grass_Id, GrassTile_SPU);
- CREATE_TILE_TYPE(stoneSlab_Id, StoneSlabTile_SPU);
- CREATE_TILE_TYPE(stoneSlabHalf_Id, StoneSlabTile_SPU);
- CREATE_TILE_TYPE(woodSlab_Id, WoodSlabTile_SPU);
- CREATE_TILE_TYPE(woodSlabHalf_Id, WoodSlabTile_SPU);
+ CREATE_TILE_TYPE(stairs_wood_Id, StairTile_SPU);
+ CREATE_TILE_TYPE(stairs_stone_Id, StairTile_SPU);
+ CREATE_TILE_TYPE(stairs_bricks_Id, StairTile_SPU);
+ CREATE_TILE_TYPE(stairs_stoneBrickSmooth_Id, StairTile_SPU);
+ CREATE_TILE_TYPE(stairs_netherBricks_Id, StairTile_SPU);
+ CREATE_TILE_TYPE(stairs_sandstone_Id, StairTile_SPU);
+ CREATE_TILE_TYPE(stairs_sprucewood_Id, StairTile_SPU);
+ CREATE_TILE_TYPE(stairs_birchwood_Id, StairTile_SPU);
+ CREATE_TILE_TYPE(stairs_junglewood_Id, StairTile_SPU);
- CREATE_TILE_TYPE(chest_Id, ChestTile_SPU);
+ CREATE_TILE_TYPE(dirt_Id, DirtTile_SPU);
- CREATE_TILE_TYPE(ironFence_Id, ThinFenceTile_SPU);
- CREATE_TILE_TYPE(thinGlass_Id, ThinFenceTile_SPU);
+ CREATE_TILE_TYPE(door_iron_Id, DoorTile_SPU);
+ CREATE_TILE_TYPE(door_wood_Id, DoorTile_SPU);
- CREATE_TILE_TYPE(fence_Id, FenceTile_SPU);
- CREATE_TILE_TYPE(netherFence_Id, FenceTile_SPU);
+ CREATE_TILE_TYPE(pressurePlate_stone_Id, PressurePlateTile_SPU);
+ CREATE_TILE_TYPE(pressurePlate_wood_Id, PressurePlateTile_SPU);
- CREATE_TILE_TYPE(stairs_wood_Id, StairTile_SPU);
- CREATE_TILE_TYPE(stairs_stone_Id, StairTile_SPU);
- CREATE_TILE_TYPE(stairs_bricks_Id, StairTile_SPU);
- CREATE_TILE_TYPE(stairs_stoneBrickSmooth_Id, StairTile_SPU);
- CREATE_TILE_TYPE(stairs_netherBricks_Id, StairTile_SPU);
- CREATE_TILE_TYPE(stairs_sandstone_Id, StairTile_SPU);
- CREATE_TILE_TYPE(stairs_sprucewood_Id, StairTile_SPU);
- CREATE_TILE_TYPE(stairs_birchwood_Id, StairTile_SPU);
- CREATE_TILE_TYPE(stairs_junglewood_Id, StairTile_SPU);
+ CREATE_TILE_TYPE(farmland_Id, FarmTile_SPU);
- CREATE_TILE_TYPE(dirt_Id, DirtTile_SPU);
+ CREATE_TILE_TYPE(flower_Id, Bush_SPU);
+ CREATE_TILE_TYPE(rose_Id, Bush_SPU);
+ CREATE_TILE_TYPE(deadBush_Id, Bush_SPU); // DeadBushTile
- CREATE_TILE_TYPE(door_iron_Id, DoorTile_SPU);
- CREATE_TILE_TYPE(door_wood_Id, DoorTile_SPU);
+ CREATE_TILE_TYPE(tallgrass_Id, TallGrass_SPU);
- CREATE_TILE_TYPE(pressurePlate_stone_Id, PressurePlateTile_SPU);
- CREATE_TILE_TYPE(pressurePlate_wood_Id, PressurePlateTile_SPU);
+ CREATE_TILE_TYPE(sandStone_Id, SandStoneTile_SPU);
- CREATE_TILE_TYPE(farmland_Id, FarmTile_SPU);
+ CREATE_TILE_TYPE(wood_Id, WoodTile_SPU);
- CREATE_TILE_TYPE(flower_Id, Bush_SPU);
- CREATE_TILE_TYPE(rose_Id, Bush_SPU);
- CREATE_TILE_TYPE(deadBush_Id, Bush_SPU); // DeadBushTile
+ CREATE_TILE_TYPE(treeTrunk_Id, TreeTile_SPU);
- CREATE_TILE_TYPE(tallgrass_Id, TallGrass_SPU);
+ CREATE_TILE_TYPE(leaves_Id, LeafTile_SPU);
- CREATE_TILE_TYPE(sandStone_Id, SandStoneTile_SPU);
+ CREATE_TILE_TYPE(crops_Id, CropTile_SPU);
- CREATE_TILE_TYPE(wood_Id, WoodTile_SPU);
+ CREATE_TILE_TYPE(reeds_Id, ReedTile_SPU);
- CREATE_TILE_TYPE(treeTrunk_Id, TreeTile_SPU);
+ CREATE_TILE_TYPE(torch_Id, TorchTile_SPU);
+ CREATE_TILE_TYPE(notGate_off_Id, TorchTile_SPU); // TorchTile->NotGateTile
+ CREATE_TILE_TYPE(notGate_on_Id, TorchTile_SPU); // TorchTile->NotGateTile
- CREATE_TILE_TYPE(leaves_Id, LeafTile_SPU);
+ CREATE_TILE_TYPE(mushroom1_Id, Mushroom_SPU);
+ CREATE_TILE_TYPE(mushroom2_Id, Mushroom_SPU);
- CREATE_TILE_TYPE(crops_Id, CropTile_SPU);
+ CREATE_TILE_TYPE(mobSpawner_Id, MobSpawnerTile_SPU);
+ CREATE_TILE_TYPE(musicBlock_Id, EntityTile_SPU); // MusicTile->EntityTile
- CREATE_TILE_TYPE(reeds_Id, ReedTile_SPU);
+ CREATE_TILE_TYPE(furnace_Id, FurnaceTile_SPU);
+ CREATE_TILE_TYPE(furnace_lit_Id, FurnaceTile_SPU);
- CREATE_TILE_TYPE(torch_Id, TorchTile_SPU);
- CREATE_TILE_TYPE(notGate_off_Id, TorchTile_SPU); // TorchTile->NotGateTile
- CREATE_TILE_TYPE(notGate_on_Id, TorchTile_SPU); // TorchTile->NotGateTile
+ CREATE_TILE_TYPE(web_Id, WebTile_SPU);
- CREATE_TILE_TYPE(mushroom1_Id, Mushroom_SPU);
- CREATE_TILE_TYPE(mushroom2_Id, Mushroom_SPU);
+ CREATE_TILE_TYPE(water_Id, LiquidTile_SPU);
+ CREATE_TILE_TYPE(lava_Id, LiquidTile_SPU);
+ CREATE_TILE_TYPE(calmLava_Id, LiquidTile_SPU); // LiquidTileStatic
+ CREATE_TILE_TYPE(calmWater_Id, LiquidTile_SPU); // LiquidTileStatic
- CREATE_TILE_TYPE(mobSpawner_Id, MobSpawnerTile_SPU);
- CREATE_TILE_TYPE(musicBlock_Id, EntityTile_SPU); // MusicTile->EntityTile
+ CREATE_TILE_TYPE(fire_Id, FireTile_SPU);
- CREATE_TILE_TYPE(furnace_Id, FurnaceTile_SPU);
- CREATE_TILE_TYPE(furnace_lit_Id, FurnaceTile_SPU);
+ CREATE_TILE_TYPE(sapling_Id, Sapling_SPU);
- CREATE_TILE_TYPE(web_Id, WebTile_SPU);
+ CREATE_TILE_TYPE(glass_Id, GlassTile_SPU);
- CREATE_TILE_TYPE(water_Id, LiquidTile_SPU);
- CREATE_TILE_TYPE(lava_Id, LiquidTile_SPU);
- CREATE_TILE_TYPE(calmLava_Id, LiquidTile_SPU); // LiquidTileStatic
- CREATE_TILE_TYPE(calmWater_Id, LiquidTile_SPU); // LiquidTileStatic
+ CREATE_TILE_TYPE(ice_Id, IceTile_SPU);
- CREATE_TILE_TYPE(fire_Id, FireTile_SPU);
+ CREATE_TILE_TYPE(portalTile_Id, PortalTile_SPU);
- CREATE_TILE_TYPE(sapling_Id, Sapling_SPU);
+ CREATE_TILE_TYPE(dispenser_Id, DispenserTile_SPU);
- CREATE_TILE_TYPE(glass_Id, GlassTile_SPU);
+ CREATE_TILE_TYPE(rail_Id, RailTile_SPU);
+ CREATE_TILE_TYPE(goldenRail_Id, RailTile_SPU);
- CREATE_TILE_TYPE(ice_Id, IceTile_SPU);
+ CREATE_TILE_TYPE(detectorRail_Id, DetectorRailTile_SPU);
- CREATE_TILE_TYPE(portalTile_Id, PortalTile_SPU);
+ CREATE_TILE_TYPE(tnt_Id, TntTile_SPU);
- CREATE_TILE_TYPE(dispenser_Id, DispenserTile_SPU);
+ CREATE_TILE_TYPE(bookshelf_Id, BookshelfTile_SPU);
- CREATE_TILE_TYPE(rail_Id, RailTile_SPU);
- CREATE_TILE_TYPE(goldenRail_Id, RailTile_SPU);
+ CREATE_TILE_TYPE(workBench_Id, WorkbenchTile_SPU);
- CREATE_TILE_TYPE(detectorRail_Id, DetectorRailTile_SPU);
+ CREATE_TILE_TYPE(sign_Id, SignTile_SPU);
+ CREATE_TILE_TYPE(wallSign_Id, SignTile_SPU);
- CREATE_TILE_TYPE(tnt_Id, TntTile_SPU);
+ CREATE_TILE_TYPE(ladder_Id, LadderTile_SPU);
- CREATE_TILE_TYPE(bookshelf_Id, BookshelfTile_SPU);
+ CREATE_TILE_TYPE(button_stone_Id, ButtonTile_SPU);
+ CREATE_TILE_TYPE(button_wood_Id, ButtonTile_SPU);
- CREATE_TILE_TYPE(workBench_Id, WorkbenchTile_SPU);
+ CREATE_TILE_TYPE(topSnow_Id, TopSnowTile_SPU);
- CREATE_TILE_TYPE(sign_Id, SignTile_SPU);
- CREATE_TILE_TYPE(wallSign_Id, SignTile_SPU);
+ CREATE_TILE_TYPE(cactus_Id, CactusTile_SPU);
- CREATE_TILE_TYPE(ladder_Id, LadderTile_SPU);
+ CREATE_TILE_TYPE(recordPlayer_Id, RecordPlayerTile_SPU);
- CREATE_TILE_TYPE(button_stone_Id, ButtonTile_SPU);
- CREATE_TILE_TYPE(button_wood_Id, ButtonTile_SPU);
+ CREATE_TILE_TYPE(pumpkin_Id, PumpkinTile_SPU);
+ CREATE_TILE_TYPE(litPumpkin_Id, PumpkinTile_SPU);
- CREATE_TILE_TYPE(topSnow_Id, TopSnowTile_SPU);
+ CREATE_TILE_TYPE(cake_Id, CakeTile_SPU);
- CREATE_TILE_TYPE(cactus_Id, CactusTile_SPU);
+ CREATE_TILE_TYPE(trapdoor_Id, TrapDoorTile_SPU);
- CREATE_TILE_TYPE(recordPlayer_Id, RecordPlayerTile_SPU);
+ CREATE_TILE_TYPE(monsterStoneEgg_Id, StoneMonsterTile_SPU);
- CREATE_TILE_TYPE(pumpkin_Id, PumpkinTile_SPU);
- CREATE_TILE_TYPE(litPumpkin_Id, PumpkinTile_SPU);
+ CREATE_TILE_TYPE(stoneBrickSmooth_Id, SmoothStoneBrickTile_SPU);
- CREATE_TILE_TYPE(cake_Id, CakeTile_SPU);
+ CREATE_TILE_TYPE(hugeMushroom1_Id, HugeMushroomTile_SPU);
+ CREATE_TILE_TYPE(hugeMushroom2_Id, HugeMushroomTile_SPU);
- CREATE_TILE_TYPE(trapdoor_Id, TrapDoorTile_SPU);
+ CREATE_TILE_TYPE(melon_Id, MelonTile_SPU);
- CREATE_TILE_TYPE(monsterStoneEgg_Id, StoneMonsterTile_SPU);
+ CREATE_TILE_TYPE(melonStem_Id, StemTile_SPU);
+ CREATE_TILE_TYPE(pumpkinStem_Id, StemTile_SPU);
- CREATE_TILE_TYPE(stoneBrickSmooth_Id, SmoothStoneBrickTile_SPU);
+ CREATE_TILE_TYPE(vine_Id, VineTile_SPU);
- CREATE_TILE_TYPE(hugeMushroom1_Id, HugeMushroomTile_SPU);
- CREATE_TILE_TYPE(hugeMushroom2_Id, HugeMushroomTile_SPU);
+ CREATE_TILE_TYPE(mycel_Id, MycelTile_SPU);
- CREATE_TILE_TYPE(melon_Id, MelonTile_SPU);
+ CREATE_TILE_TYPE(waterLily_Id, WaterlilyTile_SPU);
- CREATE_TILE_TYPE(melonStem_Id, StemTile_SPU);
- CREATE_TILE_TYPE(pumpkinStem_Id, StemTile_SPU);
+ CREATE_TILE_TYPE(netherStalk_Id, NetherStalkTile_SPU);
- CREATE_TILE_TYPE(vine_Id, VineTile_SPU);
+ CREATE_TILE_TYPE(enchantTable_Id, EnchantmentTableTile_SPU);
- CREATE_TILE_TYPE(mycel_Id, MycelTile_SPU);
+ CREATE_TILE_TYPE(brewingStand_Id, BrewingStandTile_SPU);
- CREATE_TILE_TYPE(waterLily_Id, WaterlilyTile_SPU);
+ CREATE_TILE_TYPE(diode_on_Id, DiodeTile_SPU);
+ CREATE_TILE_TYPE(diode_off_Id, DiodeTile_SPU);
- CREATE_TILE_TYPE(netherStalk_Id, NetherStalkTile_SPU);
+ CREATE_TILE_TYPE(redStoneDust_Id, RedStoneDustTile_SPU);
- CREATE_TILE_TYPE(enchantTable_Id, EnchantmentTableTile_SPU);
+ CREATE_TILE_TYPE(fenceGate_Id, FenceGateTile_SPU);
- CREATE_TILE_TYPE(brewingStand_Id, BrewingStandTile_SPU);
+ CREATE_TILE_TYPE(bed_Id, BedTile_SPU);
- CREATE_TILE_TYPE(diode_on_Id, DiodeTile_SPU);
- CREATE_TILE_TYPE(diode_off_Id, DiodeTile_SPU);
+ CREATE_TILE_TYPE(pistonBase_Id, PistonBaseTile_SPU);
+ CREATE_TILE_TYPE(pistonStickyBase_Id, PistonBaseTile_SPU);
- CREATE_TILE_TYPE(redStoneDust_Id, RedStoneDustTile_SPU);
+ CREATE_TILE_TYPE(pistonExtensionPiece_Id, PistonExtensionTile_SPU);
- CREATE_TILE_TYPE(fenceGate_Id, FenceGateTile_SPU);
+ CREATE_TILE_TYPE(pistonMovingPiece_Id, PistonMovingPiece_SPU);
- CREATE_TILE_TYPE(bed_Id, BedTile_SPU);
+ CREATE_TILE_TYPE(lever_Id, LeverTile_SPU);
- CREATE_TILE_TYPE(pistonBase_Id, PistonBaseTile_SPU);
- CREATE_TILE_TYPE(pistonStickyBase_Id, PistonBaseTile_SPU);
+ CREATE_TILE_TYPE(cauldron_Id, CauldronTile_SPU);
- CREATE_TILE_TYPE(pistonExtensionPiece_Id, PistonExtensionTile_SPU);
+ CREATE_TILE_TYPE(endPortalTile_Id, TheEndPortal_SPU);
- CREATE_TILE_TYPE(pistonMovingPiece_Id, PistonMovingPiece_SPU);
+ CREATE_TILE_TYPE(endPortalFrameTile_Id, TheEndPortalFrameTile_SPU);
- CREATE_TILE_TYPE(lever_Id, LeverTile_SPU);
+ CREATE_TILE_TYPE(dragonEgg_Id, EggTile_SPU);
- CREATE_TILE_TYPE(cauldron_Id, CauldronTile_SPU);
+ CREATE_TILE_TYPE(cocoa_Id, CocoaTile_SPU);
- CREATE_TILE_TYPE(endPortalTile_Id, TheEndPortal_SPU);
+ CREATE_TILE_TYPE(redstoneLight_Id, RedlightTile_SPU);
+ CREATE_TILE_TYPE(redstoneLight_lit_Id, RedlightTile_SPU);
- CREATE_TILE_TYPE(endPortalFrameTile_Id, TheEndPortalFrameTile_SPU);
+ CREATE_TILE_TYPE(skull_Id, SkullTile_SPU);
- CREATE_TILE_TYPE(dragonEgg_Id, EggTile_SPU);
+ // these tile types don't have any additional code that we need.
+ CREATE_TILE_TYPE(stoneBrick_Id, Tile_SPU); // Tile
+ CREATE_TILE_TYPE(lapisBlock_Id, Tile_SPU);
+ CREATE_TILE_TYPE(redBrick_Id, Tile_SPU);
+ CREATE_TILE_TYPE(mossStone_Id, Tile_SPU);
+ CREATE_TILE_TYPE(netherBrick_Id, Tile_SPU);
+ CREATE_TILE_TYPE(whiteStone_Id, Tile_SPU);
+ CREATE_TILE_TYPE(unbreakable_Id, Tile_SPU);
+ CREATE_TILE_TYPE(sponge_Id, Tile_SPU);
+ CREATE_TILE_TYPE(rock_Id, Tile_SPU); // StoneTile
+ CREATE_TILE_TYPE(obsidian_Id, Tile_SPU); // StoneTile->ObsidianTile
+ CREATE_TILE_TYPE(sand_Id, Tile_SPU); // HeavyTile
+ CREATE_TILE_TYPE(gravel_Id, Tile_SPU); // GravelTile
+ CREATE_TILE_TYPE(goldOre_Id, Tile_SPU); // OreTile
+ CREATE_TILE_TYPE(ironOre_Id, Tile_SPU); // OreTile
+ CREATE_TILE_TYPE(coalOre_Id, Tile_SPU); // OreTile
+ CREATE_TILE_TYPE(lapisOre_Id, Tile_SPU); // OreTile
+ CREATE_TILE_TYPE(diamondOre_Id, Tile_SPU); // OreTile
+ CREATE_TILE_TYPE(clay_Id, Tile_SPU); // ClayTile
+ CREATE_TILE_TYPE(redStoneOre_Id, Tile_SPU); // RedStoneOreTile
+ CREATE_TILE_TYPE(redStoneOre_lit_Id, Tile_SPU); // RedStoneOreTile
+ CREATE_TILE_TYPE(goldBlock_Id, Tile_SPU); // MetalTile
+ CREATE_TILE_TYPE(ironBlock_Id, Tile_SPU); // MetalTile
+ CREATE_TILE_TYPE(diamondBlock_Id, Tile_SPU); // MetalTile
+ CREATE_TILE_TYPE(snow_Id, Tile_SPU); // SnowTile
+ CREATE_TILE_TYPE(hellRock_Id, Tile_SPU); // HellStoneTile
+ CREATE_TILE_TYPE(hellSand_Id, Tile_SPU); // HellSandTile
+ CREATE_TILE_TYPE(lightGem_Id, Tile_SPU); // LightGemTile
+ CREATE_TILE_TYPE(aprilFoolsJoke_Id, Tile_SPU); // LockedChestTile
- CREATE_TILE_TYPE(cocoa_Id, CocoaTile_SPU);
+ CREATE_TILE_TYPE(cloth_Id, ClothTile_SPU); // wool
- CREATE_TILE_TYPE(redstoneLight_Id, RedlightTile_SPU);
- CREATE_TILE_TYPE(redstoneLight_lit_Id, RedlightTile_SPU);
-
- CREATE_TILE_TYPE(skull_Id, SkullTile_SPU);
-
- // these tile types don't have any additional code that we need.
- CREATE_TILE_TYPE(stoneBrick_Id, Tile_SPU); // Tile
- CREATE_TILE_TYPE(lapisBlock_Id, Tile_SPU);
- CREATE_TILE_TYPE(redBrick_Id, Tile_SPU);
- CREATE_TILE_TYPE(mossStone_Id, Tile_SPU);
- CREATE_TILE_TYPE(netherBrick_Id, Tile_SPU);
- CREATE_TILE_TYPE(whiteStone_Id, Tile_SPU);
- CREATE_TILE_TYPE(unbreakable_Id, Tile_SPU);
- CREATE_TILE_TYPE(sponge_Id, Tile_SPU);
- CREATE_TILE_TYPE(rock_Id, Tile_SPU); // StoneTile
- CREATE_TILE_TYPE(obsidian_Id, Tile_SPU); // StoneTile->ObsidianTile
- CREATE_TILE_TYPE(sand_Id, Tile_SPU); // HeavyTile
- CREATE_TILE_TYPE(gravel_Id, Tile_SPU); // GravelTile
- CREATE_TILE_TYPE(goldOre_Id, Tile_SPU); // OreTile
- CREATE_TILE_TYPE(ironOre_Id, Tile_SPU); // OreTile
- CREATE_TILE_TYPE(coalOre_Id, Tile_SPU); // OreTile
- CREATE_TILE_TYPE(lapisOre_Id, Tile_SPU); // OreTile
- CREATE_TILE_TYPE(diamondOre_Id, Tile_SPU); // OreTile
- CREATE_TILE_TYPE(clay_Id, Tile_SPU); // ClayTile
- CREATE_TILE_TYPE(redStoneOre_Id, Tile_SPU); // RedStoneOreTile
- CREATE_TILE_TYPE(redStoneOre_lit_Id, Tile_SPU); // RedStoneOreTile
- CREATE_TILE_TYPE(goldBlock_Id, Tile_SPU); // MetalTile
- CREATE_TILE_TYPE(ironBlock_Id, Tile_SPU); // MetalTile
- CREATE_TILE_TYPE(diamondBlock_Id, Tile_SPU); // MetalTile
- CREATE_TILE_TYPE(snow_Id, Tile_SPU); // SnowTile
- CREATE_TILE_TYPE(hellRock_Id, Tile_SPU); // HellStoneTile
- CREATE_TILE_TYPE(hellSand_Id, Tile_SPU); // HellSandTile
- CREATE_TILE_TYPE(lightGem_Id, Tile_SPU); // LightGemTile
- CREATE_TILE_TYPE(aprilFoolsJoke_Id, Tile_SPU); // LockedChestTile
-
- CREATE_TILE_TYPE(cloth_Id, ClothTile_SPU); // wool
-
-
- CREATE_TILE_TYPE(emeraldOre_Id, Tile_SPU); // OreTile
- CREATE_TILE_TYPE(enderChest_Id, EnderChestTile_SPU);
- CREATE_TILE_TYPE(tripWireSource_Id, TripWireSourceTile_SPU);
- CREATE_TILE_TYPE(tripWire_Id, TripWireTile_SPU);
-//
- CREATE_TILE_TYPE(emeraldBlock_Id, Tile_SPU); // MetalTile
- CREATE_TILE_TYPE(cobbleWall_Id, WallTile_SPU);
- CREATE_TILE_TYPE(flowerPot_Id, FlowerPotTile_SPU);
- CREATE_TILE_TYPE(carrots_Id, CarrotTile_SPU);
- CREATE_TILE_TYPE(potatoes_Id, PotatoTile_SPU);
- CREATE_TILE_TYPE(anvil_Id, AnvilTile_SPU);
- CREATE_TILE_TYPE(netherQuartz_Id, Tile_SPU); // OreTile
- CREATE_TILE_TYPE(quartzBlock_Id, QuartzBlockTile_SPU);
- CREATE_TILE_TYPE(stairs_quartz_Id, StairTile_SPU);
- CREATE_TILE_TYPE(woolCarpet_Id, WoolCarpetTile_SPU);
-
-};
\ No newline at end of file
+ CREATE_TILE_TYPE(emeraldOre_Id, Tile_SPU); // OreTile
+ CREATE_TILE_TYPE(enderChest_Id, EnderChestTile_SPU);
+ CREATE_TILE_TYPE(tripWireSource_Id, TripWireSourceTile_SPU);
+ CREATE_TILE_TYPE(tripWire_Id, TripWireTile_SPU);
+ //
+ CREATE_TILE_TYPE(emeraldBlock_Id, Tile_SPU); // MetalTile
+ CREATE_TILE_TYPE(cobbleWall_Id, WallTile_SPU);
+ CREATE_TILE_TYPE(flowerPot_Id, FlowerPotTile_SPU);
+ CREATE_TILE_TYPE(carrots_Id, CarrotTile_SPU);
+ CREATE_TILE_TYPE(potatoes_Id, PotatoTile_SPU);
+ CREATE_TILE_TYPE(anvil_Id, AnvilTile_SPU);
+ CREATE_TILE_TYPE(netherQuartz_Id, Tile_SPU); // OreTile
+ CREATE_TILE_TYPE(quartzBlock_Id, QuartzBlockTile_SPU);
+ CREATE_TILE_TYPE(stairs_quartz_Id, StairTile_SPU);
+ CREATE_TILE_TYPE(woolCarpet_Id, WoolCarpetTile_SPU);
+};
diff --git a/Minecraft.Client/Platform/PS3/Xbox_Minecraft.cpp b/Minecraft.Client/Platform/PS3/Xbox_Minecraft.cpp
index fb8e88016..968ab073a 100644
--- a/Minecraft.Client/Platform/PS3/Xbox_Minecraft.cpp
+++ b/Minecraft.Client/Platform/PS3/Xbox_Minecraft.cpp
@@ -660,8 +660,6 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
// Initialise TLS for tesselator, for this main thread
Tesselator::CreateNewThreadStorage(1024 * 1024);
// Initialise TLS for AABB and Vec3 pools, for this main thread
- AABB::CreateNewThreadStorage();
- Vec3::CreateNewThreadStorage();
Level::enableLightingCache();
Minecraft::main();
@@ -961,9 +959,6 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
#endif
// Fix for #7318 - Title crashes after short soak in the leaderboards
- // menu A memory leak was caused because the icon renderer kept creating
- // new Vec3's because the pool wasn't reset
- Vec3::resetPool();
}
// Free resources, unregister custom classes, and exit.
diff --git a/Minecraft.Client/Platform/PSVita/PSVita_Minecraft.cpp b/Minecraft.Client/Platform/PSVita/PSVita_Minecraft.cpp
index 1ee98dd99..4849f15a1 100644
--- a/Minecraft.Client/Platform/PSVita/PSVita_Minecraft.cpp
+++ b/Minecraft.Client/Platform/PSVita/PSVita_Minecraft.cpp
@@ -895,8 +895,6 @@ int main() {
// Initialise TLS for tesselator, for this main thread
Tesselator::CreateNewThreadStorage(1024 * 1024);
// Initialise TLS for AABB and Vec3 pools, for this main thread
- AABB::CreateNewThreadStorage();
- Vec3::CreateNewThreadStorage();
Compression::CreateNewThreadStorage();
OldChunkStorage::CreateNewThreadStorage();
Level::enableLightingCache();
@@ -1250,9 +1248,6 @@ int main() {
app.SaveDataTick();
// Fix for #7318 - Title crashes after short soak in the leaderboards
- // menu A memory leak was caused because the icon renderer kept creating
- // new Vec3's because the pool wasn't reset
- Vec3::resetPool();
// sceRazorCpuSync();
#ifndef _CONTENT_PACKAGE
diff --git a/Minecraft.Client/Platform/Windows64/Iggy/gdraw/gdraw_gl_shared.inl b/Minecraft.Client/Platform/Windows64/Iggy/gdraw/gdraw_gl_shared.inl
index c22517041..e24dd7202 100644
--- a/Minecraft.Client/Platform/Windows64/Iggy/gdraw/gdraw_gl_shared.inl
+++ b/Minecraft.Client/Platform/Windows64/Iggy/gdraw/gdraw_gl_shared.inl
@@ -57,6 +57,10 @@ static RADINLINE void break_on_err(GLint e)
#endif
}
+#ifndef GDRAW_PLATFORM_REPORT_GL_SITE
+#define GDRAW_PLATFORM_REPORT_GL_SITE(site) ((void)0)
+#endif
+
static void report_err(GLint e)
{
break_on_err(e);
@@ -74,17 +78,31 @@ static void eat_gl_err(void)
while (glGetError() != GL_NO_ERROR);
}
+static void opengl_check_site(const char *site);
+
static void opengl_check(void)
+{
+ opengl_check_site(NULL);
+}
+
+static void opengl_check_site(const char *site)
{
#ifdef _DEBUG
GLint e = glGetError();
if (e != GL_NO_ERROR) {
+ GDRAW_PLATFORM_REPORT_GL_SITE(site);
report_err(e);
eat_gl_err();
}
+#else
+ (void) site;
#endif
}
+#ifndef OPENGL_CHECK_SITE
+#define OPENGL_CHECK_SITE(site) opengl_check_site(site)
+#endif
+
static U32 is_pow2(S32 n)
{
return ((U32) n & (U32) (n-1)) == 0;
@@ -635,6 +653,90 @@ static void RADLINK gdraw_DescribeVertexBuffer(GDrawVertexBuffer *vbuf, GDraw_Ve
// Create/free (or cache) render targets
//
+#ifdef __linux__
+typedef struct
+{
+ S32 free_count;
+ S32 live_count;
+ S32 locked_count;
+ S32 dead_count;
+ S32 pinned_count;
+ S32 user_owned_count;
+ S32 alloc_count;
+} GDrawHandleStateCounts;
+
+enum
+{
+ GDRAW_RT_DIAG_color_memory = 1 << 0,
+ GDRAW_RT_DIAG_color_handles = 1 << 1,
+ GDRAW_RT_DIAG_cache_bitmap = 1 << 2,
+ GDRAW_RT_DIAG_stack_depth = 1 << 3,
+ GDRAW_RT_DIAG_empty_request = 1 << 4,
+};
+
+static U32 gdraw_rt_diag_emitted = 0;
+
+static void gdraw_CountHandleStates(GDrawHandleCache *cache,
+ GDrawHandleStateCounts *counts)
+{
+ S32 i;
+ counts->free_count = 0;
+ counts->live_count = 0;
+ counts->locked_count = 0;
+ counts->dead_count = 0;
+ counts->pinned_count = 0;
+ counts->user_owned_count = 0;
+ counts->alloc_count = 0;
+
+ if (!cache)
+ return;
+
+ for (i = 0; i < cache->max_handles; ++i) {
+ switch (cache->handle[i].state) {
+ case GDRAW_HANDLE_STATE_free: ++counts->free_count; break;
+ case GDRAW_HANDLE_STATE_live: ++counts->live_count; break;
+ case GDRAW_HANDLE_STATE_locked: ++counts->locked_count; break;
+ case GDRAW_HANDLE_STATE_dead: ++counts->dead_count; break;
+ case GDRAW_HANDLE_STATE_pinned: ++counts->pinned_count; break;
+ case GDRAW_HANDLE_STATE_user_owned: ++counts->user_owned_count; break;
+ case GDRAW_HANDLE_STATE_alloc: ++counts->alloc_count; break;
+ default: break;
+ }
+ }
+}
+
+static void gdraw_ReportHandleCacheDiag(char const *label,
+ GDrawHandleCache *cache,
+ U32 once_bit,
+ S32 req_w,
+ S32 req_h)
+{
+ GDrawHandleStateCounts counts;
+
+ if (gdraw_rt_diag_emitted & once_bit)
+ return;
+ gdraw_rt_diag_emitted |= once_bit;
+
+ gdraw_CountHandleStates(cache, &counts);
+ IggyGDrawSendWarning(NULL,
+ "GDraw[%s] diag: frame=%dx%d tile=%dx%d padded=%dx%d req=%dx%d depth=%d bytes_free=%d total_bytes=%d handles free=%d live=%d locked=%d dead=%d pinned=%d user=%d alloc=%d",
+ label,
+ gdraw->frametex_width, gdraw->frametex_height,
+ gdraw->tw, gdraw->th,
+ gdraw->tpw, gdraw->tph,
+ req_w, req_h,
+ (int) (gdraw->cur - gdraw->frame),
+ cache ? cache->bytes_free : 0,
+ cache ? cache->total_bytes : 0,
+ counts.free_count, counts.live_count, counts.locked_count,
+ counts.dead_count, counts.pinned_count, counts.user_owned_count,
+ counts.alloc_count);
+}
+#else
+#define gdraw_ReportHandleCacheDiag(label, cache, once_bit, req_w, req_h) \
+ ((void) 0)
+#endif
+
static GDrawHandle *get_rendertarget_texture(int width, int height, void *owner, GDrawStats *gstats)
{
S32 size;
@@ -678,13 +780,17 @@ static GDrawHandle *get_color_rendertarget(GDrawStats *gstats)
// ran out of RTs, allocate a new one
size = gdraw->frametex_width * gdraw->frametex_height * 4;
if (gdraw->rendertargets.bytes_free < size) {
- IggyGDrawSendWarning(NULL, "GDraw exceeded available rendertarget memory");
+ gdraw_ReportHandleCacheDiag("rt-color-memory", &gdraw->rendertargets,
+ GDRAW_RT_DIAG_color_memory, gdraw->tpw, gdraw->tph);
+ IggyGDrawSendWarning(NULL, "GDraw[rt-color] exceeded available rendertarget memory");
return NULL;
}
t = gdraw_HandleCacheAllocateBegin(&gdraw->rendertargets);
if (!t) {
- IggyGDrawSendWarning(NULL, "GDraw exceeded available rendertarget handles");
+ gdraw_ReportHandleCacheDiag("rt-color-handles", &gdraw->rendertargets,
+ GDRAW_RT_DIAG_color_handles, gdraw->tpw, gdraw->tph);
+ IggyGDrawSendWarning(NULL, "GDraw[rt-color] exceeded available rendertarget handles");
return t;
}
@@ -992,25 +1098,31 @@ static rrbool RADLINK gdraw_TextureDrawBufferBegin(gswf_recti *region, gdraw_tex
GDrawHandle *t;
int k;
if (gdraw->tw == 0 || gdraw->th == 0) {
- IggyGDrawSendWarning(NULL, "GDraw got a request for an empty rendertarget");
+ gdraw_ReportHandleCacheDiag("rt-empty", &gdraw->rendertargets,
+ GDRAW_RT_DIAG_empty_request, region->x1 - region->x0, region->y1 - region->y0);
+ IggyGDrawSendWarning(NULL, "GDraw[rt-stack] got a request for an empty rendertarget");
return false;
}
if (n >= &gdraw->frame[MAX_RENDER_STACK_DEPTH]) {
- IggyGDrawSendWarning(NULL, "GDraw rendertarget nesting exceeded MAX_RENDER_STACK_DEPTH");
+ gdraw_ReportHandleCacheDiag("rt-stack-depth", &gdraw->rendertargets,
+ GDRAW_RT_DIAG_stack_depth, region->x1 - region->x0, region->y1 - region->y0);
+ IggyGDrawSendWarning(NULL, "GDraw[rt-stack] rendertarget nesting exceeded MAX_RENDER_STACK_DEPTH");
return false;
}
if (owner) {
t = get_rendertarget_texture(region->x1 - region->x0, region->y1 - region->y0, owner, gstats);
if (!t) {
- IggyGDrawSendWarning(NULL, "GDraw ran out of rendertargets for cacheAsBItmap");
+ gdraw_ReportHandleCacheDiag("rt-cacheAsBitmap", gdraw->texturecache,
+ GDRAW_RT_DIAG_cache_bitmap, region->x1 - region->x0, region->y1 - region->y0);
+ IggyGDrawSendWarning(NULL, "GDraw[rt-cacheAsBitmap] ran out of rendertargets");
return false;
}
} else {
t = get_color_rendertarget(gstats);
if (!t) {
- IggyGDrawSendWarning(NULL, "GDraw ran out of rendertargets");
+ IggyGDrawSendWarning(NULL, "GDraw[rt-color] ran out of rendertargets");
return false;
}
}
@@ -1355,18 +1467,18 @@ static int set_render_state(GDrawRenderState *r, S32 vformat, const int **ovvars
}
use_lazy_shader(prg);
- opengl_check();
+ OPENGL_CHECK_SITE("set_render_state:use_lazy_shader");
fvars = prg->vars[0];
vvars = prg->vars[1];
if (vformat == GDRAW_vformat_ihud1) {
F32 wv[2][4] = { 1.0f/960,0,0,-1.0, 0,-1.0f/540,0,+1.0 };
glUniform4fv(vvars[VAR_ihudv_worldview], 2, wv[0]);
- opengl_check();
+ OPENGL_CHECK_SITE("set_render_state:ihud_worldview");
glUniform4fv(vvars[VAR_ihudv_material], p->uniform_count, p->uniforms);
- opengl_check();
+ OPENGL_CHECK_SITE("set_render_state:ihud_material");
glUniform1f(vvars[VAR_ihudv_textmode], p->drawprim_mode ? 0.0f : 1.0f);
- opengl_check();
+ OPENGL_CHECK_SITE("set_render_state:ihud_textmode");
} else {
// set vertex shader constants
@@ -1393,7 +1505,7 @@ static int set_render_state(GDrawRenderState *r, S32 vformat, const int **ovvars
// texture stuff
set_texture(0, r->tex[0]);
- opengl_check();
+ OPENGL_CHECK_SITE("set_render_state:set_texture0");
if (r->tex[0] && gdraw->has_conditional_non_power_of_two && ((GDrawHandle*) r->tex[0])->handle.tex.nonpow2) {
// only wrap mode allowed in conditional nonpow2 is clamp; this should
@@ -1490,7 +1602,7 @@ static int set_render_state(GDrawRenderState *r, S32 vformat, const int **ovvars
else
glDepthMask(GL_FALSE);
- opengl_check();
+ OPENGL_CHECK_SITE("set_render_state:final");
if (ovvars)
*ovvars = vvars;
@@ -1611,7 +1723,7 @@ static void RADLINK gdraw_DrawIndexedTriangles(GDrawRenderState *r, GDrawPrimiti
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
- opengl_check();
+ OPENGL_CHECK_SITE("gdraw_DrawIndexedTriangles:final");
tag_resources(vb, r->tex[0], r->tex[1]);
}
@@ -1628,33 +1740,33 @@ static void do_screen_quad(gswf_recti *s, F32 *tc, const int *vvars, GDrawStats
F32 vert[4][4];
F32 world[2*4];
- opengl_check();
+ OPENGL_CHECK_SITE("do_screen_quad:begin");
vert[0][0] = px0; vert[0][1] = py0; vert[0][2] = s0; vert[0][3] = t0;
vert[1][0] = px1; vert[1][1] = py0; vert[1][2] = s1; vert[1][3] = t0;
vert[2][0] = px1; vert[2][1] = py1; vert[2][2] = s1; vert[2][3] = t1;
vert[3][0] = px0; vert[3][1] = py1; vert[3][2] = s0; vert[3][3] = t1;
- opengl_check();
+ OPENGL_CHECK_SITE("do_screen_quad:after_vertices");
gdraw_PixelSpace(world);
world[2] = depth;
set_world_projection(vvars, world);
- opengl_check();
+ OPENGL_CHECK_SITE("do_screen_quad:after_projection");
set_vertex_format(GDRAW_vformat_v2tc2, vert[0]);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
- opengl_check();
+ OPENGL_CHECK_SITE("do_screen_quad:before_draw");
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
reset_vertex_format(GDRAW_vformat_v2tc2);
- opengl_check();
+ OPENGL_CHECK_SITE("do_screen_quad:after_draw");
gstats->nonzero_flags |= GDRAW_STATS_batches;
gstats->num_batches += 1;
gstats->drawn_vertices += 4;
gstats->drawn_indices += 6;
- opengl_check();
+ OPENGL_CHECK_SITE("do_screen_quad:final");
}
#ifdef GDRAW_FEWER_CLEARS
@@ -1805,7 +1917,7 @@ static void RADLINK gdraw_FilterQuad(GDrawRenderState *r, S32 x0, S32 y0, S32 x1
glColorMask(1,1,1,1);
glDisable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
- opengl_check();
+ OPENGL_CHECK_SITE("gdraw_FilterQuad:pre_filter");
if (r->blend_mode == GDRAW_BLEND_filter) {
switch (r->filter) {
diff --git a/Minecraft.Client/Platform/Windows64/Windows64_Minecraft.cpp b/Minecraft.Client/Platform/Windows64/Windows64_Minecraft.cpp
index e64afe754..4fc3b34db 100644
--- a/Minecraft.Client/Platform/Windows64/Windows64_Minecraft.cpp
+++ b/Minecraft.Client/Platform/Windows64/Windows64_Minecraft.cpp
@@ -940,8 +940,6 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
// Initialise TLS for tesselator, for this main thread
Tesselator::CreateNewThreadStorage(1024 * 1024);
// Initialise TLS for AABB and Vec3 pools, for this main thread
- AABB::CreateNewThreadStorage();
- Vec3::CreateNewThreadStorage();
Compression::CreateNewThreadStorage();
OldChunkStorage::CreateNewThreadStorage();
Level::enableLightingCache();
@@ -1269,9 +1267,6 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
}
// Fix for #7318 - Title crashes after short soak in the leaderboards
- // menu A memory leak was caused because the icon renderer kept creating
- // new Vec3's because the pool wasn't reset
- Vec3::resetPool();
}
// Free resources, unregister custom classes, and exit.
diff --git a/Minecraft.Client/Platform/Xbox/Xbox_Minecraft.cpp b/Minecraft.Client/Platform/Xbox/Xbox_Minecraft.cpp
index 822fd717c..9a1530c85 100644
--- a/Minecraft.Client/Platform/Xbox/Xbox_Minecraft.cpp
+++ b/Minecraft.Client/Platform/Xbox/Xbox_Minecraft.cpp
@@ -699,8 +699,6 @@ int __cdecl main() {
// Initialise TLS for tesselator, for this main thread
Tesselator::CreateNewThreadStorage(1024 * 1024);
// Initialise TLS for AABB and Vec3 pools, for this main thread
- AABB::CreateNewThreadStorage();
- Vec3::CreateNewThreadStorage();
Compression::CreateNewThreadStorage();
OldChunkStorage::CreateNewThreadStorage();
Level::enableLightingCache();
@@ -1029,9 +1027,6 @@ int __cdecl main() {
}
// Fix for #7318 - Title crashes after short soak in the leaderboards
- // menu A memory leak was caused because the icon renderer kept creating
- // new Vec3's because the pool wasn't reset
- Vec3::resetPool();
}
// Free resources, unregister custom classes, and exit.
diff --git a/Minecraft.Client/Platform/stdafx.h b/Minecraft.Client/Platform/stdafx.h
index aa113c2c0..e305669a7 100644
--- a/Minecraft.Client/Platform/stdafx.h
+++ b/Minecraft.Client/Platform/stdafx.h
@@ -5,8 +5,8 @@
#pragma once
-//#include
-//#include
+// #include
+// #include
#define __STR2__(x) #x
#define __STR1__(x) __STR2__(x)
@@ -34,7 +34,7 @@
#include
#include
#include
-#include
+#include
#include
#include
#include
@@ -49,7 +49,7 @@
#include
#include
#include
-#include
+#include
#include
#include "../Platform/PSVita/PSVitaExtras/PSVitaTypes.h"
#include "../Platform/PSVita/PSVitaExtras/PSVitaStubs.h"
@@ -71,8 +71,8 @@
typedef unsigned __int64 __uint64;
#endif
-#ifdef _WINDOWS64
-#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+#ifdef _WINDOWS64
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include
#include
@@ -80,14 +80,12 @@ typedef unsigned __int64 __uint64;
// TODO: reference additional headers your program requires here
#include
#include
-using namespace DirectX;
+using namespace DirectX;
#define HRESULT_SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)
#endif
-
-
#ifdef _DURANGO
#include
#include
@@ -95,14 +93,12 @@ using namespace DirectX;
#include
#include
#include
-using namespace DirectX;
+using namespace DirectX;
#include
#include "../Platform/Durango/DurangoExtras/DurangoStubs.h"
#define HRESULT_SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)
#endif
-
-
#ifdef _XBOX
#include
#include
@@ -166,42 +162,42 @@ typedef XUID GameSessionUID;
#include "../../Minecraft.World/Util/PerformanceTimer.h"
#ifdef _XBOX
- #include "xbox/4JLibs/inc/4J_Input.h"
- #include "xbox/4JLibs/inc/4J_Profile.h"
- #include "xbox/4JLibs/inc/4J_Render.h"
- #include "xbox/4JLibs/inc/4J_XTMS.h"
- #include "xbox/4JLibs/inc/4J_Storage.h"
-#elif defined (__PS3__)
+#include "xbox/4JLibs/inc/4J_Input.h"
+#include "xbox/4JLibs/inc/4J_Profile.h"
+#include "xbox/4JLibs/inc/4J_Render.h"
+#include "xbox/4JLibs/inc/4J_XTMS.h"
+#include "xbox/4JLibs/inc/4J_Storage.h"
+#elif defined(__PS3__)
- #include "../Platform/PS3/4JLibs/inc/4J_Input.h"
- #include "../Platform/PS3/4JLibs/inc/4J_Profile.h"
- #include "../Platform/PS3/4JLibs/inc/4J_Render.h"
- #include "../Platform/PS3/4JLibs/inc/4J_Storage.h"
+#include "../Platform/PS3/4JLibs/inc/4J_Input.h"
+#include "../Platform/PS3/4JLibs/inc/4J_Profile.h"
+#include "../Platform/PS3/4JLibs/inc/4J_Render.h"
+#include "../Platform/PS3/4JLibs/inc/4J_Storage.h"
#elif defined _DURANGO
- #include "../Platform/Durango/4JLibs/inc/4J_Input.h"
- #include "../Platform/Durango/4JLibs/inc/4J_Profile.h"
- #include "../Platform/Durango/4JLibs/inc/4J_Render.h"
- #include "../Platform/Durango/4JLibs/inc/4J_Storage.h"
+#include "../Platform/Durango/4JLibs/inc/4J_Input.h"
+#include "../Platform/Durango/4JLibs/inc/4J_Profile.h"
+#include "../Platform/Durango/4JLibs/inc/4J_Render.h"
+#include "../Platform/Durango/4JLibs/inc/4J_Storage.h"
#elif defined _WINDOWS64
- #include "../Platform/Windows64/4JLibs/inc/4J_Input.h"
- #include "../Platform/Windows64/4JLibs/inc/4J_Profile.h"
- #include "../Platform/Windows64/4JLibs/inc/4J_Render.h"
- #include "../Platform/Windows64/4JLibs/inc/4J_Storage.h"
+#include "../Platform/Windows64/4JLibs/inc/4J_Input.h"
+#include "../Platform/Windows64/4JLibs/inc/4J_Profile.h"
+#include "../Platform/Windows64/4JLibs/inc/4J_Render.h"
+#include "../Platform/Windows64/4JLibs/inc/4J_Storage.h"
#elif defined __linux__
- #include "4J_Input.h"
- #include "4J_Profile.h"
- #include "4J_Render.h"
- #include "4J_Storage.h"
+#include "4J_Input.h"
+#include "4J_Profile.h"
+#include "4J_Render.h"
+#include "4J_Storage.h"
#elif defined __PSVITA__
- #include "../Platform/PSVita/4JLibs/inc/4J_Input.h"
- #include "../Platform/PSVita/4JLibs/inc/4J_Profile.h"
- #include "../Platform/PSVita/4JLibs/inc/4J_Render.h"
- #include "../Platform/PSVita/4JLibs/inc/4J_Storage.h"
+#include "../Platform/PSVita/4JLibs/inc/4J_Input.h"
+#include "../Platform/PSVita/4JLibs/inc/4J_Profile.h"
+#include "../Platform/PSVita/4JLibs/inc/4J_Render.h"
+#include "../Platform/PSVita/4JLibs/inc/4J_Storage.h"
#else
- #include "../Platform/Orbis/4JLibs/inc/4J_Input.h"
- #include "../Platform/Orbis/4JLibs/inc/4J_Profile.h"
- #include "../Platform/Orbis/4JLibs/inc/4J_Render.h"
- #include "../Platform/Orbis/4JLibs/inc/4J_Storage.h"
+#include "../Platform/Orbis/4JLibs/inc/4J_Input.h"
+#include "../Platform/Orbis/4JLibs/inc/4J_Profile.h"
+#include "../Platform/Orbis/4JLibs/inc/4J_Render.h"
+#include "../Platform/Orbis/4JLibs/inc/4J_Storage.h"
#endif
#include "../Textures/Textures.h"
@@ -229,7 +225,7 @@ typedef XUID GameSessionUID;
#include "../Platform/Common/App_enums.h"
#include "../Platform/Common/Tutorial/TutorialEnum.h"
#include "../Platform/Common/App_structs.h"
-//#endif
+// #endif
#include "../Platform/Common/Consoles_App.h"
#include "../Platform/Common/Minecraft_Macros.h"
@@ -242,95 +238,94 @@ typedef XUID GameSessionUID;
#include "strings.h"
#ifdef _XBOX
- #include "../Platform/Xbox/Xbox_App.h"
- #include "../Platform/Xbox/Sentient/MinecraftTelemetry.h"
- #include "../Platform/Xbox/Sentient/DynamicConfigurations.h"
- #include "../Platform/Xbox/Sentient/SentientTelemetryCommon.h"
- #include "../Platform/Xbox/Sentient/Include/SenClientStats.h"
- #include "../Platform/Xbox/GameConfig/Minecraft.spa.h"
- #include "../../Minecraft.Assets/XboxMedia/4J_strings.h"
- #include "../Platform/Xbox/XML/ATGXmlParser.h"
- #include "../Platform/Xbox/Leaderboards/XboxLeaderboardManager.h"
- #include "../Platform/Xbox/Social/SocialManager.h"
- #include "../Platform/Xbox/Audio/SoundEngine.h"
- #include "../Platform/Xbox/Xbox_UIController.h"
+#include "../Platform/Xbox/Xbox_App.h"
+#include "../Platform/Xbox/Sentient/MinecraftTelemetry.h"
+#include "../Platform/Xbox/Sentient/DynamicConfigurations.h"
+#include "../Platform/Xbox/Sentient/SentientTelemetryCommon.h"
+#include "../Platform/Xbox/Sentient/Include/SenClientStats.h"
+#include "../Platform/Xbox/GameConfig/Minecraft.spa.h"
+#include "../../Minecraft.Assets/XboxMedia/4J_strings.h"
+#include "../Platform/Xbox/XML/ATGXmlParser.h"
+#include "../Platform/Xbox/Leaderboards/XboxLeaderboardManager.h"
+#include "../Platform/Xbox/Social/SocialManager.h"
+#include "../Platform/Xbox/Audio/SoundEngine.h"
+#include "../Platform/Xbox/Xbox_UIController.h"
-#elif defined (__PS3__)
- #include "extraX64client.h"
- #include "../Platform/PS3/Sentient/MinecraftTelemetry.h"
- #include "../Platform/PS3/Sentient/DynamicConfigurations.h"
- #include "../Platform/PS3/Sentient/SentientTelemetryCommon.h"
- #include "../Platform/PS3/PS3_App.h"
- #include "../Platform/PS3/GameConfig/Minecraft.spa.h"
- #include "../../Minecraft.Assets/PS3Media/4J_strings.h"
- #include "../Platform/PS3/XML/ATGXmlParser.h"
- #include "../Platform/PS3/Social/SocialManager.h"
- #include "../Platform/Common/Audio/SoundEngine.h"
- #include "../Platform/PS3/Iggy/include/iggy.h"
- #include "../Platform/PS3/Iggy/gdraw/gdraw_ps3gcm.h"
- #include "../Platform/PS3/PS3_UIController.h"
+#elif defined(__PS3__)
+#include "extraX64client.h"
+#include "../Platform/PS3/Sentient/MinecraftTelemetry.h"
+#include "../Platform/PS3/Sentient/DynamicConfigurations.h"
+#include "../Platform/PS3/Sentient/SentientTelemetryCommon.h"
+#include "../Platform/PS3/PS3_App.h"
+#include "../Platform/PS3/GameConfig/Minecraft.spa.h"
+#include "../../Minecraft.Assets/PS3Media/4J_strings.h"
+#include "../Platform/PS3/XML/ATGXmlParser.h"
+#include "../Platform/PS3/Social/SocialManager.h"
+#include "../Platform/Common/Audio/SoundEngine.h"
+#include "../Platform/PS3/Iggy/include/iggy.h"
+#include "../Platform/PS3/Iggy/gdraw/gdraw_ps3gcm.h"
+#include "../Platform/PS3/PS3_UIController.h"
#elif defined _DURANGO
- #include "../Platform/Durango/Sentient/MinecraftTelemetry.h"
- #include "../Platform/Durango/Durango_App.h"
- #include "../Platform/Durango/Sentient/DynamicConfigurations.h"
- #include "../Platform/Durango/Sentient/TelemetryEnum.h"
- #include "../Platform/Durango/Sentient/SentientTelemetryCommon.h"
- #include "../Platform/Durango/PresenceIds.h"
- #include "../../Minecraft.Assets/DurangoMedia/4J_strings.h"
- #include "../Platform/Durango/XML/ATGXmlParser.h"
- #include "../Platform/Durango/Social/SocialManager.h"
- #include "../Platform/Common/Audio/SoundEngine.h"
- #include "../Platform/Durango/Iggy/include/iggy.h"
- #include "../Platform/Durango/Iggy/gdraw/gdraw_d3d11.h"
- #include "../Platform/Durango/Durango_UIController.h"
+#include "../Platform/Durango/Sentient/MinecraftTelemetry.h"
+#include "../Platform/Durango/Durango_App.h"
+#include "../Platform/Durango/Sentient/DynamicConfigurations.h"
+#include "../Platform/Durango/Sentient/TelemetryEnum.h"
+#include "../Platform/Durango/Sentient/SentientTelemetryCommon.h"
+#include "../Platform/Durango/PresenceIds.h"
+#include "../../Minecraft.Assets/DurangoMedia/4J_strings.h"
+#include "../Platform/Durango/XML/ATGXmlParser.h"
+#include "../Platform/Durango/Social/SocialManager.h"
+#include "../Platform/Common/Audio/SoundEngine.h"
+#include "../Platform/Durango/Iggy/include/iggy.h"
+#include "../Platform/Durango/Iggy/gdraw/gdraw_d3d11.h"
+#include "../Platform/Durango/Durango_UIController.h"
#elif defined _WINDOWS64
- #include "../Platform/Windows64/Sentient/MinecraftTelemetry.h"
- #include "../Platform/Windows64/Windows64_App.h"
- #include "../Platform/Windows64/Sentient/DynamicConfigurations.h"
- #include "../Platform/Windows64/Sentient/SentientTelemetryCommon.h"
- #include "../Platform/Windows64/GameConfig/Minecraft.spa.h"
- #include "../Platform/Windows64/XML/ATGXmlParser.h"
- #include "../Platform/Windows64/Social/SocialManager.h"
- #include "../Platform/Common/Audio/SoundEngine.h"
- #include "../Platform/Windows64/Iggy/include/iggy.h"
- #include "../Platform/Windows64/Iggy/gdraw/gdraw_d3d11.h"
- #include "../Platform/Windows64/Windows64_UIController.h"
+#include "../Platform/Windows64/Sentient/MinecraftTelemetry.h"
+#include "../Platform/Windows64/Windows64_App.h"
+#include "../Platform/Windows64/Sentient/DynamicConfigurations.h"
+#include "../Platform/Windows64/Sentient/SentientTelemetryCommon.h"
+#include "../Platform/Windows64/GameConfig/Minecraft.spa.h"
+#include "../Platform/Windows64/XML/ATGXmlParser.h"
+#include "../Platform/Windows64/Social/SocialManager.h"
+#include "../Platform/Common/Audio/SoundEngine.h"
+#include "../Platform/Windows64/Iggy/include/iggy.h"
+#include "../Platform/Windows64/Iggy/gdraw/gdraw_d3d11.h"
+#include "../Platform/Windows64/Windows64_UIController.h"
#elif defined __linux__
- // Linux build: avoid pulling in Windows64 platform headers (they cause
- // symbol/class redefinitions). Use Orbis-compatible stubs and Linux controller.
- #include "../Platform/Linux/Linux_App.h"
- #include "../Platform/Linux/Iggy/include/iggy.h"
- #include "../Platform/Linux/Sentient/SentientTelemetryCommon.h"
- #include "../Platform/Linux/Sentient/DynamicConfigurations.h"
- #include "../Platform/Orbis/GameConfig/Minecraft.spa.h"
- #include "../Platform/Common/Audio/SoundEngine.h"
- #include "../Platform/Linux/Linux_UIController.h"
- #include "../Platform/Linux/Social/SocialManager.h"
+// todo: cleanup ts
+#include "../Platform/Linux/Linux_App.h"
+#include "../Platform/Linux/Iggy/include/iggy.h"
+#include "../Platform/Linux/Sentient/SentientTelemetryCommon.h"
+#include "../Platform/Linux/Sentient/DynamicConfigurations.h"
+#include "../Platform/Orbis/GameConfig/Minecraft.spa.h"
+#include "../Platform/Common/Audio/SoundEngine.h"
+#include "../Platform/Linux/Linux_UIController.h"
+#include "../Platform/Linux/Social/SocialManager.h"
#elif defined __PSVITA__
- #include "../Platform/PSVita/PSVita_App.h"
- #include "../Platform/PSVita/Sentient/SentientManager.h"
- #include "../Platform/PSVita/Sentient/MinecraftTelemetry.h"
- #include "../Platform/PSVita/Sentient/DynamicConfigurations.h"
- #include "../Platform/PSVita/GameConfig/Minecraft.spa.h"
- #include "../Platform/PSVita/XML/ATGXmlParser.h"
- #include "../Platform/PSVita/Social/SocialManager.h"
- #include "../Platform/Common/Audio/SoundEngine.h"
- #include "../Platform/PSVita/Iggy/include/iggy.h"
- #include "../Platform/PSVita/Iggy/gdraw/gdraw_psp2.h"
- #include "../Platform/PSVita/PSVita_UIController.h"
+#include "../Platform/PSVita/PSVita_App.h"
+#include "../Platform/PSVita/Sentient/SentientManager.h"
+#include "../Platform/PSVita/Sentient/MinecraftTelemetry.h"
+#include "../Platform/PSVita/Sentient/DynamicConfigurations.h"
+#include "../Platform/PSVita/GameConfig/Minecraft.spa.h"
+#include "../Platform/PSVita/XML/ATGXmlParser.h"
+#include "../Platform/PSVita/Social/SocialManager.h"
+#include "../Platform/Common/Audio/SoundEngine.h"
+#include "../Platform/PSVita/Iggy/include/iggy.h"
+#include "../Platform/PSVita/Iggy/gdraw/gdraw_psp2.h"
+#include "../Platform/PSVita/PSVita_UIController.h"
#else
- #include "../Platform/Orbis/Sentient/MinecraftTelemetry.h"
- #include "../Platform/Orbis/Orbis_App.h"
- #include "../Platform/Orbis/Sentient/SentientTelemetryCommon.h"
- #include "../Platform/Orbis/Sentient/DynamicConfigurations.h"
- #include "../Platform/Orbis/GameConfig/Minecraft.spa.h"
- #include "../../Minecraft.Assets/OrbisMedia/4J_strings.h"
- #include "../Platform/Orbis/XML/ATGXmlParser.h"
- #include "../Platform/Windows64/Social/SocialManager.h"
- #include "../Platform/Common/Audio/SoundEngine.h"
- #include "../Platform/Orbis/Iggy/include/iggy.h"
- #include "../Platform/Orbis/Iggy/gdraw/gdraw_orbis.h"
- #include "../Platform/Orbis/Orbis_UIController.h"
+#include "../Platform/Orbis/Sentient/MinecraftTelemetry.h"
+#include "../Platform/Orbis/Orbis_App.h"
+#include "../Platform/Orbis/Sentient/SentientTelemetryCommon.h"
+#include "../Platform/Orbis/Sentient/DynamicConfigurations.h"
+#include "../Platform/Orbis/GameConfig/Minecraft.spa.h"
+#include "../../Minecraft.Assets/OrbisMedia/4J_strings.h"
+#include "../Platform/Orbis/XML/ATGXmlParser.h"
+#include "../Platform/Windows64/Social/SocialManager.h"
+#include "../Platform/Common/Audio/SoundEngine.h"
+#include "../Platform/Orbis/Iggy/include/iggy.h"
+#include "../Platform/Orbis/Iggy/gdraw/gdraw_orbis.h"
+#include "../Platform/Orbis/Orbis_UIController.h"
#endif
#ifdef _XBOX
@@ -358,13 +353,11 @@ typedef XUID GameSessionUID;
#include "../Platform/Common/Telemetry/TelemetryManager.h"
#ifdef _XBOX
-//#include "../Platform/Xbox/Xbox_App.h"
+// #include "../Platform/Xbox/Xbox_App.h"
#elif !defined(__PS3__)
#include "extraX64client.h"
#endif
-
-
#ifdef _FINAL_BUILD
#define printf BREAKTHECOMPILE
#define wprintf BREAKTHECOMPILE
diff --git a/Minecraft.Client/Platform/stubs.h b/Minecraft.Client/Platform/stubs.h
index 91464c6a8..9841637ca 100644
--- a/Minecraft.Client/Platform/stubs.h
+++ b/Minecraft.Client/Platform/stubs.h
@@ -13,30 +13,32 @@ class FloatBuffer;
class IntBuffer;
class ByteBuffer;
-void glGenTextures(IntBuffer *);
+void glGenTextures(IntBuffer*);
int glGenTextures();
-void glDeleteTextures(IntBuffer *);
+void glDeleteTextures(IntBuffer*);
void glDeleteTextures(int);
-void glLight(int, int, FloatBuffer *);
-void glLightModel(int, FloatBuffer *);
-void glGetFloat(int, FloatBuffer *);
-void glTexGen(int, int, FloatBuffer *);
-void glFog(int, FloatBuffer *);
-void glTexCoordPointer(int, int, FloatBuffer *);
-void glNormalPointer(int, ByteBuffer *);
-void glColorPointer(int, bool, int, ByteBuffer *);
-void glVertexPointer(int, int, FloatBuffer *);
-void glEndList(int);
-void glTexImage2D(int, int, int, int, int, int, int, int, ByteBuffer *);
-void glCallLists(IntBuffer *);
-void glGenQueriesARB(IntBuffer *);
+void glLight(int, int, FloatBuffer*);
+void glLightModel(int, FloatBuffer*);
+void glGetFloat(int, FloatBuffer*);
+void glTexGen(int, int, FloatBuffer*);
+void glFog(int, FloatBuffer*);
+void glTexCoordPointer(int, int, FloatBuffer*);
+void glNormalPointer(int, ByteBuffer*);
+void glColorPointer(int, bool, int, ByteBuffer*);
+void glVertexPointer(int, int, FloatBuffer*);
+
+void glEndList_4J(int vertexCount = 0);
+
+void glTexImage2D(int, int, int, int, int, int, int, int, ByteBuffer*);
+void glCallLists(IntBuffer*);
+void glGenQueriesARB(IntBuffer*);
void glBeginQueryARB(int, int);
void glEndQueryARB(int);
-void glGetQueryObjectuARB(int, int, IntBuffer *);
-void glReadPixels(int, int, int, int, int, int, ByteBuffer *);
+void glGetQueryObjectuARB(int, int, IntBuffer*);
+void glReadPixels(int, int, int, int, int, int, ByteBuffer*);
+
void LinuxGLLogLightmapState(const char* stage, int textureId, bool scaleLight);
void LinuxLogStubLightmapProbe();
-
#else
const int GL_BYTE = 0;
@@ -54,13 +56,9 @@ const int GL_NORMALIZE = 0;
const int GL_RESCALE_NORMAL = 0;
-
-
const int GL_SMOOTH = 0;
const int GL_FLAT = 0;
-
-
const int GL_RGBA = 0;
const int GL_BGRA = 1;
const int GL_BGR = 0;
@@ -83,73 +81,73 @@ const int GL_TEXTURE1 = 0;
const int GL_TEXTURE0 = 1;
void glFlush();
-void glTexGeni(int,int,int);
-void glTexGen(int,int,FloatBuffer *);
-void glReadPixels(int,int, int, int, int, int, ByteBuffer *);
+void glTexGeni(int, int, int);
+void glTexGen(int, int, FloatBuffer*);
+void glReadPixels(int, int, int, int, int, int, ByteBuffer*);
void glClearDepth(double);
void glCullFace(int);
-void glDeleteLists(int,int);
-void glGenTextures(IntBuffer *);
+void glDeleteLists(int, int);
+void glGenTextures(IntBuffer*);
int glGenTextures();
int glGenLists(int);
-void glLight(int, int,FloatBuffer *);
-void glLightModel(int, FloatBuffer *);
-void glGetFloat(int a, FloatBuffer *b);
+void glLight(int, int, FloatBuffer*);
+void glLightModel(int, FloatBuffer*);
+void glGetFloat(int a, FloatBuffer* b);
void glTexCoordPointer(int, int, int, int);
-void glTexCoordPointer(int, int, FloatBuffer *);
+void glTexCoordPointer(int, int, FloatBuffer*);
void glNormalPointer(int, int, int);
-void glNormalPointer(int, ByteBuffer *);
+void glNormalPointer(int, ByteBuffer*);
void glEnableClientState(int);
void glDisableClientState(int);
-void glColorPointer(int, bool, int, ByteBuffer *);
+void glColorPointer(int, bool, int, ByteBuffer*);
void glColorPointer(int, int, int, int);
void glVertexPointer(int, int, int, int);
-void glVertexPointer(int, int, FloatBuffer *);
-void glDrawArrays(int,int,int);
-void glTranslatef(float,float,float);
-void glRotatef(float,float,float,float);
-void glNewList(int,int);
+void glVertexPointer(int, int, FloatBuffer*);
+void glDrawArrays(int, int, int);
+void glTranslatef(float, float, float);
+void glRotatef(float, float, float, float);
+void glNewList(int, int);
void glEndList(int vertexCount = 0);
void glCallList(int);
void glPopMatrix();
void glPushMatrix();
-void glColor3f(float,float,float);
-void glScalef(float,float,float);
-void glMultMatrixf(float *);
-void glColor4f(float,float,float,float);
+void glColor3f(float, float, float);
+void glScalef(float, float, float);
+void glMultMatrixf(float*);
+void glColor4f(float, float, float, float);
void glDisable(int);
void glEnable(int);
-void glBlendFunc(int,int);
+void glBlendFunc(int, int);
void glDepthMask(bool);
-void glNormal3f(float,float,float);
+void glNormal3f(float, float, float);
void glDepthFunc(int);
void glMatrixMode(int);
void glLoadIdentity();
-void glBindTexture(int,int);
-void glTexParameteri(int,int,int);
-void glTexImage2D(int,int,int,int,int,int,int,int,ByteBuffer *);
-void glDeleteTextures(IntBuffer *);
+void glBindTexture(int, int);
+void glTexParameteri(int, int, int);
+void glTexImage2D(int, int, int, int, int, int, int, int, ByteBuffer*);
+void glDeleteTextures(IntBuffer*);
void glDeleteTextures(int);
-void glCallLists(IntBuffer *);
-void glGenQueriesARB(IntBuffer *);
-void glColorMask(bool,bool,bool,bool);
-void glBeginQueryARB(int,int);
+void glCallLists(IntBuffer*);
+void glGenQueriesARB(IntBuffer*);
+void glColorMask(bool, bool, bool, bool);
+void glBeginQueryARB(int, int);
void glEndQueryARB(int);
-void glGetQueryObjectuARB(int,int,IntBuffer *);
+void glGetQueryObjectuARB(int, int, IntBuffer*);
void glShadeModel(int);
-void glPolygonOffset(float,float);
+void glPolygonOffset(float, float);
void glLineWidth(float);
-void glScaled(double,double,double);
-void gluPerspective(float,float,float,float);
+void glScaled(double, double, double);
+void gluPerspective(float, float, float, float);
void glClear(int);
-void glViewport(int,int,int,int);
-void glAlphaFunc(int,float);
-void glOrtho(float,float,float,float,float,float);
-void glClearColor(float,float,float,float);
-void glFogi(int,int);
-void glFogf(int,float);
-void glFog(int,FloatBuffer *);
-void glColorMaterial(int,int);
+void glViewport(int, int, int, int);
+void glAlphaFunc(int, float);
+void glOrtho(float, float, float, float, float, float);
+void glClearColor(float, float, float, float);
+void glFogi(int, int);
+void glFogf(int, float);
+void glFog(int, FloatBuffer*);
+void glColorMaterial(int, int);
void glMultiTexCoord2f(int, float, float);
void glClientActiveTexture(int);
@@ -158,164 +156,150 @@ void glActiveTexture(int);
#endif
#ifdef __linux__
-class GL11
-{
-public:
- static const int GL_SMOOTH = 0x1D01;
- static const int GL_FLAT = 0x1D00;
- static void glShadeModel(int mode) { ::glShadeModel(mode); }
-};
+class GL11 {
+public:
+ static const int GL_SMOOTH = 0x1D01;
+ static const int GL_FLAT = 0x1D00;
+#undef glShadeModel
+#define GL_SHADEMODEL_IS_FUNCTION
+ static void glShadeModel(int mode) { ::glShadeModel(mode); }
+};
#undef GL_ARRAY_BUFFER_ARB
#undef GL_STREAM_DRAW_ARB
-class ARBVertexBufferObject
-{
+class ARBVertexBufferObject {
public:
- static const int GL_ARRAY_BUFFER_ARB = 0x8892;
- static const int GL_STREAM_DRAW_ARB = 0x88E0;
- static void glBindBufferARB(int, int) {}
- static void glBufferDataARB(int, ByteBuffer *, int) {}
- static void glGenBuffersARB(IntBuffer *) {}
+ static const int GL_ARRAY_BUFFER_ARB = 0x8892;
+ static const int GL_STREAM_DRAW_ARB = 0x88E0;
+ static void glBindBufferARB(int, int) {}
+ static void glBufferDataARB(int, ByteBuffer*, int) {}
+ static void glGenBuffersARB(IntBuffer*) {}
};
#else
-class GL11
-{
+class GL11 {
public:
- static const int GL_SMOOTH = 0;
- static const int GL_FLAT = 0;
- static void glShadeModel(int) {};
+ static const int GL_SMOOTH = 0;
+ static const int GL_FLAT = 0;
+ static void glShadeModel(int) {};
};
-class ARBVertexBufferObject
-{
+class ARBVertexBufferObject {
public:
- static const int GL_ARRAY_BUFFER_ARB = 0;
- static const int GL_STREAM_DRAW_ARB = 0;
- static void glBindBufferARB(int, int) {}
- static void glBufferDataARB(int, ByteBuffer *, int) {}
- static void glGenBuffersARB(IntBuffer *) {}
+ static const int GL_ARRAY_BUFFER_ARB = 0;
+ static const int GL_STREAM_DRAW_ARB = 0;
+ static void glBindBufferARB(int, int) {}
+ static void glBufferDataARB(int, ByteBuffer*, int) {}
+ static void glGenBuffersARB(IntBuffer*) {}
};
#endif
-
class Level;
class Player;
class Textures;
class Font;
class MapItemSavedData;
class Mob;
-class Particles
-{
+class Particles {
public:
- void render(float) {}
- void tick() {}
+ void render(float) {}
+ void tick() {}
};
class BufferedImage;
-class Graphics
-{
+class Graphics {
public:
- void drawImage(BufferedImage *, int, int, void *) {}
- void dispose() {}
+ void drawImage(BufferedImage*, int, int, void*) {}
+ void dispose() {}
};
-class ZipEntry
-{
-};
+class ZipEntry {};
class InputStream;
class File;
-class ZipFile
-{
+class ZipFile {
public:
- ZipFile(File *file) {}
- InputStream *getInputStream(ZipEntry *entry) { return NULL; }
- ZipEntry *getEntry(const std::wstring& name) {return NULL;}
- void close() {}
+ ZipFile(File* file) {}
+ InputStream* getInputStream(ZipEntry* entry) { return NULL; }
+ ZipEntry* getEntry(const std::wstring& name) { return NULL; }
+ void close() {}
};
-class ImageIO
-{
+class ImageIO {
public:
- static BufferedImage *read(InputStream *in) { return NULL; }
+ static BufferedImage* read(InputStream* in) { return NULL; }
};
-class Keyboard
-{
+class Keyboard {
public:
- static void create() {}
- static void destroy() {}
- static bool isKeyDown(int) {return false;}
- static std::wstring getKeyName(int) { return L"KEYNAME"; }
- static void enableRepeatEvents(bool) {}
- static const int KEY_A = 0;
- static const int KEY_B = 1;
- static const int KEY_C = 2;
- static const int KEY_D = 3;
- static const int KEY_E = 4;
- static const int KEY_F = 5;
- static const int KEY_G = 6;
- static const int KEY_H = 7;
- static const int KEY_I = 8;
- static const int KEY_J = 9;
- static const int KEY_K = 10;
- static const int KEY_L = 11;
- static const int KEY_M = 12;
- static const int KEY_N = 13;
- static const int KEY_O = 14;
- static const int KEY_P = 15;
- static const int KEY_Q = 16;
- static const int KEY_R = 17;
- static const int KEY_S = 18;
- static const int KEY_T = 19;
- static const int KEY_U = 20;
- static const int KEY_V = 21;
- static const int KEY_W = 22;
- static const int KEY_X = 23;
- static const int KEY_Y = 24;
- static const int KEY_Z = 25;
- static const int KEY_SPACE = 26;
- static const int KEY_LSHIFT = 27;
- static const int KEY_ESCAPE = 28;
- static const int KEY_BACK = 29;
- static const int KEY_RETURN = 30;
- static const int KEY_RSHIFT = 31;
- static const int KEY_UP = 32;
- static const int KEY_DOWN = 33;
- static const int KEY_TAB = 34;
+ static void create() {}
+ static void destroy() {}
+ static bool isKeyDown(int) { return false; }
+ static std::wstring getKeyName(int) { return L"KEYNAME"; }
+ static void enableRepeatEvents(bool) {}
+ static const int KEY_A = 0;
+ static const int KEY_B = 1;
+ static const int KEY_C = 2;
+ static const int KEY_D = 3;
+ static const int KEY_E = 4;
+ static const int KEY_F = 5;
+ static const int KEY_G = 6;
+ static const int KEY_H = 7;
+ static const int KEY_I = 8;
+ static const int KEY_J = 9;
+ static const int KEY_K = 10;
+ static const int KEY_L = 11;
+ static const int KEY_M = 12;
+ static const int KEY_N = 13;
+ static const int KEY_O = 14;
+ static const int KEY_P = 15;
+ static const int KEY_Q = 16;
+ static const int KEY_R = 17;
+ static const int KEY_S = 18;
+ static const int KEY_T = 19;
+ static const int KEY_U = 20;
+ static const int KEY_V = 21;
+ static const int KEY_W = 22;
+ static const int KEY_X = 23;
+ static const int KEY_Y = 24;
+ static const int KEY_Z = 25;
+ static const int KEY_SPACE = 26;
+ static const int KEY_LSHIFT = 27;
+ static const int KEY_ESCAPE = 28;
+ static const int KEY_BACK = 29;
+ static const int KEY_RETURN = 30;
+ static const int KEY_RSHIFT = 31;
+ static const int KEY_UP = 32;
+ static const int KEY_DOWN = 33;
+ static const int KEY_TAB = 34;
};
-class Mouse
-{
+class Mouse {
public:
- static void create() {}
- static void destroy() {}
- static int getX() { return 0; }
- static int getY() { return 0; }
- static bool isButtonDown(int) { return false; }
+ static void create() {}
+ static void destroy() {}
+ static int getX() { return 0; }
+ static int getY() { return 0; }
+ static bool isButtonDown(int) { return false; }
};
-class Display
-{
+class Display {
public:
- static bool isActive() {return true;}
- static void update();
- static void swapBuffers();
- static void destroy() {}
+ static bool isActive() { return true; }
+ static void update();
+ static void swapBuffers();
+ static void destroy() {}
};
-class BackgroundDownloader
-{
+class BackgroundDownloader {
public:
- BackgroundDownloader(File workDir, Minecraft* minecraft) {}
- void start() {}
- void halt() {}
- void forceReload() {}
+ BackgroundDownloader(File workDir, Minecraft* minecraft) {}
+ void start() {}
+ void halt() {}
+ void forceReload() {}
};
-class Color
-{
+class Color {
public:
- static int HSBtoRGB(float,float,float) {return 0;}
+ static int HSBtoRGB(float, float, float) { return 0; }
};
diff --git a/Minecraft.Client/Player/LocalPlayer.cpp b/Minecraft.Client/Player/LocalPlayer.cpp
index dbb47eaf1..442bb1f97 100644
--- a/Minecraft.Client/Player/LocalPlayer.cpp
+++ b/Minecraft.Client/Player/LocalPlayer.cpp
@@ -1,5 +1,12 @@
#include "../Platform/stdafx.h"
#include "LocalPlayer.h"
+#include "UI/Screens/BeaconScreen.h"
+#include "UI/Screens/BrewingStandScreen.h"
+#include "UI/Screens/EnchantmentScreen.h"
+#include "UI/Screens/HopperScreen.h"
+#include "UI/Screens/HorseInventoryScreen.h"
+#include "UI/Screens/MerchantScreen.h"
+#include "UI/Screens/RepairScreen.h"
#include "User.h"
#include "../Input/Input.h"
#include "../GameState/StatsCounter.h"
@@ -245,10 +252,10 @@ void LocalPlayer::aiStep() {
if (ySlideOffset < 0.2f) ySlideOffset = 0.2f;
}
- checkInTile(x - bbWidth * 0.35, bb->y0 + 0.5, z + bbWidth * 0.35);
- checkInTile(x - bbWidth * 0.35, bb->y0 + 0.5, z - bbWidth * 0.35);
- checkInTile(x + bbWidth * 0.35, bb->y0 + 0.5, z - bbWidth * 0.35);
- checkInTile(x + bbWidth * 0.35, bb->y0 + 0.5, z + bbWidth * 0.35);
+ checkInTile(x - bbWidth * 0.35, bb.y0 + 0.5, z + bbWidth * 0.35);
+ checkInTile(x - bbWidth * 0.35, bb.y0 + 0.5, z - bbWidth * 0.35);
+ checkInTile(x + bbWidth * 0.35, bb.y0 + 0.5, z - bbWidth * 0.35);
+ checkInTile(x + bbWidth * 0.35, bb.y0 + 0.5, z + bbWidth * 0.35);
bool enoughFoodToSprint =
getFoodData()->getFoodLevel() >
@@ -404,25 +411,25 @@ void LocalPlayer::aiStep() {
if (abilities.flying) // minecraft->options->isFlying )
{
- Vec3* viewVector = getViewVector(1.0f);
+ Vec3 viewVector = getViewVector(1.0f);
// 4J-PB - To let the player build easily while flying, we need to
// change this
#ifdef _DEBUG_MENUS_ENABLED
if (abilities.debugflying) {
- flyX = (float)viewVector->x * input->ya;
- flyY = (float)viewVector->y * input->ya;
- flyZ = (float)viewVector->z * input->ya;
+ flyX = (float)viewVector.x * input->ya;
+ flyY = (float)viewVector.y * input->ya;
+ flyZ = (float)viewVector.z * input->ya;
} else
#endif
{
if (isSprinting()) {
// Accelrate up to full speed if we are sprinting, moving in the
// direction of the view vector
- flyX = (float)viewVector->x * input->ya;
- flyY = (float)viewVector->y * input->ya;
- flyZ = (float)viewVector->z * input->ya;
+ flyX = (float)viewVector.x * input->ya;
+ flyY = (float)viewVector.y * input->ya;
+ flyZ = (float)viewVector.z * input->ya;
float scale = ((float)(SPRINT_DURATION - sprintTime)) / 10.0f;
scale = scale * scale;
@@ -550,7 +557,8 @@ void LocalPlayer::closeContainer() {
void LocalPlayer::openTextEdit(std::shared_ptr tileEntity) {
#ifdef ENABLE_JAVA_GUIS
if (tileEntity->GetType() == eTYPE_SIGNTILEENTITY) {
- minecraft->setScreen(new TextEditScreen(std::dynamic_pointer_cast(tileEntity)));
+ minecraft->setScreen(new TextEditScreen(
+ std::dynamic_pointer_cast(tileEntity)));
bool success = true;
}
#else
@@ -583,25 +591,36 @@ bool LocalPlayer::openContainer(std::shared_ptr container) {
}
bool LocalPlayer::openHopper(std::shared_ptr container) {
- // minecraft->setScreen(new HopperScreen(inventory, container));
+#ifdef ENABLE_JAVA_GUIS
+ minecraft->setScreen(new HopperScreen(inventory, container));
+ bool success = true;
+#else
bool success = app.LoadHopperMenu(GetXboxPad(), inventory, container);
if (success) ui.PlayUISFX(eSFX_Press);
+#endif
return success;
}
bool LocalPlayer::openHopper(std::shared_ptr container) {
- // minecraft->setScreen(new HopperScreen(inventory, container));
+#ifdef ENABLE_JAVA_GUIS
+ minecraft->setScreen(new HopperScreen(inventory, container));
+ bool success = true;
+#else
bool success = app.LoadHopperMenu(GetXboxPad(), inventory, container);
if (success) ui.PlayUISFX(eSFX_Press);
+#endif
return success;
}
bool LocalPlayer::openHorseInventory(std::shared_ptr horse,
std::shared_ptr container) {
- // minecraft->setScreen(new HorseInventoryScreen(inventory, container,
- // horse));
+#ifdef ENABLE_JAVA_GUIS
+ minecraft->setScreen(new HorseInventoryScreen(inventory, container, horse));
+ bool success = true;
+#else
bool success = app.LoadHorseMenu(GetXboxPad(), inventory, container, horse);
if (success) ui.PlayUISFX(eSFX_Press);
+#endif
return success;
}
@@ -630,17 +649,20 @@ bool LocalPlayer::openFireworks(int x, int y, int z) {
bool LocalPlayer::startEnchanting(int x, int y, int z,
const std::wstring& name) {
+#ifdef ENABLE_JAVA_GUIS
+ minecraft->setScreen(new EnchantmentScreen(inventory, level, x, y, z));
+ bool success = true;
+#else
bool success =
app.LoadEnchantingMenu(GetXboxPad(), inventory, x, y, z, level, name);
if (success) ui.PlayUISFX(eSFX_Press);
- // minecraft.setScreen(new EnchantmentScreen(inventory, level, x, y, z));
+#endif
return success;
}
bool LocalPlayer::startRepairing(int x, int y, int z) {
#ifdef ENABLE_JAVA_GUIS
- // minecraft.setScreen(new RepairScreen(inventory, level, x, y, z));
- // FUCK YOU 4J FIRST AND FOREMOST
+ minecraft->setScreen(new RepairScreen(inventory, level, x, y, z));
bool success = true;
#else
bool success =
@@ -663,33 +685,49 @@ bool LocalPlayer::openFurnace(std::shared_ptr furnace) {
bool LocalPlayer::openBrewingStand(
std::shared_ptr