#entity-component #projects #performance

enco

A simple entity-component library (not an ECS library!) for small projects

5 releases

0.1.4 Sep 30, 2022
0.1.3 Sep 29, 2022
0.1.2 Sep 29, 2022
0.1.1 Sep 29, 2022
0.1.0 Sep 29, 2022

#1471 in Game dev

MIT license

11KB
162 lines

ENCO (ENtities and COmponents)

This is a very simple library for managing entities and components. This is not an entity component system (ECS) library.

ENCO was designed with simplicity in mind and should not be used in projects where performance is critical.

Having said that, it is very straightforward to use.

Basic usage

Entities live in a World, which serves as an api for modifying them.

Entities can be given components, which can be of any type.

use enco::world::*;

// Defining the components

struct PositionComponent {
  x: i32,
  y: i32,
}

struct TagComponent {
  tag: String
}

// Creating a world

let mut world = World::new();

// Creating entities

let entity_id = world
         .create_entity()
         .with(PositionComponent{x: 0, y: 0})
         .with(TagComponent{tag: "First entity".to_string()})
         .done();

// Entity components can be accessed through the entity id

let tag_component = world
    .get_entity_component::<TagComponent>(&entity_id)
    .unwrap();

// Entity components can be deleted

let tag_component = world
    .delete_entity_component::<TagComponent>(&entity_id)
    .unwrap();

// Entities themselves can be deleted

world.delete_entity(&entity_id).unwrap();

No runtime deps