HQ/HqNavigator.cs
using Sandbox.Utility;
namespace PlanetMeat;
[Group( "Planet Meat - HQ" ), Title( "HQ Navigator" ), Icon( "explore" )]
public sealed class HqNavigator : Component
{
public static HqNavigator Local
{
get;
private set
{
field = value;
value?.AppliedView = View;
}
}
public enum Views { None, Research, Improve, Mission };
public DelayedRelocate Relocator => field ??= Components.Get<DelayedRelocate>();
[Property] public GameObject AnchorNone { get; set; }
[Property] public GameObject AnchorResearch { get; set; }
[Property] public GameObject AnchorImprove { get; set; }
[Property] public GameObject AnchorMission { get; set; }
public static Views View
{
get;
set
{
field = value;
Local?.AppliedView = View;
}
}
private Views AppliedView
{
set
{
if ( Agenda.Current.Phase != Agenda.Phases.Startup )
Career.Current.CommitRunStats();
field = value;
switch ( value )
{
case Views.Research:
Catalogue.Current.CurrentTab = "research";
camLerpEnd = AnchorResearch.WorldTransform;
break;
case Views.Improve:
Catalogue.Current.CurrentTab = "improve";
camLerpEnd = AnchorImprove.WorldTransform;
break;
case Views.Mission:
Catalogue.Current.CurrentTab = "";
camLerpEnd = AnchorMission.WorldTransform;
break;
default:
Catalogue.Current.CurrentTab = "";
camLerpEnd = AnchorNone.WorldTransform;
break;
}
camLerpStart = Scene.Camera.WorldTransform;
lerpProgress = 0.0f;
}
} = Views.None;
public static bool ShopVisible => View == Views.Research || View == Views.Improve;
public static bool MissionVisible => View == Views.Mission;
public static bool ExplainerVisible => View != Views.None;
public static bool StatsVisible => View == Views.None;
public static string GetViewDisplayName( Views view ) => view switch
{
Views.Research => "toolbox.research.title",
Views.Improve => "toolbox.improve.title",
Views.Mission => "toolbox.mission.title",
_ => ""
};
public static string GetViewDisplayIcon( Views view ) => view switch
{
Views.Research => "biotech",
Views.Improve => "plumbing",
Views.Mission => "settings_input_antenna",
_ => ""
};
public static string GetViewExplainerText( Views view ) => view switch
{
Views.Research => "hq.research.desc",
Views.Improve => "hq.improve.desc",
Views.Mission => "hq.mission.desc",
_ => ""
};
private Transform camLerpStart;
private Transform camLerpEnd;
private float lerpProgress;
protected override void OnStart()
{
base.OnStart();
Local = this;
}
protected override void OnUpdate()
{
base.OnUpdate();
if ( lerpProgress < 1.0f )
{
lerpProgress += Time.Delta;
if ( lerpProgress > 0.99f )
{
lerpProgress = 2.0f;
Scene.Camera.WorldTransform = camLerpEnd;
}
else
{
Scene.Camera.WorldTransform = camLerpStart.LerpTo( camLerpEnd, Easing.SineEaseInOut( lerpProgress ) );
}
}
}
protected override void OnDestroy()
{
Local = null;
base.OnDestroy();
}
}