From e88b3c2bdd08d380f87cd206ccc4b3f28c891bf1 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 27 Nov 2023 04:44:04 -0800 Subject: [PATCH] srb2::Mobj: add sprite scaling/offsetting methods --- src/mobj.hpp | 40 ++++++++++++++++++++++++++++++++++++++++ src/objects/ivoball.cpp | 4 ++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/mobj.hpp b/src/mobj.hpp index aebbfb45b..ef64dbce7 100644 --- a/src/mobj.hpp +++ b/src/mobj.hpp @@ -184,6 +184,46 @@ struct Mobj : mobj_t } + // + // Sprite offsets + // + +#define FIXED_METHOD(member) \ + fixed member() const { return mobj_t::member; } \ + void member(fixed n) { mobj_t::member = n; } + + FIXED_METHOD(spritexscale) + FIXED_METHOD(spriteyscale) + FIXED_METHOD(spritexoffset) + FIXED_METHOD(spriteyoffset) + FIXED_METHOD(sprxoff) + FIXED_METHOD(spryoff) + FIXED_METHOD(sprzoff) + + vec2 spritescale() const { return {spritexscale(), spriteyscale()}; } + void spritescale(const vec2& v) + { + spritexscale(v.x); + spriteyscale(v.y); + } + + vec2 spriteoffset() const { return {spritexoffset(), spriteyoffset()}; } + void spriteoffset(const vec2& v) + { + spritexoffset(v.x); + spriteyoffset(v.y); + } + + vec2 sproff2d() const { return {sprxoff(), spryoff()}; } + void sproff2d(const vec2& v) + { + sprxoff(v.x); + spryoff(v.y); + } + + // TODO: Vec3 + + // // Sound // diff --git a/src/objects/ivoball.cpp b/src/objects/ivoball.cpp index fbcecede9..d3fd3e8ce 100644 --- a/src/objects/ivoball.cpp +++ b/src/objects/ivoball.cpp @@ -64,7 +64,7 @@ struct IvoBall : Mobj Fixed wave{(x / mapobjectscale) + (y / mapobjectscale)}; offset(wave / kRippleFactor); color = SKINCOLOR_TANGERINE; - sprzoff = kFloat * mapobjectscale; + sprzoff(kFloat * mapobjectscale); } void think() @@ -81,7 +81,7 @@ struct IvoBall : Mobj fixed_t ballTimer = leveltime + offset(); Fixed bob = kBobHeight * Fixed {FSIN((M_TAU_FIXED * kBobTime) * ballTimer)}; - spriteyoffset = bob; + spriteyoffset(bob); colorized = !((ballTimer / kFlashTime) & 1); }