/* 
   Project: coevolutionary GP moto driving
   Dana Vrajitoru (and Russel Mehler)
   agent_lean.h
   
   An agent class controling the leaning. 
  
**/

#ifndef AGENT_LEAN_H
#define AGENT_LEAN_H

#include "agent.h"

class Agent_lean : public Agent {
 protected:
  // Constants used to update the speed.
  float thr_diff, thr_front;
  float c_push, speed_pow;

  // Status type of values to be taken from the manager.
  float hbar_angle, lpush, rpush;
  
  // Legacy value used for comparision with pervious update
  float old_diff;
  char last_lean;

  // Set the number of configuration values. To be defined by the
  // derivate classes.
  virtual void set_nr_config();

 public:
  // constructor
  Agent_lean();
  // output the values
  virtual void output_data();
  // Agent-specific set data to be defined in the derivate class.
  virtual void set_data(float values[]);
  // This will be specific to each agent.
  virtual void update_action();

  friend class Agent_steering;
};

#endif
