From 442d1f3bd394b8aaeddd46ff48c79778c1646a08 Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Sun, 28 Aug 2022 12:53:31 +1000 Subject: [PATCH] - Move Build interpolation helper inlines into new header file. * Needed to be in new header to avoid some circular dependencies. --- source/core/binaryangle.h | 53 ------------------------ source/core/coreactor.h | 1 + source/core/gameinput.h | 1 + source/core/interphelpers.h | 81 +++++++++++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+), 53 deletions(-) create mode 100644 source/core/interphelpers.h diff --git a/source/core/binaryangle.h b/source/core/binaryangle.h index a5e740b11..b394d9b5f 100644 --- a/source/core/binaryangle.h +++ b/source/core/binaryangle.h @@ -43,7 +43,6 @@ #include "xs_Float.h" // needed for reliably overflowing float->int conversions. #include "serializer.h" #include "math/cmath.h" -#include "intvec.h" class FSerializer; @@ -181,55 +180,3 @@ inline FSerializer &Serialize(FSerializer &arc, const char *key, fixedhoriz &obj { return Serialize(arc, key, obj.value, defval ? &defval->value : nullptr); } - - -//--------------------------------------------------------------------------- -// -// Interpolation functions for use throughout games. -// -//--------------------------------------------------------------------------- - -inline constexpr int32_t interpolatedvalue(int32_t oval, int32_t val, double const smoothratio, int const scale = 16) -{ - return oval + MulScale(val - oval, int(smoothratio), scale); -} - -inline constexpr int32_t interpolatedvalue(int32_t oval, int32_t val, int const smoothratio, int const scale = 16) -{ - return oval + MulScale(val - oval, smoothratio, scale); -} - -inline constexpr double interpolatedvaluef(double oval, double val, double const smoothratio, int const scale = 16) -{ - return oval + MulScaleF(val - oval, smoothratio, scale); -} - -inline constexpr int32_t interpolatedangle(int32_t oang, int32_t ang, double const smoothratio, int const scale = 16) -{ - return oang + MulScale(((ang + 1024 - oang) & 2047) - 1024, int(smoothratio), scale); -} - -inline constexpr int32_t interpolatedangle(int32_t oang, int32_t ang, int const smoothratio, int const scale = 16) -{ - return oang + MulScale(((ang + 1024 - oang) & 2047) - 1024, smoothratio, scale); -} - -inline DAngle interpolatedangle(DAngle oang, DAngle ang, double const smoothratio, int const scale = 16) -{ - return oang + (deltaangle(oang, ang) * smoothratio * (1. / (1 << scale))); -} - -inline DAngle interpolatedangle(DAngle oang, DAngle ang, int const smoothratio, int const scale = 16) -{ - return oang + (deltaangle(oang, ang) * smoothratio * (1. / (1 << scale))); -} - -inline constexpr fixedhoriz interpolatedhorizon(fixedhoriz oval, fixedhoriz val, double const smoothratio, int const scale = 16) -{ - return q16horiz(oval.asq16() + MulScale((val - oval).asq16(), int(smoothratio), scale)); -} - -inline constexpr fixedhoriz interpolatedhorizon(fixedhoriz oval, fixedhoriz val, int const smoothratio, int const scale = 16) -{ - return q16horiz(oval.asq16() + MulScale((val - oval).asq16(), smoothratio, scale)); -} diff --git a/source/core/coreactor.h b/source/core/coreactor.h index f011b722f..dfa031e06 100644 --- a/source/core/coreactor.h +++ b/source/core/coreactor.h @@ -4,6 +4,7 @@ #include "maptypes.h" #include "build.h" #include "actorinfo.h" +#include "interphelpers.h" enum { diff --git a/source/core/gameinput.h b/source/core/gameinput.h index 4213ebd75..659afbe24 100644 --- a/source/core/gameinput.h +++ b/source/core/gameinput.h @@ -2,6 +2,7 @@ #include "m_fixed.h" #include "binaryangle.h" +#include "interphelpers.h" #include "gamecvars.h" #include "gamestruct.h" #include "packet.h" diff --git a/source/core/interphelpers.h b/source/core/interphelpers.h new file mode 100644 index 000000000..356288f54 --- /dev/null +++ b/source/core/interphelpers.h @@ -0,0 +1,81 @@ +/* +** interphelpers.h +** +** Interpolation helpers for use throughout Build games. +** +**--------------------------------------------------------------------------- +** Copyright 2022 Christoph Oelckers, Mitchell Richters +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions +** are met: +** +** 1. Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** 3. The name of the author may not be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**--------------------------------------------------------------------------- +** +*/ + +#pragma once + +inline constexpr int32_t interpolatedvalue(int32_t oval, int32_t val, double const smoothratio, int const scale = 16) +{ + return oval + MulScale(val - oval, int(smoothratio), scale); +} + +inline constexpr int32_t interpolatedvalue(int32_t oval, int32_t val, int const smoothratio, int const scale = 16) +{ + return oval + MulScale(val - oval, smoothratio, scale); +} + +inline constexpr double interpolatedvaluef(double oval, double val, double const smoothratio, int const scale = 16) +{ + return oval + MulScaleF(val - oval, smoothratio, scale); +} + +inline constexpr int32_t interpolatedangle(int32_t oang, int32_t ang, double const smoothratio, int const scale = 16) +{ + return oang + MulScale(((ang + 1024 - oang) & 2047) - 1024, int(smoothratio), scale); +} + +inline constexpr int32_t interpolatedangle(int32_t oang, int32_t ang, int const smoothratio, int const scale = 16) +{ + return oang + MulScale(((ang + 1024 - oang) & 2047) - 1024, smoothratio, scale); +} + +inline DAngle interpolatedangle(DAngle oang, DAngle ang, double const smoothratio, int const scale = 16) +{ + return oang + (deltaangle(oang, ang) * smoothratio * (1. / (1 << scale))); +} + +inline DAngle interpolatedangle(DAngle oang, DAngle ang, int const smoothratio, int const scale = 16) +{ + return oang + (deltaangle(oang, ang) * smoothratio * (1. / (1 << scale))); +} + +inline constexpr fixedhoriz interpolatedhorizon(fixedhoriz oval, fixedhoriz val, double const smoothratio, int const scale = 16) +{ + return q16horiz(oval.asq16() + MulScale((val - oval).asq16(), int(smoothratio), scale)); +} + +inline constexpr fixedhoriz interpolatedhorizon(fixedhoriz oval, fixedhoriz val, int const smoothratio, int const scale = 16) +{ + return q16horiz(oval.asq16() + MulScale((val - oval).asq16(), smoothratio, scale)); +}