package com.arretadogames.pilot.entities; public abstract class DashableEntity extends Entity implements Steppable { private final float TIME_WAITING_FOR_ACT; private final float DASH_EFFECT_DURATION; private float timeForNextAct = 0f; private float dashEffectTimeRemaining; public DashableEntity(float x, float y, float timeWaitingForAct, float actDuration) { super(x, y); this.TIME_WAITING_FOR_ACT = timeWaitingForAct; this.DASH_EFFECT_DURATION = actDuration; } public float getTimeForNextAct() { return timeForNextAct; } private void setTimeForNextAct(float timeForNextAct) { this.timeForNextAct = timeForNextAct; } public int getPercentageLeftToNextAct() { return Math.min((int)((((TIME_WAITING_FOR_ACT-timeForNextAct)/TIME_WAITING_FOR_ACT) * 100) + 0.000000001),100); } public void callAct() { if (timeForNextAct < 0.00000001) { if (dash()) { dashEffectTimeRemaining = DASH_EFFECT_DURATION; setTimeForNextAct(TIME_WAITING_FOR_ACT); } } } public boolean isDashActive() { return dashEffectTimeRemaining > 0; } @Override public void step(float timeElapsed) { setTimeForNextAct(Math.max(0.0f,getTimeForNextAct()-timeElapsed)); if (isDashActive()) { dashEffectTimeRemaining -= timeElapsed; } } /* Returns True if it was activated */ public abstract boolean dash(); }