#include #include #include "systems.hpp" #include #include /* face_x := rand.Float64() * 100 face_y := rand.Float64() * 100 target_x := rand.Float64() * 100 target_y := rand.Float64() * 100 rad_angle1 := atan2(target_y, target_x) rad_angle2 := atan2(face_y, face_x) diff := rad_angle1 - rad_angle2 if diff < 0 { fmt.Printf("\nTurn Right") } else { fmt.Printf("\nTurn Left") } */ TEST_CASE("figure out best rotation direction", "[systems-rotate]") { Matrix map = matrix::make(3, 3); Point player_at{1, 1}; map[player_at.y][player_at.x] = 2; for(matrix::box target{map, player_at.x, player_at.y, 1}; target.next();) { for(matrix::box aiming_at{map, player_at.x, player_at.y, 1}; aiming_at.next();) { map[aiming_at.y][aiming_at.x] = 10; float target_dx = float(player_at.x) - float(target.x); float target_dy = float(player_at.y) - float(target.y); float aiming_dx = float(player_at.x) - float(aiming_at.x); float aiming_dy = float(player_at.y) - float(aiming_at.y); fmt::println("target_d={},{}; aiming_d={},{}", target_dx, target_dy, aiming_dx, aiming_dy); float target_angle = atan2(-target_dy, target_dx) * (180.0 / std::numbers::pi); float aiming_angle = atan2(-aiming_dy, aiming_dx) * (180.0 / std::numbers::pi); float diff = target_angle - aiming_angle; double normalized = fmod(diff + 360.0, 360.0); fmt::println("\n\n>>>>>>>>> BEGIN"); if(normalized != diff) fmt::println("YOU NEED NORMALIZED"); fmt::println("aming_angle={}, target_angle={}, delta={}, norm={}", aiming_angle, target_angle, diff, normalized); fmt::println("TURN {}", normalized < 180.0 ? "LEFT" : "RIGHT"); matrix::dump("< is target, a is aim", map, target.x, target.y); fmt::println("-----------------END"); map[aiming_at.y][aiming_at.x] = 0; } } }