Added SkyUI script sources
This commit is contained in:
parent
8445709339
commit
4cf80d1b7a
158
source/scripts/ski_activeeffectswidget.psc
Normal file
158
source/scripts/ski_activeeffectswidget.psc
Normal file
@ -0,0 +1,158 @@
|
||||
scriptname SKI_ActiveEffectsWidget extends SKI_WidgetBase
|
||||
|
||||
; SCRIPT VERSION ----------------------------------------------------------------------------------
|
||||
;
|
||||
; History
|
||||
;
|
||||
; 1: - Initial version
|
||||
;
|
||||
; 2: - Updated hudModes
|
||||
;
|
||||
; 3: - Added MinimumTimeLeft
|
||||
|
||||
int function GetVersion()
|
||||
return 3
|
||||
endFunction
|
||||
|
||||
; PRIVATE VARIABLES -------------------------------------------------------------------------------
|
||||
|
||||
; -- Version 1 --
|
||||
|
||||
; Make sure defaults match those in ConfigMenuInstance
|
||||
bool _enabled = false
|
||||
float _effectSize = 48.0
|
||||
int _groupEffectCount = 8
|
||||
string _orientation = "vertical"
|
||||
|
||||
; -- Version 3 --
|
||||
|
||||
int _minimumTimeLeft = 180
|
||||
|
||||
; PROPERTIES --------------------------------------------------------------------------------------
|
||||
|
||||
bool Property Enabled
|
||||
{Whether the active effects are displayed or not}
|
||||
bool function get()
|
||||
return _enabled
|
||||
endFunction
|
||||
|
||||
function set(bool a_val)
|
||||
_enabled = a_val
|
||||
if (Ready)
|
||||
UI.InvokeBool(HUD_MENU, WidgetRoot + ".setEnabled", _enabled)
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
float property EffectSize
|
||||
{Size of each effect icon in pixels at a resolution of 1280x720}
|
||||
float function get()
|
||||
return _effectSize
|
||||
endFunction
|
||||
|
||||
function set(float a_val)
|
||||
_effectSize = a_val
|
||||
if (Ready)
|
||||
UI.InvokeFloat(HUD_MENU, WidgetRoot + ".setEffectSize", _effectSize)
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
int property GroupEffectCount
|
||||
{Maximum number of widgets displayed until a new group (column, or row) is created}
|
||||
int function get()
|
||||
return _groupEffectCount
|
||||
endFunction
|
||||
|
||||
function set(int a_val)
|
||||
_groupEffectCount = a_val
|
||||
if (Ready)
|
||||
UI.InvokeInt(HUD_MENU, WidgetRoot + ".setGroupEffectCount", _groupEffectCount)
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
string property Orientation
|
||||
{The axis in which new effects will be added to after the total number of effects > GroupEffectCount}
|
||||
string function get()
|
||||
return _orientation
|
||||
endFunction
|
||||
|
||||
function set(string a_val)
|
||||
_orientation = a_val
|
||||
if (Ready)
|
||||
UI.InvokeString(HUD_MENU, WidgetRoot + ".setOrientation", _orientation)
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
int property MinimumTimeLeft
|
||||
{The minimum time left for an effect to be displayed}
|
||||
int function get()
|
||||
return _minimumTimeLeft
|
||||
endFunction
|
||||
|
||||
function set(int a_val)
|
||||
_minimumTimeLeft = a_val
|
||||
if (Ready)
|
||||
UI.InvokeInt(HUD_MENU, WidgetRoot + ".setMinTimeLeft", _minimumTimeLeft)
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
; INITIALIZATION ----------------------------------------------------------------------------------
|
||||
|
||||
; @implements SKI_QuestBase
|
||||
event OnVersionUpdate(int a_version)
|
||||
|
||||
; Version 2
|
||||
if (a_version >= 2 && CurrentVersion < 2)
|
||||
Debug.Trace(self + ": Updating to script version 2")
|
||||
|
||||
string[] hudModes = new string[6]
|
||||
hudModes[0] = "All"
|
||||
hudModes[1] = "StealthMode"
|
||||
hudModes[2] = "Favor"
|
||||
hudModes[3] = "Swimming"
|
||||
hudModes[4] = "HorseMode"
|
||||
hudModes[5] = "WarHorseMode"
|
||||
|
||||
Modes = hudModes
|
||||
endIf
|
||||
endEvent
|
||||
|
||||
; EVENTS ------------------------------------------------------------------------------------------
|
||||
|
||||
; @override SKI_WidgetBase
|
||||
event OnWidgetReset()
|
||||
parent.OnWidgetReset()
|
||||
|
||||
; Init numbers
|
||||
float[] numberArgs = new float[4]
|
||||
numberArgs[0] = _enabled as float
|
||||
numberArgs[1] = _effectSize
|
||||
numberArgs[2] = _groupEffectCount as float
|
||||
numberArgs[3] = _minimumTimeLeft as float
|
||||
UI.InvokeFloatA(HUD_MENU, WidgetRoot + ".initNumbers", numberArgs)
|
||||
|
||||
; Init strings
|
||||
string[] stringArgs = new string[1]
|
||||
stringArgs[0] = _orientation
|
||||
UI.InvokeStringA(HUD_MENU, WidgetRoot + ".initStrings", stringArgs)
|
||||
|
||||
; Init commit
|
||||
UI.Invoke(HUD_MENU, WidgetRoot + ".initCommit")
|
||||
endEvent
|
||||
|
||||
|
||||
; FUNCTIONS ---------------------------------------------------------------------------------------
|
||||
|
||||
; @overrides SKI_WidgetBase
|
||||
string function GetWidgetSource()
|
||||
return "skyui/activeeffects.swf"
|
||||
endFunction
|
||||
|
||||
; @overrides SKI_WidgetBase
|
||||
string function GetWidgetType()
|
||||
return "SKI_ActiveEffectsWidget"
|
||||
endFunction
|
1116
source/scripts/ski_configbase.psc
Normal file
1116
source/scripts/ski_configbase.psc
Normal file
File diff suppressed because it is too large
Load Diff
377
source/scripts/ski_configmanager.psc
Normal file
377
source/scripts/ski_configmanager.psc
Normal file
@ -0,0 +1,377 @@
|
||||
scriptname SKI_ConfigManager extends SKI_QuestBase hidden
|
||||
|
||||
; SCRIPT VERSION ----------------------------------------------------------------------------------
|
||||
;
|
||||
; History
|
||||
;
|
||||
; 1: - Initial version
|
||||
;
|
||||
; 2: - Added lock for API functions
|
||||
;
|
||||
; 3: - Removed lock again until I have time to test it properly
|
||||
;
|
||||
; 4: - Added redundancy for registration process
|
||||
|
||||
int function GetVersion()
|
||||
return 4
|
||||
endFunction
|
||||
|
||||
|
||||
; CONSTANTS ---------------------------------------------------------------------------------------
|
||||
|
||||
string property JOURNAL_MENU = "Journal Menu" autoReadonly
|
||||
string property MENU_ROOT = "_root.ConfigPanelFader.configPanel" autoReadonly
|
||||
|
||||
|
||||
; PRIVATE VARIABLES -------------------------------------------------------------------------------
|
||||
|
||||
; -- Version 1 --
|
||||
|
||||
SKI_ConfigBase[] _modConfigs
|
||||
string[] _modNames
|
||||
int _curConfigID = 0
|
||||
int _configCount = 0
|
||||
|
||||
SKI_ConfigBase _activeConfig
|
||||
|
||||
; -- Version 2 --
|
||||
|
||||
; keep those for now
|
||||
bool _lockInit = false
|
||||
bool _locked = false
|
||||
|
||||
; -- Version 4 --
|
||||
|
||||
bool _cleanupFlag = false
|
||||
int _addCounter = 0
|
||||
int _updateCounter = 0
|
||||
|
||||
|
||||
; INITIALIZATION ----------------------------------------------------------------------------------
|
||||
|
||||
event OnInit()
|
||||
_modConfigs = new SKI_ConfigBase[128]
|
||||
_modNames = new string[128]
|
||||
|
||||
OnGameReload()
|
||||
endEvent
|
||||
|
||||
; @implements SKI_QuestBase
|
||||
event OnGameReload()
|
||||
RegisterForModEvent("SKICP_modSelected", "OnModSelect")
|
||||
RegisterForModEvent("SKICP_pageSelected", "OnPageSelect")
|
||||
RegisterForModEvent("SKICP_optionHighlighted", "OnOptionHighlight")
|
||||
RegisterForModEvent("SKICP_optionSelected", "OnOptionSelect")
|
||||
RegisterForModEvent("SKICP_optionDefaulted", "OnOptionDefault")
|
||||
RegisterForModEvent("SKICP_keymapChanged", "OnKeymapChange")
|
||||
RegisterForModEvent("SKICP_sliderSelected", "OnSliderSelect")
|
||||
RegisterForModEvent("SKICP_sliderAccepted", "OnSliderAccept")
|
||||
RegisterForModEvent("SKICP_menuSelected", "OnMenuSelect")
|
||||
RegisterForModEvent("SKICP_menuAccepted", "OnMenuAccept")
|
||||
RegisterForModEvent("SKICP_colorSelected", "OnColorSelect")
|
||||
RegisterForModEvent("SKICP_colorAccepted", "OnColorAccept")
|
||||
RegisterForModEvent("SKICP_dialogCanceled", "OnDialogCancel")
|
||||
|
||||
RegisterForMenu(JOURNAL_MENU)
|
||||
|
||||
; no longer used but better safe than sorry
|
||||
_lockInit = true
|
||||
|
||||
_cleanupFlag = true
|
||||
|
||||
CleanUp()
|
||||
SendModEvent("SKICP_configManagerReady")
|
||||
|
||||
_updateCounter = 0
|
||||
RegisterForSingleUpdate(5)
|
||||
endEvent
|
||||
|
||||
|
||||
; EVENTS ------------------------------------------------------------------------------------------
|
||||
|
||||
event OnUpdate()
|
||||
|
||||
if (_cleanupFlag)
|
||||
CleanUp()
|
||||
endIf
|
||||
|
||||
if (_addCounter > 0)
|
||||
Debug.Notification("MCM: Registered " + _addCounter + " new menu(s).")
|
||||
_addCounter = 0
|
||||
endIf
|
||||
|
||||
SendModEvent("SKICP_configManagerReady")
|
||||
|
||||
if (_updateCounter < 6)
|
||||
_updateCounter += 1
|
||||
RegisterForSingleUpdate(5)
|
||||
else
|
||||
RegisterForSingleUpdate(30)
|
||||
endIf
|
||||
endEvent
|
||||
|
||||
event OnMenuOpen(string a_menuName)
|
||||
GotoState("BUSY")
|
||||
_activeConfig = none
|
||||
UI.InvokeStringA(JOURNAL_MENU, MENU_ROOT + ".setModNames", _modNames);
|
||||
endEvent
|
||||
|
||||
event OnMenuClose(string a_menuName)
|
||||
GotoState("")
|
||||
if (_activeConfig)
|
||||
_activeConfig.CloseConfig()
|
||||
endIf
|
||||
|
||||
_activeConfig = none
|
||||
endEvent
|
||||
|
||||
event OnModSelect(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
int configIndex = a_numArg as int
|
||||
if (configIndex > -1)
|
||||
|
||||
; We can clean the buffers of the previous menu now
|
||||
if (_activeConfig)
|
||||
_activeConfig.CloseConfig()
|
||||
endIf
|
||||
|
||||
_activeConfig = _modConfigs[configIndex]
|
||||
_activeConfig.OpenConfig()
|
||||
endIf
|
||||
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
|
||||
endEvent
|
||||
|
||||
event OnPageSelect(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
string page = a_strArg
|
||||
int index = a_numArg as int
|
||||
_activeConfig.SetPage(page, index)
|
||||
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
|
||||
endEvent
|
||||
|
||||
event OnOptionHighlight(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
int optionIndex = a_numArg as int
|
||||
_activeConfig.HighlightOption(optionIndex)
|
||||
endEvent
|
||||
|
||||
event OnOptionSelect(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
int optionIndex = a_numArg as int
|
||||
_activeConfig.SelectOption(optionIndex)
|
||||
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
|
||||
endEvent
|
||||
|
||||
event OnOptionDefault(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
int optionIndex = a_numArg as int
|
||||
_activeConfig.ResetOption(optionIndex)
|
||||
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
|
||||
endEvent
|
||||
|
||||
event OnKeymapChange(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
int optionIndex = a_numArg as int
|
||||
int keyCode = UI.GetInt(JOURNAL_MENU, MENU_ROOT + ".selectedKeyCode")
|
||||
|
||||
; First test vanilla controls
|
||||
string conflictControl = Input.GetMappedControl(keyCode)
|
||||
string conflictName = ""
|
||||
|
||||
; Then test mod controls
|
||||
int i = 0
|
||||
while (conflictControl == "" && i < _modConfigs.length)
|
||||
if (_modConfigs[i] != none)
|
||||
conflictControl = _modConfigs[i].GetCustomControl(keyCode)
|
||||
if (conflictControl != "")
|
||||
conflictName = _modNames[i]
|
||||
endIf
|
||||
endIf
|
||||
|
||||
i += 1
|
||||
endWhile
|
||||
|
||||
_activeConfig.RemapKey(optionIndex, keyCode, conflictControl, conflictName)
|
||||
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
|
||||
endEvent
|
||||
|
||||
event OnSliderSelect(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
int optionIndex = a_numArg as int
|
||||
_activeConfig.RequestSliderDialogData(optionIndex)
|
||||
endEvent
|
||||
|
||||
event OnSliderAccept(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
float value = a_numArg
|
||||
_activeConfig.SetSliderValue(value)
|
||||
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
|
||||
endEvent
|
||||
|
||||
event OnMenuSelect(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
int optionIndex = a_numArg as int
|
||||
_activeConfig.RequestMenuDialogData(optionIndex)
|
||||
endEvent
|
||||
|
||||
event OnMenuAccept(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
int value = a_numArg as int
|
||||
_activeConfig.SetMenuIndex(value)
|
||||
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
|
||||
endEvent
|
||||
|
||||
event OnColorSelect(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
int optionIndex = a_numArg as int
|
||||
_activeConfig.RequestColorDialogData(optionIndex)
|
||||
endEvent
|
||||
|
||||
event OnColorAccept(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
int color = a_numArg as int
|
||||
_activeConfig.SetColorValue(color)
|
||||
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
|
||||
endEvent
|
||||
|
||||
event OnDialogCancel(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
|
||||
endEvent
|
||||
|
||||
|
||||
; FUNCTIONS ---------------------------------------------------------------------------------------
|
||||
|
||||
; @interface
|
||||
int function RegisterMod(SKI_ConfigBase a_menu, string a_modName)
|
||||
GotoState("BUSY")
|
||||
;Log("Registering config menu: " + a_menu + "(" + a_modName + ")")
|
||||
|
||||
if (_configCount >= 128)
|
||||
GotoState("")
|
||||
return -1
|
||||
endIf
|
||||
|
||||
; Already registered?
|
||||
int i = 0
|
||||
while (i < _modConfigs.length)
|
||||
if (_modConfigs[i] == a_menu)
|
||||
GotoState("")
|
||||
return i
|
||||
endIf
|
||||
|
||||
i += 1
|
||||
endWhile
|
||||
|
||||
; New registration
|
||||
int configID = NextID()
|
||||
|
||||
if (configID == -1)
|
||||
GotoState("")
|
||||
return -1
|
||||
endIf
|
||||
|
||||
_modConfigs[configID] = a_menu
|
||||
_modNames[configID] = a_modName
|
||||
|
||||
_configCount += 1
|
||||
|
||||
; Track mods added in the current cycle so we don't have to display one message per mod
|
||||
_addCounter += 1
|
||||
|
||||
GotoState("")
|
||||
|
||||
return configID
|
||||
endFunction
|
||||
|
||||
; @interface
|
||||
int function UnregisterMod(SKI_ConfigBase a_menu)
|
||||
GotoState("BUSY")
|
||||
;Log("Unregistering config menu: " + a_menu)
|
||||
|
||||
int i = 0
|
||||
while (i < _modConfigs.length)
|
||||
if (_modConfigs[i] == a_menu)
|
||||
_modConfigs[i] = none
|
||||
_modNames[i] = ""
|
||||
_configCount -= 1
|
||||
|
||||
GotoState("")
|
||||
return i
|
||||
endIf
|
||||
|
||||
i += 1
|
||||
endWhile
|
||||
|
||||
GotoState("")
|
||||
return -1
|
||||
endFunction
|
||||
|
||||
; @interface
|
||||
function ForceReset()
|
||||
Log("Forcing config manager reset...")
|
||||
SendModEvent("SKICP_configManagerReset")
|
||||
|
||||
GotoState("BUSY")
|
||||
|
||||
int i = 0
|
||||
while (i < _modConfigs.length)
|
||||
_modConfigs[i] = none
|
||||
_modNames[i] = ""
|
||||
i += 1
|
||||
endWhile
|
||||
|
||||
_curConfigID = 0
|
||||
_configCount = 0
|
||||
|
||||
GotoState("")
|
||||
|
||||
SendModEvent("SKICP_configManagerReady")
|
||||
endFunction
|
||||
|
||||
function CleanUp()
|
||||
GotoState("BUSY")
|
||||
|
||||
_cleanupFlag = false
|
||||
|
||||
_configCount = 0
|
||||
int i = 0
|
||||
while (i < _modConfigs.length)
|
||||
if (_modConfigs[i] == none || _modConfigs[i].GetFormID() == 0)
|
||||
_modConfigs[i] = none
|
||||
_modNames[i] = ""
|
||||
else
|
||||
_configCount += 1
|
||||
endIf
|
||||
|
||||
i += 1
|
||||
endWhile
|
||||
|
||||
GotoState("")
|
||||
endFunction
|
||||
|
||||
int function NextID()
|
||||
int startIdx = _curConfigID
|
||||
|
||||
while (_modConfigs[_curConfigID] != none)
|
||||
_curConfigID += 1
|
||||
if (_curConfigID >= 128)
|
||||
_curConfigID = 0
|
||||
endIf
|
||||
if (_curConfigID == startIdx)
|
||||
return -1 ; Just to be sure.
|
||||
endIf
|
||||
endWhile
|
||||
|
||||
return _curConfigID
|
||||
endFunction
|
||||
|
||||
function Log(string a_msg)
|
||||
Debug.Trace(self + ": " + a_msg)
|
||||
endFunction
|
||||
|
||||
|
||||
; STATES ---------------------------------------------------------------------------------------
|
||||
|
||||
state BUSY
|
||||
int function RegisterMod(SKI_ConfigBase a_menu, string a_modName)
|
||||
return -2
|
||||
endFunction
|
||||
|
||||
int function UnregisterMod(SKI_ConfigBase a_menu)
|
||||
return -2
|
||||
endFunction
|
||||
|
||||
function ForceReset()
|
||||
endFunction
|
||||
|
||||
function CleanUp()
|
||||
endFunction
|
||||
endState
|
1969
source/scripts/ski_configmenu.psc
Normal file
1969
source/scripts/ski_configmenu.psc
Normal file
File diff suppressed because it is too large
Load Diff
336
source/scripts/ski_main.psc
Normal file
336
source/scripts/ski_main.psc
Normal file
@ -0,0 +1,336 @@
|
||||
scriptname SKI_Main extends SKI_QuestBase
|
||||
|
||||
; CONSTANTS ---------------------------------------------------------------------------------------
|
||||
|
||||
string property HUD_MENU = "HUD Menu" autoReadOnly
|
||||
string property INVENTORY_MENU = "InventoryMenu" autoReadonly
|
||||
string property MAGIC_MENU = "MagicMenu" autoReadonly
|
||||
string property CONTAINER_MENU = "ContainerMenu" autoReadonly
|
||||
string property BARTER_MENU = "BarterMenu" autoReadonly
|
||||
string property GIFT_MENU = "GiftMenu" autoReadonly
|
||||
string property JOURNAL_MENU = "Journal Menu" autoReadonly
|
||||
string property MAP_MENU = "MapMenu" autoReadonly
|
||||
string property FAVORITES_MENU = "FavoritesMenu" autoReadonly
|
||||
string property CRAFTING_MENU = "Crafting Menu" autoReadonly
|
||||
|
||||
int property ERR_SKSE_MISSING = 1 autoReadonly
|
||||
int property ERR_SKSE_VERSION_RT = 2 autoReadonly
|
||||
int property ERR_SKSE_VERSION_SCPT = 3 autoReadonly
|
||||
int property ERR_INI_PAPYRUS = 4 autoReadonly
|
||||
int property ERR_SWF_INVALID = 5 autoReadonly
|
||||
int property ERR_SWF_VERSION = 6 autoReadonly
|
||||
int property ERR_SKSE_BROKEN = 7 autoReadonly
|
||||
|
||||
|
||||
; PRIVATE VARIABLES -------------------------------------------------------------------------------
|
||||
|
||||
bool _inventoryMenuCheckEnabled = true
|
||||
bool _magicMenuCheckEnabled = true
|
||||
bool _barterMenuCheckEnabled = true
|
||||
bool _containerMenuCheckEnabled = true
|
||||
bool _giftMenuCheckEnabled = true
|
||||
bool _mapMenuCheckEnabled = true
|
||||
bool _favoritesMenuCheckEnabled = true
|
||||
bool _craftingMenuCheckEnabled = true
|
||||
|
||||
|
||||
; PROPERTIES --------------------------------------------------------------------------------------
|
||||
|
||||
int property MinSKSERelease = 44 autoReadonly
|
||||
string property MinSKSEVersion = "1.6.16" autoReadonly
|
||||
|
||||
int property ReqSWFRelease = 17 autoReadonly
|
||||
string property ReqSWFVersion = "5.0" autoReadonly
|
||||
|
||||
bool property ErrorDetected = false auto
|
||||
|
||||
|
||||
bool property InventoryMenuCheckEnabled
|
||||
bool function get()
|
||||
return _inventoryMenuCheckEnabled
|
||||
endFunction
|
||||
|
||||
function set(bool a_val)
|
||||
_inventoryMenuCheckEnabled = a_val
|
||||
if (a_val)
|
||||
RegisterForMenu(INVENTORY_MENU)
|
||||
else
|
||||
UnregisterForMenu(INVENTORY_MENU)
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
bool property MagicMenuCheckEnabled
|
||||
bool function get()
|
||||
return _magicMenuCheckEnabled
|
||||
endFunction
|
||||
|
||||
function set(bool a_val)
|
||||
_magicMenuCheckEnabled = a_val
|
||||
if (a_val)
|
||||
RegisterForMenu(MAGIC_MENU)
|
||||
else
|
||||
UnregisterForMenu(MAGIC_MENU)
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
bool property BarterMenuCheckEnabled
|
||||
bool function get()
|
||||
return _barterMenuCheckEnabled
|
||||
endFunction
|
||||
|
||||
function set(bool a_val)
|
||||
_barterMenuCheckEnabled = a_val
|
||||
if (a_val)
|
||||
RegisterForMenu(BARTER_MENU)
|
||||
else
|
||||
UnregisterForMenu(BARTER_MENU)
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
bool property ContainerMenuCheckEnabled
|
||||
bool function get()
|
||||
return _containerMenuCheckEnabled
|
||||
endFunction
|
||||
|
||||
function set(bool a_val)
|
||||
_containerMenuCheckEnabled = a_val
|
||||
if (a_val)
|
||||
RegisterForMenu(CONTAINER_MENU)
|
||||
else
|
||||
UnregisterForMenu(CONTAINER_MENU)
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
bool property GiftMenuCheckEnabled
|
||||
bool function get()
|
||||
return _giftMenuCheckEnabled
|
||||
endFunction
|
||||
|
||||
function set(bool a_val)
|
||||
_giftMenuCheckEnabled = a_val
|
||||
if (a_val)
|
||||
RegisterForMenu(GIFT_MENU)
|
||||
else
|
||||
UnregisterForMenu(GIFT_MENU)
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
bool property MapMenuCheckEnabled
|
||||
bool function get()
|
||||
return _mapMenuCheckEnabled
|
||||
endFunction
|
||||
|
||||
function set(bool a_val)
|
||||
_mapMenuCheckEnabled = a_val
|
||||
if (a_val)
|
||||
RegisterForMenu(MAP_MENU)
|
||||
else
|
||||
UnregisterForMenu(MAP_MENU)
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
bool property FavoritesMenuCheckEnabled
|
||||
bool function get()
|
||||
return _favoritesMenuCheckEnabled
|
||||
endFunction
|
||||
|
||||
function set(bool a_val)
|
||||
_favoritesMenuCheckEnabled = a_val
|
||||
if (a_val)
|
||||
RegisterForMenu(FAVORITES_MENU)
|
||||
else
|
||||
UnregisterForMenu(FAVORITES_MENU)
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
bool property CraftingMenuCheckEnabled
|
||||
bool function get()
|
||||
return _craftingMenuCheckEnabled
|
||||
endFunction
|
||||
|
||||
function set(bool a_val)
|
||||
_craftingMenuCheckEnabled = a_val
|
||||
if (a_val)
|
||||
RegisterForMenu(CRAFTING_MENU)
|
||||
else
|
||||
UnregisterForMenu(CRAFTING_MENU)
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
|
||||
; INITIALIZATION ----------------------------------------------------------------------------------
|
||||
|
||||
event OnInit()
|
||||
OnGameReload()
|
||||
endEvent
|
||||
|
||||
; @implements SKI_QuestBase
|
||||
event OnGameReload()
|
||||
ErrorDetected = false
|
||||
|
||||
if (SKSE.GetVersionRelease() == 0)
|
||||
Error(ERR_SKSE_MISSING, "The Skyrim Script Extender (SKSE) is not running.\nSkyUI will not work correctly!\n\n" \
|
||||
+ "This message may also appear if a new Skyrim Patch has been released. In this case, wait until SKSE has been updated, then install the new version.")
|
||||
return
|
||||
|
||||
elseIf (GetType() == 0)
|
||||
Error(ERR_SKSE_BROKEN, "The SKSE scripts have been overwritten or are not properly loaded.\nReinstalling SKSE might fix this.")
|
||||
return
|
||||
|
||||
elseIf (SKSE.GetVersionRelease() < MinSKSERelease)
|
||||
Error(ERR_SKSE_VERSION_RT, "SKSE is outdated.\nSkyUI will not work correctly!\n" \
|
||||
+ "Required version: " + MinSKSEVersion + " or newer\n" \
|
||||
+ "Detected version: " + SKSE.GetVersion() + "." + SKSE.GetVersionMinor() + "." + SKSE.GetVersionBeta())
|
||||
return
|
||||
|
||||
elseIf (SKSE.GetScriptVersionRelease() < MinSKSERelease)
|
||||
Error(ERR_SKSE_VERSION_SCPT, "SKSE scripts are outdated.\nYou probably forgot to install/update them with the rest of SKSE.\nSkyUI will not work correctly!")
|
||||
return
|
||||
endIf
|
||||
|
||||
if (Utility.GetINIInt("iMinMemoryPageSize:Papyrus") <= 0 || Utility.GetINIInt("iMaxMemoryPageSize:Papyrus") <= 0 || Utility.GetINIInt("iMaxAllocatedMemoryBytes:Papyrus") <= 0)
|
||||
Error(ERR_INI_PAPYRUS, "Your Papyrus INI settings are invalid. Please fix this, otherwise SkyUI will stop working at some point.")
|
||||
return
|
||||
endIf
|
||||
|
||||
; Check menus, when they're opened
|
||||
if (InventoryMenuCheckEnabled)
|
||||
RegisterForMenu(INVENTORY_MENU)
|
||||
endIf
|
||||
|
||||
if (MagicMenuCheckEnabled)
|
||||
RegisterForMenu(MAGIC_MENU)
|
||||
endIf
|
||||
|
||||
if (ContainerMenuCheckEnabled)
|
||||
RegisterForMenu(CONTAINER_MENU)
|
||||
endIf
|
||||
|
||||
if (BarterMenuCheckEnabled)
|
||||
RegisterForMenu(BARTER_MENU)
|
||||
endIf
|
||||
|
||||
if (GiftMenuCheckEnabled)
|
||||
RegisterForMenu(GIFT_MENU)
|
||||
endIf
|
||||
|
||||
if (MapMenuCheckEnabled)
|
||||
RegisterForMenu(MAP_MENU)
|
||||
endIf
|
||||
|
||||
if (FavoritesMenuCheckEnabled)
|
||||
RegisterForMenu(FAVORITES_MENU)
|
||||
endIf
|
||||
|
||||
if (CraftingMenuCheckEnabled)
|
||||
RegisterForMenu(CRAFTING_MENU)
|
||||
endIf
|
||||
|
||||
RegisterForMenu(JOURNAL_MENU)
|
||||
endEvent
|
||||
|
||||
|
||||
; EVENTS ------------------------------------------------------------------------------------------
|
||||
|
||||
event OnMenuOpen(string a_menuName)
|
||||
if (a_menuName == INVENTORY_MENU)
|
||||
if (CheckMenuVersion("inventorymenu.swf", a_menuName, "_global.InventoryMenu") && \
|
||||
CheckItemMenuComponents(a_menuName))
|
||||
; Only unregister if all checks have been performed (regardless of check result)
|
||||
UnregisterForMenu(a_menuName)
|
||||
endIf
|
||||
|
||||
elseIf (a_menuName == MAGIC_MENU)
|
||||
if (CheckMenuVersion("magicmenu.swf", a_menuName, "_global.MagicMenu") && \
|
||||
CheckItemMenuComponents(a_menuName))
|
||||
UnregisterForMenu(a_menuName)
|
||||
endIf
|
||||
|
||||
elseIf (a_menuName == CONTAINER_MENU)
|
||||
if (CheckMenuVersion("containermenu.swf", a_menuName, "_global.ContainerMenu") && \
|
||||
CheckItemMenuComponents(a_menuName))
|
||||
UnregisterForMenu(a_menuName)
|
||||
endIf
|
||||
|
||||
elseIf (a_menuName == BARTER_MENU)
|
||||
if (CheckMenuVersion("bartermenu.swf", a_menuName, "_global.BarterMenu") && \
|
||||
CheckItemMenuComponents(a_menuName))
|
||||
UnregisterForMenu(a_menuName)
|
||||
endIf
|
||||
|
||||
elseIf (a_menuName == GIFT_MENU)
|
||||
if (CheckMenuVersion("giftmenu.swf", a_menuName, "_global.GiftMenu") && \
|
||||
CheckItemMenuComponents(a_menuName))
|
||||
UnregisterForMenu(a_menuName)
|
||||
endIf
|
||||
|
||||
elseIf (a_menuName == JOURNAL_MENU)
|
||||
if (CheckMenuVersion("quest_journal.swf", a_menuName, "_global.Quest_Journal") && \
|
||||
CheckMenuVersion("skyui/configpanel.swf", a_menuName, "_global.ConfigPanel"))
|
||||
UnregisterForMenu(a_menuName)
|
||||
endIf
|
||||
|
||||
elseIf (a_menuName == MAP_MENU)
|
||||
if (CheckMenuVersion("map.swf", a_menuName, "_global.Map.MapMenu"))
|
||||
UnregisterForMenu(a_menuName)
|
||||
endIf
|
||||
|
||||
elseIf (a_menuName == FAVORITES_MENU)
|
||||
if (CheckMenuVersion("favoritesmenu.swf", a_menuName, "_global.FavoritesMenu"))
|
||||
UnregisterForMenu(a_menuName)
|
||||
endIf
|
||||
|
||||
elseIf (a_menuName == CRAFTING_MENU)
|
||||
if (CheckMenuVersion("craftingmenu.swf", a_menuName, "_global.CraftingMenu"))
|
||||
UnregisterForMenu(a_menuName)
|
||||
endIf
|
||||
endIf
|
||||
endEvent
|
||||
|
||||
|
||||
; FUNCTIONS ---------------------------------------------------------------------------------------
|
||||
|
||||
function Error(int a_errId, string a_msg)
|
||||
Debug.MessageBox("SKYUI ERROR CODE " + a_errId + "\n\n" + a_msg + "\n\nFor more help, visit the SkyUI download site.")
|
||||
ErrorDetected = true
|
||||
endFunction
|
||||
|
||||
bool function CheckMenuVersion(string a_swfName, string a_menu, string a_class)
|
||||
; Returns false if the menu is closed before UI.Get* receive their value
|
||||
|
||||
int releaseIdx = UI.GetInt(a_menu, a_class + ".SKYUI_RELEASE_IDX")
|
||||
string version = UI.GetString(a_menu, a_class + ".SKYUI_VERSION_STRING")
|
||||
|
||||
if (!UI.IsMenuOpen(a_menu))
|
||||
return false
|
||||
endIf
|
||||
|
||||
if (releaseIdx == 0)
|
||||
Error(ERR_SWF_INVALID, "Incompatible menu file (" + a_swfName + ").\nPlease make sure you installed everything correctly and no other mod has overwritten this file.\n" \
|
||||
+ "If you were using an older SkyUI version, un-install it and re-install the latest version.")
|
||||
|
||||
elseIf (releaseIdx != ReqSWFRelease)
|
||||
Error(ERR_SWF_VERSION, "Menu file version mismatch for " + a_swfName + ".\n" \
|
||||
+ "Required version: " + ReqSWFVersion + "\n" \
|
||||
+ "Detected version: " + version)
|
||||
|
||||
endIf
|
||||
|
||||
return true
|
||||
endFunction
|
||||
|
||||
bool function CheckItemMenuComponents(string a_menu)
|
||||
; Returns false if the menu is closed before all checks have finished
|
||||
|
||||
return CheckMenuVersion("skyui/itemcard.swf", a_menu, "_global.ItemCard") && \
|
||||
CheckMenuVersion("skyui/bottombar.swf", a_menu, "_global.BottomBar") && \
|
||||
CheckMenuVersion("skyui/inventorylists.swf", a_menu, "_global.InventoryLists")
|
||||
endFunction
|
7
source/scripts/ski_playerloadgamealias.psc
Normal file
7
source/scripts/ski_playerloadgamealias.psc
Normal file
@ -0,0 +1,7 @@
|
||||
scriptname SKI_PlayerLoadGameAlias extends ReferenceAlias
|
||||
|
||||
; EVENTS -----------------------------------------------------------------------------------------
|
||||
|
||||
event OnPlayerLoadGame()
|
||||
(GetOwningQuest() as SKI_QuestBase).OnGameReload()
|
||||
endEvent
|
22
source/scripts/ski_qf_configmanagerinstance.psc
Normal file
22
source/scripts/ski_qf_configmanagerinstance.psc
Normal file
@ -0,0 +1,22 @@
|
||||
;BEGIN FRAGMENT CODE - Do not edit anything between this and the end comment
|
||||
;NEXT FRAGMENT INDEX 1
|
||||
Scriptname SKI_QF_ConfigManagerInstance Extends Quest Hidden
|
||||
|
||||
;BEGIN ALIAS PROPERTY PlayerRef
|
||||
;ALIAS PROPERTY TYPE ReferenceAlias
|
||||
ReferenceAlias Property Alias_PlayerRef Auto
|
||||
;END ALIAS PROPERTY
|
||||
|
||||
;BEGIN FRAGMENT Fragment_0
|
||||
Function Fragment_0()
|
||||
;BEGIN AUTOCAST TYPE SKI_ConfigManager
|
||||
Quest __temp = self as Quest
|
||||
SKI_ConfigManager kmyQuest = __temp as SKI_ConfigManager
|
||||
;END AUTOCAST
|
||||
;BEGIN CODE
|
||||
kmyQuest.ForceReset()
|
||||
;END CODE
|
||||
EndFunction
|
||||
;END FRAGMENT
|
||||
|
||||
;END FRAGMENT CODE - Do not edit anything between this and the begin comment
|
42
source/scripts/ski_questbase.psc
Normal file
42
source/scripts/ski_questbase.psc
Normal file
@ -0,0 +1,42 @@
|
||||
scriptname SKI_QuestBase extends Quest hidden
|
||||
|
||||
; -------------------------------------------------------------------------------------------------
|
||||
; Version Tracking
|
||||
;
|
||||
; Quest implements
|
||||
; GetVersion, to return the static version number
|
||||
; OnVersionUpdate to handle the updating
|
||||
; Update process is triggered by calling CheckVersion()
|
||||
|
||||
int property CurrentVersion auto hidden
|
||||
|
||||
function CheckVersion()
|
||||
int version = GetVersion()
|
||||
if (CurrentVersion < version)
|
||||
OnVersionUpdateBase(version)
|
||||
OnVersionUpdate(version)
|
||||
CurrentVersion = version
|
||||
endIf
|
||||
endFunction
|
||||
|
||||
int function GetVersion()
|
||||
return 1
|
||||
endFunction
|
||||
|
||||
event OnVersionUpdateBase(int a_version)
|
||||
endEvent
|
||||
|
||||
event OnVersionUpdate(int a_version)
|
||||
endEvent
|
||||
|
||||
|
||||
; -------------------------------------------------------------------------------------------------
|
||||
; Reload Events
|
||||
;
|
||||
; Helper to add reload event to quest script.
|
||||
; 1. Create quest
|
||||
; 2. Add player alias to quest
|
||||
; 3. Attach SKI_PlayerLoadGameAlias to player alias
|
||||
|
||||
event OnGameReload()
|
||||
endEvent
|
145
source/scripts/ski_settingsmanager.psc
Normal file
145
source/scripts/ski_settingsmanager.psc
Normal file
@ -0,0 +1,145 @@
|
||||
scriptname SKI_SettingsManager extends SKI_QuestBase
|
||||
|
||||
; CONSTANTS ---------------------------------------------------------------------------------------
|
||||
|
||||
string property MENU_ROOT = "_global.skyui.util.ConfigManager" autoReadonly
|
||||
|
||||
string property INVENTORY_MENU = "InventoryMenu" autoReadonly
|
||||
string property MAGIC_MENU = "MagicMenu" autoReadonly
|
||||
string property CONTAINER_MENU = "ContainerMenu" autoReadonly
|
||||
string property BARTER_MENU = "BarterMenu" autoReadonly
|
||||
string property GIFT_MENU = "GiftMenu" autoReadonly
|
||||
string property CRAFTING_MENU = "Crafting Menu" autoReadonly
|
||||
|
||||
|
||||
; PRIVATE VARIABLES -------------------------------------------------------------------------------
|
||||
|
||||
int _overrideCount = 0
|
||||
string[] _overrideKeys
|
||||
string[] _overrideValues
|
||||
|
||||
string _currentMenu
|
||||
|
||||
|
||||
; INITIALIZATION ----------------------------------------------------------------------------------
|
||||
|
||||
event OnInit()
|
||||
_overrideKeys = new string[128]
|
||||
_overrideValues = new string[128]
|
||||
|
||||
int i = 0
|
||||
while (i<128)
|
||||
_overrideKeys[i] = ""
|
||||
_overrideValues[i] = ""
|
||||
i += 1
|
||||
endWhile
|
||||
|
||||
OnGameReload()
|
||||
endEvent
|
||||
|
||||
; @implements SKI_QuestBase
|
||||
event OnGameReload()
|
||||
RegisterForMenu(INVENTORY_MENU)
|
||||
RegisterForMenu(MAGIC_MENU)
|
||||
RegisterForMenu(CONTAINER_MENU)
|
||||
RegisterForMenu(BARTER_MENU)
|
||||
RegisterForMenu(GIFT_MENU)
|
||||
RegisterForMenu(CRAFTING_MENU)
|
||||
RegisterForModEvent("SKICO_setConfigOverride", "OnSetConfigOverride")
|
||||
endEvent
|
||||
|
||||
|
||||
; EVENTS ------------------------------------------------------------------------------------------
|
||||
|
||||
event OnMenuOpen(string a_menuName)
|
||||
GotoState("LOCKED")
|
||||
; Check if it's still open
|
||||
if (UI.IsMenuOpen(a_menuName))
|
||||
_currentMenu = a_menuName
|
||||
UI.InvokeStringA(a_menuName, MENU_ROOT + ".setExternalOverrideKeys", _overrideKeys)
|
||||
UI.InvokeStringA(a_menuName, MENU_ROOT + ".setExternalOverrideValues", _overrideValues)
|
||||
endIf
|
||||
GotoState("")
|
||||
endEvent
|
||||
|
||||
event OnSetConfigOverride(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
string overrideKey = a_strArg
|
||||
string overrideValue = UI.GetString(_currentMenu, MENU_ROOT + ".out_overrides." + overrideKey)
|
||||
|
||||
SetOverride(overrideKey, overrideValue)
|
||||
endEvent
|
||||
|
||||
; ----------------------------------------------
|
||||
state LOCKED
|
||||
|
||||
event OnMenuOpen(string a_menuName)
|
||||
endEvent
|
||||
|
||||
endState
|
||||
|
||||
|
||||
; FUNCTIONS ---------------------------------------------------------------------------------------
|
||||
|
||||
; @interface
|
||||
bool function SetOverride(string a_key, string a_value)
|
||||
if (a_key == "")
|
||||
return false
|
||||
endIf
|
||||
|
||||
; Existing override?
|
||||
int index = _overrideKeys.Find(a_key)
|
||||
if (index != -1)
|
||||
_overrideValues[index] = a_value
|
||||
|
||||
return true
|
||||
|
||||
; New override
|
||||
else
|
||||
if (_overrideCount >= 128)
|
||||
return false
|
||||
endIf
|
||||
|
||||
index = NextFreeIndex()
|
||||
if (index == -1)
|
||||
return false
|
||||
endIf
|
||||
|
||||
_overrideKeys[index] = a_key
|
||||
_overrideValues[index] = a_value
|
||||
_overrideCount += 1
|
||||
|
||||
return true
|
||||
endIf
|
||||
|
||||
endFunction
|
||||
|
||||
; @interface
|
||||
bool function ClearOverride(string a_key)
|
||||
if (a_key == "")
|
||||
return false
|
||||
endIf
|
||||
|
||||
int index = _overrideKeys.Find(a_key)
|
||||
if (index == -1)
|
||||
return false
|
||||
endIf
|
||||
|
||||
_overrideKeys[index] = ""
|
||||
_overrideValues[index] = ""
|
||||
_overrideCount -= 1
|
||||
|
||||
return true
|
||||
endFunction
|
||||
|
||||
int function NextFreeIndex()
|
||||
int i = 0
|
||||
|
||||
while (i < _overrideKeys.length)
|
||||
if (_overrideKeys[i] == "")
|
||||
return i
|
||||
endIf
|
||||
i += 1
|
||||
endWhile
|
||||
|
||||
return -1
|
||||
endFunction
|
322
source/scripts/ski_widgetbase.psc
Normal file
322
source/scripts/ski_widgetbase.psc
Normal file
@ -0,0 +1,322 @@
|
||||
scriptname SKI_WidgetBase extends SKI_QuestBase
|
||||
|
||||
; CONSTANTS ---------------------------------------------------------------------------------------
|
||||
|
||||
string property HUD_MENU = "HUD Menu" autoReadOnly
|
||||
|
||||
|
||||
; PRIVATE VARIABLES -------------------------------------------------------------------------------
|
||||
|
||||
SKI_WidgetManager _widgetManager
|
||||
|
||||
bool _initialized = false
|
||||
bool _ready = false
|
||||
int _widgetID = -1
|
||||
string _widgetRoot = ""
|
||||
string[] _modes
|
||||
string _hAnchor = "left"
|
||||
string _vAnchor = "top"
|
||||
float _x = 0.0
|
||||
float _y = 0.0
|
||||
float _alpha = 100.0
|
||||
|
||||
|
||||
; PROPERTIES --------------------------------------------------------------------------------------
|
||||
|
||||
bool property RequireExtend = true auto
|
||||
{Require extending the widget type instead of using it directly.}
|
||||
|
||||
; @interface
|
||||
string property WidgetName = "I-forgot-to-set-the-widget name" auto
|
||||
{Name of the widget. Used to identify it in the user interface.}
|
||||
|
||||
; @interface
|
||||
int property WidgetID
|
||||
{Unique ID of the widget. ReadOnly}
|
||||
int function get()
|
||||
return _widgetID
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
; @interface
|
||||
bool property Ready
|
||||
{True once the widget has registered. ReadOnly}
|
||||
bool function get()
|
||||
return _initialized
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
; @interface
|
||||
string property WidgetRoot
|
||||
{Path to the root of the widget from _root of HudMenu. ReadOnly}
|
||||
string function get()
|
||||
return _widgetRoot
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
string[] property Modes
|
||||
{HUDModes in which the widget is visible, see readme for available modes}
|
||||
string[] function get()
|
||||
return _modes
|
||||
endFunction
|
||||
|
||||
function set(string[] a_val)
|
||||
_modes = a_val
|
||||
if (Ready)
|
||||
UpdateWidgetModes()
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
; @interface
|
||||
string property HAnchor
|
||||
{Horizontal anchor point of the widget ["left", "center", "right"]. Default: "left"}
|
||||
string function get()
|
||||
return _hAnchor
|
||||
endFunction
|
||||
|
||||
function set(string a_val)
|
||||
_hAnchor = a_val
|
||||
if (Ready)
|
||||
UpdateWidgetHAnchor()
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
; @interface
|
||||
string property VAnchor
|
||||
{Vertical anchor point of the widget ["top", "center", "bottom"]. Default: "top"}
|
||||
string function get()
|
||||
return _vAnchor
|
||||
endFunction
|
||||
|
||||
function set(string a_val)
|
||||
_vAnchor = a_val
|
||||
if (Ready)
|
||||
UpdateWidgetVAnchor()
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
; @interface
|
||||
float property X
|
||||
{Horizontal position of the widget in pixels at a resolution of 1280x720 [0.0, 1280.0]. Default: 0.0}
|
||||
float function get()
|
||||
return _x
|
||||
endFunction
|
||||
|
||||
function set(float a_val)
|
||||
_x = a_val
|
||||
if (Ready)
|
||||
UpdateWidgetPositionX()
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
; @interface
|
||||
float property Y
|
||||
{Vertical position of the widget in pixels at a resolution of 1280x720 [0.0, 720.0]. Default: 0.0}
|
||||
float function get()
|
||||
return _y
|
||||
endFunction
|
||||
|
||||
function set(float a_val)
|
||||
_y = a_val
|
||||
if (Ready)
|
||||
UpdateWidgetPositionY()
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
; @interface
|
||||
float property Alpha
|
||||
{Opacity of the widget [0.0, 100.0]. Default: 0.0}
|
||||
float function get()
|
||||
return _alpha
|
||||
endFunction
|
||||
|
||||
function set(float a_val)
|
||||
_alpha = a_val
|
||||
if (Ready)
|
||||
UpdateWidgetAlpha()
|
||||
endIf
|
||||
endFunction
|
||||
endProperty
|
||||
|
||||
|
||||
; INITIALIZATION ----------------------------------------------------------------------------------
|
||||
|
||||
event OnInit()
|
||||
OnGameReload()
|
||||
endEvent
|
||||
|
||||
; @implements SKI_QuestBase
|
||||
event OnGameReload()
|
||||
_ready = false
|
||||
RegisterForModEvent("SKIWF_widgetManagerReady", "OnWidgetManagerReady")
|
||||
|
||||
if (!IsExtending() && RequireExtend)
|
||||
Debug.MessageBox("WARNING!\n" + self as string + " must extend a base script type.")
|
||||
endIf
|
||||
|
||||
if (!_initialized)
|
||||
_initialized = true
|
||||
|
||||
; Default Modes if not set via property
|
||||
if (!_modes)
|
||||
_modes = new string[6]
|
||||
_modes[0] = "All"
|
||||
_modes[1] = "StealthMode"
|
||||
_modes[2] = "Favor"
|
||||
_modes[3] = "Swimming"
|
||||
_modes[4] = "HorseMode"
|
||||
_modes[5] = "WarHorseMode"
|
||||
endIf
|
||||
|
||||
OnWidgetInit()
|
||||
|
||||
Debug.Trace(self + " INITIALIZED")
|
||||
endIf
|
||||
|
||||
CheckVersion()
|
||||
endEvent
|
||||
|
||||
event OnWidgetManagerReady(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
|
||||
SKI_WidgetManager newManager = a_sender as SKI_WidgetManager
|
||||
|
||||
; Already registered?
|
||||
if (_widgetManager == newManager)
|
||||
return
|
||||
endIf
|
||||
|
||||
_widgetManager = newManager
|
||||
|
||||
_widgetID = _widgetManager.RequestWidgetID(self)
|
||||
if (_widgetID != -1)
|
||||
_widgetRoot = "_root.WidgetContainer." + _widgetID + ".widget"
|
||||
_widgetManager.CreateWidget(_widgetID, GetWidgetSource())
|
||||
else
|
||||
Debug.Trace("WidgetWarning: " + self as string + ": could not be loaded, too many widgets. Max is 128")
|
||||
endIf
|
||||
endEvent
|
||||
|
||||
|
||||
; EVENTS ------------------------------------------------------------------------------------------
|
||||
|
||||
; @interface
|
||||
event OnWidgetInit()
|
||||
{Handles any custom widget initialization}
|
||||
endEvent
|
||||
|
||||
; Executed after each game reload by widget manager.
|
||||
event OnWidgetLoad()
|
||||
_ready = true
|
||||
|
||||
OnWidgetReset()
|
||||
|
||||
; Before that the widget was still hidden.
|
||||
; Now that everything is done, set modes to show it eventually.
|
||||
UpdateWidgetModes()
|
||||
endEvent
|
||||
|
||||
event OnWidgetReset()
|
||||
; Reset base properties except modes to prevent widget from being drawn too early.
|
||||
UpdateWidgetClientInfo()
|
||||
UpdateWidgetHAnchor()
|
||||
UpdateWidgetVAnchor()
|
||||
UpdateWidgetPositionX()
|
||||
UpdateWidgetPositionY()
|
||||
UpdateWidgetAlpha()
|
||||
endEvent
|
||||
|
||||
|
||||
; FUNCTIONS ---------------------------------------------------------------------------------------
|
||||
|
||||
; @interface
|
||||
string function GetWidgetSource()
|
||||
return ""
|
||||
endFunction
|
||||
|
||||
; @interface
|
||||
string function GetWidgetType()
|
||||
; Must be the same as scriptname
|
||||
return ""
|
||||
endFunction
|
||||
|
||||
; @interface
|
||||
float[] function GetDimensions()
|
||||
{Return the dimensions of the widget (width,height).}
|
||||
float[] dim = new float[2]
|
||||
dim[0] = 0
|
||||
dim[1] = 0
|
||||
return dim
|
||||
endFunction
|
||||
|
||||
; @interface
|
||||
function TweenToX(float a_x, float a_duration)
|
||||
{Moves the widget to a new x position over time}
|
||||
TweenTo(a_x, _y, a_duration)
|
||||
endFunction
|
||||
|
||||
; @interface
|
||||
function TweenToY(float a_y, float a_duration)
|
||||
{Moves the widget to a new y position over time}
|
||||
TweenTo(_x, a_y, a_duration)
|
||||
endFunction
|
||||
|
||||
; @interface
|
||||
function TweenTo(float a_x, float a_y, float a_duration)
|
||||
{Moves the widget to a new x, y position over time}
|
||||
float[] args = new float[3]
|
||||
args[0] = a_x
|
||||
args[1] = a_y
|
||||
args[2] = a_duration
|
||||
UI.InvokeFloatA(HUD_MENU, _widgetRoot + ".tweenTo", args)
|
||||
endFunction
|
||||
|
||||
; @interface
|
||||
function FadeTo(float a_alpha, float a_duration)
|
||||
{Fades the widget to a new alpha over time}
|
||||
float[] args = new float[2]
|
||||
args[0] = a_alpha
|
||||
args[1] = a_duration
|
||||
UI.InvokeFloatA(HUD_MENU, _widgetRoot + ".fadeTo", args)
|
||||
endFunction
|
||||
|
||||
bool function IsExtending()
|
||||
string s = self as string
|
||||
string sn = GetWidgetType() + " "
|
||||
s = StringUtil.Substring(s, 1, StringUtil.GetLength(sn))
|
||||
if (s == sn)
|
||||
return false
|
||||
endIf
|
||||
return true
|
||||
endFunction
|
||||
|
||||
function UpdateWidgetClientInfo()
|
||||
UI.InvokeString(HUD_MENU, _widgetRoot + ".setClientInfo", self as string)
|
||||
endFunction
|
||||
|
||||
function UpdateWidgetAlpha()
|
||||
UI.InvokeFloat(HUD_MENU, _widgetRoot + ".setAlpha", Alpha)
|
||||
endFunction
|
||||
|
||||
function UpdateWidgetHAnchor()
|
||||
UI.InvokeString(HUD_MENU, _widgetRoot + ".setHAnchor", HAnchor)
|
||||
endFunction
|
||||
|
||||
function UpdateWidgetVAnchor()
|
||||
UI.InvokeString(HUD_MENU, _widgetRoot + ".setVAnchor", VAnchor)
|
||||
endFunction
|
||||
|
||||
function UpdateWidgetPositionX()
|
||||
UI.InvokeFloat(HUD_MENU, _widgetRoot + ".setPositionX", X)
|
||||
endFunction
|
||||
|
||||
function UpdateWidgetPositionY()
|
||||
UI.InvokeFloat(HUD_MENU, _widgetRoot + ".setPositionY", Y)
|
||||
endFunction
|
||||
|
||||
function UpdateWidgetModes()
|
||||
UI.InvokeStringA(HUD_MENU, _widgetRoot + ".setModes", Modes)
|
||||
endFunction
|
181
source/scripts/ski_widgetmanager.psc
Normal file
181
source/scripts/ski_widgetmanager.psc
Normal file
@ -0,0 +1,181 @@
|
||||
scriptname SKI_WidgetManager extends SKI_QuestBase
|
||||
|
||||
; CONSTANTS ---------------------------------------------------------------------------------------
|
||||
|
||||
string property HUD_MENU = "HUD Menu" autoReadOnly
|
||||
|
||||
|
||||
; PRIVATE VARIABLES -------------------------------------------------------------------------------
|
||||
|
||||
SKI_WidgetBase[] _widgets
|
||||
string[] _widgetSources
|
||||
int _curWidgetID = 0
|
||||
int _widgetCount = 0
|
||||
|
||||
|
||||
; INITIALIZATION ----------------------------------------------------------------------------------
|
||||
|
||||
event OnInit()
|
||||
_widgets = new SKI_WidgetBase[128]
|
||||
_widgetSources = new string[128]
|
||||
|
||||
; Wait until all widgets have registered their callbacks
|
||||
Utility.Wait(0.5)
|
||||
|
||||
OnGameReload()
|
||||
endEvent
|
||||
|
||||
event OnGameReload()
|
||||
RegisterForModEvent("SKIWF_widgetLoaded", "OnWidgetLoad")
|
||||
RegisterForModEvent("SKIWF_widgetError", "OnWidgetError")
|
||||
|
||||
CleanUp()
|
||||
|
||||
; Init now, or delay until hudmenu has been loaded
|
||||
if (UI.IsMenuOpen(HUD_MENU))
|
||||
InitWidgetLoader()
|
||||
else
|
||||
RegisterForMenu(HUD_MENU)
|
||||
endIf
|
||||
endEvent
|
||||
|
||||
event OnMenuOpen(string a_menuName)
|
||||
if (a_menuName == HUD_MENU)
|
||||
UnregisterForMenu(HUD_MENU)
|
||||
InitWidgetLoader()
|
||||
endIf
|
||||
endEvent
|
||||
|
||||
function CleanUp()
|
||||
_widgetCount = 0
|
||||
int i = 0
|
||||
|
||||
while (i < _widgets.length)
|
||||
if (_widgets[i] == none || _widgets[i].GetFormID() == 0)
|
||||
; Widget no longer exists
|
||||
_widgets[i] = none
|
||||
_widgetSources[i] = ""
|
||||
else
|
||||
_widgetCount += 1
|
||||
endIf
|
||||
i += 1
|
||||
endWhile
|
||||
endFunction
|
||||
|
||||
function InitWidgetLoader()
|
||||
Debug.Trace("InitWidgetLoader()")
|
||||
|
||||
int releaseIdx = UI.GetInt(HUD_MENU, "_global.WidgetLoader.SKYUI_RELEASE_IDX")
|
||||
|
||||
; Not injected yet
|
||||
if (releaseIdx == 0)
|
||||
|
||||
; Interface/
|
||||
string rootPath = ""
|
||||
|
||||
string[] args = new string[2]
|
||||
args[0] = "widgetLoaderContainer"
|
||||
args[1] = "-1000"
|
||||
|
||||
; Create empty container clip
|
||||
UI.InvokeStringA(HUD_MENU, "_root.createEmptyMovieClip", args)
|
||||
|
||||
; Try to load from Interface/exported/hudmenu.gfx
|
||||
UI.InvokeString(HUD_MENU, "_root.widgetLoaderContainer.loadMovie", "skyui/widgetloader.swf")
|
||||
Utility.Wait(0.5)
|
||||
releaseIdx = UI.GetInt(HUD_MENU, "_global.WidgetLoader.SKYUI_RELEASE_IDX")
|
||||
|
||||
; If failed, try to load from Interface/hudmenu.swf
|
||||
if (releaseIdx == 0)
|
||||
; Interface/exported
|
||||
rootPath = "exported/"
|
||||
UI.InvokeString(HUD_MENU, "_root.widgetLoaderContainer.loadMovie", "exported/skyui/widgetloader.swf")
|
||||
Utility.Wait(0.5)
|
||||
releaseIdx = UI.GetInt(HUD_MENU, "_global.WidgetLoader.SKYUI_RELEASE_IDX")
|
||||
endIf
|
||||
|
||||
; Injection failed
|
||||
if (releaseIdx == 0)
|
||||
Debug.Trace("InitWidgetLoader(): load failed")
|
||||
return
|
||||
endIf
|
||||
|
||||
UI.InvokeString(HUD_MENU, "_root.widgetLoaderContainer.widgetLoader.setRootPath", rootPath)
|
||||
endIf
|
||||
|
||||
; Load already registered widgets
|
||||
UI.InvokeStringA(HUD_MENU, "_root.widgetLoaderContainer.widgetLoader.loadWidgets", _widgetSources)
|
||||
|
||||
SendModEvent("SKIWF_widgetManagerReady")
|
||||
endFunction
|
||||
|
||||
|
||||
; EVENTS ------------------------------------------------------------------------------------------
|
||||
|
||||
event OnWidgetLoad(string a_eventName, string a_strArg, float a_numArg, form a_sender)
|
||||
int widgetID = a_strArg as int
|
||||
SKI_WidgetBase client = _widgets[widgetID]
|
||||
|
||||
if (client != none)
|
||||
client.OnWidgetLoad()
|
||||
endIf
|
||||
endEvent
|
||||
|
||||
event OnWidgetError(string a_eventName, string a_strArg, float a_numArg, form a_sender)
|
||||
int widgetID = a_numArg as int
|
||||
string errorType = a_strArg
|
||||
|
||||
Debug.Trace("WidgetError: " + (_widgets[widgetID] as string) + ": " + errorType)
|
||||
endEvent
|
||||
|
||||
|
||||
; FUNCTIONS ---------------------------------------------------------------------------------------
|
||||
|
||||
int function RequestWidgetID(SKI_WidgetBase a_client)
|
||||
if (_widgetCount >= 128)
|
||||
return -1
|
||||
endIf
|
||||
|
||||
int widgetID = NextWidgetID()
|
||||
_widgets[widgetID] = a_client
|
||||
_widgetCount += 1
|
||||
|
||||
return widgetID
|
||||
endFunction
|
||||
|
||||
int function NextWidgetID()
|
||||
int startIdx = _curWidgetID
|
||||
|
||||
while (_widgets[_curWidgetID] != none)
|
||||
_curWidgetID += 1
|
||||
if (_curWidgetID >= 128)
|
||||
_curWidgetID = 0
|
||||
endIf
|
||||
if (_curWidgetID == startIdx)
|
||||
return -1 ; Should never happen because we have widgetCount. Just to be sure.
|
||||
endIf
|
||||
endWhile
|
||||
|
||||
return _curWidgetID
|
||||
endFunction
|
||||
|
||||
function CreateWidget(int a_widgetID, string a_widgetSource)
|
||||
_widgetSources[a_widgetID] = a_widgetSource
|
||||
string[] args = new string[2]
|
||||
args[0] = a_widgetID as string
|
||||
args[1] = a_widgetSource
|
||||
UI.InvokeStringA(HUD_MENU, "_root.widgetLoaderContainer.widgetLoader.loadWidget", args);
|
||||
endFunction
|
||||
|
||||
SKI_WidgetBase[] function GetWidgets()
|
||||
; Return a copy
|
||||
SKI_WidgetBase[] widgetsCopy = new SKI_WidgetBase[128]
|
||||
int i = 0
|
||||
|
||||
while (i < _widgets.length)
|
||||
widgetsCopy[i] = _widgets[i]
|
||||
i += 1
|
||||
endWhile
|
||||
|
||||
return widgetsCopy
|
||||
endFunction
|
Loading…
Reference in New Issue
Block a user