| 1 |
#include "stdafx.h" |
| 2 |
#include "CSimpleDialog.h" |
| 3 |
#include "CSkinPlugin.h" |
| 4 |
#include "CScene.h" |
| 5 |
#include "CSaveFile.h" |
| 6 |
#include "CFileMode.h" |
| 7 |
#include "CSceneryMode.h" |
| 8 |
#include "CConfigMode.h" |
| 9 |
|
| 10 |
// 内部定数 |
| 11 |
const int WW = 512, WH = 384; // 窓サイズ |
| 12 |
const int RES_MODE_WIDTH[RES_MODE_NUM] = {640, 800, 1024, 1280}; // 解像度幅 |
| 13 |
const int RES_MODE_HEIGHT[RES_MODE_NUM] = {480, 600, 768, 960}; // 解像度高 |
| 14 |
|
| 15 |
// 外部グローバル |
| 16 |
extern char *g_PluginViewArg; |
| 17 |
extern bool g_StencilEnabled; |
| 18 |
|
| 19 |
extern string g_SelectedRailID; |
| 20 |
extern string g_SelectedTieID; |
| 21 |
extern string g_SelectedGirderID; |
| 22 |
extern string g_SelectedPierID; |
| 23 |
extern string g_SelectedLineID; |
| 24 |
extern string g_SelectedPoleID; |
| 25 |
extern string g_SelectedTrainID; |
| 26 |
extern string g_SelectedStationID; |
| 27 |
extern string g_SelectedStructID; |
| 28 |
extern string g_SelectedSurfaceID; |
| 29 |
extern string g_SelectedEnvID; |
| 30 |
extern string g_SelectedSkinID; |
| 31 |
|
| 32 |
// 内部グローバル |
| 33 |
extern char *YESNO[2] = {"no", "yes"}; |
| 34 |
char *g_ConfigBuffer = NULL; // コンフィグファイルバッファ |
| 35 |
char *g_ConfigScript = NULL; // コンフィグファイル解析位置 |
| 36 |
float g_ConfigVersion; // コンフィグファイルバージョン |
| 37 |
bool g_FullScreen = true; // フルスクリーン |
| 38 |
bool g_RailMipMap = true; // レール等ミップマップ |
| 39 |
bool g_TrainMipMap = false; // 車輌ミップマップ |
| 40 |
bool g_StructMipMap = false; // 施設等ミップマップ |
| 41 |
bool g_SurfaceMipMap = true; // 地形等ミップマップ |
| 42 |
bool g_NamedObjectMipMap; // 名前付きオブジェクトミップマップ |
| 43 |
|
| 44 |
/* |
| 45 |
* コンストラクタ |
| 46 |
*/ |
| 47 |
CConfigMode::CConfigMode(){ |
| 48 |
int i, half = WW/2-TILE_HALF*3, win = half-TILE_UNIT*2; |
| 49 |
|
| 50 |
m_ConfigWindow1.Init(0, 0, |
| 51 |
WW, WH, FlashIn("%s [1/2]", lang(Configuration)), &m_Interface, true); |
| 52 |
|
| 53 |
m_InterfaceGroup.Init(TILE_UNIT, TILE_UNIT*2, |
| 54 |
half, TILE_UNIT*5, lang(Interface), &m_ConfigWindow1); |
| 55 |
m_HideTopPanel.Init(TILE_UNIT, TILE_UNIT+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 56 |
lang(HideTopPanel), &m_InterfaceGroup); |
| 57 |
m_HideRightPanel.Init(TILE_UNIT, TILE_UNIT*2+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 58 |
lang(HideSidePanel), &m_InterfaceGroup); |
| 59 |
m_WindowShadow.Init(TILE_UNIT, TILE_UNIT*3+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 60 |
lang(WindowShadow), &m_InterfaceGroup); |
| 61 |
|
| 62 |
m_DeviceGroup.Init(TILE_UNIT, TILE_UNIT*8, |
| 63 |
half, TILE_UNIT*10, lang(Device), &m_ConfigWindow1); |
| 64 |
m_NeedRestart.Init(TILE_UNIT, TILE_UNIT+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 65 |
lang(NeedRestart), &m_DeviceGroup, 0, 1); |
| 66 |
m_FullScreen.Init(TILE_UNIT, TILE_UNIT*2+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 67 |
lang(FullScreen), &m_DeviceGroup); |
| 68 |
m_ResLabel.Init(TILE_UNIT, TILE_UNIT*3+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 69 |
lang(Resolution), &m_DeviceGroup, 0, 1); |
| 70 |
for(i = 0; i<RES_MODE_NUM; i++) m_Resolution[i].Init( |
| 71 |
TILE_UNIT+(i%2)*(half-TILE_UNIT*1)/2, TILE_UNIT*(i/2+4)+TILE_QUAD, |
| 72 |
(half-TILE_UNIT*3)/2, TILE_UNIT, |
| 73 |
FlashIn("%d * %d", RES_MODE_WIDTH[i], RES_MODE_HEIGHT[i]), |
| 74 |
&m_DeviceGroup, i ? &m_Resolution[i-1] : NULL); |
| 75 |
string miplabel[MIPMAP_NUM] = { |
| 76 |
lang(RailEtc), lang(Train), lang(StationAndStruct), lang(Surface)}; |
| 77 |
m_MipMapLabel.Init(TILE_UNIT, TILE_UNIT*6+TILE_QUAD, |
| 78 |
half-TILE_UNIT*2, TILE_UNIT, lang(MipMap), &m_DeviceGroup, 0, 1); |
| 79 |
for(i = 0; i<MIPMAP_NUM; i++) m_MipMap[i].Init( |
| 80 |
TILE_UNIT+(i%2)*(half-TILE_UNIT*1)/2, TILE_UNIT*(i/2+7)+TILE_QUAD, |
| 81 |
(half-TILE_UNIT*3)/2, TILE_UNIT, (char *)miplabel[i].c_str(), &m_DeviceGroup); |
| 82 |
|
| 83 |
m_AccessoryGroup.Init(TILE_UNIT, TILE_UNIT*19, |
| 84 |
half, TILE_UNIT*4, lang(Accesories), &m_ConfigWindow1); |
| 85 |
m_Compass.Init(TILE_UNIT, TILE_UNIT+TILE_QUAD, |
| 86 |
(half-TILE_UNIT*3)/2, TILE_UNIT, |
| 87 |
lang(Compass), &m_AccessoryGroup); |
| 88 |
m_WindMeter.Init(TILE_UNIT+(half-TILE_UNIT*1)/2, TILE_UNIT+TILE_QUAD, |
| 89 |
(half-TILE_UNIT*3)/2, TILE_UNIT, |
| 90 |
lang(WindMeter), &m_AccessoryGroup); |
| 91 |
m_ShowMap.Init(TILE_UNIT, TILE_UNIT*2+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 92 |
FlashIn("%s (Ctrl + M)", lang(Map)), &m_AccessoryGroup); |
| 93 |
|
| 94 |
m_EffectGroup.Init(WW/2+TILE_HALF, TILE_UNIT*2, |
| 95 |
half, TILE_UNIT*11, lang(VisualEffect), &m_ConfigWindow1); |
| 96 |
m_Shadow.Init(TILE_UNIT, TILE_UNIT+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 97 |
FlashIn("%s (Ctrl + S)", lang(Shadow)), &m_EffectGroup); |
| 98 |
m_LinearFilter.Init(TILE_UNIT, TILE_UNIT*2+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 99 |
lang(TextureFiltering), &m_EffectGroup); |
| 100 |
m_EnvMap.Init(TILE_UNIT, TILE_UNIT*3+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 101 |
lang(EnvMap), &m_EffectGroup); |
| 102 |
m_SpecularLight.Init(TILE_UNIT, TILE_UNIT*4+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 103 |
lang(SpecularLight), &m_EffectGroup); |
| 104 |
m_SunLensFlare.Init(TILE_UNIT, TILE_UNIT*5+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 105 |
lang(LensflareOfSun), &m_EffectGroup); |
| 106 |
m_SunWhiteout.Init(TILE_UNIT, TILE_UNIT*6+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 107 |
lang(WhiteoutOfSun), &m_EffectGroup); |
| 108 |
m_MiscLensFlare.Init(TILE_UNIT, TILE_UNIT*7+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 109 |
lang(LensflareOfOthers), &m_EffectGroup); |
| 110 |
m_MiscParticle.Init(TILE_UNIT, TILE_UNIT*8+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 111 |
lang(Particle), &m_EffectGroup); |
| 112 |
m_Wind.Init(TILE_UNIT, TILE_UNIT*9+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 113 |
lang(Wind), &m_EffectGroup); |
| 114 |
m_SoundGroup.Init(WW/2+TILE_HALF, TILE_UNIT*14, |
| 115 |
half, TILE_UNIT*5, lang(Sound), &m_ConfigWindow1); |
| 116 |
m_InterfaceSound.Init(TILE_UNIT, TILE_UNIT+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 117 |
lang(Interface), &m_SoundGroup); |
| 118 |
string sndlabel[MIPMAP_NUM] = { |
| 119 |
lang(RailEtc), lang(Train), lang(StationAndStruct), lang(Surface)}; |
| 120 |
for(i = 0; i<PISND_NUM; i++) m_PluginSound[i].Init( |
| 121 |
TILE_UNIT+(i%2)*(half-TILE_UNIT*1)/2, TILE_UNIT*(i/2+2)+TILE_QUAD, |
| 122 |
(half-TILE_UNIT*3)/2, TILE_UNIT, (char *)sndlabel[i].c_str(), &m_SoundGroup); |
| 123 |
|
| 124 |
m_MiscGroup.Init(WW/2+TILE_HALF, TILE_UNIT*20, |
| 125 |
half, TILE_UNIT*3, lang(Miscellaneous), &m_ConfigWindow1); |
| 126 |
m_UseUndo.Init(TILE_UNIT, TILE_UNIT+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 127 |
lang(UseUndo), &m_MiscGroup); |
| 128 |
|
| 129 |
m_ConfigWindow2.Init(0, 0, |
| 130 |
WW, WH, FlashIn("%s [2/2]", lang(Configuration)), &m_Interface, true); |
| 131 |
|
| 132 |
m_StereoGroup.Init(TILE_UNIT, TILE_UNIT*2, |
| 133 |
half, TILE_UNIT*7, lang(Stereoscopy), &m_ConfigWindow2); |
| 134 |
m_StereoEnabled.Init(TILE_UNIT, TILE_UNIT+TILE_QUAD, half-TILE_UNIT*2, TILE_UNIT, |
| 135 |
FlashIn("%s (Ctrl + D)", lang(StereoscopyEnabled)), &m_StereoGroup); |
| 136 |
m_StereoMethodLabel.Init(TILE_UNIT, TILE_UNIT*2+TILE_QUAD, |
| 137 |
half-TILE_UNIT*2, TILE_UNIT, lang(StereoscopyMethod), &m_StereoGroup, 0, 1); |
| 138 |
string stereolabel[STEREO_METHOD_NUM] = { |
| 139 |
lang(ParallelView), lang(CrossEyedView)}; |
| 140 |
for(i = 0; i<STEREO_METHOD_NUM; i++) m_StereoMethod[i].Init( |
| 141 |
TILE_UNIT, TILE_UNIT*(i+3)+TILE_QUAD, |
| 142 |
half-TILE_UNIT*2, TILE_UNIT, (char *)stereolabel[i].c_str(), |
| 143 |
&m_StereoGroup, i ? &m_StereoMethod[i-1] : NULL); |
| 144 |
m_StereoMethod[0].SetCheck(); |
| 145 |
m_StereoIntervalLabel.Init(TILE_UNIT, TILE_UNIT*5+TILE_QUAD, |
| 146 |
half-TILE_UNIT*6, TILE_UNIT, FlashIn("%s [m]", lang(StereoscopyInterval)), &m_StereoGroup, 0, 1); |
| 147 |
m_StereoIntervalEdit.Init(half-TILE_UNIT*5, TILE_UNIT*5+TILE_QUAD, |
| 148 |
TILE_UNIT*4, TILE_UNIT, "1.00", &m_StereoGroup, 8); |
| 149 |
|
| 150 |
m_ActiveWindow = NULL; |
| 151 |
} |
| 152 |
|
| 153 |
/* |
| 154 |
* デストラクタ |
| 155 |
*/ |
| 156 |
CConfigMode::~CConfigMode(){ |
| 157 |
} |
| 158 |
|
| 159 |
/* |
| 160 |
* モードを有効化 |
| 161 |
*/ |
| 162 |
void CConfigMode::EnterInterface(){ |
| 163 |
ms_ModeLabel = lang(Configuration); |
| 164 |
m_StereoIntervalEdit.FinishInput(); |
| 165 |
if(!*m_StereoIntervalEdit.GetText()) m_StereoIntervalEdit.SetText("1.00"); |
| 166 |
else m_StereoIntervalEdit.SetText(FlashIn("%.2f", GetStereoInterval())); |
| 167 |
} |
| 168 |
|
| 169 |
/* |
| 170 |
* 入力チェック |
| 171 |
*/ |
| 172 |
void CConfigMode::ScanInputInterface(){ |
| 173 |
m_Interface.ScanInput(); |
| 174 |
if(m_ConfigWindow1.CheckClose() || m_ConfigWindow2.CheckClose()){ |
| 175 |
SetNeutral(); |
| 176 |
return; |
| 177 |
} |
| 178 |
if(!m_UseUndo.GetCheck()) g_FileMode->ResetUndo(); |
| 179 |
} |
| 180 |
|
| 181 |
/* |
| 182 |
* 入力チェック |
| 183 |
*/ |
| 184 |
int CConfigMode::ScanInputWindowDiv(){ |
| 185 |
devSetTexture(0, NULL); |
| 186 |
devBLEND_ALPHA(); |
| 187 |
if(IsWindowDiv() && GetButton(DIM_LEFT)==S_FREE && GetButton(DIM_MIDDLE)==S_FREE && GetButton(DIM_RIGHT)==S_FREE){ |
| 188 |
m_ActiveWindow = m_RootWindow.GetPointWindow(0, 0, g_DispWidth, g_DispHeight, g_Cursor.GetPos()); |
| 189 |
} |
| 190 |
int ret = CWindowDivInfo::ScanInput(m_RootWindow.GetDivAdr(), 0, 0, g_DispWidth, g_DispHeight, g_Scene->GetCamera(), &g_Scene); |
| 191 |
CWindowDivInfo::RenderInterface(); |
| 192 |
return ret; |
| 193 |
} |
| 194 |
|
| 195 |
/* |
| 196 |
* レンダリング |
| 197 |
*/ |
| 198 |
void CConfigMode::RenderInterface(){ |
| 199 |
int ix = g_DispWidth*60/100, iy = g_DispHeight; |
| 200 |
g_StrTex->RenderLeft(TILE_QUAD, g_DispHeight-TILE_UNIT, 0xffffffff, 0xff000000, |
| 201 |
FlashIn("Version %s / LANG = %s", VERSION_STRING, g_LanguageName.c_str())); |
| 202 |
} |
| 203 |
|
| 204 |
/* |
| 205 |
* レンダリング |
| 206 |
*/ |
| 207 |
void CConfigMode::RenderWindowDiv(){ |
| 208 |
devSetTexture(0, NULL); |
| 209 |
devBLEND_ALPHA(); |
| 210 |
if(m_RootWindow.GetDiv()){ |
| 211 |
m_RootWindow.GetDiv()->RenderInterfaceRecursive(0, 0, g_DispWidth, g_DispHeight); |
| 212 |
} |
| 213 |
} |
| 214 |
|
| 215 |
/* |
| 216 |
* 設定読込 |
| 217 |
*/ |
| 218 |
bool CConfigMode::Load(){ |
| 219 |
int i; |
| 220 |
bool hidetoppanel = false, hiderightpanel = false, windowshadow = true; |
| 221 |
bool fullscreen = true; |
| 222 |
int res[2] = {640, 480}; |
| 223 |
bool compass = true, windmeter = true, showmap = false; |
| 224 |
bool shadow = false, linearfilter = true, envmap = true; |
| 225 |
bool specularlight = true, sunlensflare = true, sunwhiteout = true; |
| 226 |
bool misclensflare = true, miscparticle = true, wind = true; |
| 227 |
bool interfacesound = true, railsound = true, trainsound = true; |
| 228 |
bool structsound = true, surfacesound = true; |
| 229 |
bool useundo = true; |
| 230 |
bool stereoenabled = false; |
| 231 |
int stereomethod = 0; |
| 232 |
float stereointerval = 1.0f; |
| 233 |
char *str, *eee; |
| 234 |
g_SelectedSkinID = "Default_Blue"; |
| 235 |
g_SelectedRailID = "Default_JR_Narrow"; |
| 236 |
g_SelectedTieID = "Default_JRN_BallastPC"; |
| 237 |
g_SelectedGirderID = "Default_JRN_SinglePC"; |
| 238 |
g_SelectedPierID = "Default_SinglePC"; |
| 239 |
g_SelectedLineID = "Default_SimpleCatenary"; |
| 240 |
g_SelectedPoleID = "Default_JRN_Single"; |
| 241 |
g_SelectedTrainID = "Aizentranza01"; |
| 242 |
g_SelectedStationID = "MM02"; |
| 243 |
g_SelectedStructID = "Ship"; |
| 244 |
g_SelectedSurfaceID = "Default"; |
| 245 |
g_SelectedEnvID = "Default"; |
| 246 |
if(chdir(g_BaseDir)) goto SET; |
| 247 |
str = g_ConfigBuffer = LoadBinaryText("Config.txt"); |
| 248 |
if(!g_ConfigBuffer) goto SET; |
| 249 |
try{ |
| 250 |
if(!(str = Space(eee = str))) throw CSynErr(eee); |
| 251 |
|
| 252 |
if(!(str = BeginBlock(eee = str, "DatafileHeader"))) throw CSynErr(eee); |
| 253 |
if(!(str = AsgnFloat(eee = str, "RailSimVersion", &g_ConfigVersion))) throw CSynErr(eee); |
| 254 |
if(g_ConfigVersion>RAILSIM_VERSION) |
| 255 |
throw CSynErr(eee, "%s: %.2f", lang(UnsupportedVersion), g_ConfigVersion); |
| 256 |
string datafiletype; |
| 257 |
if(!(str = AsgnIdentifier(eee = str, "DatafileType", &datafiletype))) throw CSynErr(eee); |
| 258 |
if(datafiletype!="Config") throw CSynErr(eee, lang(InvalidDatafileType)); |
| 259 |
if(!(str = EndBlock(eee = str))) throw CSynErr(eee, ERR_ENDBLOCK); |
| 260 |
|
| 261 |
if(!(str = BeginBlock(eee = str, "ConfigMode"))) throw CSynErr(eee); |
| 262 |
|
| 263 |
if(!(str = BeginBlock(eee = str, "Interface"))) throw CSynErr(eee); |
| 264 |
if(!(str = AsgnYesNo(eee = str, "HideTopPanel", &hidetoppanel))) throw CSynErr(eee); |
| 265 |
if(!(str = AsgnYesNo(eee = str, "HideRightPanel", &hiderightpanel))) throw CSynErr(eee); |
| 266 |
if(g_ConfigVersion>=2.03f) if(!(str = AsgnYesNo(eee = str, "WindowShadow", &windowshadow))) throw CSynErr(eee); |
| 267 |
if(!(str = EndBlock(eee = str))) throw CSynErr(eee, ERR_ENDBLOCK); |
| 268 |
|
| 269 |
if(!(str = BeginBlock(eee = str, "Device"))) throw CSynErr(eee); |
| 270 |
if(!(str = AsgnYesNo(eee = str, "FullScreen", &fullscreen))) throw CSynErr(eee); |
| 271 |
if(!(str = AsgnInteger(eee = str, "Resolution", res, 2, false))) throw CSynErr(eee); |
| 272 |
if(!(str = AsgnYesNo(eee = str, "RailMipMap", &g_RailMipMap))) throw CSynErr(eee); |
| 273 |
if(!(str = AsgnYesNo(eee = str, "TrainMipMap", &g_TrainMipMap))) throw CSynErr(eee); |
| 274 |
if(!(str = AsgnYesNo(eee = str, "StructMipMap", &g_StructMipMap))) throw CSynErr(eee); |
| 275 |
if(!(str = AsgnYesNo(eee = str, "SurfaceMipMap", &g_SurfaceMipMap))) throw CSynErr(eee); |
| 276 |
if(!(str = EndBlock(eee = str))) throw CSynErr(eee, ERR_ENDBLOCK); |
| 277 |
|
| 278 |
if(!(str = BeginBlock(eee = str, "Accessory"))) throw CSynErr(eee); |
| 279 |
if(!(str = AsgnYesNo(eee = str, "Compass", &compass))) throw CSynErr(eee); |
| 280 |
if(!(str = AsgnYesNo(eee = str, "WindMeter", &windmeter))) throw CSynErr(eee); |
| 281 |
if(g_ConfigVersion>=2.03f) if(!(str = AsgnYesNo(eee = str, "ShowMap", &showmap))) throw CSynErr(eee); |
| 282 |
if(!(str = EndBlock(eee = str))) throw CSynErr(eee); |
| 283 |
|
| 284 |
if(!(str = BeginBlock(eee = str, "Effect"))) throw CSynErr(eee); |
| 285 |
if(!(str = AsgnYesNo(eee = str, "Shadow", &shadow))) throw CSynErr(eee); |
| 286 |
if(!(str = AsgnYesNo(eee = str, "LinearFilter", &linearfilter))) throw CSynErr(eee); |
| 287 |
if(!(str = AsgnYesNo(eee = str, "EnvMap", &envmap))) throw CSynErr(eee); |
| 288 |
if(!(str = AsgnYesNo(eee = str, "SpecularLight", &specularlight))) throw CSynErr(eee); |
| 289 |
if(!(str = AsgnYesNo(eee = str, "SunLensFlare", &sunlensflare))) throw CSynErr(eee); |
| 290 |
if(!(str = AsgnYesNo(eee = str, "SunWhiteout", &sunwhiteout))) throw CSynErr(eee); |
| 291 |
if(!(str = AsgnYesNo(eee = str, "MiscLensFlare", &misclensflare))) throw CSynErr(eee); |
| 292 |
if(!(str = AsgnYesNo(eee = str, "MiscParticle", &miscparticle))) throw CSynErr(eee); |
| 293 |
if(!(str = AsgnYesNo(eee = str, "Wind", &wind))) throw CSynErr(eee); |
| 294 |
if(!(str = EndBlock(eee = str))) throw CSynErr(eee, ERR_ENDBLOCK); |
| 295 |
|
| 296 |
if(!(str = BeginBlock(eee = str, "Sound"))) throw CSynErr(eee); |
| 297 |
if(!(str = AsgnYesNo(eee = str, "InterfaceSound", &interfacesound))) throw CSynErr(eee); |
| 298 |
if(!(str = AsgnYesNo(eee = str, "RailSound", &railsound))) throw CSynErr(eee); |
| 299 |
if(!(str = AsgnYesNo(eee = str, "TrainSound", &trainsound))) throw CSynErr(eee); |
| 300 |
if(!(str = AsgnYesNo(eee = str, "StructSound", &structsound))) throw CSynErr(eee); |
| 301 |
if(!(str = AsgnYesNo(eee = str, "SurfaceSound", &surfacesound))) throw CSynErr(eee); |
| 302 |
if(!(str = EndBlock(eee = str))) throw CSynErr(eee, ERR_ENDBLOCK); |
| 303 |
|
| 304 |
if(!(str = BeginBlock(eee = str, "Misc"))) throw CSynErr(eee); |
| 305 |
if(!(str = AsgnYesNo(eee = str, "UseUndo", &useundo))) throw CSynErr(eee); |
| 306 |
if(!(str = EndBlock(eee = str))) throw CSynErr(eee, ERR_ENDBLOCK); |
| 307 |
|
| 308 |
if(g_ConfigVersion>=2.12f){ |
| 309 |
if(!(str = BeginBlock(eee = str, "Stereoscopy"))) throw CSynErr(eee); |
| 310 |
if(!(str = AsgnYesNo(eee = str, "Enabled", &stereoenabled))) throw CSynErr(eee); |
| 311 |
if(!(str = AsgnInteger(eee = str, "Method", &stereomethod))) throw CSynErr(eee); |
| 312 |
ValueArea(&stereomethod, 0, 1); |
| 313 |
if(!(str = AsgnFloat(eee = str, "Interval", &stereointerval))) throw CSynErr(eee); |
| 314 |
ValueArea(&stereointerval, 0.0f, 1000.0f); |
| 315 |
if(!(str = EndBlock(eee = str))) throw CSynErr(eee, ERR_ENDBLOCK); |
| 316 |
} |
| 317 |
|
| 318 |
if(!(str = BeginBlock(eee = str, "SelectedPlugin"))) throw CSynErr(eee); |
| 319 |
if(!(str = AsgnString(eee = str, "Rail", &g_SelectedRailID))) throw CSynErr(eee); |
| 320 |
if(!(str = AsgnString(eee = str, "Tie", &g_SelectedTieID))) throw CSynErr(eee); |
| 321 |
if(!(str = AsgnString(eee = str, "Girder", &g_SelectedGirderID))) throw CSynErr(eee); |
| 322 |
if(!(str = AsgnString(eee = str, "Pier", &g_SelectedPierID))) throw CSynErr(eee); |
| 323 |
if(!(str = AsgnString(eee = str, "Line", &g_SelectedLineID))) throw CSynErr(eee); |
| 324 |
if(!(str = AsgnString(eee = str, "Pole", &g_SelectedPoleID))) throw CSynErr(eee); |
| 325 |
if(!(str = AsgnString(eee = str, "Train", &g_SelectedTrainID))) throw CSynErr(eee); |
| 326 |
if(!(str = AsgnString(eee = str, "Station", &g_SelectedStationID))) throw CSynErr(eee); |
| 327 |
if(!(str = AsgnString(eee = str, "Struct", &g_SelectedStructID))) throw CSynErr(eee); |
| 328 |
if(!(str = AsgnString(eee = str, "Surface", &g_SelectedSurfaceID))) throw CSynErr(eee); |
| 329 |
if(!(str = AsgnString(eee = str, "Env", &g_SelectedEnvID))) throw CSynErr(eee); |
| 330 |
if(!(str = AsgnString(eee = str, "Skin", &g_SelectedSkinID))) throw CSynErr(eee); |
| 331 |
if(!(str = EndBlock(eee = str))) throw CSynErr(eee, ERR_ENDBLOCK); |
| 332 |
|
| 333 |
if(!(str = EndBlock(eee = str))) throw CSynErr(eee, ERR_ENDBLOCK); |
| 334 |
|
| 335 |
g_ConfigScript = str; |
| 336 |
} |
| 337 |
catch(CSynErr err){ |
| 338 |
err.Handle("\"Config.txt\"", g_ConfigBuffer); |
| 339 |
return false; |
| 340 |
} |
| 341 |
//DELETE_A(g_ConfigBuffer); |
| 342 |
SET: |
| 343 |
m_HideTopPanel.SetCheck(hidetoppanel); |
| 344 |
m_HideRightPanel.SetCheck(hiderightpanel); |
| 345 |
m_WindowShadow.SetCheck(windowshadow); |
| 346 |
m_FullScreen.SetCheck(fullscreen); |
| 347 |
m_Resolution[0].ClearGroupCheck(); |
| 348 |
if(g_PluginViewArg){ |
| 349 |
g_DispWidth = 640; |
| 350 |
g_DispHeight = 480; |
| 351 |
}else{ |
| 352 |
g_DispWidth = res[0]; |
| 353 |
g_DispHeight = res[1]; |
| 354 |
} |
| 355 |
for(i = 0; i<RES_MODE_NUM; i++) if(g_DispWidth==RES_MODE_WIDTH[i] |
| 356 |
&& g_DispHeight==RES_MODE_HEIGHT[i]) m_Resolution[i].SetCheck(); |
| 357 |
g_FullScreen = !!fullscreen; |
| 358 |
m_MipMap[0].SetCheck(g_RailMipMap); |
| 359 |
m_MipMap[1].SetCheck(g_TrainMipMap); |
| 360 |
m_MipMap[2].SetCheck(g_StructMipMap); |
| 361 |
m_MipMap[3].SetCheck(g_SurfaceMipMap); |
| 362 |
m_Compass.SetCheck(compass); |
| 363 |
m_WindMeter.SetCheck(windmeter); |
| 364 |
m_ShowMap.SetCheck(showmap); |
| 365 |
m_Shadow.SetCheck(shadow); |
| 366 |
m_LinearFilter.SetCheck(linearfilter); |
| 367 |
m_EnvMap.SetCheck(envmap); |
| 368 |
m_SpecularLight.SetCheck(specularlight); |
| 369 |
m_SunLensFlare.SetCheck(sunlensflare); |
| 370 |
m_SunWhiteout.SetCheck(sunwhiteout); |
| 371 |
m_MiscLensFlare.SetCheck(misclensflare); |
| 372 |
m_MiscParticle.SetCheck(miscparticle); |
| 373 |
m_Wind.SetCheck(wind); |
| 374 |
m_InterfaceSound.SetCheck(interfacesound); |
| 375 |
m_PluginSound[0].SetCheck(railsound); |
| 376 |
m_PluginSound[1].SetCheck(trainsound); |
| 377 |
m_PluginSound[2].SetCheck(structsound); |
| 378 |
m_PluginSound[3].SetCheck(surfacesound); |
| 379 |
m_UseUndo.SetCheck(useundo); |
| 380 |
m_StereoEnabled.SetCheck(stereoenabled); |
| 381 |
m_StereoMethod[stereomethod].SetCheck(); |
| 382 |
m_StereoIntervalEdit.SetText(FlashIn("%.2f", stereointerval)); |
| 383 |
m_ConfigWindow1.SetPos((g_DispWidth-WW)/2-TILE_UNIT, (g_DispHeight-WH)/2); |
| 384 |
m_ConfigWindow2.SetPos((g_DispWidth-WW)/2-TILE_UNIT*2, (g_DispHeight-WH)/2+TILE_UNIT); |
| 385 |
return true; |
| 386 |
} |
| 387 |
|
| 388 |
/* |
| 389 |
* 設定保存 |
| 390 |
*/ |
| 391 |
bool CConfigMode::Save(){ |
| 392 |
int tmp; |
| 393 |
if((tmp = m_Resolution->GetNumber())>=0){ |
| 394 |
g_DispWidth = RES_MODE_WIDTH[tmp]; |
| 395 |
g_DispHeight = RES_MODE_HEIGHT[tmp]; |
| 396 |
} |
| 397 |
void SetCurrentPluginID(); |
| 398 |
SetCurrentPluginID(); |
| 399 |
if(chdir(g_BaseDir)) return false; |
| 400 |
FILE *file = fopen("Config.txt", "wt"); |
| 401 |
if(!file) return false; |
| 402 |
fprintf(file, "/*\n *\tRailSim II Configuration Datafile\n */\n\n"); |
| 403 |
fprintf(file, "DatafileHeader{\n"); |
| 404 |
fprintf(file, "\tRailSimVersion = %.2f;\n", RAILSIM_VERSION); |
| 405 |
fprintf(file, "\tDatafileType = Config;\n"); |
| 406 |
fprintf(file, "}\n\n"); |
| 407 |
fprintf(file, "ConfigMode{\n"); |
| 408 |
fprintf(file, "\tInterface{\n"); |
| 409 |
fprintf(file, "\t\tHideTopPanel = %s;\n", YESNO[m_HideTopPanel.GetCheck()]); |
| 410 |
fprintf(file, "\t\tHideRightPanel = %s;\n", YESNO[m_HideRightPanel.GetCheck()]); |
| 411 |
fprintf(file, "\t\tWindowShadow = %s;\n", YESNO[m_WindowShadow.GetCheck()]); |
| 412 |
fprintf(file, "\t}\n"); |
| 413 |
fprintf(file, "\tDevice{\n"); |
| 414 |
fprintf(file, "\t\tFullScreen = %s;\n", YESNO[m_FullScreen.GetCheck()]); |
| 415 |
fprintf(file, "\t\tResolution = %d, %d;\n", g_DispWidth, g_DispHeight); |
| 416 |
fprintf(file, "\t\tRailMipMap = %s;\n", YESNO[m_MipMap[0].GetCheck()]); |
| 417 |
fprintf(file, "\t\tTrainMipMap = %s;\n", YESNO[m_MipMap[1].GetCheck()]); |
| 418 |
fprintf(file, "\t\tStructMipMap = %s;\n", YESNO[m_MipMap[2].GetCheck()]); |
| 419 |
fprintf(file, "\t\tSurfaceMipMap = %s;\n", YESNO[m_MipMap[3].GetCheck()]); |
| 420 |
fprintf(file, "\t}\n"); |
| 421 |
fprintf(file, "\tAccessory{\n"); |
| 422 |
fprintf(file, "\t\tCompass = %s;\n", YESNO[m_Compass.GetCheck()]); |
| 423 |
fprintf(file, "\t\tWindMeter = %s;\n", YESNO[m_WindMeter.GetCheck()]); |
| 424 |
fprintf(file, "\t\tShowMap = %s;\n", YESNO[m_ShowMap.GetCheck()]); |
| 425 |
fprintf(file, "\t}\n"); |
| 426 |
fprintf(file, "\tEffect{\n"); |
| 427 |
fprintf(file, "\t\tShadow = %s;\n", YESNO[m_Shadow.GetCheck()]); |
| 428 |
fprintf(file, "\t\tLinearFilter = %s;\n", YESNO[m_LinearFilter.GetCheck()]); |
| 429 |
fprintf(file, "\t\tEnvMap = %s;\n", YESNO[m_EnvMap.GetCheck()]); |
| 430 |
fprintf(file, "\t\tSpecularLight = %s;\n", YESNO[m_SpecularLight.GetCheck()]); |
| 431 |
fprintf(file, "\t\tSunLensFlare = %s;\n", YESNO[m_SunLensFlare.GetCheck()]); |
| 432 |
fprintf(file, "\t\tSunWhiteout = %s;\n", YESNO[m_SunWhiteout.GetCheck()]); |
| 433 |
fprintf(file, "\t\tMiscLensFlare = %s;\n", YESNO[m_MiscLensFlare.GetCheck()]); |
| 434 |
fprintf(file, "\t\tMiscParticle = %s;\n", YESNO[m_MiscParticle.GetCheck()]); |
| 435 |
fprintf(file, "\t\tWind = %s;\n", YESNO[m_Wind.GetCheck()]); |
| 436 |
fprintf(file, "\t}\n"); |
| 437 |
fprintf(file, "\tSound{\n"); |
| 438 |
fprintf(file, "\t\tInterfaceSound = %s;\n", YESNO[m_InterfaceSound.GetCheck()]); |
| 439 |
fprintf(file, "\t\tRailSound = %s;\n", YESNO[m_PluginSound[0].GetCheck()]); |
| 440 |
fprintf(file, "\t\tTrainSound = %s;\n", YESNO[m_PluginSound[1].GetCheck()]); |
| 441 |
fprintf(file, "\t\tStructSound = %s;\n", YESNO[m_PluginSound[2].GetCheck()]); |
| 442 |
fprintf(file, "\t\tSurfaceSound = %s;\n", YESNO[m_PluginSound[3].GetCheck()]); |
| 443 |
fprintf(file, "\t}\n", YESNO[m_Shadow.GetCheck()]); |
| 444 |
fprintf(file, "\tMisc{\n"); |
| 445 |
fprintf(file, "\t\tUseUndo = %s;\n", YESNO[m_UseUndo.GetCheck()]); |
| 446 |
fprintf(file, "\t}\n", YESNO[m_Shadow.GetCheck()]); |
| 447 |
fprintf(file, "\tStereoscopy{\n"); |
| 448 |
fprintf(file, "\t\tEnabled = %s;\n", YESNO[m_StereoEnabled.GetCheck()]); |
| 449 |
fprintf(file, "\t\tMethod = %d;\n", m_StereoMethod->GetNumber()); |
| 450 |
fprintf(file, "\t\tInterval = %.2f;\n", GetStereoInterval()); |
| 451 |
fprintf(file, "\t}\n", YESNO[m_Shadow.GetCheck()]); |
| 452 |
fprintf(file, "\tSelectedPlugin{\n"); |
| 453 |
fprintf(file, "\t\tRail = \"%s\";\n", (char *)g_SelectedRailID.c_str()); |
| 454 |
fprintf(file, "\t\tTie = \"%s\";\n", (char *)g_SelectedTieID.c_str()); |
| 455 |
fprintf(file, "\t\tGirder = \"%s\";\n", (char *)g_SelectedGirderID.c_str()); |
| 456 |
fprintf(file, "\t\tPier = \"%s\";\n", (char *)g_SelectedPierID.c_str()); |
| 457 |
fprintf(file, "\t\tLine = \"%s\";\n", (char *)g_SelectedLineID.c_str()); |
| 458 |
fprintf(file, "\t\tPole = \"%s\";\n", (char *)g_SelectedPoleID.c_str()); |
| 459 |
fprintf(file, "\t\tTrain = \"%s\";\n", (char *)g_SelectedTrainID.c_str()); |
| 460 |
fprintf(file, "\t\tStation = \"%s\";\n", (char *)g_SelectedStationID.c_str()); |
| 461 |
fprintf(file, "\t\tStruct = \"%s\";\n", (char *)g_SelectedStructID.c_str()); |
| 462 |
fprintf(file, "\t\tSurface = \"%s\";\n", (char *)g_SelectedSurfaceID.c_str()); |
| 463 |
fprintf(file, "\t\tEnv = \"%s\";\n", (char *)g_SelectedEnvID.c_str()); |
| 464 |
fprintf(file, "\t\tSkin = \"%s\";\n", (char *)g_SelectedSkinID.c_str()); |
| 465 |
fprintf(file, "\t}\n"); |
| 466 |
fprintf(file, "}\n\n"); |
| 467 |
SaveModeSettings(file); |
| 468 |
fclose(file); |
| 469 |
return true; |
| 470 |
} |
| 471 |
|
| 472 |
/* |
| 473 |
* テクスチャフィルタ設定 |
| 474 |
*/ |
| 475 |
void CConfigMode::SetTexFilter(){ |
| 476 |
if(m_LinearFilter.GetCheck()){ |
| 477 |
devTEX_LINEAR(0); |
| 478 |
devTEX_LINEAR(1); |
| 479 |
}else{ |
| 480 |
devTEX_POINT(0); |
| 481 |
devTEX_POINT(1); |
| 482 |
} |
| 483 |
} |
| 484 |
|
| 485 |
/* |
| 486 |
* ステレオ間隔取得 |
| 487 |
*/ |
| 488 |
float CConfigMode::GetStereoInterval(){ |
| 489 |
float interval = 0.0f; |
| 490 |
m_StereoIntervalEdit.FinishInput(); |
| 491 |
sscanf(m_StereoIntervalEdit.GetText(), "%f", &interval); |
| 492 |
ValueArea(&interval, 0.0f, 1000.0f); |
| 493 |
return interval; |
| 494 |
} |
| 495 |
|
| 496 |
/* |
| 497 |
* ハードウェア互換性のチェック |
| 498 |
*/ |
| 499 |
void CConfigMode::CheckHardware(){ |
| 500 |
int i; |
| 501 |
if(!g_StencilEnabled && GetShadow()){ |
| 502 |
EnqueueCommonDialog(new CSimpleDialog( |
| 503 |
lang(StencilBufferProblem), lang(CompatibilityProblem))); |
| 504 |
m_Shadow.SetCheck(0); |
| 505 |
} |
| 506 |
if(!svs.pDS && (GetInterfaceSound() || GetRailSound() |
| 507 |
|| GetTrainSound() || GetStructSound() || GetSurfaceSound())){ |
| 508 |
EnqueueCommonDialog(new CSimpleDialog( |
| 509 |
lang(DirectSoundProblem), lang(CompatibilityProblem))); |
| 510 |
m_InterfaceSound.SetCheck(0); |
| 511 |
for(i = 0; i<4; i++) m_PluginSound[i].SetCheck(0); |
| 512 |
} |
| 513 |
} |
| 514 |
|
| 515 |
/* |
| 516 |
* 画面分割関連初期化 |
| 517 |
*/ |
| 518 |
void CConfigMode::FreeWindowDiv(){ |
| 519 |
m_RootWindow.Free(); |
| 520 |
CWindowDivInfo::InitState(); |
| 521 |
m_ActiveWindow = NULL; |
| 522 |
} |