Beispiel #1
0
    void OnTriggerEnter(Collider collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            GameObject player = collision.gameObject;

            CogsAgent agentScript = player.GetComponent(WorldConstants.agent1ID) as CogsAgent;
            if (agentScript == null)
            {
                agentScript = player.GetComponent(WorldConstants.agent2ID) as CogsAgent;
            }
            if (agentScript.GetTeam() == team)
            {
                for (int i = agentScript.GetCarrying() - 1; i > -1; i--)
                {
                    GameObject currentTarget = agentScript.GetCarry(i);
                    capturedTargets.Add(currentTarget);
                    int     spot     = AddToFirstSpotInBase();
                    Vector3 position = GetPosition(spot);
                    currentTarget.GetComponent <Target>().AddToBase(spot, team, position);
                    agentScript.RemoveCarry(currentTarget);
                }
            }
        }
    }
    // Update is called once per frame
    void FixedUpdate()
    {
        bool timerIsRunning = timer.GetComponent <Timer>().GetTimerIsRunning();

        int base1Num    = base1.GetComponent <HomeBase>().GetCaptured();
        int base2Num    = base2.GetComponent <HomeBase>().GetCaptured();
        int agent1Carry = agent1Script.GetCarrying();
        int agent2Carry = agent2Script.GetCarrying();

        float agent1BaseDist = agent1Script.DistanceToBase();
        float agent2BaseDist = agent2Script.DistanceToBase();

        base1CountTxt.text = "[A1] " + WorldConstants.agent1ID + ": " + base1Num.ToString();
        base2CountTxt.text = "[A2] " + WorldConstants.agent2ID + ": " + base2Num.ToString();

        if (!timerIsRunning)
        {
            if (base1Num > base2Num)
            {
                agent1Script.SetReward(1f);
                agent2Script.SetReward(-1f);
                Debug.Log("Agent 1 wins by capture");
                winnerTextbox.enabled = true;
                winnerTextbox.text    = "Agent 1 wins";
            }

            else if (base2Num > base1Num)
            {
                agent1Script.SetReward(-1f);
                agent2Script.SetReward(1f);
                Debug.Log("Agent 2 wins by capture");
                winnerTextbox.enabled = true;
                winnerTextbox.text    = "Agent 2 wins";
            }
            else if (agent1Carry > agent2Carry)
            {
                agent1Script.SetReward(1f);
                agent2Script.SetReward(-1f);
                Debug.Log("Agent 1 wins by carry");
                winnerTextbox.enabled = true;
                winnerTextbox.text    = "Agent 1 wins";
            }

            else if (agent2Carry > agent1Carry)
            {
                agent1Script.SetReward(-1f);
                agent2Script.SetReward(1f);
                Debug.Log("Agent 2 wins by carry");
                winnerTextbox.enabled = true;
                winnerTextbox.text    = "Agent 2 wins";
            }
            else if (agent1BaseDist < agent2BaseDist && agent1Carry != 0)
            {
                agent1Script.SetReward(1f);
                agent2Script.SetReward(-1f);
                Debug.Log("Agent 1 wins by distance");
                winnerTextbox.enabled = true;
                winnerTextbox.text    = "Agent 1 wins";
            }

            else if (agent2BaseDist < agent1BaseDist && agent2Carry != 0)
            {
                agent1Script.SetReward(-1f);
                agent2Script.SetReward(1f);
                Debug.Log("Agent 2 wins by distance");
                winnerTextbox.enabled = true;
                winnerTextbox.text    = "Agent 2 wins";
            }

            else
            {
                agent1Script.SetReward(0f);
                agent2Script.SetReward(0f);
                Debug.Log("Draw!");

                winnerTextbox.enabled = true;
                winnerTextbox.text    = "Draw";
            }

            if (isTraining)
            {
                Reset();
            }
            else
            {
                StopGame();
            }
        }
    }