Asciin.py 0.1.7
Featherweight 3D / 2D Ascii console game engine for Python 2.7+ with no external dependencies and in pure Python.
License: MIT
Requires Python: >=2.7

[![pipenv](https://img.shields.io/pypi/pyversions/Asciin.py.svg)](https://www.python.org/)
[![release](https://img.shields.io/pypi/v/Asciin.py.svg)](https://pypi.org/project/Asciin.py/)
![platform](https://img.shields.io/static/v1?label=platforms&message=Windows+|+Linux+|+OSX&color=informational)
[![documentation status](https://readthedocs.org/projects/asciinpy/badge/?version=latest)](https://asciinpy.readthedocs.io/en/latest/?badge=latest)

# Asciin.py

![logo](https://raw.githubusercontent.com/Rickaym/Asciin.py/main/assets/inverted_logo.png)

A 2D and 3D Ascii game engine written for performance (still under development).

---

**[ReadTheDocs](https://asciinpy.readthedocs.io/en/latest/)** | **[PyPi Project](https://pypi.org/project/Asciin.py/)** |
**[Github Repo](https://github.com/Rickaym/Asciin.py)** |
**[Dev server](https://discord.gg/UmnzdPgn6g)**

---

### Status Demo

1. **Matrixes Patterns**
   <br> An example in working with PixelPainters.

![demo](https://raw.githubusercontent.com/Rickaym/Asciin.py/main/assets/LuckyDevStuff_render.gif)

Credits to LuckyDevStuff for the examples ~

More examples [here](https://github.com/Rickaym/Asciin.py/tree/main/examples/).

### Installing

**Python 2.7 or higher is required**

```js
// Windows
py -m pip install -U asciin.py

// Linux/macOS
python -m pip install -U asciin.py
```

### Quick Start

1. Instantiate a `Asciinpy.Window` class with the desired values.

2. Define your game loop and decorate it with the `Asciinpy.Window.loop` decorator that should accept one parameter of type `Displayable`.

3. Write some fancy code with or without built-in models to render.

4. Call the `Asciinpy.Window.run` method!

```py
from Asciinpy import Displayable, Window, Resolutions
from Asciinpy._2D import Square
# Define a window

window = Window(resolution=Resolutions._60c)

@window.loop()
def game_loop(screen): # type: (Displayable) -> None
   coordinate = (0, 0)
   length = 8
   texture = "%"
   Square = Square(coordinate, length, texture)
   while True:
      screen.blit(Square)
      screen.refresh()

window.run()
```

Contact me at Neo#1844 for inquiries.
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

The changelog only keeps track of updates post version **0.1.4**

## [0.1.6] - 2021-08-13

### Notes

- This is the last update until major release `0.2`, which is expected to feature 3D elements at first hand and a more concrete structure definition, although there are possibilities of bug fixing releases before it.

### Added

- Concept and Classes on `Line`, made up of two sets of points
- Concept and Classes on `Triangle`, only made possible on derivation of the `Line` class
- Birth of `amath` module in the general scope
- Concept and Classes on `Matrix`, the genesis of all 3D objects and concepts for the future ;) supports all operable actions with and on itself and other compatible types
- An installable extension package which is a code interpolator that condenses any post version **0.1.4** distributions of the library into one singular `.py` file that can be shipped off readily. The condensed python contains version information, resolved relative dependencies, system dependencies and licenses as well ~ it will also support the submodule importing syntax e.g. `from Asciinpy.twod import Plane`; as it makes-up classes under the namespace of the sub packages with their contents defined.

### Changed

- Objects are now appropriately categorized onto their respective sub-packages (`_2D` and `_3D`)if said dimensions are an integral part of differientiating and using them ~ objects lower than 2D are put in the general scope, this is for example why `utils` and `amath` aren't categorized into dimensions.
- 2D specific models are now subclassed under `Plane` which is a renamed class of version _0.1.4_ `Model` ~ while the 3D base model class is named `Model`.