package com.uwsoft.editor.renderer.systems.action.logic; import com.badlogic.ashley.core.Entity; import com.uwsoft.editor.renderer.systems.action.data.TemporalData; /** * Created by ZeppLondon on 10/15/2015. */ public abstract class TemporalAction<T extends TemporalData> extends ActionLogic<T> { @Override public boolean act(float delta, Entity entity, T actionData) { if (actionData.complete) return true; if (!actionData.began) { begin(entity, actionData); actionData.began = true; } actionData.passedTime += delta; actionData.complete = actionData.passedTime >= actionData.duration; float percent; if (actionData.complete) { percent = 1; } else { percent = actionData.passedTime / actionData.duration; if (actionData.interpolation != null) percent = actionData.interpolation.apply(percent); } update(percent, entity, actionData); if (actionData.complete) end(entity, actionData); return actionData.complete; } abstract protected void update (float percent, Entity entity, T actionData); public void begin(Entity entity, T actionData) { } public void end(Entity entity, T actionData) { } }