Mass: implement BL attachment writing.
Needs testing, though.
This commit is contained in:
parent
ce0ca07afc
commit
47520b89e3
1 changed files with 89 additions and 1 deletions
|
@ -237,7 +237,95 @@ void Mass::getBulletLauncherAttachments() {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Mass::writeBulletLauncherAttachments() -> bool {
|
auto Mass::writeBulletLauncherAttachments() -> bool {
|
||||||
return false;
|
auto unit_data = _mass->at<GenericStructProperty>("UnitData"_s);
|
||||||
|
if(!unit_data) {
|
||||||
|
_state = State::Invalid;
|
||||||
|
_lastError = "No unit data in " + _filename;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto attach_style_prop = unit_data->at<ByteProperty>("WeaponBLAttachmentStyle_65_5943FCE8406F18D2C3F69285EB23A699"_s);
|
||||||
|
auto attach_array = unit_data->at<ArrayProperty>("WeaponBLAttachment_61_442D08F547510A4CEE1501BBAF297BA0"_s);
|
||||||
|
|
||||||
|
if(!attach_style_prop && !attach_array) {
|
||||||
|
_armour.blAttachmentStyle = BulletLauncherAttachmentStyle::NotFound;
|
||||||
|
_lastError = "No attachment properties to write to in " + _filename;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(attach_style_prop && !attach_array) {
|
||||||
|
_armour.blAttachmentStyle = BulletLauncherAttachmentStyle::NotFound;
|
||||||
|
_state = State::Invalid;
|
||||||
|
_lastError = "Couldn't find the attachments in " + _filename;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(attach_array->items.size() == _weapons.bulletLaunchers.size() &&
|
||||||
|
attach_array->items.size() == _armour.blAttachment.size())
|
||||||
|
{
|
||||||
|
for(UnsignedInt i = 0; i < attach_array->items.size(); i++) {
|
||||||
|
auto attachment_prop = attach_array->at<GenericStructProperty>(i);
|
||||||
|
auto& attachment = _armour.blAttachment[i];
|
||||||
|
|
||||||
|
auto& socket = attachment_prop->at<StringProperty>("Socket_9_B9DBF30D4A1F0032A2BE2F8B342B35A9"_s)->value;
|
||||||
|
switch(attachment.socket) {
|
||||||
|
#define c(enumerator, strenum, name) case BulletLauncherSocket::enumerator: socket = strenum; break;
|
||||||
|
#include "../Maps/BulletLauncherSockets.hpp"
|
||||||
|
#undef c
|
||||||
|
default:
|
||||||
|
_lastError = "Invalid socket type."_s;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto rel_loc_prop = attachment_prop->at<VectorStructProperty>("RelativeLocation_10_2F6E75DF4C40622658340E9A22D38B02"_s);
|
||||||
|
rel_loc_prop->x = attachment.relativeLocation.x();
|
||||||
|
rel_loc_prop->y = attachment.relativeLocation.y();
|
||||||
|
rel_loc_prop->z = attachment.relativeLocation.z();
|
||||||
|
auto off_loc_prop = attachment_prop->at<VectorStructProperty>("OffsetLocation_11_F42B3DA3436948FF85752DB33722382F"_s);
|
||||||
|
off_loc_prop->x = attachment.offsetLocation.x();
|
||||||
|
off_loc_prop->y = attachment.offsetLocation.y();
|
||||||
|
off_loc_prop->z = attachment.offsetLocation.z();
|
||||||
|
auto rel_rot_prop = attachment_prop->at<VectorStructProperty>("RelativeRotation_12_578140464621245132CFF2A2AD85E735"_s);
|
||||||
|
rel_rot_prop->x = attachment.relativeRotation.x();
|
||||||
|
rel_rot_prop->y = attachment.relativeRotation.y();
|
||||||
|
rel_rot_prop->z = attachment.relativeRotation.z();
|
||||||
|
auto off_rot_prop = attachment_prop->at<VectorStructProperty>("OffsetRotation_13_B5980BCD47905D842D1490A1A520B064"_s);
|
||||||
|
off_rot_prop->x = attachment.offsetRotation.x();
|
||||||
|
off_rot_prop->y = attachment.offsetRotation.y();
|
||||||
|
off_rot_prop->z = attachment.offsetRotation.z();
|
||||||
|
auto rel_scale_prop = attachment_prop->at<VectorStructProperty>("RelativeScale_16_37BC80EF42699F79533F7AA7B3094E38"_s);
|
||||||
|
rel_scale_prop->x = attachment.relativeScale.x();
|
||||||
|
rel_scale_prop->y = attachment.relativeScale.y();
|
||||||
|
rel_scale_prop->z = attachment.relativeScale.z();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!attach_style_prop) {
|
||||||
|
attach_style_prop = new ByteProperty;
|
||||||
|
attach_style_prop->name.emplace("WeaponBLAttachmentStyle_65_5943FCE8406F18D2C3F69285EB23A699"_s);
|
||||||
|
attach_style_prop->enumType = "enuBLAttachmentStyle"_s;
|
||||||
|
ByteProperty::ptr prop{attach_style_prop};
|
||||||
|
arrayAppend(unit_data->properties, std::move(prop));
|
||||||
|
}
|
||||||
|
|
||||||
|
auto& attach_style = attach_style_prop->enumValue;
|
||||||
|
switch(_armour.blAttachmentStyle) {
|
||||||
|
#define c(enumerator, strenum) case BulletLauncherAttachmentStyle::enumerator: \
|
||||||
|
attach_style = strenum; \
|
||||||
|
break;
|
||||||
|
#include "../Maps/BulletLauncherAttachmentStyles.hpp"
|
||||||
|
#undef c
|
||||||
|
default:
|
||||||
|
_lastError = "Unknown BL attachment style.";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!_mass->saveToFile()) {
|
||||||
|
_lastError = _mass->lastError();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Mass::armourCustomStyles() -> Containers::ArrayView<CustomStyle> {
|
auto Mass::armourCustomStyles() -> Containers::ArrayView<CustomStyle> {
|
||||||
|
|
Loading…
Reference in a new issue