private static void RemoveAllBlocks(BlockManager __instance, BlockManager.RemoveAllAction option) { Tank tank = (Tank)IngressPoint.tank.GetValue(__instance); if (tank.rbody.isKinematic) { tank.rbody.isKinematic = false; } IngressPoint.m_RemoveBlockRecursionCounter.SetValue(__instance, 1); List <TankBlock> allBlocks = (List <TankBlock>)IngressPoint.allBlocks.GetValue(__instance); Action <Tank, TankBlock> DetachCallback = (Action <Tank, TankBlock>)IngressPoint.m_DetachCallback.GetValue(__instance); foreach (TankBlock tankBlock in allBlocks) { bool flag = option != BlockManager.RemoveAllAction.Recycle; tankBlock.OnDetach(tank, flag, flag); tank.NotifyBlock(tankBlock, false); tankBlock.RemoveLinks(null, true); if (DetachCallback != null) { DetachCallback(tank, tankBlock); } switch (option) { case BlockManager.RemoveAllAction.ApplyPhysicsKick: tankBlock.trans.parent = null; tankBlock.trans.Recycle(true); break; case BlockManager.RemoveAllAction.Recycle: tankBlock.trans.Recycle(true); break; case BlockManager.RemoveAllAction.HandOff: tankBlock.trans.parent = null; tankBlock.trans.Recycle(true); break; default: d.LogError("BlockManager.RemoveAllBlocks - No remove action found for " + option); break; } } IngressPoint.m_RemoveBlockRecursionCounter.SetValue(__instance, 0); allBlocks.Clear(); TankBlock[,,] l_blockTable = (TankBlock[, , ])IngressPoint.blockTable.GetValue(__instance); byte[,,] l_m_APbitfield = (byte[, , ])IngressPoint.m_APbitfield.GetValue(__instance); Array.Clear(l_blockTable, 0, l_blockTable.Length); Array.Clear(l_m_APbitfield, 0, l_m_APbitfield.Length); IngressPoint.changed.SetValue(__instance, false); IngressPoint.rootBlock.SetValue(__instance, null); IngressPoint._blockCentreBounds.SetValue(__instance, IngressPoint.k_InvalidBounds); }
private static void HostRemoveAllBlocks(BlockManager __instance, BlockManager.RemoveAllAction option) { d.Assert(ManNetwork.IsHost, "Can't call HostRemoveAllBlocks on client"); Tank tank = (Tank)IngressPoint.tank.GetValue(__instance); if (ManNetwork.IsNetworked && tank.netTech != null) { RemoveAllBlocksMessage message = new RemoveAllBlocksMessage { m_Action = option }; Singleton.Manager <ManNetwork> .inst.SendToAllExceptClient(-1, TTMsgType.RemoveAllBlocksFromTech, message, tank.netTech.netId, true); IngressPoint.RemoveAllBlocks(__instance, option); return; } IngressPoint.RemoveAllBlocks(__instance, option); }