NetPlayer.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using Mirror;
  4. using UnityEngine;
  5. public class NetPlayer : NetworkBehaviour
  6. {
  7. public Behaviour[] LocalComponents;
  8. public SpriteRenderer characterSprite;
  9. [SyncVar]
  10. public bool insideDoor;
  11. public LayerMask friendLayer;
  12. void Start()
  13. {
  14. DontDestroyOnLoad(gameObject);
  15. if(!isLocalPlayer){
  16. gameObject.layer = LayerMask.NameToLayer("Friend");
  17. //GetComponent<BoxCollider2D>().size = new Vector2(GetComponent<BoxCollider2D>().size.x/2f,GetComponent<BoxCollider2D>().size.y);
  18. foreach(Behaviour localComponent in LocalComponents){
  19. localComponent.enabled=false;
  20. }
  21. }
  22. if(isLocalPlayer){
  23. SceneData.localPlayer = gameObject;
  24. if(SceneData.netSceneData==null){Debug.Log("Scene Data is not init yet");}else{
  25. transform.position = SceneData.netSceneData.spawnPoint.position;
  26. }
  27. }
  28. }
  29. public void ReturnToSpawn(){
  30. if(isLocalPlayer){
  31. StartCoroutine(returnToSpawn());
  32. }
  33. }
  34. IEnumerator returnToSpawn(){
  35. while(SceneData.netSceneData==null){
  36. yield return new WaitForSeconds(0.1f);
  37. }
  38. while(SceneData.netSceneData.spawnPoint==null){
  39. yield return new WaitForSeconds(0.1f);
  40. }
  41. transform.position = SceneData.netSceneData.spawnPoint.position;
  42. }
  43. public Transform frndTrans;
  44. bool oldFlipVal = false;
  45. Transform oldFriendVal;
  46. float oldFriendX;
  47. void Update()
  48. {
  49. if(!isLocalPlayer){return;}
  50. frndTrans = getOnFriend();
  51. // if(oldFriendVal!=frndTrans){//got on someones head, or got off
  52. // if(oldFriendVal==null && frndTrans!=null){//got on
  53. // oldFriendX = frndTrans.position.x;
  54. // oldFriendVal = frndTrans;
  55. // }else{//got off
  56. // oldFriendX = 0;
  57. // oldFriendVal = null;
  58. // }
  59. // }
  60. // if(oldFriendVal!=null){
  61. // transform.Translate(new Vector2(frndTrans.position.x - oldFriendX,0));
  62. // }
  63. if(oldFlipVal != characterSprite.flipX){
  64. if(isServer){
  65. RpcFlipX(characterSprite.flipX);
  66. }else{
  67. CmdFlipX(characterSprite.flipX);
  68. }
  69. oldFlipVal=characterSprite.flipX;
  70. }
  71. if(!isServer){return;}
  72. }
  73. [Command]
  74. void CmdFlipX(bool value){
  75. FlipX(value);
  76. RpcFlipX(value);
  77. }
  78. [ClientRpc]
  79. void RpcFlipX(bool value){
  80. if(!isLocalPlayer)FlipX(value);
  81. }
  82. void FlipX(bool value){
  83. characterSprite.flipX = value;
  84. }
  85. public void CallChangeInsideDoor(bool value){
  86. if(isServer){
  87. insideDoor=value;
  88. }else{
  89. CmdChangeInsideDoor(value);
  90. }
  91. }
  92. [Command]
  93. void CmdChangeInsideDoor(bool value){
  94. insideDoor=value;
  95. }
  96. public Transform getOnFriend()
  97. {
  98. Transform friend =null;
  99. //return (Physics2D.Linecast(transform.position, groundChecker.position, groundLayerMask));
  100. Collider2D col = GetComponentInChildren<Collider2D>();
  101. 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);
  102. friend = (hit) ? hit.collider.transform : null;
  103. return friend;
  104. }
  105. }