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 NESTED_PREFABS_H
#define NESTED_PREFABS_H
/* This generated file contains includes for project dependencies */
#include "nested_prefabs/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 NESTED_PREFABS_BAKE_CONFIG_H
#define NESTED_PREFABS_BAKE_CONFIG_H
/* Headers of public dependencies */
#include <flecs.h>
#endif

View File

@@ -0,0 +1,11 @@
{
"id": "nested_prefabs",
"type": "application",
"value": {
"use": [
"flecs"
],
"language": "c++",
"public": false
}
}

View File

@@ -0,0 +1,61 @@
#include <nested_prefabs.h>
#include <iostream>
// Nested prefabs make it possible to reuse an existing prefab inside another
// prefab. An example of where this could be useful is a car with four wheels:
// instead of defining four times what a wheel is a Car prefab can reference an
// existing Wheel prefab.
//
// Nested prefabs can be created by adding a child that is a variant (inherits
// from) another prefab. For more information on variants, see the variants
// example.
//
// Instantiated children from a nested prefab still inherit from the original
// prefab. The reason for this is that an instantiated child is an exact copy
// of the prefab child, and the prefab child only has an IsA relationship to the
// nested prefab.
//
// This example shows how auto overriding (see the auto override example) can be
// used to give instantiated children from a nested prefab a private copy of an
// inherited component.
struct TirePressure {
double value;
};
int main() {
flecs::world ecs;
// Create a Wheel prefab, make sure each instantiated wheel has a private
// copy of the TirePressure component.
flecs::entity Wheel = ecs.prefab("Wheel")
.set_override<TirePressure>({ 32 });
// Create a Car prefab with four wheels. Note how we're using the scope
// method, which has the same effect as adding the (ChildOf, Car) pair.
flecs::entity Car = ecs.prefab("Car").scope([&]{
ecs.prefab("FrontLeft").is_a(Wheel);
ecs.prefab("FrontRight").is_a(Wheel);
ecs.prefab("BackLeft").is_a(Wheel);
ecs.prefab("BackRight").is_a(Wheel);
});
// Create a prefab instance.
flecs::entity inst = ecs.entity("my_car").is_a(Car);
// Lookup one of the wheels
flecs::entity inst_front_left = inst.lookup("FrontLeft");
// The type shows that the child has a private copy of the TirePressure
// component, and an IsA relationship to the Wheel prefab.
std::cout << "type: [" << inst_front_left.type().str() << "]\n";
// Get the TirePressure component & print its value
inst_front_left.get([](const TirePressure p) {
std::cout << "pressure: " << p.value << "\n";
});
// Output:
// type: [TirePressure, (Identifier,Name), (ChildOf,my_car), (IsA,Wheel)]
// pressure: 32
}