1 Commits

Author SHA1 Message Date
9367adcf2c Add grass item support 2026-05-10 12:38:05 +02:00
50 changed files with 541 additions and 3362 deletions

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 93 KiB

View File

@@ -207,7 +207,6 @@ options.graphics.fancy=Fancy
options.graphics.fast=Fast options.graphics.fast=Fast
options.guiScale=GUI Scale options.guiScale=GUI Scale
options.guiScale.auto=Auto options.guiScale.auto=Auto
options.guiScale.tiny=Tiny
options.guiScale.small=Small options.guiScale.small=Small
options.guiScale.medium=Medium options.guiScale.medium=Medium
options.guiScale.large=Large options.guiScale.large=Large
@@ -226,17 +225,10 @@ options.smoothCamera=Smooth camera
options.destroyVibration=Destroy vibration options.destroyVibration=Destroy vibration
options.isLeftHanded=Left handed options.isLeftHanded=Left handed
options.useTouchscreen=Use touchscreen options.useTouchscreen=Use touchscreen
options.touchOverride=Touch Mode Override
options.fancyGraphics=Fancy graphics options.fancyGraphics=Fancy graphics
options.renderDebug=Debug render options.renderDebug=Debug render
options.anaglyph3d=3D anaglyph options.anaglyph3d=3D anaglyph
options.windowScale =Window Scaling
options.menuStyle =Menu Style
options.menuStyle.pocket =Pocket Edition
options.menuStyle.xperia =Xperia/Pi
options.menuStyle.java =Java Beta
performance.max=Max FPS performance.max=Max FPS
performance.balanced=Balanced performance.balanced=Balanced

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

View File

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

View File

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

View File

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

View File

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

View File

@@ -129,7 +129,6 @@ public class SoundPlayer
new SoundId(R.raw.eat1, "random.eat"), new SoundId(R.raw.eat1, "random.eat"),
new SoundId(R.raw.eat2, "random.eat"), new SoundId(R.raw.eat2, "random.eat"),
new SoundId(R.raw.eat3, "random.eat"), new SoundId(R.raw.eat3, "random.eat"),
new SoundId(R.raw.burp1, "random.burp"),
new SoundId(R.raw.fuse, "random.fuse"), new SoundId(R.raw.fuse, "random.fuse"),
new SoundId(R.raw.zpig1, "mob.zombiepig.zpig"), new SoundId(R.raw.zpig1, "mob.zombiepig.zpig"),

View File

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

View File

@@ -10,11 +10,11 @@
#if defined(APPLE_DEMO_PROMOTION) #if defined(APPLE_DEMO_PROMOTION)
#define NO_NETWORK #define NO_NETWORK
#endif #endif
#if defined(RPI) #if defined(RPI)
#define CREATORMODE #define CREATORMODE
#endif #endif
#include "../network/RakNetInstance.h" #include "../network/RakNetInstance.h"
#include "../network/ClientSideNetworkHandler.h" #include "../network/ClientSideNetworkHandler.h"
@@ -98,8 +98,8 @@
static void checkGlError(const char* tag) { static void checkGlError(const char* tag) {
#ifdef GLDEBUG #ifdef GLDEBUG
while (1) { while (1) {
const int errCode = glGetError(); const int errCode = glGetError();
if (errCode == GL_NO_ERROR) break; if (errCode == GL_NO_ERROR) break;
LOGE("################\nOpenGL-error @ %s : #%d\n", tag, errCode); LOGE("################\nOpenGL-error @ %s : #%d\n", tag, errCode);
} }
@@ -117,7 +117,7 @@ const char* Minecraft::progressMessages[] = {
int Minecraft::customDebugId = Minecraft::CDI_NONE; int Minecraft::customDebugId = Minecraft::CDI_NONE;
#if defined(_MSC_VER) #if defined(_MSC_VER)
#pragma warning( disable : 4355 ) // 'this' pointer in initialization list which is perfectly legal #pragma warning( disable : 4355 ) // 'this' pointer in initialization list which is perfectly legal
#endif #endif
bool Minecraft::useAmbientOcclusion = false; bool Minecraft::useAmbientOcclusion = false;
@@ -175,17 +175,17 @@ Minecraft::Minecraft() :
width(1), height(1), width(1), height(1),
//_respawnPlayerTicks(-1), //_respawnPlayerTicks(-1),
#ifdef __APPLE__ #ifdef __APPLE__
_isSuperFast(false), _isSuperFast(false),
#endif #endif
_powerVr(false), _powerVr(false),
commandPort(4711), commandPort(4711),
reserved_d1(0),reserved_d2(0), reserved_d1(0),reserved_d2(0),
reserved_f1(0),reserved_f2(0), options(this) reserved_f1(0),reserved_f2(0), options(this)
{ {
//#ifdef ANDROID //#ifdef ANDROID
#if defined(NO_NETWORK) #if defined(NO_NETWORK)
raknetInstance = new IRakNetInstance(); raknetInstance = new IRakNetInstance();
#else #else
raknetInstance = new RakNetInstance(); raknetInstance = new RakNetInstance();
#endif #endif
@@ -265,7 +265,7 @@ void Minecraft::setLevel(Level* level, const std::string& message /* ="" */, Loc
if (level != NULL) { if (level != NULL) {
level->raknetInstance = raknetInstance; level->raknetInstance = raknetInstance;
gameMode->initLevel(level); gameMode->initLevel(level);
if (!player && forceInsertPlayer) if (!player && forceInsertPlayer)
{ {
@@ -296,19 +296,19 @@ void Minecraft::setLevel(Level* level, const std::string& message /* ="" */, Loc
// Non-threaded // Non-threaded
generateLevel("Currently not used", level); generateLevel("Currently not used", level);
} }
} else { } else {
player = NULL; player = NULL;
} }
this->lastTickTime = 0; this->lastTickTime = 0;
this->_running = true; this->_running = true;
} }
void Minecraft::leaveGame(bool renameLevel /*=false*/) void Minecraft::leaveGame(bool renameLevel /*=false*/)
{ {
if (isGeneratingLevel || !_hasSignaledGeneratingLevelFinished) if (isGeneratingLevel || !_hasSignaledGeneratingLevelFinished)
return; return;
isGeneratingLevel = false; isGeneratingLevel = false;
bool saveLevel = level && (!level->isClientSide || renameLevel); bool saveLevel = level && (!level->isClientSide || renameLevel);
@@ -366,19 +366,19 @@ void Minecraft::prepareLevel(const std::string& title) {
int Max = CHUNK_CACHE_WIDTH * CHUNK_CACHE_WIDTH; int Max = CHUNK_CACHE_WIDTH * CHUNK_CACHE_WIDTH;
int pp = 0; int pp = 0;
for (int x = 8; x < (CHUNK_CACHE_WIDTH * CHUNK_WIDTH); x += CHUNK_WIDTH) { for (int x = 8; x < (CHUNK_CACHE_WIDTH * CHUNK_WIDTH); x += CHUNK_WIDTH) {
for (int z = 8; z < (CHUNK_CACHE_WIDTH * CHUNK_WIDTH); z += CHUNK_WIDTH) { for (int z = 8; z < (CHUNK_CACHE_WIDTH * CHUNK_WIDTH); z += CHUNK_WIDTH) {
progressStagePercentage = 100 * pp++ / Max; progressStagePercentage = 100 * pp++ / Max;
//printf("level generation progress %d\n", progressStagePercentage); //printf("level generation progress %d\n", progressStagePercentage);
B.start(); B.start();
level->getTile(x, 64, z); level->getTile(x, 64, z);
B.stop(); B.stop();
L.start(); L.start();
if (level->isNew()) if (level->isNew())
while (level->updateLights()) while (level->updateLights())
; ;
L.stop(); L.stop();
} }
} }
A.stop(); A.stop();
level->setUpdateLights(true); level->setUpdateLights(true);
@@ -466,33 +466,33 @@ void Minecraft::update() {
} }
TIMER_POP(); TIMER_POP();
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
if (gameMode != NULL) gameMode->render(timer.a); if (gameMode != NULL) gameMode->render(timer.a);
TIMER_PUSH("sound"); TIMER_PUSH("sound");
soundEngine->update(player, timer.a); soundEngine->update(player, timer.a);
TIMER_POP_PUSH("render"); TIMER_POP_PUSH("render");
gameRenderer->render(timer.a); gameRenderer->render(timer.a);
TIMER_POP(); TIMER_POP();
#else #else
CThread::sleep(1); CThread::sleep(1);
#endif #endif
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
Multitouch::resetThisUpdate(); Multitouch::resetThisUpdate();
#endif #endif
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
TIMER_POP(); TIMER_POP();
checkGlError("Update finished"); checkGlError("Update finished");
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) { if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
//#ifndef PLATFORM_DESKTOP //#ifndef PLATFORM_DESKTOP
if (!PerfTimer::enabled) { if (!PerfTimer::enabled) {
PerfTimer::reset(); PerfTimer::reset();
PerfTimer::enabled = true; PerfTimer::enabled = true;
} }
_perfRenderer->renderFpsMeter(1); _perfRenderer->renderFpsMeter(1);
checkGlError("render debug"); checkGlError("render debug");
//#endif //#endif
} else { } else {
PerfTimer::enabled = false; PerfTimer::enabled = false;
} }
@@ -569,17 +569,17 @@ void Minecraft::tick(int nTick, int maxTick) {
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
textures->loadAndBindTexture("terrain.png"); textures->loadAndBindTexture("terrain.png");
if (!pause && !(screen && !screen->renderGameBehind())) { if (!pause && !(screen && !screen->renderGameBehind())) {
#if !defined(RPI) #if !defined(RPI)
#ifdef __APPLE__ #ifdef __APPLE__
if (isSuperFast()) if (isSuperFast())
#endif #endif
{ {
if (nTick == maxTick) { if (nTick == maxTick) {
TIMER_POP_PUSH("textures"); TIMER_POP_PUSH("textures");
textures->tick(true); textures->tick(true);
} }
} }
#endif #endif
} }
TIMER_POP_PUSH("particles"); TIMER_POP_PUSH("particles");
if (!pause) { if (!pause) {
@@ -641,8 +641,8 @@ void Minecraft::tickInput() {
while (Mouse::next()) { while (Mouse::next()) {
//if (Mouse::getButtonState(MouseAction::ACTION_LEFT)) //if (Mouse::getButtonState(MouseAction::ACTION_LEFT))
// LOGI("mouse-down-at: %d, %d\n", Mouse::getX(), Mouse::getY()); // LOGI("mouse-down-at: %d, %d\n", Mouse::getX(), Mouse::getY());
int passedTime = getTimeMs() - lastTickTime; int passedTime = getTimeMs() - lastTickTime;
if (passedTime > 200) continue; // @note: As long Mouse::clear CLEARS the whole buffer, it's safe to break here if (passedTime > 200) continue; // @note: As long Mouse::clear CLEARS the whole buffer, it's safe to break here
// But since it might be rewritten anyway (and hopefully there aren't a lot of messages, we just continue. // But since it might be rewritten anyway (and hopefully there aren't a lot of messages, we just continue.
const MouseAction& e = Mouse::getEvent(); const MouseAction& e = Mouse::getEvent();
@@ -673,14 +673,14 @@ void Minecraft::tickInput() {
} }
/* /*
if (mouseDiggable && options.useMouseForDigging) { if (mouseDiggable && options.useMouseForDigging) {
if (Mouse::getEventButton() == MouseAction::ACTION_LEFT && Mouse::getEventButtonState()) { if (Mouse::getEventButton() == MouseAction::ACTION_LEFT && Mouse::getEventButtonState()) {
handleMouseClick(MouseAction::ACTION_LEFT); handleMouseClick(MouseAction::ACTION_LEFT);
lastClickTick = ticks; lastClickTick = ticks;
} }
if (Mouse::getEventButton() == MouseAction::ACTION_RIGHT && Mouse::getEventButtonState()) { if (Mouse::getEventButton() == MouseAction::ACTION_RIGHT && Mouse::getEventButtonState()) {
handleMouseClick(MouseAction::ACTION_RIGHT); handleMouseClick(MouseAction::ACTION_RIGHT);
lastClickTick = ticks; lastClickTick = ticks;
} }
} }
*/ */
} }
@@ -701,20 +701,20 @@ void Minecraft::tickInput() {
if (slot >= 0 && slot < gui.getNumSlots()) if (slot >= 0 && slot < gui.getNumSlots())
player->inventory->selectSlot(slot); player->inventory->selectSlot(slot);
#if defined(WIN32) #if defined(WIN32)
if (digit >= 1 && GetAsyncKeyState(VK_CONTROL) < 0) { if (digit >= 1 && GetAsyncKeyState(VK_CONTROL) < 0) {
// Set adventure settings here! // Set adventure settings here!
AdventureSettingsPacket p(level->adventureSettings); AdventureSettingsPacket p(level->adventureSettings);
p.toggle((AdventureSettingsPacket::Flags)(1 << slot)); p.toggle((AdventureSettingsPacket::Flags)(1 << slot));
p.fillIn(level->adventureSettings); p.fillIn(level->adventureSettings);
raknetInstance->send(p); raknetInstance->send(p);
} }
if (digit == 0) { if (digit == 0) {
Pos pos((int)player->x, (int)player->y-1, (int)player->z); Pos pos((int)player->x, (int)player->y-1, (int)player->z);
SetSpawnPositionPacket p(pos); SetSpawnPositionPacket p(pos);
raknetInstance->send(p); raknetInstance->send(p);
} }
#endif #endif
} }
if (key == Keyboard::KEY_LEFT_CTRL) { if (key == Keyboard::KEY_LEFT_CTRL) {
@@ -738,7 +738,7 @@ void Minecraft::tickInput() {
/* /*
ImprovedNoise noise; ImprovedNoise noise;
for (int i = 0; i < 16; ++i) for (int i = 0; i < 16; ++i)
printf("%d\t%f\n", i, noise.grad2(i, 3, 8)); printf("%d\t%f\n", i, noise.grad2(i, 3, 8));
*/ */
} }
@@ -751,88 +751,88 @@ void Minecraft::tickInput() {
options.set(OPTIONS_VIEW_DISTANCE, (dst + 1) % 4); options.set(OPTIONS_VIEW_DISTANCE, (dst + 1) % 4);
} }
#ifdef CHEATS #ifdef CHEATS
if (key == Keyboard::KEY_U) { if (key == Keyboard::KEY_U) {
onGraphicsReset(); onGraphicsReset();
player->heal(100); player->heal(100);
}
if (key == Keyboard::KEY_B || key == 108) // Toggle the game mode
setIsCreativeMode(!isCreativeMode());
if (key == Keyboard::KEY_P) // Step forward in time
level->setTime( level->getTime() + 1000);
if (key == Keyboard::KEY_G) {
setScreen(new ArmorScreen());
/*
std::vector<AABB>& boxs = level->getCubes(NULL, AABB(128.1f, 73, 128.1f, 128.9f, 74.9f, 128.9f));
LOGI("boxes: %d\n", (int)boxs.size());
*/
}
if (key == Keyboard::KEY_Y) {
textures->reloadAll();
player->hurtTo(2);
}
if (key == Keyboard::KEY_Z || key == 108) {
for (int i = 0; i < 1; ++i) {
Mob* mob = NULL;
int forceId = 0;//MobTypes::Sheep;
int types[] = {
MobTypes::Sheep,
MobTypes::Pig,
MobTypes::Chicken,
MobTypes::Cow,
};
int mobType = (forceId > 0)? forceId : types[Mth::random(sizeof(types) / sizeof(int))];
mob = MobFactory::CreateMob(mobType, level);
//((Animal*)mob)->setAge(-1000);
float dx = 4 - 8 * Mth::random() + 4 * Mth::sin(Mth::DEGRAD * player->yRot);
float dz = 4 - 8 * Mth::random() + 4 * Mth::cos(Mth::DEGRAD * player->yRot);
if (mob && !MobSpawner::addMob(level, mob, player->x + dx, player->y, player->z + dz, Mth::random()*360, 0, true))
delete mob;
} }
}
if (key == Keyboard::KEY_X) { if (key == Keyboard::KEY_B || key == 108) // Toggle the game mode
const EntityList& entities = level->getAllEntities(); setIsCreativeMode(!isCreativeMode());
for (int i = entities.size()-1; i >= 0; --i) {
Entity* e = entities[i]; if (key == Keyboard::KEY_P) // Step forward in time
if (!e->isPlayer()) level->setTime( level->getTime() + 1000);
level->removeEntity(e);
if (key == Keyboard::KEY_G) {
setScreen(new ArmorScreen());
/*
std::vector<AABB>& boxs = level->getCubes(NULL, AABB(128.1f, 73, 128.1f, 128.9f, 74.9f, 128.9f));
LOGI("boxes: %d\n", (int)boxs.size());
*/
} }
}
if (key == Keyboard::KEY_C /*|| key == 4*/) { if (key == Keyboard::KEY_Y) {
player->inventory->clearInventoryWithDefault(); textures->reloadAll();
// @todo: Add saving here for benchmarking player->hurtTo(2);
}
if (key == Keyboard::KEY_H) {
setScreen( new PrerenderTilesScreen() );
}
if (key == Keyboard::KEY_O) {
for (int i = Inventory::MAX_SELECTION_SIZE; i < player->inventory->getContainerSize(); ++i)
if (player->inventory->getItem(i))
player->inventory->dropSlot(i, false);
}
if (key == Keyboard::KEY_M) {
Difficulty difficulty = (Difficulty)options.getIntValue(OPTIONS_DIFFICULTY);
options.set(OPTIONS_DIFFICULTY, (difficulty == Difficulty::PEACEFUL)?
Difficulty::NORMAL : Difficulty::PEACEFUL);
//setIsCreativeMode( !isCreativeMode() );
}
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
if (key >= '0' && key <= '9') {
_perfRenderer->debugFpsMeterKeyPress(key - '0');
} }
} if (key == Keyboard::KEY_Z || key == 108) {
#endif for (int i = 0; i < 1; ++i) {
Mob* mob = NULL;
int forceId = 0;//MobTypes::Sheep;
int types[] = {
MobTypes::Sheep,
MobTypes::Pig,
MobTypes::Chicken,
MobTypes::Cow,
};
int mobType = (forceId > 0)? forceId : types[Mth::random(sizeof(types) / sizeof(int))];
mob = MobFactory::CreateMob(mobType, level);
//((Animal*)mob)->setAge(-1000);
float dx = 4 - 8 * Mth::random() + 4 * Mth::sin(Mth::DEGRAD * player->yRot);
float dz = 4 - 8 * Mth::random() + 4 * Mth::cos(Mth::DEGRAD * player->yRot);
if (mob && !MobSpawner::addMob(level, mob, player->x + dx, player->y, player->z + dz, Mth::random()*360, 0, true))
delete mob;
}
}
if (key == Keyboard::KEY_X) {
const EntityList& entities = level->getAllEntities();
for (int i = entities.size()-1; i >= 0; --i) {
Entity* e = entities[i];
if (!e->isPlayer())
level->removeEntity(e);
}
}
if (key == Keyboard::KEY_C /*|| key == 4*/) {
player->inventory->clearInventoryWithDefault();
// @todo: Add saving here for benchmarking
}
if (key == Keyboard::KEY_H) {
setScreen( new PrerenderTilesScreen() );
}
if (key == Keyboard::KEY_O) {
for (int i = Inventory::MAX_SELECTION_SIZE; i < player->inventory->getContainerSize(); ++i)
if (player->inventory->getItem(i))
player->inventory->dropSlot(i, false);
}
if (key == Keyboard::KEY_M) {
Difficulty difficulty = (Difficulty)options.getIntValue(OPTIONS_DIFFICULTY);
options.set(OPTIONS_DIFFICULTY, (difficulty == Difficulty::PEACEFUL)?
Difficulty::NORMAL : Difficulty::PEACEFUL);
//setIsCreativeMode( !isCreativeMode() );
}
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
if (key >= '0' && key <= '9') {
_perfRenderer->debugFpsMeterKeyPress(key - '0');
}
}
#endif
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) { if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
if (key >= '0' && key <= '9') { if (key >= '0' && key <= '9') {
@@ -843,35 +843,33 @@ void Minecraft::tickInput() {
if (key == Keyboard::KEY_ESCAPE) if (key == Keyboard::KEY_ESCAPE)
pauseGame(false); pauseGame(false);
#ifdef PLATFORM_DESKTOP #ifndef OPENGL_ES
if (key == Keyboard::KEY_P) { if (key == Keyboard::KEY_P) {
static bool isWireFrame = false; static bool isWireFrame = false;
isWireFrame = !isWireFrame; isWireFrame = !isWireFrame;
glPolygonMode(GL_FRONT, isWireFrame? GL_LINE : GL_FILL); glPolygonMode(GL_FRONT, isWireFrame? GL_LINE : GL_FILL);
//glPolygonMode(GL_BACK, isWireFrame? GL_LINE : GL_FILL); //glPolygonMode(GL_BACK, isWireFrame? GL_LINE : GL_FILL);
}
#endif
}
#ifdef WIN32
if (key == Keyboard::KEY_M) {
for (int i = 0; i < 5 * SharedConstants::TicksPerSecond; ++i)
level->tick();
} }
#endif #endif
}
#ifdef WIN32
if (key == Keyboard::KEY_M) {
for (int i = 0; i < 5 * SharedConstants::TicksPerSecond; ++i)
level->tick();
}
#endif
} }
TIMER_POP_PUSH("handlemouse"); TIMER_POP_PUSH("handlemouse");
static bool prevMouseDownLeft = false; static bool prevMouseDownLeft = false;
if (!useTouchscreen()) { if (Mouse::getButtonState(MouseAction::ACTION_LEFT) == 0) {
if (Mouse::getButtonState(MouseAction::ACTION_LEFT) == 0) { gameMode->stopDestroyBlock();
gameMode->stopDestroyBlock(); }
}
if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) { if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) {
gameMode->releaseUsingItem(player); gameMode->releaseUsingItem(player);
}
} }
if (useTouchscreen()) { if (useTouchscreen()) {
@@ -934,35 +932,35 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
} }
if(player->isUsingItem()) if(player->isUsingItem())
return; return;
bool mayUse = true; bool mayUse = true;
if (!hitResult.isHit()) { if (!hitResult.isHit()) {
if (action->isRemove() && !gameMode->isCreativeType()) { if (action->isRemove() && !gameMode->isCreativeType()) {
missTime = 10; missTime = 10;
} }
} else if (hitResult.type == ENTITY) { } else if (hitResult.type == ENTITY) {
if (action->isAttack()) { if (action->isAttack()) {
player->swing(); player->swing();
//LOGI("attacking!\n"); //LOGI("attacking!\n");
InteractPacket packet(InteractPacket::Attack, player->entityId, hitResult.entity->entityId); InteractPacket packet(InteractPacket::Attack, player->entityId, hitResult.entity->entityId);
raknetInstance->send(packet); raknetInstance->send(packet);
gameMode->attack(player, hitResult.entity); gameMode->attack(player, hitResult.entity);
} else if (action->isInteract()) { } else if (action->isInteract()) {
if (hitResult.entity->interactPreventDefault()) if (hitResult.entity->interactPreventDefault())
mayUse = false; mayUse = false;
//LOGI("interacting!\n"); //LOGI("interacting!\n");
InteractPacket packet(InteractPacket::Interact, player->entityId, hitResult.entity->entityId); InteractPacket packet(InteractPacket::Interact, player->entityId, hitResult.entity->entityId);
raknetInstance->send(packet); raknetInstance->send(packet);
gameMode->interact(player, hitResult.entity); gameMode->interact(player, hitResult.entity);
} }
} else if (hitResult.type == TILE) { } else if (hitResult.type == TILE) {
int x = hitResult.x; int x = hitResult.x;
int y = hitResult.y; int y = hitResult.y;
int z = hitResult.z; int z = hitResult.z;
int face = hitResult.f; int face = hitResult.f;
int oldTileId = level->getTile(x, y, z); int oldTileId = level->getTile(x, y, z);
Tile* oldTile = Tile::tiles[oldTileId]; Tile* oldTile = Tile::tiles[oldTileId];
//bool tryDestroyBlock = false; //bool tryDestroyBlock = false;
@@ -971,8 +969,8 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
return; return;
//LOGI("tile: %s - %d, %d, %d. b: %f - %f\n", oldTile->getDescriptionId().c_str(), x, y, z, oldTile->getBrightness(level, x, y, z), oldTile->getBrightness(level, x, y+1, z)); //LOGI("tile: %s - %d, %d, %d. b: %f - %f\n", oldTile->getDescriptionId().c_str(), x, y, z, oldTile->getBrightness(level, x, y, z), oldTile->getBrightness(level, x, y+1, z));
level->extinguishFire(x, y, z, hitResult.f); level->extinguishFire(x, y, z, hitResult.f);
if (action->isFirstRemove()) { if (action->isFirstRemove()) {
gameMode->startDestroyBlock(x, y, z, hitResult.f); gameMode->startDestroyBlock(x, y, z, hitResult.f);
} else { } else {
@@ -981,16 +979,16 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
particleEngine->crack(x, y, z, hitResult.f); particleEngine->crack(x, y, z, hitResult.f);
player->swing(); player->swing();
} }
else { else {
ItemInstance* item = player->inventory->getSelected(); ItemInstance* item = player->inventory->getSelected();
if (gameMode->useItemOn(player, level, item, x, y, z, face, hitResult.pos)) { if (gameMode->useItemOn(player, level, item, x, y, z, face, hitResult.pos)) {
mayUse = false; mayUse = false;
player->swing(); player->swing();
#ifdef RPI #ifdef RPI
} else if (item && item->id == ((Item*)Item::sword_iron)->id) { } else if (item && item->id == ((Item*)Item::sword_iron)->id) {
player->swing(); player->swing();
#endif #endif
} }
if (item && item->count <= 0) { if (item && item->count <= 0) {
player->inventory->clearSlot(player->inventory->selected); player->inventory->clearSlot(player->inventory->selected);
@@ -1016,7 +1014,7 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
bool Minecraft::isOnlineClient() bool Minecraft::isOnlineClient()
{ {
return (level != NULL && level->isClientSide); return (level != NULL && level->isClientSide);
} }
bool Minecraft::isOnline() bool Minecraft::isOnline()
@@ -1083,8 +1081,8 @@ void Minecraft::setScreen( Screen* screen )
if (screen->isInGameScreen() && level) { if (screen->isInGameScreen() && level) {
level->saveLevelData(); level->saveLevelData();
level->saveGame(); level->saveGame();
} }
//noRender = false; //noRender = false;
} else { } else {
@@ -1121,13 +1119,10 @@ void Minecraft::releaseMouse()
bool Minecraft::useTouchscreen() { bool Minecraft::useTouchscreen() {
#if defined(TARGET_OS_IPHONE) #if defined(TARGET_OS_IPHONE)
return true; return true;
#elif defined(RPI) #elif defined(RPI)
return false; return false;
#endif #endif
if (options.getBooleanValue(OPTIONS_TOUCH_OVERRIDE)) {
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN);
}
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen; return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen;
} }
bool Minecraft::supportNonTouchScreen() { bool Minecraft::supportNonTouchScreen() {
@@ -1147,8 +1142,7 @@ void Minecraft::init()
textures->addDynamicTexture(new WaterSideTexture()); textures->addDynamicTexture(new WaterSideTexture());
textures->addDynamicTexture(new LavaTexture()); textures->addDynamicTexture(new LavaTexture());
textures->addDynamicTexture(new LavaSideTexture()); textures->addDynamicTexture(new LavaSideTexture());
textures->addDynamicTexture(new FireTexture(0)); textures->addDynamicTexture(new FireTexture());
textures->addDynamicTexture(new FireTexture(1));
gui.texturesLoaded(textures); gui.texturesLoaded(textures);
levelRenderer = new LevelRenderer(this); levelRenderer = new LevelRenderer(this);
@@ -1156,7 +1150,7 @@ void Minecraft::init()
particleEngine = new ParticleEngine(level, textures); particleEngine = new ParticleEngine(level, textures);
// 4j's code for reference // 4j's code for reference
// FoliageColor::init(textures->loadTexturePixels(L"misc/foliagecolor.png")); // FoliageColor::init(textures->loadTexturePixels(L"misc/foliagecolor.png"));
// my code // my code
@@ -1168,7 +1162,7 @@ void Minecraft::init()
TextureId grassId = (textures->loadTexture("misc/grasscolor.png")); // loading the uh png for foliage color TextureId grassId = (textures->loadTexture("misc/grasscolor.png")); // loading the uh png for foliage color
int* grassPixels = textures->loadTexturePixels(grassId, "misc/grasscolor.png"); int* grassPixels = textures->loadTexturePixels(grassId, "misc/grasscolor.png");
GrassColor::init(grassPixels); GrassColor::init(grassPixels);
bool tint = options.getBooleanValue(OPTIONS_FOLIAGE_TINT); // finally, toggleable foliage color bool tint = options.getBooleanValue(OPTIONS_FOLIAGE_TINT); // finally, toggleable foliage color
FoliageColor::setUseTint(tint); FoliageColor::setUseTint(tint);
GrassColor::setUseTint(tint); GrassColor::setUseTint(tint);
@@ -1193,83 +1187,59 @@ void Minecraft::init()
void Minecraft::setSize(int w, int h) { void Minecraft::setSize(int w, int h) {
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
transformResolution(&w, &h); transformResolution(&w, &h);
width = w; width = w;
height = h; height = h;
int screenWidth;
int screenHeight; int guiScale = options.getIntValue(OPTIONS_GUI_SCALE);
//#ifdef PLATFORM_DESKTOP
if (options.getBooleanValue(OPTIONS_WINDOW_SCALE)){ // scales with resolution using a formula instead of having hardcoded if checks // determine gui scale, optionally overriding auto
int guiScale = options.getIntValue(OPTIONS_GUI_SCALE); if (guiScale != 0) {
if (guiScale == 0) { // manual selection: 1->small, 2->medium, 3->large, 4->larger, 5->largest
guiScale = 1000; switch (guiScale) {
case 1: Gui::GuiScale = 2.0f; break;
case 2: Gui::GuiScale = 3.0f; break;
case 3: Gui::GuiScale = 4.0f; break;
case 4: Gui::GuiScale = 5.0f; break;
case 5: Gui::GuiScale = 6.0f; break;
default: Gui::GuiScale = 1.0f; break; // auto
} }
// determine gui scale, optionally overriding auto
Gui::GuiScale = (float)Mth::Min(guiScale, Mth::Max(1, Mth::Min(width / 320, height / 240)));
} else { } else {
// auto compute from resolution
if (width >= 1000) {
int guiScale = options.getIntValue(OPTIONS_GUI_SCALE); #ifdef __APPLE__
Gui::GuiScale = (width > 2000)? 8.0f : 4.0f;
// determine gui scale, optionally overriding auto #else
if (guiScale != 0) { Gui::GuiScale = 4.0f;
// manual selection: 1->tiny, 2->small, 3->medium, 4->large, 5->larger, 6->largest #endif
switch (guiScale) { }
case 1: Gui::GuiScale = 1.0f; break; else if (width >= 800) {
case 2: Gui::GuiScale = 2.0f; break;
case 3: Gui::GuiScale = 3.0f; break;
case 4: Gui::GuiScale = 4.0f; break;
case 5: Gui::GuiScale = 5.0f; break;
case 6: Gui::GuiScale = 6.0f; break;
default: Gui::GuiScale = 1.0f; break; // auto
}
} else {
// auto compute from resolution
if (width >= 1000) {
#ifdef __APPLE__ #ifdef __APPLE__
Gui::GuiScale = (width > 2000)? 8.0f : 4.0f; Gui::GuiScale = 4.0f;
#else #else
Gui::GuiScale = 4.0f; Gui::GuiScale = 3.0f;
#endif #endif
} }
else if (width >= 800) { else if (width >= 400)
#ifdef __APPLE__ Gui::GuiScale = 2.0f;
Gui::GuiScale = 4.0f; else
#else Gui::GuiScale = 1.0f;
Gui::GuiScale = 3.0f;
#endif
}
else if (width >= 400)
Gui::GuiScale = 2.0f;
else
Gui::GuiScale = 1.0f;
}
// if (platform()) {
// float pixelsPerMillimeter = options.getProgressValue(&Option::PIXELS_PER_MILLIMETER);
// pixelCalc.setPixelsPerMillimeter(pixelsPerMillimeter);
// pixelCalcUi.setPixelsPerMillimeter(pixelsPerMillimeter * Gui::InvGuiScale);
// }
} }
Gui::InvGuiScale = 1.0f / Gui::GuiScale; Gui::InvGuiScale = 1.0f / Gui::GuiScale;
screenWidth = (int)(width * Gui::InvGuiScale); int screenWidth = (int)(width * Gui::InvGuiScale);
screenHeight = (int)(height * Gui::InvGuiScale); int screenHeight = (int)(height * Gui::InvGuiScale);
// if (platform()) {
// float pixelsPerMillimeter = options.getProgressValue(&Option::PIXELS_PER_MILLIMETER);
// pixelCalc.setPixelsPerMillimeter(pixelsPerMillimeter);
// pixelCalcUi.setPixelsPerMillimeter(pixelsPerMillimeter * Gui::InvGuiScale);
// }
Config config = createConfig(this); Config config = createConfig(this);
gui.onConfigChanged(config); gui.onConfigChanged(config);
if (screen) if (screen)
screen->setSize(screenWidth, screenHeight); screen->setSize(screenWidth, screenHeight);
@@ -1287,19 +1257,20 @@ void Minecraft::setSize(int w, int h) {
void Minecraft::reloadOptions() { void Minecraft::reloadOptions() {
options.save(); options.save();
bool wasTouchscreen = options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN);
options.set(OPTIONS_USE_TOUCHSCREEN, useTouchscreen());
options.save();
bool useTouch = useTouchscreen(); if ((wasTouchscreen != useTouchscreen()) || (inputHolder == 0))
_reloadInput(); _reloadInput();
gui.refreshTouchState();
// user->name = options.username; // user->name = options.username;
LOGI("Reloading-options (touch=%d)\n", useTouch); LOGI("Reloading-options\n");
// @todo @fix Android and iOS behaves a bit differently when leaving // @todo @fix Android and iOS behaves a bit differently when leaving
// an options screen (Android recreates OpenGL surface) // an options screen (Android recreates OpenGL surface)
setSize(width, height); setSize(width, height);
} }
void Minecraft::_reloadInput() { void Minecraft::_reloadInput() {
@@ -1310,17 +1281,17 @@ void Minecraft::_reloadInput() {
if (useTouchHolder) { if (useTouchHolder) {
inputHolder = new TouchInputHolder(this, &options); inputHolder = new TouchInputHolder(this, &options);
} else { } else {
#if defined(ANDROID) || defined(__APPLE__) #if defined(ANDROID) || defined(__APPLE__)
inputHolder = new CustomInputHolder( inputHolder = new CustomInputHolder(
new XperiaPlayInput(&options), new XperiaPlayInput(&options),
new ControllerTurnInput(2, ControllerTurnInput::MODE_DELTA), new ControllerTurnInput(2, ControllerTurnInput::MODE_DELTA),
new IBuildInput()); new IBuildInput());
#else #else
inputHolder = new CustomInputHolder( inputHolder = new CustomInputHolder(
new KeyboardInput(&options), new KeyboardInput(&options),
new MouseTurnInput(MouseTurnInput::MODE_DELTA, width/2, height/2), new MouseTurnInput(MouseTurnInput::MODE_DELTA, width/2, height/2),
new MouseBuildInput()); new MouseBuildInput());
#endif #endif
} }
mouseHandler.setTurnInput(inputHolder->getTurnInput()); mouseHandler.setTurnInput(inputHolder->getTurnInput());
@@ -1363,7 +1334,7 @@ bool Minecraft::joinMultiplayerFromString( const std::string& server )
{ {
std::string ip = ""; std::string ip = "";
std::string port = "19132"; std::string port = "19132";
size_t pos = server.find(":"); size_t pos = server.find(":");
if (pos != std::string::npos) { if (pos != std::string::npos) {
@@ -1374,7 +1345,7 @@ bool Minecraft::joinMultiplayerFromString( const std::string& server )
} }
printf("%s \n", port.c_str()); printf("%s \n", port.c_str());
if (isLookingForMultiplayer && netCallback) { if (isLookingForMultiplayer && netCallback) {
isLookingForMultiplayer = false; isLookingForMultiplayer = false;
printf("test"); printf("test");
@@ -1385,18 +1356,18 @@ bool Minecraft::joinMultiplayerFromString( const std::string& server )
} }
void Minecraft::hostMultiplayer(int port) { void Minecraft::hostMultiplayer(int port) {
// Tear down last instance // Tear down last instance
raknetInstance->disconnect(); raknetInstance->disconnect();
delete netCallback; delete netCallback;
netCallback = NULL; netCallback = NULL;
#if !defined(NO_NETWORK) #if !defined(NO_NETWORK)
netCallback = new ServerSideNetworkHandler(this, raknetInstance); netCallback = new ServerSideNetworkHandler(this, raknetInstance);
#ifdef STANDALONE_SERVER #ifdef STANDALONE_SERVER
raknetInstance->host("Server", port, 16); raknetInstance->host("Server", port, 16);
#else #else
raknetInstance->host(options.getStringValue(OPTIONS_USERNAME), port); raknetInstance->host(options.getStringValue(OPTIONS_USERNAME), port);
#endif #endif
#endif #endif
} }
@@ -1450,9 +1421,9 @@ void Minecraft::_levelGenerated()
player->resetPos(false); player->resetPos(false);
} }
if (level && level->dimension) { if (level && level->dimension) {
level->dimension->FogType = options.getIntValue(OPTIONS_FOG_TYPE); level->dimension->FogType = options.getIntValue(OPTIONS_FOG_TYPE);
} }
@@ -1483,14 +1454,14 @@ void Minecraft::_levelGenerated()
std::string Minecraft::gatherStats1() { std::string Minecraft::gatherStats1() {
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
return levelRenderer->gatherStats1(); return levelRenderer->gatherStats1();
#endif #endif
return "Blank"; return "Blank";
} }
std::string Minecraft::gatherStats2() { std::string Minecraft::gatherStats2() {
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
return levelRenderer->gatherStats2(); return levelRenderer->gatherStats2();
#endif #endif
return "Blank"; return "Blank";
} }
@@ -1503,7 +1474,7 @@ std::string Minecraft::gatherStats3() {
} }
std::string Minecraft::gatherStats4() { std::string Minecraft::gatherStats4() {
return level->gatherChunkSourceStats(); return level->gatherChunkSourceStats();
} }
@@ -1556,7 +1527,7 @@ void Minecraft::onGraphicsReset()
{ {
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
textures->clear(); textures->clear();
font->onGraphicsReset(); font->onGraphicsReset();
gui.onGraphicsReset(); gui.onGraphicsReset();
@@ -1595,12 +1566,12 @@ LevelStorageSource* Minecraft::getLevelSource()
void Minecraft::audioEngineOn() { void Minecraft::audioEngineOn() {
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
soundEngine->enable(true); soundEngine->enable(true);
#endif #endif
} }
void Minecraft::audioEngineOff() { void Minecraft::audioEngineOff() {
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
soundEngine->enable(false); soundEngine->enable(false);
#endif #endif
} }
@@ -1671,17 +1642,17 @@ void Minecraft::optionUpdated(OptionId option, bool value ) {
} }
void Minecraft::optionUpdated(OptionId option, float value ) { void Minecraft::optionUpdated(OptionId option, float value ) {
// #ifndef STANDALONE_SERVER // #ifndef STANDALONE_SERVER
// if(option == OPTIONS_PIXELS_PER_MILLIMETER) { // if(option == OPTIONS_PIXELS_PER_MILLIMETER) {
// pixelCalcUi.setPixelsPerMillimeter(value * Gui::InvGuiScale); // pixelCalcUi.setPixelsPerMillimeter(value * Gui::InvGuiScale);
// pixelCalc.setPixelsPerMillimeter(value); // pixelCalc.setPixelsPerMillimeter(value);
// } // }
// #endif // #endif
} }
void Minecraft::optionUpdated(OptionId option, int value ) { void Minecraft::optionUpdated(OptionId option, int value ) {
if(option == OPTIONS_GUI_SCALE) { if(option == OPTIONS_GUI_SCALE) {
// reapply screen scaling using current window size // reapply screen scaling using current window size
setSize(width, height); setSize(width, height);
} }
} }

View File

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

View File

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

View File

@@ -27,14 +27,14 @@ OptionBool autoJump("autoJump", true);
OptionFloat flySpeed("flySpeed", 1.f); OptionFloat flySpeed("flySpeed", 1.f);
OptionFloat cameraSpeed("cameraSpeed", 1.f); OptionFloat cameraSpeed("cameraSpeed", 1.f);
OptionInt guiScale("guiScale", 0, 0, 6); OptionInt guiScale("guiScale", 0, 0, 5);
OptionString skin("skin", "Default"); OptionString skin("skin", "Default");
#ifdef RPI #ifdef RPI
OptionString username("username", "test"); OptionString username("username", "StevePi");
#else #else
OptionString username("username", "test"); OptionString username("username", "Steve");
#endif #endif
OptionBool destroyVibration("destroyVibration", true); OptionBool destroyVibration("destroyVibration", true);
@@ -64,8 +64,6 @@ OptionBool useVignette("useVignette", true);
OptionBool useTouchscreen("useTouchscreen", true); OptionBool useTouchscreen("useTouchscreen", true);
OptionBool touchOverride("touchOverride", false);
OptionBool serverVisible("servervisible", true); OptionBool serverVisible("servervisible", true);
OptionBool foliageTint("foliagetint", true); OptionBool foliageTint("foliagetint", true);
@@ -84,10 +82,6 @@ OptionBool restoredAnims("restoredAnims", true);
OptionInt debugStyle("debugStyle", 0, 0, 1); OptionInt debugStyle("debugStyle", 0, 0, 1);
OptionInt menuStyle("menuStyle",0, 0, 2);
OptionBool windowScale("windowScale", false);
OptionInt keyForward("key.forward", Keyboard::KEY_W); OptionInt keyForward("key.forward", Keyboard::KEY_W);
OptionInt keyLeft("key.left", Keyboard::KEY_A); OptionInt keyLeft("key.left", Keyboard::KEY_A);
OptionInt keyBack("key.back", Keyboard::KEY_S); OptionInt keyBack("key.back", Keyboard::KEY_S);
@@ -140,7 +134,6 @@ void Options::initTable() {
m_options[OPTIONS_GUI_SCALE] = &guiScale; m_options[OPTIONS_GUI_SCALE] = &guiScale;
m_options[OPTIONS_WINDOW_SCALE] = &windowScale;
m_options[OPTIONS_SKIN] = &skin; m_options[OPTIONS_SKIN] = &skin;
m_options[OPTIONS_USERNAME] = &username; m_options[OPTIONS_USERNAME] = &username;
@@ -175,12 +168,8 @@ void Options::initTable() {
m_options[OPTIONS_RESTORED_ANIMS] = &restoredAnims; m_options[OPTIONS_RESTORED_ANIMS] = &restoredAnims;
m_options[OPTIONS_TOUCH_OVERRIDE] = &touchOverride;
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible; m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
m_options[OPTIONS_MENU_STYLE] = &menuStyle;
m_options[OPTIONS_KEY_FORWARD] = &keyForward; m_options[OPTIONS_KEY_FORWARD] = &keyForward;
m_options[OPTIONS_KEY_LEFT] = &keyLeft; m_options[OPTIONS_KEY_LEFT] = &keyLeft;
m_options[OPTIONS_KEY_BACK] = &keyBack; m_options[OPTIONS_KEY_BACK] = &keyBack;

View File

@@ -37,7 +37,6 @@ enum OptionId {
OPTIONS_BAR_ON_TOP, OPTIONS_BAR_ON_TOP,
OPTIONS_ALLOW_SPRINT, OPTIONS_ALLOW_SPRINT,
OPTIONS_AUTOJUMP, OPTIONS_AUTOJUMP,
OPTIONS_WINDOW_SCALE,
// Graphics // Graphics
OPTIONS_RENDER_DEBUG, OPTIONS_RENDER_DEBUG,
@@ -52,7 +51,6 @@ enum OptionId {
OPTIONS_FANCY_GRAPHICS, OPTIONS_FANCY_GRAPHICS,
OPTIONS_NORMAL_LIGHTING, OPTIONS_NORMAL_LIGHTING,
// Cheats / debug // Cheats / debug
OPTIONS_FLY_SPEED, OPTIONS_FLY_SPEED,
OPTIONS_CAMERA_SPEED, OPTIONS_CAMERA_SPEED,
@@ -92,14 +90,11 @@ enum OptionId {
OPTIONS_FOG_TYPE, OPTIONS_FOG_TYPE,
OPTIONS_JAVA_HUD, OPTIONS_JAVA_HUD,
OPTIONS_RESTORED_ANIMS, OPTIONS_RESTORED_ANIMS,
OPTIONS_TOUCH_OVERRIDE,
OPTIONS_TINTED_SIDE, OPTIONS_TINTED_SIDE,
OPTIONS_BETA_SKY, OPTIONS_BETA_SKY,
OPTIONS_BEAUTIFUL_SKY, OPTIONS_BEAUTIFUL_SKY,
OPTIONS_VIGNETTE, OPTIONS_VIGNETTE,
OPTIONS_DEBUG_STYLE, OPTIONS_DEBUG_STYLE,
OPTIONS_COMPLETE_LIGHTING,
OPTIONS_MENU_STYLE,
// Should be last! // Should be last!
OPTIONS_COUNT OPTIONS_COUNT
}; };

View File

@@ -423,10 +423,6 @@ void Gui::inventoryUpdated() {
_inventoryNeedsUpdate = true; _inventoryNeedsUpdate = true;
} }
void Gui::refreshTouchState() {
_openInventorySlot = minecraft->useTouchscreen();
}
void Gui::onGraphicsReset() { void Gui::onGraphicsReset() {
inventoryUpdated(); inventoryUpdated();
} }

View File

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

View File

@@ -5,17 +5,17 @@
class Tesselator; class Tesselator;
class Minecraft; class Minecraft;
class GuiElementContainer : public GuiElement { class GuiElementContainer : public GuiElement {
public: public:
GuiElementContainer(bool active=false, bool visible=true, int x = 0, int y = 0, int width=24, int height=24); GuiElementContainer(bool active=false, bool visible=true, int x = 0, int y = 0, int width=24, int height=24);
virtual ~GuiElementContainer(); virtual ~GuiElementContainer();
virtual void render(Minecraft* minecraft, int xm, int ym); virtual void render(Minecraft* minecraft, int xm, int ym);
virtual void setupPositions(); virtual void setupPositions();
virtual void addChild(GuiElement* element); virtual void addChild(GuiElement* element);
virtual void removeChild(GuiElement* element); virtual void removeChild(GuiElement* element);
bool containsPointInChildren(int x, int y) const; bool containsPointInChildren(int x, int y) const;
virtual void tick( Minecraft* minecraft ); virtual void tick( Minecraft* minecraft );
virtual void mouseClicked( Minecraft* minecraft, int x, int y, int buttonNum ); virtual void mouseClicked( Minecraft* minecraft, int x, int y, int buttonNum );
virtual void mouseReleased( Minecraft* minecraft, int x, int y, int buttonNum ); virtual void mouseReleased( Minecraft* minecraft, int x, int y, int buttonNum );

View File

@@ -227,4 +227,4 @@ void OptionsGroup::createKey(OptionId optId, Minecraft* minecraft) {
OptionsItem* item = new OptionsItem(optId, itemLabel, element); OptionsItem* item = new OptionsItem(optId, itemLabel, element);
addChild(item); addChild(item);
setupPositions(); setupPositions();
} }

View File

@@ -11,39 +11,39 @@
class Font; class Font;
class Minecraft; class Minecraft;
class OptionsGroup: public GuiElementContainer { class OptionsGroup: public GuiElementContainer {
typedef GuiElementContainer super; typedef GuiElementContainer super;
public: public:
OptionsGroup(std::string labelID); OptionsGroup(std::string labelID);
virtual void setupPositions(); virtual void setupPositions();
virtual void render(Minecraft* minecraft, int xm, int ym); virtual void render(Minecraft* minecraft, int xm, int ym);
virtual void tick(Minecraft* minecraft); virtual void tick(Minecraft* minecraft);
virtual void mouseClicked(Minecraft* minecraft, int x, int y, int buttonNum); virtual void mouseClicked(Minecraft* minecraft, int x, int y, int buttonNum);
virtual void mouseReleased(Minecraft* minecraft, int x, int y, int buttonNum); virtual void mouseReleased(Minecraft* minecraft, int x, int y, int buttonNum);
OptionsGroup& addOptionItem(OptionId optId, Minecraft* minecraft); OptionsGroup& addOptionItem(OptionId optId, Minecraft* minecraft);
void scrollByPixels(float deltaY); void scrollByPixels(float deltaY);
bool isScrollingGestureActive() const; bool isScrollingGestureActive() const;
protected: protected:
void createToggle(OptionId optId, Minecraft* minecraft); void createToggle(OptionId optId, Minecraft* minecraft);
void createProgressSlider(OptionId optId, Minecraft* minecraft); void createProgressSlider(OptionId optId, Minecraft* minecraft);
void createStepSlider(OptionId optId, Minecraft* minecraft); void createStepSlider(OptionId optId, Minecraft* minecraft);
void createTextbox(OptionId optId, Minecraft* minecraft); void createTextbox(OptionId optId, Minecraft* minecraft);
void createKey(OptionId optId, Minecraft* minecraft); void createKey(OptionId optId, Minecraft* minecraft);
std::string label; std::string label;
int contentHeight; int contentHeight;
float scrollOffsetY; float scrollOffsetY;
float maxScrollOffsetY; float maxScrollOffsetY;
bool trackingScrollGesture; bool trackingScrollGesture;
bool scrollingGesture; bool scrollingGesture;
bool touchDispatched; bool touchDispatched;
int dragStartX; int dragStartX;
int dragStartY; int dragStartY;
int lastDragY; int lastDragY;
int touchStartX; int touchStartX;
int touchStartY; int touchStartY;
static const int ScrollStartThreshold = 5; static const int ScrollStartThreshold = 5;
}; };
#endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsGroup_H__*/ #endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsGroup_H__*/

View File

@@ -27,12 +27,11 @@ void OptionsItem::render( Minecraft* minecraft, int xm, int ym ) {
std::string scaleText; std::string scaleText;
switch (value) { switch (value) {
case 0: scaleText = I18n::get("options.guiScale.auto"); break; case 0: scaleText = I18n::get("options.guiScale.auto"); break;
case 1: scaleText = I18n::get("options.guiScale.tiny"); break; case 1: scaleText = I18n::get("options.guiScale.small"); break;
case 2: scaleText = I18n::get("options.guiScale.small"); break; case 2: scaleText = I18n::get("options.guiScale.medium"); break;
case 3: scaleText = I18n::get("options.guiScale.medium"); break; case 3: scaleText = I18n::get("options.guiScale.large"); break;
case 4: scaleText = I18n::get("options.guiScale.large"); break; case 4: scaleText = I18n::get("options.guiScale.larger"); break;
case 5: scaleText = I18n::get("options.guiScale.larger"); break; case 5: scaleText = I18n::get("options.guiScale.largest"); break;
case 6: scaleText = I18n::get("options.guiScale.largest"); break;
default: scaleText = I18n::get("options.guiScale.auto"); break; default: scaleText = I18n::get("options.guiScale.auto"); break;
} }
text += ": " + scaleText; text += ": " + scaleText;
@@ -57,28 +56,6 @@ void OptionsItem::render( Minecraft* minecraft, int xm, int ym ) {
} }
text += ": " + scaleText; text += ": " + scaleText;
} }
if (m_optionId == OPTIONS_MENU_STYLE) {
int value = minecraft->options.getIntValue(OPTIONS_MENU_STYLE);
std::string scaleText;
switch (value) {
case 0: scaleText = I18n::get("options.menuStyle.pocket"); break;
case 1: scaleText = I18n::get("options.menuStyle.xperia"); break;
case 2: scaleText = I18n::get("options.menuStyle.java"); break;
}
text += ": " + scaleText;
}
if (m_optionId == OPTIONS_VIEW_DISTANCE) {
int value = minecraft->options.getIntValue(OPTIONS_VIEW_DISTANCE);
std::string scaleText;
switch (value) {
case 0: scaleText = I18n::get("options.renderDistance.far"); break;
case 1: scaleText = I18n::get("options.renderDistance.normal"); break;
case 2: scaleText = I18n::get("options.renderDistance.short"); break;
case 3: scaleText = I18n::get("options.renderDistance.tiny"); break;
default: scaleText = "Debug"; break;
}
text += ": " + scaleText;
}
minecraft->font->draw(text, (float)x, (float)y + yOffset, 0x909090, false); minecraft->font->draw(text, (float)x, (float)y + yOffset, 0x909090, false);
super::render(minecraft, xm, ym); super::render(minecraft, xm, ym);

View File

@@ -23,15 +23,12 @@ DeathScreen::~DeathScreen()
void DeathScreen::init() void DeathScreen::init()
{ {
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) { if (/* minecraft->useTouchscreen() */ true) {
bRespawn = new Touch::TButton(1, "Respawn!"); bRespawn = new Touch::TButton(1, "Respawn!");
bTitle = new Touch::TButton(2, "Main menu"); bTitle = new Touch::TButton(2, "Main menu");
} else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) { } else {
bRespawn = new Button(1, "Respawn!"); bRespawn = new Button(1, "Respawn!");
bTitle = new Button(2, "Main menu"); bTitle = new Button(2, "Main menu");
} else {
bRespawn = new Button(1, 0, 0, 200, 20, "Respawn");
bTitle = new Button(2, 0, 0, 200, 20, "Title menu");
} }
buttons.push_back(bRespawn); buttons.push_back(bRespawn);
buttons.push_back(bTitle); buttons.push_back(bTitle);
@@ -42,23 +39,13 @@ void DeathScreen::init()
void DeathScreen::setupPositions() void DeathScreen::setupPositions()
{ {
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
bRespawn->width = 200;
bTitle->width = 200;
int centerX = (width / 2) - (bRespawn->width / 2);
bRespawn->x = centerX;
bTitle->x = centerX;
bRespawn->y = (height / 2);
bTitle->y = bRespawn->y + 24;
} else {
bRespawn->width = bTitle->width = width / 4; bRespawn->width = bTitle->width = width / 4;
bRespawn->y = bTitle->y = height / 2; bRespawn->y = bTitle->y = height / 2;
bRespawn->x = width/2 - bRespawn->width - 10; bRespawn->x = width/2 - bRespawn->width - 10;
bTitle->x = width/2 + 10; bTitle->x = width/2 + 10;
}
// LOGI("xyz: %d, %d (%d, %d)\n", bTitle->x, bTitle->y, width, height); LOGI("xyz: %d, %d (%d, %d)\n", bTitle->x, bTitle->y, width, height);
} }
void DeathScreen::tick() { void DeathScreen::tick() {
@@ -69,20 +56,10 @@ void DeathScreen::render( int xm, int ym, float a )
{ {
fillGradient(0, 0, width, height, 0x60500000, 0xa0803030); fillGradient(0, 0, width, height, 0x60500000, 0xa0803030);
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
glPushMatrix2();
glScalef2(2, 2, 2);
drawCenteredString(font, "Game over!", width / 2 / 2, height / 8, 0xffffff);
glPopMatrix2();
std::stringstream ss;
ss << "Score: &e" << minecraft->player->getScore();
drawCenteredString(font, ss.str(), width / 2, (height / 4) + 32, 0xffffff);
} else {
glPushMatrix2(); glPushMatrix2();
glScalef2(2, 2, 2); glScalef2(2, 2, 2);
drawCenteredString(font, "You died!", width / 2 / 2, height / 8, 0xffffff); drawCenteredString(font, "You died!", width / 2 / 2, height / 8, 0xffffff);
glPopMatrix2(); glPopMatrix2();
}
if (_tick >= WAIT_TICKS) if (_tick >= WAIT_TICKS)
Screen::render(xm, ym, a); Screen::render(xm, ym, a);

View File

@@ -12,7 +12,6 @@
#include "../../renderer/Textures.h" #include "../../renderer/Textures.h"
#include "../../gamemode/GameMode.h" #include "../../gamemode/GameMode.h"
#include "ArmorScreen.h" #include "ArmorScreen.h"
#include "crafting/WorkbenchScreen.h"
#include "../components/Button.h" #include "../components/Button.h"
#if defined(__APPLE__) #if defined(__APPLE__)
@@ -28,8 +27,7 @@ IngameBlockSelectionScreen::IngameBlockSelectionScreen()
InventoryRows(1), InventoryRows(1),
InventoryCols(1), InventoryCols(1),
InventorySize(1), InventorySize(1),
bArmor(1, "Armor"), bArmor(1, "Armor")
bCrafting(1, "Crafting")
{ {
} }
@@ -44,19 +42,6 @@ void IngameBlockSelectionScreen::init()
(float)getSlotPosY(0) - 4, (float)getSlotPosY(0) - 4,
(float)getSlotPosX(InventoryCols) + 4, (float)getSlotPosX(InventoryCols) + 4,
(float)getSlotPosY(InventoryRows) + 4); (float)getSlotPosY(InventoryRows) + 4);
if (!minecraft->isCreativeMode()) {
bArmor.width = 42;
bCrafting.width = 42;
bArmor.x = 0;
bArmor.y = height - bArmor.height;
bCrafting.x = 0;
bCrafting.y = height - bCrafting.height - 30;
buttons.push_back(&bArmor);
buttons.push_back(&bCrafting);
}
ItemInstance* selected = inventory->getSelected(); ItemInstance* selected = inventory->getSelected();
if (!selected || selected->isNull()) { if (!selected || selected->isNull()) {
@@ -73,6 +58,13 @@ void IngameBlockSelectionScreen::init()
} }
if (!isAllowed(selectedItem)) if (!isAllowed(selectedItem))
selectedItem = 0; selectedItem = 0;
if (!minecraft->isCreativeMode()) {
bArmor.width = 42;
bArmor.x = 0;
bArmor.y = height - bArmor.height;
buttons.push_back(&bArmor);
}
} }
void IngameBlockSelectionScreen::removed() void IngameBlockSelectionScreen::removed()
@@ -132,7 +124,7 @@ void IngameBlockSelectionScreen::renderSlots()
//w.printEvery(1000, "render-blocksel"); //w.printEvery(1000, "render-blocksel");
glDisable2(GL_RESCALE_NORMAL); glDisable2(GL_RESCALE_NORMAL);
Lighting::turnOff(); Lighting::turnOn(minecraft);
} }
int IngameBlockSelectionScreen::getSlotPosX(int slotX) { int IngameBlockSelectionScreen::getSlotPosX(int slotX) {
@@ -257,7 +249,7 @@ void IngameBlockSelectionScreen::mouseClicked(int x, int y, int buttonNum)
//minecraft->soundEngine->playUI("random.click", 1, 1); //minecraft->soundEngine->playUI("random.click", 1, 1);
} else { } else {
_pendingQuit = !_area.isInside((float)x, (float)y) _pendingQuit = !_area.isInside((float)x, (float)y)
&& !bArmor.isInside(x, y) && !bCrafting.isInside(x, y); && !bArmor.isInside(x, y);
} }
} }
if (!_pendingQuit) if (!_pendingQuit)
@@ -346,8 +338,5 @@ void IngameBlockSelectionScreen::buttonClicked( Button* button )
if (button == &bArmor) { if (button == &bArmor) {
minecraft->setScreen(new ArmorScreen()); minecraft->setScreen(new ArmorScreen());
} }
if (button == &bCrafting) {
minecraft->setScreen(new WorkbenchScreen(Recipe::SIZE_2X2));
}
super::buttonClicked(button); super::buttonClicked(button);
} }

View File

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

View File

@@ -148,7 +148,7 @@ void OptionsScreen::removed() {
void OptionsScreen::buttonClicked(Button* button) { void OptionsScreen::buttonClicked(Button* button) {
if (button == btnClose) { if (button == btnClose) {
minecraft->reloadOptions(); minecraft->options.save();
if (minecraft->screen != NULL) { if (minecraft->screen != NULL) {
minecraft->setScreen(NULL); minecraft->setScreen(NULL);
} else { } else {
@@ -195,11 +195,10 @@ void OptionsScreen::generateOptionScreens() {
.addOptionItem(OPTIONS_SENSITIVITY, minecraft); .addOptionItem(OPTIONS_SENSITIVITY, minecraft);
// Game Pane // Game Pane
optionPanes[1]->addOptionItem(OPTIONS_GUI_SCALE, minecraft) optionPanes[1]->addOptionItem(OPTIONS_DIFFICULTY, minecraft)
.addOptionItem(OPTIONS_DIFFICULTY, minecraft)
.addOptionItem(OPTIONS_SERVER_VISIBLE, minecraft) .addOptionItem(OPTIONS_SERVER_VISIBLE, minecraft)
.addOptionItem(OPTIONS_THIRD_PERSON_VIEW, minecraft) .addOptionItem(OPTIONS_THIRD_PERSON_VIEW, minecraft)
.addOptionItem(OPTIONS_WINDOW_SCALE, minecraft) .addOptionItem(OPTIONS_GUI_SCALE, minecraft)
.addOptionItem(OPTIONS_SENSITIVITY, minecraft) .addOptionItem(OPTIONS_SENSITIVITY, minecraft)
.addOptionItem(OPTIONS_MUSIC_VOLUME, minecraft) .addOptionItem(OPTIONS_MUSIC_VOLUME, minecraft)
.addOptionItem(OPTIONS_SOUND_VOLUME, minecraft) .addOptionItem(OPTIONS_SOUND_VOLUME, minecraft)
@@ -225,7 +224,6 @@ void OptionsScreen::generateOptionScreens() {
// .addOptionItem(&Option::ANAGLYPH, minecraft) // .addOptionItem(&Option::ANAGLYPH, minecraft)
.addOptionItem(OPTIONS_LIMIT_FRAMERATE, minecraft) .addOptionItem(OPTIONS_LIMIT_FRAMERATE, minecraft)
.addOptionItem(OPTIONS_VSYNC, minecraft) .addOptionItem(OPTIONS_VSYNC, minecraft)
.addOptionItem(OPTIONS_VIEW_DISTANCE, minecraft)
.addOptionItem(OPTIONS_RENDER_DEBUG, minecraft) .addOptionItem(OPTIONS_RENDER_DEBUG, minecraft)
.addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft) .addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft)
.addOptionItem(OPTIONS_VIEW_BOBBING, minecraft) .addOptionItem(OPTIONS_VIEW_BOBBING, minecraft)
@@ -234,10 +232,8 @@ void OptionsScreen::generateOptionScreens() {
.addOptionItem(OPTIONS_BEAUTIFUL_SKY, minecraft) .addOptionItem(OPTIONS_BEAUTIFUL_SKY, minecraft)
.addOptionItem(OPTIONS_VIGNETTE, minecraft); .addOptionItem(OPTIONS_VIGNETTE, minecraft);
optionPanes[4]->addOptionItem(OPTIONS_TOUCH_OVERRIDE, minecraft) optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
.addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
.addOptionItem(OPTIONS_BAR_ON_TOP, minecraft) .addOptionItem(OPTIONS_BAR_ON_TOP, minecraft)
.addOptionItem(OPTIONS_MENU_STYLE, minecraft)
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft) .addOptionItem(OPTIONS_RPI_CURSOR, minecraft)
.addOptionItem(OPTIONS_FOLIAGE_TINT, minecraft) .addOptionItem(OPTIONS_FOLIAGE_TINT, minecraft)
.addOptionItem(OPTIONS_TINTED_SIDE, minecraft) .addOptionItem(OPTIONS_TINTED_SIDE, minecraft)
@@ -272,8 +268,8 @@ void OptionsScreen::mouseWheel(int dx, int dy, int xm, int ym) {
void OptionsScreen::keyPressed(int eventKey) { void OptionsScreen::keyPressed(int eventKey) {
if (currentOptionsGroup != NULL) if (currentOptionsGroup != NULL)
currentOptionsGroup->keyPressed(minecraft, eventKey); currentOptionsGroup->keyPressed(minecraft, eventKey);
if (eventKey == Keyboard::KEY_ESCAPE) if (eventKey == Keyboard::KEY_ESCAPE)
minecraft->reloadOptions(); minecraft->options.save();
super::keyPressed(eventKey); super::keyPressed(eventKey);
} }

View File

@@ -10,18 +10,18 @@
#include "client/gui/screens/OptionsScreen.h" #include "client/gui/screens/OptionsScreen.h"
PauseScreen::PauseScreen(bool wasBackPaused) PauseScreen::PauseScreen(bool wasBackPaused)
: saveStep(0), : saveStep(0),
visibleTime(0), visibleTime(0),
bContinue(0), bContinue(0),
bQuit(0), bQuit(0),
bOptions(0), bOptions(0),
bQuitAndSaveLocally(0), bQuitAndSaveLocally(0),
bServerVisibility(0), bServerVisibility(0),
// bThirdPerson(0), // bThirdPerson(0),
wasBackPaused(wasBackPaused), wasBackPaused(wasBackPaused),
// bSound(OPTIONS_SOUND_VOLUME, 1, 0), // bSound(OPTIONS_SOUND_VOLUME, 1, 0),
bThirdPerson(OPTIONS_THIRD_PERSON_VIEW), bThirdPerson(OPTIONS_THIRD_PERSON_VIEW),
bHideGui(OPTIONS_HIDEGUI) bHideGui(OPTIONS_HIDEGUI)
{ {
ImageDef def; ImageDef def;
def.setSrc(IntRectangle(160, 144, 39, 31)); def.setSrc(IntRectangle(160, 144, 39, 31));
@@ -34,7 +34,7 @@ PauseScreen::PauseScreen(bool wasBackPaused)
// bSound.setImageDef(def, true); // bSound.setImageDef(def, true);
defSrc.y += defSrc.h; defSrc.y += defSrc.h;
bThirdPerson.setImageDef(def, true); bThirdPerson.setImageDef(def, true);
bHideGui.setImageDef(def, true); bHideGui.setImageDef(def, true);
//void setImageDef(ImageDef& imageDef, bool setButtonSize); //void setImageDef(ImageDef& imageDef, bool setButtonSize);
} }
@@ -44,31 +44,24 @@ PauseScreen::~PauseScreen() {
delete bQuitAndSaveLocally; delete bQuitAndSaveLocally;
delete bServerVisibility; delete bServerVisibility;
delete bOptions; delete bOptions;
// delete bThirdPerson; // delete bThirdPerson;
} }
void PauseScreen::init() { void PauseScreen::init() {
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) { if (/* minecraft->useTouchscreen() */ true) {
bContinue = new Touch::TButton(1, "Back to game"); bContinue = new Touch::TButton(1, "Back to game");
bOptions = new Touch::TButton(5, "Options"); bOptions = new Touch::TButton(5, "Options");
bQuit = new Touch::TButton(2, "Quit to title"); bQuit = new Touch::TButton(2, "Quit to title");
bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map"); bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map");
bServerVisibility = new Touch::TButton(4, ""); bServerVisibility = new Touch::TButton(4, "");
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view"); // bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
} else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) { } else {
bContinue = new Button(1, "Back to game"); bContinue = new Button(1, "Back to game");
bOptions = new Button(5, "Options"); bOptions = new Button(5, "Options");
bQuit = new Button(2, "Quit to title"); bQuit = new Button(2, "Quit to title");
bQuitAndSaveLocally = new Button(3, "Quit and copy map"); bQuitAndSaveLocally = new Button(3, "Quit and copy map");
bServerVisibility = new Button(4, ""); bServerVisibility = new Button(4, "");
// bThirdPerson = new Button(5, "Toggle 3:rd person view"); // bThirdPerson = new Button(5, "Toggle 3:rd person view");
} else {
bContinue = new Button(1, 0, 0, 200, 20, "Back to game");
bServerVisibility = new Button(4, 0, 0, 200, 20, "");
bOptions = new Button(5, 0, 0, 200, 20, "Options...");
bQuit = new Button(2, 0, 0, 200, 20, "Save and quit to title");
bQuitAndSaveLocally = new Button(3, 0, 0, 200, 20, "Copy and quit map");
// bThirdPerson = new Button(5, "Toggle 3:rd person view");
} }
buttons.push_back(bContinue); buttons.push_back(bContinue);
@@ -79,12 +72,12 @@ void PauseScreen::init() {
bHideGui.updateImage(&minecraft->options); bHideGui.updateImage(&minecraft->options);
// buttons.push_back(&bSound); // buttons.push_back(&bSound);
buttons.push_back(&bThirdPerson); buttons.push_back(&bThirdPerson);
//buttons.push_back(&bHideGui); //buttons.push_back(&bHideGui);
// If Back wasn't pressed, set up additional items (more than Quit to menu // If Back wasn't pressed, set up additional items (more than Quit to menu
// and Back to game) here // and Back to game) here
#if !defined(APPLE_DEMO_PROMOTION) && !defined(RPI) #if !defined(APPLE_DEMO_PROMOTION) && !defined(RPI)
if (true || !wasBackPaused) { if (true || !wasBackPaused) {
if (minecraft->raknetInstance) { if (minecraft->raknetInstance) {
if (minecraft->raknetInstance->isServer()) { if (minecraft->raknetInstance->isServer()) {
@@ -92,14 +85,14 @@ void PauseScreen::init() {
buttons.push_back(bServerVisibility); buttons.push_back(bServerVisibility);
} }
else { else {
#if !defined(DEMO_MODE) #if !defined(DEMO_MODE)
buttons.push_back(bQuitAndSaveLocally); buttons.push_back(bQuitAndSaveLocally);
#endif #endif
} }
} }
} }
#endif #endif
// buttons.push_back(bThirdPerson); // buttons.push_back(bThirdPerson);
for (unsigned int i = 0; i < buttons.size(); ++i) { for (unsigned int i = 0; i < buttons.size(); ++i) {
// if (buttons[i] == &bSound) continue; // if (buttons[i] == &bSound) continue;
@@ -110,48 +103,27 @@ void PauseScreen::init() {
} }
void PauseScreen::setupPositions() { void PauseScreen::setupPositions() {
saveStep = 0; saveStep = 0;
int yBase = 16; int yBase = 16;
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
yBase = 50;
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 200; bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 160;
bQuitAndSaveLocally->width = bServerVisibility->width = 200; bQuitAndSaveLocally->width = bServerVisibility->width = 160;
bContinue->x = (width - bContinue->width) / 2; bContinue->x = (width - bContinue->width) / 2;
bContinue->y = yBase + 24 * 1; bContinue->y = yBase + 32 * 1;
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2; bOptions->x = (width - bOptions->width) / 2;
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 24 * 2; bOptions->y = yBase + 32 * 2;
bOptions->x = (width - bOptions->width) / 2; bQuit->x = (width - bQuit->width) / 2;
bOptions->y = yBase + 24 * 3 + 24; bQuit->y = yBase + 32 * 3;
bQuit->x = (width - bQuit->width) / 2;
bQuit->y = yBase + 24 * 4 + 24;
} else {
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 160;
bQuitAndSaveLocally->width = bServerVisibility->width = 160;
bContinue->x = (width - bContinue->width) / 2;
bContinue->y = yBase + 32 * 1;
bOptions->x = (width - bOptions->width) / 2;
bOptions->y = yBase + 32 * 2;
bQuit->x = (width - bQuit->width) / 2;
bQuit->y = yBase + 32 * 3;
#if APPLE_DEMO_PROMOTION #if APPLE_DEMO_PROMOTION
bQuit->y += 16; bQuit->y += 16;
#endif #endif
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2; bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4; bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4;
}
// bSound.y = bThirdPerson.y = 8; // bSound.y = bThirdPerson.y = 8;
// bSound.x = 4; // bSound.x = 4;
@@ -189,9 +161,9 @@ void PauseScreen::buttonClicked(Button* button) {
minecraft->setScreen(NULL); minecraft->setScreen(NULL);
//minecraft->grabMouse(); //minecraft->grabMouse();
} }
if (button->id == bQuit->id) { if (button->id == bQuit->id) {
minecraft->leaveGame(); minecraft->leaveGame();
} }
if (button->id == bQuitAndSaveLocally->id) { if (button->id == bQuitAndSaveLocally->id) {
minecraft->leaveGame(true); minecraft->leaveGame(true);
} }
@@ -225,5 +197,5 @@ void PauseScreen::updateServerVisibilityText()
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback; ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
bServerVisibility->msg = ss->allowsIncomingConnections()? bServerVisibility->msg = ss->allowsIncomingConnections()?
"Server is visible" "Server is visible"
: "Server is invisible"; : "Server is invisible";
} }

View File

@@ -21,7 +21,7 @@ Screen* ScreenChooser::createScreen( ScreenId id )
Screen* screen = NULL; Screen* screen = NULL;
// :sob: // :sob:
if (_mc->options.getIntValue(OPTIONS_MENU_STYLE) == 0) { if (/* _mc->useTouchscreen() */ true) {
switch (id) { switch (id) {
case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break; case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break;
case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break; case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break;

View File

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

View File

@@ -23,62 +23,49 @@
// Some kind of default settings, might be overridden in ::init // Some kind of default settings, might be overridden in ::init
StartMenuScreen::StartMenuScreen() StartMenuScreen::StartMenuScreen()
: bHost( 2, 0, 0, 160, 24, "Start Game"),
bJoin( 3, 0, 0, 160, 24, "Join Game"),
bOptions( 4, 0, 0, 160, 24, "Options"),
bQuit( 5, "")
{ {
} }
StartMenuScreen::~StartMenuScreen() StartMenuScreen::~StartMenuScreen()
{ {
delete bHost;
delete bJoin;
delete bOptions;
delete bQuit;
} }
void StartMenuScreen::init() void StartMenuScreen::init()
{ {
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){ bJoin.active = bHost.active = bOptions.active = true;
bHost = new Button( 2, 0, 0, 200, 20, "Singleplayer");
bJoin = new Button( 3, 0, 0, 200, 20, "Multiplayer");
bOptions = new Button( 4, 0, 0, 200, 20, "Options...");
bQuit = new Button( 5, 0, 0, 200, 20, "Ouit Game");
} else {
bHost = new Button( 2, 0, 0, 160, 24, "Start Game");
bJoin = new Button( 3, 0, 0, 160, 24, "Join Game");
bOptions = new Button( 4, 0, 0, 160, 24, "Options");
bQuit = new Button( 5, 0, 0, 160, 24, "Ouit Game");
}
bJoin->active = bHost->active = bOptions->active = true;
if (minecraft->options.getStringValue(OPTIONS_USERNAME).empty()) { if (minecraft->options.getStringValue(OPTIONS_USERNAME).empty()) {
return; // tick() will redirect to UsernameScreen return; // tick() will redirect to UsernameScreen
} }
buttons.push_back(bHost); buttons.push_back(&bHost);
buttons.push_back(bJoin); buttons.push_back(&bJoin);
//buttons.push_back(&bTest); //buttons.push_back(&bTest);
buttons.push_back(bQuit);
tabButtons.push_back(bHost); tabButtons.push_back(&bHost);
tabButtons.push_back(bJoin); tabButtons.push_back(&bJoin);
tabButtons.push_back(bQuit);
#ifndef RPI #ifndef RPI
buttons.push_back(bOptions); buttons.push_back(&bOptions);
tabButtons.push_back(bOptions); tabButtons.push_back(&bOptions);
#endif #endif
//// add quit button (top right X icon) match OptionsScreen style // add quit button (top right X icon) match OptionsScreen style
//{ {
// ImageDef def; ImageDef def;
// def.name = "gui/touchgui.png"; def.name = "gui/touchgui.png";
// def.width = 34; def.width = 34;
// def.height = 26; def.height = 26;
// def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height)); def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
// bQuit.setImageDef(def, true); bQuit.setImageDef(def, true);
// bQuit.scaleWhenPressed = false; bQuit.scaleWhenPressed = false;
// buttons.push_back(&bQuit); buttons.push_back(&bQuit);
// // don't include in tab navigation // don't include in tab navigation
//} }
copyright = "\xffMojang AB";//. Do not distribute!"; copyright = "\xffMojang AB";//. Do not distribute!";
@@ -106,30 +93,20 @@ void StartMenuScreen::init()
} }
void StartMenuScreen::setupPositions() { void StartMenuScreen::setupPositions() {
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){ int yBase = height / 2;
int yBase = (height / 2) - 20;
bHost->y = yBase; bHost.y = yBase;
bJoin->y = bHost->y + 24; bJoin.y = bHost.y + 24 + 4;
bOptions->y = bJoin->y + 24; bOptions.y = bJoin.y + 24 + 4;
bQuit->y = bOptions->y + 24;
} else {
int yBase = height / 2;
bHost->y = yBase;
bJoin->y = bHost->y + 24 + 4;
bOptions->y = bJoin->y + 24 + 4;
bQuit->y = bOptions->y + 24 + 4;
}
// Center buttons // Center buttons
bHost->x = (width - bHost->width) / 2; bHost.x = (width - bHost.width) / 2;
bJoin->x = (width - bJoin->width) / 2; bJoin.x = (width - bJoin.width) / 2;
bOptions->x = (width - bOptions->width) / 2; bOptions.x = (width - bOptions.width) / 2;
bQuit->x = (width - bQuit->width) / 2;
//// position quit icon at top-right (use image-defined size) // position quit icon at top-right (use image-defined size)
//bQuit.x = width - bQuit.width; bQuit.x = width - bQuit.width;
//bQuit.y = 0; bQuit.y = 0;
} }
void StartMenuScreen::tick() { void StartMenuScreen::tick() {
@@ -137,7 +114,7 @@ void StartMenuScreen::tick() {
void StartMenuScreen::buttonClicked(Button* button) { void StartMenuScreen::buttonClicked(Button* button) {
if (button->id == bHost->id) if (button->id == bHost.id)
{ {
#if defined(DEMO_MODE) || defined(APPLE_DEMO_PROMOTION) #if defined(DEMO_MODE) || defined(APPLE_DEMO_PROMOTION)
minecraft->setScreen( new SimpleChooseLevelScreen("_DemoLevel") ); minecraft->setScreen( new SimpleChooseLevelScreen("_DemoLevel") );
@@ -145,16 +122,16 @@ void StartMenuScreen::buttonClicked(Button* button) {
minecraft->screenChooser.setScreen(SCREEN_SELECTWORLD); minecraft->screenChooser.setScreen(SCREEN_SELECTWORLD);
#endif #endif
} }
if (button->id == bJoin->id) if (button->id == bJoin.id)
{ {
minecraft->locateMultiplayer(); minecraft->locateMultiplayer();
minecraft->screenChooser.setScreen(SCREEN_JOINGAME); minecraft->screenChooser.setScreen(SCREEN_JOINGAME);
} }
if (button->id == bOptions->id) if (button->id == bOptions.id)
{ {
minecraft->setScreen(new OptionsScreen()); minecraft->setScreen(new OptionsScreen());
} }
if (button->id == bQuit->id) if (button == &bQuit)
{ {
minecraft->quit(); minecraft->quit();
} }

View File

@@ -23,10 +23,10 @@ public:
bool isInGameScreen(); bool isInGameScreen();
private: private:
Button* bHost; Button bHost;
Button* bJoin; Button bJoin;
Button* bOptions; Button bOptions;
Button* bQuit; ImageButton bQuit; // X button in top-right corner
std::string copyright; std::string copyright;
int copyrightPosX; int copyrightPosX;

View File

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

View File

@@ -101,22 +101,12 @@ void GameRenderer::setupCamera(float a, int eye) {
float stereoScale = 0.07f; float stereoScale = 0.07f;
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) glTranslatef2(-(eye * 2 - 1) * stereoScale, 0, 0); if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) glTranslatef2(-(eye * 2 - 1) * stereoScale, 0, 0);
if (mc->options.getBooleanValue(OPTIONS_BETA_SKY)){ if (zoom != 1) {
if (zoom != 1) { glTranslatef2((float) zoom_x, (float) -zoom_y, 0);
glTranslatef2((float) zoom_x, (float) -zoom_y, 0); glScalef2(zoom, zoom, 1);
glScalef2(zoom, zoom, 1); gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance);
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance * 2.0f);
} else {
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance * 2.0f);
}
} else { } else {
if (zoom != 1) { gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance);
glTranslatef2((float) zoom_x, (float) -zoom_y, 0);
glScalef2(zoom, zoom, 1);
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance);
} else {
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance);
}
} }
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
@@ -350,12 +340,10 @@ void GameRenderer::renderLevel(float a) {
setupFog(0); setupFog(0);
glEnable2(GL_BLEND); glEnable2(GL_BLEND);
glDisable2(GL_CULL_FACE); glDisable2(GL_CULL_FACE);
glDepthMask(GL_FALSE); // @TODO commenting this out fixes Ice transparency and clouds are no longer visilbe underwater like normal beta - shredder glDepthMask(GL_FALSE);
glDisable2(GL_ALPHA_TEST); glDisable2(GL_ALPHA_TEST);
mc->textures->loadAndBindTexture("terrain.png"); mc->textures->loadAndBindTexture("terrain.png");
// @TODO - below is a commented out double render system that fixes ice transparency, but probs harm performance, add it as an option - shredder //if (mc->options.fancyGraphics) {
//if (mc->options.fancyGraphics) {
// glColorMask(false, false, false, false); // glColorMask(false, false, false, false);
// int visibleWaterChunks = levelRenderer->render(cameraEntity, 1, a); // int visibleWaterChunks = levelRenderer->render(cameraEntity, 1, a);
// glColorMask(true, true, true, true); // glColorMask(true, true, true, true);
@@ -689,7 +677,7 @@ void GameRenderer::pick(float a) {
float range = mc->gameMode->getPickRange(); float range = mc->gameMode->getPickRange();
bool isPicking = true; bool isPicking = true;
bool freeform = mc->useTouchscreen() && !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA); bool freeform = mc->useTouchscreen(); //&& !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA);
if (freeform) { if (freeform) {
isPicking = updateFreeformPickDirection(a, pickDirection); isPicking = updateFreeformPickDirection(a, pickDirection);

View File

@@ -26,7 +26,6 @@
#include "../../client/player/LocalPlayer.h" #include "../../client/player/LocalPlayer.h"
#include "../../world/level/GrassColor.h" #include "../../world/level/GrassColor.h"
#include "Lighting.h"
#ifdef GFX_SMALLER_CHUNKS #ifdef GFX_SMALLER_CHUNKS
/* static */ const int LevelRenderer::CHUNK_SIZE = 8; /* static */ const int LevelRenderer::CHUNK_SIZE = 8;
@@ -576,7 +575,7 @@ void LevelRenderer::render(const AABB& b) const
// t.color(255, 255, 255, 255); // again not needed, for some reason the vanilla source code tints it... white? maybe this was used for something else in MCPE's dev at one point? - shredder // t.color(255, 255, 255, 255); // again not needed, for some reason the vanilla source code tints it... white? maybe this was used for something else in MCPE's dev at one point? - shredder
// t.offset(((Mob*)mc->player)->getPos(0).negated()); // why does this even exist normally, it just makes the thing... not render // t.offset(((Mob*)mc->player)->getPos(0).negated()); // why does this even exist normally, it just makes the thing... not render
glLineWidth(2.0f); // make it more thick - shredder
t.begin(GL_LINE_STRIP); t.begin(GL_LINE_STRIP);
t.vertex(b.x0, b.y0, b.z0); t.vertex(b.x0, b.y0, b.z0);
t.vertex(b.x1, b.y0, b.z0); t.vertex(b.x1, b.y0, b.z0);
@@ -1158,22 +1157,23 @@ void LevelRenderer::renderSky(float alpha) {
glDisable(GL_FOG); glDisable(GL_FOG);
glDisable(GL_ALPHA_TEST); glDisable(GL_ALPHA_TEST);
// re ported this again from beta 1.6.6, thanks to the mcpe 0.1 decomp team's code for some bit of help about the void layer - shredder // thanks to the mcpe 0.1 decomp project a bit for this part, was not getting the gl states correctly, gles is painful - shredder
// Sunrise // Sunrise
if (mc->options.getBooleanValue(OPTIONS_BEAUTIFUL_SKY)) { if (mc->options.getBooleanValue(OPTIONS_BEAUTIFUL_SKY)) {
glEnable(GL_BLEND); glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Lighting::turnOff();
float* c = level->dimension->getSunriseColor(level->getTimeOfDay(alpha), alpha); float* c = level->dimension->getSunriseColor(level->getTimeOfDay(alpha), alpha);
if (c != nullptr) if (c != nullptr)
{ {
glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);
// glShadeModel(GL_SMOOTH); //
glPushMatrix(); glPushMatrix();
glRotatef(90.0f, 1.0f, 0.0f, 0.0f); glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
glRotatef(level->getTimeOfDay(alpha) > 0.5f ? 180 : 0, 0.0f, 0.0f, 1.0f); glRotatef(level->getTimeOfDay(alpha) > 0.5f ? 180 : 0, 0.0f, 0.0f, 1.0f);
t.begin(GL_TRIANGLE_FAN); t.begin(GL_TRIANGLE_FAN);
t.color(c[0], c[1], c[2], c[3]); t.color(c[0], c[1], c[2], c[3]);
t.vertex(0.0f, 100.0f, 0.0f); t.vertex(0.0f, 100.0f, 0.0f);
@@ -1190,12 +1190,11 @@ void LevelRenderer::renderSky(float alpha) {
t.draw(); t.draw();
glPopMatrix(); glPopMatrix();
// glShadeModel(GL_FLAT); //
} }
// gets the time of day and rotates the sun and moon png based on the time // gets the time of day and rotates the sun and moon png based on the time
glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_SRC_ALPHA, GL_ONE); glBlendFunc(GL_ONE, GL_ONE);
glPushMatrix(); glPushMatrix();
glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
@@ -1327,8 +1326,8 @@ void LevelRenderer::renderAdvancedClouds(float alpha) {
float cloudTime = (float)ticks + alpha; float cloudTime = (float)ticks + alpha;
float xo = (px + cloudTime * 0.03f) / ss; double xo = (px + cloudTime * 0.03f) / ss;
float zo = pz / ss + 0.33f; double zo = pz / ss + 0.33f;
float yy = 108.0f - py + 0.33f; float yy = 108.0f - py + 0.33f;

View File

@@ -130,8 +130,9 @@ void EntityRenderer::postRender(Entity* entity, float x, float y, float z, float
if (pow > 0) { if (pow > 0) {
renderShadow(entity, x, y, z, pow, a); renderShadow(entity, x, y, z, pow, a);
} }
} //}
if (entity->isOnFire()) renderFlame(entity, x, y, z, a); if (entity->isOnFire()) renderFlame(entity, x, y, z, a);
}
} }
void EntityRenderer::renderFlame(Entity* e, float x, float y, float z, float a) { void EntityRenderer::renderFlame(Entity* e, float x, float y, float z, float a) {
glDisable(GL_LIGHTING); glDisable(GL_LIGHTING);
@@ -186,11 +187,7 @@ void EntityRenderer::renderShadow(Entity* e, float x, float y, float z, float po
//Textures* textures = entityRenderDispatcher->textures; //Textures* textures = entityRenderDispatcher->textures;
//textures->bind(textures->loadTexture("%clamp%/environment/shadow.png")); //textures->bind(textures->loadTexture("%clamp%/environment/shadow.png"));
Textures* textures = entityRenderDispatcher->textures; Textures* textures = entityRenderDispatcher->textures;
textures->loadAndBindTexture("/misc/shadow.png");
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
@@ -224,6 +221,9 @@ void EntityRenderer::renderShadow(Entity* e, float x, float y, float z, float po
renderTileShadow(Tile::tiles[t], x, y + e->getShadowHeightOffs(), z, xt, yt, zt, pow, r, xo, yo + e->getShadowHeightOffs(), zo); renderTileShadow(Tile::tiles[t], x, y + e->getShadowHeightOffs(), z, xt, yt, zt, pow, r, xo, yo + e->getShadowHeightOffs(), zo);
} }
} }
textures->loadAndBindTexture(("/misc/shadow.png"));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
tt.draw(); tt.draw();
glColor4f2(1, 1, 1, 1); glColor4f2(1, 1, 1, 1);

View File

@@ -130,12 +130,13 @@ static const signed short _18[] = {79, 80, 81, -1, 79, 80, 81, -1, 79, 80, 81, -
static const signed short _24[] = {11, 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; static const signed short _24[] = {11, 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
static const signed short _35[] = {52, 59, 58, 57, 56, 55, 54, 53, 67, 66, 65, 64, 63, 62, 61, 60}; static const signed short _35[] = {52, 59, 58, 57, 56, 55, 54, 53, 67, 66, 65, 64, 63, 62, 61, 60};
static const signed short _44[] = {28, 32, 30, 29, 31, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; static const signed short _44[] = {28, 32, 30, 29, 31, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
static const signed short _31[] = {37, 82, -1, 38, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
static const signed short _98[] = {1, 2, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; static const signed short _98[] = {1, 2, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
static const signed short _155[] = {34, 36, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; static const signed short _155[] = {34, 36, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
static const signed short _263[] = {230, 151, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; static const signed short _263[] = {230, 151, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
static const signed short _351[] = {-1, 152, 154, -1, 193, 215, 216, -1, -1, 217, 218, 219, 220, 221, 222, 144}; static const signed short _351[] = {-1, 152, 154, -1, 193, 215, 216, -1, -1, 217, 218, 219, 220, 221, 222, 144};
static const signed short _mapper[] = {-1, 7, 9, 8, 0, 5, -2, -1, -1, -1, -1, -1, 14, 15, 39, 38, 37, -2, -2, -1, 49, 41, 46, -1, -2, -1, -1, -1, -1, -1, 235, -1, -1, -1, -1, -2, -1, 134, 135, 136, 137, 43, 44, -1, -2, 6, 76, 71, 4, 47, 129, -1, -1, 22, 74, -1, 40, 45, 72, -1, -1, 75, -1, -1, -1, 128, -1, 21, -1, -1, -1, -1, -1, 42, -1, -1, -1, -1, -1, -1, 48, 77, 10, 236, -1, 69, -1, 20, -1, 50, -1, -1, -1, -1, -1, -1, 68, -1, -2, -1, -1, -1, 130, 78, -1, -1, -1, 70, 23, 25, -1, -1, 19, -1, 26, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 24, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 73, -1, 51, -1, -1, -1, -1, -1, 82, -1, -1, 174, 173, 175, 231, 234, 147, 190, -2, 153, 150, 149, 146, 185, 166, 164, 167, 186, 170, 169, 171, 187, 177, 176, 178, 165, 195, 194, 188, 181, 180, 182, 189, 191, 228, 168, 172, 145, 179, 183, 142, 233, 232, 198, 200, 201, 202, -1, -1, -1, -1, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 192, 156, 157, 133, -1, 148, 131, -1, -1, -1, -1, -1, -1, -1, 226, -1, 199, -1, 159, 158, 138, 224, 225, -1, -1, -1, -1, -1, -1, -1, 227, -1, -1, -2, 223, 229, -1, 132, -1, -1, -1, 184, 196, -1, 143, 160, 161, 162, 163, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 155, 197}; static const signed short _mapper[] = {-1, 7, 9, 8, 0, 5, -2, -1, -1, -1, -1, -1, 14, 15, 39, 38, 37, -2, -2, -1, 49, 41, 46, -1, -2, -1, -1, -1, -1, -1, 235, -2, -1, -1, -1, -2, -1, 134, 135, 136, 137, 43, 44, -1, -2, 6, 76, 71, 4, 47, 129, -1, -1, 22, 74, -1, 40, 45, 72, -1, -1, 75, -1, -1, -1, 128, -1, 21, -1, -1, -1, -1, -1, 42, -1, -1, -1, -1, -1, -1, 48, 77, 10, 236, -1, 69, -1, 20, -1, 50, -1, -1, -1, -1, -1, -1, 68, -1, -2, -1, -1, -1, 130, 78, -1, -1, -1, 70, 23, 25, -1, -1, 19, -1, 26, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 24, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 73, -1, 51, -1, -1, -1, -1, -1, 82, -1, -1, 174, 173, 175, 231, 234, 147, 190, -2, 153, 150, 149, 146, 185, 166, 164, 167, 186, 170, 169, 171, 187, 177, 176, 178, 165, 195, 194, 188, 181, 180, 182, 189, 191, 228, 168, 172, 145, 179, 183, 142, 233, 232, 198, 200, 201, 202, -1, -1, -1, -1, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 192, 156, 157, 133, -1, 148, 131, -1, -1, -1, -1, -1, -1, -1, 226, -1, 199, -1, 159, 158, 138, 224, 225, -1, -1, -1, -1, -1, -1, -1, 227, -1, -1, -2, 223, 229, -1, 132, -1, -1, -1, 184, 196, -1, 143, 160, 161, 162, 163, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 155, 197};
#define IRMAPCASE(x) case x: return _##x [item->getAuxValue() & 15] #define IRMAPCASE(x) case x: return _##x [item->getAuxValue() & 15]
@@ -153,6 +154,7 @@ int ItemRenderer::getAtlasPos(const ItemInstance* item) {
IRMAPCASE(17); IRMAPCASE(17);
IRMAPCASE(18); IRMAPCASE(18);
IRMAPCASE(24); IRMAPCASE(24);
IRMAPCASE(31);
IRMAPCASE(35); IRMAPCASE(35);
IRMAPCASE(44); IRMAPCASE(44);
IRMAPCASE(98); IRMAPCASE(98);

View File

@@ -393,8 +393,8 @@ void LavaSideTexture::tick() {
} }
} }
FireTexture::FireTexture(int id) FireTexture::FireTexture()
: super(((Tile*)Tile::fire)->tex + id * 16), : super(((Tile*)Tile::fire)->tex),
_tick(0), _tick(0),
_frame(0) _frame(0)
{ {

View File

@@ -106,7 +106,7 @@ class FireTexture: public DynamicTexture
float* heata; float* heata;
public: public:
FireTexture(int id); FireTexture();
~FireTexture(); ~FireTexture();
void tick(); void tick();

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -16,88 +16,7 @@
#ifdef __EMSCRIPTEN__ #ifdef __EMSCRIPTEN__
#include <emscripten/emscripten.h> #include <emscripten/emscripten.h>
#endif #endif
static App* g_app = 0; static App* g_app = 0;
#ifdef __EMSCRIPTEN__
static int g_touchPointerIds[Multitouch::MAX_POINTERS];
static void resetTouchPointerIds() {
for (int i = 0; i < Multitouch::MAX_POINTERS; ++i) {
g_touchPointerIds[i] = -1;
}
}
static int getTouchPointerSlot(int touchId) {
for (int i = 0; i < Multitouch::MAX_POINTERS; ++i) {
if (g_touchPointerIds[i] == touchId) return i;
}
return -1;
}
static int allocateTouchPointerSlot(int touchId) {
int slot = getTouchPointerSlot(touchId);
if (slot >= 0) return slot;
for (int i = 0; i < Multitouch::MAX_POINTERS; ++i) {
if (g_touchPointerIds[i] < 0) {
g_touchPointerIds[i] = touchId;
return i;
}
}
return -1;
}
static void releaseTouchPointerSlot(int touchId) {
for (int i = 0; i < Multitouch::MAX_POINTERS; ++i) {
if (g_touchPointerIds[i] == touchId) {
g_touchPointerIds[i] = -1;
return;
}
}
}
static EM_BOOL touch_callback(int eventType, const EmscriptenTouchEvent* touchEvent, void* userData) {
if (!touchEvent) return 0;
const bool isStart = eventType == EMSCRIPTEN_EVENT_TOUCHSTART;
const bool isMove = eventType == EMSCRIPTEN_EVENT_TOUCHMOVE;
const bool isEnd = eventType == EMSCRIPTEN_EVENT_TOUCHEND;
const bool isCancel = eventType == EMSCRIPTEN_EVENT_TOUCHCANCEL;
if (isCancel) {
for (int i = 0; i < Multitouch::MAX_POINTERS; ++i) {
if (g_touchPointerIds[i] >= 0) {
Multitouch::feed(1, 0, Multitouch::getX(i), Multitouch::getY(i), i);
g_touchPointerIds[i] = -1;
}
}
return 1;
}
for (int i = 0; i < touchEvent->numTouches; ++i) {
const EmscriptenTouchPoint& touch = touchEvent->touches[i];
if (!touch.isChanged) continue;
const int slot = isEnd ? getTouchPointerSlot(touch.identifier) : allocateTouchPointerSlot(touch.identifier);
if (slot < 0) continue;
const short x = (short)touch.targetX;
const short y = (short)touch.targetY;
if (isStart) {
Multitouch::feed(1, 1, x, y, slot);
} else if (isMove) {
Multitouch::feed(0, 0, x, y, slot);
} else if (isEnd) {
Multitouch::feed(1, 0, x, y, slot);
releaseTouchPointerSlot(touch.identifier);
}
}
return 1;
}
#endif
int transformKey(int glfwkey) { int transformKey(int glfwkey) {
if (glfwkey >= GLFW_KEY_F1 && glfwkey <= GLFW_KEY_F12) { if (glfwkey >= GLFW_KEY_F1 && glfwkey <= GLFW_KEY_F12) {
@@ -257,19 +176,12 @@ int main(void) {
glfwSetKeyCallback(platform->window, key_callback); glfwSetKeyCallback(platform->window, key_callback);
glfwSetCharCallback(platform->window, character_callback); glfwSetCharCallback(platform->window, character_callback);
glfwSetCursorPosCallback(platform->window, cursor_position_callback); glfwSetCursorPosCallback(platform->window, cursor_position_callback);
glfwSetMouseButtonCallback(platform->window, mouse_button_callback); glfwSetMouseButtonCallback(platform->window, mouse_button_callback);
glfwSetScrollCallback(platform->window, scroll_callback); glfwSetScrollCallback(platform->window, scroll_callback);
glfwSetWindowSizeCallback(platform->window, window_size_callback); glfwSetWindowSizeCallback(platform->window, window_size_callback);
#ifdef __EMSCRIPTEN__
resetTouchPointerIds(); glfwMakeContextCurrent(platform->window);
emscripten_set_touchstart_callback("#canvas", 0, 1, touch_callback);
emscripten_set_touchmove_callback("#canvas", 0, 1, touch_callback);
emscripten_set_touchend_callback("#canvas", 0, 1, touch_callback);
emscripten_set_touchcancel_callback("#canvas", 0, 1, touch_callback);
#endif
glfwMakeContextCurrent(platform->window);
#ifndef __EMSCRIPTEN__ #ifndef __EMSCRIPTEN__
gladLoadGLLoader((GLADloadproc)glfwGetProcAddress); gladLoadGLLoader((GLADloadproc)glfwGetProcAddress);
glfwSwapInterval(0); glfwSwapInterval(0);

View File

@@ -51,13 +51,13 @@ void Chicken::aiStep()
flap += flapping * 2; flap += flapping * 2;
//@todo //@todo
if (!isBaby()) { //if (!isBaby()) {
if (!level->isClientSide && --eggTime <= 0) { // if (!level->isClientSide && --eggTime <= 0) {
level->playSound(this, "mob.chickenplop", 1.0f, (random.nextFloat() - random.nextFloat()) * 0.2f + 1.0f); // level->playSound(this, "mob.chickenplop", 1.0f, (random.nextFloat() - random.nextFloat()) * 0.2f + 1.0f);
spawnAtLocation(Item::egg->id, 1); // spawnAtLocation(Item::egg->id, 1);
eggTime = random.nextInt(SharedConstants::TicksPerSecond * 60 * 5) + SharedConstants::TicksPerSecond * 60 * 5; // eggTime = random.nextInt(SharedConstants::TicksPerSecond * 60 * 5) + SharedConstants::TicksPerSecond * 60 * 5;
} // }
} //}
} }
void Chicken::addAdditonalSaveData( CompoundTag* tag ) void Chicken::addAdditonalSaveData( CompoundTag* tag )

View File

@@ -1,11 +1,12 @@
#include "Inventory.h" #include "Inventory.h"
#include "../../level/material/Material.h" #include "../../level/material/Material.h"
#include "../../level/tile/QuartzBlockTile.h" #include "../../level/tile/QuartzBlockTile.h"
#include "../../level/tile/TreeTile.h" #include "../../level/tile/TreeTile.h"
#include "../../level/tile/StoneSlabTile.h" #include "../../level/tile/StoneSlabTile.h"
#include "../../item/DyePowderItem.h" #include "../../level/tile/TallGrass.h"
#include "../../item/crafting/Recipe.h" #include "../../item/DyePowderItem.h"
#include "../../item/CoalItem.h" #include "../../item/crafting/Recipe.h"
#include "../../item/CoalItem.h"
#include "../../level/tile/SandStoneTile.h" #include "../../level/tile/SandStoneTile.h"
Inventory::Inventory( Player* player, bool creativeMode ) Inventory::Inventory( Player* player, bool creativeMode )
@@ -80,10 +81,10 @@ void Inventory::setupDefault() {
addItem(new ItemInstance(Tile::chest)); addItem(new ItemInstance(Tile::chest));
addItem(new ItemInstance(Tile::furnace)); addItem(new ItemInstance(Tile::furnace));
addItem(new ItemInstance(((Tile*)Tile::flower))); addItem(new ItemInstance(((Tile*)Tile::flower)));
addItem(new ItemInstance(Tile::cactus)); addItem(new ItemInstance(Tile::cactus));
// //
// Those below are inactive due to demo // Those below are inactive due to demo
// //
addItem(new ItemInstance(Item::sword_stone)); addItem(new ItemInstance(Item::sword_stone));
@@ -227,9 +228,10 @@ void Inventory::setupDefault() {
addItem(new ItemInstance(Tile::furnace)); addItem(new ItemInstance(Tile::furnace));
addItem(new ItemInstance(Tile::tnt)); addItem(new ItemInstance(Tile::tnt));
addItem(new ItemInstance(((Tile*)Tile::flower))); addItem(new ItemInstance(((Tile*)Tile::flower)));
addItem(new ItemInstance(((Tile*)Tile::rose))); addItem(new ItemInstance(((Tile*)Tile::rose)));
addItem(new ItemInstance(((Tile*)Tile::mushroom1))); addItem(new ItemInstance(Tile::tallgrass, 1, TallGrass::TALL_GRASS));
addItem(new ItemInstance(((Tile*)Tile::mushroom1)));
addItem(new ItemInstance(((Tile*)Tile::mushroom2))); addItem(new ItemInstance(((Tile*)Tile::mushroom2)));
addItem(new ItemInstance(Tile::cactus)); addItem(new ItemInstance(Tile::cactus));
addItem(new ItemInstance(Tile::melon)); addItem(new ItemInstance(Tile::melon));

View File

@@ -281,13 +281,14 @@ void Tile::initTiles() {
Item::items[stoneBrickSmooth->id] = (new AuxDataTileItem(stoneBrickSmooth->id - 256, stoneBrickSmooth))->setCategory(ItemCategory::Structures)->setDescriptionId("stonebricksmooth"); Item::items[stoneBrickSmooth->id] = (new AuxDataTileItem(stoneBrickSmooth->id - 256, stoneBrickSmooth))->setCategory(ItemCategory::Structures)->setDescriptionId("stonebricksmooth");
Item::items[stoneSlabHalf->id] = (new StoneSlabTileItem(stoneSlabHalf->id - 256))->setCategory(ItemCategory::Structures)->setDescriptionId("stoneSlab"); Item::items[stoneSlabHalf->id] = (new StoneSlabTileItem(stoneSlabHalf->id - 256))->setCategory(ItemCategory::Structures)->setDescriptionId("stoneSlab");
Item::items[sapling->id] = (new SaplingTileItem(sapling->id - 256))->setCategory(ItemCategory::Structures)->setDescriptionId("sapling"); Item::items[sapling->id] = (new SaplingTileItem(sapling->id - 256))->setCategory(ItemCategory::Structures)->setDescriptionId("sapling");
Item::items[leaves->id] = (new LeafTileItem(leaves->id - 256))->setCategory(ItemCategory::Decorations)->setDescriptionId("leaves"); Item::items[leaves->id] = (new LeafTileItem(leaves->id - 256))->setCategory(ItemCategory::Decorations)->setDescriptionId("leaves");
Item::items[sandStone->id] = (new AuxDataTileItem(sandStone->id - 256, sandStone))->setCategory(ItemCategory::Structures)->setDescriptionId("sandStone"); Item::items[sandStone->id] = (new AuxDataTileItem(sandStone->id - 256, sandStone))->setCategory(ItemCategory::Structures)->setDescriptionId("sandStone");
Item::items[quartzBlock->id] = (new AuxDataTileItem(quartzBlock->id - 256, quartzBlock))->setCategory(ItemCategory::Structures)->setDescriptionId("quartzBlock"); Item::items[quartzBlock->id] = (new AuxDataTileItem(quartzBlock->id - 256, quartzBlock))->setCategory(ItemCategory::Structures)->setDescriptionId("quartzBlock");
Item::items[tallgrass->id] = (new AuxDataTileItem(tallgrass->id - 256, tallgrass))->setCategory(ItemCategory::Decorations);
for (int i = 0; i < 256; i++) {
if (Tile::tiles[i] != NULL) { for (int i = 0; i < 256; i++) {
if (Tile::tiles[i] != NULL) {
if (Item::items[i] == NULL) { if (Item::items[i] == NULL) {
Item::items[i] = new TileItem(i - 256); Item::items[i] = new TileItem(i - 256);
Item::items[i]->category = Tile::tiles[i]->category; Item::items[i]->category = Tile::tiles[i]->category;