Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
|
04636be072 | 2 months ago |
File diff suppressed because it is too large
Load Diff
@ -1,152 +0,0 @@ |
|||||||
#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()}; |
|
||||||
} |
|
@ -1,114 +0,0 @@ |
|||||||
#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