Files
PacManUdon/Assets/Scripts/GridMover.cs
2025-12-28 19:35:18 +01:00

56 lines
1.6 KiB
C#

namespace Marro.PacManUdon
{
using Assets.Scripts;
using System;
using UdonSharp;
using UnityEngine;
using VRC.Udon.Serialization.OdinSerializer;
public abstract class GridMover : SyncedObject
{
protected Vector2 direction;
public virtual Vector2 GetPosition()
{
return (Vector2)transform.localPosition;
}
public virtual void SetPosition(Vector2 position)
{
transform.localPosition = new Vector3(position.x, position.y, transform.localPosition.z);
}
public virtual Vector2 GetDirection()
{
return direction;
}
public void SetDirection(Vector2 direction)
{
this.direction = direction;
UpdateAnimator();
}
protected abstract void UpdateAnimator();
public override void AppendSyncedData(byte[][] data, ref int offset)
{
var position = GetPosition();
data[offset++] = BitConverter.GetBytes(position.x);
data[offset++] = BitConverter.GetBytes(position.y);
var direction = GetDirection();
data[offset++] = BitConverter.GetBytes(direction.x);
data[offset++] = BitConverter.GetBytes(direction.y);
}
public override bool SetSyncedData(byte[] data, ref int offset)
{
SetPosition(new Vector2(BitConverter.ToSingle(data, offset), BitConverter.ToSingle(data, offset + 2)));
SetDirection(new Vector2(BitConverter.ToSingle(data, offset + 4), BitConverter.ToSingle(data, offset + 6)));
offset += 8;
return true;
}
}
}