/* * Copyright (c) 2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef META_INTERFACE_ITICKABLE_CONTROLLER_H #define META_INTERFACE_ITICKABLE_CONTROLLER_H #include #include #include #include #include META_BEGIN_NAMESPACE() REGISTER_INTERFACE(ITickableController, "6b730c19-8a43-4a00-8e41-fda0bc78d294") /** * @brief The ITickableController interface is implemented by a controller objects for startables. * @note The default implementation is META_NS::ClassId::StartableController. */ class ITickableController : public CORE_NS::IInterface { META_INTERFACE(CORE_NS::IInterface, ITickableController) public: /** * @brief Return a list of all tickable objects handled by a controller. */ virtual BASE_NS::vector GetTickables() const = 0; /** * @brief Call ITickable::Tick for all tickable objects handled by the controller in a given * order. * @param time Current time. */ virtual void TickAll(const TimeSpan& time) = 0; /** * @brief Interval for ticking the tickables which are part of the controller's hierarchy. * The default value is TimeSpan::Infinite, meaning that the tickables are not automatically ticked. */ META_PROPERTY(META_NS::TimeSpan, TickInterval) /** * @brief The order in which the tickables should be ticked. * The default value is TraversalType::DEPTH_FIRST_PRE_ORDER. */ META_PROPERTY(META_NS::TraversalType, TickOrder) /** * @brief Set the queue id of the queue where ITickable::Tick() should be called when ticking. * @param queueId The id of the task queue. if {}, a new thread should be created for ticking. * @return True if the queue id was successfully set, false otherwise. */ virtual bool SetTickableQueueuId(const BASE_NS::Uid& queueId) = 0; }; META_END_NAMESPACE() #endif // META_INTERFACE_ITICKABLE_CONTROLLER_H