reckfellENGINE

Vector3I

A 3-component int vector for coordinates and indices.

On this page
struct Vector3IReckfellSharpInherits ValueType

A C# struct with 3 int components: X, Y and Z. Suitable for integer coordinates and indices; components have Int32 range. Assignment copies the value. This is not a long-component vector.

Keep intermediate sums, differences and products within range. Conversion to a float vector cannot preserve every large integer exactly; changing type does not repair an overflow that already happened.

Vector3I has no C# conversion to bool. Compare with Vector3I.Zero for an exact zero-vector test; a nonzero vector alone does not establish a valid coordinate or index.

Declarations checked against C# SDK 1.0.0. Expand a name to see declarations and documentation.

Constructors1

Vector3IConstructor
# Vector3I
C#
public Vector3I(int x, int y, int z);

Stores x, y, z in the corresponding int components without rounding, normalization or clamping. default(Vector3I) contains zeros. This is a struct: assignment copies every component.

Parameters
NameTypeDefault
xint—
yint—
zint—
x

Initial signed int component X.

y

Initial signed int component Y.

z

Initial signed int component Z.

Properties11

BackProperty
# Back
C#
public static Vector3I Back { get; }

(0, 0, 1). Back: positive Z. Returns a value copy; changing it does not change the constant.

DownProperty
# Down
C#
public static Vector3I Down { get; }

(0, -1, 0). Down: negative Y. Returns a value copy; changing it does not change the constant.

ForwardProperty
# Forward
C#
public static Vector3I Forward { get; }

(0, 0, -1). Forward: negative Z. Returns a value copy; changing it does not change the constant.

ItemProperty
# Item
C#
public int this[int index] { get; set; }

Component indices: 0 = X, 1 = Y, 2 = Z. Getter and setter outside 0..2 throw ArgumentOutOfRangeException. Mutates this struct variable; a previously assigned copy is unchanged.

LeftProperty
# Left
C#
public static Vector3I Left { get; }

(-1, 0, 0). Negative X. Returns a value copy; changing it does not change the constant.

MaxValueProperty
# MaxValue
C#
public static Vector3I MaxValue { get; }

(int.MaxValue, int.MaxValue, int.MaxValue). Finite maximum ints, not infinity; arithmetic can overflow. Returns a value copy; changing it does not change the constant.

MinValueProperty
# MinValue
C#
public static Vector3I MinValue { get; }

(int.MinValue, int.MinValue, int.MinValue). Finite minimum ints, not negative infinity. Abs() throws OverflowException. Returns a value copy; changing it does not change the constant.

OneProperty
# One
C#
public static Vector3I One { get; }

(1, 1, 1). All components equal 1; this is not unit length. Returns a value copy; changing it does not change the constant.

RightProperty
# Right
C#
public static Vector3I Right { get; }

(1, 0, 0). Positive X. Returns a value copy; changing it does not change the constant.

UpProperty
# Up
C#
public static Vector3I Up { get; }

(0, 1, 0). Up: positive Y. Returns a value copy; changing it does not change the constant.

ZeroProperty
# Zero
C#
public static Vector3I Zero { get; }

(0, 0, 0). Zero vector, equal to default(Vector3I). Returns a value copy; changing it does not change the constant.

Methods41

AbsVector3I
# Abs
C#
public Vector3I Abs();

Returns a new struct with Math.Abs applied to each component, leaving the source unchanged. int.MinValue has no positive int counterpart and throws OverflowException.

Returns Vector3I

Absolute values of all components if representable as int.

Clamp2 overloads
# Clamp · 1/2
C#
public Vector3I Clamp(Vector3I min, Vector3I max);

Returns a copy with components clamped to inclusive bounds. Each axis has its own min and max. Throws ArgumentException if any lower bound exceeds its upper bound; bounds are not swapped.

Parameters
NameTypeDefault
minVector3I—
maxVector3I—
min

Inclusive lower bound, no greater than its corresponding upper bound.

max

Inclusive upper bound, no less than its corresponding lower bound.

Returns Vector3I

Vector with each component inside its specified range.

# Clamp · 2/2
C#
public Vector3I Clamp(int min, int max);

Returns a copy with components clamped to inclusive bounds. The same min and max apply to all axes. Throws ArgumentException if any lower bound exceeds its upper bound; bounds are not swapped.

Parameters
NameTypeDefault
minint—
maxint—
min

Inclusive lower bound, no greater than its corresponding upper bound.

max

Inclusive upper bound, no less than its corresponding lower bound.

Returns Vector3I

Vector with each component inside its specified range.

Deconstructvoid
# Deconstruct
C#
public void Deconstruct(out int x, out int y, out int z);

Copies components into output arguments in X, Y, Z order. Enables var (x, y, z) = vector; leaves the source unchanged.

Parameters
NameTypeDefault
xint—
yint—
zint—
x

Output copy of component X.

y

Output copy of component Y.

z

Output copy of component Z.

DistanceSquaredToint
# DistanceSquaredTo
C#
public int DistanceSquaredTo(Vector3I to);

Computes (to - this).LengthSquared() using int. Overflow can occur in subtraction and then in squaring or addition; the result can be negative or misleadingly small. Do not use for large coordinates without range checks. For a wide range, convert components to double before subtraction; see the DistanceTo example.

Parameters
NameTypeDefault
toVector3I—
to

Other point coordinates; the difference from this point is first computed as int.

Returns int

Squared distance only when every intermediate integer operation fits int.

DistanceTofloat
# DistanceTo
C#
public float DistanceTo(Vector3I to);

Computes (to - this).Length(). A float result does not prevent int overflow during subtraction or squaring. From (int.MinValue, 0, 0) to (int.MaxValue, 0, 0), the installed SDK returns 1 instead of 4294967295.

WideDistance promotes each component to double before subtraction. CellAt uses Floor: (-1, 33, -17) with step 16 gives (-1, 2, -2); nonpositive steps and unrepresentable coordinates are rejected.

C#
using System;
using Reckfell;

public static class IntegerSpaceExamples
{
    public static Vector3I CellAt(Vector3 position, int cellSize)
    {
        if (cellSize <= 0) throw new ArgumentOutOfRangeException(nameof(cellSize));
        Vector3 cell = (position / cellSize).Floor();
        for (int axis = 0; axis < 3; axis++)
            if (!float.IsFinite(cell[axis]) || (double)cell[axis] < int.MinValue || (double)cell[axis] > int.MaxValue)
                throw new ArgumentOutOfRangeException(nameof(position));
        return (Vector3I)cell;
    }

    public static double WideDistance(Vector3I from, Vector3I to)
    {
        double dx = (double)to.X - from.X;
        double dy = (double)to.Y - from.Y;
        double dz = (double)to.Z - from.Z;
        return Math.Sqrt(dx * dx + dy * dy + dz * dz);
    }

    public static double WideDistance(Vector4I from, Vector4I to)
    {
        double dx = (double)to.X - from.X;
        double dy = (double)to.Y - from.Y;
        double dz = (double)to.Z - from.Z;
        double dw = (double)to.W - from.W;
        return Math.Sqrt(dx * dx + dy * dy + dz * dz + dw * dw);
    }
}
Parameters
NameTypeDefault
toVector3I—
to

Other point coordinates; the difference from this point is first computed as int.

Returns float

Euclidean distance as float when intermediates do not overflow; otherwise it may be incorrect or NaN.

Equals2 overloads
# Equals · 1/2
C#
public bool Equals(Vector3I other);

Compares X, Y, Z exactly. Does not compare approximately or compare lengths.

Parameters
NameTypeDefault
otherVector3I—
other

Other Vector3I for exact comparison of X, Y, Z.

Returns bool

true only when all components match and the type is compatible.

# Equals · 2/2
C#
public override bool Equals(object? obj);

Compares X, Y, Z exactly. The object must contain a Vector3I: Vector3 with matching coordinates, null and other types return false.

Parameters
NameTypeDefault
objobject—
obj

Object to test; only a boxed Vector3I with matching X, Y, Z can match.

Returns bool

true only when all components match and the type is compatible.

GetHashCodeint
# GetHashCode
C#
public override int GetHashCode();

Uses HashCode.Combine(X, Y, Z). Equal vectors have equal hashes, but a matching hash does not prove equality. Suitable for Dictionary<Vector3I, T> keys; do not persist the hash as an identifier across runs.

Returns int

Hash of all integer components.

Lengthfloat
# Length
C#
public float Length();

Computes XX + YY + Z*Z as int, then takes a float square root. Squaring and addition can overflow: (50000, 0, 0) yields NaN, while (65536, 0, 0) yields 0. For a wide range, promote components to double before multiplication.

Returns float

Length when intermediate values fit; overflow makes the result unreliable.

LengthSquaredint
# LengthSquared
C#
public int LengthSquared();

Computes XX + YY + Z*Z as int, without a square root. Squaring and addition can overflow: (50000, 0, 0) yields a negative squared length, while (65536, 0, 0) yields 0. For a wide range, promote components to double before multiplication.

Returns int

Squared length if the products and sum fit int.

Max2 overloads
# Max · 1/2
C#
public Vector3I Max(Vector3I with);

Larger values are selected separately for X, Y, Z, returning a copy. The argument supplies per-axis values. This does not select an entire vector using < or > ordering.

Parameters
NameTypeDefault
withVector3I—
with

Components, or one shared value, for per-component comparison.

Returns Vector3I

Component-wise maxima.

# Max · 2/2
C#
public Vector3I Max(int with);

Larger values are selected separately for X, Y, Z, returning a copy. One value is compared with all components. This does not select an entire vector using < or > ordering.

Parameters
NameTypeDefault
withint—
with

Components, or one shared value, for per-component comparison.

Returns Vector3I

Component-wise maxima.

MaxAxisIndexVector3I.Axis
# MaxAxisIndex
C#
public Vector3I.Axis MaxAxisIndex();

Selects the axis of the largest signed component, not magnitude. Ties select the first axis in X, Y, Z order. When all components match, the result is Axis.X.

Returns Vector3I.Axis

First axis with the maximum signed component.

Min2 overloads
# Min · 1/2
C#
public Vector3I Min(Vector3I with);

Smaller values are selected separately for X, Y, Z, returning a copy. The argument supplies per-axis values. This does not select an entire vector using < or > ordering.

Parameters
NameTypeDefault
withVector3I—
with

Components, or one shared value, for per-component comparison.

Returns Vector3I

Component-wise minima.

# Min · 2/2
C#
public Vector3I Min(int with);

Smaller values are selected separately for X, Y, Z, returning a copy. One value is compared with all components. This does not select an entire vector using < or > ordering.

Parameters
NameTypeDefault
withint—
with

Components, or one shared value, for per-component comparison.

Returns Vector3I

Component-wise minima.

MinAxisIndexVector3I.Axis
# MinAxisIndex
C#
public Vector3I.Axis MinAxisIndex();

Selects the axis of the smallest signed component, not magnitude. Ties select the last axis in X, Y, Z order. When all components match, the result is Axis.Z.

Returns Vector3I.Axis

Last axis with the minimum signed component.

SignVector3I
# Sign
C#
public Vector3I Sign();

Returns a new struct with each negative component replaced by -1, zero by 0 and each positive component by 1. int.MinValue yields -1 without taking its absolute value. This does not normalize length: (1, 1, 1) stays (1, 1, 1).

Returns Vector3I

Component signs, each -1, 0 or 1.

Snapped2 overloads
# Snapped · 1/2
C#
public Vector3I Snapped(Vector3I step);

Snaps each component using the double formula floor(value / step + 0.5) * step, then casts to int. A positive step rounds half ties toward the larger value: (6, -6, 2).Snapped(4) gives (8, -4, 4). A zero step preserves the component; a negative step changes half ties, so use a positive step. The result must fit int; range clamping is not performed.

Parameters
NameTypeDefault
stepVector3I—
step

Per-axis or shared step. A positive step is recommended; 0 preserves the corresponding component.

Returns Vector3I

New struct with snapped components; the source is unchanged.

# Snapped · 2/2
C#
public Vector3I Snapped(int step);

Snaps each component using the double formula floor(value / step + 0.5) * step, then casts to int. A positive step rounds half ties toward the larger value: (6, -6, 2).Snapped(4) gives (8, -4, 4). A zero step preserves the component; a negative step changes half ties, so use a positive step. The result must fit int; range clamping is not performed.

Parameters
NameTypeDefault
stepint—
step

Per-axis or shared step. A positive step is recommended; 0 preserves the corresponding component.

Returns Vector3I

New struct with snapped components; the source is unchanged.

ToString2 overloads
# ToString · 1/2
C#
public override string ToString();

Uses CultureInfo.InvariantCulture regardless of the current culture; vector (3, -4, 2) returns "(3, -4, 2)". Equivalent to ToString(null).

Returns string

Both components as a string in the selected numeric format.

# ToString · 2/2
C#
public string ToString(string? format);

Uses CultureInfo.InvariantCulture regardless of the current culture; vector (3, -4, 2) returns "(3, -4, 2)". Applies format to each int: "D4" gives "(0003, -0004, 0002)". Invalid formatting throws FormatException.

Parameters
NameTypeDefault
formatstring—
format

int numeric format applied to all components, such as "D4"; null uses default formatting. An invalid format throws FormatException.

Returns string

Both components as a string in the selected numeric format.

op_AdditionVector3I
# op_Addition
C#
public static Vector3I operator +(Vector3I left, Vector3I right);

Returns (left.X + right.X, left.Y + right.Y, left.Z + right.Z) as a new struct. In the installed SDK, int overflow wraps without saturation; checked around the call does not change the compiled operator.

Parameters
NameTypeDefault
leftVector3I—
rightVector3I—
left

Left vector; the operation does not mutate the caller’s variable.

right

Right vector; the operation does not mutate the caller’s variable.

Returns Vector3I

Component-wise result; caller variables are unchanged.

op_Division2 overloads
# op_Division · 1/2
C#
public static Vector3I operator /(Vector3I vec, Vector3I divisorv);

Divides each integer component, truncating toward zero: (-7, 7, 0) / (2, 2, 2) gives (-3, 3, 0). A zero divisor throws DivideByZeroException. A component containing int.MinValue with divisor -1 throws OverflowException in the installed SDK. Divisors are supplied per axis.

Parameters
NameTypeDefault
vecVector3I—
divisorvVector3I—
vec

Vector operand; a new struct value is returned.

divisorv

Nonzero divisors for the corresponding X, Y, Z components.

Returns Vector3I

Integer quotients for X, Y, Z.

# op_Division · 2/2
C#
public static Vector3I operator /(Vector3I vec, int divisor);

Divides each integer component, truncating toward zero: (-7, 7, 0) / 2 gives (-3, 3, 0). A zero divisor throws DivideByZeroException. A component containing int.MinValue with divisor -1 throws OverflowException in the installed SDK. One divisor applies to all axes.

Parameters
NameTypeDefault
vecVector3I—
divisorint—
vec

Vector operand; a new struct value is returned.

divisor

Shared nonzero divisor for X, Y, Z.

Returns Vector3I

Integer quotients for X, Y, Z.

op_Equalitybool
# op_Equality
C#
public static bool operator ==(Vector3I left, Vector3I right);

Compares all integer components exactly. Does not compare lengths or use approximate tolerance.

Parameters
NameTypeDefault
leftVector3I—
rightVector3I—
left

Left vector; the operation does not mutate the caller’s variable.

right

Right vector; the operation does not mutate the caller’s variable.

Returns bool

true if both X, Y, Z match.

op_ExplicitVector3I
# op_Explicit
C#
public static explicit operator Vector3I(Vector3 value);

Casts each Vector3 component to int by truncating toward zero: (-1.9, 1.9, -2.9) gives (-1, 1, -2). For negative cell coordinates, use Floor first. Check finiteness and int range before casting; portable results are not guaranteed for NaN, Infinity or out-of-range values.

Parameters
NameTypeDefault
valueVector3—
value

Source vector; precision and range restrictions are described by the conversion.

Returns Vector3I

Integer components truncated toward zero for inputs within the valid range.

op_GreaterThanbool
# op_GreaterThan
C#
public static bool operator >(Vector3I left, Vector3I right);

Lexicographic comparison in X, Y, Z order: each next component is checked only when previous components match. This is a sorting order, not a component-wise bounds or length test. (1, 100, 0) < (2, -100, 0) is true despite the larger Y on the left. Test axes explicitly for bounds.

Parameters
NameTypeDefault
leftVector3I—
rightVector3I—
left

Left vector; the operation does not mutate the caller’s variable.

right

Right vector; the operation does not mutate the caller’s variable.

Returns bool

true when left > right holds in the stated order.

op_GreaterThanOrEqualbool
# op_GreaterThanOrEqual
C#
public static bool operator >=(Vector3I left, Vector3I right);

Lexicographic comparison in X, Y, Z order: each next component is checked only when previous components match. This is a sorting order, not a component-wise bounds or length test. (1, 100, 0) < (2, -100, 0) is true despite the larger Y on the left. Test axes explicitly for bounds.

Parameters
NameTypeDefault
leftVector3I—
rightVector3I—
left

Left vector; the operation does not mutate the caller’s variable.

right

Right vector; the operation does not mutate the caller’s variable.

Returns bool

true when left >= right holds in the stated order.

op_ImplicitVector3
# op_Implicit
C#
public static implicit operator Vector3(Vector3I value);

Converts each int component to the installed SDK’s float Vector3 component. Large integers can lose precision: 16777217 becomes 16777216. Keep Vector3I for exact grid arithmetic until the presentation step.

Parameters
NameTypeDefault
valueVector3I—
value

Source vector; precision and range restrictions are described by the conversion.

Returns Vector3

Vector3 with converted components; large int precision is not guaranteed.

op_Inequalitybool
# op_Inequality
C#
public static bool operator !=(Vector3I left, Vector3I right);

Negates ==. Does not compare lengths or use approximate tolerance.

Parameters
NameTypeDefault
leftVector3I—
rightVector3I—
left

Left vector; the operation does not mutate the caller’s variable.

right

Right vector; the operation does not mutate the caller’s variable.

Returns bool

true if at least one component differs.

op_LessThanbool
# op_LessThan
C#
public static bool operator <(Vector3I left, Vector3I right);

Lexicographic comparison in X, Y, Z order: each next component is checked only when previous components match. This is a sorting order, not a component-wise bounds or length test. (1, 100, 0) < (2, -100, 0) is true despite the larger Y on the left. Test axes explicitly for bounds.

Parameters
NameTypeDefault
leftVector3I—
rightVector3I—
left

Left vector; the operation does not mutate the caller’s variable.

right

Right vector; the operation does not mutate the caller’s variable.

Returns bool

true when left < right holds in the stated order.

op_LessThanOrEqualbool
# op_LessThanOrEqual
C#
public static bool operator <=(Vector3I left, Vector3I right);

Lexicographic comparison in X, Y, Z order: each next component is checked only when previous components match. This is a sorting order, not a component-wise bounds or length test. (1, 100, 0) < (2, -100, 0) is true despite the larger Y on the left. Test axes explicitly for bounds.

Parameters
NameTypeDefault
leftVector3I—
rightVector3I—
left

Left vector; the operation does not mutate the caller’s variable.

right

Right vector; the operation does not mutate the caller’s variable.

Returns bool

true when left <= right holds in the stated order.

op_Modulus2 overloads
# op_Modulus · 1/2
C#
public static Vector3I operator %(Vector3I vec, Vector3I divisorv);

Computes C# remainders from truncated division: (10, -20, 0) % (7, 7, 7) gives (3, -6, 0). This is not positive cyclic wrapping; use Mathf.PosMod with a positive modulus for that. A zero divisor throws DivideByZeroException. A component containing int.MinValue with divisor -1 throws OverflowException in the installed SDK. Divisors are supplied per axis.

Parameters
NameTypeDefault
vecVector3I—
divisorvVector3I—
vec

Vector operand; a new struct value is returned.

divisorv

Nonzero divisors for the corresponding X, Y, Z components.

Returns Vector3I

Remainders for X, Y, Z, with the dividend’s sign or zero.

# op_Modulus · 2/2
C#
public static Vector3I operator %(Vector3I vec, int divisor);

Computes C# remainders from truncated division: (10, -20, 0) % 7 gives (3, -6, 0). This is not positive cyclic wrapping; use Mathf.PosMod with a positive modulus for that. A zero divisor throws DivideByZeroException. A component containing int.MinValue with divisor -1 throws OverflowException in the installed SDK. One divisor applies to all axes.

Parameters
NameTypeDefault
vecVector3I—
divisorint—
vec

Vector operand; a new struct value is returned.

divisor

Shared nonzero divisor for X, Y, Z.

Returns Vector3I

Remainders for X, Y, Z, with the dividend’s sign or zero.

op_Multiply3 overloads
# op_Multiply · 1/3
C#
public static Vector3I operator *(Vector3I left, Vector3I right);

Returns (left.X * right.X, left.Y * right.Y, left.Z * right.Z) as a new struct. An int scales all axes; two vectors multiply component-wise, not as a dot product. In the installed SDK, int overflow wraps without saturation; checked around the call does not change the compiled operator.

Parameters
NameTypeDefault
leftVector3I—
rightVector3I—
left

Left vector; the operation does not mutate the caller’s variable.

right

Right vector; the operation does not mutate the caller’s variable.

Returns Vector3I

Component-wise result; caller variables are unchanged.

# op_Multiply · 2/3
C#
public static Vector3I operator *(Vector3I vec, int scale);

Returns (vec.X * scale, vec.Y * scale, vec.Z * scale) as a new struct. An int scales all axes; two vectors multiply component-wise, not as a dot product. In the installed SDK, int overflow wraps without saturation; checked around the call does not change the compiled operator.

Parameters
NameTypeDefault
vecVector3I—
scaleint—
vec

Vector operand; a new struct value is returned.

scale

Integer multiplier for all components; each product must fit int.

Returns Vector3I

Component-wise result; caller variables are unchanged.

# op_Multiply · 3/3
C#
public static Vector3I operator *(int scale, Vector3I vec);

Returns (vec.X * scale, vec.Y * scale, vec.Z * scale) as a new struct. An int scales all axes; two vectors multiply component-wise, not as a dot product. In the installed SDK, int overflow wraps without saturation; checked around the call does not change the compiled operator.

Parameters
NameTypeDefault
scaleint—
vecVector3I—
scale

Integer multiplier for all components; each product must fit int.

vec

Vector operand; a new struct value is returned.

Returns Vector3I

Component-wise result; caller variables are unchanged.

op_SubtractionVector3I
# op_Subtraction
C#
public static Vector3I operator -(Vector3I left, Vector3I right);

Returns (left.X - right.X, left.Y - right.Y, left.Z - right.Z) as a new struct. In the installed SDK, int overflow wraps without saturation; checked around the call does not change the compiled operator.

Parameters
NameTypeDefault
leftVector3I—
rightVector3I—
left

Left vector; the operation does not mutate the caller’s variable.

right

Right vector; the operation does not mutate the caller’s variable.

Returns Vector3I

Component-wise result; caller variables are unchanged.

op_UnaryNegationVector3I
# op_UnaryNegation
C#
public static Vector3I operator -(Vector3I vec);

Returns (-X, -Y, -Z) as a new struct. In the installed SDK, int overflow wraps without saturation; checked around the call does not change the compiled operator. Negating int.MinValue leaves int.MinValue.

Parameters
NameTypeDefault
vecVector3I—
vec

Vector operand; a new struct value is returned.

Returns Vector3I

Component-wise result; caller variables are unchanged.

op_UnaryPlusVector3I
# op_UnaryPlus
C#
public static Vector3I operator +(Vector3I vec);

Returns (X, Y, Z) as a new struct. Unary plus leaves the value unchanged.

Parameters
NameTypeDefault
vecVector3I—
vec

Vector operand; a new struct value is returned.

Returns Vector3I

Component-wise result; caller variables are unchanged.

Fields and constants3

XField
# X
C#
public int X;

Mutable signed 32-bit X component, also accessible through [0]. Assignment does not change other components or clamp the range.

YField
# Y
C#
public int Y;

Mutable signed 32-bit Y component, also accessible through [1]. Assignment does not change other components or clamp the range. In 3D, positive Y points up.

ZField
# Z
C#
public int Z;

Mutable signed 32-bit Z component, also accessible through [2]. Assignment does not change other components or clamp the range. Forward points along negative Z.

Vector3I.Axis

ValueDescription
X = 0

Enumerated value for the X axis. Returned by Vector3I.MaxAxisIndex and Vector3I.MinAxisIndex.

Y = 1

Enumerated value for the Y axis. Returned by Vector3I.MaxAxisIndex and Vector3I.MinAxisIndex.

Z = 2

Enumerated value for the Z axis. Returned by Vector3I.MaxAxisIndex and Vector3I.MinAxisIndex.

Reckfell Engine documentationBack to top ↑
QUICK LINKSGetting startedEntity hierarchyC# & .NET 10Scenes and prefabs
Reckfell guides and full API K
reckfellENGINE
RECKFELL ACCOUNT

Sign in

Sign in to your Reckfell account.

One account for the entire Reckfell platform.