/** ** Check for button enabled, if all requirements for an upgrade to unit ** are met. ** ** @param unit Pointer to unit for button. ** @param button Pointer to button to check/enable. ** ** @return True if enabled. */ bool ButtonCheckUpgradeTo(const CUnit &unit, const ButtonAction &button) { if (unit.CurrentAction() != UnitActionStill) { return false; } return CheckDependByIdent(*unit.Player, button.ValueStr); }
/** ** Check if all requirements for upgrade research are met. ** ** @param unit Pointer to unit for button. ** @param button Pointer to button to check/enable. ** ** @return True if enabled. */ bool ButtonCheckResearch(const CUnit &unit, const ButtonAction &button) { // don't show any if working if (!ButtonCheckNoWork(unit, button)) { return false; } // check if allowed if (!CheckDependByIdent(*unit.Player, button.ValueStr)) { return false; } if (!strncmp(button.ValueStr.c_str(), "upgrade-", 8) && UpgradeIdentAllowed(*unit.Player, button.ValueStr) != 'A') { return false; } return true; }
/** ** Find All unittypes equivalent to a given one, and which are available ** UnitType are returned in the preferred order (ie palladin >> knight...) ** ** @param unittype The unittype to find equivalence for ** @param usableTypes int array which will hold the result. (Size UnitTypeMax+1) ** ** @return the number of unittype found */ int AiFindAvailableUnitTypeEquiv(const CUnitType &unittype, int *usableTypes) { // 1 - Find equivalents int usableTypesCount = AiFindUnitTypeEquiv(unittype, usableTypes); // 2 - Remove unavailable unittypes for (int i = 0; i < usableTypesCount;) { if (!CheckDependByIdent(*AiPlayer->Player, UnitTypes[usableTypes[i]]->Ident)) { // Not available, remove it usableTypes[i] = usableTypes[usableTypesCount - 1]; --usableTypesCount; } else { ++i; } } // 3 - Sort by level std::sort(usableTypes, usableTypes + usableTypesCount, UnitTypePrioritySorter_Decreasing()); return usableTypesCount; }
/** ** Check if upgrade (also spells) available for the player. ** ** @param player Player pointer. ** @param ident Upgrade ident. */ int UpgradeIdentAvailable(const CPlayer *player, const std::string &ident) { int allow; #if 0 // // Check dependencies // if (!CheckDependByIdent(player, ident)) { return 0; } #endif // // Allowed by level // allow = UpgradeIdentAllowed(player, ident); return allow == 'R' || allow == 'X'; }