protected override void OnPrefabInit() { var us = Traverse.Create(this); Sprite sprite; base.OnPrefabInit(); gameObject.AddComponent <BulkChangeHover>(); // Allow priority setting for the enable/disable building chores interceptNumberKeysForPriority = true; // HACK: Get the cursor from the disinfect tool var trDisinfect = Traverse.Create(DisinfectTool.Instance); cursor = trDisinfect.GetField <Texture2D>("cursor"); us.SetField("boxCursor", cursor); // HACK: Get the area visualizer from the disinfect tool var avTemplate = trDisinfect.GetField <GameObject>("areaVisualizer"); if (avTemplate != null) { var areaVisualizer = Util.KInstantiate(avTemplate, gameObject, "BulkChangeToolAreaVisualizer"); areaVisualizer.SetActive(false); areaVisualizerSpriteRenderer = areaVisualizer.GetComponent <SpriteRenderer>(); // The visualizer is private so we need to set it with reflection us.SetField("areaVisualizer", areaVisualizer); us.SetField("areaVisualizerTextPrefab", trDisinfect.GetField <GameObject>( "areaVisualizerTextPrefab")); } visualizer = new GameObject("BulkChangeToolVisualizer"); // Actually fix the position to not be off by a grid cell var offs = new GameObject("BulkChangeToolOffset"); var offsTransform = offs.transform; offsTransform.SetParent(visualizer.transform); offsTransform.SetLocalPosition(new Vector3(0.0f, Grid.HalfCellSizeInMeters, 0.0f)); offs.SetLayerRecursively(LayerMask.NameToLayer("Overlay")); var spriteRenderer = offs.AddComponent <SpriteRenderer>(); // Set up the color and parent if (spriteRenderer != null && (sprite = SpriteRegistry.GetPlaceIcon()) != null) { // Determine the scaling amount since pixel size is known float widthInM = sprite.texture.width / sprite.pixelsPerUnit, scaleWidth = Grid.CellSizeInMeters / widthInM; spriteRenderer.flipY = true; spriteRenderer.name = "BulkChangeToolSprite"; // Set sprite color to match other placement tools spriteRenderer.color = TOOL_COLOR; spriteRenderer.sprite = sprite; spriteRenderer.enabled = true; // Set scale to match 1 tile offsTransform.localScale = new Vector3(scaleWidth, scaleWidth, 1.0f); } visualizer.SetActive(false); }
/// <summary> /// Applied after OnPrefabInit runs. /// </summary> /// <param name="___icons">The icon list where the icon can be added.</param> internal static void Postfix(List <Sprite> ___icons) { ___icons?.Add(SpriteRegistry.GetToolIcon()); }
internal static void BeforeDbInit() { var icon = SpriteRegistry.GetToolIcon(); Assets.Sprites.Add(icon.name, icon); }