---@diagnostic disable: undefined-global ------------------------ Dynahud ------------------------ -- Strangerism ------------------------ ----------- ------------------------ USE_UPDATE_STEP = true ------------------------ DYNA HUD GLOBAL VARIABLES ------------------------ local last_time_health_change = nil local last_time_dyn_bhs_updated = nil inventory_opened = nil local get_psy_health = arszi_psy.get_psy_health local dynahud_bhs_hud_visible = nil local dynahud_dynamic_bhs_hud_on = nil local dynahud_pref_hud_type = nil local limbs_fully_healed = nil local myhealth=0 local last_time_unequipped = nil weapon_is_equipped = nil weapon_hud_visible = nil local bhs_hud_dismissed = nil local time_bhs_hud_dismissed = nil local limbs_total_injury = nil local previous_limbs_total_injury = nil local bhs_change_state = nil -- SYSTEM PARAMS local DYNAHUD_DYNAMIC_BHS_HUD_UPDATE_TICK = 1000 -- time between each BHS visibility update checks local DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_TIMEOUT_MAX = 15 * 60000 -- seconds. if the DYNAHUD_DYNAMIC_BHS_HUD_DISMISS is equal to max then dissmissed until next injury --- MCM PARAMS local DYNAHUD_MAIN_HUD_AUTOHIDE = false local DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE = false local DYNAHUD_DYNAMIC_BHS_HUD_UPDATE_HIDE_TIMEOUT = 10000 -- time for the BHS hud to hide if conditions are met local DYNAHUD_MAIN_HUD_HIDE_PSY_THRESHOLD = 0.99 -- min value of psy for the bar to become visible local DYNAHUD_MAIN_HUD_HIDE_POWER_THRESHOLD = 0.60 -- min value of power for the bar to become visible local DYNAHUD_MAIN_HUD_HIDE_HEALTH_THRESHOLD = 0.99 -- min value of health for the bar to become visible local DYNAHUD_MAIN_HUD_HIDE_HEALTH_AUTOHIDE_TIMEOUT = 30000 -- time for the health bar to hide after last health value change local DYNAHUD_MAIN_HUD_BG_AUTOHIDE_TIMEOUT = 5000 local DYNAHUD_MAIN_HUD_BG_AUTOHIDE_TIMEOUT_DISABLE = 60 * 1000 local DYNAHUD_MAIN_HUD_PREVIEW_ON_SHOW = true local DYNAHUD_MAIN_HUD_PREVIEW_TIME = 5000 local DYNAHUD_ICONS_HUD_AUTOHIDE = true local DYNAHUD_ICONS_HUD_AUTOHIDE_TIMEOUT = 20000 local DYNAHUD_ICONS_HUD_PREVIEW = true local DYNAHUD_ICONS_HUD_PREVIEW_SHOW_TIMER = true local DYNAHUD_ICONS_HUD_PREVIEW_TIME = 5000 local DYNAHUD_ICONS_HUD_INVENTORY_PREVIEW = true DYNAHUD_ICONS_HUD_TIMERS = false DYNAHUD_ICONS_HUD_TIMERS_EXPIRING = 60 DYNAHUD_ICONS_HUD_TIMERS_PREVIEW_TIME_ON_REFRESH = 10 local DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE = false local DYNAHUD_DYNAMIC_MINIMAP_HIDE = false local DYNAHUD_DYNAMIC_MINIMAP_SHOW = false local DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE_TIMEOUT = 5 * 1000 local DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED = true local DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_ACTOR_SPRINT = false local DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED_TIMEOUT = 1000 local DYNAHUD_DYNAMIC_MINIMAP_HIDE_ON_END_SPRINT_TIMEOUT = 1.5 local DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_TIMEOUT = 5 * 1000 local DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_FORCE = false local DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_ON_MAPLOAD = false local DYNAHUD_DYNAMIC_BHS_HUD_ALWAYS_HIDE = false local DYNAHUD_NOTIFICATIONS = false local DYNAHUD_DYNAMIC_MAGHUD_AUTOHIDE = false local DYNAHUD_DYNAMIC_MAGHUD_SHOW_RELOAD = false local DYNAHUD_DYNAMIC_MAGHUD_SHOW_AMMOCHECK = false local DYNAHUD_DYNAMIC_MAGHUD_AUTOHIDE_TIMEOUT = false local DYNAHUD_COMPANION_HUD_AUTOHIDE = true local DYNAHUD_COMPANION_CHECK_DISTANCE = true local DYNAHUD_COMPANION_SAFE_DISTANCE = 100 local DYNAHUD_COMPANION_HUD_PREVIEW_TIME = 5000 local DYNAHUD_WEAPON_HUD_AUTOHIDE = false local DYNAHUD_DYNAMIC_WEAPON_HUD_AUTOHIDE_TIMEOUT = 5000 local DYNAHUD_DYNAMIC_WEAPON_HUD_AIM_SHOW = false local DYNAHUD_DYNAMIC_WEAPON_HUD_AIM_SHOW_QUICKHIDE = false local DYNAHUD_DYNAMIC_WEAPON_HUD_RELOAD_SHOW = false local DYNAHUD_DYNAMIC_WEAPON_HUD_WEAPONCHECK_SHOW = false local DYNAHUD_DYNAMIC_COLD_SYSTEM_ENABLE = false local DYNAHUD_DYNAMIC_COLD_SYSTEM_SAFE_THRESHOLD = 600 local DYNAHUD_DYNAMIC_COLD_SYSTEM_CRITICAL_THRESHOLD = 1800 local DYNAHUD_DYNAMIC_COLD_SYSTEM_BREAKPOINT = 100 local DYNAHUD_DYNAMIC_COLD_SYSTEM_SHOW_RECOVERY = false local cold_val_next_breakpoint = 0 local DYNAHUD_DYNAMIC_COLD_SYSTEM_HUD_KEYBIND = 0 DYNAHUD_DYNAMIC_MAGHUD_WEAPON_CHECK = false ------------------------ DYNA HUD MAIN ------------------------ local DYNAHUD_MAGREDUX_SUPPORT = nil local DYNAHUD_BHS_SUPPORT = nil local DYNAHUD_COLD_SYSTEM_SUPPORT = nil local minimap_while_weapon_equipped = nil local last_weapon_equipped = nil local companion_hud_visible = true ------------------------- BHS PATCH AWARENESS ---------------------- -- 0 BHS | 1 BHS_GAMMA - | 2 BSH_EFP4 patch_type = nil -- Minimap Style Binding -- the choosen minimap/compass script will bind its stlye into this variable -- 0 bottom right - 1 top right - 2 top left - 3 compass top - 4 compass bottom MINIMAP = nil -- HUD Style Binding -- INHERIT | -4 Aydin | -3 BHS | -2 EFP | -1 GAMMA | ======= | MAIN | 0 S2 | 1 minimalistic | 2 minimalistic no ammo counter HUD = nil ACTION = {IDLE = 0, RELOAD = 1, UNJAMMING = 2, AMMO_CHECK = 3 } local player_action = ACTION.IDLE local function dynahud_load_mcm_settings() -- Dynamic Main Hud DYNAHUD_MAIN_HUD_AUTOHIDE = dynahud_mcm.get_config("main_hud/autohide") -- boolean DYNAHUD_MAIN_HUD_HIDE_HEALTH_THRESHOLD = (dynahud_mcm.get_config("main_hud/hide_health_threshold")) * 1 DYNAHUD_MAIN_HUD_HIDE_HEALTH_AUTOHIDE_TIMEOUT = (dynahud_mcm.get_config("main_hud/hide_health_autohide_timeout")) * 1000 DYNAHUD_MAIN_HUD_HIDE_POWER_THRESHOLD = (dynahud_mcm.get_config("main_hud/hide_power_threshold")) * 1 DYNAHUD_MAIN_HUD_HIDE_PSY_THRESHOLD = (dynahud_mcm.get_config("main_hud/hide_psy_threshold")) * 1 DYNAHUD_MAIN_HUD_BG_AUTOHIDE_TIMEOUT = (dynahud_mcm.get_config("main_hud/bg_autohide_timeout")) * 1000 DYNAHUD_MAIN_HUD_PREVIEW_ON_SHOW = dynahud_mcm.get_config("main_hud/bg_preview_on_show") DYNAHUD_MAIN_HUD_PREVIEW_TIME = dynahud_mcm.get_config("main_hud/bg_preview_time") * 1000 -- Dynamic Icons Hud DYNAHUD_ICONS_HUD_AUTOHIDE = dynahud_mcm.get_config("icons_hud/autohide") -- boolean DYNAHUD_ICONS_HUD_AUTOHIDE_TIMEOUT = (dynahud_mcm.get_config("icons_hud/autohide_timeout")) * 1000 DYNAHUD_ICONS_HUD_PREVIEW = dynahud_mcm.get_config("icons_hud/preview") -- boolean DYNAHUD_ICONS_HUD_PREVIEW_SHOW_TIMER = (dynahud_mcm.get_config("icons_hud/preview_timer")) * 1000 DYNAHUD_ICONS_HUD_PREVIEW_TIME = (dynahud_mcm.get_config("icons_hud/preview_time")) * 1000 DYNAHUD_ICONS_HUD_INVENTORY_PREVIEW = dynahud_mcm.get_config("icons_hud/inventory_preview") -- boolean DYNAHUD_ICONS_HUD_TIMERS = dynahud_mcm.get_config("icons_hud/enable_timers") and actor_status.XCVB_ICON_TIME_IMPL -- boolean DYNAHUD_ICONS_HUD_TIMERS_EXPIRING = (dynahud_mcm.get_config("icons_hud/show_only_expiring")) * 1 -- Dynamic Weapon Hud DYNAHUD_WEAPON_HUD_AUTOHIDE = dynahud_mcm.get_config("weapon_hud/autohide") DYNAHUD_DYNAMIC_WEAPON_HUD_AUTOHIDE_TIMEOUT = (dynahud_mcm.get_config("weapon_hud/autohide_timeout")) * 1000 DYNAHUD_DYNAMIC_WEAPON_HUD_AIM_SHOW = dynahud_mcm.get_config("weapon_hud/aim_show") DYNAHUD_DYNAMIC_WEAPON_HUD_AIM_SHOW_QUICKHIDE = dynahud_mcm.get_config("weapon_hud/aim_show_quickhide") DYNAHUD_DYNAMIC_WEAPON_HUD_RELOAD_SHOW = dynahud_mcm.get_config("weapon_hud/reload_show") DYNAHUD_DYNAMIC_WEAPON_HUD_WEAPONCHECK_SHOW = dynahud_mcm.get_config("weapon_hud/weaponcheck_show") -- Dynamic BHS Hud DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE = dynahud_mcm.get_config("bhs_hud/autohide") -- boolean DYNAHUD_DYNAMIC_BHS_HUD_UPDATE_HIDE_TIMEOUT = (dynahud_mcm.get_config("bhs_hud/update_hide_timeout")) * 1000 DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_TIMEOUT = (dynahud_mcm.get_config("bhs_hud/dismiss_timeout")) * 60000 DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_FORCE = dynahud_mcm.get_config("bhs_hud/dismiss_force") -- boolean DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_ON_MAPLOAD = dynahud_mcm.get_config("bhs_hud/dismiss_on_mapload") DYNAHUD_DYNAMIC_BHS_HUD_ALWAYS_HIDE = dynahud_mcm.get_config("bhs_hud/always_hide") -- Dynamic minimap DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE = dynahud_mcm.get_config("minimap/autohide") DYNAHUD_DYNAMIC_MINIMAP_HIDE = dynahud_mcm.get_config("minimap/hide") DYNAHUD_DYNAMIC_MINIMAP_SHOW = dynahud_mcm.get_config("minimap/show") DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE_TIMEOUT = (dynahud_mcm.get_config("minimap/autohide_timeout")) * 1000 DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED = dynahud_mcm.get_config("minimap/show_on_wpn_lowered") DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_ACTOR_SPRINT = dynahud_mcm.get_config("minimap/show_on_actor_sprint") DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED_TIMEOUT = (dynahud_mcm.get_config("minimap/show_on_wpn_lowered_timeout")) * 1000 DYNAHUD_DYNAMIC_MINIMAP_HIDE_ON_END_SPRINT_TIMEOUT = (dynahud_mcm.get_config("minimap/hide_on_end_sprint_timeout")) -- Notifications DYNAHUD_NOTIFICATIONS = dynahud_mcm.get_config("general/notifications_enable") -- Dynamic Magazine Hud DYNAHUD_DYNAMIC_MAGHUD_AUTOHIDE = dynahud_mcm.get_config("mags/enable") DYNAHUD_DYNAMIC_MAGHUD_SHOW_RELOAD = dynahud_mcm.get_config("mags/show_reload") DYNAHUD_DYNAMIC_MAGHUD_SHOW_AMMOCHECK = dynahud_mcm.get_config("mags/show_ammocheck") DYNAHUD_DYNAMIC_MAGHUD_AUTOHIDE_TIMEOUT = (dynahud_mcm.get_config("mags/autohide_timeout")) DYNAHUD_DYNAMIC_MAGHUD_WEAPON_CHECK = dynahud_mcm.get_config("mags/weapon_check") -- Cold System Hud DYNAHUD_DYNAMIC_COLD_SYSTEM_ENABLE = dynahud_mcm.get_config("cold_system/enable") -- boolean DYNAHUD_DYNAMIC_COLD_SYSTEM_SAFE_THRESHOLD = (dynahud_mcm.get_config("cold_system/safe_threshold")) * 1 DYNAHUD_DYNAMIC_COLD_SYSTEM_BREAKPOINT = (dynahud_mcm.get_config("cold_system/breakpoint")) * 1 DYNAHUD_DYNAMIC_COLD_SYSTEM_SHOW_RECOVERY = dynahud_mcm.get_config("cold_system/show_recovery") -- boolean DYNAHUD_DYNAMIC_COLD_SYSTEM_CRITICAL_THRESHOLD = dynahud_mcm.get_config("cold_system/critical_threshold") * 1 -- Companion Hud DYNAHUD_COMPANION_HUD_AUTOHIDE = dynahud_mcm.get_config("companion_hud/enable") -- boolean DYNAHUD_COMPANION_CHECK_DISTANCE = dynahud_mcm.get_config("companion_hud/check_distance") -- boolean DYNAHUD_COMPANION_SAFE_DISTANCE = dynahud_mcm.get_config("companion_hud/safe_distance") * 1 DYNAHUD_COMPANION_HUD_PREVIEW_TIME = dynahud_mcm.get_config("companion_hud/preview_time") * 1000 end local function dynahud_mcm_print_config() printf("___________________________DYNAHUD MCM CONFIG__________________________") printf("DYNAHUD_MAIN_HUD_AUTOHIDE %s", DYNAHUD_MAIN_HUD_AUTOHIDE) printf("DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE %s", DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE) printf("DYNAHUD_DYNAMIC_BHS_HUD_UPDATE_HIDE_TIMEOUT %s", DYNAHUD_DYNAMIC_BHS_HUD_UPDATE_HIDE_TIMEOUT) printf("DYNAHUD_MAIN_HUD_HIDE_PSY_THRESHOLD %s", DYNAHUD_MAIN_HUD_HIDE_PSY_THRESHOLD) printf("DYNAHUD_MAIN_HUD_HIDE_POWER_THRESHOLD %s", DYNAHUD_MAIN_HUD_HIDE_POWER_THRESHOLD) printf("DYNAHUD_MAIN_HUD_HIDE_HEALTH_THRESHOLD %s", DYNAHUD_MAIN_HUD_HIDE_HEALTH_THRESHOLD) printf("DYNAHUD_MAIN_HUD_HIDE_HEALTH_AUTOHIDE_TIMEOUT %s", DYNAHUD_MAIN_HUD_HIDE_HEALTH_AUTOHIDE_TIMEOUT) printf("DYNAHUD_MAIN_HUD_BG_AUTOHIDE_TIMEOUT %s", DYNAHUD_MAIN_HUD_BG_AUTOHIDE_TIMEOUT) printf("DYNAHUD_MAIN_HUD_PREVIEW_ON_SHOW %s", DYNAHUD_MAIN_HUD_PREVIEW_ON_SHOW) printf("DYNAHUD_MAIN_HUD_PREVIEW_TIMER %s", DYNAHUD_MAIN_HUD_PREVIEW_TIME) printf("DYNAHUD_ICONS_HUD_AUTOHIDE %s", DYNAHUD_ICONS_HUD_AUTOHIDE) printf("DYNAHUD_ICONS_HUD_AUTOHIDE_TIMEOUT %s", DYNAHUD_ICONS_HUD_AUTOHIDE_TIMEOUT) printf("DYNAHUD_ICONS_HUD_PREVIEW %s", DYNAHUD_ICONS_HUD_PREVIEW) printf("DYNAHUD_ICONS_HUD_PREVIEW_SHOW_TIMER %s", DYNAHUD_ICONS_HUD_PREVIEW_SHOW_TIMER) printf("DYNAHUD_ICONS_HUD_PREVIEW_TIME %s", DYNAHUD_ICONS_HUD_PREVIEW_TIME) printf("DYNAHUD_ICONS_HUD_INVENTORY_PREVIEW %s", DYNAHUD_ICONS_HUD_INVENTORY_PREVIEW) printf("DYNAHUD_ICONS_HUD_TIMERS %s", DYNAHUD_ICONS_HUD_TIMERS) printf("DYNAHUD_ICONS_HUD_TIMERS_EXPIRING %s", DYNAHUD_ICONS_HUD_TIMERS_EXPIRING) printf("DYNAHUD_WEAPON_HUD_AUTOHIDE %s", DYNAHUD_WEAPON_HUD_AUTOHIDE) printf("DYNAHUD_DYNAMIC_WEAPON_HUD_AUTOHIDE_TIMEOUT %s", DYNAHUD_DYNAMIC_WEAPON_HUD_AUTOHIDE_TIMEOUT) printf("DYNAHUD_DYNAMIC_WEAPON_HUD_AIM_SHOW %s", DYNAHUD_DYNAMIC_WEAPON_HUD_AIM_SHOW) printf("DYNAHUD_DYNAMIC_WEAPON_HUD_AIM_SHOW_QUICKHIDE %s", DYNAHUD_DYNAMIC_WEAPON_HUD_AIM_SHOW_QUICKHIDE) printf("DYNAHUD_DYNAMIC_WEAPON_HUD_RELOAD_SHOW %s", DYNAHUD_DYNAMIC_WEAPON_HUD_RELOAD_SHOW) printf("DYNAHUD_DYNAMIC_WEAPON_HUD_WEAPONCHECK_SHOW %s", DYNAHUD_DYNAMIC_WEAPON_HUD_WEAPONCHECK_SHOW) printf("DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE %s", DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE) printf("DYNAHUD_DYNAMIC_MINIMAP_HIDE %s", DYNAHUD_DYNAMIC_MINIMAP_HIDE) printf("DYNAHUD_DYNAMIC_MINIMAP_SHOW %s", DYNAHUD_DYNAMIC_MINIMAP_SHOW) printf("DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE_TIMEOUT %s", DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE_TIMEOUT) printf("DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED %s", DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED) printf("DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_ACTOR_SPRINT %s", DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_ACTOR_SPRINT) printf("DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED_TIMEOUT %s", DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED_TIMEOUT) printf("DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED_TIMEOUT %s", DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED_TIMEOUT) printf("DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_TIMEOUT %s", DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_TIMEOUT) printf("DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_FORCE %s", DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_FORCE) printf("DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_ON_MAPLOAD %s", DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_ON_MAPLOAD) printf("DYNAHUD_DYNAMIC_BHS_HUD_ALWAYS_HIDE %s", DYNAHUD_DYNAMIC_BHS_HUD_ALWAYS_HIDE) printf("DYNAHUD_DYNAMIC_MAGHUD_WEAPON_CHECK %s", DYNAHUD_DYNAMIC_MAGHUD_WEAPON_CHECK) printf("DYNAHUD_NOTIFICATIONS %s", DYNAHUD_NOTIFICATIONS) printf("DYNAHUD_DYNAMIC_COLD_SYSTEM_ENABLE %s", DYNAHUD_DYNAMIC_COLD_SYSTEM_ENABLE) printf("DYNAHUD_DYNAMIC_COLD_SYSTEM_SAFE_THRESHOLD %s", DYNAHUD_DYNAMIC_COLD_SYSTEM_SAFE_THRESHOLD) printf("DYNAHUD_DYNAMIC_COLD_SYSTEM_BREAKPOINT %s", DYNAHUD_DYNAMIC_COLD_SYSTEM_BREAKPOINT) printf("DYNAHUD_DYNAMIC_COLD_SYSTEM_SHOW_RECOVERY %s", DYNAHUD_DYNAMIC_COLD_SYSTEM_SHOW_RECOVERY) printf("DYNAHUD_DYNAMIC_COLD_SYSTEM_CRITICAL_THRESHOLD %s", DYNAHUD_DYNAMIC_COLD_SYSTEM_CRITICAL_THRESHOLD) printf("DYNAHUD_COMPANION_HUD_AUTOHIDE %s", DYNAHUD_COMPANION_HUD_AUTOHIDE) printf("DYNAHUD_COMPANION_CHECK_DISTANCE %s", DYNAHUD_COMPANION_CHECK_DISTANCE) printf("DYNAHUD_COMPANION_SAFE_DISTANCE %s", DYNAHUD_COMPANION_SAFE_DISTANCE) printf("DYNAHUD_COMPANION_HUD_PREVIEW_TIME %s", DYNAHUD_COMPANION_HUD_PREVIEW_TIME) printf("________________________________________________________________________") end local function dynahud_initialize_hud_style() zzz_dynahud_hud.init_hud_style() HUD = zzz_dynahud_hud.HUD end local function dynahud_restore_hud_style() zzz_dynahud_hud.destroy_init_style() HUD = nil end local compass_initialized = false local function compass_waypoint_init() local maingameui = ActorMenu.get_maingame() if (maingameui and maingameui.UIZoneMap) then local m_background = maingameui.UIZoneMap:Background() local b = m_background:GetWndPos(); b.y = b.y + 100 m_background:SetWndPos(vector2():set( b.x , b.y )); compass_initialized = true end end local function compass_waypoint_restore() local maingameui = ActorMenu.get_maingame() if (maingameui and maingameui.UIZoneMap) then local m_background = maingameui.UIZoneMap:Background() local b = m_background:GetWndPos(); b.y = b.y - 100 m_background:SetWndPos(vector2():set( b.x , b.y )); compass_initialized = true end end weapon_is_lowered = nil local function dynahud_map_initialize() if dynahud_minimap_binder.MINIMAP == nil then printf("[dynahud] Error: Minimap not bound") end MINIMAP = dynahud_minimap_binder.MINIMAP if MINIMAP.style == 5 and not compass_initialized then compass_waypoint_init() end local itm = db.actor:active_item() local is_weapon = itm and IsWeapon(itm) or false if is_weapon then last_weapon_equipped = itm weapon_is_equipped = true minimap_while_weapon_equipped = ui_options.get("video/hud/show_minimap") -- if DYNAHUD_WEAPON_HUD_AUTOHIDE then update_shooting_tg() -- end weapon_is_lowered = game.actor_weapon_lowered() else weapon_is_equipped = false end last_time_unequipped = time_global() --print_tip("ui_mcm_dynahud_dynamic_minimap_enabled") end -- called by dynahud_mcm function dynahud_on_mcm_change() printf("[dynahud] MCM settings was updated") -- remember old settings local old_MAIN_HUD_AUTOHIDE = DYNAHUD_MAIN_HUD_AUTOHIDE local old_DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE = DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE local old_DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE = DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE -- reset player state last_time_health_change = time_global() -- load new settings dynahud_load_mcm_settings() -- Dynamic Main Hud change and notify if not DYNAHUD_MAIN_HUD_AUTOHIDE then if (old_MAIN_HUD_AUTOHIDE ~= DYNAHUD_MAIN_HUD_AUTOHIDE) then print_tip("ui_mcm_dynahud_dynamic_main_hud_disabled", 1000) end local maingameui = ActorMenu.get_maingame() maingameui.m_ui_hud_states.m_ui_psy_bar_show = true maingameui.m_ui_hud_states.m_ui_stamina_bar_show = true maingameui.m_ui_hud_states.m_ui_health_bar_show = true else if (old_MAIN_HUD_AUTOHIDE ~= DYNAHUD_MAIN_HUD_AUTOHIDE) then print_tip("ui_mcm_dynahud_dynamic_main_hud_enabled", 1000) end end -- Dynamic BHS Hud change and notify if support is enabled if DYNAHUD_BHS_SUPPORT then if not DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE then if (old_DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE ~= DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE) then disable_bhs_hud() end if zzz_player_injuries.show_hud_type==0 then zzz_player_injuries.show_hud_type=1 zzz_player_injuries.show_hud_change_time=time_global() elseif zzz_player_injuries.show_hud_type==1 then zzz_player_injuries.show_hud_type=2 zzz_player_injuries.show_hud_change_time=time_global() elseif zzz_player_injuries.show_hud_type==2 then zzz_player_injuries.show_hud_type=0 zzz_player_injuries.show_hud_change_time=time_global() end else if (old_DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE ~= DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE) then enable_bhs_hud() end end if DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_ON_MAPLOAD then create_dismiss_bhs_event() end end -- Dynamic minimap change and notify if (old_DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE ~= DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE) then if DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE then print_tip("ui_mcm_dynahud_dynamic_minimap_enabled", 1000) else print_tip("ui_mcm_dynahud_dynamic_minimap_disabled", 1000) local minimap_enabled = ui_options.get("video/hud/show_minimap") show_minimap(minimap_enabled) end end dynahud_map_initialize() dynahud_mcm_print_config() -- Dynamic Magazines Hud --dynahud_initialize_hud_style() if DYNAHUD_COLD_SYSTEM_SUPPORT then if DYNAHUD_DYNAMIC_COLD_SYSTEM_ENABLE then dynamic_cold_system_init() end end init_companion_hud() end local function dynahud_initialize() dynahud_load_mcm_settings() dynahud_mcm_print_config() -- main hud initialization if not DYNAHUD_MAIN_HUD_AUTOHIDE then print_tip("ui_mcm_dynahud_dynamic_main_hud_disabled") else print_tip("ui_mcm_dynahud_dynamic_main_hud_enabled") end dynahud_initialize_hud_style() -- initialize minimap if DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE then print_tip("ui_mcm_dynahud_dynamic_minimap_enabled") else print_tip("ui_mcm_dynahud_dynamic_minimap_disabled") local minimap_enabled = ui_options.get("video/hud/show_minimap") show_minimap(minimap_enabled) end dynahud_map_initialize() -- initialize BHS if support elabled if DYNAHUD_BHS_SUPPORT then if not DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE then disable_bhs_hud() else enable_bhs_hud() end last_time_health_change = time_global() last_time_dyn_bhs_updated = last_time_health_change inventory_opened = false limbs_fully_healed = check_limbs_fully_healed() bhs_change_state = false previous_limbs_total_injury = 0 bhs_hud_dismissed = false time_bhs_hud_dismissed = time_global() --zzz_player_injuries.HUDUpdate() if DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_ON_MAPLOAD then create_dismiss_bhs_event() end end if DYNAHUD_COLD_SYSTEM_SUPPORT then if DYNAHUD_DYNAMIC_COLD_SYSTEM_ENABLE then dynamic_cold_system_init() end end init_companion_hud() end local function dynahud_on_destroy() printf("[dynahud] dynahud_on_destroy") if MINIMAP.style == 5 then compass_waypoint_restore() end dynahud_restore_hud_style() end local function dynahud_actor_on_first_update() dynahud_initialize() end function initialize_plugins_support() -- UI mods plugins support DYNAHUD_BHS_SUPPORT = false if zzz_player_injuries and zzz_player_injuries_mcm then printf("Enabling DYNAHUD_BHS_SUPPORT") DYNAHUD_BHS_SUPPORT = true else printf("DYNAHUD_BHS_SUPPORT not Enabled") end DYNAHUD_MAGREDUX_SUPPORT = false if magazines then printf("Enabling DYNAHUD_MAGREDUX_SUPPORT") DYNAHUD_MAGREDUX_SUPPORT = true ui_mcm.set("magazines/hud/show_hud", false) else printf("DYNAHUD_MAGREDUX_SUPPORT not Enabled") end if cold_system then DYNAHUD_COLD_SYSTEM_SUPPORT = true end end local main_hud_tg_update = 0 local main_hud_tg_update_step = 500 --[ms] function dynahud_main_hud_controller() if USE_UPDATE_STEP then local tg = time_global() if tg < main_hud_tg_update then return end main_hud_tg_update = tg + main_hud_tg_update_step end dynahud_main_hud_update() end local bhs_hud_tg_update = 0 local bhs_hud_tg_update_step = 1000 --[ms] function dynahud_bhs_hud_controller() if USE_UPDATE_STEP then local tg = time_global() if tg < bhs_hud_tg_update then return end bhs_hud_tg_update = tg + bhs_hud_tg_update_step end if DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE then if dynahud_dynamic_bhs_hud_on then dynahud_dynamic_bhs_hud_update() if bhs_hud_dismissed then dynahud_bhs_hud_dismiss_update() end end end -- if mag_hud_change_state and (time_global() - mag_hud_visible_tg) > 5000 then -- printf("removing timed event dynahud_mag_hud:hide_ui") -- RemoveTimeEvent("dynahud_mag_hud", "hide_ui") -- mag_hud_change_state = false -- end end local mag_hud_tg_update = 0 local mag_hud_tg_update_step = 100 --[ms] function dynahud_mag_hud_controller() local tg = time_global() if tg < mag_hud_tg_update then return end mag_hud_tg_update = tg + mag_hud_tg_update_step if DYNAHUD_DYNAMIC_MAGHUD_AUTOHIDE then -- releoad if DYNAHUD_DYNAMIC_MAGHUD_SHOW_RELOAD then local itm = db.actor:active_item() local is_weapon = itm and IsWeapon(itm) or false local is_suppoorted_weapon = magazines.is_supported_weapon(itm) local state = itm and itm:get_state() if is_weapon and is_suppoorted_weapon and state == 7 and not reloading_started then reloading_started = true dynahud_mags_ui_update(ACTION.RELOAD) elseif is_weapon and state == 0 and reloading_started then reloading_started = false end end end end ------------------------ DYNA HUD ------------------------ -- local time_since_weapon_equipped = -1 -- local weapon_equipped_tg = -1 -- function weapon_status_update() -- local itm = db.actor:active_item() -- local slot = db.actor:active_slot() -- local det_active = db.actor:active_detector() -- local is_weapon = itm and IsWeapon(itm) or false -- local is_pda = itm and slot == 8 or slot == 14 or false -- if is_weapon and not is_pda and not det_active then -- -- a weapon is equipped -- if not weapon_is_equipped then -- -- transition from no weapon -- weapon_equipped_tg = time_global() -- -- we are equipping a weapon -- weapon_is_equipped = not weapon_is_equipped -- time_since_weapon_equipped = 0 -- else -- -- we already have equipped this weapon -- time_since_weapon_equipped = time_global - weapon_equipped_tg -- end -- elseif weapon_is_equipped then -- -- we are unequipopo -- weapon_is_equipped = not weapon_is_equipped -- last_time_unequipped = time_global() -- time_since_weapon_equipped = -1 -- weapon_equipped_tg = -1 -- end -- end -- function show_on_weapon_lowered_available(wpn) -- if DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_ACTOR_SPRINT and (not IsPistol(wpn) and not IsMelee(wpn)) then -- return true -- else -- return false -- end -- end function isActorSprinting() return IsMoveState("mcSprint") end function actor_lowers_the_weapon() if actor_sprinting_wpn_lower_token then -- printf("consuming actor_sprinting_wpn_lower_token") actor_sprinting_wpn_lower_token = false weapon_is_lowered = true return false end if game.actor_weapon_lowered() and not weapon_is_lowered then -- printf("weapon lowered") weapon_is_lowered = true return true end return false end function actor_raise_the_weapon() if actor_sprinting_wpn_raise_token then -- printf("consuming actor_sprinting_wpn_raise_token") actor_sprinting_wpn_raise_token = false weapon_is_lowered = false return false end if weapon_is_lowered and not game.actor_weapon_lowered() then -- printf("weapon raised") weapon_is_lowered = false return true end return false end local minimap_tg_update = 0 local minimap_tg_update_step = 10 --[ms] local started_sprint_time = 0 local time_since_sprinting = 0 function dynahud_minimap_controller() local tg = time_global() if tg < minimap_tg_update then return end minimap_tg_update = tg + minimap_tg_update_step --printf("last_weapon_equipped Id: %s", last_weapon_equipped) if last_weapon_equipped and not level.object_by_id(last_weapon_equipped) then --printf("[dynahud] last_weapon_equipped was destroyed ") last_weapon_equipped = nil end local itm = db.actor:active_item() local slot = db.actor:active_slot() local det_active = db.actor:active_detector() local is_weapon = itm and IsWeapon(itm) or false local is_pda = itm and slot == 8 or slot == 14 or false if is_weapon and not is_pda and not det_active then if last_weapon_equipped == nil then last_weapon_equipped = itm:id() end if DYNAHUD_WEAPON_HUD_AUTOHIDE and last_weapon_equipped ~= itm:id() then last_weapon_equipped = itm:id() -- printf("weapon changed") update_shooting_tg() end if not weapon_is_equipped then -- transition to equipping a weapon if DYNAHUD_WEAPON_HUD_AUTOHIDE and player_action ~= ACTION.AMMO_CHECK then -- printf("weapon equipped") update_shooting_tg() end if DYNAHUD_DYNAMIC_MINIMAP_HIDE then -- printf("[dynahud] minimap controller hiding minimap") if player_action ~= ACTION.AMMO_CHECK then show_minimap(false) elseif MINIMAP.style == 0 then show_minimap(false) end end weapon_is_equipped = not weapon_is_equipped end if DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED or DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_ACTOR_SPRINT then if isActorSprinting() then if started_sprint_time == 0 then started_sprint_time = time_global() end -- printf("sprinting with weapon lowered") if DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_ACTOR_SPRINT then time_since_sprinting = time_global() - started_sprint_time local minimap_enabled = ui_options.get("video/hud/show_minimap") if time_since_sprinting > DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED_TIMEOUT and not minimap_enabled then -- printf("show on actor sprint --> showing minimap") show_minimap(true) weapon_is_lowered = true actor_sprinting_wpn_lower_token = true end else weapon_is_lowered = true actor_sprinting_wpn_raise_token = true actor_sprinting_wpn_lower_token = true end else local minimap_enabled = ui_options.get("video/hud/show_minimap") if time_since_sprinting > 0 and not minimap_enabled then -- printf("not enough time sprinting to show the minimap") weapon_is_lowered = true actor_sprinting_wpn_raise_token = true actor_sprinting_wpn_lower_token = true time_since_sprinting = 0 end started_sprint_time = 0 if actor_lowers_the_weapon() then -- printf("actor_lowered_the_weapon --> showing minimap") local minimap_enabled = ui_options.get("video/hud/show_minimap") if not minimap_enabled then if DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED then show_minimap(true) end else if DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED then -- printf("Try to RemoveTimeEvent") RemoveTimeEvent("dynahud_minimap", "delayed_hide") end end end if actor_raise_the_weapon() then -- printf("actor_raised_the_weapon --> hiding minimap") local minimap_enabled = ui_options.get("video/hud/show_minimap") if minimap_enabled then if time_since_sprinting > 0 then -- printf("CreateTimeEvent dynahud_minimap:delayed_hide") CreateTimeEvent("dynahud_minimap", "delayed_hide", DYNAHUD_DYNAMIC_MINIMAP_HIDE_ON_END_SPRINT_TIMEOUT, function() -- printf("Consuming Event dynahud_minimap:delayed_hide") show_minimap(false) return true end) time_since_sprinting = 0 else if DYNAHUD_DYNAMIC_MINIMAP_SHOW_ON_WPN_LOWERED then show_minimap(false) end end end end end end elseif weapon_is_equipped then -- printf("weapon_is_equipped -> generating dynamic_minimap_autoshow_token ") weapon_is_equipped = not weapon_is_equipped last_time_unequipped = time_global() dynamic_minimap_autoshow_token = true end local time_since_unequipped = time_global() - last_time_unequipped if not weapon_is_equipped and dynamic_minimap_autoshow_token and time_since_unequipped > DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE_TIMEOUT then -- printf("consuming dynamic_minimap_autoshow_token") if DYNAHUD_DYNAMIC_MINIMAP_SHOW then show_minimap(true) end dynamic_minimap_autoshow_token = false end end local function dynahud_actor_on_update() -- the main hud if DYNAHUD_MAIN_HUD_AUTOHIDE then dynahud_main_hud_controller() end -- the minimap hud if DYNAHUD_DYNAMIC_MINIMAP_AUTOHIDE then dynahud_minimap_controller() end -- the bhs hud if mod is available if DYNAHUD_BHS_SUPPORT then dynahud_bhs_hud_controller() end -- the mag hud if mod is available if DYNAHUD_MAGREDUX_SUPPORT then dynahud_mag_hud_controller() end if DYNAHUD_WEAPON_HUD_AUTOHIDE then dynahud_weapon_hud_controller() end if DYNAHUD_ICONS_HUD_AUTOHIDE then status_icons_controller() end if DYNAHUD_COLD_SYSTEM_SUPPORT then cold_system_controller() end if DYNAHUD_COMPANION_HUD_AUTOHIDE then update_companion_hud() end end ----------------------- Utility ------------------------------------------------------ function ui_show_cur_ammo(show) local pos = ActorMenu.get_maingame().m_ui_hud_states.m_ui_weapon_cur_ammo:GetWndPos() pos.x = ((not show and pos.x > 0) or (show and pos.x < 0)) and (-1 * pos.x) or pos.x ActorMenu.get_maingame().m_ui_hud_states.m_ui_weapon_cur_ammo:SetWndPos(pos) end function ui_show_weapon_icon(show) pos = ActorMenu.get_maingame().m_ui_hud_states.m_ui_weapon_icon:GetWndPos() pos.x = ((not show and pos.x > 0) or (show and pos.x < 0)) and (-1 * pos.x) or pos.x ActorMenu.get_maingame().m_ui_hud_states.m_ui_weapon_icon:SetWndPos(pos) end local dynamic_minimap_autoshow_token = false function show_minimap(show) -- printf("[dynahud] show minimap %s", show) -- minimap_enabled = ui_options.get("video/hud/show_minimap") -- ui_options.set("video/hud/show_minimap", not minimap_enabled ) printf("RemoveTimeEvent in show_minimap") RemoveTimeEvent("dynahud_minimap", "delayed_hide") local maingameui = ActorMenu.get_maingame() if (maingameui and maingameui.UIZoneMap) then maingameui.UIZoneMap.disabled = not show maingameui.UIMotionIcon:Show(maingameui.UIZoneMap.disabled == false) ui_options.set("video/hud/show_minimap", show ) end end print_tip = print_tip or function(text,delay, ...) if DYNAHUD_NOTIFICATIONS then local text = tostring(text) printf(text, ...) if not db.actor then return end local ico = "ui_inGame2_Dengi_otdani" local text_color = utils_xml.get_color("pda_white") local arg_color = utils_xml.get_color("d_green") local function colorize(s) return arg_color .. s .. text_color end local i = 0 local t = {...} if #t > 0 then local function sr(a) i = i + 1 if (type(t[i]) == 'userdata') then if (t[i].x and t[i].y) then return colorize(vec_to_str(t[i])) end return colorize('userdata') end return colorize(tostring(t[i])) end text = string.gsub(game.translate_string(text), "%%s", sr) else text = game.translate_string(text) end text = text_color .. text if delay == nil then delay = 6000 end news_manager.send_tip(db.actor, text, nil, ico, delay) end end ----------------------- WEAPON HUD SUPPORT --------------------------------------------- local last_time_fired = -1 local time_since_nofiring = -1 local stop_autohide_ammo_hud = false function update_shooting_tg() -- EFP HUD never shows weapon hud if HUD.style == -2 then return end last_time_fired = time_global() time_since_nofiring = 0 show_ammo_hud() end function show_ammo_hud() ui_show_cur_ammo(true) ui_show_weapon_icon(true) if ui_bartgac_mcm then ui_bartgac_mcm.BGAC_ON() end show_firemode_gui(true) weapon_hud_visible = true end local function autohide_ammo_hud() time_since_nofiring = time_global() - last_time_fired if time_since_nofiring > DYNAHUD_DYNAMIC_WEAPON_HUD_AUTOHIDE_TIMEOUT then hide_ammo_hud() end end function hide_ammo_hud() ui_show_cur_ammo(false) ui_show_weapon_icon(false) if ui_bartgac_mcm then ui_bartgac_mcm.BGAC_OFF() end show_firemode_gui(false) weapon_hud_visible = false end local function enter_weapon_aiming() --printf("enter_weapon_aiming") if DYNAHUD_WEAPON_HUD_AUTOHIDE and DYNAHUD_DYNAMIC_WEAPON_HUD_AIM_SHOW then update_shooting_tg() end end function exit_weapon_aiming() --printf("exit_weapon_aiming") if DYNAHUD_WEAPON_HUD_AUTOHIDE and DYNAHUD_DYNAMIC_WEAPON_HUD_AIM_SHOW and DYNAHUD_DYNAMIC_WEAPON_HUD_AIM_SHOW_QUICKHIDE then hide_ammo_hud() end end function weapon_hud_update(action) player_action = action if player_action == ACTION.RELOAD and DYNAHUD_DYNAMIC_WEAPON_HUD_RELOAD_SHOW then update_shooting_tg() elseif player_action == ACTION.AMMO_CHECK and DYNAHUD_DYNAMIC_WEAPON_HUD_WEAPONCHECK_SHOW then update_shooting_tg() end end local function dynahud_weapon_hud_update() if not DYNAHUD_MAGREDUX_SUPPORT then -- releoad if DYNAHUD_DYNAMIC_WEAPON_HUD_RELOAD_SHOW then local itm = db.actor:active_item() local is_weapon = itm and IsWeapon(itm) or false local state = itm and itm:get_state() if is_weapon and state == 7 and not reloading_started then reloading_started = true weapon_hud_update(ACTION.RELOAD) elseif is_weapon and state == 0 and reloading_started then reloading_started = false end end end if DYNAHUD_WEAPON_HUD_AUTOHIDE and not stop_autohide_ammo_hud and weapon_hud_visible then autohide_ammo_hud() end end local weapon_hud_tg_update = 0 local weapon_hud_tg_update_step = 100 --[ms] function dynahud_weapon_hud_controller() local tg = time_global() if tg < weapon_hud_tg_update then return end weapon_hud_tg_update = tg + weapon_hud_tg_update_step dynahud_weapon_hud_update() end function show_firemode_gui(show) pos = ActorMenu.get_maingame().m_ui_hud_states.m_fire_mode:GetWndPos() pos.x = ((not show and pos.x > 0) or (show and pos.x < 0)) and (-1 * pos.x) or pos.x -- Raven, no! ActorMenu.get_maingame().m_ui_hud_states.m_fire_mode:SetWndPos(pos) end ----------------------- MAIN HUD SUPPORT --------------------------------------------- function dynahud_autohide_main_hud() local maingameui = ActorMenu.get_maingame() -- hide -- Health autohide will only kick in if health above of a threshold and after a certain timeout since being stable if db.actor.health > DYNAHUD_MAIN_HUD_HIDE_HEALTH_THRESHOLD then local time_since_last_damage = time_global() - last_time_health_change if (time_since_last_damage > DYNAHUD_MAIN_HUD_HIDE_HEALTH_AUTOHIDE_TIMEOUT) then maingameui.m_ui_hud_states.m_ui_health_bar_show = false end else maingameui.m_ui_hud_states.m_ui_health_bar_show = true end end function check_all_mainhud_bars_hidden() local maingameui = ActorMenu.get_maingame() --printf("m_ui_psy_bar_show %s", maingameui.m_ui_hud_states.m_ui_psy_bar_show) --printf("m_ui_stamina_bar_show %s", maingameui.m_ui_hud_states.m_ui_stamina_bar_show) --printf("m_ui_health_bar_show %s", maingameui.m_ui_hud_states.m_ui_health_bar_show) local radbar_on = false if db.actor.radiation > 0 then --printf("db.actor.radiation %s", db.actor.radiation) radbar_on = true end return not radbar_on and not maingameui.m_ui_hud_states.m_ui_psy_bar_show and not maingameui.m_ui_hud_states.m_ui_stamina_bar_show and not maingameui.m_ui_hud_states.m_ui_health_bar_show end local preview_timer_tg = -1 preview_on = false local function preview_vitals() --printf("preview_vitals") preview_timer_tg = time_global() preview_on = true end local function check_preview_expired() local time_since_preview = time_global() - preview_timer_tg --printf("time_since_preview %s", time_since_preview) if time_since_preview > DYNAHUD_MAIN_HUD_PREVIEW_TIME then preview_timer_tg = -1 preview_on = false end --printf("is_preview_on %s",preview_on ) return preview_on end local all_bars_hidden_tg = -1 local time_since_all_bars_hidden = -1 function dynahud_main_hud_update() local maingameui = ActorMenu.get_maingame() if preview_on then check_preview_expired() end local psy_health if get_psy_health then psy_health = get_psy_health() else psy_health = db.actor.psy_health end if psy_health <= DYNAHUD_MAIN_HUD_HIDE_PSY_THRESHOLD or preview_on then maingameui.m_ui_hud_states.m_ui_psy_bar_show = true else maingameui.m_ui_hud_states.m_ui_psy_bar_show = false end if db.actor.power <= DYNAHUD_MAIN_HUD_HIDE_POWER_THRESHOLD or preview_on then maingameui.m_ui_hud_states.m_ui_stamina_bar_show = true else maingameui.m_ui_hud_states.m_ui_stamina_bar_show = false end local health_delta = myhealth - db.actor.health -- always show health bar if actor is damaged or healing if health_delta>0.0001 or health_delta<-0.0001 or preview_on then last_time_health_change = time_global() maingameui.m_ui_hud_states.m_ui_health_bar_show = true else dynahud_autohide_main_hud() end myhealth=db.actor.health if DYNAHUD_MAIN_HUD_BG_AUTOHIDE_TIMEOUT < DYNAHUD_MAIN_HUD_BG_AUTOHIDE_TIMEOUT_DISABLE then main_hud_bg_controller() end end main_hud_bg_visible = nil function main_hud_bg_controller() --printf("main_hud_bg_visible %s",main_hud_bg_visible) local main_hud_bars_hidden = check_all_mainhud_bars_hidden() if main_hud_bars_hidden then --printf("all_mainhud_bars_hidden true") -- bars are hidden if main_hud_bg_visible then --printf("lets autohide_mainhud_bg") autohide_mainhud_bg() end else --printf("all_mainhud_bars_hidden false") if not main_hud_bg_visible then autoshow_main_hud_bg() end end end local MAIN_HUD_ON = "on" local MAIN_HUD_OFF = "off" local function refresh_status_icons(main_hud_status) if DYNAHUD_ICONS_HUD_AUTOHIDE then --printf("refresh_status_icons main hud is $s", main_hud_status) if z_alticons and z_alticons.dynamic_icons_hud then if main_hud_status == MAIN_HUD_ON then z_alticons.main_hud_bg_on_status_icons() else z_alticons.main_hud_bg_off_status_icons() end actor_status.deactivate_hud() actor_status.activate_hud() end end end local mainhud_hidden_tg = -1 function autohide_mainhud_bg() --printf("autohide_mainhud_bg") if time_since_all_bars_hidden < 0 and all_bars_hidden_tg < 0 then --printf("all bars have transitioned from visible to hidden") -- all bars have transitioned from visible to hidden, take timestamp and wait timeout seconds before hiding bg all_bars_hidden_tg = time_global() time_since_all_bars_hidden = 0 else -- we are counting since last time all bars did hide time_since_all_bars_hidden = time_global() - all_bars_hidden_tg --printf("time_since_all_bars_hidden %s", time_since_all_bars_hidden) if time_since_all_bars_hidden > DYNAHUD_MAIN_HUD_BG_AUTOHIDE_TIMEOUT then -- time to hide the main hud bg show_mainhud_bg(false) main_hud_bg_visible = false mainhud_hidden_tg = time_global() refresh_status_icons(MAIN_HUD_OFF) end end end function autoshow_main_hud_bg() refresh_status_icons(MAIN_HUD_ON) if DYNAHUD_MAIN_HUD_PREVIEW_ON_SHOW then preview_vitals() end show_mainhud_bg(true) time_since_all_bars_hidden = -1 all_bars_hidden_tg = -1 mainhud_hidden_tg = -1 main_hud_bg_visible = true end function show_mainhud_bg(show) local pos = ActorMenu.get_maingame().m_ui_hud_states["m_back"]:GetWndPos() pos.y = ((not show and pos.y > 0) or (show and pos.y < 0)) and (-1 * pos.y) or pos.y ActorMenu.get_maingame().m_ui_hud_states["m_back"]:SetWndPos(pos) end function show_mainhud_quick_slots(show) -- local pos = ActorMenu.get_maingame().m_ui_hud_states["m_ui_quick_slot"]:GetWndPos() -- pos.y = ((not show and pos.y > 0) or (show and pos.y < 0)) and (-1 * pos.y) or pos.y -- ActorMenu.get_maingame().m_ui_hud_states["m_ui_quick_slot"]:SetWndPos(pos) -- local pos = ActorMenu.get_maingame().m_ui_hud_states["quick_slot1"]:GetWndPos() -- pos.y = ((not show and pos.y > 0) or (show and pos.y < 0)) and (-1 * pos.y) or pos.y -- ActorMenu.get_maingame().m_ui_hud_states["quick_slot1"]:SetWndPos(pos) -- local pos = ActorMenu.get_maingame().m_ui_hud_states["quick_slot2"]:GetWndPos() -- pos.y = ((not show and pos.y > 0) or (show and pos.y < 0)) and (-1 * pos.y) or pos.y -- ActorMenu.get_maingame().m_ui_hud_states["quick_slot2"]:SetWndPos(pos) -- local pos = ActorMenu.get_maingame().m_ui_hud_states["quick_slot3"]:GetWndPos() -- pos.y = ((not show and pos.y > 0) or (show and pos.y < 0)) and (-1 * pos.y) or pos.y -- ActorMenu.get_maingame().m_ui_hud_states["quick_slot3"]:SetWndPos(pos) end local icons_hud_tg_update = 0 local icons_hud_tg_update_step = 100 --[ms] local status_icons_hidden = false local status_icons_hidden_tg = -1 local preview_status_icons = false local preview_status_icons_tg = - 1 function status_icons_controller() if USE_UPDATE_STEP then local tg = time_global() if tg < icons_hud_tg_update then return end icons_hud_tg_update = tg + icons_hud_tg_update_step end if preview_status_icons then local time_since_preview_status_icons = time_global() - preview_status_icons_tg if time_since_preview_status_icons > DYNAHUD_ICONS_HUD_PREVIEW_TIME then preview_status_icons = false preview_status_icons_tg = -1 end return end if not main_hud_bg_visible then -- printf("mainhud_hidden_tg %s ", mainhud_hidden_tg) local time_since_mainhud_hidden = time_global() - mainhud_hidden_tg local icon_timers_expiring = false if DYNAHUD_ICONS_HUD_TIMERS then icon_timers_expiring = actor_status.is_icon_expiring(DYNAHUD_ICONS_HUD_TIMERS_EXPIRING) end --printf("time_since_mainhud_hidden %s ", time_since_mainhud_hidden) if time_since_mainhud_hidden > DYNAHUD_ICONS_HUD_AUTOHIDE_TIMEOUT and not status_icons_hidden and not icon_timers_expiring then -- printf("deactivate_icons_hud") actor_status.deactivate_hud() status_icons_hidden = true status_icons_hidden_tg = time_global() else -- printf("cannot deactivate_icons_hud") local time_since_status_icons_hidden = time_global() - status_icons_hidden_tg if status_icons_hidden and (icon_timers_expiring or time_since_status_icons_hidden > DYNAHUD_ICONS_HUD_PREVIEW_SHOW_TIMER) then -- printf("activate_icons_hud") if time_since_status_icons_hidden > DYNAHUD_ICONS_HUD_PREVIEW_SHOW_TIMER then actor_status.activate_hud(true) else actor_status.activate_hud() end status_icons_hidden = false preview_status_icons = true status_icons_hidden_tg = -1 preview_status_icons_tg = time_global() end end elseif status_icons_hidden then -- printf("main_hud_bg_visible") actor_status.activate_hud() status_icons_hidden = false preview_status_icons = false status_icons_hidden_tg = -1 preview_status_icons_tg = -1 end end function show_status_icons() if DYNAHUD_ICONS_HUD_AUTOHIDE then if status_icons_hidden then --printf("show_status_icons") actor_status.activate_hud() status_icons_hidden = false preview_status_icons = true status_icons_hidden_tg = -1 preview_status_icons_tg = time_global() end end end ------------------------ COLD SYSTEM ----------------------------------- function dynamic_cold_system_init() DYNAHUD_DYNAMIC_COLD_SYSTEM_HUD_KEYBIND = tonumber(cold_system_mcm.get_config("keybind")) local cold_t = alife_storage_manager.get_state().cold local cold_val = cold_t and cold_t.val if cold_val then printf("cold_val stored was %s", cold_val) else printf("cannot read cold_system cold table from save") cold_val = 0 end if cold_val > DYNAHUD_DYNAMIC_COLD_SYSTEM_SAFE_THRESHOLD then cold_val_next_breakpoint = DYNAHUD_DYNAMIC_COLD_SYSTEM_BREAKPOINT * math.ceil(cold_val/DYNAHUD_DYNAMIC_COLD_SYSTEM_BREAKPOINT) if cold_val_next_breakpoint > 2000 then cold_val_next_breakpoint = 2000 end else cold_val_next_breakpoint = DYNAHUD_DYNAMIC_COLD_SYSTEM_SAFE_THRESHOLD end printf("[dynahud] cold system starting with cold_val %s and cold_val_next_breakpoint %s", cold_val, cold_val_next_breakpoint) end local last_cold_val = 0 local cold_system_show_recovery = false local cold_system_critical = false function cold_system_update() local cold_t = alife_storage_manager.get_state().cold local cold_val = cold_t and cold_t.val local cold_sickness_val = cold_t and cold_t.sickness if not cold_t then --printf("cannot read cold_system cold table from save") local state = {} cold_system.save_state(state) if state then cold_t = dup_table(state.cold) cold_val = cold_t and cold_t.val else cold_val = 0 end end --printf("cold_val %s", cold_val) -- printf("cold_sickness_val %s", cold_sickness_val) if cold_val > DYNAHUD_DYNAMIC_COLD_SYSTEM_CRITICAL_THRESHOLD then if not cold_system_critical then ui_mcm.set("cold_system/hud", true) end cold_system_critical = true elseif cold_val > cold_val_next_breakpoint then if cold_system_critical then cold_system_critical = false ui_mcm.set("cold_system/hud", false) end -- hud show up on breakpoints only when not in static mode if not cold_system_show_recovery then cold_system.on_key_press(DYNAHUD_DYNAMIC_COLD_SYSTEM_HUD_KEYBIND) cold_val_next_breakpoint = cold_val + DYNAHUD_DYNAMIC_COLD_SYSTEM_BREAKPOINT end end local cold_val_delta = cold_val - last_cold_val if cold_val_delta < 0 then -- cold value decreasing, we want to the hud always visible if not cold_system_show_recovery then if DYNAHUD_DYNAMIC_COLD_SYSTEM_SHOW_RECOVERY then ui_mcm.set("cold_system/hud", true) cold_system_show_recovery = true end end -- we need to downgrage the breakpoint scale as cold goes down if cold_val > DYNAHUD_DYNAMIC_COLD_SYSTEM_SAFE_THRESHOLD then cold_val_next_breakpoint = DYNAHUD_DYNAMIC_COLD_SYSTEM_BREAKPOINT * math.ceil(cold_val/DYNAHUD_DYNAMIC_COLD_SYSTEM_BREAKPOINT) else cold_val_next_breakpoint = DYNAHUD_DYNAMIC_COLD_SYSTEM_SAFE_THRESHOLD end else -- cold value increasing, we want the hud to show up only at breakpoints -- disable show on recovery if enabled if cold_system_show_recovery then ui_mcm.set("cold_system/hud", false) cold_system_show_recovery = false end end last_cold_val = cold_val end local cold_hud_tg_update = 0 local cold_hud_tg_update_step = 1000 --[ms] function cold_system_controller() if USE_UPDATE_STEP then local tg = time_global() if tg < cold_hud_tg_update then return end cold_hud_tg_update = tg + cold_hud_tg_update_step end if DYNAHUD_DYNAMIC_COLD_SYSTEM_ENABLE then cold_system_update() end end ----------------------- BHS HUD SUPPORT ---------------------------------------------- function enable_bhs_hud() dynahud_bhs_hud_visible = false dynahud_dynamic_bhs_hud_on = true zzz_player_injuries.show_hud_type = 0 dynahud_pref_hud_type = 0 print_tip("ui_mcm_dynahud_dynamic_bhs_hud_enabled") print_tip("ui_mcm_dynahud_dynamic_bhs_hud_on") end function disable_bhs_hud() zzz_player_injuries.show_hud_type = 0 dynahud_bhs_hud_visible = false dynahud_dynamic_bhs_hud_on = false dynahud_pref_hud_type = 0 print_tip("ui_mcm_dynahud_dynamic_bhs_hud_disabled") end function dynahud_bhs_hud_switcher() -- show_hud_type=0 hides the bhs hud (in this mode we can dynamically make it appear or disappear based on conditions - thus dynamic bhs) -- the dynamic bhs will use the `show_hud_type` toggle to enable/disable the bhs hud on necessity and instad the `dynahud_pref_hud_type` will be used to understand the user preferences around bhs (H hotkey) -- show_hud_type=2 displays the bhs hud (in this mod the bhs is statically displayed always) --printf("dynahud - dynahud_bhs_hud_switcher called") if dynahud_pref_hud_type==0 then zzz_player_injuries.show_hud_type=2 dynahud_pref_hud_type = 2 dynahud_dynamic_bhs_hud_on = false if not dynahud_bhs_hud_visible then dynahud_bhs_hud_visible = true end zzz_player_injuries.show_hud_change_time=time_global() print_tip("ui_mcm_dynahud_dynamic_bhs_hud_off") print_tip("ui_mcm_dynahud_dynamic_bhs_hud_off_help1") elseif dynahud_pref_hud_type==2 then zzz_player_injuries.show_hud_type=0 dynahud_pref_hud_type = 0 dynahud_dynamic_bhs_hud_on = true bhs_hud_dismissed = false if dynahud_bhs_hud_visible then dynahud_bhs_hud_visible = false end zzz_player_injuries.show_hud_change_time=time_global() print_tip("ui_mcm_dynahud_dynamic_bhs_hud_on") if limbs_fully_healed then print_tip("ui_mcm_dynahud_dynamic_bhs_hud_on_noinjuries") else print_tip("ui_mcm_dynahud_dynamic_bhs_hud_on_injuried") end end end local head_difference local torso_difference local rightarm_difference local leftarm_difference local rightleg_difference local leftleg_difference local function evaluate_player_injury() head_difference = zzz_player_injuries.maxhp.head - zzz_player_injuries.health.head + zzz_player_injuries.timedhp.head torso_difference = zzz_player_injuries.maxhp.torso - zzz_player_injuries.health.torso + zzz_player_injuries.timedhp.torso rightarm_difference = zzz_player_injuries.maxhp.rightarm - zzz_player_injuries.health.rightarm + zzz_player_injuries.timedhp.leftarm leftarm_difference = zzz_player_injuries.maxhp.leftarm - zzz_player_injuries.health.leftarm + zzz_player_injuries.timedhp.rightarm rightleg_difference = zzz_player_injuries.maxhp.rightleg - zzz_player_injuries.health.rightleg + zzz_player_injuries.timedhp.leftleg leftleg_difference = zzz_player_injuries.maxhp.leftleg - zzz_player_injuries.health.leftleg + zzz_player_injuries.timedhp.rightleg limbs_total_injury = head_difference + torso_difference + rightarm_difference + leftarm_difference + rightleg_difference + leftleg_difference --printf("limbs_total_injury %s", limbs_total_injury) end local function is_serious_injury() local is_serious_injury = false if zzz_player_injuries.health.head < 4 or zzz_player_injuries.health.torso < 4 or zzz_player_injuries.health.rightarm < 3 or zzz_player_injuries.health.leftarm < 3 or zzz_player_injuries.health.rightleg < 3 or zzz_player_injuries.health.leftleg < 3 then is_serious_injury = true end return is_serious_injury end function check_limbs_fully_healed() evaluate_player_injury() limbs_fully_healed = true if (head_difference > 0 or torso_difference > 0 or rightarm_difference > 0 or leftarm_difference > 0 or rightleg_difference > 0 or leftleg_difference > 0) then limbs_fully_healed = false end if previous_limbs_total_injury ~= limbs_total_injury then bhs_hud_dismissed = false end end function dynahud_bhs_hud_dismiss_update() -- printf("time_bhs_hud_dismissed = %s | DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_TIMEOUT %s | MAX %s | remaining %s", time_bhs_hud_dismissed, DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_TIMEOUT, DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_TIMEOUT_MAX, (time_global() - time_bhs_hud_dismissed)) if DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_TIMEOUT < DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_TIMEOUT_MAX then if bhs_hud_dismissed and (time_global() - time_bhs_hud_dismissed) > DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_TIMEOUT then bhs_hud_dismissed = false end end end local function always_hide() local always_hide = false if DYNAHUD_DYNAMIC_BHS_HUD_ALWAYS_HIDE then local serious_injured = is_serious_injury() if serious_injured then if DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_FORCE then always_hide = true else always_hide = false end else always_hide = true end end return always_hide end function dynahud_dynamic_bhs_hud_update() -- call this function only if dynahud_dynamic_bhs_hud_on == true -- this function is resposible to update the dynamic bhs hud based on the limb status -- broken limbs -- bhs hud not visible --> show hud -- bhs hud visible --> do nothing -- limbs healed --> hide hud -- bhs hud not visible --> do nothing -- bhs hud visible --> hide hud local time_since_dyn_bhs_update = time_global() - last_time_dyn_bhs_updated -- we try to update the bhs hud every `dynahud_dyn_bhs_update_tick` (default 6 seconds) if (time_since_dyn_bhs_update > DYNAHUD_DYNAMIC_BHS_HUD_UPDATE_TICK) then -- check if any limb is broken check_limbs_fully_healed() if not limbs_fully_healed and not bhs_hud_dismissed and not always_hide() then -- broken limbs -- we show the bhs hud only if it's not visible if not dynahud_bhs_hud_visible then zzz_player_injuries.show_hud_type=2 dynahud_bhs_hud_visible = true end -- update the last bhs_update timestamp last_time_dyn_bhs_updated = time_global() -- limbs healed else -- bhs hud visible --> hide hud, hiding hud will be done after a while (default 15 seconds) though if time_since_dyn_bhs_update > DYNAHUD_DYNAMIC_BHS_HUD_UPDATE_HIDE_TIMEOUT then if dynahud_bhs_hud_visible and not inventory_opened then zzz_player_injuries.show_hud_type=0 dynahud_bhs_hud_visible = false end -- update the last bhs_update timestamp last_time_dyn_bhs_updated = time_global() end end end end function create_dismiss_bhs_event() --printf("[dynahud] priming time event bhs_keypress:bhs_keypress_long") CreateTimeEvent("bhs_keypress", "bhs_keypress_long", 0.5, function() --printf("fired time event bhs_keypress:bhs_keypress_long") bhs_change_state = true if not dynahud_dynamic_bhs_hud_on then print_tip("ui_mcm_dynahud_dynamic_bhs_off_dismiss_not_allowed") --printf("bhs - timed event fired for bhs hud dismiss [false:dynahud_dynamic_bhs_hud_off]") return true end local serious_injured = is_serious_injury() if serious_injured and not DYNAHUD_DYNAMIC_BHS_HUD_DISMISS_FORCE then print_tip("ui_mcm_dynahud_bhs_dismiss_not_allowed") --printf("bhs - timed event fired for bhs hud dismiss [false: serious_injured]") return true end -- printf("dynahud_bhs_hud_visible %s inventory_opened %s",dynahud_bhs_hud_visible, inventory_opened) if dynahud_bhs_hud_visible and not inventory_opened then zzz_player_injuries.show_hud_type=0 dynahud_bhs_hud_visible = false bhs_hud_dismissed = true time_bhs_hud_dismissed = time_global() previous_limbs_total_injury = limbs_total_injury print_tip("ui_mcm_dynahud_bhs_dismissed") --printf("bhs - timed event fired for bhs hud dismiss [true]") return true end --printf("bhs - timed event fired for bhs hud dismiss [false]") return true end) end ------------------------ Overriding zzz_player_injuries functions ------------------------ local inv_closed_hud_type = nil local function ActorMenu_on_mode_changed(mode,last_mode) --printf("ActorMenu_on_mode_changed mode %s last_mode %s",mode,last_mode ) if mode==1 then if DYNAHUD_BHS_SUPPORT then inv_closed_hud_type = zzz_player_injuries.show_hud_type end inventory_opened = true -- when opening the inventory the bhs hud will be shown only if dynahud_dynamic_bhs_hud_on if DYNAHUD_BHS_SUPPORT and zzz_player_injuries.show_hud_type~=2 then zzz_player_injuries.show_hud_type=2 dynahud_bhs_hud_visible = true end end if last_mode==1 then --inv closed -- when closing the inventory the bhs hud will be hidden if the dynahud_dynamic_bhs_hud_on is true and no limbs are broken inventory_opened = false --EmptyPreviewBars() if DYNAHUD_BHS_SUPPORT and zzz_player_injuries.show_hud_type==2 then if dynahud_dynamic_bhs_hud_on and not DYNAHUD_DYNAMIC_BHS_HUD_ALWAYS_HIDE then if limbs_fully_healed or bhs_hud_dismissed then zzz_player_injuries.show_hud_type=0 dynahud_bhs_hud_visible = false end elseif not dynahud_dynamic_bhs_hud_on then zzz_player_injuries.show_hud_type = inv_closed_hud_type if inv_closed_hud_type == 0 then dynahud_bhs_hud_visible = false else dynahud_bhs_hud_visible = true end end end if DYNAHUD_ICONS_HUD_AUTOHIDE and DYNAHUD_ICONS_HUD_INVENTORY_PREVIEW then show_status_icons() end end --looting closed end ----------------------- Input Keys handling --------------------------------------------- local function bhs_hud_on_key_press(dik) if dik == DIK_keys.DIK_H then create_dismiss_bhs_event() end end local function bhs_hud_on_key_release(dik) -- bhs hud toggle key if dik == DIK_keys.DIK_H then RemoveTimeEvent("bhs_keypress", "bhs_keypress_long") if not bhs_change_state then if DYNAHUD_DYNAMIC_BHS_HUD_AUTOHIDE then dynahud_bhs_hud_switcher() elseif DYNAHUD_BHS_PATCH ~= 2 then zzz_player_injuries.on_key_press(dik) end xr_sound.set_sound_play(db.actor:id(), "pda_tips") end bhs_change_state = false end end local function mainhud_on_key_release(dik) -- main hud toggle key local bind = dik_to_bind(dik) if (bind == key_bindings.kCUSTOM6) then local main_hud_on = get_console_cmd(1,"hud_draw") if main_hud_on then print_tip("ui_mcm_dynahud_main_hud_off", 1000) else print_tip("ui_mcm_dynahud_main_hud_on", 1000) end end end local compass_raised = false local function compass_on_key_press(dik) -- local KEY = ui_mcm.get("rax_mmt/keybind") if (dik == DIK_keys.DIK_RSHIFT) then local maingameui = ActorMenu.get_maingame() if (maingameui and maingameui.UIZoneMap) then local m_clipFrame = maingameui.UIZoneMap:MapFrame() local p = m_clipFrame:GetWndPos(); local m_background = maingameui.UIZoneMap:Background() local b = m_background:GetWndPos(); -- printf("frame p.x %s p.y %s",name, p.x, p.y) -- printf("bg b.x %s b.y %s", b.x, b.y) if not compass_raised then printf("raise compass") p.y = p.y - 100 b.y = b.y - 100 else printf("lower compass") p.y = p.y + 100 b.y = b.y + 100 end compass_raised = not compass_raised m_clipFrame:SetWndPos( vector2():set( p.x , p.y )); m_background:SetWndPos(vector2():set( b.x , b.y )); end end end local function on_key_release(dik) mainhud_on_key_release(dik) if DYNAHUD_BHS_SUPPORT then bhs_hud_on_key_release(dik) end companion_hud_on_key_release(dik) end local function on_key_press(dik) if DYNAHUD_BHS_SUPPORT then bhs_hud_on_key_press(dik) end companion_hud_on_key_press(dik) end ----------------------- MAGAZINES --------------------------------------------- -- local mag_hud_change_state = false -- local hud_visible_tg = 0 local reloading_started = false function dynahud_mags_ui_update(action) player_action = action -- printf("[dynahud] updating mag hud, following action %s", player_action) ui_mcm.set("magazines/hud/show_hud", true) mag_hud.on_screen_resolution_changed() ------- minimap hiding ---- minimap is hidden only whern on the bottom right corner if MINIMAP.style == 0 then -- printf("[dynahud] updating mag hud, hiding minimap") local minimap_enabled = ui_options.get("video/hud/show_minimap") minimap_while_weapon_equipped = minimap_enabled if minimap_enabled then show_minimap(false) end end ------- minimap hiding --- ammo and icon counter hiding local temp_hide_ammo_counter_icon = false if HUD.style == 0 then ui_show_cur_ammo(false) ui_show_weapon_icon(false) temp_hide_ammo_counter_icon = true if ui_bartgac_mcm then ui_bartgac_mcm.BGAC_OFF() end elseif player_action == ACTION.RELOAD and DYNAHUD_DYNAMIC_WEAPON_HUD_RELOAD_SHOW then update_shooting_tg() stop_autohide_ammo_hud = true elseif player_action == ACTION.AMMO_CHECK and DYNAHUD_DYNAMIC_WEAPON_HUD_WEAPONCHECK_SHOW then update_shooting_tg() stop_autohide_ammo_hud = true end --printf("HUD.style %s",HUD.style ) --printf("temp_hide_ammo_counter_icon %s",temp_hide_ammo_counter_icon) --printf("stop_autohide_ammo_hud %s",stop_autohide_ammo_hud) --- ammo and icon counter hiding CreateTimeEvent("dynahud_mag_hud", "hide_ui", DYNAHUD_DYNAMIC_MAGHUD_AUTOHIDE_TIMEOUT, function() --printf("Consuming Event dynahud_mag_hud:hide_ui") ui_mcm.set("magazines/hud/show_hud", false) mag_hud.on_screen_resolution_changed() -- printf("[dynahud] mag reload hud event triggered following action %s", player_action) ------- minimap showing ---- minimap is shown only if it was visible before the reload if MINIMAP.style == 0 then local minimap_enabled = ui_options.get("video/hud/show_minimap") if not minimap_enabled and minimap_while_weapon_equipped then show_minimap(true) end end ------- minimap handling --- ammo and icon counter showing --printf("temp_hide_ammo_counter_icon %s",temp_hide_ammo_counter_icon) --printf("stop_autohide_ammo_hud %s",stop_autohide_ammo_hud) stop_autohide_ammo_hud = false if temp_hide_ammo_counter_icon then ui_show_cur_ammo(true) ui_show_weapon_icon(true) if ui_bartgac_mcm then ui_bartgac_mcm.BGAC_ON() end end --- ammo and icon counter showing player_action = ACTION.IDLE -- mag_hud_change_state = true -- mag_hud_visible_tg = time_global() return true end) end function dynahud_mags_ui_update_ammocheck() if DYNAHUD_MAGREDUX_SUPPORT and DYNAHUD_DYNAMIC_MAGHUD_AUTOHIDE and DYNAHUD_DYNAMIC_MAGHUD_SHOW_AMMOCHECK then dynahud_mags_ui_update(ACTION.AMMO_CHECK) end end local function dynahud_mags_ui_update_jammin() local itm = db.actor:active_item() local is_weapon = itm and IsWeapon(itm) or false local is_suppoorted_weapon = magazines.is_supported_weapon(itm) local state = itm and itm:get_state() printf("DYNAHUD JAMMING weapon state %s",state ) dynahud_mags_ui_update(ACTION.UNJAMMING) end ----------------------------------- COMPANION HUD --------------------------------------- local companion_hud_preview_tg = -1 local companion_hud_preview_on = false function preview_companion_hud_event() CreateTimeEvent("companion_hud_keypress", "companion_hud_keypress_long", 0.5, function() --printf("companion_hud_keypress") if not companion_hud_visible then axr_companions.activate_hud() companion_hud_visible = true companion_hud_preview_on = true companion_hud_preview_tg = time_global() --printf("companion_hud_preview_on %s", companion_hud_preview_on) end return true end) end local function check_companion_hud_preview_expired() local time_since_preview = time_global() - companion_hud_preview_tg if time_since_preview > DYNAHUD_COMPANION_HUD_PREVIEW_TIME then companion_hud_preview_tg = -1 companion_hud_preview_on = false end return companion_hud_preview_on end function companion_hud_on_key_press(dik) local bind = dik_to_bind(dik) if bind == key_bindings.kCUSTOM18 then preview_companion_hud_event() end end function companion_hud_on_key_release(dik) local bind = dik_to_bind(dik) if bind == key_bindings.kCUSTOM18 then if DYNAHUD_COMPANION_HUD_AUTOHIDE then RemoveTimeEvent("companion_hud_keypress", "companion_hud_keypress_long") --printf("companion_hud_preview_on %s", companion_hud_preview_on) if not companion_hud_preview_on then --printf("axr_companions.on_key_release") axr_companions.on_key_release(dik) end else axr_companions.on_key_release(dik) end else axr_companions.on_key_release(dik) end end function is_companions_squad_in_danger() --printf("============================================================================================") local squad_is_peaceful = true for id,squad in pairs(axr_companions.companion_squads) do if (squad and squad.commander_id) then local i = 0 for k in squad:squad_members() do local npc = db.storage[k.id] and db.storage[k.id].object i = i+1 -- printf("companion[%s]", i) if npc then local is_peaceful = false -- check if is in fight if (npc and npc:alive()) then is_peaceful = (not npc:best_enemy()) and npc:dont_has_info("npcx_beh_ignore_combat") and true or false end -- printf("companion[%s] is_peaceful %s - dist: %s",k.id, is_peaceful, distance_between(db.actor,npc)) -- check if is too far away if DYNAHUD_COMPANION_CHECK_DISTANCE and npc and distance_between(db.actor,npc) > DYNAHUD_COMPANION_SAFE_DISTANCE then is_peaceful = false end squad_is_peaceful = squad_is_peaceful and is_peaceful -- printf("current calculation for squad is_peaceful %s", squad_is_peaceful) end -- printf("--") end end end if not squad_is_peaceful then printf("squad is under attack or attacking") end --printf("squad is resolved peaceful %s", squad_is_peaceful) --printf("============================================================================================") return not squad_is_peaceful end function init_companion_hud() if DYNAHUD_COMPANION_HUD_AUTOHIDE then local is_danger = is_companions_squad_in_danger() if is_danger then axr_companions.activate_hud() companion_hud_visible = true else -- axr_companions.deactivate_hud() -- companion_hud_visible = false axr_companions.activate_hud() companion_hud_visible = true companion_hud_preview_on = true companion_hud_preview_tg = time_global() end else axr_companions.activate_hud() end end local companions_hud_tg_update = 0 local companions_hud_tg_update_step = 1000 --[ms] function update_companion_hud() if USE_UPDATE_STEP then local tg = time_global() if tg < companions_hud_tg_update then return end companions_hud_tg_update = tg + companions_hud_tg_update_step end if companion_hud_preview_on then check_companion_hud_preview_expired() end --printf("[on update] companion_hud_preview_on %s", companion_hud_preview_on) local is_danger = is_companions_squad_in_danger() if is_danger and not companion_hud_visible then axr_companions.activate_hud() companion_hud_visible = true elseif not is_danger and companion_hud_visible and not companion_hud_preview_on then axr_companions.deactivate_hud() companion_hud_visible = false end end ----------------------------------- ON GAME START --------------------------------------- function on_game_start() initialize_plugins_support() RegisterScriptCallback("actor_on_first_update",dynahud_actor_on_first_update) RegisterScriptCallback("actor_on_update",dynahud_actor_on_update) if DYNAHUD_BHS_SUPPORT then UnregisterScriptCallback("on_key_press",zzz_player_injuries.on_key_press) end RegisterScriptCallback("ActorMenu_on_mode_changed",ActorMenu_on_mode_changed) RegisterScriptCallback("on_key_press",on_key_press) UnregisterScriptCallback("on_key_release",axr_companions.on_key_release) RegisterScriptCallback("on_key_release", on_key_release) RegisterScriptCallback("actor_on_net_destroy",dynahud_on_destroy) RegisterScriptCallback("actor_on_weapon_fired", update_shooting_tg) RegisterScriptCallback("actor_on_weapon_zoom_in", enter_weapon_aiming) RegisterScriptCallback("actor_on_weapon_zoom_out", exit_weapon_aiming) RegisterScriptCallback("actor_on_item_use",show_status_icons) end