--- /dev/null
+#ifndef BMP_IMAGE_HPP
+#define BMP_IMAGE_HPP
+
+#include <cstdint>
+
+/**
+ * Defines the layout of a bitmap (.bmp) file's header.
+ */
+typedef struct {
+ uint16_t bfType;
+ uint32_t bfSize;
+ uint16_t bfReserved1;
+ uint16_t bfReserved2;
+ uint32_t bfOffBits;
+} __attribute__((packed)) BITMAPFILEHEADER;
+
+/**
+ * Defines the layout of a bitmap's info header.
+ */
+typedef struct {
+ uint32_t biSize;
+ int32_t biWidth;
+ int32_t biHeight;
+ uint16_t biPlanes;
+ uint16_t biBitCount;
+ uint32_t biCompression;
+ uint32_t biSizeImage;
+ int32_t biXPelsPerMeter;
+ int32_t biYPelsPerMeter;
+ uint32_t biClrUsed;
+ uint32_t biClrImportant;
+} __attribute__((packed)) BITMAPINFOHEADER;
+
+#endif // BMP_IMAGE_HPP
namespace std {
template<class T>
constexpr const T& clamp(const T& v, const T& lo, const T& hi) {
- return (v > hi) ? ((v > lo) ? v : lo) : hi;
+ return (v > hi) ? hi : ((v > lo) ? v : lo);
}
}
#include <ft2build.h>
#include FT_FREETYPE_H
-/* ----------------------------------------------------------------------------
-** Structures section
-** --------------------------------------------------------------------------*/
-
#ifndef __WIN32__
-
-/**
- * Defines the layout of a bitmap (.bmp) file's header.
- */
-typedef struct {
- uint16_t bfType;
- uint32_t bfSize;
- uint16_t bfReserved1;
- uint16_t bfReserved2;
- uint32_t bfOffBits;
-} __attribute__((packed)) BITMAPFILEHEADER;
-
-/**
- * Defines the layout of a bitmap's info header.
- */
-typedef struct {
- uint32_t biSize;
- int32_t biWidth;
- int32_t biHeight;
- uint16_t biPlanes;
- uint16_t biBitCount;
- uint32_t biCompression;
- uint32_t biSizeImage;
- int32_t biXPelsPerMeter;
- int32_t biYPelsPerMeter;
- uint32_t biClrUsed;
- uint32_t biClrImportant;
-} __attribute__((packed)) BITMAPINFOHEADER;
-
+# include <bmpimage.hpp>
#endif // __WIN32__
/* ----------------------------------------------------------------------------
e->handleHits();
// calculate the line that this entity is currently standing on
- l = std::clamp(static_cast<int>((e->loc.x + e->width / 2 - worldStart) / game::HLINE), 0, static_cast<int>(lineCount - 1));
+ l = (e->loc.x + e->width / 2 - worldStart) / game::HLINE;
// if the entity is under the world/line, pop it back to the surface
if (e->loc.y < worldData[l].groundHeight) {