322 lines
7.3 KiB
Plaintext
322 lines
7.3 KiB
Plaintext
|
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
|