Alright so I am new to photon and am trying to run it on a game based around being hit once and losing the round. My score, though I think I have it setup correctly, is updating both players. Please note the logic variable connects to the second script. Also, the variable player is your player ID via Photon. Heres code:
MPMovement.cs
void OnCollisionEnter2D(Collision2D other)
{
if (photonView.IsMine)
{
//This looks for players landing after a jumps, calls correctly to the animator and then
//Begins to set everything back to the way it was. Still not sure about setting velocity
//To zero, but why fix what isn't broken, amirite?
if (other.gameObject.CompareTag("Ground") || other.gameObject.CompareTag("Player"))
{
jumpCount = jumps;
//rbody.velocity = Vector2.zero;
anim.SetBool("grounded", true);
anim.SetBool("jumping", false);
}
//This looks for a hit from another player. This will trigger whether it is a standing or crouching hit, as the
//Results will be the exact same either way it plays out; if someone is hit, they die.
//On a hit. All hitboxes are shut off (avoid multiple hits) and the win counter goes up.
//It then notifies the other player they have been hit, sets their dead trigger, and deducts a win.
//After everything has been set, logic is then sent for to see if the game is over.
if (other.gameObject.tag == "Player" && (other.otherCollider.name == "StandHitBox" || other.otherCollider.name == "CrouchHitBox"))
{
SHitBox.enabled = false;
CHitBox.enabled = false;
logic.AddWin(playerNum);
other.gameObject.GetComponent<Animator>().SetTrigger("die");
other.gameObject.GetComponent<Movement>().isDead = true;
Debug.Log("In");
StartCoroutine(winWait());
Debug.Log("Out");
}
}
}
MPGameLogic:
//Simply game over logic that checks for a best two of three game
//I chose to decrement a win on a loss. This is because, at least in a
//1v1 the games would be ending in about a miniute or two and I want
//people to be able to enjoy a game with multiple rounds.
public void CheckWin()
{
if (wins == 5)
{
Debug.Log("GameOver! " + PhotonNetwork.NickName + " Wins!!!");
//Need to fix this. Lots should be here to actually exit and leave room
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex - 1);
}
newRound();
}
void UpdateScore(string player)
{
players = GameObject.FindGameObjectsWithTag("Player");
for(int i = 0; i < players.Length; i++){
Debug.Log(players[i].name);
if(players[i].name != "StandHitBox" && players[i].name != "CrouchHitBox")
if(players[i].GetComponent<MPMovement>().playerNum == player)
Debug.Log("Updating for player " + (i % 2) + " via " + winText[i % 2].name);
winText[i % 2].GetComponent<TextMeshProUGUI>().text = wins + "";
}
}
public void AddWin(string player)
{
wins++;
UpdateScore(player);
CheckWin();
GameObject.Find("Canvas").GetComponent<Timer>().Reset();
}
public void SubWin(string index)
{
if (wins > 0)
{
wins--;
UpdateScore(index);
}
}
//Whenever we go to another round we need the positions to reset
//This also includes
public void newRound()
{
player.transform.position = locations[0];
return;
}
Lol the answer is bad programming. This actually does work. If you look in my MPGameLogic file, you will probably notice two if statements missing {} this lead to an error while I had debug statements included in the code. Works perfectly now.