// Adds direction indicators (arrows) and their corresponding text with distance to object // Right now it displays only 1 object - because it's only for testing purpose private static void AddDirectionIndicator(MyEntity target, MyHudEntityParams hudParams) { if ((target == null) || target == MySession.PlayerShip) return; //MyRender.GetRenderProfiler().StartProfilingBlock("CanDisplayLockedTarget"); MyEntity targetEntity = MySession.PlayerShip.TargetEntity; bool isLockedSideTarget = false; bool isLockedTarget = false; if (CanDisplayLockedTarget()) { isLockedSideTarget = MySession.PlayerShip.SideTargets.Contains(target); isLockedTarget = targetEntity == target; } // MyRender.GetRenderProfiler().StartNextBlock("GetGuiTargetMode"); hudParams.FlagsEnum &= ~MyHudIndicatorFlagsEnum.SHOW_LOCKED_TARGET; hudParams.FlagsEnum &= ~MyHudIndicatorFlagsEnum.SHOW_LOCKED_SIDE_TARGET; if (isLockedTarget) { hudParams.FlagsEnum |= MyHudIndicatorFlagsEnum.SHOW_LOCKED_TARGET; } else if (isLockedSideTarget) { hudParams.FlagsEnum |= MyHudIndicatorFlagsEnum.SHOW_LOCKED_SIDE_TARGET; } float targetDamageRatio = -1.0f; float targetArmorRatio = -1.0f; bool addToHudEnemies = false; float alphaMultiplifier = 1f; MyHudSetting hudSettings = null; MyHudAlphaCorrection hudAlphaCorrection = null; MyGuitargetMode hudSettingsTargetMode; MyGuitargetMode alphaCorrectionTargetMode; GetGuiTargetMode(target, hudParams, out hudSettingsTargetMode, out alphaCorrectionTargetMode); MyFactionRelationEnum status = MyFactions.GetFactionsRelation(target, MySession.PlayerShip); //MyRender.GetRenderProfiler().StartNextBlock("IsMissionEntity"); if (MyMissions.IsMissionEntity(target)) { if (MyMissions.IsNewMissionOrObjectiveAvailable()) { alphaMultiplifier *= m_missionHighlight; } } else { // some entities can have displaying dependents on faction relation if (!hudParams.DisplayFactionRelation.CanBeDisplayed(status)) { //MyRender.GetRenderProfiler().EndProfilingBlock(); return; } } // MyRender.GetRenderProfiler().StartNextBlock("GetHUDDamageRatio"); hudSettings = m_hudSettings[(int)hudSettingsTargetMode]; hudAlphaCorrection = m_hudAlphaCorrection[(int)alphaCorrectionTargetMode]; if (status == MyFactionRelationEnum.Enemy) { addToHudEnemies = MyMissile.CanBeTargeted(target); if (target is MySmallShip) { hudSettings = m_hudSettings[(int)MyGuitargetMode.Enemy]; } } targetDamageRatio = target.GetHUDDamageRatio(); MySmallShip targetShip = target as MySmallShip; if (targetShip != null) { if (targetShip.Armor != null) { targetArmorRatio = MathHelper.Clamp(targetShip.ArmorHealth / targetShip.MaxArmorHealth, 0, 1); } } //// when target is hangar, we want display healthbar of large ship from his prefab container //MyPrefabHangar targetHangar = target as MyPrefabHangar; //if(targetHangar != null) //{ // List<MyPrefabBase> largeShips = targetHangar.GetOwner().GetPrefabs(CategoryTypesEnum.LARGE_SHIPS); // if(largeShips.Count > 0) // { // targetDamageRatio = largeShips[0].GetDamageRatio(); // } //} //MyRender.GetRenderProfiler().StartNextBlock("IsElectrified"); bool displayUnpowered = false; MyPrefabBase targetPrefab = target as MyPrefabBase; if (targetPrefab != null) { displayUnpowered = !targetPrefab.IsElectrified(); } if (isLockedTarget) { hudSettings = m_hudSettings[(int)MyGuitargetMode.Enemy]; } //MyRender.GetRenderProfiler().StartNextBlock("GetHUDMarkerPosition"); // Show in center of objects (pivots are not centered atm.) Vector3 position = target.GetHUDMarkerPosition(); //MyRender.GetRenderProfiler().StartNextBlock("AddDirectionIndicator"); float? distanceFromScreenCenter = AddDirectionIndicator(hudSettings, position, hudParams, targetDamageRatio, targetArmorRatio, Color.White, hudAlphaCorrection, displayUnpowered, alphaMultiplifier); if (addToHudEnemies && distanceFromScreenCenter != null) { m_hudEnemies.Add(target, distanceFromScreenCenter.Value); } // MyRender.GetRenderProfiler().EndProfilingBlock(); }