修订版 | 97e4cb549dd5b048e54c1b7ab3681550180da79a (tree) |
---|---|
时间 | 2009-08-18 15:51:35 |
作者 | Face |
Commiter | Face |
Finished PAX tunnel to UMmuBase.
@@ -65,41 +65,67 @@ | ||
65 | 65 | GetObject(GetCurrentObject(hDC, OBJ_PEN), sizeof(LOGPEN), &pen); |
66 | 66 | middleGreen=pen.lopnColor; |
67 | 67 | } |
68 | - GetLandedPad(vessel, base, pad); | |
69 | - if (pad>0) | |
68 | + if (IsUMmuBase(vessel)) | |
70 | 69 | { |
71 | 70 | SetTextColor(hDC, RGB(255,255,255)); |
72 | - sprintf(line[0], "WELCOME AT GATE %d OF", pad); | |
73 | - oapiGetObjectName(base, line[1], MFD_LINELENGTH); | |
71 | + sprintf(line[0], "WELCOME AT TOWER OF", pad); | |
72 | + char *vesselName=vessel->GetName(); | |
73 | + strncpy(line[1], vesselName, min(MFD_LINELENGTH, strlen(vesselName))); | |
74 | 74 | CenterTextOut(hDC, 7, line[0]); |
75 | - CenterTextOut(hDC, 9, line[1], -1, true); | |
76 | - if (GetPAX(vessel)) | |
75 | + CenterTextOut(hDC, 9, line[1], -1, true); | |
76 | + DOCKHANDLE port=vessel->GetDockHandle(0); | |
77 | + OBJHANDLE pax=vessel->GetDockStatus(port); | |
78 | + VESSEL *paxv=NULL; | |
79 | + if (pax!=NULL) paxv=oapiGetVesselInterface(pax); | |
80 | + if (paxv!=NULL) | |
77 | 81 | { |
78 | - double time=oapiGetSimTime(); | |
79 | - if ((time-lastTime)>0.5) | |
80 | - { | |
81 | - blink=!blink; | |
82 | - lastTime=time; | |
83 | - } | |
84 | - if (blink) SetTextColor(hDC, RGB(255,255,0)); | |
85 | - else SetTextColor(hDC, middleGreen); | |
86 | - CenterTextOut(hDC, 13, "Ready for PAX"); | |
87 | - SelectDefaultFont (hDC, 1); | |
88 | - SetTextColor(hDC, middleGreen); | |
89 | - CenterTextOut(hDC, 26, "Press PAX again after boarding completed", 1); | |
82 | + SetTextColor(hDC, RGB(255,255,0)); | |
83 | + CenterTextOut(hDC, 13, vessel->GetName()); | |
90 | 84 | } |
91 | 85 | else |
92 | - { | |
93 | - SelectDefaultFont (hDC, 1); | |
86 | + { | |
94 | 87 | SetTextColor(hDC, middleGreen); |
95 | - CenterTextOut(hDC, 26, "Press PAX for passenger operations", 1); | |
88 | + CenterTextOut(hDC, 13, "No PAX"); | |
96 | 89 | } |
97 | 90 | } |
98 | 91 | else |
99 | 92 | { |
100 | - DelPAX(vessel); | |
101 | - SetTextColor(hDC, middleGreen); | |
102 | - CenterTextOut(hDC, 13, "NO SERVICE"); | |
93 | + GetLandedPad(vessel, base, pad); | |
94 | + if (pad>0) | |
95 | + { | |
96 | + SetTextColor(hDC, RGB(255,255,255)); | |
97 | + sprintf(line[0], "WELCOME AT GATE %d OF", pad); | |
98 | + oapiGetObjectName(base, line[1], MFD_LINELENGTH); | |
99 | + CenterTextOut(hDC, 7, line[0]); | |
100 | + CenterTextOut(hDC, 9, line[1], -1, true); | |
101 | + if (GetPAX(vessel)) | |
102 | + { | |
103 | + double time=oapiGetSimTime(); | |
104 | + if ((time-lastTime)>0.5) | |
105 | + { | |
106 | + blink=!blink; | |
107 | + lastTime=time; | |
108 | + } | |
109 | + if (blink) SetTextColor(hDC, RGB(255,255,0)); | |
110 | + else SetTextColor(hDC, middleGreen); | |
111 | + CenterTextOut(hDC, 13, "Ready for PAX"); | |
112 | + SelectDefaultFont (hDC, 1); | |
113 | + SetTextColor(hDC, middleGreen); | |
114 | + CenterTextOut(hDC, 26, "Press PAX again after boarding completed", 1); | |
115 | + } | |
116 | + else | |
117 | + { | |
118 | + SelectDefaultFont (hDC, 1); | |
119 | + SetTextColor(hDC, middleGreen); | |
120 | + CenterTextOut(hDC, 26, "Press PAX for passenger operations", 1); | |
121 | + } | |
122 | + } | |
123 | + else | |
124 | + { | |
125 | + DelPAX(vessel); | |
126 | + SetTextColor(hDC, middleGreen); | |
127 | + CenterTextOut(hDC, 13, "NO SERVICE"); | |
128 | + } | |
103 | 129 | } |
104 | 130 | } |
105 | 131 |
@@ -86,13 +86,15 @@ | ||
86 | 86 | OBJHANDLE _stdcall GetDockStatus(VESSEL *vessel, DOCKHANDLE dock) |
87 | 87 | { |
88 | 88 | //Do my own GetDockStatus |
89 | - if (BaseByVessel().find(vessel)!=BaseByVessel().end()) | |
89 | + std::map<VESSEL *, OBJHANDLE>::iterator el=BaseByVessel().find(vessel); | |
90 | + if (el!=BaseByVessel().end()) | |
90 | 91 | { |
92 | + if (IsUMmuBase(vessel)) return el->second; | |
91 | 93 | OBJHANDLE base; |
92 | 94 | DWORD port; |
93 | 95 | GetLandedPad(vessel, base, port); |
94 | - if (port>0) return BaseByVessel()[vessel]; | |
95 | - else BaseByVessel().erase(vessel); | |
96 | + if (port>0) return el->second; | |
97 | + else DelPAX(vessel); | |
96 | 98 | } |
97 | 99 | //Original function content |
98 | 100 | return *(OBJHANDLE *)(void *)((char *)dock+DOCKSTRUCTOFFSET_CURRENTDOCKOBJECT); |
@@ -166,13 +168,16 @@ | ||
166 | 168 | |
167 | 169 | void SetPAX(VESSEL *vessel) |
168 | 170 | { |
171 | + OBJHANDLE me=vessel->GetHandle(); | |
169 | 172 | for (int i=0;i<oapiGetVesselCount();i++) |
170 | 173 | { |
171 | 174 | OBJHANDLE base=oapiGetVesselByIndex(i); |
172 | - char *className=oapiGetVesselInterface(base)->GetClassName(); | |
173 | - if (className!=NULL) if (strncmp(className, "UMmuBase", strlen(className))==0) | |
175 | + VESSEL *baseVessel=oapiGetVesselInterface(base); | |
176 | + if (base!=me) | |
177 | + if (IsUMmuBase(baseVessel)) | |
174 | 178 | { |
175 | 179 | BaseByVessel()[vessel]=base; |
180 | + BaseByVessel()[baseVessel]=vessel->GetHandle(); | |
176 | 181 | break; |
177 | 182 | } |
178 | 183 | } |
@@ -185,5 +190,17 @@ | ||
185 | 190 | |
186 | 191 | void DelPAX(VESSEL *vessel) |
187 | 192 | { |
188 | - BaseByVessel().erase(vessel); | |
193 | + std::map<VESSEL *, OBJHANDLE>::iterator el=BaseByVessel().find(vessel); | |
194 | + if (el!=BaseByVessel().end()) | |
195 | + { | |
196 | + BaseByVessel().erase(oapiGetVesselInterface(el->second)); | |
197 | + BaseByVessel().erase(el->first); | |
198 | + } | |
199 | +} | |
200 | + | |
201 | +bool IsUMmuBase(VESSEL *vessel) | |
202 | +{ | |
203 | + char *className=vessel->GetClassName(); | |
204 | + if (className!=NULL) if (strcmp(className, "UMmuBase")==0) return true; | |
205 | + return false; | |
189 | 206 | } |
\ No newline at end of file |
@@ -4,3 +4,4 @@ | ||
4 | 4 | void SetPAX(VESSEL*); |
5 | 5 | void DelPAX(VESSEL*); |
6 | 6 | bool GetPAX(VESSEL*); |
7 | +bool IsUMmuBase(VESSEL*); |