static MarkGOContainer InitializeContainer(CombatHUDMarkDisplay markDisplay) { // We can't patch Init (probably compiled to a point we can't patch it) so create the objects here. Mod.Log.Debug?.Write($"CHUDMD:I invoked"); GameObject sensorsMark = CreateMark(markDisplay.transform.parent.gameObject, Mod.Config.Icons.TargetSensorsMark, CombatHUDMarkDisplayConsts.SensorsMarkGOId); GameObject visualsMark = CreateMark(markDisplay.transform.parent.gameObject, Mod.Config.Icons.TargetVisualsMark, CombatHUDMarkDisplayConsts.VisualsMarkGOId); GameObject taggedMark = CreateMark(markDisplay.transform.parent.gameObject, Mod.Config.Icons.TargetTaggedMark, CombatHUDMarkDisplayConsts.TaggedMarkGOid); GameObject narcedMark = CreateMark(markDisplay.transform.parent.gameObject, Mod.Config.Icons.TargetNarcedMark, CombatHUDMarkDisplayConsts.NarcedMarkGOId); GameObject activeProbePingedMark = CreateMark(markDisplay.transform.parent.gameObject, Mod.Config.Icons.TargetActiveProbePingedMark, CombatHUDMarkDisplayConsts.ActiveProbePingedMarkGOId); GameObject stealthMark = CreateMark(markDisplay.transform.parent.gameObject, Mod.Config.Icons.TargetStealthMark, CombatHUDMarkDisplayConsts.StealthMarkGOId); GameObject mimeticMark = CreateMark(markDisplay.transform.parent.gameObject, Mod.Config.Icons.TargetMimeticMark, CombatHUDMarkDisplayConsts.MimeticMarkGOId); GameObject ecmShieldedMark = CreateMark(markDisplay.transform.parent.gameObject, Mod.Config.Icons.TargetECMShieldedMark, CombatHUDMarkDisplayConsts.ECMShieldedMarkGOId); MarkGOContainer container = new MarkGOContainer { SensorsMark = sensorsMark, VisualsMark = visualsMark, TaggedMark = taggedMark, NarcedMark = narcedMark, StealthMark = stealthMark, MimeticMark = mimeticMark, ECMShieldedMark = ecmShieldedMark, ActiveProbePingedMark = activeProbePingedMark }; ModState.MarkContainerRefs[markDisplay] = container; Mod.Log.Debug?.Write($"Created reference from instance {markDisplay} to container: {container}"); // Set the parent's (Marks GO) scale to 300y GameObject marksGO = markDisplay.transform.parent.gameObject; RectTransform marksRT = marksGO.GetComponent <RectTransform>(); Vector2 newSizeDelta = marksRT.sizeDelta; newSizeDelta.y = 300f; marksRT.sizeDelta = newSizeDelta; Vector3 newLocalPos = marksGO.transform.localPosition; newLocalPos.y += 100f; marksGO.transform.localPosition = newLocalPos; return(container); }
static void UpdateSensorAndVisualsIcons(MarkGOContainer container, AbstractActor displayedActor, AbstractActor lastActivated, bool isPlayer) { // Sensors and Visuals are only shown for non-local players if (!isPlayer) { // Check sensors bool hasSensorLock = SensorLockHelper.CalculateSharedLock(displayedActor, lastActivated) > SensorScanType.NoInfo; container.SensorsMark.SetActive(true); SVGImage sensorsImage = container.SensorsMark.GetComponent <SVGImage>(); if (hasSensorLock) { Mod.Log.Debug?.Write($" - Can sensors detect target, setting icon to green."); sensorsImage.color = Color.green; } else { Mod.Log.Debug?.Write($" - Can not sensors detect target, setting icon to red."); sensorsImage.color = Color.red; } bool canSpotTarget = VisualLockHelper.CanSpotTarget(lastActivated, lastActivated.CurrentPosition, displayedActor, displayedActor.CurrentPosition, displayedActor.CurrentRotation, ModState.Combat.LOS); SVGImage visualsImage = container.VisualsMark.GetComponent <SVGImage>(); container.VisualsMark.SetActive(true); if (canSpotTarget) { Mod.Log.Debug?.Write($" - Can spot target, setting icon to green."); visualsImage.color = Color.green; } else { Mod.Log.Debug?.Write($" - Cannot spot target, setting icon to red."); visualsImage.color = Color.red; } } else { container.SensorsMark.SetActive(false); container.VisualsMark.SetActive(false); } }