47 #ifdef WEAPON_INFO_DEBUG
48 static void _print(
string str)
50 int hour, minute, second;
51 System.GetHourMinuteSecondUTC(hour, minute, second);
52 string timeStr =
string.Format(
"%1.%2.%3", hour, minute, second);
53 Print(
string.Format(
"%1 [Weapon Info UI] %2", timeStr, str),
LogLevel.DEBUG);
57 const int SIZE_FIREMODE = 50;
58 const int SIZE_MAGAZINE = 77;
60 const float UPDATE_INTERVAL = 0.1;
61 const float FADED_OPACITY = 0.3;
63 static const ref
Color COLOR_WHITE =
Color.FromSRGBA(255, 255, 255, 255);
64 static const ref
Color COLOR_ORANGE =
Color.FromSRGBA(226, 167, 79, 255);
114 #ifdef WEAPON_INFO_DEBUG
115 _print(
"OnWeaponChanged");
116 _print(
string.Format(
" weapon: %1", weapon));
127 IEntity e = weaponSlot.GetWeaponEntity();
153 Show(weapon != null);
190 #ifndef WEAPON_INFO_BLOCK_WATERFALL_EVENTS
202 muzzle = weapon.GetCurrentMuzzle();
204 #ifdef WEAPON_INFO_DEBUG_WATERFALL_EVENTS
205 Print(
"OnMuzzleChanged_init");
206 Print(
string.Format(
" weapon: %1", weapon));
207 Print(
string.Format(
" muzzle: %1", muzzle));
219 #ifdef WEAPON_INFO_DEBUG
220 _print(
"OnMuzzleChanged");
221 _print(
string.Format(
" weapon: %1", weapon));
222 _print(
string.Format(
" muzzle: %1", muzzle));
242 m_WeaponState.m_bBarrelChambered = muzzle.IsBarrelChambered(muzzle.GetCurrentBarrelIndex());
243 m_WeaponState.m_bBarrelCanBeChambered = muzzle.IsChamberingPossible();
250 #ifndef WEAPON_INFO_BLOCK_WATERFALL_EVENTS
263 magazine = muzzle.GetMagazine();
265 #ifdef WEAPON_INFO_DEBUG_WATERFALL_EVENTS
266 _print(
"OnMagazineChanged_init");
267 _print(
string.Format(
" weapon: %1", weapon));
268 _print(
string.Format(
" muzzle: %1", muzzle));
269 _print(
string.Format(
" magazine: %1", magazine));
281 #ifdef WEAPON_INFO_DEBUG
282 _print(
"OnMagazineChanged");
283 _print(
string.Format(
" weapon: %1", weapon));
284 _print(
string.Format(
" magazine: %1", magazine));
309 #ifndef WEAPON_INFO_BLOCK_WATERFALL_EVENTS
325 muzzle = weapon.GetCurrentMuzzle();
327 #ifdef WEAPON_INFO_DEBUG_WATERFALL_EVENTS
328 _print(
"OnMagazineCountChanged_init");
329 _print(
string.Format(
" weapon: %1", weapon));
330 _print(
string.Format(
" muzzle: %1", muzzle));
331 _print(
string.Format(
" magazine: %1", magazine));
337 if (!weapon || !invManager)
343 int magazineCount = 0;
355 array<IEntity> magEntities =
new array<IEntity>;
357 magazineCount = magEntities.Count();
371 array<IEntity> sameWeapons =
new array<IEntity>;
375 magazineCount = sameWeapons.Count();
389 #ifdef WEAPON_INFO_DEBUG
390 _print(
"OnMagazineCountChanged");
391 _print(
string.Format(
" weapon: %1", weapon));
392 _print(
string.Format(
" magazineCount: %1", magazineCount));
393 _print(
string.Format(
" isGrenade: %1", isGrenade));
425 muzzle = weapon.GetCurrentMuzzle();
427 #ifdef WEAPON_INFO_DEBUG_WATERFALL_EVENTS
428 _print(
"OnAmmoCountChanged_init");
429 _print(
string.Format(
" weapon: %1", weapon));
430 _print(
string.Format(
" muzzle: %1", muzzle));
431 _print(
string.Format(
" magazine: %1", magazine));
437 ammoCount = magazine.GetAmmoCount();
439 bool isBarrelChambered =
false;
442 isBarrelChambered = muzzle.IsCurrentBarrelChambered();
453 #ifdef WEAPON_INFO_DEBUG
454 _print(
"OnAmmoCountChanged");
455 _print(
string.Format(
" weapon: %1", weapon));
456 _print(
string.Format(
" muzzle: %1", muzzle));
457 _print(
string.Format(
" magazine: %1", magazine));
458 _print(
string.Format(
" ammoCount: %1", ammoCount));
459 _print(
string.Format(
" isBarrelChambered: %1", isBarrelChambered));
474 m_WeaponState.m_iMagMaxAmmoCount = magazine.GetMaxAmmoCount();
486 if (ammoCount == 0 && weapon)
496 firemode = muzzle.GetCurrentFireMode();
498 #ifdef WEAPON_INFO_DEBUG_WATERFALL_EVENTS
499 _print(
"OnFiremodeChanged_init");
500 _print(
string.Format(
" weapon: %1", weapon));
501 _print(
string.Format(
" muzzle: %1", muzzle));
502 _print(
string.Format(
" firemode: %1", firemode));
514 #ifdef WEAPON_INFO_DEBUG
515 _print(
"OnFiremodeChanged");
516 _print(
string.Format(
" weapon: %1", weapon));
517 _print(
string.Format(
" muzzle: %1", muzzle));
518 _print(
string.Format(
" firemode: %1", firemode));
538 zeroing = weapon.GetCurrentSightsZeroing();
540 #ifdef WEAPON_INFO_DEBUG_WATERFALL_EVENTS
541 _print(
"OnZeroingChanged_init");
542 _print(
string.Format(
" weapon: %1", weapon));
543 _print(
string.Format(
" zeroing: %1", zeroing));
555 #ifdef WEAPON_INFO_DEBUG
556 _print(
"OnZeroingChanged");
557 _print(
string.Format(
" weapon: %1", weapon));
558 _print(
string.Format(
" zeroing: %1", zeroing));
578 inADS = weapon.IsSightADSActive();
580 #ifdef WEAPON_INFO_DEBUG_WATERFALL_EVENTS
581 _print(
"OnADSChanged_init");
582 _print(
string.Format(
" weapon: %1", weapon));
583 _print(
string.Format(
" inADS: %1", inADS));
595 #ifdef WEAPON_INFO_DEBUG
597 _print(
string.Format(
" weapon: %1", weapon));
598 _print(
string.Format(
" inADS: %1", inADS));
606 #ifndef WEAPON_INFO_BLOCK_WATERFALL_EVENTS
619 #ifdef WEAPON_INFO_DEBUG_WATERFALL_EVENTS
620 _print(
"OnZoomChanged_init");
621 _print(
string.Format(
" weapon: %1", weapon));
622 _print(
string.Format(
" zoom: %1", zoom));
634 #ifdef WEAPON_INFO_DEBUG
636 _print(
string.Format(
" zoom: %1", zoom));
637 _print(
string.Format(
" fov: %1", fov));
654 #ifdef WEAPON_INFO_DEBUG
655 _print(
"OnInspectionModeChanged");
656 _print(
string.Format(
" state: %1", state));
671 #ifdef WEAPON_INFO_DEBUG
672 _print(
"OnAttachmentChanged");
673 _print(
string.Format(
" isAttached: %1", isAttached));
674 _print(
string.Format(
" attachmentEntity: %1", attachmentEntity));
677 SCR_2DSightsComponent sights =
GetSights();
736 #ifdef WEAPON_INFO_DEBUG_STATES
740 weaponStateDebug +=
"|WEAPON";
743 weaponStateDebug +=
"|MUZZLE";
746 weaponStateDebug +=
"|MAGAZINE";
749 weaponStateDebug +=
"|AMMOCOUNT";
752 weaponStateDebug +=
"|FIREMODE";
755 weaponStateDebug +=
"|ZEROING";
758 weaponStateDebug +=
"|ADS";
761 weaponStateDebug +=
"|MAGAZINE_COUNT";
764 weaponStateDebug +=
"|INSPECTION";
767 weaponStateDebug +=
"|ZOOM";
770 weaponStateDebug +=
"|MISC";
772 Print(weaponStateDebug);
783 bool panelVisibleOverride = isGrenade || inADS || inInspection;
784 if (panelVisibleEvent || panelVisibleOverride)
788 bool zeroingWidgetHasText = !
m_Widgets.m_wZeroingText.GetText().IsEmpty();
789 bool zeroingVisibleEvent =
m_eWeaponStateEvent & (EWeaponFeature.ADS | EWeaponFeature.ZEROING | EWeaponFeature.MUZZLE | EWeaponFeature.WEAPON | EWeaponFeature.INSPECTION);
790 bool zeroingVisibleOverride = inADS || inInspection;
791 if (zeroingWidgetHasText && (zeroingVisibleEvent || zeroingVisibleOverride))
803 return SCR_2DSightsComponent.Cast(sights);
817 if (!state.m_MuzzleUI)
825 if (state.m_Magazine)
845 if (state.m_WeaponUI)
864 if (!state.m_MagazineConfig)
871 m_Widgets.m_wMagazineIndicator.SetVisible(
false);
875 m_Widgets.m_wMagazineIndicator.SetVisible(
true);
877 if (config.m_bProgressBar)
892 m_Widgets.m_wReloadBackground.SetVisible(
false);
894 m_Widgets.m_wReloadOutline.SetVisible(
false);
898 m_Widgets.m_wMagazineProgress.SetVisible(config.m_bProgressBar && state.m_Magazine);
899 m_Widgets.m_wMagazineBackground.SetVisible(config.m_bProgressBar);
900 m_Widgets.m_wMagazineOutline.SetOpacity(1);
902 if (state.m_Magazine)
904 if (config.m_bProgressBar)
907 m_Widgets.m_wMagazineProgress.LoadMaskFromSet(config.m_sImagesetIcons, config.m_sProgressAlphaMask);
913 if (!state.m_bIsExplosive)
914 m_Widgets.m_wMagazineOutline.SetOpacity(FADED_OPACITY);
929 m_Widgets.m_wMagazineProgress.SetMaskProgress(state.m_fMagAmmoPerc);
938 int count = state.m_iMagCount;
941 if (state.m_bIsExplosive)
944 string countText = count.ToString();
954 m_Widgets.m_wMagCountText.SetOpacity(FADED_OPACITY);
956 if (
m_Widgets.m_wMagCountText.GetText() == countText)
959 m_Widgets.m_wMagCountText.SetText(countText);
971 if (state.m_bBarrelChambered)
974 m_Widgets.m_wFiremodeIcon.SetOpacity(FADED_OPACITY);
983 m_Widgets.m_wFiremodeIcon.SetVisible(
false);
984 m_Widgets.m_wFiremodeGlow.SetVisible(
false);
986 if (state.m_Muzzle && state.m_MuzzleUI && state.m_MuzzleUI.
ShowFiremodeIcon())
991 if (icon !=
string.Empty)
996 m_Widgets.m_wFiremodeIcon.SetVisible(
true);
997 m_Widgets.m_wFiremodeGlow.SetVisible(
true);
1010 int zeroing = state.m_iZeroing;
1015 m_Widgets.m_wZeroingText.SetText(
string.Empty);
1020 string sZeroing =
string.Format(
"%1 m", zeroing);
1021 m_Widgets.m_wZeroingText.SetText(sZeroing);
1033 float zoom = state.m_fZoom;
1035 if (zoom <= 0 || !state.m_bInADS)
1038 m_Widgets.m_wOpticsText.SetText(
string.Empty);
1042 string sZoom = zoom.ToString(-1,1);
1043 sZoom =
string.Format(
"%1 ×", sZoom);
1058 if (!state.m_bHasSpecialAmmo || (!state.m_MagazineUI && !state.m_GrenadeUI))
1060 m_Widgets.m_wAmmoType.SetVisible(
false);
1064 string sAmmoTypeText;
1065 bool bShowAmmoTypeText;
1067 if (state.m_GrenadeUI)
1078 if (!bShowAmmoTypeText)
1081 m_Widgets.m_wAmmoTypeText.SetText(sAmmoTypeText);
1091 m_Widgets.m_wAmmoType_Incendiary.SetVisible(state.m_eAmmoTypeFlags &
EAmmoType.INCENDIARY);
1094 m_Widgets.m_wAmmoType_Illumination.SetVisible(state.m_eAmmoTypeFlags &
EAmmoType.ILLUMINATION);
1102 if (!state || !
m_Widgets || !state.m_WeaponUI)
1109 m_Widgets.m_wWeaponName.SetText(state.m_WeaponUI.GetName());
1111 m_Widgets.m_wWeaponName.SetVisible(showName);
1116 if (state.m_MuzzleUI)
1124 m_Widgets.m_wCaliber.SetVisible(showCaliber);
1136 w.SetColor(COLOR_ORANGE);
1151 FrameSlot.SetSize(w, width, sizeBoosted);
1152 float widthHeight[2] = {width,
size};
1159 SCR_ChimeraCharacter character = SCR_ChimeraCharacter.Cast(owner);
1179 if (m_LayoutPath ==
string.Empty)
1194 m_Widgets.m_wMagazineIndicator.SetVisible(
true);
1229 super.DisplayOnResumed();
1276 PlayerController pc =
GetGame().GetPlayerController();
1281 IEntity playerEntity = pc.GetControlledEntity();
1288 CompartmentAccessComponent compAccess = CompartmentAccessComponent.Cast(playerEntity.
FindComponent(CompartmentAccessComponent));
1304 vehEntity = compSlot.GetOwner();
1317 SCR_ChimeraCharacter character = SCR_ChimeraCharacter.Cast(owner);
1322 BaseWeaponManagerComponent weaponManager = BaseWeaponManagerComponent.Cast(character.FindComponent(BaseWeaponManagerComponent));
1326 return weaponManager;
1333 if (!imageName.IsEmpty())
1336 w.LoadImageFromSet(0, imageOrImageset, imageName);
1338 else if (!imageOrImageset.IsEmpty())
1341 w.LoadImageTexture(0, imageOrImageset);
1349 w.GetImageSize(0, sx, sy);
1351 float ratio = sx / sy;
ArmaReforgerScripted GetGame()
SCR_AIInfoComponentClass SNIPER
EventHandlerManagerComponent m_EventHandlerManager
MenuManager m_MenuManager
enum EAmmoType INSPECTION
enum EAmmoType MAGAZINE_COUNT
void UpdateZoomIndicator()
proto external Managed FindComponent(typename typeName)
proto external EntityPrefabData GetPrefabData()
ref SCR_MagazineIndicatorConfiguration m_MagIndicator
ResourceName GetFiremodeIconImageset()
ref SCR_MagazineIndicatorConfiguration m_MagIndicator
string GetFiremodeIconName(EWeaponFiremodeType firemode)
ResourceName GetFiremodeGlowImageset()
void SetWidgetImage(ImageWidget w, string imageOrImageset, string imageName="", int size=-1)
Sets widget's image to an image or imageset.
bool IsCurrentlyUsingWeapon(notnull BaseWeaponComponent weapon)
void OnMagazineCountChanged(BaseWeaponComponent weapon, int magazineCount, bool isGrenade)
void UpdateAmmoTypeIndicator(SCR_WeaponState state)
SCR_CompartmentAccessComponent m_CompartmentAccess
void OnMuzzleChanged_init(BaseWeaponComponent weapon)
const float FADEOUT_OPTICS_DELAY
void OnZoomChanged_init(BaseWeaponComponent weapon)
void OnMagazineChanged(BaseWeaponComponent weapon, BaseMagazineComponent magazine, BaseMagazineComponent prevMagazine)
void OnMagazineChanged_init(BaseWeaponComponent weapon, BaseMuzzleComponent muzzle)
void AnimateWidget_TextPopUp(Widget w, float size, float sizeBoosted, EWeaponFeature requiredFlag=-1, float speed=UIConstants.FADE_RATE_SLOW)
void OnADSChanged_init(BaseWeaponComponent weapon)
const float FADEOUT_PANEL_DELAY
BaseWeaponManagerComponent m_WeaponManager
ref SCR_MagazinePredicate m_pMagazineSearchPredicate
const float FADEOUT_AMMO_TYPE_DELAY
void OnZeroingChanged_init(BaseWeaponComponent weapon)
void OnInspectionModeChanged(bool state)
void DisplayUpdate(IEntity owner, float timeSlice)
ref SCR_WeaponState m_WeaponState
const ResourceName DEFAULT_WEAPON_INFO_LAYOUT
EWeaponFeature m_eWeaponStateEvent
void OnFiremodeChanged(BaseWeaponComponent weapon, BaseMuzzleComponent muzzle, BaseFireMode firemode)
void UpdateZoomIndicator(SCR_WeaponState state)
ref SCR_FadeInOutAnimator m_WeaponInfoPanelAnimator
void UpdateZeroingIndicator(SCR_WeaponState state)
BaseWeaponManagerComponent GetWeaponManager(IEntity owner)
void UpdateFireModeIndicator(SCR_WeaponState state)
static InventoryStorageManagerComponent GetInventoryManager()
Returns player's inventory manager, or vehicle's inv manager if player is in vehicle.
void DisplayStopDraw(IEntity owner)
bool DisplayStartDrawInit(IEntity owner)
void OnZeroingChanged(BaseWeaponComponent weapon, int zeroing)
SCR_InventoryStorageManagerComponent m_InventoryManager
SCR_MagazineIndicatorConfiguration GetMagazineConfig(SCR_WeaponState state)
void UpdateMagazineIndicator_Count(SCR_WeaponState state)
void AddEventHandlers(IEntity owner)
void OnWeaponChanged(BaseWeaponComponent weapon, BaseWeaponComponent prevWeapon)
void OnAmmoCountChanged_init(BaseWeaponComponent weapon, BaseMagazineComponent magazine)
void UpdateBulletInChamberIndicator(SCR_WeaponState state)
void OnFiremodeChanged_init(BaseWeaponComponent weapon, BaseMuzzleComponent muzzle)
ref SCR_FadeInOutAnimator m_ZeroingAnimator
void UpdateMagazineIndicator_Progress(SCR_WeaponState state)
const ResourceName DEFAULT_MAGAZINE_INDICATOR
void AnimateWidget_ColorFlash(Widget w, EWeaponFeature requiredFlag=-1, float speed=UIConstants.FADE_RATE_SLOW)
SCR_2DSightsComponent GetSights()
void OnAmmoCountChanged(BaseWeaponComponent weapon, BaseMuzzleComponent muzzle, BaseMagazineComponent magazine, int ammoCount, bool isBarrelChambered)
void UpdateWeaponNameAndCaliber(SCR_WeaponState state)
void UpdateMagazineIndicator_Textures(SCR_WeaponState state)
void OnZoomChanged(float zoom, float fov)
void RemoveEventHandlers(IEntity owner)
void OnMuzzleChanged(BaseWeaponComponent weapon, BaseMuzzleComponent muzzle, BaseMuzzleComponent prevMuzzle)
void OnMagazineCountChanged_init(BaseWeaponComponent weapon, BaseMagazineComponent magazine)
ref SCR_PrefabDataPredicate m_pPrefabDataPredicate
ref SCR_WeaponInfoWidgets m_Widgets
void OnAttachmentChanged(WeaponComponent weapon, bool isAttached, IEntity attachmentEntity)
void OnADSChanged(BaseWeaponComponent weapon, bool inADS)
void DisplayStartDraw(IEntity owner)
ref SCR_MagazineIndicatorConfiguration m_MagIndicator
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
@ NONE
When Shape is created and not initialized yet.