#include "fiko/cekirdek/fiko_etkilesim.hpp" #include "fiko/cekirdek/fiko_datum.hpp" #include "fiko/cekirdek/fiko_nesne.hpp" #include "fiko/cekirdek/yetenek.hpp" #include "fiko_test.hpp" #include using namespace fiko; namespace { // Yeteneksiz nesne (etiket) — hiçbir etkileşime tepki vermez. struct Etiket : FikoNesne { explicit Etiket(Varlik v) : FikoNesne(v) {} const char* turAdi() const override { return "Etiket"; } }; // Yalnız hover edilebilir nesne (tıklanamaz/seçilemez). struct HoverKutu : FikoNesne, FikoHoverEdilebilir { bool hoverli_ = false; explicit HoverKutu(Varlik v) : FikoNesne(v) {} const char* turAdi() const override { return "HoverKutu"; } void hover(bool u) override { hoverli_ = u; } }; } // namespace FIKO_TEST(etkilesim_hepsini_sec) { FikoDatumNokta a(1, Vec3d{}), b(2, Vec3d{}); Etiket e(3); // seçilemez std::vector sahne = {&a, &b, &e}; const int n = fiko_etkilesim::hepsiniSec(sahne, true); FIKO_KONTROL(n == 2); // yalnız 2 nokta FIKO_KONTROL(a.seciliMi() && b.seciliMi()); FIKO_KONTROL(fiko_etkilesim::secilenler(sahne).size() == 2); // Bırak fiko_etkilesim::hepsiniSec(sahne, false); FIKO_KONTROL(fiko_etkilesim::secilenler(sahne).empty()); } FIKO_TEST(etkilesim_surukle) { FikoDatumNokta a(1, Vec3d{0, 0, 0}); Etiket e(2); std::vector sahne = {&a, &e}; const int n = fiko_etkilesim::surukle(sahne, Vec3d{2, 0, 0}); FIKO_KONTROL(n == 1); // yalnız nokta sürüklenebilir FIKO_YAKIN(a.konum().x, 2.0, 1e-12); } FIKO_TEST(etkilesim_tikla_hover) { FikoDatumNokta nokta(1, Vec3d{}); HoverKutu kutu(2); Etiket e(3); // Tıkla: nokta tıklanabilir, kutu/etiket değil FIKO_KONTROL(fiko_etkilesim::tikla(&nokta)); FIKO_KONTROL(!fiko_etkilesim::tikla(&kutu)); FIKO_KONTROL(!fiko_etkilesim::tikla(&e)); FIKO_KONTROL(nokta.tikSayisi() == 1); // Hover: kutu hover edilebilir, nokta/etiket değil FIKO_KONTROL(fiko_etkilesim::hover(&kutu, true)); FIKO_KONTROL(!fiko_etkilesim::hover(&nokta, true)); FIKO_KONTROL(kutu.hoverli_); }