Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
script_call_briefing.cpp
Go to the documentation of this file.
1 #include "faction_generic.h"
2 #include "cmd/unit_generic.h"
3 #include "mission.h"
4 #include "cmd/briefing.h"
5 
6 varInst* Mission::call_briefing( missionNode *node, int mode )
7 {
8  varInst *viret = NULL;
9 
10  trace( node, mode );
11  if (mode == SCRIPT_PARSE) {
12  string cmd = node->attr_value( "name" );
13  node->script.method_id = module_briefing_map[cmd];
14  }
16  viret = newVarInst( VI_TEMP );
17  viret->type = VAR_VOID; //assumed void except when otherwise so stated
18  if (briefing != NULL || mode != SCRIPT_RUN) {
19  if (method_id == CMT_BRIEFING_addShip) {
20  std::string name = getStringArgument( node, mode, 0 );
21  std::string faction = getStringArgument( node, mode, 1 );
22  float x = getFloatArg( node, mode, 2 );
23  float y = getFloatArg( node, mode, 3 );
24  float z = getFloatArg( node, mode, 4 );
25  if (mode == SCRIPT_RUN) {
26  viret->int_val = briefing->AddStarship( name.c_str(),
28  Vector( x, y, z ) );
29  }
30  viret->type = VAR_INT;
31  } else if (method_id == CMT_BRIEFING_removeShip) {
32  int whichship = (int) getIntArg( node, mode, 0 );
33  if (mode == SCRIPT_RUN)
34  briefing->RemoveStarship( whichship );
35  } else if (method_id == CMT_BRIEFING_enqueueOrder || method_id == CMT_BRIEFING_replaceOrder) {
36  int whichship = (int) getIntArg( node, mode, 0 );
37  float destx = getFloatArg( node, mode, 1 );
38  float desty = getFloatArg( node, mode, 2 );
39  float destz = getFloatArg( node, mode, 3 );
40  float time = getFloatArg( node, mode, 4 );
41  if (mode == SCRIPT_RUN) {
42  if (method_id == CMT_BRIEFING_enqueueOrder)
43  briefing->EnqueueOrder( whichship, Vector( destx, desty, destz ), time );
44  else
45  briefing->OverrideOrder( whichship, Vector( destx, desty, destz ), time );
46  }
47  } else if (method_id == CMT_BRIEFING_getShipPosition) {
48  int whichship = (int) getIntArg( node, mode, 0 );
49  QVector pos;
50  if (mode == SCRIPT_RUN)
51  pos = briefing->GetPosition( whichship ).Cast();
52  viret->type = VAR_OBJECT;
53  viret->objectname = "olist";
54  call_vector_into_olist( viret, pos );
55  } else if (method_id == CMT_BRIEFING_setShipPosition) {
56  int whichship = (int) getIntArg( node, mode, 0 );
57  float destx = getFloatArg( node, mode, 1 );
58  float desty = getFloatArg( node, mode, 2 );
59  float destz = getFloatArg( node, mode, 3 );
60  if (mode == SCRIPT_RUN)
61  briefing->SetPosition( whichship, Vector( destx, desty, destz ) );
62  } else if (method_id == CMT_BRIEFING_terminate) {
63  BriefingEnd();
64  } else if (method_id == CMT_BRIEFING_setCamPosition) {
65  QVector p( getFloatArg( node, mode, 0 ), getFloatArg( node, mode, 1 ), getFloatArg( node, mode, 2 ) );
66  if (mode == SCRIPT_RUN)
67  briefing->cam.SetPosition( p, Vector( 0, 0, 0 ), Vector( 0, 0, 0 ), Vector( 0, 0, 0 ) );
68  } else if (method_id == CMT_BRIEFING_setCamOrientation) {
69  Vector p( getFloatArg( node, mode, 0 ), getFloatArg( node, mode, 1 ), getFloatArg( node, mode, 2 ) );
70  Vector q( getFloatArg( node, mode, 3 ), getFloatArg( node, mode, 4 ), getFloatArg( node, mode, 5 ) );
71  Vector r( getFloatArg( node, mode, 6 ), getFloatArg( node, mode, 7 ), getFloatArg( node, mode, 8 ) );
72  if (mode == SCRIPT_RUN)
73  briefing->cam.SetOrientation( p, q, r );
74  } else if (method_id == CMT_BRIEFING_setCloak) {
75  int whichship = (int) getIntArg( node, mode, 0 );
76  float cloak = getFloatArg( node, mode, 1 );
77  if (mode == SCRIPT_RUN)
78  briefing->SetCloak( whichship, cloak );
79  }
80  }
81  return viret;
82 }
83