mirror of
https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
synced 2026-03-20 15:03:32 +00:00
the whole game
This commit is contained in:
146
src/client/gui/screens/TextEditScreen.cpp
Executable file
146
src/client/gui/screens/TextEditScreen.cpp
Executable file
@@ -0,0 +1,146 @@
|
||||
#include "TextEditScreen.h"
|
||||
#include "../../../world/level/tile/entity/SignTileEntity.h"
|
||||
#include "../../../AppPlatform.h"
|
||||
#include "../../Minecraft.h"
|
||||
#include "../../renderer/tileentity/TileEntityRenderDispatcher.h"
|
||||
#include "../../renderer/Tesselator.h"
|
||||
#include "../../renderer/Textures.h"
|
||||
#include "../../renderer/GameRenderer.h"
|
||||
#include "../components/Button.h"
|
||||
#include "../../../network/Packet.h"
|
||||
#include "../../../network/RakNetInstance.h"
|
||||
TextEditScreen::TextEditScreen( SignTileEntity* signEntity )
|
||||
: sign(signEntity), isShowingKeyboard(false), frame(0), line(0), btnClose(1, "") {
|
||||
|
||||
}
|
||||
TextEditScreen::~TextEditScreen() {
|
||||
|
||||
}
|
||||
void TextEditScreen::init() {
|
||||
super::init();
|
||||
minecraft->platform()->showKeyboard();
|
||||
isShowingKeyboard = true;
|
||||
ImageDef def;
|
||||
def.name = "gui/spritesheet.png";
|
||||
def.x = 0;
|
||||
def.y = 1;
|
||||
def.width = def.height = 18;
|
||||
def.setSrc(IntRectangle(60, 0, 18, 18));
|
||||
btnClose.setImageDef(def, true);
|
||||
btnClose.scaleWhenPressed = false;
|
||||
buttons.push_back(&btnClose);
|
||||
}
|
||||
|
||||
void TextEditScreen::setupPositions() {
|
||||
btnClose.width = btnClose.height = 19;
|
||||
btnClose.x = width - btnClose.width;
|
||||
btnClose.y = 0;
|
||||
}
|
||||
|
||||
|
||||
bool TextEditScreen::handleBackEvent( bool isDown ) {
|
||||
sign->setChanged();
|
||||
Packet* signUpdatePacket = sign->getUpdatePacket();
|
||||
minecraft->raknetInstance->send(signUpdatePacket);
|
||||
minecraft->platform()->hideKeyboard();
|
||||
minecraft->setScreen(NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
void TextEditScreen::render( int xm, int ym, float a ) {
|
||||
glDepthMask(GL_FALSE);
|
||||
renderBackground();
|
||||
glPushMatrix();
|
||||
glDepthMask(GL_TRUE);
|
||||
glDisable(GL_CULL_FACE);
|
||||
glLoadIdentity();
|
||||
Tesselator& t = Tesselator::instance;
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glOrthof(0.0f, (float)minecraft->width, (float)minecraft->height, 0, -1, 1);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
|
||||
minecraft->textures->loadAndBindTexture("item/sign.png");
|
||||
glColor4f2(1, 1, 1, 1);
|
||||
|
||||
static float minUV[] = {0.03126f, 0.06249f};
|
||||
static float maxUV[] = {0.39063f, 0.4374f};
|
||||
float scale = ((minecraft->height / 2) / 32) * 0.9f;
|
||||
|
||||
glTranslatef(minecraft->width / 2.0f, 5.0f, 0.0f);
|
||||
glScalef2(scale,scale,1);
|
||||
t.begin(GL_QUADS);
|
||||
t.vertexUV(-32, 0, 0.0f,minUV[0],minUV[1]);
|
||||
t.vertexUV(32, 0, 0.0f, maxUV[0], minUV[1]);
|
||||
t.vertexUV(32, 0 + 32, 0.0f, maxUV[0], maxUV[1]);
|
||||
t.vertexUV(-32, 0 + 32, 0.0f, minUV[0], maxUV[1]);
|
||||
t.draw();
|
||||
|
||||
sign->selectedLine = line;
|
||||
float textScale = 8.0f / 11.0f;
|
||||
|
||||
glTranslatef(0, 2 ,0);
|
||||
glScalef2(textScale, textScale, 1);
|
||||
for(int i = 0; i < 4; ++i) {
|
||||
//drawCenteredString(font, sign->messages[a], 32.0f, 10 * a, 0xFF000000);
|
||||
std::string msg = sign->messages[i];
|
||||
if (i == sign->selectedLine && msg.length() < 14) {
|
||||
std::string s = "> " + msg + " <";
|
||||
font->draw(s, -(float)font->width(s) / 2.0f, 10.0f * i, 0xFF000000, false);
|
||||
} else {
|
||||
font->draw(msg, -(float)font->width(msg) / 2.0f, 10.0f * i, 0xFF000000, false);
|
||||
}
|
||||
}
|
||||
sign->selectedLine = -1;
|
||||
//font->draw("Hej", minecraft->width / 2, 100, 0xFFFFFFFF, false);
|
||||
|
||||
glPopMatrix();
|
||||
glEnable(GL_CULL_FACE);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPopMatrix();
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
|
||||
//glEnable(GL_DEPTH_TEST);
|
||||
super::render(xm, ym, a);
|
||||
}
|
||||
|
||||
void TextEditScreen::lostFocus() {
|
||||
|
||||
}
|
||||
|
||||
void TextEditScreen::tick() {
|
||||
frame++;
|
||||
}
|
||||
|
||||
void TextEditScreen::keyPressed( int eventKey ) {
|
||||
LOGW("Key pressed! [%d]", eventKey);
|
||||
if(eventKey == Keyboard::KEY_BACKSPACE) {
|
||||
if(sign->messages[line].length() > 0) {
|
||||
sign->messages[line].erase(sign->messages[line].size() - 1, 1);
|
||||
} else {
|
||||
line--;
|
||||
if(line < 0) {
|
||||
line = 3;
|
||||
}
|
||||
}
|
||||
} else if(eventKey == Keyboard::KEY_RETURN) {
|
||||
line = (line + 1) % 4;
|
||||
} else {
|
||||
super::keyPressed(eventKey);
|
||||
}
|
||||
}
|
||||
|
||||
void TextEditScreen::keyboardNewChar( char inputChar ) {
|
||||
std::string fullstring = sign->messages[line] + inputChar;
|
||||
if(fullstring.length() < 16) {
|
||||
sign->messages[line] = fullstring;
|
||||
//LOGW("Line text updated: %s\n", fullstring.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void TextEditScreen::buttonClicked( Button* button ) {
|
||||
if(button == &btnClose)
|
||||
handleBackEvent(true);
|
||||
}
|
||||
Reference in New Issue
Block a user