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); } } }
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; } }