37 lines
903 B
Crystal
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
|
|
|