KlassischeKeplerKriege/game/util.hpp

54 lines
1.3 KiB
C++

#pragma once
#include <string>
#include <glm/vec2.hpp>
#include <glm/vec3.hpp>
namespace util {
float randf_0_1();
float randf_m1_1();
glm::vec2 randv2_m1_1();
glm::vec2 randv2_0_1();
float deg2rad(float deg);
float rad2deg(float rad);
// split on whitespace into first token and the rest.
// return true if whitespace was found or just the token.
bool splitIntoTokenAndRest(const std::string &str, std::string &token, std::string &rest);
/**
* Test for intersection in positive direction of a ray.
* TODO: support inside?
*/
class IntersectionTest {
public:
IntersectionTest();
// creates a valid intersection point at distance d
IntersectionTest(float d);
// intersection distance
float distance() const;
glm::vec3 pointAtDistance(float d);
// returns true if there's an interseciton.
bool valid() const;
// return true if there's an intersection. then intersectionPoint is filled
// with details.
bool raySphere(
const glm::vec3 &rayPos, const glm::vec3 &rayDir,
const glm::vec3 &spherePos, float sphereRadius);
private:
bool m_valid;
float m_distance;
glm::vec3 m_rayPos;
glm::vec3 m_rayDir;
};
}