Я отслеживаю «работу» игрока, устанавливая его работу в число, увеличивая его на единицу, если он меняет работу, и определяя, какой работой он в настоящее время является, является ли число четным или нечетным. (Сейчас только две работы). Тем не менее, я знаю, что есть более эффективные способы сделать это, и скоро мне нужно будет выполнить третью и четвертую работу, поэтому я не могу продолжать использовать чётные / нечетные проверки.
Вот мой код для справки: (Обратите внимание, что я включаю только соответствующий код)
GameModeState.cpp
// If changeJob's parameter number is 1, it increments the job. If number is 2, it only returns the current job
int GameModeState::changeJob(int number)
{
// Default job is even (landman)
static int job = 1;
if (number == 1)
{
job = (job+1);
return job;
}
else
{
return job;
}
}
int GameModeState::getJob()
{
int currentJob = (changeJob(2));
return currentJob;
}
// If the player opens the "stat sheet", it changes their job
void GameModeState::_statSheet(const String& message, const Awesomium::JSValue& input, Awesomium::JSValue& output)
{
changeJob(1);
}
GameModeState.h
class GameModeState : public GameState::State
{
public:
/// Changes the player's job if number is 1, or returns current job if number is 2
static int changeJob(int number);
/// Returns the current job number by calling changeJob appropriately
static int getJob();
private:
// Opening the player sheet will change the player's job
void _statSheet(const String& message, const Awesomium::JSValue& input, Awesomium::JSValue& output);
};
ZoneMovementState.cpp (Здесь я проверяю текущую работу)
#include "GameModeState.h"
#include <EnergyGraphics/ZoneParser.h>
void ZoneMovementState::_changeZone(const String& message, const Awesomium::JSValue& input, Awesomium::JSValue& output)
{
// If the number from getJob is even, the player is currently a geologist
if (GameModeState::getJob()%2 == 0)
{
ZoneParser::getSingleton().load("../media/zones/geology_zone.xml", false);
}
else //otherwise they are a landman
{
ZoneParser::getSingleton().load("../media/zones/landman_zone.xml", false);
}
transitionHandler->go();
}
Я думаю, что либо массивы, либо перечисления заданий будут лучшим способом справиться с этим, но я не уверен, как внедрить это в мой код. Если вы знаете лучший способ, пожалуйста, включите примеры или хотя бы точку в правильном направлении. Я буду очень признателен за это!