private static bool DrawSelectionBracketFor_PreFix(object obj)
        {
            var thing = obj as ThingWithComps;

            if (thing != null && thing?.def?.GetModExtension <DefModExtension_BigBox>() is DefModExtension_BigBox bigBox)
            {
                var bracketLocs         = Traverse.Create(typeof(SelectionDrawer)).Field("bracketLocs").GetValue <Vector3[]>();
                var SelectionBracketMat = Traverse.Create(typeof(SelectionDrawer)).Field("SelectionBracketMat").GetValue <Material>();
                var selectTimes         = Traverse.Create(typeof(SelectionDrawer)).Field("selectTimes").GetValue <Dictionary <object, float> >();

                //Use public variables from DefModExtension_BigBox
                Vector3 drawPos  = thing.DrawPos;
                Vector2 drawSize = new Vector2(1, 1);
                if (!bigBox.directionBased)
                {
                    drawPos  = drawPos + bigBox.offset;
                    drawSize = bigBox.size;
                }
                else
                {
                    if (thing.Rotation == Rot4.East)
                    {
                        drawPos  = drawPos + bigBox.eastOffset;
                        drawSize = bigBox.eastSize;
                    }
                    else if (thing.Rotation == Rot4.North)
                    {
                        drawPos  = drawPos + bigBox.northOffset;
                        drawSize = bigBox.northSize;
                    }
                    else if (thing.Rotation == Rot4.West)
                    {
                        drawPos  = drawPos + bigBox.westOffset;
                        drawSize = bigBox.westSize;
                    }
                    else
                    {
                        drawPos  = drawPos + bigBox.southOffset;
                        drawSize = bigBox.southSize;
                    }
                }

                SelectionDrawerUtility.CalculateSelectionBracketPositionsWorld(bracketLocs, thing, drawPos, drawSize, selectTimes, Vector2.one);
                int num = 0;
                for (int i = 0; i < 4; i++)
                {
                    Quaternion rotation = Quaternion.AngleAxis(num, Vector3.up);
                    Graphics.DrawMesh(MeshPool.plane10, bracketLocs[i], rotation, SelectionBracketMat, 0);
                    num -= 90;
                }
                return(false);
            }
            return(true);
        }
        private static bool DrawSelectionBracketFor_PreFix(object obj, Vector3[] ___bracketLocs, Material ___SelectionBracketMat,
                                                           Dictionary <object, float> ___selectTimes)
        {
            if (obj is ThingWithComps thing && thing.def?.GetModExtensionBigBox() is DefModExtension_BigBox bigBox)
            {
                //Use public variables from DefModExtension_BigBox
                var     drawPos = thing.DrawPos;
                Vector2 drawSize;
                if (!bigBox.directionBased)
                {
                    drawPos += bigBox.offset;
                    drawSize = bigBox.size;
                }
                else
                {
                    if (thing.Rotation == Rot4.East)
                    {
                        drawPos += bigBox.eastOffset;
                        drawSize = bigBox.eastSize;
                    }
                    else if (thing.Rotation == Rot4.North)
                    {
                        drawPos += bigBox.northOffset;
                        drawSize = bigBox.northSize;
                    }
                    else if (thing.Rotation == Rot4.West)
                    {
                        drawPos += bigBox.westOffset;
                        drawSize = bigBox.westSize;
                    }
                    else
                    {
                        drawPos += bigBox.southOffset;
                        drawSize = bigBox.southSize;
                    }
                }

                SelectionDrawerUtility.CalculateSelectionBracketPositionsWorld(___bracketLocs, thing, drawPos, drawSize, ___selectTimes, Vector2.one);
                var num = 0;
                for (var i = 0; i < 4; i++)
                {
                    var rotation = Quaternion.AngleAxis(num, Vector3.up);
                    Graphics.DrawMesh(MeshPool.plane10, ___bracketLocs[i], rotation, ___SelectionBracketMat, 0);
                    num -= 90;
                }
                return(false);
            }
            return(true);
        }
Beispiel #3
0
        static void Postfix()
        {
            if (Multiplayer.Client == null || TickPatch.Simulating)
            {
                return;
            }

            foreach (var t in Find.Selector.SelectedObjects.OfType <Thing>())
            {
                drawnThisUpdate.Add(t.thingIDNumber);
            }

            foreach (var player in Multiplayer.session.players)
            {
                foreach (var sel in player.selectedThings)
                {
                    if (!drawnThisUpdate.Add(sel.Key))
                    {
                        continue;
                    }
                    if (!ThingsById.thingsById.TryGetValue(sel.Key, out Thing thing))
                    {
                        continue;
                    }
                    if (thing.Map != Find.CurrentMap)
                    {
                        continue;
                    }

                    selTimes[thing] = sel.Value;
                    SelectionDrawerUtility.CalculateSelectionBracketPositionsWorld(SelectionDrawer.bracketLocs, thing, thing.DrawPos, thing.RotatedSize.ToVector2(), selTimes, Vector2.one, 1f);
                    selTimes.Clear();

                    for (int i = 0; i < 4; i++)
                    {
                        Quaternion rotation = Quaternion.AngleAxis(-i * 90, Vector3.up);
                        propBlock.SetColor("_Color", player.color * new Color(1, 1, 1, 0.5f));
                        Graphics.DrawMesh(MeshPool.plane10, SelectionDrawer.bracketLocs[i], rotation, graySelection, 0, null, 0, propBlock);
                    }
                }
            }

            drawnThisUpdate.Clear();
        }