diff --git a/misc/web/index.html b/misc/web/index.html
index eed3f5b..6eb328d 100644
--- a/misc/web/index.html
+++ b/misc/web/index.html
@@ -36,6 +36,9 @@
}
window.addEventListener('resize', resizeCanvas);
+ window.addEventListener('onunload', () => {
+ FS.syncfs(true, function (err) { console.log('Sync FS failed: ' + err) });
+ })
diff --git a/src/AppPlatform_glfw.h b/src/AppPlatform_glfw.h
index 619ae57..d996860 100755
--- a/src/AppPlatform_glfw.h
+++ b/src/AppPlatform_glfw.h
@@ -130,7 +130,7 @@ public:
virtual float getPixelsPerMillimeter() override;
- virtual bool supportsTouchscreen() override { return true; }
+ virtual bool supportsTouchscreen() override { return false; /* glfw supports only mouse and keyboard */ }
virtual void hideCursor(bool hide) override {
int isHide = hide ? GLFW_CURSOR_NORMAL : GLFW_CURSOR_HIDDEN;
@@ -143,6 +143,8 @@ public:
#elif __linux__
std::string command = "xdg-open " + url;
system(command.c_str());
+#elif __EMSCRIPTEN__
+ emscripten_run_script(std::string("window.open('" + url + "', '_blank')").c_str());
#endif
}
diff --git a/src/client/Minecraft.cpp b/src/client/Minecraft.cpp
index 8d38c06..3c6b368 100755
--- a/src/client/Minecraft.cpp
+++ b/src/client/Minecraft.cpp
@@ -1,4 +1,5 @@
#include "Minecraft.h"
+#include "Options.h"
#include "client/Options.h"
#include "client/player/input/IBuildInput.h"
#include "platform/input/Keyboard.h"
@@ -640,13 +641,11 @@ void Minecraft::tickInput() {
const MouseAction& e = Mouse::getEvent();
-#ifdef RPI // If clicked when not having focus, get focus @keyboard
- if (!mouseGrabbed) {
+ if (!useTouchscreen() && !mouseGrabbed) {
if (!screen && e.data == MouseAction::DATA_DOWN) {
grabMouse();
}
}
-#endif
if (allowGuiClicks && e.action == MouseAction::ACTION_LEFT && e.data == MouseAction::DATA_DOWN) {
gui.handleClick(MouseAction::ACTION_LEFT, Mouse::getX(), Mouse::getY());
@@ -660,9 +659,7 @@ void Minecraft::tickInput() {
Inventory* v = player->inventory;
int numSlots = gui.getNumSlots();
-#ifndef PLATFORM_DESKTOP
- numSlots--;
-#endif
+ if (!useTouchscreen()) numSlots--;
int slot = (v->selected - e.dy + numSlots) % numSlots;
v->selectSlot(slot);
@@ -691,155 +688,147 @@ void Minecraft::tickInput() {
if (isPressed) {
gui.handleKeyPressed(key);
- #if defined(WIN32) || defined(RPI) || defined (PLATFORM_DESKTOP)//|| defined(_DEBUG) || defined(DEBUG)
- if (key >= '0' && key <= '9') {
- int digit = key - '0';
- int slot = digit - 1;
+ if (key >= '0' && key <= '9') {
+ int digit = key - '0';
+ int slot = digit - 1;
- if (slot >= 0 && slot < gui.getNumSlots())
- player->inventory->selectSlot(slot);
+ if (slot >= 0 && slot < gui.getNumSlots())
+ player->inventory->selectSlot(slot);
- #if defined(WIN32)
- if (digit >= 1 && GetAsyncKeyState(VK_CONTROL) < 0) {
- // Set adventure settings here!
- AdventureSettingsPacket p(level->adventureSettings);
- p.toggle((AdventureSettingsPacket::Flags)(1 << slot));
- p.fillIn(level->adventureSettings);
- raknetInstance->send(p);
- }
- if (digit == 0) {
- Pos pos((int)player->x, (int)player->y-1, (int)player->z);
- SetSpawnPositionPacket p(pos);
- raknetInstance->send(p);
- }
- #endif
- }
- #endif
- #if defined(PLATFORM_DESKTOP)
- if (key == Keyboard::KEY_LEFT_CTRL) {
- player->setSprinting(true);
+ #if defined(WIN32)
+ if (digit >= 1 && GetAsyncKeyState(VK_CONTROL) < 0) {
+ // Set adventure settings here!
+ AdventureSettingsPacket p(level->adventureSettings);
+ p.toggle((AdventureSettingsPacket::Flags)(1 << slot));
+ p.fillIn(level->adventureSettings);
+ raknetInstance->send(p);
+ }
+ if (digit == 0) {
+ Pos pos((int)player->x, (int)player->y-1, (int)player->z);
+ SetSpawnPositionPacket p(pos);
+ raknetInstance->send(p);
+ }
+ #endif
+ }
+
+ if (key == Keyboard::KEY_LEFT_CTRL) {
+ player->setSprinting(true);
+ }
+
+ if (key == Keyboard::KEY_E) {
+ screenChooser.setScreen(SCREEN_BLOCKSELECTION);
+ }
+
+ if (!screen && key == Keyboard::KEY_T && level) {
+ setScreen(new ConsoleScreen());
+ }
+
+ if (key == Keyboard::KEY_F3) {
+ options.toggle(OPTIONS_RENDER_DEBUG);
+ }
+
+ if (key == Keyboard::KEY_F5) {
+ options.toggle(OPTIONS_THIRD_PERSON_VIEW);
+ /*
+ ImprovedNoise noise;
+ for (int i = 0; i < 16; ++i)
+ printf("%d\t%f\n", i, noise.grad2(i, 3, 8));
+ */
+ }
+
+ if (!screen && key == Keyboard::KEY_O || key == 250) {
+ releaseMouse();
+ }
+
+ if (key == Keyboard::KEY_F) {
+ int dst = options.getIntValue(OPTIONS_VIEW_DISTANCE);
+ options.set(OPTIONS_VIEW_DISTANCE, (dst + 1) % 4);
+ }
+ #ifdef CHEATS
+ if (key == Keyboard::KEY_U) {
+ onGraphicsReset();
+ player->heal(100);
}
- if (key == Keyboard::KEY_E) {
- screenChooser.setScreen(SCREEN_BLOCKSELECTION);
- }
+ if (key == Keyboard::KEY_B || key == 108) // Toggle the game mode
+ setIsCreativeMode(!isCreativeMode());
- if (!screen && key == Keyboard::KEY_T && level) {
- setScreen(new ConsoleScreen());
- }
+ if (key == Keyboard::KEY_P) // Step forward in time
+ level->setTime( level->getTime() + 1000);
- if (key == Keyboard::KEY_F3) {
- options.toggle(OPTIONS_RENDER_DEBUG);
- }
-
- if (key == Keyboard::KEY_F5) {
- options.toggle(OPTIONS_THIRD_PERSON_VIEW);
+ if (key == Keyboard::KEY_G) {
+ setScreen(new ArmorScreen());
/*
- ImprovedNoise noise;
- for (int i = 0; i < 16; ++i)
- printf("%d\t%f\n", i, noise.grad2(i, 3, 8));
+ std::vector& boxs = level->getCubes(NULL, AABB(128.1f, 73, 128.1f, 128.9f, 74.9f, 128.9f));
+ LOGI("boxes: %d\n", (int)boxs.size());
*/
}
- if (!screen && key == Keyboard::KEY_O || key == 250) {
- releaseMouse();
+ 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_F) {
- int dst = options.getIntValue(OPTIONS_VIEW_DISTANCE);
- options.set(OPTIONS_VIEW_DISTANCE, (dst + 1) % 4);
+ 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);
+ }
}
- #ifdef CHEATS
- if (key == Keyboard::KEY_U) {
- onGraphicsReset();
- player->heal(100);
+
+ if (key == Keyboard::KEY_C /*|| key == 4*/) {
+ player->inventory->clearInventoryWithDefault();
+ // @todo: Add saving here for benchmarking
+ }
+ if (key == Keyboard::KEY_H) {
+ setScreen( new PrerenderTilesScreen() );
+ }
+
+ if (key == Keyboard::KEY_O) {
+ for (int i = Inventory::MAX_SELECTION_SIZE; i < player->inventory->getContainerSize(); ++i)
+ if (player->inventory->getItem(i))
+ player->inventory->dropSlot(i, false);
+ }
+ if (key == Keyboard::KEY_M) {
+ Difficulty difficulty = (Difficulty)options.getIntValue(OPTIONS_DIFFICULTY);
+ options.set(OPTIONS_DIFFICULTY, (difficulty == Difficulty::PEACEFUL)?
+ Difficulty::NORMAL : Difficulty::PEACEFUL);
+ //setIsCreativeMode( !isCreativeMode() );
+ }
+
+ if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
+ if (key >= '0' && key <= '9') {
+ _perfRenderer->debugFpsMeterKeyPress(key - '0');
}
-
- if (key == Keyboard::KEY_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& 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) {
- 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
+ }
#endif
- #ifndef PLATFORM_DESKTOP
- if (key == 82)
- pauseGame(false);
- #else
- if (key == Keyboard::KEY_ESCAPE)
- pauseGame(false);
- #endif
+ if (key == Keyboard::KEY_ESCAPE)
+ pauseGame(false);
#ifndef OPENGL_ES
if (key == Keyboard::KEY_P) {
@@ -1112,7 +1101,7 @@ bool Minecraft::useTouchscreen() {
#ifdef RPI
return false;
#endif
- return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) || !_supportsNonTouchscreen;
+ return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen;
}
bool Minecraft::supportNonTouchScreen() {
return _supportsNonTouchscreen;
@@ -1241,11 +1230,7 @@ void Minecraft::_reloadInput() {
#ifndef STANDALONE_SERVER
delete inputHolder;
-#ifdef PLATFORM_DESKTOP
- const bool useTouchHolder = false;
-#else
const bool useTouchHolder = useTouchscreen();
-#endif
if (useTouchHolder) {
inputHolder = new TouchInputHolder(this, &options);
} else {
@@ -1570,6 +1555,8 @@ void Minecraft::optionUpdated(OptionId option, bool value ) {
if(netCallback != NULL && option == OPTIONS_SERVER_VISIBLE) {
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) netCallback;
ss->allowIncomingConnections(value);
+ } else if (option == OPTIONS_USE_TOUCHSCREEN) {
+ _reloadInput();
}
}
diff --git a/src/client/MouseHandler.cpp b/src/client/MouseHandler.cpp
index d122950..d77e28b 100755
--- a/src/client/MouseHandler.cpp
+++ b/src/client/MouseHandler.cpp
@@ -5,7 +5,7 @@
#include
#endif
-#ifdef PLATFORM_DESKTOP
+#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
#include
#endif
@@ -34,7 +34,7 @@ void MouseHandler::grab() {
SDL_ShowCursor(0);
#endif
-#ifdef PLATFORM_DESKTOP
+#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_DISABLED);
#endif
}
@@ -46,7 +46,7 @@ void MouseHandler::release() {
SDL_ShowCursor(1);
#endif
-#ifdef PLATFORM_DESKTOP
+#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_NORMAL);
#endif
}
diff --git a/src/client/OptionsFile.cpp b/src/client/OptionsFile.cpp
index 4601429..ef2a0dc 100755
--- a/src/client/OptionsFile.cpp
+++ b/src/client/OptionsFile.cpp
@@ -16,6 +16,8 @@ OptionsFile::OptionsFile() {
settingsPath = "./Documents/options.txt";
#elif defined(ANDROID)
settingsPath = "options.txt";
+#elif defined(__EMSCRIPTEN__)
+ settingsPath = "/games/com.mojang/options.txt";
#else
settingsPath = "options.txt";
#endif
diff --git a/src/client/gui/Gui.cpp b/src/client/gui/Gui.cpp
index b7c462e..ccc9c26 100755
--- a/src/client/gui/Gui.cpp
+++ b/src/client/gui/Gui.cpp
@@ -51,7 +51,8 @@ Gui::Gui(Minecraft* minecraft)
_currentDropTicks(-1),
_currentDropSlot(-1),
MAX_MESSAGE_WIDTH(240),
- itemNameOverlayTime(2)
+ itemNameOverlayTime(2),
+ _openInventorySlot(minecraft->useTouchscreen())
{
glGenBuffers2(1, &_inventoryRc.vboId);
glGenBuffers2(1, &rcFeedbackInner.vboId);
@@ -75,11 +76,8 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
//minecraft->gameRenderer->setupGuiScreen();
Font* font = minecraft->font;
-#ifdef PLATFORM_DESKTOP
- const bool isTouchInterface = false;
-#else
const bool isTouchInterface = minecraft->useTouchscreen();
-#endif
+
const int screenWidth = (int)(minecraft->width * InvGuiScale);
const int screenHeight = (int)(minecraft->height * InvGuiScale);
blitOffset = -90;
@@ -206,16 +204,10 @@ void Gui::handleClick(int button, int x, int y) {
if (button != MouseAction::ACTION_LEFT) return;
int slot = getSlotIdAt(x, y);
- if (slot != -1)
- {
-#ifndef PLATFORM_DESKTOP
- if (slot == (getNumSlots()-1))
- {
+ if (slot != -1) {
+ if (_openInventorySlot && slot == (getNumSlots()-1)) {
minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION);
- }
- else
-#endif
- {
+ } else {
minecraft->player->inventory->selectSlot(slot);
itemNameOverlayTime = 0;
}
@@ -537,11 +529,7 @@ void Gui::tickItemDrop()
static bool isCurrentlyActive = false;
isCurrentlyActive = false;
- int slots = getNumSlots();
-
-#ifndef PLATFORM_DESKTOP
- slots--;
-#endif
+ int slots = getNumSlots() - _openInventorySlot;
if (Mouse::isButtonDown(MouseAction::ACTION_LEFT)) {
int slot = getSlotIdAt(Mouse::getX(), Mouse::getY());
@@ -1083,13 +1071,7 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
float x = baseItemX;
- int slots = getNumSlots();
-
- // TODO: if using touchscreen
-
-#ifndef PLATFORM_DESKTOP
- slots--;
-#endif
+ int slots = getNumSlots() - _openInventorySlot;
for (int i = 0; i < slots; i++) {
renderSlot(i, (int)x, ySlot, a);
@@ -1097,9 +1079,10 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
}
_inventoryNeedsUpdate = false;
-#ifndef PLATFORM_DESKTOP
- blit(screenWidth / 2 + 10 * getNumSlots() - 20 + 4, ySlot + 6, 242, 252, 14, 4, 14, 4);
-#endif
+
+ if (_openInventorySlot) {
+ blit(screenWidth / 2 + 10 * getNumSlots() - 20 + 4, ySlot + 6, 242, 252, 14, 4, 14, 4);
+ }
minecraft->textures->loadAndBindTexture("gui/gui_blocks.png");
t.endOverrideAndDraw();
diff --git a/src/client/gui/Gui.h b/src/client/gui/Gui.h
index 1c36f83..1335035 100755
--- a/src/client/gui/Gui.h
+++ b/src/client/gui/Gui.h
@@ -127,6 +127,8 @@ private:
static const float DropTicks;
float _currentDropTicks;
int _currentDropSlot;
+
+ bool _openInventorySlot;
};
#endif /*NET_MINECRAFT_CLIENT_GUI__Gui_H__*/
diff --git a/src/client/gui/Screen.cpp b/src/client/gui/Screen.cpp
index ae39036..a6bcc6f 100755
--- a/src/client/gui/Screen.cpp
+++ b/src/client/gui/Screen.cpp
@@ -177,9 +177,11 @@ void Screen::keyPressed( int eventKey )
textbox->keyPressed(minecraft, eventKey);
}
+#ifdef TABBING
if (minecraft->useTouchscreen())
return;
+
// "Tabbing" the buttons (walking with keys)
const int tabButtonCount = tabButtons.size();
if (!tabButtonCount)
@@ -199,6 +201,7 @@ void Screen::keyPressed( int eventKey )
}
updateTabButtonSelection();
+#endif
}
void Screen::charPressed(char inputChar) {
@@ -209,11 +212,13 @@ void Screen::charPressed(char inputChar) {
void Screen::updateTabButtonSelection()
{
+#ifdef TABBING
if (minecraft->useTouchscreen())
return;
for (unsigned int i = 0; i < tabButtons.size(); ++i)
tabButtons[i]->selected = (i == tabButtonIndex);
+#endif
}
void Screen::mouseClicked( int x, int y, int buttonNum )
diff --git a/src/client/gui/components/Button.cpp b/src/client/gui/components/Button.cpp
index e03ae37..39022a7 100755
--- a/src/client/gui/components/Button.cpp
+++ b/src/client/gui/components/Button.cpp
@@ -95,7 +95,7 @@ void Button::renderBg( Minecraft* minecraft, int xm, int ym )
}
bool Button::hovered(Minecraft* minecraft, int xm , int ym) {
- return minecraft->useTouchscreen()? (_currentlyDown && isInside(xm, ym)) : false;
+ return minecraft->useTouchscreen()? (_currentlyDown && isInside(xm, ym)) : isInside(xm, ym);
}
bool Button::isInside( int xm, int ym ) {
@@ -143,7 +143,8 @@ TButton::TButton( int id, int x, int y, int w, int h, const std::string& msg )
void TButton::renderBg( Minecraft* minecraft, int xm, int ym )
{
- bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
+ bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
+ // bool hovered = active && (_currentlyDown && isInside(xm, ym));
minecraft->textures->loadAndBindTexture("gui/touchgui.png");
diff --git a/src/client/gui/components/ImageButton.cpp b/src/client/gui/components/ImageButton.cpp
index 1c7a57a..3d95acc 100755
--- a/src/client/gui/components/ImageButton.cpp
+++ b/src/client/gui/components/ImageButton.cpp
@@ -42,7 +42,7 @@ void ImageButton::render(Minecraft* minecraft, int xm, int ym) {
//minecraft->textures->loadAndBindTexture("gui/gui.png");
glColor4f2(1, 1, 1, 1);
- bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
+ bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
bool IsSecondImage = isSecondImage(hovered);
//printf("ButtonId: %d - Hovered? %d (cause: %d, %d, %d, %d, <> %d, %d)\n", id, hovered, x, y, x+w, y+h, xm, ym);
diff --git a/src/client/gui/components/LargeImageButton.cpp b/src/client/gui/components/LargeImageButton.cpp
index 673d983..db1f599 100755
--- a/src/client/gui/components/LargeImageButton.cpp
+++ b/src/client/gui/components/LargeImageButton.cpp
@@ -33,7 +33,7 @@ void LargeImageButton::render(Minecraft* minecraft, int xm, int ym) {
//minecraft->textures->loadAndBindTexture("gui/gui.png");
glColor4f2(1, 1, 1, 1);
- bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
+ bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
//printf("ButtonId: %d - Hovered? %d (cause: %d, %d, %d, %d, <> %d, %d)\n", id, hovered, x, y, x+w, y+h, xm, ym);
//int yImage = getYImage(hovered || selected);
diff --git a/src/client/gui/screens/ConfirmScreen.cpp b/src/client/gui/screens/ConfirmScreen.cpp
index ce911c6..2529549 100755
--- a/src/client/gui/screens/ConfirmScreen.cpp
+++ b/src/client/gui/screens/ConfirmScreen.cpp
@@ -31,7 +31,7 @@ ConfirmScreen::~ConfirmScreen() {
void ConfirmScreen::init()
{
- if (minecraft->useTouchscreen()) {
+ if (/* minecraft->useTouchscreen() */ true) {
yesButton = new Touch::TButton(0, 0, 0, yesButtonText),
noButton = new Touch::TButton(1, 0, 0, noButtonText);
} else {
diff --git a/src/client/gui/screens/DeathScreen.cpp b/src/client/gui/screens/DeathScreen.cpp
index a5685dc..411b148 100755
--- a/src/client/gui/screens/DeathScreen.cpp
+++ b/src/client/gui/screens/DeathScreen.cpp
@@ -23,7 +23,7 @@ DeathScreen::~DeathScreen()
void DeathScreen::init()
{
- if (minecraft->useTouchscreen()) {
+ if (/* minecraft->useTouchscreen() */ true) {
bRespawn = new Touch::TButton(1, "Respawn!");
bTitle = new Touch::TButton(2, "Main menu");
} else {
diff --git a/src/client/gui/screens/DisconnectionScreen.h b/src/client/gui/screens/DisconnectionScreen.h
index 12c62ec..f32530f 100755
--- a/src/client/gui/screens/DisconnectionScreen.h
+++ b/src/client/gui/screens/DisconnectionScreen.h
@@ -21,7 +21,7 @@ public:
}
void init() {
- if (minecraft->useTouchscreen())
+ if (/* minecraft->useTouchscreen() */ true)
_back = new Touch::TButton(1, "Ok");
else
_back = new Button(1, "Ok");
diff --git a/src/client/gui/screens/InBedScreen.cpp b/src/client/gui/screens/InBedScreen.cpp
index ef6dd95..3adadc7 100755
--- a/src/client/gui/screens/InBedScreen.cpp
+++ b/src/client/gui/screens/InBedScreen.cpp
@@ -17,7 +17,7 @@ InBedScreen::~InBedScreen() {
}
void InBedScreen::init() {
- if (minecraft->useTouchscreen()) {
+ if (/* minecraft->useTouchscreen() */ true) {
bWakeUp = new Touch::TButton(1, "Leave Bed");
} else {
bWakeUp = new Button(1, "Leave Bed");
diff --git a/src/client/gui/screens/PauseScreen.cpp b/src/client/gui/screens/PauseScreen.cpp
index 46d99cd..ab30ecb 100755
--- a/src/client/gui/screens/PauseScreen.cpp
+++ b/src/client/gui/screens/PauseScreen.cpp
@@ -48,7 +48,7 @@ PauseScreen::~PauseScreen() {
}
void PauseScreen::init() {
- if (minecraft->useTouchscreen()) {
+ if (/* minecraft->useTouchscreen() */ true) {
bContinue = new Touch::TButton(1, "Back to game");
bOptions = new Touch::TButton(5, "Options");
bQuit = new Touch::TButton(2, "Quit to title");
diff --git a/src/client/gui/screens/ProgressScreen.h b/src/client/gui/screens/ProgressScreen.h
index 263e346..762d4fa 100755
--- a/src/client/gui/screens/ProgressScreen.h
+++ b/src/client/gui/screens/ProgressScreen.h
@@ -11,6 +11,8 @@ public:
void render(int xm, int ym, float a);
bool isInGameScreen();
+ virtual void keyPressed(int eventKey) {}
+
void tick();
private:
int ticks;
diff --git a/src/client/gui/screens/ScreenChooser.cpp b/src/client/gui/screens/ScreenChooser.cpp
index 9f45e3c..b423524 100755
--- a/src/client/gui/screens/ScreenChooser.cpp
+++ b/src/client/gui/screens/ScreenChooser.cpp
@@ -21,7 +21,7 @@ Screen* ScreenChooser::createScreen( ScreenId id )
Screen* screen = NULL;
// :sob:
- if (_mc->useTouchscreen()) {
+ if (/* _mc->useTouchscreen() */ true) {
switch (id) {
case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break;
case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break;
diff --git a/src/client/gui/screens/SimpleChooseLevelScreen.cpp b/src/client/gui/screens/SimpleChooseLevelScreen.cpp
index f839725..c5a1278 100755
--- a/src/client/gui/screens/SimpleChooseLevelScreen.cpp
+++ b/src/client/gui/screens/SimpleChooseLevelScreen.cpp
@@ -56,7 +56,7 @@ void SimpleChooseLevelScreen::init()
def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
bBack->setImageDef(def, true);
}
- if (minecraft->useTouchscreen()) {
+ if (/* minecraft->useTouchscreen() */ true) {
bGamemode = new Touch::TButton(1, "Survival mode");
bCheats = new Touch::TButton(4, "Cheats: Off");
bCreate = new Touch::TButton(3, "Create");
diff --git a/src/client/gui/screens/crafting/PaneCraftingScreen.cpp b/src/client/gui/screens/crafting/PaneCraftingScreen.cpp
index 0e39082..4e3d025 100755
--- a/src/client/gui/screens/crafting/PaneCraftingScreen.cpp
+++ b/src/client/gui/screens/crafting/PaneCraftingScreen.cpp
@@ -41,7 +41,7 @@ public:
//fill(x+1, y+1, x+w-1, y+h-1, 0xff999999);
bool hovered = active && (minecraft->useTouchscreen()?
- (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
+ (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
if (hovered || *selectedPtr == this)
statePressed->draw(Tesselator::instance, (float)x, (float)y);
@@ -547,7 +547,7 @@ void CraftButton::renderBg(Minecraft* minecraft, int xm, int ym) {
//fill(x+1, y+1, x+w-1, y+h-1, 0xff999999);
bool hovered = active && (minecraft->useTouchscreen()?
- (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false);
+ (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
if (hovered || selected)
bgSelected->draw(Tesselator::instance, (float)x, (float)y);
diff --git a/src/client/player/input/KeyboardInput.cpp b/src/client/player/input/KeyboardInput.cpp
index 674838d..b84fe75 100755
--- a/src/client/player/input/KeyboardInput.cpp
+++ b/src/client/player/input/KeyboardInput.cpp
@@ -50,10 +50,8 @@ void KeyboardInput::tick( Player* player )
ya *= 0.3f;
}
- #if defined(RPI) || defined(PLATFORM_DESKTOP)
- wantUp = jumping;
- wantDown = sneaking;
- #endif
+ wantUp = jumping;
+ wantDown = sneaking;
if (keys[KEY_CRAFT])
player->startCrafting((int)player->x, (int)player->y, (int)player->z, Recipe::SIZE_2X2);
diff --git a/src/client/renderer/GameRenderer.cpp b/src/client/renderer/GameRenderer.cpp
index ca9d388..1aa6a15 100755
--- a/src/client/renderer/GameRenderer.cpp
+++ b/src/client/renderer/GameRenderer.cpp
@@ -153,7 +153,7 @@ void GameRenderer::render(float a) {
int xMouse = (int)(Mouse::getX() * Gui::InvGuiScale);
int yMouse = (int)(Mouse::getY() * Gui::InvGuiScale);
-#ifndef PLATFORM_DESKTOP
+
if (mc->useTouchscreen()) {
const int pid = Multitouch::getFirstActivePointerIdExThisUpdate();
if (pid >= 0) {
@@ -164,7 +164,6 @@ void GameRenderer::render(float a) {
yMouse = -9999;
}
}
-#endif
TIMER_POP();
bool hasClearedColorBuffer = false;
@@ -361,9 +360,9 @@ void GameRenderer::renderLevel(float a) {
if (mc->hitResult.isHit() && !cameraEntity->isUnderLiquid(Material::water)) {
TIMER_POP_PUSH("select");
Player* player = (Player*) cameraEntity;
- if (mc->useTouchscreen()) {
+ // if (mc->useTouchscreen()) {
levelRenderer->renderHitSelect(player, mc->hitResult, 0, NULL, a); //player.inventory->getSelected(), a);
- }
+ // }
levelRenderer->renderHit(player, mc->hitResult, 0, NULL, a);//player->inventory.getSelected(), a);
}
}
@@ -657,11 +656,9 @@ void GameRenderer::pick(float a) {
float range = mc->gameMode->getPickRange();
bool isPicking = true;
-#ifndef PLATFORM_DESKTOP
- bool freeform = mc->useTouchscreen() && !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA);
-#else
- bool freeform = false;
-#endif
+
+ bool freeform = mc->useTouchscreen(); //&& !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA);
+
if (freeform) {
isPicking = updateFreeformPickDirection(a, pickDirection);
} else {
diff --git a/src/main_glfw.h b/src/main_glfw.h
index 2b5bb97..042c9fb 100755
--- a/src/main_glfw.h
+++ b/src/main_glfw.h
@@ -139,12 +139,14 @@ int main(void) {
#ifndef STANDALONE_SERVER
// Platform init.
appContext.platform = new AppPlatform_glfw();
-#if defined(DEBUG) && defined(__EMSCRIPTEN__)
- EM_ASM({
- console.log(FS.readdir("/"));
- console.log(FS.readdir("/data"));
- console.log(FS.readdir("/data/images"));
- });
+#if defined(__EMSCRIPTEN__)
+ EM_ASM(
+ FS.mkdir('/games');
+ FS.mkdir('/games/com.mojang');
+ FS.mkdir('/games/com.mojang/minecraftWorlds');
+ FS.mount(IDBFS, {}, '/games');
+ FS.syncfs(true, function (err) {});
+ );
#endif
glfwSetErrorCallback(error_callback);