enderalse/source/scripts/_00e_gui_actorhealthbar.psc

224 lines
4.6 KiB
Plaintext
Raw Normal View History

Scriptname _00E_GUI_ActorHealthBar extends ski_widgetbase
float _scale = 1.0
int _maxEntries = 5
float _fadeInDuration = 250.0
float _fadeOutDuration = 750.0
float _moveDuration = 1000.0
float _removeDuration = 15000.0
Form[] _currentlyDisplayedActors
string function GetWidgetSource()
return "skyui/followerpanel.swf"
endFunction
string function GetWidgetType()
return "EFFPanel"
endFunction
int function GetVersion()
return 1
endFunction
float property Scale
float function get()
return _scale
endFunction
function set(float a_val)
_scale = a_val
if (Ready)
UpdateWidgetScale()
endIf
endFunction
endProperty
int Property MaxEntries
int function get()
return _maxEntries
endFunction
function set(int a_val)
_maxEntries = a_val
if (Ready)
UpdateMaxEntries()
endIf
endFunction
endProperty
float property FadeInDuration
float function get()
return _fadeInDuration
endFunction
function set(float a_val)
_fadeInDuration = a_val
if (Ready)
UpdateFadeInDuration()
endIf
endFunction
endProperty
float property FadeOutDuration
float function get()
return _fadeOutDuration
endFunction
function set(float a_val)
_fadeOutDuration = a_val
if (Ready)
UpdateFadeOutDuration()
endIf
endFunction
endProperty
float property MoveDuration
float function get()
return _moveDuration
endFunction
function set(float a_val)
_moveDuration = a_val
if (Ready)
UpdateMoveDuration()
endIf
endFunction
endProperty
float property RemoveDuration
float function get()
return _removeDuration
endFunction
function set(float a_val)
_removeDuration = a_val
if (Ready)
UpdateRemoveDuration()
endIf
endFunction
endProperty
; @override SKI_WidgetBase
event OnWidgetReset()
parent.OnWidgetReset()
UpdateWidgetScale()
UpdateMaxEntries()
UpdateFadeInDuration()
UpdateFadeOutDuration()
UpdateMoveDuration()
UpdateRemoveDuration()
endEvent
event OnGameReload()
If Game.GetModByName("SkyUI_SE.esp") == 255
return
endif
parent.OnGameReload()
if _currentlyDisplayedActors.length == 0
_currentlyDisplayedActors = new Form[4]
2021-10-05 22:22:24 +00:00
endif
RegisterForModEvent("Enderal_ShowActorHealth", "AddActors")
RegisterForModEvent("Enderal_HideActorHealth", "RemoveActors")
2021-10-05 22:22:24 +00:00
UI.Invoke(HUD_MENU, WidgetRoot + ".removeAllActors")
Actor PlayerRef = Game.GetForm(0x14) as Actor
if ! PlayerRef.IsInCombat()
int n = _currentlyDisplayedActors.Length
While n > 0
n -= 1
_currentlyDisplayedActors[n] = None
EndWhile
return
endif
2021-10-05 22:22:24 +00:00
Utility.Wait(FadeOutDuration / 1000.0 + 0.05)
2021-10-05 22:22:24 +00:00
int i = _currentlyDisplayedActors.Length
While i > 0
i -= 1
2021-10-05 22:22:24 +00:00
Actor akActor = _currentlyDisplayedActors[i] as Actor
If !akActor || akActor.GetFormID() == 0 || akActor.IsDeleted() || akActor.IsDisabled()
_currentlyDisplayedActors[i] = None
2021-10-05 22:22:24 +00:00
else
AddActorRaw(akActor)
EndIf
EndWhile
Cell kCell = PlayerRef.GetParentCell()
2021-10-05 22:22:24 +00:00
Int iIndex = kCell.GetNumRefs(43) ; NPC
While iIndex
iIndex -= 1
Actor akActor = kCell.GetNthRef(iIndex, 43) as Actor
if akActor && akActor.IsPlayerTeammate()
2021-10-05 22:22:24 +00:00
AddActors(akActor)
endif
EndWhile
Endevent
Function UpdateWidgetScale()
UI.InvokeFloat(HUD_MENU, WidgetRoot + ".setScale", _scale * 100.0)
EndFunction
Function UpdateMaxEntries()
UI.InvokeInt(HUD_MENU, WidgetRoot + ".setEntryCount", _maxEntries)
EndFunction
Function UpdateFadeInDuration()
UI.InvokeFloat(HUD_MENU, WidgetRoot + ".setFadeInDuration", _fadeInDuration / 1000.0)
EndFunction
Function UpdateFadeOutDuration()
UI.InvokeFloat(HUD_MENU, WidgetRoot + ".setFadeOutDuration", _fadeOutDuration / 1000.0)
EndFunction
Function UpdateMoveDuration()
UI.InvokeFloat(HUD_MENU, WidgetRoot + ".setMoveDuration", _moveDuration / 1000.0)
EndFunction
Function UpdateRemoveDuration()
UI.InvokeFloat(HUD_MENU, WidgetRoot + ".setRemoveDuration", _removeDuration)
EndFunction
Function AddActors(Form aForm)
if ! aForm
return
endif
2021-10-05 22:22:24 +00:00
if _currentlyDisplayedActors.find(aForm) < 0
int i = _currentlyDisplayedActors.length
while i > 0
i = i - 1
if _currentlyDisplayedActors[i] == None
_currentlyDisplayedActors[i] = aForm
i = 0 ; Break
Endif
Endwhile
;we do not have enough place in the array - the added actor will not be save game persistent
2021-10-05 22:22:24 +00:00
endif
AddActorRaw(aForm)
EndFunction
Function RemoveActors(Form aForm)
if ! aForm
return
endif
int i = _currentlyDisplayedActors.find(aForm)
if i >= 0
_currentlyDisplayedActors[i] = None
Endif
2021-10-05 22:22:24 +00:00
RemoveActorRaw(aForm)
EndFunction
Function AddActorRaw(Form aActor)
UI.InvokeForm(HUD_MENU, WidgetRoot + ".addPanelActors", aActor)
EndFunction
Function RemoveActorRaw(Form aActor)
UI.InvokeForm(HUD_MENU, WidgetRoot + ".removePanelActors", aActor)
EndFunction