// AIThread.h
// General include for threads in the AI.  See README for more information on threads.

// Absctract class definining base AIThread behavior
class AIThread
    friend class ThoughtManager;

    virtual void Reset() = 0;                // Called when the game is loaded
    virtual void StartFrame() {}            // Called at the start of each frame
    virtual void Update() = 0;              // Called each frame
    virtual void ProgramSucceeded() = 0;    // Called when the thread's program completes
    virtual void ProgramFailed() = 0;       // Called when the thread's program fails

    Program *_ProgramToExecute;   // Program this thread desires to be run after ThoughtManager calls Update on it
    String _Name;                 // This thread's name
    String _CurAction;            // Identifier for current action
    double _WakeUpTime;           // Time this thread will wake up and be ready to update again
    double _LastExecuteTime;      // Last time this thread executed
    UINT _Priority;               // Integer representing the thread priority.  Higher priority executes over low priority.