// Keyboard interface handler int MMU::clbkConsumeDirectKey (char *kstate) { OBJHANDLE hvessel; if (KEYMOD_SHIFT (kstate)) { return 0; // shift combinations are reserved } else if (KEYMOD_CONTROL (kstate)) { // insert ctrl key combinations here } else { // unmodified keys if (KEYDOWN (kstate, OAPI_KEY_E)) { // "End EVA" if (oapiAcceptDelayedKey (OAPI_KEY_E, 1.0)) { char name[256]; char vname[256]; UINT i; strcpy (vname, GetName()); for (i=0;i<strlen(vname)+1;i++) name[i]=0; for (i=0;i<strlen(vname)-4;i++) name[i]=vname[i]; //strncpy (name, vname,strlen(vname)+1-4); hvessel=oapiGetVesselByName(name); if (hvessel != 0) oapiSetFocusObject(hvessel); }; return 1; } } return 0; }
// Callback from Target Selection Input Box bool RVO_DialogFunc::clbkTGT(void *id, char *str, void *usrdata) { OBJHANDLE hTgtV; VESSEL* tv; bool DockFree = false; RVO_LCore* LC = (RVO_LCore*) usrdata; RVO_GCore* GC = LC->GC; RVO_VCore* VC = LC->VC; if (strlen(str) == 0) return true; // Empty string - assume canceled dialog hTgtV = oapiGetVesselByName(str); if (!hTgtV) return true; // String was not a vessel tv = oapiGetVesselInterface(hTgtV); if (!tv) return true; // Couldn't find the vessel interface if (tv == LC->v) return true; // We can't dock with ourself (that would be rude!) // Target accepted strcpy_s(VC->TargetText, 50, tv->GetName()); VC->hTgtV = hTgtV; VC->tv = tv; VC->MaxPorts = VC->tv->DockCount(); for (int i=0; i<VC->MaxPorts; i++) { VC->hDock = VC->tv->GetDockHandle(i); if (!VC->hDock) continue; // Couldn't find the dock?? if (VC->tv->DockingStatus(i)==0) { // dock free DockFree = true; VC->tv->GetDockParams(VC->hDock, VC->rtvdPos, VC->rtvdDir, VC->rtvdRot); VC->CreatePortRotMatrix(VC->rtvPortOri,VC->rtvdDir,VC->rtvdRot); VC->PortNumber = i; break; } } if (!DockFree) { LC->showMessage = true; sprintf_s(LC->Message,"No free ports on %s!", VC->TargetText); VC->PortNumber = -1; VC->hDock = 0; } return true; }
void shipptrs::restoreallships(FILEHANDLE scn) { char *buffer,*member; Parser parser; int length; while (oapiReadScenario_nextline(scn,buffer)) { parser.parseline(buffer); bool ok=parser.getlineelement(0,&member,&length); if (!ok) return; if (strcmp("Ship",member)==0) { if (!parser.getlineelement(1,&member,&length)) return;//return if ship label doesn't exist if (length>30) return;//return if ship label is bad class shipptrs *temp=findship(member); if (temp==NULL) { OBJHANDLE temphandle=oapiGetVesselByName(member); if (temphandle!=NULL) temp=new shipptrs(temphandle); } if (temp!=NULL) temp->restorecurrent(scn); } } }