/* Copyright 2014 ROBLOX Corporation, All Rights Reserved */ #pragma once #include "Util/BinaryString.h" #include "V8Tree/Instance.h" #include "V8Tree/Service.h" #include "V8DataModel/FlyweightService.h" #include #include "Value.h" namespace RBX { class PartOperation; class CSGMesh; extern const char *const sCSGDictionaryService; class CSGDictionaryService : public DescribedCreatable { protected: typedef DescribedCreatable Super; typedef boost::unordered_map > CSGMeshMap; CSGMeshMap cachedBREPMeshMap; CSGMeshMap cachedMeshMap; void reparentChildData(shared_ptr sharedInstance); virtual void refreshRefCountUnderInstance(RBX::Instance* instance); boost::shared_ptr insertMesh(const std::string key, const RBX::BinaryString& meshData); boost::shared_ptr insertCachedMesh(const std::string key, const RBX::BinaryString& meshData); virtual void onServiceProvider(ServiceProvider* oldProvider, ServiceProvider* newProvider); public: CSGDictionaryService(); void storeData(PartOperation& partOperation, bool forceIncrement = false); void retrieveData(PartOperation& partOperation); void storeAllDescendants(shared_ptr instance); void retrieveAllDescendants(shared_ptr instance); void reparentAllChildData(); void insertMesh(PartOperation& partOperation); boost::shared_ptr getMesh(PartOperation& partOperation); boost::shared_ptr getCachedMesh(PartOperation& partOperation); void retrieveMeshData(PartOperation& partOperation); void storePhysicsData(PartOperation& partOperation, bool forceIncrement = false); void retrievePhysicsData(PartOperation& partOperation); void onWorkspaceLoaded(); }; }