Let's outline how I've organized them, because, much like everything, the more I work on them, the less sense they seem to make.
- Quest - This is the class that holds all the others in place. It's a glorified list of Missions that must be completed in order in order to complete the quest. Depending how you look at it, it's sort of a quest chain. Except it won't leave your UI until it's done. Or you hide it.
- Mission - A list of Objectives to be completed either sequentially or nonsequentially. All the objectives in a single Mission are to be displayed simultaneously to make lists of things easier to process. Something like 'Go here, drop this off, come back,' is infuriating when shown one part at a time.
- Objective - This is where the real meat of the Quest comes in. The objective is composed of two parts, the Location and the Condition. When you fulfill the Condition in a valid Location, the Objective is complete! Hooray!
- Location - Contains a list of LocationFilters. It checks all of them to see if the player's in a valid location. It might be that the player needs to be at a certain Type or Size of planet, rather than a specific world.
- Condition - This is what actually needs to be done for the Objective to be satisfied. It could range from nothing to oodles of murder.
The fun thing I added while writing this post is that Quest, Mission, and Objective now all extend a class called QuestPart, which handles Events on Quest, Mission, or Objective completion. So at any point, there's the framework for triggering dialogue scenes or world events or terrible things for the player. Also, I've come to the realization that I might need conditions for Quests becoming active. We'll put that in later. Way later. Right now, I'm going to stick with making copilots questgivers. What's up next? ACTUALLY GETTING ALL THESE PARTS FUNCTIONAL!
Ooh, time limits. Could probably fold those into Location... Come to think of it, I should rename those classes to Task and Conditions. Calling the thing that needs to be done a Condition is a bit silly. And wow is the formatting on this thing ugly. I should change that. Later.