Overview
The quest system has two main classes:
- Quest - Takes care of the overall quest information.
- Objective - Specific sub objective for the quest, handles progress for a task.
Each Quest takes an array of Objectives. These can either be done sequentially or parallel.
Objectives have two event signals/dispatchers:
- on_objective_change() - dispatches when objective is changed.
- on_objective_done() - dispatches when objective is done.
Derived classes are then made from these. In the derived class it then binds an appropriate event to keep track of. e.g:

on_objective_change() and on_objective_done() then fires depending on what the derived class is supposed to keep track of. When objective is completed it disconnects the listeners.
This way it can be kept lightweight and scalable.