public void SpawnPlayer()
    {
        m_SpawnedPlayer = null;
        m_SpawnedPlayer = Instantiate(m_FootballPlayerPrefab) as FootballPlayer;

        if (m_SpawnedPlayer)
        {
            m_SpawnedPlayer.transform.position = transform.position;
            m_SpawnedPlayer.SetPlayerControlled(false);
            m_SpawnedPlayer.SetIsFriendlyTeamPlayer(m_IsFriendlyTeamPlayerSpawner);
            m_SpawnedPlayer.SetInitialPosition(transform.position);

            if (!m_IsFriendlyTeamPlayerSpawner)
            {
                GameObject cubeChild = m_SpawnedPlayer.transform.GetChild(0).gameObject;

                if (cubeChild)
                {
                    Renderer rc = cubeChild.GetComponent <Renderer> ();

                    if (rc)
                    {
                        rc.material = m_OppositionMaterial;
                    }
                }
            }
        }
    }
Exemple #2
0
    void Update()
    {
        // Doing setup in Update because scene not fully created in Start()
        if (!m_IsSetup)
        {
            DoSetup();
            m_IsSetup = true;
            return;
        }

        if (m_IsInGoalScoredCooldown)
        {
            m_timeUntilScoreCooldownFinished -= Time.deltaTime;

            if (m_timeUntilScoreCooldownFinished <= 0.0f)
            {
                m_IsInGoalScoredCooldown = false;

                m_Football.GetComponent <Rigidbody> ().transform.position = m_Football.m_InitialPosition;
            }
        }

        if (mFriendlyTeam.Count == 0 || mOppositionTeam.Count == 0)
        {
            // intitial build
            RebuildTeams();

            m_CurrentSelectedPlayer = GetClosestFriendlyPlayerToBall();

            if (m_CurrentSelectedPlayer)
            {
                m_CurrentSelectedPlayer.SetPlayerControlled(true);
            }

            m_CurrentOppositionPlayer = GetClosestOppositionPlayerToBall();

            if (m_CurrentOppositionPlayer)
            {
                m_CurrentOppositionPlayer.SetIsAIControlled(true);
            }
        }

        TakeInput();

        UpdateCamera();

        ApplyBallControlAid();

        UpdateCurrentPlayer();

        UpdateCurrentOppositionPlayer();

        UpdateAIPositions();
    }
Exemple #3
0
    void UpdateCurrentPlayer()
    {
        if (m_TimeLeftUntilCanSwitchPlayer > 0.0f)
        {
            m_TimeLeftUntilCanSwitchPlayer -= Time.deltaTime;
        }

        if (!m_CurrentSelectedPlayer)
        {
            m_CurrentSelectedPlayer = GetClosestFriendlyPlayerToBall();

            if (m_CurrentSelectedPlayer)
            {
                m_CurrentSelectedPlayer.SetPlayerControlled(true);
            }
        }
        else
        {
            if (m_TimeLeftUntilCanSwitchPlayer > 0.0f)
            {
                return;
            }

            // if the current player is too far away from the ball then select a new player
            Vector3 diff = m_Football.GetComponent <Rigidbody>().transform.position - m_CurrentSelectedPlayer.GetComponent <Rigidbody>().transform.position;

            float magSqrAbs = Mathf.Abs(diff.sqrMagnitude);

            if (magSqrAbs > 300)
            {
                // pick new player
                float smallestDistance = -1.0f;

                foreach (FootballPlayer p in mFriendlyTeam)
                {
                    if (p == m_CurrentSelectedPlayer)
                    {
                        continue;
                    }

                    Vector3 diffP = m_Football.GetComponent <Rigidbody>().transform.position - p.GetComponent <Rigidbody>().transform.position;

                    float magSqrAbsP = Mathf.Abs(diffP.sqrMagnitude);

                    if (smallestDistance == -1 ||
                        (magSqrAbsP < smallestDistance && (magSqrAbs - magSqrAbsP) > 100))
                    {
                        Vector3 velocityBeforeSwitch = m_CurrentSelectedPlayer.GetComponent <Rigidbody> ().velocity;

                        m_CurrentSelectedPlayer.SetPlayerControlled(false);
                        smallestDistance        = magSqrAbsP;
                        m_CurrentSelectedPlayer = p;
                        m_CurrentSelectedPlayer.SetPlayerControlled(true);
                        diffP.Normalize();

                        m_TimeLeftUntilCanSwitchPlayer = 5.0f;
                    }
                }
            }
        }
    }