Utility Functions

Discover some useful functions

Utility Functions

The Engines has a set of Constants and Utility functions you can access by including the Utility header (see below).

#include <Nero/utility/Utility.h>

Among those functions you have :

  • Some functions to check if a modifier key (Ctrl, Alt, Shift) is pressed
  • Some functions to get the current date and time
  • Some functions to convert between SFML and Box2D items like colors, vectors etc.
  • Some math and geometry functions (compute a distance, check if a polygon is convex or not etc.)
  • Some string functions (split a string, convert to string etc.)
  • Some  functions to convert a coordinate from Game Screen to Game World.

List of Functions

Here is a list of the constants and functions inside the Utility header.

//Some useful constants
const sf::Time  TIME_PER_FRAME              = sf::seconds(1.f/60.f);
const sf::Time  AUTO_SAVE_TIME              = sf::seconds(30.f);
const float SCALE                           = 50.f;
const float GRAVITY                         = 9.8f;
const int RAND_LIMIT	                    = 32767;
const int SPRITE_LAYER_MAX                  = 1000;
const float PI                              = 3.141592653589793238462643383f;
const int MAX_VALUE                         = 2147483647;
const sf::Color STATIC_MESH_COLOR           = b2_to_sf(b2Color(0.5f, 0.9f, 0.5f)); // sf::Color(0, 255, 0);
const sf::Color DYNAMIC_MESH_COLOR          = b2_to_sf(b2Color(0.9f, 0.7f, 0.7f)); //sf::Color(219, 112, 147);
const sf::Color KINEMATIC_MESH_COLOR        = b2_to_sf(b2Color(0.5f, 0.5f, 0.9f)); //sf::Color(0, 0, 255);
const sf::Color SELECTED_MESH_COLOR         = sf::Color(255, 140, 0);
const sf::Color INVALIDE_MESH_COLOR         = sf::Color(255, 0, 0);
const sf::String NERO_FOLDER                = "NERO";

//Check if a Modifier key is pressed, You have all combinations
bool                CTRL();
bool                SHIFT();
bool                ALT();
bool                CTRL_SHIFT();
bool                CTRL_ALT();
bool                SHIFT_ALT();
bool                CTRL_SHIFT_ALT();

std::string         getdate(std::string delim = "/");
std::string         getTime(std::string delim = ":");

sf::Vector2f        b2_to_sf(b2Vec2 vect, float scale = 1.f);
sf::Vector2f        b2_to_sf(float x, float y, float scale = 1.f);
b2Color             sf_to_b2(const sf::Color& color);
b2Vec2              sf_to_b2(const sf::Vector2f& vect, float scale = 1.f);
b2Vec2              sf_to_b2(float x, float y, float scale = 1.f);

sf::Color           transparent_color(sf::Color color, int transparency = 255);

template 
std::string         toString(T const& value);
std::string         toString(sf::Keyboard::Key key);    //enumerator to string

std::vector &splitString(const std::string &s, char delim, std::vector &elems);
std::vector splitString(const std::string &s, char delim);

std::string         removeFileExtension(const std::string& filename);
std::string         replaceFileExtension(const std::string& filename, const std::string& extension);

float               toDegree(float radian);
float               toRadian(float degree);

int                 randomInt(int exclusiveMax);
float               randomFloat();                        // Random number in range [-1,1]
float               randomFloat(float lo, float hi);      // Random floating point number in range [lo, hi]

float               vectLength(sf::Vector2f vect);
float               vectLength(b2Vec2 vect);
sf::Vector2f        unitVector(sf::Vector2f vect);
float               distance(sf::Vector2f vect1, sf::Vector2f vect2);
float               distance(b2Vec2 vect1, b2Vec2 vect2);
float               distance(sf::Vector2f line_vect1, sf::Vector2f line_vect2, sf::Vector2f vect3);
float               dot_product(const sf::Vector2f& vect1, const sf::Vector2f& vect2);

std::string         loadText(std::string filename);

void                centerOrigin(sf::Sprite& sprite);
void                centerOrigin(sf::Text& text);

bool                isConvexPolygon(std::vector polygon);
bool                isConvex(std::vector polygon);

std::vector   concave_to_convex(PointTab vectorTab);
float                   det(float x1, float y1, float x2, float y2, float x3, float y3);
sf::Vector2f*           hitRay(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);
bool                    isOnSegment(float px, float py, float x1, float y1, float x2, float y2);
bool                    isOnLine(float px, float py, float x1, float y1, float x2, float y2);
void                    err();
bool                    pointsMatch(float x1, float y1, float x2, float y2);
int                     validate_polygon(const PointTab &verticesVec);
sf::Vector2f*           hitSegment(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);

sf::Vector2f        getPolygonCenter(PointTab vertices);
sf::Vector2f        getLineCenter(const sf::Vector2f& a, const sf::Vector2f& b);
sf::Vector2f        rotateVertex(sf::Vector2f c, float angle, sf::Vector2f p);

sf::IntRect         getViewport(const sfg::Canvas::Ptr& renderWindow);
sf::Vector2f        canvas_to_world(const sf::Vector2f& point, const sfg::Canvas::Ptr& renderWindow);
sf::Vector2f        world_to_canvas(const sf::Vector2f& point, const sfg::Canvas::Ptr& renderWindow);

struct Point
{
    float x;
    float y;
};

You have successfully subscribed to the newsletter

There was an error while trying to send your request. Please try again.

Nero Games will use the information you provide on this form to be in touch with you and to provide updates and marketing.