-/* $Id$
-
-This file is part of R²C²
-Copyright © 2010 Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
#ifndef LIBR2C2_AICONTROL_H_
#define LIBR2C2_AICONTROL_H_
#include <sigc++/trackable.h>
-#include "controller.h"
+#include "trainai.h"
namespace R2C2 {
class Train;
-class AIControl: public Controller, public sigc::trackable
+class AIControl: public TrainAI, public sigc::trackable
{
private:
- Train &train;
- Controller *next_ctrl;
- Control target_speed;
- bool blocked;
- bool approach;
+ enum State
+ {
+ NORMAL,
+ APPROACH,
+ BLOCKED,
+ FOLLOW
+ };
+
+ float target_speed;
+ bool reverse;
+ bool pending_reverse;
+ State state;
+ bool need_update;
public:
- AIControl(Train &, Controller *);
- virtual ~AIControl();
-
- virtual void set_control(const std::string &, float);
- virtual const Control &get_control(const std::string &) const;
+ AIControl(Train &);
- virtual float get_speed() const;
- virtual bool get_reverse() const;
- virtual float get_braking_distance() const;
+ void set_target_speed(float);
+ float get_target_speed() const { return target_speed; }
+ void set_reverse(bool);
+ bool get_reverse() const { return reverse; }
+ virtual void message(const Message &);
virtual void tick(const Msp::Time::TimeDelta &);
+ virtual bool has_intent_to_move() const;
private:
- void control_changed(const Control &);
- void arrived();
+ void event(TrainAI &, const Message &);
};
} // namespace R2C2