aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/TextEditScreen.cpp
blob: 4b32d13921c8de35b388be1b4c14748506456c9e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include "stdafx.h"
#include "TextEditScreen.h"	
#include "Button.h"
#include "TileEntityRenderDispatcher.h"
#include "ClientConnection.h"
#include "MultiPlayerLevel.h"
#include "..\Minecraft.World\SignTileEntity.h"
#include "..\Minecraft.World\SharedConstants.h"
#include "..\Minecraft.World\net.minecraft.network.packet.h"
#include "..\Minecraft.World\net.minecraft.world.level.h"
#include "..\Minecraft.World\net.minecraft.world.level.tile.h"


const wstring TextEditScreen::allowedChars = SharedConstants::acceptableLetters;;

TextEditScreen::TextEditScreen(shared_ptr<SignTileEntity> sign)
{
	// 4J - added initialisers
	line = 0;
	frame = 0;
	title = L"Edit sign message:";

	this->sign = sign;
}

void TextEditScreen::init()
{
    buttons.clear();
    Keyboard::enableRepeatEvents(true);
    buttons.push_back(new Button(0, width / 2 - 100, height / 4 + 24 * 5, L"Done"));
}

void TextEditScreen::removed()
{
    Keyboard::enableRepeatEvents(false);
    if (minecraft->level->isClientSide)
	{
        minecraft->getConnection(0)->send(std::make_shared<SignUpdatePacket>(sign->x, sign->y, sign->z, sign->IsVerified(), sign->IsCensored(), sign->GetMessages()));
    }

}

void TextEditScreen::tick()
{
	frame++;
}

void TextEditScreen::buttonClicked(Button *button)
{
    if (!button->active) return;

    if (button->id == 0)
	{
        sign->setChanged();
        minecraft->setScreen(nullptr);
    }
}

void TextEditScreen::keyPressed(wchar_t ch, int eventKey)
{
    if (eventKey == Keyboard::KEY_UP) line = (line - 1) & 3;
    if (eventKey == Keyboard::KEY_DOWN || eventKey == Keyboard::KEY_RETURN) line = (line + 1) & 3;

	wstring temp=sign->GetMessage(line);
    if (eventKey == Keyboard::KEY_BACK && temp.length() > 0)
	{
        temp = temp.substr(0, temp.length() - 1);
    }
    if (allowedChars.find(ch) != wstring::npos && temp.length() < 15)
	{
        temp += ch;
    }

	sign->SetMessage(line,temp);

}

void TextEditScreen::render(int xm, int ym, float a)
{
    renderBackground();

    drawCenteredString(font, title, width / 2, 40, 0xffffff);

    glPushMatrix();
    glTranslatef(static_cast<float>(width) / 2, static_cast<float>(height) / 2, 50);
    float ss = 60 / (16 / 25.0f);
    glScalef(-ss, -ss, -ss);
    glRotatef(180, 0, 1, 0);

    Tile *tile = sign->getTile();

    if (tile == Tile::sign)
	{
        float rot = sign->getData() * 360 / 16.0f;
        glRotatef(rot, 0, 1, 0);
        glTranslatef(0, 5 / 16.0f, 0);
    }
	else
	{
        int face = sign->getData();
        float rot = 0;

        if (face == 2) rot = 180;
        if (face == 4) rot = 90;
        if (face == 5) rot = -90;
        glRotatef(rot, 0, 1, 0);
        glTranslatef(0, 5 / 16.0f, 0);
    }

    if (frame / 6 % 2 == 0) sign->SetSelectedLine(line);

    TileEntityRenderDispatcher::instance->render(sign, 0 - 0.5f, -0.75f, 0 - 0.5f, 0);
    sign->SetSelectedLine(-1);

    glPopMatrix();

    Screen::render(xm, ym, a);

}