snakes_mp/Assets/Scripts/SnakePiece.cs

87 lines
2.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using Mirror;
using UnityEngine;
public class SnakePiece : NetworkBehaviour
{
public SnakeSkinScriptable skin;
[SyncVar]
public Vector2 direction = Vector2.right;
[SyncVar]
public string userId;
bool isLocal => userId == GameData.user_id;
public SpriteRenderer spriteRenderer;
public Color myColor, enemyColor = Color.green;
public Color myBodyColor, enemyBodyColor = Color.green;
Vector3 defaultSize;
void Awake(){
defaultSize = transform.localScale;
}
void OnValidate() {
if(spriteRenderer == null){
spriteRenderer = GetComponentInChildren<SpriteRenderer>();
}
}
[SyncVar]
public bool isHead = false;
// public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
// {
// if(stream.IsWriting){
// stream.SendNext(direction);
// stream.SendNext(isHead);
// }else{
// direction = (Vector2)stream.ReceiveNext();
// isHead = (bool)stream.ReceiveNext();
// }
// }
void Start(){
}
void Update(){
spriteRenderer.transform.localScale =Vector3.one * (isHead ? skin.headScaleMultiplier : 1);
if(isHead){
foreach(SkinData skinData in skin.head){
if(skinData.direction == direction){
spriteRenderer.sprite = skinData.sprite;
break;
}
}
if(isLocal){
spriteRenderer.color = myColor;
}else{
spriteRenderer.color = enemyColor;
}
}else{
Sprite defaultSprite = null;
bool found = false;
foreach(SkinData skinData in skin.body){
if(defaultSprite == null){
defaultSprite = skinData.sprite;
}
if(skinData.direction == direction){
spriteRenderer.sprite = skinData.sprite;
found = true;
break;
}
}
if(isLocal){
spriteRenderer.color = myBodyColor;
}else{
spriteRenderer.color = enemyBodyColor;
}
if(!found){
spriteRenderer.sprite = defaultSprite;
}
}
}
}