Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Mar 24, 2016, 3:54:06 PM (9 years ago)
Author:
plehmann
Message:

took the event functions out of the tick function

Location:
code/branches/plehmannFS16
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • code/branches/plehmannFS16/data/gui/scripts/testscript.lua

    r10622 r11152  
    2323if ctrl ~= nil then
    2424
    25   ctrl:eventScheduler("mal", xl,yl,zl, xl,yl,zl, 2)
    26   ctrl:eventScheduler("idle", 1)
    27   ctrl:eventScheduler("ral", xl, yl, zl, 3, 3000, 0, math.pi)
    28   ctrl:eventScheduler("idle", 1)
    29   ctrl:eventScheduler("mal", 0,0,1000, xl,yl,zl, 3)
    30   ctrl:eventScheduler("idle", 1)
    31   ctrl:eventScheduler("chl", xl, yl, zl, xr, yr, zr, 2)
    32   ctrl:eventScheduler("idle", 1)
    33   ctrl:eventScheduler("mal", xr + 600,yr,zr, xr,yr,zr, 4)
    34   ctrl:eventScheduler("idle", 1)
    35   ctrl:eventScheduler("chl", xr, yr, zr, xl, yl, zl, 3)
    36   ctrl:eventScheduler("idle", 1)
    37   ctrl:eventScheduler("spi", xm,ym,zm, 0,0,0, 4)
    38   ctrl:eventScheduler("idle", 1)
     25  ctrl:eventScheduler("mal", xl,yl,zl, xl,yl,zl, 10)
     26  -- ctrl:eventScheduler("ral", xl, yl, zl, 3, 3000, 0, math.pi)
     27  -- ctrl:eventScheduler("idle", 1)
     28  -- ctrl:eventScheduler("mal", 0,0,1000, xl,yl,zl, 3)
     29  -- ctrl:eventScheduler("idle", 1)
     30  -- ctrl:eventScheduler("chl", xl, yl, zl, xr, yr, zr, 2)
     31  -- ctrl:eventScheduler("idle", 1)
     32  -- ctrl:eventScheduler("mal", xr + 600,yr,zr, xr,yr,zr, 4)
     33  -- ctrl:eventScheduler("idle", 1)
     34  -- ctrl:eventScheduler("chl", xr, yr, zr, xl, yl, zl, 3)
     35  -- ctrl:eventScheduler("idle", 1)
     36  -- ctrl:eventScheduler("spi", xm,ym,zm, 0,0,0, 4)
     37  -- ctrl:eventScheduler("idle", 1)
    3938
    4039end
  • code/branches/plehmannFS16/data/levels/scriptController.oxw

    r10622 r11152  
    5454    </StaticEntity>
    5555
     56
     57    <StaticEntity position  = "3000,0,0" mass=10000 collisionType=static >
     58      <attached>
     59        <Model mesh="cube_green.mesh" mass=10 position="0,0,0" scale=10 />
     60      </attached>
     61    </StaticEntity>
     62
     63    <StaticEntity position  = "2000,0,0" mass=10000 collisionType=static >
     64      <attached>
     65        <Model mesh="cube_green.mesh" mass=10 position="0,0,0" scale=10 />
     66      </attached>
     67    </StaticEntity>
     68
     69    <StaticEntity position  = "2500,500,0" mass=10000 collisionType=static >
     70      <attached>
     71        <Model mesh="cube_green.mesh" mass=10 position="0,0,0" scale=10 />
     72      </attached>
     73    </StaticEntity>
     74
    5675<!-- ControllerDirector waits for the event takeControl to attach a new Controller -->
    57     <ControllerDirector position="0,0,0" scriptname="presentation">
     76    <ControllerDirector position="0,0,0" scriptname="testscript">
    5877        <events>
    5978            <takeControl>
  • code/branches/plehmannFS16/src/orxonox/controllers/ScriptController.cc

    r11141 r11152  
    3434  * Command             | Abbreviation | Parameter 1          | '' 2     | '' 3    | '' 4                 | '' 5     | '' 6     | '' 7
    3535  *
    36   * "Move And Look"     | mal          | GoTo X Coordinate    | '' Y ''  | '' Z '' | LookAt X Coordinate  |  '' Y '' |  '' Y '' | Duration
    37   * "Rotate And Look"   | ral          | GoTo X Coordinate    | '' Y ''  | '' Z '' | Axis (1=x, 2=z, 3=z) |     -    |     -    | Duration
    38   * "Spiral"            | spi          | GoTo X Coordinate    | '' Y ''  | '' Z '' |          -           |     -    |     -    | Duration
    39   * "Transition Look"   | chl          | From X Coordinate    | '' Y ''  | '' Z '' | To X Coordinate      |  '' Y '' |  '' Y '' | Duration
     36  * "Move And Look"     | mal          | GoTo X Coordinate    |  '' Y ''  | '' Z '' | LookAt X Coordinate  |  '' Y '' |  '' Y '' | Duration
     37  * "Rotate And Look"   | ral          | GoTo X Coordinate    |  '' Y ''  | '' Z '' | Axis (1=x, 2=y, 3=z) |     -    |     -    | Duration
     38  * "Spiral"            | spi          | GoTo X Coordinate    |  '' Y ''  | '' Z '' |          -           |     -    |     -    | Duration
     39  * "Transition Look"   | chl          | From X Coordinate    |  '' Y ''  | '' Z '' | To X Coordinate      |  '' Y '' |  '' Y '' | Duration
     40  * "rotate round X crd"| rotX         | anchor coordinate    | angle(rad)|    -    |                      |          |          | Duration
    4041  * "Idle (Do nothing)" | idle         | Duration
    4142  */
     
    9091        /* Output some debugging information */
    9192        orxout(verbose) << "ScriptController: Taking control" << endl;
    92         orxout(verbose) << "This-pointer: " << this << endl;
     93        orxout(verbose) << "This-pointer: " << this << endl; 
    9394
    9495        /* Set the controller ID (the argument here should be nonzero) */
     
    103104         */
    104105        this->entity_->setDestroyWhenPlayerLeft(false);
    105         // uncomment the next line because i just did that for debug
    106         //this->player_->pauseControl();
     106        this->player_->stopTemporaryControl();
    107107        this->entity_->setController(this);
    108108        this->setControllableEntity(this->entity_);
    109         this->entity_->mouseLook();
    110         this->entity_->setVisible(false);
     109        //this->entity_->mouseLook();
     110        //this->entity_->setVisible(false);
    111111       
    112112        // TODO take the human Controllers control  dont forget to give it back in the destructor
     
    204204        {
    205205          // Abbreviation for "spiral" (rotation + translation)
    206           if (this->currentEvent.fctName == "spi") {
    207 
    208             // Need to know a perpendicular basis to the translation vector:
     206          if (this->currentEvent.fctName == "spi")
     207          {
     208              spi(dl); // call the external function
     209          }
     210
     211          // Abbreviation for "rotate and look"
     212          else if (this->currentEvent.fctName == "ral")
     213          {
     214              ral(dl); 
     215          }
     216          else if( this->currentEvent.fctName == "mal" )
     217          {
     218              mal(dl);
     219          }
     220          else if( this->currentEvent.fctName == "chl" )
     221          {
     222              chl(dl);
     223          }
     224
     225
     226          /* Force mouse look */
     227          if( this->entity_->isInMouseLook() == false )
     228            this->entity_->mouseLook();
     229        }
     230    }
     231
     232    void ScriptController::eventScheduler(std::string instruction,
     233      float x1, float y1, float z1,
     234      float x2, float y2, float z2,
     235      float duration, float executionTime)
     236    {
     237      /* put data (from LUA) into time-sorted eventList*/
     238      /* Nimmt den befehl und die argumente aus luascript und ertellt einen
     239       * struct pro event, diese structs werden sortiert nach eventTime
     240       */
     241      struct event tmp;
     242
     243      /* Fill the structure with all the provided information */
     244      tmp.fctName = instruction;
     245
     246      //tmp.x1 = x1; tmp.y1 = y1; tmp.z1 = z1;
     247      //tmp.x2 = x2; tmp.y2 = y2; tmp.z2 = z2;
     248      tmp.v1 = Vector3(x1,y1,z1);
     249      tmp.v2 = Vector3(x2,y2,z2);
     250
     251      // the parameters are not required to be vector coordinates!
     252      // for convenience they are however stored twice if they have some kind of different meaning
     253      tmp.a = x1;
     254      tmp.b = y1;
     255      tmp.c = z1;
     256      tmp.d = x2;
     257      tmp.e = y2;
     258      tmp.f = z2;
     259
     260      tmp.duration = duration;
     261
     262      /* This is kind of a hack. If we hit the function idle all we want to do is
     263         advance event execution time, not schedule anything */
     264      if (instruction == "idle") {
     265        tmp.eventTime = this->prevEventTime;
     266        this->prevEventTime += x1;
     267        return;
     268      } else {
     269        tmp.eventTime = this->prevEventTime;
     270        this->prevEventTime += duration;
     271      }
     272
     273      /* Add the created event to the event list */
     274      if(eventList.size()==0)
     275      { /* The list is still empty, just add it */
     276        orxout(verbose) << "eventList empty (01)" << endl;
     277        eventList.insert(eventList.begin(), tmp);
     278        this->eventno += 1;
     279        return; /* Nothing more to do, the event was added */
     280      }
     281
     282      /* Event was not added yet since the list was not empty. Walk through
     283       * the list of events and add it so that the events are correctly in
     284       * order.
     285       */
     286      for (std::vector<event>::iterator it=eventList.begin(); it<eventList.end(); it++)
     287      { if(tmp.eventTime < it->eventTime)
     288        { eventList.insert(it,tmp);
     289          this->eventno += 1;
     290          //orxout()<<"new event added"<<endl;
     291          return;
     292        }
     293      }
     294
     295      /* If the event was still not added here, it belongs in the end of the list */
     296      eventList.insert(eventList.end(), tmp);
     297      this->eventno += 1;
     298
     299    }
     300
     301    // Event Functions
     302
     303    void ScriptController::spi(float dl)
     304    {
     305   
     306                // Need to know a perpendicular basis to the translation vector:
    209307            // Given (a, b, c) we chose (b, -a, 0)norm and (0, c, -b)norm
    210308            // Currently we set a fix rotational radius of 400
     
    224322            delete ortho1;
    225323            delete ortho2;
    226           }
    227 
    228           // Abbreviation for "rotate and look"
    229           if (this->currentEvent.fctName == "ral")
    230           {
     324
     325    }
     326
     327    void ScriptController::ral(float dl)
     328    {
    231329            // Specify the axis
    232330            Vector3 a;
     
    253351            /* Look at the specified position */
    254352            this->entity_->lookAt(this->currentEvent.v1);
    255           }
    256           else if( this->currentEvent.fctName == "mal" )
    257           {
     353     
     354    }
     355
     356    void ScriptController::mal(float dl)
     357    {
    258358            /* Set the position to the correct place in the trajectory */
    259359            this->entity_->setPosition( (1-dl)*startpos + dl * this->currentEvent.v1);
     
    261361            /* Look at the specified position */
    262362            this->entity_->lookAt(this->currentEvent.v2);
    263           }
    264           else if( this->currentEvent.fctName == "chl" )
    265           {
     363
     364    }
     365
     366    void ScriptController::chl(float dl)
     367    {
    266368            /* Sweep the look from v1 to v2 */
    267369            this->entity_->lookAt( (1-dl)*this->currentEvent.v1 +
    268370              dl * this->currentEvent.v2 );
    269           }
    270 
    271 
    272           /* Force mouse look */
    273           if( this->entity_->isInMouseLook() == false )
    274             this->entity_->mouseLook();
    275         }
    276     }
    277 
    278     void ScriptController::eventScheduler(std::string instruction,
    279       float x1, float y1, float z1,
    280       float x2, float y2, float z2,
    281       float duration, float executionTime)
    282     {
    283       /* put data (from LUA) into time-sorted eventList*/
    284       /* Nimmt den befehl und die argumente aus luascript und ertellt einen
    285        * struct pro event, diese structs werden sortiert nach eventTime
    286        */
    287       struct event tmp;
    288 
    289       /* Fill the structure with all the provided information */
    290       tmp.fctName = instruction;
    291 
    292       //tmp.x1 = x1; tmp.y1 = y1; tmp.z1 = z1;
    293       //tmp.x2 = x2; tmp.y2 = y2; tmp.z2 = z2;
    294       tmp.v1 = Vector3(x1,y1,z1);
    295       tmp.v2 = Vector3(x2,y2,z2);
    296 
    297       // the parameters are not required to be vector coordinates!
    298       // for convenience they are however stored twice if they have some kind of different meaning
    299       tmp.a = x1;
    300       tmp.b = y1;
    301       tmp.c = z1;
    302       tmp.d = x2;
    303       tmp.e = y2;
    304       tmp.f = z2;
    305 
    306       tmp.duration = duration;
    307 
    308       /* This is kind of a hack. If we hit the function idle all we want to do is
    309          advance event execution time, not schedule anything */
    310       if (instruction == "idle") {
    311         tmp.eventTime = this->prevEventTime;
    312         this->prevEventTime += x1;
    313         return;
    314       } else {
    315         tmp.eventTime = this->prevEventTime;
    316         this->prevEventTime += duration;
    317       }
    318 
    319       /* Add the created event to the event list */
    320       if(eventList.size()==0)
    321       { /* The list is still empty, just add it */
    322         orxout(verbose) << "eventList empty (01)" << endl;
    323         eventList.insert(eventList.begin(), tmp);
    324         this->eventno += 1;
    325         return; /* Nothing more to do, the event was added */
    326       }
    327 
    328       /* Event was not added yet since the list was not empty. Walk through
    329        * the list of events and add it so that the events are correctly in
    330        * order.
    331        */
    332       for (std::vector<event>::iterator it=eventList.begin(); it<eventList.end(); it++)
    333       { if(tmp.eventTime < it->eventTime)
    334         { eventList.insert(it,tmp);
    335           this->eventno += 1;
    336           //orxout()<<"new event added"<<endl;
    337           return;
    338         }
    339       }
    340 
    341       /* If the event was still not added here, it belongs in the end of the list */
    342       eventList.insert(eventList.end(), tmp);
    343       this->eventno += 1;
     371
     372    }
     373
     374    void ScriptController::rotX(float dl)
     375    {
     376
    344377
    345378    }
  • code/branches/plehmannFS16/src/orxonox/controllers/ScriptController.h

    r11071 r11152  
    128128            //Vector3 lookAtPosition;
    129129
     130
     131            /* private member functions */
     132
     133            /*spiral event*/
     134            void spi(float dl);
     135
     136            /* rotate and look event */
     137            void ral(float dl);
     138
     139            /* move and look event */
     140            void mal(float dl);
     141
     142            /* transition look event */
     143            void chl(float dl);
     144
     145            /* rotate around x-coordinate event */
     146            void rotX(float dl);
     147
    130148    };// tolua_export
    131149} // tolua_export
Note: See TracChangeset for help on using the changeset viewer.