See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: [C++] UMMU messages  (Read 2013 times)

0 Members and 1 Guest are viewing this topic.

Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
30 September 2007, 19:20:20
Je n'arrive pas à afficher certains messages UMMU sur le HUD.
Pas de problème pour les noms de l'équipage et le numéro de slot,
ni pour le membre d'équipage sélectionné ou l'état de l'airlock.

Par contre, pour afficher les messages qui était originalement renvoyés ici,
je ne sais pas comment faire:
Code: [Select]
if ((key==OAPI_KEY_E) & ((DockingStatus(0)==1) || (ummudockactive == 0)))
{

int Returned=Crew.EvaCrewMember(Crew.GetCrewNameBySlotNumber(SelectedUmmuMember));

switch(Returned)
{
case TRANSFER_TO_DOCKED_SHIP_OK:
sprintf(SendFocusScreenMessage(),"Transfer to docked ship Ok - %s
transfered",Crew.GetLastEvaedCrewName());SelectedUmmuMember=0;
break;
case EVA_OK:
sprintf(SendFocusScreenMessage(),"EVA OK - %s left the
ship",Crew.GetLastEvaedCrewName());SelectedUmmuMember=0;

break;
case ERROR_NO_ONE_ON_BOARD:
strcpy(SendFocusScreenMessage(),"no one on board, unable to EVA");
break;
case ERROR_AIRLOCK_CLOSED:
strcpy(SendFocusScreenMessage(),"airlock closed, unable to EVA");
break;
case ERROR_DOCKED_SHIP_HAVE_AIRLOCK_CLOSED:
strcpy(SendFocusScreenMessage(),"docked ship's airlock is closed, unable to transfer");
break;
case ERROR_DOCKED_SHIP_IS_FULL:
strcpy(SendFocusScreenMessage(),"docked ship is full, transfer failed");
break;
case ERROR_CREW_MEMBER_NOT_FOUND:
strcpy(SendFocusScreenMessage(),"no crew by this name in ship");
break;
case ERROR_DOCKEDSHIP_DONOT_USE_UMMU:
strcpy(SendFocusScreenMessage(),"Unable, docked ship do not use UMMU");
break;
case ERROR_MISC_ERROR_EVAFAILED:
strcpy(SendFocusScreenMessage(),"Misc error with UMMU See http://orbiter.dansteph.com to
install it again");
break;
}
ISS UMMU affiche ces messages: " Last Message:.......".
Que faut-il faire? Dériver et usurper SendFocusScreenMessage :doubt:
Comment mettre les valeurs retournées par Crew.EvaCrewMember(...)
en condition d'un TextOut dans le DrawHUD étant donné qu'elles sont définies
par #define ...

:help:



Message modifié ( 30-09-2007 19:28 )

------------

no matter.

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #1 - 30 September 2007, 19:38:22
En fait tu touche à rien du systeme et tu dérive juste la sortie comme tu l'a dit:

tu désactive le vidage quand on change de focus:

Code: [Select]
void MonAddon::clbkFocusChanged(bool getfocus,OBJHANDLE hNewVessel,OBJHANDLE hOldVessel)
{
/* Desactivé car ne sert plus à rien vu le HUD...
if(!getfocus)
{
strcpy(oapiDebugString(),"");
}
*/
}


Et à la fin de clbkDrawHud tu fait:

Code: [Select]
SetTextColor (hDC,RGB(0,0,255));
strcpy(cbuf,"Last message:");
TextOut (hDC,5,hps->H-55,cbuf,strlen(cbuf));
TextOut (hDC,5,hps->H-35,cOurMessage,strlen(cOurMessage));

Dan



Message modifié ( 30-09-2007 19:42 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #2 - 30 September 2007, 19:45:09
Ah sorry, faut aussi desactiver l'affichage "debug"...

clbkPostStep:

Code: [Select]
// this below are used by the simple user text interface used in this demo
// see function "SendFocusScreenMessage" below for explaination.
               /*
if(GetHandle()==oapiGetFocusObject())
{
strcpy(oapiDebugString(),cOurMessage);
}
                */


Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
Reply #3 - 30 September 2007, 20:05:13
Oki, merci ;)
EDIT:
Quote
TextOut (hDC,5,hps->H-35,cOurMessage,strlen(cOurMessage));
C'étais vraiment simple pourtant :pfff:



Message modifié ( 01-10-2007 13:18 )

------------

no matter.

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #4 - 02 October 2007, 03:44:33
Quote
no matter a écrit:
C'étais vraiment simple pourtant :pfff:

Bah... ca dépend... quand on a fait le code oui, sinon :)

La "methode" (toujours la methode ;) c'était de cliquer droit sur "SendFocusScreenMessage()" pour voir le corp.

Code: [Select]
char *ShuttlePB::SendFocusScreenMessage()
{
return cOurMessage;
}

Retourne un pointeur char pour nos sprintf et strcpy... Ensuite selectionner "cOurMessage" et faire une recherche
dans "current project"
Ce truc tordu de faire un sprintf sur une fonction "sprintf(MaFonction()" je l'ai pris de martin avec sont oapiDebugString
() ;)

Code: [Select]
ShuttlePB.h(57): char cOurMessage[1000];
UMmuExample.cpp(115): strcpy(cOurMessage,"");
UMmuExample.cpp(237): strcpy(oapiDebugString(),cOurMessage);
UMmuExample.cpp(482):// DON'T forget to initialise cOurMessage in clbksetclasscap or you
UMmuExample.cpp(487): return cOurMessage;

bingo...

La on voit que c'est un char:
char cOurMessage[1000];

La on affiche sur l'ecran Orbiter:
strcpy(oapiDebugString(),cOurMessage);

Donc "cOurMessage" est vraisemblablement le char qui contient nos messages. Reste plus qu'a l'afficher sur le HUD.
(TextOut)

Mais bon... ca m'arrive de rester planté sur des trucs aussi... ;)

Dan



Message modifié ( 03-10-2007 03:21 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #5 - 03 October 2007, 18:55:56
Ouais .... ben ça peut foutre une de ces zone  ton système ... :sick:
Le Debugstring ne fonctionnait plus du tout chez moi :sad:

Quand je mettais ça dans post step, je n'avais plus rien à l'écran en debugging ... :sad:

   if(GetHandle()==oapiGetFocusObject())      
   {
   strcpy(oapiDebugString(),cOurMessage);
   }

Pourquoi celà détourne t'il tout vers ton système ?



Message modifié ( 03-10-2007 19:02 )

« Last Edit: 03 October 2007, 19:46:30 by picto »
Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #6 - 03 October 2007, 19:28:19
pasque c'est le dernier debugstring qui fait foi...
tu ferais comment sinon ? les deux textes superposés ?
l'un après l'autre à chaque image ? (60 fois par secondes) :badsmile:

Dan

« Last Edit: 03 October 2007, 19:46:30 by DanSteph »

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #7 - 03 October 2007, 19:46:30
60 fois par secondes ?

OUAIS !!! 8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o8o


« Last Edit: 03 October 2007, 19:46:30 by picto »
Pic