001 /* 002 * $Id: AnimateObject.java,v 1.1.1.1 2002/06/05 21:56:32 root Exp $ 003 * 004 * Developed for "Rethinking CS101", a project of Lynn Andrea Stein's AP Group. 005 * For more information, see <a href="http://www.ai.mit.edu/projects/cs101/">the 006 * CS101 homepage</a> or email <las@ai.mit.edu>. 007 * 008 * Copyright (C) 1999 Massachusetts Institute of Technology. 009 * Please do not redistribute without obtaining permission. 010 */ 011 package cs101.util; 012 013 import cs101.lang.*; 014 015 /** 016 * The generic self-animating (active) object. Extend it, overriding 017 * its act() method, to generate interesting behavior. 018 * 019 * Copyright 1999 Massachusetts Institute of Technology 020 * 021 * @see cs101.lang.AnimatorThread 022 * @see cs101.lang.Animate 023 * 024 * @author Lynn Andrea Stein, las@ai.mit.edu 025 * @version $Id: AnimateObject.java,v 1.1.1.1 2002/06/05 21:56:32 root Exp $ 026 * 027 */ 028 029 public abstract class AnimateObject extends Object implements Animate 030 { 031 /* CONSTANTS */ 032 033 /** 034 * These constants allow mnemonic access to AnimateObject's final 035 * constructor argument, i.e., should the object start running on 036 * construction or on (a subsequent) call to a separate start() 037 * method? 038 * 039 * @see #AnimateObject( boolean ) 040 */ 041 public static boolean START_IMMEDIATELY = true, 042 DONT_START_YET = false; 043 044 /* FIELDS */ 045 046 /** 047 * The animacy that makes this object go. 048 * 049 * @see cs101.lang.AnimatorThread 050 */ 051 protected AnimatorThread spirit; 052 053 054 /* CONSTRUCTORS */ 055 056 /** 057 * The most basic constructor creates the AnimateObject and starts 058 * its animacy going. 059 */ 060 public AnimateObject() 061 { 062 this( AnimateObject.START_IMMEDIATELY ); 063 } 064 065 /** 066 * This constructor allows you to create an AnimateObject without 067 * starting its animacy going. (You do this by calling this 068 * constructor with <tt>AnimateObject.DONT_START_YET</tt>, i.e., the 069 * boolean <tt>false</tt>. If you do this, the animacy will not 070 * actually begin execution until you call this AnimateObject's 071 * start() method. 072 * 073 * @param startImmediately If false, execution does not start until 074 * explicit invocation of this object's start() method. 075 * 076 * @see #START_IMMEDIATELY 077 * @see #DONT_START_YET 078 */ 079 public AnimateObject( boolean startImmediately ) 080 { 081 super(); 082 083 this.spirit = new AnimatorThread(this); 084 if ( startImmediately ) 085 { 086 this.spirit.startExecution(); 087 } 088 } 089 090 /** 091 * Invocation of this method begins this object's autonomous execution. 092 * 093 * (If execution has already begun, this method does nothing.) 094 * 095 * @see #AnimateObject( boolean ) 096 */ 097 public void start() { 098 this.spirit.start(); 099 } 100 101 /** 102 * Override this method to give the AnimateObject behavior. 103 * 104 * The default behavior -- Thread.yield() -- simply gives other 105 * animacies a chance to run. 106 */ 107 public abstract void act(); 108 109 } 110 111 /* Comments: 112 * 113 * History: 114 * $Log: AnimateObject.java,v $ 115 * Revision 1.1.1.1 2002/06/05 21:56:32 root 116 * CS101 comes to Olin finally. 117 * 118 * Revision 1.4 1999/06/18 21:37:47 las 119 * Updated AnimateObject to work with the new AnimatorThread/Animate 120 * paradigm. AnimateObject is now an abstract class; its act() method 121 * must be overridden to create a useful object. 122 * 123 * Revision 1.3 1998/07/24 17:19:21 tparnell 124 * Placate new javadoc behavior 125 * 126 * Revision 1.2 1998/06/24 20:58:36 tparnell 127 * formatting fixed 128 * 129 * Revision 1.1 1998/06/08 18:11:52 tparnell 130 * added files from Lynn 131 * 132 */