Skip to main content

A clamped integer type with range-aware arithmetic, callbacks, and lerp utilities.

Project description

RangeInt

A clamped numeric type for Python. Values are automatically kept within a [min, max] range — all arithmetic, assignment, and mutations clamp silently. Built for game dev, UI sliders, stat systems, animation, or anywhere you want a number that stays in bounds.

from rangeint import RangeInt

hp = RangeInt(100, 0, 100)
hp -= 999
print(hp)  # 0  — never goes below min

Install

pip install rangeint

Quick Start

from rangeint import RangeInt

volume = RangeInt(50, 0, 100)

volume += 80     # → 100  (clamped at max)
volume -= 200    # → 0    (clamped at min)

print(int(volume))    # 0
print(float(volume))  # 0.0
print(volume == 0)    # True

API

Constructor

RangeInt(value, min_val, max_val)

Raises ValueError if min_val == max_val.


Properties

Property Description
.value Current value (clamped on set)
.min Lower bound
.max Upper bound

Methods

relative() -> float

Returns the value's position as a float between 0.0 and 1.0.

RangeInt(75, 0, 100).relative()  # 0.75

lerp_to(percentage) -> float

Sets the value to a fractional position between min and max.

r = RangeInt(0, 0, 200)
r.lerp_to(0.5)   # 100.0

nudge_percentage(amt) -> int

Shifts the value by a fraction of the total range.

r = RangeInt(50, 0, 100)
r.nudge_percentage(0.1)   # 60

set_range(min_val, max_val) -> RangeInt

Updates the bounds and re-clamps the current value. Chainable.

r = RangeInt(80, 0, 100)
r.set_range(0, 50)   # value clamped to 50

edge_check(val_check) -> bool

Returns True if the value is at "min" or "max".

RangeInt(0, 0, 100).edge_check("min")   # True
RangeInt(0, 0, 100).edge_check("max")   # False

is_between(low, high) -> bool

Returns True if the relative position falls within [low, high].

RangeInt(50, 0, 100).is_between(0.25, 0.75)  # True

on_percentage(percentage, directional, through)

Register a function to fire whenever the value crosses a relative threshold if through is set to False it will only fire if it is exact. if through is set to True it will fire if it passes through. Directional controls if it fires when its coming up 30 - 70 or down 70 - 30.

health = RangeInt(0, 0, 100)
def low_health():
  print("Low Health: {health.value()}HP remaining")
health.on_percentage(0.5, low_health, directional="down", through=True)
health += 70
health -= 40 # Low Health: 30HP remaining

Note: Only one function can be assigned to each percentage level

Operators

Operator Supported
+, -, *, /, //, %, ** Yes
+=, -=, *=, /= Yes
Reflected +, -, * Yes
-x, abs(x) Yes
==, <, <=, >, >= Yes
int(), float(), bool() Yes

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rangeint-1.0.1.tar.gz (6.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rangeint-1.0.1-py3-none-any.whl (5.6 kB view details)

Uploaded Python 3

File details

Details for the file rangeint-1.0.1.tar.gz.

File metadata

  • Download URL: rangeint-1.0.1.tar.gz
  • Upload date:
  • Size: 6.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for rangeint-1.0.1.tar.gz
Algorithm Hash digest
SHA256 f46d205aa86bd8f60e61ad488a773ca1623032d40b4c466f6fa26be1e3cea4bf
MD5 007ef5db5384900fd52c7a53c2893185
BLAKE2b-256 6020cfd93de865582b527e89841391ce0e8f5746632f28572e89a44b5a0137e4

See more details on using hashes here.

File details

Details for the file rangeint-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: rangeint-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 5.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for rangeint-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 41817d6741dddf066595095afc489addc595bf66775324ebe3ab7f7de120bea4
MD5 40de2f53dd3746f1e615fd98d7244ad3
BLAKE2b-256 5d18c078cab368bd225acdabd016bd41ae08ffbe20fbd14ee1ae2ce115502cba

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page