示例#1
0
        public static bool Prefix(Seaglide __instance)
        {
            var usingSeaglide = Player.main.motorMode == Player.MotorMode.Seaglide;
            var speed         = Mathf.FloorToInt(Player.main.rigidBody.velocity.magnitude);
            int boostSpeed    = 1800;

            if (usingSeaglide)
            {
                if (__instance.powerGlideActive)
                {
                    if (__instance.HasEnergy())
                    {
                        __instance.powerGlideForce = boostSpeed;                      // the for that is applied
                        __instance.energyMixin.ConsumeEnergy(0.0001f);                // For energy Consumption
                        __instance._smoothedMoveSpeed = speed;                        //* 4000; The moving effects
                        __instance.engineRPMManager.engineRpmSFX.evt.setPitch(1.3f);  //sets the sound pitch
                        __instance.engineRPMManager.engineRpmSFX.evt.setVolume(2.0f); //Change the volume
                        __instance.animator.speed = speed;                            // Prop Animation speed
                        //MainPatch.pGlide = true;
                    }
                }
                else
                {
                    __instance.engineRPMManager.engineRpmSFX.evt.setPitch(1);
                    __instance._smoothedMoveSpeed = 0;
                    __instance.powerGlideActive   = false;
                    __instance.animator.speed     = 1;
                    __instance.engineRPMManager.engineRpmSFX.evt.setVolume(1);
                    MainPatch.pGlide = false;
                }
            }
            return(true);
        }
        public static bool Prefix(Seaglide __instance)
        {
            var   usingSeaglide = Player.main.motorMode == Player.MotorMode.Seaglide;
            float num           = 0f;

            if (usingSeaglide)
            {
                if (__instance.powerGlideActive)
                {
                    if (__instance.HasEnergy())
                    {
                        __instance.powerGlideForce = MainPatch.boostSpeed;

                        num = Mathf.Clamp(__instance.GetComponent <Rigidbody>().velocity.magnitude / 5f, 0f, 1f);

                        Player.main.gameObject.GetComponent <Rigidbody>().AddForce(__instance.gameObject.transform.forward * __instance.powerGlideForce, ForceMode.Force);
                        MainPatch.pGlide = true;
                    }
                }
                else
                {
                    __instance.powerGlideActive = false;
                    MainPatch.pGlide            = false;
                }
            }
            return(true);
        }
        public static void GetCustomUseText(ref string __result, Seaglide __instance)
        {
            if (__instance == null || __instance.gameObject == null || __instance.gameObject.GetComponent <PowerglideBehaviour>() == null)
            {
                return;
            }

            string sprintText = LanguageCache.GetButtonFormat(Language.main.Get("HoverbikeBoostDisplay") + "({0})", GameInput.Button.Sprint);;

            if (string.IsNullOrEmpty(customUseText) || cachedUseText != sprintText)
            {
                if (Language.main != null)
                {
                    customUseText = __result + ", " + sprintText;
                    cachedUseText = sprintText;
                    typeof(Seaglide).GetField("customUseCachedString", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(__instance, customUseText);
                }
                else
                {
                    //Log.LogDebug("Language.main is not available");
                }
            }
            //__result = customUseText;
            //__instance.customUseCachedString = customUseText;
        }
示例#4
0
        public static void Update(Seaglide __instance)
        {
            var info = __instance.GetOrCreateInfo();

            if (info.overchargeTime > 0)
            {
                info.overchargeTime = Mathf.Max(0, info.overchargeTime - Time.deltaTime);

                if (info.overchargeTime <= 0)
                {
                    ResetMotorMode();
                }
            }

            if ((bool)activeState.GetValue(__instance))
            {
                if (!AnnouncementShown)
                {
                    AnnouncementShown = true;
                    ErrorMessage.AddError($"Press {C.OverchargeKey.ToUpper()} to activate Overcharge.");
                }

                if (Input.GetKeyDown(C.OverchargeKey.ToLower()))
                {
                    TryActivatingOvercharge(info);
                }
            }
        }
示例#5
0
        private static bool Prefix(Seaglide __instance)
        {
            __instance.toggleLights.maxLightStates = 1;
            __instance.toggleLights.lightState     = Mod.config.SeaglideMapStartOn ? 0 : 2;

            return(true);
        }
        public static bool Prefix(Seaglide __instance)
        {
            var seaGlide = __instance.toggleLights.lightsParent.GetComponentsInChildren <Light>();

            if (MainPatch.othermods)
            {
                if (seaGlide != null)
                {
                    foreach (var allLights in seaGlide)
                    {
                        if (allLights.gameObject.name.Contains("light_"))
                        {
                            /*Debug.Log($"" +
                             *  $"Color is {allLights.color}\n" +
                             *  $"intensity is {allLights.intensity}\n" +
                             *  $"range is {allLights.range}\n" +
                             *  $"spotangle is {allLights.spotAngle}\n");*/

                            allLights.spotAngle = Menus.ConfigWhiteLights.spotAngle;
                            allLights.intensity = Menus.ConfigWhiteLights.Intensity;
                            allLights.range     = Menus.ConfigWhiteLights.Range;
                        }
                        break;
                    }
                }
            }
            else
            {
                if (Menus.Config.ToggleColor)
                {
                    if (seaGlide != null)
                    {
                        foreach (var allLights in seaGlide)
                        {
                            if (allLights.gameObject.name.Contains("light_"))
                            {
                                /*Debug.Log($"" +
                                 *  $"Color is {allLights.color}\n" +
                                 *  $"intensity is {allLights.intensity}\n" +
                                 *  $"range is {allLights.range}\n" +
                                 *  $"spotangle is {allLights.spotAngle}\n");*/

                                allLights.spotAngle = Menus.Config.spotAngle;
                                allLights.color     = Menus.Config.FlashLightColor.ToColor(true);
                                allLights.intensity = Menus.Config.Intensity;
                                allLights.range     = Menus.Config.Range;
                            }
                            else
                            {
                                allLights.color = Menus.Config.FlashLightColor.ToColor(false);
                            }
                            break;
                        }
                    }
                }
            }
            return(true);
        }
示例#7
0
        public static SeaglideOverchargeInfo GetOrCreateInfo(this Seaglide seaglide)
        {
            if (!info.TryGetValue(seaglide, out var result))
            {
                result = info[seaglide] = new SeaglideOverchargeInfo(seaglide);
            }

            return(result);
        }
示例#8
0
        public static void Postfix(ref Seaglide __instance)
        {
            var batt = __instance.energyMixin.battery;

            if (batt != null)
            {
                batt.charge = charge;
            }
        }
        public static bool Prefix(Seaglide __instance)
        {
            var   usingSeaglide = Player.main.motorMode == Player.MotorMode.Seaglide;
            float speed         = Mathf.FloorToInt(Player.main.rigidBody.velocity.magnitude);

            MainPatch.boostSpeed = speed + 2000;
            if (__instance.GetComponent <EnergyMixin>().charge >= 10)
            {
                if (Input.GetKey(MainPatch.BoostKey))
                {
                    if (usingSeaglide)
                    {
                        if (speed > 5)
                        {
                            __instance.powerGlideActive = true;
                            MainPatch.pGlide            = true;
                            __instance.powerGlideForce  = MainPatch.boostSpeed;//  MainPatch.boostSpeed;
                            __instance.GetComponent <EnergyMixin>().ConsumeEnergy(0.000005f);
                            __instance.animator.speed = speed;
                            __instance.engineRPMManager.engineRpmSFX.GetEventInstance().setPitch(1.1f);
                            __instance.engineRPMManager.engineRpmSFX.GetEventInstance().setVolume(1.1f);
                            __instance._smoothedMoveSpeed = MainPatch.boostSpeed;
                            MainPatch.pGlide = true;
                        }
                        else
                        {
                            __instance.powerGlideActive = false;
                            __instance.animator.speed   = 1;
                            __instance.engineRPMManager.engineRpmSFX.GetEventInstance().setPitch(1.0f);
                            __instance.engineRPMManager.engineRpmSFX.GetEventInstance().setVolume(1.0f);
                            __instance._smoothedMoveSpeed = 0f;
                            MainPatch.pGlide = false;
                        }
                    }
                }
                else
                {
                    __instance.powerGlideActive = false;
                    __instance.animator.speed   = 1;
                    __instance.engineRPMManager.engineRpmSFX.GetEventInstance().setPitch(1.0f);
                    __instance.engineRPMManager.engineRpmSFX.GetEventInstance().setVolume(1.0f);
                    __instance._smoothedMoveSpeed = 0;
                    MainPatch.pGlide = false;
                }
            }
            else
            {
                __instance.powerGlideActive = false;
                __instance.animator.speed   = 1;
                __instance.engineRPMManager.engineRpmSFX.GetEventInstance().setPitch(1.0f);
                __instance.engineRPMManager.engineRpmSFX.GetEventInstance().setVolume(1.0f);
                __instance._smoothedMoveSpeed = 0;
                MainPatch.pGlide = false;
            }
            return(true);
        }
示例#10
0
        public void PostUpdate(Seaglide instance)
        {
            if (tool == null)
            {
                if (instance != null)
                {
                    tool = instance;
                }
                else
                {
                    return;
                }
            }

            /*
             * public bool bBoostActive { get; private set; }
             * public bool bhasEnergy { get; private set; }
             * public bool bInputHeld { get; private set; }
             */
            bIsUnderwater = Player.main.IsUnderwaterForSwimming();
            bhasEnergy    = tool.HasEnergy();
            bInputHeld    = GameInput.GetButtonHeld(GameInput.Button.Sprint);
            bool powerGlideActive = bIsUnderwater && bhasEnergy && bInputHeld;

            tool.powerGlideParam = Mathf.Lerp(tool.powerGlideParam, powerGlideActive ? 1f : 0f, Time.deltaTime * 3f);
            powerSeaglideForce   = Mathf.Lerp(powerSeaglideForce, powerGlideActive ? powerGlideForce : 0f, Time.deltaTime * powerLerpRate);
            tool.powerGlideForce = powerSeaglideForce;
#if SUBNAUTICA_STABLE
            if (powerGlideActive)
            {
                Player.main.gameObject.GetComponent <Rigidbody>().AddForce(this.gameObject.transform.forward * powerSeaglideForce, ForceMode.Force);
            }
#elif BELOWZERO
            tool.powerGlideActive = powerGlideActive;
#endif

            MeshRenderer[]        meshRenderers        = tool.GetAllComponentsInChildren <MeshRenderer>();
            SkinnedMeshRenderer[] skinnedMeshRenderers = tool.GetAllComponentsInChildren <SkinnedMeshRenderer>();

            foreach (MeshRenderer mr in meshRenderers)
            {
                // MeshRenderers have the third-person mesh, apparently?
                if (mr.name.Contains("SeaGlide_01_TP"))
                {
                    mr.material.color = PowerglideBehaviour.PowerGlideColour;
                }
            }

            foreach (SkinnedMeshRenderer smr in skinnedMeshRenderers)
            {
                if (smr.name.Contains("SeaGlide_geo"))
                {
                    smr.material.color = PowerglideBehaviour.PowerGlideColour;
                }
            }
        }
示例#11
0
        private static bool Prefix(Seaglide __instance)
        {
            var lights = __instance.toggleLights.lightsParent.GetComponentsInChildren <Light>();

            foreach (var light in lights)
            {
                light.color = Mod.config.Seaglide.ToColor();
            }
            return(true);
        }
        public static void PostUpdate(Seaglide __instance)
        {
            //PowerglideBehaviour behaviour = __instance.gameObject.GetComponent<PowerglideBehaviour>();
            //if(behaviour != null)

            if (__instance.gameObject.TryGetComponent <PowerglideBehaviour>(out PowerglideBehaviour behaviour))
            {
                behaviour.PostUpdate(__instance);
            }
        }
示例#13
0
        public static bool Prefix(Seaglide __instance)
        {
            var usingSeaglide = Player.main.motorMode == Player.MotorMode.Seaglide;
            //ErrorMessage.AddWarning($" {Mathf.FloorToInt(Player.main.rigidBody.velocity.magnitude)}");
            var   batteryMeter = __instance.gameObject.GetAllComponentsInChildren <VehicleInterface_EnergyBar>();
            float speed        = Mathf.FloorToInt(Player.main.rigidBody.velocity.magnitude);

            if (!usingSeaglide)
            {
                foreach (var bat in batteryMeter)
                {
                    bat.energyBar.SetActive(true);
                    bat.gameObject.SetActive(true);
                    __instance.engineRPMManager.engineRpmSFX.evt.setPitch(1);
                    __instance._smoothedMoveSpeed = 0;
                    __instance.powerGlideActive   = false;
                    __instance.animator.speed     = 1;
                    __instance.engineRPMManager.engineRpmSFX.evt.setVolume(1);
                    MainPatch.pGlide = false;
                }
            }
            else if (usingSeaglide)
            {
                if (Input.GetKey(KeyCode.Mouse0))
                {
                    if (speed > 5)
                    {
                        __instance.powerGlideActive = true;
                        MainPatch.pGlide            = true;
                    }
                    foreach (var bat in batteryMeter)
                    {
                        if (__instance.HasEnergy())
                        {
                            bat.energyBar.SetActive(true);
                            bat.gameObject.SetActive(true);
                        }
                        else
                        {
                            bat.energyBar.SetActive(false);
                            bat.gameObject.SetActive(false);
                            __instance.powerGlideActive = false;
                            MainPatch.pGlide            = false;
                        }
                    }
                }
                else
                {
                    __instance.powerGlideActive = false;
                    MainPatch.pGlide            = false;
                }
            }
            return(true);
        }
示例#14
0
        public static bool Prefix(ref Seaglide __instance, bool __result)
        {
            if (CraftData.GetTechType(__instance.gameObject) == TechType.PowerGlide && __instance.energyMixin.charge > 0f &&
                (__instance.energyMixin.charge >= 1f || !DeathRun.saveData.playerSave.seaGlideExpended))
            {
                __instance.powerGlideActive = true;
            }

            __result = false;
            return(false);
        }
示例#15
0
        public static bool Prefix(ref Seaglide __instance)
        {
            charge = __instance.energyMixin.charge;

            if ((__instance.energyMixin.charge < 1f) && DeathRun.saveData.playerSave.seaGlideExpended)
            {
                var batt = __instance.energyMixin.battery;
                if (batt != null)
                {
                    batt.charge = 0;
                }
            }
            else
            {
                DeathRun.saveData.playerSave.seaGlideExpended = false;
            }

            return(true);
        }
示例#16
0
        public void PostUpdate(Seaglide instance)
        {
            if (tool == null)
            {
                if (instance != null)
                {
                    tool = instance;
                }
                else
                {
                    return;
                }
            }

            tool.powerGlideActive = Player.main.IsUnderwaterForSwimming() &&
                                    tool.HasEnergy() &&
                                    GameInput.GetButtonHeld(GameInput.Button.Sprint);

            tool.powerGlideParam = Mathf.Lerp(tool.powerGlideParam, tool.powerGlideActive ? 1f : 0f, Time.deltaTime * 3f);
            powerSeaglideForce   = Mathf.Lerp(powerSeaglideForce, tool.powerGlideActive ? powerGlideForce : 0f, Time.deltaTime * powerLerpRate);
            tool.powerGlideForce = powerSeaglideForce;
            MeshRenderer[]        meshRenderers        = tool.GetAllComponentsInChildren <MeshRenderer>();
            SkinnedMeshRenderer[] skinnedMeshRenderers = tool.GetAllComponentsInChildren <SkinnedMeshRenderer>();
            Color powerGlideColour = new Color(PowerglideEquipable.PowerglideColourR, PowerglideEquipable.PowerglideColourG, PowerglideEquipable.PowerglideColourB);

            foreach (MeshRenderer mr in meshRenderers)
            {
                // MeshRenderers have the third-person mesh, apparently?
                if (mr.name.Contains("SeaGlide_01_TP"))
                {
                    mr.material.color = powerGlideColour;
                }
            }

            foreach (SkinnedMeshRenderer smr in skinnedMeshRenderers)
            {
                if (smr.name.Contains("SeaGlide_geo"))
                {
                    smr.material.color = powerGlideColour;
                }
            }
        }
        public static bool Prefix(Seaglide __instance)
        {
            var sgColor           = __instance.GetAllComponentsInChildren <SkinnedMeshRenderer>();
            var pickupablesgColor = __instance.GetAllComponentsInChildren <MeshRenderer>();

            foreach (var seaglideColor in sgColor)
            {
                if (seaglideColor.name.Contains("SeaGlide_geo"))
                {
                    seaglideColor.material.color = new Color32(Convert.ToByte(Config.seagliderValue), Convert.ToByte(Config.seaglidegValue), Convert.ToByte(Config.seaglidebValue), 1);
                }
            }
            foreach (var droppedseaglideColor in pickupablesgColor)
            {
                if (droppedseaglideColor.name.Contains("SeaGlide_01_TP"))
                {
                    droppedseaglideColor.material.color = new Color32(Convert.ToByte(Config.seagliderValue), Convert.ToByte(Config.seaglidegValue), Convert.ToByte(Config.seaglidebValue), 100);
                }
            }
            return(true);
        }
示例#18
0
        public static bool Prefix(Seaglide __instance)
        {
            var sgColor           = __instance.GetAllComponentsInChildren <SkinnedMeshRenderer>();
            var pickupablesgColor = __instance.GetAllComponentsInChildren <MeshRenderer>();

            //var radar = __instance.GetAllComponentsInChildren<VehicleInterface_MapController>();
            foreach (var seaglideColor in sgColor)
            {
                if (seaglideColor.name.Contains("SeaGlide_geo"))
                {
                    if (MainPatch.othermods == false)
                    {
                        seaglideColor.material.color = new Color32(Convert.ToByte(Menus.Config.seagliderValue), Convert.ToByte(Menus.Config.seaglidegValue), Convert.ToByte(Menus.Config.seaglidebValue), 1);
                    }
                    else
                    {
                        seaglideColor.material.color = new Color32(Convert.ToByte(Menus.ConfigWhiteLights.seagliderValue), Convert.ToByte(Menus.ConfigWhiteLights.seaglidegValue), Convert.ToByte(Menus.ConfigWhiteLights.seaglidebValue), 1);
                    }
                }
            }
            foreach (var droppedseaglideColor in pickupablesgColor)
            {
                if (droppedseaglideColor.name.Contains("SeaGlide_01_TP"))
                {
                    if (MainPatch.othermods == false)
                    {
                        droppedseaglideColor.material.color = new Color32(Convert.ToByte(Menus.Config.seagliderValue), Convert.ToByte(Menus.Config.seaglidegValue), Convert.ToByte(Menus.Config.seaglidebValue), 100);
                    }
                    else
                    {
                        droppedseaglideColor.material.color = new Color32(Convert.ToByte(Menus.ConfigWhiteLights.seagliderValue), Convert.ToByte(Menus.ConfigWhiteLights.seaglidegValue), Convert.ToByte(Menus.ConfigWhiteLights.seaglidebValue), 100);
                    }
                }
            }
            return(true);
        }
示例#19
0
 public static void RaisePropSpeed(this Seaglide seaglide, float amount) => seaglide.propSpeed  += amount;
 internal static void Postfix(Seaglide __instance)
 {
     __instance.gameObject.AddIfNeedComponent <SeaglideOverDrive>();
 }
示例#21
0
 public static void ReduceMaxSpinSpeed(this Seaglide seaglide, float amount) => seaglide.maxSpinSpeed -= amount;
示例#22
0
 public static float GetPropSpeed(this Seaglide seaglide) => seaglide.propSpeed;
示例#23
0
 internal static void Postfix(Seaglide __instance)
 {
     __instance.gameObject.AddIfNeedComponent <SeaglideOverDrive>();
     SNLogger.Log($"[CheatManager] Added component [SeaGlideOverDrive] to instance [{__instance.gameObject.GetFullName()}]");
 }
示例#24
0
        public static void Start(Seaglide __instance)
        {
            var c = C;

            __instance.toggleLights.energyPerSecond = c.lightEnergy;
        }
示例#25
0
 public static void ReducePropSpeed(this Seaglide seaglide, float amount) => seaglide.propSpeed -= amount;
示例#26
0
 public SeaglideOverchargeInfo(Seaglide seaglide)
 {
     this.seaglide = seaglide;
 }
示例#27
0
 public static float GetSpinUpSpeed(this Seaglide seaglide) => seaglide.spinUpSpeed;
示例#28
0
 public void Awake()
 {
     tool  = gameObject.GetComponent <Seaglide>();
     power = gameObject.GetComponent <EnergyMixin>();
     DevConsole.RegisterConsoleCommand(this, "powerglideforce", false, false);
 }
        public static bool Prefix(Seaglide __instance)
        {
            var seaGlide          = __instance.toggleLights.GetComponentsInChildren <Light>();
            var sgColor           = __instance.GetAllComponentsInChildren <SkinnedMeshRenderer>();
            var pickupablesgColor = __instance.GetAllComponentsInChildren <MeshRenderer>();

            if (__instance.toggleLights.lightsParent != null)
            {
                if (seaGlide != null)
                {
                    foreach (var allLights in seaGlide)
                    {
                        if (allLights.gameObject.name.Contains("Light"))
                        {
                            /*Debug.Log($"" +
                             *  $"Color is {allLights.color}\n" +
                             *  $"intensity is {allLights.intensity}\n" +
                             *  $"range is {allLights.range}\n" +
                             *  $"spotangle is {allLights.spotAngle}\n");*/
                            if (MainPatch.ToggleColor)
                            {
                                allLights.color = MainPatch.FlashLightColor.LightToColor(true);
                            }
                            else
                            {
                                allLights.color = MainPatch.FlashLightColor.LightToColor(false);
                            }
                            if (MainPatch.SeaglideLightOptions)
                            {
                                allLights.spotAngle = MainPatch.spotAngle;
                                allLights.intensity = MainPatch.Intensity;
                                allLights.range     = MainPatch.Range;
                            }
                            else
                            {
                                //Logger.Log(Logger.Level.Error, $"[LightColor] Consize:{allLights.spotAngle}");
                                //Logger.Log(Logger.Level.Error, $"[LightColor] Brighness:{allLights.intensity}");
                                //Logger.Log(Logger.Level.Error, $"[LightColor] Range:{allLights.range}");
                                allLights.spotAngle = 70;
                                allLights.intensity = 0.9f;
                                allLights.range     = 40;
                            }
                        }
                        break;
                    }
                }
            }
            foreach (var seaglideColor in sgColor)
            {
                if (seaglideColor.name.Contains("SeaGlide_geo"))
                {
                    if (MainPatch.SeaglideColor)
                    {
                        seaglideColor.material.color = MainPatch.SeaglideModelColor.ColorToColor(true);
                    }
                    else
                    {
                        seaglideColor.material.color = MainPatch.SeaglideModelColor.ColorToColor(false);
                    }
                    // Logger.Log(Logger.Level.Info, $"[LightColor] Color:{seaglideColor.material.color}  ");
                    // seaglideColor.material.color = new Color(SeaglideConfig.seagliderValue, SeaglideConfig.seaglidegValue, SeaglideConfig.seaglidebValue, 1);
                }
            }
            foreach (var droppedseaglideColor in pickupablesgColor)
            {
                if (droppedseaglideColor.name.Contains("SeaGlide_01_TP"))
                {
                    if (MainPatch.SeaglideColor)
                    {
                        droppedseaglideColor.material.color = MainPatch.SeaglideModelColor.ColorToColor(true);
                    }
                    else
                    {
                        droppedseaglideColor.material.color = MainPatch.SeaglideModelColor.ColorToColor(false);
                    }
                    //Logger.Log(Logger.Level.Info, $"[LightColor] DroppedColor:{droppedseaglideColor.material.color}  ");
                    //droppedseaglideColor.material.color = new Color(SeaglideConfig.seagliderValue, SeaglideConfig.seaglidegValue, SeaglideConfig.seaglidebValue, 1);
                }
            }
            return(true);
        }
示例#30
0
 static bool Prefix(Seaglide __instance)
 {
     __instance.engineRPMManager.AccelerateInput(2f);
     return(true);
 }