forked from Kolyah35/minecraft-pe-0.6.1
Compare commits
12 Commits
feature/gr
...
web-change
| Author | SHA1 | Date | |
|---|---|---|---|
| 676fd54982 | |||
| 084607cc86 | |||
| ce182b676f | |||
| bbd81665a6 | |||
| 06398e98e2 | |||
| 7d9328b865 | |||
| f1111d06c2 | |||
| ba9f1da758 | |||
|
|
4b69a1240a | ||
|
|
8f34fbc1ec | ||
|
|
890604256b | ||
|
|
88ef7f3d17 |
@@ -339,7 +339,11 @@ 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"
|
||||||
@@ -355,7 +359,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=1"
|
"-sEMULATE_FUNCTION_POINTER_CASTS=0"
|
||||||
"-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']"
|
||||||
@@ -404,6 +408,10 @@ 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 .. -B . -G Ninja "-DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
|
cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE="$env:EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
|
||||||
cmake --build . --target MinecraftPE
|
cmake --build . --target MinecraftPE
|
||||||
```
|
```
|
||||||
> [!Note]
|
> [!Note]
|
||||||
|
|||||||
@@ -207,6 +207,7 @@ 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
|
||||||
@@ -225,10 +226,17 @@ options.smoothCamera=Smooth camera
|
|||||||
options.destroyVibration=Destroy vibration
|
options.destroyVibration=Destroy vibration
|
||||||
options.isLeftHanded=Left handed
|
options.isLeftHanded=Left handed
|
||||||
options.useTouchscreen=Use touchscreen
|
options.useTouchscreen=Use touchscreen
|
||||||
|
options.touchOverride=Touch Mode Override
|
||||||
options.fancyGraphics=Fancy graphics
|
options.fancyGraphics=Fancy graphics
|
||||||
options.renderDebug=Debug render
|
options.renderDebug=Debug render
|
||||||
options.anaglyph3d=3D anaglyph
|
options.anaglyph3d=3D anaglyph
|
||||||
|
|
||||||
|
options.windowScale =Window Scaling
|
||||||
|
|
||||||
|
options.menuStyle =Menu Style
|
||||||
|
options.menuStyle.pocket =Pocket Edition
|
||||||
|
options.menuStyle.xperia =Xperia/Pi
|
||||||
|
options.menuStyle.java =Java Beta
|
||||||
|
|
||||||
performance.max=Max FPS
|
performance.max=Max FPS
|
||||||
performance.balanced=Balanced
|
performance.balanced=Balanced
|
||||||
|
|||||||
26
misc/web/coi-serviceworker.js
Normal file
26
misc/web/coi-serviceworker.js
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/* 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))
|
||||||
|
);
|
||||||
|
});
|
||||||
BIN
misc/web/icon-192.png
Normal file
BIN
misc/web/icon-192.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
BIN
misc/web/icon-512.png
Normal file
BIN
misc/web/icon-512.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
@@ -2,6 +2,12 @@
|
|||||||
<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 {
|
||||||
@@ -16,6 +22,10 @@
|
|||||||
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>
|
||||||
@@ -23,6 +33,40 @@
|
|||||||
|
|
||||||
<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'),
|
||||||
@@ -43,4 +87,4 @@
|
|||||||
|
|
||||||
<script src="MinecraftPE.js"></script>
|
<script src="MinecraftPE.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
25
misc/web/manifest.json
Normal file
25
misc/web/manifest.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"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,6 +167,7 @@ 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,6 +167,7 @@ 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,6 +129,7 @@ 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,10 +115,11 @@ void NinecraftApp::init()
|
|||||||
LOGI("This: %p\n", this);
|
LOGI("This: %p\n", this);
|
||||||
screenChooser.setScreen(SCREEN_STARTMENU);
|
screenChooser.setScreen(SCREEN_STARTMENU);
|
||||||
|
|
||||||
if (options.getBooleanValue(OPTIONS_FIRST_LAUNCH)) {
|
// Disabled: Show username screen on first launch
|
||||||
options.toggle(OPTIONS_FIRST_LAUNCH);
|
// if (options.getBooleanValue(OPTIONS_FIRST_LAUNCH)) {
|
||||||
setScreen(new UsernameScreen());
|
// options.toggle(OPTIONS_FIRST_LAUNCH);
|
||||||
}
|
// setScreen(new UsernameScreen());
|
||||||
|
// }
|
||||||
#else
|
#else
|
||||||
hostMultiplayer();
|
hostMultiplayer();
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -10,11 +10,11 @@
|
|||||||
|
|
||||||
|
|
||||||
#if defined(APPLE_DEMO_PROMOTION)
|
#if defined(APPLE_DEMO_PROMOTION)
|
||||||
#define NO_NETWORK
|
#define NO_NETWORK
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(RPI)
|
#if defined(RPI)
|
||||||
#define CREATORMODE
|
#define CREATORMODE
|
||||||
#endif
|
#endif
|
||||||
#include "../network/RakNetInstance.h"
|
#include "../network/RakNetInstance.h"
|
||||||
#include "../network/ClientSideNetworkHandler.h"
|
#include "../network/ClientSideNetworkHandler.h"
|
||||||
@@ -98,8 +98,8 @@
|
|||||||
static void checkGlError(const char* tag) {
|
static void checkGlError(const char* tag) {
|
||||||
#ifdef GLDEBUG
|
#ifdef GLDEBUG
|
||||||
while (1) {
|
while (1) {
|
||||||
const int errCode = glGetError();
|
const int errCode = glGetError();
|
||||||
if (errCode == GL_NO_ERROR) break;
|
if (errCode == GL_NO_ERROR) break;
|
||||||
|
|
||||||
LOGE("################\nOpenGL-error @ %s : #%d\n", tag, errCode);
|
LOGE("################\nOpenGL-error @ %s : #%d\n", tag, errCode);
|
||||||
}
|
}
|
||||||
@@ -117,7 +117,7 @@ const char* Minecraft::progressMessages[] = {
|
|||||||
int Minecraft::customDebugId = Minecraft::CDI_NONE;
|
int Minecraft::customDebugId = Minecraft::CDI_NONE;
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
#pragma warning( disable : 4355 ) // 'this' pointer in initialization list which is perfectly legal
|
#pragma warning( disable : 4355 ) // 'this' pointer in initialization list which is perfectly legal
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool Minecraft::useAmbientOcclusion = false;
|
bool Minecraft::useAmbientOcclusion = false;
|
||||||
@@ -175,17 +175,17 @@ Minecraft::Minecraft() :
|
|||||||
width(1), height(1),
|
width(1), height(1),
|
||||||
//_respawnPlayerTicks(-1),
|
//_respawnPlayerTicks(-1),
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
_isSuperFast(false),
|
_isSuperFast(false),
|
||||||
#endif
|
#endif
|
||||||
_powerVr(false),
|
_powerVr(false),
|
||||||
commandPort(4711),
|
commandPort(4711),
|
||||||
reserved_d1(0),reserved_d2(0),
|
reserved_d1(0),reserved_d2(0),
|
||||||
reserved_f1(0),reserved_f2(0), options(this)
|
reserved_f1(0),reserved_f2(0), options(this)
|
||||||
{
|
{
|
||||||
//#ifdef ANDROID
|
//#ifdef ANDROID
|
||||||
|
|
||||||
#if defined(NO_NETWORK)
|
#if defined(NO_NETWORK)
|
||||||
raknetInstance = new IRakNetInstance();
|
raknetInstance = new IRakNetInstance();
|
||||||
#else
|
#else
|
||||||
raknetInstance = new RakNetInstance();
|
raknetInstance = new RakNetInstance();
|
||||||
#endif
|
#endif
|
||||||
@@ -265,7 +265,7 @@ void Minecraft::setLevel(Level* level, const std::string& message /* ="" */, Loc
|
|||||||
|
|
||||||
if (level != NULL) {
|
if (level != NULL) {
|
||||||
level->raknetInstance = raknetInstance;
|
level->raknetInstance = raknetInstance;
|
||||||
gameMode->initLevel(level);
|
gameMode->initLevel(level);
|
||||||
|
|
||||||
if (!player && forceInsertPlayer)
|
if (!player && forceInsertPlayer)
|
||||||
{
|
{
|
||||||
@@ -296,19 +296,19 @@ void Minecraft::setLevel(Level* level, const std::string& message /* ="" */, Loc
|
|||||||
// Non-threaded
|
// Non-threaded
|
||||||
generateLevel("Currently not used", level);
|
generateLevel("Currently not used", level);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
player = NULL;
|
player = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->lastTickTime = 0;
|
this->lastTickTime = 0;
|
||||||
this->_running = true;
|
this->_running = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Minecraft::leaveGame(bool renameLevel /*=false*/)
|
void Minecraft::leaveGame(bool renameLevel /*=false*/)
|
||||||
{
|
{
|
||||||
if (isGeneratingLevel || !_hasSignaledGeneratingLevelFinished)
|
if (isGeneratingLevel || !_hasSignaledGeneratingLevelFinished)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
isGeneratingLevel = false;
|
isGeneratingLevel = false;
|
||||||
bool saveLevel = level && (!level->isClientSide || renameLevel);
|
bool saveLevel = level && (!level->isClientSide || renameLevel);
|
||||||
|
|
||||||
@@ -366,19 +366,19 @@ void Minecraft::prepareLevel(const std::string& title) {
|
|||||||
int Max = CHUNK_CACHE_WIDTH * CHUNK_CACHE_WIDTH;
|
int Max = CHUNK_CACHE_WIDTH * CHUNK_CACHE_WIDTH;
|
||||||
int pp = 0;
|
int pp = 0;
|
||||||
for (int x = 8; x < (CHUNK_CACHE_WIDTH * CHUNK_WIDTH); x += CHUNK_WIDTH) {
|
for (int x = 8; x < (CHUNK_CACHE_WIDTH * CHUNK_WIDTH); x += CHUNK_WIDTH) {
|
||||||
for (int z = 8; z < (CHUNK_CACHE_WIDTH * CHUNK_WIDTH); z += CHUNK_WIDTH) {
|
for (int z = 8; z < (CHUNK_CACHE_WIDTH * CHUNK_WIDTH); z += CHUNK_WIDTH) {
|
||||||
progressStagePercentage = 100 * pp++ / Max;
|
progressStagePercentage = 100 * pp++ / Max;
|
||||||
//printf("level generation progress %d\n", progressStagePercentage);
|
//printf("level generation progress %d\n", progressStagePercentage);
|
||||||
B.start();
|
B.start();
|
||||||
level->getTile(x, 64, z);
|
level->getTile(x, 64, z);
|
||||||
B.stop();
|
B.stop();
|
||||||
L.start();
|
L.start();
|
||||||
if (level->isNew())
|
if (level->isNew())
|
||||||
while (level->updateLights())
|
while (level->updateLights())
|
||||||
;
|
;
|
||||||
L.stop();
|
L.stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
A.stop();
|
A.stop();
|
||||||
level->setUpdateLights(true);
|
level->setUpdateLights(true);
|
||||||
|
|
||||||
@@ -466,33 +466,33 @@ void Minecraft::update() {
|
|||||||
}
|
}
|
||||||
TIMER_POP();
|
TIMER_POP();
|
||||||
|
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
if (gameMode != NULL) gameMode->render(timer.a);
|
if (gameMode != NULL) gameMode->render(timer.a);
|
||||||
TIMER_PUSH("sound");
|
TIMER_PUSH("sound");
|
||||||
soundEngine->update(player, timer.a);
|
soundEngine->update(player, timer.a);
|
||||||
TIMER_POP_PUSH("render");
|
TIMER_POP_PUSH("render");
|
||||||
gameRenderer->render(timer.a);
|
gameRenderer->render(timer.a);
|
||||||
TIMER_POP();
|
TIMER_POP();
|
||||||
#else
|
#else
|
||||||
CThread::sleep(1);
|
CThread::sleep(1);
|
||||||
#endif
|
#endif
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
Multitouch::resetThisUpdate();
|
Multitouch::resetThisUpdate();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
TIMER_POP();
|
TIMER_POP();
|
||||||
checkGlError("Update finished");
|
checkGlError("Update finished");
|
||||||
|
|
||||||
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||||
//#ifndef PLATFORM_DESKTOP
|
//#ifndef PLATFORM_DESKTOP
|
||||||
if (!PerfTimer::enabled) {
|
if (!PerfTimer::enabled) {
|
||||||
PerfTimer::reset();
|
PerfTimer::reset();
|
||||||
PerfTimer::enabled = true;
|
PerfTimer::enabled = true;
|
||||||
}
|
}
|
||||||
_perfRenderer->renderFpsMeter(1);
|
_perfRenderer->renderFpsMeter(1);
|
||||||
checkGlError("render debug");
|
checkGlError("render debug");
|
||||||
//#endif
|
//#endif
|
||||||
} else {
|
} else {
|
||||||
PerfTimer::enabled = false;
|
PerfTimer::enabled = false;
|
||||||
}
|
}
|
||||||
@@ -569,17 +569,17 @@ void Minecraft::tick(int nTick, int maxTick) {
|
|||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
textures->loadAndBindTexture("terrain.png");
|
textures->loadAndBindTexture("terrain.png");
|
||||||
if (!pause && !(screen && !screen->renderGameBehind())) {
|
if (!pause && !(screen && !screen->renderGameBehind())) {
|
||||||
#if !defined(RPI)
|
#if !defined(RPI)
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
if (isSuperFast())
|
if (isSuperFast())
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (nTick == maxTick) {
|
if (nTick == maxTick) {
|
||||||
TIMER_POP_PUSH("textures");
|
TIMER_POP_PUSH("textures");
|
||||||
textures->tick(true);
|
textures->tick(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
TIMER_POP_PUSH("particles");
|
TIMER_POP_PUSH("particles");
|
||||||
if (!pause) {
|
if (!pause) {
|
||||||
@@ -641,8 +641,8 @@ void Minecraft::tickInput() {
|
|||||||
while (Mouse::next()) {
|
while (Mouse::next()) {
|
||||||
//if (Mouse::getButtonState(MouseAction::ACTION_LEFT))
|
//if (Mouse::getButtonState(MouseAction::ACTION_LEFT))
|
||||||
// LOGI("mouse-down-at: %d, %d\n", Mouse::getX(), Mouse::getY());
|
// LOGI("mouse-down-at: %d, %d\n", Mouse::getX(), Mouse::getY());
|
||||||
int passedTime = getTimeMs() - lastTickTime;
|
int passedTime = getTimeMs() - lastTickTime;
|
||||||
if (passedTime > 200) continue; // @note: As long Mouse::clear CLEARS the whole buffer, it's safe to break here
|
if (passedTime > 200) continue; // @note: As long Mouse::clear CLEARS the whole buffer, it's safe to break here
|
||||||
// But since it might be rewritten anyway (and hopefully there aren't a lot of messages, we just continue.
|
// But since it might be rewritten anyway (and hopefully there aren't a lot of messages, we just continue.
|
||||||
|
|
||||||
const MouseAction& e = Mouse::getEvent();
|
const MouseAction& e = Mouse::getEvent();
|
||||||
@@ -673,14 +673,14 @@ void Minecraft::tickInput() {
|
|||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
if (mouseDiggable && options.useMouseForDigging) {
|
if (mouseDiggable && options.useMouseForDigging) {
|
||||||
if (Mouse::getEventButton() == MouseAction::ACTION_LEFT && Mouse::getEventButtonState()) {
|
if (Mouse::getEventButton() == MouseAction::ACTION_LEFT && Mouse::getEventButtonState()) {
|
||||||
handleMouseClick(MouseAction::ACTION_LEFT);
|
handleMouseClick(MouseAction::ACTION_LEFT);
|
||||||
lastClickTick = ticks;
|
lastClickTick = ticks;
|
||||||
}
|
}
|
||||||
if (Mouse::getEventButton() == MouseAction::ACTION_RIGHT && Mouse::getEventButtonState()) {
|
if (Mouse::getEventButton() == MouseAction::ACTION_RIGHT && Mouse::getEventButtonState()) {
|
||||||
handleMouseClick(MouseAction::ACTION_RIGHT);
|
handleMouseClick(MouseAction::ACTION_RIGHT);
|
||||||
lastClickTick = ticks;
|
lastClickTick = ticks;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
@@ -701,20 +701,20 @@ void Minecraft::tickInput() {
|
|||||||
if (slot >= 0 && slot < gui.getNumSlots())
|
if (slot >= 0 && slot < gui.getNumSlots())
|
||||||
player->inventory->selectSlot(slot);
|
player->inventory->selectSlot(slot);
|
||||||
|
|
||||||
#if defined(WIN32)
|
#if defined(WIN32)
|
||||||
if (digit >= 1 && GetAsyncKeyState(VK_CONTROL) < 0) {
|
if (digit >= 1 && GetAsyncKeyState(VK_CONTROL) < 0) {
|
||||||
// Set adventure settings here!
|
// Set adventure settings here!
|
||||||
AdventureSettingsPacket p(level->adventureSettings);
|
AdventureSettingsPacket p(level->adventureSettings);
|
||||||
p.toggle((AdventureSettingsPacket::Flags)(1 << slot));
|
p.toggle((AdventureSettingsPacket::Flags)(1 << slot));
|
||||||
p.fillIn(level->adventureSettings);
|
p.fillIn(level->adventureSettings);
|
||||||
raknetInstance->send(p);
|
raknetInstance->send(p);
|
||||||
}
|
}
|
||||||
if (digit == 0) {
|
if (digit == 0) {
|
||||||
Pos pos((int)player->x, (int)player->y-1, (int)player->z);
|
Pos pos((int)player->x, (int)player->y-1, (int)player->z);
|
||||||
SetSpawnPositionPacket p(pos);
|
SetSpawnPositionPacket p(pos);
|
||||||
raknetInstance->send(p);
|
raknetInstance->send(p);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key == Keyboard::KEY_LEFT_CTRL) {
|
if (key == Keyboard::KEY_LEFT_CTRL) {
|
||||||
@@ -738,7 +738,7 @@ void Minecraft::tickInput() {
|
|||||||
/*
|
/*
|
||||||
ImprovedNoise noise;
|
ImprovedNoise noise;
|
||||||
for (int i = 0; i < 16; ++i)
|
for (int i = 0; i < 16; ++i)
|
||||||
printf("%d\t%f\n", i, noise.grad2(i, 3, 8));
|
printf("%d\t%f\n", i, noise.grad2(i, 3, 8));
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -751,88 +751,88 @@ void Minecraft::tickInput() {
|
|||||||
options.set(OPTIONS_VIEW_DISTANCE, (dst + 1) % 4);
|
options.set(OPTIONS_VIEW_DISTANCE, (dst + 1) % 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CHEATS
|
#ifdef CHEATS
|
||||||
if (key == Keyboard::KEY_U) {
|
if (key == Keyboard::KEY_U) {
|
||||||
onGraphicsReset();
|
onGraphicsReset();
|
||||||
player->heal(100);
|
player->heal(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key == Keyboard::KEY_B || key == 108) // Toggle the game mode
|
||||||
|
setIsCreativeMode(!isCreativeMode());
|
||||||
|
|
||||||
|
if (key == Keyboard::KEY_P) // Step forward in time
|
||||||
|
level->setTime( level->getTime() + 1000);
|
||||||
|
|
||||||
|
if (key == Keyboard::KEY_G) {
|
||||||
|
setScreen(new ArmorScreen());
|
||||||
|
/*
|
||||||
|
std::vector<AABB>& boxs = level->getCubes(NULL, AABB(128.1f, 73, 128.1f, 128.9f, 74.9f, 128.9f));
|
||||||
|
LOGI("boxes: %d\n", (int)boxs.size());
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key == Keyboard::KEY_Y) {
|
||||||
|
textures->reloadAll();
|
||||||
|
player->hurtTo(2);
|
||||||
|
}
|
||||||
|
if (key == Keyboard::KEY_Z || key == 108) {
|
||||||
|
for (int i = 0; i < 1; ++i) {
|
||||||
|
Mob* mob = NULL;
|
||||||
|
int forceId = 0;//MobTypes::Sheep;
|
||||||
|
|
||||||
|
int types[] = {
|
||||||
|
MobTypes::Sheep,
|
||||||
|
MobTypes::Pig,
|
||||||
|
MobTypes::Chicken,
|
||||||
|
MobTypes::Cow,
|
||||||
|
};
|
||||||
|
|
||||||
|
int mobType = (forceId > 0)? forceId : types[Mth::random(sizeof(types) / sizeof(int))];
|
||||||
|
mob = MobFactory::CreateMob(mobType, level);
|
||||||
|
|
||||||
|
//((Animal*)mob)->setAge(-1000);
|
||||||
|
float dx = 4 - 8 * Mth::random() + 4 * Mth::sin(Mth::DEGRAD * player->yRot);
|
||||||
|
float dz = 4 - 8 * Mth::random() + 4 * Mth::cos(Mth::DEGRAD * player->yRot);
|
||||||
|
if (mob && !MobSpawner::addMob(level, mob, player->x + dx, player->y, player->z + dz, Mth::random()*360, 0, true))
|
||||||
|
delete mob;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (key == Keyboard::KEY_B || key == 108) // Toggle the game mode
|
if (key == Keyboard::KEY_X) {
|
||||||
setIsCreativeMode(!isCreativeMode());
|
const EntityList& entities = level->getAllEntities();
|
||||||
|
for (int i = entities.size()-1; i >= 0; --i) {
|
||||||
if (key == Keyboard::KEY_P) // Step forward in time
|
Entity* e = entities[i];
|
||||||
level->setTime( level->getTime() + 1000);
|
if (!e->isPlayer())
|
||||||
|
level->removeEntity(e);
|
||||||
if (key == Keyboard::KEY_G) {
|
|
||||||
setScreen(new ArmorScreen());
|
|
||||||
/*
|
|
||||||
std::vector<AABB>& boxs = level->getCubes(NULL, AABB(128.1f, 73, 128.1f, 128.9f, 74.9f, 128.9f));
|
|
||||||
LOGI("boxes: %d\n", (int)boxs.size());
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (key == Keyboard::KEY_Y) {
|
if (key == Keyboard::KEY_C /*|| key == 4*/) {
|
||||||
textures->reloadAll();
|
player->inventory->clearInventoryWithDefault();
|
||||||
player->hurtTo(2);
|
// @todo: Add saving here for benchmarking
|
||||||
}
|
}
|
||||||
if (key == Keyboard::KEY_Z || key == 108) {
|
if (key == Keyboard::KEY_H) {
|
||||||
for (int i = 0; i < 1; ++i) {
|
setScreen( new PrerenderTilesScreen() );
|
||||||
Mob* mob = NULL;
|
}
|
||||||
int forceId = 0;//MobTypes::Sheep;
|
|
||||||
|
|
||||||
int types[] = {
|
if (key == Keyboard::KEY_O) {
|
||||||
MobTypes::Sheep,
|
for (int i = Inventory::MAX_SELECTION_SIZE; i < player->inventory->getContainerSize(); ++i)
|
||||||
MobTypes::Pig,
|
if (player->inventory->getItem(i))
|
||||||
MobTypes::Chicken,
|
player->inventory->dropSlot(i, false);
|
||||||
MobTypes::Cow,
|
}
|
||||||
};
|
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() );
|
||||||
|
}
|
||||||
|
|
||||||
int mobType = (forceId > 0)? forceId : types[Mth::random(sizeof(types) / sizeof(int))];
|
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||||
mob = MobFactory::CreateMob(mobType, level);
|
if (key >= '0' && key <= '9') {
|
||||||
|
_perfRenderer->debugFpsMeterKeyPress(key - '0');
|
||||||
//((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) {
|
#endif
|
||||||
const EntityList& entities = level->getAllEntities();
|
|
||||||
for (int i = entities.size()-1; i >= 0; --i) {
|
|
||||||
Entity* e = entities[i];
|
|
||||||
if (!e->isPlayer())
|
|
||||||
level->removeEntity(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == Keyboard::KEY_C /*|| key == 4*/) {
|
|
||||||
player->inventory->clearInventoryWithDefault();
|
|
||||||
// @todo: Add saving here for benchmarking
|
|
||||||
}
|
|
||||||
if (key == Keyboard::KEY_H) {
|
|
||||||
setScreen( new PrerenderTilesScreen() );
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == Keyboard::KEY_O) {
|
|
||||||
for (int i = Inventory::MAX_SELECTION_SIZE; i < player->inventory->getContainerSize(); ++i)
|
|
||||||
if (player->inventory->getItem(i))
|
|
||||||
player->inventory->dropSlot(i, false);
|
|
||||||
}
|
|
||||||
if (key == Keyboard::KEY_M) {
|
|
||||||
Difficulty difficulty = (Difficulty)options.getIntValue(OPTIONS_DIFFICULTY);
|
|
||||||
options.set(OPTIONS_DIFFICULTY, (difficulty == Difficulty::PEACEFUL)?
|
|
||||||
Difficulty::NORMAL : Difficulty::PEACEFUL);
|
|
||||||
//setIsCreativeMode( !isCreativeMode() );
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
|
||||||
if (key >= '0' && key <= '9') {
|
|
||||||
_perfRenderer->debugFpsMeterKeyPress(key - '0');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||||
if (key >= '0' && key <= '9') {
|
if (key >= '0' && key <= '9') {
|
||||||
@@ -843,33 +843,35 @@ void Minecraft::tickInput() {
|
|||||||
if (key == Keyboard::KEY_ESCAPE)
|
if (key == Keyboard::KEY_ESCAPE)
|
||||||
pauseGame(false);
|
pauseGame(false);
|
||||||
|
|
||||||
#ifndef OPENGL_ES
|
#ifdef PLATFORM_DESKTOP
|
||||||
if (key == Keyboard::KEY_P) {
|
if (key == Keyboard::KEY_P) {
|
||||||
static bool isWireFrame = false;
|
static bool isWireFrame = false;
|
||||||
isWireFrame = !isWireFrame;
|
isWireFrame = !isWireFrame;
|
||||||
glPolygonMode(GL_FRONT, isWireFrame? GL_LINE : GL_FILL);
|
glPolygonMode(GL_FRONT, isWireFrame? GL_LINE : GL_FILL);
|
||||||
//glPolygonMode(GL_BACK, isWireFrame? GL_LINE : GL_FILL);
|
//glPolygonMode(GL_BACK, isWireFrame? GL_LINE : GL_FILL);
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#ifdef WIN32
|
|
||||||
if (key == Keyboard::KEY_M) {
|
|
||||||
for (int i = 0; i < 5 * SharedConstants::TicksPerSecond; ++i)
|
|
||||||
level->tick();
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
#ifdef WIN32
|
||||||
|
if (key == Keyboard::KEY_M) {
|
||||||
|
for (int i = 0; i < 5 * SharedConstants::TicksPerSecond; ++i)
|
||||||
|
level->tick();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TIMER_POP_PUSH("handlemouse");
|
TIMER_POP_PUSH("handlemouse");
|
||||||
|
|
||||||
static bool prevMouseDownLeft = false;
|
static bool prevMouseDownLeft = false;
|
||||||
|
|
||||||
if (Mouse::getButtonState(MouseAction::ACTION_LEFT) == 0) {
|
if (!useTouchscreen()) {
|
||||||
gameMode->stopDestroyBlock();
|
if (Mouse::getButtonState(MouseAction::ACTION_LEFT) == 0) {
|
||||||
}
|
gameMode->stopDestroyBlock();
|
||||||
|
}
|
||||||
|
|
||||||
if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) {
|
if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) {
|
||||||
gameMode->releaseUsingItem(player);
|
gameMode->releaseUsingItem(player);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (useTouchscreen()) {
|
if (useTouchscreen()) {
|
||||||
@@ -932,35 +934,35 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
|
|||||||
}
|
}
|
||||||
if(player->isUsingItem())
|
if(player->isUsingItem())
|
||||||
return;
|
return;
|
||||||
bool mayUse = true;
|
bool mayUse = true;
|
||||||
|
|
||||||
if (!hitResult.isHit()) {
|
if (!hitResult.isHit()) {
|
||||||
if (action->isRemove() && !gameMode->isCreativeType()) {
|
if (action->isRemove() && !gameMode->isCreativeType()) {
|
||||||
missTime = 10;
|
missTime = 10;
|
||||||
}
|
}
|
||||||
} else if (hitResult.type == ENTITY) {
|
} else if (hitResult.type == ENTITY) {
|
||||||
if (action->isAttack()) {
|
if (action->isAttack()) {
|
||||||
player->swing();
|
player->swing();
|
||||||
//LOGI("attacking!\n");
|
//LOGI("attacking!\n");
|
||||||
InteractPacket packet(InteractPacket::Attack, player->entityId, hitResult.entity->entityId);
|
InteractPacket packet(InteractPacket::Attack, player->entityId, hitResult.entity->entityId);
|
||||||
raknetInstance->send(packet);
|
raknetInstance->send(packet);
|
||||||
gameMode->attack(player, hitResult.entity);
|
gameMode->attack(player, hitResult.entity);
|
||||||
} else if (action->isInteract()) {
|
} else if (action->isInteract()) {
|
||||||
if (hitResult.entity->interactPreventDefault())
|
if (hitResult.entity->interactPreventDefault())
|
||||||
mayUse = false;
|
mayUse = false;
|
||||||
//LOGI("interacting!\n");
|
//LOGI("interacting!\n");
|
||||||
InteractPacket packet(InteractPacket::Interact, player->entityId, hitResult.entity->entityId);
|
InteractPacket packet(InteractPacket::Interact, player->entityId, hitResult.entity->entityId);
|
||||||
raknetInstance->send(packet);
|
raknetInstance->send(packet);
|
||||||
gameMode->interact(player, hitResult.entity);
|
gameMode->interact(player, hitResult.entity);
|
||||||
}
|
}
|
||||||
} else if (hitResult.type == TILE) {
|
} else if (hitResult.type == TILE) {
|
||||||
int x = hitResult.x;
|
int x = hitResult.x;
|
||||||
int y = hitResult.y;
|
int y = hitResult.y;
|
||||||
int z = hitResult.z;
|
int z = hitResult.z;
|
||||||
int face = hitResult.f;
|
int face = hitResult.f;
|
||||||
|
|
||||||
int oldTileId = level->getTile(x, y, z);
|
int oldTileId = level->getTile(x, y, z);
|
||||||
Tile* oldTile = Tile::tiles[oldTileId];
|
Tile* oldTile = Tile::tiles[oldTileId];
|
||||||
|
|
||||||
//bool tryDestroyBlock = false;
|
//bool tryDestroyBlock = false;
|
||||||
|
|
||||||
@@ -969,8 +971,8 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
//LOGI("tile: %s - %d, %d, %d. b: %f - %f\n", oldTile->getDescriptionId().c_str(), x, y, z, oldTile->getBrightness(level, x, y, z), oldTile->getBrightness(level, x, y+1, z));
|
//LOGI("tile: %s - %d, %d, %d. b: %f - %f\n", oldTile->getDescriptionId().c_str(), x, y, z, oldTile->getBrightness(level, x, y, z), oldTile->getBrightness(level, x, y+1, z));
|
||||||
level->extinguishFire(x, y, z, hitResult.f);
|
level->extinguishFire(x, y, z, hitResult.f);
|
||||||
|
|
||||||
if (action->isFirstRemove()) {
|
if (action->isFirstRemove()) {
|
||||||
gameMode->startDestroyBlock(x, y, z, hitResult.f);
|
gameMode->startDestroyBlock(x, y, z, hitResult.f);
|
||||||
} else {
|
} else {
|
||||||
@@ -979,16 +981,16 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
|
|||||||
|
|
||||||
particleEngine->crack(x, y, z, hitResult.f);
|
particleEngine->crack(x, y, z, hitResult.f);
|
||||||
player->swing();
|
player->swing();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ItemInstance* item = player->inventory->getSelected();
|
ItemInstance* item = player->inventory->getSelected();
|
||||||
if (gameMode->useItemOn(player, level, item, x, y, z, face, hitResult.pos)) {
|
if (gameMode->useItemOn(player, level, item, x, y, z, face, hitResult.pos)) {
|
||||||
mayUse = false;
|
mayUse = false;
|
||||||
player->swing();
|
player->swing();
|
||||||
#ifdef RPI
|
#ifdef RPI
|
||||||
} else if (item && item->id == ((Item*)Item::sword_iron)->id) {
|
} else if (item && item->id == ((Item*)Item::sword_iron)->id) {
|
||||||
player->swing();
|
player->swing();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (item && item->count <= 0) {
|
if (item && item->count <= 0) {
|
||||||
player->inventory->clearSlot(player->inventory->selected);
|
player->inventory->clearSlot(player->inventory->selected);
|
||||||
@@ -1014,7 +1016,7 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
|
|||||||
|
|
||||||
bool Minecraft::isOnlineClient()
|
bool Minecraft::isOnlineClient()
|
||||||
{
|
{
|
||||||
return (level != NULL && level->isClientSide);
|
return (level != NULL && level->isClientSide);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Minecraft::isOnline()
|
bool Minecraft::isOnline()
|
||||||
@@ -1081,8 +1083,8 @@ void Minecraft::setScreen( Screen* screen )
|
|||||||
|
|
||||||
if (screen->isInGameScreen() && level) {
|
if (screen->isInGameScreen() && level) {
|
||||||
level->saveLevelData();
|
level->saveLevelData();
|
||||||
level->saveGame();
|
level->saveGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
//noRender = false;
|
//noRender = false;
|
||||||
} else {
|
} else {
|
||||||
@@ -1119,10 +1121,13 @@ void Minecraft::releaseMouse()
|
|||||||
|
|
||||||
bool Minecraft::useTouchscreen() {
|
bool Minecraft::useTouchscreen() {
|
||||||
#if defined(TARGET_OS_IPHONE)
|
#if defined(TARGET_OS_IPHONE)
|
||||||
return true;
|
return true;
|
||||||
#elif defined(RPI)
|
#elif defined(RPI)
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
if (options.getBooleanValue(OPTIONS_TOUCH_OVERRIDE)) {
|
||||||
|
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN);
|
||||||
|
}
|
||||||
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen;
|
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen;
|
||||||
}
|
}
|
||||||
bool Minecraft::supportNonTouchScreen() {
|
bool Minecraft::supportNonTouchScreen() {
|
||||||
@@ -1142,7 +1147,8 @@ void Minecraft::init()
|
|||||||
textures->addDynamicTexture(new WaterSideTexture());
|
textures->addDynamicTexture(new WaterSideTexture());
|
||||||
textures->addDynamicTexture(new LavaTexture());
|
textures->addDynamicTexture(new LavaTexture());
|
||||||
textures->addDynamicTexture(new LavaSideTexture());
|
textures->addDynamicTexture(new LavaSideTexture());
|
||||||
textures->addDynamicTexture(new FireTexture());
|
textures->addDynamicTexture(new FireTexture(0));
|
||||||
|
textures->addDynamicTexture(new FireTexture(1));
|
||||||
gui.texturesLoaded(textures);
|
gui.texturesLoaded(textures);
|
||||||
|
|
||||||
levelRenderer = new LevelRenderer(this);
|
levelRenderer = new LevelRenderer(this);
|
||||||
@@ -1150,7 +1156,7 @@ void Minecraft::init()
|
|||||||
particleEngine = new ParticleEngine(level, textures);
|
particleEngine = new ParticleEngine(level, textures);
|
||||||
|
|
||||||
// 4j's code for reference
|
// 4j's code for reference
|
||||||
// FoliageColor::init(textures->loadTexturePixels(L"misc/foliagecolor.png"));
|
// FoliageColor::init(textures->loadTexturePixels(L"misc/foliagecolor.png"));
|
||||||
|
|
||||||
|
|
||||||
// my code
|
// my code
|
||||||
@@ -1162,7 +1168,7 @@ void Minecraft::init()
|
|||||||
TextureId grassId = (textures->loadTexture("misc/grasscolor.png")); // loading the uh png for foliage color
|
TextureId grassId = (textures->loadTexture("misc/grasscolor.png")); // loading the uh png for foliage color
|
||||||
int* grassPixels = textures->loadTexturePixels(grassId, "misc/grasscolor.png");
|
int* grassPixels = textures->loadTexturePixels(grassId, "misc/grasscolor.png");
|
||||||
GrassColor::init(grassPixels);
|
GrassColor::init(grassPixels);
|
||||||
|
|
||||||
bool tint = options.getBooleanValue(OPTIONS_FOLIAGE_TINT); // finally, toggleable foliage color
|
bool tint = options.getBooleanValue(OPTIONS_FOLIAGE_TINT); // finally, toggleable foliage color
|
||||||
FoliageColor::setUseTint(tint);
|
FoliageColor::setUseTint(tint);
|
||||||
GrassColor::setUseTint(tint);
|
GrassColor::setUseTint(tint);
|
||||||
@@ -1187,59 +1193,83 @@ void Minecraft::init()
|
|||||||
|
|
||||||
void Minecraft::setSize(int w, int h) {
|
void Minecraft::setSize(int w, int h) {
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
transformResolution(&w, &h);
|
transformResolution(&w, &h);
|
||||||
|
|
||||||
width = w;
|
width = w;
|
||||||
height = h;
|
height = h;
|
||||||
|
int screenWidth;
|
||||||
int guiScale = options.getIntValue(OPTIONS_GUI_SCALE);
|
int screenHeight;
|
||||||
|
//#ifdef PLATFORM_DESKTOP
|
||||||
// determine gui scale, optionally overriding auto
|
if (options.getBooleanValue(OPTIONS_WINDOW_SCALE)){ // scales with resolution using a formula instead of having hardcoded if checks
|
||||||
if (guiScale != 0) {
|
int guiScale = options.getIntValue(OPTIONS_GUI_SCALE);
|
||||||
// manual selection: 1->small, 2->medium, 3->large, 4->larger, 5->largest
|
if (guiScale == 0) {
|
||||||
switch (guiScale) {
|
guiScale = 1000;
|
||||||
case 1: Gui::GuiScale = 2.0f; break;
|
|
||||||
case 2: Gui::GuiScale = 3.0f; break;
|
|
||||||
case 3: Gui::GuiScale = 4.0f; break;
|
|
||||||
case 4: Gui::GuiScale = 5.0f; break;
|
|
||||||
case 5: Gui::GuiScale = 6.0f; break;
|
|
||||||
default: Gui::GuiScale = 1.0f; break; // auto
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// determine gui scale, optionally overriding auto
|
||||||
|
|
||||||
|
|
||||||
|
Gui::GuiScale = (float)Mth::Min(guiScale, Mth::Max(1, Mth::Min(width / 320, height / 240)));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// auto compute from resolution
|
|
||||||
if (width >= 1000) {
|
|
||||||
#ifdef __APPLE__
|
int guiScale = options.getIntValue(OPTIONS_GUI_SCALE);
|
||||||
Gui::GuiScale = (width > 2000)? 8.0f : 4.0f;
|
|
||||||
#else
|
// determine gui scale, optionally overriding auto
|
||||||
Gui::GuiScale = 4.0f;
|
if (guiScale != 0) {
|
||||||
#endif
|
// manual selection: 1->tiny, 2->small, 3->medium, 4->large, 5->larger, 6->largest
|
||||||
}
|
switch (guiScale) {
|
||||||
else if (width >= 800) {
|
case 1: Gui::GuiScale = 1.0f; break;
|
||||||
|
case 2: Gui::GuiScale = 2.0f; break;
|
||||||
|
case 3: Gui::GuiScale = 3.0f; break;
|
||||||
|
case 4: Gui::GuiScale = 4.0f; break;
|
||||||
|
case 5: Gui::GuiScale = 5.0f; break;
|
||||||
|
case 6: Gui::GuiScale = 6.0f; break;
|
||||||
|
default: Gui::GuiScale = 1.0f; break; // auto
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// auto compute from resolution
|
||||||
|
if (width >= 1000) {
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
Gui::GuiScale = 4.0f;
|
Gui::GuiScale = (width > 2000)? 8.0f : 4.0f;
|
||||||
#else
|
#else
|
||||||
Gui::GuiScale = 3.0f;
|
Gui::GuiScale = 4.0f;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if (width >= 400)
|
else if (width >= 800) {
|
||||||
Gui::GuiScale = 2.0f;
|
#ifdef __APPLE__
|
||||||
else
|
Gui::GuiScale = 4.0f;
|
||||||
Gui::GuiScale = 1.0f;
|
#else
|
||||||
|
Gui::GuiScale = 3.0f;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if (width >= 400)
|
||||||
|
Gui::GuiScale = 2.0f;
|
||||||
|
else
|
||||||
|
Gui::GuiScale = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// if (platform()) {
|
||||||
|
// float pixelsPerMillimeter = options.getProgressValue(&Option::PIXELS_PER_MILLIMETER);
|
||||||
|
// pixelCalc.setPixelsPerMillimeter(pixelsPerMillimeter);
|
||||||
|
// pixelCalcUi.setPixelsPerMillimeter(pixelsPerMillimeter * Gui::InvGuiScale);
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Gui::InvGuiScale = 1.0f / Gui::GuiScale;
|
|
||||||
int screenWidth = (int)(width * Gui::InvGuiScale);
|
|
||||||
int screenHeight = (int)(height * Gui::InvGuiScale);
|
|
||||||
|
|
||||||
// if (platform()) {
|
Gui::InvGuiScale = 1.0f / Gui::GuiScale;
|
||||||
// float pixelsPerMillimeter = options.getProgressValue(&Option::PIXELS_PER_MILLIMETER);
|
screenWidth = (int)(width * Gui::InvGuiScale);
|
||||||
// pixelCalc.setPixelsPerMillimeter(pixelsPerMillimeter);
|
screenHeight = (int)(height * Gui::InvGuiScale);
|
||||||
// pixelCalcUi.setPixelsPerMillimeter(pixelsPerMillimeter * Gui::InvGuiScale);
|
|
||||||
// }
|
|
||||||
|
|
||||||
Config config = createConfig(this);
|
Config config = createConfig(this);
|
||||||
gui.onConfigChanged(config);
|
gui.onConfigChanged(config);
|
||||||
|
|
||||||
if (screen)
|
if (screen)
|
||||||
screen->setSize(screenWidth, screenHeight);
|
screen->setSize(screenWidth, screenHeight);
|
||||||
|
|
||||||
@@ -1257,20 +1287,19 @@ 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();
|
|
||||||
|
|
||||||
if ((wasTouchscreen != useTouchscreen()) || (inputHolder == 0))
|
bool useTouch = useTouchscreen();
|
||||||
_reloadInput();
|
_reloadInput();
|
||||||
|
|
||||||
|
gui.refreshTouchState();
|
||||||
|
|
||||||
// user->name = options.username;
|
// user->name = options.username;
|
||||||
|
|
||||||
LOGI("Reloading-options\n");
|
LOGI("Reloading-options (touch=%d)\n", useTouch);
|
||||||
|
|
||||||
// @todo @fix Android and iOS behaves a bit differently when leaving
|
// @todo @fix Android and iOS behaves a bit differently when leaving
|
||||||
// an options screen (Android recreates OpenGL surface)
|
// an options screen (Android recreates OpenGL surface)
|
||||||
setSize(width, height);
|
setSize(width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Minecraft::_reloadInput() {
|
void Minecraft::_reloadInput() {
|
||||||
@@ -1281,17 +1310,17 @@ void Minecraft::_reloadInput() {
|
|||||||
if (useTouchHolder) {
|
if (useTouchHolder) {
|
||||||
inputHolder = new TouchInputHolder(this, &options);
|
inputHolder = new TouchInputHolder(this, &options);
|
||||||
} else {
|
} else {
|
||||||
#if defined(ANDROID) || defined(__APPLE__)
|
#if defined(ANDROID) || defined(__APPLE__)
|
||||||
inputHolder = new CustomInputHolder(
|
inputHolder = new CustomInputHolder(
|
||||||
new XperiaPlayInput(&options),
|
new XperiaPlayInput(&options),
|
||||||
new ControllerTurnInput(2, ControllerTurnInput::MODE_DELTA),
|
new ControllerTurnInput(2, ControllerTurnInput::MODE_DELTA),
|
||||||
new IBuildInput());
|
new IBuildInput());
|
||||||
#else
|
#else
|
||||||
inputHolder = new CustomInputHolder(
|
inputHolder = new CustomInputHolder(
|
||||||
new KeyboardInput(&options),
|
new KeyboardInput(&options),
|
||||||
new MouseTurnInput(MouseTurnInput::MODE_DELTA, width/2, height/2),
|
new MouseTurnInput(MouseTurnInput::MODE_DELTA, width/2, height/2),
|
||||||
new MouseBuildInput());
|
new MouseBuildInput());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
mouseHandler.setTurnInput(inputHolder->getTurnInput());
|
mouseHandler.setTurnInput(inputHolder->getTurnInput());
|
||||||
@@ -1334,7 +1363,7 @@ bool Minecraft::joinMultiplayerFromString( const std::string& server )
|
|||||||
{
|
{
|
||||||
std::string ip = "";
|
std::string ip = "";
|
||||||
std::string port = "19132";
|
std::string port = "19132";
|
||||||
|
|
||||||
size_t pos = server.find(":");
|
size_t pos = server.find(":");
|
||||||
|
|
||||||
if (pos != std::string::npos) {
|
if (pos != std::string::npos) {
|
||||||
@@ -1345,7 +1374,7 @@ bool Minecraft::joinMultiplayerFromString( const std::string& server )
|
|||||||
}
|
}
|
||||||
|
|
||||||
printf("%s \n", port.c_str());
|
printf("%s \n", port.c_str());
|
||||||
|
|
||||||
if (isLookingForMultiplayer && netCallback) {
|
if (isLookingForMultiplayer && netCallback) {
|
||||||
isLookingForMultiplayer = false;
|
isLookingForMultiplayer = false;
|
||||||
printf("test");
|
printf("test");
|
||||||
@@ -1356,18 +1385,18 @@ bool Minecraft::joinMultiplayerFromString( const std::string& server )
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Minecraft::hostMultiplayer(int port) {
|
void Minecraft::hostMultiplayer(int port) {
|
||||||
// Tear down last instance
|
// Tear down last instance
|
||||||
raknetInstance->disconnect();
|
raknetInstance->disconnect();
|
||||||
delete netCallback;
|
delete netCallback;
|
||||||
netCallback = NULL;
|
netCallback = NULL;
|
||||||
|
|
||||||
#if !defined(NO_NETWORK)
|
#if !defined(NO_NETWORK)
|
||||||
netCallback = new ServerSideNetworkHandler(this, raknetInstance);
|
netCallback = new ServerSideNetworkHandler(this, raknetInstance);
|
||||||
#ifdef STANDALONE_SERVER
|
#ifdef STANDALONE_SERVER
|
||||||
raknetInstance->host("Server", port, 16);
|
raknetInstance->host("Server", port, 16);
|
||||||
#else
|
#else
|
||||||
raknetInstance->host(options.getStringValue(OPTIONS_USERNAME), port);
|
raknetInstance->host(options.getStringValue(OPTIONS_USERNAME), port);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1421,9 +1450,9 @@ void Minecraft::_levelGenerated()
|
|||||||
player->resetPos(false);
|
player->resetPos(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (level && level->dimension) {
|
if (level && level->dimension) {
|
||||||
|
|
||||||
level->dimension->FogType = options.getIntValue(OPTIONS_FOG_TYPE);
|
level->dimension->FogType = options.getIntValue(OPTIONS_FOG_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1454,14 +1483,14 @@ void Minecraft::_levelGenerated()
|
|||||||
|
|
||||||
std::string Minecraft::gatherStats1() {
|
std::string Minecraft::gatherStats1() {
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
return levelRenderer->gatherStats1();
|
return levelRenderer->gatherStats1();
|
||||||
#endif
|
#endif
|
||||||
return "Blank";
|
return "Blank";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Minecraft::gatherStats2() {
|
std::string Minecraft::gatherStats2() {
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
return levelRenderer->gatherStats2();
|
return levelRenderer->gatherStats2();
|
||||||
#endif
|
#endif
|
||||||
return "Blank";
|
return "Blank";
|
||||||
}
|
}
|
||||||
@@ -1474,7 +1503,7 @@ std::string Minecraft::gatherStats3() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string Minecraft::gatherStats4() {
|
std::string Minecraft::gatherStats4() {
|
||||||
return level->gatherChunkSourceStats();
|
return level->gatherChunkSourceStats();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1527,7 +1556,7 @@ void Minecraft::onGraphicsReset()
|
|||||||
{
|
{
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
textures->clear();
|
textures->clear();
|
||||||
|
|
||||||
font->onGraphicsReset();
|
font->onGraphicsReset();
|
||||||
gui.onGraphicsReset();
|
gui.onGraphicsReset();
|
||||||
|
|
||||||
@@ -1566,12 +1595,12 @@ LevelStorageSource* Minecraft::getLevelSource()
|
|||||||
|
|
||||||
void Minecraft::audioEngineOn() {
|
void Minecraft::audioEngineOn() {
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
soundEngine->enable(true);
|
soundEngine->enable(true);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
void Minecraft::audioEngineOff() {
|
void Minecraft::audioEngineOff() {
|
||||||
#ifndef STANDALONE_SERVER
|
#ifndef STANDALONE_SERVER
|
||||||
soundEngine->enable(false);
|
soundEngine->enable(false);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1642,17 +1671,17 @@ void Minecraft::optionUpdated(OptionId option, bool value ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Minecraft::optionUpdated(OptionId option, float value ) {
|
void Minecraft::optionUpdated(OptionId option, float value ) {
|
||||||
// #ifndef STANDALONE_SERVER
|
// #ifndef STANDALONE_SERVER
|
||||||
// if(option == OPTIONS_PIXELS_PER_MILLIMETER) {
|
// if(option == OPTIONS_PIXELS_PER_MILLIMETER) {
|
||||||
// pixelCalcUi.setPixelsPerMillimeter(value * Gui::InvGuiScale);
|
// pixelCalcUi.setPixelsPerMillimeter(value * Gui::InvGuiScale);
|
||||||
// pixelCalc.setPixelsPerMillimeter(value);
|
// pixelCalc.setPixelsPerMillimeter(value);
|
||||||
// }
|
// }
|
||||||
// #endif
|
// #endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Minecraft::optionUpdated(OptionId option, int value ) {
|
void Minecraft::optionUpdated(OptionId option, int value ) {
|
||||||
if(option == OPTIONS_GUI_SCALE) {
|
if(option == OPTIONS_GUI_SCALE) {
|
||||||
// reapply screen scaling using current window size
|
// reapply screen scaling using current window size
|
||||||
setSize(width, height);
|
setSize(width, height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,3 +22,5 @@ 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,6 +30,7 @@ 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, 5);
|
OptionInt guiScale("guiScale", 0, 0, 6);
|
||||||
|
|
||||||
OptionString skin("skin", "Default");
|
OptionString skin("skin", "Default");
|
||||||
|
|
||||||
#ifdef RPI
|
#ifdef RPI
|
||||||
OptionString username("username", "StevePi");
|
OptionString username("username", "test");
|
||||||
#else
|
#else
|
||||||
OptionString username("username", "Steve");
|
OptionString username("username", "test");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
OptionBool destroyVibration("destroyVibration", true);
|
OptionBool destroyVibration("destroyVibration", true);
|
||||||
@@ -64,6 +64,8 @@ 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);
|
||||||
@@ -82,6 +84,10 @@ OptionBool restoredAnims("restoredAnims", true);
|
|||||||
|
|
||||||
OptionInt debugStyle("debugStyle", 0, 0, 1);
|
OptionInt debugStyle("debugStyle", 0, 0, 1);
|
||||||
|
|
||||||
|
OptionInt menuStyle("menuStyle",0, 0, 2);
|
||||||
|
|
||||||
|
OptionBool windowScale("windowScale", false);
|
||||||
|
|
||||||
OptionInt keyForward("key.forward", Keyboard::KEY_W);
|
OptionInt keyForward("key.forward", Keyboard::KEY_W);
|
||||||
OptionInt keyLeft("key.left", Keyboard::KEY_A);
|
OptionInt keyLeft("key.left", Keyboard::KEY_A);
|
||||||
OptionInt keyBack("key.back", Keyboard::KEY_S);
|
OptionInt keyBack("key.back", Keyboard::KEY_S);
|
||||||
@@ -134,6 +140,7 @@ void Options::initTable() {
|
|||||||
|
|
||||||
|
|
||||||
m_options[OPTIONS_GUI_SCALE] = &guiScale;
|
m_options[OPTIONS_GUI_SCALE] = &guiScale;
|
||||||
|
m_options[OPTIONS_WINDOW_SCALE] = &windowScale;
|
||||||
|
|
||||||
m_options[OPTIONS_SKIN] = &skin;
|
m_options[OPTIONS_SKIN] = &skin;
|
||||||
m_options[OPTIONS_USERNAME] = &username;
|
m_options[OPTIONS_USERNAME] = &username;
|
||||||
@@ -168,8 +175,12 @@ void Options::initTable() {
|
|||||||
|
|
||||||
m_options[OPTIONS_RESTORED_ANIMS] = &restoredAnims;
|
m_options[OPTIONS_RESTORED_ANIMS] = &restoredAnims;
|
||||||
|
|
||||||
|
m_options[OPTIONS_TOUCH_OVERRIDE] = &touchOverride;
|
||||||
|
|
||||||
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
|
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
|
||||||
|
|
||||||
|
m_options[OPTIONS_MENU_STYLE] = &menuStyle;
|
||||||
|
|
||||||
m_options[OPTIONS_KEY_FORWARD] = &keyForward;
|
m_options[OPTIONS_KEY_FORWARD] = &keyForward;
|
||||||
m_options[OPTIONS_KEY_LEFT] = &keyLeft;
|
m_options[OPTIONS_KEY_LEFT] = &keyLeft;
|
||||||
m_options[OPTIONS_KEY_BACK] = &keyBack;
|
m_options[OPTIONS_KEY_BACK] = &keyBack;
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ enum OptionId {
|
|||||||
OPTIONS_BAR_ON_TOP,
|
OPTIONS_BAR_ON_TOP,
|
||||||
OPTIONS_ALLOW_SPRINT,
|
OPTIONS_ALLOW_SPRINT,
|
||||||
OPTIONS_AUTOJUMP,
|
OPTIONS_AUTOJUMP,
|
||||||
|
OPTIONS_WINDOW_SCALE,
|
||||||
|
|
||||||
// Graphics
|
// Graphics
|
||||||
OPTIONS_RENDER_DEBUG,
|
OPTIONS_RENDER_DEBUG,
|
||||||
@@ -51,6 +52,7 @@ enum OptionId {
|
|||||||
OPTIONS_FANCY_GRAPHICS,
|
OPTIONS_FANCY_GRAPHICS,
|
||||||
OPTIONS_NORMAL_LIGHTING,
|
OPTIONS_NORMAL_LIGHTING,
|
||||||
|
|
||||||
|
|
||||||
// Cheats / debug
|
// Cheats / debug
|
||||||
OPTIONS_FLY_SPEED,
|
OPTIONS_FLY_SPEED,
|
||||||
OPTIONS_CAMERA_SPEED,
|
OPTIONS_CAMERA_SPEED,
|
||||||
@@ -90,11 +92,14 @@ enum OptionId {
|
|||||||
OPTIONS_FOG_TYPE,
|
OPTIONS_FOG_TYPE,
|
||||||
OPTIONS_JAVA_HUD,
|
OPTIONS_JAVA_HUD,
|
||||||
OPTIONS_RESTORED_ANIMS,
|
OPTIONS_RESTORED_ANIMS,
|
||||||
|
OPTIONS_TOUCH_OVERRIDE,
|
||||||
OPTIONS_TINTED_SIDE,
|
OPTIONS_TINTED_SIDE,
|
||||||
OPTIONS_BETA_SKY,
|
OPTIONS_BETA_SKY,
|
||||||
OPTIONS_BEAUTIFUL_SKY,
|
OPTIONS_BEAUTIFUL_SKY,
|
||||||
OPTIONS_VIGNETTE,
|
OPTIONS_VIGNETTE,
|
||||||
OPTIONS_DEBUG_STYLE,
|
OPTIONS_DEBUG_STYLE,
|
||||||
|
OPTIONS_COMPLETE_LIGHTING,
|
||||||
|
OPTIONS_MENU_STYLE,
|
||||||
// Should be last!
|
// Should be last!
|
||||||
OPTIONS_COUNT
|
OPTIONS_COUNT
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -423,6 +423,10 @@ void Gui::inventoryUpdated() {
|
|||||||
_inventoryNeedsUpdate = true;
|
_inventoryNeedsUpdate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Gui::refreshTouchState() {
|
||||||
|
_openInventorySlot = minecraft->useTouchscreen();
|
||||||
|
}
|
||||||
|
|
||||||
void Gui::onGraphicsReset() {
|
void Gui::onGraphicsReset() {
|
||||||
inventoryUpdated();
|
inventoryUpdated();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ 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,6 +35,17 @@ 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,6 +13,7 @@ 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,14 +6,36 @@
|
|||||||
#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;
|
||||||
|
|
||||||
@@ -22,16 +44,109 @@ void OptionsGroup::setupPositions() {
|
|||||||
(*it)->setupPositions();
|
(*it)->setupPositions();
|
||||||
curY += (*it)->height + 3;
|
curY += (*it)->height + 3;
|
||||||
}
|
}
|
||||||
height = curY;
|
curY += bottomPadding;
|
||||||
|
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,7 +17,12 @@ 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);
|
||||||
@@ -27,6 +32,18 @@ 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,11 +27,12 @@ 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.small"); break;
|
case 1: scaleText = I18n::get("options.guiScale.tiny"); break;
|
||||||
case 2: scaleText = I18n::get("options.guiScale.medium"); break;
|
case 2: scaleText = I18n::get("options.guiScale.small"); break;
|
||||||
case 3: scaleText = I18n::get("options.guiScale.large"); break;
|
case 3: scaleText = I18n::get("options.guiScale.medium"); break;
|
||||||
case 4: scaleText = I18n::get("options.guiScale.larger"); break;
|
case 4: scaleText = I18n::get("options.guiScale.large"); break;
|
||||||
case 5: scaleText = I18n::get("options.guiScale.largest"); break;
|
case 5: scaleText = I18n::get("options.guiScale.larger"); 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;
|
||||||
@@ -56,6 +57,28 @@ void OptionsItem::render( Minecraft* minecraft, int xm, int ym ) {
|
|||||||
}
|
}
|
||||||
text += ": " + scaleText;
|
text += ": " + scaleText;
|
||||||
}
|
}
|
||||||
|
if (m_optionId == OPTIONS_MENU_STYLE) {
|
||||||
|
int value = minecraft->options.getIntValue(OPTIONS_MENU_STYLE);
|
||||||
|
std::string scaleText;
|
||||||
|
switch (value) {
|
||||||
|
case 0: scaleText = I18n::get("options.menuStyle.pocket"); break;
|
||||||
|
case 1: scaleText = I18n::get("options.menuStyle.xperia"); break;
|
||||||
|
case 2: scaleText = I18n::get("options.menuStyle.java"); break;
|
||||||
|
}
|
||||||
|
text += ": " + scaleText;
|
||||||
|
}
|
||||||
|
if (m_optionId == OPTIONS_VIEW_DISTANCE) {
|
||||||
|
int value = minecraft->options.getIntValue(OPTIONS_VIEW_DISTANCE);
|
||||||
|
std::string scaleText;
|
||||||
|
switch (value) {
|
||||||
|
case 0: scaleText = I18n::get("options.renderDistance.far"); break;
|
||||||
|
case 1: scaleText = I18n::get("options.renderDistance.normal"); break;
|
||||||
|
case 2: scaleText = I18n::get("options.renderDistance.short"); break;
|
||||||
|
case 3: scaleText = I18n::get("options.renderDistance.tiny"); break;
|
||||||
|
default: scaleText = "Debug"; break;
|
||||||
|
}
|
||||||
|
text += ": " + scaleText;
|
||||||
|
}
|
||||||
|
|
||||||
minecraft->font->draw(text, (float)x, (float)y + yOffset, 0x909090, false);
|
minecraft->font->draw(text, (float)x, (float)y + yOffset, 0x909090, false);
|
||||||
super::render(minecraft, xm, ym);
|
super::render(minecraft, xm, ym);
|
||||||
|
|||||||
@@ -23,12 +23,15 @@ DeathScreen::~DeathScreen()
|
|||||||
|
|
||||||
void DeathScreen::init()
|
void DeathScreen::init()
|
||||||
{
|
{
|
||||||
if (/* minecraft->useTouchscreen() */ true) {
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
|
||||||
bRespawn = new Touch::TButton(1, "Respawn!");
|
bRespawn = new Touch::TButton(1, "Respawn!");
|
||||||
bTitle = new Touch::TButton(2, "Main menu");
|
bTitle = new Touch::TButton(2, "Main menu");
|
||||||
} else {
|
} else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) {
|
||||||
bRespawn = new Button(1, "Respawn!");
|
bRespawn = new Button(1, "Respawn!");
|
||||||
bTitle = new Button(2, "Main menu");
|
bTitle = new Button(2, "Main menu");
|
||||||
|
} else {
|
||||||
|
bRespawn = new Button(1, 0, 0, 200, 20, "Respawn");
|
||||||
|
bTitle = new Button(2, 0, 0, 200, 20, "Title menu");
|
||||||
}
|
}
|
||||||
buttons.push_back(bRespawn);
|
buttons.push_back(bRespawn);
|
||||||
buttons.push_back(bTitle);
|
buttons.push_back(bTitle);
|
||||||
@@ -39,13 +42,23 @@ void DeathScreen::init()
|
|||||||
|
|
||||||
void DeathScreen::setupPositions()
|
void DeathScreen::setupPositions()
|
||||||
{
|
{
|
||||||
bRespawn->width = bTitle->width = width / 4;
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||||
|
bRespawn->width = 200;
|
||||||
|
bTitle->width = 200;
|
||||||
|
|
||||||
|
int centerX = (width / 2) - (bRespawn->width / 2);
|
||||||
|
bRespawn->x = centerX;
|
||||||
|
bTitle->x = centerX;
|
||||||
|
|
||||||
|
bRespawn->y = (height / 2);
|
||||||
|
bTitle->y = bRespawn->y + 24;
|
||||||
|
} else {
|
||||||
|
bRespawn->width = bTitle->width = width / 4;
|
||||||
bRespawn->y = bTitle->y = height / 2;
|
bRespawn->y = bTitle->y = height / 2;
|
||||||
bRespawn->x = width/2 - bRespawn->width - 10;
|
bRespawn->x = width/2 - bRespawn->width - 10;
|
||||||
bTitle->x = width/2 + 10;
|
bTitle->x = width/2 + 10;
|
||||||
|
}
|
||||||
LOGI("xyz: %d, %d (%d, %d)\n", bTitle->x, bTitle->y, width, height);
|
// LOGI("xyz: %d, %d (%d, %d)\n", bTitle->x, bTitle->y, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeathScreen::tick() {
|
void DeathScreen::tick() {
|
||||||
@@ -56,10 +69,20 @@ void DeathScreen::render( int xm, int ym, float a )
|
|||||||
{
|
{
|
||||||
fillGradient(0, 0, width, height, 0x60500000, 0xa0803030);
|
fillGradient(0, 0, width, height, 0x60500000, 0xa0803030);
|
||||||
|
|
||||||
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||||
|
glPushMatrix2();
|
||||||
|
glScalef2(2, 2, 2);
|
||||||
|
drawCenteredString(font, "Game over!", width / 2 / 2, height / 8, 0xffffff);
|
||||||
|
glPopMatrix2();
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "Score: &e" << minecraft->player->getScore();
|
||||||
|
drawCenteredString(font, ss.str(), width / 2, (height / 4) + 32, 0xffffff);
|
||||||
|
} else {
|
||||||
glPushMatrix2();
|
glPushMatrix2();
|
||||||
glScalef2(2, 2, 2);
|
glScalef2(2, 2, 2);
|
||||||
drawCenteredString(font, "You died!", width / 2 / 2, height / 8, 0xffffff);
|
drawCenteredString(font, "You died!", width / 2 / 2, height / 8, 0xffffff);
|
||||||
glPopMatrix2();
|
glPopMatrix2();
|
||||||
|
}
|
||||||
|
|
||||||
if (_tick >= WAIT_TICKS)
|
if (_tick >= WAIT_TICKS)
|
||||||
Screen::render(xm, ym, a);
|
Screen::render(xm, ym, a);
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#include "../../renderer/Textures.h"
|
#include "../../renderer/Textures.h"
|
||||||
#include "../../gamemode/GameMode.h"
|
#include "../../gamemode/GameMode.h"
|
||||||
#include "ArmorScreen.h"
|
#include "ArmorScreen.h"
|
||||||
|
#include "crafting/WorkbenchScreen.h"
|
||||||
#include "../components/Button.h"
|
#include "../components/Button.h"
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
@@ -27,7 +28,8 @@ IngameBlockSelectionScreen::IngameBlockSelectionScreen()
|
|||||||
InventoryRows(1),
|
InventoryRows(1),
|
||||||
InventoryCols(1),
|
InventoryCols(1),
|
||||||
InventorySize(1),
|
InventorySize(1),
|
||||||
bArmor(1, "Armor")
|
bArmor(1, "Armor"),
|
||||||
|
bCrafting(1, "Crafting")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,6 +44,19 @@ void IngameBlockSelectionScreen::init()
|
|||||||
(float)getSlotPosY(0) - 4,
|
(float)getSlotPosY(0) - 4,
|
||||||
(float)getSlotPosX(InventoryCols) + 4,
|
(float)getSlotPosX(InventoryCols) + 4,
|
||||||
(float)getSlotPosY(InventoryRows) + 4);
|
(float)getSlotPosY(InventoryRows) + 4);
|
||||||
|
|
||||||
|
if (!minecraft->isCreativeMode()) {
|
||||||
|
bArmor.width = 42;
|
||||||
|
bCrafting.width = 42;
|
||||||
|
|
||||||
|
bArmor.x = 0;
|
||||||
|
bArmor.y = height - bArmor.height;
|
||||||
|
|
||||||
|
bCrafting.x = 0;
|
||||||
|
bCrafting.y = height - bCrafting.height - 30;
|
||||||
|
buttons.push_back(&bArmor);
|
||||||
|
buttons.push_back(&bCrafting);
|
||||||
|
}
|
||||||
|
|
||||||
ItemInstance* selected = inventory->getSelected();
|
ItemInstance* selected = inventory->getSelected();
|
||||||
if (!selected || selected->isNull()) {
|
if (!selected || selected->isNull()) {
|
||||||
@@ -58,13 +73,6 @@ void IngameBlockSelectionScreen::init()
|
|||||||
}
|
}
|
||||||
if (!isAllowed(selectedItem))
|
if (!isAllowed(selectedItem))
|
||||||
selectedItem = 0;
|
selectedItem = 0;
|
||||||
|
|
||||||
if (!minecraft->isCreativeMode()) {
|
|
||||||
bArmor.width = 42;
|
|
||||||
bArmor.x = 0;
|
|
||||||
bArmor.y = height - bArmor.height;
|
|
||||||
buttons.push_back(&bArmor);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IngameBlockSelectionScreen::removed()
|
void IngameBlockSelectionScreen::removed()
|
||||||
@@ -124,7 +132,7 @@ void IngameBlockSelectionScreen::renderSlots()
|
|||||||
//w.printEvery(1000, "render-blocksel");
|
//w.printEvery(1000, "render-blocksel");
|
||||||
|
|
||||||
glDisable2(GL_RESCALE_NORMAL);
|
glDisable2(GL_RESCALE_NORMAL);
|
||||||
Lighting::turnOn(minecraft);
|
Lighting::turnOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
int IngameBlockSelectionScreen::getSlotPosX(int slotX) {
|
int IngameBlockSelectionScreen::getSlotPosX(int slotX) {
|
||||||
@@ -249,7 +257,7 @@ void IngameBlockSelectionScreen::mouseClicked(int x, int y, int buttonNum)
|
|||||||
//minecraft->soundEngine->playUI("random.click", 1, 1);
|
//minecraft->soundEngine->playUI("random.click", 1, 1);
|
||||||
} else {
|
} else {
|
||||||
_pendingQuit = !_area.isInside((float)x, (float)y)
|
_pendingQuit = !_area.isInside((float)x, (float)y)
|
||||||
&& !bArmor.isInside(x, y);
|
&& !bArmor.isInside(x, y) && !bCrafting.isInside(x, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!_pendingQuit)
|
if (!_pendingQuit)
|
||||||
@@ -338,5 +346,8 @@ void IngameBlockSelectionScreen::buttonClicked( Button* button )
|
|||||||
if (button == &bArmor) {
|
if (button == &bArmor) {
|
||||||
minecraft->setScreen(new ArmorScreen());
|
minecraft->setScreen(new ArmorScreen());
|
||||||
}
|
}
|
||||||
|
if (button == &bCrafting) {
|
||||||
|
minecraft->setScreen(new WorkbenchScreen(Recipe::SIZE_2X2));
|
||||||
|
}
|
||||||
super::buttonClicked(button);
|
super::buttonClicked(button);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ private:
|
|||||||
bool _pendingQuit;
|
bool _pendingQuit;
|
||||||
|
|
||||||
Button bArmor;
|
Button bArmor;
|
||||||
|
Button bCrafting;
|
||||||
|
|
||||||
RectangleArea _area;
|
RectangleArea _area;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ 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();
|
||||||
}
|
}
|
||||||
@@ -147,7 +148,7 @@ void OptionsScreen::removed() {
|
|||||||
|
|
||||||
void OptionsScreen::buttonClicked(Button* button) {
|
void OptionsScreen::buttonClicked(Button* button) {
|
||||||
if (button == btnClose) {
|
if (button == btnClose) {
|
||||||
minecraft->options.save();
|
minecraft->reloadOptions();
|
||||||
if (minecraft->screen != NULL) {
|
if (minecraft->screen != NULL) {
|
||||||
minecraft->setScreen(NULL);
|
minecraft->setScreen(NULL);
|
||||||
} else {
|
} else {
|
||||||
@@ -194,10 +195,11 @@ void OptionsScreen::generateOptionScreens() {
|
|||||||
.addOptionItem(OPTIONS_SENSITIVITY, minecraft);
|
.addOptionItem(OPTIONS_SENSITIVITY, minecraft);
|
||||||
|
|
||||||
// Game Pane
|
// Game Pane
|
||||||
optionPanes[1]->addOptionItem(OPTIONS_DIFFICULTY, minecraft)
|
optionPanes[1]->addOptionItem(OPTIONS_GUI_SCALE, 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_GUI_SCALE, minecraft)
|
.addOptionItem(OPTIONS_WINDOW_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)
|
||||||
@@ -223,6 +225,7 @@ void OptionsScreen::generateOptionScreens() {
|
|||||||
// .addOptionItem(&Option::ANAGLYPH, minecraft)
|
// .addOptionItem(&Option::ANAGLYPH, minecraft)
|
||||||
.addOptionItem(OPTIONS_LIMIT_FRAMERATE, minecraft)
|
.addOptionItem(OPTIONS_LIMIT_FRAMERATE, minecraft)
|
||||||
.addOptionItem(OPTIONS_VSYNC, minecraft)
|
.addOptionItem(OPTIONS_VSYNC, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_VIEW_DISTANCE, minecraft)
|
||||||
.addOptionItem(OPTIONS_RENDER_DEBUG, minecraft)
|
.addOptionItem(OPTIONS_RENDER_DEBUG, minecraft)
|
||||||
.addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft)
|
.addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft)
|
||||||
.addOptionItem(OPTIONS_VIEW_BOBBING, minecraft)
|
.addOptionItem(OPTIONS_VIEW_BOBBING, minecraft)
|
||||||
@@ -231,8 +234,10 @@ 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_ALLOW_SPRINT, minecraft)
|
optionPanes[4]->addOptionItem(OPTIONS_TOUCH_OVERRIDE, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
|
||||||
.addOptionItem(OPTIONS_BAR_ON_TOP, minecraft)
|
.addOptionItem(OPTIONS_BAR_ON_TOP, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_MENU_STYLE, minecraft)
|
||||||
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft)
|
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft)
|
||||||
.addOptionItem(OPTIONS_FOLIAGE_TINT, minecraft)
|
.addOptionItem(OPTIONS_FOLIAGE_TINT, minecraft)
|
||||||
.addOptionItem(OPTIONS_TINTED_SIDE, minecraft)
|
.addOptionItem(OPTIONS_TINTED_SIDE, minecraft)
|
||||||
@@ -258,11 +263,17 @@ 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->options.save();
|
minecraft->reloadOptions();
|
||||||
|
|
||||||
super::keyPressed(eventKey);
|
super::keyPressed(eventKey);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ 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);
|
||||||
|
|
||||||
|
|||||||
@@ -10,18 +10,18 @@
|
|||||||
#include "client/gui/screens/OptionsScreen.h"
|
#include "client/gui/screens/OptionsScreen.h"
|
||||||
|
|
||||||
PauseScreen::PauseScreen(bool wasBackPaused)
|
PauseScreen::PauseScreen(bool wasBackPaused)
|
||||||
: saveStep(0),
|
: saveStep(0),
|
||||||
visibleTime(0),
|
visibleTime(0),
|
||||||
bContinue(0),
|
bContinue(0),
|
||||||
bQuit(0),
|
bQuit(0),
|
||||||
bOptions(0),
|
bOptions(0),
|
||||||
bQuitAndSaveLocally(0),
|
bQuitAndSaveLocally(0),
|
||||||
bServerVisibility(0),
|
bServerVisibility(0),
|
||||||
// bThirdPerson(0),
|
// bThirdPerson(0),
|
||||||
wasBackPaused(wasBackPaused),
|
wasBackPaused(wasBackPaused),
|
||||||
// bSound(OPTIONS_SOUND_VOLUME, 1, 0),
|
// bSound(OPTIONS_SOUND_VOLUME, 1, 0),
|
||||||
bThirdPerson(OPTIONS_THIRD_PERSON_VIEW),
|
bThirdPerson(OPTIONS_THIRD_PERSON_VIEW),
|
||||||
bHideGui(OPTIONS_HIDEGUI)
|
bHideGui(OPTIONS_HIDEGUI)
|
||||||
{
|
{
|
||||||
ImageDef def;
|
ImageDef def;
|
||||||
def.setSrc(IntRectangle(160, 144, 39, 31));
|
def.setSrc(IntRectangle(160, 144, 39, 31));
|
||||||
@@ -34,7 +34,7 @@ PauseScreen::PauseScreen(bool wasBackPaused)
|
|||||||
// bSound.setImageDef(def, true);
|
// bSound.setImageDef(def, true);
|
||||||
defSrc.y += defSrc.h;
|
defSrc.y += defSrc.h;
|
||||||
bThirdPerson.setImageDef(def, true);
|
bThirdPerson.setImageDef(def, true);
|
||||||
bHideGui.setImageDef(def, true);
|
bHideGui.setImageDef(def, true);
|
||||||
//void setImageDef(ImageDef& imageDef, bool setButtonSize);
|
//void setImageDef(ImageDef& imageDef, bool setButtonSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,24 +44,31 @@ PauseScreen::~PauseScreen() {
|
|||||||
delete bQuitAndSaveLocally;
|
delete bQuitAndSaveLocally;
|
||||||
delete bServerVisibility;
|
delete bServerVisibility;
|
||||||
delete bOptions;
|
delete bOptions;
|
||||||
// delete bThirdPerson;
|
// delete bThirdPerson;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PauseScreen::init() {
|
void PauseScreen::init() {
|
||||||
if (/* minecraft->useTouchscreen() */ true) {
|
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");
|
||||||
bQuit = new Touch::TButton(2, "Quit to title");
|
bQuit = new Touch::TButton(2, "Quit to title");
|
||||||
bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map");
|
bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map");
|
||||||
bServerVisibility = new Touch::TButton(4, "");
|
bServerVisibility = new Touch::TButton(4, "");
|
||||||
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
|
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
|
||||||
} else {
|
} 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");
|
||||||
bQuit = new Button(2, "Quit to title");
|
bQuit = new Button(2, "Quit to title");
|
||||||
bQuitAndSaveLocally = new Button(3, "Quit and copy map");
|
bQuitAndSaveLocally = new Button(3, "Quit and copy map");
|
||||||
bServerVisibility = new Button(4, "");
|
bServerVisibility = new Button(4, "");
|
||||||
// bThirdPerson = new Button(5, "Toggle 3:rd person view");
|
// bThirdPerson = new Button(5, "Toggle 3:rd person view");
|
||||||
|
} else {
|
||||||
|
bContinue = new Button(1, 0, 0, 200, 20, "Back to game");
|
||||||
|
bServerVisibility = new Button(4, 0, 0, 200, 20, "");
|
||||||
|
bOptions = new Button(5, 0, 0, 200, 20, "Options...");
|
||||||
|
bQuit = new Button(2, 0, 0, 200, 20, "Save and quit to title");
|
||||||
|
bQuitAndSaveLocally = new Button(3, 0, 0, 200, 20, "Copy and quit map");
|
||||||
|
// bThirdPerson = new Button(5, "Toggle 3:rd person view");
|
||||||
}
|
}
|
||||||
|
|
||||||
buttons.push_back(bContinue);
|
buttons.push_back(bContinue);
|
||||||
@@ -72,12 +79,12 @@ void PauseScreen::init() {
|
|||||||
bHideGui.updateImage(&minecraft->options);
|
bHideGui.updateImage(&minecraft->options);
|
||||||
// buttons.push_back(&bSound);
|
// buttons.push_back(&bSound);
|
||||||
buttons.push_back(&bThirdPerson);
|
buttons.push_back(&bThirdPerson);
|
||||||
//buttons.push_back(&bHideGui);
|
//buttons.push_back(&bHideGui);
|
||||||
|
|
||||||
// If Back wasn't pressed, set up additional items (more than Quit to menu
|
// If Back wasn't pressed, set up additional items (more than Quit to menu
|
||||||
// and Back to game) here
|
// and Back to game) here
|
||||||
|
|
||||||
#if !defined(APPLE_DEMO_PROMOTION) && !defined(RPI)
|
#if !defined(APPLE_DEMO_PROMOTION) && !defined(RPI)
|
||||||
if (true || !wasBackPaused) {
|
if (true || !wasBackPaused) {
|
||||||
if (minecraft->raknetInstance) {
|
if (minecraft->raknetInstance) {
|
||||||
if (minecraft->raknetInstance->isServer()) {
|
if (minecraft->raknetInstance->isServer()) {
|
||||||
@@ -85,14 +92,14 @@ void PauseScreen::init() {
|
|||||||
buttons.push_back(bServerVisibility);
|
buttons.push_back(bServerVisibility);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#if !defined(DEMO_MODE)
|
#if !defined(DEMO_MODE)
|
||||||
buttons.push_back(bQuitAndSaveLocally);
|
buttons.push_back(bQuitAndSaveLocally);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// buttons.push_back(bThirdPerson);
|
// buttons.push_back(bThirdPerson);
|
||||||
|
|
||||||
for (unsigned int i = 0; i < buttons.size(); ++i) {
|
for (unsigned int i = 0; i < buttons.size(); ++i) {
|
||||||
// if (buttons[i] == &bSound) continue;
|
// if (buttons[i] == &bSound) continue;
|
||||||
@@ -103,27 +110,48 @@ void PauseScreen::init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PauseScreen::setupPositions() {
|
void PauseScreen::setupPositions() {
|
||||||
saveStep = 0;
|
saveStep = 0;
|
||||||
int yBase = 16;
|
int yBase = 16;
|
||||||
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||||
|
yBase = 50;
|
||||||
|
|
||||||
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 160;
|
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 200;
|
||||||
bQuitAndSaveLocally->width = bServerVisibility->width = 160;
|
bQuitAndSaveLocally->width = bServerVisibility->width = 200;
|
||||||
|
|
||||||
bContinue->x = (width - bContinue->width) / 2;
|
bContinue->x = (width - bContinue->width) / 2;
|
||||||
bContinue->y = yBase + 32 * 1;
|
bContinue->y = yBase + 24 * 1;
|
||||||
|
|
||||||
bOptions->x = (width - bOptions->width) / 2;
|
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
||||||
bOptions->y = yBase + 32 * 2;
|
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 24 * 2;
|
||||||
|
|
||||||
bQuit->x = (width - bQuit->width) / 2;
|
bOptions->x = (width - bOptions->width) / 2;
|
||||||
bQuit->y = yBase + 32 * 3;
|
bOptions->y = yBase + 24 * 3 + 24;
|
||||||
|
|
||||||
|
bQuit->x = (width - bQuit->width) / 2;
|
||||||
|
bQuit->y = yBase + 24 * 4 + 24;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 160;
|
||||||
|
bQuitAndSaveLocally->width = bServerVisibility->width = 160;
|
||||||
|
|
||||||
|
bContinue->x = (width - bContinue->width) / 2;
|
||||||
|
bContinue->y = yBase + 32 * 1;
|
||||||
|
|
||||||
|
bOptions->x = (width - bOptions->width) / 2;
|
||||||
|
bOptions->y = yBase + 32 * 2;
|
||||||
|
|
||||||
|
bQuit->x = (width - bQuit->width) / 2;
|
||||||
|
bQuit->y = yBase + 32 * 3;
|
||||||
|
|
||||||
#if APPLE_DEMO_PROMOTION
|
#if APPLE_DEMO_PROMOTION
|
||||||
bQuit->y += 16;
|
bQuit->y += 16;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
||||||
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4;
|
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// bSound.y = bThirdPerson.y = 8;
|
// bSound.y = bThirdPerson.y = 8;
|
||||||
// bSound.x = 4;
|
// bSound.x = 4;
|
||||||
@@ -161,9 +189,9 @@ void PauseScreen::buttonClicked(Button* button) {
|
|||||||
minecraft->setScreen(NULL);
|
minecraft->setScreen(NULL);
|
||||||
//minecraft->grabMouse();
|
//minecraft->grabMouse();
|
||||||
}
|
}
|
||||||
if (button->id == bQuit->id) {
|
if (button->id == bQuit->id) {
|
||||||
minecraft->leaveGame();
|
minecraft->leaveGame();
|
||||||
}
|
}
|
||||||
if (button->id == bQuitAndSaveLocally->id) {
|
if (button->id == bQuitAndSaveLocally->id) {
|
||||||
minecraft->leaveGame(true);
|
minecraft->leaveGame(true);
|
||||||
}
|
}
|
||||||
@@ -197,5 +225,5 @@ void PauseScreen::updateServerVisibilityText()
|
|||||||
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
|
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
|
||||||
bServerVisibility->msg = ss->allowsIncomingConnections()?
|
bServerVisibility->msg = ss->allowsIncomingConnections()?
|
||||||
"Server is visible"
|
"Server is visible"
|
||||||
: "Server is invisible";
|
: "Server is invisible";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Screen* ScreenChooser::createScreen( ScreenId id )
|
|||||||
Screen* screen = NULL;
|
Screen* screen = NULL;
|
||||||
|
|
||||||
// :sob:
|
// :sob:
|
||||||
if (/* _mc->useTouchscreen() */ true) {
|
if (_mc->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break;
|
case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break;
|
||||||
case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break;
|
case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break;
|
||||||
|
|||||||
@@ -118,22 +118,15 @@ 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;
|
||||||
|
|
||||||
// compute vertical centre for buttons in remaining space
|
// position Survival/Cheats buttons below the seed field
|
||||||
{
|
int buttonY = tSeed.y + tSeed.height + 20;
|
||||||
int bottomPad = 20;
|
bGamemode->y = buttonY;
|
||||||
int availTop = buttonHeight + 20 + 30 + 10; // just below seed
|
bCheats->y = buttonY;
|
||||||
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;
|
||||||
int bottomPadding = 20;
|
bCreate->y = buttonY + bGamemode->height + 40;
|
||||||
bCreate->y = height - bottomPadding - bCreate->height;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleChooseLevelScreen::tick()
|
void SimpleChooseLevelScreen::tick()
|
||||||
|
|||||||
@@ -23,49 +23,62 @@
|
|||||||
|
|
||||||
// Some kind of default settings, might be overridden in ::init
|
// Some kind of default settings, might be overridden in ::init
|
||||||
StartMenuScreen::StartMenuScreen()
|
StartMenuScreen::StartMenuScreen()
|
||||||
: bHost( 2, 0, 0, 160, 24, "Start Game"),
|
|
||||||
bJoin( 3, 0, 0, 160, 24, "Join Game"),
|
|
||||||
bOptions( 4, 0, 0, 160, 24, "Options"),
|
|
||||||
bQuit( 5, "")
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
StartMenuScreen::~StartMenuScreen()
|
StartMenuScreen::~StartMenuScreen()
|
||||||
{
|
{
|
||||||
|
delete bHost;
|
||||||
|
delete bJoin;
|
||||||
|
delete bOptions;
|
||||||
|
delete bQuit;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartMenuScreen::init()
|
void StartMenuScreen::init()
|
||||||
{
|
{
|
||||||
bJoin.active = bHost.active = bOptions.active = true;
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||||
|
bHost = new Button( 2, 0, 0, 200, 20, "Singleplayer");
|
||||||
|
bJoin = new Button( 3, 0, 0, 200, 20, "Multiplayer");
|
||||||
|
bOptions = new Button( 4, 0, 0, 200, 20, "Options...");
|
||||||
|
bQuit = new Button( 5, 0, 0, 200, 20, "Ouit Game");
|
||||||
|
} else {
|
||||||
|
bHost = new Button( 2, 0, 0, 160, 24, "Start Game");
|
||||||
|
bJoin = new Button( 3, 0, 0, 160, 24, "Join Game");
|
||||||
|
bOptions = new Button( 4, 0, 0, 160, 24, "Options");
|
||||||
|
bQuit = new Button( 5, 0, 0, 160, 24, "Ouit Game");
|
||||||
|
}
|
||||||
|
bJoin->active = bHost->active = bOptions->active = true;
|
||||||
|
|
||||||
if (minecraft->options.getStringValue(OPTIONS_USERNAME).empty()) {
|
if (minecraft->options.getStringValue(OPTIONS_USERNAME).empty()) {
|
||||||
return; // tick() will redirect to UsernameScreen
|
return; // tick() will redirect to UsernameScreen
|
||||||
}
|
}
|
||||||
|
|
||||||
buttons.push_back(&bHost);
|
buttons.push_back(bHost);
|
||||||
buttons.push_back(&bJoin);
|
buttons.push_back(bJoin);
|
||||||
//buttons.push_back(&bTest);
|
//buttons.push_back(&bTest);
|
||||||
|
buttons.push_back(bQuit);
|
||||||
|
|
||||||
tabButtons.push_back(&bHost);
|
tabButtons.push_back(bHost);
|
||||||
tabButtons.push_back(&bJoin);
|
tabButtons.push_back(bJoin);
|
||||||
|
tabButtons.push_back(bQuit);
|
||||||
|
|
||||||
#ifndef RPI
|
#ifndef RPI
|
||||||
buttons.push_back(&bOptions);
|
buttons.push_back(bOptions);
|
||||||
tabButtons.push_back(&bOptions);
|
tabButtons.push_back(bOptions);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// add quit button (top right X icon) – match OptionsScreen style
|
//// add quit button (top right X icon) – match OptionsScreen style
|
||||||
{
|
//{
|
||||||
ImageDef def;
|
// ImageDef def;
|
||||||
def.name = "gui/touchgui.png";
|
// def.name = "gui/touchgui.png";
|
||||||
def.width = 34;
|
// def.width = 34;
|
||||||
def.height = 26;
|
// def.height = 26;
|
||||||
def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
|
// def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
|
||||||
bQuit.setImageDef(def, true);
|
// bQuit.setImageDef(def, true);
|
||||||
bQuit.scaleWhenPressed = false;
|
// bQuit.scaleWhenPressed = false;
|
||||||
buttons.push_back(&bQuit);
|
// buttons.push_back(&bQuit);
|
||||||
// don't include in tab navigation
|
// // don't include in tab navigation
|
||||||
}
|
//}
|
||||||
|
|
||||||
copyright = "\xffMojang AB";//. Do not distribute!";
|
copyright = "\xffMojang AB";//. Do not distribute!";
|
||||||
|
|
||||||
@@ -93,20 +106,30 @@ void StartMenuScreen::init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void StartMenuScreen::setupPositions() {
|
void StartMenuScreen::setupPositions() {
|
||||||
int yBase = height / 2;
|
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||||
|
int yBase = (height / 2) - 20;
|
||||||
|
|
||||||
bHost.y = yBase;
|
bHost->y = yBase;
|
||||||
bJoin.y = bHost.y + 24 + 4;
|
bJoin->y = bHost->y + 24;
|
||||||
bOptions.y = bJoin.y + 24 + 4;
|
bOptions->y = bJoin->y + 24;
|
||||||
|
bQuit->y = bOptions->y + 24;
|
||||||
|
} else {
|
||||||
|
int yBase = height / 2;
|
||||||
|
bHost->y = yBase;
|
||||||
|
bJoin->y = bHost->y + 24 + 4;
|
||||||
|
bOptions->y = bJoin->y + 24 + 4;
|
||||||
|
bQuit->y = bOptions->y + 24 + 4;
|
||||||
|
}
|
||||||
|
|
||||||
// Center buttons
|
// Center buttons
|
||||||
bHost.x = (width - bHost.width) / 2;
|
bHost->x = (width - bHost->width) / 2;
|
||||||
bJoin.x = (width - bJoin.width) / 2;
|
bJoin->x = (width - bJoin->width) / 2;
|
||||||
bOptions.x = (width - bOptions.width) / 2;
|
bOptions->x = (width - bOptions->width) / 2;
|
||||||
|
bQuit->x = (width - bQuit->width) / 2;
|
||||||
|
|
||||||
// position quit icon at top-right (use image-defined size)
|
//// position quit icon at top-right (use image-defined size)
|
||||||
bQuit.x = width - bQuit.width;
|
//bQuit.x = width - bQuit.width;
|
||||||
bQuit.y = 0;
|
//bQuit.y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartMenuScreen::tick() {
|
void StartMenuScreen::tick() {
|
||||||
@@ -114,7 +137,7 @@ void StartMenuScreen::tick() {
|
|||||||
|
|
||||||
void StartMenuScreen::buttonClicked(Button* button) {
|
void StartMenuScreen::buttonClicked(Button* button) {
|
||||||
|
|
||||||
if (button->id == bHost.id)
|
if (button->id == bHost->id)
|
||||||
{
|
{
|
||||||
#if defined(DEMO_MODE) || defined(APPLE_DEMO_PROMOTION)
|
#if defined(DEMO_MODE) || defined(APPLE_DEMO_PROMOTION)
|
||||||
minecraft->setScreen( new SimpleChooseLevelScreen("_DemoLevel") );
|
minecraft->setScreen( new SimpleChooseLevelScreen("_DemoLevel") );
|
||||||
@@ -122,16 +145,16 @@ void StartMenuScreen::buttonClicked(Button* button) {
|
|||||||
minecraft->screenChooser.setScreen(SCREEN_SELECTWORLD);
|
minecraft->screenChooser.setScreen(SCREEN_SELECTWORLD);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (button->id == bJoin.id)
|
if (button->id == bJoin->id)
|
||||||
{
|
{
|
||||||
minecraft->locateMultiplayer();
|
minecraft->locateMultiplayer();
|
||||||
minecraft->screenChooser.setScreen(SCREEN_JOINGAME);
|
minecraft->screenChooser.setScreen(SCREEN_JOINGAME);
|
||||||
}
|
}
|
||||||
if (button->id == bOptions.id)
|
if (button->id == bOptions->id)
|
||||||
{
|
{
|
||||||
minecraft->setScreen(new OptionsScreen());
|
minecraft->setScreen(new OptionsScreen());
|
||||||
}
|
}
|
||||||
if (button == &bQuit)
|
if (button->id == bQuit->id)
|
||||||
{
|
{
|
||||||
minecraft->quit();
|
minecraft->quit();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,10 +23,10 @@ public:
|
|||||||
bool isInGameScreen();
|
bool isInGameScreen();
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Button bHost;
|
Button* bHost;
|
||||||
Button bJoin;
|
Button* bJoin;
|
||||||
Button bOptions;
|
Button* bOptions;
|
||||||
ImageButton bQuit; // X button in top-right corner
|
Button* bQuit;
|
||||||
|
|
||||||
std::string copyright;
|
std::string copyright;
|
||||||
int copyrightPosX;
|
int copyrightPosX;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#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"
|
||||||
@@ -125,48 +126,80 @@ void TouchscreenInput_TestFps::onConfigChanged(const Config& c) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Code for "D-pad with jump in center"
|
// Code for "D-pad with jump in center"
|
||||||
float Bw = w * 0.11f;//0.08f;
|
// Calculate button size so the full 3x3 grid fits on screen with margins
|
||||||
float Bh = Bw;//0.15f;
|
const float margin = 12.0f;
|
||||||
|
float availW = w - margin * 2; // horizontal space available
|
||||||
// If too large (like playing on Tablet)
|
float availH = h - margin * 2; // vertical space available
|
||||||
|
// 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;
|
||||||
if (pc.pixelsToMillimeters(Bw) > 200) { //14
|
float minBtnPx = pc.millimetersToPixels(35); // minimum touch target
|
||||||
Bw = Bh = pc.millimetersToPixels(200); //14
|
float maxBtnPx = pc.millimetersToPixels(90); // maximum
|
||||||
}
|
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;
|
||||||
|
|
||||||
const float BaseY = -8 + h - 3.0f * Bh;
|
// Position from top-left (or top-right for left-handed)
|
||||||
const float BaseX = _options->getBooleanValue(OPTIONS_IS_LEFT_HANDED)? -8 + w - 3 * Bw
|
float dpadTotalW = 3.0f * Bw2;
|
||||||
: 8 + 0;
|
float dpadTotalH = 3.0f * Bh2;
|
||||||
|
|
||||||
|
// 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 + 3 * Bw, BaseY + 3 * Bh);
|
_boundingRectangle = RectangleArea(BaseX, BaseY, BaseX + dpadTotalW, BaseY + dpadTotalH);
|
||||||
|
|
||||||
xx = BaseX + Bw; yy = BaseY;
|
xx = BaseX + Bw2; yy = BaseY;
|
||||||
_model.addArea(AREA_DPAD_N, aUp = new RectangleArea(xx, yy, xx+Bw, yy+Bh));
|
_model.addArea(AREA_DPAD_N, aUp = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2));
|
||||||
xx = BaseX;
|
xx = BaseX;
|
||||||
aUpLeft = new RectangleArea(xx, yy, xx+Bw, yy+Bh);
|
aUpLeft = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2);
|
||||||
xx = BaseX + 2 * Bw;
|
xx = BaseX + 2 * Bw2;
|
||||||
aUpRight = new RectangleArea(xx, yy, xx+Bw, yy+Bh);
|
aUpRight = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2);
|
||||||
|
|
||||||
xx = BaseX + Bw; yy = BaseY + Bh;
|
xx = BaseX + Bw2; yy = BaseY + Bh2;
|
||||||
_model.addArea(AREA_DPAD_C, aJump = new RectangleArea(xx, yy, xx+Bw, yy+Bh));
|
_model.addArea(AREA_DPAD_C, aJump = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2));
|
||||||
|
|
||||||
xx = BaseX + Bw; yy = BaseY + 2 * Bh;
|
xx = BaseX + Bw2; yy = BaseY + 2 * Bh2;
|
||||||
_model.addArea(AREA_DPAD_S, aDown = new RectangleArea(xx, yy, xx+Bw, yy+Bh));
|
_model.addArea(AREA_DPAD_S, aDown = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2));
|
||||||
|
|
||||||
xx = BaseX; yy = BaseY + Bh;
|
xx = BaseX; yy = BaseY + Bh2;
|
||||||
_model.addArea(AREA_DPAD_W, aLeft = new RectangleArea(xx, yy, xx+Bw, yy+Bh));
|
_model.addArea(AREA_DPAD_W, aLeft = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2));
|
||||||
|
|
||||||
xx = BaseX + 2 * Bw; yy = BaseY + Bh;
|
xx = BaseX + 2 * Bw2; yy = BaseY + Bh2;
|
||||||
_model.addArea(AREA_DPAD_E, aRight = new RectangleArea(xx, yy, xx+Bw, yy+Bh));
|
_model.addArea(AREA_DPAD_E, aRight = new RectangleArea(xx, yy, xx+Bw2, yy+Bh2));
|
||||||
|
|
||||||
float maxPixels = _minecraft->pixelCalc.millimetersToPixels(10);
|
// Pause and chat buttons - sized relative to D-pad buttons, with bounds checking
|
||||||
// float btnSize = Mth::Min(18 * Gui::GuiScale, maxPixels);
|
float actionBtnSize = Bw2 * 0.7f;
|
||||||
float btnSize = pc.millimetersToPixels(18 * Gui::GuiScale);
|
float actionBtnMargin = 8.0f;
|
||||||
_model.addArea(AREA_PAUSE, aPause = new RectangleArea(w - 4 - btnSize, 4, w - 4, 4 + btnSize));
|
// Clamp action button size
|
||||||
_model.addArea(AREA_CHAT, aChat = new RectangleArea(w - 8 - btnSize * 2, 4, w - 8 - btnSize, 4 + btnSize));
|
if (actionBtnSize < pc.millimetersToPixels(30)) actionBtnSize = pc.millimetersToPixels(30);
|
||||||
|
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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,12 +101,22 @@ void GameRenderer::setupCamera(float a, int eye) {
|
|||||||
|
|
||||||
float stereoScale = 0.07f;
|
float stereoScale = 0.07f;
|
||||||
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) glTranslatef2(-(eye * 2 - 1) * stereoScale, 0, 0);
|
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) glTranslatef2(-(eye * 2 - 1) * stereoScale, 0, 0);
|
||||||
if (zoom != 1) {
|
if (mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
|
||||||
glTranslatef2((float) zoom_x, (float) -zoom_y, 0);
|
if (zoom != 1) {
|
||||||
glScalef2(zoom, zoom, 1);
|
glTranslatef2((float) zoom_x, (float) -zoom_y, 0);
|
||||||
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance);
|
glScalef2(zoom, zoom, 1);
|
||||||
|
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance * 2.0f);
|
||||||
|
} else {
|
||||||
|
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance * 2.0f);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance);
|
if (zoom != 1) {
|
||||||
|
glTranslatef2((float) zoom_x, (float) -zoom_y, 0);
|
||||||
|
glScalef2(zoom, zoom, 1);
|
||||||
|
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance);
|
||||||
|
} else {
|
||||||
|
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
@@ -340,10 +350,12 @@ void GameRenderer::renderLevel(float a) {
|
|||||||
setupFog(0);
|
setupFog(0);
|
||||||
glEnable2(GL_BLEND);
|
glEnable2(GL_BLEND);
|
||||||
glDisable2(GL_CULL_FACE);
|
glDisable2(GL_CULL_FACE);
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE); // @TODO commenting this out fixes Ice transparency and clouds are no longer visilbe underwater like normal beta - shredder
|
||||||
glDisable2(GL_ALPHA_TEST);
|
glDisable2(GL_ALPHA_TEST);
|
||||||
mc->textures->loadAndBindTexture("terrain.png");
|
mc->textures->loadAndBindTexture("terrain.png");
|
||||||
//if (mc->options.fancyGraphics) {
|
// @TODO - below is a commented out double render system that fixes ice transparency, but probs harm performance, add it as an option - shredder
|
||||||
|
|
||||||
|
//if (mc->options.fancyGraphics) {
|
||||||
// glColorMask(false, false, false, false);
|
// glColorMask(false, false, false, false);
|
||||||
// int visibleWaterChunks = levelRenderer->render(cameraEntity, 1, a);
|
// int visibleWaterChunks = levelRenderer->render(cameraEntity, 1, a);
|
||||||
// glColorMask(true, true, true, true);
|
// glColorMask(true, true, true, true);
|
||||||
@@ -677,7 +689,7 @@ void GameRenderer::pick(float a) {
|
|||||||
float range = mc->gameMode->getPickRange();
|
float range = mc->gameMode->getPickRange();
|
||||||
bool isPicking = true;
|
bool isPicking = true;
|
||||||
|
|
||||||
bool freeform = mc->useTouchscreen(); //&& !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA);
|
bool freeform = mc->useTouchscreen() && !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA);
|
||||||
|
|
||||||
if (freeform) {
|
if (freeform) {
|
||||||
isPicking = updateFreeformPickDirection(a, pickDirection);
|
isPicking = updateFreeformPickDirection(a, pickDirection);
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
#include "../../client/player/LocalPlayer.h"
|
#include "../../client/player/LocalPlayer.h"
|
||||||
|
|
||||||
#include "../../world/level/GrassColor.h"
|
#include "../../world/level/GrassColor.h"
|
||||||
|
#include "Lighting.h"
|
||||||
|
|
||||||
#ifdef GFX_SMALLER_CHUNKS
|
#ifdef GFX_SMALLER_CHUNKS
|
||||||
/* static */ const int LevelRenderer::CHUNK_SIZE = 8;
|
/* static */ const int LevelRenderer::CHUNK_SIZE = 8;
|
||||||
@@ -575,7 +576,7 @@ void LevelRenderer::render(const AABB& b) const
|
|||||||
// t.color(255, 255, 255, 255); // again not needed, for some reason the vanilla source code tints it... white? maybe this was used for something else in MCPE's dev at one point? - shredder
|
// t.color(255, 255, 255, 255); // again not needed, for some reason the vanilla source code tints it... white? maybe this was used for something else in MCPE's dev at one point? - shredder
|
||||||
|
|
||||||
// t.offset(((Mob*)mc->player)->getPos(0).negated()); // why does this even exist normally, it just makes the thing... not render
|
// t.offset(((Mob*)mc->player)->getPos(0).negated()); // why does this even exist normally, it just makes the thing... not render
|
||||||
|
glLineWidth(2.0f); // make it more thick - shredder
|
||||||
t.begin(GL_LINE_STRIP);
|
t.begin(GL_LINE_STRIP);
|
||||||
t.vertex(b.x0, b.y0, b.z0);
|
t.vertex(b.x0, b.y0, b.z0);
|
||||||
t.vertex(b.x1, b.y0, b.z0);
|
t.vertex(b.x1, b.y0, b.z0);
|
||||||
@@ -1157,23 +1158,22 @@ void LevelRenderer::renderSky(float alpha) {
|
|||||||
glDisable(GL_FOG);
|
glDisable(GL_FOG);
|
||||||
glDisable(GL_ALPHA_TEST);
|
glDisable(GL_ALPHA_TEST);
|
||||||
|
|
||||||
// thanks to the mcpe 0.1 decomp project a bit for this part, was not getting the gl states correctly, gles is painful - shredder
|
// re ported this again from beta 1.6.6, thanks to the mcpe 0.1 decomp team's code for some bit of help about the void layer - shredder
|
||||||
|
|
||||||
// Sunrise
|
// Sunrise
|
||||||
if (mc->options.getBooleanValue(OPTIONS_BEAUTIFUL_SKY)) {
|
if (mc->options.getBooleanValue(OPTIONS_BEAUTIFUL_SKY)) {
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
Lighting::turnOff();
|
||||||
float* c = level->dimension->getSunriseColor(level->getTimeOfDay(alpha), alpha);
|
float* c = level->dimension->getSunriseColor(level->getTimeOfDay(alpha), alpha);
|
||||||
if (c != nullptr)
|
if (c != nullptr)
|
||||||
{
|
{
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
// glShadeModel(GL_SMOOTH); //
|
||||||
|
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
|
glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
|
||||||
glRotatef(level->getTimeOfDay(alpha) > 0.5f ? 180 : 0, 0.0f, 0.0f, 1.0f);
|
glRotatef(level->getTimeOfDay(alpha) > 0.5f ? 180 : 0, 0.0f, 0.0f, 1.0f);
|
||||||
|
|
||||||
t.begin(GL_TRIANGLE_FAN);
|
t.begin(GL_TRIANGLE_FAN);
|
||||||
t.color(c[0], c[1], c[2], c[3]);
|
t.color(c[0], c[1], c[2], c[3]);
|
||||||
t.vertex(0.0f, 100.0f, 0.0f);
|
t.vertex(0.0f, 100.0f, 0.0f);
|
||||||
@@ -1190,11 +1190,12 @@ void LevelRenderer::renderSky(float alpha) {
|
|||||||
|
|
||||||
t.draw();
|
t.draw();
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
// glShadeModel(GL_FLAT); //
|
||||||
}
|
}
|
||||||
|
|
||||||
// gets the time of day and rotates the sun and moon png based on the time
|
// gets the time of day and rotates the sun and moon png based on the time
|
||||||
glEnable(GL_TEXTURE_2D);
|
glEnable(GL_TEXTURE_2D);
|
||||||
glBlendFunc(GL_ONE, GL_ONE);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
|
||||||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
@@ -1326,8 +1327,8 @@ void LevelRenderer::renderAdvancedClouds(float alpha) {
|
|||||||
|
|
||||||
float cloudTime = (float)ticks + alpha;
|
float cloudTime = (float)ticks + alpha;
|
||||||
|
|
||||||
double xo = (px + cloudTime * 0.03f) / ss;
|
float xo = (px + cloudTime * 0.03f) / ss;
|
||||||
double zo = pz / ss + 0.33f;
|
float zo = pz / ss + 0.33f;
|
||||||
|
|
||||||
float yy = 108.0f - py + 0.33f;
|
float yy = 108.0f - py + 0.33f;
|
||||||
|
|
||||||
|
|||||||
@@ -130,9 +130,8 @@ void EntityRenderer::postRender(Entity* entity, float x, float y, float z, float
|
|||||||
if (pow > 0) {
|
if (pow > 0) {
|
||||||
renderShadow(entity, x, y, z, pow, a);
|
renderShadow(entity, x, y, z, pow, a);
|
||||||
}
|
}
|
||||||
//}
|
|
||||||
if (entity->isOnFire()) renderFlame(entity, x, y, z, a);
|
|
||||||
}
|
}
|
||||||
|
if (entity->isOnFire()) renderFlame(entity, x, y, z, a);
|
||||||
}
|
}
|
||||||
void EntityRenderer::renderFlame(Entity* e, float x, float y, float z, float a) {
|
void EntityRenderer::renderFlame(Entity* e, float x, float y, float z, float a) {
|
||||||
glDisable(GL_LIGHTING);
|
glDisable(GL_LIGHTING);
|
||||||
@@ -187,7 +186,11 @@ void EntityRenderer::renderShadow(Entity* e, float x, float y, float z, float po
|
|||||||
//Textures* textures = entityRenderDispatcher->textures;
|
//Textures* textures = entityRenderDispatcher->textures;
|
||||||
//textures->bind(textures->loadTexture("%clamp%/environment/shadow.png"));
|
//textures->bind(textures->loadTexture("%clamp%/environment/shadow.png"));
|
||||||
Textures* textures = entityRenderDispatcher->textures;
|
Textures* textures = entityRenderDispatcher->textures;
|
||||||
|
textures->loadAndBindTexture("/misc/shadow.png");
|
||||||
|
|
||||||
|
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -221,9 +224,6 @@ void EntityRenderer::renderShadow(Entity* e, float x, float y, float z, float po
|
|||||||
renderTileShadow(Tile::tiles[t], x, y + e->getShadowHeightOffs(), z, xt, yt, zt, pow, r, xo, yo + e->getShadowHeightOffs(), zo);
|
renderTileShadow(Tile::tiles[t], x, y + e->getShadowHeightOffs(), z, xt, yt, zt, pow, r, xo, yo + e->getShadowHeightOffs(), zo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
textures->loadAndBindTexture(("/misc/shadow.png"));
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
||||||
tt.draw();
|
tt.draw();
|
||||||
|
|
||||||
glColor4f2(1, 1, 1, 1);
|
glColor4f2(1, 1, 1, 1);
|
||||||
|
|||||||
@@ -393,8 +393,8 @@ void LavaSideTexture::tick() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FireTexture::FireTexture()
|
FireTexture::FireTexture(int id)
|
||||||
: super(((Tile*)Tile::fire)->tex),
|
: super(((Tile*)Tile::fire)->tex + id * 16),
|
||||||
_tick(0),
|
_tick(0),
|
||||||
_frame(0)
|
_frame(0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ class FireTexture: public DynamicTexture
|
|||||||
float* heata;
|
float* heata;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FireTexture();
|
FireTexture(int id);
|
||||||
~FireTexture();
|
~FireTexture();
|
||||||
|
|
||||||
void tick();
|
void tick();
|
||||||
|
|||||||
@@ -111,6 +111,7 @@
|
|||||||
#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);
|
||||||
@@ -221,6 +222,7 @@ 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,6 +172,7 @@ 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,6 +144,7 @@ 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,6 +227,7 @@ 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"));
|
||||||
|
|||||||
2413
src/client/sound/data/burp1.pcm
Normal file
2413
src/client/sound/data/burp1.pcm
Normal file
File diff suppressed because it is too large
Load Diff
102
src/main_glfw.h
102
src/main_glfw.h
@@ -16,7 +16,88 @@
|
|||||||
#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) {
|
||||||
@@ -176,12 +257,19 @@ 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__
|
||||||
glfwMakeContextCurrent(platform->window);
|
resetTouchPointerIds();
|
||||||
|
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);
|
||||||
|
|||||||
@@ -51,13 +51,13 @@ void Chicken::aiStep()
|
|||||||
flap += flapping * 2;
|
flap += flapping * 2;
|
||||||
|
|
||||||
//@todo
|
//@todo
|
||||||
//if (!isBaby()) {
|
if (!isBaby()) {
|
||||||
// if (!level->isClientSide && --eggTime <= 0) {
|
if (!level->isClientSide && --eggTime <= 0) {
|
||||||
// level->playSound(this, "mob.chickenplop", 1.0f, (random.nextFloat() - random.nextFloat()) * 0.2f + 1.0f);
|
level->playSound(this, "mob.chickenplop", 1.0f, (random.nextFloat() - random.nextFloat()) * 0.2f + 1.0f);
|
||||||
// spawnAtLocation(Item::egg->id, 1);
|
spawnAtLocation(Item::egg->id, 1);
|
||||||
// eggTime = random.nextInt(SharedConstants::TicksPerSecond * 60 * 5) + SharedConstants::TicksPerSecond * 60 * 5;
|
eggTime = random.nextInt(SharedConstants::TicksPerSecond * 60 * 5) + SharedConstants::TicksPerSecond * 60 * 5;
|
||||||
// }
|
}
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Chicken::addAdditonalSaveData( CompoundTag* tag )
|
void Chicken::addAdditonalSaveData( CompoundTag* tag )
|
||||||
|
|||||||
Reference in New Issue
Block a user