diff --git a/include/Game/HardcodedTestWorld.h b/include/Game/HardcodedTestWorld.h index 30cf8535..dee03f18 100644 --- a/include/Game/HardcodedTestWorld.h +++ b/include/Game/HardcodedTestWorld.h @@ -21,7 +21,6 @@ private: { ComponentWrapperFactory f; - f = ComponentWrapperFactory("Test"); f.AddProperty("TestInteger", 1337); f.AddProperty("TestFloat", 13.37f); @@ -31,18 +30,6 @@ private: f = ComponentWrapperFactory("Debug"); f.AddProperty("Name", std::string("Unnamed")); RegisterComponent(f); - - //f = ComponentWrapperFactory("Transform"); - //f.AddProperty("Position", glm::vec3(0.f, 0.f, 0.f)); - //f.AddProperty("Orientation", glm::quat()); - //f.AddProperty("Scale", glm::vec3(1.f, 1.f, 1.f)); - //RegisterComponent(f); - - f = ComponentWrapperFactory("Model"); - f.AddProperty("Resource", std::string()); - f.AddProperty("Color", glm::vec4(1.f, 1.f, 1.f, 1.f)); - f.AddProperty("Visible", true); - RegisterComponent(f); } void createTestEntities() @@ -50,56 +37,27 @@ private: ResourceManager::RegisterType("EntityXMLFile"); ResourceManager::Load("Schema/Entities/Test.xml")->PopulateWorld(this); - World& world = *this; - - // Create an entity - EntityID e = world.CreateEntity(); - - // Attach a Transform component - world.AttachComponent(e, "Transform"); - // Fetch the component based on EntityID and component type - ComponentWrapper transform = world.GetComponent(e, "Transform"); - // Set the fields of the Transform component - transform["Position"] = glm::vec3(0.f, 0.f, 0.f); - transform["Scale"] = glm::vec3(1.f, 1.f, 1.f); - - // Move on the X axis by fetching field as reference - ((glm::vec3&)transform["Position"]).x += 10.f; - // Shrink by a factor of 100 - ((glm::vec3&)transform["Scale"]) /= 100.f; - - // Loop through all Transform components and print them - for (auto& transform : world.GetComponents("Transform")) { - glm::vec3 pos = transform["Position"]; - std::cout << "Position: " << pos.x << " " << pos.y << " " << pos.z << std::endl; - glm::vec3 scale = transform["Scale"]; - std::cout << "Scale: " << scale.x << " " << scale.y << " " << scale.z << std::endl; - } - //Create some test widgets { - EntityID entityScaleWidget = world.CreateEntity(); - ComponentWrapper transform = world.AttachComponent(entityScaleWidget, "Transform"); + EntityID entityScaleWidget = CreateEntity(); + ComponentWrapper transform = AttachComponent(entityScaleWidget, "Transform"); transform["Position"] = glm::vec3(-1.5f, 0.f, 0.f); - ComponentWrapper model = world.AttachComponent(entityScaleWidget, "Model"); + ComponentWrapper model = AttachComponent(entityScaleWidget, "Model"); model["Resource"] = "Models/ScaleWidget.obj"; } { - EntityID entityRotationWidget = world.CreateEntity(); - ComponentWrapper transform = world.AttachComponent(entityRotationWidget, "Transform"); + EntityID entityRotationWidget = CreateEntity(); + ComponentWrapper transform = AttachComponent(entityRotationWidget, "Transform"); transform["Position"] = glm::vec3(1.5f, 0.f, 0.f); - ComponentWrapper model = world.AttachComponent(entityRotationWidget, "Model"); + ComponentWrapper model = AttachComponent(entityRotationWidget, "Model"); model["Resource"] = "Models/RotationWidget.obj"; } { - EntityID entityDummyScene = world.CreateEntity(); - ComponentWrapper transform = world.AttachComponent(entityDummyScene, "Transform"); + EntityID entityDummyScene = CreateEntity(); + ComponentWrapper transform = AttachComponent(entityDummyScene, "Transform"); transform["Position"] = glm::vec3(0, 0.f, 0.f); - ComponentWrapper model = world.AttachComponent(entityDummyScene, "Model"); + ComponentWrapper model = AttachComponent(entityDummyScene, "Model"); model["Resource"] = "Models/DummyScene.obj"; } - - - } }; \ No newline at end of file diff --git a/resources/Schema/Components.xsd b/resources/Schema/Components.xsd index 41564706..54896b69 100644 --- a/resources/Schema/Components.xsd +++ b/resources/Schema/Components.xsd @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/resources/Schema/Components/Model.xml b/resources/Schema/Components/Model.xml new file mode 100644 index 00000000..bd20147f --- /dev/null +++ b/resources/Schema/Components/Model.xml @@ -0,0 +1,5 @@ + + + + true + \ No newline at end of file diff --git a/resources/Schema/Components/Model.xsd b/resources/Schema/Components/Model.xsd new file mode 100644 index 00000000..fb0774f8 --- /dev/null +++ b/resources/Schema/Components/Model.xsd @@ -0,0 +1,24 @@ + + + + + + + + A visible model loaded from disk + + + + + Model file + + + Color tint + + + Wether the model is visible or not + + + + + \ No newline at end of file diff --git a/resources/Schema/Types.xsd b/resources/Schema/Types.xsd index 939c88da..cd464201 100644 --- a/resources/Schema/Types.xsd +++ b/resources/Schema/Types.xsd @@ -3,6 +3,10 @@ + + + + diff --git a/resources/Schema/Types/Color.xsd b/resources/Schema/Types/Color.xsd new file mode 100644 index 00000000..4fb9572e --- /dev/null +++ b/resources/Schema/Types/Color.xsd @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/Engine/Core/EntityXMLFile.cpp b/src/Engine/Core/EntityXMLFile.cpp index 450a8c13..9d51cc7f 100644 --- a/src/Engine/Core/EntityXMLFile.cpp +++ b/src/Engine/Core/EntityXMLFile.cpp @@ -330,11 +330,13 @@ void EntityXMLFile::parseEntityGraph() std::size_t EntityXMLFile::getTypeStride(std::string typeName) { std::map typeStrides{ + { "bool", sizeof(bool) }, { "int", sizeof(int) }, { "double", sizeof(double) }, { "string", sizeof(std::string) }, { "Vector", sizeof(glm::vec3) }, { "Quaternion", sizeof(glm::quat) }, + { "Color", sizeof(glm::vec4) } }; auto it = typeStrides.find(typeName);