working on humbie still

This commit is contained in:
2025-10-24 13:54:27 +02:00
parent 98cf38ac00
commit 18effac005
33 changed files with 359 additions and 129 deletions

View File

@@ -0,0 +1,95 @@
using System;
using Cysharp.Threading.Tasks;
using HighlightPlus;
using RebootKit.Engine.Simulation;
using UnityEngine;
using UnityEngine.Events;
using Logger = RebootKit.Engine.Foundation.Logger;
namespace RebootReality.jelycho.Actors {
public class ButtonActor : Actor, IInteractable {
static readonly Logger s_Logger = new Logger(nameof(ButtonActor));
[SerializeField] Transform m_Graphics;
[SerializeField] float m_CooldownDuration = 0.5f;
[SerializeField] HighlightEffect m_HighlightEffect;
DateTime m_LastPressTime;
public UnityEvent pressed = new UnityEvent();
//
// @MARK: Unity callbacks
//
void Awake() {
SetHighlight(false);
m_LastPressTime = DateTime.MinValue;
}
//
// @MARK: Actor
//
protected override IActorData CreateActorData() {
return new NoActorData();
}
protected override void OnActorCommandServer(ulong senderID, ActorCommand actorCommand) {
if (actorCommand.CommandID == (ushort) ButtonActorCommands.Press) {
if (DateTime.UtcNow - m_LastPressTime < TimeSpan.FromSeconds(m_CooldownDuration)) {
return;
}
m_LastPressTime = DateTime.UtcNow;
pressed?.Invoke();
SendActorEvent((byte) ButtonActorEvents.Pressed);
}
}
protected override void OnActorEventClient(ActorEvent actorEvent) {
ButtonActorEvents buttonEvent = (ButtonActorEvents) actorEvent.EventID;
switch (buttonEvent) {
case ButtonActorEvents.Pressed: {
PlayPressAnimation();
break;
}
default:
s_Logger.Error($"Unknown actor event: {actorEvent.EventID}");
break;
}
}
void PlayPressAnimation() {
PressAsync().Forget();
}
async UniTask PressAsync() {
m_Graphics.localScale = new Vector3(1, 0.1f, 1);
await UniTask.Delay(TimeSpan.FromSeconds(m_CooldownDuration),
cancellationToken: destroyCancellationToken);
m_Graphics.localScale = new Vector3(1, 1, 1);
}
//
// @MARK: IInteractable
//
public void SetHighlight(bool highlight) {
m_HighlightEffect.highlighted = highlight;
}
public void Interact() {
SendActorCommand((byte) ButtonActorCommands.Press);
}
}
public enum ButtonActorCommands : byte {
None = 0x00,
Press = 0x01,
}
public enum ButtonActorEvents : byte {
None = 0x00,
Pressed = 0x01,
}
}