networking modifiers

This commit is contained in:
XtraCube committed 2024-08-24 13:36:49 -04:00
1 parent 9b173a4298
commit a9ff1c7f63
3 files changed
+66 -12

No files matched your search

+6 -6
View File
@@ -13,7 +13,7 @@ namespace MiraAPI.Modifiers;
[RegisterInIl2Cpp]
public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr)
{
public List<BaseModifier> activeModifiers = [];
public readonly List<BaseModifier> ActiveModifiers = [];
public PlayerControl player;
@@ -24,7 +24,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr)
public void Update()
{
foreach (var modifier in activeModifiers)
foreach (var modifier in ActiveModifiers)
{
modifier.Update();
}
@@ -40,7 +40,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr)
var modifierComponent = target.GetModifierComponent();
var modifier = modifierComponent.activeModifiers.Find(x => x.GetType() == type);
var modifier = modifierComponent.ActiveModifiers.Find(x => x.GetType() == type);
if (modifier is null)
{
@@ -49,7 +49,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr)
}
modifier.OnDeactivate();
modifierComponent.activeModifiers.Remove(modifier);
modifierComponent.ActiveModifiers.Remove(modifier);
}
public static void AddModifier(PlayerControl target, uint modifierId)
@@ -70,11 +70,11 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr)
return;
}
modifierComponent.activeModifiers.Add(modifier);
modifierComponent.ActiveModifiers.Add(modifier);
modifier.Player = modifierComponent.player;
modifier.OnActivate();
if (modifier is TimedModifier timer && timer.AutoStart && target.AmOwner)
if (modifier is TimedModifier { AutoStart: true } timer && target.AmOwner)
{
timer.StartTimer();
}
+56 -4
View File
@@ -1,6 +1,8 @@
using MiraAPI.Networking;
using System;
using System.Collections.Generic;
using MiraAPI.Utilities;
using Reactor.Networking.Rpc;
namespace MiraAPI.Modifiers;
@@ -30,18 +32,68 @@ public static class ModifierManager
public static void SyncAllModifiers(int targetId = -1)
{
var data = new List<NetData>();
if (targetId == -1)
{
foreach (var player in GameData.Instance.AllPlayers)
{
data.Add(GetPlayerModifiers(player.Object));
}
}
else
{
var player = GameData.Instance.GetPlayerById((byte)targetId).Object;
data.Add(GetPlayerModifiers(player));
}
Rpc<SyncModifiersRpc>.Instance.Send(PlayerControl.LocalPlayer, data.ToArray(), true);
}
public static void HandleSyncModifiers(NetData[] data)
{
foreach (var netData in data)
{
PlayerControl plr = GameData.Instance.GetPlayerById((byte)netData.Id).Object;
foreach (var id in netData.Data)
var ids = new uint[netData.Data.Length / 4];
Buffer.BlockCopy(netData.Data, 0, ids, 0, netData.Data.Length);
var plr = GameData.Instance.GetPlayerById((byte)netData.Id).Object;
var modifierComponent = plr.GetComponent<ModifierComponent>();
if (!modifierComponent)
{
continue;
}
foreach (var modifier in modifierComponent.ActiveModifiers)
{
modifier.OnDeactivate();
}
modifierComponent.ActiveModifiers.Clear();
foreach (var id in ids)
{
ModifierComponent.AddModifier(plr, id);
}
}
}
private static NetData GetPlayerModifiers(PlayerControl player)
{
var bytes = new List<byte>();
var modifierComponent = player.GetComponent<ModifierComponent>();
if (!modifierComponent)
{
return new NetData(player.PlayerId, []);
}
foreach (var modifier in modifierComponent.ActiveModifiers)
{
bytes.AddRange(BitConverter.GetBytes(TypeToIdModifiers[modifier.GetType()]));
}
return new NetData(player.PlayerId, bytes.ToArray());
}
}
+4 -2
View File
@@ -1,10 +1,12 @@
using MiraAPI.GameOptions;
using System;
using MiraAPI.GameOptions;
using MiraAPI.Modifiers;
using MiraAPI.Roles;
using Reactor.Utilities;
using Reactor.Utilities.Extensions;
using System.Linq;
using UnityEngine;
using Object = UnityEngine.Object;
namespace MiraAPI.Utilities;
@@ -22,7 +24,7 @@ public static class Extensions
public static bool HasModifier<T>(this PlayerControl player) where T : BaseModifier
{
return player.GetModifierComponent().activeModifiers.Exists(x => x is T);
return player.GetModifierComponent().ActiveModifiers.Exists(x => x is T);
}
public static void AddModifier<T>(this PlayerControl player) where T : BaseModifier