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; } } } } }
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(); }
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; } } } } }