using System.Globalization; using RebootKit.Engine.Main; using RebootKit.Engine.Network; using RebootKit.Engine.Simulation; using TMPro; using Unity.Netcode; using UnityEngine; using UnityEngine.AddressableAssets; namespace RebootReality.jelycho.Items { public class WorkbenchActor : Actor { class WorkbenchActorData : IActorData { public int SelectedRecipeIndex; public void Serialize(NetworkBufferWriter writer) { writer.Write(SelectedRecipeIndex); } public void Deserialize(NetworkBufferReader reader) { reader.Read(out SelectedRecipeIndex); } public int GetMaxBytes() { return sizeof(int); } } [SerializeField] AssetReferenceGameObject m_ItemActorReference; [SerializeField] Transform m_PreviewSlot; [SerializeField] Transform m_CraftSpawnPoint; [SerializeField] TMP_Text m_TimerText; public override void OnServerTick(float deltaTime) { base.OnServerTick(deltaTime); } public override void OnClientTick(float deltaTime) { base.OnClientTick(deltaTime); m_TimerText.text = DataAs().SelectedRecipeIndex.ToString(); } protected override void OnActorCommandServer(ActorCommand actorCommand) { if (actorCommand.CommandID == (ushort) WorkbenchActorCommands.SelectNextRecipe) { WorkbenchActorData data = DataAs(); data.SelectedRecipeIndex += 1; IsDataDirty = true; } else if (actorCommand.CommandID == (ushort) WorkbenchActorCommands.SelectPreviousRecipe) { WorkbenchActorData data = DataAs(); data.SelectedRecipeIndex -= 1; IsDataDirty = true; } else if (actorCommand.CommandID == (ushort) WorkbenchActorCommands.CraftItem) { RR.SpawnActor(m_ItemActorReference, m_CraftSpawnPoint.position, Quaternion.identity); } } protected override IActorData CreateActorData() { return new WorkbenchActorData { SelectedRecipeIndex = Random.Range(0, 10) }; } public void SelectNextRecipe() { SendActorCommand((ushort)WorkbenchActorCommands.SelectNextRecipe); } public void SelectPreviousRecipe() { SendActorCommand((ushort)WorkbenchActorCommands.SelectPreviousRecipe); } public void CraftItem() { SendActorCommand((ushort) WorkbenchActorCommands.CraftItem); } } public enum WorkbenchActorCommands : ushort { None = 0x0000, SelectNextRecipe = 0x0001, SelectPreviousRecipe = 0x0002, CraftItem = 0x0003, } }