Fix cancel of inner commands in ConditionalCommands (#858)

This commit is contained in:
sciencewhiz
2018-01-18 20:04:33 -08:00
committed by Peter Johnson
parent 0e8ff4663d
commit e4e1eab413
15 changed files with 901 additions and 30 deletions

View File

@@ -62,6 +62,8 @@ class Command : public ErrorBase, public SendableBase {
bool Run();
void Cancel();
bool IsRunning() const;
bool IsInitialized() const;
bool IsCompleted() const;
bool IsInterruptible() const;
void SetInterruptible(bool interruptible);
bool DoesRequire(Subsystem* subsystem) const;
@@ -148,6 +150,9 @@ class Command : public ErrorBase, public SendableBase {
// The CommandGroup this is in
CommandGroup* m_parent = nullptr;
// Whether or not this command has completed running
bool m_completed = false;
int m_commandID = m_commandCounter++;
static int m_commandCounter;

View File

@@ -10,23 +10,25 @@
#include <llvm/Twine.h>
#include "Commands/Command.h"
#include "Commands/InstantCommand.h"
namespace frc {
/**
* A ConditionalCommand is a Command that starts one of two commands.
*
* A ConditionalCommand uses m_condition to determine whether it should run
* m_onTrue or m_onFalse.
* A ConditionalCommand uses the Condition method to determine whether it should
* run onTrue or onFalse.
*
* A ConditionalCommand adds the proper Command to the Scheduler during
* Initialize() and then IsFinished() will return true once that Command has
* finished executing.
*
* If no Command is specified for m_onFalse, the occurrence of that condition
* If no Command is specified for onFalse, the occurrence of that condition
* will be a no-op.
*
* A CondtionalCommand will require the superset of subsystems of the onTrue
* and onFalse commands.
*
* @see Command
* @see Scheduler
*/
@@ -48,7 +50,7 @@ class ConditionalCommand : public Command {
void _Initialize() override;
void _Cancel() override;
bool IsFinished() override;
void Interrupted() override;
void _Interrupted() override;
private:
// The Command to execute if Condition() returns true