void Start() { outputUITexts[0] = GameObject.Find("AgentText1")?.GetComponent <Text>(); outputUITexts[1] = GameObject.Find("AgentText2")?.GetComponent <Text>(); agent = GetComponent <ITankAgent>(); int textIndex = agent.GetPlayerNumber() - 1; outputText = outputUITexts[textIndex]; }
void Start() { agent = GetComponent <ITankAgent>(); if (cameraSensor == null) { cameraSensor = GetComponent <CameraSensor>(); } // wire up to UI images normal/segmented based on player 1 or 2 // yeah this isn't pretty, but we just need something quick. int playerNumber = agent.GetPlayerNumber() - 1; // might not need to use this, might be better off manually wiring up for visual agents normalRenderTexture = normalRTs[playerNumber]; segmentedRenderTexture = segmentedRTs[playerNumber]; normalCam.targetTexture = normalRenderTexture; cameraSensor.Camera = normalCam; }
private void OnTriggerEnter(Collider other) { // Collect all the colliders in a sphere from the shell's current position to a radius of the explosion radius. Collider[] colliders = Physics.OverlapSphere(transform.position, m_ExplosionRadius, m_TankMask); // Go through all the colliders... for (int i = 0; i < colliders.Length; i++) { // ... and find their rigidbody. Rigidbody targetRigidbody = colliders[i].GetComponent <Rigidbody> (); // If they don't have a rigidbody, go on to the next collider. if (!targetRigidbody) { continue; } // Add an explosion force. targetRigidbody.AddExplosionForce(m_ExplosionForce, transform.position, m_ExplosionRadius); // Find the TankHealth script associated with the rigidbody. TankHealth targetHealth = targetRigidbody.GetComponent <TankHealth> (); // If there is no TankHealth script attached to the gameobject, go on to the next collider. if (!targetHealth) { continue; } // Calculate the amount of damage the target should take based on it's distance from the shell. float damage = CalculateDamage(targetRigidbody.position); // Deal this damage to the tank. targetHealth.TakeDamage(damage); // add to damage report, so we can send to listensers // note that tank might damage itself, so we need to add all damages ITankAgent agent = targetRigidbody.GetComponent <ITankAgent>(); if (agent == null) { continue; } if (damageReport.ContainsKey(agent.GetPlayerNumber())) { // if multiple parts of the tank are hit, we need to add up all the damage damageReport[agent.GetPlayerNumber()] += damage; } else { damageReport.Add(agent.GetPlayerNumber(), damage); } } // once all damages are calculated, send out damage report if (OnExplosion != null) { OnExplosion.Invoke(this, damageReport); } // Unparent the particles from the shell. m_ExplosionParticles.transform.parent = null; // Play the particle system. m_ExplosionParticles.Play(); // Play the explosion sound effect. // m_ExplosionAudio.Play(); // Once the particles have finished, destroy the gameobject they are on. ParticleSystem.MainModule mainModule = m_ExplosionParticles.main; Destroy(m_ExplosionParticles.gameObject, mainModule.duration); // Destroy the shell. Destroy(gameObject); }