Example #1
0
        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);
        }
Example #2
0
 /// <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());
 }
Example #3
0
        internal static void BeforeDbInit()
        {
            var icon = SpriteRegistry.GetToolIcon();

            Assets.Sprites.Add(icon.name, icon);
        }