123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- //! gas mask base
- class MaskBase extends Mask_Base
- {
- float m_LowFilterEventTime;
-
- override bool IsGasMask()
- {
- return true;
- }
-
- override array<int> GetEffectWidgetTypes()
- {
- return {EffectWidgetsTypes.MASK_OCCLUDER, EffectWidgetsTypes.MASK_BREATH};
- }
-
- override bool AllowFoodConsumption()
- {
- return false;
- }
-
- override void OnDebugSpawn()
- {
- GetInventory().CreateInInventory("GasMask_Filter");
- }
-
- EntityAI GetExternalFilter()
- {
- return FindAttachmentBySlotName("GasMaskFilter");
- }
-
- //! has either external or integrated non-empty non-ruined filter ?
- bool HasValidFilter()
- {
- ItemBase filter = ItemBase.Cast(GetExternalFilter());
- if (filter && !filter.IsRuined() && filter.GetQuantity() > 0)
- return true;
- else if (GetQuantity() > 0 && !IsRuined())
- return true;
- return false;
- }
-
- float GetFilterQuantityMax()
- {
- ItemBase filter = ItemBase.Cast(GetExternalFilter());
- if (filter) //mask can have a filter, and filter is attached
- return filter.GetQuantityMax();
- else if (HasQuantity())//filter was not attached, checking if mask has internal filter
- return GetQuantityMax();
-
- //mask does not have a filter attached nor does it have internal filter, max quantity can't be obtained
- return 0;
- }
-
- float GetFilterQuantity()
- {
- ItemBase filter = ItemBase.Cast(GetExternalFilter());
- if (filter)
- return filter.GetQuantity();
- else
- return GetQuantity();
- }
-
- float GetFilterQuantity01()
- {
- if (!HasValidFilter())
- {
- return 0;
- }
-
- ItemBase filter = ItemBase.Cast(GetExternalFilter());
- float quantity, quantityMax;
-
- if (filter)
- {
- quantity = filter.GetQuantity();
- quantityMax = filter.GetQuantityMax();
- }
- else
- {
- quantity = GetQuantity();
- quantityMax = GetQuantityMax();
- }
-
- return Math.InverseLerp(0, quantityMax, quantity);
- }
-
- bool IsExternalFilterAttached()
- {
- return ItemBase.Cast(FindAttachmentBySlotName("GasMaskFilter")) != null;
- }
-
- bool HasIntegratedFilter()
- {
- return HasQuantity();
- }
-
- bool CanHaveExternalFilter()
- {
- return !HasIntegratedFilter();
- }
-
- bool ConsumeQuantity(float quantity, PlayerBase consumer_player)
- {
- ItemBase filter = ItemBase.Cast(FindAttachmentBySlotName("GasMaskFilter"));
- ItemBase itemToConsume = null;
-
- if (HasQuantity() && GetQuantity() > 0)
- {
- itemToConsume = this;//this mask itself has quantity(masks with integrated, non-attached filter)
- }
- else if (HasValidFilter())
- {
- itemToConsume = filter;
- }
- if (itemToConsume)
- {
- itemToConsume.AddQuantity(-quantity);
- OnQuantityConsumed(itemToConsume, consumer_player, quantity);
- return true;
- }
-
- return false;
- }
- void OnQuantityConsumed(notnull ItemBase filter, PlayerBase consumer_player) {};
-
- void OnQuantityConsumed(notnull ItemBase filter, PlayerBase consumer_player, float quantity)
- {
- float damage = quantity * filter.GetFilterDamageRatio();
- filter.AddHealth("","", -damage);
- }
-
- override protected void InitGlobalExclusionValues()
- {
- super.InitGlobalExclusionValues();
-
- AddSingleExclusionValueGlobal(EAttExclusions.EXCLUSION_MASK_2);
-
- AddSingleExclusionValueGlobal(EAttExclusions.EXCLUSION_GLASSES_TIGHT_0);
- AddSingleExclusionValueGlobal(EAttExclusions.EXCLUSION_HEADGEAR_HELMET_0);
- }
- }
|