da871655e621c898d0ea52e551d8976424cd4c6a
NuCon (Nucleares Controller)
NuCon is a Python library designed to interface with and control parameters in the game Nucleares, a nuclear reactor simulation game. This library provides a robust and type-safe way to interact with various reactor components and systems.
Features
- Enum-based parameter system for type safety and code clarity
- Support for various parameter types including floats, integers, booleans, strings, and custom enums
- Read and write capabilities for game parameters
- Custom truthy values for status enums to simplify conditional logic
- Dummy mode for testing without connecting to the game
- Batch operations for getting multiple parameters at once
Installation
To install NuCon, clone this repository and install via pip:
pip install -e .
Usage
Here's a basic example of how to use NuCon:
from nucon import Nucon, BreakerStatus
# Set the base URL for the game's API (if different from default)
Nucon.set_base_url("http://localhost:8080/")
# Enable dummy mode for testing (optional)
Nucon.set_dummy_mode(True)
# Read a parameter
core_temp = Nucon.CORE_TEMP.value
print(f"Core Temperature: {core_temp}")
# Read a parameter with an enum type
pump_status = Nucon.COOLANT_CORE_CIRCULATION_PUMP_0_STATUS.value
print(f"Pump 0 Status: {pump_status}")
# Write to a parameter
Nucon.GENERATOR_0_BREAKER.value = BreakerStatus.OPEN # or True
print(f"Generator 0 Breaker Status: {Nucon.GENERATOR_0_BREAKER.value}")
# Use custom truthy values
if Nucon.COOLANT_CORE_CIRCULATION_PUMP_0_STATUS.value:
print("Pump 0 is active")
API Reference
The Nucon enum contains all available parameters. Each parameter is defined with:
- An ID (string)
- A type (float, int, bool, str, or a custom Enum)
- A boolean indicating whether it's writable
Parameter properties:
Nucon.<PARAMETER>.value: Get or set the current value of the parameter. Assigning a new value will write it to the game.Nucon.<PARAMETER>.param_type: Get the type of the parameterNucon.<PARAMETER>.is_writable: Check if the parameter is writableNucon.<PARAMETER>.enum_type: Get the enum type of the parameter if it's an enum, otherwise None
Parameter methods:
Nucon.<PARAMETER>.read(): Get the current value of the parameter (alias forvalue)Nucon.<PARAMETER>.write(new_value, force=False): Write a new value to the parameter.forcewill try to write even if the parameter is known as non-writable.
Class methods:
Nucon.get(parameter): Get the value of a specific parameterNucon.set(parameter, value, force=False): Set the value of a specific parameterNucon.get_all_readable(): Get a list of all readable parameters (which is all parameters)Nucon.get_all_writable(): Get a list of all writable parametersNucon.get_all(): Get all parameter values as a dictionaryNucon.get_multiple(params): Get values for multiple specified parametersNucon.set_base_url(url): Set the base URL for the game's APINucon.set_dummy_mode(dummy_mode): Enable or disable dummy mode for testing
Custom Enum Types:
PumpStatus: Enum for pump status (INACTIVE, ACTIVE_NO_SPEED_REACHED, ACTIVE_SPEED_REACHED, REQUIRES_MAINTENANCE, NOT_INSTALLED, INSUFFICIENT_ENERGY)PumpDryStatus: Enum for pump dry status (ACTIVE_WITHOUT_FLUID, INACTIVE_OR_ACTIVE_WITH_FLUID)PumpOverloadStatus: Enum for pump overload status (ACTIVE_AND_OVERLOAD, INACTIVE_OR_ACTIVE_NO_OVERLOAD)BreakerStatus: Enum for breaker status (OPEN, CLOSED)
Testing
NuCon includes a test suite to verify its functionality and compatibility with the Nucleares game.
Running Tests
To run the tests:
- Ensure the Nucleares game is running and accessible at http://localhost:8080/ (or update the URL in the test setup).
- Install pytest:
pip install pytest - Run the tests:
pytest test/test.py
Test Coverage
The tests verify:
- Parameter types match their definitions in NuCon
- Writable parameters can be written to
- Non-writable parameters cannot be written to, even when force-writing
- Enum parameters and their custom truthy values behave correctly
Disclaimer
NuCon is an unofficial tool and is not affiliated with or endorsed by the creators of Nucleares.
Description
Python library to interface with and control Nucleares, a nuclear reactor simulation game. Includes gymnasium bindings for Reinforcement Learning and Model Learning.
2.7 MiB
Languages
Python
100%