Research

The research tree comprises the set of "topics" that can be researched.
Each topic is made of: The basic types of prerequisite conditions are: Additional notes Types of grants: Additional notes Additionally, we need sanity checks against the research tree. Especially, as users are supposed to be able to alter the tree. Tests we must do are:

The classes making up research are:

Technology represents a technology that X-Corp can have access to. It's really nothing more than an identifier for a technology.

ResearchTopic represents something that X-Corp can study. Note, tracking the actual studying of a topic is not done by a ResearchTopic itself. That's done by a ResearchProject. (More on that later) The main properties of a topic are:

ResearchReward represents the reward X-Corp will receive if a topic is researched. Essentially it's a list of technologies and a boolean flag indicating if all technologies in the list will be granted, or just one. If just one, then the topic can be researched multiple times until all technologies have been received.

Prerequisite is an abstract class, representing a requirement that must be satisfied for a topic to be researched:

The classes involed in project management are:

Project Base class for a Research or Manufacturing project. It's responsible for tracking the people assigned to the project, and the project's progress towards completion Major points of note are the presence of an appointment, and an update() function. The appointment goes into the scheduler to signal when the project should be finished. However, it's possible for the player to alter the number of workers assigned to a project. When this happens, update() is called to update the projects progress up to that point so that the new end appointment can be set using the new set of workers.
ResearchProject obviously, researching a Research Topic.
BuildProject Manufacturing items in a base.
ProjectManager Really, this is nothing more than a collection of projects.
ResearchProjectManager A collection of ResearchProjects. In reality, X-Corp owns the single instance of this class, which is a list of the Topics X-Corp is currently researching.
BuildProjectManager A collection of BuildProjects. Each X-Corp Outpost owns an instance of this class, which is a list of the items (NOT facilities) being constructed in the outpost.