/**
Entry-point module allowing to access all EntitySysD features.

Copyright: © 2015-2016 Claude Merle
Authors: Claude Merle
License: This file is part of EntitySysD.

EntitySysD is free software: you can redistribute it and/or modify it
under the terms of the Lesser GNU General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

EntitySysD is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Lesser GNU General Public License for more details.

You should have received a copy of the Lesser GNU General Public License
along with EntitySysD. If not, see $(LINK http://www.gnu.org/licenses/).
*/

module entitysysd;

public import entitysysd.entity;
public import entitysysd.event;
public import entitysysd.exception;
public import entitysysd.system;

/**
 * Meta-class embedding entity, system and event managers.
 */
class EntitySysD
{
    /**
     * Create entity, system and event managers.
     * Params:
     *   maxComponent = Maximum number of component supported.
     *   poolSize     = Component pool chunk-size.
     */
    this(size_t maxComponent = 64, size_t poolSize = 8192)
    {
        events   = new EventManager;
        entities = new EntityManager(events, maxComponent, poolSize);
        systems  = new SystemManager(entities, events);
    }

    EventManager  events;
    EntityManager entities;
    SystemManager systems;
}