97 lines
3.3 KiB
C#
97 lines
3.3 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();
|
|
}
|
|
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;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|