Files
MinecraftConsoles/Minecraft.Client/TextEditScreen.cpp
ModMaker101 a9be52c41a Project modernization (#630)
* Fixed boats falling and a TP glitch #266

* Replaced every C-style cast with C++ ones

* Replaced every C-style cast with C++ ones

* Fixed boats falling and a TP glitch #266

* Updated NULL to nullptr and fixing some type issues

* Modernized and fixed a few bugs

- Replaced most instances of `NULL` with `nullptr`.
- Replaced most `shared_ptr(new ...)` with `make_shared`.
- Removed the `nullptr` macro as it was interfering with the actual nullptr keyword in some instances.

* Fixing more conflicts

* Replace int loops with size_t and start work on overrides
2026-03-08 09:56:03 +07:00

119 lines
2.9 KiB
C++

#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);
}