EntityCoolSystem/src/ecs/component.cr

37 lines
903 B
Crystal

class ECS::Component
@entity : ECS::Entity
getter entity
def initialize(@entity)
end
macro generate_component(scope, name, **attrs)
class scope::{{name}} < ECS::Component
{% for attr_name, attr_default in attrs %}
@{{attr_name}} = {{attr_default}}
getter {{attr_name}}
{% end %}
def initialize(
@entity,
{% for attr_name, attr_default in attrs %}
@{{attr_name}},
{% end %}
)
end
end
end
# macro generate_resources(*names)
# {% for res_name in names %}
# generate_component {{res_name}}, amount: 0.0
# {% end %}
# end
# generate_component Name, label: "default_name"
# generate_component Coord3D, x: 0.0, y: 0.0, z: 0.0
# generate_component Coord2D, x: 0.0, y: 0.0
# generate_resources Metal1, Metal2, Metal3, Weapons, Shields, MineralRaw1, MineralRaw2
end