/*
* $Id: AnimateObject.java,v 1.1.1.1 2002/06/05 21:56:32 root Exp $
*
* Developed for "Rethinking CS101", a project of Lynn Andrea Stein's AP Group.
* For more information, see the
* CS101 homepage or email .
*
* Copyright (C) 1999 Massachusetts Institute of Technology.
* Please do not redistribute without obtaining permission.
*/
package cs101.util;
import cs101.lang.*;
/**
* The generic self-animating (active) object. Extend it, overriding
* its act() method, to generate interesting behavior.
*
* Copyright 1999 Massachusetts Institute of Technology
*
* @see cs101.lang.AnimatorThread
* @see cs101.lang.Animate
*
* @author Lynn Andrea Stein, las@ai.mit.edu
* @version $Id: AnimateObject.java,v 1.1.1.1 2002/06/05 21:56:32 root Exp $
*
*/
public abstract class AnimateObject extends Object implements Animate
{
/* CONSTANTS */
/**
* These constants allow mnemonic access to AnimateObject's final
* constructor argument, i.e., should the object start running on
* construction or on (a subsequent) call to a separate start()
* method?
*
* @see #AnimateObject( boolean )
*/
public static boolean START_IMMEDIATELY = true,
DONT_START_YET = false;
/* FIELDS */
/**
* The animacy that makes this object go.
*
* @see cs101.lang.AnimatorThread
*/
protected AnimatorThread spirit;
/* CONSTRUCTORS */
/**
* The most basic constructor creates the AnimateObject and starts
* its animacy going.
*/
public AnimateObject()
{
this( AnimateObject.START_IMMEDIATELY );
}
/**
* This constructor allows you to create an AnimateObject without
* starting its animacy going. (You do this by calling this
* constructor with AnimateObject.DONT_START_YET, i.e., the
* boolean false. If you do this, the animacy will not
* actually begin execution until you call this AnimateObject's
* start() method.
*
* @param startImmediately If false, execution does not start until
* explicit invocation of this object's start() method.
*
* @see #START_IMMEDIATELY
* @see #DONT_START_YET
*/
public AnimateObject( boolean startImmediately )
{
super();
this.spirit = new AnimatorThread(this);
if ( startImmediately )
{
this.spirit.startExecution();
}
}
/**
* Invocation of this method begins this object's autonomous execution.
*
* (If execution has already begun, this method does nothing.)
*
* @see #AnimateObject( boolean )
*/
public void start() {
this.spirit.start();
}
/**
* Override this method to give the AnimateObject behavior.
*
* The default behavior -- Thread.yield() -- simply gives other
* animacies a chance to run.
*/
public abstract void act();
}
/* Comments:
*
* History:
* $Log: AnimateObject.java,v $
* Revision 1.1.1.1 2002/06/05 21:56:32 root
* CS101 comes to Olin finally.
*
* Revision 1.4 1999/06/18 21:37:47 las
* Updated AnimateObject to work with the new AnimatorThread/Animate
* paradigm. AnimateObject is now an abstract class; its act() method
* must be overridden to create a useful object.
*
* Revision 1.3 1998/07/24 17:19:21 tparnell
* Placate new javadoc behavior
*
* Revision 1.2 1998/06/24 20:58:36 tparnell
* formatting fixed
*
* Revision 1.1 1998/06/08 18:11:52 tparnell
* added files from Lynn
*
*/