コード例 #1
0
ファイル: GameGUIBuilder.cpp プロジェクト: realej/mk-tp-7542
GameGUI* GameGUIBuilder::createDefault() {

    FILE_LOG(logDEBUG) << "Entire configuration set by default";
    GameGUI *gameGUI = GameGUI::getInstance();

    //window by default
    int windowXpos = ((MAX_WINDOW_WIDTH_PX-DEFAULT_WINDOW_WIDTH_PX)/2);
    int windowYpos = ((MAX_WINDOW_HEIGHT_PX-DEFAULT_WINDOW_HEIGHT_PX)/2);
    Window* ptrWindow = new Window(GAME_TITLE, windowXpos, windowYpos, DEFAULT_WINDOW_WIDTH_PX, DEFAULT_WINDOW_HEIGHT_PX, DEFAULT_WINDOW_WIDTH);
    FILE_LOG(logDEBUG) << "JSON - Window width: " << DEFAULT_WINDOW_WIDTH_PX << " px";
    FILE_LOG(logDEBUG) << "JSON - Window height: " << DEFAULT_WINDOW_HEIGHT_PX << " px";
    FILE_LOG(logDEBUG) << "JSON - Window width: " << DEFAULT_WINDOW_WIDTH;

    gameGUI->setWindow(ptrWindow);

    //stage by default
    Stage* ptrStage = new Stage(DEFAULT_STAGE_WIDTH, DEFAULT_STAGE_HEIGHT, DEFAULT_STAGE_YFLOOR);
    FILE_LOG(logDEBUG) << "JSON - Stage width: " << DEFAULT_STAGE_WIDTH;
    FILE_LOG(logDEBUG) << "JSON - Stage height: " << DEFAULT_STAGE_HEIGHT;
    FILE_LOG(logDEBUG) << "JSON - Stage ypiso: " << DEFAULT_STAGE_YFLOOR;

    gameGUI->setStage(ptrStage);

    float ratioX = getRatio(DEFAULT_WINDOW_WIDTH_PX, DEFAULT_WINDOW_WIDTH,"X");
    float ratioY = getRatio(DEFAULT_WINDOW_HEIGHT_PX, DEFAULT_STAGE_HEIGHT,"Y");

    TextureManager::Instance()->ratioHeight = ratioY;
    TextureManager::Instance()->ratioWidth = ratioX;

    //characters by default
    vector<Character*> characters;

    //TODO put in constant
    float character_width = DEFAULT_CHARACTER_WIDTH;
    float character_height = DEFAULT_CHARACTER_HEIGHT;
    int character_zindex = DEFAULT_CHARACTER_ZINDEX;
    string character_name = "default";
    float characterPosX = 0;
    float stage_win_ypiso = DEFAULT_STAGE_YFLOOR;
    float characterPosY = (stage_win_ypiso - character_height) * ratioY;
    double character_alt_color_h_inicial = 180;
    double character_alt_color_h_final = 300;
    double character_alt_color_shift = 60;
    LoaderParams* characterParams = new LoaderParams(characterPosX, characterPosY, character_width, character_height, character_zindex, ratioX, ratioY, character_name);
    AlternativeColor* altColor = new AlternativeColor(character_alt_color_h_inicial, character_alt_color_h_final, character_alt_color_shift);

    Character* fighterOne = new Character(characterParams);
    fighterOne->setPlayerNumber("1");
    fighterOne->setAlternativeColor(altColor);
    fighterOne->setPositionX(GameGUI::getInstance()->getWindow()->widthPx / 4 - fighterOne->getWidth() * fighterOne->getRatioX()/2);
    fighterOne->setIsRightOriented(true);
    Character* fighterTwo = fighterOne->getCopyInstance();
    fighterTwo->setPlayerNumber("2");
    fighterTwo->setPositionX((GameGUI::getInstance()->getWindow()->widthPx / 4)*3 -  fighterTwo->getWidth() * fighterTwo->getRatioX()/2);
    fighterTwo->setIsAlternativePlayer(true);
    fighterTwo->setIsRightOriented(false);
    Fight* fight = new Fight();
    fight->setFighterOne(fighterOne);
    fight->setFighterTwo(fighterTwo);

    characters.push_back(fight->getFighterOne());
    characters.push_back(fight->getFighterTwo());

    MKGame::Instance()->getObjectList().push_back(fight->getFighterOne());
    MKGame::Instance()->getObjectList().push_back(fight->getFighterTwo());
    gameGUI->setCharacters(characters);
    delete fight;

    //Add layers to the game loop
    gameGUI->setLayers(buildLayersByDefault(ratioX, ratioY, ptrWindow, ptrStage));

    //createGameInfo(ptrWindow, characters, ratioX, ratioY);

    //createThrowableObject(characters, ptrWindow, ratioX, ratioY);

    InputControl::Instance()->loadDefaultButtons(0);
    InputControl::Instance()->loadDefaultButtons(1);

    FILE_LOG(logDEBUG) << "Configuration process finished";
    return gameGUI;

}
コード例 #2
0
ファイル: GameGUIBuilder.cpp プロジェクト: realej/mk-tp-7542
GameGUI* GameGUIBuilder::create() {
    FILE_LOG(logDEBUG) << "CONFIGURATION INITIALIZED";
    GameGUI *gameGUI = GameGUI::getInstance();

    Json::Value root;
    Json::Reader reader;

    ifstream gameConfig(this->configFilePath.c_str(), std::ifstream::binary);

    if (!gameConfig.good()) {
        MessageError fileNotFound(ERROR_FILE_NOT_FOUND, FILE_CONFIG_NOT_FOUND, LOG_LEVEL_ERROR);
        Log<Output2FILE>::logMsgError(fileNotFound);
        return createDefault();
    }
    bool parsingSuccessful = reader.parse(gameConfig, root, false);

    if (!parsingSuccessful) {
        MessageError parseException(ERROR_PARSER_JSON, reader.getFormattedErrorMessages(), LOG_LEVEL_ERROR);
        Log<Output2FILE>::logMsgError(parseException);
        return createDefault();
    }

    try {
        const Json::Value value1 = root.get(JSON_KEY_PERSONAJES, 0);
        const Json::Value value2 = root.get(JSON_KEY_CAPAS,0);
        Json::Value value3 = root[JSON_KEY_ESCENARIO];
        Json::Value value14 = root[JSON_KEY_VENTANA];
        Json::Value value5 = root[JSON_KEY_PELEA];
        Json::Value value6 = root[JSON_KEY_JOYSTICKS];
        Json::Value value7 = root[JSON_KEY_SECUENCES];
    } catch(std::exception const & e) {
        FILE_LOG(logDEBUG) << "Corrupt JSON File. Exception: "<<e.what();
        return createDefault(); //TODO: Validate create default
    }
    Window* window = jsonGetWindow(root);
    Stage* stage = jsonGetStage(root,window->width);

    gameGUI->setWindow(window);
    gameGUI->setStage(stage);

    float ratioX = getRatio(window->widthPx, window->width,"X");
    float ratioY = getRatio(window->heightPx, stage->getHeight(),"Y");

    TextureManager::Instance()->ratioHeight = ratioY;
    TextureManager::Instance()->ratioWidth = ratioX;

    vector<Layer*> layers = jsonGetLayers(root, ratioX, ratioY, window, stage);
    if (layers.size()==0) {
        layers = buildLayersByDefault(ratioX, ratioY,window,stage);
    }

    vector<Character*> characters = jsonGetCharacters(root, ratioX, ratioY, stage);
    gameGUI->setCharacters(characters);

    //The fight is now being triggered by the MENU
    /*Fight* fight = jsonGetFight(root);
    gameGUI->setFight(fight);
    if (fight->getFighterOne()->getName() == fight->getFighterTwo()->getName()) {
    	fight->getFighterTwo()->setIsAlternativePlayer(true);
    }
    fight->getFighterOne()->setIsRightOriented(true);
    MKGame::Instance()->getObjectList().push_back(fight->getFighterOne());
    MKGame::Instance()->getObjectList().push_back(fight->getFighterTwo());*/

    gameGUI->setLayers(layers);

    //The fight is now being triggered by the MENU
    //vector<Character*> fightingCharacters;
    //fightingCharacters.push_back(fight->getFighterOne());
    //fightingCharacters.push_back(fight->getFighterTwo());
    /*gameGUI->setCharacters(fightingCharacters);
    createGameInfo(window, fightingCharacters, ratioX, ratioY);
    createThrowableObject(fightingCharacters, window, ratioX, ratioY);*/


    jsonGetJoysticks(root);

    jsonGetSecuences(root);

    vector<VisualEffect*> visualEffects = createVisualEffects(ratioX, ratioY, window, stage);

    gameGUI->setVisualEffects(visualEffects);

    FILE_LOG(logDEBUG) << "CONFIGURATION FINISHED";

    return gameGUI;
}