Skip to content
Snippets Groups Projects
Behaviours.h 1.93 KiB
Newer Older
Dave Murray-Rust's avatar
Dave Murray-Rust committed
#ifndef BEHAVIOUR_h
#define BEHAVIOUR_h





class Behaviour {
protected:
  boolean _interruptable = true;
  boolean _temp = false;
  boolean _priority = false;
  boolean _running = false;
  String _name = "name";


public:
  Behaviour(String name) : _name(name) {};
  ~Behaviour() {};

  //Can this behaviour be interruped
  virtual boolean is_interruptable() { return _interruptable; };
  //Can this behaviour be run quickly without stopping what's going on (e.g. comms, debug)
  virtual boolean is_temp() { return _temp; };
  //Should this behaviour override others
  virtual boolean is_priority() {return _priority;};
  //Is the behaviour running
  virtual boolean is_running() {return _running;};
  //What's the name of this behaviour
  virtual String name() {return _name; };
  //What arguments does the behaviour take? Override this to document your behaviour
  virtual char* args() {return "(no args)"; };
Dave Murray-Rust's avatar
Dave Murray-Rust committed
  //Start the behaviour, with arguments (don't know why this can't be virtual?)
  virtual String start(String args) {Serial.println("Base start called <"+args+">");};
  //Update the behaviour periodically
  virtual void update() {};
  //Start the behaviour, with arguments (don't know why this can't be virtual?)
  virtual void stop() { _running = false; };
};

/*
 * Example way to make a simple behaviour
 */
class TestBehaviour : public Behaviour {
public:
  TestBehaviour(String n) : Behaviour(n)  {}
  String start(String args) {
    return "Test behaviour " + _name + " with (" + args + ")";
  }
};


class BehaviourTable {
  Behaviour* behaviours[40];


public:
  int num = 0;
  BehaviourTable() {

  }
  void add(Behaviour *b) {
    behaviours[num] = b;

    num++;
  }

  Behaviour* get(String n) {
    for( int i = 0; i < num; i++ ) {
      if( behaviours[i]->name() == n) { return behaviours[i]; }
    }
    return nullptr;
  }

  Behaviour* get_by_num(int n) {
    return behaviours[n];
  }

  int get_num_behaviours() {
    return num;
  }
Dave Murray-Rust's avatar
Dave Murray-Rust committed
};

#endif