using System.Collections; using System.Collections.Generic; using Mirror; using UnityEngine; public class NetPlayer : NetworkBehaviour { public Behaviour[] LocalComponents; public SpriteRenderer characterSprite; [SyncVar] public bool insideDoor; public LayerMask friendLayer; void Start() { DontDestroyOnLoad(gameObject); if(!isLocalPlayer){ gameObject.layer = LayerMask.NameToLayer("Friend"); //GetComponent().size = new Vector2(GetComponent().size.x/2f,GetComponent().size.y); foreach(Behaviour localComponent in LocalComponents){ localComponent.enabled=false; } } if(isLocalPlayer){ SceneData.localPlayer = gameObject; if(SceneData.netSceneData==null){Debug.Log("Scene Data is not init yet");}else{ transform.position = SceneData.netSceneData.spawnPoint.position; } } } public void ReturnToSpawn(){ if(isLocalPlayer){ StartCoroutine(returnToSpawn()); } } IEnumerator returnToSpawn(){ while(SceneData.netSceneData==null){ yield return new WaitForSeconds(0.1f); } while(SceneData.netSceneData.spawnPoint==null){ yield return new WaitForSeconds(0.1f); } transform.position = SceneData.netSceneData.spawnPoint.position; } public Transform frndTrans; bool oldFlipVal = false; Transform oldFriendVal; float oldFriendX; void Update() { if(!isLocalPlayer){return;} frndTrans = getOnFriend(); // if(oldFriendVal!=frndTrans){//got on someones head, or got off // if(oldFriendVal==null && frndTrans!=null){//got on // oldFriendX = frndTrans.position.x; // oldFriendVal = frndTrans; // }else{//got off // oldFriendX = 0; // oldFriendVal = null; // } // } // if(oldFriendVal!=null){ // transform.Translate(new Vector2(frndTrans.position.x - oldFriendX,0)); // } if(oldFlipVal != characterSprite.flipX){ if(isServer){ RpcFlipX(characterSprite.flipX); }else{ CmdFlipX(characterSprite.flipX); } oldFlipVal=characterSprite.flipX; } if(!isServer){return;} } [Command] void CmdFlipX(bool value){ FlipX(value); RpcFlipX(value); } [ClientRpc] void RpcFlipX(bool value){ if(!isLocalPlayer)FlipX(value); } void FlipX(bool value){ characterSprite.flipX = value; } public void CallChangeInsideDoor(bool value){ if(isServer){ insideDoor=value; }else{ CmdChangeInsideDoor(value); } } [Command] void CmdChangeInsideDoor(bool value){ insideDoor=value; } public Transform getOnFriend() { Transform friend =null; //return (Physics2D.Linecast(transform.position, groundChecker.position, groundLayerMask)); Collider2D col = GetComponentInChildren(); RaycastHit2D hit = Physics2D.BoxCast(col.bounds.center, new Vector2(col.bounds.size.x - (col.bounds.size.x / 5f), col.bounds.size.y), 0, Vector2.down, 0.1f, friendLayer); friend = (hit) ? hit.collider.transform : null; return friend; } }