Skip to content

Commit

Permalink
Added pin share
Browse files Browse the repository at this point in the history
  • Loading branch information
Mydayyy committed Feb 28, 2021
1 parent d4a6fe5 commit 43460b3
Show file tree
Hide file tree
Showing 9 changed files with 206 additions and 14 deletions.
20 changes: 18 additions & 2 deletions ServerSideMap/ExplorationDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public static ZPackage PackPins(List<PinData> pins)
z.Write(pin.Checked);
}
z.SetPos(0);
Utility.Log("Packing pins: " + pins.Count);
return z;
}

Expand Down Expand Up @@ -82,14 +83,15 @@ public static PinData ConvertPin(Minimap.PinData pin)
};
}

public static ZPackage PackPin(PinData pin)
public static ZPackage PackPin(PinData pin, bool skipSetPos = false)
{
var z = new ZPackage();
z.Write(pin.Name);
z.Write(pin.Pos);
z.Write((int) pin.Type);
z.Write(pin.Checked);
z.SetPos(0);
if(!skipSetPos)
z.SetPos(0);
return z;
}

Expand Down Expand Up @@ -122,13 +124,27 @@ public static void RemovePinSimilar(PinData needle)
}
}

public static void SetPinState(PinData needle, bool state)
{
foreach (var pin in Pins)
{
if (ArePinsSimilar(pin, needle))
{
pin.Checked = state;
return;
}
}
}

public static bool ArePinsSimilar(PinData pin1, PinData pin2)
{
return pin1.Name == pin2.Name && pin1.Type == pin2.Type && pin1.Pos.Equals(pin2.Pos);
}

public static void SetMapData(ZPackage mapData)
{
Pins.Clear();

var version = mapData.ReadInt();
var mapSize = mapData.ReadInt();

Expand Down
3 changes: 3 additions & 0 deletions ServerSideMap/ExplorationMapSync.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ public static class ExplorationMapSync

public static void OnClientExplore(ZRpc client, int x, int y)
{
if (!Store.IsSharingMap()) return;

ExplorationDatabase.SetExplored(x, y);
var znet = Traverse.Create(typeof(ZNet)).Field("m_instance").GetValue() as ZNet;
var mPeers = Traverse.Create((znet)).Field("m_peers").GetValue() as List<ZNetPeer>;
Expand Down Expand Up @@ -51,6 +53,7 @@ private static void Postfix(int x, int y, bool __result)

if (_blockExplore) return;

if (!Store.IsSharingMap()) return;
if (_ZNet.IsServer(_ZNet._instance))
{
OnClientExplore(null, x, y);
Expand Down
8 changes: 8 additions & 0 deletions ServerSideMap/InitialMapSync.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ public class InitialMapSync

public static void OnReceiveMapDataInitial(ZRpc client, ZPackage mapData)
{
if (!Store.IsSharingMap()) return;

mapData.SetPos(0);

var chunk = mapData.ReadInt();
Expand Down Expand Up @@ -61,6 +63,8 @@ public static void OnReceiveMapDataInitial(ZRpc client, ZPackage mapData)

public static void OnClientInitialData(ZRpc client, ZPackage mapData)
{
if (!Store.IsSharingMap()) return;

mapData.SetPos(0);

var chunk = mapData.ReadInt();
Expand All @@ -80,6 +84,8 @@ private class ZnetPatchRPC_PeerInfo
// ReSharper disable once InconsistentNaming
private static void Postfix(ZRpc rpc, ZNet __instance)
{
if (!Store.IsSharingMap()) return;

if (__instance.IsServer())
{
SendChunkToClient(rpc, 0);
Expand Down Expand Up @@ -131,6 +137,8 @@ private class MinimapPatchSetMapData
// ReSharper disable once InconsistentNaming
private static void Postfix(Minimap __instance)
{
if (!Store.IsSharingMap()) return;

if (_ZNet.IsServer(_ZNet._instance))
{
SendChunkToClient(null, 0);
Expand Down
17 changes: 15 additions & 2 deletions ServerSideMap/InitialPinSync.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using BepInEx.Configuration;
using HarmonyLib;

namespace ServerSideMap
Expand All @@ -7,9 +8,12 @@ public class InitialPinSync
{
public static void OnReceiveInitialDataPin(ZRpc client, ZPackage pinData)
{

// SendPinsToServer(client);

Store.ServerPinShare = true;

if (!Store.IsSharingPin()) return;

var pins = ExplorationDatabase.UnpackPins(pinData);

Utility.Log("Client received initial pin data by server. Pins: " + pins.Count);
Expand All @@ -20,20 +24,29 @@ public static void OnReceiveInitialDataPin(ZRpc client, ZPackage pinData)

private static void ClientAppendPins()
{
if (!Store.IsSharingPin()) return;

Utility.Log("ClientAppendPins " + ExplorationDatabase.ClientPins.Count);
foreach (var pin in ExplorationDatabase.ClientPins)
{
var mapPin = PinSync.GetMapPin(pin);
if (mapPin != null)
{
_Minimap.RemovePin(_Minimap._instance, mapPin);
}
_Minimap.AddPin(_Minimap._instance, pin.Pos, pin.Type, pin.Name, false, pin.Checked);
}
}

public static void OnClientInitialDataPin(ZRpc client, ZPackage pinData)
{
Utility.Log("Server received initial pin data by client");

}

private static void SendPinsToClient(ZRpc client)
{
if (!Store.IsSharingPin()) return;

var z = ExplorationDatabase.PackPins(ExplorationDatabase.GetPins());

if (client == null)
Expand Down
128 changes: 122 additions & 6 deletions ServerSideMap/PinSync.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@ namespace ServerSideMap
public class PinSync
{
private static Minimap.PinData CurrentPin = null;
private static Minimap.PinData LatestClosestPin = null;


public static void OnClientAddPin(ZRpc client, ZPackage pinData)
{
if (!Store.IsSharingPin()) return;

var znet = Traverse.Create(typeof(ZNet)).Field("m_instance").GetValue() as ZNet;
var mPeers = Traverse.Create((znet)).Field("m_peers").GetValue() as List<ZNetPeer>;

Expand All @@ -34,6 +37,8 @@ public static void OnClientAddPin(ZRpc client, ZPackage pinData)

public static void OnServerAddPin(ZRpc client, ZPackage pinData)
{
if (!Store.IsSharingPin()) return;

var pin = ExplorationDatabase.UnpackPin(pinData);

_Minimap.AddPin(_Minimap._instance, pin.Pos, pin.Type, pin.Name, false, pin.Checked);
Expand All @@ -45,6 +50,8 @@ public static void OnServerAddPin(ZRpc client, ZPackage pinData)

public static void OnClientRemovePin(ZRpc client, ZPackage pinData)
{
if (!Store.IsSharingPin()) return;

var znet = Traverse.Create(typeof(ZNet)).Field("m_instance").GetValue() as ZNet;
var mPeers = Traverse.Create((znet)).Field("m_peers").GetValue() as List<ZNetPeer>;

Expand All @@ -68,8 +75,9 @@ public static void OnClientRemovePin(ZRpc client, ZPackage pinData)

public static void OnServerRemovePin(ZRpc client, ZPackage pinData)
{
if (!Store.IsSharingPin()) return;

Utility.Log("Client deleted pin by server");


var pin = ExplorationDatabase.UnpackPin(pinData);

Expand All @@ -89,8 +97,58 @@ public static void OnServerRemovePin(ZRpc client, ZPackage pinData)
return;
}
_Minimap.RemovePin(_Minimap._instance, mapPin);
}

public static void OnClientCheckPin(ZRpc client, ZPackage data)
{
if (!Store.IsSharingPin()) return;

Utility.Log("Server checked pin by client");


var pin = ExplorationDatabase.UnpackPin(data);
var state = data.ReadBool();

ExplorationDatabase.SetPinState(pin, state);

var znet = Traverse.Create(typeof(ZNet)).Field("m_instance").GetValue() as ZNet;
var mPeers = Traverse.Create((znet)).Field("m_peers").GetValue() as List<ZNetPeer>;
foreach (var peer in mPeers)
{
if (peer.IsReady())
{
if (peer.m_rpc == client)
{
continue;
}
var z = ExplorationDatabase.PackPin(pin, true);
z.Write(state);
peer.m_rpc.Invoke("OnServerCheckPin", (object) z);
}
}
}

public static void OnServerCheckPin(ZRpc client, ZPackage data)
{
if (!Store.IsSharingPin()) return;

Utility.Log("Client checked pin by server");

var pin = ExplorationDatabase.UnpackPin(data);
var state = data.ReadBool();

foreach (var clientPin in ExplorationDatabase.ClientPins)
{
if (ExplorationDatabase.ArePinsSimilar(clientPin, pin))
{
clientPin.Checked = state;
var mapPin = GetMapPin(clientPin);
if (mapPin != null)
{
mapPin.m_checked = state;
}
break;
}
}
}

[HarmonyPatch(typeof (Minimap), "ShowPinNameInput")]
Expand All @@ -105,9 +163,14 @@ private static void Postfix(Minimap __instance, Minimap.PinData pin)

public static void SendPinToServer(Minimap.PinData pin)
{
if (!Store.IsSharingPin()) return;

var convertedPin = ExplorationDatabase.ConvertPin(pin);
var data = ExplorationDatabase.PackPin(convertedPin);

pin.m_save = false;
ExplorationDatabase.ClientPins.Add(convertedPin);

if (!_ZNet.IsServer(_ZNet._instance))
{
_ZNet.GetServerRPC(_ZNet._instance).Invoke("OnClientAddPin", data);
Expand All @@ -120,16 +183,35 @@ public static void SendPinToServer(Minimap.PinData pin)

public static void RemovePinFromServer(PinData pin)
{
var convertedPin = pin;
var data = ExplorationDatabase.PackPin(convertedPin);
if (!Store.IsSharingPin()) return;

var data = ExplorationDatabase.PackPin(pin);

if (!_ZNet.IsServer(_ZNet._instance))
{
_ZNet.GetServerRPC(_ZNet._instance).Invoke("OnClientRemovePin", data);
}
else
{
OnClientAddPin(null, data);
OnClientRemovePin(null, data);
}
}

public static void CheckPinOnServer(PinData pin, bool state)
{
if (!Store.IsSharingPin()) return;

var data = ExplorationDatabase.PackPin(pin, true);
data.Write(state);
data.SetPos(0);

if (!_ZNet.IsServer(_ZNet._instance))
{
_ZNet.GetServerRPC(_ZNet._instance).Invoke("OnClientCheckPin", data);
}
else
{
OnClientCheckPin(null, data);
}
}

Expand Down Expand Up @@ -183,12 +265,43 @@ public static PinData GetClientPin(Minimap.PinData needle)
return null;
}

// public void OnMapLeftClick()
// {
// ZLog.Log((object) "Left click");
// Minimap.PinData closestPin = this.GetClosestPin(this.ScreenToWorldPoint(Input.get_mousePosition()), this.m_removeRadius * (this.m_largeZoom * 2f));
// if (closestPin == null)
// return;
// closestPin.m_checked = !closestPin.m_checked;
// }

[HarmonyPatch(typeof (Minimap), "OnMapLeftClick")]
private class MinimapPatchOnMapLeftClick
{
// ReSharper disable once InconsistentNaming
private static void Postfix(Minimap __instance)
{
if (LatestClosestPin == null) return;

var clientPin = GetClientPin(LatestClosestPin);

if (clientPin == null) return;

clientPin.Checked = LatestClosestPin.m_checked;

CheckPinOnServer(clientPin, clientPin.Checked);
}
}

[HarmonyPatch(typeof (Minimap), "GetClosestPin", typeof(Vector3), typeof(float))]
private class MinimapPatchGetClosestPin
{
// ReSharper disable once InconsistentNaming
private static void Postfix(Minimap __instance, ref Minimap.PinData __result, Vector3 pos, float radius)
{
if (!Store.IsSharingPin()) return;

LatestClosestPin = __result;

var pinData = (PinData) null;
var num1 = 999999f;
foreach (var p in ExplorationDatabase.ClientPins)
Expand All @@ -202,22 +315,25 @@ private static void Postfix(Minimap __instance, ref Minimap.PinData __result, Ve
}

if (pinData == null) return;

var pin = GetMapPin(pinData);
if (__result == null)
{
__result = pin;
LatestClosestPin = pin;
return;
}

var distance = Utils.DistanceXZ(pos, __result.m_pos);
if (distance > num1)
{
__result = pin;
LatestClosestPin = pin;
}
}
}

[HarmonyPatch(typeof (Minimap), "RemovePin")]
[HarmonyPatch(typeof (Minimap), "RemovePin", typeof(Minimap.PinData))]
private class MinimapPatchRemovePin
{
// ReSharper disable once InconsistentNaming
Expand Down
Loading

0 comments on commit 43460b3

Please sign in to comment.