From a89ef52247dbf411dea48a6a3a34a05bafbcbe2d Mon Sep 17 00:00:00 2001 From: Annika Date: Fri, 24 Jul 2026 18:01:59 -0700 Subject: [PATCH] added basic mappers --- FEATURES.md | 19 +++++++++++++++++++ datatypes.cpp | 18 +++++++++--------- example | Bin 0 -> 37000 bytes example.cpp | 15 ++++++++------- mappers/mapperbase.cpp | 16 ++++++++++++++++ mappers/mappers.h | 4 ++++ mappers/nullmapper.cpp | 18 ++++++++++++++++++ mappers/offsetmapper.cpp | 24 ++++++++++++++++++++++++ mappers/tilemapper.cpp | 24 ++++++++++++++++++++++++ primatives/rectangle.cpp | 9 +++++---- 10 files changed, 127 insertions(+), 20 deletions(-) create mode 100644 FEATURES.md create mode 100755 example create mode 100644 mappers/mapperbase.cpp create mode 100644 mappers/mappers.h create mode 100644 mappers/nullmapper.cpp create mode 100644 mappers/offsetmapper.cpp create mode 100644 mappers/tilemapper.cpp diff --git a/FEATURES.md b/FEATURES.md new file mode 100644 index 0000000..929e95a --- /dev/null +++ b/FEATURES.md @@ -0,0 +1,19 @@ +shapes: + triangles: + point + line + solid + gradient + rectangle + solid + gradient + blitter (tilemaps) + triangle + solid + gradient + perspective mapping (3D!!!) + quad + solid + gradient (charts) + blitter (isometric) + affine mapping (sprite rotation and scaling) diff --git a/datatypes.cpp b/datatypes.cpp index a27de46..22a7e69 100644 --- a/datatypes.cpp +++ b/datatypes.cpp @@ -26,15 +26,15 @@ namespace UwU { }; // Coord2 datatype for xy coordinates, from top-left of surface - // struct Coord2 { - // Coord2(uint16_t x, uint16_t y) { - // this->x = x; - // this->y = y; - // } - // Coord2() {} - // uint16_t x; - // uint16_t y; - // }; + struct Coord2 { + Coord2(uint16_t x, uint16_t y) { + this->x = x; + this->y = y; + } + Coord2() {} + uint16_t x; + uint16_t y; + }; // Vec2 datatype for signed x, y coordinates // struct Vec2 { diff --git a/example b/example new file mode 100755 index 0000000000000000000000000000000000000000..75f1cd018920d681cbad9ed4fdb9a9927980959d GIT binary patch literal 37000 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 + +#include "../datatypes.cpp" +#include "../helpers.cpp" + +namespace UwU { + template + class MapperBase { + public: + Coord2 map(uint16_t x, uint16_t y) { + return static_cast(this)->map(x, y); + } + }; +} \ No newline at end of file diff --git a/mappers/mappers.h b/mappers/mappers.h new file mode 100644 index 0000000..90c660d --- /dev/null +++ b/mappers/mappers.h @@ -0,0 +1,4 @@ +#include "mapperbase.cpp" +#include "nullmapper.cpp" +#include "offsetmapper.cpp" +#include "tilemapper.cpp" \ No newline at end of file diff --git a/mappers/nullmapper.cpp b/mappers/nullmapper.cpp new file mode 100644 index 0000000..417726e --- /dev/null +++ b/mappers/nullmapper.cpp @@ -0,0 +1,18 @@ +#pragma once + +#include + +#include "../datatypes.cpp" +#include "../helpers.cpp" +#include "mapperbase.cpp" + +namespace UwU { + class NullMapper : public MapperBase { + public: + NullMapper() {} + + Coord2 map(uint16_t x, uint16_t y) { + return Coord2(x, y); + } + }; +} \ No newline at end of file diff --git a/mappers/offsetmapper.cpp b/mappers/offsetmapper.cpp new file mode 100644 index 0000000..d77eeb0 --- /dev/null +++ b/mappers/offsetmapper.cpp @@ -0,0 +1,24 @@ +#pragma once + +#include + +#include "../datatypes.cpp" +#include "../helpers.cpp" +#include "mapperbase.cpp" + +namespace UwU { + class OffsetMapper : public MapperBase { + public: + OffsetMapper(uint16_t x0, uint16_t y0) { + this->x0 = x0; + this->y0 = y0; + } + uint16_t x0, y0; + + Coord2 map(uint16_t x, uint16_t y) { + uint16_t u = x -x0; + uint16_t v = y -y0; + return Coord2(u, v); + } + }; +} \ No newline at end of file diff --git a/mappers/tilemapper.cpp b/mappers/tilemapper.cpp new file mode 100644 index 0000000..b5dca69 --- /dev/null +++ b/mappers/tilemapper.cpp @@ -0,0 +1,24 @@ +#pragma once + +#include + +#include "../datatypes.cpp" +#include "../helpers.cpp" +#include "mapperbase.cpp" + +namespace UwU { + class TileMapper : public MapperBase { // not actually tilemapping yet + public: + TileMapper(uint16_t x0, uint16_t y0) { + this->x0 = x0; + this->y0 = y0; + } + uint16_t x0, y0; + + Coord2 map(uint16_t x, uint16_t y) { + uint16_t u = x -x0; + uint16_t v = y -y0; + return Coord2(u, v); + } + }; +} \ No newline at end of file diff --git a/primatives/rectangle.cpp b/primatives/rectangle.cpp index a023bf6..77e5ee3 100644 --- a/primatives/rectangle.cpp +++ b/primatives/rectangle.cpp @@ -5,8 +5,8 @@ #include "../datatypes.cpp" #include "../helpers.cpp" #include "../buffer.cpp" -#include "../shaders/shaderbase.cpp" #include "../shaders/shaders.h" +#include "../mappers/mappers.h" namespace UwU { // rectangle @@ -25,12 +25,13 @@ namespace UwU { uint16_t y1; // Draw a rectangle - template - void draw (Buffer buffer, ShaderBase& shader) { + template + void draw (Buffer buffer, MapperBase& mapper, ShaderBase& shader) { if (x0 > buffer.width || y0 > buffer.height || x1 > buffer.width || y1 > buffer.height) {return;}; for (uint16_t y = y0; y <= y1; y++) { for (uint16_t x = x0; x <= x1; x++) { - buffer.drawPixel(x, y, shader.shade(x, y)); + Coord2 uv = mapper.map(x, y); + buffer.drawPixel(x, y, shader.shade(uv.x, uv.y)); } } return;