private OCColorManager(ObstacleController oc, Color original) { _stretchableObstacle = _stretchableObstacleAccessor(ref oc); _color_Original = original; _color = _color_Original; }
private void UpdateWallColor(Color color) { foreach (ObstacleController wall in beatmapObjectManager.activeObstacleControllers) { StretchableObstacle stretchable = Helper.GetValue <StretchableObstacle>(wall, "_stretchableObstacle"); ParametricBoxFrameController frame = Helper.GetValue <ParametricBoxFrameController>(stretchable, "_obstacleFrame"); stretchable.SetSizeAndColor(frame.width, frame.height, frame.length, color); } }
public virtual void HandleObstacleDiStartMovementEvent(BeatmapObjectSpawnController obstacleSpawnController, ObstacleController obstacleController) { try { StretchableObstacle _stretchableObstacle = ReflectionUtil.GetPrivateField <StretchableObstacle>(obstacleController, "_stretchableObstacle"); StretchableCube _stretchableCore = ReflectionUtil.GetPrivateField <StretchableCube>(_stretchableObstacle, "_stretchableCore"); //MeshRenderer _meshRenderer = ReflectionUtil.GetPrivateField<MeshRenderer>(_stretchableCore, "_mesh"); _stretchableCore.gameObject.layer = WallLayer; } catch (Exception ex) { Logger.log.Error($"TransparentWall.HandleObstacleDiStartMovementEvent(BeatmapObjectSpawnController, ObstacleController) has thrown an exception: {ex.Message}\n{ex.StackTrace}"); } }
private OCColorManager(ObstacleController oc) { _oc = oc; _stretchableObstacle = _stretchableObstacleAccessor(ref _oc); _color_Original = oc.GetField <SimpleColorSO, ObstacleController>("_color").color; if (_color == null) { _color = ScriptableObject.CreateInstance <SimpleColorSO>(); _color.SetColor(_color_Original); } oc.SetField("_color", _color); }
public virtual void HandleObstacleDiStartMovementEvent(BeatmapObjectSpawnController obstacleSpawnController, ObstacleController obstacleController) { try { StretchableObstacle _stretchableObstacle = ReflectionUtil.GetPrivateField <StretchableObstacle>(obstacleController, "_stretchableObstacle"); StretchableCube _stretchableCoreOutside = ReflectionUtil.GetPrivateField <StretchableCube>(_stretchableObstacle, "_stretchableCoreOutside"); StretchableCube _stretchableCoreInside = ReflectionUtil.GetPrivateField <StretchableCube>(_stretchableObstacle, "_stretchableCoreInside"); //MeshRenderer _meshRenderer = ReflectionUtil.GetPrivateField<MeshRenderer>(_stretchableCoreOutside, "_meshRenderer"); //MeshRenderer _meshRenderer2 = ReflectionUtil.GetPrivateField<MeshRenderer>(_stretchableCoreInside, "_meshRenderer"); _stretchableCoreOutside.gameObject.layer = WallLayer; _stretchableCoreInside.gameObject.layer = WallLayer; } catch (Exception ex) { Console.WriteLine(ex.Message + "\n" + ex.StackTrace); } }
private static void Postfix(ref ObstacleController __instance, StretchableObstacle ____stretchableObstacle, ref SimpleColorSO ____color) { try { CustomMaterial customMaterial = MaterialAssetLoader.CustomMaterialObjects[MaterialAssetLoader.SelectedMaterial]; if (customMaterial.FileName != "DefaultMaterials") { Renderer mesh = __instance.gameObject.GetComponentInChildren <Renderer>(); Color color = ____color.color; if (customMaterial.Descriptor.Overlay) { GameObject overlay = MeshUtils.CreateOverlay(mesh, customMaterial.MaterialRenderer, customMaterial.Descriptor.OverlayOffset); MaterialUtils.SetMaterialsColor(overlay?.GetComponent <Renderer>().materials, color); if (customMaterial.Descriptor.ReplaceMesh) { MeshUtils.ReplaceMesh(overlay.GetComponent <MeshFilter>(), customMaterial.MaterialMeshFilter, customMaterial.Descriptor.MeshScaleMultiplier); if (!customMaterial.Descriptor.ReplaceOnlyOverlayMesh) { MeshUtils.ReplaceMesh(__instance.gameObject.GetComponentInChildren <MeshFilter>(), customMaterial.MaterialMeshFilter, customMaterial.Descriptor.MeshScaleMultiplier); } } } else { MaterialUtils.ReplaceRenderer(mesh, customMaterial.MaterialRenderer); MaterialUtils.SetMaterialsColor(mesh?.materials, color); if (customMaterial.Descriptor.ReplaceMesh) { MeshUtils.ReplaceMesh(__instance.gameObject.GetComponentInChildren <MeshFilter>(), customMaterial.MaterialMeshFilter, customMaterial.Descriptor.MeshScaleMultiplier); } } } if (!Configuration.EnableObstacleFrame) { ParametricBoxFrameController frame = ____stretchableObstacle.GetPrivateField <ParametricBoxFrameController>("_obstacleFrame"); frame.enabled = false; } } catch (Exception ex) { Logger.log.Error(ex); } }
private void HandleObstacleDidStartMovementEvent(BeatmapObjectSpawnController obstacleSpawnController, ObstacleController obstacleController) { try { StretchableObstacle stretchableObstacle = ReflectionUtil.GetField <StretchableObstacle>(obstacleController, "_stretchableObstacle"); StretchableCube stretchableCoreOutside = ReflectionUtil.GetField <StretchableCube>(stretchableObstacle, "_stretchableCoreOutside"); StretchableCube stretchableCoreInside = ReflectionUtil.GetField <StretchableCube>(stretchableObstacle, "_stretchableCoreInside"); bool didRecolour = VFX.VFXRainbowBarriers.IsRainbowWalls(); ChromaHandleBarrierSpawnedEvent?.Invoke(ref stretchableObstacle, ref stretchableCoreOutside, ref stretchableCoreInside, ref obstacleSpawnController, ref obstacleController, ref didRecolour); if (!didRecolour) { RecolourWall(stretchableCoreInside, obstacleController.obstacleData.time); RecolourWall(stretchableCoreOutside, obstacleController.obstacleData.time); } } catch (Exception e) { ChromaLogger.Log(e); } }
public static void Init(ObstacleController __instance) { if (ColorController.isNull || !ColorController.instance.useCustomWallColor) { return; } Color color = ColorController.instance.wallColor; if (Helper.IsRainbow(color)) { color = RainbowController.instance.GetWallColor(); } StretchableObstacle stretchable = Helper.GetValue <StretchableObstacle>(__instance, "_stretchableObstacle"); ParametricBoxFrameController frame = Helper.GetValue <ParametricBoxFrameController>(stretchable, "_obstacleFrame"); stretchable.SetSizeAndColor(frame.width, frame.height, frame.length, color); }
public virtual void HandleObstacleDidStartMovementEvent(BeatmapObjectSpawnController obstacleSpawnController, ObstacleController obstacleController) { try { StretchableObstacle _stretchableObstacle = ReflectionUtil.GetPrivateField <StretchableObstacle>(obstacleController, "_stretchableObstacle"); StretchableCube _stretchableCore = ReflectionUtil.GetPrivateField <StretchableCube>(_stretchableObstacle, "_stretchableCore"); Transform _obstacleCore = ReflectionUtil.GetPrivateField <Transform>(_stretchableObstacle, "_obstacleCore"); //MeshRenderer _meshRenderer = ReflectionUtil.GetPrivateField<MeshRenderer>(_stretchableCoreOutside, "_meshRenderer"); //MeshRenderer _meshRenderer2 = ReflectionUtil.GetPrivateField<MeshRenderer>(_stretchableCoreInside, "_meshRenderer"); Logger.log.Debug("Setting stretchableCore layer to: " + Plugin.WallLayer + " from: " + _stretchableCore.gameObject.layer); Logger.log.Debug("Setting obstacleCore layer to: " + Plugin.WallLayer + " from: " + _obstacleCore.gameObject.layer); Logger.log.Debug("ObstacleController has layer: " + obstacleController.gameObject.layer); Logger.log.Debug("_stretchableObstacle has layer: " + _stretchableObstacle.gameObject.layer); _stretchableCore.gameObject.layer = Plugin.WallLayer; _obstacleCore.gameObject.layer = Plugin.WallLayer; } catch (Exception ex) { Logger.log.Error(ex); } }
internal ObstacleColorizer(ObstacleControllerBase obstacleController) { StretchableObstacle stretchableObstacle = obstacleController.GetComponent <StretchableObstacle>(); _obstacleFrame = _obstacleFrameAccessor(ref stretchableObstacle); _obstacleFakeGlow = _obstacleFakeGlowAccessor(ref stretchableObstacle); _addColorMultiplier = _addColorMultiplierAccessor(ref stretchableObstacle); _obstacleCoreLerpToWhiteFactor = _obstacleCoreLerpToWhiteFactorAccessor(ref stretchableObstacle); _materialPropertyBlockControllers = _materialPropertyBlockControllersAccessor(ref stretchableObstacle); if (obstacleController is ObstacleController trueObstacleController) { OriginalColor = _colorManagerAccessor(ref trueObstacleController).obstaclesColor; } else { // Fallback OriginalColor = Color.white; } Colorizers.Add(obstacleController, this); }
private void HandleObstacleDidStartMovementEvent(BeatmapObjectSpawnController obstacleSpawnController, ObstacleController obstacleController) { try { StretchableObstacle stretchableObstacle = ReflectionUtil.GetField <StretchableObstacle>(obstacleController, "_stretchableObstacle"); StretchableCube stretchableCore = ReflectionUtil.GetField <StretchableCube>(stretchableObstacle, "_stretchableCore"); ParametricBoxFrameController frameController = ReflectionUtil.GetField <ParametricBoxFrameController>(stretchableObstacle, "_obstacleFrame"); ParametricBoxFakeGlowController fakeGlowController = ReflectionUtil.GetField <ParametricBoxFakeGlowController>(stretchableObstacle, "_obstacleFakeGlow"); float time = obstacleController.obstacleData.time; Color color = ColourManager.GetBarrierColour(time); frameController.color = color; fakeGlowController.color = color; bool didRecolour = VFX.VFXRainbowBarriers.IsRainbowWalls(); ChromaHandleBarrierSpawnedEvent?.Invoke(ref stretchableObstacle, ref obstacleSpawnController, ref obstacleController, ref didRecolour); if (!didRecolour && color != ColourManager.DefaultBarrierColour && color != Color.clear) { RecolourWall(stretchableCore, ColourManager.GetCorrectedBarrierColour(time)); } } catch (Exception e) { ChromaLogger.Log(e); } }
static void Postfix(ref ObstacleController __instance, ObstacleData obstacleData, float worldRotation, Vector3 startPos, Vector3 midPos, Vector3 endPos, float move1Duration, float move2Duration, float singleLineWidth, ref Vector3 ____startPos, ref Vector3 ____endPos, ref Vector3 ____midPos, ref StretchableObstacle ____stretchableObstacle, ref Bounds ____bounds, ref ColorManager ____colorManager, ref float height) { if (!Plugin.active) { return; } if (obstacleData.width >= 1000 || (((int)obstacleData.obstacleType >= 1000 && (int)obstacleData.obstacleType <= 4000) || ((int)obstacleData.obstacleType >= 4001 && (int)obstacleData.obstacleType <= 4005000))) { Mode mode = ((int)obstacleData.obstacleType >= 4001 && (int)obstacleData.obstacleType <= 4100000) ? Mode.preciseHeightStart : Mode.preciseHeight; int obsHeight = 0; int startHeight = 0; if (mode == Mode.preciseHeightStart) { int value = (int)obstacleData.obstacleType; value -= 4001; obsHeight = value / 1000; startHeight = value % 1000; // Console.WriteLine(height + "<---Height StartHeight---> " + startHeight); } else { int value = (int)obstacleData.obstacleType; obsHeight = value - 1000; } float num = 0; if ((obstacleData.width >= 1000) || (mode == Mode.preciseHeightStart)) { float width = (float)obstacleData.width - 1000; float precisionLineWidth = singleLineWidth / 1000; num = width * precisionLineWidth; //Change y of b for start height Vector3 b = new Vector3((num - singleLineWidth) * 0.5f, 4 * ((float)startHeight / 1000), 0f); ____startPos = startPos + b; ____midPos = midPos + b; ____endPos = endPos + b; } else { num = (float)obstacleData.width * singleLineWidth; } float num2 = (____endPos - ____midPos).magnitude / move2Duration; float length = num2 * obstacleData.duration; float multiplier = 1f; if ((int)obstacleData.obstacleType >= 1000) { multiplier = (float)obsHeight / 1000f; } ____stretchableObstacle.SetSizeAndColor(Mathf.Abs(num * 0.98f), Mathf.Abs(height * multiplier), Mathf.Abs(length), ____colorManager.GetObstacleEffectColor()); ____bounds = ____stretchableObstacle.bounds; // ____stretchableObstacle.transform.localRotation *= Quaternion.Euler(new Vector3(0, 0, 180f)); } }
public static bool Prefix(ObstacleController __instance, ObstacleData obstacleData, Vector3 startPos, Vector3 midPos, Vector3 endPos, float move1Duration, float move2Duration, float startTimeOffset, float singleLineWidth, float height, ref bool ____initialized, ref ObstacleData ____obstacleData, ref float ____obstacleDuration, ref Vector3 ____startPos, ref Vector3 ____midPos, ref Vector3 ____endPos, ref float ____move1Duration, ref float ____move2Duration, ref float ____startTimeOffset, ref StretchableObstacle ____stretchableObstacle, ref Bounds ____bounds, ref bool ____passedThreeQuartersOfMove2Reported, ref bool ____passedAvoidedMarkReported, ref float ____passedAvoidedMarkTime, ref float ____finishMovementTime, ref Action <ObstacleController> ___didInitEvent, ref SimpleColorSO ____color) { if (!Plugin.active) { return(true); } ____initialized = true; ____obstacleData = obstacleData; ____obstacleDuration = obstacleData.duration; float num = obstacleData.width * singleLineWidth; Vector3 vector = __instance.transform.rotation * new Vector3((num - singleLineWidth) * 0.5f, 0f, 0f); ____startPos = startPos + vector; ____midPos = midPos + vector; ____midPos.y = ____startPos.y; ____endPos = endPos + vector; ____endPos.y = ____startPos.y; ____move1Duration = move1Duration; ____move2Duration = move2Duration; ____startTimeOffset = startTimeOffset; float length = (____endPos - ____midPos).magnitude / move2Duration * obstacleData.duration; ____stretchableObstacle.SetSizeAndColor(num * 0.98f, height, length, ____color); ____bounds = ____stretchableObstacle.bounds; ____passedThreeQuartersOfMove2Reported = false; ____passedAvoidedMarkReported = false; ____passedAvoidedMarkTime = ____move1Duration + ____move2Duration * 0.5f + ____obstacleDuration + 0.15f; ____finishMovementTime = ____move1Duration + ____move2Duration + ____obstacleDuration; ___didInitEvent?.Invoke(__instance); return(false); }