// Copyright (c) 2023 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #pragma once #include "util/parser/SceneItemComponentParser.hpp" #include "util/parser/SceneAssetParser.hpp" #include "util/parser/SceneCodeParser.hpp" namespace Dawn { enum SceneItemDependencyType { SCENE_ITEM_DEPENDENCY_TYPE_ITEM, SCENE_ITEM_DEPENDENCY_TYPE_COMPONENT, SCENE_ITEM_DEPENDENCY_TYPE_CODE, }; struct SceneItemDependency { enum SceneItemDependencyType type; size_t position; }; struct SceneItem { struct SceneItemComponentRegistry *registry; std::string ref; std::string position; std::string alignment; std::string alignX; std::string alignY; std::string lookAtPosition; std::string lookAtTarget; std::string scale; std::string prefab; std::string menuX; std::string menuY; std::vector components; std::vector children; std::vector assets; std::vector code; std::vector dependencies; }; class SceneItemParser : public XmlParser { protected: std::vector getRequiredAttributes() override; std::map getOptionalAttributes() override; int32_t onParse( Xml *node, std::map values, struct SceneItem *out, std::string *error ) override; }; }