コード例 #1
0
 // Token: 0x06000027 RID: 39 RVA: 0x00002F80 File Offset: 0x00001180
 public static bool Prefix(ScannerTool __instance)
 {
     SkinnedMeshRenderer[] allComponentsInChildren = __instance.GetAllComponentsInChildren <SkinnedMeshRenderer>();
     foreach (SkinnedMeshRenderer skinnedMeshRenderer in allComponentsInChildren)
     {
         bool flag = skinnedMeshRenderer.name.Contains("scanner_geo");
         if (flag)
         {
             skinnedMeshRenderer.material.color = new Color32(Convert.ToByte(MainPatch.config.Scannervalue), Convert.ToByte(MainPatch.config.Scannergvalue), Convert.ToByte(MainPatch.config.Scannerbvalue), 1);
         }
     }
     return(true);
 }
コード例 #2
0
        private static IEnumerator GiveHardcoreScanner()
        {
            CoroutineTask <GameObject> task1 = CraftData.GetPrefabForTechTypeAsync(TechType.Scanner);

            yield return(task1);

            GameObject scannerPrefab = task1.GetResult();
            GameObject gameObject1   = GameObject.Instantiate(scannerPrefab);
            Pickupable pickupable1   = gameObject1.GetComponent <Pickupable>();

            scannerPrefab.SetActive(false);

            CoroutineTask <GameObject> task2 = CraftData.GetPrefabForTechTypeAsync(TechType.Battery);

            yield return(task2);

            GameObject batteryPrefab = task2.GetResult();
            GameObject gameObject2   = GameObject.Instantiate(batteryPrefab);
            Pickupable pickupable2   = gameObject2.GetComponent <Pickupable>();

            batteryPrefab.SetActive(false);

#if SUBNAUTICA_EXP
            TaskResult <Pickupable> task3 = new TaskResult <Pickupable>();
            yield return(pickupable1.PickupAsync(task3, false));

            yield return(task3);

            pickupable1 = task3.Get();

            TaskResult <Pickupable> task4 = new TaskResult <Pickupable>();
            yield return(pickupable2.PickupAsync(task4, false));

            yield return(task4);

            pickupable2 = task4.Get();
#else
            pickupable1.Pickup(false);
            pickupable2.Pickup(false);
#endif
            ScannerTool scannerTool = pickupable1?.GetComponent <ScannerTool>();
            scannerTool?.energyMixin?.batterySlot?.AddItem(pickupable2);

            Inventory.main.container.AddItem(pickupable1);
            yield break;
        }
コード例 #3
0
        public static void Postfix(ScannerTool __instance)
        {
            PDAScanner.ScanTarget scanTarget = PDAScanner.scanTarget;
#if SN1
            PDAScanner.Result result = PDAScanner.CanScan();
#elif BZ
            PDAScanner.Result result = PDAScanner.CanScan(scanTarget);
#endif
            PDAScanner.EntryData entryData = PDAScanner.GetEntryData(PDAScanner.scanTarget.techType);

            if ((entryData != null && (CrafterLogic.IsCraftRecipeUnlocked(entryData.blueprint) || CrafterLogic.IsCraftRecipeUnlocked(entryData.key))) || PDAScanner.ContainsCompleteEntry(scanTarget.techType) || __instance.energyMixin.charge <= 0f || !scanTarget.isValid || result != PDAScanner.Result.Scan || !GameModeUtils.RequiresBlueprints())
            {
                return;
            }
#if SN1
            HandReticle.main.SetInteractText(Main.config.UnKnownLabel, false, HandReticle.Hand.None);
#elif BZ
            HandReticle.main.SetText(HandReticle.TextType.Hand, Main.config.UnKnownLabel, true, GameInput.Button.None);
#endif
        }
コード例 #4
0
        private static bool Prefix(ScannerTool __instance)
        {
            if (!Mod.config.FixScannerToolTextBug)
            {
                return(true);
            }

            bool isDrawn = (bool)PlayerTool_get_isDrawn.Invoke(__instance, new object[] { });

            if (isDrawn)
            {
                float idleTimer = (float)ScannerTool_idleTimer.GetValue(__instance);
                if (idleTimer > 0f)
                {
                    float newValue = Mathf.Max(0f, idleTimer - Time.deltaTime);
                    ScannerTool_idleTimer.SetValue(__instance, newValue);
                }
            }
            return(false);
        }
コード例 #5
0
        public void Awake()
        {
            thisSeamoth     = GetComponent <SeaMoth>();
            leftTorpedoSlot = thisSeamoth.torpedoTubeLeft.transform;
            energyMixin     = thisSeamoth.GetComponent <EnergyMixin>();

            GameObject scannerPrefab = Instantiate(CraftData.GetPrefabForTechType(TechType.Scanner));

            scannerPrefab.SetActive(false);
            Utils.ZeroTransform(scannerPrefab.transform);

            ScannerTool scannerTool = scannerPrefab.GetComponent <ScannerTool>();

            GameObject ScannerModuleGO = new GameObject("ScannerModuleGO");

            ScannerModuleGO.transform.SetParent(leftTorpedoSlot.transform, false);
            Utils.ZeroTransform(ScannerModuleGO.transform);

            scan_loop       = ScriptableObject.CreateInstance <FMODAsset>();
            scan_loop.name  = "scan_loop";
            scan_loop.path  = "event:/tools/scanner/scan_loop";
            scanSound       = ScannerModuleGO.AddComponent <FMOD_CustomLoopingEmitter>();
            scanSound.asset = scan_loop;

            completeSound      = ScriptableObject.CreateInstance <FMODAsset>();
            completeSound.name = "scan_complete";
            completeSound.path = "event:/tools/scanner/scan_complete";

            fxControl = scannerTool.fxControl.GetComponentClone(ScannerModuleGO.transform);

            scanBeam = scannerPrefab.FindChild("x_ScannerBeam").GetPrefabClone(ScannerModuleGO.transform, false);

            scanCircuitTex = scannerTool.scanCircuitTex.CreateRWTextureFromNonReadableTexture();
            scanOrganicTex = scannerTool.scanOrganicTex.CreateRWTextureFromNonReadableTexture();

            scanCircuitColor = scannerTool.scanCircuitColor;
            scanOrganicColor = scannerTool.scanOrganicColor;

            scanBeam.transform.localPosition = new Vector3(0, 0, -0.37f);
            scanBeam.transform.localScale    = new Vector3(1, 4.41f, 1.55f);
            scanBeam.transform.localRotation = Quaternion.Euler(280, 184, 185);

            Destroy(scannerPrefab);
            Destroy(ScannerModuleGO.FindChild("Scanner(Clone)(Clone)"));



            SetFXActive(false);

            Shader shader = Shader.Find("FX/Scanning");

            if (shader != null)
            {
                scanMaterialCircuitFX = new Material(shader)
                {
                    hideFlags = HideFlags.HideAndDontSave
                };
                scanMaterialCircuitFX.SetTexture(ShaderPropertyID._MainTex, scanCircuitTex);
                scanMaterialCircuitFX.SetColor(ShaderPropertyID._Color, scanCircuitColor);
                scanMaterialOrganicFX = new Material(shader)
                {
                    hideFlags = HideFlags.HideAndDontSave
                };
                scanMaterialOrganicFX.SetTexture(ShaderPropertyID._MainTex, scanOrganicTex);
                scanMaterialOrganicFX.SetColor(ShaderPropertyID._Color, scanOrganicColor);
            }

            thisSeamoth.onToggle             += OnToggle;
            thisSeamoth.modules.onAddItem    += OnAddItem;
            thisSeamoth.modules.onRemoveItem += OnRemoveItem;

            Player.main.playerMotorModeChanged.AddHandler(this, new Event <Player.MotorMode> .HandleFunction(OnPlayerMotorModeChanged));

            moduleCount = thisSeamoth.modules.GetCount(ScannerModulePrefab.TechTypeID);
        }