Files
jelito/Assets/jelycho/Code/Items/WorkbenchActor.cs
2025-07-30 05:51:52 +02:00

92 lines
2.9 KiB
C#

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<WorkbenchActorData>().SelectedRecipeIndex.ToString();
}
protected override void OnActorCommandServer(ulong senderID, ActorCommand actorCommand) {
WorkbenchActorCommands workbenchCommand = (WorkbenchActorCommands) actorCommand.CommandID;
switch (workbenchCommand) {
case WorkbenchActorCommands.SelectNextRecipe: {
WorkbenchActorData data = DataAs<WorkbenchActorData>();
data.SelectedRecipeIndex += 1;
IsDataDirty = true;
break;
}
case WorkbenchActorCommands.SelectPreviousRecipe: {
WorkbenchActorData data = DataAs<WorkbenchActorData>();
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,
}
}