ThunderLib
Loading...
Searching...
No Matches
ThunderAutoProject.hpp
1#pragma once
2
3#include <ThunderLib/Auto/ThunderAutoTrajectory.hpp>
4#include <ThunderLib/Auto/ThunderAutoMode.hpp>
5#include <frc2/command/Command.h>
6#include <frc2/command/CommandPtr.h>
7#include <unordered_map>
8#include <unordered_set>
9#include <filesystem>
10#include <string>
11#include <optional>
12#include <string>
13#include <string_view>
14#include <memory>
15#include <mutex>
16
17namespace thunder {
18
19namespace driver {
20
21class ThunderAutoProject;
22
23} // namespace driver
24
25class ThunderAutoProject final {
26 public:
30 ThunderAutoProject() noexcept;
31
39 explicit ThunderAutoProject(const std::filesystem::path& projectPath) noexcept;
40
41 ~ThunderAutoProject() noexcept;
42
52 bool load(const std::filesystem::path& projectPath) noexcept;
53
60
66 bool isLoaded() const noexcept;
67
73 explicit operator bool() const noexcept;
74
80 std::string getName() const noexcept;
81
90 void registerActionCommand(const std::string& actionName, frc2::CommandPtr command);
91
100 void registerActionCommand(const std::string& actionName, std::shared_ptr<frc2::Command> command);
101
109 bool isActionCommandRegistered(const std::string& actionName) const noexcept;
110
121 bool hasAction(const std::string& actionName) const noexcept;
122
139 frc2::CommandPtr getActionCommand(const std::string& actionName) const noexcept;
140
141 using BooleanConditionFunc = std::function<bool()>;
142
152 void registerBooleanCondition(const std::string& conditionName, BooleanConditionFunc condition);
153
161 bool isBooleanConditionRegistered(const std::string& conditionName) const noexcept;
162
170 BooleanConditionFunc getBooleanCondition(const std::string& conditionName) const noexcept;
171
172 using SwitchConditionFunc = std::function<int()>;
173
183 void registerSwitchCondition(const std::string& conditionName, SwitchConditionFunc condition);
184
192 bool isSwitchConditionRegistered(const std::string& conditionName) const noexcept;
193
201 SwitchConditionFunc getSwitchCondition(const std::string& conditionName) const noexcept;
202
210 [[nodiscard]]
211 std::unique_ptr<ThunderAutoTrajectory> getTrajectory(const std::string& trajectoryName) const noexcept;
212
220 bool hasTrajectory(const std::string& trajectoryName) const noexcept;
221
227 std::unordered_set<std::string> getTrajectoryNames() const noexcept;
228
236 [[nodiscard]]
237 std::unique_ptr<ThunderAutoMode> getAutoMode(const std::string& autoModeName) const noexcept;
238
246 bool hasAutoMode(const std::string& autoModeName) const noexcept;
247
253 std::unordered_set<std::string> getAutoModeNames() const noexcept;
254
260 FieldSymmetry getFieldSymmetry() const noexcept;
261
267 FieldDimensions getFieldDimensions() const noexcept;
268
275 void setRemoteUpdatesEnabled(bool enabled) noexcept;
276
280 void enableRemoteUpdates() noexcept;
281
285 void disableRemoteUpdates() noexcept;
286
292 bool areRemoteUpdatesEnabled() const noexcept;
293
294 using RemoteUpdateCallbackFunc = std::function<void()>;
295 using RemoteUpdateSubscriberID = size_t;
296
304 RemoteUpdateSubscriberID registerRemoteUpdateSubscriber(RemoteUpdateCallbackFunc callback) noexcept;
305
313 bool unregisterRemoteUpdateSubscriber(RemoteUpdateSubscriberID id) noexcept;
314
315 driver::ThunderAutoProject* getHandle() noexcept;
316 const driver::ThunderAutoProject* getHandle() const noexcept;
317
318 private:
319 driver::ThunderAutoProject* m_handle;
320
321 std::unordered_map<std::string, std::shared_ptr<frc2::Command>> m_actionCommands;
322 std::unordered_map<std::string, BooleanConditionFunc> m_booleanConditions;
323 std::unordered_map<std::string, SwitchConditionFunc> m_switchConditions;
324};
325
326} // namespace thunder
Definition ThunderAutoProject.hpp:25
void registerActionCommand(const std::string &actionName, frc2::CommandPtr command)
Definition ThunderAutoProject.cpp:39
std::unordered_set< std::string > getAutoModeNames() const noexcept
Definition ThunderAutoProject.cpp:164
void enableRemoteUpdates() noexcept
Definition ThunderAutoProject.cpp:182
bool isLoaded() const noexcept
Definition ThunderAutoProject.cpp:27
void setRemoteUpdatesEnabled(bool enabled) noexcept
Definition ThunderAutoProject.cpp:178
FieldSymmetry getFieldSymmetry() const noexcept
Definition ThunderAutoProject.cpp:168
std::unique_ptr< ThunderAutoTrajectory > getTrajectory(const std::string &trajectoryName) const noexcept
Definition ThunderAutoProject.cpp:138
bool unregisterRemoteUpdateSubscriber(RemoteUpdateSubscriberID id) noexcept
Definition ThunderAutoProject.cpp:199
bool isSwitchConditionRegistered(const std::string &conditionName) const noexcept
Definition ThunderAutoProject.cpp:125
frc2::CommandPtr getActionCommand(const std::string &actionName) const noexcept
Definition ThunderAutoProject.cpp:56
RemoteUpdateSubscriberID registerRemoteUpdateSubscriber(RemoteUpdateCallbackFunc callback) noexcept
Definition ThunderAutoProject.cpp:194
bool hasAction(const std::string &actionName) const noexcept
Definition ThunderAutoProject.cpp:52
std::unique_ptr< ThunderAutoMode > getAutoMode(const std::string &autoModeName) const noexcept
Definition ThunderAutoProject.cpp:153
void disableRemoteUpdates() noexcept
Definition ThunderAutoProject.cpp:186
BooleanConditionFunc getBooleanCondition(const std::string &conditionName) const noexcept
Definition ThunderAutoProject.cpp:112
FieldDimensions getFieldDimensions() const noexcept
Definition ThunderAutoProject.cpp:172
void registerSwitchCondition(const std::string &conditionName, SwitchConditionFunc condition)
Definition ThunderAutoProject.cpp:121
void registerBooleanCondition(const std::string &conditionName, BooleanConditionFunc condition)
Definition ThunderAutoProject.cpp:103
ThunderAutoProject() noexcept
Definition ThunderAutoProject.cpp:7
SwitchConditionFunc getSwitchCondition(const std::string &conditionName) const noexcept
Definition ThunderAutoProject.cpp:129
bool isActionCommandRegistered(const std::string &actionName) const noexcept
Definition ThunderAutoProject.cpp:48
bool hasAutoMode(const std::string &autoModeName) const noexcept
Definition ThunderAutoProject.cpp:160
bool load(const std::filesystem::path &projectPath) noexcept
Definition ThunderAutoProject.cpp:19
bool areRemoteUpdatesEnabled() const noexcept
Definition ThunderAutoProject.cpp:190
std::string getName() const noexcept
Definition ThunderAutoProject.cpp:35
bool discoverAndLoadFromDeployDirectory() noexcept
Definition ThunderAutoProject.cpp:23
std::unordered_set< std::string > getTrajectoryNames() const noexcept
Definition ThunderAutoProject.cpp:149
bool isBooleanConditionRegistered(const std::string &conditionName) const noexcept
Definition ThunderAutoProject.cpp:108
bool hasTrajectory(const std::string &trajectoryName) const noexcept
Definition ThunderAutoProject.cpp:145
Definition Trajectory.hpp:25