snakes_mp/Assets/Scripts/SnakePiece.cs
2025-04-19 15:46:50 +05:30

80 lines
2.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using Photon.Pun;
using UnityEngine;
public class SnakePiece : MonoBehaviourPunCallbacks, IPunObservable
{
public SnakeSkinScriptable skin;
public Vector2 direction = Vector2.right;
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>();
}
}
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(photonView.IsMine){
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(photonView.IsMine){
spriteRenderer.color = myBodyColor;
}else{
spriteRenderer.color = enemyBodyColor;
}
if(!found){
spriteRenderer.sprite = defaultSprite;
}
}
}
}