using System.Collections.Generic;
using EcsRx.Collections;
using EcsRx.Collections.Database;
using EcsRx.Events;
using EcsRx.Executor;
using EcsRx.Infrastructure.Dependencies;
using EcsRx.Infrastructure.Plugins;
namespace EcsRx.Infrastructure
{
///
/// Acts as an entry point and bootstrapper for the framework
///
public interface IEcsRxApplication
{
///
/// The dependency injection container
///
/// This will abstract away the underlying DI system, in most cases you wont need it
IDependencyContainer Container { get; }
///
/// The system executor, this orchestrates the systems
///
ISystemExecutor SystemExecutor { get; }
///
/// The event system to publish and subscribe to events
///
IEventSystem EventSystem { get; }
///
/// The entity database, allows you to create and manage entity collections
///
IEntityDatabase EntityDatabase { get; }
///
/// The observable group manager, allows you to get observable groups
///
IObservableGroupManager ObservableGroupManager { get; }
///
/// Any plugins which have been registered within the application
///
IEnumerable Plugins { get; }
///
/// This starts the application initialization process
///
void StartApplication();
///
/// This stops the application process
///
void StopApplication();
}
}