PropertyModifiers.c
class PropertyModifiers
{
vector m_RecoilModifiers;
vector m_SwayModifiers;
vector m_SightMisalignment;
float m_BarrelLength;
//ref Timer test_timer;
ItemBase m_OwnerItem;
float m_Weapon
void PropertyModifiers(ItemBase owner)
{
//test_timer = new Timer();
//test_timer.Run(5, this, "Refresh", NULL, true);
m_OwnerItem = owner;
UpdateModifiers();
m_BarrelLength = CalculateBarrelLength(owner);
}
//! Get Barrel Legth in mm
float GetBarrelLength()
{
//return m_BarrelLength * 1000:
return CalculateBarrelLength(m_OwnerItem) * 1000;
}
float CalculateBarrelLength(ItemBase owner)
{
vector usti_hlavne_position = owner.GetSelectionPositionLS( "usti hlavne" );//usti hlavne
vector konec_hlavne_position = owner.GetSelectionPositionLS( "konec hlavne" );//konec hlavne
usti_hlavne_position = owner.ModelToWorld(usti_hlavne_position);
konec_hlavne_position = owner.ModelToWorld(konec_hlavne_position);
return vector.Distance(usti_hlavne_position, konec_hlavne_position);
}
void UpdateModifiers()
{
m_RecoilModifiers = GetModifierRaw(m_OwnerItem, "recoilModifier");
m_SwayModifiers = GetModifierRaw(m_OwnerItem, "swayModifier");
m_SightMisalignment = GetModifierRaw(m_OwnerItem, "sightMisalignmentModifier");
for (int i = 0; i < m_OwnerItem.GetInventory().AttachmentCount(); i++)
{
ItemBase attachment = ItemBase.Cast(m_OwnerItem.GetInventory().GetAttachmentFromIndex(i));
vector temp_value = PropertyModifiers.GetModifierRaw(attachment, "recoilModifier");
m_RecoilModifiers[0] = m_RecoilModifiers[0] * temp_value[0];
m_RecoilModifiers[1] = m_RecoilModifiers[1] * temp_value[1];
m_RecoilModifiers[2] = m_RecoilModifiers[2] * temp_value[2];
temp_value = PropertyModifiers.GetModifierRaw(attachment, "swayModifier");
m_SwayModifiers[0] = m_SwayModifiers[0] * temp_value[0];
m_SwayModifiers[1] = m_SwayModifiers[1] * temp_value[1];
m_SwayModifiers[2] = m_SwayModifiers[2] * temp_value[2];
temp_value = PropertyModifiers.GetModifierRaw(attachment, "sightMisalignmentModifier");
m_SightMisalignment[0] = m_SightMisalignment[0] * temp_value[0];
m_SightMisalignment[1] = m_SightMisalignment[1] * temp_value[1];
m_SightMisalignment[2] = m_SightMisalignment[2] * temp_value[2];
}
}
static vector GetModifierRaw(ItemBase item, string modifier_name, vector value = "1 1 1")
{
if( item.ConfigIsExisting(modifier_name) )
{
value = item.ConfigGetVector(modifier_name);
}
return value;
}
}