parent
ecba99cd7e
commit
f4ac610bdd
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