View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0004269 | NoesisGUI | Unity | public | 2025-06-20 20:14 | 2025-08-06 13:34 |
| Reporter | stonstad | Assigned To | jsantos | ||
| Priority | normal | Severity | major | ||
| Status | resolved | Resolution | fixed | ||
| Product Version | 3.2.8 | ||||
| Target Version | 3.2.9 | Fixed in Version | 3.2.9 | ||
| Summary | 0004269: World UI Culling Incorrect | ||||
| Description | The culling algorithm for World UI is overly aggressive or incorrect. Example: Expected Outcome: Actual Outcome: This is quite impactful. Is there a way to disable this culling behavior? | ||||
| Attached Files | MapOrbitsControl.xaml (10,443 bytes)
<UserControl
x:Class="StellarConquest.Presentation.Unity.UI.MapOrbitsControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:noesis="clr-namespace:NoesisGUIExtensions;assembly=Noesis.GUI.Extensions"
xmlns:local="clr-namespace:StellarConquest.Presentation.Unity.UI">
<UserControl.Resources>
<!-- System Orbits -->
<sys:Single x:Key="SystemOrbitStrokeThickness">5</sys:Single>
<Color x:Key="SystemOrbitStrokeColor">#66666666</Color>
<SolidColorBrush x:Key="SystemOrbitStrokeBrush" Color="{StaticResource SystemOrbitStrokeColor}"/>
<!-- Planet Orbits -->
<sys:Single x:Key="OrbitStrokeThickness">4</sys:Single>
<Color x:Key="OrbitStrokeColor">#22aaaaaa</Color>
<SolidColorBrush x:Key="OrbitStrokeBrush" Color="{StaticResource OrbitStrokeColor}"/>
<!-- Jump Gates-->
<sys:Single x:Key="JumpBeaconStrokeThickness">2</sys:Single>
<Color x:Key="JumpBeaconFillColor">#33008800</Color>
<Color x:Key="JumpBeaconStrokeColor">#dd00ff00</Color>
<Color x:Key="JumpBeaconSelectedFillColor">#33dd8300</Color>
<Color x:Key="JumpBeaconSelectedStrokeColor">#ddffa500</Color>
<Color x:Key="JumpBeaconDisabledFillColor">#66333333</Color>
<Color x:Key="JumpBeaconDisabledStrokeColor">#66666666</Color>
<!-- Jump Gate Text -->
<Style x:Key="JumpBeaconTextStyle" TargetType="TextBlock">
<Setter Property="FontFamily" Value="{StaticResource RajdhaniRegular}"/>
<Setter Property="FontSize" Value="60"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
<PathGeometry x:Key="TrianglePathGeometry">
<!-- (0 , Height) -->
<PathFigure StartPoint="0,130">
<!-- (Width, Height) -->
<LineSegment Point="350,130" />
<!-- (Width * 0.5, Height) -->
<LineSegment Point="175,0" />
<!-- (0, Height) -->
<LineSegment Point="0,130" />
</PathFigure>
</PathGeometry>
<Storyboard x:Key="Storyboard.Press">
<DoubleAnimation Storyboard.TargetName="_TemplateRoot" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" To="0.97" Duration="0:0:0.1" DecelerationRatio="0.25"/>
<DoubleAnimation Storyboard.TargetName="_TemplateRoot" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" To="0.97" Duration="0:0:0.1" DecelerationRatio="0.25"/>
</Storyboard>
<Storyboard x:Key="Storyboard.Release">
<DoubleAnimation Storyboard.TargetName="_TemplateRoot" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" To="1" Duration="0:0:0.2" DecelerationRatio="1"/>
<DoubleAnimation Storyboard.TargetName="_TemplateRoot" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" To="1" Duration="0:0:0.2" DecelerationRatio="1"/>
</Storyboard>
<Storyboard x:Key="Storyboard.MouseOver">
<ColorAnimation Storyboard.TargetName="_Path" Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)" To="{StaticResource JumpBeaconSelectedFillColor}" Duration="0:0:0.25"/>
<ColorAnimation Storyboard.TargetName="_Path" Storyboard.TargetProperty="(Path.Stroke).(SolidColorBrush.Color)" To="{StaticResource JumpBeaconSelectedStrokeColor}" Duration="0:0:0.25"/>
</Storyboard>
<Storyboard x:Key="Storyboard.MouseExit">
<ColorAnimation Storyboard.TargetName="_Path" Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)" To="{StaticResource JumpBeaconFillColor}" Duration="0:0:0.25"/>
<ColorAnimation Storyboard.TargetName="_Path" Storyboard.TargetProperty="(Path.Stroke).(SolidColorBrush.Color)" To="{StaticResource JumpBeaconStrokeColor}" Duration="0:0:0.25"/>
</Storyboard>
<Storyboard x:Key="Storyboard.Disabled">
<ColorAnimation Storyboard.TargetName="_Path" Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)" To="{StaticResource JumpBeaconDisabledFillColor}" Duration="0:0:0.25"/>
<ColorAnimation Storyboard.TargetName="_Path" Storyboard.TargetProperty="(Path.Stroke).(SolidColorBrush.Color)" To="{StaticResource JumpBeaconDisabledStrokeColor}" Duration="0:0:0.25"/>
</Storyboard>
<ControlTemplate x:Key="JumpBeaconTemplate" TargetType="{x:Type local:JumpBeaconControl}">
<ControlTemplate.Resources>
<SolidColorBrush x:Key="JumpBeaconFillBrush" Color="{StaticResource JumpBeaconFillColor}"/>
<SolidColorBrush x:Key="JumpBeaconStrokeBrush" Color="{StaticResource JumpBeaconStrokeColor}"/>
<SolidColorBrush x:Key="JumpBeaconSelectedFillBrush" Color="{StaticResource JumpBeaconSelectedFillColor}"/>
</ControlTemplate.Resources>
<Grid x:Name="_TemplateRoot" RenderTransformOrigin="0.5,0.5">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1.0" ScaleY="1.0" />
<RotateTransform Angle="{Binding Path=Angle, RelativeSource={RelativeSource TemplatedParent}}"/>
<TranslateTransform X="{Binding Path=X, RelativeSource={RelativeSource TemplatedParent}}" Y="{Binding Path=Y, RelativeSource={RelativeSource TemplatedParent}}"/>
</TransformGroup>
</Grid.RenderTransform>
<StackPanel>
<Path x:Name="_Path" Fill="{StaticResource JumpBeaconFillBrush}" Stroke="{StaticResource JumpBeaconStrokeBrush}"
StrokeThickness="{StaticResource JumpBeaconStrokeThickness}" Data="{StaticResource TrianglePathGeometry}" HorizontalAlignment="Center"/>
<TextBlock x:Name="_TextBlock" Style="{StaticResource JumpBeaconTextStyle}" Margin="0, 12, 0, 0" Text="{Binding Path=Text, RelativeSource={RelativeSource TemplatedParent}}"/>
</StackPanel>
</Grid>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsPressed" Value="True"/>
</MultiTrigger.Conditions>
<Trigger.EnterActions>
<BeginStoryboard Name="_PressStoryboard" Storyboard="{StaticResource Storyboard.Press}"/>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard Name="_ReleaseStoryboard" Storyboard="{StaticResource Storyboard.Release}"/>
</Trigger.ExitActions>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsEnabled" Value="True"/>
</MultiTrigger.Conditions>
<Trigger.EnterActions>
<BeginStoryboard Name="_MouseEnterStoryboard" Storyboard="{StaticResource Storyboard.MouseOver}"/>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard Name="_MouseExitStoryboard" Storyboard="{StaticResource Storyboard.MouseExit}"/>
</Trigger.ExitActions>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsEnabled" Value="False"/>
</MultiTrigger.Conditions>
<Trigger.EnterActions>
<StopStoryboard BeginStoryboardName="_MouseEnterStoryboard"/>
<StopStoryboard BeginStoryboardName="_MouseExitStoryboard"/>
<BeginStoryboard x:Name="_DisabledStoryboard" Storyboard="{StaticResource Storyboard.Disabled}"/>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource Storyboard.MouseExit}"/>
</Trigger.ExitActions>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</UserControl.Resources>
<Viewbox>
<Grid>
<Grid x:Name="_OrbitsGrid" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Grid x:Name="_SystemOrbitsGrid" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Grid x:Name="_JumpBeaconsGrid" HorizontalAlignment="Center" VerticalAlignment="Center">
<local:JumpBeaconControl x:Name="_TopJumpBeaconControl" Template="{StaticResource JumpBeaconTemplate}" Text="Top" Angle="0"/>
<local:JumpBeaconControl x:Name="_TopRightJumpBeaconControl" Template="{StaticResource JumpBeaconTemplate}" Text="Top Right" Angle="45"/>
<local:JumpBeaconControl x:Name="_RightJumpBeaconControl" Template="{StaticResource JumpBeaconTemplate}" Text="Right" Angle="90"/>
<local:JumpBeaconControl x:Name="_BottomRightJumpBeaconControl" Template="{StaticResource JumpBeaconTemplate}" Text="Bottom Right" Angle="135"/>
<local:JumpBeaconControl x:Name="_BottomJumpBeaconControl" Template="{StaticResource JumpBeaconTemplate}" Text="Bottom" Angle="180"/>
<local:JumpBeaconControl x:Name="_BottomLeftJumpBeaconControl" Template="{StaticResource JumpBeaconTemplate}" Text="Bottom Left" Angle="225"/>
<local:JumpBeaconControl x:Name="_LeftJumpBeaconControl" Template="{StaticResource JumpBeaconTemplate}" Text="Left" Angle="270"/>
<local:JumpBeaconControl x:Name="_TopLeftJumpBeaconControl" Template="{StaticResource JumpBeaconTemplate}" Text="TopLeft" Angle="315"/>
</Grid>
</Grid>
</Viewbox>
</UserControl>
MapOrbitsControl.cs (15,868 bytes)
using Noesis;
using StellarConquest.Model.Actions;
using StellarConquest.Model.Core;
using StellarConquest.Model.Planets;
using StellarConquest.Model.Stars;
using StellarConquest.Model.Universe;
using System.Linq;
using UnityEngine;
using Grid = Noesis.Grid;
using GUI = Noesis.GUI;
using NoesisEventArgs = Noesis.EventArgs;
namespace StellarConquest.Presentation.Unity.UI
{
public sealed class MapOrbitsControl : UserControl
{
private FrameworkElement _Root;
private Grid _SystemOrbitsGrid;
private Grid _OrbitsGrid;
private Grid _JumpBeaconsGrid;
private JumpBeaconControl _TopJumpBeaconControl;
private JumpBeaconControl _TopRightJumpBeaconControl;
private JumpBeaconControl _RightJumpBeaconControl;
private JumpBeaconControl _BottomRightJumpBeaconControl;
private JumpBeaconControl _BottomJumpBeaconControl;
private JumpBeaconControl _BottomLeftJumpBeaconControl;
private JumpBeaconControl _LeftJumpBeaconControl;
private JumpBeaconControl _TopLeftJumpBeaconControl;
private View _View;
private int _FrameCount = 0;
public MapOrbitsControl()
{
if (!Application.isPlaying)
return;
Initialized += OnInitialized;
InitializeComponent();
}
private void InitializeComponent()
{
GUI.LoadComponent(this, "Assets/User Interface/Screens/Game/Static/Map/MapOrbitsControl.xaml");
Loaded += (sender, e) =>
{
_View = View;
_View.Rendering += OnRendering;
};
Unloaded += (sender, e) =>
{
if (_View != null)
_View.Rendering -= OnRendering;
_View = null;
};
_Root = Content as FrameworkElement;
_SystemOrbitsGrid = _Root.FindName(nameof(_SystemOrbitsGrid)) as Grid;
_OrbitsGrid = _Root.FindName(nameof(_OrbitsGrid)) as Grid;
_JumpBeaconsGrid = _Root.FindName(nameof(_JumpBeaconsGrid)) as Grid;
_TopJumpBeaconControl = _Root.FindName(nameof(_TopJumpBeaconControl)) as JumpBeaconControl;
_TopRightJumpBeaconControl = _Root.FindName(nameof(_TopRightJumpBeaconControl)) as JumpBeaconControl;
_RightJumpBeaconControl = _Root.FindName(nameof(_RightJumpBeaconControl)) as JumpBeaconControl;
_BottomRightJumpBeaconControl = _Root.FindName(nameof(_BottomRightJumpBeaconControl)) as JumpBeaconControl;
_BottomJumpBeaconControl = _Root.FindName(nameof(_BottomJumpBeaconControl)) as JumpBeaconControl;
_BottomLeftJumpBeaconControl = _Root.FindName(nameof(_BottomLeftJumpBeaconControl)) as JumpBeaconControl;
_LeftJumpBeaconControl = _Root.FindName(nameof(_LeftJumpBeaconControl)) as JumpBeaconControl;
_TopLeftJumpBeaconControl = _Root.FindName(nameof(_TopLeftJumpBeaconControl)) as JumpBeaconControl;
foreach (FrameworkElement element in _JumpBeaconsGrid.Children)
element.MouseUp += (sender, e) => SelectJumpBeacon((StarSystemMetadata)element.Tag);
}
private void OnInitialized(object sender, NoesisEventArgs args)
{
}
private void OnRendering(object sender, NoesisEventArgs e)
{
if (Visibility == Visibility.Collapsed)
return;
_FrameCount++;
if (_FrameCount % 5 == 0)
UpdateJumpBeaconEnabledState();
// Animation to show broken culling
float radius = SessionState.Instance.StarSystem.GetRadius();
float hack = (Mathf.Cos(Time.timeSinceLevelLoad * 0.5f) + 1) * 0.5f + 0.2f;
Debug.Log(hack);
UpdateRadius(radius, hack);
}
private void UpdateRadius(float radius, float hack = 1.0f)
{
float JumpBeaconRadius = (radius + 110);
float JumpBeaconRadiusDiagonal = JumpBeaconRadius * 0.71f;
JumpBeaconRadius *= hack;
JumpBeaconRadiusDiagonal *= hack;
_TopJumpBeaconControl.X = 0;
_TopJumpBeaconControl.Y = -JumpBeaconRadius;
_TopRightJumpBeaconControl.X = JumpBeaconRadiusDiagonal;
_TopRightJumpBeaconControl.Y = -JumpBeaconRadiusDiagonal;
_RightJumpBeaconControl.X = JumpBeaconRadius;
_RightJumpBeaconControl.Y = 0;
_BottomRightJumpBeaconControl.X = JumpBeaconRadiusDiagonal;
_BottomRightJumpBeaconControl.Y = JumpBeaconRadiusDiagonal;
_BottomJumpBeaconControl.X = 0;
_BottomJumpBeaconControl.Y = JumpBeaconRadius;
_BottomLeftJumpBeaconControl.X = -JumpBeaconRadiusDiagonal;
_BottomLeftJumpBeaconControl.Y = JumpBeaconRadiusDiagonal;
_LeftJumpBeaconControl.X = -JumpBeaconRadius;
_LeftJumpBeaconControl.Y = 0;
_TopLeftJumpBeaconControl.X = -JumpBeaconRadiusDiagonal;
_TopLeftJumpBeaconControl.Y = -JumpBeaconRadiusDiagonal;
}
private void SelectJumpBeacon(StarSystemMetadata metadata)
{
if (!PickingManager.Instance.InteractionFired && !UIStateMachine.Instance.IsCursorOverUI && !UIStateMachine.Instance.IsPrimaryOverlayVisible)
if (SessionState.Instance.Player.Location.IsPlayerInStellarShip)
{
if (SessionState.Instance.Ship.FuelValue >= SessionState.Instance.Ship.FuelConsumption)
{
PickingManager.Instance.InteractionFired = true;
UIStateMachine.Instance.GameScreen.TargetingControl.SelectTarget(SessionState.Instance.Ship.InstanceId, true, false);
UIJumpAction jumpAction = new UIJumpAction(SessionState.Instance.Galaxy.InstanceId, metadata.Id);
jumpAction.ExecuteServerSide();
}
else
UIStateMachine.Instance.GameScreen.ShowMessage(StatusActionType.Navigation, "INSUFFICIENT FUEL");
}
}
public void SetVisibility(bool visible)
{
if (visible)
Visibility = Visibility.Visible;
else
Visibility = Visibility.Collapsed;
}
public void Update()
{
if (Visibility == Visibility.Collapsed)
return;
float radius = SessionState.Instance.StarSystem.GetRadius();
UpdateRadius(radius);
// system orbits
_SystemOrbitsGrid.Children.Clear();
Ellipse innerStarSystemRadius = new Ellipse();
innerStarSystemRadius.Width = radius * 2;
innerStarSystemRadius.Height = radius * 2;
innerStarSystemRadius.Stroke = FindResource("SystemOrbitStrokeBrush") as SolidColorBrush;
innerStarSystemRadius.StrokeThickness = (float)FindResource("SystemOrbitStrokeThickness");
innerStarSystemRadius.StrokeDashArray = "13,13";
_SystemOrbitsGrid.Children.Add(innerStarSystemRadius);
Ellipse outerStarSystemRadius = new Ellipse();
outerStarSystemRadius.Width = (radius + Constants.Universe.JumpRegionRadius) * 2;
outerStarSystemRadius.Height = (radius + Constants.Universe.JumpRegionRadius) * 2;
outerStarSystemRadius.Stroke = FindResource("SystemOrbitStrokeBrush") as SolidColorBrush;
outerStarSystemRadius.StrokeThickness = (float)FindResource("SystemOrbitStrokeThickness");
outerStarSystemRadius.StrokeDashArray = "25,25";
_SystemOrbitsGrid.Children.Add(outerStarSystemRadius);
// orbits
_OrbitsGrid.Children.Clear();
if (SessionState.Instance.StarSystem.CountStars > 0 && SessionState.Instance.StarSystem.StarType != StarType.BlackHole)
{
foreach (BasePlanet planet in SessionState.Instance.StarSystem.Planets)
{
int distance = (int)(2 * Vector3.Distance(Vector3.zero, planet.Position.Convert()));
Ellipse ellipse = new Ellipse();
ellipse.Width = distance;
ellipse.Height = distance;
ellipse.Stroke = FindResource("OrbitStrokeBrush") as SolidColorBrush;
ellipse.StrokeThickness = (float)FindResource("OrbitStrokeThickness");
_OrbitsGrid.Children.Add(ellipse);
}
}
else if (SessionState.Instance.StarSystem.StarType == StarType.BlackHole)
{
Ellipse midpointSystemRadius = new Ellipse();
midpointSystemRadius.Width = radius * 0.66f;
midpointSystemRadius.Height = radius * 0.66f;
midpointSystemRadius.Stroke = FindResource("SystemOrbitStrokeBrush") as SolidColorBrush;
midpointSystemRadius.StrokeThickness = (float)FindResource("SystemOrbitStrokeThickness");
midpointSystemRadius.StrokeDashArray = "13,13";
_SystemOrbitsGrid.Children.Add(midpointSystemRadius);
}
else
{
if (SessionState.Instance.StarSystem.CountPlanets == 0)
{
Ellipse midpointSystemRadius = new Ellipse();
midpointSystemRadius.Width = radius * 0.5f;
midpointSystemRadius.Height = radius * 0.5f;
midpointSystemRadius.Stroke = FindResource("SystemOrbitStrokeBrush") as SolidColorBrush;
midpointSystemRadius.StrokeThickness = (float)FindResource("SystemOrbitStrokeThickness");
midpointSystemRadius.StrokeDashArray = "13,13";
_SystemOrbitsGrid.Children.Add(midpointSystemRadius);
}
}
// jump gates
Location location = SessionState.Instance.Location;
//if (location.CanMoveTop())
{
_TopJumpBeaconControl.Visibility = Visibility.Visible;
StarSystemMetadata connectionMetadata = SessionState.Instance.StarSystem.ConnectionsMetadata.FirstOrDefault(
a => a.Id == location.AbsolutePosition.Top.Id);
_TopJumpBeaconControl.Text = "T"; // connectionMetadata.Name != null ? connectionMetadata.Name : "Unknown";
_TopJumpBeaconControl.Tag = connectionMetadata;
}
//else
//_TopJumpBeaconControl.Visibility = Visibility.Collapsed;
//if (location.CanMoveTopRight())
{
_TopRightJumpBeaconControl.Visibility = Visibility.Visible;
StarSystemMetadata connectionMetadata = SessionState.Instance.StarSystem.ConnectionsMetadata.FirstOrDefault(
a => a.Id == location.AbsolutePosition.TopRight.Id);
_TopRightJumpBeaconControl.Text = "TR"; // connectionMetadata.Name != null ? connectionMetadata.Name : "Unknown";
_TopRightJumpBeaconControl.Tag = connectionMetadata;
}
//else
//_TopRightJumpBeaconControl.Visibility = Visibility.Collapsed;
//if (location.CanMoveRight())
{
_RightJumpBeaconControl.Visibility = Visibility.Visible;
StarSystemMetadata connectionMetadata = SessionState.Instance.StarSystem.ConnectionsMetadata.FirstOrDefault(
a => a.Id == location.AbsolutePosition.Right.Id);
_RightJumpBeaconControl.Text = "R"; // connectionMetadata.Name != null ? connectionMetadata.Name : "Unknown";
_RightJumpBeaconControl.Tag = connectionMetadata;
}
//else
//_RightJumpBeaconControl.Visibility = Visibility.Collapsed;
//if (location.CanMoveBottomRight())
{
_BottomRightJumpBeaconControl.Visibility = Visibility.Visible;
StarSystemMetadata connectionMetadata = SessionState.Instance.StarSystem.ConnectionsMetadata.FirstOrDefault(
a => a.Id == location.AbsolutePosition.BottomRight.Id);
_BottomRightJumpBeaconControl.Text = "BR"; // connectionMetadata.Name != null ? connectionMetadata.Name : "Unknown";
_BottomRightJumpBeaconControl.Tag = connectionMetadata;
}
//else
//_BottomRightJumpBeaconControl.Visibility = Visibility.Collapsed;
//if (location.CanMoveBottom())
{
_BottomJumpBeaconControl.Visibility = Visibility.Visible;
StarSystemMetadata connectionMetadata = SessionState.Instance.StarSystem.ConnectionsMetadata.FirstOrDefault(
a => a.Id == location.AbsolutePosition.Bottom.Id);
_BottomJumpBeaconControl.Text = "B"; // connectionMetadata.Name != null ? connectionMetadata.Name : "Unknown";
_BottomJumpBeaconControl.Tag = connectionMetadata;
}
//else
//_BottomJumpBeaconControl.Visibility = Visibility.Collapsed;
//if (location.CanMoveBottomLeft())
{
_BottomLeftJumpBeaconControl.Visibility = Visibility.Visible;
StarSystemMetadata connectionMetadata = SessionState.Instance.StarSystem.ConnectionsMetadata.FirstOrDefault(
a => a.Id == location.AbsolutePosition.BottomLeft.Id);
_BottomLeftJumpBeaconControl.Text = "BL"; // connectionMetadata.Name != null ? connectionMetadata.Name : "Unknown";
_BottomLeftJumpBeaconControl.Tag = connectionMetadata;
}
//else
//_BottomLeftJumpBeaconControl.Visibility = Visibility.Collapsed;
//if (location.CanMoveLeft())
{
_LeftJumpBeaconControl.Visibility = Visibility.Visible;
StarSystemMetadata connectionMetadata = SessionState.Instance.StarSystem.ConnectionsMetadata.FirstOrDefault(
a => a.Id == location.AbsolutePosition.Left.Id);
_LeftJumpBeaconControl.Text = "L"; // connectionMetadata.Name != null ? connectionMetadata.Name : "Unknown";
_LeftJumpBeaconControl.Tag = connectionMetadata;
}
//else
//_LeftJumpBeaconControl.Visibility = Visibility.Collapsed;
//if (location.CanMoveTopLeft())
{
_TopLeftJumpBeaconControl.Visibility = Visibility.Visible;
StarSystemMetadata connectionMetadata = SessionState.Instance.StarSystem.ConnectionsMetadata.FirstOrDefault(
a => a.Id == location.AbsolutePosition.TopLeft.Id);
_TopLeftJumpBeaconControl.Text = "TL"; // connectionMetadata.Name != null ? connectionMetadata.Name : "Unknown";
_TopLeftJumpBeaconControl.Tag = connectionMetadata;
}
//else
//_TopLeftJumpBeaconControl.Visibility = Visibility.Collapsed;
}
public void UpdateJumpBeaconEnabledState()
{
foreach (FrameworkElement element in _JumpBeaconsGrid.Children)
if (GameState.Instance.PlayerShip != null)
element.IsEnabled = GameState.Instance.PlayerShip.ShipController.CanJump();
else
element.IsEnabled = false;
}
}
} | ||||
| Platform | Any | ||||
|
Here is another video showing the behavior. I was mistaken. It is not associated with aspect ratio. It appears to be associated with resolution. https://stellarconquest.blob.core.windows.net/tmp/noesis/BadCulling2.mp4 |
|
|
Now that I'm aware of the behavior I tested other gameplay mechanics which use World UI. Everything using World UI is broken across the board. Images 1 & 2 are with Noesis 3.2.8 I downgraded and the missing functionality returned. |
|
|
I see the glitch in the video very clearly, but I am confused with the images (you also mention Images 1, but that's not attached). You saying that this feature was working in 3.2.4 and it is broken in 3.2.8? How easy would it be for you to reproduce this in a separate mini project we could debug? Thank you! |
|
|
Private reproduction included above. Just hit play and it will manifest. RE: images above were misnumbered. |
|
|
Thank you! |
|
|
Hey guys -- I totally don't want to nag. I'm just REALLY excited to use 3.2.8 because it is allocation free. Is it possible there is a work-around for the above behavior? |
|
|
Hello, we have an idea of the source of the problem. We're looking into it to properly fix it. |
|
|
Hey guys. Any updates on this bug? It's a blocker for my upgrade to 3.2.8. Thanks, |
|
|
Hi, we still don't have the definitive fix, but I generated a patched library with a solution for both 0004269 and #4237 so you can test it: Please let us know if it solved your issues. |
|
|
Thanks, Sergio! Both behaviors appear to be fixed. If I see a regression I'll reopen the corresponding ticket. |
|
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2025-06-20 20:14 | stonstad | New Issue | |
| 2025-06-20 20:14 | stonstad | File Added: MapOrbitsControl.xaml | |
| 2025-06-20 20:14 | stonstad | File Added: MapOrbitsControl.cs | |
| 2025-06-20 20:14 | stonstad | File Added: image.png | |
| 2025-06-20 20:16 | stonstad | Description Updated | |
| 2025-06-20 20:35 | stonstad | Note Added: 0010856 | |
| 2025-06-20 21:01 | stonstad | Note Added: 0010857 | |
| 2025-06-20 21:01 | stonstad | File Added: image-2.png | |
| 2025-06-20 21:01 | stonstad | File Added: image-3.png | |
| 2025-06-20 21:01 | stonstad | File Added: image-4.png | |
| 2025-06-20 21:01 | stonstad | File Added: image-5.png | |
| 2025-06-23 12:59 | jsantos | Assigned To | => jsantos |
| 2025-06-23 12:59 | jsantos | Status | new => assigned |
| 2025-06-23 12:59 | jsantos | Target Version | => 3.2.9 |
| 2025-06-23 13:03 | jsantos | Note Added: 0010860 | |
| 2025-06-23 13:03 | jsantos | Status | assigned => feedback |
| 2025-06-24 22:15 | stonstad | Status | feedback => assigned |
| 2025-06-24 22:15 | stonstad | Note Added: 0010863 | |
| 2025-06-24 22:16 | stonstad | Note Edited: 0010863 | |
| 2025-06-25 12:03 | jsantos | Note Added: 0010864 | |
| 2025-07-01 13:29 | stonstad | Note Added: 0010890 | |
| 2025-07-03 12:22 | sfernandez | Note Added: 0010897 | |
| 2025-07-22 18:00 | stonstad | Note Added: 0010925 | |
| 2025-07-23 12:42 | sfernandez | Status | assigned => feedback |
| 2025-07-23 12:42 | sfernandez | Note Added: 0010928 | |
| 2025-07-23 16:07 | stonstad | Note Added: 0010929 | |
| 2025-07-23 16:07 | stonstad | Status | feedback => assigned |
| 2025-08-06 13:34 | jsantos | Status | assigned => resolved |
| 2025-08-06 13:34 | jsantos | Resolution | open => fixed |
| 2025-08-06 13:34 | jsantos | Fixed in Version | => 3.2.9 |
| 2025-10-10 13:29 | jsantos | Category | Unity3D => Unity |