// Call whenever the selections change to re initialise drive mode. // void driveSelectionChanged(void) { if(driveModeActive()) { if(psDrivenDroid) { ChangeDriver(); StartDriverMode(NULL); } } }
// Call whenever the selections change to re initialise drive mode. // void driveSelectionChanged(void) { if(driveModeActive()) { if(psDrivenDroid) { // StopDriverMode(); ChangeDriver(); StartDriverMode(NULL); driveTacticalSelectionChanged(); } } }
// Call this whenever a droid gets killed or removed. // returns true if ok, returns false if resulted in driving mode being stopped, ie could'nt find // a selected droid to drive. // bool driveDroidKilled(DROID *psDroid) { if(driveModeActive()) { if(psDroid == psDrivenDroid) { ChangeDriver(); psDrivenDroid = NULL; DeSelectDroid(psDroid); if(!StartDriverMode(psDroid)) { return false; } } } return true; }
// Call once per frame. // void driveUpdate(void) { DROID *psDroid; PROPULSION_STATS *psPropStats; AllInRange = true; if(DirectControl) { if(psDrivenDroid != NULL) { if(bMultiMessages && (driveBumpTime < gameTime)) // send latest info about driven droid. { sendDroidInfo(psDrivenDroid, DORDER_MOVE, psDrivenDroid->pos.x, psDrivenDroid->pos.y, NULL, NULL, 0, 0, 0, false); } //TO BE DONE: //clear the order on taking over the droid, to stop attacks.. //send some sort of message when droids stopo and get inrange. // Check the driven droid is still selected if(psDrivenDroid->selected == false) { // if it's not then reset the driving system. driveSelectionChanged(); return; } // Update the driven droid. if(driveControl(psDrivenDroid)) { // If control did something then force the droid's move status. if(psDrivenDroid->sMove.Status != MOVEDRIVE) { psDrivenDroid->sMove.Status = MOVEDRIVE; ASSERT( (psDrivenDroid->droidType != DROID_TRANSPORTER),"Tried to control a transporter" ); driveDir = UNDEG(psDrivenDroid->rot.direction); } DoFollowRangeCheck = true; } // Is the driven droid under user control? if(psDrivenDroid->sMove.Status == MOVEDRIVE) { // Is it a command droid if( (psDrivenDroid->droidType == DROID_COMMAND) && (psDrivenDroid->psGroup != NULL) ) { driveMoveCommandFollowers(psDrivenDroid); } for(psDroid = apsDroidLists[selectedPlayer]; psDroid; psDroid = psDroid->psNext) { psPropStats = asPropulsionStats + psDroid->asBits[COMP_PROPULSION].nStat; if( (psDroid->selected) && (psDroid != psDrivenDroid) && (psDroid->droidType != DROID_TRANSPORTER) && //((psPropStats->propulsionType != PROPULSION_TYPE_LIFT) || (psDroid->droidType == DROID_CYBORG)) ) { ((psPropStats->propulsionType != PROPULSION_TYPE_LIFT) || cyborgDroid(psDroid)) ) { // Send new orders to it's followers. driveMoveFollower(psDroid); } } } if(AllInRange) { DoFollowRangeCheck = false; } if(driveBumpTime < gameTime) { // Send next order in 1 second. driveBumpTime = gameTime+GAME_TICKS_PER_SEC; } } else { if(StartDriverMode(NULL) == false) { // nothing } } } }