修订版 | 495b47d1edfa49cca7d925bafd829ea6364c67e2 (tree) |
---|---|
时间 | 2009-08-16 01:52:31 |
作者 | Face |
Commiter | Face |
Implemented simple user interface for base.
@@ -2,6 +2,7 @@ | ||
2 | 2 | #define ORBITER_MODULE |
3 | 3 | |
4 | 4 | #include "orbitersdk.h" |
5 | +#include "UMmuSDK.h" | |
5 | 6 | #include "UMmuBase.h" |
6 | 7 | |
7 | 8 | void UMmuBase::clbkSetClassCaps (FILEHANDLE cfg) |
@@ -10,7 +11,126 @@ | ||
10 | 11 | SetSize (0); |
11 | 12 | SetEmptyMass (0); |
12 | 13 | SetCameraOffset (_V(0,0.8,0)); |
13 | - SetTouchdownPoints (_V(0,0,1), _V(-1,0,-1), _V(1,0,-1)); | |
14 | + SetTouchdownPoints (_V(0,0,1), _V(-1,0,-1), _V(1,0,-1)); | |
15 | + int UmmuSdKInitReturnCode=Crew.InitUmmu(GetHandle()); | |
16 | + float UMmuVersion=Crew.GetUserUMmuVersion(); | |
17 | + Crew.DefineAirLockShape(TRUE,-2,2,0,4,-2,2); | |
18 | + Crew.SetMembersPosRotOnEVA(_V(0,0,0),_V(0,0,0)); | |
19 | + Crew.SetMaxSeatAvailableInShip(100); | |
20 | + SelectedUmmuMember=0; | |
21 | +} | |
22 | + | |
23 | +void UMmuBase::clbkSaveState(FILEHANDLE scn) | |
24 | +{ | |
25 | + SaveDefaultState (scn); | |
26 | + Crew.SaveAllMembersInOrbiterScenarios(scn); | |
27 | +} | |
28 | + | |
29 | +void UMmuBase::clbkLoadStateEx (FILEHANDLE scn, void *status) | |
30 | +{ | |
31 | + char *line; | |
32 | + while (oapiReadScenario_nextline (scn, line)) | |
33 | + { | |
34 | + if(Crew.LoadAllMembersFromOrbiterScenario(line)==TRUE) continue; | |
35 | + ParseScenarioLineEx (line, status); | |
36 | + } | |
37 | +} | |
38 | + | |
39 | +void UMmuBase::clbkPostStep (double simtt, double simdt, double mjd) | |
40 | +{ | |
41 | + int ReturnCode=Crew.ProcessUniversalMMu(); | |
42 | + switch(ReturnCode) | |
43 | + { | |
44 | + case UMMU_TRANSFERED_TO_OUR_SHIP: | |
45 | + sprintf(display,"%s \"%s\" aged %i was transfered to our ship",Crew.GetCrewMiscIdByName(Crew.GetLastEnteredCrewName()),Crew.GetLastEnteredCrewName(),Crew.GetCrewAgeByName(Crew.GetLastEnteredCrewName())); | |
46 | + break; | |
47 | + case UMMU_RETURNED_TO_OUR_SHIP: | |
48 | + sprintf(display,"%s \"%s\" aged %i entered into our ship",Crew.GetCrewMiscIdByName(Crew.GetLastEnteredCrewName()),Crew.GetLastEnteredCrewName(),Crew.GetCrewAgeByName(Crew.GetLastEnteredCrewName())); | |
49 | + break; | |
50 | + } | |
51 | +} | |
52 | + | |
53 | +int UMmuBase::clbkConsumeBufferedKey(DWORD key, bool down, char *kstate) | |
54 | +{ | |
55 | + if (!down) return 0; | |
56 | + | |
57 | + if(key==OAPI_KEY_E) | |
58 | + { | |
59 | + int Returned=Crew.EvaCrewMember(Crew.GetCrewNameBySlotNumber(SelectedUmmuMember)); | |
60 | + switch(Returned) | |
61 | + { | |
62 | + case TRANSFER_TO_DOCKED_SHIP_OK: | |
63 | + sprintf(display,"Transfer to docked ship Ok - %s transfered",Crew.GetLastEvaedCrewName());SelectedUmmuMember=0; | |
64 | + break; | |
65 | + case EVA_OK: | |
66 | + sprintf(display,"EVA OK - %s left the ship",Crew.GetLastEvaedCrewName());SelectedUmmuMember=0; | |
67 | + break; | |
68 | + case ERROR_NO_ONE_ON_BOARD: | |
69 | + strcpy(display,"Error, no one on board, unable to EVA"); | |
70 | + break; | |
71 | + case ERROR_AIRLOCK_CLOSED: | |
72 | + strcpy(display,"Error, airlock is closed, unable to EVA"); | |
73 | + break; | |
74 | + case ERROR_DOCKED_SHIP_HAVE_AIRLOCK_CLOSED: | |
75 | + strcpy(display,"Error, docked ship's airlock is closed, unable to transfer"); | |
76 | + break; | |
77 | + case ERROR_DOCKED_SHIP_IS_FULL: | |
78 | + strcpy(display,"Error, docked ship is already full transfer failed"); | |
79 | + break; | |
80 | + case ERROR_CREW_MEMBER_NOT_FOUND: | |
81 | + strcpy(display,"Error, no crew by this name in ship"); | |
82 | + break; | |
83 | + case ERROR_DOCKEDSHIP_DONOT_USE_UMMU: | |
84 | + strcpy(display,"Error, docked ship do not use UMmu 1.5, ask author to add it See http://orbiter.dansteph.com"); | |
85 | + break; | |
86 | + case ERROR_MISC_ERROR_EVAFAILED: | |
87 | + strcpy(display,"Misc error with UMMU See http://orbiter.dansteph.com to install it again"); | |
88 | + break; | |
89 | + } | |
90 | + return TRUE; | |
91 | + } | |
92 | + | |
93 | + if(key==OAPI_KEY_1) | |
94 | + { | |
95 | + if(Crew.GetCrewTotalNumber()==0) | |
96 | + { | |
97 | + strcpy(display,"Sorry no one aboard unable to select"); | |
98 | + return 1; | |
99 | + } | |
100 | + | |
101 | + if(SelectedUmmuMember<Crew.GetCrewTotalNumber()-1) | |
102 | + SelectedUmmuMember++; | |
103 | + char * Name=Crew.GetCrewNameBySlotNumber(SelectedUmmuMember); | |
104 | + sprintf(display,"Slot %i %s \"%s\" aged %i Selected for EVA or Transfer, please press \"E\" to EVA \"ESC\" to eject",SelectedUmmuMember,Crew.GetCrewMiscIdBySlotNumber(SelectedUmmuMember),Name,Crew.GetCrewAgeBySlotNumber(SelectedUmmuMember)); | |
105 | + return 1; | |
106 | + } | |
107 | + | |
108 | + if(key==OAPI_KEY_2) | |
109 | + { | |
110 | + if(Crew.GetCrewTotalNumber()==0) | |
111 | + { | |
112 | + strcpy(display,"Sorry no one aboard unable to select"); | |
113 | + return 1; | |
114 | + } | |
115 | + if(SelectedUmmuMember>0) | |
116 | + SelectedUmmuMember--; | |
117 | + char * Name=Crew.GetCrewNameBySlotNumber(SelectedUmmuMember); | |
118 | + sprintf(display,"Slot %i %s \"%s\" aged %i Selected for EVA or Transfer, please press \"E\" to EVA \"ESC\" to eject",SelectedUmmuMember,Crew.GetCrewMiscIdBySlotNumber(SelectedUmmuMember),Name,Crew.GetCrewAgeBySlotNumber(SelectedUmmuMember)); | |
119 | + return 1; | |
120 | + } | |
121 | + | |
122 | + if(key==OAPI_KEY_S) | |
123 | + { | |
124 | + sprintf(display,"%i souls aboard ship %s, %i seats available",Crew.GetCrewTotalNumber(),GetName(),4-Crew.GetCrewTotalNumber()); | |
125 | + return 1; | |
126 | + } | |
127 | + return 0; | |
128 | +} | |
129 | + | |
130 | +void UMmuBase::clbkDrawHUD (int mode, const HUDPAINTSPEC *hps, HDC hDC) | |
131 | +{ | |
132 | + TextOut(hDC, 0, 0, display, strlen(display)); | |
133 | + VESSEL2::clbkDrawHUD(mode, hps, hDC); | |
14 | 134 | } |
15 | 135 | |
16 | 136 | DLLCLBK VESSEL *ovcInit (OBJHANDLE hvessel, int flightmodel) |
@@ -5,4 +5,14 @@ | ||
5 | 5 | UMmuBase (OBJHANDLE hVessel, int flightmodel) |
6 | 6 | : VESSEL2 (hVessel, flightmodel) {} |
7 | 7 | void clbkSetClassCaps (FILEHANDLE cfg); |
8 | + void clbkSaveState(FILEHANDLE scn); | |
9 | + void clbkLoadStateEx (FILEHANDLE scn, void *status); | |
10 | + void clbkPostStep (double simtt, double simdt, double mjd); | |
11 | + int clbkConsumeBufferedKey(DWORD key, bool down, char *kstate); | |
12 | + void clbkDrawHUD (int mode, const HUDPAINTSPEC *hps, HDC hDC); | |
13 | +private: | |
14 | + // UMMU 1.5 DECLARATION | |
15 | + UMMUCREWMANAGMENT Crew; | |
16 | + char display[1024]; | |
17 | + int SelectedUmmuMember; | |
8 | 18 | }; |