92 lines
2.9 KiB
C#
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,
|
|
}
|
|
} |