Esempio n. 1
0
 static void Postfix(MapRoomFunctionality __instance)
 {
     if (__instance.GetComponentInParent <HabitatPlatform.Tag>())
     {
         __instance.gameObject.AddComponent <MapRoomFixer>();
     }
 }
Esempio n. 2
0
 public static bool Prefix(MapRoomFunctionality __instance, ref float __result)
 {
     __result = Mathf.Min(BSRSettings.Instance.ScannerBlipRange,
                          BSRSettings.Instance.ScannerMinRange +
                          (float)__instance.storageContainer.container.GetCount(TechType.MapRoomUpgradeScanRange) *
                          BSRSettings.Instance.ScannerUpgradeAddedRange);
     return(false);
 }
Esempio n. 3
0
        public static bool GetScanRangePrefix(MapRoomFunctionality __instance, ref float __result)
        {
            if (__instance is ScannerChipFunctionality)
            {
                __result = Mathf.Min(5000f, 50f + (float)Inventory.main.container.GetCount(TechType.MapRoomUpgradeScanRange) * 50f);
                return(false);
            }

            return(true);
        }
Esempio n. 4
0
        public static bool StartScanningPrefix(MapRoomFunctionality __instance, TechType newTypeToScan)
        {
            if (__instance is ScannerChipFunctionality)
            {
                __instance.typeToScan = newTypeToScan;
                __instance.ObtainResourceNodes(__instance.typeToScan);
                __instance.scanActive = __instance.typeToScan > TechType.None;
                return(false);
            }

            return(true);
        }
Esempio n. 5
0
        public static bool OnResourceRemovedPrefix(MapRoomFunctionality __instance, ResourceTracker.ResourceInfo info)
        {
            if (__instance is ScannerChipFunctionality)
            {
                if (__instance.typeToScan == info.techType)
                {
                    __instance.resourceNodes.Remove(info);
                    __instance.numNodesScanned--;
                }
                return(false);
            }

            return(true);
        }
        private GameObject FindUntaggedMapRoomFunctionality(Base latestBase)
        {
            foreach (Transform child in latestBase.transform)
            {
                NitroxEntity         nitroxEntity         = child.GetComponent <NitroxEntity>();
                MapRoomFunctionality mapRoomFunctionality = child.GetComponent <MapRoomFunctionality>();

                if (mapRoomFunctionality && !nitroxEntity)
                {
                    return(child.gameObject);
                }
            }

            throw new Exception("Unable to locate recently built map room");
        }
        static private bool AddResourceNodeIfWithinScanRange(MapRoomFunctionality mapRoom, List <ResourceTracker.ResourceInfo> resourceNodes, ResourceTracker.ResourceInfo info)
        {
            float scanRange    = mapRoom.GetScanRange();
            float sqrScanRange = scanRange * scanRange;

            if (mapRoom.typeToScan == info.techType && (mapRoom.wireFrameWorld.position - info.position).sqrMagnitude <= sqrScanRange)
            {
                Logger.Debug(string.Format("Techtype \"{0}\" is within scan range.", info.techType));
                resourceNodes.Add(info);
            }
            else
            {
                if (mapRoom.typeToScan == info.techType)
                {
                    Logger.Debug(string.Format("Techtype \"{0}\" is out of scan range.", info.techType));
                }
            }

            return(false);
        }
Esempio n. 8
0
        public static bool StartPrefix(MapRoomFunctionality __instance)
        {
            if (__instance is ScannerChipFunctionality)
            {
                __instance.wireFrameWorld = Player.main.transform;
                if (__instance.typeToScan != TechType.None)
                {
                    __instance.StartScanning(__instance.typeToScan);
                }
                else
                {
                    __instance.StartScanning(TechType.TimeCapsule);
                }

                ResourceTracker.onResourceDiscovered += __instance.OnResourceDiscovered;
                ResourceTracker.onResourceRemoved    += __instance.OnResourceRemoved;
                MapRoomFunctionality.mapRooms.Add(__instance);

                return(false);
            }

            return(true);
        }
Esempio n. 9
0
 public static bool UpdatePrefix(MapRoomFunctionality __instance)
 {
     return(!(__instance is ScannerChipFunctionality));
 }
 public static bool Prefix(MapRoomFunctionality __instance, ref float __result)
 {
     __result = Mathf.Max(BSRSettings.Instance.ScannerSpeedMinimumInterval, BSRSettings.Instance.ScannerSpeedNormalInterval - __instance.storageContainer.container.GetCount(TechType.MapRoomUpgradeScanSpeed) * BSRSettings.Instance.ScannerSpeedIntervalPerModule);
     return false;
 }
Esempio n. 11
0
 public static bool Prefix(MapRoomFunctionality __instance, ref float __result)
 {
     __result = __instance.hologramRadius / BSRSettings.Instance.ScannerBlipRange;
     return(false);
 }
 public ScannerRoomPowerConsumerInfo(MapRoomFunctionality scanner) : base(scanner.name)
 {
     this.scanner = scanner;
 }
 static bool Prefix(MapRoomFunctionality __instance, List <ResourceTracker.ResourceInfo> ___resourceNodes, ResourceTracker.ResourceInfo info)
 {
     return(MapRoomFunctionality_OnResourceDiscovered_Patch.AddResourceNodeIfWithinScanRange(__instance, ___resourceNodes, info));
 }
        public static IEnumerator ScanInSleepingBatchCellsNotQueuesCoroutine(this MapRoomFunctionality mapRoom, int numOfBatchRings)
        {
            var largeWorldStreamer = LargeWorldStreamer.main;
            var cellManager        = LargeWorldStreamer.main.cellManager;

            Logger.Info(string.Format("Starting scan in sleeping/unloaded BatchCells"));

            var batch2Cells = cellManager.GetBatch2Cells();

            var containingBatch = largeWorldStreamer.GetContainingBatch(mapRoom.transform.position);
            var scanBounds      = new Int3.Bounds(containingBatch - numOfBatchRings, containingBatch + numOfBatchRings);

            var orderedScanBatches = scanBounds.ToEnumerable()
                                     .OrderBy(batch => (mapRoom.transform.position - largeWorldStreamer.GetBatchCenter(batch)).sqrMagnitude);

            using (var serializerProxy = ProtobufSerializerPool.GetProxy())
            {
                foreach (var batch in orderedScanBatches)
                {
                    Logger.Debug(string.Format("Now at batch \"{0}\"", batch));

                    var batchVisible = true;
                    if (!batch2Cells.TryGetValue(batch, out var batchCells))
                    {
                        Logger.Debug(string.Format("Loading cells of batch \"{0}\"", batch));

                        batchCells = BatchCells.GetFromPool(cellManager, largeWorldStreamer, batch);

                        var loadBatchCellsTask = new LoadBatchCellsTask(cellManager, batchCells);
                        UWE.Utils.EnqueueWrap(workerThread, loadBatchCellsTask);
                        yield return(new AsyncAwaiter(loadBatchCellsTask));

                        batchVisible = false;
                    }

                    for (int level = 0; level <= 3; level++)
                    {
                        Logger.Debug(string.Format("Getting cells level {0} of batch \"{1}\"", level, batchCells.batch));

                        var cellsTier        = batchCells.GetCells(level);
                        var orderedCellsTier = cellsTier
                                               .Where(cell => cell != null)
                                               .OrderBy(cell => (mapRoom.transform.position - cell.GetCenter()).sqrMagnitude);

                        foreach (var entityCell in orderedCellsTier)
                        {
                            Logger.Debug(string.Format("Getting cell {0} of batch \"{1}\"", entityCell.CellId, batchCells.batch));

                            if (entityCell != null && !entityCell.IsProcessing())
                            {
                                SerialData serialData;
                                if (batchVisible)
                                {
                                    serialData = new SerialData();
                                    serialData.CopyFrom(entityCell.GetSerialData());
                                }
                                else
                                {
                                    serialData = entityCell.GetSerialData();
                                }

                                if (serialData.Length > 0)
                                {
                                    Logger.Debug(string.Format("Entity cell \"{0}\" is not awake and has serialData", entityCell.ToString()));

                                    UnityEngine.GameObject liveRoot;

                                    using (MemoryStream stream = new MemoryStream(serialData.Data.Array, serialData.Data.Offset, serialData.Data.Length, false))
                                    {
                                        bool headerDeserialized = serializerProxy.Value.TryDeserializeStreamHeader(stream);
                                        if (headerDeserialized)
                                        {
                                            CoroutineTask <UnityEngine.GameObject> task = serializerProxy.Value.DeserializeObjectTreeAsync(stream, true, 0);

                                            yield return(task);

                                            liveRoot = task.GetResult();
                                        }
                                        else
                                        {
                                            liveRoot = null;
                                        }
                                    }

                                    if (liveRoot)
                                    {
                                        Logger.Debug(string.Format("Entity cell \"{0}\" can have liveRoot {1}", entityCell.ToString(), liveRoot.ToString()));

                                        var resourceTrackers = liveRoot.GetComponentsInChildren <ResourceTracker>(true);
                                        foreach (var resourceTracker in resourceTrackers)
                                        {
                                            resourceTracker.Start();
                                            Logger.Debug(string.Format("Entity cell \"{0}\" invoked \"Start\" for {1}", entityCell.ToString(), resourceTracker.gameObject.ToString()));

                                            resourceTracker.OnDestroy();
                                        }

                                        UnityEngine.Object.Destroy(liveRoot);
                                    }
                                    else
                                    {
                                        Logger.Debug(string.Format("Entity cell \"{0}\" can't have liveRoot", entityCell.ToString()));
                                    }
                                }

                                SerialData waiterData;
                                if (batchVisible)
                                {
                                    waiterData = new SerialData();
                                    waiterData.CopyFrom(entityCell.GetWaiterData());
                                }
                                else
                                {
                                    waiterData = entityCell.GetWaiterData();
                                }

                                if (waiterData.Length > 0)
                                {
                                    Logger.Debug(string.Format("Entity cell \"{0}\" is not awake and has waiterData", entityCell.ToString()));

                                    UnityEngine.GameObject waiterRoot;

                                    using (MemoryStream stream = new MemoryStream(waiterData.Data.Array, waiterData.Data.Offset, waiterData.Data.Length, false))
                                    {
                                        while (stream.Position < waiterData.Length)
                                        {
                                            CoroutineTask <UnityEngine.GameObject> task = serializerProxy.Value.DeserializeObjectTreeAsync(stream, true, 0);

                                            yield return(task);

                                            waiterRoot = task.GetResult();
                                            if (waiterRoot)
                                            {
                                                Logger.Debug(string.Format("Entity cell \"{0}\" can have waiterRoot {1}", entityCell.ToString(), waiterRoot.ToString()));

                                                var resourceTrackers = waiterRoot.GetComponentsInChildren <ResourceTracker>(true);
                                                foreach (var resourceTracker in resourceTrackers)
                                                {
                                                    resourceTracker.Start();
                                                    Logger.Debug(string.Format("Entity cell \"{0}\" invoked \"Start\" for {1}", entityCell.ToString(), resourceTracker.gameObject.ToString()));

                                                    resourceTracker.OnDestroy();
                                                }

                                                UnityEngine.Object.Destroy(waiterRoot);
                                            }
                                        }
                                    }
                                }

                                SerialData legacyData;
                                if (batchVisible)
                                {
                                    legacyData = new SerialData();
                                    legacyData.CopyFrom(entityCell.GetLegacyData());
                                }
                                else
                                {
                                    legacyData = entityCell.GetLegacyData();
                                }

                                if (legacyData.Length > 0)
                                {
                                    Logger.Debug(string.Format("Entity cell \"{0}\" has legacyData", entityCell.ToString()));

                                    UnityEngine.GameObject legacyRoot;

                                    using (MemoryStream stream = new MemoryStream(legacyData.Data.Array, legacyData.Data.Offset, legacyData.Data.Length, false))
                                    {
                                        bool headerDeserialized = serializerProxy.Value.TryDeserializeStreamHeader(stream);
                                        if (headerDeserialized)
                                        {
                                            CoroutineTask <UnityEngine.GameObject> task = serializerProxy.Value.DeserializeObjectTreeAsync(stream, true, 0);

                                            yield return(task);

                                            legacyRoot = task.GetResult();
                                        }
                                        else
                                        {
                                            legacyRoot = null;
                                        }
                                    }

                                    if (legacyRoot)
                                    {
                                        Logger.Debug(string.Format("Entity cell \"{0}\" can have legacyRoot {1}", entityCell.ToString(), legacyRoot.ToString()));

                                        var resourceTrackers = legacyRoot.GetComponentsInChildren <ResourceTracker>(true);
                                        foreach (var resourceTracker in resourceTrackers)
                                        {
                                            resourceTracker.Start();
                                            Logger.Debug(string.Format("Entity cell \"{0}\" invoked \"Start\" for {1}", entityCell.ToString(), resourceTracker.gameObject.ToString()));

                                            resourceTracker.OnDestroy();
                                        }

                                        UnityEngine.Object.Destroy(legacyRoot);
                                    }
                                }
                            }
                        }
                    }

                    if (!batchVisible)
                    {
                        Logger.Debug(string.Format("Unloading cells of batch \"{0}\"", batch));
                        BatchCells.ReturnToPool(batchCells);
                    }
                    ;

                    yield return(null);
                }
            }
            Logger.Info(string.Format("Finishing scan in sleeping/unloaded BatchCells"));

            yield break;
        }
Esempio n. 15
0
 void Awake()
 {
     $"MapRoomFixer: added".logDbg();
     lastPosition = transform.position;
     mrf          = GetComponent <MapRoomFunctionality>();
 }