ScriptableObjectAdapter.h 1.0 KB

1234567891011121314151617181920212223242526272829
  1. #pragma once
  2. #include "ObjectAdapter.h"
  3. #include <unordered_map>
  4. namespace WallpaperEngine::Scripting::Adapters {
  5. class ScriptableObjectAdapter : public ObjectAdapter {
  6. public:
  7. explicit ScriptableObjectAdapter (ScriptEngine& engine, std::string name);
  8. JSValue instantiate (ScriptableObject& object) override;
  9. JSValue instantiate (Data::Model::DynamicValue& value) override;
  10. /** Unwraps a JS value produced by instantiate(ScriptableObject&) back to its C++ object, or
  11. * nullptr if the value isn't one (wrong type, plain JS object, etc). */
  12. static ScriptableObject* getObject (JSValueConst value);
  13. void forget (const ScriptableObject& object);
  14. void clear ();
  15. private:
  16. /** one JS object per layer like scenescript64 (getLayer sub_181632350 -> sub_181652380), scripts compare
  17. * layers, key maps by them and tag them (3378399626's widget, 3577513994's icon.clicked) */
  18. std::unordered_map<const ScriptableObject*, JSValue> m_instances;
  19. JSClassExoticMethods m_exoticMethods;
  20. std::string m_name;
  21. };
  22. }