mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
[commands] Allow unsetting a subsystem's default command (#4621)
This commit is contained in:
@@ -367,6 +367,10 @@ public final class CommandScheduler implements NTSendable, AutoCloseable {
|
|||||||
DriverStation.reportWarning("Tried to register a null subsystem", true);
|
DriverStation.reportWarning("Tried to register a null subsystem", true);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (m_subsystems.containsKey(subsystem)) {
|
||||||
|
DriverStation.reportWarning("Tried to register an already-registered subsystem", true);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
m_subsystems.put(subsystem, null);
|
m_subsystems.put(subsystem, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -416,6 +420,22 @@ public final class CommandScheduler implements NTSendable, AutoCloseable {
|
|||||||
m_subsystems.put(subsystem, defaultCommand);
|
m_subsystems.put(subsystem, defaultCommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the default command for a subsystem. The current default command will run until another
|
||||||
|
* command is scheduled that requires the subsystem, at which point the current default command
|
||||||
|
* will not be re-scheduled.
|
||||||
|
*
|
||||||
|
* @param subsystem the subsystem whose default command will be removed
|
||||||
|
*/
|
||||||
|
public void removeDefaultCommand(Subsystem subsystem) {
|
||||||
|
if (subsystem == null) {
|
||||||
|
DriverStation.reportWarning("Tried to remove a default command for a null subsystem", true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_subsystems.put(subsystem, null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the default command associated with this subsystem. Null if this subsystem has no default
|
* Gets the default command associated with this subsystem. Null if this subsystem has no default
|
||||||
* command associated with it.
|
* command associated with it.
|
||||||
|
|||||||
@@ -258,6 +258,11 @@ void CommandScheduler::Run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CommandScheduler::RegisterSubsystem(Subsystem* subsystem) {
|
void CommandScheduler::RegisterSubsystem(Subsystem* subsystem) {
|
||||||
|
if (m_impl->subsystems.find(subsystem) != m_impl->subsystems.end()) {
|
||||||
|
std::puts("Tried to register an already-registered subsystem");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_impl->subsystems[subsystem] = nullptr;
|
m_impl->subsystems[subsystem] = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,6 +311,10 @@ void CommandScheduler::SetDefaultCommand(Subsystem* subsystem,
|
|||||||
SetDefaultCommandImpl(subsystem, std::move(defaultCommand).Unwrap());
|
SetDefaultCommandImpl(subsystem, std::move(defaultCommand).Unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CommandScheduler::RemoveDefaultCommand(Subsystem* subsystem) {
|
||||||
|
m_impl->subsystems[subsystem] = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
Command* CommandScheduler::GetDefaultCommand(const Subsystem* subsystem) const {
|
Command* CommandScheduler::GetDefaultCommand(const Subsystem* subsystem) const {
|
||||||
auto&& find = m_impl->subsystems.find(subsystem);
|
auto&& find = m_impl->subsystems.find(subsystem);
|
||||||
if (find != m_impl->subsystems.end()) {
|
if (find != m_impl->subsystems.end()) {
|
||||||
|
|||||||
@@ -200,6 +200,15 @@ class CommandScheduler final : public nt::NTSendable,
|
|||||||
*/
|
*/
|
||||||
void SetDefaultCommand(Subsystem* subsystem, CommandPtr&& defaultCommand);
|
void SetDefaultCommand(Subsystem* subsystem, CommandPtr&& defaultCommand);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the default command for a subsystem. The current default command
|
||||||
|
* will run until another command is scheduled that requires the subsystem, at
|
||||||
|
* which point the current default command will not be re-scheduled.
|
||||||
|
*
|
||||||
|
* @param subsystem the subsystem whose default command will be removed
|
||||||
|
*/
|
||||||
|
void RemoveDefaultCommand(Subsystem* subsystem);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the default command associated with this subsystem. Null if this
|
* Gets the default command associated with this subsystem. Null if this
|
||||||
* subsystem has no default command associated with it.
|
* subsystem has no default command associated with it.
|
||||||
|
|||||||
Reference in New Issue
Block a user