# 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.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.0.0] - 2025 January 28

Initial release of the project.


## [1.1.0] - 2025 February 1

Fixes related to random noise generation.

### Added

- `NoiseGenerator.simplex`

### Removed

- `NoiseGenerator.perlin`


## [1.2.0] - 2025 February 12

Adds adjustable logs.

### Added

- `Log` class
- Log level option in animation toolbar.

## [1.3.0] - 2025 February 15

### Added

- `AgentSet.sortBy` method.
- `AgentSet.toArray` method.
- `AgentSet.slice` method.
- Genetic traits support generic arrays.

### Changed

- `AgentSet.randomSample` now returns `AgentSet<T>` instead of `T[]`.
- Runtime `renderLayers` now allow specific agent sets to be rendered.


## [1.4.0] - 2025 March 8

Adds GIS helpers such as Graphs, Geometry, and GeoLocation classes.

### Added

- `Color.setOpacity` method.
- `Render2D.drawPolygon` method.
- `Render2D.drawPolyline` method.
- `Geometry.convexHull` method.
- `Geometry.concaveHull` method.
- `GeoLocation` class.

### Fixed

- `Render2D.drawCircle` alignment offset issue.


## [1.5.0] - 2025 March 13

Overhauls the Graph class.

### Added

- New `Graph` class.
- `Geometry.Intersections.circleCircle` method.
- line width option for rendering primitives.
- `FixedQueue.asArray` method.

### Fixed

- `Cell.diffuse` now works as intended.


## [1.6.0] - 2026 February 25

Adds a GPU-accelerated WebGL 2.0 renderer as an alternative to the Canvas 2D renderer.

### Added

- `WebGL2D` class — WebGL 2.0 renderer using VAO/VBO batching and GLSL 300 es shaders.
  - `drawCellGrid` — renders the entire grid in a single draw call.
  - `drawAgentSet` — batched agent rendering grouped by shape style (≤3 draw calls per agent set).
  - `drawAgent` — single-agent draw fallback.
  - `drawCircle`, `drawRectangle`, `drawTriangle` — primitive drawing with optional fill, stroke, and rotation indicator.
  - `drawLine`, `drawPolygon`, `drawPolyline` — additional drawing primitives.
  - Alpha blending enabled by default.
- `AnimateWebGL2D` class — animation loop controller extending `WebGL2D`.
  - `play`, `pause`, `step`, `toggle`, `stepForward` methods.
  - Keyboard shortcuts: Space (play/pause), Enter (step).
  - FPS adjustable at runtime via custom events.
