import { makeInNOutFunctionDesc } from '../../../Nodes/FunctionNode.js'; // Unreal Engine Integer Blueprints API: https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/Math/Integer/ export const Constant = makeInNOutFunctionDesc({ name: 'math/integer', label: 'Integer', in: ['integer'], out: 'integer', exec: (a: bigint) => a }); export const Add = makeInNOutFunctionDesc({ name: 'math/add/integer', label: '+', in: ['integer', 'integer'], out: 'integer', exec: (a: bigint, b: bigint) => a + b }); export const Subtract = makeInNOutFunctionDesc({ name: 'math/subtract/integer', label: '-', in: ['integer', 'integer'], out: 'integer', exec: (a: bigint, b: bigint) => a - b }); export const Negate = makeInNOutFunctionDesc({ name: 'math/negate/integer', label: '-', in: ['integer'], out: 'integer', exec: (a: bigint) => -a }); export const Multiply = makeInNOutFunctionDesc({ name: 'math/multiply/integer', label: '×', in: ['integer', 'integer'], out: 'integer', exec: (a: bigint, b: bigint) => a * b }); export const Divide = makeInNOutFunctionDesc({ name: 'math/divide/integer', label: '÷', in: ['integer', 'integer'], out: 'integer', exec: (a: bigint, b: bigint) => a / b }); export const Modulus = makeInNOutFunctionDesc({ name: 'math/modulus/integer', label: 'MOD', in: ['integer', 'integer'], out: 'integer', exec: (a: bigint, b: bigint) => a % b }); export const ToFloat = makeInNOutFunctionDesc({ name: 'math/toFloat/integer', label: 'To Float', in: ['integer'], out: 'float', exec: (a: bigint) => Number(a) }); export const Min = makeInNOutFunctionDesc({ name: 'math/min/integer', label: 'MIN', in: ['integer', 'integer'], out: 'integer', exec: (a: bigint, b: bigint) => (a > b ? b : a) }); export const Max = makeInNOutFunctionDesc({ name: 'math/max/integer', label: 'MAX', in: ['integer', 'integer'], out: 'integer', exec: (a: bigint, b: bigint) => (a > b ? a : b) }); export const Clamp = makeInNOutFunctionDesc({ name: 'math/clamp/integer', label: 'CLAMP', in: [{ value: 'integer' }, { min: 'integer' }, { max: 'integer' }], out: 'integer', exec: (value: bigint, min: bigint, max: bigint) => value < min ? min : value > max ? max : value }); export const Abs = makeInNOutFunctionDesc({ name: 'math/abs/integer', label: 'ABS', in: ['integer'], out: 'integer', exec: (a: bigint) => (a < BigInt(0) ? -a : a) }); export const Sign = makeInNOutFunctionDesc({ name: 'math/sign/integer', label: 'SIGN', in: ['integer'], out: 'integer', exec: (a: bigint) => BigInt(a < 0 ? -1 : a > 0 ? 1 : 0) }); export const Equal = makeInNOutFunctionDesc({ name: 'math/equal/integer', label: '=', in: ['integer', 'integer'], out: 'boolean', exec: (a: bigint, b: bigint) => a === b }); export const GreaterThan = makeInNOutFunctionDesc({ name: 'math/greaterThan/integer', label: '>', in: ['integer', 'integer'], out: 'boolean', exec: (a: bigint, b: bigint) => a > b }); export const GreaterThanOrEqual = makeInNOutFunctionDesc({ name: 'math/greaterThanOrEqual/integer', label: '≥', in: ['integer', 'integer'], out: 'boolean', exec: (a: bigint, b: bigint) => a >= b }); export const LessThan = makeInNOutFunctionDesc({ name: 'math/lessThan/integer', label: '<', in: ['integer', 'integer'], out: 'boolean', exec: (a: bigint, b: bigint) => a < b }); export const LessThanOrEqual = makeInNOutFunctionDesc({ name: 'math/lessThanOrEqual/integer', label: '≤', in: ['integer', 'integer'], out: 'boolean', exec: (a: bigint, b: bigint) => a <= b }); export const toBoolean = makeInNOutFunctionDesc({ name: 'math/toBoolean/integer', label: 'To Boolean', in: ['integer'], out: 'boolean', exec: (a: bigint) => a !== BigInt(0) });