diff --git a/diagrams/lifecycle.puml b/diagrams/lifecycle.puml index 64584f4..ee3669e 100644 --- a/diagrams/lifecycle.puml +++ b/diagrams/lifecycle.puml @@ -42,13 +42,13 @@ activate Browser Artwork -> API : Wait for adapter registration note left : `await $genart.waitForAdapter()` API --> Artwork : Return when adapter available... - Artwork -> API : Declare & register param specs + Artwork -> API : Declare & register param specs (async) activate API note left `$genart.setParams({...})` end note - API -> PlatformAdapter : Pass param specs - note right : Pre-initialize param loading and\nallow adapter to inject its own params + API -> PlatformAdapter : Augment param specs (optional) + note right : `adapter.augmentParams()`\nAllow adapter to inject additional platform specific params PlatformAdapter --> API : Return updated specs API -> API : Validate params specs note right : Ensure valid param types @@ -56,14 +56,17 @@ activate Browser note right : Randomize missing defaults API -> API : Set param states note right : Depending on provided defaults - API -> PlatformAdapter : Update/augment params + API -> PlatformAdapter : Pre-initialize params (async) + note right : `adapter.initParams()`\n(e.g. load params via network request) + PlatformAdapter --> API : Return when ready + API -> PlatformAdapter : Update param values activate PlatformAdapter - PlatformAdapter -> PlatformAdapter : Load & parse param - note right : source param values via\nplatform-specific means + PlatformAdapter -> PlatformAdapter : Parse param values/overrides + note right : `adapter.updateParam()`\nsource param values via\nplatform-specific means PlatformAdapter --> API : Customized param value(s) - API -> API : Update param states - note right : Set to `custom` (only those which changed) deactivate PlatformAdapter + API -> API : Update param states + note right : Set to `custom` (only those which changed) API -> API : Validate & apply param overrides API -->> API : Emit `genart:setparams` message diff --git a/diagrams/lifecycle.svg b/diagrams/lifecycle.svg index 3fc025a..6e974d4 100644 --- a/diagrams/lifecycle.svg +++ b/diagrams/lifecycle.svg @@ -1 +1 @@ -Art player initializationBrowserBrowserArtworkArtworkAPIAPIPlatformAdapterPlatformAdapterTimeProviderTimeProviderStartup1.1Load HTML w/ GenArt API script1.2Initialize1.3Load platform adapter1.4Initialize (optional)1.5Initialize PRNGSeeding MUST happenbefore artwork starts1.6Set execution modePlay / Preview / Edit1.7Register`$genart.setAdapter()`1.8Load custom timing provideroptional, API uses `timingProviderRAF()`by default1.9Initialize (optional)1.10Register`$genart.setTime()`1.11Load artwork script1.12Wait for adapter registration`await $genart.waitForAdapter()`1.13Return when adapter available...1.14Declare & register param specs`$genart.setParams({...})`1.15Pass param specsPre-initialize param loading andallow adapter to inject its own params1.16Return updated specs1.17Validate params specsEnsure valid param types1.18Add missing default valuesRandomize missing defaults1.19Set param statesDepending on provided defaults1.20Update/augment params1.21Load & parse paramsource param values viaplatform-specific means1.22Customized param value(s)1.23Update param statesSet to `custom` (only those which changed)1.24Validate & apply param overrides1.25Emit `genart:setparams` messageSent to current & parent window1.26Typesafe param getter functionArtwork uses this functionto obtain param values1.27Request screen config1.28Request screen configoptionally define resolution1.29Config1.30Config1.31Initialize1.32Get param valueOptionally time-based or randomized1.33Delegate to param type implUses `ParamImpl.read()` if type defines it1.34Param valueAnimation start1.35Register update/draw function1.36Transition state to `ready`1.37Emit `genart:statechange` message1.38Process `ready` state change1.39Start anim loopPlatform decides auto-start behavior1.40Start (reset timestamp)loop[Animation loop]1.41Queue next frame updateDefault: `requestAnimationFrame()`1.42Trigger update with current time & frame1.43Call update w/ timestamp1.44Generate next frame1.45Trigger screen capture (once, after X seconds)`$genart.capture(canvas)`1.46Handle screen captureOptional, platform specific1.47Emit `genart:capture` message \ No newline at end of file +Art player initializationBrowserBrowserArtworkArtworkAPIAPIPlatformAdapterPlatformAdapterTimeProviderTimeProviderStartup1.1Load HTML w/ GenArt API script1.2Initialize1.3Load platform adapter1.4Initialize (optional)1.5Initialize PRNGSeeding MUST happenbefore artwork starts1.6Set execution modePlay / Preview / Edit1.7Register`$genart.setAdapter()`1.8Load custom timing provideroptional, API uses `timingProviderRAF()`by default1.9Initialize (optional)1.10Register`$genart.setTime()`1.11Load artwork script1.12Wait for adapter registration`await $genart.waitForAdapter()`1.13Return when adapter available...1.14Declare & register param specs (async)`$genart.setParams({...})`1.15Augment param specs (optional)`adapter.augmentParams()`Allow adapter to inject additional platform specific params1.16Return updated specs1.17Validate params specsEnsure valid param types1.18Add missing default valuesRandomize missing defaults1.19Set param statesDepending on provided defaults1.20Pre-initialize params (async)`adapter.initParams()`(e.g. load params via network request)1.21Return when ready1.22Update param values1.23Parse param values/overrides`adapter.updateParam()`source param values viaplatform-specific means1.24Customized param value(s)1.25Update param statesSet to `custom` (only those which changed)1.26Validate & apply param overrides1.27Emit `genart:setparams` messageSent to current & parent window1.28Typesafe param getter functionArtwork uses this functionto obtain param values1.29Request screen config1.30Request screen configoptionally define resolution1.31Config1.32Config1.33Initialize1.34Get param valueOptionally time-based or randomized1.35Delegate to param type implUses `ParamImpl.read()` if type defines it1.36Param valueAnimation start1.37Register update/draw function1.38Transition state to `ready`1.39Emit `genart:statechange` message1.40Process `ready` state change1.41Start anim loopPlatform decides auto-start behavior1.42Start (reset timestamp)loop[Animation loop]1.43Queue next frame updateDefault: `requestAnimationFrame()`1.44Trigger update with current time & frame1.45Call update w/ timestamp1.46Generate next frame1.47Trigger screen capture (once, after X seconds)`$genart.capture(canvas)`1.48Handle screen captureOptional, platform specific1.49Emit `genart:capture` message \ No newline at end of file