예제 #1
0
        private void CreateNewInstances()
        {
            if (HudAPI == null)
            {
                return;
            }
            if (!HudAPI.Heartbeat)
            {
                return;
            }
            if (Ticker < 30)
            {
                return;
            }
            if (BlocksThatShouldBeTracked == null)
            {
                return;
            }
            if (BlockGPSes == null)
            {
                return;
            }
            List <IMySlimBlock> BlocksWithoutLabels = BlocksThatShouldBeTracked.Where(x => !BlockGPSes.ContainsKey(x)).ToList();

            foreach (IMySlimBlock Block in BlocksWithoutLabels)
            {
                if (Block == null)
                {
                    return;
                }
                HudAPIv2.SpaceMessage BlockSpaceMessage = null;
                try
                {
                    BlockSpaceMessage = new HudAPIv2.SpaceMessage(new StringBuilder(), Block.CubeGrid.GridIntegerToWorld(Block.Position), MyKernel.SC.WorldMatrix.Up, MyKernel.SC.WorldMatrix.Left, Scale: 0.5, Offset: new Vector2D(-1, 0), Blend: BlendTypeEnum.AdditiveTop);
                }
                catch (Exception Scrap)
                {
                    LogError(nameof(CreateNewInstances), $"HudAPIv2 crashed on block {(Block.FatBlock is IMyTerminalBlock ? $"{Block.FatBlock.BlockDefinition.ToString().Replace("MyObjectBuilder_", "")} {(Block.FatBlock as IMyTerminalBlock).CustomName}" : Block.BlockDefinition.ToString().Replace("MyObjectBuilder_", ""))}", Scrap);
                }
                if (BlockSpaceMessage != null)
                {
                    BlockGPSes.Add(Block, BlockSpaceMessage);
                }
            }
        }
예제 #2
0
        private void UpdateInstances()
        {
            foreach (var kvp in BlockGPSes)
            {
                IMySlimBlock          Block             = kvp.Key;
                HudAPIv2.SpaceMessage BlockSpaceMessage = kvp.Value;
                StringBuilder         SpaceMessageText  = BlockSpaceMessage.Message;

                SpaceMessageText.Clear();
                int    Integrity = (int)Math.Round(GetBlockIntegrity(Block) * 100);
                string blockName = Block.CubeGrid.Physics?.Enabled == true ? Block.BlockDefinition.DisplayNameText : $"[{Block.BlockDefinition.DisplayNameText}]";
                SpaceMessageText.Append($"{GetIntegrityColoration(Block)}{blockName}: {Integrity}%");
                if (Block.HasDeformation)
                {
                    SpaceMessageText.Append(" (deformed)");
                }

                BlockSpaceMessage.WorldPosition = Block.CubeGrid.GridIntegerToWorld(Block.Position);
                BlockSpaceMessage.Up            = MyAPIGateway.Session.Camera.WorldMatrix.Up;
                BlockSpaceMessage.Left          = MyAPIGateway.Session.Camera.WorldMatrix.Left;
                BlockSpaceMessage.Visible       = true;
            }
        }