本文整理汇总了C++中Craft::getItems方法的典型用法代码示例。如果您正苦于以下问题:C++ Craft::getItems方法的具体用法?C++ Craft::getItems怎么用?C++ Craft::getItems使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Craft
的用法示例。
在下文中一共展示了Craft::getItems方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: lstEquipmentLeftArrowClick
/**
* Moves all the items to the base on right-click.
* @param action Pointer to an action.
*/
void CraftEquipmentState::lstEquipmentLeftArrowClick(Action *action)
{
if (action->getDetails()->button.button == SDL_BUTTON_RIGHT)
{
Craft *c = _base->getCrafts()->at(_craft);
RuleItem *item = _game->getRuleset()->getItem(_items[_sel]);
int cQty = 0;
if (item->isFixed())
{
cQty = c->getVehicleCount(_items[_sel]);
if (cQty > 0)
{
while (cQty > 0)
{
RuleItem *ammo = _game->getRuleset()->getItem(item->getCompatibleAmmo()->front());
for (std::vector<Vehicle*>::iterator i = c->getVehicles()->begin(); i != c->getVehicles()->end(); ++i)
{
if ((*i)->getRules() == item)
{
_base->getItems()->addItem(ammo->getType(), (*i)->getAmmo());
delete (*i);
c->getVehicles()->erase(i);
break;
}
}
_base->getItems()->addItem(_items[_sel]);
cQty = c->getVehicleCount(_items[_sel]);
}
updateQuantity();
}
}
else
{
cQty = c->getItems()->getItem(_items[_sel]);
if (cQty > 0)
{
_base->getItems()->addItem(_items[_sel], cQty);
c->getItems()->removeItem(_items[_sel], cQty);
updateQuantity();
}
}
}
}
示例2: moveRight
/**
* Moves the selected item to the craft.
*/
void CraftEquipmentState::moveRight()
{
Craft *c = _base->getCrafts()->at(_craft);
if (_base->getItems()->getItem(_items[_sel]) > 0)
{
_base->getItems()->removeItem(_items[_sel]);
c->getItems()->addItem(_items[_sel]);
updateQuantity();
}
}
示例3: moveLeft
/**
* Moves the selected item to the base.
*/
void CraftEquipmentState::moveLeft()
{
Craft *c = _base->getCrafts()->at(_craft);
RuleItem *item = _game->getRuleset()->getItem(_items[_sel]);
int cQty = 0;
if (item->isFixed())
{
cQty = c->getVehicleCount(_items[_sel]);
}
else
{
cQty = c->getItems()->getItem(_items[_sel]);
}
if (cQty > 0)
{
RuleItem *item = _game->getRuleset()->getItem(_items[_sel]);
// Convert vehicle to item
if (item->isFixed())
{
RuleItem *ammo = _game->getRuleset()->getItem(item->getCompatibleAmmo()->front());
for (std::vector<Vehicle*>::iterator i = c->getVehicles()->begin(); i != c->getVehicles()->end(); ++i)
{
if ((*i)->getRules() == item)
{
_base->getItems()->addItem(ammo->getType(), (*i)->getAmmo());
delete (*i);
c->getVehicles()->erase(i);
break;
}
}
_base->getItems()->addItem(_items[_sel]);
}
else
{
_base->getItems()->addItem(_items[_sel]);
c->getItems()->removeItem(_items[_sel]);
}
updateQuantity();
}
}
示例4: updateQuantity
/**
* Updates the displayed quantities of the
* selected item on the list.
*/
void CraftEquipmentState::updateQuantity()
{
Craft *c = _base->getCrafts()->at(_craft);
RuleItem *item = _game->getRuleset()->getItem(_items[_sel]);
int cQty = 0;
if (item->isFixed())
{
cQty = c->getVehicleCount(_items[_sel]);
}
else
{
cQty = c->getItems()->getItem(_items[_sel]);
}
std::wstringstream ss, ss2;
if (_game->getSavedGame()->getMonthsPassed() > -1)
{
ss << _base->getItems()->getItem(_items[_sel]);
}
else
{
ss << "-";
}
ss2 << cQty;
Uint8 color;
if (cQty == 0)
{
RuleItem *rule = _game->getRuleset()->getItem(_items[_sel]);
if (rule->getBattleType() == BT_AMMO)
{
color = Palette::blockOffset(15)+6;
}
else
{
color = Palette::blockOffset(13)+10;
}
}
else
{
color = Palette::blockOffset(13);
}
_lstEquipment->setRowColor(_sel, color);
_lstEquipment->setCellText(_sel, 1, ss.str());
_lstEquipment->setCellText(_sel, 2, ss2.str());
std::wstringstream ss3;
ss3 << tr("STR_SPACE_AVAILABLE") << L'\x01' << c->getSpaceAvailable();
_txtAvailable->setText(ss3.str());
std::wstringstream ss4;
ss4 << tr("STR_SPACE_USED") << L'\x01' << c->getSpaceUsed();
_txtUsed->setText(ss4.str());
}
示例5: updateQuantity
/**
* Updates the displayed quantities of the
* selected item on the list.
*/
void CraftEquipmentState::updateQuantity()
{
Craft *c = _base->getCrafts()->at(_craft);
RuleItem *item = _game->getMod()->getItem(_items[_sel]);
int cQty = 0;
if (item->isFixed())
{
cQty = c->getVehicleCount(_items[_sel]);
}
else
{
cQty = c->getItems()->getItem(_items[_sel]);
}
std::wostringstream ss, ss2;
if (_game->getSavedGame()->getMonthsPassed() > -1)
{
ss << _base->getStorageItems()->getItem(_items[_sel]);
}
else
{
ss << "-";
}
ss2 << cQty;
Uint8 color;
if (cQty == 0)
{
RuleItem *rule = _game->getMod()->getItem(_items[_sel]);
if (rule->getBattleType() == BT_AMMO)
{
color = _ammoColor;
}
else
{
color = _lstEquipment->getColor();
}
}
else
{
color = _lstEquipment->getSecondaryColor();
}
_lstEquipment->setRowColor(_sel, color);
_lstEquipment->setCellText(_sel, 1, ss.str());
_lstEquipment->setCellText(_sel, 2, ss2.str());
_txtAvailable->setText(tr("STR_SPACE_AVAILABLE").arg(c->getSpaceAvailable()));
_txtUsed->setText(tr("STR_SPACE_USED").arg(c->getSpaceUsed()));
}
示例6: lstEquipmentRightArrowClick
/**
* Moves all the items (as much as possible) to the craft on right-click.
* @param action Pointer to an action.
*/
void CraftEquipmentState::lstEquipmentRightArrowClick(Action *action)
{
if (action->getDetails()->button.button == SDL_BUTTON_RIGHT)
{
Craft *c = _base->getCrafts()->at(_craft);
RuleItem *item = _game->getRuleset()->getItem(_items[_sel]);
int bqty = _base->getItems()->getItem(_items[_sel]);
if (bqty > 0)
{
// Do we need to convert item to vehicle?
if (item->isFixed())
{
// Check if there's enough room
int room = std::min(c->getRules()->getVehicles() - c->getNumVehicles(), c->getSpaceAvailable() / 4);
if (room > 0)
{
RuleItem *ammo = _game->getRuleset()->getItem(item->getCompatibleAmmo()->front());
int baqty = _base->getItems()->getItem(ammo->getType());
int vehiclesCount = std::min(std::min(bqty, room), baqty);
if (vehiclesCount > 0)
{
int newAmmoPerVehicle = std::min(baqty / vehiclesCount, ammo->getClipSize());;
int remainder = baqty - (vehiclesCount * newAmmoPerVehicle);
if (ammo->getClipSize() == newAmmoPerVehicle) remainder = 0;
int newAmmo;
for (int i=0; i < vehiclesCount; ++i)
{
newAmmo = newAmmoPerVehicle;
if (i<remainder) ++newAmmo;
c->getVehicles()->push_back(new Vehicle(item, newAmmo));
_base->getItems()->removeItem(ammo->getType(), newAmmo);
_base->getItems()->removeItem(_items[_sel]);
}
}
}
}
else
{
_base->getItems()->removeItem(_items[_sel],bqty);
c->getItems()->addItem(_items[_sel],bqty);
}
updateQuantity();
}
}
}
示例7: moveRight
/**
* Moves the selected item to the craft.
*/
void CraftEquipmentState::moveRight()
{
Craft *c = _base->getCrafts()->at(_craft);
RuleItem *item = _game->getRuleset()->getItem(_items[_sel]);
if (_base->getItems()->getItem(_items[_sel]) > 0)
{
// Convert item to vehicle
if (item->isFixed())
{
// Check if there's enough room
if (c->getNumVehicles() < c->getRules()->getVehicles() && c->getSpaceAvailable() >= 4)
{
RuleItem *ammo = _game->getRuleset()->getItem(item->getCompatibleAmmo()->front());
int qty = _base->getItems()->getItem(ammo->getType());
if (qty == 0)
{
std::wstringstream ss;
ss << _game->getLanguage()->getString("STR_NOT_ENOUGH");
ss << _game->getLanguage()->getString(ammo->getType());
ss << _game->getLanguage()->getString("STR_TO_ARM_HWP");
_game->pushState(new ErrorMessageState(_game, ss.str(), Palette::blockOffset(15)+1, "BACK04.SCR", 2));
_timerRight->stop();
}
else
{
int newAmmo = std::min(qty, ammo->getClipSize());
c->getVehicles()->push_back(new Vehicle(item, newAmmo));
_base->getItems()->removeItem(ammo->getType(), newAmmo);
_base->getItems()->removeItem(_items[_sel]);
}
}
}
else
{
_base->getItems()->removeItem(_items[_sel]);
c->getItems()->addItem(_items[_sel]);
}
updateQuantity();
}
}
示例8: State
/**
* Initializes all the elements in the Craft Equipment screen.
* @param game Pointer to the core game.
* @param base Pointer to the base to get info from.
* @param craft ID of the selected craft.
*/
CraftEquipmentState::CraftEquipmentState(Game *game, Base *base, size_t craft) : State(game), _sel(0), _base(base), _craft(craft)
{
bool allowChangeListValuesByMouseWheel=Options::getBool("allowChangeListValuesByMouseWheel");
_changeValueByMouseWheel = Options::getInt("changeValueByMouseWheel");
// Create objects
_window = new Window(this, 320, 200, 0, 0);
_btnOk = new TextButton(288, 16, 16, 176);
_txtTitle = new Text(300, 16, 16, 7);
_txtItem = new Text(144, 9, 16, 32);
_txtStores = new Text(150, 9, 160, 32);
_txtAvailable = new Text(110, 9, 16, 24);
_txtUsed = new Text(110, 9, 130, 24);
_txtCrew = new Text(71, 9, 244, 24);
_lstEquipment = new TextList(288, 128, 8, 40);
// Set palette
_game->setPalette(_game->getResourcePack()->getPalette("BACKPALS.DAT")->getColors(Palette::blockOffset(2)), Palette::backPos, 16);
add(_window);
add(_btnOk);
add(_txtTitle);
add(_txtItem);
add(_txtStores);
add(_txtAvailable);
add(_txtUsed);
add(_txtCrew);
add(_lstEquipment);
// Set up objects
_window->setColor(Palette::blockOffset(15)+1);
_window->setBackground(_game->getResourcePack()->getSurface("BACK04.SCR"));
_btnOk->setColor(Palette::blockOffset(15)+1);
_btnOk->setText(_game->getLanguage()->getString("STR_OK"));
_btnOk->onMouseClick((ActionHandler)&CraftEquipmentState::btnOkClick);
_txtTitle->setColor(Palette::blockOffset(15)+1);
_txtTitle->setBig();
Craft *c = _base->getCrafts()->at(_craft);
_txtTitle->setText(tr("STR_EQUIPMENT_FOR_craftname").arg(c->getName(_game->getLanguage())));
_txtItem->setColor(Palette::blockOffset(15)+1);
_txtItem->setText(_game->getLanguage()->getString("STR_ITEM"));
_txtStores->setColor(Palette::blockOffset(15)+1);
_txtStores->setText(_game->getLanguage()->getString("STR_STORES"));
_txtAvailable->setColor(Palette::blockOffset(15)+1);
_txtAvailable->setSecondaryColor(Palette::blockOffset(13));
std::wstringstream ss;
ss << _game->getLanguage()->getString("STR_SPACE_AVAILABLE") << L'\x01'<< c->getSpaceAvailable();
_txtAvailable->setText(ss.str());
_txtUsed->setColor(Palette::blockOffset(15)+1);
_txtUsed->setSecondaryColor(Palette::blockOffset(13));
std::wstringstream ss2;
ss2 << _game->getLanguage()->getString("STR_SPACE_USED") << L'\x01'<< c->getSpaceUsed();
_txtUsed->setText(ss2.str());
_txtCrew->setColor(Palette::blockOffset(15)+1);
_txtCrew->setSecondaryColor(Palette::blockOffset(13));
std::wstringstream ss3;
ss3 << _game->getLanguage()->getString("STR_SOLDIERS_UC") << ">" << L'\x01'<< c->getNumSoldiers();
_txtCrew->setText(ss3.str());
_lstEquipment->setColor(Palette::blockOffset(13)+10);
_lstEquipment->setArrowColor(Palette::blockOffset(15)+1);
_lstEquipment->setArrowColumn(203, ARROW_HORIZONTAL);
_lstEquipment->setColumns(3, 154, 85, 41);
_lstEquipment->setSelectable(true);
_lstEquipment->setBackground(_window);
_lstEquipment->setMargin(8);
if (allowChangeListValuesByMouseWheel) _lstEquipment->setAllowScrollOnArrowButtons(false);
_lstEquipment->onLeftArrowPress((ActionHandler)&CraftEquipmentState::lstEquipmentLeftArrowPress);
_lstEquipment->onLeftArrowRelease((ActionHandler)&CraftEquipmentState::lstEquipmentLeftArrowRelease);
_lstEquipment->onLeftArrowClick((ActionHandler)&CraftEquipmentState::lstEquipmentLeftArrowClick);
_lstEquipment->onRightArrowPress((ActionHandler)&CraftEquipmentState::lstEquipmentRightArrowPress);
_lstEquipment->onRightArrowRelease((ActionHandler)&CraftEquipmentState::lstEquipmentRightArrowRelease);
_lstEquipment->onRightArrowClick((ActionHandler)&CraftEquipmentState::lstEquipmentRightArrowClick);
if (allowChangeListValuesByMouseWheel) _lstEquipment->onMousePress((ActionHandler)&CraftEquipmentState::lstEquipmentMousePress);
int row = 0;
const std::vector<std::string> &items = _game->getRuleset()->getItemsList();
for (std::vector<std::string>::const_iterator i = items.begin(); i != items.end(); ++i)
{
// CHEAP HACK TO HIDE HWP AMMO
if ((*i).substr(0, 8) == "STR_HWP_")
continue;
RuleItem *rule = _game->getRuleset()->getItem(*i);
int cQty = 0;
if (rule->isFixed())
{
//.........这里部分代码省略.........
示例9: moveRight
/**
* Moves the given number of items (selected) to the craft.
*/
void CraftEquipmentState::moveRight(int change)
{
Craft *c = _base->getCrafts()->at(_craft);
RuleItem *item = _game->getRuleset()->getItem(_items[_sel]);
int bqty = _base->getItems()->getItem(_items[_sel]);
if (0 >= change || 0 >= bqty) return;
change = std::min(bqty, change);
// Do we need to convert item to vehicle?
if (item->isFixed())
{
// Check if there's enough room
int room = std::min(c->getRules()->getVehicles() - c->getNumVehicles(), c->getSpaceAvailable() / 4);
if (room > 0)
{
change = std::min(room, change);
if(item->getClipSize() != -1)
{
// We want to redistribute all the available ammo among the vehicles,
// so first we note the total number of vehicles we want in the craft
int oldVehiclesCount = c->getVehicleCount(_items[_sel]);
int newVehiclesCount = oldVehiclesCount + change;
// ...and we move back all of this vehicle-type to the base.
if (0 < oldVehiclesCount) moveLeft(INT_MAX);
// And now let's see if we can add the total number of vehicles.
RuleItem *ammo = _game->getRuleset()->getItem(item->getCompatibleAmmo()->front());
int baqty = _base->getItems()->getItem(ammo->getType()); // Ammo Quantity for this vehicle-type on the base
int canBeAdded = std::min(newVehiclesCount, baqty);
if (canBeAdded > 0)
{
int newAmmoPerVehicle = std::min(baqty / canBeAdded, ammo->getClipSize());;
int remainder = 0;
if (ammo->getClipSize() > newAmmoPerVehicle) remainder = baqty - (canBeAdded * newAmmoPerVehicle);
int newAmmo;
for (int i=0; i < canBeAdded; ++i)
{
newAmmo = newAmmoPerVehicle;
if (i<remainder) ++newAmmo;
c->getVehicles()->push_back(new Vehicle(item, newAmmo));
_base->getItems()->removeItem(ammo->getType(), newAmmo);
_base->getItems()->removeItem(_items[_sel]);
}
}
if (oldVehiclesCount >= canBeAdded)
{
// So we haven't managed to increase the count of vehicles because of the ammo
_timerRight->stop();
LocalizedText msg(tr("STR_NOT_ENOUGH_ammotype_TO_ARM_HWP").arg(tr(ammo->getType())));
_game->pushState(new ErrorMessageState(_game, msg, Palette::blockOffset(15)+1, "BACK04.SCR", 2));
}
}
else
for (int i=0; i < change; ++i)
{
c->getVehicles()->push_back(new Vehicle(item, 255));
_base->getItems()->removeItem(_items[_sel]);
}
}
}
else
{
_base->getItems()->removeItem(_items[_sel],change);
c->getItems()->addItem(_items[_sel],change);
}
updateQuantity();
}
示例10: btnOkClick
/**
* Sells the selected items.
* @param action Pointer to an action.
*/
void SellState::btnOkClick(Action *action)
{
_game->getSavedGame()->setFunds(_game->getSavedGame()->getFunds() + _total);
for (unsigned int i = 0; i < _qtys.size(); ++i)
{
if (_qtys[i] > 0)
{
// Sell soldiers
if (i < _soldiers.size())
{
for (std::vector<Soldier*>::iterator s = _base->getSoldiers()->begin(); s != _base->getSoldiers()->end(); ++s)
{
if (*s == _soldiers[i])
{
_base->getSoldiers()->erase(s);
break;
}
}
delete _soldiers[i];
}
// Sell crafts
else if (i >= _soldiers.size() && i < _soldiers.size() + _crafts.size())
{
Craft *craft = _crafts[i - _soldiers.size()];
// Remove weapons from craft
for (std::vector<CraftWeapon*>::iterator w = craft->getWeapons()->begin(); w != craft->getWeapons()->end(); ++w)
{
if ((*w) != 0)
{
_base->getItems()->addItem((*w)->getRules()->getLauncherItem());
_base->getItems()->addItem((*w)->getRules()->getClipItem(), (int)floor((double)(*w)->getAmmo() / (*w)->getRules()->getRearmRate()));
}
}
// Remove items from craft
for (std::map<std::string, int>::iterator it = craft->getItems()->getContents()->begin(); it != craft->getItems()->getContents()->end(); ++it)
{
_base->getItems()->addItem(it->first, it->second);
}
// Remove soldiers from craft
for (std::vector<Soldier*>::iterator s = _base->getSoldiers()->begin(); s != _base->getSoldiers()->end(); ++s)
{
if ((*s)->getCraft() == craft)
{
(*s)->setCraft(0);
}
}
// Remove craft
for (std::vector<Craft*>::iterator c = _base->getCrafts()->begin(); c != _base->getCrafts()->end(); ++c)
{
if (*c == craft)
{
_base->getCrafts()->erase(c);
break;
}
}
delete craft;
}
// Sell scientists
else if (_base->getAvailableScientists() > 0 && i == _soldiers.size() + _crafts.size())
{
_base->setScientists(_base->getScientists() - _qtys[i]);
}
// Sell engineers
else if (_base->getAvailableEngineers() > 0 && i == _soldiers.size() + _crafts.size() + _sOffset)
{
_base->setEngineers(_base->getEngineers() - _qtys[i]);
}
// Sell items
else
{
_base->getItems()->removeItem(_items[i - _soldiers.size() - _crafts.size() - _sOffset - _eOffset], _qtys[i]);
}
}
}
_game->popState();
}
示例11: btnOkClick
/**
* Sells the selected items.
* @param action Pointer to an action.
*/
void SellState::btnOkClick(Action *)
{
_game->getSavedGame()->setFunds(_game->getSavedGame()->getFunds() + _total);
for (size_t i = 0; i < _qtys.size(); ++i)
{
if (_qtys[i] > 0)
{
switch (getType(i))
{
case SELL_SOLDIER:
for (std::vector<Soldier*>::iterator s = _base->getSoldiers()->begin(); s != _base->getSoldiers()->end(); ++s)
{
if (*s == _soldiers[i])
{
if ((*s)->getArmor()->getStoreItem() != "STR_NONE")
{
_base->getItems()->addItem((*s)->getArmor()->getStoreItem());
}
_base->getSoldiers()->erase(s);
break;
}
}
delete _soldiers[i];
break;
case SELL_CRAFT:
{
Craft *craft = _crafts[getCraftIndex(i)];
// Remove weapons from craft
for (std::vector<CraftWeapon*>::iterator w = craft->getWeapons()->begin(); w != craft->getWeapons()->end(); ++w)
{
if ((*w) != 0)
{
_base->getItems()->addItem((*w)->getRules()->getLauncherItem());
_base->getItems()->addItem((*w)->getRules()->getClipItem(), (*w)->getClipsLoaded(_game->getRuleset()));
}
}
// Remove items from craft
for (std::map<std::string, int>::iterator it = craft->getItems()->getContents()->begin(); it != craft->getItems()->getContents()->end(); ++it)
{
_base->getItems()->addItem(it->first, it->second);
}
// Remove vehicles from craft
for (std::vector<Vehicle*>::iterator v = craft->getVehicles()->begin(); v != craft->getVehicles()->end(); ++v)
{
_base->getItems()->addItem((*v)->getRules()->getType());
_base->getItems()->addItem((*v)->getRules()->getCompatibleAmmo()->front(), (*v)->getAmmo());
}
// Remove soldiers from craft
for (std::vector<Soldier*>::iterator s = _base->getSoldiers()->begin(); s != _base->getSoldiers()->end(); ++s)
{
if ((*s)->getCraft() == craft)
{
(*s)->setCraft(0);
}
}
// Clear Hangar
for (std::vector<BaseFacility*>::iterator f = _base->getFacilities()->begin(); f != _base->getFacilities()->end(); ++f)
{
if ((*f)->getCraft() == craft)
{
(*f)->setCraft(0);
break;
}
}
// Remove craft
for (std::vector<Craft*>::iterator c = _base->getCrafts()->begin(); c != _base->getCrafts()->end(); ++c)
{
if (*c == craft)
{
_base->getCrafts()->erase(c);
break;
}
}
delete craft;
}
break;
case SELL_SCIENTIST:
_base->setScientists(_base->getScientists() - _qtys[i]);
break;
case SELL_ENGINEER:
_base->setEngineers(_base->getEngineers() - _qtys[i]);
break;
case SELL_ITEM:
if (_base->getItems()->getItem(_items[getItemIndex(i)]) < _qtys[i])
{
const std::string itemName = _items[getItemIndex(i)];
//.........这里部分代码省略.........
示例12: State
/**
* Initializes all the elements in the Craft Equipment screen.
* @param game Pointer to the core game.
* @param base Pointer to the base to get info from.
* @param craft ID of the selected craft.
*/
CraftEquipmentState::CraftEquipmentState(Game *game, Base *base, unsigned int craft) : State(game), _sel(0), _base(base), _craft(craft)
{
// Create objects
_window = new Window(this, 320, 200, 0, 0);
_btnOk = new TextButton(288, 16, 16, 176);
_txtTitle = new Text(300, 16, 16, 7);
_txtItem = new Text(144, 9, 16, 32);
_txtStores = new Text(150, 9, 160, 32);
_txtAvailable = new Text(110, 9, 16, 24);
_txtUsed = new Text(110, 9, 130, 24);
_lstEquipment = new TextList(288, 128, 8, 40);
// Set palette
_game->setPalette(_game->getResourcePack()->getPalette("BACKPALS.DAT")->getColors(Palette::blockOffset(2)), Palette::backPos, 16);
add(_window);
add(_btnOk);
add(_txtTitle);
add(_txtItem);
add(_txtStores);
add(_txtAvailable);
add(_txtUsed);
add(_lstEquipment);
// Set up objects
_window->setColor(Palette::blockOffset(15)+1);
_window->setBackground(_game->getResourcePack()->getSurface("BACK04.SCR"));
_btnOk->setColor(Palette::blockOffset(15)+1);
_btnOk->setText(_game->getLanguage()->getString("STR_OK"));
_btnOk->onMouseClick((ActionHandler)&CraftEquipmentState::btnOkClick);
_txtTitle->setColor(Palette::blockOffset(15)+1);
_txtTitle->setBig();
Craft *c = _base->getCrafts()->at(_craft);
std::wstring s;
s = _game->getLanguage()->getString("STR_EQUIPMENT_FOR") + c->getName(_game->getLanguage());
_txtTitle->setText(s);
_txtItem->setColor(Palette::blockOffset(15)+1);
_txtItem->setText(_game->getLanguage()->getString("STR_ITEM"));
_txtStores->setColor(Palette::blockOffset(15)+1);
_txtStores->setText(_game->getLanguage()->getString("STR_STORES"));
_txtAvailable->setColor(Palette::blockOffset(15)+1);
_txtAvailable->setSecondaryColor(Palette::blockOffset(13));
std::wstringstream ss;
ss << _game->getLanguage()->getString("STR_SPACE_AVAILABLE") << L'\x01'<< c->getRules()->getSoldiers() - c->getNumSoldiers();
_txtAvailable->setText(ss.str());
_txtUsed->setColor(Palette::blockOffset(15)+1);
_txtUsed->setSecondaryColor(Palette::blockOffset(13));
std::wstringstream ss2;
ss2 << _game->getLanguage()->getString("STR_SPACE_USED") << L'\x01'<< c->getNumSoldiers();
_txtUsed->setText(ss2.str());
_lstEquipment->setColor(Palette::blockOffset(13)+10);
_lstEquipment->setArrowColor(Palette::blockOffset(15)+1);
_lstEquipment->setArrowColumn(203, ARROW_HORIZONTAL);
_lstEquipment->setColumns(3, 154, 85, 41);
_lstEquipment->setSelectable(true);
_lstEquipment->setBackground(_window);
_lstEquipment->setMargin(8);
_lstEquipment->onLeftArrowPress((ActionHandler)&CraftEquipmentState::lstEquipmentLeftArrowPress);
_lstEquipment->onLeftArrowRelease((ActionHandler)&CraftEquipmentState::lstEquipmentLeftArrowRelease);
_lstEquipment->onRightArrowPress((ActionHandler)&CraftEquipmentState::lstEquipmentRightArrowPress);
_lstEquipment->onRightArrowRelease((ActionHandler)&CraftEquipmentState::lstEquipmentRightArrowRelease);
_items.push_back("STR_PISTOL");
_items.push_back("STR_PISTOL_CLIP");
_items.push_back("STR_RIFLE");
_items.push_back("STR_RIFLE_CLIP");
_items.push_back("STR_HEAVY_CANNON");
_items.push_back("STR_HC_AP_AMMO");
_items.push_back("STR_HC_HE_AMMO");
_items.push_back("STR_HC_I_AMMO");
_items.push_back("STR_AUTO_CANNON");
_items.push_back("STR_AC_AP_AMMO");
_items.push_back("STR_AC_HE_AMMO");
_items.push_back("STR_AC_I_AMMO");
_items.push_back("STR_ROCKET_LAUNCHER");
_items.push_back("STR_SMALL_ROCKET");
_items.push_back("STR_LARGE_ROCKET");
_items.push_back("STR_INCENDIARY_ROCKET");
_items.push_back("STR_GRENADE");
_items.push_back("STR_SMOKE_GRENADE");
_items.push_back("STR_ELECTRO_FLARE");
int row = 0;
for (std::vector<std::string>::iterator i = _items.begin(); i != _items.end();)
{
if (_base->getItems()->getItem(*i) == 0 && c->getItems()->getItem(*i) == 0)
{
//.........这里部分代码省略.........
示例13: Window
/**
* Initializes all the elements in the Craft Equipment screen.
* @param game Pointer to the core game.
* @param base Pointer to the base to get info from.
* @param craft ID of the selected craft.
*/
CraftEquipmentState::CraftEquipmentState(Base *base, size_t craft) : _sel(0), _craft(craft), _base(base), _totalItems(0), _ammoColor(0)
{
Craft *c = _base->getCrafts()->at(_craft);
bool craftHasACrew = c->getNumSoldiers() > 0;
bool isNewBattle = _game->getSavedGame()->getMonthsPassed() == -1;
// Create objects
_window = new Window(this, 320, 200, 0, 0);
_btnOk = new TextButton((craftHasACrew || isNewBattle)? 148:288, 16, (craftHasACrew || isNewBattle)? 164:16, 176);
_btnClear = new TextButton(148, 16, 8, 176);
_btnInventory = new TextButton(148, 16, 8, 176);
_txtTitle = new Text(300, 17, 16, 7);
_txtItem = new Text(144, 9, 16, 32);
_txtStores = new Text(150, 9, 160, 32);
_txtAvailable = new Text(110, 9, 16, 24);
_txtUsed = new Text(110, 9, 130, 24);
_txtCrew = new Text(71, 9, 244, 24);
_lstEquipment = new TextList(288, 128, 8, 40);
// Set palette
setInterface("craftEquipment");
_ammoColor = _game->getMod()->getInterface("craftEquipment")->getElement("ammoColor")->color;
add(_window, "window", "craftEquipment");
add(_btnOk, "button", "craftEquipment");
add(_btnClear, "button", "craftEquipment");
add(_btnInventory, "button", "craftEquipment");
add(_txtTitle, "text", "craftEquipment");
add(_txtItem, "text", "craftEquipment");
add(_txtStores, "text", "craftEquipment");
add(_txtAvailable, "text", "craftEquipment");
add(_txtUsed, "text", "craftEquipment");
add(_txtCrew, "text", "craftEquipment");
add(_lstEquipment, "list", "craftEquipment");
centerAllSurfaces();
// Set up objects
_window->setBackground(_game->getMod()->getSurface("BACK04.SCR"));
_btnOk->setText(tr("STR_OK"));
_btnOk->onMouseClick((ActionHandler)&CraftEquipmentState::btnOkClick);
_btnOk->onKeyboardPress((ActionHandler)&CraftEquipmentState::btnOkClick, Options::keyCancel);
_btnClear->setText(tr("STR_UNLOAD_CRAFT"));
_btnClear->onMouseClick((ActionHandler)&CraftEquipmentState::btnClearClick);
_btnClear->setVisible(isNewBattle);
_btnInventory->setText(tr("STR_INVENTORY"));
_btnInventory->onMouseClick((ActionHandler)&CraftEquipmentState::btnInventoryClick);
_btnInventory->setVisible(craftHasACrew && !isNewBattle);
_txtTitle->setBig();
_txtTitle->setText(tr("STR_EQUIPMENT_FOR_CRAFT").arg(c->getName(_game->getLanguage())));
_txtItem->setText(tr("STR_ITEM"));
_txtStores->setText(tr("STR_STORES"));
_txtAvailable->setText(tr("STR_SPACE_AVAILABLE").arg(c->getSpaceAvailable()));
_txtUsed->setText(tr("STR_SPACE_USED").arg(c->getSpaceUsed()));
std::wostringstream ss3;
ss3 << tr("STR_SOLDIERS_UC") << ">" << L'\x01'<< c->getNumSoldiers();
_txtCrew->setText(ss3.str());
_lstEquipment->setArrowColumn(203, ARROW_HORIZONTAL);
_lstEquipment->setColumns(3, 156, 83, 41);
_lstEquipment->setSelectable(true);
_lstEquipment->setBackground(_window);
_lstEquipment->setMargin(8);
_lstEquipment->onLeftArrowPress((ActionHandler)&CraftEquipmentState::lstEquipmentLeftArrowPress);
_lstEquipment->onLeftArrowRelease((ActionHandler)&CraftEquipmentState::lstEquipmentLeftArrowRelease);
_lstEquipment->onLeftArrowClick((ActionHandler)&CraftEquipmentState::lstEquipmentLeftArrowClick);
_lstEquipment->onRightArrowPress((ActionHandler)&CraftEquipmentState::lstEquipmentRightArrowPress);
_lstEquipment->onRightArrowRelease((ActionHandler)&CraftEquipmentState::lstEquipmentRightArrowRelease);
_lstEquipment->onRightArrowClick((ActionHandler)&CraftEquipmentState::lstEquipmentRightArrowClick);
_lstEquipment->onMousePress((ActionHandler)&CraftEquipmentState::lstEquipmentMousePress);
int row = 0;
const std::vector<std::string> &items = _game->getMod()->getItemsList();
for (std::vector<std::string>::const_iterator i = items.begin(); i != items.end(); ++i)
{
RuleItem *rule = _game->getMod()->getItem(*i);
int cQty = 0;
if (rule->isFixed())
{
cQty = c->getVehicleCount(*i);
}
else
{
cQty = c->getItems()->getItem(*i);
//.........这里部分代码省略.........
示例14: moveRightByValue
/**
* Moves the given number of items (selected) to the craft.
* @param change Item difference.
*/
void CraftEquipmentState::moveRightByValue(int change)
{
Craft *c = _base->getCrafts()->at(_craft);
RuleItem *item = _game->getMod()->getItem(_items[_sel]);
int bqty = _base->getStorageItems()->getItem(_items[_sel]);
if (_game->getSavedGame()->getMonthsPassed() == -1)
{
if (change == INT_MAX)
{
change = 10;
}
bqty = change;
}
if (0 >= change || 0 >= bqty) return;
change = std::min(bqty, change);
// Do we need to convert item to vehicle?
if (item->isFixed())
{
int size = 4;
if (_game->getMod()->getUnit(item->getType()))
{
size = _game->getMod()->getArmor(_game->getMod()->getUnit(item->getType())->getArmor())->getSize();
size *= size;
}
// Check if there's enough room
int room = std::min(c->getRules()->getVehicles() - c->getNumVehicles(), c->getSpaceAvailable() / size);
if (room > 0)
{
change = std::min(room, change);
if (!item->getCompatibleAmmo()->empty())
{
// And now let's see if we can add the total number of vehicles.
RuleItem *ammo = _game->getMod()->getItem(item->getCompatibleAmmo()->front());
int ammoPerVehicle, clipSize;
if (ammo->getClipSize() > 0 && item->getClipSize() > 0)
{
clipSize = item->getClipSize();
ammoPerVehicle = clipSize / ammo->getClipSize();
}
else
{
clipSize = ammo->getClipSize();
ammoPerVehicle = clipSize;
}
int baseQty = _base->getStorageItems()->getItem(ammo->getType()) / ammoPerVehicle;
if (_game->getSavedGame()->getMonthsPassed() == -1)
baseQty = 1;
int canBeAdded = std::min(change, baseQty);
if (canBeAdded > 0)
{
for (int i=0; i < canBeAdded; ++i)
{
if (_game->getSavedGame()->getMonthsPassed() != -1)
{
_base->getStorageItems()->removeItem(ammo->getType(), ammoPerVehicle);
_base->getStorageItems()->removeItem(_items[_sel]);
}
c->getVehicles()->push_back(new Vehicle(item, clipSize, size));
}
}
else
{
// So we haven't managed to increase the count of vehicles because of the ammo
_timerRight->stop();
LocalizedText msg(tr("STR_NOT_ENOUGH_AMMO_TO_ARM_HWP").arg(tr(ammo->getType())));
_game->pushState(new ErrorMessageState(msg, _palette, _game->getMod()->getInterface("craftEquipment")->getElement("errorMessage")->color, "BACK04.SCR", _game->getMod()->getInterface("craftEquipment")->getElement("errorPalette")->color));
}
}
else
for (int i=0; i < change; ++i)
{
c->getVehicles()->push_back(new Vehicle(item, item->getClipSize(), size));
if (_game->getSavedGame()->getMonthsPassed() != -1)
{
_base->getStorageItems()->removeItem(_items[_sel]);
}
}
}
}
else
{
if (c->getRules()->getMaxItems() > 0 && _totalItems + change > c->getRules()->getMaxItems())
{
_timerRight->stop();
LocalizedText msg(tr("STR_NO_MORE_EQUIPMENT_ALLOWED", c->getRules()->getMaxItems()));
_game->pushState(new ErrorMessageState(msg, _palette, _game->getMod()->getInterface("craftEquipment")->getElement("errorMessage")->color, "BACK04.SCR", _game->getMod()->getInterface("craftEquipment")->getElement("errorPalette")->color));
change = c->getRules()->getMaxItems() - _totalItems;
}
c->getItems()->addItem(_items[_sel],change);
_totalItems += change;
if (_game->getSavedGame()->getMonthsPassed() > -1)
{
_base->getStorageItems()->removeItem(_items[_sel],change);
}
}
//.........这里部分代码省略.........
示例15: moveLeftByValue
/**
* Moves the given number of items (selected) to the base.
* @param change Item difference.
*/
void CraftEquipmentState::moveLeftByValue(int change)
{
Craft *c = _base->getCrafts()->at(_craft);
RuleItem *item = _game->getMod()->getItem(_items[_sel]);
int cQty = 0;
if (item->isFixed()) cQty = c->getVehicleCount(_items[_sel]);
else cQty = c->getItems()->getItem(_items[_sel]);
if (change <= 0 || cQty <= 0) return;
change = std::min(cQty, change);
// Convert vehicle to item
if (item->isFixed())
{
if (!item->getCompatibleAmmo()->empty())
{
// First we remove all vehicles because we want to redistribute the ammo
RuleItem *ammo = _game->getMod()->getItem(item->getCompatibleAmmo()->front());
for (std::vector<Vehicle*>::iterator i = c->getVehicles()->begin(); i != c->getVehicles()->end(); )
{
if ((*i)->getRules() == item)
{
_base->getStorageItems()->addItem(ammo->getType(), (*i)->getAmmo());
delete (*i);
i = c->getVehicles()->erase(i);
}
else ++i;
}
if (_game->getSavedGame()->getMonthsPassed() != -1)
{
_base->getStorageItems()->addItem(_items[_sel], cQty);
}
// And now reAdd the count we want to keep in the craft (and redistribute the ammo among them)
if (cQty > change) moveRightByValue(cQty - change);
}
else
{
if (_game->getSavedGame()->getMonthsPassed() != -1)
{
_base->getStorageItems()->addItem(_items[_sel], change);
}
for (std::vector<Vehicle*>::iterator i = c->getVehicles()->begin(); i != c->getVehicles()->end(); )
{
if ((*i)->getRules() == item)
{
delete (*i);
i = c->getVehicles()->erase(i);
if (0 >= --change) break;
}
else ++i;
}
}
}
else
{
c->getItems()->removeItem(_items[_sel], change);
_totalItems -= change;
if (_game->getSavedGame()->getMonthsPassed() > -1)
{
_base->getStorageItems()->addItem(_items[_sel], change);
}
}
updateQuantity();
}