linsyking/messenger-core/17.1.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.Scene

Scene Base

General Model and Basic types for Scenes

type AbstractScene env event ren scenemsg userdata
= Roll (UnrolledAbstractScene env event ren scenemsg userdata)

Rolled Abstract Scene Model.

Cannot be directedly modified. Used for storage.

type alias MConcreteScene data userdata scenemsg =
ConcreteScene
data
(Env () userdata)
Renderable
scenemsg
userdata

Specialized Concrete scene for Messenger

  • Note: MConcreteScene concretes the concrete general model with Event type and renderable type that is static regardless of what userdata, data, basedata or commondata is..
type alias MAbstractScene userdata scenemsg =
(Env () userdata)
Renderable
scenemsg
userdata

Specialized Abstract scene for Messenger Note: MAbstractScene concretes the abstract general model with Event type and renderable type that is static regardless of what userdata, data, basedata or commondata is..

AbstractScene env event ren scenemsg userdata
-> UnrolledAbstractScene env event ren scenemsg userdata

Unroll a rolled abstract scene.

ConcreteScene data env event ren scenemsg userdata
-> Maybe scenemsg
-> env
-> AbstractScene env event ren scenemsg userdata

Abstract a concrete scene to an abstract scene.

Initialize it with env and msg.

type SceneOutputMsg scenemsg userdata
= SOMChangeScene (Maybe scenemsg) String
| SOMAlert String
| SOMPrompt String String
| SOMPlayAudio Int String AudioOption
| SOMStopAudio AudioTarget
| SOMTransformAudio AudioTarget (Audio -> Audio)
| SOMSetVolume Float
| SOMSaveGlobalData
| SOMLoadGC (GlobalComponentStorage userdata scenemsg)
| SOMUnloadGC GCTarget
| SOMCallGC ( GCTarget, GCMsg )
| SOMChangeFPS TimeInterval
| SOMLoadResource String ResourceDef

Scene Output Msg is the message directly handled by the top-level core.

scenemsg is a custom type which represents the message type users wants to send to a scene when switching scenes.

  • SOMChangeScene (Maybe scenemsg) name is used to change to a target scene by giving the initial message and name of the scene.
    • Note: initial message is defined in Scene.elm or Scenebase.elm, depending on whether you use sceneproto or not.
  • SOMAlert makes an alert
  • SOMPrompt name title makes a prompt with name and title. This means the system will eject a some textbox with the given title and name.
    • Note: The returning message from the user will be given as a worldevent.
  • SOMPlayAudio channel name option is used to play an audio resource by giving channel name option
    • Note: See the docs in Audio.elm for more information on options.
  • SOMStopAudio is used to stop a playing audio by giving the desired AudioTarget(see the docs on AudioTarget)
  • SOMTransformAudio is used to transform a playing audio (e.g., adding some effects).
  • SOMSetVolume is used to set the volume with a value from 0 to 1
  • SOMSaveGlobalData saves the global by encode function given in UserConfig
    • Note: At the beginning of the game messenger will load the stored data into userdata (which is also the only chance to load it)
  • SOMLoadGC is used to load a global component by giving the GC.
  • SOMUnloadGC is used to unload a global component by giving the target.
  • SOMCallGC is used to call a global component by giving the target and message.
  • SOMChangeFPS is used to change the FPS by giving the time interval.
  • SOMLoadResource is used to load a resource by giving the name and resource definition.
    • Note: The result of the loading will be in globaldata.internaldata. No user event will be triggered.
type alias SceneStorage userdata scenemsg =
Maybe scenemsg
-> Env () userdata
-> MAbstractScene userdata scenemsg

The type used to store the scene data. You should not handle this by yourself.

type alias AllScenes userdata scenemsg =
Dict String (SceneStorage userdata scenemsg)

All scenes type

type alias MMsg othertar msg scenemsg userdata =
Msg othertar msg (SceneOutputMsg scenemsg userdata)

Messenger Msg

  • Note: This is similar to MMsg, by using which messenger can know what is SOMMsg and make reaction to it accordingly.
type alias MMsgBase othermsg scenemsg userdata =
MsgBase othermsg (SceneOutputMsg scenemsg userdata)

Messenger MsgBase This message base make concrete MMsg type from abstract Msg type. By using MMsgBase, messenger can know what is SOMMsg and make reaction to it accordingly. Users should use Msg at most of the time.

type alias MConcreteGeneralModel data common userdata tar msg bdata scenemsg =
ConcreteGeneralModel
data
(Env common userdata)
tar
msg
Renderable
bdata
(SceneOutputMsg scenemsg userdata)

Specialized Concrete Model for Messenger

type alias MAbstractGeneralModel common userdata tar msg bdata scenemsg =
(Env common userdata)
tar
msg
Renderable
bdata
(SceneOutputMsg scenemsg userdata)

Specialized Abstract Model for Messenger

Scene Result Remapper

( ( List (SceneOutputMsg scenemsg userdata), env )
-> ( List (SceneOutputMsg scenemsg userdata), env )
)
-> AbstractScene env event ren scenemsg userdata
-> AbstractScene env event ren scenemsg userdata

Change the update function to remap the result and return the changed abstract scene.

Global Component

type alias GCCommonData userdata scenemsg =
MAbstractScene userdata scenemsg

Global component common data.

type alias GCBaseData =
{ dead : Bool
, postProcessor : Renderable -> Renderable
}

Global component base data.

type alias GCMsg =
Value

Global component message type.

type alias GCTarget =
String

Global component target type.

type alias AbstractGlobalComponent userdata scenemsg =
MAbstractGeneralModel
(GCCommonData userdata scenemsg)
userdata
GCTarget
GCMsg
GCBaseData
scenemsg

Abstract GlobalComponent Model.

Cannot be directly modified. Used for storage.

type alias ConcreteGlobalComponent data userdata scenemsg =
{ init : GlobalComponentInit userdata scenemsg data
, update : GlobalComponentUpdate userdata scenemsg data
, updaterec : GlobalComponentUpdateRec userdata scenemsg data
, view : GlobalComponentView userdata scenemsg data
, id : GCTarget
}

Concrete GlobalComponent Model

type alias GlobalComponentInit userdata scenemsg data =
Env (GCCommonData userdata scenemsg) userdata
-> GCMsg
-> ( data, GCBaseData )

init type sugar

type alias GlobalComponentUpdate userdata scenemsg data =
Env (GCCommonData userdata scenemsg) userdata
-> data
-> GCBaseData
-> ( ( data, GCBaseData )
, List (MMsg GCTarget GCMsg scenemsg userdata)
, ( Env (GCCommonData userdata scenemsg) userdata, Bool )
)

update type sugar. In a layered scene, the job is done by Messenger, so you don't have to write this. However, in a raw scene, the logic is up to you to decide, so you are supposed to imply this.

type alias GlobalComponentUpdateRec userdata scenemsg data =
Env (GCCommonData userdata scenemsg) userdata
-> GCMsg
-> data
-> GCBaseData
-> ( ( data, GCBaseData )
, List (MMsg GCTarget GCMsg scenemsg userdata)
, Env (GCCommonData userdata scenemsg) userdata
)

updaterec type sugar

type alias GlobalComponentView userdata scenemsg data =
Env (GCCommonData userdata scenemsg) userdata
-> data
-> GCBaseData
-> Renderable

view type sugar

type alias GlobalComponentStorage userdata scenemsg =
Env (GCCommonData userdata scenemsg) userdata
-> AbstractGlobalComponent userdata scenemsg

GlobalComponent Storage