Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Apr 9, 2014, 9:50:45 PM (10 years ago)
Author:
noep
Message:

ShipParts can "die" and detach the corresponding Entity while doing so. Issue: The Entity being detached while a hit on a collisionshape is being handled causes a runtime-error.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/modularships/src/orxonox/items/ShipPart.cc

    r10019 r10023  
    3737#include "Item.h"
    3838#include "worldentities/pawns/Pawn.h"
     39#include "worldentities/pawns/ModularSpaceShip.h"
    3940#include "gametypes/Gametype.h"
    4041#include "worldentities/StaticEntity.h"
     
    5657    }
    5758
     59    void ShipPart::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     60    {
     61        SUPER(ShipPart, XMLPort, xmlelement, mode);
     62
     63        XMLPortParam(ShipPart, "health", setHealth, getHealth, xmlelement, mode).defaultValues(100);
     64        XMLPortParam(ShipPart, "maxhealth", setMaxHealth, getMaxHealth, xmlelement, mode).defaultValues(200);
     65        XMLPortParam(ShipPart, "initialhealth", setInitialHealth, getInitialHealth, xmlelement, mode).defaultValues(100);
     66
     67        XMLPortParam(ShipPart, "damageabsorption", setDamageAbsorption, getDamageAbsorption, xmlelement, mode).defaultValues(0.5);
     68
     69        /*
     70        XMLPortParam(ShipPart, "shieldhealth", setShieldHealth, getShieldHealth, xmlelement, mode).defaultValues(0);
     71        XMLPortParam(ShipPart, "initialshieldhealth", setInitialShieldHealth, getInitialShieldHealth, xmlelement, mode).defaultValues(0);
     72        XMLPortParam(ShipPart, "maxshieldhealth", setMaxShieldHealth, getMaxShieldHealth, xmlelement, mode).defaultValues(100);
     73        XMLPortParam(ShipPart, "shieldabsorption", setShieldAbsorption, getShieldAbsorption, xmlelement, mode).defaultValues(0);
     74
     75        XMLPortParam(ShipPart, "sShipPartparticlesource", setSShipPartParticleSource, getSShipPartParticleSource, xmlelement, mode);
     76        XMLPortParam(ShipPart, "sShipPartparticleduration", setSShipPartParticleDuration, getSShipPartParticleDuration, xmlelement, mode).defaultValues(3.0f);
     77        XMLPortParam(ShipPart, "explosionchunks", setExplosionChunks, getExplosionChunks, xmlelement, mode).defaultValues(7);
     78
     79        XMLPortParam(ShipPart, "reloadrate", setReloadRate, getReloadRate, xmlelement, mode).defaultValues(0);
     80        XMLPortParam(ShipPart, "reloadwaittime", setReloadWaitTime, getReloadWaitTime, xmlelement, mode).defaultValues(1.0f);
     81
     82        XMLPortParam(ShipPart, "explosionSound",  setExplosionSound,  getExplosionSound,  xmlelement, mode);
     83
     84        XMLPortParam ( RadarViewable, "radarname", setRadarName, getRadarName, xmlelement, mode );
     85        */
     86    }
     87
     88    void ShipPart::death()
     89    {
     90        this->parent_->removeShipPart(this);
     91    }
    5892
    5993    /**
     
    112146    {
    113147        this->damageAbsorption_ = value;
     148    }
     149
     150    void ShipPart::setParent(ModularSpaceShip* ship)
     151    {
     152        this->parent_ = ship;
    114153    }
    115154
     
    152191            }
    153192        }
     193        if (this->health_ < 0)
     194            this->death();
     195        orxout() << "Health of ShipPart " << this->getName() << " is " << this->getHealth() << endl;
    154196    }
    155197
Note: See TracChangeset for help on using the changeset viewer.