linsyking/messenger-core/17.0.1

NOTE: the latest version is 20.0.0

Renamed to elm-messenger/messenger-core. That is where the repository lives now. It has not been published as a package under the new name.

Versions published as linsyking/messenger-core still install under that name. 34 versions of 52 come from the new location (see their notes). 7 versions could not be recovered and cannot be installed.

Messenger.Scene.LayeredScene

Layered Scene

Layered scene is a pre-defined scene implementation provided by Messenger. A layered scene can only handle a list of layers with fixed cdata, userdata, tar, msg and scenemsg types.

type alias LayeredSceneData cdata userdata tar msg scenemsg =
{ renderSettings : List Effect
, commonData : cdata
, layers : List (AbstractLayer cdata userdata tar msg scenemsg)
}

Layered Scene Data.

- `renderSettings` is used in `group` while viewing the layers as a whole
- `commonData` is the common data for the whole scene
- `layers` are the layers of the scene with type `AbstractLayer`  DO REMEMBER TO ADD YOUR LAYERS HERE!

Here is an example for it:

{ renderSettings = []
, commonData = cd
, layers =
    [ Main.layer (MainInitData { components = comps, fakeBricks = fakes, isBoss = isBoss }) envcd
    , TechTree.layer NullLayerMsg envcd
    , TextLayer.layer (TextInitData levelName) envcd
    , PauseLayer.layer NullLayerMsg envcd
    , Guide.layer NullLayerMsg envcd
    ]
}
LayeredSceneInit cdata userdata tar msg scenemsg
-> LayeredSceneEffectFunc cdata userdata tar msg scenemsg
-> SceneStorage userdata scenemsg

This creates a layered scene.

  • init creates the initial layered scene from env data and init msg.

  • settingsFunc is a user provided function to modify renderSettings each time the scene updates. If you don't need settingsFunc, simply provide a func _ _ _ = settings

type alias LayeredSceneInit cdata userdata tar msg scenemsg =
Env () userdata
-> Maybe scenemsg
-> LayeredSceneData cdata userdata tar msg scenemsg

init type sugar for normal (not prototype) layered scenes Receives Environment and sceneMsg (which stores the initial data), and return a record of data, for example this:

   { renderSettings = []
    , commonData = cd
    , layers =
        [ Opening.layer NullLayerMsg envcd ]
    }
  • Note: The most important part here is the initialization of scenecommondata. This is so important that it usually takes a separate function to do it.
type alias LayeredSceneEffectFunc cdata userdata tar msg scenemsg =
Env () userdata
-> LayeredSceneData cdata userdata tar msg scenemsg
-> List Effect

settingsFunc type sugar This function takes the environment, userevent, the data of the scene and add visual effects to the scene.

Scene Prototype

type alias LayeredSceneProtoInit cdata userdata tar msg scenemsg idata =
Env () userdata
-> Maybe idata
-> LayeredSceneData cdata userdata tar msg scenemsg

init type sugar for scene prototypes This defines the initializing function for a scene prototype. It should be like this:

LayeredSceneProtoInit SceneCommonData UserData LayerTarget (LayerMsg SceneMsg) SceneMsg (InitData SceneMsg)

It receives environment, the initial data to initialize the prototype, and return a layeredSceneData.

type alias LayeredSceneLevelInit userdata scenemsg idata =
Env () userdata -> Maybe scenemsg -> Maybe idata

init type sugar for levels. Normally it is used internally. No need to worry about it.

LayeredSceneProtoInit cdata userdata tar msg scenemsg idata
-> LayeredSceneLevelInit userdata scenemsg idata
-> Env () userdata
-> Maybe scenemsg
-> LayeredSceneData cdata userdata tar msg scenemsg

Compose LayeredSceneProtoInit with LayeredSceneLevelInit.