CHANGELOG:

	‣Version 1.0.0
		Initial Release
	‣Version 1.0.1
		fixed indicator showing up for non-psyker classes
	‣Version 1.1.0
		restructured code
		removed redundant logic
		made some small optimizations
		added border glow & pulse effect
	‣Version 1.2.0
		added shield failing voice lines
		reorganized code for better readability & maintainability
	‣Version 1.3.0
		added color customization
		added option to only keep track of owned shields
		shield failing voice lines will now only play for owned shields
		added option for non-psyker classes to see the indicator
	‣Version 1.3.1
		fixed indicator remaining visible during cutscenes
		made some optimizations
		improved code readability
	‣Version 1.3.2
		fixed a rare issue where the shield failing voiceline could trigger immediately after a shield was spawned
	‣Version 1.4.0
		added option to prioritize shields based on proximity
		fixed indicator remaining visible if shield owner left while shield was being tracked
	‣Version 1.5.0
		restructured (better compartmentalized) code
		added shuffle functionality to avoid replaying the same voiceline back to back
		fixed indicator disappearing if settings were changed while visible
		most settings can now be changed on the fly
	‣Version 1.5.1
		added safeguard to prevent crash to desktop due to "stingray::plugin_api::unit::local_pose failed, UnitReference is not valid"
	‣Version 1.6.0
		added option to change the indicator's size/scale



class/function/hook notes:

	ForceFieldExtension.remaining_life()
	ForceFieldExtension.remaining_duration()
		*only work offline
		*can't get husk to work either

	ForceFieldExtension on_player_enter & on_player_exit
		*only work offline



random notes:

	hud element text color/s
		*located: widget.style.counter_text
			*relevant: text_color | default_text_color | disabled_text_color

	cheaper version of the current pulse logic (choppy/binary):
		if math.ceil(remaining_health) % 2 == 0 then
			bubblewidget.style.ability_frame_glow.size = { 160, 160 }
		else
			bubblewidget.style.ability_frame_glow.size = settings.frame.size
		end

	lua's 'ternary' (commonly used as such)
		condition and valA or valB
		is not a true ternary operation. Be careful if valA can be false/null. 
		if valA is false/null -> valB will always evaluate/return



general notes:

	no good idea yet as to how to mix the 2 values (hp/time) & show the outcome to the player well, without using 2 visual representations
	*TODO: find a good way to show both remaining time & health numerically without overwhelming the player

	DT seems to have an existing shield color change function based on shield (hp/time)?
	*bubble changes color over time by default
	*TODO: find & get data from that class/function instead