Add animation panel action planner
This commit is contained in:
@@ -163,6 +163,15 @@ void NodePanelAnimation::execute_animation_plan(const pp::app::DocumentAnimation
|
||||
LOG("Animation panel action failed: %s", status.message);
|
||||
}
|
||||
|
||||
pp::app::DocumentAnimationPanelState NodePanelAnimation::animation_panel_state() const
|
||||
{
|
||||
return pp::app::DocumentAnimationPanelState {
|
||||
.total_duration = Canvas::I->anim_duration(),
|
||||
.current_frame = Canvas::I->m_anim_frame,
|
||||
.playback_active = btn_play->is_active(),
|
||||
};
|
||||
}
|
||||
|
||||
void NodePanelAnimation::init_controls()
|
||||
{
|
||||
m_layers_container = find<NodeScroll>("layers");
|
||||
@@ -275,7 +284,10 @@ void NodePanelAnimation::init_controls()
|
||||
};
|
||||
|
||||
m_timeline->on_frame_changed = [this] (NodeAnimationTimeline* target, int frame) {
|
||||
const auto plan = pp::app::plan_animation_goto_frame(Canvas::I->anim_duration(), frame);
|
||||
const auto plan = pp::app::plan_animation_panel_action(
|
||||
pp::app::DocumentAnimationPanelAction::goto_frame,
|
||||
animation_panel_state(),
|
||||
frame);
|
||||
if (!plan)
|
||||
return;
|
||||
LOG("goto frame %d", plan.value().target_frame);
|
||||
@@ -283,19 +295,25 @@ void NodePanelAnimation::init_controls()
|
||||
};
|
||||
|
||||
btn_next->on_click = [this] (Node* target) {
|
||||
const auto plan = pp::app::plan_animation_step_frame(Canvas::I->anim_duration(), Canvas::I->m_anim_frame, 1);
|
||||
const auto plan = pp::app::plan_animation_panel_action(
|
||||
pp::app::DocumentAnimationPanelAction::next_frame,
|
||||
animation_panel_state());
|
||||
if (!plan)
|
||||
return;
|
||||
execute_animation_plan(plan.value());
|
||||
};
|
||||
btn_prev->on_click = [this](Node* target) {
|
||||
const auto plan = pp::app::plan_animation_step_frame(Canvas::I->anim_duration(), Canvas::I->m_anim_frame, -1);
|
||||
const auto plan = pp::app::plan_animation_panel_action(
|
||||
pp::app::DocumentAnimationPanelAction::previous_frame,
|
||||
animation_panel_state());
|
||||
if (!plan)
|
||||
return;
|
||||
execute_animation_plan(plan.value());
|
||||
};
|
||||
btn_play->on_click = [this] (Node*) {
|
||||
const auto plan = pp::app::plan_animation_playback_toggle(btn_play->is_active());
|
||||
const auto plan = pp::app::plan_animation_panel_action(
|
||||
pp::app::DocumentAnimationPanelAction::toggle_playback,
|
||||
animation_panel_state());
|
||||
if (plan)
|
||||
execute_animation_plan(plan.value());
|
||||
};
|
||||
@@ -364,10 +382,9 @@ void NodePanelAnimation::on_tick(float dt)
|
||||
if (m_playback_timer > (1.f / m_fps->get_float()))
|
||||
{
|
||||
m_playback_timer = 0;
|
||||
const auto plan = pp::app::plan_animation_playback_step(
|
||||
Canvas::I->anim_duration(),
|
||||
Canvas::I->m_anim_frame,
|
||||
1);
|
||||
const auto plan = pp::app::plan_animation_panel_action(
|
||||
pp::app::DocumentAnimationPanelAction::playback_step,
|
||||
animation_panel_state());
|
||||
if (plan)
|
||||
execute_animation_plan(plan.value());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user