forked from Kolyah35/minecraft-pe-0.6.1
Compare commits
9 Commits
feature/gr
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d08948fb00 | ||
|
|
061d6db3a9 | ||
|
|
346ec7469e | ||
|
|
d7d887f882 | ||
| ce182b676f | |||
|
|
4b69a1240a | ||
|
|
8f34fbc1ec | ||
|
|
890604256b | ||
|
|
88ef7f3d17 |
@@ -229,6 +229,12 @@ options.fancyGraphics=Fancy graphics
|
||||
options.renderDebug=Debug render
|
||||
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.balanced=Balanced
|
||||
|
||||
BIN
project/android_java/res/raw/burp1.ogg
Normal file
BIN
project/android_java/res/raw/burp1.ogg
Normal file
Binary file not shown.
@@ -129,6 +129,7 @@ public class SoundPlayer
|
||||
new SoundId(R.raw.eat1, "random.eat"),
|
||||
new SoundId(R.raw.eat2, "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.zpig1, "mob.zombiepig.zpig"),
|
||||
|
||||
@@ -10,11 +10,11 @@
|
||||
|
||||
|
||||
#if defined(APPLE_DEMO_PROMOTION)
|
||||
#define NO_NETWORK
|
||||
#define NO_NETWORK
|
||||
#endif
|
||||
|
||||
#if defined(RPI)
|
||||
#define CREATORMODE
|
||||
#define CREATORMODE
|
||||
#endif
|
||||
#include "../network/RakNetInstance.h"
|
||||
#include "../network/ClientSideNetworkHandler.h"
|
||||
@@ -98,8 +98,8 @@
|
||||
static void checkGlError(const char* tag) {
|
||||
#ifdef GLDEBUG
|
||||
while (1) {
|
||||
const int errCode = glGetError();
|
||||
if (errCode == GL_NO_ERROR) break;
|
||||
const int errCode = glGetError();
|
||||
if (errCode == GL_NO_ERROR) break;
|
||||
|
||||
LOGE("################\nOpenGL-error @ %s : #%d\n", tag, errCode);
|
||||
}
|
||||
@@ -117,7 +117,7 @@ const char* Minecraft::progressMessages[] = {
|
||||
int Minecraft::customDebugId = Minecraft::CDI_NONE;
|
||||
|
||||
#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
|
||||
|
||||
bool Minecraft::useAmbientOcclusion = false;
|
||||
@@ -175,17 +175,17 @@ Minecraft::Minecraft() :
|
||||
width(1), height(1),
|
||||
//_respawnPlayerTicks(-1),
|
||||
#ifdef __APPLE__
|
||||
_isSuperFast(false),
|
||||
_isSuperFast(false),
|
||||
#endif
|
||||
_powerVr(false),
|
||||
commandPort(4711),
|
||||
reserved_d1(0),reserved_d2(0),
|
||||
reserved_f1(0),reserved_f2(0), options(this)
|
||||
{
|
||||
//#ifdef ANDROID
|
||||
//#ifdef ANDROID
|
||||
|
||||
#if defined(NO_NETWORK)
|
||||
raknetInstance = new IRakNetInstance();
|
||||
raknetInstance = new IRakNetInstance();
|
||||
#else
|
||||
raknetInstance = new RakNetInstance();
|
||||
#endif
|
||||
@@ -265,7 +265,7 @@ void Minecraft::setLevel(Level* level, const std::string& message /* ="" */, Loc
|
||||
|
||||
if (level != NULL) {
|
||||
level->raknetInstance = raknetInstance;
|
||||
gameMode->initLevel(level);
|
||||
gameMode->initLevel(level);
|
||||
|
||||
if (!player && forceInsertPlayer)
|
||||
{
|
||||
@@ -296,19 +296,19 @@ void Minecraft::setLevel(Level* level, const std::string& message /* ="" */, Loc
|
||||
// Non-threaded
|
||||
generateLevel("Currently not used", level);
|
||||
}
|
||||
} else {
|
||||
player = NULL;
|
||||
}
|
||||
} else {
|
||||
player = NULL;
|
||||
}
|
||||
|
||||
this->lastTickTime = 0;
|
||||
this->lastTickTime = 0;
|
||||
this->_running = true;
|
||||
}
|
||||
|
||||
void Minecraft::leaveGame(bool renameLevel /*=false*/)
|
||||
{
|
||||
if (isGeneratingLevel || !_hasSignaledGeneratingLevelFinished)
|
||||
return;
|
||||
|
||||
if (isGeneratingLevel || !_hasSignaledGeneratingLevelFinished)
|
||||
return;
|
||||
|
||||
isGeneratingLevel = false;
|
||||
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 pp = 0;
|
||||
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) {
|
||||
progressStagePercentage = 100 * pp++ / Max;
|
||||
//printf("level generation progress %d\n", progressStagePercentage);
|
||||
for (int z = 8; z < (CHUNK_CACHE_WIDTH * CHUNK_WIDTH); z += CHUNK_WIDTH) {
|
||||
progressStagePercentage = 100 * pp++ / Max;
|
||||
//printf("level generation progress %d\n", progressStagePercentage);
|
||||
B.start();
|
||||
level->getTile(x, 64, z);
|
||||
level->getTile(x, 64, z);
|
||||
B.stop();
|
||||
L.start();
|
||||
if (level->isNew())
|
||||
while (level->updateLights())
|
||||
;
|
||||
L.stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
A.stop();
|
||||
level->setUpdateLights(true);
|
||||
|
||||
@@ -466,33 +466,33 @@ void Minecraft::update() {
|
||||
}
|
||||
TIMER_POP();
|
||||
|
||||
#ifndef STANDALONE_SERVER
|
||||
if (gameMode != NULL) gameMode->render(timer.a);
|
||||
TIMER_PUSH("sound");
|
||||
soundEngine->update(player, timer.a);
|
||||
TIMER_POP_PUSH("render");
|
||||
gameRenderer->render(timer.a);
|
||||
TIMER_POP();
|
||||
#else
|
||||
#ifndef STANDALONE_SERVER
|
||||
if (gameMode != NULL) gameMode->render(timer.a);
|
||||
TIMER_PUSH("sound");
|
||||
soundEngine->update(player, timer.a);
|
||||
TIMER_POP_PUSH("render");
|
||||
gameRenderer->render(timer.a);
|
||||
TIMER_POP();
|
||||
#else
|
||||
CThread::sleep(1);
|
||||
#endif
|
||||
#endif
|
||||
#ifndef STANDALONE_SERVER
|
||||
Multitouch::resetThisUpdate();
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef STANDALONE_SERVER
|
||||
TIMER_POP();
|
||||
checkGlError("Update finished");
|
||||
|
||||
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||
//#ifndef PLATFORM_DESKTOP
|
||||
//#ifndef PLATFORM_DESKTOP
|
||||
if (!PerfTimer::enabled) {
|
||||
PerfTimer::reset();
|
||||
PerfTimer::enabled = true;
|
||||
}
|
||||
_perfRenderer->renderFpsMeter(1);
|
||||
checkGlError("render debug");
|
||||
//#endif
|
||||
//#endif
|
||||
} else {
|
||||
PerfTimer::enabled = false;
|
||||
}
|
||||
@@ -569,17 +569,17 @@ void Minecraft::tick(int nTick, int maxTick) {
|
||||
#ifndef STANDALONE_SERVER
|
||||
textures->loadAndBindTexture("terrain.png");
|
||||
if (!pause && !(screen && !screen->renderGameBehind())) {
|
||||
#if !defined(RPI)
|
||||
#ifdef __APPLE__
|
||||
if (isSuperFast())
|
||||
#endif
|
||||
{
|
||||
#if !defined(RPI)
|
||||
#ifdef __APPLE__
|
||||
if (isSuperFast())
|
||||
#endif
|
||||
{
|
||||
if (nTick == maxTick) {
|
||||
TIMER_POP_PUSH("textures");
|
||||
textures->tick(true);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
TIMER_POP_PUSH("particles");
|
||||
if (!pause) {
|
||||
@@ -641,8 +641,8 @@ void Minecraft::tickInput() {
|
||||
while (Mouse::next()) {
|
||||
//if (Mouse::getButtonState(MouseAction::ACTION_LEFT))
|
||||
// LOGI("mouse-down-at: %d, %d\n", Mouse::getX(), Mouse::getY());
|
||||
int passedTime = getTimeMs() - lastTickTime;
|
||||
if (passedTime > 200) continue; // @note: As long Mouse::clear CLEARS the whole buffer, it's safe to break here
|
||||
int passedTime = getTimeMs() - lastTickTime;
|
||||
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.
|
||||
|
||||
const MouseAction& e = Mouse::getEvent();
|
||||
@@ -673,14 +673,14 @@ void Minecraft::tickInput() {
|
||||
}
|
||||
/*
|
||||
if (mouseDiggable && options.useMouseForDigging) {
|
||||
if (Mouse::getEventButton() == MouseAction::ACTION_LEFT && Mouse::getEventButtonState()) {
|
||||
handleMouseClick(MouseAction::ACTION_LEFT);
|
||||
lastClickTick = ticks;
|
||||
}
|
||||
if (Mouse::getEventButton() == MouseAction::ACTION_RIGHT && Mouse::getEventButtonState()) {
|
||||
handleMouseClick(MouseAction::ACTION_RIGHT);
|
||||
lastClickTick = ticks;
|
||||
}
|
||||
if (Mouse::getEventButton() == MouseAction::ACTION_LEFT && Mouse::getEventButtonState()) {
|
||||
handleMouseClick(MouseAction::ACTION_LEFT);
|
||||
lastClickTick = ticks;
|
||||
}
|
||||
if (Mouse::getEventButton() == MouseAction::ACTION_RIGHT && Mouse::getEventButtonState()) {
|
||||
handleMouseClick(MouseAction::ACTION_RIGHT);
|
||||
lastClickTick = ticks;
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
@@ -701,20 +701,20 @@ void Minecraft::tickInput() {
|
||||
if (slot >= 0 && slot < gui.getNumSlots())
|
||||
player->inventory->selectSlot(slot);
|
||||
|
||||
#if defined(WIN32)
|
||||
if (digit >= 1 && GetAsyncKeyState(VK_CONTROL) < 0) {
|
||||
// Set adventure settings here!
|
||||
AdventureSettingsPacket p(level->adventureSettings);
|
||||
p.toggle((AdventureSettingsPacket::Flags)(1 << slot));
|
||||
p.fillIn(level->adventureSettings);
|
||||
raknetInstance->send(p);
|
||||
}
|
||||
if (digit == 0) {
|
||||
Pos pos((int)player->x, (int)player->y-1, (int)player->z);
|
||||
SetSpawnPositionPacket p(pos);
|
||||
raknetInstance->send(p);
|
||||
}
|
||||
#endif
|
||||
#if defined(WIN32)
|
||||
if (digit >= 1 && GetAsyncKeyState(VK_CONTROL) < 0) {
|
||||
// Set adventure settings here!
|
||||
AdventureSettingsPacket p(level->adventureSettings);
|
||||
p.toggle((AdventureSettingsPacket::Flags)(1 << slot));
|
||||
p.fillIn(level->adventureSettings);
|
||||
raknetInstance->send(p);
|
||||
}
|
||||
if (digit == 0) {
|
||||
Pos pos((int)player->x, (int)player->y-1, (int)player->z);
|
||||
SetSpawnPositionPacket p(pos);
|
||||
raknetInstance->send(p);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_LEFT_CTRL) {
|
||||
@@ -738,7 +738,7 @@ void Minecraft::tickInput() {
|
||||
/*
|
||||
ImprovedNoise noise;
|
||||
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);
|
||||
}
|
||||
|
||||
#ifdef CHEATS
|
||||
if (key == Keyboard::KEY_U) {
|
||||
onGraphicsReset();
|
||||
player->heal(100);
|
||||
#ifdef CHEATS
|
||||
if (key == Keyboard::KEY_U) {
|
||||
onGraphicsReset();
|
||||
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
|
||||
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_X) {
|
||||
const EntityList& entities = level->getAllEntities();
|
||||
for (int i = entities.size()-1; i >= 0; --i) {
|
||||
Entity* e = entities[i];
|
||||
if (!e->isPlayer())
|
||||
level->removeEntity(e);
|
||||
}
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_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;
|
||||
if (key == Keyboard::KEY_C /*|| key == 4*/) {
|
||||
player->inventory->clearInventoryWithDefault();
|
||||
// @todo: Add saving here for benchmarking
|
||||
}
|
||||
if (key == Keyboard::KEY_H) {
|
||||
setScreen( new PrerenderTilesScreen() );
|
||||
}
|
||||
|
||||
int types[] = {
|
||||
MobTypes::Sheep,
|
||||
MobTypes::Pig,
|
||||
MobTypes::Chicken,
|
||||
MobTypes::Cow,
|
||||
};
|
||||
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() );
|
||||
}
|
||||
|
||||
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 (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||
if (key >= '0' && key <= '9') {
|
||||
_perfRenderer->debugFpsMeterKeyPress(key - '0');
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_X) {
|
||||
const EntityList& entities = level->getAllEntities();
|
||||
for (int i = entities.size()-1; i >= 0; --i) {
|
||||
Entity* e = entities[i];
|
||||
if (!e->isPlayer())
|
||||
level->removeEntity(e);
|
||||
}
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_C /*|| key == 4*/) {
|
||||
player->inventory->clearInventoryWithDefault();
|
||||
// @todo: Add saving here for benchmarking
|
||||
}
|
||||
if (key == Keyboard::KEY_H) {
|
||||
setScreen( new PrerenderTilesScreen() );
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_O) {
|
||||
for (int i = Inventory::MAX_SELECTION_SIZE; i < player->inventory->getContainerSize(); ++i)
|
||||
if (player->inventory->getItem(i))
|
||||
player->inventory->dropSlot(i, false);
|
||||
}
|
||||
if (key == Keyboard::KEY_M) {
|
||||
Difficulty difficulty = (Difficulty)options.getIntValue(OPTIONS_DIFFICULTY);
|
||||
options.set(OPTIONS_DIFFICULTY, (difficulty == Difficulty::PEACEFUL)?
|
||||
Difficulty::NORMAL : Difficulty::PEACEFUL);
|
||||
//setIsCreativeMode( !isCreativeMode() );
|
||||
}
|
||||
|
||||
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||
if (key >= '0' && key <= '9') {
|
||||
_perfRenderer->debugFpsMeterKeyPress(key - '0');
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
if (options.getBooleanValue(OPTIONS_RENDER_DEBUG)) {
|
||||
if (key >= '0' && key <= '9') {
|
||||
@@ -843,33 +843,36 @@ void Minecraft::tickInput() {
|
||||
if (key == Keyboard::KEY_ESCAPE)
|
||||
pauseGame(false);
|
||||
|
||||
#ifndef OPENGL_ES
|
||||
if (key == Keyboard::KEY_P) {
|
||||
static bool isWireFrame = false;
|
||||
isWireFrame = !isWireFrame;
|
||||
glPolygonMode(GL_FRONT, 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();
|
||||
#ifdef PLATFORM_DESKTOP
|
||||
if (key == Keyboard::KEY_P) {
|
||||
static bool isWireFrame = false;
|
||||
isWireFrame = !isWireFrame;
|
||||
glPolygonMode(GL_FRONT, isWireFrame? GL_LINE : GL_FILL);
|
||||
//glPolygonMode(GL_BACK, isWireFrame? GL_LINE : GL_FILL);
|
||||
}
|
||||
#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");
|
||||
|
||||
|
||||
static bool prevMouseDownLeft = false;
|
||||
|
||||
if (Mouse::getButtonState(MouseAction::ACTION_LEFT) == 0) {
|
||||
gameMode->stopDestroyBlock();
|
||||
}
|
||||
if (!useTouchscreen()) {
|
||||
if (Mouse::getButtonState(MouseAction::ACTION_LEFT) == 0) {
|
||||
gameMode->stopDestroyBlock();
|
||||
}
|
||||
|
||||
if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) {
|
||||
gameMode->releaseUsingItem(player);
|
||||
if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) {
|
||||
gameMode->releaseUsingItem(player);
|
||||
}
|
||||
}
|
||||
|
||||
if (useTouchscreen()) {
|
||||
@@ -880,6 +883,9 @@ void Minecraft::tickInput() {
|
||||
handleBuildAction(&bai);
|
||||
} else {
|
||||
gameMode->stopDestroyBlock();
|
||||
if (player && player->isUsingItem()) {
|
||||
gameMode->releaseUsingItem(player);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Desktop: left mouse = destroy/attack
|
||||
@@ -932,35 +938,35 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
|
||||
}
|
||||
if(player->isUsingItem())
|
||||
return;
|
||||
bool mayUse = true;
|
||||
bool mayUse = true;
|
||||
|
||||
if (!hitResult.isHit()) {
|
||||
if (action->isRemove() && !gameMode->isCreativeType()) {
|
||||
missTime = 10;
|
||||
}
|
||||
} else if (hitResult.type == ENTITY) {
|
||||
if (action->isAttack()) {
|
||||
} else if (hitResult.type == ENTITY) {
|
||||
if (action->isAttack()) {
|
||||
player->swing();
|
||||
//LOGI("attacking!\n");
|
||||
InteractPacket packet(InteractPacket::Attack, player->entityId, hitResult.entity->entityId);
|
||||
raknetInstance->send(packet);
|
||||
gameMode->attack(player, hitResult.entity);
|
||||
gameMode->attack(player, hitResult.entity);
|
||||
} else if (action->isInteract()) {
|
||||
if (hitResult.entity->interactPreventDefault())
|
||||
mayUse = false;
|
||||
//LOGI("interacting!\n");
|
||||
InteractPacket packet(InteractPacket::Interact, player->entityId, hitResult.entity->entityId);
|
||||
raknetInstance->send(packet);
|
||||
gameMode->interact(player, hitResult.entity);
|
||||
}
|
||||
} else if (hitResult.type == TILE) {
|
||||
gameMode->interact(player, hitResult.entity);
|
||||
}
|
||||
} else if (hitResult.type == TILE) {
|
||||
int x = hitResult.x;
|
||||
int y = hitResult.y;
|
||||
int z = hitResult.z;
|
||||
int face = hitResult.f;
|
||||
int y = hitResult.y;
|
||||
int z = hitResult.z;
|
||||
int face = hitResult.f;
|
||||
|
||||
int oldTileId = level->getTile(x, y, z);
|
||||
Tile* oldTile = Tile::tiles[oldTileId];
|
||||
Tile* oldTile = Tile::tiles[oldTileId];
|
||||
|
||||
//bool tryDestroyBlock = false;
|
||||
|
||||
@@ -969,8 +975,8 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
|
||||
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));
|
||||
level->extinguishFire(x, y, z, hitResult.f);
|
||||
|
||||
level->extinguishFire(x, y, z, hitResult.f);
|
||||
|
||||
if (action->isFirstRemove()) {
|
||||
gameMode->startDestroyBlock(x, y, z, hitResult.f);
|
||||
} else {
|
||||
@@ -979,16 +985,16 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
|
||||
|
||||
particleEngine->crack(x, y, z, hitResult.f);
|
||||
player->swing();
|
||||
}
|
||||
}
|
||||
else {
|
||||
ItemInstance* item = player->inventory->getSelected();
|
||||
if (gameMode->useItemOn(player, level, item, x, y, z, face, hitResult.pos)) {
|
||||
mayUse = false;
|
||||
player->swing();
|
||||
#ifdef RPI
|
||||
} else if (item && item->id == ((Item*)Item::sword_iron)->id) {
|
||||
player->swing();
|
||||
#endif
|
||||
if (gameMode->useItemOn(player, level, item, x, y, z, face, hitResult.pos)) {
|
||||
mayUse = false;
|
||||
player->swing();
|
||||
#ifdef RPI
|
||||
} else if (item && item->id == ((Item*)Item::sword_iron)->id) {
|
||||
player->swing();
|
||||
#endif
|
||||
}
|
||||
if (item && item->count <= 0) {
|
||||
player->inventory->clearSlot(player->inventory->selected);
|
||||
@@ -1014,7 +1020,7 @@ void Minecraft::handleBuildAction(BuildActionIntention* action) {
|
||||
|
||||
bool Minecraft::isOnlineClient()
|
||||
{
|
||||
return (level != NULL && level->isClientSide);
|
||||
return (level != NULL && level->isClientSide);
|
||||
}
|
||||
|
||||
bool Minecraft::isOnline()
|
||||
@@ -1081,8 +1087,8 @@ void Minecraft::setScreen( Screen* screen )
|
||||
|
||||
if (screen->isInGameScreen() && level) {
|
||||
level->saveLevelData();
|
||||
level->saveGame();
|
||||
}
|
||||
level->saveGame();
|
||||
}
|
||||
|
||||
//noRender = false;
|
||||
} else {
|
||||
@@ -1119,7 +1125,7 @@ void Minecraft::releaseMouse()
|
||||
|
||||
bool Minecraft::useTouchscreen() {
|
||||
#if defined(TARGET_OS_IPHONE)
|
||||
return true;
|
||||
return true;
|
||||
#elif defined(RPI)
|
||||
return false;
|
||||
#endif
|
||||
@@ -1142,7 +1148,8 @@ void Minecraft::init()
|
||||
textures->addDynamicTexture(new WaterSideTexture());
|
||||
textures->addDynamicTexture(new LavaTexture());
|
||||
textures->addDynamicTexture(new LavaSideTexture());
|
||||
textures->addDynamicTexture(new FireTexture());
|
||||
textures->addDynamicTexture(new FireTexture(0));
|
||||
textures->addDynamicTexture(new FireTexture(1));
|
||||
gui.texturesLoaded(textures);
|
||||
|
||||
levelRenderer = new LevelRenderer(this);
|
||||
@@ -1150,7 +1157,7 @@ void Minecraft::init()
|
||||
particleEngine = new ParticleEngine(level, textures);
|
||||
|
||||
// 4j's code for reference
|
||||
// FoliageColor::init(textures->loadTexturePixels(L"misc/foliagecolor.png"));
|
||||
// FoliageColor::init(textures->loadTexturePixels(L"misc/foliagecolor.png"));
|
||||
|
||||
|
||||
// my code
|
||||
@@ -1162,7 +1169,7 @@ void Minecraft::init()
|
||||
TextureId grassId = (textures->loadTexture("misc/grasscolor.png")); // loading the uh png for foliage color
|
||||
int* grassPixels = textures->loadTexturePixels(grassId, "misc/grasscolor.png");
|
||||
GrassColor::init(grassPixels);
|
||||
|
||||
|
||||
bool tint = options.getBooleanValue(OPTIONS_FOLIAGE_TINT); // finally, toggleable foliage color
|
||||
FoliageColor::setUseTint(tint);
|
||||
GrassColor::setUseTint(tint);
|
||||
@@ -1187,59 +1194,82 @@ void Minecraft::init()
|
||||
|
||||
void Minecraft::setSize(int w, int h) {
|
||||
#ifndef STANDALONE_SERVER
|
||||
transformResolution(&w, &h);
|
||||
transformResolution(&w, &h);
|
||||
|
||||
width = w;
|
||||
height = h;
|
||||
|
||||
int guiScale = options.getIntValue(OPTIONS_GUI_SCALE);
|
||||
|
||||
// determine gui scale, optionally overriding auto
|
||||
if (guiScale != 0) {
|
||||
// manual selection: 1->small, 2->medium, 3->large, 4->larger, 5->largest
|
||||
switch (guiScale) {
|
||||
case 1: Gui::GuiScale = 2.0f; break;
|
||||
case 2: Gui::GuiScale = 3.0f; break;
|
||||
case 3: Gui::GuiScale = 4.0f; break;
|
||||
case 4: Gui::GuiScale = 5.0f; break;
|
||||
case 5: Gui::GuiScale = 6.0f; break;
|
||||
default: Gui::GuiScale = 1.0f; break; // auto
|
||||
int screenWidth;
|
||||
int screenHeight;
|
||||
//#ifdef PLATFORM_DESKTOP
|
||||
if (options.getBooleanValue(OPTIONS_WINDOW_SCALE)){ // scales with resolution using a formula instead of having hardcoded if checks
|
||||
int guiScale = options.getIntValue(OPTIONS_GUI_SCALE);
|
||||
if (guiScale == 0) {
|
||||
guiScale = 1000;
|
||||
}
|
||||
|
||||
// determine gui scale, optionally overriding auto
|
||||
|
||||
|
||||
Gui::GuiScale = (float)Mth::Min(guiScale, Mth::Max(1, Mth::Min(width / 320, height / 240)));
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
// auto compute from resolution
|
||||
if (width >= 1000) {
|
||||
#ifdef __APPLE__
|
||||
Gui::GuiScale = (width > 2000)? 8.0f : 4.0f;
|
||||
#else
|
||||
Gui::GuiScale = 4.0f;
|
||||
#endif
|
||||
}
|
||||
else if (width >= 800) {
|
||||
|
||||
|
||||
int guiScale = options.getIntValue(OPTIONS_GUI_SCALE);
|
||||
|
||||
// determine gui scale, optionally overriding auto
|
||||
if (guiScale != 0) {
|
||||
// manual selection: 1->small, 2->medium, 3->large, 4->larger, 5->largest
|
||||
switch (guiScale) {
|
||||
case 1: Gui::GuiScale = 2.0f; break;
|
||||
case 2: Gui::GuiScale = 3.0f; break;
|
||||
case 3: Gui::GuiScale = 4.0f; break;
|
||||
case 4: Gui::GuiScale = 5.0f; break;
|
||||
case 5: Gui::GuiScale = 6.0f; break;
|
||||
default: Gui::GuiScale = 1.0f; break; // auto
|
||||
}
|
||||
} else {
|
||||
// auto compute from resolution
|
||||
if (width >= 1000) {
|
||||
#ifdef __APPLE__
|
||||
Gui::GuiScale = 4.0f;
|
||||
Gui::GuiScale = (width > 2000)? 8.0f : 4.0f;
|
||||
#else
|
||||
Gui::GuiScale = 3.0f;
|
||||
Gui::GuiScale = 4.0f;
|
||||
#endif
|
||||
}
|
||||
else if (width >= 400)
|
||||
Gui::GuiScale = 2.0f;
|
||||
else
|
||||
Gui::GuiScale = 1.0f;
|
||||
}
|
||||
else if (width >= 800) {
|
||||
#ifdef __APPLE__
|
||||
Gui::GuiScale = 4.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()) {
|
||||
// float pixelsPerMillimeter = options.getProgressValue(&Option::PIXELS_PER_MILLIMETER);
|
||||
// pixelCalc.setPixelsPerMillimeter(pixelsPerMillimeter);
|
||||
// pixelCalcUi.setPixelsPerMillimeter(pixelsPerMillimeter * Gui::InvGuiScale);
|
||||
// }
|
||||
Gui::InvGuiScale = 1.0f / Gui::GuiScale;
|
||||
screenWidth = (int)(width * Gui::InvGuiScale);
|
||||
screenHeight = (int)(height * Gui::InvGuiScale);
|
||||
|
||||
Config config = createConfig(this);
|
||||
gui.onConfigChanged(config);
|
||||
|
||||
|
||||
if (screen)
|
||||
screen->setSize(screenWidth, screenHeight);
|
||||
|
||||
@@ -1268,9 +1298,9 @@ void Minecraft::reloadOptions() {
|
||||
|
||||
LOGI("Reloading-options\n");
|
||||
|
||||
// @todo @fix Android and iOS behaves a bit differently when leaving
|
||||
// an options screen (Android recreates OpenGL surface)
|
||||
setSize(width, height);
|
||||
// @todo @fix Android and iOS behaves a bit differently when leaving
|
||||
// an options screen (Android recreates OpenGL surface)
|
||||
setSize(width, height);
|
||||
}
|
||||
|
||||
void Minecraft::_reloadInput() {
|
||||
@@ -1281,17 +1311,17 @@ void Minecraft::_reloadInput() {
|
||||
if (useTouchHolder) {
|
||||
inputHolder = new TouchInputHolder(this, &options);
|
||||
} else {
|
||||
#if defined(ANDROID) || defined(__APPLE__)
|
||||
inputHolder = new CustomInputHolder(
|
||||
new XperiaPlayInput(&options),
|
||||
new ControllerTurnInput(2, ControllerTurnInput::MODE_DELTA),
|
||||
new IBuildInput());
|
||||
#else
|
||||
inputHolder = new CustomInputHolder(
|
||||
new KeyboardInput(&options),
|
||||
new MouseTurnInput(MouseTurnInput::MODE_DELTA, width/2, height/2),
|
||||
new MouseBuildInput());
|
||||
#endif
|
||||
#if defined(ANDROID) || defined(__APPLE__)
|
||||
inputHolder = new CustomInputHolder(
|
||||
new XperiaPlayInput(&options),
|
||||
new ControllerTurnInput(2, ControllerTurnInput::MODE_DELTA),
|
||||
new IBuildInput());
|
||||
#else
|
||||
inputHolder = new CustomInputHolder(
|
||||
new KeyboardInput(&options),
|
||||
new MouseTurnInput(MouseTurnInput::MODE_DELTA, width/2, height/2),
|
||||
new MouseBuildInput());
|
||||
#endif
|
||||
}
|
||||
|
||||
mouseHandler.setTurnInput(inputHolder->getTurnInput());
|
||||
@@ -1334,7 +1364,7 @@ bool Minecraft::joinMultiplayerFromString( const std::string& server )
|
||||
{
|
||||
std::string ip = "";
|
||||
std::string port = "19132";
|
||||
|
||||
|
||||
size_t pos = server.find(":");
|
||||
|
||||
if (pos != std::string::npos) {
|
||||
@@ -1345,7 +1375,7 @@ bool Minecraft::joinMultiplayerFromString( const std::string& server )
|
||||
}
|
||||
|
||||
printf("%s \n", port.c_str());
|
||||
|
||||
|
||||
if (isLookingForMultiplayer && netCallback) {
|
||||
isLookingForMultiplayer = false;
|
||||
printf("test");
|
||||
@@ -1356,18 +1386,18 @@ bool Minecraft::joinMultiplayerFromString( const std::string& server )
|
||||
}
|
||||
|
||||
void Minecraft::hostMultiplayer(int port) {
|
||||
// Tear down last instance
|
||||
raknetInstance->disconnect();
|
||||
delete netCallback;
|
||||
netCallback = NULL;
|
||||
// Tear down last instance
|
||||
raknetInstance->disconnect();
|
||||
delete netCallback;
|
||||
netCallback = NULL;
|
||||
|
||||
#if !defined(NO_NETWORK)
|
||||
netCallback = new ServerSideNetworkHandler(this, raknetInstance);
|
||||
#ifdef STANDALONE_SERVER
|
||||
raknetInstance->host("Server", port, 16);
|
||||
#else
|
||||
raknetInstance->host(options.getStringValue(OPTIONS_USERNAME), port);
|
||||
#endif
|
||||
#ifdef STANDALONE_SERVER
|
||||
raknetInstance->host("Server", port, 16);
|
||||
#else
|
||||
raknetInstance->host(options.getStringValue(OPTIONS_USERNAME), port);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1421,9 +1451,9 @@ void Minecraft::_levelGenerated()
|
||||
player->resetPos(false);
|
||||
}
|
||||
|
||||
if (level && level->dimension) {
|
||||
|
||||
level->dimension->FogType = options.getIntValue(OPTIONS_FOG_TYPE);
|
||||
if (level && level->dimension) {
|
||||
|
||||
level->dimension->FogType = options.getIntValue(OPTIONS_FOG_TYPE);
|
||||
}
|
||||
|
||||
|
||||
@@ -1454,14 +1484,14 @@ void Minecraft::_levelGenerated()
|
||||
|
||||
std::string Minecraft::gatherStats1() {
|
||||
#ifndef STANDALONE_SERVER
|
||||
return levelRenderer->gatherStats1();
|
||||
return levelRenderer->gatherStats1();
|
||||
#endif
|
||||
return "Blank";
|
||||
}
|
||||
|
||||
std::string Minecraft::gatherStats2() {
|
||||
#ifndef STANDALONE_SERVER
|
||||
return levelRenderer->gatherStats2();
|
||||
return levelRenderer->gatherStats2();
|
||||
#endif
|
||||
return "Blank";
|
||||
}
|
||||
@@ -1474,7 +1504,7 @@ std::string Minecraft::gatherStats3() {
|
||||
}
|
||||
|
||||
std::string Minecraft::gatherStats4() {
|
||||
return level->gatherChunkSourceStats();
|
||||
return level->gatherChunkSourceStats();
|
||||
}
|
||||
|
||||
|
||||
@@ -1527,7 +1557,7 @@ void Minecraft::onGraphicsReset()
|
||||
{
|
||||
#ifndef STANDALONE_SERVER
|
||||
textures->clear();
|
||||
|
||||
|
||||
font->onGraphicsReset();
|
||||
gui.onGraphicsReset();
|
||||
|
||||
@@ -1566,12 +1596,12 @@ LevelStorageSource* Minecraft::getLevelSource()
|
||||
|
||||
void Minecraft::audioEngineOn() {
|
||||
#ifndef STANDALONE_SERVER
|
||||
soundEngine->enable(true);
|
||||
soundEngine->enable(true);
|
||||
#endif
|
||||
}
|
||||
void Minecraft::audioEngineOff() {
|
||||
#ifndef STANDALONE_SERVER
|
||||
soundEngine->enable(false);
|
||||
soundEngine->enable(false);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1642,17 +1672,17 @@ void Minecraft::optionUpdated(OptionId option, bool value ) {
|
||||
}
|
||||
|
||||
void Minecraft::optionUpdated(OptionId option, float value ) {
|
||||
// #ifndef STANDALONE_SERVER
|
||||
// if(option == OPTIONS_PIXELS_PER_MILLIMETER) {
|
||||
// pixelCalcUi.setPixelsPerMillimeter(value * Gui::InvGuiScale);
|
||||
// pixelCalc.setPixelsPerMillimeter(value);
|
||||
// }
|
||||
// #endif
|
||||
// #ifndef STANDALONE_SERVER
|
||||
// if(option == OPTIONS_PIXELS_PER_MILLIMETER) {
|
||||
// pixelCalcUi.setPixelsPerMillimeter(value * Gui::InvGuiScale);
|
||||
// pixelCalc.setPixelsPerMillimeter(value);
|
||||
// }
|
||||
// #endif
|
||||
}
|
||||
|
||||
void Minecraft::optionUpdated(OptionId option, int value ) {
|
||||
if(option == OPTIONS_GUI_SCALE) {
|
||||
// reapply screen scaling using current window size
|
||||
setSize(width, height);
|
||||
}
|
||||
if(option == OPTIONS_GUI_SCALE) {
|
||||
// reapply screen scaling using current window size
|
||||
setSize(width, height);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,6 +82,10 @@ OptionBool restoredAnims("restoredAnims", true);
|
||||
|
||||
OptionInt debugStyle("debugStyle", 0, 0, 1);
|
||||
|
||||
OptionInt menuStyle("menuStyle",0, 0, 2);
|
||||
|
||||
OptionBool windowScale("windowScale", false);
|
||||
|
||||
OptionInt keyForward("key.forward", Keyboard::KEY_W);
|
||||
OptionInt keyLeft("key.left", Keyboard::KEY_A);
|
||||
OptionInt keyBack("key.back", Keyboard::KEY_S);
|
||||
@@ -134,6 +138,7 @@ void Options::initTable() {
|
||||
|
||||
|
||||
m_options[OPTIONS_GUI_SCALE] = &guiScale;
|
||||
m_options[OPTIONS_WINDOW_SCALE] = &windowScale;
|
||||
|
||||
m_options[OPTIONS_SKIN] = &skin;
|
||||
m_options[OPTIONS_USERNAME] = &username;
|
||||
@@ -170,6 +175,8 @@ void Options::initTable() {
|
||||
|
||||
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
|
||||
|
||||
m_options[OPTIONS_MENU_STYLE] = &menuStyle;
|
||||
|
||||
m_options[OPTIONS_KEY_FORWARD] = &keyForward;
|
||||
m_options[OPTIONS_KEY_LEFT] = &keyLeft;
|
||||
m_options[OPTIONS_KEY_BACK] = &keyBack;
|
||||
|
||||
@@ -37,6 +37,7 @@ enum OptionId {
|
||||
OPTIONS_BAR_ON_TOP,
|
||||
OPTIONS_ALLOW_SPRINT,
|
||||
OPTIONS_AUTOJUMP,
|
||||
OPTIONS_WINDOW_SCALE,
|
||||
|
||||
// Graphics
|
||||
OPTIONS_RENDER_DEBUG,
|
||||
@@ -51,6 +52,7 @@ enum OptionId {
|
||||
OPTIONS_FANCY_GRAPHICS,
|
||||
OPTIONS_NORMAL_LIGHTING,
|
||||
|
||||
|
||||
// Cheats / debug
|
||||
OPTIONS_FLY_SPEED,
|
||||
OPTIONS_CAMERA_SPEED,
|
||||
@@ -95,6 +97,8 @@ enum OptionId {
|
||||
OPTIONS_BEAUTIFUL_SKY,
|
||||
OPTIONS_VIGNETTE,
|
||||
OPTIONS_DEBUG_STYLE,
|
||||
OPTIONS_COMPLETE_LIGHTING,
|
||||
OPTIONS_MENU_STYLE,
|
||||
// Should be last!
|
||||
OPTIONS_COUNT
|
||||
};
|
||||
|
||||
@@ -224,58 +224,58 @@ void Gui::handleClick(int button, int x, int y) {
|
||||
}
|
||||
}
|
||||
|
||||
void Gui::handleKeyPressed(int key)
|
||||
{
|
||||
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
|
||||
if (isChatting) {
|
||||
// Allow scrolling the chat history with the mouse/keyboard when chat is open
|
||||
if (key == 38) { // VK_UP
|
||||
scrollChat(1);
|
||||
return;
|
||||
} else if (key == 40) { // VK_DOWN
|
||||
scrollChat(-1);
|
||||
return;
|
||||
} else if (key == 33) { // VK_PRIOR (Page Up)
|
||||
// Scroll by a page
|
||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||
int maxVisible = (screenHeight - 48) / 9;
|
||||
scrollChat(maxVisible);
|
||||
return;
|
||||
} else if (key == 34) { // VK_NEXT (Page Down)
|
||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||
int maxVisible = (screenHeight - 48) / 9;
|
||||
scrollChat(-maxVisible);
|
||||
return;
|
||||
void Gui::handleKeyPressed(int key)
|
||||
{
|
||||
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
|
||||
if (isChatting) {
|
||||
// Allow scrolling the chat history with the mouse/keyboard when chat is open
|
||||
if (key == 38) { // VK_UP
|
||||
scrollChat(1);
|
||||
return;
|
||||
} else if (key == 40) { // VK_DOWN
|
||||
scrollChat(-1);
|
||||
return;
|
||||
} else if (key == 33) { // VK_PRIOR (Page Up)
|
||||
// Scroll by a page
|
||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||
int maxVisible = (screenHeight - 48) / 9;
|
||||
scrollChat(maxVisible);
|
||||
return;
|
||||
} else if (key == 34) { // VK_NEXT (Page Down)
|
||||
int screenHeight = (int)(minecraft->height * InvGuiScale);
|
||||
int maxVisible = (screenHeight - 48) / 9;
|
||||
scrollChat(-maxVisible);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (key == Keyboard::KEY_F1) {
|
||||
minecraft->options.toggle(OPTIONS_HIDEGUI);
|
||||
}
|
||||
if (key == Keyboard::KEY_F1) {
|
||||
minecraft->options.toggle(OPTIONS_HIDEGUI);
|
||||
}
|
||||
|
||||
if (key == 99)
|
||||
{
|
||||
if (minecraft->player->inventory->selected > 0)
|
||||
if (key == 99)
|
||||
{
|
||||
minecraft->player->inventory->selected--;
|
||||
if (minecraft->player->inventory->selected > 0)
|
||||
{
|
||||
minecraft->player->inventory->selected--;
|
||||
}
|
||||
}
|
||||
else if (key == 4)
|
||||
{
|
||||
if (minecraft->player->inventory->selected < (getNumSlots() - 2))
|
||||
{
|
||||
minecraft->player->inventory->selected++;
|
||||
}
|
||||
}
|
||||
else if (key == 100)
|
||||
{
|
||||
minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION);
|
||||
}
|
||||
else if (key == minecraft->options.getIntValue(OPTIONS_KEY_DROP))
|
||||
{
|
||||
minecraft->player->inventory->dropSlot(minecraft->player->inventory->selected, false);
|
||||
}
|
||||
}
|
||||
else if (key == 4)
|
||||
{
|
||||
if (minecraft->player->inventory->selected < (getNumSlots() - 2))
|
||||
{
|
||||
minecraft->player->inventory->selected++;
|
||||
}
|
||||
}
|
||||
else if (key == 100)
|
||||
{
|
||||
minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION);
|
||||
}
|
||||
else if (key == minecraft->options.getIntValue(OPTIONS_KEY_DROP))
|
||||
{
|
||||
minecraft->player->inventory->dropSlot(minecraft->player->inventory->selected, false);
|
||||
}
|
||||
}
|
||||
|
||||
void Gui::scrollChat(int delta) {
|
||||
if (delta == 0)
|
||||
@@ -782,6 +782,25 @@ void Gui::renderDebugInfo() {
|
||||
long day = worldTime / Level::TICKS_PER_DAY;
|
||||
long seed = lvl ? lvl->getSeed() : 0;
|
||||
|
||||
// Block looking at
|
||||
std::string CurrentTile = "Air";
|
||||
if (minecraft->hitResult.type == TILE) {
|
||||
int LookingX = minecraft->hitResult.x;
|
||||
int LookingY = minecraft->hitResult.y;
|
||||
int LookingZ = minecraft->hitResult.z;
|
||||
|
||||
int tileID = minecraft->level->getTile(LookingX, LookingY, LookingZ);
|
||||
if (tileID > 0 && tileID < 256){
|
||||
Tile* LookingTile = Tile::tiles[tileID];
|
||||
if (LookingTile != NULL) {
|
||||
CurrentTile = LookingTile->getDescriptionId();
|
||||
} else {
|
||||
CurrentTile = "Unknown Tile";
|
||||
}
|
||||
} else {
|
||||
CurrentTile = "Air";
|
||||
}
|
||||
}
|
||||
// Build lines (NULL entry = blank gap)
|
||||
Font* font = minecraft->font;
|
||||
|
||||
@@ -820,6 +839,9 @@ void Gui::renderDebugInfo() {
|
||||
|
||||
sprintf(buf, "Biome: %s", biomeName);
|
||||
drawString(font, buf, 2, 124, 0xE0E0E0);
|
||||
|
||||
sprintf(buf, "Looking at: %s", CurrentTile.c_str());
|
||||
drawString(font, buf, 2, 134, 0xE0E0E0);
|
||||
}
|
||||
else if (minecraft->options.getIntValue(OPTIONS_DEBUG_STYLE) == 1){
|
||||
|
||||
|
||||
@@ -56,6 +56,28 @@ void OptionsItem::render( Minecraft* minecraft, int xm, int ym ) {
|
||||
}
|
||||
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);
|
||||
super::render(minecraft, xm, ym);
|
||||
|
||||
@@ -23,12 +23,15 @@ DeathScreen::~DeathScreen()
|
||||
|
||||
void DeathScreen::init()
|
||||
{
|
||||
if (/* minecraft->useTouchscreen() */ true) {
|
||||
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
|
||||
bRespawn = new Touch::TButton(1, "Respawn!");
|
||||
bTitle = new Touch::TButton(2, "Main menu");
|
||||
} else {
|
||||
} else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) {
|
||||
bRespawn = new Button(1, "Respawn!");
|
||||
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(bTitle);
|
||||
@@ -39,13 +42,23 @@ void DeathScreen::init()
|
||||
|
||||
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->x = width/2 - bRespawn->width - 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() {
|
||||
@@ -56,10 +69,20 @@ void DeathScreen::render( int xm, int ym, float a )
|
||||
{
|
||||
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();
|
||||
glScalef2(2, 2, 2);
|
||||
drawCenteredString(font, "You died!", width / 2 / 2, height / 8, 0xffffff);
|
||||
glPopMatrix2();
|
||||
}
|
||||
|
||||
if (_tick >= WAIT_TICKS)
|
||||
Screen::render(xm, ym, a);
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "../../renderer/Textures.h"
|
||||
#include "../../gamemode/GameMode.h"
|
||||
#include "ArmorScreen.h"
|
||||
#include "crafting/WorkbenchScreen.h"
|
||||
#include "../components/Button.h"
|
||||
|
||||
#if defined(__APPLE__)
|
||||
@@ -27,7 +28,8 @@ IngameBlockSelectionScreen::IngameBlockSelectionScreen()
|
||||
InventoryRows(1),
|
||||
InventoryCols(1),
|
||||
InventorySize(1),
|
||||
bArmor(1, "Armor")
|
||||
bArmor(1, "Armor"),
|
||||
bCrafting(1, "Crafting")
|
||||
{
|
||||
}
|
||||
|
||||
@@ -42,6 +44,19 @@ void IngameBlockSelectionScreen::init()
|
||||
(float)getSlotPosY(0) - 4,
|
||||
(float)getSlotPosX(InventoryCols) + 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();
|
||||
if (!selected || selected->isNull()) {
|
||||
@@ -58,13 +73,6 @@ void IngameBlockSelectionScreen::init()
|
||||
}
|
||||
if (!isAllowed(selectedItem))
|
||||
selectedItem = 0;
|
||||
|
||||
if (!minecraft->isCreativeMode()) {
|
||||
bArmor.width = 42;
|
||||
bArmor.x = 0;
|
||||
bArmor.y = height - bArmor.height;
|
||||
buttons.push_back(&bArmor);
|
||||
}
|
||||
}
|
||||
|
||||
void IngameBlockSelectionScreen::removed()
|
||||
@@ -124,7 +132,7 @@ void IngameBlockSelectionScreen::renderSlots()
|
||||
//w.printEvery(1000, "render-blocksel");
|
||||
|
||||
glDisable2(GL_RESCALE_NORMAL);
|
||||
Lighting::turnOn(minecraft);
|
||||
Lighting::turnOff();
|
||||
}
|
||||
|
||||
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);
|
||||
} else {
|
||||
_pendingQuit = !_area.isInside((float)x, (float)y)
|
||||
&& !bArmor.isInside(x, y);
|
||||
&& !bArmor.isInside(x, y) && !bCrafting.isInside(x, y);
|
||||
}
|
||||
}
|
||||
if (!_pendingQuit)
|
||||
@@ -338,5 +346,8 @@ void IngameBlockSelectionScreen::buttonClicked( Button* button )
|
||||
if (button == &bArmor) {
|
||||
minecraft->setScreen(new ArmorScreen());
|
||||
}
|
||||
if (button == &bCrafting) {
|
||||
minecraft->setScreen(new WorkbenchScreen(Recipe::SIZE_2X2));
|
||||
}
|
||||
super::buttonClicked(button);
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ private:
|
||||
bool _pendingQuit;
|
||||
|
||||
Button bArmor;
|
||||
Button bCrafting;
|
||||
|
||||
RectangleArea _area;
|
||||
};
|
||||
|
||||
@@ -197,6 +197,7 @@ void OptionsScreen::generateOptionScreens() {
|
||||
optionPanes[1]->addOptionItem(OPTIONS_DIFFICULTY, minecraft)
|
||||
.addOptionItem(OPTIONS_SERVER_VISIBLE, minecraft)
|
||||
.addOptionItem(OPTIONS_THIRD_PERSON_VIEW, minecraft)
|
||||
.addOptionItem(OPTIONS_WINDOW_SCALE, minecraft)
|
||||
.addOptionItem(OPTIONS_GUI_SCALE, minecraft)
|
||||
.addOptionItem(OPTIONS_SENSITIVITY, minecraft)
|
||||
.addOptionItem(OPTIONS_MUSIC_VOLUME, minecraft)
|
||||
@@ -223,6 +224,7 @@ void OptionsScreen::generateOptionScreens() {
|
||||
// .addOptionItem(&Option::ANAGLYPH, minecraft)
|
||||
.addOptionItem(OPTIONS_LIMIT_FRAMERATE, minecraft)
|
||||
.addOptionItem(OPTIONS_VSYNC, minecraft)
|
||||
.addOptionItem(OPTIONS_VIEW_DISTANCE, minecraft)
|
||||
.addOptionItem(OPTIONS_RENDER_DEBUG, minecraft)
|
||||
.addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft)
|
||||
.addOptionItem(OPTIONS_VIEW_BOBBING, minecraft)
|
||||
@@ -233,6 +235,7 @@ void OptionsScreen::generateOptionScreens() {
|
||||
|
||||
optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
|
||||
.addOptionItem(OPTIONS_BAR_ON_TOP, minecraft)
|
||||
.addOptionItem(OPTIONS_MENU_STYLE, minecraft)
|
||||
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft)
|
||||
.addOptionItem(OPTIONS_FOLIAGE_TINT, minecraft)
|
||||
.addOptionItem(OPTIONS_TINTED_SIDE, minecraft)
|
||||
|
||||
@@ -10,18 +10,18 @@
|
||||
#include "client/gui/screens/OptionsScreen.h"
|
||||
|
||||
PauseScreen::PauseScreen(bool wasBackPaused)
|
||||
: saveStep(0),
|
||||
: saveStep(0),
|
||||
visibleTime(0),
|
||||
bContinue(0),
|
||||
bQuit(0),
|
||||
bOptions(0),
|
||||
bQuitAndSaveLocally(0),
|
||||
bServerVisibility(0),
|
||||
// bThirdPerson(0),
|
||||
// bThirdPerson(0),
|
||||
wasBackPaused(wasBackPaused),
|
||||
// bSound(OPTIONS_SOUND_VOLUME, 1, 0),
|
||||
bThirdPerson(OPTIONS_THIRD_PERSON_VIEW),
|
||||
bHideGui(OPTIONS_HIDEGUI)
|
||||
bHideGui(OPTIONS_HIDEGUI)
|
||||
{
|
||||
ImageDef def;
|
||||
def.setSrc(IntRectangle(160, 144, 39, 31));
|
||||
@@ -34,7 +34,7 @@ PauseScreen::PauseScreen(bool wasBackPaused)
|
||||
// bSound.setImageDef(def, true);
|
||||
defSrc.y += defSrc.h;
|
||||
bThirdPerson.setImageDef(def, true);
|
||||
bHideGui.setImageDef(def, true);
|
||||
bHideGui.setImageDef(def, true);
|
||||
//void setImageDef(ImageDef& imageDef, bool setButtonSize);
|
||||
}
|
||||
|
||||
@@ -44,24 +44,31 @@ PauseScreen::~PauseScreen() {
|
||||
delete bQuitAndSaveLocally;
|
||||
delete bServerVisibility;
|
||||
delete bOptions;
|
||||
// delete bThirdPerson;
|
||||
// delete bThirdPerson;
|
||||
}
|
||||
|
||||
void PauseScreen::init() {
|
||||
if (/* minecraft->useTouchscreen() */ true) {
|
||||
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
|
||||
bContinue = new Touch::TButton(1, "Back to game");
|
||||
bOptions = new Touch::TButton(5, "Options");
|
||||
bQuit = new Touch::TButton(2, "Quit to title");
|
||||
bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map");
|
||||
bServerVisibility = new Touch::TButton(4, "");
|
||||
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
|
||||
} else {
|
||||
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
|
||||
} else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) {
|
||||
bContinue = new Button(1, "Back to game");
|
||||
bOptions = new Button(5, "Options");
|
||||
bQuit = new Button(2, "Quit to title");
|
||||
bQuitAndSaveLocally = new Button(3, "Quit and copy map");
|
||||
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);
|
||||
@@ -72,12 +79,12 @@ void PauseScreen::init() {
|
||||
bHideGui.updateImage(&minecraft->options);
|
||||
// buttons.push_back(&bSound);
|
||||
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
|
||||
// and Back to game) here
|
||||
|
||||
#if !defined(APPLE_DEMO_PROMOTION) && !defined(RPI)
|
||||
|
||||
#if !defined(APPLE_DEMO_PROMOTION) && !defined(RPI)
|
||||
if (true || !wasBackPaused) {
|
||||
if (minecraft->raknetInstance) {
|
||||
if (minecraft->raknetInstance->isServer()) {
|
||||
@@ -85,14 +92,14 @@ void PauseScreen::init() {
|
||||
buttons.push_back(bServerVisibility);
|
||||
}
|
||||
else {
|
||||
#if !defined(DEMO_MODE)
|
||||
buttons.push_back(bQuitAndSaveLocally);
|
||||
#endif
|
||||
#if !defined(DEMO_MODE)
|
||||
buttons.push_back(bQuitAndSaveLocally);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// buttons.push_back(bThirdPerson);
|
||||
#endif
|
||||
// buttons.push_back(bThirdPerson);
|
||||
|
||||
for (unsigned int i = 0; i < buttons.size(); ++i) {
|
||||
// if (buttons[i] == &bSound) continue;
|
||||
@@ -103,27 +110,48 @@ void PauseScreen::init() {
|
||||
}
|
||||
|
||||
void PauseScreen::setupPositions() {
|
||||
saveStep = 0;
|
||||
saveStep = 0;
|
||||
int yBase = 16;
|
||||
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||
yBase = 50;
|
||||
|
||||
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 160;
|
||||
bQuitAndSaveLocally->width = bServerVisibility->width = 160;
|
||||
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 200;
|
||||
bQuitAndSaveLocally->width = bServerVisibility->width = 200;
|
||||
|
||||
bContinue->x = (width - bContinue->width) / 2;
|
||||
bContinue->y = yBase + 32 * 1;
|
||||
bContinue->x = (width - bContinue->width) / 2;
|
||||
bContinue->y = yBase + 24 * 1;
|
||||
|
||||
bOptions->x = (width - bOptions->width) / 2;
|
||||
bOptions->y = yBase + 32 * 2;
|
||||
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
||||
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 24 * 2;
|
||||
|
||||
bQuit->x = (width - bQuit->width) / 2;
|
||||
bQuit->y = yBase + 32 * 3;
|
||||
bOptions->x = (width - bOptions->width) / 2;
|
||||
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
|
||||
bQuit->y += 16;
|
||||
bQuit->y += 16;
|
||||
#endif
|
||||
|
||||
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
||||
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4;
|
||||
|
||||
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
|
||||
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// bSound.y = bThirdPerson.y = 8;
|
||||
// bSound.x = 4;
|
||||
@@ -161,9 +189,9 @@ void PauseScreen::buttonClicked(Button* button) {
|
||||
minecraft->setScreen(NULL);
|
||||
//minecraft->grabMouse();
|
||||
}
|
||||
if (button->id == bQuit->id) {
|
||||
if (button->id == bQuit->id) {
|
||||
minecraft->leaveGame();
|
||||
}
|
||||
}
|
||||
if (button->id == bQuitAndSaveLocally->id) {
|
||||
minecraft->leaveGame(true);
|
||||
}
|
||||
@@ -197,5 +225,5 @@ void PauseScreen::updateServerVisibilityText()
|
||||
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
|
||||
bServerVisibility->msg = ss->allowsIncomingConnections()?
|
||||
"Server is visible"
|
||||
: "Server is invisible";
|
||||
: "Server is invisible";
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ Screen* ScreenChooser::createScreen( ScreenId id )
|
||||
Screen* screen = NULL;
|
||||
|
||||
// :sob:
|
||||
if (/* _mc->useTouchscreen() */ true) {
|
||||
if (_mc->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
|
||||
switch (id) {
|
||||
case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break;
|
||||
case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break;
|
||||
|
||||
@@ -23,49 +23,62 @@
|
||||
|
||||
// Some kind of default settings, might be overridden in ::init
|
||||
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()
|
||||
{
|
||||
delete bHost;
|
||||
delete bJoin;
|
||||
delete bOptions;
|
||||
delete bQuit;
|
||||
}
|
||||
|
||||
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()) {
|
||||
return; // tick() will redirect to UsernameScreen
|
||||
}
|
||||
|
||||
buttons.push_back(&bHost);
|
||||
buttons.push_back(&bJoin);
|
||||
buttons.push_back(bHost);
|
||||
buttons.push_back(bJoin);
|
||||
//buttons.push_back(&bTest);
|
||||
buttons.push_back(bQuit);
|
||||
|
||||
tabButtons.push_back(&bHost);
|
||||
tabButtons.push_back(&bJoin);
|
||||
tabButtons.push_back(bHost);
|
||||
tabButtons.push_back(bJoin);
|
||||
tabButtons.push_back(bQuit);
|
||||
|
||||
#ifndef RPI
|
||||
buttons.push_back(&bOptions);
|
||||
tabButtons.push_back(&bOptions);
|
||||
buttons.push_back(bOptions);
|
||||
tabButtons.push_back(bOptions);
|
||||
#endif
|
||||
|
||||
// add quit button (top right X icon) – match OptionsScreen style
|
||||
{
|
||||
ImageDef def;
|
||||
def.name = "gui/touchgui.png";
|
||||
def.width = 34;
|
||||
def.height = 26;
|
||||
def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
|
||||
bQuit.setImageDef(def, true);
|
||||
bQuit.scaleWhenPressed = false;
|
||||
buttons.push_back(&bQuit);
|
||||
// don't include in tab navigation
|
||||
}
|
||||
//// add quit button (top right X icon) – match OptionsScreen style
|
||||
//{
|
||||
// ImageDef def;
|
||||
// def.name = "gui/touchgui.png";
|
||||
// def.width = 34;
|
||||
// def.height = 26;
|
||||
// def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
|
||||
// bQuit.setImageDef(def, true);
|
||||
// bQuit.scaleWhenPressed = false;
|
||||
// buttons.push_back(&bQuit);
|
||||
// // don't include in tab navigation
|
||||
//}
|
||||
|
||||
copyright = "\xffMojang AB";//. Do not distribute!";
|
||||
|
||||
@@ -93,20 +106,30 @@ void StartMenuScreen::init()
|
||||
}
|
||||
|
||||
void StartMenuScreen::setupPositions() {
|
||||
int yBase = height / 2;
|
||||
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
|
||||
int yBase = (height / 2) - 20;
|
||||
|
||||
bHost.y = yBase;
|
||||
bJoin.y = bHost.y + 24 + 4;
|
||||
bOptions.y = bJoin.y + 24 + 4;
|
||||
bHost->y = yBase;
|
||||
bJoin->y = bHost->y + 24;
|
||||
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
|
||||
bHost.x = (width - bHost.width) / 2;
|
||||
bJoin.x = (width - bJoin.width) / 2;
|
||||
bOptions.x = (width - bOptions.width) / 2;
|
||||
bHost->x = (width - bHost->width) / 2;
|
||||
bJoin->x = (width - bJoin->width) / 2;
|
||||
bOptions->x = (width - bOptions->width) / 2;
|
||||
bQuit->x = (width - bQuit->width) / 2;
|
||||
|
||||
// position quit icon at top-right (use image-defined size)
|
||||
bQuit.x = width - bQuit.width;
|
||||
bQuit.y = 0;
|
||||
//// position quit icon at top-right (use image-defined size)
|
||||
//bQuit.x = width - bQuit.width;
|
||||
//bQuit.y = 0;
|
||||
}
|
||||
|
||||
void StartMenuScreen::tick() {
|
||||
@@ -114,7 +137,7 @@ void StartMenuScreen::tick() {
|
||||
|
||||
void StartMenuScreen::buttonClicked(Button* button) {
|
||||
|
||||
if (button->id == bHost.id)
|
||||
if (button->id == bHost->id)
|
||||
{
|
||||
#if defined(DEMO_MODE) || defined(APPLE_DEMO_PROMOTION)
|
||||
minecraft->setScreen( new SimpleChooseLevelScreen("_DemoLevel") );
|
||||
@@ -122,16 +145,16 @@ void StartMenuScreen::buttonClicked(Button* button) {
|
||||
minecraft->screenChooser.setScreen(SCREEN_SELECTWORLD);
|
||||
#endif
|
||||
}
|
||||
if (button->id == bJoin.id)
|
||||
if (button->id == bJoin->id)
|
||||
{
|
||||
minecraft->locateMultiplayer();
|
||||
minecraft->screenChooser.setScreen(SCREEN_JOINGAME);
|
||||
}
|
||||
if (button->id == bOptions.id)
|
||||
if (button->id == bOptions->id)
|
||||
{
|
||||
minecraft->setScreen(new OptionsScreen());
|
||||
}
|
||||
if (button == &bQuit)
|
||||
if (button->id == bQuit->id)
|
||||
{
|
||||
minecraft->quit();
|
||||
}
|
||||
|
||||
@@ -23,10 +23,10 @@ public:
|
||||
bool isInGameScreen();
|
||||
private:
|
||||
|
||||
Button bHost;
|
||||
Button bJoin;
|
||||
Button bOptions;
|
||||
ImageButton bQuit; // X button in top-right corner
|
||||
Button* bHost;
|
||||
Button* bJoin;
|
||||
Button* bOptions;
|
||||
Button* bQuit;
|
||||
|
||||
std::string copyright;
|
||||
int copyrightPosX;
|
||||
|
||||
@@ -40,10 +40,9 @@ HumanoidModel::HumanoidModel( float g /*= 0*/, float yOffset /*= 0*/, int texW /
|
||||
head.addBox(-4, -8, -4, 8, 8, 8, g); // Head
|
||||
head.setPos(0, 0 + yOffset, 0);
|
||||
|
||||
if (modernSkin) {
|
||||
hair.addBox(-4, -8, -4, 8, 8, 8, g + 0.5f); // Outer head layer (hat)
|
||||
hair.setPos(0, 0 + yOffset, 0);
|
||||
}
|
||||
hair.addBox(-4, -8, -4, 8, 8, 8, g + 0.5f); // Outer head layer (hat)
|
||||
hair.setPos(0, 0 + yOffset, 0);
|
||||
|
||||
|
||||
body.addBox(-4, 0, -2, 8, 12, 4, g); // Body
|
||||
body.setPos(0, 0 + yOffset, 0);
|
||||
@@ -99,17 +98,17 @@ void HumanoidModel::render(Entity* e, float time, float r, float bob, float yRot
|
||||
setupAnim(time, r, bob, yRot, xRot, scale);
|
||||
|
||||
// Sync overlay with head rotation/position
|
||||
if (texWidth == 64 && texHeight == 64) {
|
||||
hair.xRot = head.xRot;
|
||||
hair.yRot = head.yRot;
|
||||
hair.zRot = head.zRot;
|
||||
hair.y = head.y;
|
||||
}
|
||||
|
||||
hair.xRot = head.xRot;
|
||||
hair.yRot = head.yRot;
|
||||
hair.zRot = head.zRot;
|
||||
hair.y = head.y;
|
||||
|
||||
|
||||
head.render(scale);
|
||||
if (texWidth == 64 && texHeight == 64) {
|
||||
hair.render(scale);
|
||||
}
|
||||
|
||||
hair.render(scale);
|
||||
|
||||
body.render(scale);
|
||||
arm0.render(scale);
|
||||
arm1.render(scale);
|
||||
@@ -123,12 +122,12 @@ void HumanoidModel::render( HumanoidModel* model, float scale )
|
||||
head.yRot = model->head.yRot;
|
||||
head.y = model->head.y;
|
||||
head.xRot = model->head.xRot;
|
||||
if (texWidth == 64 && texHeight == 64) {
|
||||
hair.yRot = head.yRot;
|
||||
hair.xRot = head.xRot;
|
||||
hair.zRot = head.zRot;
|
||||
hair.y = head.y;
|
||||
}
|
||||
|
||||
hair.yRot = head.yRot;
|
||||
hair.xRot = head.xRot;
|
||||
hair.zRot = head.zRot;
|
||||
hair.y = head.y;
|
||||
|
||||
|
||||
arm0.xRot = model->arm0.xRot;
|
||||
arm0.zRot = model->arm0.zRot;
|
||||
@@ -273,7 +272,7 @@ void HumanoidModel::onGraphicsReset()
|
||||
arm1.onGraphicsReset();
|
||||
leg0.onGraphicsReset();
|
||||
leg1.onGraphicsReset();
|
||||
//hair.onGraphicsReset();
|
||||
hair.onGraphicsReset();
|
||||
}
|
||||
|
||||
//void renderHair(float scale) {
|
||||
|
||||
@@ -355,7 +355,11 @@ LocalPlayer::LocalPlayer(Minecraft* minecraft, Level* level, const std::string&
|
||||
armorTypeHash(0),
|
||||
sprinting(false),
|
||||
sprintDoubleTapTimer(0),
|
||||
prevForwardHeld(false)
|
||||
prevForwardHeld(false),
|
||||
xBob(0.0f),
|
||||
yBob(0.0f),
|
||||
xBobO(0.0f),
|
||||
yBobO(0.0f)
|
||||
{
|
||||
this->dimension = dimension;
|
||||
_init();
|
||||
@@ -550,6 +554,10 @@ void LocalPlayer::aiStep() {
|
||||
|
||||
//if (onGround && abilities.flying)
|
||||
// abilities.flying = false;
|
||||
yBobO = yBob;
|
||||
xBobO = xBob;
|
||||
xBob += (xRot - xBob) * 0.5;
|
||||
yBob += (yRot - yBob) * 0.5;
|
||||
|
||||
if (interpolateOnly())
|
||||
updateAi();
|
||||
|
||||
@@ -22,6 +22,10 @@ public:
|
||||
virtual void reset();
|
||||
|
||||
void tick();
|
||||
|
||||
float yBob, xBob; // shredder added from b1.8/4j for the hand swaying animation
|
||||
float yBobO, xBobO; // shredder added from b1.8/4j for the hand swaying animation
|
||||
|
||||
void move(float xa, float ya, float za);
|
||||
|
||||
void aiStep();
|
||||
|
||||
@@ -101,12 +101,22 @@ void GameRenderer::setupCamera(float a, int eye) {
|
||||
|
||||
float stereoScale = 0.07f;
|
||||
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) glTranslatef2(-(eye * 2 - 1) * stereoScale, 0, 0);
|
||||
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);
|
||||
if (mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
|
||||
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 * 2.0f);
|
||||
} else {
|
||||
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);
|
||||
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);
|
||||
@@ -337,13 +347,16 @@ void GameRenderer::renderLevel(float a) {
|
||||
Lighting::turnOff();
|
||||
glDisable2(GL_BLEND);
|
||||
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
Lighting::turnOff();
|
||||
setupFog(0);
|
||||
glEnable2(GL_BLEND);
|
||||
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);
|
||||
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);
|
||||
// int visibleWaterChunks = levelRenderer->render(cameraEntity, 1, a);
|
||||
// glColorMask(true, true, true, true);
|
||||
@@ -677,7 +690,7 @@ void GameRenderer::pick(float a) {
|
||||
float range = mc->gameMode->getPickRange();
|
||||
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) {
|
||||
isPicking = updateFreeformPickDirection(a, pickDirection);
|
||||
|
||||
@@ -280,6 +280,9 @@ void ItemInHandRenderer::render( float a )
|
||||
float h = oHeight + (height - oHeight) * a;
|
||||
Player* player = mc->player;
|
||||
// if (selectedTile==NULL) return;
|
||||
LocalPlayer* localPlayer = (LocalPlayer*)(player);
|
||||
|
||||
float xr = player->xRotO + (player->xRot - player->xRotO) * a; // shredder added for hand swaying
|
||||
|
||||
glPushMatrix2();
|
||||
glRotatef2(player->xRotO + (player->xRot - player->xRotO) * a, 1, 0, 0);
|
||||
@@ -288,6 +291,16 @@ void ItemInHandRenderer::render( float a )
|
||||
Lighting::turnOn(mc);
|
||||
glPopMatrix2();
|
||||
|
||||
if (localPlayer) // shredder added, basically does the hand swaying animation from b1.8
|
||||
{
|
||||
float xrr = localPlayer->xBobO + (localPlayer->xBob - localPlayer->xBobO) * a;
|
||||
float yrr = localPlayer->yBobO + (localPlayer->yBob - localPlayer->yBobO) * a;
|
||||
// 4J - was using player->xRot and yRot directly here rather than interpolating between old & current with a
|
||||
float yr = player->yRotO + (player->yRot - player->yRotO) * a;
|
||||
glRotatef((xr - xrr) * 0.1f, 1, 0, 0);
|
||||
glRotatef((yr - yrr) * 0.1f, 0, 1, 0);
|
||||
}
|
||||
|
||||
float br = mc->level->getBrightness(Mth::floor(player->x), Mth::floor(player->y), Mth::floor(player->z));
|
||||
|
||||
ItemInstance* item;// = selectedItem;
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "../../client/player/LocalPlayer.h"
|
||||
|
||||
#include "../../world/level/GrassColor.h"
|
||||
#include "Lighting.h"
|
||||
|
||||
#ifdef GFX_SMALLER_CHUNKS
|
||||
/* 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.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.vertex(b.x0, 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_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
|
||||
if (mc->options.getBooleanValue(OPTIONS_BEAUTIFUL_SKY)) {
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
Lighting::turnOff();
|
||||
float* c = level->dimension->getSunriseColor(level->getTimeOfDay(alpha), alpha);
|
||||
if (c != nullptr)
|
||||
{
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
|
||||
// glShadeModel(GL_SMOOTH); //
|
||||
|
||||
glPushMatrix();
|
||||
glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
|
||||
glRotatef(level->getTimeOfDay(alpha) > 0.5f ? 180 : 0, 0.0f, 0.0f, 1.0f);
|
||||
|
||||
t.begin(GL_TRIANGLE_FAN);
|
||||
t.color(c[0], c[1], c[2], c[3]);
|
||||
t.vertex(0.0f, 100.0f, 0.0f);
|
||||
@@ -1190,11 +1190,12 @@ void LevelRenderer::renderSky(float alpha) {
|
||||
|
||||
t.draw();
|
||||
glPopMatrix();
|
||||
// glShadeModel(GL_FLAT); //
|
||||
}
|
||||
|
||||
// gets the time of day and rotates the sun and moon png based on the time
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBlendFunc(GL_ONE, GL_ONE);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
glPushMatrix();
|
||||
|
||||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
@@ -1326,8 +1327,8 @@ void LevelRenderer::renderAdvancedClouds(float alpha) {
|
||||
|
||||
float cloudTime = (float)ticks + alpha;
|
||||
|
||||
double xo = (px + cloudTime * 0.03f) / ss;
|
||||
double zo = pz / ss + 0.33f;
|
||||
float xo = (px + cloudTime * 0.03f) / ss;
|
||||
float zo = pz / ss + 0.33f;
|
||||
|
||||
float yy = 108.0f - py + 0.33f;
|
||||
|
||||
|
||||
@@ -130,10 +130,11 @@ void EntityRenderer::postRender(Entity* entity, float x, float y, float z, float
|
||||
if (pow > 0) {
|
||||
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);
|
||||
}
|
||||
// duplicate renderflame below is the pre b1.6.6 way flame rendered on player and mobs, probs gonna make it an option. - shredder
|
||||
/*
|
||||
void EntityRenderer::renderFlame(Entity* e, float x, float y, float z, float a) {
|
||||
glDisable(GL_LIGHTING);
|
||||
int tex = ((Tile*)Tile::fire)->tex;
|
||||
@@ -179,6 +180,75 @@ void EntityRenderer::renderFlame(Entity* e, float x, float y, float z, float a)
|
||||
glPopMatrix2();
|
||||
glEnable2(GL_LIGHTING);
|
||||
}
|
||||
*/
|
||||
// new renderflame ported from b1.6.6, fixes player height offset and also uses the newer style - shredder
|
||||
void EntityRenderer::renderFlame(Entity* e, float x, float y, float z, float a) {
|
||||
glDisable(GL_LIGHTING);
|
||||
int tex = ((Tile*)Tile::fire)->tex;
|
||||
|
||||
int xt = (tex & 0xf) << 4;
|
||||
int yt = tex & 0xf0;
|
||||
|
||||
float u0 = (xt) / 256.0f;
|
||||
float u1 = (xt + 15.99f) / 256.0f;
|
||||
float v0 = (yt) / 256.0f;
|
||||
float v1 = (yt + 15.99f) / 256.0f;
|
||||
|
||||
glPushMatrix2();
|
||||
glTranslatef2((float) x, (float) y, (float) z);
|
||||
|
||||
float s = e->bbWidth * 1.4f;
|
||||
glScalef2(s, s, s);
|
||||
bindTexture("terrain.png");
|
||||
Tesselator& t = Tesselator::instance;
|
||||
|
||||
float r = 0.5f;
|
||||
float xo = 0.0f;
|
||||
|
||||
float h = e->bbHeight / s;
|
||||
float yo = (float)(e->y - e->bb.y0) / s;
|
||||
|
||||
glRotatef2(-entityRenderDispatcher->playerRotY, 0, 1, 0);
|
||||
glTranslatef2(0, 0, -0.3f + ((int) h) * 0.02f);
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
|
||||
float zo = 0.0f;
|
||||
int cycle_counter = 0;
|
||||
|
||||
t.begin();
|
||||
while (h > 0.0f) {
|
||||
float current_u0 = u0;
|
||||
float current_u1 = u1;
|
||||
float current_v0 = v0;
|
||||
float current_v1 = v1;
|
||||
|
||||
if (cycle_counter % 2 != 0) {
|
||||
current_v0 = (yt + 16) / 256.0f;
|
||||
current_v1 = (yt + 16 + 15.99f) / 256.0f;
|
||||
}
|
||||
|
||||
if ((cycle_counter / 2) % 2 == 0) {
|
||||
float tmp = current_u1;
|
||||
current_u1 = current_u0;
|
||||
current_u0 = tmp;
|
||||
}
|
||||
|
||||
t.vertexUV(r - xo, 0.0f - yo, zo, current_u1, current_v1);
|
||||
t.vertexUV(-r - xo, 0.0f - yo, zo, current_u0, current_v1);
|
||||
t.vertexUV(-r - xo, 1.4f - yo, zo, current_u0, current_v0);
|
||||
t.vertexUV(r - xo, 1.4f - yo, zo, current_u1, current_v0);
|
||||
|
||||
h -= 0.45f;
|
||||
yo -= 0.45f;
|
||||
r *= 0.9f;
|
||||
zo += 0.03f;
|
||||
cycle_counter++;
|
||||
}
|
||||
t.draw();
|
||||
|
||||
glPopMatrix2();
|
||||
glEnable2(GL_LIGHTING);
|
||||
}
|
||||
|
||||
void EntityRenderer::renderShadow(Entity* e, float x, float y, float z, float pow, float a) { //
|
||||
glEnable2(GL_BLEND);
|
||||
@@ -187,7 +257,11 @@ void EntityRenderer::renderShadow(Entity* e, float x, float y, float z, float po
|
||||
//Textures* textures = entityRenderDispatcher->textures;
|
||||
//textures->bind(textures->loadTexture("%clamp%/environment/shadow.png"));
|
||||
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,14 +295,13 @@ 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);
|
||||
}
|
||||
}
|
||||
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();
|
||||
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
glDisable2(GL_BLEND);
|
||||
glDepthMask(true);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||
}
|
||||
|
||||
Level* EntityRenderer::getLevel() {
|
||||
|
||||
@@ -218,6 +218,8 @@ void MobRenderer::renderNameTag(Mob* mob, const std::string& name, float x, floa
|
||||
|
||||
glScalef2(-s, -s, s);
|
||||
|
||||
glDisable(GL_LIGHTING);
|
||||
|
||||
glDepthMask(false);
|
||||
glDisable2(GL_DEPTH_TEST);
|
||||
glEnable2(GL_BLEND);
|
||||
@@ -241,6 +243,7 @@ void MobRenderer::renderNameTag(Mob* mob, const std::string& name, float x, floa
|
||||
|
||||
glDepthMask(true);
|
||||
font->draw(name, (float) fnameWidth, 0, 0xffffffff);
|
||||
glEnable(GL_LIGHTING);
|
||||
glDisable2(GL_BLEND);
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
glPopMatrix2();
|
||||
|
||||
@@ -393,8 +393,8 @@ void LavaSideTexture::tick() {
|
||||
}
|
||||
}
|
||||
|
||||
FireTexture::FireTexture()
|
||||
: super(((Tile*)Tile::fire)->tex),
|
||||
FireTexture::FireTexture(int id)
|
||||
: super(((Tile*)Tile::fire)->tex + id * 16),
|
||||
_tick(0),
|
||||
_frame(0)
|
||||
{
|
||||
|
||||
@@ -106,7 +106,7 @@ class FireTexture: public DynamicTexture
|
||||
float* heata;
|
||||
|
||||
public:
|
||||
FireTexture();
|
||||
FireTexture(int id);
|
||||
~FireTexture();
|
||||
|
||||
void tick();
|
||||
|
||||
@@ -111,6 +111,7 @@
|
||||
#include "data/eat1.pcm"
|
||||
#include "data/eat2.pcm"
|
||||
#include "data/eat3.pcm"
|
||||
#include "data/burp1.pcm"
|
||||
#include "data/fuse.pcm"
|
||||
|
||||
SoundDesc SA_cloth1((char*)PCM_cloth1);
|
||||
@@ -221,6 +222,7 @@ SoundDesc SA_creeperdeath((char*)PCM_creeperdeath);
|
||||
SoundDesc SA_eat1((char*)PCM_eat1);
|
||||
SoundDesc SA_eat2((char*)PCM_eat2);
|
||||
SoundDesc SA_eat3((char*)PCM_eat3);
|
||||
SoundDesc SA_burp1((char*)PCM_burp1);
|
||||
SoundDesc SA_fuse((char*)PCM_fuse);
|
||||
|
||||
#endif /*!PRE_ANDROID23 && !__APPLE__*/
|
||||
|
||||
@@ -172,6 +172,7 @@ extern SoundDesc SA_creeperdeath;
|
||||
extern SoundDesc SA_eat1;
|
||||
extern SoundDesc SA_eat2;
|
||||
extern SoundDesc SA_eat3;
|
||||
extern SoundDesc SA_burp1;
|
||||
extern SoundDesc SA_fuse;
|
||||
|
||||
#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_eat2);
|
||||
sounds.add("random.eat", SA_eat3);
|
||||
sounds.add("random.burp", SA_burp1);
|
||||
sounds.add("random.fuse", SA_fuse);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -227,6 +227,7 @@ void SoundEngine::init( Minecraft* mc, Options* options )
|
||||
sounds.add( "random.eat", _pp("eat1"));
|
||||
sounds.add( "random.eat", _pp("eat2"));
|
||||
sounds.add( "random.eat", _pp("eat3"));
|
||||
sounds.add( "random.burp", _pp("burp1"));
|
||||
sounds.add( "random.fuse", _pp("fuse"));
|
||||
|
||||
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
@@ -465,6 +465,15 @@ void Entity::tick()
|
||||
baseTick();
|
||||
}
|
||||
|
||||
void Entity::setOnFire(int numberOfSeconds)
|
||||
{
|
||||
int newValue = numberOfSeconds * 20;
|
||||
if (onFire < newValue)
|
||||
{
|
||||
onFire = newValue;
|
||||
}
|
||||
}
|
||||
|
||||
void Entity::baseTick()
|
||||
{
|
||||
TIMER_PUSH("entityBaseTick");
|
||||
|
||||
@@ -89,6 +89,8 @@ public:
|
||||
virtual bool isAlive();
|
||||
virtual bool isOnFire();
|
||||
|
||||
virtual void setOnFire(int numberOfSeconds);
|
||||
|
||||
virtual bool isPlayer();
|
||||
virtual bool isCreativeModeAllowed();
|
||||
|
||||
|
||||
@@ -169,7 +169,9 @@ void Mob::playAmbientSound()
|
||||
level->playSound(this, ambient, getSoundVolume(), getVoicePitch());
|
||||
}
|
||||
}
|
||||
|
||||
bool Mob::isOnFire() {
|
||||
return onFire > 0 || getSharedFlag(SharedFlagsInformation::FLAG_ONFIRE);
|
||||
}
|
||||
void Mob::baseTick()
|
||||
{
|
||||
oAttackAnim = attackAnim;
|
||||
@@ -177,6 +179,18 @@ void Mob::baseTick()
|
||||
|
||||
TIMER_PUSH("mobBaseTick");
|
||||
|
||||
// @TODO - check if this section i added to make fire render in mp doesnt break crap - shredder
|
||||
if (!level->isClientSide) {
|
||||
// Server side: Tell the client if this mob/player is still burning
|
||||
setSharedFlag(SharedFlagsInformation::FLAG_ONFIRE, onFire > 0);
|
||||
} else {
|
||||
// Client side: If the server flag says we aren't on fire, extinguish local visual timer
|
||||
if (!getSharedFlag(SharedFlagsInformation::FLAG_ONFIRE)) {
|
||||
onFire = 0;
|
||||
}
|
||||
}
|
||||
// todo ends here
|
||||
|
||||
if (((ambientSoundTime++ & 15) == 0) && random.nextInt(2000) < ambientSoundTime) {
|
||||
ambientSoundTime = -getAmbientSoundInterval();
|
||||
playAmbientSound();
|
||||
|
||||
@@ -52,6 +52,7 @@ public:
|
||||
virtual bool isPickable();
|
||||
virtual bool isPushable();
|
||||
|
||||
virtual bool isOnFire();
|
||||
virtual bool isShootable();
|
||||
|
||||
MoveControl* getMoveControl();
|
||||
|
||||
@@ -51,13 +51,13 @@ void Chicken::aiStep()
|
||||
flap += flapping * 2;
|
||||
|
||||
//@todo
|
||||
//if (!isBaby()) {
|
||||
// if (!level->isClientSide && --eggTime <= 0) {
|
||||
// level->playSound(this, "mob.chickenplop", 1.0f, (random.nextFloat() - random.nextFloat()) * 0.2f + 1.0f);
|
||||
// spawnAtLocation(Item::egg->id, 1);
|
||||
// eggTime = random.nextInt(SharedConstants::TicksPerSecond * 60 * 5) + SharedConstants::TicksPerSecond * 60 * 5;
|
||||
// }
|
||||
//}
|
||||
if (!isBaby()) {
|
||||
if (!level->isClientSide && --eggTime <= 0) {
|
||||
level->playSound(this, "mob.chickenplop", 1.0f, (random.nextFloat() - random.nextFloat()) * 0.2f + 1.0f);
|
||||
spawnAtLocation(Item::egg->id, 1);
|
||||
eggTime = random.nextInt(SharedConstants::TicksPerSecond * 60 * 5) + SharedConstants::TicksPerSecond * 60 * 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Chicken::addAdditonalSaveData( CompoundTag* tag )
|
||||
|
||||
@@ -19,7 +19,7 @@ void Skeleton::aiStep() {
|
||||
float br = getBrightness(1);
|
||||
if (br > 0.5f) {
|
||||
if (level->canSeeSky(Mth::floor(x), Mth::floor(y), Mth::floor(z)) && random.nextFloat() * 3.5f < (br - 0.4f)) {
|
||||
hurt(NULL, 1);
|
||||
// hurt(NULL, 1); // no use anymore since i restored setOnFire - shredder
|
||||
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
float xa = (2.0f * random.nextFloat() - 1.0f) * (2.0f * random.nextFloat() - 1.0f) * 0.02f;
|
||||
@@ -27,7 +27,7 @@ void Skeleton::aiStep() {
|
||||
float za = (2.0f * random.nextFloat() - 1.0f) * (2.0f * random.nextFloat() - 1.0f) * 0.02f;
|
||||
level->addParticle(PARTICLETYPE(explode), x + random.nextFloat() * bbWidth * 2 - bbWidth, y + random.nextFloat() * bbHeight, z + random.nextFloat() * bbWidth * 2 - bbWidth, xa, ya, za);
|
||||
}
|
||||
//setOnFire(8); //@todo
|
||||
setOnFire(8); //@todo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ void Zombie::aiStep() {
|
||||
float br = getBrightness(1);
|
||||
if (br > 0.5f) {
|
||||
if (level->canSeeSky(Mth::floor(x), Mth::floor(y), Mth::floor(z)) && random.nextFloat() * 3.5f < (br - 0.4f)) {
|
||||
hurt(NULL, 1);
|
||||
// hurt(NULL, 1); // no use anymore since i restored setOnFire - shredder
|
||||
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
float xa = (2.0f * random.nextFloat() - 1.0f) * (2.0f * random.nextFloat() - 1.0f) * 0.02f;
|
||||
@@ -63,7 +63,7 @@ void Zombie::aiStep() {
|
||||
float za = (2.0f * random.nextFloat() - 1.0f) * (2.0f * random.nextFloat() - 1.0f) * 0.02f;
|
||||
level->addParticle(PARTICLETYPE(explode), x + random.nextFloat() * bbWidth * 2 - bbWidth, y + random.nextFloat() * bbHeight, z + random.nextFloat() * bbWidth * 2 - bbWidth, xa, ya, za);
|
||||
}
|
||||
//setOnFire(8); //@todo
|
||||
setOnFire(8); //@todo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -216,6 +216,7 @@ bool Player::checkBed() {
|
||||
return (level->getTile(bedPosition.x, bedPosition.y, bedPosition.z) == Tile::bed->id);
|
||||
}
|
||||
|
||||
|
||||
void Player::tick() {
|
||||
bool shouldSleep = entityData.getFlag<SharedFlagsInformation::SharedFlagsInformationType>(DATA_PLAYER_FLAGS_ID, PLAYER_SLEEP_FLAG);
|
||||
if(shouldSleep != isSleeping()) {
|
||||
@@ -246,11 +247,24 @@ void Player::tick() {
|
||||
}
|
||||
super::tick();
|
||||
|
||||
|
||||
if (!level->isClientSide) {
|
||||
// @TODO - Awful Hack Start, MCPE 0.6 doesn't deal damage with fire to players for some reason on mp, so we force it here to do it, need a better way honestly - shredder
|
||||
if (level->containsFireTile(this->bb)) {
|
||||
hurt(NULL, 1);
|
||||
|
||||
if (!isInWater()) {
|
||||
if (onFire <= 0) {
|
||||
onFire = 20 * 15;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Awful hack ends here
|
||||
|
||||
foodData.tick(this);
|
||||
// if (containerMenu != NULL && !containerMenu->stillValid(this)) {
|
||||
// closeContainer();
|
||||
// }
|
||||
// if (containerMenu != NULL && !containerMenu->stillValid(this)) {
|
||||
// closeContainer();
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user