ScriptComponentFile.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #pragma once
  2. #include "../Resource/Resource.h"
  3. #include "../Core/Variant.h"
  4. namespace Atomic
  5. {
  6. struct EnumInfo
  7. {
  8. EnumInfo(const String& name = String::EMPTY, const Variant& v = Variant::EMPTY)
  9. {
  10. name_ = name;
  11. value_ = v;
  12. }
  13. String name_;
  14. Variant value_;
  15. };
  16. typedef HashMap<String, VariantType> FieldMap;
  17. typedef HashMap<String, Vector<EnumInfo>> EnumMap;
  18. typedef HashMap<StringHash, FieldMap> ClassFieldMap;
  19. typedef HashMap<StringHash, EnumMap> ClassEnumMap;
  20. typedef HashMap<StringHash, VariantMap> ClassDefaultValueMap;
  21. /// NET Assembly resource.
  22. class ATOMIC_API ScriptComponentFile : public Resource
  23. {
  24. OBJECT(ScriptComponentFile);
  25. public:
  26. /// Construct.
  27. ScriptComponentFile(Context* context);
  28. /// Destruct.
  29. virtual ~ScriptComponentFile();
  30. static void RegisterObject(Context* context);
  31. const EnumMap& GetEnums(const String& classname = String::EMPTY) const;
  32. const FieldMap& GetFields(const String& classname = String::EMPTY) const;
  33. const VariantMap& GetDefaultFieldValues(const String& classname = String::EMPTY) const;
  34. void GetDefaultFieldValue(const String& name, Variant& v,const String& classname = String::EMPTY) const;
  35. protected:
  36. void Clear();
  37. void AddEnum(const String& enumName, const EnumInfo& enumInfo, const String& classname = String::EMPTY);
  38. void AddField(const String& fieldName, VariantType variantType, const String& classname = String::EMPTY);
  39. void AddDefaultValue(const String& fieldName, const Variant& value, const String& classname = String::EMPTY);
  40. private:
  41. ClassFieldMap classFields_;
  42. ClassDefaultValueMap classDefaultFieldValues_;
  43. ClassEnumMap classEnums_;
  44. static FieldMap emptyFieldMap_;
  45. static EnumMap emptyEnumMap_;
  46. static VariantMap emptyDefaultValueMap_;
  47. };
  48. }