#pragma once #include "dv.hpp" #include namespace dv { template inline dv::value to_value(glm::vec vec) { auto list = dv::list(); for (size_t i = 0; i < n; i++) { list.add(vec[i]); } return list; } template inline dv::value to_value(glm::mat mat) { auto list = dv::list(); for (size_t i = 0; i < n; i++) { for (size_t j = 0; j < m; j++) { list.add(mat[i][j]); } } return list; } template void get_vec(const dv::value& list, glm::vec& vec) { for (size_t i = 0; i < n; i++) { vec[i] = list[i].asNumber(); } } template void get_vec(const dv::value& map, const std::string& key, glm::vec& vec) { if (!map.has(key)) { return; } auto& list = map[key]; for (size_t i = 0; i < n; i++) { if constexpr (std::is_floating_point()) { vec[i] = list[i].asNumber(); } else { vec[i] = list[i].asInteger(); } } } template void get_mat( const dv::value& list, glm::mat& mat ) { for (size_t y = 0; y < n; y++) { for (size_t x = 0; x < m; x++) { mat[y][x] = list[y * m + x].asNumber(); } } } template void get_mat( const dv::value& map, const std::string& key, glm::mat& mat ) { if (!map.has(key)) { return; } auto& list = map[key]; for (size_t y = 0; y < n; y++) { for (size_t x = 0; x < m; x++) { mat[y][x] = list[y * m + x].asNumber(); } } } }