Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions Source/Client/AsyncTime/AsyncTimeComp.cs
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,33 @@ bool SetState(Designator designator)
Find.Selector.selected.Add(zone);
}

if (designator is Designator_Plan_Add designatorPlanAdd)
{
designatorPlanAdd.colorDef = SyncSerialization.ReadSync<ColorDef>(data);
designator = designatorPlanAdd;
}

if (designator is Designator_Plan_Copy designatorPlanCopy)
{
designatorPlanCopy.cells.Clear();
designatorPlanCopy.cells.AddRange(SyncSerialization.ReadSync<List<IntVec3>>(data));
designator = designatorPlanCopy;
}

if (designator is Designator_Plan_CopySelectionPaste pasteDesignator)
{
pasteDesignator.indices = SyncSerialization.ReadSync<CellIndices>(data);
pasteDesignator.rotation = SyncSerialization.ReadSync<Rot4>(data);

pasteDesignator.grid.Clear();
pasteDesignator.grid.AddRange(SyncSerialization.ReadSync<List<ColorDef>>(data));

pasteDesignator.colors.Clear();
pasteDesignator.colors.AddRange(SyncSerialization.ReadSync<HashSet<ColorDef>>(data));

designator = pasteDesignator;
}

return true;
}

Expand All @@ -406,17 +433,13 @@ void RestoreState()
if (mode == DesignatorMode.SingleCell)
{
IntVec3 cell = SyncSerialization.ReadSync<IntVec3>(data);
if (designator is Designator_Plan_Add addDesignator)
addDesignator.colorDef = SyncSerialization.ReadSync<ColorDef>(data);

designator.DesignateSingleCell(cell);
designator.Finalize(true);
}
else if (mode == DesignatorMode.MultiCell)
{
IntVec3[] cells = SyncSerialization.ReadSync<IntVec3[]>(data);
if (designator is Designator_Plan_Add addDesignator)
addDesignator.colorDef = SyncSerialization.ReadSync<ColorDef>(data);

designator.DesignateMultiCell(cells);
}
Expand Down
4 changes: 3 additions & 1 deletion Source/Client/MultiplayerStatic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,9 @@ void TryPatch(MethodBase original, HarmonyMethod prefix = null, HarmonyMethod po
};

foreach (Type t in typeof(Designator).AllSubtypesAndSelf()
.Except(typeof(Designator_MechControlGroup))) // Opens float menu, sync that instead
// Designator_MechControlGroup Opens float menu, sync that instead
// Designator_Plan_CopySelection creates the placement gizmo, this shouldn't be synced
.Except([typeof(Designator_MechControlGroup), typeof(Designator_Plan_CopySelection)]))
{
foreach ((string m, Type[] args) in designatorMethods)
{
Expand Down
19 changes: 15 additions & 4 deletions Source/Client/Patches/Designators.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using HarmonyLib;
using Multiplayer.Client.Util;
using Multiplayer.Common;
using RimWorld;
using System;
Expand All @@ -25,7 +26,6 @@ public static class DesignatorPatches
public static bool DesignateSingleCell(Designator __instance, IntVec3 __0)
{
if (!Multiplayer.InInterface) return true;
if (__instance is Designator_Plan_Copy or Designator_Plan_CopySelection or Designator_Plan_CopySelectionPaste) return true;

Designator designator = __instance;

Expand All @@ -36,9 +36,6 @@ public static bool DesignateSingleCell(Designator __instance, IntVec3 __0)
WriteData(writer, DesignatorMode.SingleCell, designator);
SyncSerialization.WriteSync(writer, __0);

if (__instance is Designator_Plan_Add addDesignator)
SyncSerialization.WriteSync(writer, addDesignator.colorDef);

SendSyncCommand(map.uniqueID, writer);
Multiplayer.WriterLog.AddCurrentNode(writer);

Expand Down Expand Up @@ -124,6 +121,20 @@ private static void WriteData(ByteWriter data, DesignatorMode mode, Designator d

if (designator is Designator_Zone)
SyncSerialization.WriteSync(data, Find.Selector.SelectedZone);

if (designator is Designator_Plan_Add addDesignator)
SyncSerialization.WriteSync(data, addDesignator.colorDef);

if (designator is Designator_Plan_Copy copyDesignator)
SyncSerialization.WriteSync(data, copyDesignator.cells);

if (designator is Designator_Plan_CopySelectionPaste pasteDesignator)
{
SyncSerialization.WriteSync(data, pasteDesignator.indices);
SyncSerialization.WriteSync(data, pasteDesignator.rotation);
SyncSerialization.WriteSync(data, pasteDesignator.grid);
SyncSerialization.WriteSync(data, pasteDesignator.colors);
}
}
}

Expand Down
44 changes: 0 additions & 44 deletions Source/Client/Patches/Plans.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@
using RimWorld;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Verse;

namespace Multiplayer.Client.Patches
Expand Down Expand Up @@ -38,45 +35,4 @@ public static void SyncSetPlanColor(Plan plan, ColorDef color)
AccessTools.Method(typeof(Plan), "CheckContiguous").Invoke(plan, null);
}
}

[HarmonyPatch(typeof(Designator_Plan_Copy), nameof(Designator_Plan_Copy.DesignateSingleCell))]
public static class PlanCopySingleCellPatch
{
static bool Prefix(Designator_Plan_Copy __instance, IntVec3 c)
{
if (Multiplayer.Client == null) return true;

SyncDesignateSingleCell(__instance, __instance.cells, __instance.colorDef);
return false;
}

[SyncMethod]
public static void SyncDesignateSingleCell(Designator_Plan_Add designator, List<IntVec3> cells, ColorDef colorDef)
{
designator.colorDef = colorDef;
designator.PlanCells(cells);
}
}

[HarmonyPatch(typeof(Designator_Plan_CopySelectionPaste), nameof(Designator_Plan_CopySelectionPaste.DesignateSingleCell))]
public static class PlanCopySelectionPasteSingleCellPatch
{
static bool Prefix(Designator_Plan_CopySelectionPaste __instance, IntVec3 c)
{
if (Multiplayer.Client == null) return true;

foreach (ColorDef color in __instance.colors)
SyncDesignateSingleCell(__instance, __instance.GetCurrentCells(c, color).ToList(), color);

return false;
}

[SyncMethod]
public static void SyncDesignateSingleCell(Designator_Plan_CopySelectionPaste designator, List<IntVec3> cells, ColorDef colorDef)
{
designator.SelectedPlan = null;
designator.colorDef = colorDef;
designator.PlanCells(cells);
}
}
}
8 changes: 8 additions & 0 deletions Source/Client/Syncing/Dict/SyncDictMisc.cs
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,14 @@ public static class SyncDictMisc
sync.Bind(ref vec.z);
}
},
{
(ByteWriter data, CellIndices cellIndices) =>
{
data.WriteInt32(cellIndices.sizeX);
data.WriteInt32(cellIndices.sizeZ);
},
(ByteReader data) => new CellIndices(data.ReadInt32(), data.ReadInt32())
}
#endregion
};
}
Expand Down
Loading