OpModeLazyCell and OpModeFreshCell are both cells that use features from both LazyCell in Util and features from Dairy Core.

OpModeLazyCell is a LazyCell that gets eagerly evaluated via a preInit hook.

This means that you can put hardware initialisation in an OpModeLazyCell and separate out your init phase, while its still safe to use the contents of the cell at any point after init starts.

OpModeLazyCell deregisters after the OpMode runs, but OpModeFreshCell does not, so if you need your cell to be reinstantiated every OpMode then you can use OpModeFreshCell, which is exactly the same, but does not exhibit the automatic deregistering behaviour.

This will be demonstrated when looking further at templating!

As with all Cells, OpModeLazyCell and OpModeFreshCell can be used for delegation in Kotlin.