64 lines
2.1 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
}
|