1 Commits

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 93 KiB

View File

@@ -229,12 +229,6 @@ options.fancyGraphics=Fancy graphics
options.renderDebug=Debug render options.renderDebug=Debug render
options.anaglyph3d=3D anaglyph options.anaglyph3d=3D anaglyph
options.windowScale =Window Scaling
options.menuStyle =Menu Style
options.menuStyle.pocket =Pocket Edition
options.menuStyle.xperia =Xperia/Pi
options.menuStyle.java =Java Beta
performance.max=Max FPS performance.max=Max FPS
performance.balanced=Balanced performance.balanced=Balanced

View File

@@ -843,7 +843,7 @@ void Minecraft::tickInput() {
if (key == Keyboard::KEY_ESCAPE) if (key == Keyboard::KEY_ESCAPE)
pauseGame(false); pauseGame(false);
#ifdef PLATFORM_DESKTOP #ifndef OPENGL_ES
if (key == Keyboard::KEY_P) { if (key == Keyboard::KEY_P) {
static bool isWireFrame = false; static bool isWireFrame = false;
isWireFrame = !isWireFrame; isWireFrame = !isWireFrame;
@@ -864,7 +864,6 @@ void Minecraft::tickInput() {
static bool prevMouseDownLeft = false; static bool prevMouseDownLeft = false;
if (!useTouchscreen()) {
if (Mouse::getButtonState(MouseAction::ACTION_LEFT) == 0) { if (Mouse::getButtonState(MouseAction::ACTION_LEFT) == 0) {
gameMode->stopDestroyBlock(); gameMode->stopDestroyBlock();
} }
@@ -872,7 +871,6 @@ void Minecraft::tickInput() {
if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) { if (!Mouse::isButtonDown(MouseAction::ACTION_RIGHT)) {
gameMode->releaseUsingItem(player); gameMode->releaseUsingItem(player);
} }
}
if (useTouchscreen()) { if (useTouchscreen()) {
// Touch: gesture recognizer classifies the action type (turn/destroy/build) // Touch: gesture recognizer classifies the action type (turn/destroy/build)
@@ -1144,8 +1142,7 @@ void Minecraft::init()
textures->addDynamicTexture(new WaterSideTexture()); textures->addDynamicTexture(new WaterSideTexture());
textures->addDynamicTexture(new LavaTexture()); textures->addDynamicTexture(new LavaTexture());
textures->addDynamicTexture(new LavaSideTexture()); textures->addDynamicTexture(new LavaSideTexture());
textures->addDynamicTexture(new FireTexture(0)); textures->addDynamicTexture(new FireTexture());
textures->addDynamicTexture(new FireTexture(1));
gui.texturesLoaded(textures); gui.texturesLoaded(textures);
levelRenderer = new LevelRenderer(this); levelRenderer = new LevelRenderer(this);
@@ -1194,24 +1191,6 @@ void Minecraft::setSize(int w, int h) {
width = w; width = w;
height = h; height = h;
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 {
int guiScale = options.getIntValue(OPTIONS_GUI_SCALE); int guiScale = options.getIntValue(OPTIONS_GUI_SCALE);
@@ -1248,7 +1227,9 @@ void Minecraft::setSize(int w, int h) {
Gui::GuiScale = 1.0f; Gui::GuiScale = 1.0f;
} }
Gui::InvGuiScale = 1.0f / Gui::GuiScale;
int screenWidth = (int)(width * Gui::InvGuiScale);
int screenHeight = (int)(height * Gui::InvGuiScale);
// if (platform()) { // if (platform()) {
// float pixelsPerMillimeter = options.getProgressValue(&Option::PIXELS_PER_MILLIMETER); // float pixelsPerMillimeter = options.getProgressValue(&Option::PIXELS_PER_MILLIMETER);
@@ -1256,13 +1237,6 @@ void Minecraft::setSize(int w, int h) {
// pixelCalcUi.setPixelsPerMillimeter(pixelsPerMillimeter * Gui::InvGuiScale); // 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); Config config = createConfig(this);
gui.onConfigChanged(config); gui.onConfigChanged(config);

View File

@@ -82,10 +82,6 @@ OptionBool restoredAnims("restoredAnims", true);
OptionInt debugStyle("debugStyle", 0, 0, 1); OptionInt debugStyle("debugStyle", 0, 0, 1);
OptionInt menuStyle("menuStyle",0, 0, 2);
OptionBool windowScale("windowScale", false);
OptionInt keyForward("key.forward", Keyboard::KEY_W); OptionInt keyForward("key.forward", Keyboard::KEY_W);
OptionInt keyLeft("key.left", Keyboard::KEY_A); OptionInt keyLeft("key.left", Keyboard::KEY_A);
OptionInt keyBack("key.back", Keyboard::KEY_S); OptionInt keyBack("key.back", Keyboard::KEY_S);
@@ -138,7 +134,6 @@ void Options::initTable() {
m_options[OPTIONS_GUI_SCALE] = &guiScale; m_options[OPTIONS_GUI_SCALE] = &guiScale;
m_options[OPTIONS_WINDOW_SCALE] = &windowScale;
m_options[OPTIONS_SKIN] = &skin; m_options[OPTIONS_SKIN] = &skin;
m_options[OPTIONS_USERNAME] = &username; m_options[OPTIONS_USERNAME] = &username;
@@ -175,8 +170,6 @@ void Options::initTable() {
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible; m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
m_options[OPTIONS_MENU_STYLE] = &menuStyle;
m_options[OPTIONS_KEY_FORWARD] = &keyForward; m_options[OPTIONS_KEY_FORWARD] = &keyForward;
m_options[OPTIONS_KEY_LEFT] = &keyLeft; m_options[OPTIONS_KEY_LEFT] = &keyLeft;
m_options[OPTIONS_KEY_BACK] = &keyBack; m_options[OPTIONS_KEY_BACK] = &keyBack;

View File

@@ -37,7 +37,6 @@ enum OptionId {
OPTIONS_BAR_ON_TOP, OPTIONS_BAR_ON_TOP,
OPTIONS_ALLOW_SPRINT, OPTIONS_ALLOW_SPRINT,
OPTIONS_AUTOJUMP, OPTIONS_AUTOJUMP,
OPTIONS_WINDOW_SCALE,
// Graphics // Graphics
OPTIONS_RENDER_DEBUG, OPTIONS_RENDER_DEBUG,
@@ -52,7 +51,6 @@ enum OptionId {
OPTIONS_FANCY_GRAPHICS, OPTIONS_FANCY_GRAPHICS,
OPTIONS_NORMAL_LIGHTING, OPTIONS_NORMAL_LIGHTING,
// Cheats / debug // Cheats / debug
OPTIONS_FLY_SPEED, OPTIONS_FLY_SPEED,
OPTIONS_CAMERA_SPEED, OPTIONS_CAMERA_SPEED,
@@ -97,8 +95,6 @@ enum OptionId {
OPTIONS_BEAUTIFUL_SKY, OPTIONS_BEAUTIFUL_SKY,
OPTIONS_VIGNETTE, OPTIONS_VIGNETTE,
OPTIONS_DEBUG_STYLE, OPTIONS_DEBUG_STYLE,
OPTIONS_COMPLETE_LIGHTING,
OPTIONS_MENU_STYLE,
// Should be last! // Should be last!
OPTIONS_COUNT OPTIONS_COUNT
}; };

View File

@@ -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);

View File

@@ -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 );

View File

@@ -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 ) {

View File

@@ -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__*/

View File

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

View File

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

View File

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

View File

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

View File

@@ -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();
} }
@@ -197,7 +198,6 @@ void OptionsScreen::generateOptionScreens() {
optionPanes[1]->addOptionItem(OPTIONS_DIFFICULTY, minecraft) optionPanes[1]->addOptionItem(OPTIONS_DIFFICULTY, minecraft)
.addOptionItem(OPTIONS_SERVER_VISIBLE, minecraft) .addOptionItem(OPTIONS_SERVER_VISIBLE, minecraft)
.addOptionItem(OPTIONS_THIRD_PERSON_VIEW, minecraft) .addOptionItem(OPTIONS_THIRD_PERSON_VIEW, minecraft)
.addOptionItem(OPTIONS_WINDOW_SCALE, minecraft)
.addOptionItem(OPTIONS_GUI_SCALE, minecraft) .addOptionItem(OPTIONS_GUI_SCALE, minecraft)
.addOptionItem(OPTIONS_SENSITIVITY, minecraft) .addOptionItem(OPTIONS_SENSITIVITY, minecraft)
.addOptionItem(OPTIONS_MUSIC_VOLUME, minecraft) .addOptionItem(OPTIONS_MUSIC_VOLUME, minecraft)
@@ -224,7 +224,6 @@ void OptionsScreen::generateOptionScreens() {
// .addOptionItem(&Option::ANAGLYPH, minecraft) // .addOptionItem(&Option::ANAGLYPH, minecraft)
.addOptionItem(OPTIONS_LIMIT_FRAMERATE, minecraft) .addOptionItem(OPTIONS_LIMIT_FRAMERATE, minecraft)
.addOptionItem(OPTIONS_VSYNC, minecraft) .addOptionItem(OPTIONS_VSYNC, minecraft)
.addOptionItem(OPTIONS_VIEW_DISTANCE, minecraft)
.addOptionItem(OPTIONS_RENDER_DEBUG, minecraft) .addOptionItem(OPTIONS_RENDER_DEBUG, minecraft)
.addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft) .addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft)
.addOptionItem(OPTIONS_VIEW_BOBBING, minecraft) .addOptionItem(OPTIONS_VIEW_BOBBING, minecraft)
@@ -235,7 +234,6 @@ void OptionsScreen::generateOptionScreens() {
optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft) optionPanes[4]->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)
@@ -261,6 +259,12 @@ 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);

View File

@@ -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);

View File

@@ -8,7 +8,6 @@
#include "client/Options.h" #include "client/Options.h"
#include "client/gui/components/Button.h" #include "client/gui/components/Button.h"
#include "client/gui/screens/OptionsScreen.h" #include "client/gui/screens/OptionsScreen.h"
#include "UploadPhotoScreen.h"
PauseScreen::PauseScreen(bool wasBackPaused) PauseScreen::PauseScreen(bool wasBackPaused)
: saveStep(0), : saveStep(0),
@@ -18,7 +17,6 @@ PauseScreen::PauseScreen(bool wasBackPaused)
bOptions(0), bOptions(0),
bQuitAndSaveLocally(0), bQuitAndSaveLocally(0),
bServerVisibility(0), bServerVisibility(0),
bPhotoMode(0),
// bThirdPerson(0), // bThirdPerson(0),
wasBackPaused(wasBackPaused), wasBackPaused(wasBackPaused),
// bSound(OPTIONS_SOUND_VOLUME, 1, 0), // bSound(OPTIONS_SOUND_VOLUME, 1, 0),
@@ -45,42 +43,30 @@ PauseScreen::~PauseScreen() {
delete bQuit; delete bQuit;
delete bQuitAndSaveLocally; delete bQuitAndSaveLocally;
delete bServerVisibility; delete bServerVisibility;
delete bPhotoMode;
delete bOptions; delete bOptions;
// delete bThirdPerson; // delete bThirdPerson;
} }
void PauseScreen::init() { void PauseScreen::init() {
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) { if (/* minecraft->useTouchscreen() */ true) {
bContinue = new Touch::TButton(1, "Back to game"); bContinue = new Touch::TButton(1, "Back to game");
bOptions = new Touch::TButton(5, "Options"); bOptions = new Touch::TButton(5, "Options");
bPhotoMode = new Touch::TButton(6, "Photo Mode");
bQuit = new Touch::TButton(2, "Quit to title"); bQuit = new Touch::TButton(2, "Quit to title");
bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map"); bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map");
bServerVisibility = new Touch::TButton(4, ""); bServerVisibility = new Touch::TButton(4, "");
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view"); // bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
} else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) { } else {
bContinue = new Button(1, "Back to game"); bContinue = new Button(1, "Back to game");
bOptions = new Button(5, "Options"); bOptions = new Button(5, "Options");
bPhotoMode = new Button(6, "Photo Mode");
bQuit = new Button(2, "Quit to title"); bQuit = new Button(2, "Quit to title");
bQuitAndSaveLocally = new Button(3, "Quit and copy map"); bQuitAndSaveLocally = new Button(3, "Quit and copy map");
bServerVisibility = new Button(4, ""); bServerVisibility = new Button(4, "");
// 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...");
bPhotoMode = new Button(6, 0, 0, 200, 20, "Photo Mode");
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);
buttons.push_back(bQuit); buttons.push_back(bQuit);
buttons.push_back(bOptions); buttons.push_back(bOptions);
buttons.push_back(bPhotoMode);
// bSound.updateImage(&minecraft->options); // bSound.updateImage(&minecraft->options);
bThirdPerson.updateImage(&minecraft->options); bThirdPerson.updateImage(&minecraft->options);
bHideGui.updateImage(&minecraft->options); bHideGui.updateImage(&minecraft->options);
@@ -119,29 +105,8 @@ 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 = bPhotoMode->width = bQuit->width = /*bThirdPerson->w =*/ 200; bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 160;
bQuitAndSaveLocally->width = bServerVisibility->width = 200;
bContinue->x = (width - bContinue->width) / 2;
bContinue->y = yBase + 24 * 1;
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 24 * 2;
bPhotoMode->x = (width - bPhotoMode->width) / 2;
bPhotoMode->y = yBase + 24 * 3;
bOptions->x = (width - bOptions->width) / 2;
bOptions->y = yBase + 24 * 3 + 24;
bQuit->x = (width - bQuit->width) / 2;
bQuit->y = yBase + 24 * 4 + 24;
} else {
bContinue->width = bOptions->width = bPhotoMode->width = bQuit->width = /*bThirdPerson->w =*/ 160;
bQuitAndSaveLocally->width = bServerVisibility->width = 160; bQuitAndSaveLocally->width = bServerVisibility->width = 160;
bContinue->x = (width - bContinue->width) / 2; bContinue->x = (width - bContinue->width) / 2;
@@ -150,21 +115,15 @@ void PauseScreen::setupPositions() {
bOptions->x = (width - bOptions->width) / 2; bOptions->x = (width - bOptions->width) / 2;
bOptions->y = yBase + 32 * 2; bOptions->y = yBase + 32 * 2;
bPhotoMode->x = (width - bPhotoMode->width) / 2;
bPhotoMode->y = yBase + 32 * 3;
bQuit->x = (width - bQuit->width) / 2; bQuit->x = (width - bQuit->width) / 2;
bQuit->y = yBase + 32 * 4; 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 * 5; bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4;
}
// bSound.y = bThirdPerson.y = 8; // bSound.y = bThirdPerson.y = 8;
// bSound.x = 4; // bSound.x = 4;
@@ -205,9 +164,6 @@ void PauseScreen::buttonClicked(Button* button) {
if (button->id == bQuit->id) { if (button->id == bQuit->id) {
minecraft->leaveGame(); minecraft->leaveGame();
} }
if (button->id == bPhotoMode->id) {
minecraft->setScreen(new UploadPhotoScreen());
}
if (button->id == bQuitAndSaveLocally->id) { if (button->id == bQuitAndSaveLocally->id) {
minecraft->leaveGame(true); minecraft->leaveGame(true);
} }

View File

@@ -33,7 +33,6 @@ private:
Button* bQuit; Button* bQuit;
Button* bQuitAndSaveLocally; Button* bQuitAndSaveLocally;
Button* bServerVisibility; Button* bServerVisibility;
Button* bPhotoMode;
Button* bOptions; Button* bOptions;
// Button* bThirdPerson; // Button* bThirdPerson;

View File

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

View File

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

View File

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

View File

@@ -1,160 +1,177 @@
#include "UploadPhotoScreen.h" #if 0
#include "../components/Button.h" #include "UploadPhotoScreen.h"
#include "../../Minecraft.h" #include "../renderer/TileRenderer.h"
#include "../../player/LocalPlayer.h" #include "../player/LocalPlayer.h"
#include "../../../world/entity/item/TripodCamera.h" #include "../../world/entity/player/Inventory.h"
#include "../../../world/level/Level.h"
#include "../../../platform/input/Keyboard.h"
#include "../../renderer/GameRenderer.h"
#include "../../renderer/LevelRenderer.h"
UploadPhotoScreen::UploadPhotoScreen() UploadPhotoScreen::UploadPhotoScreen()
: hasAppliedPhotoMode(false), :
oldHideGui(false), selectedItem(0)
oldThirdPerson(false),
oldFixedCamera(false),
hasOldPose(false),
oldX(0),
oldY(0),
oldZ(0),
oldYaw(0),
oldPitch(0),
photoCameraTarget(NULL),
photoCameraX(0),
photoCameraY(0),
photoCameraZ(0),
bBack(0)
{ {
} }
UploadPhotoScreen::~UploadPhotoScreen()
{
restorePhotoMode();
delete photoCameraTarget;
delete bBack;
}
void UploadPhotoScreen::init() void UploadPhotoScreen::init()
{ {
applyPhotoMode(); int currentSelection = minecraft->player->inventory->getSelectedItemId();
for (int i = 0; i < Inventory::INVENTORY_SIZE; i++)
{
if (currentSelection == minecraft->player->inventory->getSelectionSlotItemId(i + Inventory::SELECTION_SIZE))
{
selectedItem = i;
break;
}
}
}
void UploadPhotoScreen::renderSlots()
{
glColor4f2(1, 1, 1, 1);
blitOffset = -90;
minecraft->textures->loadAndBindTexture("gui/gui.png");
for (int r = 0; r < Inventory::INVENTORY_ROWS; r++)
{
blit(width / 2 - 182 / 2, height - 22 * 3 - 22 * r, 0, 0, 182, 22);
}
if (selectedItem >= 0)
{
int x = width / 2 - 182 / 2 - 1 + (selectedItem % Inventory::SELECTION_SIZE) * 20;
int y = height - 22 * 3 - 1 - (selectedItem / Inventory::SELECTION_SIZE) * 22;
blit(x, y, 0, 22, 24, 22);
}
for (int r = 0; r < Inventory::INVENTORY_ROWS; r++)
{
for (int i = 0; i < 9; i++) {
int x = width / 2 - 9 * 10 + i * 20 + 2;
int y = height - 16 - 3 - 22 * 2 - 22 * r;
renderSlot(r * 9 + i + Inventory::SELECTION_SIZE, x, y, 0);
}
}
}
void UploadPhotoScreen::renderSlot(int slot, int x, int y, float a)
{
int itemId = minecraft->player->inventory->getSelectionSlotItemId(slot);
if (itemId < 0) return;
const bool fancy = false;
if (fancy && itemId < 256 && TileRenderer::canRender(Tile::tiles[itemId]->getRenderShape())) {
if (minecraft->useTouchscreen()) {
bBack = new Touch::TButton(1, "Back");
} else { } else {
bBack = new Button(1, "Back"); if (itemId < 256) {
} Tile* tile = Tile::tiles[itemId];
if (tile == NULL) return;
buttons.push_back(bBack); minecraft->textures->loadAndBindTexture("terrain.png");
tabButtons.push_back(bBack);
}
void UploadPhotoScreen::removed() int textureId = tile->getTexture(2, 0);
{ blit(x, y, textureId % 16 * 16, textureId / 16 * 16, 16, 16);
restorePhotoMode();
}
void UploadPhotoScreen::applyPhotoMode()
{
if (hasAppliedPhotoMode || !minecraft || !minecraft->gameRenderer) return;
if (minecraft->player) {
oldX = minecraft->player->x;
oldY = minecraft->player->y;
oldZ = minecraft->player->z;
oldYaw = minecraft->player->yRot;
oldPitch = minecraft->player->xRot;
hasOldPose = true;
}
oldHideGui = minecraft->options.getBooleanValue(OPTIONS_HIDEGUI);
oldThirdPerson = minecraft->options.getBooleanValue(OPTIONS_THIRD_PERSON_VIEW);
oldFixedCamera = minecraft->options.getBooleanValue(OPTIONS_FIXED_CAMERA);
Pos spawn = minecraft->level->getSharedSpawnPos();
photoCameraX = (float) spawn.x;
photoCameraY = 128.0f;
photoCameraZ = (float) spawn.z;
if (!photoCameraTarget) {
photoCameraTarget = new TripodCamera(minecraft->level, minecraft->player, photoCameraX, photoCameraY, photoCameraZ);
}
photoCameraTarget->setPos(photoCameraX, photoCameraY, photoCameraZ);
photoCameraTarget->xo = photoCameraTarget->xOld = photoCameraX;
photoCameraTarget->yo = photoCameraTarget->yOld = photoCameraY;
photoCameraTarget->zo = photoCameraTarget->zOld = photoCameraZ;
if (!oldHideGui) minecraft->options.toggle(OPTIONS_HIDEGUI);
if (!oldThirdPerson) minecraft->options.toggle(OPTIONS_THIRD_PERSON_VIEW);
if (!oldFixedCamera) minecraft->options.toggle(OPTIONS_FIXED_CAMERA);
minecraft->gameRenderer->setPhotoModeIsometric();
minecraft->levelRenderer->allChanged();
hasAppliedPhotoMode = true;
}
void UploadPhotoScreen::tick()
{
if (!hasAppliedPhotoMode || !minecraft || !minecraft->player || !minecraft->level) return;
if (photoCameraTarget) {
photoCameraTarget->setPos(photoCameraX, photoCameraY, photoCameraZ);
photoCameraTarget->xo = photoCameraTarget->xOld = photoCameraX;
photoCameraTarget->yo = photoCameraTarget->yOld = photoCameraY;
photoCameraTarget->zo = photoCameraTarget->zOld = photoCameraZ;
photoCameraTarget->yRot = photoCameraTarget->yRotO = 45.0f;
photoCameraTarget->xRot = photoCameraTarget->xRotO = 68.0f;
minecraft->cameraTargetPlayer = photoCameraTarget;
} }
} }
void UploadPhotoScreen::restorePhotoMode()
{
if (!hasAppliedPhotoMode || !minecraft) return;
if (minecraft->options.getBooleanValue(OPTIONS_HIDEGUI) != oldHideGui) minecraft->options.toggle(OPTIONS_HIDEGUI);
if (minecraft->options.getBooleanValue(OPTIONS_THIRD_PERSON_VIEW) != oldThirdPerson) minecraft->options.toggle(OPTIONS_THIRD_PERSON_VIEW);
if (minecraft->options.getBooleanValue(OPTIONS_FIXED_CAMERA) != oldFixedCamera) minecraft->options.toggle(OPTIONS_FIXED_CAMERA);
minecraft->gameRenderer->clearPhotoModeIsometric();
minecraft->cameraTargetPlayer = minecraft->player;
if (hasOldPose && minecraft->player) {
minecraft->player->yRot = oldYaw;
minecraft->player->xRot = oldPitch;
}
hasAppliedPhotoMode = false;
} }
void UploadPhotoScreen::keyPressed(int eventKey) void UploadPhotoScreen::keyPressed(int eventKey)
{ {
if (eventKey == Keyboard::KEY_ESCAPE) { int selX = selectedItem % Inventory::SELECTION_SIZE;
restorePhotoMode(); int selY = selectedItem / Inventory::SELECTION_SIZE;
minecraft->setScreen(NULL);
return;
}
Screen::keyPressed(eventKey); Options& o = minecraft->options;
} if (eventKey == o.keyLeft.key && selX > 0)
void UploadPhotoScreen::buttonClicked(Button* button)
{ {
if (!button || button->id != 1) return; selectedItem -= 1;
}
else if (eventKey == o.keyRight.key && selX < (Inventory::SELECTION_SIZE - 1))
{
selectedItem += 1;
}
else if (eventKey == o.keyDown.key && selY > 0)
{
selectedItem -= Inventory::SELECTION_SIZE;
}
else if (eventKey == o.keyUp.key && selY < (Inventory::INVENTORY_ROWS - 1))
{
selectedItem += Inventory::SELECTION_SIZE;
}
restorePhotoMode(); if (eventKey == o.keyMenuOk.key)
{
selectSlotAndClose();
}
}
int UploadPhotoScreen::getSelectedSlot(int x, int y)
{
int left = 3 + width / 2 - Inventory::SELECTION_SIZE * 10;
int top = height - 16 - 3 - 22 * 2 - 22 * Inventory::INVENTORY_ROWS;
if (x >= left && y >= top)
{
int xSlot = (x - left) / 20;
if (xSlot < Inventory::SELECTION_SIZE)
{
// rows are rendered upsidedown
return xSlot + Inventory::INVENTORY_SIZE - ((y - top) / 22) * Inventory::SELECTION_SIZE;
}
}
return -1;
}
void UploadPhotoScreen::mouseClicked(int x, int y, int buttonNum) {
if (buttonNum == MouseAction::ACTION_LEFT) {
int slot = getSelectedSlot(x, y);
if (slot >= 0 && slot < Inventory::INVENTORY_SIZE)
{
selectedItem = slot;
//minecraft->soundEngine->playUI("random.click", 1, 1);
}
}
}
void UploadPhotoScreen::mouseReleased(int x, int y, int buttonNum)
{
if (buttonNum == MouseAction::ACTION_LEFT) {
int slot = getSelectedSlot(x, y);
if (slot >= 0 && slot < Inventory::INVENTORY_SIZE && slot == selectedItem)
{
selectSlotAndClose();
}
}
}
void UploadPhotoScreen::selectSlotAndClose()
{
Inventory* inventory = minecraft->player->inventory;
int itemId = inventory->getSelectionSlotItemId(selectedItem + Inventory::SELECTION_SIZE);
int i = 0;
for (; i < Inventory::SELECTION_SIZE - 2; i++)
{
if (itemId == inventory->getSelectionSlotItemId(i))
{
break;
}
}
// update selection list
for (; i >= 1; i--)
{
inventory->setSelectionSlotItemId(i, inventory->getSelectionSlotItemId(i - 1));
}
inventory->setSelectionSlotItemId(0, itemId);
inventory->selectSlot(0);
minecraft->soundEngine->playUI("random.click", 1, 1);
minecraft->setScreen(NULL); minecraft->setScreen(NULL);
} }
void UploadPhotoScreen::setupPositions() #endif
{
const int buttonWidth = 120;
const int buttonHeight = 24;
bBack->width = buttonWidth;
bBack->height = buttonHeight;
bBack->x = (width - buttonWidth) / 2;
bBack->y = height - 32;
}
void UploadPhotoScreen::render(int xm, int ym, float a)
{
drawCenteredString(font, "Photo Mode - Isometric", width / 2, 12, 0xffffff);
Screen::render(xm, ym, a);
}

View File

@@ -1,50 +1,36 @@
#ifndef NET_MINECRAFT_CLIENT_GUI_SCREENS__UploadPhotoScreen_H__ #ifndef NET_MINECRAFT_CLIENT_GUI_SCREENS__UploadPhotoScreen_H__
#define NET_MINECRAFT_CLIENT_GUI_SCREENS__UploadPhotoScreen_H__ #define NET_MINECRAFT_CLIENT_GUI_SCREENS__UploadPhotoScreen_H__
#include "../Screen.h" #include "Screen.h"
class Button;
class Mob;
class UploadPhotoScreen : public Screen class UploadPhotoScreen : public Screen
{ {
public: public:
UploadPhotoScreen(); UploadPhotoScreen();
virtual ~UploadPhotoScreen(); virtual ~UploadPhotoScreen() {}
virtual void init(); virtual void init();
virtual void setupPositions();
virtual void tick();
virtual void removed();
virtual void keyPressed(int eventKey);
virtual void render(int xm, int ym, float a); void render(int xm, int ym, float a) {
Screen::render(xm, ym, a);
}
protected: protected:
virtual void buttonClicked(Button* button); virtual void mouseClicked(int x, int y, int buttonNum);
virtual void mouseReleased(int x, int y, int buttonNum);
virtual void keyPressed(int eventKey);
private: private:
void applyPhotoMode(); int selectedItem;
void restorePhotoMode();
bool hasAppliedPhotoMode; void renderSlots();
bool oldHideGui; void renderSlot(int slot, int x, int y, float a);
bool oldThirdPerson;
bool oldFixedCamera; int getSelectedSlot(int x, int y);
bool hasOldPose; void selectSlotAndClose();
float oldX;
float oldY;
float oldZ;
float oldYaw;
float oldPitch;
Mob* photoCameraTarget;
float photoCameraX;
float photoCameraY;
float photoCameraZ;
Button* bBack;
}; };
#endif /*NET_MINECRAFT_CLIENT_GUI_SCREENS__UploadPhotoScreen_H__*/ #endif /*NET_MINECRAFT_CLIENT_GUI_SCREENS__UploadPhotoScreen_H__*/

View File

@@ -34,7 +34,6 @@ static int _shTicks = -1;
GameRenderer::GameRenderer( Minecraft* mc ) GameRenderer::GameRenderer( Minecraft* mc )
: mc(mc), : mc(mc),
renderDistance(0), renderDistance(0),
photoModeIsometric(false),
_tick(0), _tick(0),
_lastTickT(0), _lastTickT(0),
fovOffset(0), fovOffset(0),
@@ -91,7 +90,7 @@ void renderCursor(float x, float y, Minecraft* minecraft) {
/*private*/ /*private*/
void GameRenderer::setupCamera(float a, int eye) { void GameRenderer::setupCamera(float a, int eye) {
renderDistance = photoModeIsometric ? 1024.0f : (float) (16 * 16 >> (mc->options.getIntValue(OPTIONS_VIEW_DISTANCE))); renderDistance = (float) (16 * 16 >> (mc->options.getIntValue(OPTIONS_VIEW_DISTANCE)));
#if defined(ANDROID) #if defined(ANDROID)
if (mc->isPowerVR() && mc->options.getIntValue(OPTIONS_VIEW_DISTANCE) <= 2) if (mc->isPowerVR() && mc->options.getIntValue(OPTIONS_VIEW_DISTANCE) <= 2)
renderDistance *= 0.8f; renderDistance *= 0.8f;
@@ -102,15 +101,6 @@ void GameRenderer::setupCamera(float a, int eye) {
float stereoScale = 0.07f; float stereoScale = 0.07f;
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) glTranslatef2(-(eye * 2 - 1) * stereoScale, 0, 0); if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) glTranslatef2(-(eye * 2 - 1) * stereoScale, 0, 0);
if (mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
if (zoom != 1) {
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 {
if (zoom != 1) { if (zoom != 1) {
glTranslatef2((float) zoom_x, (float) -zoom_y, 0); glTranslatef2((float) zoom_x, (float) -zoom_y, 0);
glScalef2(zoom, zoom, 1); glScalef2(zoom, zoom, 1);
@@ -118,7 +108,6 @@ void GameRenderer::setupCamera(float a, int eye) {
} else { } else {
gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance); gluPerspective(_setupCameraFov = getFov(a, true), mc->width / (float) mc->height, 0.05f, renderDistance);
} }
}
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
glLoadIdentity2(); glLoadIdentity2();
@@ -315,7 +304,7 @@ void GameRenderer::renderLevel(float a) {
setupFog(1); setupFog(1);
// MCPE renders clouds using this, but this method breaks 3d clouds and also breaks 2d clouds transparency viewed from above, add as a Legacy Sky or Fast Sky option. - shredder // MCPE renders clouds using this, but this method breaks 3d clouds and also breaks 2d clouds transparency viewed from above, add as a Legacy Sky or Fast Sky option. - shredder
if(!mc->options.getBooleanValue(OPTIONS_BETA_SKY)){ if(!mc->options.getBooleanValue(OPTIONS_BETA_SKY)){
if(mc->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS) && !photoModeIsometric) { if(mc->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS)) {
prepareAndRenderClouds(levelRenderer, a); prepareAndRenderClouds(levelRenderer, a);
} }
} }
@@ -351,11 +340,9 @@ void GameRenderer::renderLevel(float a) {
setupFog(0); setupFog(0);
glEnable2(GL_BLEND); glEnable2(GL_BLEND);
glDisable2(GL_CULL_FACE); glDisable2(GL_CULL_FACE);
glDepthMask(GL_FALSE); // @TODO commenting this out fixes Ice transparency and clouds are no longer visilbe underwater like normal beta - shredder glDepthMask(GL_FALSE);
glDisable2(GL_ALPHA_TEST); glDisable2(GL_ALPHA_TEST);
mc->textures->loadAndBindTexture("terrain.png"); mc->textures->loadAndBindTexture("terrain.png");
// @TODO - below is a commented out double render system that fixes ice transparency, but probs harm performance, add it as an option - shredder
//if (mc->options.fancyGraphics) { //if (mc->options.fancyGraphics) {
// glColorMask(false, false, false, false); // glColorMask(false, false, false, false);
// int visibleWaterChunks = levelRenderer->render(cameraEntity, 1, a); // int visibleWaterChunks = levelRenderer->render(cameraEntity, 1, a);
@@ -574,14 +561,6 @@ void GameRenderer::bobView(float a) {
/*private*/ /*private*/
void GameRenderer::setupFog(int i) { void GameRenderer::setupFog(int i) {
if (photoModeIsometric) {
glDisable2(GL_FOG);
glFogf(GL_FOG_START, 0.0f);
glFogf(GL_FOG_END, 1024.0f);
glEnable2(GL_COLOR_MATERIAL);
return;
}
Mob* player = mc->cameraTargetPlayer; Mob* player = mc->cameraTargetPlayer;
float fogBuffer[4] = {fr, fg, fb, 1}; float fogBuffer[4] = {fr, fg, fb, 1};
@@ -698,7 +677,7 @@ void GameRenderer::pick(float a) {
float range = mc->gameMode->getPickRange(); float range = mc->gameMode->getPickRange();
bool isPicking = true; bool isPicking = true;
bool freeform = mc->useTouchscreen() && !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA); bool freeform = mc->useTouchscreen(); //&& !mc->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA);
if (freeform) { if (freeform) {
isPicking = updateFreeformPickDirection(a, pickDirection); isPicking = updateFreeformPickDirection(a, pickDirection);
@@ -838,14 +817,6 @@ void GameRenderer::tick(int nTick, int maxTick) {
/*private*/ /*private*/
void GameRenderer::setupClearColor(float a) { void GameRenderer::setupClearColor(float a) {
if (photoModeIsometric) {
fr = 0.47f;
fg = 0.78f;
fb = 1.0f;
glClearColor(fr, fg, fb, 1.0f);
return;
}
Level* level = mc->level; Level* level = mc->level;
Mob* player = mc->cameraTargetPlayer; Mob* player = mc->cameraTargetPlayer;
@@ -959,28 +930,6 @@ void GameRenderer::onGraphicsReset()
if (itemInHandRenderer) itemInHandRenderer->onGraphicsReset(); if (itemInHandRenderer) itemInHandRenderer->onGraphicsReset();
} }
void GameRenderer::setPhotoModeIsometric()
{
photoModeIsometric = true;
thirdDistance = thirdDistanceO = 128.0f;
thirdRotation = thirdRotationO = 45.0f;
thirdTilt = thirdTiltO = 56.0f;
zoom = 1.0f;
zoom_x = 0.0f;
zoom_y = 0.0f;
cameraRoll = cameraRollO = 0.0f;
}
void GameRenderer::clearPhotoModeIsometric()
{
photoModeIsometric = false;
}
bool GameRenderer::isPhotoModeIsometric() const
{
return photoModeIsometric;
}
void GameRenderer::saveMatrices() void GameRenderer::saveMatrices()
{ {
#if defined(RPI) #if defined(RPI)

View File

@@ -33,9 +33,6 @@ public:
void renderItemInHand(float a, int eye); void renderItemInHand(float a, int eye);
void onGraphicsReset(); void onGraphicsReset();
void setPhotoModeIsometric();
void clearPhotoModeIsometric();
bool isPhotoModeIsometric() const;
void setupCamera(float a, int eye); void setupCamera(float a, int eye);
void moveCameraToPlayer(float a); void moveCameraToPlayer(float a);
@@ -61,7 +58,6 @@ private:
Minecraft* mc; Minecraft* mc;
float renderDistance; float renderDistance;
bool photoModeIsometric;
int _tick; int _tick;
Vec3 pickDirection; Vec3 pickDirection;

View File

@@ -26,7 +26,6 @@
#include "../../client/player/LocalPlayer.h" #include "../../client/player/LocalPlayer.h"
#include "../../world/level/GrassColor.h" #include "../../world/level/GrassColor.h"
#include "Lighting.h"
#ifdef GFX_SMALLER_CHUNKS #ifdef GFX_SMALLER_CHUNKS
/* static */ const int LevelRenderer::CHUNK_SIZE = 8; /* static */ const int LevelRenderer::CHUNK_SIZE = 8;
@@ -193,9 +192,7 @@ void LevelRenderer::allChanged()
TileRenderer::setUseTint(sideTint); TileRenderer::setUseTint(sideTint);
int dist = mc->gameRenderer && mc->gameRenderer->isPhotoModeIsometric() int dist = (512 >> 3) << (3 - lastViewDistance);
? 1024
: (512 >> 3) << (3 - lastViewDistance);
if (lastViewDistance <= 2 && mc->isPowerVR()) if (lastViewDistance <= 2 && mc->isPowerVR())
dist = (int)((float)dist * 0.8f); dist = (int)((float)dist * 0.8f);
LOGI("last: %d, power: %d\n", lastViewDistance, mc->isPowerVR()); LOGI("last: %d, power: %d\n", lastViewDistance, mc->isPowerVR());
@@ -204,9 +201,7 @@ void LevelRenderer::allChanged()
dist *= 0.6f; dist *= 0.6f;
#endif #endif
if (!(mc->gameRenderer && mc->gameRenderer->isPhotoModeIsometric())) {
if (dist > 400) dist = 400; if (dist > 400) dist = 400;
}
/* /*
* if (Minecraft.FLYBY_MODE) { dist = 512 - CHUNK_SIZE * 2; } * if (Minecraft.FLYBY_MODE) { dist = 512 - CHUNK_SIZE * 2; }
*/ */
@@ -580,7 +575,7 @@ void LevelRenderer::render(const AABB& b) const
// t.color(255, 255, 255, 255); // again not needed, for some reason the vanilla source code tints it... white? maybe this was used for something else in MCPE's dev at one point? - shredder // t.color(255, 255, 255, 255); // again not needed, for some reason the vanilla source code tints it... white? maybe this was used for something else in MCPE's dev at one point? - shredder
// t.offset(((Mob*)mc->player)->getPos(0).negated()); // why does this even exist normally, it just makes the thing... not render // t.offset(((Mob*)mc->player)->getPos(0).negated()); // why does this even exist normally, it just makes the thing... not render
glLineWidth(2.0f); // make it more thick - shredder
t.begin(GL_LINE_STRIP); t.begin(GL_LINE_STRIP);
t.vertex(b.x0, b.y0, b.z0); t.vertex(b.x0, b.y0, b.z0);
t.vertex(b.x1, b.y0, b.z0); t.vertex(b.x1, b.y0, b.z0);
@@ -678,11 +673,9 @@ void LevelRenderer::tick()
bool LevelRenderer::updateDirtyChunks( Mob* player, bool force ) bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
{ {
bool slow = mc->gameRenderer && mc->gameRenderer->isPhotoModeIsometric(); bool slow = false;
if (slow) { if (slow) {
const int visibleLimit = 12;
const int invisibleLimit = 4;
DirtyChunkSorter dirtySorter(player); DirtyChunkSorter dirtySorter(player);
std::sort(dirtyChunks.begin(), dirtyChunks.end(), dirtySorter); std::sort(dirtyChunks.begin(), dirtyChunks.end(), dirtySorter);
int s = dirtyChunks.size() - 1; int s = dirtyChunks.size() - 1;
@@ -692,9 +685,9 @@ bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
if (!force) { if (!force) {
if (chunk->distanceToSqr(player) > 16 * 16) { if (chunk->distanceToSqr(player) > 16 * 16) {
if (chunk->visible) { if (chunk->visible) {
if (i >= visibleLimit) return false; if (i >= MAX_VISIBLE_REBUILDS_PER_FRAME) return false;
} else { } else {
if (i >= invisibleLimit) return false; if (i >= MAX_INVISIBLE_REBUILDS_PER_FRAME) return false;
} }
} }
} else { } else {
@@ -708,9 +701,10 @@ bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
return dirtyChunks.size() == 0; return dirtyChunks.size() == 0;
} else { } else {
const int count = (mc->gameRenderer && mc->gameRenderer->isPhotoModeIsometric()) ? 32 : 3; const int count = 3;
Chunk* toAdd[24] = {NULL};
DirtyChunkSorter dirtyChunkSorter(player); DirtyChunkSorter dirtyChunkSorter(player);
Chunk* toAdd[count] = {NULL};
std::vector<Chunk*>* nearChunks = NULL; std::vector<Chunk*>* nearChunks = NULL;
int pendingChunkSize = dirtyChunks.size(); int pendingChunkSize = dirtyChunks.size();
@@ -720,7 +714,7 @@ bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
Chunk* chunk = dirtyChunks[i]; Chunk* chunk = dirtyChunks[i];
if (!force) { if (!force) {
if (chunk->distanceToSqr(player) > ((mc->gameRenderer && mc->gameRenderer->isPhotoModeIsometric()) ? 65536.0f : 1024.0f)) { if (chunk->distanceToSqr(player) > 1024.0f) {
int index; int index;
// is this chunk in the closest <count>? // is this chunk in the closest <count>?
@@ -759,7 +753,7 @@ bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
// if there are nearby chunks that need to be prepared for // if there are nearby chunks that need to be prepared for
// rendering, sort them and then process them // rendering, sort them and then process them
static const float MaxFrameTime = (mc->gameRenderer && mc->gameRenderer->isPhotoModeIsometric()) ? (1.0f / 75.0f) : (1.0f / 100.0f); static const float MaxFrameTime = 1.0f / 100.0f;
Stopwatch chunkWatch; Stopwatch chunkWatch;
chunkWatch.start(); chunkWatch.start();
@@ -1163,22 +1157,23 @@ void LevelRenderer::renderSky(float alpha) {
glDisable(GL_FOG); glDisable(GL_FOG);
glDisable(GL_ALPHA_TEST); glDisable(GL_ALPHA_TEST);
// re ported this again from beta 1.6.6, thanks to the mcpe 0.1 decomp team's code for some bit of help about the void layer - shredder // thanks to the mcpe 0.1 decomp project a bit for this part, was not getting the gl states correctly, gles is painful - shredder
// Sunrise // Sunrise
if (mc->options.getBooleanValue(OPTIONS_BEAUTIFUL_SKY)) { if (mc->options.getBooleanValue(OPTIONS_BEAUTIFUL_SKY)) {
glEnable(GL_BLEND); glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Lighting::turnOff();
float* c = level->dimension->getSunriseColor(level->getTimeOfDay(alpha), alpha); float* c = level->dimension->getSunriseColor(level->getTimeOfDay(alpha), alpha);
if (c != nullptr) if (c != nullptr)
{ {
glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);
// glShadeModel(GL_SMOOTH); //
glPushMatrix(); glPushMatrix();
glRotatef(90.0f, 1.0f, 0.0f, 0.0f); glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
glRotatef(level->getTimeOfDay(alpha) > 0.5f ? 180 : 0, 0.0f, 0.0f, 1.0f); glRotatef(level->getTimeOfDay(alpha) > 0.5f ? 180 : 0, 0.0f, 0.0f, 1.0f);
t.begin(GL_TRIANGLE_FAN); t.begin(GL_TRIANGLE_FAN);
t.color(c[0], c[1], c[2], c[3]); t.color(c[0], c[1], c[2], c[3]);
t.vertex(0.0f, 100.0f, 0.0f); t.vertex(0.0f, 100.0f, 0.0f);
@@ -1195,12 +1190,11 @@ void LevelRenderer::renderSky(float alpha) {
t.draw(); t.draw();
glPopMatrix(); glPopMatrix();
// glShadeModel(GL_FLAT); //
} }
// gets the time of day and rotates the sun and moon png based on the time // gets the time of day and rotates the sun and moon png based on the time
glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_SRC_ALPHA, GL_ONE); glBlendFunc(GL_ONE, GL_ONE);
glPushMatrix(); glPushMatrix();
glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
@@ -1332,8 +1326,8 @@ void LevelRenderer::renderAdvancedClouds(float alpha) {
float cloudTime = (float)ticks + alpha; float cloudTime = (float)ticks + alpha;
float xo = (px + cloudTime * 0.03f) / ss; double xo = (px + cloudTime * 0.03f) / ss;
float zo = pz / ss + 0.33f; double zo = pz / ss + 0.33f;
float yy = 108.0f - py + 0.33f; float yy = 108.0f - py + 0.33f;

View File

@@ -130,9 +130,10 @@ 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);
int tex = ((Tile*)Tile::fire)->tex; int tex = ((Tile*)Tile::fire)->tex;
@@ -186,12 +187,8 @@ 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);
Level* level = getLevel(); Level* level = getLevel();
@@ -224,6 +221,9 @@ void EntityRenderer::renderShadow(Entity* e, float x, float y, float z, float po
renderTileShadow(Tile::tiles[t], x, y + e->getShadowHeightOffs(), z, xt, yt, zt, pow, r, xo, yo + e->getShadowHeightOffs(), zo); renderTileShadow(Tile::tiles[t], x, y + e->getShadowHeightOffs(), z, xt, yt, zt, pow, r, xo, yo + e->getShadowHeightOffs(), zo);
} }
} }
textures->loadAndBindTexture(("/misc/shadow.png"));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
tt.draw(); tt.draw();
glColor4f2(1, 1, 1, 1); glColor4f2(1, 1, 1, 1);

View File

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

View File

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

View File

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

View File

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

View File

@@ -3,6 +3,7 @@
#include "../../level/tile/QuartzBlockTile.h" #include "../../level/tile/QuartzBlockTile.h"
#include "../../level/tile/TreeTile.h" #include "../../level/tile/TreeTile.h"
#include "../../level/tile/StoneSlabTile.h" #include "../../level/tile/StoneSlabTile.h"
#include "../../level/tile/TallGrass.h"
#include "../../item/DyePowderItem.h" #include "../../item/DyePowderItem.h"
#include "../../item/crafting/Recipe.h" #include "../../item/crafting/Recipe.h"
#include "../../item/CoalItem.h" #include "../../item/CoalItem.h"
@@ -229,6 +230,7 @@ void Inventory::setupDefault() {
addItem(new ItemInstance(((Tile*)Tile::flower))); addItem(new ItemInstance(((Tile*)Tile::flower)));
addItem(new ItemInstance(((Tile*)Tile::rose))); addItem(new ItemInstance(((Tile*)Tile::rose)));
addItem(new ItemInstance(Tile::tallgrass, 1, TallGrass::TALL_GRASS));
addItem(new ItemInstance(((Tile*)Tile::mushroom1))); addItem(new ItemInstance(((Tile*)Tile::mushroom1)));
addItem(new ItemInstance(((Tile*)Tile::mushroom2))); addItem(new ItemInstance(((Tile*)Tile::mushroom2)));
addItem(new ItemInstance(Tile::cactus)); addItem(new ItemInstance(Tile::cactus));

View File

@@ -285,6 +285,7 @@ void Tile::initTiles() {
Item::items[sandStone->id] = (new AuxDataTileItem(sandStone->id - 256, sandStone))->setCategory(ItemCategory::Structures)->setDescriptionId("sandStone"); Item::items[sandStone->id] = (new AuxDataTileItem(sandStone->id - 256, sandStone))->setCategory(ItemCategory::Structures)->setDescriptionId("sandStone");
Item::items[quartzBlock->id] = (new AuxDataTileItem(quartzBlock->id - 256, quartzBlock))->setCategory(ItemCategory::Structures)->setDescriptionId("quartzBlock"); Item::items[quartzBlock->id] = (new AuxDataTileItem(quartzBlock->id - 256, quartzBlock))->setCategory(ItemCategory::Structures)->setDescriptionId("quartzBlock");
Item::items[tallgrass->id] = (new AuxDataTileItem(tallgrass->id - 256, tallgrass))->setCategory(ItemCategory::Decorations);
for (int i = 0; i < 256; i++) { for (int i = 0; i < 256; i++) {
if (Tile::tiles[i] != NULL) { if (Tile::tiles[i] != NULL) {