the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 183 lines 5.1 kB view raw
1#include "stdafx.h" 2#include "CreateWorldScreen.h" 3#include "EditBox.h" 4#include "Button.h" 5#include "SurvivalMode.h" 6#include "..\Minecraft.World\net.minecraft.locale.h" 7#include "..\Minecraft.World\StringHelpers.h" 8#include "..\Minecraft.World\net.minecraft.world.level.h" 9#include "..\Minecraft.World\net.minecraft.world.level.storage.h" 10#include "..\Minecraft.World\SharedConstants.h" 11#include "..\Minecraft.World\Random.h" 12 13CreateWorldScreen::CreateWorldScreen(Screen *lastScreen) 14{ 15 done = false; // 4J added 16 this->lastScreen = lastScreen; 17} 18 19void CreateWorldScreen::tick() 20{ 21 nameEdit->tick(); 22 seedEdit->tick(); 23 24 // 4J - debug code - to be removed 25 static int count = 0; 26 if(count++ == 100 ) buttonClicked(buttons[0]); 27} 28 29void CreateWorldScreen::init() 30{ 31 Language *language = Language::getInstance(); 32 33 Keyboard::enableRepeatEvents(true); 34 buttons.clear(); 35 buttons.push_back(new Button(0, width / 2 - 100, height / 4 + 24 * 4 + 12, language->getElement(L"selectWorld.create"))); 36 buttons.push_back(new Button(1, width / 2 - 100, height / 4 + 24 * 5 + 12, language->getElement(L"gui.cancel"))); 37 38 nameEdit = new EditBox(this, font, width / 2 - 100, 60, 200, 20, language->getElement(L"testWorld")); // 4J - test - should be L"selectWorld.newWorld" 39 nameEdit->inFocus = true; 40 nameEdit->setMaxLength(32); 41 42 seedEdit = new EditBox(this, font, width / 2 - 100, 116, 200, 20, L""); 43 44 updateResultFolder(); 45} 46 47void CreateWorldScreen::updateResultFolder() 48{ 49 resultFolder = trimString(nameEdit->getValue()); 50 51 for( int i = 0; i < SharedConstants::ILLEGAL_FILE_CHARACTERS_LENGTH; i++ ) 52 { 53 size_t pos; 54 while( (pos = resultFolder.find(SharedConstants::ILLEGAL_FILE_CHARACTERS[i])) != wstring::npos) 55 { 56 resultFolder[pos] = L'_'; 57 } 58 } 59 60 if (resultFolder.length()==0) 61 { 62 resultFolder = L"World"; 63 } 64 resultFolder = CreateWorldScreen::findAvailableFolderName(minecraft->getLevelSource(), resultFolder); 65 66} 67 68wstring CreateWorldScreen::findAvailableFolderName(LevelStorageSource *levelSource, const wstring& folder) 69{ 70 wstring folder2 = folder; // 4J - copy input as it is const 71 72#if 0 73 while (levelSource->getDataTagFor(folder2) != NULL) 74 { 75 folder2 = folder2 + L"-"; 76 } 77#endif 78 return folder2; 79} 80 81void CreateWorldScreen::removed() 82{ 83 Keyboard::enableRepeatEvents(false); 84} 85 86void CreateWorldScreen::buttonClicked(Button *button) 87{ 88 if (!button->active) return; 89 if (button->id == 1) 90 { 91 minecraft->setScreen(lastScreen); 92 } 93 else if (button->id == 0) 94 { 95 // note: code copied from SelectWorldScreen 96 minecraft->setScreen(NULL); 97 if (done) return; 98 done = true; 99 100 __int64 seedValue = (new Random())->nextLong(); 101 wstring seedString = seedEdit->getValue(); 102 103 if (seedString.length() != 0) 104 { 105 // try to convert it to a long first 106// try { // 4J - removed try/catch 107 __int64 value = _fromString<__int64>(seedString); 108 if (value != 0) 109 { 110 seedValue = value; 111 } 112 // } catch (NumberFormatException e) { 113 // // not a number, fetch hash value 114 // seedValue = seedString.hashCode(); 115 // } 116 } 117 118// 4J Stu - This screen is not used, so removing this to stop the build failing 119#if 0 120 minecraft->gameMode = new SurvivalMode(minecraft); 121 minecraft->selectLevel(resultFolder, nameEdit->getValue(), seedValue); 122 minecraft->setScreen(NULL); 123#endif 124 } 125 126} 127 128void CreateWorldScreen::keyPressed(wchar_t ch, int eventKey) 129{ 130 if (nameEdit->inFocus) nameEdit->keyPressed(ch, eventKey); 131 else seedEdit->keyPressed(ch, eventKey); 132 133 if (ch == 13) 134 { 135 buttonClicked(buttons[0]); 136 } 137 buttons[0]->active = nameEdit->getValue().length() > 0; 138 139 updateResultFolder(); 140} 141 142void CreateWorldScreen::mouseClicked(int x, int y, int buttonNum) 143{ 144 Screen::mouseClicked(x, y, buttonNum); 145 146 nameEdit->mouseClicked(x, y, buttonNum); 147 seedEdit->mouseClicked(x, y, buttonNum); 148} 149 150void CreateWorldScreen::render(int xm, int ym, float a) 151{ 152 Language *language = Language::getInstance(); 153 154 // fill(0, 0, width, height, 0x40000000); 155 renderBackground(); 156 157 drawCenteredString(font, language->getElement(L"selectWorld.create"), width / 2, height / 4 - 60 + 20, 0xffffff); 158 drawString(font, language->getElement(L"selectWorld.enterName"), width / 2 - 100, 47, 0xa0a0a0); 159 drawString(font, language->getElement(L"selectWorld.resultFolder") + L" " + resultFolder, width / 2 - 100, 85, 0xa0a0a0); 160 161 drawString(font, language->getElement(L"selectWorld.enterSeed"), width / 2 - 100, 104, 0xa0a0a0); 162 drawString(font, language->getElement(L"selectWorld.seedInfo"), width / 2 - 100, 140, 0xa0a0a0); 163 164 nameEdit->render(); 165 seedEdit->render(); 166 167 Screen::render(xm, ym, a); 168 169} 170 171void CreateWorldScreen::tabPressed() 172{ 173 if (nameEdit->inFocus) 174 { 175 nameEdit->focus(false); 176 seedEdit->focus(true); 177 } 178 else 179 { 180 nameEdit->focus(true); 181 seedEdit->focus(false); 182 } 183}