Beispiel #1
0
        /*
         * BSM ColorSO holders
         */

        internal static void BSMStart(SaberModelController bcm, SaberType saberType)
        {
            if (saberType == SaberType.SaberA || saberType == SaberType.SaberB)
            {
                BSMColorManager.CreateBSMColorManager(bcm, saberType);
            }
        }
        private void UpdateSaberColor(SaberModelController saberModel, Color color)
        {
            SetSaberGlowColor[]     glowColors     = Helper.GetValue <SetSaberGlowColor[]>(saberModel, "_setSaberGlowColors");
            SetSaberFakeGlowColor[] fakeGlowColors = Helper.GetValue <SetSaberFakeGlowColor[]>(saberModel, "_setSaberFakeGlowColors");

            Color      trailTintColor = Helper.GetValue <SaberModelController.InitData>(saberModel, "_initData").trailTintColor;
            SaberTrail trail          = Helper.GetValue <SaberTrail>(saberModel, "_saberTrail");

            Helper.SetValue <Color>(trail, "_color", (color * trailTintColor).linear);

            TubeBloomPrePassLight light = Helper.GetValue <TubeBloomPrePassLight>(saberModel, "_saberLight");

            if (light != null)
            {
                light.color = color;
            }

            foreach (SetSaberGlowColor glowColor in glowColors)
            {
                glowColor.SetColors();
            }

            foreach (SetSaberFakeGlowColor fakeGlowColor in fakeGlowColors)
            {
                fakeGlowColor.SetColors();
            }
        }
Beispiel #3
0
        private async Task <GameObject> GetSaberModel(Saber saber)
        {
            //return saber.GetComponentInChildren<SaberModelController>()?.gameObject;
            SaberModelController smc = null;

            var timeout  = 2000;
            var interval = 300;
            var time     = 0;

            while (!smc)
            {
                smc = saber.GetComponentInChildren <SaberModelController>();

                if (smc)
                {
                    return(smc.gameObject);
                }

                if (time > timeout)
                {
                    return(null);
                }

                time += interval;
                await Task.Delay(interval);
            }

            return(null);
        }
        public void Init(SaberTrailRenderer TrailRendererPrefab, ColorManager colorManager, Transform PointStart, Transform PointEnd, Material TrailMaterial, Color TrailColor, int Length, int Granularity, Color multiplierSaberColor, ColorType colorType)
        {
            _colorManager         = colorManager;
            _multiplierSaberColor = multiplierSaberColor;
            _customColor          = TrailColor;
            _customMaterial       = TrailMaterial;
            _saberType            = colorType;

            _pointStart    = PointStart;
            _pointEnd      = PointEnd;
            _trailDuration = Length / 75f;
            if (!Settings.Configuration.DisableWhitestep)
            {
                _whiteSectionMaxDuration = 0.04f;
            }

            Logger.log.Info($"Granularity: {_granularity}");
            _granularity         = Granularity;
            _trailRendererPrefab = TrailRendererPrefab;

            SaberModelController saberModelController = Resources.FindObjectsOfTypeAll <SaberModelController>().FirstOrDefault();

            SaberModelController.InitData initData = saberModelController?.GetField <SaberModelController.InitData, SaberModelController>("_initData");
            if (initData != null)
            {
                trailTintColor = initData.trailTintColor;
            }

            _trailRenderer = Instantiate <SaberTrailRenderer>(TrailRendererPrefab, Vector3.zero, Quaternion.identity);
        }
Beispiel #5
0
            internal static BSMColorManager CreateBSMColorManager(SaberModelController bsm, SaberType saberType)
            {
                BSMColorManager bsmcm;

                bsmcm = new BSMColorManager(bsm, saberType);
                _bsmColorManagers.Add(bsmcm);
                return(bsmcm);
            }
Beispiel #6
0
            private BSMColorManager(SaberModelController bsm, SaberType saberType)
            {
                _bsm       = bsm;
                _saberType = saberType;

                _saberWeaponTrail       = _saberWeaponTrailAccessor(ref _bsm);
                _trailTintColor         = _initDataAccessor(ref _bsm).trailTintColor;
                _setSaberGlowColors     = _setSaberGlowColorsAccessor(ref _bsm);
                _setSaberFakeGlowColors = _SetSaberFakeGlowAccessor(ref _bsm);
                _saberLight             = _saberLightAccessor(ref _bsm);
            }
Beispiel #7
0
        internal static bool Prefix(ref Saber ____saber, ref DiContainer ____container, ref SaberModelContainer __instance, SaberModelController ____saberModelControllerPrefab)
        {
            var providers = ____container.Resolve <List <IModelProvider> >().Where(x => x.Type.DerivesFrom(typeof(SaberModelController)));

            if (providers.Count() == 0)
            {
                var provider = ____container.Resolve <SaberProvider>();
                if (!provider.IsSafe())
                {
                    provider.ModelPrefab = ____saberModelControllerPrefab;
                }
                return(true);
            }
            var baseProvider = providers.OrderByDescending(x => x.Priority).First();
            SaberModelController saberModelController = null;
            var providerX = ____container.Resolve <SaberProvider>();

            if (!providerX.IsSafe())
            {
                saberModelController = providerX.ModelPrefab = new GameObject(baseProvider.GetType().FullName).AddComponent(baseProvider.Type) as SaberModelController;
            }
            else
            {
                saberModelController = providerX.ModelPrefab;
            }
            ____container.Inject(saberModelController);
            Accessors.SaberTrail(ref saberModelController)     = Accessors.SaberTrail(ref ____saberModelControllerPrefab);
            Accessors.SaberGlowColor(ref saberModelController) = Accessors.SaberGlowColor(ref ____saberModelControllerPrefab);
            var glowColors = Accessors.SaberGlowColor(ref saberModelController);

            for (int i = 0; i < glowColors.Length; i++)
            {
                ____container.Inject(glowColors[i]);
            }
            Accessors.FakeSaberGlowColor(ref saberModelController) = Accessors.FakeSaberGlowColor(ref ____saberModelControllerPrefab);
            var fakeGlowColors = Accessors.FakeSaberGlowColor(ref saberModelController);

            for (int i = 0; i < fakeGlowColors.Length; i++)
            {
                ____container.Inject(fakeGlowColors[i]);
            }
            Accessors.SaberLight(ref saberModelController) = Accessors.SaberLight(ref ____saberModelControllerPrefab);
            saberModelController.gameObject.transform.SetParent(__instance.transform, false);
            saberModelController.Init(__instance.transform, ____saber);
            return(false);
        }
Beispiel #8
0
        /// <summary>
        /// Change the color of a saber.
        /// </summary>
        /// <param name="_">The saber.</param>
        /// <param name="color">The color to change the saber to.</param>
        /// <param name="smc">The model controller of the saber.</param>
        /// <param name="tintColor">The tint color of the new color.</param>
        /// <param name="setSaberGlowColors">The glow color groups of the saber.</param>
        /// <param name="setSaberFakeGlowColors">The fake glow color groups of the saber.</param>
        /// <param name="light">The light of the saber.</param>
        public static void ChangeColor(this Saber _, Color color, SaberModelController smc, Color tintColor, SetSaberGlowColor[] setSaberGlowColors, SetSaberFakeGlowColor[] setSaberFakeGlowColors, TubeBloomPrePassLight light)
        {
            Accessors.TrailColor(ref Accessors.SaberTrail(ref smc)) = (color * tintColor).linear;

            for (int i = 0; i < setSaberGlowColors.Length; i++)
            {
                setSaberGlowColors[i].OverrideColor(color);
            }
            for (int i = 0; i < setSaberFakeGlowColors.Length; i++)
            {
                setSaberFakeGlowColors[i].OverrideColor(color);
            }
            if (light != null)
            {
                light.color = color;
            }
        }
Beispiel #9
0
        private static void SetupSaber(DiContainer container, SaberModelController prefab, SaberModelController destination)
        {
            Accessors.SaberTrail(ref destination)     = Accessors.SaberTrail(ref prefab);
            Accessors.SaberGlowColor(ref destination) = Accessors.SaberGlowColor(ref prefab);
            var glowColors = Accessors.SaberGlowColor(ref destination);

            for (int i = 0; i < glowColors.Length; i++)
            {
                container.Inject(glowColors[i]);
            }
            Accessors.FakeSaberGlowColor(ref destination) = Accessors.FakeSaberGlowColor(ref prefab);
            var fakeGlowColors = Accessors.FakeSaberGlowColor(ref destination);

            for (int i = 0; i < fakeGlowColors.Length; i++)
            {
                container.Inject(fakeGlowColors[i]);
            }
            Accessors.SaberLight(ref destination) = Accessors.SaberLight(ref prefab);
        }
Beispiel #10
0
        /// <summary>
        /// Gets the color of a saber.
        /// </summary>
        /// <param name="saber">The saber to get the color of.</param>
        /// <returns></returns>
        public static Color GetColor(this Saber saber)
        {
            if (saber is IColorable saberColorable)
            {
                return(saberColorable.Color);
            }
            SaberModelController modelController = saber.gameObject.GetComponentInChildren <SaberModelController>(true);

            if (modelController is IColorable)
            {
                var colorable = modelController as IColorable;
                return(colorable.Color);
            }
            else if (modelController is SaberModelController smc)
            {
                return(Accessors.TrailColor(ref Accessors.SaberTrail(ref smc)).gamma);
            }
            return(Color.white);
        }
Beispiel #11
0
        protected override void Init()
        {
            saberColorLeft  = colorScheme.saberAColor;
            saberColorRight = colorScheme.saberBColor;
            noteColorLeft   = colorScheme.saberAColor;
            noteColorRight  = colorScheme.saberBColor;
            wallColor       = colorScheme.obstaclesColor;

            leftSaberModel  = saberManager.leftSaber.GetComponentInChildren <SaberModelController>(true);
            rightSaberModel = saberManager.rightSaber.GetComponentInChildren <SaberModelController>(true);

            if (PluginManager.GetPluginFromId("SiraUtil") != null)
            {
                CheckCustomSabers();
            }

            customNotesActive = PluginManager.GetPluginFromId("Custom Notes") != null;

            enabled = false;
        }
Beispiel #12
0
        internal static IEnumerator ChangeColorCoroutine(Saber saber, Color color, float time = 0.05f)
        {
            if (time != 0)
            {
                yield return(new WaitForSeconds(time));
            }
            SaberModelController modelController = saber.gameObject.GetComponentInChildren <SaberModelController>(true);

            if (modelController is IColorable colorable)
            {
                colorable.SetColor(color);
            }
            if (modelController is SaberModelController smc)
            {
                Color tintColor = Accessors.ModelInitData(ref smc).trailTintColor;
                SetSaberGlowColor[]     setSaberGlowColors     = Accessors.SaberGlowColor(ref smc);
                SetSaberFakeGlowColor[] setSaberFakeGlowColors = Accessors.FakeSaberGlowColor(ref smc);
                TubeBloomPrePassLight   light = Accessors.SaberLight(ref smc);
                saber.ChangeColor(color, smc, tintColor, setSaberGlowColors, setSaberFakeGlowColors, light);
            }
        }
Beispiel #13
0
        private IEnumerator PreloadDefaultSabers()
        {
            bool   isSceneLoaded = false;
            string sceneName;

            try
            {
                sceneName = "StandardGameplay";
                Logger.log.Debug($"Loading {sceneName} scene");
                var loadScene = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
                while (!loadScene.isDone)
                {
                    yield return(null);
                }

                sceneName = "GameCore";
                Logger.log.Debug($"Loading {sceneName} scene");
                loadScene = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
                while (!loadScene.isDone)
                {
                    yield return(null);
                }

                isSceneLoaded = true;
                Logger.log.Debug("Loaded!");

                yield return(new WaitForSecondsRealtime(0.1f));

                SaberModelController saber = Resources.FindObjectsOfTypeAll <SaberModelController>().FirstOrDefault();

                Logger.log.Debug("Got sabers!");

                Logger.log.Debug($"Saber: {saber.name}, GameObj: {saber.gameObject.name}, {saber.ToString()}");

                // Left Saber
                defaultLeftSaber = Instantiate(saber).gameObject;
                DestroyImmediate(defaultLeftSaber.GetComponent <SaberModelController>());
                DestroyImmediate(defaultLeftSaber.GetComponentInChildren <ConditionalMaterialSwitcher>());
                foreach (var c in defaultLeftSaber.GetComponentsInChildren <SetSaberGlowColor>())
                {
                    DestroyImmediate(c);
                }

                DontDestroyOnLoad(defaultLeftSaber);
                defaultLeftSaber.transform.SetParent(this.transform);
                defaultLeftSaber.gameObject.name         = "LeftSaber";
                defaultLeftSaber.transform.localPosition = Vector3.zero;
                defaultLeftSaber.transform.localRotation = Quaternion.identity;
                defaultLeftSaber.AddComponent <DummySaber>();

                // Right Saber
                defaultRightSaber = Instantiate(saber).gameObject;
                DestroyImmediate(defaultRightSaber.GetComponent <SaberModelController>());
                DestroyImmediate(defaultRightSaber.GetComponentInChildren <ConditionalMaterialSwitcher>());
                foreach (var c in defaultRightSaber.GetComponentsInChildren <SetSaberGlowColor>())
                {
                    DestroyImmediate(c);
                }

                DontDestroyOnLoad(defaultRightSaber);
                defaultRightSaber.transform.SetParent(this.transform);
                defaultRightSaber.gameObject.name         = "RightSaber";
                defaultRightSaber.transform.localPosition = Vector3.zero;
                defaultRightSaber.transform.localRotation = Quaternion.identity;
                defaultRightSaber.AddComponent <DummySaber>();

                Logger.log.Debug("Finished! Got default sabers! Setting active state");

                if (defaultLeftSaber)
                {
                    Logger.log.Debug("Found default left saber");
                    defaultLeftSaber.SetActive(false);
                }

                if (defaultRightSaber)
                {
                    Logger.log.Debug("Found default right saber");
                    defaultRightSaber.SetActive(false);
                }

                if (defaultLeftSaber && defaultRightSaber)
                {
                    // Add them as the first Object in the list, replacing the empty version.
                    CustomSaberData defaultSabers = new CustomSaberData(defaultLeftSaber.gameObject, defaultRightSaber.gameObject);
                    SaberAssetLoader.CustomSabers[0] = defaultSabers;
                    isCompleted = true;
                }
            }
            finally
            {
                if (isSceneLoaded)
                {
                    sceneName = "StandardGameplay";
                    Logger.log.Debug($"Unloading {sceneName}");
                    SceneManager.UnloadSceneAsync(sceneName);

                    sceneName = "GameCore";
                    Logger.log.Debug($"Unloading {sceneName}");
                    SceneManager.UnloadSceneAsync(sceneName);
                }
            }
        }
        private IEnumerator PreloadDefaultSabers()
        {
            bool sceneLoaded = false;

            try {
                string         sceneName = "StandardGameplay";
                AsyncOperation loadScene = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
                while (!loadScene.isDone)
                {
                    yield return(null);
                }
                sceneName = "GameCore";
                loadScene = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
                while (!loadScene.isDone)
                {
                    yield return(null);
                }
                sceneLoaded = true;
                yield return(new WaitForSecondsRealtime(0.1f));

                SaberModelController saberModelController = Resources.FindObjectsOfTypeAll <SaberModelController>().FirstOrDefault();

                defaultLeftSaber = Instantiate(saberModelController).gameObject;
                DestroyImmediate(defaultLeftSaber.GetComponent <SaberModelController>());
                DestroyImmediate(defaultLeftSaber.GetComponentInChildren <ConditionalMaterialSwitcher>());
                SetSaberGlowColor[] componentsInChildren = defaultLeftSaber.GetComponentsInChildren <SetSaberGlowColor>();
                for (int i = 0; i < componentsInChildren.Length; i++)
                {
                    DestroyImmediate(componentsInChildren[i]);
                }
                SetSaberFakeGlowColor[] componentsInChildren2 = defaultLeftSaber.GetComponentsInChildren <SetSaberFakeGlowColor>();
                for (int i = 0; i < componentsInChildren2.Length; i++)
                {
                    DestroyImmediate(componentsInChildren2[i]);
                }
                SaberTrail[] componentsInChildren3 = defaultLeftSaber.GetComponentsInChildren <SaberTrail>();
                for (int i = 0; i < componentsInChildren3.Length; i++)
                {
                    DestroyImmediate(componentsInChildren3[i]);
                }
                DontDestroyOnLoad(defaultLeftSaber);
                defaultLeftSaber.transform.SetParent(transform);
                defaultLeftSaber.gameObject.name         = "SSLeftSaber";
                defaultLeftSaber.transform.localPosition = Vector3.zero;
                defaultLeftSaber.transform.localRotation = Quaternion.identity;
                defaultLeftSaber.AddComponent <PreviewSaber>();

                if (defaultLeftSaber)
                {
                    defaultLeftSaber.SetActive(false);
                    isCompleted = true;
                }

                loadScene = null;
            } finally {
                if (sceneLoaded)
                {
                    string sceneName = "StandardGameplay";
                    SceneManager.UnloadSceneAsync(sceneName);
                    sceneName = "GameCore";
                    SceneManager.UnloadSceneAsync(sceneName);
                }
            }
            yield break;
        }
Beispiel #15
0
        internal static bool Prefix(ref Saber ____saber, ref DiContainer ____container, ref SaberModelContainer __instance, SaberModelController ____saberModelControllerPrefab)
        {
            var providers = ____container.Resolve <List <IModelProvider> >().Where(x => x.Type.DerivesFrom(typeof(SaberModelController)) && x.Priority >= 0);
            var provider  = GetProvider(____container);

            if (providers.Count() == 0)
            {
                if (!provider.IsSafe())
                {
                    provider.ModelPrefab = ____saberModelControllerPrefab;
                }
                return(true);
            }
            var baseProvider      = providers.OrderByDescending(x => x.Priority).First();
            var originalPrefab    = ____saberModelControllerPrefab;
            var instanceTransform = __instance.transform;
            var container         = ____container;
            var saber             = ____saber;

            if (!provider.IsSafe(false))
            {
                var smc = new GameObject(baseProvider.GetType().FullName).AddComponent(baseProvider.Type) as SaberModelController;
                SetupSaber(____container, ____saberModelControllerPrefab, smc);
                provider.ModelPrefab = smc;
            }
            provider.GetModel((smc) =>
            {
                container.QueueForInject(smc);
                SetupSaber(container, originalPrefab, smc);
                smc.gameObject.transform.SetParent(instanceTransform, false);
                smc.Init(instanceTransform, saber);
            });
            return(false);
        }
Beispiel #16
0
 public void ModelsReady()
 {
     _saberModelController           = _saberProvider.GetModel();
     _saberProvider.ControllerReady -= ModelsReady;
     _saberModelController.Init(transform, _saber);
 }
        public static bool Prefix(SaberModelController __instance, Transform parent, Saber saber)
        {
            ColorController.sabers[saber.saberType == SaberType.SaberA ? 0 : 1] = __instance;

            return(true);
        }
Beispiel #18
0
#pragma warning disable SA1313 // Parameter names should begin with lower-case letter
        private static void Prefix(SaberModelController __instance, Saber saber)
#pragma warning restore SA1313 // Parameter names should begin with lower-case letter
        {
            SaberColorizer.BSMStart(__instance, saber.saberType);
        }