From 0cbf5a80abad9b007e46c648999953bc50e0af2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joshua=20Vanda=C3=ABle?= Date: Fri, 11 Sep 2026 22:38:03 +0200 Subject: Input Syntax: Add floor, ceil, round, and trunc functions --- .../ControlReference/FunctionExpression.cpp | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) (limited to 'Source/Core/InputCommon') diff --git a/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp b/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp index 603298de93..9dc9608ed1 100644 --- a/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp +++ b/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp @@ -220,6 +220,66 @@ private: ControlState GetValue() override { return std::pow(GetArg(0).GetValue(), GetArg(1).GetValue()); } }; +// usage: floor(expression) +class FloorExpression : public FunctionExpression +{ +private: + ArgumentValidation ValidateArguments() override + { + if (GetArgCount() == 1) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"expression"}; + } + + ControlState GetValue() override { return std::floor(GetArg(0).GetValue()); } +}; + +// usage: ceil(expression) +class CeilExpression : public FunctionExpression +{ +private: + ArgumentValidation ValidateArguments() override + { + if (GetArgCount() == 1) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"expression"}; + } + + ControlState GetValue() override { return std::ceil(GetArg(0).GetValue()); } +}; + +// usage: round(expression) +class RoundExpression : public FunctionExpression +{ +private: + ArgumentValidation ValidateArguments() override + { + if (GetArgCount() == 1) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"expression"}; + } + + ControlState GetValue() override { return std::round(GetArg(0).GetValue()); } +}; + +// usage: trunc(expression) +class TruncExpression : public FunctionExpression +{ +private: + ArgumentValidation ValidateArguments() override + { + if (GetArgCount() == 1) + return ArgumentsAreValid{}; + else + return ExpectedArguments{"expression"}; + } + + ControlState GetValue() override { return std::trunc(GetArg(0).GetValue()); } +}; + // usage: min(a, b) class MinExpression : public FunctionExpression { @@ -660,6 +720,14 @@ std::unique_ptr MakeFunctionExpression(std::string_view name return std::make_unique(); if (name == "pow") return std::make_unique(); + if (name == "floor") + return std::make_unique(); + if (name == "ceil") + return std::make_unique(); + if (name == "round") + return std::make_unique(); + if (name == "trunc") + return std::make_unique(); if (name == "min") return std::make_unique(); if (name == "max") -- cgit v1.2.3