using RebootKit.Engine.Main; using RebootKit.Engine.Network; using RebootKit.Engine.Simulation; using TMPro; 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(ulong senderID, ActorCommand actorCommand) { WorkbenchActorCommands workbenchCommand = (WorkbenchActorCommands) actorCommand.CommandID; switch (workbenchCommand) { case WorkbenchActorCommands.SelectNextRecipe: { WorkbenchActorData data = DataAs(); data.SelectedRecipeIndex += 1; IsDataDirty = true; break; } case WorkbenchActorCommands.SelectPreviousRecipe: { WorkbenchActorData data = DataAs(); data.SelectedRecipeIndex -= 1; IsDataDirty = true; break; } case WorkbenchActorCommands.CraftItem: { RR.SpawnActor(m_ItemActorReference, m_CraftSpawnPoint.position, Quaternion.identity); break; } } } protected override IActorData CreateActorData() { return new WorkbenchActorData { SelectedRecipeIndex = Random.Range(0, 10) }; } public void SelectNextRecipe() { SendActorCommand((byte)WorkbenchActorCommands.SelectNextRecipe); } public void SelectPreviousRecipe() { SendActorCommand((byte)WorkbenchActorCommands.SelectPreviousRecipe); } public void CraftItem() { SendActorCommand((byte) WorkbenchActorCommands.CraftItem); } } public enum WorkbenchActorCommands : byte { None = 0x00, SelectNextRecipe = 0x01, SelectPreviousRecipe = 0x02, CraftItem = 0x03, } }