diff options
author | Bardur Arantsson <bardur@scientician.net> | 2016-03-10 18:41:54 +0100 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2016-03-10 19:02:23 +0100 |
commit | 018bfc6f736dd95dbf3315e5a2ba71204555ffdc (patch) | |
tree | 5f1bd57c37434ffbf69be3c8fafb416a0154bc1a /src/cmd5.cc | |
parent | 4632374161221b21423b2cf5c88f3bc4e7d7afe6 (diff) |
Refactor use_symbiotic_power() to use std::vector
Diffstat (limited to 'src/cmd5.cc')
-rw-r--r-- | src/cmd5.cc | 76 |
1 files changed, 44 insertions, 32 deletions
diff --git a/src/cmd5.cc b/src/cmd5.cc index 9870f116..9ca22adf 100644 --- a/src/cmd5.cc +++ b/src/cmd5.cc @@ -616,68 +616,80 @@ cptr symbiote_name(bool_ capitalize) } /* - * Use a power of the monster in symbiosis + * Extract powers */ -int use_symbiotic_power(int r_idx, bool_ great, bool_ only_number, bool_ no_cost) +std::vector<int> extract_monster_powers(monster_race const *r_ptr, bool great) { - int power = -1; - - int num = 0, dir = 0 , i; - - int powers[96]; - - bool_ flag; - - int ask, plev = p_ptr->lev; - - char choice; - - char out_val[160]; - - monster_race *r_ptr = &r_info[r_idx]; - - int rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1); - - int x = p_ptr->px, y = p_ptr->py, k; - - int rad; - - int label; - + std::vector<int> powers; + powers.reserve(MONSTER_POWERS_MAX); /* List the monster powers -- RF4_* */ - for (i = 0; i < 32; i++) + for (std::size_t i = 0; i < 32; i++) { if (r_ptr->flags4 & BIT(i)) { if (monster_powers[i].great && (!great)) continue; if (!monster_powers[i].power) continue; - powers[num++] = i; + powers.push_back(i); } } /* List the monster powers -- RF5_* */ - for (i = 0; i < 32; i++) + for (std::size_t i = 0; i < 32; i++) { if (r_ptr->flags5 & BIT(i)) { if (monster_powers[i + 32].great && (!great)) continue; if (!monster_powers[i + 32].power) continue; - powers[num++] = i + 32; + powers.push_back(i + 32); } } /* List the monster powers -- RF6_* */ - for (i = 0; i < 32; i++) + for (std::size_t i = 0; i < 32; i++) { if (r_ptr->flags6 & BIT(i)) { if (monster_powers[i + 64].great && (!great)) continue; if (!monster_powers[i + 64].power) continue; - powers[num++] = i + 64; + powers.push_back(i + 64); } } + return powers; +} + +/* + * Use a power of the monster in symbiosis + */ +int use_symbiotic_power(int r_idx, bool_ great, bool_ only_number, bool_ no_cost) +{ + int power = -1; + + int dir = 0 , i; + + bool_ flag; + + int ask, plev = p_ptr->lev; + + char choice; + + char out_val[160]; + + monster_race *r_ptr = &r_info[r_idx]; + + int const rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1); + + int x = p_ptr->px, y = p_ptr->py, k; + + int rad; + + int label; + + /* Extract available monster powers */ + std::vector<int> powers = extract_monster_powers(r_ptr, great); + int const num = powers.size(); // Avoid signed/unsigned warnings + if (!num) { msg_print("You have no powers you can use."); |