CQCalendar is a lightweight, tick-based time and calendar system for Python games and simulations.
Project description
CQCalendar v1.1.0
CQCalendar is a lightweight, tick-based time and calendar system for Python games and simulations.
It is designed for RPGs, sandbox sims, and systemic games, where time drives world behavior rather than just displaying a UI clock.
Features
- Tick-based and absolute time progression
- Gregorian calendar with leap year support
- Weekday tracking
- Synodic lunar cycle (moon phases & illumination)
- Event callbacks for hour/day/month/year changes
- Designed for decoupled, systemic game logic
- No external dependencies
Installation
You can install CQCalendar using pip.
pip install cqcalendar
How to Create a Calendar for Your Game
import cqcalendar
calendar = cqcalendar.CQCalendar(
hour=9,
minute=0,
is_pm=False,
minutes_per_tick=1,
day=1,
month=1,
year=1,
weekday=0,
moon_age_days=0.0,
moon_phase=None,
debug_callbacks=False,
)
Time
How to Display Current Time
print(calendar.time_string())
How to Change Time
calendar.set_time(hour=12, minute=0, is_pm=True)
How to Increment Time
calendar.update(ticks=10)
Date
How to Display Current Date
print(calendar.date_string())
How to Change Date
calendar.set_date(day=31, month=12, year=1)
Absolute Time Advancement
You can advance time directly without ticks.
calendar.add_minutes(30)
calendar.add_hours(6)
calendar.add_days(1)
calendar.add_months(1)
calendar.add_years(1)
Or you can do it in a single method.
calendar.add(days=3, hours=4)
Weekdays
Weekdays are zero-indexed (0 = Monday, 6 = Sunday).
How to Display Weekday
print(calendar.weekday_name())
How to Change Weekday
calendar.set_weekday(weekday=1)
Lunar Cycle
CQCalendar includes a synodic lunar cycle (approximately 29.53 days)
How to Display Moon Phase
print(calendar.moon_phase_name())
How to Set Moon Phase
calendar.set_moon_phase("Waning Crescent")
The above is an alternative to using moon_age_days:
# Precise numeric control still supported
calendar = CQCalendar(moon_age_days=14.77) # Full Moon
If both moon_phase and moon_age_days are provided, moon_phase takes priority.
How to Get Moon Illumination
print(calendar.moon_illumination())
Useful for:
- werewolf systems
- rituals
- night visibility
- tides or magic strength
Callbacks (Events)
CQCalendar allows systems to react to time changes using callbacks.
Callbacks are triggered when time crosses a boundary (hour/day/month/year), not continuously.
Hourly Event
def restock_shops(calendar):
if calendar.hour == 6 and not calendar.is_pm:
print("Shops restocked!")
calendar.on_hour(restock_shops)
Daily Event
def payday(calendar):
if calendar.day == 1:
print("Rent is due!")
calendar.on_day(payday)
Available callbacks:
- on_hour
- on_day
- on_month
- on_year
Misc.
How to Display Current Date and Time
print(calendar.datetime_string())
Related Libraries
- TerraForge: A versatile Python toolset for procedural map generation.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cqcalendar-1.1.0.tar.gz.
File metadata
- Download URL: cqcalendar-1.1.0.tar.gz
- Upload date:
- Size: 6.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
03a95d2ae85fd55fc7ae2b6299b017ea332d3051abe409a85362be2b192a2413
|
|
| MD5 |
d3630bd5279d8fb5a00bd3c3397ebc82
|
|
| BLAKE2b-256 |
bb2a05ab866357d622869b59f4abd41dfba97a156119f373281e33a9f20ffa63
|
File details
Details for the file cqcalendar-1.1.0-py3-none-any.whl.
File metadata
- Download URL: cqcalendar-1.1.0-py3-none-any.whl
- Upload date:
- Size: 6.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
32366e8187b0711eb4ac07f97fafc826b2c70062bd29dcfd2c77738873b85222
|
|
| MD5 |
df045271038a1dfd4d527ba214af85e4
|
|
| BLAKE2b-256 |
b32931b75fa153843443739a12ed010b0289e337bfe3f980a0142db7b78bf08c
|