/** * Initializes all the elements in the productions start screen. * @param game Pointer to the core game. * @param base Pointer to the base to get info from. * @param item The RuleManufacture to produce. */ ManufactureStartState::ManufactureStartState(Base * base, RuleManufacture * item) : _base(base), _item(item) { _screen = false; _window = new Window(this, 320, 160, 0, 20); _btnCancel = new TextButton(136, 16, 16, 155); _txtTitle = new Text(320, 17, 0, 30); _txtManHour = new Text(290, 9, 16, 50); _txtCost = new Text(290, 9, 16, 60); _txtWorkSpace = new Text(290, 9, 16, 70); _txtRequiredItemsTitle = new Text(290, 9, 16, 84); _txtItemNameColumn = new Text(60, 16, 30, 92); _txtUnitRequiredColumn = new Text(60, 16, 155, 92); _txtUnitAvailableColumn = new Text(60, 16, 230, 92); _lstRequiredItems = new TextList(270, 40, 30, 108); _btnStart = new TextButton(136, 16, 168, 155); // Set palette setInterface("allocateManufacture"); add(_window, "window", "allocateManufacture"); add(_txtTitle, "text", "allocateManufacture"); add(_txtManHour, "text", "allocateManufacture"); add(_txtCost, "text", "allocateManufacture"); add(_txtWorkSpace, "text", "allocateManufacture"); add(_btnCancel, "button", "allocateManufacture"); add(_txtRequiredItemsTitle, "text", "allocateManufacture"); add(_txtItemNameColumn, "text", "allocateManufacture"); add(_txtUnitRequiredColumn, "text", "allocateManufacture"); add(_txtUnitAvailableColumn, "text", "allocateManufacture"); add(_lstRequiredItems, "list", "allocateManufacture"); add(_btnStart, "button", "allocateManufacture"); centerAllSurfaces(); _window->setBackground(_game->getResourcePack()->getSurface("BACK17.SCR")); _txtTitle->setText(tr(_item->getName())); _txtTitle->setBig(); _txtTitle->setAlign(ALIGN_CENTER); _txtManHour->setText(tr("STR_ENGINEER_HOURS_TO_PRODUCE_ONE_UNIT").arg(_item->getManufactureTime())); _txtCost->setText(tr("STR_COST_PER_UNIT_").arg(Text::formatFunding(_item->getManufactureCost()))); _txtWorkSpace->setText(tr("STR_WORK_SPACE_REQUIRED").arg(_item->getRequiredSpace())); _btnCancel->setText(tr("STR_CANCEL_UC")); _btnCancel->onMouseClick((ActionHandler)&ManufactureStartState::btnCancelClick); _btnCancel->onKeyboardPress((ActionHandler)&ManufactureStartState::btnCancelClick, Options::keyCancel); const std::map<std::string, int> & requiredItems (_item->getRequiredItems()); int availableWorkSpace = _base->getFreeWorkshops(); bool productionPossible = _game->getSavedGame()->getFunds() > _item->getManufactureCost(); productionPossible &= (availableWorkSpace > 0); _txtRequiredItemsTitle->setText(tr("STR_SPECIAL_MATERIALS_REQUIRED")); _txtRequiredItemsTitle->setAlign(ALIGN_CENTER); _txtItemNameColumn->setText(tr("STR_ITEM_REQUIRED")); _txtItemNameColumn->setWordWrap(true); _txtUnitRequiredColumn->setText(tr("STR_UNITS_REQUIRED")); _txtUnitRequiredColumn->setWordWrap(true); _txtUnitAvailableColumn->setText(tr("STR_UNITS_AVAILABLE")); _txtUnitAvailableColumn->setWordWrap(true); _lstRequiredItems->setColumns(3, 140, 75, 55); _lstRequiredItems->setBackground(_window); ItemContainer * itemContainer (base->getItems()); int row = 0; for (std::map<std::string, int>::const_iterator iter = requiredItems.begin(); iter != requiredItems.end(); ++iter) { std::wostringstream s1, s2; s1 << L'\x01' << iter->second; s2 << L'\x01' << itemContainer->getItem(iter->first); productionPossible &= (itemContainer->getItem(iter->first) >= iter->second); _lstRequiredItems->addRow(3, tr(iter->first).c_str(), s1.str().c_str(), s2.str().c_str()); row++; } _txtRequiredItemsTitle->setVisible(!requiredItems.empty()); _txtItemNameColumn->setVisible(!requiredItems.empty()); _txtUnitRequiredColumn->setVisible(!requiredItems.empty()); _txtUnitAvailableColumn->setVisible(!requiredItems.empty()); _lstRequiredItems->setVisible(!requiredItems.empty()); _btnStart->setText(tr("STR_START_PRODUCTION")); _btnStart->onMouseClick((ActionHandler)&ManufactureStartState::btnStartClick); _btnStart->onKeyboardPress((ActionHandler)&ManufactureStartState::btnStartClick, Options::keyOk); _btnStart->setVisible(productionPossible); }
/** * Initializes all the elements in the productions start screen. * @param game Pointer to the core game. * @param base Pointer to the base to get info from. * @param item The RuleManufacture to produce. */ ManufactureStartState::ManufactureStartState(Game * game, Base * base, RuleManufacture * item) : State(game), _base(base), _item(item) { _screen = false; int width = 320; int height = 170; int max_width = 320; int max_height = 200; int start_x = (max_width - width) / 2; int start_y = (max_height - height) / 2; int button_x_border = 10; int button_y_border = 10; int button_height = 16; int button_width = (width - 5 * button_x_border) / 2; _window = new Window(this, width, height, start_x, start_y); _btnCancel = new TextButton (button_width, button_height, start_x + button_x_border, start_y + height - button_height - button_y_border); _txtTitle = new Text (width - 4 * button_x_border, button_height * 2, start_x + button_x_border, start_y + button_y_border); _txtManHour = new Text (width - 4 * button_x_border, button_height, start_x + button_x_border * 2, start_y + button_y_border * 3); _txtCost = new Text (width - 4 * button_x_border, button_height, start_x + button_x_border * 2, start_y + button_y_border * 4); _txtWorkSpace = new Text (width - 4 * button_x_border, button_height, start_x + button_x_border * 2, start_y + button_y_border * 5); _txtRequiredItemsTitle = new Text (width - 4 * button_x_border, button_height, start_x + button_x_border * 2, start_y + button_y_border * 6); _txtItemNameColumn = new Text (6 * button_x_border, button_height, start_x + button_x_border * 3, start_y + button_y_border * 7); _txtUnitRequiredColumn = new Text (6 * button_x_border, button_height, start_x + button_x_border * 14, start_y + button_y_border * 7); _txtUnitAvailableColumn = new Text (6 * button_x_border, button_height, start_x + button_x_border * 22, start_y + button_y_border * 7); _lstRequiredItems = new TextList(width - 8 * button_x_border, height - (start_y + button_y_border * 11), start_x + button_x_border * 3, start_y + button_y_border * 9); _btnStart = new TextButton (button_width, button_height, width - button_width - button_x_border, start_y + height - button_height - button_y_border); _game->setPalette(_game->getResourcePack()->getPalette("BACKPALS.DAT")->getColors(Palette::blockOffset(6)), Palette::backPos, 16); add(_window); add(_txtTitle); add(_txtManHour); add(_txtCost); add(_txtWorkSpace); add(_btnCancel); add(_txtRequiredItemsTitle); add(_txtItemNameColumn); add(_txtUnitRequiredColumn); add(_txtUnitAvailableColumn); add(_lstRequiredItems); add(_btnStart); centerAllSurfaces(); _window->setColor(Palette::blockOffset(13)+10); _window->setBackground(_game->getResourcePack()->getSurface("BACK17.SCR")); _txtTitle->setColor(Palette::blockOffset(13)+10); _txtTitle->setText(tr(_item->getName())); _txtTitle->setBig(); _txtTitle->setAlign(ALIGN_CENTER); _txtManHour->setColor(Palette::blockOffset(13)+10); _txtManHour->setText(tr("STR_ENGINEER_HOURS_TO_PRODUCE_ONE_UNIT").arg(_item->getManufactureTime())); _txtCost->setColor(Palette::blockOffset(13)+10); _txtCost->setSecondaryColor(Palette::blockOffset(13)); _txtCost->setText(tr("STR_COST_PER_UNIT_").arg(Text::formatFunding(_item->getManufactureCost()))); _txtWorkSpace->setColor(Palette::blockOffset(13)+10); _txtWorkSpace->setSecondaryColor(Palette::blockOffset(13)); _txtWorkSpace->setText(tr("STR_WORK_SPACE_REQUIRED").arg(_item->getRequiredSpace())); _btnCancel->setColor(Palette::blockOffset(13)+10); _btnCancel->setText(tr("STR_CANCEL_UC")); _btnCancel->onMouseClick((ActionHandler)&ManufactureStartState::btnCancelClick); _btnCancel->onKeyboardPress((ActionHandler)&ManufactureStartState::btnCancelClick, Options::keyCancel); const std::map<std::string, int> & requiredItems (_item->getRequiredItems()); int availableWorkSpace = _base->getFreeWorkshops(); bool productionPossible (game->getSavedGame()->getFunds() > _item->getManufactureCost ()); productionPossible &= (availableWorkSpace > 0); _txtRequiredItemsTitle->setColor(Palette::blockOffset(13)+10); _txtRequiredItemsTitle->setText(tr("STR_SPECIAL_MATERIALS_REQUIRED")); _txtRequiredItemsTitle->setAlign(ALIGN_CENTER); _txtItemNameColumn->setColor(Palette::blockOffset(13)+10); _txtItemNameColumn->setText(tr("STR_ITEM_REQUIRED")); _txtItemNameColumn->setWordWrap(true); _txtUnitRequiredColumn->setColor(Palette::blockOffset(13)+10); _txtUnitRequiredColumn->setText(tr("STR_UNITS_REQUIRED")); _txtUnitRequiredColumn->setWordWrap(true); _txtUnitAvailableColumn->setColor(Palette::blockOffset(13)+10); _txtUnitAvailableColumn->setText(tr("STR_UNITS_AVAILABLE")); _txtUnitAvailableColumn->setWordWrap(true); _lstRequiredItems->setColumns(3, 12 * button_x_border, 8 * button_x_border, 8 * button_x_border); _lstRequiredItems->setBackground(_window); _lstRequiredItems->setColor(Palette::blockOffset(13)); ItemContainer * itemContainer (base->getItems()); int row = 0; for(std::map<std::string, int>::const_iterator iter = requiredItems.begin (); iter != requiredItems.end (); ++iter) { std::wostringstream s1, s2; s1 << iter->second; s2 << itemContainer->getItem(iter->first); productionPossible &= (itemContainer->getItem(iter->first) >= iter->second); _lstRequiredItems->addRow(3, tr(iter->first).c_str(), s1.str().c_str(), s2.str().c_str()); _lstRequiredItems->setCellColor(row, 0, Palette::blockOffset(13)+10); _lstRequiredItems->addRow(1, L""); row += 2; } _txtRequiredItemsTitle->setVisible(!requiredItems.empty()); _txtItemNameColumn->setVisible(!requiredItems.empty()); _txtUnitRequiredColumn->setVisible(!requiredItems.empty()); _txtUnitAvailableColumn->setVisible(!requiredItems.empty()); _lstRequiredItems->setVisible(!requiredItems.empty()); _btnStart->setColor(Palette::blockOffset(13)+10); _btnStart->setText(tr("STR_START_PRODUCTION")); _btnStart->onMouseClick((ActionHandler)&ManufactureStartState::btnStartClick); _btnStart->onKeyboardPress((ActionHandler)&ManufactureStartState::btnStartClick, Options::keyOk); _btnStart->setVisible(productionPossible); }