Tasks describe actions that the user needs to take. Tasks have a lot of fields, so it may be helpful to think of the following sentence when constructing a task:
“Player [takes action] on [action items] (optionally to/from/with [character]) (optionally by playing minigame) (optionally at [gps location] or [AR item]) and gets [reward].”
“Player takes secret document from Fred at the nearest coffee shop by playing AR catcher minigame and is rewarded with gold star.”
Tasks are all routed to the “Task Manager” singleton by their various processors. (As with all singletons, the Task Manager can be overridden by your own implementation by setting TaskManager.Factory.)
The Task Manager delegates much of the work of running tasks to Task Drivers. Task Drivers implement the IPlayerTaskDriver interface.
Task Minigames and Delegates
Tasks can have an optional Minigame that describes in detail the action that the user needs to take in order to complete the Task.
Assignments and Objectives
Assignments and Objectives extend the functionality of tasks to create more engaging game play. On their own, tasks are a list of things that the player needs to do. Assignments and Objectives give you a lot more control over tasks, including the ability to make certain tasks optional or to group them together.
An Assignment manages a list of Objectives. Objectives are things the player needs to complete in order to complete an Assignment and move on to the next one. Objectives are stored in a catalog much like Collectibles, meaning that an Objective isn’t confined to just one script.
Tasks connect to Objectives by defining certain Objectives as “outcomes”. When a player completes a task with a set of “outcomes”, those Objectives are marked as complete. In a simple implementation, an Assignment has a list of Objectives and each Objective is attached to one Task that the user needs to complete.
One of the cool things about Objectives, howerver, is that they can be completed without the help of a Task. You can use a “Complete Objective” resource in the Motive authoring tool to mark an objective complete at any time. This lets you use the power of Motive scripting to manage Assignments. For example, you could have an Objective that completes when a user collects a certain number of items or approaches a particular GPS location, or perhaps plays your game between midnight and 1am on a rainy night.
Displaying Assignments and Objectives
The default Motive Assignment panel shows one Assignment at a time, whichever was the first assignment to be activated. If there is no current Assignment, it simply displays all of the currently active tasks.
When displaying an Assignment, the screen lists all non-hidden Objectives in order. If the objective is attached to an active Task through that Task’s outcomes, the information for the Task is displayed, otherwise the Objective information is displayed. This lets you give the user an idea of what they’re going to need to do even if the Task hasn’t yet been activated. For example, the Objective may say, “Pick up the encrypted file.” Then as the game progresses, you activate a Location Task that chooses a nearby Pharmacy. The screen would be updated to say, “Pick up the encrypted file from the pharmacy on your map.”