コード例 #1
0
void LevelDatabaseUploadThread::finish()
{
   EditorUserInterface* editor = mGame->getUIManager()->getUI<EditorUserInterface>();
   if(!editor)
      return;

   if(errorNumber == 0)
   {
      // The server responds with the DBID of the level we just uploaded
      mGame->setLevelDatabaseId(atoi(responseBody.c_str()));
      editor->saveLevel(false, false);    // Write databaseId to the level file

      done(editor, "Uploaded successfully", true);
   }
   else if(errorNumber == 1)
   {
      done(editor, "Error connecting to server", false);
   }
   else if(errorNumber == 2)
   {
      editor->showUploadErrorMessage(responseCode, responseBody);

      stringstream message;
      message << "Error " << responseCode << ": " << endl << responseBody << endl;
      logprintf(LogConsumer::LogError, "%s",  message.str().c_str());
      done(editor, "Error uploading... see Console or Log", false);
   }
   else
   {
      done(editor, "Unknown error", false);
   }
}
コード例 #2
0
// Runs as we're exiting the menu
void GameParamUserInterface::onEscape()
{
   EditorUserInterface *ui = getUIManager()->getUI<EditorUserInterface>();

   string newFilename = getMenuItem(1)->getValue();

   bool filenameChanged = mLevelFilename != newFilename;
   if(filenameChanged)
      ui->setLevelFileName(newFilename);

   GameType *gameType = getUIManager()->getUI<EditorUserInterface>()->getLevel()->getGameType();

   const Vector<string> *keys = gameType->getGameParameterMenuKeys();

   for(S32 i = 0; i < keys->size(); i++)
   {
      MenuItemMap::iterator iter = mMenuItemMap.find(keys->get(i));

      MenuItem *menuItem = iter->second.get();
      gameType->saveMenuItem(menuItem, keys->get(i));
   }

   if(anythingChanged() || filenameChanged)
   {
      EditorUserInterface *ui = getUIManager()->getUI<EditorUserInterface>();
      // TODO -->Save undo state here!!!
      ui->validateLevel();
   }

   // Now back to our previously scheduled program...  (which will be the editor, of course)
   getUIManager()->reactivatePrevUI();
}
コード例 #3
0
LevelDatabaseUploadThread::LevelDatabaseUploadThread(ClientGame* game)
{
   mGame = game;
   errorNumber = 0;
   EditorUserInterface* editor = mGame->getUIManager()->getUI<EditorUserInterface>();
   editor->lockQuit("CAN'T QUIT WHILE UPLOADING");

   if(mGame->getLevelDatabaseId())
      editor->queueSetLingeringMessage("Updating Level in Pleiades [[SPINNER]]");
   else
      editor->queueSetLingeringMessage("Uploading New Level to Pleiades [[SPINNER]]");

   string fileData;
   readFile(joindir(mGame->getSettings()->getFolderManager()->getScreenshotDir(), UploadScreenshotFilename + string(".png")), fileData);

   username = mGame->getPlayerName();
   user_password = mGame->getPlayerPassword();
   content = editor->getLevelText();
   screenshot = UploadScreenshotFilename + string(".png");
   screenshot2 = fileData;


   string levelgenFilename;
   levelgenFilename = mGame->getScriptName();

   if(levelgenFilename != "")
      readFile(mGame->getSettings()->getFolderManager()->findLevelGenScript(levelgenFilename), levelgen);

   uploadrequest = HttpRequest::LevelDatabaseBaseUrl + UploadRequest;
}
コード例 #4
0
   // This one is a little more involved, as we will be simulating an entire editor session, including level testing
   TEST(ObjectCleanupTests, TestEditorObjectManagement)
   {
      GameSettingsPtr settings = GameSettingsPtr(new GameSettings());
      settings->setSetting(IniKey::Nickname, string("Alfonso"));     // Set this to bypass startup screen
      settings->getFolderManager()->setLevelDir("levels");           // Need something for hosting to work
      settings->updatePlayerName("Alfonso");

      Address addr;
      ClientGame *clientGame = new ClientGame(addr, settings, new UIManager());    // ClientGame destructor will clean up UIManager


      GameManager::addClientGame(clientGame);
      UIManager *uiMgr = clientGame->getUIManager();

      uiMgr->activate<MainMenuUserInterface>();
      ASSERT_TRUE(uiMgr->isCurrentUI<MainMenuUserInterface>());
      // Cheat a little; go directly to editor
      uiMgr->getUI<EditorUserInterface>()->setLevelFileName("xyzzy");      // Reset this so we get the level entry screen
      uiMgr->activate<EditorUserInterface>();

      ASSERT_TRUE(uiMgr->isCurrentUI<EditorUserInterface>());
      EditorUserInterface *editor = uiMgr->getUI<EditorUserInterface>();
      ///// Test basic object deletion, undo system not activated
      SafePtr<TestItem> testItem = new TestItem();    // To track deletion... see "Basics" test above
      ASSERT_FALSE(testItem.isNull()) << "Just created this!";
      editor->addToEditor(testItem.getPointer());
      editor->deleteItem(0, false);                   // Low level method doesn't save undo state; object should be deleted
      ASSERT_TRUE(testItem.isNull()) << "Obj should be gone!";

      ///// Check deleting object with undo system -- do things get deleted as expected?
      testItem = new TestItem();
      ASSERT_FALSE(testItem.isNull()) << "Just created this -- shouldn't be gone yet!";
      editor->addToEditor(testItem.getPointer());
      testItem->setSelected(true);
      ASSERT_EQ(1, editor->getLevel()->findObjects_fast()->size()) << "Started with one object";
      editor->handleKeyPress(KEY_Z, "Del");     // Triggers deleteSelection(false)
      ASSERT_TRUE(testItem.isNull()) << "Obj should be gone!";
      ASSERT_EQ(0, editor->getLevel()->findObjects_fast()->size()) << "All objects deleted... none should be present";
      editor->handleKeyPress(KEY_Z, editor->getEditorBindingString(BINDING_UNDO_ACTION));  // Undo
      ASSERT_EQ(1, editor->getLevel()->findObjects_fast()->size()) << "Undeleted one object";
      ASSERT_FALSE(testItem.isValid());
      testItem = dynamic_cast<TestItem *>(editor->getLevel()->findObjects_fast()->get(0));
      ASSERT_TRUE(testItem.isValid());
      editor->handleKeyPress(KEY_Z, editor->getEditorBindingString(BINDING_REDO_ACTION));
      ASSERT_EQ(0, editor->getLevel()->findObjects_fast()->size()) << "Redid delete... none should be present";
      ASSERT_FALSE(testItem.isValid());

      ///// Test level
      Level *level = editor->getLevel();     // Keep track of the level we were editing
      editor->testLevelStart();
      ASSERT_TRUE(uiMgr->isCurrentUI<EditorUserInterface>()) << "Still in editor";
      ASSERT_TRUE(editor->getLevel()->getGameType()) << "Have valid GameType";
      GameType *gt = editor->getLevel()->getGameType();

      GameManager::getServerGame()->loadNextLevelInfo();
      ASSERT_EQ(GameManager::DoneLoadingLevels, GameManager::getHostingModePhase()) << "Only loading one level here...";
      ASSERT_TRUE(GameManager::hostGame()) << "Failure to host game!";
      ASSERT_TRUE(uiMgr->isCurrentUI<GameUserInterface>()) << "In game UI";
      GameManager::localClientQuits(GameManager::getClientGames()->get(0));
      ASSERT_TRUE(uiMgr->isCurrentUI<EditorUserInterface>()) << "Back to the editor";
      ASSERT_EQ(editor, uiMgr->getCurrentUI()) << "Expect same object";
      ASSERT_EQ(level, editor->getLevel()) << "Level should not have changed";
      ASSERT_TRUE(editor->getLevel()->getGameType()) << "Expect valid GameType";
      ASSERT_EQ(gt, editor->getLevel()->getGameType()) << "GameType should not have changed";
   }
コード例 #5
0
ファイル: TestEditor.cpp プロジェクト: bitfighter/bitfighter
TEST(EditorTest, findSnapVertexTest)
{
    GamePair pair;
    ClientGame *clientGame = pair.getClient(0);
    ASSERT_TRUE(clientGame)  << "Shouldn't be NULL here...";
    EditorUserInterface *editorUi = clientGame->getUIManager()->getUI<EditorUserInterface>();
    editorUi->setLevel(boost::shared_ptr<Level>(new Level()));

    ASSERT_EQ(0, editorUi->getLevel()->getObjectCount());     // Confirm level starts empty

    // 5 vertex wall in stair-step pattern, with middle vertex on 0,0
    editorUi->getLevel()->parseLevelLine("BarrierMaker 10 -100 -100  0 -100  0 0  100 0  100 100", "NoFile");

    ASSERT_EQ(1, editorUi->getLevel()->getObjectCount());     // Confirm object was added properly

    // Mark first 3 vertices as being selected
    WallItem *wall = static_cast<WallItem *>(editorUi->getLevel()->getObjectByIndex(0));
    wall->aselectVert(0);
    wall->aselectVert(1);
    wall->aselectVert(2);

    ASSERT_TRUE(wall->vertSelected(0));
    ASSERT_TRUE(wall->vertSelected(1));
    ASSERT_TRUE(wall->vertSelected(2));
    ASSERT_FALSE(wall->vertSelected(3));
    ASSERT_FALSE(wall->vertSelected(4));

    editorUi->mMousePos.set(3,3);          // In canvas coords; near vertex 2
    editorUi->findSnapVertex();
    EXPECT_EQ(2, editorUi->mSnapVertexIndex);

    editorUi->mMousePos.set(95,105);       // Near vertex 4, which is not selected --> closest selected is 2
    editorUi->findSnapVertex();
    EXPECT_EQ(2, editorUi->mSnapVertexIndex);

    editorUi->mMousePos.set(-88,-106);     // Near vertex 0, which is selected
    editorUi->findSnapVertex();
    EXPECT_EQ(0, editorUi->mSnapVertexIndex);

    wall->unselectVert(0);
    ASSERT_FALSE(wall->vertSelected(0));
    ASSERT_TRUE(wall->vertSelected(1));
    ASSERT_TRUE(wall->vertSelected(2));
    ASSERT_FALSE(wall->vertSelected(3));
    ASSERT_FALSE(wall->vertSelected(4));

    editorUi->mMousePos.set(-88, -106);    // Near vertex 0, which is not selected   --> closest selected is 1
    editorUi->findSnapVertex();
    EXPECT_EQ(1, editorUi->mSnapVertexIndex);

    editorUi->mMousePos.set(3, 3);         // In canvas coords; near vertex 2
    editorUi->findSnapVertex();
    EXPECT_EQ(2, editorUi->mSnapVertexIndex);

    // Cleanup
    delete newClientGame();
}