Эффекты
Активные и пассивные
Быстрый старт (простой эффект с таймером)
Apple_Pop_Effect :: class : Effect_Base {
sprite: Sprite_Renderer;
start_scale: v2;
start_pos: v2;
effect_start :: method() {
sprite = entity->get_component(Sprite_Renderer);
start_scale = entity.local_scale;
start_pos = entity.local_position;
set_duration(0.4); // автоматически удаляется через 0.4 с
}
effect_update :: method(dt: float) {
t := get_elapsed_time() / 0.4;
// Увеличить, а затем уменьшить до нуля
scale_curve: float;
if t < 0.3 {
scale_curve = lerp(1.0, 1.3, Ease.out_back(t / 0.3));
} else {
scale_curve = lerp(1.3, 0.0, Ease.in_back((t - 0.3) / 0.7));
}
entity->set_local_scale(start_scale * scale_curve);
// Немного подняться вверх
rise := Ease.out_quad(t) * 0.5;
entity->set_local_position({start_pos.x, start_pos.y + rise});
// Исчезнуть ближе к концу
if sprite != null {
alpha := 1.0 - Ease.in_quad(max(0.0, (t - 0.5) / 0.5));
sprite.color.w = alpha;
}
}
effect_end :: method(interrupt: bool) {
// Очистить всё, когда закончено (или прервано)
entity->destroy();
}
}Жизненный цикл эффекта
Активные эффекты (исключительный контроль)
Пассивные эффекты (стекающиеся баффы / статус)
Справочник API
Effect_Base
Effect_BaseПрименение / удаление эффектов
Проверка / итерация по эффектам
freeze_player vs disable_movement_inputs
freeze_player vs disable_movement_inputsПримеры эффектов
Рывок / перекат (активный эффект)
Окно неуязвимости (пассивный эффект)
Увеличение в 2 раза на несколько секунд (пассивный эффект)
Последовательность смерти / возрождения (активный эффект с локальным UI)
Блокировка кат-сцены (активный эффект)
Лучшие практики
Последнее обновление