mirror of
https://github.com/electronicarts/CNC_TS_and_RA2_Mission_Editor.git
synced 2025-07-21 06:34:48 -04:00
split out some basic helper functions into Helpers.h .
This commit is contained in:
parent
c0e0f32c4a
commit
c890d9a480
5 changed files with 110 additions and 109 deletions
88
MissionEditor/Helpers.h
Normal file
88
MissionEditor/Helpers.h
Normal file
|
@ -0,0 +1,88 @@
|
|||
#pragma once
|
||||
#include <afx.h>
|
||||
#include <algorithm>
|
||||
|
||||
// coordinate functions
|
||||
inline void PosToXY(const char* pos, int* X, int* Y)
|
||||
{
|
||||
size_t Posleng;
|
||||
//int XX, YY;
|
||||
char Pos[100];
|
||||
strcpy_s(Pos, pos);
|
||||
char XS[10], YS[10];
|
||||
Posleng = strlen(Pos);
|
||||
strcpy_s(YS, Pos + Posleng - 3);
|
||||
Pos[Posleng - 3] = 0;
|
||||
strcpy_s(XS, Pos);
|
||||
|
||||
*X = atoi(XS);
|
||||
*Y = atoi(YS);
|
||||
|
||||
}
|
||||
|
||||
// check whether is string is all made of digit numbers
|
||||
inline bool IsNumeric(const CString& str) {
|
||||
return std::all_of(str.operator LPCSTR(), str.operator LPCSTR() + str.GetLength(), [](char c) {
|
||||
return std::isdigit(c);
|
||||
});
|
||||
}
|
||||
|
||||
// HSV -> RGB
|
||||
inline bool HSVToRGB(const float h, const float s, const float v, float& r, float& g, float& b)
|
||||
{
|
||||
if (h < 0.0 || h >= 360.0 || s < 0.0 || s > 1.0 || v < 0.0 || v > 1.0)
|
||||
return false;
|
||||
auto const const h_ = static_cast<int>(floor(h / 60.0));
|
||||
const float c = s * v;
|
||||
const float x = c * (1 - fabs(fmod(h / 60.0, 2.0) - 1));
|
||||
const float m = v - c;
|
||||
switch (h_) {
|
||||
case 0:
|
||||
r = c, g = x, b = 0.0;
|
||||
break;
|
||||
case 1:
|
||||
r = x, g = c, b = 0.0;
|
||||
break;
|
||||
case 2:
|
||||
r = 0.0, g = c, b = x;
|
||||
break;
|
||||
case 3:
|
||||
r = 0.0, g = x, b = c;
|
||||
break;
|
||||
case 4:
|
||||
r = x, g = 0.0, b = c;
|
||||
break;
|
||||
case 5:
|
||||
r = c, g = 0.0, b = x;
|
||||
break;
|
||||
}
|
||||
r += m;
|
||||
g += m;
|
||||
b += m;
|
||||
return true;
|
||||
}
|
||||
|
||||
inline void HSVToRGB(const unsigned char hsv[3], unsigned char rgb[3])
|
||||
{
|
||||
float frgb[3];
|
||||
HSVToRGB(hsv[0] * 360.0 / 255.0, hsv[1] / 255.0, hsv[2] / 255.0, frgb[0], frgb[1], frgb[2]);
|
||||
for (int i = 0; i < 3; ++i)
|
||||
rgb[i] = (frgb[i] < 0.0 ? 0.0 : (frgb[i] > 1.0 ? 1.0 : frgb[i])) * 255.0;
|
||||
}
|
||||
|
||||
inline std::array<unsigned char, 3> HSVToRGB(const float h, const float s, const float v)
|
||||
{
|
||||
std::array<float, 3> frgb;
|
||||
HSVToRGB(h, s, v, frgb[0], frgb[1], frgb[2]);
|
||||
std::array<unsigned char, 3> ret;
|
||||
for (int i = 0; i < 3; ++i)
|
||||
ret[i] = (frgb[i] < 0.0 ? 0.0 : (frgb[i] > 1.0 ? 1.0 : frgb[i])) * 255.0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline std::array<unsigned char, 3> HSVToRGB(const unsigned char hsv[3])
|
||||
{
|
||||
std::array<unsigned char, 3> ret;
|
||||
HSVToRGB(hsv, ret.data());
|
||||
return ret;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue