using UnityEngine; namespace SepCore.Simulation { public interface ISimulationWorld { SimulationStats Stats { get; } void Tick(in SimulationTickContext context); void ClearSimulationState(); bool TryGetNearestEnemyEntityId(Vector3 origin, float maxSqrRange, out int enemyEntityId); bool TryRequestAreaCollision(int sourceEntityId, int sourceOwnerEntityId, in Vector3 center, float radius, int maxTargets = 16); bool TryRequestSectorCollision(int sourceEntityId, int sourceOwnerEntityId, in Vector3 center, float radius, in Vector3 direction, float halfAngleDeg, int maxTargets = 16); bool TryRequestRectangleCollision(int sourceEntityId, int sourceOwnerEntityId, in Vector3 center, float halfWidth, float halfLength, in Vector3 direction, int maxTargets = 16); void SyncPlayerMovementInput(Transform playerTransform, bool isMoving, in Vector3 direction, float speed); void UnregisterPlayerMovement(Transform playerTransform); void SyncEnemyMovementInput(int entityId, bool isMoving, in Vector3 direction, float speed, bool avoidEnemyOverlap, float enemyBodyRadius, int separationIterations); void SyncPlayerAbsorbSettings(float absorbRange, float absorbSpeed, float collectDistance); void TriggerFullMapMagnet(); } }