From bc407fda47b229c1c218e5a6a30cc67d21d498d6 Mon Sep 17 00:00:00 2001 From: iProgramInCpp Date: Sun, 6 Aug 2023 13:19:37 +0300 Subject: [PATCH] * Improve the Chat Screen --- source/Minecraft.cpp | 16 +++++++++ source/Minecraft.hpp | 1 + source/client/gui/Gui.cpp | 33 ++++++++++++++----- source/client/gui/screens/ChatScreen.cpp | 17 +++++++--- .../screens/IngameBlockSelectionScreen.cpp | 5 +++ .../screens/IngameBlockSelectionScreen.hpp | 1 + .../network/ServerSideNetworkHandler.cpp | 5 +++ .../network/ServerSideNetworkHandler.hpp | 1 + 8 files changed, 65 insertions(+), 14 deletions(-) diff --git a/source/Minecraft.cpp b/source/Minecraft.cpp index 25fdbe5..a8f7b21 100644 --- a/source/Minecraft.cpp +++ b/source/Minecraft.cpp @@ -501,6 +501,22 @@ void Minecraft::handleCharInput(char chr) m_pScreen->charInput(chr); } +void Minecraft::sendMessage(const std::string& message) +{ + if (isOnlineClient()) + { + // send the server a message packet + MessagePacket mp(message); + m_pRakNetInstance->send(&mp); + } + else + { + // fake the server having received a packet + MessagePacket mp(message); + m_pNetEventCallback->handle(m_pRakNetInstance->m_pRakPeerInterface->GetMyGUID(), &mp); + } +} + void Minecraft::_levelGenerated() { if (m_pNetEventCallback) diff --git a/source/Minecraft.hpp b/source/Minecraft.hpp index 4dfb760..f070851 100644 --- a/source/Minecraft.hpp +++ b/source/Minecraft.hpp @@ -54,6 +54,7 @@ public: void locateMultiplayer(); void tickMouse(); void handleCharInput(char chr); + void sendMessage(const std::string& message); virtual void onGraphicsReset(); virtual void update() override; diff --git a/source/client/gui/Gui.cpp b/source/client/gui/Gui.cpp index ac554cb..27d8eae 100644 --- a/source/client/gui/Gui.cpp +++ b/source/client/gui/Gui.cpp @@ -8,6 +8,7 @@ #include "Minecraft.hpp" #include "client/gui/screens/IngameBlockSelectionScreen.hpp" +#include "client/gui/screens/ChatScreen.hpp" #include "client/renderer/entity/ItemRenderer.hpp" #ifdef _WIN32 @@ -384,6 +385,15 @@ void Gui::handleKeyPressed(int keyCode) break; } + + case AKEYCODE_T: + { + if (m_pMinecraft->m_pScreen) + break; + + m_pMinecraft->setScreen(new ChatScreen); + break; + } } } @@ -401,18 +411,23 @@ void Gui::renderMessages(bool bShowAll) int bkgdColor = 0x7F000000, textColor = 0xFFFFFFFF; - float fade = 10.0f * (1.0f - (float(msg.field_18) / 200.0f)); - if (fade <= 0.0f) - continue; - - if (fade < 1.0f) + float fade = 1.0f; + + if (!bShowAll) { - int x = int(fade * fade * 255.0f); - if (x == 0) + fade = 10.0f * (1.0f - (float(msg.field_18) / 200.0f)); + if (fade <= 0.0f) continue; - bkgdColor = (x / 2) << 24; - textColor = (x << 24) + 0xFFFFFF; + if (fade < 1.0f) + { + int x = int(fade * fade * 255.0f); + if (x == 0) + continue; + + bkgdColor = (x / 2) << 24; + textColor = (x << 24) + 0xFFFFFF; + } } fill(2, topEdge, 322, topEdge + 9, bkgdColor); diff --git a/source/client/gui/screens/ChatScreen.cpp b/source/client/gui/screens/ChatScreen.cpp index 4b6ca17..b1ce2cc 100644 --- a/source/client/gui/screens/ChatScreen.cpp +++ b/source/client/gui/screens/ChatScreen.cpp @@ -22,14 +22,21 @@ void ChatScreen::buttonClicked(Button* pButton) void ChatScreen::init() { + m_btnSend.m_height = 20; + m_btnSend.m_width = 40; m_textChat.m_xPos = 0; m_textChat.m_yPos = m_height - 20; - m_textChat.m_width = m_width - 60; + m_textChat.m_width = m_width - m_btnSend.m_width; m_textChat.m_height = 20; - m_btnSend.m_height = 20; - m_btnSend.m_width = 60; - m_btnSend.m_yPos = m_textChat.m_yPos; + m_btnSend.m_yPos = m_height - 20; m_btnSend.m_xPos = m_textChat.m_xPos + m_textChat.m_width; + + // set focus directly on the chat text box + m_textChat.init(m_pFont); + m_textChat.setFocused(true); + + m_buttons.push_back(&m_btnSend); + m_textInputs.push_back(&m_textChat); } void ChatScreen::removed() @@ -57,7 +64,7 @@ void ChatScreen::keyPressed(int keyCode) void ChatScreen::sendMessageAndExit() { - m_pMinecraft->m_gui.addMessage(m_textChat.m_text); + m_pMinecraft->sendMessage(m_textChat.m_text); m_pMinecraft->setScreen(nullptr); } diff --git a/source/client/gui/screens/IngameBlockSelectionScreen.cpp b/source/client/gui/screens/IngameBlockSelectionScreen.cpp index 658f95e..f81e44d 100644 --- a/source/client/gui/screens/IngameBlockSelectionScreen.cpp +++ b/source/client/gui/screens/IngameBlockSelectionScreen.cpp @@ -164,6 +164,11 @@ void IngameBlockSelectionScreen::mouseReleased(int x, int y, int type) selectSlotAndClose(); } +void IngameBlockSelectionScreen::removed() +{ + m_pMinecraft->m_gui.inventoryUpdated(); +} + void IngameBlockSelectionScreen::selectSlotAndClose() { Inventory* pInv = getInventory(); diff --git a/source/client/gui/screens/IngameBlockSelectionScreen.hpp b/source/client/gui/screens/IngameBlockSelectionScreen.hpp index 71f6fdd..6160408 100644 --- a/source/client/gui/screens/IngameBlockSelectionScreen.hpp +++ b/source/client/gui/screens/IngameBlockSelectionScreen.hpp @@ -31,6 +31,7 @@ public: virtual void render(int x, int y, float f) override; virtual void mouseClicked(int x, int y, int type) override; virtual void mouseReleased(int x, int y, int type) override; + virtual void removed() override; private: int m_selectedSlot = 0; diff --git a/source/client/network/ServerSideNetworkHandler.cpp b/source/client/network/ServerSideNetworkHandler.cpp index 5906dc5..c377223 100644 --- a/source/client/network/ServerSideNetworkHandler.cpp +++ b/source/client/network/ServerSideNetworkHandler.cpp @@ -113,6 +113,11 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& guid, LoginPacke m_pRakNetPeer->Send(&appbs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, guid, true); } +void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID&, MessagePacket* packet) +{ + // TODO +} + void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& guid, MovePlayerPacket* packet) { //not in the original diff --git a/source/client/network/ServerSideNetworkHandler.hpp b/source/client/network/ServerSideNetworkHandler.hpp index b9320e5..020e6bf 100644 --- a/source/client/network/ServerSideNetworkHandler.hpp +++ b/source/client/network/ServerSideNetworkHandler.hpp @@ -26,6 +26,7 @@ public: void onNewClient(const RakNet::RakNetGUID&) override; void onDisconnect(const RakNet::RakNetGUID&) override; void handle(const RakNet::RakNetGUID&, LoginPacket*) override; + void handle(const RakNet::RakNetGUID&, MessagePacket*) override; void handle(const RakNet::RakNetGUID&, MovePlayerPacket*) override; void handle(const RakNet::RakNetGUID&, PlaceBlockPacket*) override; void handle(const RakNet::RakNetGUID&, RemoveBlockPacket*) override;