Files
BoneSync/BoneSync/Sync/Components/SyncableAI.cs
2025-03-30 15:45:22 +03:00

64 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BoneSync.Networking.Messages;
using UnityEngine;
namespace BoneSync.Sync.Components
{
public partial class Syncable : MonoBehaviour
{
private AISyncInfo _aiSyncInfo;
private float _lastAISyncTime;
private const float AI_SYNC_FPS = 5f;
private void TrySendAISync()
{
if (!aiBrain) return;
if (Time.realtimeSinceStartup - _lastAISyncTime > 1 / AI_SYNC_FPS)
{
_SendAIStateSync();
}
}
private void _SendAIStateSync()
{
if (!aiBrain) return;
_lastAISyncTime = Time.realtimeSinceStartup;
AISyncInfo aiSyncInfo = new AISyncInfo(_syncId, aiBrain);
AISyncMessage message = new AISyncMessage(aiSyncInfo);
message.Broadcast();
}
private void _ApplyAISyncInfo(AISyncInfo aiSyncInfo)
{
if (!aiBrain) return;
aiBrain.behaviour.health.cur_hp = aiSyncInfo.health.cur_hp;
aiBrain.behaviour.health.cur_arm_lf = aiSyncInfo.health.cur_arm_lf;
aiBrain.behaviour.health.cur_arm_rt = aiSyncInfo.health.cur_arm_rt;
aiBrain.behaviour.health.cur_leg_lf = aiSyncInfo.health.cur_leg_lf;
aiBrain.behaviour.health.cur_leg_rt = aiSyncInfo.health.cur_leg_rt;
if (aiSyncInfo.health.cur_hp <= 0 && !aiBrain.puppetMaster.isDead)
{
aiBrain.puppetMaster.Kill();
}
else if (aiSyncInfo.health.cur_hp > 0 && aiBrain.puppetMaster.isDead)
{
aiBrain.puppetMaster.Resurrect();
}
aiBrain.puppetMaster.activeState = aiSyncInfo.puppetState;
aiBrain.puppetMaster.activeMode = aiSyncInfo.puppetMode;
aiBrain.behaviour.mentalState = aiSyncInfo.mentalState;
}
public void OnAISyncData(AISyncInfo aiSyncInfo)
{
_aiSyncInfo = aiSyncInfo;
_ApplyAISyncInfo(_aiSyncInfo);
}
}
}