Compare commits
3 Commits
Author | SHA1 | Date |
---|---|---|
|
1de7d840aa | 2 months ago |
|
ba3cbd401d | 2 months ago |
|
f4ac610bdd | 2 months ago |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,152 @@ |
||||
#pragma region License |
||||
/*
|
||||
License (OLC-3) |
||||
~~~~~~~~~~~~~~~ |
||||
|
||||
Copyright 2024 Joshua Sigona <sigonasr2@gmail.com> |
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, |
||||
are permitted provided that the following conditions are met: |
||||
|
||||
1. Redistributions or derivations of source code must retain the above copyright |
||||
notice, this list of conditions and the following disclaimer. |
||||
|
||||
2. Redistributions or derivative works in binary form must reproduce the above |
||||
copyright notice. This list of conditions and the following disclaimer must be |
||||
reproduced in the documentation and/or other materials provided with the distribution. |
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors may |
||||
be used to endorse or promote products derived from this software without specific |
||||
prior written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY |
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT |
||||
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED |
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
||||
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
||||
SUCH DAMAGE. |
||||
|
||||
Portions of this software are copyright © 2024 The FreeType |
||||
Project (www.freetype.org). Please see LICENSE_FT.txt for more information. |
||||
All rights reserved. |
||||
*/ |
||||
#pragma endregion |
||||
#include "util.h" |
||||
#include "olcPixelGameEngine.h" |
||||
|
||||
using namespace olc; |
||||
|
||||
std::random_device rd; |
||||
std::mt19937 rng(rd()); |
||||
|
||||
float util::random(float range){ |
||||
static std::uniform_real_distribution<float>distrib(0,1); |
||||
return distrib(rng)*range; |
||||
} |
||||
|
||||
int util::random(){ |
||||
static std::uniform_int_distribution<int>distrib(0,32767); |
||||
return distrib(rng); |
||||
} |
||||
|
||||
const float util::random_range(const float min,const float max){ |
||||
return random(max-min)+min; |
||||
} |
||||
|
||||
float util::radToDeg(float rad){ |
||||
return rad*57.2957795130823208767f; |
||||
} |
||||
|
||||
std::string util::timerStr(float time){ |
||||
int seconds=int(time); |
||||
int hours=seconds/3600; |
||||
int minutes=seconds/60; |
||||
|
||||
std::string timeStr=""; |
||||
if(hours>0){ |
||||
if(hours<10)timeStr+="0"; |
||||
timeStr+=std::to_string(hours)+":"; |
||||
} |
||||
|
||||
if(minutes%60<10)timeStr+="0"; |
||||
timeStr+=std::to_string(minutes%60)+":"; |
||||
|
||||
if(seconds%60<10)timeStr+="0"; |
||||
timeStr+=std::to_string(seconds%60); |
||||
|
||||
return timeStr; |
||||
} |
||||
|
||||
std::string util::WrapText(PixelGameEngine*pge,std::string str,int width,bool proportional,vd2d scale){ |
||||
std::string newStr=""; |
||||
while(true){ |
||||
std::string word=""; |
||||
if(str.find(" ")==std::string::npos){ |
||||
word=str; |
||||
}else{ |
||||
word=str.substr(0,str.find(" ")); |
||||
} |
||||
vi2d newSize = vd2d(proportional?pge->GetTextSizeProp(newStr+(newStr.size()>0?" ":"")+word):pge->GetTextSize(newStr+(newStr.size()>0?" ":"")+word))*scale; |
||||
if(newSize.x>width){ |
||||
newStr+="\n"+word; |
||||
}else{ |
||||
newStr+=(newStr.size()>0?" ":"")+word; |
||||
} |
||||
if(str.find(" ")==std::string::npos){ |
||||
break; |
||||
}else{ |
||||
str.erase(0,str.find(" ")+1); |
||||
} |
||||
} |
||||
return newStr; |
||||
} |
||||
|
||||
|
||||
#pragma region std::string util::GetHash(std::string fileName) //DO NOT MODIFY!
|
||||
std::string util::GetHash(std::string fileName){ |
||||
//WARNING! This function is used to save/load files! This means if we ever modify this function all previous save files
|
||||
//will no longer work! IN OTHER WORDS: DO NOT MODIFY THIS FUNCTION!
|
||||
std::ifstream file(fileName); |
||||
std::string hash=""; |
||||
uint8_t hashIndex=0; |
||||
while(file.good()){ |
||||
uint8_t hashChar=0; |
||||
if(hash.size()==std::numeric_limits<uint8_t>::max()){ |
||||
hashChar=hash[hashIndex]; |
||||
} |
||||
char newChar=file.get(); |
||||
if(newChar=='\r'||newChar=='\f'||newChar=='\n')continue; |
||||
hashChar+=newChar*21-7; |
||||
hashChar^=hashIndex; |
||||
if(hashIndex>0)hashChar+=hash[hashIndex-1]; |
||||
hashChar%=94; |
||||
hashChar+=32; |
||||
if(hashChar=='"'||hashChar==',')hashChar+=60; |
||||
if(hashChar=='|')hashChar++; //FORBIDDEN CHARACTER IN EMSCRIPTEN BUILD!
|
||||
if(hash.size()<std::numeric_limits<uint8_t>::max()){ |
||||
hash+=hashChar; |
||||
}else{ |
||||
hash[hashIndex]=hashChar; |
||||
} |
||||
hashIndex++; |
||||
} |
||||
file.close(); |
||||
return hash; |
||||
} |
||||
#pragma endregion |
||||
|
||||
long double operator""_Pixels(long double unitDist){ |
||||
return unitDist/100*24.; |
||||
} |
||||
|
||||
const float util::distance(const vf2d&point1,const vf2d&point2){ |
||||
return vf2d{point1-point2}.mag(); |
||||
} |
||||
|
||||
std::wstring util::to_wstring(const std::string&str){ |
||||
return {str.begin(),str.end()}; |
||||
} |
@ -0,0 +1,114 @@ |
||||
#pragma region License |
||||
/*
|
||||
License (OLC-3) |
||||
~~~~~~~~~~~~~~~ |
||||
|
||||
Copyright 2024 Joshua Sigona <sigonasr2@gmail.com> |
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, |
||||
are permitted provided that the following conditions are met: |
||||
|
||||
1. Redistributions or derivations of source code must retain the above copyright |
||||
notice, this list of conditions and the following disclaimer. |
||||
|
||||
2. Redistributions or derivative works in binary form must reproduce the above |
||||
copyright notice. This list of conditions and the following disclaimer must be |
||||
reproduced in the documentation and/or other materials provided with the distribution. |
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors may |
||||
be used to endorse or promote products derived from this software without specific |
||||
prior written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY |
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT |
||||
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED |
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
||||
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
||||
SUCH DAMAGE. |
||||
|
||||
Portions of this software are copyright © 2024 The FreeType |
||||
Project (www.freetype.org). Please see LICENSE_FT.txt for more information. |
||||
All rights reserved. |
||||
*/ |
||||
#pragma endregion |
||||
#pragma once |
||||
#include <stdlib.h> |
||||
#include "olcPixelGameEngine.h" |
||||
#include <random> |
||||
|
||||
namespace olc::util{ |
||||
//Returns 0-range (as a float).
|
||||
float random(float range); |
||||
//Returns a random float value min(inclusive) to max(exclusive).
|
||||
const float random_range(const float min,const float max); |
||||
//Returns 0-32767 (as an int).
|
||||
int random(); |
||||
float radToDeg(float rad); |
||||
|
||||
#pragma region Lerp templates + specializations |
||||
template<class T> |
||||
inline auto lerp(const T val1,const T val2,const float t){ |
||||
return T(val1*(1-t)+val2*t); |
||||
} |
||||
|
||||
template<> |
||||
inline auto lerp<vf2d>(const vf2d val1,const vf2d val2,const float t){ |
||||
return val1.lerp(val2,t); |
||||
} |
||||
|
||||
template<> |
||||
//NOTE: Also interpolates the alpha!!!
|
||||
inline auto lerp<Pixel>(const Pixel val1,const Pixel val2,const float t){ |
||||
Pixel col{PixelLerp(val1,val2,t)}; |
||||
col.a=lerp(val1.a,val2.a,t); |
||||
return col; |
||||
} |
||||
#pragma endregion |
||||
|
||||
template<class T,class U> |
||||
inline auto smoothstep(const T val1,const U val2,const float t){ |
||||
auto x{decltype(val1+val2)(1-pow(1-t,3))}; |
||||
return val1*(1-x)+val2*x; |
||||
} |
||||
|
||||
std::string timerStr(float time); |
||||
std::string WrapText(PixelGameEngine*pge,std::string str,int width,bool proportional,vd2d scale); |
||||
std::string GetHash(std::string file); |
||||
const float distance(const vf2d&point1,const vf2d&point2); |
||||
std::wstring to_wstring(const std::string&str); |
||||
|
||||
template<class..._Args> |
||||
const std::string vformat(const std::string_view str,_Args..._Vals){ |
||||
return std::vformat(str,std::make_format_args(_Vals...)); |
||||
} |
||||
template<class..._Args> |
||||
const std::wstring wformat(const std::string_view str,_Args..._Vals){ |
||||
return util::to_wstring(std::vformat(str,std::make_format_args(_Vals...))); |
||||
} |
||||
|
||||
template<class T> |
||||
T map_range(T x, T in_min, T in_max, T out_min, T out_max) { |
||||
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; |
||||
} |
||||
} |
||||
|
||||
template<class TL, class TR> |
||||
constexpr auto circ_add( |
||||
const TL& lhs,
|
||||
const TR& rhs,
|
||||
const decltype(lhs + rhs) rmin = 0,
|
||||
const decltype(lhs + rhs) rmax = 360) |
||||
{ |
||||
auto c = lhs + rhs; |
||||
auto range = rmax - rmin; |
||||
while (c >= rmax) c -= range; |
||||
while (c < rmin) c += range; |
||||
return c; |
||||
} |
||||
|
||||
//Converts unit distances to pixels. (Every 100 units = 24 pixels)
|
||||
long double operator""_Pixels(long double unitDist); |
Loading…
Reference in new issue