private static void InitClusters(ChainedPuzzleManager instance) { foreach (CustomClusterScan cluster in ConfigManager.CustomContent.ScanHolder.Clusters) { Log.Debug($"Adding cluster with ID of [{cluster.PersistentID}]"); //Base Instance GameObject clusterBase = instance.m_puzzleComponentPrefabs[cluster.BaseCluster]; GameObject clusterPrefab = UnityEngine.Object.Instantiate(clusterBase); clusterPrefab.transform.position = new Vector3(1000, 1000, 1000); //Get references CP_Cluster_Core clusterCore = clusterPrefab.GetComponent <CP_Cluster_Core>(); GameObject scanPrefab = instance.m_puzzleComponentPrefabs[cluster.BioscanID]; //Set values clusterCore.m_amountOfPuzzles = cluster.ClusterCount; clusterCore.m_childPuzzlePrefab = scanPrefab; clusterCore.m_distanceBetween = cluster.DistanceBetweenScans; clusterCore.m_revealWithHoloPath = cluster.RevealWithHoloPath; instance.m_puzzleComponentPrefabs.Add(cluster.PersistentID, clusterPrefab); } }
//TODO: null checks private static void InitScans(ChainedPuzzleManager instance) { foreach (CustomBioScan scan in ConfigManager.CustomContent.ScanHolder.Scans) { Log.Debug($"Adding scan with ID of [{scan.PersistentID}]"); //Base instance GameObject scanBase = instance.m_puzzleComponentPrefabs[scan.BaseScan]; GameObject scanPrefab = UnityEngine.Object.Instantiate(scanBase); scanPrefab.transform.position = new Vector3(1000, 1000, 1000); //Setup Scanner CP_PlayerScanner playerScanner = scanPrefab.GetComponent <CP_PlayerScanner>(); playerScanner.m_reduceSpeed = scan.ReduceSpeed; playerScanner.m_reduceWhenNoPlayer = scan.ReduceWhenNoPlayer; playerScanner.m_scanSpeedDecline = scan.ScanSpeedDecline; playerScanner.m_scanRadius = scan.ScanRadius; playerScanner.m_scanSpeeds = scan.PlayersInScanMulti; playerScanner.m_requireAllPlayers = scan.RequireAll; //Setup Graphics CP_Bioscan_Graphics scanGx = scanPrefab.GetComponent <CP_Bioscan_Graphics>(); scanGx.m_radius = scan.BioScanGraphics.Radius; scanGx.m_colors = ConvertToColorMode(scan.BioScanGraphics.colorModeColor); instance.m_puzzleComponentPrefabs.Add(scan.PersistentID, scanPrefab); } }
public static void Postfix(ChainedPuzzleManager __instance) { if (ConfigManager.CustomContent.ScanHolder != null) { InitScans(__instance); InitClusters(__instance); } }
private static T SetupBase <T>(CPBlock block, LG_Area area, Vector3 position, Transform parent) where T : CPContext, new() { var context = new T() { }; if (IsBuildDone) { CreatePuzzleInstance(); } else { BuildQueue += CreatePuzzleInstance; } return(context); void CreatePuzzleInstance() { context.Instance = ChainedPuzzleManager.CreatePuzzleInstance(block, area, position, parent); context.Instance.add_OnPuzzleSolved(new Action(context.Solved_Internal)); context.Setup(position); } }
public static void Postfix(ChainedPuzzleManager __instance) { //ChainedPuzzleTypeDataBlock[] allBlocks = GameDataBlockBase<ChainedPuzzleTypeDataBlock>.GetAllBlocks(); //This needs to be cleaned up var invoidable = UnityEngine.Object.Instantiate(__instance.m_puzzleComponentPrefabs[8]); var invoidableEndTrigger = UnityEngine.Object.Instantiate(__instance.m_puzzleComponentPrefabs[8]); //System Error var sysEr1 = UnityEngine.Object.Instantiate(__instance.m_puzzleComponentPrefabs[9]); var sysEr1Core = sysEr1.GetComponent <CP_Cluster_Core>(); var sysEr1Prefab = UnityEngine.Object.Instantiate(sysEr1Core.m_childPuzzlePrefab); var sysEr1PrefabCore = sysEr1Prefab.GetComponent <CP_PlayerScanner>(); sysEr1PrefabCore.m_requireAllPlayers = true; sysEr1PrefabCore.m_scanProgression = 2.0f; sysEr1Core.m_childPuzzlePrefab = sysEr1Prefab; //Sys er 2 var sysEr2 = UnityEngine.Object.Instantiate(__instance.m_puzzleComponentPrefabs[6]); var sysEr2Scan = sysEr2.GetComponent <CP_PlayerScanner>(); sysEr2Scan.m_requireAllPlayers = false; //Sys Er 3 var sysEr3 = UnityEngine.Object.Instantiate(__instance.m_puzzleComponentPrefabs[4]); // Cluster var sysEr4 = UnityEngine.Object.Instantiate(__instance.m_puzzleComponentPrefabs[5]); // Cluster var sysEr3Core = sysEr3.GetComponent <CP_Cluster_Core>(); var sysEr4Core = sysEr4.GetComponent <CP_Cluster_Core>(); var sysEr3Prefab = UnityEngine.Object.Instantiate(sysEr3Core.m_childPuzzlePrefab); //Sys Er 4 var sysEr4Prefab = UnityEngine.Object.Instantiate(sysEr4Core.m_childPuzzlePrefab); var sysEr3Scan = sysEr3Prefab.GetComponent <CP_PlayerScanner>(); var sysEr4Scan = sysEr4Prefab.GetComponent <CP_PlayerScanner>(); var er3Speed = sysEr3Scan.m_scanSpeeds; var er4Speed = sysEr4Scan.m_scanSpeeds; sysEr4Scan.m_scanSpeeds = er3Speed; sysEr3Scan.m_scanSpeeds = er4Speed; sysEr3Core.m_childPuzzlePrefab = sysEr3Prefab; sysEr4Core.m_childPuzzlePrefab = sysEr4Prefab; //Setup INVOIDABLE Alarm invoidable.AddComponent <InvoidableManager>(); CP_PlayerScanner ivScan = invoidable.GetComponent <CP_PlayerScanner>(); CP_Bioscan_Graphics invGx = invoidable.GetComponent <CP_Bioscan_Graphics>(); Color invColor = new Color(0, 0, 0, 0); ivScan.m_scanSpeeds = new float[] { 0, 0, 0, 0 }; ivScan.m_scanRadius = 0; ivScan.m_requireAllPlayers = false; invGx.m_colors = new ColorModeColor[] { new ColorModeColor() { mode = eChainedPuzzleGraphicsColorMode.Active, col = invColor }, new ColorModeColor() { mode = eChainedPuzzleGraphicsColorMode.Waiting, col = invColor }, new ColorModeColor() { mode = eChainedPuzzleGraphicsColorMode.TimedOut, col = invColor } }; //Setup INV Alarm ender invoidableEndTrigger.AddComponent <InvoidableEndTrigger>(); invoidable.transform.position = new Vector3(1000, 1000, 1000); invoidableEndTrigger.transform.position = new Vector3(1000, 1000, 1000); sysEr1.transform.position = new Vector3(1000, 1000, 1000); sysEr2.transform.position = new Vector3(1000, 1000, 1000); sysEr3.transform.position = new Vector3(1000, 1000, 1000); sysEr4.transform.position = new Vector3(1000, 1000, 1000); sysEr1Prefab.transform.position = new Vector3(1000, 1000, 1000); sysEr3Prefab.transform.position = new Vector3(1000, 1000, 1000); sysEr4Prefab.transform.position = new Vector3(1000, 1000, 1000); __instance.m_puzzleComponentPrefabs.Add(402, sysEr1); __instance.m_puzzleComponentPrefabs.Add(403, sysEr2); __instance.m_puzzleComponentPrefabs.Add(404, sysEr3); __instance.m_puzzleComponentPrefabs.Add(405, sysEr4); __instance.m_puzzleComponentPrefabs.Add(999, invoidable); __instance.m_puzzleComponentPrefabs.Add(998, invoidableEndTrigger); }