From ffb0fae9523a54f28e0405d18ebc557d022e6441 Mon Sep 17 00:00:00 2001 From: Ukendio Date: Sat, 3 Aug 2024 06:21:56 +0200 Subject: [PATCH] Add wildcards --- docs/api/world.md | 3 +-- examples/luau/queries/wildcards.luau | 37 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 examples/luau/queries/wildcards.luau diff --git a/docs/api/world.md b/docs/api/world.md index ed2edbd..8e3bb3e 100644 --- a/docs/api/world.md +++ b/docs/api/world.md @@ -42,8 +42,7 @@ local entity = world:entity() const entity = world.entity(); ``` -:: -: +::: ### component() ```luau diff --git a/examples/luau/queries/wildcards.luau b/examples/luau/queries/wildcards.luau new file mode 100644 index 0000000..87bef3d --- /dev/null +++ b/examples/luau/queries/wildcards.luau @@ -0,0 +1,37 @@ +local jecs = require("@jecs") +local pair = jecs.pair +local world = jecs.World.new() +local Name = world:component() + +local function named(ctr, name) + local e = ctr(world) + world:set(e, Name, name) + return e +end +local function name(e) + return world:get(e, Name) +end + +local Eats = world:component() +local Apples = named(world.entity, "Apples") +local Oranges = named(world.entity, "Oranges") + +local bob = named(world.entity, "Bob") +world:set(bob, pair(Eats, Apples), 10) + +local alice = named(world.entity, "Alice") +world:set(alice, pair(Eats, Oranges), 5) + +-- Aliasing the wildcard to symbols improves readability and ease of writing +local __ = jecs.Wildcard + +-- Create a query that matches edible components +for entity, amount in world:query(pair(Eats, __)) do + -- Iterate the query + local food = world:target(entity, Eats) + print(`{name(entity)} eats {amount} {name(food)}`) +end + +-- Output: +-- Alice eats 5 Oranges +-- Bob eats 10 Apples