Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 6728


Ignore:
Timestamp:
Apr 15, 2010, 1:15:11 PM (15 years ago)
Author:
dafrick
Message:

No more seg faults with pickups (at least that's what I hope. ;))

Location:
code/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • code/trunk/data/levels/pickup.oxw

    r6712 r6728  
    120120    </PickupSpawner>
    121121   
     122    <PickupSpawner position="0,-50,-100" triggerDistance="10" respawnTime="30" maxSpawnedItems="10">
     123        <pickup>
     124            <HealthPickup activationType=immediate durationType=continuous healthRate=10 health=100 />
     125        </pickup>
     126    </PickupSpawner>
     127   
    122128  </Scene>
    123129</Level>
  • code/trunk/src/modules/pickup/Pickup.h

    r6709 r6728  
    135135            virtual bool createSpawner(void); //!< Facilitates the creation of a PickupSpawner upon dropping of the Pickupable.
    136136
    137             bool startPickupTimer(float durationTime);
     137            bool startPickupTimer(float durationTime); //!< Starts the pickup duration timer.
     138            /**
     139            @brief Get your Timer.
     140            @return Returns a pointer to the Timer.
     141            */
     142            inline Timer* getTimer(void)
     143                { return &this->durationTimer_; }
    138144
     145            /**
     146            @brief The callback method for the Timer.
     147                   Can be overloaded to implement desired functionality.
     148            */
    139149            virtual void pickupTimerCallback(void) {}
    140150
     
    164174            pickupDurationType::Value durationType_; //!< The duration type of the pickup.
    165175
     176            //! Strings for the activation and duration types.
    166177            static const std::string activationTypeImmediate_s;
    167178            static const std::string activationTypeOnUse_s;
  • code/trunk/src/modules/pickup/PickupManager.cc

    r6725 r6728  
    198198    {
    199199        Pickupable* pickup = carrier->getPickup(index);
    200         carrier->drop(pickup);
     200        if(pickup != NULL)
     201            carrier->drop(pickup);
    201202    }
    202203   
     
    204205    {
    205206        Pickupable* pickup = carrier->getPickup(index);
    206         pickup->setUsed(use);
     207        if(pickup != NULL)
     208            pickup->setUsed(use);
    207209    }
    208210   
  • code/trunk/src/modules/pickup/items/SpeedPickup.cc

    r6713 r6728  
    141141        if(this->isUsed())
    142142        {
    143             this->startPickupTimer(this->getDuration());
     143            if(!this->getTimer()->isActive() && this->getTimer()->getRemainingTime() > 0.0f)
     144            {
     145                this->getTimer()->unpauseTimer();
     146            }
     147            else
     148            {
     149                this->startPickupTimer(this->getDuration());
     150            }
    144151            engine->setSpeedAdd(this->getSpeedAdd());
    145152            engine->setSpeedMultiply(this->getSpeedMultiply());
     
    152159            if(this->isOnce())
    153160            {
    154                 this->destroy();
     161                if(!this->getTimer()->isActive() && this->getTimer()->getRemainingTime() == this->getDuration())
     162                {
     163                    //TODO: Potentially dangerous, not only for this pickup. Think long and hard about this!!!
     164                    this->destroy();
     165                }
     166                else
     167                {
     168                    this->getTimer()->pauseTimer();
     169                }
    155170            }
    156171        }
Note: See TracChangeset for help on using the changeset viewer.