|
|
@ -95,6 +95,9 @@ pub fn Entity(comptime ctx: anytype) type { |
|
|
|
var name = config.name; |
|
|
|
var name = config.name; |
|
|
|
var scope = if (config.parent) |p| p.raw else null; |
|
|
|
var scope = if (config.parent) |p| p.raw else null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: Use an allocator that's well-fitted for super short-lived allocations. |
|
|
|
|
|
|
|
const alloc = flecs.allocator; |
|
|
|
|
|
|
|
|
|
|
|
if (config.path) |path| { |
|
|
|
if (config.path) |path| { |
|
|
|
if (path.absolute) { |
|
|
|
if (path.absolute) { |
|
|
|
// Specifying parent with an absolute path is invalid. |
|
|
|
// Specifying parent with an absolute path is invalid. |
|
|
@ -128,9 +131,8 @@ pub fn Entity(comptime ctx: anytype) type { |
|
|
|
scope = found; |
|
|
|
scope = found; |
|
|
|
}, |
|
|
|
}, |
|
|
|
.name => |n| { |
|
|
|
.name => |n| { |
|
|
|
// TODO: Use an allocator that's well-fitted for super short-lived allocations. |
|
|
|
const nameZ = try alloc.dupeZ(u8, n); |
|
|
|
const nameZ = try flecs.allocator.dupeZ(u8, n); |
|
|
|
defer alloc.free(nameZ); |
|
|
|
defer flecs.allocator.free(nameZ); |
|
|
|
|
|
|
|
const found = c.ecs_lookup_child(world.raw, parent, nameZ.ptr); |
|
|
|
const found = c.ecs_lookup_child(world.raw, parent, nameZ.ptr); |
|
|
|
if (found == 0) { |
|
|
|
if (found == 0) { |
|
|
|
var desc = std.mem.zeroInit(c.ecs_entity_desc_t, .{ .sep = "".ptr, .name = nameZ.ptr }); |
|
|
|
var desc = std.mem.zeroInit(c.ecs_entity_desc_t, .{ .sep = "".ptr, .name = nameZ.ptr }); |
|
|
@ -148,11 +150,10 @@ pub fn Entity(comptime ctx: anytype) type { |
|
|
|
const previous = if (scope) |s| world.setScope(s) else null; |
|
|
|
const previous = if (scope) |s| world.setScope(s) else null; |
|
|
|
defer _ = if (scope != null) world.setScope(previous); |
|
|
|
defer _ = if (scope != null) world.setScope(previous); |
|
|
|
|
|
|
|
|
|
|
|
// TODO: Use an allocator that's well-fitted for super short-lived allocations. |
|
|
|
const nameZ = if (name) |n| try alloc.dupeZ(u8, n) else null; |
|
|
|
const nameZ = if (name) |n| try flecs.allocator.dupeZ(u8, n) else null; |
|
|
|
defer if (nameZ) |n| alloc.free(n); |
|
|
|
defer if (nameZ) |n| flecs.allocator.free(n); |
|
|
|
const symbolZ = if (config.symbol) |s| try alloc.dupeZ(u8, s) else null; |
|
|
|
const symbolZ = if (config.symbol) |s| try flecs.allocator.dupeZ(u8, s) else null; |
|
|
|
defer if (symbolZ) |s| alloc.free(s); |
|
|
|
defer if (symbolZ) |s| flecs.allocator.free(s); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var desc = std.mem.zeroInit(c.ecs_entity_desc_t, .{ |
|
|
|
var desc = std.mem.zeroInit(c.ecs_entity_desc_t, .{ |
|
|
|
.sep = "".ptr, // Disable tokenization. |
|
|
|
.sep = "".ptr, // Disable tokenization. |
|
|
@ -231,23 +232,33 @@ pub fn Entity(comptime ctx: anytype) type { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// Gets the name of this `Entity`, or `null` if none. |
|
|
|
/// Gets the name of this `Entity`, or `null` if none. |
|
|
|
|
|
|
|
/// |
|
|
|
|
|
|
|
/// The returned string is owned by Flecs and may only be valid while |
|
|
|
|
|
|
|
/// the entity is alive and its name doesn't change. |
|
|
|
pub fn getName(self: Self) ?[:0]const u8 { |
|
|
|
pub fn getName(self: Self) ?[:0]const u8 { |
|
|
|
const result = c.ecs_get_name(self.world.raw, self.raw); |
|
|
|
const result = c.ecs_get_name(self.world.raw, self.raw); |
|
|
|
return std.mem.sliceTo(result, 0); |
|
|
|
return std.mem.sliceTo(result, 0); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// Gets the symbol of this `Entity`, or `null` if none. |
|
|
|
/// Gets the symbol of this `Entity`, or `null` if none. |
|
|
|
|
|
|
|
/// |
|
|
|
|
|
|
|
/// The returned string is owned by Flecs and may only be valid while |
|
|
|
|
|
|
|
/// the entity is alive and its symbol doesn't change. |
|
|
|
pub fn getSymbol(self: Self) ?[:0]const u8 { |
|
|
|
pub fn getSymbol(self: Self) ?[:0]const u8 { |
|
|
|
const result = c.ecs_get_symbol(self.world.raw, self.raw); |
|
|
|
const result = c.ecs_get_symbol(self.world.raw, self.raw); |
|
|
|
return std.mem.sliceTo(result, 0); |
|
|
|
return std.mem.sliceTo(result, 0); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// Sets the name of this `Entity` to the specified value, if any. |
|
|
|
/// Sets the name of this `Entity` to the specified value, if any. |
|
|
|
|
|
|
|
/// |
|
|
|
|
|
|
|
/// Flecs does not take ownership of the provided value. |
|
|
|
pub fn setName(self: Self, value: ?[*:0]const u8) void { |
|
|
|
pub fn setName(self: Self, value: ?[*:0]const u8) void { |
|
|
|
_ = c.ecs_set_name(self.world.raw, self.raw, value); |
|
|
|
_ = c.ecs_set_name(self.world.raw, self.raw, value); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// Sets the symbol of this `Entity` to the specified value, if any. |
|
|
|
/// Sets the symbol of this `Entity` to the specified value, if any. |
|
|
|
|
|
|
|
/// |
|
|
|
|
|
|
|
/// Flecs does not take ownership of the provided value. |
|
|
|
pub fn setSymbol(self: Self, value: ?[*:0]const u8) void { |
|
|
|
pub fn setSymbol(self: Self, value: ?[*:0]const u8) void { |
|
|
|
_ = c.ecs_set_symbol(self.world.raw, self.raw, value); |
|
|
|
_ = c.ecs_set_symbol(self.world.raw, self.raw, value); |
|
|
|
} |
|
|
|
} |
|
|
|