forked from Kolyah35/minecraft-pe-0.6.1
Compare commits
1 Commits
web-change
...
feature/is
| Author | SHA1 | Date | |
|---|---|---|---|
| 9b5d12832d |
@@ -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()
|
||||||
|
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -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,7 +225,6 @@ 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
|
||||||
|
|||||||
@@ -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 |
@@ -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>
|
||||||
@@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"),
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -1125,9 +1125,6 @@ bool Minecraft::useTouchscreen() {
|
|||||||
#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() {
|
||||||
@@ -1220,14 +1217,13 @@ void Minecraft::setSize(int w, int h) {
|
|||||||
|
|
||||||
// determine gui scale, optionally overriding auto
|
// determine gui scale, optionally overriding auto
|
||||||
if (guiScale != 0) {
|
if (guiScale != 0) {
|
||||||
// manual selection: 1->tiny, 2->small, 3->medium, 4->large, 5->larger, 6->largest
|
// manual selection: 1->small, 2->medium, 3->large, 4->larger, 5->largest
|
||||||
switch (guiScale) {
|
switch (guiScale) {
|
||||||
case 1: Gui::GuiScale = 1.0f; break;
|
case 1: Gui::GuiScale = 2.0f; break;
|
||||||
case 2: Gui::GuiScale = 2.0f; break;
|
case 2: Gui::GuiScale = 3.0f; break;
|
||||||
case 3: Gui::GuiScale = 3.0f; break;
|
case 3: Gui::GuiScale = 4.0f; break;
|
||||||
case 4: Gui::GuiScale = 4.0f; break;
|
case 4: Gui::GuiScale = 5.0f; break;
|
||||||
case 5: Gui::GuiScale = 5.0f; break;
|
case 5: Gui::GuiScale = 6.0f; break;
|
||||||
case 6: Gui::GuiScale = 6.0f; break;
|
|
||||||
default: Gui::GuiScale = 1.0f; break; // auto
|
default: Gui::GuiScale = 1.0f; break; // auto
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1287,15 +1283,16 @@ 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)
|
||||||
|
|||||||
@@ -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";
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
@@ -175,8 +173,6 @@ 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_MENU_STYLE] = &menuStyle;
|
||||||
|
|||||||
@@ -92,7 +92,6 @@ 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,
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -35,17 +35,6 @@ void GuiElementContainer::removeChild( GuiElement* element ) {
|
|||||||
children.erase(it);
|
children.erase(it);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GuiElementContainer::containsPointInChildren(int x, int y) const {
|
|
||||||
for (std::vector<GuiElement*>::const_iterator it = children.begin(); it != children.end(); ++it) {
|
|
||||||
GuiElement* child = *it;
|
|
||||||
if (child == NULL || !child->visible) continue;
|
|
||||||
if (child->pointInside(x, y)) return true;
|
|
||||||
const GuiElementContainer* container = dynamic_cast<const GuiElementContainer*>(child);
|
|
||||||
if (container != NULL && container->containsPointInChildren(x, y)) return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GuiElementContainer::tick( Minecraft* minecraft ) {
|
void GuiElementContainer::tick( Minecraft* minecraft ) {
|
||||||
for(std::vector<GuiElement*>::iterator it = children.begin(); it != children.end(); ++it) {
|
for(std::vector<GuiElement*>::iterator it = children.begin(); it != children.end(); ++it) {
|
||||||
(*it)->tick(minecraft);
|
(*it)->tick(minecraft);
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ public:
|
|||||||
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;
|
|
||||||
|
|
||||||
virtual void tick( Minecraft* minecraft );
|
virtual void tick( Minecraft* minecraft );
|
||||||
|
|
||||||
|
|||||||
@@ -6,36 +6,14 @@
|
|||||||
#include "../../../locale/I18n.h"
|
#include "../../../locale/I18n.h"
|
||||||
#include "TextOption.h"
|
#include "TextOption.h"
|
||||||
#include "KeyOption.h"
|
#include "KeyOption.h"
|
||||||
#include <algorithm>
|
|
||||||
#include "../Gui.h"
|
|
||||||
#include "../Screen.h"
|
|
||||||
#include "../../../platform/input/Mouse.h"
|
|
||||||
#include "../../../util/Mth.h"
|
|
||||||
|
|
||||||
OptionsGroup::OptionsGroup( std::string labelID )
|
OptionsGroup::OptionsGroup( std::string labelID ) {
|
||||||
: contentHeight(0),
|
|
||||||
scrollOffsetY(0.0f),
|
|
||||||
maxScrollOffsetY(0.0f),
|
|
||||||
trackingScrollGesture(false),
|
|
||||||
scrollingGesture(false),
|
|
||||||
touchDispatched(false),
|
|
||||||
dragStartX(0),
|
|
||||||
dragStartY(0),
|
|
||||||
lastDragY(0),
|
|
||||||
touchStartX(0),
|
|
||||||
touchStartY(0) {
|
|
||||||
label = I18n::get(labelID);
|
label = I18n::get(labelID);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsGroup::setupPositions() {
|
void OptionsGroup::setupPositions() {
|
||||||
const int labelHeight = 18;
|
|
||||||
const int bottomPadding = 36;
|
|
||||||
const float requestedScroll = scrollOffsetY;
|
|
||||||
const int scrollOffset = (int)requestedScroll;
|
|
||||||
int curY = y + labelHeight - scrollOffset;
|
|
||||||
const int contentStartY = y + labelHeight;
|
|
||||||
|
|
||||||
// First we write the header and then we add the items
|
// First we write the header and then we add the items
|
||||||
|
int curY = y + 18;
|
||||||
for(std::vector<GuiElement*>::iterator it = children.begin(); it != children.end(); ++it) {
|
for(std::vector<GuiElement*>::iterator it = children.begin(); it != children.end(); ++it) {
|
||||||
(*it)->width = width - 5;
|
(*it)->width = width - 5;
|
||||||
|
|
||||||
@@ -44,109 +22,16 @@ void OptionsGroup::setupPositions() {
|
|||||||
(*it)->setupPositions();
|
(*it)->setupPositions();
|
||||||
curY += (*it)->height + 3;
|
curY += (*it)->height + 3;
|
||||||
}
|
}
|
||||||
curY += bottomPadding;
|
height = curY;
|
||||||
contentHeight = std::max(0, curY - contentStartY + scrollOffset);
|
|
||||||
maxScrollOffsetY = std::max(0, contentHeight - (height - labelHeight));
|
|
||||||
const float clampedScroll = Mth::clamp(requestedScroll, 0.0f, maxScrollOffsetY);
|
|
||||||
if (clampedScroll != requestedScroll) {
|
|
||||||
scrollOffsetY = clampedScroll;
|
|
||||||
setupPositions();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsGroup::render( Minecraft* minecraft, int xm, int ym ) {
|
void OptionsGroup::render( Minecraft* minecraft, int xm, int ym ) {
|
||||||
float padX = 10.0f;
|
float padX = 10.0f;
|
||||||
float padY = 5.0f;
|
float padY = 5.0f;
|
||||||
const int labelHeight = 18;
|
|
||||||
|
|
||||||
minecraft->font->draw(label, (float)x + padX, (float)y + padY, 0xffffffff, false);
|
minecraft->font->draw(label, (float)x + padX, (float)y + padY, 0xffffffff, false);
|
||||||
|
|
||||||
glEnable2(GL_SCISSOR_TEST);
|
|
||||||
glScissor(
|
|
||||||
Gui::GuiScale * x,
|
|
||||||
minecraft->height - Gui::GuiScale * (y + height),
|
|
||||||
Gui::GuiScale * width,
|
|
||||||
Gui::GuiScale * (height - labelHeight)
|
|
||||||
);
|
|
||||||
|
|
||||||
super::render(minecraft, xm, ym);
|
super::render(minecraft, xm, ym);
|
||||||
glDisable2(GL_SCISSOR_TEST);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OptionsGroup::tick(Minecraft* minecraft) {
|
|
||||||
int xm = Mouse::getX();
|
|
||||||
int ym = Mouse::getY();
|
|
||||||
if (minecraft->screen != NULL) {
|
|
||||||
minecraft->screen->toGUICoordinate(xm, ym);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool leftDown = Mouse::isButtonDown(MouseAction::ACTION_LEFT);
|
|
||||||
|
|
||||||
if (trackingScrollGesture && leftDown) {
|
|
||||||
int dy = ym - lastDragY;
|
|
||||||
int dx = xm - dragStartX;
|
|
||||||
if (!scrollingGesture) {
|
|
||||||
int totalDx = xm - dragStartX;
|
|
||||||
int totalDy = ym - dragStartY;
|
|
||||||
if (std::abs(totalDx) >= ScrollStartThreshold || std::abs(totalDy) >= ScrollStartThreshold) {
|
|
||||||
if (std::abs(totalDy) >= std::abs(totalDx)) {
|
|
||||||
scrollingGesture = true;
|
|
||||||
} else if (!touchDispatched) {
|
|
||||||
super::mouseClicked(minecraft, touchStartX, touchStartY, MouseAction::ACTION_LEFT);
|
|
||||||
touchDispatched = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (scrollingGesture && dy != 0) {
|
|
||||||
scrollByPixels((float)dy);
|
|
||||||
}
|
|
||||||
lastDragY = ym;
|
|
||||||
}
|
|
||||||
super::tick(minecraft);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OptionsGroup::mouseClicked(Minecraft* minecraft, int x, int y, int buttonNum) {
|
|
||||||
trackingScrollGesture = false;
|
|
||||||
scrollingGesture = false;
|
|
||||||
touchDispatched = false;
|
|
||||||
|
|
||||||
if (buttonNum == MouseAction::ACTION_LEFT && pointInside(x, y)) {
|
|
||||||
trackingScrollGesture = true;
|
|
||||||
dragStartX = x;
|
|
||||||
dragStartY = y;
|
|
||||||
lastDragY = y;
|
|
||||||
touchStartX = x;
|
|
||||||
touchStartY = y;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
super::mouseClicked(minecraft, x, y, buttonNum);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OptionsGroup::mouseReleased(Minecraft* minecraft, int x, int y, int buttonNum) {
|
|
||||||
bool wasScrolling = scrollingGesture;
|
|
||||||
bool wasTracking = trackingScrollGesture;
|
|
||||||
trackingScrollGesture = false;
|
|
||||||
scrollingGesture = false;
|
|
||||||
if (buttonNum == MouseAction::ACTION_LEFT && wasTracking && !touchDispatched && pointInside(touchStartX, touchStartY)) {
|
|
||||||
super::mouseClicked(minecraft, touchStartX, touchStartY, buttonNum);
|
|
||||||
touchDispatched = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!wasScrolling) {
|
|
||||||
super::mouseReleased(minecraft, x, y, buttonNum);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void OptionsGroup::scrollByPixels(float deltaY) {
|
|
||||||
if (deltaY == 0.0f || maxScrollOffsetY <= 0.0f) return;
|
|
||||||
|
|
||||||
scrollOffsetY = Mth::clamp(scrollOffsetY - deltaY, 0.0f, maxScrollOffsetY);
|
|
||||||
setupPositions();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OptionsGroup::isScrollingGestureActive() const {
|
|
||||||
return trackingScrollGesture || scrollingGesture;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
OptionsGroup& OptionsGroup::addOptionItem(OptionId optId, Minecraft* minecraft ) {
|
OptionsGroup& OptionsGroup::addOptionItem(OptionId optId, Minecraft* minecraft ) {
|
||||||
|
|||||||
@@ -17,12 +17,7 @@ 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 mouseClicked(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);
|
|
||||||
bool isScrollingGestureActive() const;
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
void createToggle(OptionId optId, Minecraft* minecraft);
|
void createToggle(OptionId optId, Minecraft* minecraft);
|
||||||
@@ -32,18 +27,6 @@ protected:
|
|||||||
void createKey(OptionId optId, Minecraft* minecraft);
|
void createKey(OptionId optId, Minecraft* minecraft);
|
||||||
|
|
||||||
std::string label;
|
std::string label;
|
||||||
int contentHeight;
|
|
||||||
float scrollOffsetY;
|
|
||||||
float maxScrollOffsetY;
|
|
||||||
bool trackingScrollGesture;
|
|
||||||
bool scrollingGesture;
|
|
||||||
bool touchDispatched;
|
|
||||||
int dragStartX;
|
|
||||||
int dragStartY;
|
|
||||||
int lastDragY;
|
|
||||||
int touchStartX;
|
|
||||||
int touchStartY;
|
|
||||||
static const int ScrollStartThreshold = 5;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsGroup_H__*/
|
#endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsGroup_H__*/
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -121,7 +121,6 @@ void OptionsScreen::setupPositions() {
|
|||||||
(*it)->x = categoryButtons[0]->width;
|
(*it)->x = categoryButtons[0]->width;
|
||||||
(*it)->y = bHeader->height;
|
(*it)->y = bHeader->height;
|
||||||
(*it)->width = width - categoryButtons[0]->width;
|
(*it)->width = width - categoryButtons[0]->width;
|
||||||
(*it)->height = height - bHeader->height;
|
|
||||||
|
|
||||||
(*it)->setupPositions();
|
(*it)->setupPositions();
|
||||||
}
|
}
|
||||||
@@ -148,7 +147,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 +194,11 @@ 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_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)
|
||||||
@@ -234,8 +233,7 @@ 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_MENU_STYLE, minecraft)
|
||||||
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft)
|
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft)
|
||||||
@@ -263,17 +261,11 @@ void OptionsScreen::mouseReleased(int x, int y, int buttonNum) {
|
|||||||
super::mouseReleased(x, y, buttonNum);
|
super::mouseReleased(x, y, buttonNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::mouseWheel(int dx, int dy, int xm, int ym) {
|
|
||||||
if (currentOptionsGroup != NULL && currentOptionsGroup->pointInside(xm, ym) && dy != 0) {
|
|
||||||
currentOptionsGroup->scrollByPixels((float)dy * 18.0f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ public:
|
|||||||
|
|
||||||
virtual void mouseClicked(int x, int y, int buttonNum);
|
virtual void mouseClicked(int x, int y, int buttonNum);
|
||||||
virtual void mouseReleased(int x, int y, int buttonNum);
|
virtual void mouseReleased(int x, int y, int buttonNum);
|
||||||
virtual void mouseWheel(int dx, int dy, int xm, int ym);
|
|
||||||
virtual void keyPressed(int eventKey);
|
virtual void keyPressed(int eventKey);
|
||||||
virtual void charPressed(char inputChar);
|
virtual void charPressed(char inputChar);
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "client/Options.h"
|
#include "client/Options.h"
|
||||||
#include "client/gui/components/Button.h"
|
#include "client/gui/components/Button.h"
|
||||||
#include "client/gui/screens/OptionsScreen.h"
|
#include "client/gui/screens/OptionsScreen.h"
|
||||||
|
#include "UploadPhotoScreen.h"
|
||||||
|
|
||||||
PauseScreen::PauseScreen(bool wasBackPaused)
|
PauseScreen::PauseScreen(bool wasBackPaused)
|
||||||
: saveStep(0),
|
: saveStep(0),
|
||||||
@@ -17,6 +18,7 @@ PauseScreen::PauseScreen(bool wasBackPaused)
|
|||||||
bOptions(0),
|
bOptions(0),
|
||||||
bQuitAndSaveLocally(0),
|
bQuitAndSaveLocally(0),
|
||||||
bServerVisibility(0),
|
bServerVisibility(0),
|
||||||
|
bPhotoMode(0),
|
||||||
// bThirdPerson(0),
|
// bThirdPerson(0),
|
||||||
wasBackPaused(wasBackPaused),
|
wasBackPaused(wasBackPaused),
|
||||||
// bSound(OPTIONS_SOUND_VOLUME, 1, 0),
|
// bSound(OPTIONS_SOUND_VOLUME, 1, 0),
|
||||||
@@ -43,6 +45,7 @@ PauseScreen::~PauseScreen() {
|
|||||||
delete bQuit;
|
delete bQuit;
|
||||||
delete bQuitAndSaveLocally;
|
delete bQuitAndSaveLocally;
|
||||||
delete bServerVisibility;
|
delete bServerVisibility;
|
||||||
|
delete bPhotoMode;
|
||||||
delete bOptions;
|
delete bOptions;
|
||||||
// delete bThirdPerson;
|
// delete bThirdPerson;
|
||||||
}
|
}
|
||||||
@@ -51,6 +54,7 @@ void PauseScreen::init() {
|
|||||||
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
|
||||||
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");
|
||||||
|
bPhotoMode = new Touch::TButton(6, "Photo Mode");
|
||||||
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, "");
|
||||||
@@ -58,6 +62,7 @@ void PauseScreen::init() {
|
|||||||
} else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) {
|
} else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) {
|
||||||
bContinue = new Button(1, "Back to game");
|
bContinue = new Button(1, "Back to game");
|
||||||
bOptions = new Button(5, "Options");
|
bOptions = new Button(5, "Options");
|
||||||
|
bPhotoMode = new Button(6, "Photo Mode");
|
||||||
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, "");
|
||||||
@@ -66,6 +71,7 @@ void PauseScreen::init() {
|
|||||||
bContinue = new Button(1, 0, 0, 200, 20, "Back to game");
|
bContinue = new Button(1, 0, 0, 200, 20, "Back to game");
|
||||||
bServerVisibility = new Button(4, 0, 0, 200, 20, "");
|
bServerVisibility = new Button(4, 0, 0, 200, 20, "");
|
||||||
bOptions = new Button(5, 0, 0, 200, 20, "Options...");
|
bOptions = new Button(5, 0, 0, 200, 20, "Options...");
|
||||||
|
bPhotoMode = new Button(6, 0, 0, 200, 20, "Photo Mode");
|
||||||
bQuit = new Button(2, 0, 0, 200, 20, "Save and quit to title");
|
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");
|
bQuitAndSaveLocally = new Button(3, 0, 0, 200, 20, "Copy and quit map");
|
||||||
// bThirdPerson = new Button(5, "Toggle 3:rd person view");
|
// bThirdPerson = new Button(5, "Toggle 3:rd person view");
|
||||||
@@ -74,6 +80,7 @@ void PauseScreen::init() {
|
|||||||
buttons.push_back(bContinue);
|
buttons.push_back(bContinue);
|
||||||
buttons.push_back(bQuit);
|
buttons.push_back(bQuit);
|
||||||
buttons.push_back(bOptions);
|
buttons.push_back(bOptions);
|
||||||
|
buttons.push_back(bPhotoMode);
|
||||||
// bSound.updateImage(&minecraft->options);
|
// bSound.updateImage(&minecraft->options);
|
||||||
bThirdPerson.updateImage(&minecraft->options);
|
bThirdPerson.updateImage(&minecraft->options);
|
||||||
bHideGui.updateImage(&minecraft->options);
|
bHideGui.updateImage(&minecraft->options);
|
||||||
@@ -115,7 +122,7 @@ void PauseScreen::setupPositions() {
|
|||||||
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||||
yBase = 50;
|
yBase = 50;
|
||||||
|
|
||||||
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 200;
|
bContinue->width = bOptions->width = bPhotoMode->width = bQuit->width = /*bThirdPerson->w =*/ 200;
|
||||||
bQuitAndSaveLocally->width = bServerVisibility->width = 200;
|
bQuitAndSaveLocally->width = bServerVisibility->width = 200;
|
||||||
|
|
||||||
bContinue->x = (width - bContinue->width) / 2;
|
bContinue->x = (width - bContinue->width) / 2;
|
||||||
@@ -124,6 +131,9 @@ void PauseScreen::setupPositions() {
|
|||||||
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
||||||
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 24 * 2;
|
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 24 * 2;
|
||||||
|
|
||||||
|
bPhotoMode->x = (width - bPhotoMode->width) / 2;
|
||||||
|
bPhotoMode->y = yBase + 24 * 3;
|
||||||
|
|
||||||
bOptions->x = (width - bOptions->width) / 2;
|
bOptions->x = (width - bOptions->width) / 2;
|
||||||
bOptions->y = yBase + 24 * 3 + 24;
|
bOptions->y = yBase + 24 * 3 + 24;
|
||||||
|
|
||||||
@@ -131,7 +141,7 @@ void PauseScreen::setupPositions() {
|
|||||||
bQuit->y = yBase + 24 * 4 + 24;
|
bQuit->y = yBase + 24 * 4 + 24;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 160;
|
bContinue->width = bOptions->width = bPhotoMode->width = bQuit->width = /*bThirdPerson->w =*/ 160;
|
||||||
bQuitAndSaveLocally->width = bServerVisibility->width = 160;
|
bQuitAndSaveLocally->width = bServerVisibility->width = 160;
|
||||||
|
|
||||||
bContinue->x = (width - bContinue->width) / 2;
|
bContinue->x = (width - bContinue->width) / 2;
|
||||||
@@ -140,15 +150,18 @@ void PauseScreen::setupPositions() {
|
|||||||
bOptions->x = (width - bOptions->width) / 2;
|
bOptions->x = (width - bOptions->width) / 2;
|
||||||
bOptions->y = yBase + 32 * 2;
|
bOptions->y = yBase + 32 * 2;
|
||||||
|
|
||||||
|
bPhotoMode->x = (width - bPhotoMode->width) / 2;
|
||||||
|
bPhotoMode->y = yBase + 32 * 3;
|
||||||
|
|
||||||
bQuit->x = (width - bQuit->width) / 2;
|
bQuit->x = (width - bQuit->width) / 2;
|
||||||
bQuit->y = yBase + 32 * 3;
|
bQuit->y = yBase + 32 * 4;
|
||||||
|
|
||||||
#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 * 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -192,6 +205,9 @@ void PauseScreen::buttonClicked(Button* button) {
|
|||||||
if (button->id == bQuit->id) {
|
if (button->id == bQuit->id) {
|
||||||
minecraft->leaveGame();
|
minecraft->leaveGame();
|
||||||
}
|
}
|
||||||
|
if (button->id == bPhotoMode->id) {
|
||||||
|
minecraft->setScreen(new UploadPhotoScreen());
|
||||||
|
}
|
||||||
if (button->id == bQuitAndSaveLocally->id) {
|
if (button->id == bQuitAndSaveLocally->id) {
|
||||||
minecraft->leaveGame(true);
|
minecraft->leaveGame(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ private:
|
|||||||
Button* bQuit;
|
Button* bQuit;
|
||||||
Button* bQuitAndSaveLocally;
|
Button* bQuitAndSaveLocally;
|
||||||
Button* bServerVisibility;
|
Button* bServerVisibility;
|
||||||
|
Button* bPhotoMode;
|
||||||
Button* bOptions;
|
Button* bOptions;
|
||||||
|
|
||||||
// Button* bThirdPerson;
|
// Button* bThirdPerson;
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -1,177 +1,160 @@
|
|||||||
#if 0
|
#include "UploadPhotoScreen.h"
|
||||||
|
|
||||||
#include "UploadPhotoScreen.h"
|
#include "../components/Button.h"
|
||||||
#include "../renderer/TileRenderer.h"
|
#include "../../Minecraft.h"
|
||||||
#include "../player/LocalPlayer.h"
|
#include "../../player/LocalPlayer.h"
|
||||||
#include "../../world/entity/player/Inventory.h"
|
#include "../../../world/entity/item/TripodCamera.h"
|
||||||
|
#include "../../../world/level/Level.h"
|
||||||
UploadPhotoScreen::UploadPhotoScreen()
|
#include "../../../platform/input/Keyboard.h"
|
||||||
:
|
#include "../../renderer/GameRenderer.h"
|
||||||
selectedItem(0)
|
#include "../../renderer/LevelRenderer.h"
|
||||||
{
|
|
||||||
}
|
UploadPhotoScreen::UploadPhotoScreen()
|
||||||
|
: hasAppliedPhotoMode(false),
|
||||||
void UploadPhotoScreen::init()
|
oldHideGui(false),
|
||||||
{
|
oldThirdPerson(false),
|
||||||
int currentSelection = minecraft->player->inventory->getSelectedItemId();
|
oldFixedCamera(false),
|
||||||
for (int i = 0; i < Inventory::INVENTORY_SIZE; i++)
|
hasOldPose(false),
|
||||||
{
|
oldX(0),
|
||||||
if (currentSelection == minecraft->player->inventory->getSelectionSlotItemId(i + Inventory::SELECTION_SIZE))
|
oldY(0),
|
||||||
{
|
oldZ(0),
|
||||||
selectedItem = i;
|
oldYaw(0),
|
||||||
break;
|
oldPitch(0),
|
||||||
}
|
photoCameraTarget(NULL),
|
||||||
}
|
photoCameraX(0),
|
||||||
|
photoCameraY(0),
|
||||||
}
|
photoCameraZ(0),
|
||||||
|
bBack(0)
|
||||||
void UploadPhotoScreen::renderSlots()
|
{
|
||||||
{
|
}
|
||||||
glColor4f2(1, 1, 1, 1);
|
|
||||||
|
UploadPhotoScreen::~UploadPhotoScreen()
|
||||||
blitOffset = -90;
|
{
|
||||||
|
restorePhotoMode();
|
||||||
minecraft->textures->loadAndBindTexture("gui/gui.png");
|
delete photoCameraTarget;
|
||||||
for (int r = 0; r < Inventory::INVENTORY_ROWS; r++)
|
delete bBack;
|
||||||
{
|
}
|
||||||
blit(width / 2 - 182 / 2, height - 22 * 3 - 22 * r, 0, 0, 182, 22);
|
|
||||||
}
|
void UploadPhotoScreen::init()
|
||||||
if (selectedItem >= 0)
|
{
|
||||||
{
|
applyPhotoMode();
|
||||||
int x = width / 2 - 182 / 2 - 1 + (selectedItem % Inventory::SELECTION_SIZE) * 20;
|
|
||||||
int y = height - 22 * 3 - 1 - (selectedItem / Inventory::SELECTION_SIZE) * 22;
|
if (minecraft->useTouchscreen()) {
|
||||||
blit(x, y, 0, 22, 24, 22);
|
bBack = new Touch::TButton(1, "Back");
|
||||||
}
|
} else {
|
||||||
|
bBack = new Button(1, "Back");
|
||||||
for (int r = 0; r < Inventory::INVENTORY_ROWS; r++)
|
}
|
||||||
{
|
|
||||||
for (int i = 0; i < 9; i++) {
|
buttons.push_back(bBack);
|
||||||
int x = width / 2 - 9 * 10 + i * 20 + 2;
|
tabButtons.push_back(bBack);
|
||||||
int y = height - 16 - 3 - 22 * 2 - 22 * r;
|
}
|
||||||
renderSlot(r * 9 + i + Inventory::SELECTION_SIZE, x, y, 0);
|
|
||||||
}
|
void UploadPhotoScreen::removed()
|
||||||
}
|
{
|
||||||
|
restorePhotoMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UploadPhotoScreen::renderSlot(int slot, int x, int y, float a)
|
void UploadPhotoScreen::applyPhotoMode()
|
||||||
{
|
{
|
||||||
int itemId = minecraft->player->inventory->getSelectionSlotItemId(slot);
|
if (hasAppliedPhotoMode || !minecraft || !minecraft->gameRenderer) return;
|
||||||
if (itemId < 0) return;
|
|
||||||
|
if (minecraft->player) {
|
||||||
const bool fancy = false;
|
oldX = minecraft->player->x;
|
||||||
|
oldY = minecraft->player->y;
|
||||||
if (fancy && itemId < 256 && TileRenderer::canRender(Tile::tiles[itemId]->getRenderShape())) {
|
oldZ = minecraft->player->z;
|
||||||
|
oldYaw = minecraft->player->yRot;
|
||||||
} else {
|
oldPitch = minecraft->player->xRot;
|
||||||
if (itemId < 256) {
|
hasOldPose = true;
|
||||||
Tile* tile = Tile::tiles[itemId];
|
}
|
||||||
if (tile == NULL) return;
|
|
||||||
|
oldHideGui = minecraft->options.getBooleanValue(OPTIONS_HIDEGUI);
|
||||||
minecraft->textures->loadAndBindTexture("terrain.png");
|
oldThirdPerson = minecraft->options.getBooleanValue(OPTIONS_THIRD_PERSON_VIEW);
|
||||||
|
oldFixedCamera = minecraft->options.getBooleanValue(OPTIONS_FIXED_CAMERA);
|
||||||
int textureId = tile->getTexture(2, 0);
|
Pos spawn = minecraft->level->getSharedSpawnPos();
|
||||||
blit(x, y, textureId % 16 * 16, textureId / 16 * 16, 16, 16);
|
photoCameraX = (float) spawn.x;
|
||||||
}
|
photoCameraY = 128.0f;
|
||||||
}
|
photoCameraZ = (float) spawn.z;
|
||||||
|
if (!photoCameraTarget) {
|
||||||
}
|
photoCameraTarget = new TripodCamera(minecraft->level, minecraft->player, photoCameraX, photoCameraY, photoCameraZ);
|
||||||
|
}
|
||||||
void UploadPhotoScreen::keyPressed(int eventKey)
|
photoCameraTarget->setPos(photoCameraX, photoCameraY, photoCameraZ);
|
||||||
{
|
photoCameraTarget->xo = photoCameraTarget->xOld = photoCameraX;
|
||||||
int selX = selectedItem % Inventory::SELECTION_SIZE;
|
photoCameraTarget->yo = photoCameraTarget->yOld = photoCameraY;
|
||||||
int selY = selectedItem / Inventory::SELECTION_SIZE;
|
photoCameraTarget->zo = photoCameraTarget->zOld = photoCameraZ;
|
||||||
|
|
||||||
Options& o = minecraft->options;
|
if (!oldHideGui) minecraft->options.toggle(OPTIONS_HIDEGUI);
|
||||||
if (eventKey == o.keyLeft.key && selX > 0)
|
if (!oldThirdPerson) minecraft->options.toggle(OPTIONS_THIRD_PERSON_VIEW);
|
||||||
{
|
if (!oldFixedCamera) minecraft->options.toggle(OPTIONS_FIXED_CAMERA);
|
||||||
selectedItem -= 1;
|
|
||||||
}
|
minecraft->gameRenderer->setPhotoModeIsometric();
|
||||||
else if (eventKey == o.keyRight.key && selX < (Inventory::SELECTION_SIZE - 1))
|
minecraft->levelRenderer->allChanged();
|
||||||
{
|
hasAppliedPhotoMode = true;
|
||||||
selectedItem += 1;
|
}
|
||||||
}
|
|
||||||
else if (eventKey == o.keyDown.key && selY > 0)
|
void UploadPhotoScreen::tick()
|
||||||
{
|
{
|
||||||
selectedItem -= Inventory::SELECTION_SIZE;
|
if (!hasAppliedPhotoMode || !minecraft || !minecraft->player || !minecraft->level) return;
|
||||||
}
|
|
||||||
else if (eventKey == o.keyUp.key && selY < (Inventory::INVENTORY_ROWS - 1))
|
if (photoCameraTarget) {
|
||||||
{
|
photoCameraTarget->setPos(photoCameraX, photoCameraY, photoCameraZ);
|
||||||
selectedItem += Inventory::SELECTION_SIZE;
|
photoCameraTarget->xo = photoCameraTarget->xOld = photoCameraX;
|
||||||
}
|
photoCameraTarget->yo = photoCameraTarget->yOld = photoCameraY;
|
||||||
|
photoCameraTarget->zo = photoCameraTarget->zOld = photoCameraZ;
|
||||||
if (eventKey == o.keyMenuOk.key)
|
photoCameraTarget->yRot = photoCameraTarget->yRotO = 45.0f;
|
||||||
{
|
photoCameraTarget->xRot = photoCameraTarget->xRotO = 68.0f;
|
||||||
selectSlotAndClose();
|
minecraft->cameraTargetPlayer = photoCameraTarget;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int UploadPhotoScreen::getSelectedSlot(int x, int y)
|
void UploadPhotoScreen::restorePhotoMode()
|
||||||
{
|
{
|
||||||
int left = 3 + width / 2 - Inventory::SELECTION_SIZE * 10;
|
if (!hasAppliedPhotoMode || !minecraft) return;
|
||||||
int top = height - 16 - 3 - 22 * 2 - 22 * Inventory::INVENTORY_ROWS;
|
|
||||||
|
if (minecraft->options.getBooleanValue(OPTIONS_HIDEGUI) != oldHideGui) minecraft->options.toggle(OPTIONS_HIDEGUI);
|
||||||
if (x >= left && y >= top)
|
if (minecraft->options.getBooleanValue(OPTIONS_THIRD_PERSON_VIEW) != oldThirdPerson) minecraft->options.toggle(OPTIONS_THIRD_PERSON_VIEW);
|
||||||
{
|
if (minecraft->options.getBooleanValue(OPTIONS_FIXED_CAMERA) != oldFixedCamera) minecraft->options.toggle(OPTIONS_FIXED_CAMERA);
|
||||||
int xSlot = (x - left) / 20;
|
minecraft->gameRenderer->clearPhotoModeIsometric();
|
||||||
if (xSlot < Inventory::SELECTION_SIZE)
|
minecraft->cameraTargetPlayer = minecraft->player;
|
||||||
{
|
|
||||||
// rows are rendered upsidedown
|
if (hasOldPose && minecraft->player) {
|
||||||
return xSlot + Inventory::INVENTORY_SIZE - ((y - top) / 22) * Inventory::SELECTION_SIZE;
|
minecraft->player->yRot = oldYaw;
|
||||||
}
|
minecraft->player->xRot = oldPitch;
|
||||||
}
|
}
|
||||||
return -1;
|
|
||||||
}
|
hasAppliedPhotoMode = false;
|
||||||
|
}
|
||||||
void UploadPhotoScreen::mouseClicked(int x, int y, int buttonNum) {
|
|
||||||
if (buttonNum == MouseAction::ACTION_LEFT) {
|
void UploadPhotoScreen::keyPressed(int eventKey)
|
||||||
|
{
|
||||||
int slot = getSelectedSlot(x, y);
|
if (eventKey == Keyboard::KEY_ESCAPE) {
|
||||||
if (slot >= 0 && slot < Inventory::INVENTORY_SIZE)
|
restorePhotoMode();
|
||||||
{
|
minecraft->setScreen(NULL);
|
||||||
selectedItem = slot;
|
return;
|
||||||
//minecraft->soundEngine->playUI("random.click", 1, 1);
|
}
|
||||||
}
|
|
||||||
}
|
Screen::keyPressed(eventKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UploadPhotoScreen::mouseReleased(int x, int y, int buttonNum)
|
void UploadPhotoScreen::buttonClicked(Button* button)
|
||||||
{
|
{
|
||||||
if (buttonNum == MouseAction::ACTION_LEFT) {
|
if (!button || button->id != 1) return;
|
||||||
|
|
||||||
int slot = getSelectedSlot(x, y);
|
restorePhotoMode();
|
||||||
if (slot >= 0 && slot < Inventory::INVENTORY_SIZE && slot == selectedItem)
|
minecraft->setScreen(NULL);
|
||||||
{
|
}
|
||||||
selectSlotAndClose();
|
|
||||||
}
|
void UploadPhotoScreen::setupPositions()
|
||||||
}
|
{
|
||||||
}
|
const int buttonWidth = 120;
|
||||||
|
const int buttonHeight = 24;
|
||||||
void UploadPhotoScreen::selectSlotAndClose()
|
bBack->width = buttonWidth;
|
||||||
{
|
bBack->height = buttonHeight;
|
||||||
Inventory* inventory = minecraft->player->inventory;
|
bBack->x = (width - buttonWidth) / 2;
|
||||||
|
bBack->y = height - 32;
|
||||||
int itemId = inventory->getSelectionSlotItemId(selectedItem + Inventory::SELECTION_SIZE);
|
}
|
||||||
int i = 0;
|
|
||||||
|
void UploadPhotoScreen::render(int xm, int ym, float a)
|
||||||
for (; i < Inventory::SELECTION_SIZE - 2; i++)
|
{
|
||||||
{
|
drawCenteredString(font, "Photo Mode - Isometric", width / 2, 12, 0xffffff);
|
||||||
if (itemId == inventory->getSelectionSlotItemId(i))
|
Screen::render(xm, ym, a);
|
||||||
{
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// update selection list
|
|
||||||
for (; i >= 1; i--)
|
|
||||||
{
|
|
||||||
inventory->setSelectionSlotItemId(i, inventory->getSelectionSlotItemId(i - 1));
|
|
||||||
}
|
|
||||||
inventory->setSelectionSlotItemId(0, itemId);
|
|
||||||
inventory->selectSlot(0);
|
|
||||||
|
|
||||||
minecraft->soundEngine->playUI("random.click", 1, 1);
|
|
||||||
minecraft->setScreen(NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|||||||
@@ -1,36 +1,50 @@
|
|||||||
#ifndef NET_MINECRAFT_CLIENT_GUI_SCREENS__UploadPhotoScreen_H__
|
#ifndef NET_MINECRAFT_CLIENT_GUI_SCREENS__UploadPhotoScreen_H__
|
||||||
#define NET_MINECRAFT_CLIENT_GUI_SCREENS__UploadPhotoScreen_H__
|
#define NET_MINECRAFT_CLIENT_GUI_SCREENS__UploadPhotoScreen_H__
|
||||||
|
|
||||||
#include "Screen.h"
|
#include "../Screen.h"
|
||||||
|
|
||||||
class UploadPhotoScreen : public Screen
|
class Button;
|
||||||
{
|
class Mob;
|
||||||
public:
|
|
||||||
|
class UploadPhotoScreen : public Screen
|
||||||
UploadPhotoScreen();
|
{
|
||||||
virtual ~UploadPhotoScreen() {}
|
public:
|
||||||
|
|
||||||
virtual void init();
|
UploadPhotoScreen();
|
||||||
|
virtual ~UploadPhotoScreen();
|
||||||
void render(int xm, int ym, float a) {
|
|
||||||
Screen::render(xm, ym, a);
|
virtual void init();
|
||||||
}
|
virtual void setupPositions();
|
||||||
|
virtual void tick();
|
||||||
protected:
|
virtual void removed();
|
||||||
|
virtual void keyPressed(int eventKey);
|
||||||
virtual void mouseClicked(int x, int y, int buttonNum);
|
|
||||||
virtual void mouseReleased(int x, int y, int buttonNum);
|
virtual void render(int xm, int ym, float a);
|
||||||
virtual void keyPressed(int eventKey);
|
|
||||||
|
protected:
|
||||||
private:
|
|
||||||
|
virtual void buttonClicked(Button* button);
|
||||||
int selectedItem;
|
|
||||||
|
private:
|
||||||
void renderSlots();
|
|
||||||
void renderSlot(int slot, int x, int y, float a);
|
void applyPhotoMode();
|
||||||
|
void restorePhotoMode();
|
||||||
int getSelectedSlot(int x, int y);
|
|
||||||
void selectSlotAndClose();
|
bool hasAppliedPhotoMode;
|
||||||
};
|
bool oldHideGui;
|
||||||
|
bool oldThirdPerson;
|
||||||
#endif /*NET_MINECRAFT_CLIENT_GUI_SCREENS__UploadPhotoScreen_H__*/
|
bool oldFixedCamera;
|
||||||
|
bool hasOldPose;
|
||||||
|
float oldX;
|
||||||
|
float oldY;
|
||||||
|
float oldZ;
|
||||||
|
float oldYaw;
|
||||||
|
float oldPitch;
|
||||||
|
Mob* photoCameraTarget;
|
||||||
|
float photoCameraX;
|
||||||
|
float photoCameraY;
|
||||||
|
float photoCameraZ;
|
||||||
|
Button* bBack;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /*NET_MINECRAFT_CLIENT_GUI_SCREENS__UploadPhotoScreen_H__*/
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ static int _shTicks = -1;
|
|||||||
GameRenderer::GameRenderer( Minecraft* mc )
|
GameRenderer::GameRenderer( Minecraft* mc )
|
||||||
: mc(mc),
|
: mc(mc),
|
||||||
renderDistance(0),
|
renderDistance(0),
|
||||||
|
photoModeIsometric(false),
|
||||||
_tick(0),
|
_tick(0),
|
||||||
_lastTickT(0),
|
_lastTickT(0),
|
||||||
fovOffset(0),
|
fovOffset(0),
|
||||||
@@ -90,7 +91,7 @@ void renderCursor(float x, float y, Minecraft* minecraft) {
|
|||||||
|
|
||||||
/*private*/
|
/*private*/
|
||||||
void GameRenderer::setupCamera(float a, int eye) {
|
void GameRenderer::setupCamera(float a, int eye) {
|
||||||
renderDistance = (float) (16 * 16 >> (mc->options.getIntValue(OPTIONS_VIEW_DISTANCE)));
|
renderDistance = photoModeIsometric ? 1024.0f : (float) (16 * 16 >> (mc->options.getIntValue(OPTIONS_VIEW_DISTANCE)));
|
||||||
#if defined(ANDROID)
|
#if defined(ANDROID)
|
||||||
if (mc->isPowerVR() && mc->options.getIntValue(OPTIONS_VIEW_DISTANCE) <= 2)
|
if (mc->isPowerVR() && mc->options.getIntValue(OPTIONS_VIEW_DISTANCE) <= 2)
|
||||||
renderDistance *= 0.8f;
|
renderDistance *= 0.8f;
|
||||||
@@ -314,7 +315,7 @@ void GameRenderer::renderLevel(float a) {
|
|||||||
setupFog(1);
|
setupFog(1);
|
||||||
// MCPE renders clouds using this, but this method breaks 3d clouds and also breaks 2d clouds transparency viewed from above, add as a Legacy Sky or Fast Sky option. - shredder
|
// MCPE renders clouds using this, but this method breaks 3d clouds and also breaks 2d clouds transparency viewed from above, add as a Legacy Sky or Fast Sky option. - shredder
|
||||||
if(!mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
|
if(!mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
|
||||||
if(mc->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS)) {
|
if(mc->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS) && !photoModeIsometric) {
|
||||||
prepareAndRenderClouds(levelRenderer, a);
|
prepareAndRenderClouds(levelRenderer, a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -573,6 +574,14 @@ void GameRenderer::bobView(float a) {
|
|||||||
|
|
||||||
/*private*/
|
/*private*/
|
||||||
void GameRenderer::setupFog(int i) {
|
void GameRenderer::setupFog(int i) {
|
||||||
|
if (photoModeIsometric) {
|
||||||
|
glDisable2(GL_FOG);
|
||||||
|
glFogf(GL_FOG_START, 0.0f);
|
||||||
|
glFogf(GL_FOG_END, 1024.0f);
|
||||||
|
glEnable2(GL_COLOR_MATERIAL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Mob* player = mc->cameraTargetPlayer;
|
Mob* player = mc->cameraTargetPlayer;
|
||||||
float fogBuffer[4] = {fr, fg, fb, 1};
|
float fogBuffer[4] = {fr, fg, fb, 1};
|
||||||
|
|
||||||
@@ -829,6 +838,14 @@ void GameRenderer::tick(int nTick, int maxTick) {
|
|||||||
|
|
||||||
/*private*/
|
/*private*/
|
||||||
void GameRenderer::setupClearColor(float a) {
|
void GameRenderer::setupClearColor(float a) {
|
||||||
|
if (photoModeIsometric) {
|
||||||
|
fr = 0.47f;
|
||||||
|
fg = 0.78f;
|
||||||
|
fb = 1.0f;
|
||||||
|
glClearColor(fr, fg, fb, 1.0f);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Level* level = mc->level;
|
Level* level = mc->level;
|
||||||
Mob* player = mc->cameraTargetPlayer;
|
Mob* player = mc->cameraTargetPlayer;
|
||||||
|
|
||||||
@@ -942,6 +959,28 @@ void GameRenderer::onGraphicsReset()
|
|||||||
if (itemInHandRenderer) itemInHandRenderer->onGraphicsReset();
|
if (itemInHandRenderer) itemInHandRenderer->onGraphicsReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameRenderer::setPhotoModeIsometric()
|
||||||
|
{
|
||||||
|
photoModeIsometric = true;
|
||||||
|
thirdDistance = thirdDistanceO = 128.0f;
|
||||||
|
thirdRotation = thirdRotationO = 45.0f;
|
||||||
|
thirdTilt = thirdTiltO = 56.0f;
|
||||||
|
zoom = 1.0f;
|
||||||
|
zoom_x = 0.0f;
|
||||||
|
zoom_y = 0.0f;
|
||||||
|
cameraRoll = cameraRollO = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameRenderer::clearPhotoModeIsometric()
|
||||||
|
{
|
||||||
|
photoModeIsometric = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GameRenderer::isPhotoModeIsometric() const
|
||||||
|
{
|
||||||
|
return photoModeIsometric;
|
||||||
|
}
|
||||||
|
|
||||||
void GameRenderer::saveMatrices()
|
void GameRenderer::saveMatrices()
|
||||||
{
|
{
|
||||||
#if defined(RPI)
|
#if defined(RPI)
|
||||||
|
|||||||
@@ -33,6 +33,9 @@ public:
|
|||||||
void renderItemInHand(float a, int eye);
|
void renderItemInHand(float a, int eye);
|
||||||
|
|
||||||
void onGraphicsReset();
|
void onGraphicsReset();
|
||||||
|
void setPhotoModeIsometric();
|
||||||
|
void clearPhotoModeIsometric();
|
||||||
|
bool isPhotoModeIsometric() const;
|
||||||
|
|
||||||
void setupCamera(float a, int eye);
|
void setupCamera(float a, int eye);
|
||||||
void moveCameraToPlayer(float a);
|
void moveCameraToPlayer(float a);
|
||||||
@@ -58,6 +61,7 @@ private:
|
|||||||
Minecraft* mc;
|
Minecraft* mc;
|
||||||
|
|
||||||
float renderDistance;
|
float renderDistance;
|
||||||
|
bool photoModeIsometric;
|
||||||
int _tick;
|
int _tick;
|
||||||
Vec3 pickDirection;
|
Vec3 pickDirection;
|
||||||
|
|
||||||
|
|||||||
@@ -193,7 +193,9 @@ void LevelRenderer::allChanged()
|
|||||||
TileRenderer::setUseTint(sideTint);
|
TileRenderer::setUseTint(sideTint);
|
||||||
|
|
||||||
|
|
||||||
int dist = (512 >> 3) << (3 - lastViewDistance);
|
int dist = mc->gameRenderer && mc->gameRenderer->isPhotoModeIsometric()
|
||||||
|
? 1024
|
||||||
|
: (512 >> 3) << (3 - lastViewDistance);
|
||||||
if (lastViewDistance <= 2 && mc->isPowerVR())
|
if (lastViewDistance <= 2 && mc->isPowerVR())
|
||||||
dist = (int)((float)dist * 0.8f);
|
dist = (int)((float)dist * 0.8f);
|
||||||
LOGI("last: %d, power: %d\n", lastViewDistance, mc->isPowerVR());
|
LOGI("last: %d, power: %d\n", lastViewDistance, mc->isPowerVR());
|
||||||
@@ -202,7 +204,9 @@ void LevelRenderer::allChanged()
|
|||||||
dist *= 0.6f;
|
dist *= 0.6f;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (dist > 400) dist = 400;
|
if (!(mc->gameRenderer && mc->gameRenderer->isPhotoModeIsometric())) {
|
||||||
|
if (dist > 400) dist = 400;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* if (Minecraft.FLYBY_MODE) { dist = 512 - CHUNK_SIZE * 2; }
|
* if (Minecraft.FLYBY_MODE) { dist = 512 - CHUNK_SIZE * 2; }
|
||||||
*/
|
*/
|
||||||
@@ -674,9 +678,11 @@ void LevelRenderer::tick()
|
|||||||
|
|
||||||
bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
|
bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
|
||||||
{
|
{
|
||||||
bool slow = false;
|
bool slow = mc->gameRenderer && mc->gameRenderer->isPhotoModeIsometric();
|
||||||
|
|
||||||
if (slow) {
|
if (slow) {
|
||||||
|
const int visibleLimit = 12;
|
||||||
|
const int invisibleLimit = 4;
|
||||||
DirtyChunkSorter dirtySorter(player);
|
DirtyChunkSorter dirtySorter(player);
|
||||||
std::sort(dirtyChunks.begin(), dirtyChunks.end(), dirtySorter);
|
std::sort(dirtyChunks.begin(), dirtyChunks.end(), dirtySorter);
|
||||||
int s = dirtyChunks.size() - 1;
|
int s = dirtyChunks.size() - 1;
|
||||||
@@ -686,9 +692,9 @@ bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
|
|||||||
if (!force) {
|
if (!force) {
|
||||||
if (chunk->distanceToSqr(player) > 16 * 16) {
|
if (chunk->distanceToSqr(player) > 16 * 16) {
|
||||||
if (chunk->visible) {
|
if (chunk->visible) {
|
||||||
if (i >= MAX_VISIBLE_REBUILDS_PER_FRAME) return false;
|
if (i >= visibleLimit) return false;
|
||||||
} else {
|
} else {
|
||||||
if (i >= MAX_INVISIBLE_REBUILDS_PER_FRAME) return false;
|
if (i >= invisibleLimit) return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -702,10 +708,9 @@ bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
|
|||||||
|
|
||||||
return dirtyChunks.size() == 0;
|
return dirtyChunks.size() == 0;
|
||||||
} else {
|
} else {
|
||||||
const int count = 3;
|
const int count = (mc->gameRenderer && mc->gameRenderer->isPhotoModeIsometric()) ? 32 : 3;
|
||||||
|
Chunk* toAdd[24] = {NULL};
|
||||||
DirtyChunkSorter dirtyChunkSorter(player);
|
DirtyChunkSorter dirtyChunkSorter(player);
|
||||||
Chunk* toAdd[count] = {NULL};
|
|
||||||
std::vector<Chunk*>* nearChunks = NULL;
|
std::vector<Chunk*>* nearChunks = NULL;
|
||||||
|
|
||||||
int pendingChunkSize = dirtyChunks.size();
|
int pendingChunkSize = dirtyChunks.size();
|
||||||
@@ -715,7 +720,7 @@ bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
|
|||||||
Chunk* chunk = dirtyChunks[i];
|
Chunk* chunk = dirtyChunks[i];
|
||||||
|
|
||||||
if (!force) {
|
if (!force) {
|
||||||
if (chunk->distanceToSqr(player) > 1024.0f) {
|
if (chunk->distanceToSqr(player) > ((mc->gameRenderer && mc->gameRenderer->isPhotoModeIsometric()) ? 65536.0f : 1024.0f)) {
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
// is this chunk in the closest <count>?
|
// is this chunk in the closest <count>?
|
||||||
@@ -754,7 +759,7 @@ bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
|
|||||||
|
|
||||||
// if there are nearby chunks that need to be prepared for
|
// if there are nearby chunks that need to be prepared for
|
||||||
// rendering, sort them and then process them
|
// rendering, sort them and then process them
|
||||||
static const float MaxFrameTime = 1.0f / 100.0f;
|
static const float MaxFrameTime = (mc->gameRenderer && mc->gameRenderer->isPhotoModeIsometric()) ? (1.0f / 75.0f) : (1.0f / 100.0f);
|
||||||
Stopwatch chunkWatch;
|
Stopwatch chunkWatch;
|
||||||
chunkWatch.start();
|
chunkWatch.start();
|
||||||
|
|
||||||
|
|||||||
@@ -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__*/
|
||||||
|
|||||||
@@ -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__*/
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
102
src/main_glfw.h
102
src/main_glfw.h
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user