// // Created by HifiExperiments on 1/21/2025 // Copyright 2025 Overte e.V. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #ifndef hifi_ScriptEntityItem_h #define hifi_ScriptEntityItem_h #include "EntityItem.h" class ScriptEntityItem : public EntityItem { public: static EntityItemPointer factory(const EntityItemID& entityID, const EntityItemProperties& properties); ScriptEntityItem(const EntityItemID& entityItemID); ~ScriptEntityItem(); ALLOW_INSTANTIATION // This class can be instantiated ENTITY_PROPERTY_SUBCLASS_METHODS bool shouldBePhysical() const override { return false; } AACube calculateInitialQueryAACube(bool& success) override; virtual void update(const quint64& now) override; bool needsToCallUpdate() const override { return _updateNeeded; } virtual void setUnscaledDimensions(const glm::vec3& value) override; void setParentID(const QUuid& parentID) override; void setUserData(const QString& value) override; static void setLoadOrReloadScriptOperator(std::function loadOrReloadScriptOperator) { _loadOrReloadScriptOperator = loadOrReloadScriptOperator; } static bool loadOrReloadScript(const EntityItemID& entityID, const QString& oldScriptURL, const QString& newScriptURL) { return _loadOrReloadScriptOperator(entityID, oldScriptURL, newScriptURL); } static void setUnloadScriptOperator(std::function unloadScriptOperator) { _unloadScriptOperator = unloadScriptOperator; } static void unloadScript(const EntityItemID& entityID, const QString& scriptURL) { _unloadScriptOperator(entityID, scriptURL); } protected: @Script_ENTITY_PROPS@ void updateScript(); QUuid _runningParentID; QString _runningScriptURL { "" }; bool _updateNeeded { false }; static std::function _loadOrReloadScriptOperator; static std::function _unloadScriptOperator; }; #endif // hifi_ScriptEntityItem_h