Skip to content

Class ViewEngine

Definition

Namespace: StardewUI.Framework.Api
Assembly: StardewUI.dll

Implementation for the public IViewEngine API.

public class ViewEngine : StardewUI.Framework.IViewEngine

Inheritance
Object ⇦ ViewEngine

Implements
IViewEngine

Members

Constructors

Name Description
ViewEngine(IAssetCache, IModHelper, IViewNodeFactory) Initializes a new ViewEngine instance.

Properties

Name Description
SourceResolver Source resolver for resolving documents created by this view engine back to their original mod.

Methods

Name Description
CreateDrawableFromAsset(string) Creates an IViewDrawable from the StarML stored in a game asset, as provided by a mod via SMAPI or Content Patcher.
CreateDrawableFromMarkup(string) Creates an IViewDrawable from arbitrary markup.
CreateMenuControllerFromAsset(string, Object) Creates a menu from the StarML stored in a game asset, as provided by a mod via SMAPI or Content Patcher, and returns a controller for customizing the menu's behavior.
CreateMenuControllerFromMarkup(string, Object) Creates a menu from arbitrary markup, and returns a controller for customizing the menu's behavior.
CreateMenuFromAsset(string, Object) Creates a menu from the StarML stored in a game asset, as provided by a mod via SMAPI or Content Patcher.
CreateMenuFromMarkup(string, Object) Creates a menu from arbitrary markup.
EnableHotReloading(string) Starts monitoring this mod's directory for changes to assets managed by any of the Register methods, e.g. views and sprites.
PreloadAssets() Begins preloading assets found in this mod's registered asset directories.
PreloadModels(Type) Declares that the specified context types will be used as either direct arguments or subproperties in one or more subsequent CreateMenu or CreateDrawable APIs, and instructs the framework to begin inspecting those types and optimizing for later use.
RegisterCustomData(string, string) Registers a mod directory to be searched for special-purpose mod data, i.e. that is not either views or sprites.
RegisterSprites(string, string) Registers a mod directory to be searched for sprite (and corresponding texture/sprite sheet data) assets.
RegisterViews(string, string) Registers a mod directory to be searched for view (StarML) assets. Uses the .sml extension.

Details

Constructors

ViewEngine(IAssetCache, IModHelper, IViewNodeFactory)

Initializes a new ViewEngine instance.

public ViewEngine(StardewUI.Framework.Content.IAssetCache assetCache, StardewModdingAPI.IModHelper helper, StardewUI.Framework.Binding.IViewNodeFactory viewNodeFactory);
Parameters

assetCache   IAssetCache
Cache for obtaining document assets. Used for asset-based views.

helper   IModHelper
SMAPI mod helper for the API consumer mod (not for StardewUI).

viewNodeFactory   IViewNodeFactory
Factory for creating and binding IViewNodes.


Properties

SourceResolver

Source resolver for resolving documents created by this view engine back to their original mod.

public StardewUI.Framework.Content.ISourceResolver SourceResolver { get; }
Property Value

ISourceResolver


Methods

CreateDrawableFromAsset(string)

Creates an IViewDrawable from the StarML stored in a game asset, as provided by a mod via SMAPI or Content Patcher.

public StardewUI.Framework.IViewDrawable CreateDrawableFromAsset(string assetName);
Parameters

assetName   string
The name of the StarML view asset in the content pipeline, e.g. Mods/MyMod/Views/MyView.

Returns

IViewDrawable

An IViewDrawable for drawing directly to the SpriteBatch of a rendering event or other draw handler.

Remarks

The Context and MaxSize can be provided after creation.


CreateDrawableFromMarkup(string)

Creates an IViewDrawable from arbitrary markup.

public StardewUI.Framework.IViewDrawable CreateDrawableFromMarkup(string markup);
Parameters

markup   string
The markup in StarML format.

Returns

IViewDrawable

An IViewDrawable for drawing directly to the SpriteBatch of a rendering event or other draw handler.

Remarks

The Context and MaxSize can be provided after creation.

Warning: Ad-hoc menus created this way cannot be cached, nor patched by other mods. Most mods should not use this API except for testing/experimentation.


CreateMenuControllerFromAsset(string, Object)

Creates a menu from the StarML stored in a game asset, as provided by a mod via SMAPI or Content Patcher, and returns a controller for customizing the menu's behavior.

public StardewUI.Framework.IMenuController CreateMenuControllerFromAsset(string assetName, System.Object context);
Parameters

assetName   string
The name of the StarML view asset in the content pipeline, e.g. Mods/MyMod/Views/MyView.

context   Object
The context, or "model", for the menu's view, which holds any data-dependent values. Note: The type must implement INotifyPropertyChanged in order for any changes to this data to be automatically reflected in the UI.

Returns

IMenuController

A controller object whose Menu is the created menu and whose other properties can be used to change menu-level behavior.

Remarks

The menu that is created is the same as the result of CreateMenuFromMarkup(string, Object). The menu is not automatically shown; to show it, use activeClickableMenu or equivalent.


CreateMenuControllerFromMarkup(string, Object)

Creates a menu from arbitrary markup, and returns a controller for customizing the menu's behavior.

public StardewUI.Framework.IMenuController CreateMenuControllerFromMarkup(string markup, System.Object context);
Parameters

markup   string
The markup in StarML format.

context   Object
The context, or "model", for the menu's view, which holds any data-dependent values. Note: The type must implement INotifyPropertyChanged in order for any changes to this data to be automatically reflected in the UI.

Returns

IMenuController

A controller object whose Menu is the created menu and whose other properties can be used to change menu-level behavior.

Remarks

Warning: Ad-hoc menus created this way cannot be cached, nor patched by other mods. Most mods should not use this API except for testing/experimentation.


CreateMenuFromAsset(string, Object)

Creates a menu from the StarML stored in a game asset, as provided by a mod via SMAPI or Content Patcher.

public StardewValley.Menus.IClickableMenu CreateMenuFromAsset(string assetName, System.Object context);
Parameters

assetName   string
The name of the StarML view asset in the content pipeline, e.g. Mods/MyMod/Views/MyView.

context   Object
The context, or "model", for the menu's view, which holds any data-dependent values. Note: The type must implement INotifyPropertyChanged in order for any changes to this data to be automatically reflected in the UI.

Returns

IClickableMenu

A menu object which can be shown using the game's standard menu APIs such as activeClickableMenu.

Remarks

Does not make the menu active. To show it, use activeClickableMenu or equivalent.


CreateMenuFromMarkup(string, Object)

Creates a menu from arbitrary markup.

public StardewValley.Menus.IClickableMenu CreateMenuFromMarkup(string markup, System.Object context);
Parameters

markup   string
The markup in StarML format.

context   Object
The context, or "model", for the menu's view, which holds any data-dependent values. Note: The type must implement INotifyPropertyChanged in order for any changes to this data to be automatically reflected in the UI.

Returns

IClickableMenu

A menu object which can be shown using the game's standard menu APIs such as activeClickableMenu.

Remarks

Warning: Ad-hoc menus created this way cannot be cached, nor patched by other mods. Most mods should not use this API except for testing/experimentation.


EnableHotReloading(string)

Starts monitoring this mod's directory for changes to assets managed by any of the Register methods, e.g. views and sprites.

public void EnableHotReloading(string sourceDirectory);
Parameters

sourceDirectory   string
Optional source directory to watch and sync changes from. If not specified, or not a valid source directory, then hot reload will only pick up changes from within the live mod directory.

Remarks

If the sourceDirectory argument is specified, and points to a directory with the same asset structure as the mod, then an additional sync will be set up such that files modified in the sourceDirectory while the game is running will be copied to the active mod directory and subsequently reloaded. In other words, pointing this at the mod's .csproj directory allows hot reloading from the source files instead of the deployed mod's files.

Hot reload may impact game performance and should normally only be used during development and/or in debug mode.


PreloadAssets()

Begins preloading assets found in this mod's registered asset directories.

public void PreloadAssets();
Remarks

Preloading is performed in the background, and can typically help reduce first-time latency for showing menus or drawables, without any noticeable lag in game startup.

Must be called after asset registration (RegisterViews(string, string), RegisterSprites(string, string) and so on) in order to be effective, and must not be called more than once per mod otherwise errors or crashes may occur.


PreloadModels(Type)

Declares that the specified context types will be used as either direct arguments or subproperties in one or more subsequent CreateMenu or CreateDrawable APIs, and instructs the framework to begin inspecting those types and optimizing for later use.

public void PreloadModels(System.Type types);
Parameters

types   Type
The types that the mod expects to use as context.

Remarks

Data binding to mod-defined types uses reflection, which can become expensive when loading a very complex menu and/or binding to a very complex model for the first time. Preloading can perform this work in the background instead of causing latency when opening the menu.


RegisterCustomData(string, string)

Registers a mod directory to be searched for special-purpose mod data, i.e. that is not either views or sprites.

public void RegisterCustomData(string assetPrefix, string modDirectory);
Parameters

assetPrefix   string
The prefix for all asset names, excluding the category which is deduced from the file extension as described in the remarks. For example, given a value of Mods/MyMod, a file named foo.buttonspritemap.json would be referenced in views as @Mods/MyMod/ButtonSpriteMaps/Foo.

modDirectory   string
The physical directory where the asset files are located, relative to the mod directory. Typically a path such as assets/ui or assets/ui/data.

Remarks

Allowed extensions for files in this folder and their corresponding data types are:


RegisterSprites(string, string)

Registers a mod directory to be searched for sprite (and corresponding texture/sprite sheet data) assets.

public void RegisterSprites(string assetPrefix, string modDirectory);
Parameters

assetPrefix   string
The prefix for all asset names, e.g. Mods/MyMod/Sprites. This can be any value but the same prefix must be used in @AssetName view bindings.

modDirectory   string
The physical directory where the asset files are located, relative to the mod directory. Typically a path such as assets/sprites or assets/ui/sprites.


RegisterViews(string, string)

Registers a mod directory to be searched for view (StarML) assets. Uses the .sml extension.

public void RegisterViews(string assetPrefix, string modDirectory);
Parameters

assetPrefix   string
The prefix for all asset names, e.g. Mods/MyMod/Views. This can be any value but the same prefix must be used in include elements and in API calls to create views.

modDirectory   string
The physical directory where the asset files are located, relative to the mod directory. Typically a path such as assets/views or assets/ui/views.