Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/CConfigMode.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9 - (show annotations) (download) (as text)
Tue Aug 28 14:58:05 2012 UTC (11 years, 8 months ago) by okadu
File MIME type: text/x-c++src
File size: 23060 byte(s)
[okadu] Version 2.14
ニュートラル画面分割
ダイヤ停車位置の数値設定
レイアウト読み込みバグ一部修正

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 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26