/*
 * "Peko" Visual Novel System
 *
 * All Rights Reserved.
 * Copyright (c) 1999-2003 Tsukuba Bunko.
 *
 * $Id: Coordinator.java,v 1.1.2.1 2003/12/11 10:13:39 ppoi Exp $
 */
package tsukuba_bunko.peko.scenario;

import	tsukuba_bunko.peko.ActionControler;
import	tsukuba_bunko.peko.PekoSystem;

import	tsukuba_bunko.peko.canvas.CanvasManager;


/**
 * Canvas モジュールに対する操作を取り持つクラスの基本機能を提供します。
 * @author	$Author: ppoi $
 * @version	$Revision: 1.1.2.1 $
 */
public abstract class Coordinator	{

	/**
	 * シーンコンテクスト
	 */
	protected SceneContext	_context = null;

	/**
	 * 現在アクティブなシーン処理スレッド
	 */
	protected Thread	_activeThread = null;


	/**
	 * <code>Coordinator</code> のインスタンスを生成します。
	 */
	protected Coordinator()
	{
		super();
	}


	/**
	 * この Coordinator インスタンスを指定されたコンテクスト、シーン処理スレッドで動作するように設定します。
	 * @param	context	シーンコンテクスト
	 * @param	activeThread	アクティブなシーン処理スレッド
	 */
	public void prepare( SceneContext context, Thread activeThread )
	{
		_context = context;
		_activeThread = activeThread;
	}

	/**
	 * Coordinator を非アクティブにします。
	 */
	public void dormantize()
	{
		_activeThread = null;
	}

	public abstract void begin();

	public abstract void commit();

	/**
	 * 現在のスレッドがアクティブなスレッドかどうかを判定します。
	 * @return	現在のスレッドがアクティブな場合 <code>true</code>、それ以外の場合 <code>false</code>
	 */
	protected boolean isActiveThread()
	{
		return (_activeThread == Thread.currentThread());
	}

	/**
	 * 現在処理中のシーンコンテクストを取得します。
	 * @return	シーンコンテクスト
	 */
	protected SceneContext getSceneContext()
	{
		return _context;
	}

	/**
	 * CanvasManager を取得します。
	 * @return	CanvasManager
	 */
	protected CanvasManager getCanvasManager()
	{
		return PekoSystem.getInstance().getCanvasManager();
	}

	/**
	 * ActionControler を取得します。
	 * @return	ActionControler
	 */
	protected ActionControler getActionControler()
	{
		return PekoSystem.getInstance().getActionControler();
	}
}