Skip to content

Commit

Permalink
Pins WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
Mydayyy committed Feb 27, 2021
1 parent da58091 commit d4a6fe5
Show file tree
Hide file tree
Showing 6 changed files with 447 additions and 22 deletions.
126 changes: 123 additions & 3 deletions ServerSideMap/ExplorationDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ public static class ExplorationDatabase
public const int MapSizeSquared = MapSize*MapSize;

private static List<PinData> Pins = new List<PinData>();

public static List<PinData> ClientPins = new List<PinData>();

public static ZPackage Default()
{
Expand All @@ -28,6 +30,102 @@ public static ZPackage Default()
z.SetPos(0);
return z;
}

public static ZPackage PackPins(List<PinData> pins)
{
var z = new ZPackage();
z.Write((int) pins.Count);
foreach (var pin in pins)
{
z.Write(pin.Name);
z.Write(pin.Pos);
z.Write((int) pin.Type);
z.Write(pin.Checked);
}
z.SetPos(0);
return z;
}

public static List<PinData> UnpackPins(ZPackage z)
{
var pins = new List<PinData>();

var pinCount = z.ReadInt();

for (var i = 0; i < pinCount; i++)
{
var pin = new PinData
{
Name = z.ReadString(),
Pos = z.ReadVector3(),
Type = (Minimap.PinType) z.ReadInt(),
Checked = z.ReadBool()
};
pins.Add(pin);
}

return pins;
}

public static List<PinData> GetPins()
{
return Pins;
}

public static PinData ConvertPin(Minimap.PinData pin)
{
return new PinData {
Name = pin.m_name,
Pos = pin.m_pos,
Type = pin.m_type,
Checked = pin.m_checked
};
}

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

public static PinData UnpackPin(ZPackage z)
{
var pin = new PinData
{
Name = z.ReadString(),
Pos = z.ReadVector3(),
Type = (Minimap.PinType) z.ReadInt(),
Checked = z.ReadBool()
};
return pin;
}

public static void AddPin(PinData pin)
{
Pins.Add(pin);
}

public static void RemovePinSimilar(PinData needle)
{
foreach (var pin in Pins)
{
if (ArePinsSimilar(pin, needle))
{
Pins.Remove(pin);
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)
{
Expand All @@ -42,6 +140,18 @@ public static void SetMapData(ZPackage mapData)

var pinCount = mapData.ReadInt();

for (var i = 0; i < pinCount; i++)
{
var pin = new PinData
{
Name = mapData.ReadString(),
Pos = mapData.ReadVector3(),
Type = (Minimap.PinType) mapData.ReadInt(),
Checked = mapData.ReadBool()
};
Pins.Add(pin);
}

Explored = explored;
}

Expand All @@ -57,7 +167,17 @@ public static ZPackage GetMapData()
z.Write(t);
}

z.Write((int) 0);
z.Write((int) Pins.Count);

Utility.Log("Map saved. Pin Count: " + Pins.Count);

foreach (var pin in Pins)
{
z.Write(pin.Name);
z.Write(pin.Pos);
z.Write((int) pin.Type);
z.Write(pin.Checked);
}

return z;
}
Expand Down Expand Up @@ -122,7 +242,7 @@ public static ZPackage PackBoolArray(bool[] arr, int chunkId, int startIndex, in
z.Write(currentByte);
}

Utility.Log("Compressed exploration array: " + size + ":" + z.Size());
// Utility.Log("Compressed exploration array: " + size + ":" + z.Size());

return z;
}
Expand All @@ -146,7 +266,7 @@ public static bool[] UnpackBoolArray(ZPackage z, int length)
arr[i+7] = (b & (1 << 7)) != 0;
}

Utility.Log("Decompressed exploration array: " + z.Size() + ":" + arr.Length);
// Utility.Log("Decompressed exploration array: " + z.Size() + ":" + arr.Length);
return arr;
}

Expand Down
59 changes: 45 additions & 14 deletions ServerSideMap/InitialPinSync.cs
Original file line number Diff line number Diff line change
@@ -1,25 +1,41 @@
using System.Collections.Generic;
using HarmonyLib;

namespace ServerSideMap
{
public class InitialPinSync
{
public static void OnReceiveInitialDataPin(ZRpc client, ZPackage mapData)
public static void OnReceiveInitialDataPin(ZRpc client, ZPackage pinData)
{
Utility.Log("Client received initial pin data by server");

SendPinsToServer(client);
// SendPinsToServer(client);

var pins = ExplorationDatabase.UnpackPins(pinData);

Utility.Log("Client received initial pin data by server. Pins: " + pins.Count);

ExplorationDatabase.ClientPins = pins;
ClientAppendPins();
}

public static void OnClientInitialDataPin(ZRpc client, ZPackage mapData)
private static void ClientAppendPins()
{
foreach (var pin in ExplorationDatabase.ClientPins)
{
_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)
{
var z = new ZPackage();
var z = ExplorationDatabase.PackPins(ExplorationDatabase.GetPins());

if (client == null)
{
OnReceiveInitialDataPin(null, z);
Expand All @@ -32,7 +48,19 @@ private static void SendPinsToClient(ZRpc client)

private static void SendPinsToServer(ZRpc client)
{
var z = new ZPackage();
var pins = Traverse.Create(_Minimap._instance).Field("m_pins").GetValue() as List<Minimap.PinData>;
var filteredPins = new List<PinData>();

foreach (var pin in pins)
{
if (pin.m_save)
{
filteredPins.Add(ExplorationDatabase.ConvertPin(pin));
}
}

var z = ExplorationDatabase.PackPins(filteredPins);

if (client == null)
{
OnClientInitialDataPin(null, z);
Expand All @@ -45,6 +73,16 @@ private static void SendPinsToServer(ZRpc client)
}
}

[HarmonyPatch(typeof (Minimap), "ClearPins")]
private class MinimapPatchClearPins
{
// ReSharper disable once InconsistentNaming
private static void Postfix(Minimap __instance)
{
ClientAppendPins();
}
}

[HarmonyPatch(typeof (Minimap), "SetMapData", typeof(byte[]))]
private class MinimapPatchSetMapData
{
Expand All @@ -55,16 +93,9 @@ private static void Postfix(Minimap __instance)
{
SendPinsToClient(null);
}

// else
// {
// var znet = Traverse.Create(typeof(ZNet)).Field("m_instance").GetValue() as ZNet;
// ZRpc server = _ZNet.GetServerRPC(znet);
// // server.Invoke("OnClientInitialData", (object) z);
// }
}
}

// ReSharper disable once InconsistentNaming
[HarmonyPatch(typeof (ZNet), "RPC_PeerInfo")]
private class ZnetPatchRPC_PeerInfo
Expand Down
Loading

0 comments on commit d4a6fe5

Please sign in to comment.