Commit MetaInfo

修订版495b47d1edfa49cca7d925bafd829ea6364c67e2 (tree)
时间2009-08-16 01:52:31
作者Face
CommiterFace

Log Message

Implemented simple user interface for base.

更改概述

差异

diff -r 826e69b4b330 -r 495b47d1edfa Orbitersdk/samples/UMMUFB/UMmuBase.cpp
--- a/Orbitersdk/samples/UMMUFB/UMmuBase.cpp Sat Aug 15 18:22:56 2009 +0200
+++ b/Orbitersdk/samples/UMMUFB/UMmuBase.cpp Sat Aug 15 18:52:31 2009 +0200
@@ -2,6 +2,7 @@
22 #define ORBITER_MODULE
33
44 #include "orbitersdk.h"
5+#include "UMmuSDK.h"
56 #include "UMmuBase.h"
67
78 void UMmuBase::clbkSetClassCaps (FILEHANDLE cfg)
@@ -10,7 +11,126 @@
1011 SetSize (0);
1112 SetEmptyMass (0);
1213 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);
14134 }
15135
16136 DLLCLBK VESSEL *ovcInit (OBJHANDLE hvessel, int flightmodel)
diff -r 826e69b4b330 -r 495b47d1edfa Orbitersdk/samples/UMMUFB/UMmuBase.h
--- a/Orbitersdk/samples/UMMUFB/UMmuBase.h Sat Aug 15 18:22:56 2009 +0200
+++ b/Orbitersdk/samples/UMMUFB/UMmuBase.h Sat Aug 15 18:52:31 2009 +0200
@@ -5,4 +5,14 @@
55 UMmuBase (OBJHANDLE hVessel, int flightmodel)
66 : VESSEL2 (hVessel, flightmodel) {}
77 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;
818 };
Show on old repository browser