/**
 * <p>
 * Copyright © 2009-2010, Bruce-Robert Pocock
 * </p>
 * <p>
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or (at
 * your option) any later version.
 * </p>
 * <p>
 * This program 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 GNU
 * General Public License for more details.
 * </p>
 * <p>
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 * </p>
 * 
 * @author brpocock
 */

package org.starhope.vergil.graphics;

import java.util.Collection;

import org.starhope.vergil.types.Coord3D;
import org.starhope.vergil.types.Coord3DPair;


/**
 * A container of containers
 * 
 * @author brpocock
 * 
 */
public interface Container {
	/**
	 * TODO: document this method (brpocock, Jan 5, 2010)
	 * 
	 * @return all sprites contained by this container or its children
	 */
	public Collection <Sprite> getAllContainedSprites ();

	/**
	 * @return the bounding box of this container
	 */
	public Coord3DPair getBoundingBox ();

	/**
	 * TODO: document this method (brpocock, Jan 5, 2010)
	 * 
	 * @return all containers which are contained within this one
	 */
	public Collection <Container> getChildren ();

	/**
	 * TODO: document this method (brpocock, Jan 5, 2010)
	 * 
	 * @return this container's parent container
	 */
	public Container getParent ();

	/**
	 * @return the position of this container relative to its parent;
	 *         i.e. the coördinate space offset of this container from
	 *         its parent's frame of reference
	 */
	public Coord3D getPosition ();

	/**
	 * TODO: document this method (brpocock, Jan 5, 2010)
	 * 
	 * @return all sprites immediately contained by this container,
	 *         excluding those contained by children
	 */
	public Collection <Sprite> getSprites ();

	/**
	 * @return true, if this container wants to be visible
	 */
	public boolean isVisible ();

	/**
	 * @param pos set the position of this container relative to its
	 *        parent; i.e. the coördinate space offset of this container
	 *        from its parent's frame of reference
	 */
	public void setPosition (Coord3D pos);

	/**
	 * @param toBeSeen true, if you want this container to be
	 *        potentially visible
	 */
	public void setVisible (boolean toBeSeen);

}
