@@ -655,93 +655,94 @@ void DroneCarrierAIUpdate::aiDoCommand(const AICommandParms* parms)
655655
656656UpdateSleepTime DroneCarrierAIUpdate::update ()
657657{
658- const DroneCarrierAIUpdateModuleData* data = getDroneCarrierAIUpdateModuleData ();
658+ if (!getObject ()->isEffectivelyDead ()) {
659+ const DroneCarrierAIUpdateModuleData* data = getDroneCarrierAIUpdateModuleData ();
659660
660- // initially fill
661- if (!m_initial_spawns) {
662- for (size_t i = 0 ; i < data->m_slots ; i++) {
663- createSpawn ();
661+ // initially fill
662+ if (!m_initial_spawns) {
663+ for (size_t i = 0 ; i < data->m_slots ; i++) {
664+ createSpawn ();
665+ }
666+ m_initial_spawns = true ;
664667 }
665- m_initial_spawns = true ;
666- }
667668
668- UnsignedInt now = TheGameLogic->getFrame ();
669+ UnsignedInt now = TheGameLogic->getFrame ();
669670
670- if (m_rebuild_time != 0 && m_rebuild_time <= now && !is_full ())
671- {
672- if (createSpawn ()) {
673- if (is_full ()) {
674- m_rebuild_time = 0 ;
675- }
676- else {
677- m_rebuild_time = now + data->m_respawn_time ;
671+ if (m_rebuild_time != 0 && m_rebuild_time <= now && !is_full ())
672+ {
673+ if (createSpawn ()) {
674+ if (is_full ()) {
675+ m_rebuild_time = 0 ;
676+ }
677+ else {
678+ m_rebuild_time = now + data->m_respawn_time ;
679+ }
678680 }
679681 }
680- }
681682
682- if (now % 5 == 0 ) {
683+ if (now % 5 == 0 ) {
683684
684- // check for reloading drones each 5th frame
685- Object* carrier = getObject ();
686- if (carrier != nullptr ) {
685+ // check for reloading drones each 5th frame
686+ Object* carrier = getObject ();
687+ if (carrier != nullptr ) {
687688
688- ContainModuleInterface* cmi = carrier->getContain ();
689+ ContainModuleInterface* cmi = carrier->getContain ();
689690
690- if (cmi != nullptr ) {
691- DroneCarrierContain* drone_contain = dynamic_cast <DroneCarrierContain*>(cmi);
692- if (drone_contain != nullptr ) {
693- drone_contain->updateContainedReloadingStatus ();
691+ if (cmi != nullptr ) {
692+ DroneCarrierContain* drone_contain = dynamic_cast <DroneCarrierContain*>(cmi);
693+ if (drone_contain != nullptr ) {
694+ drone_contain->updateContainedReloadingStatus ();
695+ }
694696 }
695697 }
696698 }
697- }
698699
699- Object* my_target = getCurrentVictim ();
700- const Coord3D* my_target_pos = getCurrentVictimPos ();
701- if (targetInRange (my_target) || targetInRange (my_target_pos)) {
702- // send out contained drones
703- deployDrones ();
704-
705- // update orders
706- if (now % 5 == 0 ) { // do every 5th frame
707- switch (m_designatedCommand) {
708- case AICMD_GUARD_POSITION:
709- case AICMD_ATTACK_POSITION:
710- case AICMD_FORCE_ATTACK_OBJECT:
711- case AICMD_ATTACK_OBJECT:
712- case AICMD_ATTACKMOVE_TO_POSITION:
713- propagateOrdersToDrones ();
714- break ;
715- default :
716- break ;
700+ Object* my_target = getCurrentVictim ();
701+ const Coord3D* my_target_pos = getCurrentVictimPos ();
702+ if (targetInRange (my_target) || targetInRange (my_target_pos)) {
703+ // send out contained drones
704+ deployDrones ();
705+
706+ // update orders
707+ if (now % 5 == 0 ) { // do every 5th frame
708+ switch (m_designatedCommand) {
709+ case AICMD_GUARD_POSITION:
710+ case AICMD_ATTACK_POSITION:
711+ case AICMD_FORCE_ATTACK_OBJECT:
712+ case AICMD_ATTACK_OBJECT:
713+ case AICMD_ATTACKMOVE_TO_POSITION:
714+ propagateOrdersToDrones ();
715+ break ;
716+ default :
717+ break ;
718+ }
717719 }
718720 }
719- }
720721
721- // Check if a drone is approaching and if a door needs to open or close
722- if (data->m_drones_enter_main_door && now % 2 == 0 ) {
723- // check every 2nd frame
722+ // Check if a drone is approaching and if a door needs to open or close
723+ if (data->m_drones_enter_main_door && now % 2 == 0 ) {
724+ // check every 2nd frame
724725
725- bool dronesApproaching = areDronesApproaching ();
726+ bool dronesApproaching = areDronesApproaching ();
726727
727- if (!m_doorOpen && dronesApproaching) {
728- // Open the door
729- m_doorOpen = true ;
730- Drawable* draw = getObject ()->getDrawable ();
731- if (draw) {
732- draw->clearAndSetModelConditionState (MODELCONDITION_CARRIER_DOOR_CLOSING, MODELCONDITION_CARRIER_DOOR_OPENING);
728+ if (!m_doorOpen && dronesApproaching) {
729+ // Open the door
730+ m_doorOpen = true ;
731+ Drawable* draw = getObject ()->getDrawable ();
732+ if (draw) {
733+ draw->clearAndSetModelConditionState (MODELCONDITION_CARRIER_DOOR_CLOSING, MODELCONDITION_CARRIER_DOOR_OPENING);
734+ }
735+ }
736+ else if (m_doorOpen && !dronesApproaching) {
737+ // Close the door
738+ m_doorOpen = false ;
739+ Drawable* draw = getObject ()->getDrawable ();
740+ if (draw) {
741+ draw->clearAndSetModelConditionState (MODELCONDITION_CARRIER_DOOR_OPENING, MODELCONDITION_CARRIER_DOOR_CLOSING);
742+ }
733743 }
734- }
735- else if (m_doorOpen && !dronesApproaching) {
736- // Close the door
737- m_doorOpen = false ;
738- Drawable* draw = getObject ()->getDrawable ();
739- if (draw){
740- draw->clearAndSetModelConditionState (MODELCONDITION_CARRIER_DOOR_OPENING, MODELCONDITION_CARRIER_DOOR_CLOSING);
741- }
742744 }
743745 }
744-
745746 return AIUpdateInterface::update ();
746747}
747748
0 commit comments