125 lines
3.5 KiB
C#
125 lines
3.5 KiB
C#
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<BoxCollider2D>().size = new Vector2(GetComponent<BoxCollider2D>().size.x/2f,GetComponent<BoxCollider2D>().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<Collider2D>();
|
|
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;
|
|
}
|
|
}
|