#ifndef _BASE_SPHERE_HPP_ #define _BASE_SPHERE_HPP_ // ------------------------------------------------------------------------------------------------ #include "Config.hpp" #include "Base/Vector3.hpp" // ------------------------------------------------------------------------------------------------ namespace SqMod { /* ------------------------------------------------------------------------------------------------ * ... */ struct Sphere { // -------------------------------------------------------------------------------------------- typedef SQFloat Value; // -------------------------------------------------------------------------------------------- static const Sphere NIL; static const Sphere MIN; static const Sphere MAX; // -------------------------------------------------------------------------------------------- static SQChar Delim; // -------------------------------------------------------------------------------------------- Vector3 pos; Value rad; // -------------------------------------------------------------------------------------------- Sphere(); Sphere(Value r); Sphere(const Vector3 & p); Sphere(const Vector3 & p, Value r); Sphere(Value x, Value y, Value z, Value r); // -------------------------------------------------------------------------------------------- Sphere(const Sphere & s); Sphere(Sphere && s); // -------------------------------------------------------------------------------------------- ~Sphere(); // -------------------------------------------------------------------------------------------- Sphere & operator = (const Sphere & s); Sphere & operator = (Sphere && s); // -------------------------------------------------------------------------------------------- Sphere & operator = (Value r); Sphere & operator = (const Vector3 & p); // -------------------------------------------------------------------------------------------- Sphere & operator += (const Sphere & s); Sphere & operator -= (const Sphere & s); Sphere & operator *= (const Sphere & s); Sphere & operator /= (const Sphere & s); Sphere & operator %= (const Sphere & s); // -------------------------------------------------------------------------------------------- Sphere & operator += (Value r); Sphere & operator -= (Value r); Sphere & operator *= (Value r); Sphere & operator /= (Value r); Sphere & operator %= (Value r); // -------------------------------------------------------------------------------------------- Sphere & operator += (const Vector3 & p); Sphere & operator -= (const Vector3 & p); Sphere & operator *= (const Vector3 & p); Sphere & operator /= (const Vector3 & p); Sphere & operator %= (const Vector3 & p); // -------------------------------------------------------------------------------------------- Sphere & operator ++ (); Sphere & operator -- (); // -------------------------------------------------------------------------------------------- Sphere operator ++ (int); Sphere operator -- (int); // -------------------------------------------------------------------------------------------- Sphere operator + (const Sphere & s) const; Sphere operator - (const Sphere & s) const; Sphere operator * (const Sphere & s) const; Sphere operator / (const Sphere & s) const; Sphere operator % (const Sphere & s) const; // -------------------------------------------------------------------------------------------- Sphere operator + (Value r) const; Sphere operator - (Value r) const; Sphere operator * (Value r) const; Sphere operator / (Value r) const; Sphere operator % (Value r) const; // -------------------------------------------------------------------------------------------- Sphere operator + (const Vector3 & p) const; Sphere operator - (const Vector3 & p) const; Sphere operator * (const Vector3 & p) const; Sphere operator / (const Vector3 & p) const; Sphere operator % (const Vector3 & p) const; // -------------------------------------------------------------------------------------------- Sphere operator + () const; Sphere operator - () const; // -------------------------------------------------------------------------------------------- bool operator == (const Sphere & s) const; bool operator != (const Sphere & s) const; bool operator < (const Sphere & s) const; bool operator > (const Sphere & s) const; bool operator <= (const Sphere & s) const; bool operator >= (const Sphere & s) const; // -------------------------------------------------------------------------------------------- SQInteger Cmp(const Sphere & s) const; // -------------------------------------------------------------------------------------------- const SQChar * ToString() const; // -------------------------------------------------------------------------------------------- void Set(Value nr); void Set(const Sphere & ns); void Set(const Vector3 & np); void Set(const Vector3 & np, Value nr); // -------------------------------------------------------------------------------------------- void Set(Value nx, Value ny, Value nz); void Set(Value nx, Value ny, Value nz, Value nr); // -------------------------------------------------------------------------------------------- void Set(const SQChar * values, SQChar delim); // -------------------------------------------------------------------------------------------- void Generate(); void Generate(Value min, Value max, bool r); void Generate(Value xmin, Value xmax, Value ymin, Value ymax, Value zmin, Value zmax); void Generate(Value xmin, Value xmax, Value ymin, Value ymax, Value zmin, Value zmax, Value rmin, Value rmax); // -------------------------------------------------------------------------------------------- void Clear() { pos.Clear(); rad = 0.0; } // -------------------------------------------------------------------------------------------- Sphere Abs() const; }; } // Namespace:: SqMod #endif // _BASE_SPHERE_HPP_