Imports the current Win32 source for the pod-racing game 'Red Planet', built on the MUNGA engine and its L4 (Win32/DirectX) platform layer: - MUNGA / MUNGA_L4: cross-platform engine core and Win32 backend - RP / RP_L4: Red Planet game logic and Win32 application - DivLoader, Setup1: asset loader and installer project - lib, MUNGA_L4/openal, MUNGA_L4/sos: third-party audio dependencies Removed stale Subversion metadata and added .gitignore/.gitattributes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
92 lines
2.8 KiB
C++
92 lines
2.8 KiB
C++
#pragma once
|
|
|
|
#include "memstrm.h"
|
|
#include "scalar.h"
|
|
|
|
//##########################################################################
|
|
//############## RGBColor ############################################
|
|
//##########################################################################
|
|
|
|
class RGBColor
|
|
{
|
|
friend class RGBAColor;
|
|
|
|
public:
|
|
Scalar Red, Green, Blue;
|
|
|
|
#if defined(USE_SIGNATURE)
|
|
friend int Is_Signature_Bad(const volatile RGBColor *p)
|
|
{
|
|
return False;
|
|
}
|
|
#endif
|
|
|
|
|
|
RGBColor()
|
|
{
|
|
Red = Green = Blue = -1.0f;
|
|
}
|
|
|
|
RGBColor(Scalar r, Scalar g, Scalar b)
|
|
{
|
|
Red = r;
|
|
Green = g;
|
|
Blue = b;
|
|
}
|
|
|
|
Logical operator==(const RGBColor &a_RGBColor) const
|
|
{
|
|
return !memcmp(this, &a_RGBColor, sizeof(RGBColor));
|
|
}
|
|
Logical operator!=(const RGBColor &a_RGBColor) const
|
|
{
|
|
return memcmp(this, &a_RGBColor, sizeof(RGBColor));
|
|
}
|
|
|
|
Logical TestInstance() const;
|
|
|
|
RGBColor operator+(const RGBColor &a_RGBColor) const { return RGBColor(Min(this->Red + a_RGBColor.Red, 1.0), Min(this->Green + a_RGBColor.Green, 1.0), Min(this->Blue + a_RGBColor.Blue, 1.0)); }
|
|
Scalar Infrared() const { return 0.3 * this->Red + 0.5 * this->Green + 0.2 * this->Blue; }
|
|
|
|
//
|
|
// Support functions
|
|
//
|
|
friend std::ostream& operator<<(std::ostream& stream, const RGBColor& C);
|
|
};
|
|
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~ RGBColor functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
void Convert_From_Ascii(const char *str, RGBColor *color);
|
|
|
|
inline MemoryStream& MemoryStream_Read(MemoryStream* stream, RGBColor *output) { return stream->ReadBytes(output, sizeof(*output)); }
|
|
inline MemoryStream& MemoryStream_Write(MemoryStream* stream, const RGBColor *input) { return stream->WriteBytes(input, sizeof(*input)); }
|
|
|
|
//##########################################################################
|
|
//############## RGBAColor ###########################################
|
|
//##########################################################################
|
|
|
|
class RGBAColor : public RGBColor
|
|
{
|
|
public:
|
|
Scalar Alpha;
|
|
|
|
RGBAColor() : RGBColor() { Alpha = -1.0f; }
|
|
|
|
RGBAColor(Scalar r, Scalar g, Scalar b, Scalar a) : RGBColor(r, g, b) { Alpha = a; }
|
|
|
|
Logical operator==(const RGBAColor &a_RGBAColor) const { return !memcmp(this, &a_RGBAColor, sizeof(RGBAColor)); }
|
|
Logical operator!=(const RGBAColor &a_RGBAColor) const { return memcmp(this, &a_RGBAColor, sizeof(RGBAColor)); }
|
|
|
|
//
|
|
// Support functions
|
|
//
|
|
friend std::ostream& operator<<(std::ostream& stream, const RGBAColor& c);
|
|
};
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~ RGBAColor functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
void Convert_From_Ascii(const char *str, RGBAColor *color);
|
|
|
|
inline MemoryStream& MemoryStream_Read(MemoryStream* stream, RGBAColor *output) { return stream->ReadBytes(output, sizeof(*output)); }
|
|
inline MemoryStream& MemoryStream_Write(MemoryStream* stream, const RGBAColor *input) { return stream->WriteBytes(input, sizeof(*input)); } |