示例#1
0
// 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;
}
示例#2
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;

}
示例#3
0
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);
		}
	}
}