00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <weapons/WeaponExplosion.h>
00022 #include <weapons/Accessory.h>
00023 #include <actions/Explosion.h>
00024 #include <engine/ActionController.h>
00025 #include <common/Defines.h>
00026
00027 REGISTER_ACCESSORY_SOURCE(WeaponExplosion);
00028
00029 WeaponExplosion::WeaponExplosion()
00030 {
00031
00032 }
00033
00034 WeaponExplosion::~WeaponExplosion()
00035 {
00036
00037 }
00038
00039 bool WeaponExplosion::parseXML(AccessoryCreateContext &context, XMLNode *accessoryNode)
00040 {
00041 if (!Weapon::parseXML(context, accessoryNode)) return false;
00042
00043 if (!accessoryNode->getNamedChild("size", sizeExp_)) return false;
00044 if (!accessoryNode->getNamedChild("hurtamount", hurtAmountExp_)) return false;
00045
00046 accessoryNode->getNamedChild("explosionshake", shakeExp_, false);
00047 accessoryNode->getNamedChild("createmushroomamount", createMushroomAmountExp_, false);
00048 accessoryNode->getNamedChild("minlife", minLifeExp_, false);
00049 accessoryNode->getNamedChild("maxlife", maxLifeExp_, false);
00050
00051 if (!params_.parseXML(accessoryNode)) return false;
00052
00053 return true;
00054 }
00055
00056 void WeaponExplosion::fireWeapon(ScorchedContext &context,
00057 WeaponFireContext &weaponContext, FixedVector &position, FixedVector &velocity)
00058 {
00059 ExplosionParams *newParams = new ExplosionParams(params_);
00060
00061 newParams->setSize(sizeExp_.getValue(context, params_.getSize()));
00062 newParams->setHurtAmount(hurtAmountExp_.getValue(context, params_.getHurtAmount()));
00063 newParams->setShake(shakeExp_.getValue(context, params_.getShake()));
00064 newParams->setMinLife(minLifeExp_.getValue(context, params_.getMinLife()));
00065 newParams->setMaxLife(maxLifeExp_.getValue(context, params_.getMaxLife()));
00066 newParams->setCreateMushroomAmount(createMushroomAmountExp_.getValue(context, params_.getCreateMushroomAmount()));
00067
00068 Action *action = new Explosion(
00069 position, newParams, this, weaponContext);
00070 context.getActionController().addAction(action);
00071 }
00072