Files
flightgear/3rdparty/osgXR/src/Action.h
2022-10-20 20:29:11 +08:00

85 lines
2.1 KiB
C++

// SPDX-License-Identifier: LGPL-2.1-only
// Copyright (C) 2021 James Hogan <james@albanarts.com>
#ifndef OSGXR_ACTION
#define OSGXR_ACTION 1
#include <osgXR/Action>
#include "Subaction.h"
#include <osg/ref_ptr>
#include <memory>
#include <set>
#include <string>
namespace osgXR {
namespace OpenXR {
class Action;
class Instance;
};
class Action::Private
{
public:
static Private *get(Action *pub)
{
return pub->_private.get();
}
Private(ActionSet *actionSet);
virtual ~Private();
void setName(const std::string &name);
const std::string &getName() const;
void setLocalizedName(const std::string &localizedName);
const std::string &getLocalizedName() const;
void addSubaction(std::shared_ptr<Subaction::Private> subaction);
bool getUpdated() const
{
return _updated;
}
/// Setup action with an OpenXR instance
virtual OpenXR::Action *setup(OpenXR::Instance *instance) = 0;
/// Clean up action before an OpenXR session is destroyed
virtual void cleanupSession() = 0;
/// Clean up action before an OpenXR instance is destroyed
void cleanupInstance();
/**
* Get a list of currently bound source paths for this action.
* @param sourcePaths[out] Vector of source paths to write into.
*/
void getBoundSources(std::vector<std::string> &sourcePaths) const;
/**
* Get a list of currently bound source localized names for this action.
* @param whichComponents Which components to include.
* @param names[out] Vector of names to write into.
*/
void getBoundSourcesLocalizedNames(XrInputSourceLocalizedNameFlags whichComponents,
std::vector<std::string> &names) const;
protected:
std::string _name;
std::string _localizedName;
osg::ref_ptr<ActionSet> _actionSet;
std::set<std::shared_ptr<Subaction::Private>> _subactions;
bool _updated;
osg::ref_ptr<OpenXR::Action> _action;
};
} // osgXR
#endif