public void Step(int maxSteps)
        {
            step += 1;
            var newPosition       = unityAgent.transform.localPosition;
            var newRotation       = unityAgent.body.rotation.eulerAngles;
            var newVelocity       = unityAgent.body.velocity;
            var newTargetPosition = target.localPosition;
            var isInsideArea      = FlyingArea.IsInsideArea(area);

            agent = FlyingAgent.Update(agent, newPosition, newTargetPosition, newRotation, velocity: newVelocity,
                                       speed: moveSpeed);
            area = FlyingArea.Update(area, agent, newTargetPosition, isInsideArea);

            if (!isInsideArea)
            {
                AgentOutsideArea(maxSteps);
            }
            if (isInsideArea)
            {
                AgentInsideArea(maxSteps);
            }
            if (AgentOutOfBounds())
            {
                AgentFail();
            }
            if (step > maxSteps)
            {
                TimeUp();
            }

            AgentStep(maxSteps);
        }
        private void Initialize()
        {
            step = 0;
            stepsInsideTarget = 0;
            levelParameters   = LevelParameters.Create(100, 30f, 1f);

            var initialPosition = spawnPosition.localPosition;
            var targetPosition  = target.localPosition;

            agent = FlyingAgent.Create(initialPosition, target: targetPosition, speed: moveSpeed);
            area  = FlyingArea.Create(agent, targetPosition, doneReward: 2f, failReward: -2f);
            ResetUnityEntities(initialPosition, targetPosition);
        }
        private void Reset(bool changeTargetPosition = false)
        {
            step = 0;
            stepsInsideTarget = 0;
            var initialPosition     = spawnPosition.localPosition;
            var targetLocalPosition = target.localPosition;
            var targetPosition      = changeTargetPosition
                ? GenerateNewTargetPosition(initialPosition)
                : targetLocalPosition;

            agent = FlyingAgent.Update(agent, initialPosition, targetPosition);
            area  = FlyingArea.Update(area, agent, targetPosition);
            ResetUnityEntities(initialPosition, targetPosition);
        }