实体与组件
最后更新于
for e: entity_iterator() {
// ...
}sprite := entity.get_component(Sprite_Renderer);
player := entity.get_component(Player);
my_comp := entity.add_component(My_Component);for enemy: component_iterator(Enemy) {
enemy.tick_ai();
}texture := get_asset(Texture_Asset, "ui/button.png");
sprite := entity.get_component(Sprite_Renderer);
sprite.set_texture(texture);
sprite.color = {1, 1, 1, 1}; // RGBA
sprite.depth_offset = 0.5;
sprite.layer = 10;
// 可选:使用自定义材质。如果渲染器应拥有它,则传入 true。
// sprite.set_material(material, true);prefab := get_asset(Prefab_Asset, "MyPrefab.prefab");
spawned := Scene.instantiate(prefab);
spawned.set_local_position({1, 3});Orbiter :: class : Component {
center: v2;
radius: float;
speed: float;
angle: float;
ao_start :: method() {
center = entity.local_position;
radius = 2;
speed = 1;
angle = 0;
}
ao_update :: method(dt: float) {
angle += speed * dt;
offset_x := cos(angle) * radius;
offset_y := sin(angle) * radius;
entity.set_local_position({center.x + offset_x, center.y + offset_y});
}
}Chest :: class : Component {
capacity: int @ao_serialize;
}Scene.get_all_components_in_range :: proc(position: v2, range: float, results: ref [..]$T)
Scene.get_closest_component_in_range :: proc(position: v2, range: float, $T: typeid) -> T, boolnearby: [..]Enemy;
Scene.get_all_components_in_range(player.entity.world_position, 5.0, ref nearby);
for e: nearby {
// ...
}
closest_pickup, found := Scene.get_closest_component_in_range(player.entity.world_position, 2.0, Pickup);
if found {
// ...
}