/* * Basic components used by almost everything */ #ifndef EU07_BASICCOMPONENTS_H #define EU07_BASICCOMPONENTS_H #include "audio/sound.h" #include "entt/entity/entity.hpp" #include "glm/vec3.hpp" #include "glm/gtc/quaternion.hpp" #include "registry/FName.h" #include "utilities/uuid.hpp" #include #include class TDynamicObject; namespace ECSComponent { ///< summary> /// Basic component for storing transform of entities /// struct Transform { glm::dvec3 Position{0.f}; // object position glm::quat Rotation{1.f, 0.f, 0.f, 0.f}; // object rotation glm::vec3 Scale{1.f}; // object scale }; struct Velocity { glm::vec3 Value{0.f}; // object velocity }; ///< summary> /// Basic component for naming entities /// in future for scenery hierarchy /// struct Identification { FName Name; // object name - may contain slashes for editor hierarchy "directories" std::uint64_t Id{0}; // id in scene }; ///< summary> /// Basic component for parent-child relationships between entities /// struct Parent { entt::entity value{entt::null}; glm::dvec3 localOffset{0.0}; // position offset relative to parent glm::quat localRotation{1.f, 0.f, 0.f, 0.f}; // rotation relative to parent }; // Links an ECS entity to its corresponding simulation vehicle. // VehicleSyncSystem reads this to keep Transform in sync with vehicle world position. struct VehicleRef { TDynamicObject* vehicle = nullptr; }; struct SoundComponent { sound_source sound; // sound source float volume = 1.0f; // 0–1 float pitch = 1.0f; // speed / pitch float range = 1.0f; // range bool loop = false; bool playOnStart = false; bool isPlaying = false; }; ///< summary> /// Empty component for entities that are disabled and should not be processed by systems /// struct Disabled { }; } // namespace ECSComponent #endif // EU07_BASICCOMPONENTS_H