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); }