bubble_shooter_2d/Assets/Scripts/NetPlayer.cs
2025-06-02 09:21:48 +05:30

100 lines
2.1 KiB
C#

using System;
using Mirror;
using UnityEngine;
public class NetPlayer : NetworkBehaviour
{
public PlayerType playerType;
public static NetPlayer localPlayer;
void Start()
{
if(!isLocalPlayer){return;}
localPlayer = this;
NetPlayer[] players = FindObjectsOfType<NetPlayer>();
if (players.Length > 1)
{
playerType = PlayerType.Client;
Shooter.client.player = this;
}
else
{
playerType = PlayerType.Master;
Shooter.master.player = this;
}
CmdSetPlayerType(playerType.ToString());
}
[Command]
void CmdSetPlayerType(string type){
SetPlayerType(type);
RpcSetPlayerType(type);
}
[ClientRpc]
void RpcSetPlayerType(string type){
SetPlayerType(type);
}
void SetPlayerType(string type){
playerType = (PlayerType)Enum.Parse(typeof(PlayerType), type);
if(playerType == PlayerType.Master){
Shooter.master.player = this;
}else{
Shooter.client.player = this;
}
}
public void RequestSwapBubbles(){
if(isLocalPlayer && !isServer){
CmdSwapBubbles();
}else if(isLocalPlayer && isServer){
swapBubbles();
}
}
[Command]
void CmdSwapBubbles(){
swapBubbles();
}
void swapBubbles(){
if(playerType == PlayerType.Master){
Shooter.master.SwapBubbles();
}else{
Shooter.client.SwapBubbles();
}
}
public void RequestShoot(float lookAngle)
{
if(isLocalPlayer && !isServer){
CmdShoot(lookAngle);
}else if(isLocalPlayer && isServer){
shoot(lookAngle);
}
}
[Command]
void CmdShoot(float lookAngle){
shoot(lookAngle);
}
void shoot(float lookAngle){
if(playerType == PlayerType.Master){
Shooter.master.Shoot(lookAngle);
}else{
Shooter.client.Shoot(lookAngle);
}
}
}
public enum PlayerType
{
Master,
Client
}