Skip to content

Task-Implement EngineSystem contract and FrameClock #11

@learncold

Description

@learncold

Summary

EngineSystem abstract base class로 시스템 contract를 정의하고, FrameClock으로 fixed-timestep 게임 루프 타이밍을 구현한다. FrameClock은 프레임 간 시간을 누적해 고정 스텝 수를 계산하고, 렌더링 보간을 위한 alpha 값을 제공한다.

Parent Issue

#1

Area

Engine

Target Sprint

Sprint 1

Scope

  • EngineSystem: configure(EngineWorld&) (선택적)와 update(EngineWorld&, const EngineStepContext&) (순수 가상)로 구성된 시스템 contract
  • EngineWorld: EngineSystem 계약이 컴파일되기 위한 최소 플레이스홀더 정의 — query(), resources(), commands() wiring은 Task-Implement EngineRuntime minimal orchestration API #12 범위
  • FrameClock: fixed-timestep 누산기
    • beginFrame(double deltaSeconds): delta time 누적, maxCatchUpSteps 초과분 clamp
    • shouldRunFixedStep() / consumeFixedStep(): 고정 스텝 소비 인터페이스
    • alpha(): 렌더링 보간 계수 (0.0 ~ 1.0) 반환
    • reset(): 누산기 초기화
  • FrameClockTests: 잔여 시간 누적, catch-up 스텝 상한 검증

Acceptance Criteria

  • beginFrame() 호출 후 pendingFixedSteps()가 올바른 스텝 수를 반환한다
  • maxCatchUpSteps를 초과하는 delta가 들어와도 스텝 수가 상한으로 제한된다
  • consumeFixedStep()alpha()가 잔여 누산 시간 기준 보간 계수를 반환한다
  • EngineSystem::update()가 순수 가상으로 서브클래스에 구현을 강제한다

Architecture / Dependency Check

  • 구현 파일은 src/engine 안에만 둔다
  • engine이 domain 또는 application을 include하지 않는다
  • Qt 코드를 포함하지 않는다
  • include 경로는 engine/... 기준을 유지한다

Verification Plan

  • cmake --preset windows-debug-no-app
  • cmake --build --preset build-no-app-debug
  • ctest --preset test-no-app-debug
  • FrameClockTests 전체 통과

Dependencies / Blockers

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions