Files
BoneSync/BoneSync/Sync/Components/SyncableProperties.cs
2025-03-24 17:27:46 +02:00

99 lines
3.4 KiB
C#

using BoneSync.Networking.Messages;
using BoneSync.Patching;
using StressLevelZero.Combat;
using StressLevelZero.Pool;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace BoneSync.Sync.Components
{
public partial class Syncable : MonoBehaviour
{
private const float ATTRIBUTE_SYNC_FPS = 0.2f;
private float _lastAttributeSyncTime;
private void StripDamage(ref BulletObject bulletObject)
{
AmmoVariables ammoVariables = bulletObject.ammoVariables;
ammoVariables.AttackDamage = 0f;
bulletObject.ammoVariables = ammoVariables;
}
private void TrySendAttributeSync()
{
if (!Registered) return;
if (!isOwner) return;
if (Time.realtimeSinceStartup - _lastAttributeSyncTime > 1 / ATTRIBUTE_SYNC_FPS)
{
_SendAttributeSync();
}
}
private void _SendAttributeSync()
{
_SendMagazineData();
_lastAttributeSyncTime = Time.realtimeSinceStartup;
}
public void ApplyMagazineData(MagazineSyncData magazineSyncData)
{
if (!magazine) return; // If the magazine is null, return
MagazineData magazineData = magazineSyncData.magazineData;
if (!magazineData) return;
magazine.magazineData.AmmoSlots = magazineData.AmmoSlots;
magazine.magazineData.cartridgeType = magazineData.cartridgeType;
magazine.magazineData.weight = magazineData.weight;
magazine.magazineData.platform = magazineData.platform;
magazine.firstBullet?.SetActive(magazineData.AmmoSlots.Count > 0);
}
public MagazineSyncData GetMagazineData()
{
MagazineSyncData data = new MagazineSyncData();
data.syncId = GetSyncId();
data.magazineData = magazine.magazineData;
return data;
}
private void _SendMagazineData()
{
if (!magazine) return;
MagazineSyncData data = GetMagazineData();
MagazineSyncMessage message = new MagazineSyncMessage(data);
message.Broadcast();
}
public void OnWeaponSyncData(GunSyncInfo gunSyncInfo)
{
if (!gun) return;
gun.chamberedCartridge = gunSyncInfo.bulletObject;
gun.cartridgeState = gunSyncInfo.cartridgeState;
gun.hammerState = gunSyncInfo.hammerState;
if (gunSyncInfo.messageType == GunSyncMessageType.Fire)
{
gun.gunSFX?.GunShot();
Transform firepointTransform = gun.firePointTransform;
Vector3 position = firepointTransform.position;
Quaternion rotation = firepointTransform.rotation;
BulletObject bulletObject = gunSyncInfo.bulletObject;
StripDamage(ref bulletObject);
//gun.EjectCartridge();
PoolSpawner.SpawnProjectile(position, rotation, gunSyncInfo.bulletObject, "1911", null);
PoolSpawner.SpawnMuzzleFlare(position, rotation, PoolSpawner.MuzzleFlareType.Default);
return;
}
if (gunSyncInfo.messageType == GunSyncMessageType.EjectCartridge)
{
gun.EjectCartridge();
return;
}
}
}
}