00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <weapons/WeaponLaser.h>
00022 #include <weapons/AccessoryStore.h>
00023 #include <actions/Laser.h>
00024 #include <engine/ActionController.h>
00025
00026 REGISTER_ACCESSORY_SOURCE(WeaponLaser);
00027
00028 WeaponLaser::WeaponLaser()
00029 {
00030 }
00031
00032 WeaponLaser::~WeaponLaser()
00033 {
00034 }
00035
00036 bool WeaponLaser::parseXML(AccessoryCreateContext &context, XMLNode *accessoryNode)
00037 {
00038 if (!Weapon::parseXML(context, accessoryNode)) return false;
00039
00040 if (!accessoryNode->getNamedChild("minimumhurt", minimumHurt_)) return false;
00041 if (!accessoryNode->getNamedChild("maximumhurt", maximumHurt_)) return false;
00042 if (!accessoryNode->getNamedChild("hurtradius", hurtRadius_)) return false;
00043 if (!accessoryNode->getNamedChild("minimumdistance", minimumDistance_)) return false;
00044 if (!accessoryNode->getNamedChild("maximumdistance", maximumDistance_)) return false;
00045 if (!accessoryNode->getNamedChild("totaltime", totalTime_)) return false;
00046
00047 if (!laserParams_.parseXML(accessoryNode)) return false;
00048
00049 return true;
00050 }
00051
00052 void WeaponLaser::fireWeapon(ScorchedContext &context,
00053 WeaponFireContext &weaponContext, FixedVector &position, FixedVector &velocity)
00054 {
00055 LaserParams *params = new LaserParams(laserParams_);
00056 params->setMinimumHurt(minimumHurt_.getValue(context));
00057 params->setMaximumHurt(maximumHurt_.getValue(context));
00058 params->setHurtRadius(hurtRadius_.getValue(context));
00059 params->setMinimumDistance(minimumDistance_.getValue(context));
00060 params->setMaximumDistance(maximumDistance_.getValue(context));
00061 params->setTotalTime(totalTime_.getValue(context));
00062
00063 context.getActionController().addAction(
00064 new Laser(this, params, position, velocity, weaponContext));
00065 }