#include <iostream>
#include <interaction_lib/InteractionLib.h>
#include <interaction_lib/misc/InteractionLibPtr.h>
int main()
{
IL::UniqueInteractionLibPtr intlib(IL::CreateInteractionLib(IL::FieldOfUse::Interactive));
constexpr float width = 2560.0f;
constexpr float height = 1440.0f;
constexpr float offset = 0.0f;
intlib->CoordinateTransformAddOrUpdateDisplayArea(width, height);
intlib->CoordinateTransformSetOriginOffset(offset, offset);
constexpr IL::InteractorId idA = 0;
constexpr IL::InteractorId idB = 1;
constexpr IL::InteractorId idC = 2;
constexpr IL::InteractorId idD = 3;
constexpr float size = 500.0f;
constexpr IL::Rectangle rectA = { 0, 0, size, size };
constexpr IL::Rectangle rectB = { width - size, 0, size, size };
constexpr IL::Rectangle rectC = { 0, height - size, size, size };
constexpr IL::Rectangle rectD = { width - size, height - size, size, size };
constexpr float z = 0.0f;
intlib->BeginInteractorUpdates();
intlib->AddOrUpdateInteractor(idA, rectA, z);
intlib->AddOrUpdateInteractor(idB, rectB, z);
intlib->AddOrUpdateInteractor(idC, rectC, z);
intlib->AddOrUpdateInteractor(idD, rectD, z);
intlib->CommitInteractorUpdates();
struct Focus
{
IL::InteractorId id = IL::EmptyInteractorId();
size_t count = 0;
};
Focus focus;
intlib->SubscribeGazeFocusEvents([](IL::GazeFocusEvent evt, void* context)
{
Focus& focus = *static_cast<Focus*>(context);
std::cout
<< "Interactor: " << evt.id
<< ", focused: " << std::boolalpha << evt.hasFocus
<< ", timestamp: " << evt.timestamp_us << " us"
<< "\n";
if (evt.hasFocus)
{
focus.count = focus.id == evt.id ? focus.count + 1 : 1;
focus.id = evt.id;
}
}, &focus);
std::cout << "Starting interaction library update loop.\n";
constexpr size_t max_focus_count = 3;
while (focus.count < max_focus_count)
{
intlib->WaitAndUpdate();
}
std::cout << "Interactor " << focus.id << " got focused " << focus.count << " times\n";
}