How to render the Quests progression?
Based on the context of a previous meeting with Pravus, Alex, Pablo, Marcosnc and Mendez on Jan 7, 2021:
Unity should uniformly render all quests' progression in the same way.
Every quest is a regular scene that runs in a "global" scene. "global" means without limits of parcels.
The quest' scene will use an SDK
QuestTrackingInformation(steps & progression)
primitive to consistently
render the quest UI
The quest' scene will handle the execution of the logic of the quest
The progression of the quest will have to be saved and loaded from the quest'scene
quest_scene
is the scene running the quest. It can be either a global scene
(PE) or a regular LAND scene.
controller
is the quests controller in kernel, it transparently handles the
interaction with the quests server.
sequenceDiagram
quest_scene->>controller: make some progress
controller->>server: update quest state
server->>controller: new state
controller->>unity: quest progress state(new state)
controller->>quest_scene: new state (return)
quest_scene
is the scene running the quest. It can be either a global scene
(PE) or a regular LAND scene.
controller
is the quests controller in kernel, it transparently handles the
interaction with the quests server.
sequenceDiagram
quest_scene->>controller: make some progress
controller->>server: update quest state
server->>controller: new state
controller->>quest_scene: new state (return)
quest_scene->>unity: quest progress state(new state)
It enables us to test the UI without interacting with the controller or the scene:
sequenceDiagram
quest_scene->>unity: quest progress state(new state)
engine.rootEntity
to
not treat it differently than other components.
The renderer will receive an entity with a component of the type
QuestTrackingInformation(data)
. Based on that component, the renderer will have
custom logic to render the component following the UX designs.
Since the component will be tied to an entity, once the entity is removed from the engine the UI will disappear.
UI for quests is different than UI for the rest of the SDK, it has few customization options and it doesn't dissapear if you leave the boundaries of the scene. This is so, to enable a better experience with quests and because the UI/UX designs also offer a way to close the individual UIs.
We choose B because it enables us to render the quests UI without coupling the quests controller and therefore, the server. Also positions Decentraland in a more decentralized path by making centralized servers not required to access the features.
Anyone could now implement their own custom Quests servers without asking permission or having the platform as a limitation.