#pragma region Copyright
/*
Toxid Game
Copyright (C) 2002-2008 Nuclex Development Labs
*/
#pragma endregion
#ifndef TOXID_GAME_PLANET_H
#define TOXID_GAME_PLANET_H
#include "Toxid.h"
namespace Toxid {
// ------------------------------------------------------------------------------------------- //
class WorldScreen;
class LoadingScreen;
class GameScreen;
class Map;
// ------------------------------------------------------------------------------------------- //
/// Game world consisting of several map that can be played
///
/// Planets are Toxid's concept of Episodes. Each planet contains a series of maps
/// and controls if, and in which order, these maps are visited by the player. Some
/// planets are built into the game, but it is possible for plugins to add their
/// own planets (which would be the approach to take for an add-on game)
///
class Planet {
/// Immediately releases the resources used by a planet
public: virtual ~Planet() {}
//
// Planet implementation
//
/// Creates a new world navigation screen
///
/// A new world navigation screen in which the player can choose which map to
/// visit next
///
public: virtual shared_ptr createWorldScreen() = 0;
/// Creates a new loading screen
///
/// A new loading screen that game displays while loading a map in this world
///
public: virtual shared_ptr createLoadingScreen() = 0;
/// Creates the screen on which the game takes place
/// A new game screen that the game will use for the in-game GUI
public: virtual shared_ptr createGameScreen() = 0;
/// Creates / loads the map with the specified index
/// Index of the map to create
/// A new instance of the map with the specified index
public: virtual shared_ptr