public override void AgentAction(float[] vectorAction, string textAction) { bool[] inputs = new bool[4]; for (int i = 0; i < 4; i++) { inputs[i] = vectorAction[i] > 0f && vectorAction[i] <= 1f; } Catapult.Controls(inputs, Catapult.leftSide ? 1 : 2); //SetReward(0.1f); //reward -= (previousNoOfDead - MyPop.noOfDead) * 1f/maxStep; foreach (Vector2 explosion in explosions) { if (OtherPop.bounds.Contains(explosion)) { SetReward(0.3f); } //else //reward -= 3f / maxStep; } //reward -= noOfOutPlayingArea * 3f / maxStep; if (Time.timeScale < 5) { Monitor.SetActive(true); Monitor.Log("Reward", GetReward() * 10, MonitorType.slider, transform); Monitor.Log("Deads", MyPop.noOfDead / 10f, MonitorType.slider, transform); Monitor.Log("Flying", flyingBodies.Count / 10f, MonitorType.slider, transform); } if (MyPop.noOfDead == 0 && Catapult.NoOfLoadedBodies == 0 && flyingBodies.Count == 0) { Done(); } previousNoOfDead = MyPop.noOfDead; explosions.Clear(); noOfOutPlayingArea = 0; }