Properly link flecs library

This commit is contained in:
2023-11-09 11:38:29 +01:00
parent dc585396c3
commit 8edcf9305c
1392 changed files with 390081 additions and 164 deletions

View File

@@ -0,0 +1,16 @@
#ifndef MUTATE_ENTITY_H
#define MUTATE_ENTITY_H
/* This generated file contains includes for project dependencies */
#include "mutate_entity/bake_config.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,24 @@
/*
)
(.)
.|.
| |
_.--| |--._
.-'; ;`-'& ; `&.
\ & ; & &_/
|"""---...---"""|
\ | | | | | | | /
`---.|.|.|.---'
* This file is generated by bake.lang.c for your convenience. Headers of
* dependencies will automatically show up in this file. Include bake_config.h
* in your main project file. Do not edit! */
#ifndef MUTATE_ENTITY_BAKE_CONFIG_H
#define MUTATE_ENTITY_BAKE_CONFIG_H
/* Headers of public dependencies */
#include <flecs.h>
#endif

View File

@@ -0,0 +1,10 @@
{
"id": "mutate_entity",
"type": "application",
"value": {
"use": [
"flecs"
],
"public": false
}
}

View File

@@ -0,0 +1,83 @@
#include <mutate_entity.h>
#include <stdio.h>
typedef struct {
double value;
} Timeout;
// System that deletes an entity after a timeout expires
void Expire(ecs_iter_t *it) {
Timeout *t = ecs_field(it, Timeout, 1);
for (int i = 0; i < it->count; i ++) {
t[i].value -= (double)it->delta_time;
if (t[i].value <= 0) {
// When deleting the entity, use the world provided by the iterator.
// To make sure that the storage doesn't change while a system is
// iterating entities, and multiple threads can safely access the
// data, mutations (like a delete) are added to a command queue and
// executed when it's safe to do so.
// A system should not use the world pointer that is provided by the
// ecs_init function, as this will throw an error that the world is
// in readonly mode (try replacing it->world with it->real_world).
ecs_delete(it->world, it->entities[i]);
printf("Expire: %s deleted!\n", ecs_get_name(
it->world, it->entities[i]));
}
}
}
// System that prints remaining expiry time
void PrintExpire(ecs_iter_t *it) {
Timeout *t = ecs_field(it, Timeout, 1);
for (int i = 0; i < it->count; i ++) {
printf("PrintExpire: %s has %.2f seconds left\n", ecs_get_name(
it->world, it->entities[i]), t[i].value);
}
}
// Observer that triggers when the component is actually removed
void Expired(ecs_iter_t *it) {
for (int i = 0; i < it->count; i ++) {
printf("Expired: %s actually deleted\n", ecs_get_name(
it->world, it->entities[i]));
}
}
int main(int argc, char *argv[]) {
ecs_world_t *world = ecs_init_w_args(argc, argv);
ECS_COMPONENT(world, Timeout);
ECS_SYSTEM(world, Expire, EcsOnUpdate, Timeout);
ECS_SYSTEM(world, PrintExpire, EcsOnUpdate, [in] Timeout);
ECS_OBSERVER(world, Expired, EcsOnRemove, Timeout);
// Create entity that expires after 3 seconds
ecs_entity_t e = ecs_set_name(world, 0, "MyEntity");
ecs_set(world, e, Timeout, { 3.0 });
ecs_set_target_fps(world, 1);
while ( ecs_progress(world, 0)) {
// If entity is no longer alive, exit
if (!ecs_is_alive(world, e)) {
break;
}
printf("Tick...\n");
}
// Output:
// PrintExpire: MyEntity has 2.00 seconds left
// Tick...
// PrintExpire: MyEntity has 0.98 seconds left
// Tick...
// Expire: MyEntity deleted!
// PrintExpire: MyEntity has -0.02 seconds left
// Expired: MyEntity actually deleted
return ecs_fini(world);
}