1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//! A 2D environment simulator, that let's you define the behavior and the shape
//! of your entities, while taking care of dispatching events generation after
//! generation.
//!
//! # Overview
//! `semeion` is a library that was born out of the curiosity to see
//! how to abstract those few concepts that are, most of the times, shared
//! between very simple 2D games mostly focused on simulations, such as cellular
//! automata or zero-player games.
//!
//! When writing such games, it's usually standard practice to rely on already
//! existing game engines, which do a great job in abstracting the complexity of
//! the event loop, graphic rendering system, or assets management.
//! They all come in different flavors, but they mostly share the same concepts
//! when it comes to event handling: the *update* callback allows you to define
//! where the logic of your game will take place, and the *draw* callback allows
//! you to define where to render your entities; finally the third main component
//! takes care of the player's inputs.
//!
//! But besides the events handling, the graphics rendering system, or the assets
//! management, writing small games, especially when focusing on simulations
//! and similar, most often involves another type of abstraction: the entities
//! management system and related components.
//!
//! This is where `semeion` takes place: it's a basic framework that acts
//! orthogonally and independently from your game engine, and allows you to focus
//! on the behavior of your entities, while it takes care of managing them and
//! dispatching their events.
//!
//! With `semeion`, you can implement the generic [Entity](crate::Entity)
//! trait and define the behavior of your entities for each kind, and how they
//! will interact with each other according to their scope of influence,
//! location in the [Environment](crate::Environment), and lifetime.

pub use entity::*;
pub use env::*;
pub use error::*;
pub use math::*;
pub use space::*;

pub mod entity;
pub mod env;
pub mod error;
pub mod math;
pub mod space;