Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
3.2 kB
6
Indexable
Never
using System.Collections;
using System.Collections.Generic;
using Unity.MLAgents;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
using UnityEngine;
//playeragent without status 
public class PlayerAgent : Agent
{
    public enum PenaltyStyle
    {
        Reward,
        Termination
    }

    public int lives;
    public int playerscore;
    private Rigidbody2D rb2d;
    private SpriteRenderer sr;

    public GameManager manager;
    public PenaltyStyle penaltyStyle;
    public float dmg;
    public int phaseReached;
    public Player _playerScript;
    public PlayerStatus status;
    public UIManager _uiManager;

    // Start is called before the first frame update
    void Start()
    {
        lives = _playerScript.lives;
        playerscore = _uiManager.score;
        phaseReached = manager.phase;

        Application.runInBackground = true;

        rb2d = GetComponent<Rigidbody2D>();
        sr = GetComponent<SpriteRenderer>();
        Debug.Log("player agent has been called");
        _playerScript = GetComponent<Player>(); // Ensure this is correctly assigned

    }
    public override void OnEpisodeBegin()
    {
        // When comparing agent configurations, it's best to have performance meausures that aren't 
        // swayed by the reward setup used. You can use Academy.Instance.StatsRecorder.Add() to add
        // extra data to TensorBoard.
        if (phaseReached != -1)
        {
            Academy.Instance.StatsRecorder.Add("Phase Reached", phaseReached);
            Academy.Instance.StatsRecorder.Add("player Score", playerscore);
        }

        dmg = 0;
        manager.newGame();
    }




     public void HandlePhaseAdvance()
     {
           Debug.LogError("phase" + phaseReached);
           AddReward(1.0f);
    }

    public void HandleDamage()
    {
        dmg++;

        if (penaltyStyle == PenaltyStyle.Reward)
        {
            AddReward(dmg);
        }
        else
        {
            EndEpisode();
        }
    }



    public override void CollectObservations(VectorSensor sensor)
    {
        sensor.AddObservation(transform.position.x);
        sensor.AddObservation(transform.position.y);
        sensor.AddObservation(transform.rotation);
    }

    public override void OnActionReceived(ActionBuffers actionBuffers)
    {
        int action_chosen = actionBuffers.DiscreteActions[0];
       // Debug.Log("Action chosen = " + action_chosen + ", " + actionBuffers.DiscreteActions[1]);
      //  Debug.LogError("player score: " + playerscore);
      //  Debug.LogError("player lives: " + lives);
       // Debug.LogError("phase reached " + phaseReached);
        int rotate = actionBuffers.DiscreteActions[0];
        int strafe = actionBuffers.DiscreteActions[1];
        _playerScript.Movement_V1(rotate, strafe);
    }

    public override void Heuristic(in ActionBuffers actionsOut)
    {
        var actions = actionsOut.DiscreteActions;
        //Debug.Log("actions: " + actions[0] + " " + actions[1]);
    }

    private void Update()
    {
        //playerscore++;
    }
}

Leave a Comment