// Default function to return the current weapon (Pre-ref()'d) Weapon* SimpleStoresMgr::getCurrentWeapon() { Weapon* wpn = nullptr; if ( isWeaponDeliveryMode(A2A) ) { wpn = getNextMissile(); // We need a missile } else { wpn = getNextBomb(); // We need a bomb } return wpn; }
//------------------------------------------------------------------------------ // Manage the trigger switch event //------------------------------------------------------------------------------ bool SimpleStoresMgr::onTriggerSwEvent(const base::Boolean* const sw) { Gun* g = getGun(); // Get the primary gun if (g != nullptr) { // Single Burst? bool burst = (sw == nullptr); // Firing? bool fire = false; if ( isWeaponDeliveryMode(A2A) || isWeaponDeliveryMode(A2G) ) { if ( burst ) fire = true; else fire = sw->getBoolean(); } // Pass the control to the gun g->fireControl(fire, burst); } return true; }
//------------------------------------------------------------------------------ // Manage the weapon release event //------------------------------------------------------------------------------ bool SimpleStoresMgr::onWpnRelEvent(const base::Boolean* const sw) { // Weapon release follows the switch or by default is true bool wpnRel = true; if (sw != nullptr) wpnRel = sw->getBoolean(); if ( wpnRel && (isWeaponDeliveryMode(A2A) || isWeaponDeliveryMode(A2G)) ) { // A/A missiles and A/G bombs only ... Weapon* wpn = getCurrentWeapon(); if (wpn != nullptr) { // release the weapon --- // if successful, returns a pre-ref()'d pointer to the flyout weapon. Weapon* flyout = releaseWeapon(wpn); if (flyout != nullptr) { if (isWeaponDeliveryMode(A2A)) { // --- // Setup the guidance ... // --- Track* trk = getNextTarget(); if (trk != nullptr) { Player* tgt = trk->getTarget(); TrackManager* tm = nullptr; RfSensor* sm = flyout->getSensor(); if (sm != nullptr) tm = sm->getTrackManager(); if (tm != nullptr) { // Give a copy of the track to the weapon's track manager Track* newTrk = trk->clone(); tm->clearTracksAndQueues(); tm->addTrack(newTrk); flyout->setTargetTrack(newTrk,true); } else if (tgt != nullptr) { // No sensor -- fake it and just track the target flyout->setTargetPlayer(tgt,true); } else { // no target track } trk->setWeaponReleased(true); } } // Set the weapon release timer setWeaponReleaseTimer(1.0); } if (flyout != nullptr) flyout->unref(); // unref() the flyout wpn->unref(); wpn = nullptr; } } else { setWeaponReleaseTimer(0); } return true; }