Skip to content

Periodic effects repeat ticks before their cadence at large clocks #934

Description

DISCLOSURE: LLM-GENERATED TEXT

Native Unity 6000.4.6f1 controls reproduced periodic effects executing 32 ticks per pass at an unchanged large clock, including before their initial delay. This can apply repeated damage or healing without elapsed time. This is a follow-up to #932's duration deadline sweep.

Source: Runtime/Tags/PeriodicEffectRuntimeState.cs initializes NextTickTime with float startTime + initialDelay and advances it with float += interval. At 2^24 or float.MaxValue, an interval of 1 can round back to the same timestamp.

Reproduction through EffectHandler's existing deterministic clock hooks, with an Infinite owner, interval 1, and unlimited ticks:

  • Clock 100, delay 0: first pass 1 tick, repeated same-clock pass 0.
  • Clock 100, delay 1: both passes 0.
  • Clock 2^24 or float.MaxValue, delay 0 or 1: first pass 32, repeated same-clock pass 32. Delay 1 should produce zero before any elapsed time.

Fix the scheduler using elapsed time and a retained cadence offset, without relying on an absolute float deadline. Preserve inclusive due boundaries, minimum interval, bounded catch-up, maxTicks and per-handle ownership. Duration refresh/reapplication must retain the existing periodic phase; removing and applying a fresh handle must reset it. Keep public and serialized authoring fields unchanged.

Acceptance:

  1. Add deterministic red-green runtime-state and actual-handler controls for ordinary and large clocks, backward clocks, exact boundaries, finite overflow, nonfinite values and repeated same-clock passes.
  2. Preserve maxTicks, initial delay, interval clamp, catch-up cap, refresh/reapplication and reentrant removal behavior; sweep timing consumers.
  3. Pass full native periodic/effect fixtures and default, SINGLE_THREADED, Odin and legacy typechecks; complete current-head CI on all supported versions/modes.
  4. Update XML/feature docs and CHANGELOG. No timing or allocation claim without calibrated controls.

Provenance: session 348 PeriodicDeadlineProbe actual-handler native results, following commit 1bb4e4e in PR #933.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions