Action Over Time
v1.0
protected override IEnumerator ExecuteInternal()
{
// CRITICAL: Call base first
yield return base.ExecuteInternal();
// Get valid targets
var validTargets = GetValidLights(); // or GetValidTransforms(), etc.
// Handle restart vs fresh execution
List<Light> selectedTargets;
if (IsExecutorRestart)
selectedTargets = GetLastSelectedTargets(validTargets, l => l.GetInstanceID());
if (selectedTargets == null || selectedTargets.Count == 0)
selectedTargets = SelectTargets(validTargets, selectionMode, TargetCount);
SetLastSelectedTargets(selectedTargets, l => l.GetInstanceID());
// Animate each target over duration
float elapsed = 0f;
while (elapsed < duration)
{
float t = elapsed / duration;
float curveValue = valueCurve.Evaluate(t);
foreach (var target in selectedTargets.Where(t => t != null))
{
// Apply animation using curveValue
}
elapsed += Executor.Clock.DeltaTime;
yield return null;
}
}What to override
Execution lifecycle (typical)
Critical Rules
Minimal Example Template
Common mistakes (and how to avoid them)
Last updated