00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <weapons/WeaponLabel.h>
00022 #include <weapons/AccessoryStore.h>
00023
00024 REGISTER_ACCESSORY_SOURCE(WeaponLabel);
00025
00026 WeaponLabel::WeaponLabel()
00027 {
00028
00029 }
00030
00031 WeaponLabel::~WeaponLabel()
00032 {
00033
00034 }
00035
00036 bool WeaponLabel::parseXML(AccessoryCreateContext &context, XMLNode *accessoryNode)
00037 {
00038 if (!Weapon::parseXML(context, accessoryNode)) return false;
00039
00040
00041 std::string label;
00042 if (!accessoryNode->getNamedChild("label", label)) return false;
00043
00044 context.addLabel(label.c_str(), this);
00045
00046
00047 XMLNode *subNode = 0;
00048 if (!accessoryNode->getNamedChild("nextweapon", subNode)) return false;
00049
00050
00051 AccessoryPart *accessory = context.getAccessoryStore().
00052 createAccessoryPart(context, parent_, subNode);
00053 if (!accessory || accessory->getType() != AccessoryPart::AccessoryWeapon)
00054 {
00055 return subNode->returnError("Failed to find sub weapon, not a weapon");
00056 }
00057 nextWeapon_ = (Weapon*) accessory;
00058
00059 context.removeLabel(label.c_str());
00060
00061 return true;
00062 }
00063
00064 void WeaponLabel::fireWeapon(ScorchedContext &context,
00065 WeaponFireContext &weaponContext, FixedVector &position, FixedVector &velocity)
00066 {
00067 nextWeapon_->fireWeapon(context, weaponContext, position, velocity);
00068 }