| 1 |
#include "stdafx.h" |
| 2 |
#include "CPopMenu.h" |
| 3 |
#include "CRailPlugin.h" |
| 4 |
#include "CTiePlugin.h" |
| 5 |
#include "CGirderPlugin.h" |
| 6 |
#include "CPierPlugin.h" |
| 7 |
#include "CLinePlugin.h" |
| 8 |
#include "CPolePlugin.h" |
| 9 |
#include "CRailwayPluginSet.h" |
| 10 |
#include "CRailwayMode.h" |
| 11 |
|
| 12 |
// Oč |
| 13 |
extern const int ARROW_INTERFACE_HEIGHT; |
| 14 |
|
| 15 |
// static o |
| 16 |
int CRailwayMode::ms_CurrentType = 0; |
| 17 |
int CRailwayMode::ms_WindowPos[2][2]; |
| 18 |
int CRailwayMode::ms_TrackNum = 1; |
| 19 |
float CRailwayMode::ms_TrackInterval = 4.0; |
| 20 |
CWindowCtrl CRailwayMode::ms_RailWindow; |
| 21 |
CPushButton CRailwayMode::ms_PluginSetButton; |
| 22 |
CStaticCtrl CRailwayMode::ms_TypeLabel; |
| 23 |
CCheckBox CRailwayMode::ms_Type[6]; |
| 24 |
CCheckBox CRailwayMode::ms_EnableCant; |
| 25 |
CCheckBox CRailwayMode::ms_LiftRailSurface; |
| 26 |
CStaticCtrl CRailwayMode::ms_MultiTrackLabel; |
| 27 |
CCheckBox CRailwayMode::ms_MultiTrackCheck; |
| 28 |
CStaticCtrl CRailwayMode::ms_TrackNumLabel; |
| 29 |
CEditCtrl CRailwayMode::ms_TrackNumEdit; |
| 30 |
CStaticCtrl CRailwayMode::ms_TrackIntLabel; |
| 31 |
CEditCtrl CRailwayMode::ms_TrackIntEdit; |
| 32 |
CCamera CRailwayMode::ms_RailwayModeCamera; |
| 33 |
|
| 34 |
/* |
| 35 |
* [static] |
| 36 |
* ¤ĘC^[tFCXĚúť |
| 37 |
*/ |
| 38 |
void CRailwayMode::InitRailwayInterface(){ |
| 39 |
CInterface::ResetTabHead(); |
| 40 |
int i, sww = TILE_UNIT*14, swh = TILE_UNIT*8, gwh = ARROW_INTERFACE_HEIGHT; |
| 41 |
ms_WindowPos[0][0] = g_DispWidth-sww-TILE_UNIT*3; |
| 42 |
ms_WindowPos[0][1] = g_DispHeight-swh-TILE_UNIT; |
| 43 |
ms_WindowPos[1][0] = TILE_UNIT; |
| 44 |
ms_WindowPos[1][1] = g_DispHeight-gwh-swh-TILE_UNIT*2; |
| 45 |
ms_RailWindow.Init(ms_WindowPos[0][0], ms_WindowPos[0][1], |
| 46 |
sww, swh, lang(RailwayOption), NULL, true); |
| 47 |
ms_PluginSetButton.Init(sww-TILE_UNIT*6-TILE_HALF, TILE_QUAD/2+TILE_UNIT, |
| 48 |
TILE_UNIT*6, TILE_UNIT, lang(LoadSaveSettings), &ms_RailWindow); |
| 49 |
ms_TypeLabel.Init(TILE_HALF, TILE_QUAD+TILE_UNIT, |
| 50 |
sww-TILE_UNIT, TILE_UNIT, lang(BuildElement), &ms_RailWindow, 0, 1); |
| 51 |
char *typelabel[6] = { |
| 52 |
lang(Rail), lang(Tie), lang(Girder), lang(Pier), lang(Line), lang(Pole)}; |
| 53 |
bool setdefault[6] = {true, true, false, true, true, true}; |
| 54 |
for(i = 0; i<6; i++){ |
| 55 |
ms_Type[i].Init(TILE_HALF+(i%3)*(sww-TILE_QUAD*3)/3, TILE_QUAD+TILE_UNIT*(i/3+2), |
| 56 |
(i+1)*(sww-TILE_QUAD*3)/3-i*(sww-TILE_QUAD*3)/3-TILE_QUAD, TILE_UNIT, |
| 57 |
typelabel[i], &ms_RailWindow); |
| 58 |
if(setdefault[i]) ms_Type[i].SetCheck(1); |
| 59 |
} |
| 60 |
int tw = sww-TILE_UNIT-TILE_HALF; |
| 61 |
ms_EnableCant.Init(TILE_HALF, TILE_QUAD+TILE_UNIT*4, |
| 62 |
tw/2, TILE_UNIT, lang(Cant), &ms_RailWindow); |
| 63 |
ms_LiftRailSurface.Init(tw/2+TILE_HALF, TILE_QUAD+TILE_UNIT*4, |
| 64 |
tw-tw/2, TILE_UNIT, lang(AltOffset), &ms_RailWindow); |
| 65 |
ms_EnableCant.SetCheck(1); |
| 66 |
ms_LiftRailSurface.SetCheck(1); |
| 67 |
ms_MultiTrackLabel.Init(TILE_HALF, TILE_QUAD+TILE_UNIT*5, |
| 68 |
sww-TILE_UNIT, TILE_UNIT, lang(MultiTrackOption), &ms_RailWindow, 0, 1); |
| 69 |
ms_MultiTrackCheck.Init(TILE_HALF, TILE_QUAD+TILE_UNIT*6, |
| 70 |
TILE_UNIT*4, TILE_UNIT, lang(Enabled), &ms_RailWindow); |
| 71 |
ms_TrackNumLabel.Init(TILE_HALF*2+TILE_UNIT*4, TILE_QUAD+TILE_UNIT*6, |
| 72 |
TILE_UNIT*2, TILE_UNIT, lang(TrNum), &ms_RailWindow, 0, 1); |
| 73 |
ms_TrackNumEdit.Init(TILE_HALF*2+TILE_UNIT*6, TILE_QUAD+TILE_UNIT*6, |
| 74 |
TILE_UNIT*2, TILE_UNIT, "2", &ms_RailWindow, 3); |
| 75 |
ms_TrackIntLabel.Init(TILE_HALF+TILE_UNIT*9, TILE_QUAD+TILE_UNIT*6, |
| 76 |
TILE_UNIT*2, TILE_UNIT, lang(Itv), &ms_RailWindow, 0, 1); |
| 77 |
ms_TrackIntEdit.Init(TILE_HALF+TILE_UNIT*11, TILE_QUAD+TILE_UNIT*6, |
| 78 |
TILE_UNIT*2, TILE_UNIT, "4.00", &ms_RailWindow, 6); |
| 79 |
ms_RailwayModeCamera.Init(20.0f, 2.0f, 200.0f, false); |
| 80 |
} |
| 81 |
|
| 82 |
/* |
| 83 |
* [static] |
| 84 |
* eívOC ON/OFF ćž |
| 85 |
*/ |
| 86 |
void CRailwayMode::GetPlugin( |
| 87 |
CRailPlugin **b_rail, // [vOC |
| 88 |
CTiePlugin **b_tie, // ŘvOC |
| 89 |
CGirderPlugin **b_girder, // ´
vOC |
| 90 |
CPierPlugin **b_pier, // ´rvOC |
| 91 |
CLinePlugin **b_line, // ËüvOC |
| 92 |
CPolePlugin **b_pole // ËüvOC |
| 93 |
){ |
| 94 |
*b_rail = ms_Type[0].GetCheck() ? g_Rail : NULL; |
| 95 |
*b_tie = ms_Type[1].GetCheck() ? g_Tie : NULL; |
| 96 |
*b_girder = ms_Type[2].GetCheck() ? g_Girder : NULL; |
| 97 |
*b_pier = ms_Type[3].GetCheck() ? g_Pier : NULL; |
| 98 |
*b_line = ms_Type[4].GetCheck() ? g_Line : NULL; |
| 99 |
*b_pole = ms_Type[5].GetCheck() ? g_Pole : NULL; |
| 100 |
} |
| 101 |
|
| 102 |
/* |
| 103 |
* [static] |
| 104 |
* [ÖAIvVÝč |
| 105 |
*/ |
| 106 |
void CRailwayMode::SetRailwayOption( |
| 107 |
bool rail, bool tie, bool girder, // on/off |
| 108 |
bool pier, bool line, bool pole, // on/off |
| 109 |
bool cant, // JgtO |
| 110 |
bool lift, // ĄütO |
| 111 |
bool multi, // ĄütO |
| 112 |
int tnum, // Oš |
| 113 |
float tint // OšÔu |
| 114 |
){ |
| 115 |
ms_Type[0].SetCheck(rail); ms_Type[1].SetCheck(tie); ms_Type[2].SetCheck(girder); |
| 116 |
ms_Type[3].SetCheck(pier); ms_Type[4].SetCheck(line); ms_Type[5].SetCheck(pole); |
| 117 |
ms_EnableCant.SetCheck(cant); |
| 118 |
ms_LiftRailSurface.SetCheck(lift); |
| 119 |
ms_MultiTrackCheck.SetCheck(multi); |
| 120 |
ms_TrackNumEdit.SetText(FlashIn("%d", tnum)); |
| 121 |
ms_TrackIntEdit.SetText(FlashIn("%.2f", tint)); |
| 122 |
} |
| 123 |
|
| 124 |
/* |
| 125 |
* [static] |
| 126 |
* ÝčÇ |
| 127 |
*/ |
| 128 |
char *CRailwayMode::LoadRailwaySetting( |
| 129 |
char *str // ÎŰśń |
| 130 |
){ |
| 131 |
char *eee; |
| 132 |
int tnum; |
| 133 |
float tint; |
| 134 |
bool type[6], cant, lift, multi; |
| 135 |
if(!(str = BeginBlock(eee = str, "RailwayMode"))) throw CSynErr(eee); |
| 136 |
if(!(str = AsgnYesNo(eee = str, "RailCheck", &type[0]))) throw CSynErr(eee); |
| 137 |
if(!(str = AsgnYesNo(eee = str, "TieCheck", &type[1]))) throw CSynErr(eee); |
| 138 |
if(!(str = AsgnYesNo(eee = str, "GirderCheck", &type[2]))) throw CSynErr(eee); |
| 139 |
if(!(str = AsgnYesNo(eee = str, "PierCheck", &type[3]))) throw CSynErr(eee); |
| 140 |
if(!(str = AsgnYesNo(eee = str, "LineCheck", &type[4]))) throw CSynErr(eee); |
| 141 |
if(!(str = AsgnYesNo(eee = str, "PoleCheck", &type[5]))) throw CSynErr(eee); |
| 142 |
if(!(str = AsgnYesNo(eee = str, "EnableCant", &cant))) throw CSynErr(eee); |
| 143 |
if(!(str = AsgnYesNo(eee = str, "LiftRailSurface", &lift))) throw CSynErr(eee); |
| 144 |
if(!(str = AsgnYesNo(eee = str, "MultiTrack", &multi))) throw CSynErr(eee); |
| 145 |
if(!(str = AsgnInteger(eee = str, "TrackNum", &tnum))) throw CSynErr(eee); |
| 146 |
if(!(str = AsgnFloat(eee = str, "TrackInterval", &tint))) throw CSynErr(eee); |
| 147 |
SetRailwayOption(type[0], type[1], type[2], type[3], type[4], type[5], |
| 148 |
cant, lift, multi, tnum, tint); |
| 149 |
if(!(str = EndBlock(eee = str))) throw CSynErr(eee, ERR_ENDBLOCK); |
| 150 |
return str; |
| 151 |
} |
| 152 |
|
| 153 |
/* |
| 154 |
* [static] |
| 155 |
* ÝčŰś |
| 156 |
*/ |
| 157 |
void CRailwayMode::SaveRailwaySetting( |
| 158 |
FILE *file // t@C |
| 159 |
){ |
| 160 |
fprintf(file, "RailwayMode{\n"); |
| 161 |
fprintf(file, "\tRailCheck = %s;\n", YESNO[ms_Type[0].GetCheck()]); |
| 162 |
fprintf(file, "\tTieCheck = %s;\n", YESNO[ms_Type[1].GetCheck()]); |
| 163 |
fprintf(file, "\tGirderCheck = %s;\n", YESNO[ms_Type[2].GetCheck()]); |
| 164 |
fprintf(file, "\tPierCheck = %s;\n", YESNO[ms_Type[3].GetCheck()]); |
| 165 |
fprintf(file, "\tLineCheck = %s;\n", YESNO[ms_Type[4].GetCheck()]); |
| 166 |
fprintf(file, "\tPoleCheck = %s;\n", YESNO[ms_Type[5].GetCheck()]); |
| 167 |
fprintf(file, "\tEnableCant = %s;\n", YESNO[ms_EnableCant.GetCheck()]); |
| 168 |
fprintf(file, "\tLiftRailSurface = %s;\n", YESNO[ms_LiftRailSurface.GetCheck()]); |
| 169 |
fprintf(file, "\tMultiTrack = %s;\n", YESNO[ms_MultiTrackCheck.GetCheck()]); |
| 170 |
fprintf(file, "\tTrackNum = %d;\n", GetTrackNum()); |
| 171 |
fprintf(file, "\tTrackInterval = %f;\n", GetTrackInterval()); |
| 172 |
fprintf(file, "}\n\n"); |
| 173 |
} |
| 174 |
|
| 175 |
/* |
| 176 |
* [static] |
| 177 |
* [hđLřť |
| 178 |
*/ |
| 179 |
void CRailwayMode::EnterRailway( |
| 180 |
int type // ^Cv (0: interface, 1: scenery) |
| 181 |
){ |
| 182 |
ms_WindowPos[ms_CurrentType][0] = ms_RailWindow.GetPosX(); |
| 183 |
ms_WindowPos[ms_CurrentType][1] = ms_RailWindow.GetPosY(); |
| 184 |
ms_CurrentType = type; |
| 185 |
ms_RailWindow.SetPos(ms_WindowPos[ms_CurrentType][0], ms_WindowPos[ms_CurrentType][1]); |
| 186 |
ms_RailWindow.SetColor(0xffffffff); |
| 187 |
} |
| 188 |
|
| 189 |
/* |
| 190 |
* [static] |
| 191 |
* üÍ`FbN |
| 192 |
*/ |
| 193 |
void CRailwayMode::ScanInputRailway(){ |
| 194 |
if(ms_PluginSetButton.IsPushed()){ |
| 195 |
ms_PluginSetButton.SetPush(false); |
| 196 |
POINT pos = g_Cursor.GetPos(); |
| 197 |
g_RailwayPluginSetMenu->Popup(pos.x, pos.y); |
| 198 |
} |
| 199 |
} |
| 200 |
|
| 201 |
/* |
| 202 |
* [static] |
| 203 |
* üÍ`FbN |
| 204 |
*/ |
| 205 |
void CRailwayMode::ReformEditValue(){ |
| 206 |
ms_TrackNum = GetTrackNum(); |
| 207 |
ms_TrackNumEdit.SetText(FlashIn("%d", ms_TrackNum)); |
| 208 |
ms_TrackInterval = GetTrackInterval(); |
| 209 |
ms_TrackIntEdit.SetText(FlashIn("%.2f", ms_TrackInterval)); |
| 210 |
if(!ms_MultiTrackCheck.GetCheck()) ms_TrackNum = 1; |
| 211 |
} |