- Updated options system
This commit is contained in:
wagic.the.homebrew
2009-01-29 13:35:19 +00:00
parent f5693e0b6f
commit b14e6c318e
11 changed files with 74 additions and 32 deletions

View File

@@ -733,7 +733,7 @@ class AManaProducer: public MTGAbility{
}
if (GameOptions::GetInstance()->values[OPTIONS_SFXVOLUME] > 0 && currentlyTapping < 3){
if (GameOptions::GetInstance()->values[OPTIONS_SFXVOLUME].getIntValue() > 0 && currentlyTapping < 3){
JSample * sample = SampleCache::GetInstance()->getSample("sound/sfx/mana.wav");
if (sample) JSoundSystem::GetInstance()->PlaySample(sample);
}

View File

@@ -1,25 +1,42 @@
#ifndef _GAME_OPTIONS_H_
#define _GAME_OPTIONS_H_
#include <map>
#include <string>
using std::map;
using std::string;
#define OPTIONS_MUSICVOLUME "musicVolume"
#define OPTIONS_SFXVOLUME "sfxVolume"
#define MAX_OPTIONS 50
#define OPTIONS_MUSICVOLUME 0
#define OPTIONS_SFXVOLUME 1
#define OPTIONS_INTERRUPTATENDOFPHASE_OFFSET 2
#define OPTIONS_SAVEFILE RESPATH"/settings/options.txt"
class GameOption {
public:
int value;
string svalue;
int getIntValue();
GameOption(int _value = 0);
};
class GameOptions {
public:
int values[MAX_OPTIONS];
map<string,GameOption> values;
static GameOptions * GetInstance();
static void Destroy();
int save();
int load();
static const char * phaseInterrupts[];
private:
GameOptions();
~GameOptions();
static GameOptions* mInstance;
static map <string,int> optionsTypes;
};
#endif

View File

@@ -200,7 +200,7 @@ class GameStateDeckViewer: public GameState, public JGuiListener
}
welcome_menu->Add(10, "Cancel");
if (GameApp::HasMusic && GameOptions::GetInstance()->values[OPTIONS_MUSICVOLUME] > 0){
if (GameApp::HasMusic && GameOptions::GetInstance()->values[OPTIONS_MUSICVOLUME].getIntValue() > 0){
if (GameApp::music){
JSoundSystem::GetInstance()->StopMusic(GameApp::music);
SAFE_DELETE(GameApp::music);

View File

@@ -8,12 +8,12 @@ using std::string;
class OptionItem:public JGuiObject{
public:
string displayValue;
int id, value;
string displayValue, id;
int value;
int hasFocus;
int maxValue, increment;
float x, y;
OptionItem(int id, string _displayValue, int _maxValue = 1, int _increment = 1);
OptionItem(string _id, string _displayValue, int _maxValue = 1, int _increment = 1);
~OptionItem();
virtual void Render();

View File

@@ -89,7 +89,7 @@ int Spell::resolve(){
source->controller()->game->putInPlay(source);
//Play SFX
if (GameOptions::GetInstance()->values[OPTIONS_SFXVOLUME] > 0){
if (GameOptions::GetInstance()->values[OPTIONS_SFXVOLUME].getIntValue() > 0){
JSample * sample = source->getSample();
if (sample){
JSoundSystem::GetInstance()->PlaySample(sample);

View File

@@ -135,7 +135,7 @@ void GameObserver::userRequestNextGamePhase(){
if (getCurrentTargetChooser()) return;
if (mLayers->combatLayer()->remainingDamageSteps) return;
//TODO CHECK POSSIBILITY
if (opponent()->isAI() || GameOptions::GetInstance()->values[OPTIONS_INTERRUPTATENDOFPHASE_OFFSET+currentGamePhase]){
if (opponent()->isAI() || GameOptions::GetInstance()->values[GameOptions::phaseInterrupts[currentGamePhase]].getIntValue()){
mLayers->stackLayer()->AddNextGamePhase();
}else{
nextGamePhase();

View File

@@ -4,6 +4,32 @@
#include <fstream>
#include <string>
#include <stdlib.h>
#include <JGE.h>
const char* GameOptions::phaseInterrupts[] = {
"interrupt ---",
"interrupt Untap",
"interrupt Upkeep",
"interrupt Draw",
"interrupt Main phase 1",
"interrupt Combat begins",
"interrupt Attackers",
"interrupt Blockers",
"interrupt Combat damage",
"interrupt Combat ends",
"interrupt Main phase 2",
"interrupt End of turn",
"interrupt Cleanup",
"interrupt ---"
};
GameOption::GameOption(int _value){
value = _value;
}
int GameOption::getIntValue(){
return value;
}
GameOptions* GameOptions::mInstance = NULL;
@@ -14,9 +40,6 @@ GameOptions * GameOptions::GetInstance(){
}
GameOptions::GameOptions(){
for(int i = 0; i < MAX_OPTIONS; i++){
values[i] = 0;
}
load();
}
@@ -24,12 +47,10 @@ int GameOptions::load(){
std::ifstream file(OPTIONS_SAVEFILE);
std::string s;
if(file){
for (int i = 0; i < MAX_OPTIONS; i++){
if(std::getline(file,s)){
values[i] = atoi(s.c_str());
}else{
//TODO error management
}
while(std::getline(file,s)){
int found =s.find("=");
string name = s.substr(0,found);
values[name] = GameOption(atoi(s.substr(found+1).c_str()));
}
file.close();
}
@@ -38,10 +59,11 @@ int GameOptions::load(){
int GameOptions::save(){
std::ofstream file(OPTIONS_SAVEFILE);
char writer[10];
char writer[1024];
if (file){
for (int i = 0; i < MAX_OPTIONS; i++){
sprintf(writer,"%i\n", values[i]);
map<string, GameOption>::iterator it;
for ( it=values.begin() ; it != values.end(); it++ ){
sprintf(writer,"%s=%d\n", it->first.c_str(), it->second.getIntValue());
file<<writer;
}
file.close();

View File

@@ -133,12 +133,12 @@ void GameStateMenu::Start(){
JRenderer::GetInstance()->EnableVSync(true);
subMenuController = NULL;
if (GameApp::HasMusic && !GameApp::music && GameOptions::GetInstance()->values[OPTIONS_MUSICVOLUME] > 0){
if (GameApp::HasMusic && !GameApp::music && GameOptions::GetInstance()->values[OPTIONS_MUSICVOLUME].getIntValue() > 0){
GameApp::music = JSoundSystem::GetInstance()->LoadMusic("sound/Track0.mp3");
JSoundSystem::GetInstance()->PlayMusic(GameApp::music, true);
}
if (GameApp::HasMusic && GameApp::music && GameOptions::GetInstance()->values[OPTIONS_MUSICVOLUME] == 0){
if (GameApp::HasMusic && GameApp::music && GameOptions::GetInstance()->values[OPTIONS_MUSICVOLUME].getIntValue() == 0){
JSoundSystem::GetInstance()->StopMusic(GameApp::music);
SAFE_DELETE(GameApp::music);
}

View File

@@ -67,9 +67,9 @@ void GameStateOptions::Render()
const char * const CreditsText[] = {
"Wagic, The Homebrew ?! by WilLoW",
"This is a work in progress and it contains bugs, deal with it",
"This is a work in progress and it contains bugs",
"updates on http://www.wololo.net/wagic",
"Many thanks to Abrasax and J for their help in this release",
"Many thanks to J for his help in this release, and to all card creators",
"",
"Developped with the JGE++ Library (http://jge.khors.com)",
"",

View File

@@ -90,7 +90,7 @@ void MTGPlayerCards::putInGraveyard(MTGCardInstance * card){
void MTGPlayerCards::putInZone(MTGCardInstance * card, MTGGameZone * from, MTGGameZone * to){
if (from->removeCard(card)){
if (GameOptions::GetInstance()->values[OPTIONS_SFXVOLUME] > 0){
if (GameOptions::GetInstance()->values[OPTIONS_SFXVOLUME].getIntValue() > 0){
if (to == graveyard){
if (card->isACreature()){
JSample * sample = SampleCache::GetInstance()->getSample("sound/sfx/graveyard.wav");

View File

@@ -4,12 +4,12 @@
#include "../include/GameOptions.h"
OptionItem::OptionItem(int _id, string _displayValue, int _maxValue, int _increment):JGuiObject(0){
OptionItem::OptionItem(string _id, string _displayValue, int _maxValue, int _increment):JGuiObject(0){
id = _id;
maxValue = _maxValue;
increment = _increment;
displayValue = _displayValue;
value = GameOptions::GetInstance()->values[id];
value = GameOptions::GetInstance()->values[id].getIntValue();
hasFocus = 0;
x = 0;
y = 0;
@@ -20,7 +20,10 @@ OptionItem::~OptionItem(){
}
void OptionItem::setData(){
GameOptions::GetInstance()->values[id] = value;
GameOptions::GetInstance()->values[id] = GameOption(value);
char buf[4096];
sprintf(buf, "Option: %s => %i\n", id.c_str(), GameOptions::GetInstance()->values[id].getIntValue());
OutputDebugString(buf);
}
void OptionItem::Render(){