public void TestRegisteredAgentGroupId()
        {
            var agentGo = new GameObject("TestAgent");

            agentGo.AddComponent <TestAgent>();
            var agent = agentGo.GetComponent <TestAgent>();

            // test register
            SimpleMultiAgentGroup agentGroup1 = new SimpleMultiAgentGroup();

            agentGroup1.RegisterAgent(agent);
            Assert.AreEqual(agentGroup1.GetId(), agent._GroupId);
            Assert.IsNotNull(agent._OnAgentDisabledActions);

            // should not be able to registered to multiple groups
            SimpleMultiAgentGroup agentGroup2 = new SimpleMultiAgentGroup();

            Assert.Throws <UnityAgentsException>(
                () => agentGroup2.RegisterAgent(agent));
            Assert.AreEqual(agentGroup1.GetId(), agent._GroupId);

            // test unregister
            agentGroup1.UnregisterAgent(agent);
            Assert.AreEqual(0, agent._GroupId);
            Assert.IsNull(agent._OnAgentDisabledActions);

            // test register to another group after unregister
            agentGroup2.RegisterAgent(agent);
            Assert.AreEqual(agentGroup2.GetId(), agent._GroupId);
            Assert.IsNotNull(agent._OnAgentDisabledActions);
        }
示例#2
0
 void Start()
 {
     // Get the ground's bounds
     areaBounds = ground.GetComponent <Collider>().bounds;
     // Get the ground renderer so we can change the material when a goal is scored
     m_GroundRenderer = ground.GetComponent <Renderer>();
     // Starting material
     m_GroundMaterial    = m_GroundRenderer.material;
     m_PushBlockSettings = FindObjectOfType <PushBlockSettings>();
     // Initialize Blocks
     foreach (var item in BlocksList)
     {
         item.StartingPos = item.T.transform.position;
         item.StartingRot = item.T.transform.rotation;
         item.Rb          = item.T.GetComponent <Rigidbody>();
     }
     // Initialize TeamManager
     m_AgentGroup = new SimpleMultiAgentGroup();
     foreach (var item in AgentsList)
     {
         item.StartingPos = item.Agent.transform.position;
         item.StartingRot = item.Agent.transform.rotation;
         item.Rb          = item.Agent.GetComponent <Rigidbody>();
         m_AgentGroup.RegisterAgent(item.Agent);
     }
     ResetScene();
 }
示例#3
0
    void Start()
    {
        TeamRed  = new SimpleMultiAgentGroup();
        TeamBlue = new SimpleMultiAgentGroup();

        ballRb       = ball.GetComponent <Rigidbody>();
        oriPosofBall = new Vector3(ball.transform.position.x, ball.transform.position.y, ball.transform.position.z);


        foreach (var item in AgentsList)
        {
            item.originPos = item.Agent.transform.position;
            item.originRot = item.Agent.transform.rotation;
            item.Rb        = item.Agent.GetComponent <Rigidbody>();

            if (item.Agent.team == Team.Red)
            {
                TeamRed.registerAgent(item.Agent);
            }
            else
            {
                TeamBlue.RegisterAgent(item.Agent);
            }
        }
        ResetScene();
    }
    void ResetScene()
    {
        m_ResetTimer = 0;

        carLst       = new List <MLCar>();
        m_AgentGroup = new SimpleMultiAgentGroup();

        Extension.Shuffle(goals);

        for (int i = 0; i < count; i++)
        {
            // Random target
            int target = 0;
            do
            {
                target = Random.Range(0, goals.Count);
            } while (target == i);

            //item.selfTransfrom.SetPositionAndRotation(goals[index].position, goals[index].rotation);

            //a.target = goals[target];
            Debug.Log("Player" + i + " - " + goals[i].name + ", " + goals[target].name);

            var t = Instantiate(car);
            t.parent = transform.parent;
            var a = t.GetComponent <MLCar>();
            carLst.Add(a);
            a.Setup(this, i, goals[target]);
            m_AgentGroup.RegisterAgent(a);
            a.SetPosition(goals[i].position, goals[i].rotation);
        }
        //Debug.Log(m_AgentGroup.GetRegisteredAgents().Count);

        activeCars = count;
    }
        public void TestRegisterMultipleAgent()
        {
            var agentGo1 = new GameObject("TestAgent");

            agentGo1.AddComponent <TestAgent>();
            var agent1   = agentGo1.GetComponent <TestAgent>();
            var agentGo2 = new GameObject("TestAgent");

            agentGo2.AddComponent <TestAgent>();
            var agent2 = agentGo2.GetComponent <TestAgent>();

            SimpleMultiAgentGroup agentGroup = new SimpleMultiAgentGroup();

            agentGroup.RegisterAgent(agent1);   // register
            Assert.AreEqual(agentGroup.GetRegisteredAgents().Count, 1);
            agentGroup.UnregisterAgent(agent2); // unregister non-member agent
            Assert.AreEqual(agentGroup.GetRegisteredAgents().Count, 1);
            agentGroup.UnregisterAgent(agent1); // unregister
            Assert.AreEqual(agentGroup.GetRegisteredAgents().Count, 0);
            agentGroup.RegisterAgent(agent1);
            agentGroup.RegisterAgent(agent1); // duplicated register
            Assert.AreEqual(agentGroup.GetRegisteredAgents().Count, 1);
            agentGroup.RegisterAgent(agent2); // register another
            Assert.AreEqual(agentGroup.GetRegisteredAgents().Count, 2);

            // test add/set group rewards
            agentGroup.AddGroupReward(0.1f);
            Assert.AreEqual(0.1f, agent1._GroupReward);
            agentGroup.AddGroupReward(0.5f);
            Assert.AreEqual(0.6f, agent1._GroupReward);
            agentGroup.SetGroupReward(0.3f);
            Assert.AreEqual(0.3f, agent1._GroupReward);
            // unregistered agent should not receive group reward
            agentGroup.UnregisterAgent(agent1);
            agentGroup.AddGroupReward(0.2f);
            Assert.AreEqual(0.3f, agent1._GroupReward);
            Assert.AreEqual(0.5f, agent2._GroupReward);

            // dispose group should automatically unregister all
            agentGroup.Dispose();
            Assert.AreEqual(0, agent1._GroupId);
            Assert.AreEqual(0, agent2._GroupId);
        }
    void ResetScene()
    {
        //Reset counter
        m_ResetTimer = 0;

        //Reset Players Remaining
        m_NumberOfRemainingPlayers = AgentsList.Count;

        //Random platform rot
        var rotation      = Random.Range(0, 4);
        var rotationAngle = rotation * 90f;

        transform.Rotate(new Vector3(0f, rotationAngle, 0f));

        //Reset Agents
        foreach (var item in AgentsList)
        {
            var pos = UseRandomAgentPosition ? GetRandomSpawnPos() : item.StartingPos;
            var rot = UseRandomAgentRotation ? GetRandomRot() : item.StartingRot;

            item.Agent.transform.SetPositionAndRotation(pos, rot);
            item.Rb.velocity        = Vector3.zero;
            item.Rb.angularVelocity = Vector3.zero;
            item.Agent.MyKey.SetActive(false);
            item.Agent.IHaveAKey = false;
            item.Agent.gameObject.SetActive(true);
            m_AgentGroup.RegisterAgent(item.Agent);
        }

        //Reset Key
        Key.SetActive(false);

        //Reset Tombstone
        Tombstone.SetActive(false);

        //End Episode
        foreach (var item in DragonsList)
        {
            if (!item.Agent)
            {
                return;
            }
            item.Agent.transform.SetPositionAndRotation(item.StartingPos, item.StartingRot);
            item.Agent.SetRandomWalkSpeed();
            item.Agent.gameObject.SetActive(true);
        }
    }
示例#7
0
 private void Start()
 {
     foreach (var a in _agents)
     {
         if (!_teams.ContainsKey(a.TeamID))
         {
             var smag = new SimpleMultiAgentGroup();
             smag.RegisterAgent(a);
             _teams.Add(a.TeamID, smag);
         }
         else
         {
             _teams[a.TeamID].RegisterAgent(a);
         }
         a.Manager = this;
     }
     BeginGroupEpisode();
 }
    void Start()
    {
        // Get the ground's bounds
        areaBounds = ground.GetComponent <Collider>().bounds;
        // Get the ground renderer so we can change the material when a goal is scored
        m_GroundRenderer = ground.GetComponent <Renderer>();
        // Starting material
        m_GroundMaterial    = m_GroundRenderer.material;
        m_PushBlockSettings = FindObjectOfType <PushBlockSettings>();

        //Reset Players Remaining
        m_NumberOfRemainingPlayers = AgentsList.Count;

        //Hide The Key
        Key.SetActive(false);

        // Initialize TeamManager
        m_AgentGroup = new SimpleMultiAgentGroup();
        foreach (var item in AgentsList)
        {
            item.StartingPos = item.Agent.transform.position;
            item.StartingRot = item.Agent.transform.rotation;
            item.Rb          = item.Agent.GetComponent <Rigidbody>();
            item.Col         = item.Agent.GetComponent <Collider>();
            // Add to team manager
            m_AgentGroup.RegisterAgent(item.Agent);
        }
        foreach (var item in DragonsList)
        {
            item.StartingPos = item.Agent.transform.position;
            item.StartingRot = item.Agent.transform.rotation;
            item.T           = item.Agent.transform;
            item.Col         = item.Agent.GetComponent <Collider>();
        }

        ResetScene();
    }
示例#9
0
 void Start()
 {
     m_SoccerSettings = FindObjectOfType <SoccerSettings>();
     // Initialize TeamManager
     m_BlueAgentGroup   = new SimpleMultiAgentGroup();
     m_PurpleAgentGroup = new SimpleMultiAgentGroup();
     ballRb             = ball.GetComponent <Rigidbody>();
     m_BallStartingPos  = new Vector3(ball.transform.position.x, ball.transform.position.y, ball.transform.position.z);
     foreach (var item in AgentsList)
     {
         item.StartingPos = item.Agent.transform.position;
         item.StartingRot = item.Agent.transform.rotation;
         item.Rb          = item.Agent.GetComponent <Rigidbody>();
         if (item.Agent.team == Team.Blue)
         {
             m_BlueAgentGroup.RegisterAgent(item.Agent);
         }
         else
         {
             m_PurpleAgentGroup.RegisterAgent(item.Agent);
         }
     }
     ResetScene();
 }