ScriptComponentFile.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. ATOMIC_OBJECT(ScriptComponentFile, Resource);
  25. public:
  26. /// Construct.
  27. ScriptComponentFile(Context* context);
  28. /// Destruct.
  29. virtual ~ScriptComponentFile();
  30. static void RegisterObject(Context* context);
  31. /// Only valid in editor, as we don't inspect classnames at runtime
  32. virtual const Vector<String>& GetClassNames() { return classNames_; }
  33. const EnumMap& GetEnums(const String& classname = String::EMPTY) const;
  34. const FieldMap& GetFields(const String& classname = String::EMPTY) const;
  35. const VariantMap& GetDefaultFieldValues(const String& classname = String::EMPTY) const;
  36. void GetDefaultFieldValue(const String& name, Variant& v,const String& classname = String::EMPTY) const;
  37. protected:
  38. void Clear();
  39. void AddEnum(const String& enumName, const EnumInfo& enumInfo, const String& classname = String::EMPTY);
  40. void AddField(const String& fieldName, VariantType variantType, const String& classname = String::EMPTY);
  41. void AddDefaultValue(const String& fieldName, const Variant& value, const String& classname = String::EMPTY);
  42. // only valid in editor
  43. Vector<String> classNames_;
  44. private:
  45. ClassFieldMap classFields_;
  46. ClassDefaultValueMap classDefaultFieldValues_;
  47. ClassEnumMap classEnums_;
  48. static FieldMap emptyFieldMap_;
  49. static EnumMap emptyEnumMap_;
  50. static VariantMap emptyDefaultValueMap_;
  51. };
  52. }