//function that controls what to do when ball touches spikes, powerups, buttons, score zones void OnTriggerEnter2D(Collider2D zone) { //if ball hits powerup if (zone.gameObject.layer == LayerMask.NameToLayer("powerups")) { powerupScript gameobjectPowerScript = zone.gameObject.GetComponent <powerupScript>(); //check to see if more than one ball on top of powerup CircleCollider2D theCircleCollider = zone.gameObject.GetComponent <CircleCollider2D>(); Collider2D[] allCollidersOnPowerup; allCollidersOnPowerup = Physics2D.OverlapCircleAll(new Vector2(theCircleCollider.transform.position.x + theCircleCollider.offset.x, theCircleCollider.transform.position.y + theCircleCollider.offset.y), theCircleCollider.radius, 1 << LayerMask.NameToLayer("blueBallLayer") | 1 << LayerMask.NameToLayer("redBallLayer")); Debug.Log(allCollidersOnPowerup.Length); if (allCollidersOnPowerup.Length == 1) { Debug.Log("Picked up a powerup!"); if (gameobjectPowerScript.powerupNumber == 0) //jukejuice { hasJukeJuice = true; transform.parent.FindChild("jukejuicepower").GetComponent <SpriteRenderer>().enabled = true; //stop coroutine first if existing StopCoroutine("disablePowerupJukeJuice"); StartCoroutine(disablePowerupJukeJuice(20f)); } else if (gameobjectPowerScript.powerupNumber == 1) //rollingbomb { hasRollingBomb = true; currentLerpTime = 0f; flashBall = true; lerpFlashUp = true; //stop coroutine first if existing StopCoroutine("disablePowerupRollingBomb"); StartCoroutine(disablePowerupRollingBomb(20f)); } gameobjectPowerScript.GetComponent <powerupScript>().CancelInvoke("checkAndResetRadius"); transform.parent.uLinkNetworkView().RPC("showPowerupOnPlayer", uLink.RPCMode.OthersBuffered, gameobjectPowerScript.powerupNumber, playerID); gameobjectPowerScript.gotPowerup(playerID); gameobjectPowerScript.GetComponent <CircleCollider2D>().radius = 0.163f; gameobjectPowerScript.GetComponent <CircleCollider2D>().offset = new Vector2(-0.004f, 0); } else if (allCollidersOnPowerup.Length > 1) { Debug.Log("shrunk powerupradius"); //shrink radius gameobjectPowerScript.GetComponent <CircleCollider2D>().radius = 0.006f; gameobjectPowerScript.GetComponent <CircleCollider2D>().offset = new Vector2(0, 0); gameobjectPowerScript.GetComponent <powerupScript>().InvokeRepeating("checkAndResetRadius", 0, 0.1f); } } //if what we hit is on the button layer play button sound on client if (zone.gameObject.layer == LayerMask.NameToLayer("button")) { transform.parent.uLinkNetworkView().RPC("buttonSoundPlay", uLink.RPCMode.Owner); } // on this one we're checking if the ball has flag and is in its score zone if (zone.transform.parent != null && zone.transform.parent.tag == "redScoreZone" && hasBlueFlag == true) { Debug.Log("Score for Red! Resetting Game."); //add one to red score GameObject.FindGameObjectWithTag("redScoreText").GetComponent <UnityEngine.UI.Text>().text = (int.Parse(GameObject.FindGameObjectWithTag("redScoreText").GetComponent <UnityEngine.UI.Text>().text) + 1).ToString(); restartGame(1); } if (zone.transform.parent != null && zone.transform.parent.tag == "blueScoreZone" && hasRedFlag == true) { Debug.Log("Score for Blue! Resetting Game."); //add one to blue score GameObject.FindGameObjectWithTag("blueScoreText").GetComponent <UnityEngine.UI.Text>().text = (int.Parse(GameObject.FindGameObjectWithTag("blueScoreText").GetComponent <UnityEngine.UI.Text>().text) + 1).ToString(); restartGame(0); } //if red ball touches blue flag, pick it up! if (zone.transform.parent != null && zone.transform.parent.tag == "redFlag" && teamColor == 0 && zone.transform.parent.GetComponentInChildren <MeshRenderer>().enabled == true) { player.SetLocalData(4); hasRedFlag = true; hasFlag = true; transform.parent.uLinkNetworkView().RPC("showFlagOnPlayer", uLink.RPCMode.Buffered, playerID, teamColor); //send rpc directly to player so even if scope is disabled, they will receive it. for (int i = 0; i < uLink.Network.connections.Length; i++) { transform.parent.uLinkNetworkView().RPC("showFlagOnPlayer", uLink.Network.connections[i], playerID, teamColor); } Debug.Log("Picked up Red flag"); zone.transform.parent.GetComponentInChildren <MeshRenderer>().enabled = false; transform.parent.FindChild("redFlag").GetComponent <SpriteRenderer>().enabled = true; } //if blue ball toches red flag, pick it up if (zone.transform.parent != null && zone.transform.parent.tag == "blueFlag" && teamColor == 1 && zone.transform.parent.GetComponentInChildren <MeshRenderer>().enabled == true) { player.SetLocalData(3); hasBlueFlag = true; hasFlag = true; transform.parent.uLinkNetworkView().RPC("showFlagOnPlayer", uLink.RPCMode.Buffered, playerID, teamColor); //send rpc directly to player so even if scope is disabled, they will receive it for (int i = 0; i < uLink.Network.connections.Length; i++) { transform.parent.uLinkNetworkView().RPC("showFlagOnPlayer", uLink.Network.connections[i], playerID, teamColor); } Debug.Log("Picked up blue flag"); zone.transform.parent.GetComponentInChildren <MeshRenderer>().enabled = false; transform.parent.FindChild("blueFlag").GetComponent <SpriteRenderer>().enabled = true; } //if red ball not in jail hits blue jail button if (zone.transform.parent != null && zone.transform.parent.tag == "blueJail" && teamColor == 1) { transform.parent.uLinkNetworkView().RPC("buttonSoundPlay", uLink.RPCMode.Owner); serverBallScript[] allServerScripts = FindObjectsOfType(typeof(serverBallScript)) as serverBallScript[]; int i; for (i = 0; i < allServerScripts.Length; i++) { //check all server scripts if a ball is in jail allServerScripts[i].respawnBallIfInJailRed(); } } //if blue ball not in jail hits red jail button if (zone.transform.parent != null && zone.transform.parent.tag == "redJail" && teamColor == 0) { serverBallScript[] allServerScripts = FindObjectsOfType(typeof(serverBallScript)) as serverBallScript[]; int i; for (i = 0; i < allServerScripts.Length; i++) { //check all server scripts if ball is in jail allServerScripts[i].respawnBallIfInJailBlue(); } } //if ball hits a boost //logic to reload boost is on boostScript attached to the boosts if (zone.transform.parent != null && zone.transform.parent.tag == "boosts" && zone.transform.parent.GetComponentInChildren <MeshRenderer>().enabled == true) { //play sound on player that hit boost transform.parent.uLinkNetworkView().RPC("boostSoundPlay", uLink.RPCMode.Owner, transform.position); //qeue reset boost. can't be here cause if the player dissconnects, it won't run boostScript daBoost = zone.transform.parent.GetComponent <boostScript>(); daBoost.resetBoost(); //add force on normalized velocitys ballphysics.velocity = new Vector2(ballphysics.velocity.normalized.x * boostSpeed, ballphysics.velocity.normalized.y * boostSpeed); } //if ball hits a stars --- meant spike but realized this when I was already too far ahead in if (zone.transform.parent != null && zone.transform.parent.tag == "stars") { //uLink.NetworkView.Destroy(transform.parent.gameObject); //apply recoil to other balls applyBallPopRecoil((Vector2)transform.position); destroyBall(); respawnBall(); } }
public void Instantiate(uLink.NetworkPlayer player, int teamColor = -1, bool jailSpawn = false, string name = "Some Ball") { if (teamColor == -1) { if (numberOfPlayersOnRed > numberOfPlayersOnBlue) { teamColor = 0; //blue numberOfPlayersOnBlue++; } else if (numberOfPlayersOnRed < numberOfPlayersOnBlue) { teamColor = 1; //red numberOfPlayersOnRed++; } else { //randomly choose one teamColor float randomValue = UnityEngine.Random.value; if (randomValue < 0.5f) { Debug.Log(randomValue); teamColor = 0; numberOfPlayersOnBlue++; } else { teamColor = 1; numberOfPlayersOnRed++; } } } if (teamColor == 1) { //start position set to hardcoded value + random value right now. if custom tile system is built, the ball can be put into a tile and an object can be designiated as the start position //but since theres no tile system, we cant spawn inside tile sprites float randomValueX = UnityEngine.Random.Range(-3.3f, 1); float randomValueY = UnityEngine.Random.Range(-0.4f, 0.1f); startPosition = new Vector3(-5 + randomValueX, 7.2f + randomValueY, 0); if (jailSpawn == true) { //ugly hardcoded values randomValueX = UnityEngine.Random.Range(0f, 1.1f); randomValueY = UnityEngine.Random.Range(-0.3f, 0f); startPosition = new Vector3(6.606f + randomValueX, -2.418f + randomValueY, 0); } ownerPrefab = (GameObject)Resources.Load("redBallOwner", typeof(GameObject)); proxyPrefab = (GameObject)Resources.Load("redBallProxy", typeof(GameObject)); serverPrefab = (GameObject)Resources.Load("redBallServer", typeof(GameObject)); } else { //ugly hardcoded values float randomValueX = UnityEngine.Random.Range(-1f, 3.3f); float randomValueY = UnityEngine.Random.Range(-0.1f, 0.4f); startPosition = new Vector3(5 + randomValueX, -7.2f + randomValueY, 0); if (jailSpawn == true) { //ugly hardcoded values randomValueX = UnityEngine.Random.Range(-1.1f, 0f); randomValueY = UnityEngine.Random.Range(-0f, 0.3f); startPosition = new Vector3(-6.606f + randomValueX, 2.418f + randomValueY, 0); } ownerPrefab = (GameObject)Resources.Load("blueBallOwner", typeof(GameObject)); proxyPrefab = (GameObject)Resources.Load("blueBallProxy", typeof(GameObject)); serverPrefab = (GameObject)Resources.Load("blueBallServer", typeof(GameObject)); } //set team to local data player.SetLocalData(teamColor); if (ownerPrefab != null && proxyPrefab != null && serverPrefab != null) { Quaternion rotation = Quaternion.Euler(startRotation); string playerName; if (player.loginData == null || !player.loginData.TryRead(out playerName)) { playerName = name; } uLink.Network.Instantiate(player, proxyPrefab, ownerPrefab, serverPrefab, startPosition, rotation, 0, teamColor, jailSpawn, playerName); } }