Implements CGSpendVirtuePoints.

This commit is contained in:
2023-04-24 23:48:02 -07:00
parent 994fe041af
commit 61f6c3aae8
5 changed files with 33 additions and 6 deletions

View File

@@ -257,6 +257,12 @@ void CharacterType::FillVirtueValues(std::vector<int>& values) const {
} }
} }
vector<int> CharacterType::GetVirtueValues() const {
vector<int> values;
FillVirtueValues(values);
return values;
}
void CharacterType::FillAttributeValues(std::vector<int>& values, int group_id) const { void CharacterType::FillAttributeValues(std::vector<int>& values, int group_id) const {
// TODO: This method sucks, but was needed in QBasic. // TODO: This method sucks, but was needed in QBasic.
const int numAttributes = GetNumAttributesInGroup(group_id); const int numAttributes = GetNumAttributesInGroup(group_id);

View File

@@ -54,6 +54,7 @@ class CharacterType {
int GetSocialAttributeValue(int id) const; int GetSocialAttributeValue(int id) const;
int GetTalentValue(int id) const; int GetTalentValue(int id) const;
int GetVirtueValue(int id) const; int GetVirtueValue(int id) const;
std::vector<int> GetVirtueValues() const;
void SetAbilityValue(int group_id, int id, int value); void SetAbilityValue(int group_id, int id, int value);
void SetAttributeValue(int group_id, int id, int value); void SetAttributeValue(int group_id, int id, int value);
void SetBackgroundValue(int id, int value); void SetBackgroundValue(int id, int value);

View File

@@ -4,19 +4,28 @@
#include <vector> #include <vector>
namespace SBF { namespace SBF {
namespace {
using std::string;
using std::vector;
} // End namespace
const std::string GetVirtueLabel(int id) { const string GetVirtueLabel(int id) {
if (id > 0 && id <= kVirtuesCount) { if (id > 0 && id <= kVirtuesCount) {
return kVirtueLabels[id]; return kVirtueLabels[id];
} }
return ""; return "";
} }
void FillVirtueLabels(std::vector<std::string>& labels) { void FillVirtueLabels(vector<string>& labels) {
labels.clear(); labels.clear();
for (int id = 1; id <= kVirtuesCount; id++) { for (int id = 1; id <= kVirtuesCount; id++) {
labels.push_back(GetVirtueLabel(id)); labels.push_back(GetVirtueLabel(id));
} }
} }
vector<string> GetVirtueLabels() {
vector<string> labels;
FillVirtueLabels(labels);
return labels;
}
} // End namespace SBF } // End namespace SBF

View File

@@ -39,6 +39,8 @@ const std::string GetVirtueLabel(int virtue_id);
/// @brief Fills the vector with all of the valid virtue labels. /// @brief Fills the vector with all of the valid virtue labels.
/// @param virtue_labels The vector to fill. It will be cleared first. /// @param virtue_labels The vector to fill. It will be cleared first.
void FillVirtueLabels(std::vector<std::string>& virtue_labels); void FillVirtueLabels(std::vector<std::string>& virtue_labels);
std::vector<std::string> GetVirtueLabels();
} // End namespace SBF } // End namespace SBF
/** @}*/ /** @}*/

View File

@@ -1,6 +1,5 @@
#include "sbf-cpp/Virtues.h"
#define _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED
#include "sbf.h"
#include <cstdio> #include <cstdio>
#include <iostream> #include <iostream>
#include <string> #include <string>
@@ -17,6 +16,7 @@
#include "Menus.h" #include "Menus.h"
#include "Random.h" #include "Random.h"
#include "Utils.h" #include "Utils.h"
#include "sbf.h"
#define KEY_ESCAPE 0033 #define KEY_ESCAPE 0033
@@ -319,8 +319,17 @@ void CGGetRoad(CharacterType& ch) {
} }
void CGSpendVirtuePoints(CharacterType& ch) { void CGSpendVirtuePoints(CharacterType& ch) {
// TODO: Fill this in. // Spend virtue points
cout << "// TODO: CGSpendVirtuePoints(CharacterType&)" << endl; MenuStyle ms;
int virtue_points = GetVirtuePoints();
vector<string> labels = GetVirtueLabels();
while (virtue_points > 0) {
vector<int> values = ch.GetVirtueValues();
int virtue_id = ChooseStringIdWithValues(
labels, values, ms, "Which virtue do you want to spend 1 of your " + to_string(virtue_points) + " points on?");
ch.SetVirtueValue(virtue_id, ch.GetVirtueValue(virtue_id) + 1);
virtue_points--;
}
} }
void CGGetDerangement(CharacterType& ch) { void CGGetDerangement(CharacterType& ch) {