prerelease
This commit is contained in:
@@ -81,6 +81,11 @@ internal sealed class EngineStreamEditor : Widget, IAssetInspector
|
||||
picker.OnAssetPicked += asset => CreateStreamEditor( asset[0].LoadResource<EngineStream>() );
|
||||
picker.Show();
|
||||
};
|
||||
var saveButton = a.Add( new Button( "Save File" ), 0 );
|
||||
saveButton.Clicked = () =>
|
||||
{
|
||||
ActiveStream.StateHasChanged();
|
||||
};
|
||||
}
|
||||
Layout RightLayout;
|
||||
SimulatedEngineWidget SimulatedEngineWidget;
|
||||
|
||||
@@ -76,7 +76,7 @@ internal sealed class SimulatedEngineWidget : Widget
|
||||
[EditorEvent.Frame]
|
||||
public void OnFrame()
|
||||
{
|
||||
if ( Player.Stream is null )
|
||||
if ( Player is null || !Player.Stream.IsValid() )
|
||||
return;
|
||||
Player.EngineState = IsPlaying ? EngineState.Running : EngineState.Off;
|
||||
|
||||
@@ -85,7 +85,7 @@ internal sealed class SimulatedEngineWidget : Widget
|
||||
IsRedlining = RPM.Value == 1 && !IsRedlining;
|
||||
Player.IsRedlining = IsRedlining;
|
||||
|
||||
Player.Update( Time.Delta, Vector3.Zero, true );
|
||||
Player?.Update( Time.Delta, Vector3.Zero, true );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
using Editor;
|
||||
using Sandbox;
|
||||
|
||||
namespace VeloX;
|
||||
|
||||
[CustomEditor( typeof( Pacejka ) )]
|
||||
public class PacejkaWidget : ControlObjectWidget
|
||||
{
|
||||
public override bool SupportsMultiEdit => false;
|
||||
public override bool IncludeLabel => false;
|
||||
|
||||
[CustomEditor( typeof( Pacejka.PacejkaPreset ) )]
|
||||
private class LateralForceWidget : ControlObjectWidget
|
||||
{
|
||||
public LateralForceWidget( SerializedProperty property ) : base( property, true )
|
||||
{
|
||||
Layout = Layout.Column();
|
||||
Layout.Margin = 8f;
|
||||
Layout.Spacing = 8;
|
||||
foreach ( var item in TypeLibrary.GetType<Pacejka.PacejkaPreset>().Properties )
|
||||
{
|
||||
var row = Layout.AddRow();
|
||||
row.Spacing = 8;
|
||||
var propetry = SerializedObject.GetProperty( item.Name );
|
||||
row.Add( new Label( propetry.Name ) );
|
||||
row.Add( Create( propetry ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
private Pacejka Pacejka;
|
||||
public PacejkaWidget( SerializedProperty property ) : base( property, true )
|
||||
{
|
||||
|
||||
var obj = SerializedObject;
|
||||
Pacejka = obj.ParentProperty.GetValue<Pacejka>();
|
||||
|
||||
Layout = Layout.Column();
|
||||
Layout.Margin = 8f;
|
||||
Layout.Add( new Label.Body( $" {ToolTip}" ) { Color = Color.White } );
|
||||
var tabs = Layout.Add( new TabWidget( null ) );
|
||||
tabs.AddPage( nameof( Pacejka.Lateral ), null,
|
||||
Layout.Add( Create( obj.GetProperty( nameof( Pacejka.Lateral ) ) ) )
|
||||
);
|
||||
tabs.AddPage( nameof( Pacejka.Longitudinal ), null,
|
||||
Layout.Add( Create( obj.GetProperty( nameof( Pacejka.Longitudinal ) ) ) )
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -11,17 +11,9 @@ namespace VeloX;
|
||||
[AssetPreview( "tire" )]
|
||||
class TirePresetPreview : AssetPreview
|
||||
{
|
||||
private Texture texture;
|
||||
public override bool IsAnimatedPreview => false;
|
||||
[Range( 0.01f, 1 )] private float Zoom { get; set; } = 1;
|
||||
private TirePreset Tire;
|
||||
public AssetPreviewWidget Widget { get; private set; }
|
||||
public override Widget CreateWidget( Widget parent )
|
||||
{
|
||||
Widget = parent as AssetPreviewWidget;
|
||||
|
||||
return null;
|
||||
}
|
||||
public override Widget CreateToolbar()
|
||||
{
|
||||
var info = new IconButton( "settings" );
|
||||
@@ -58,55 +50,53 @@ class TirePresetPreview : AssetPreview
|
||||
|
||||
using ( Scene.Push() )
|
||||
{
|
||||
PrimaryObject = new()
|
||||
PrimaryObject = new( true )
|
||||
{
|
||||
WorldTransform = Transform.Zero
|
||||
};
|
||||
|
||||
var plane = PrimaryObject.AddComponent<ModelRenderer>();
|
||||
plane.Model = Model.Plane;
|
||||
plane.LocalScale = new Vector3( 1, 1, 1 );
|
||||
plane.MaterialOverride = Material.Load( "materials/dev/reflectivity_30.vmat" );
|
||||
plane.Tint = new Color( 0.02f, 0.04f, 0.03f );
|
||||
var spriteRenderer = PrimaryObject.AddComponent<SpriteRenderer>();
|
||||
|
||||
var bitmap = new Bitmap( 512, 512 );
|
||||
var tire = Asset.LoadResource<TirePreset>();
|
||||
Draw( bitmap, tire );
|
||||
|
||||
spriteRenderer.Sprite = new() { Animations = [new() { Frames = [new() { Texture = bitmap.ToTexture() }] },] }; // Set the texture on the renderer
|
||||
spriteRenderer.Size = 512;
|
||||
|
||||
var bounds = PrimaryObject.GetBounds();
|
||||
SceneCenter = bounds.Center;
|
||||
SceneSize = bounds.Size;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
public override void UpdateScene( float cycle, float timeStep )
|
||||
{
|
||||
if ( !Widget.IsValid() )
|
||||
return;
|
||||
base.UpdateScene( cycle, timeStep );
|
||||
|
||||
Camera.WorldPosition = Vector3.Up * 300;
|
||||
Camera.Orthographic = true;
|
||||
Camera.WorldRotation = new Angles( 90, 0, 0 );
|
||||
Camera.OrthographicHeight = 512;
|
||||
Camera.WorldPosition = Vector3.Backward * 512;
|
||||
Camera.WorldRotation = Rotation.LookAt( Vector3.Forward );
|
||||
|
||||
|
||||
var bitmap = new Bitmap( 512, 512 );
|
||||
var tire = Asset.LoadResource<TirePreset>();
|
||||
Draw( bitmap, tire );
|
||||
|
||||
Draw( bitmap );
|
||||
PrimaryObject.Components.Get<SpriteRenderer>().Sprite = new() { Animations = [new() { Frames = [new() { Texture = bitmap.ToTexture() }] },] }; // Set the texture on the renderer
|
||||
PrimaryObject.Components.Get<SpriteRenderer>().Size = 512;
|
||||
|
||||
texture.Clear( Color.Black );
|
||||
//texture.Update( bitmap );
|
||||
DebugOverlaySystem.Current.Texture( texture, new Rect( 0, Widget.Size ) );
|
||||
|
||||
FrameScene();
|
||||
}
|
||||
|
||||
private readonly List<Vector2> pointCache = [];
|
||||
|
||||
public TirePresetPreview( Asset asset ) : base( asset )
|
||||
{
|
||||
texture = Texture.CreateRenderTarget().WithDynamicUsage().WithScreenFormat().WithSize( 512, 512 ).Create();
|
||||
Tire = Asset.LoadResource<TirePreset>();
|
||||
}
|
||||
|
||||
private void DrawPacejka( Bitmap bitmap )
|
||||
private void DrawPacejka( Bitmap bitmap, TirePreset tire )
|
||||
{
|
||||
var tire = Tire.Pacejka;
|
||||
|
||||
var width = bitmap.Width;
|
||||
var height = bitmap.Height;
|
||||
|
||||
@@ -118,32 +108,18 @@ class TirePresetPreview : AssetPreview
|
||||
|
||||
for ( float x = 0; x <= 1; x += 0.01f )
|
||||
{
|
||||
float val = tire.PacejkaFy( x ) * Zoom;
|
||||
float val = tire.Evaluate( x ) * Zoom;
|
||||
pointCache.Add( new( width * x, height - height * val ) );
|
||||
}
|
||||
|
||||
bitmap.DrawLines( pointCache.ToArray() );
|
||||
}
|
||||
|
||||
{ // draw longitudinal line
|
||||
pointCache.Clear();
|
||||
|
||||
bitmap.SetPen( Color.Green, 1 );
|
||||
|
||||
for ( float x = 0; x <= 1; x += 0.01f )
|
||||
{
|
||||
float val = tire.PacejkaFx( x ) * Zoom;
|
||||
pointCache.Add( new( width * x, height - height * val ) );
|
||||
}
|
||||
bitmap.DrawLines( pointCache.ToArray() );
|
||||
}
|
||||
|
||||
pointCache.Clear();
|
||||
}
|
||||
private void Draw( Bitmap bitmap )
|
||||
private void Draw( Bitmap bitmap, TirePreset tire )
|
||||
{
|
||||
bitmap.Clear( Color.Black );
|
||||
bitmap.SetAntialias( true );
|
||||
DrawPacejka( bitmap );
|
||||
DrawPacejka( bitmap, tire );
|
||||
}
|
||||
}
|
||||
|
||||
27
Editor/Wheel/TirePresetWidget.cs
Normal file
27
Editor/Wheel/TirePresetWidget.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Editor;
|
||||
using Sandbox;
|
||||
|
||||
namespace VeloX;
|
||||
|
||||
[CustomEditor( typeof( TirePreset ) )]
|
||||
public class TirePresetWidget : ControlObjectWidget
|
||||
{
|
||||
public override bool SupportsMultiEdit => false;
|
||||
public override bool IncludeLabel => false;
|
||||
|
||||
public TirePresetWidget( SerializedProperty property ) : base( property, true )
|
||||
{
|
||||
|
||||
var obj = SerializedObject;
|
||||
var tirePreset = obj.ParentProperty.GetValue<TirePreset>();
|
||||
|
||||
Layout = Layout.Column();
|
||||
Layout.Margin = 8f;
|
||||
Layout.Add( new Label.Body( $" {ToolTip}" ) { Color = Color.White } );
|
||||
Layout.Add( Create( obj.GetProperty( nameof( TirePreset.B ) ) ) );
|
||||
Layout.Add( Create( obj.GetProperty( nameof( TirePreset.C ) ) ) );
|
||||
Layout.Add( Create( obj.GetProperty( nameof( TirePreset.D ) ) ) );
|
||||
Layout.Add( Create( obj.GetProperty( nameof( TirePreset.E ) ) ) );
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user