/* ** Copyright (C) 1999 Microsoft Corporation. All Rights Reserved. ** ** File: goal.cpp ** ** Author: ** ** Description: ** Implementation of the training library "goal" interface. ** ** History: */ #include "pch.h" #include "Training.h" #include "GoalList.h" namespace Training { //------------------------------------------------------------------------------ // class methods //------------------------------------------------------------------------------ /* void */ Goal::Goal (Condition* pSuccessCondition) : m_pSuccessCondition (pSuccessCondition) { } //------------------------------------------------------------------------------ /* void */ Goal::~Goal (void) { delete m_pSuccessCondition; } //------------------------------------------------------------------------------ bool Goal::Start (void) { // if the success condition is already true, then prepare to evaluate // the goal. if (m_pSuccessCondition->Start () == c_GoalIncomplete) { // execute the start actions m_startActionList.Execute (); // start the constraint conditions m_constraintConditionList.Start (); // return false to indicate that the goal condition is false. return c_GoalIncomplete; } // if it gets here, the goal state is already true and we will be // skipping this goal. return c_GoalComplete; } //------------------------------------------------------------------------------ void Goal::Stop (void) { m_pSuccessCondition->Stop (); // stop the start actions m_startActionList.Stop (); // stop the constraint conditions m_constraintConditionList.Stop (); } //------------------------------------------------------------------------------ bool Goal::Evaluate (void) { // For starters, if the success condition is true, then the goal is complete. if (m_pSuccessCondition->Evaluate ()) return c_GoalComplete; // check the constraint condition, don't care about the return value m_constraintConditionList.Evaluate (); // The goal is not complete, so return false. return c_GoalIncomplete; } //------------------------------------------------------------------------------ void Goal::AddStartAction (Action* pStartAction) { m_startActionList.AddAction (pStartAction); } //------------------------------------------------------------------------------ void Goal::AddConstraintCondition (Condition* pConstraintCondition) { m_constraintConditionList.AddCondition (pConstraintCondition); } //------------------------------------------------------------------------------ }