# 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] - in planning

*Aim: 3 species, 2 crop growth models, farm model, GAEC scenarios, experimental analysis*

## [0.6.0] - in planning

*Plan: integrate multiple crop growth models, set up first experiments*

## [0.5.3] - in planning

*Plan: basic farm model (#16), decouple CairoMakie (#81)*


## [0.5.2] - unreleased

### Added

- Skylark model is largely rewritten to follow a new phase structure (#9)

- animals can occupy territories (see `@occupy`, `@isoccupied`, `@vacate` macros/functions) (#94)

- `@cropcover` macro and function

- scientific documentation for Skylark (will become ODD)

### Changed

- input files that are now copied to a separate `inputs` directory within the output directory

- `EventType` renamed to `Management` for clarity


### Deprecated

### Removed

- old skylark model (has been rewritten, see above)

### Fixed

- all skylarks now migrate (#90)

- `insectbiomass()` uses units

## [v0.5.1] - 13-06-2024

### Added

- Unitful.jl now used to add units to quantities

- `world.mapdirectory` parameter specifies the path to the directory in which
 `landcovermap`, `farmfieldsmap`, and `weatherfile` are located
 
- `world.mapresolution` parameter specifies the input maps' spatial resolution in meters
 
### Changed

- spatial functions now work with explicit distances (using Unitful.jl) rather than using
  the number of pixels

- all species definitions and tests updated to use units

## [v0.5.0] - 07-06-2024

This release doesn't add much new functionality, but represents a major restructuring 
of the code base. Specifically, it removes the Agents.jl dependency and changes the 
way the species definition macros work and are used.

### Added

- `SimulationModel` type, extended by `AgricultureModel` struct

- `@create` macro defines a special phase function that is called when an individual
  animal is created (at birth or on model initialisation)
  
- functions (and associated macros) to replace Agents.jl functionality:
  - `move!()` and `walk!()` 
  - `nearby_ids()`, `nearby_animals()`, `countanimals()`, `neighbours()`
  - `directionto()`, `distanceto()`, `randomdirection()`
  - `nagents()`, `killallanimals!()`

- `@here` macro to return the pixel currently occupied by the active animal

- `core.logoutput` parameter to define whether logs are printed to screen, file, none, or both

- large logo and model structure diagram

- Changelog

### Changed

- `SimulationModel` replaces `AgentBasedModel`

- Species definition macros revamped:
  - `@species` now only defines parameters and variables and creates a mutable struct
  - `@phase` must now be defined in the top-level code and creates a global function
  - `@initialise` renamed to `@populate`, must also be called in the top-level code
  - `initindividual()` renamed to `create!()`
  
- Skylark, Wolpertinger, and Wyvern updated to match the new macros

- requires Julia 1.10

### Removed

- Agents.jl dependency (including `AgentBasedModel` and functions for adding/moving/removing agents)


## [v0.4.1] - 2023-11-14

*Wrote tests for skylark migration -> made graphics output format configurable*

### Added

- initial version of the Skylark species

- small Jena map

- animal individuals keep track of their parents' IDs

- several new functions and macros for animals

- installation instructions for Windows

### Changed

- graphics output is more configurable


## [v0.4.0] - 2023-10-28

*Refactored makieplots.jl -> Wrote tests for skylark migration*


### Added

- initialisation functions for individuals (not just species)

- migration function / migrant pool for animals that disappear from the landscape during winter

- skylark migration

### Changed

- online documentation was expanded and restructured

- nature macros moved to a separate file


*Started changelog at this point, earlier versions are not included.*

<!-- Template

## [version] - unreleased

<comments>

### *PLANNED*

### Added

### Changed

### Deprecated

### Removed

### Fixed

-->