{"TotalCount":5,"Files":[{"Ident":"yeetsneet.lidar_test","Path":"scripts/Lidar.cs","FileName":"Lidar.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":421300,"IsPrivate":false,"Code":"using System;\r\n\r\npublic sealed class Lidar : Component\r\n{\r\n\t[Property] public float RebuildRate { get; set; } = 0.25f;\r\n\t[Property] public float PointSize { get; set; } = 5.0f;\r\n\t[Property] public Material DotMaterial { get; set; }\r\n\r\n\t[Property] public ModelRenderer Model { get; set; }\r\n\r\n\tprivate float lastUpdate = 0f;\r\n\tprivate bool isDirty = false;\r\n\r\n\tprivate readonly List\u003CVertex\u003E vertices = new();\r\n\tprivate readonly List\u003Cint\u003E indices = new();\r\n\r\n\tprotected override void OnStart()\r\n\t{\r\n\t\tDotMaterial ??= Material.Load( \u0022materials/default.vmat\u0022 );\r\n\t\tModel ??= Components.GetOrCreate\u003CModelRenderer\u003E();\r\n\t}\r\n\r\n\tprotected override void OnUpdate()\r\n\t{\r\n\t\tif ( !isDirty )\r\n\t\t\treturn;\r\n\r\n\t\tfloat nowTime = Time.Now;\r\n\r\n\t\tif ( (nowTime - lastUpdate) \u003C RebuildRate )\r\n\t\t\treturn;\r\n\r\n\t\tlastUpdate = nowTime;\r\n\r\n\t\tRebuildModel();\r\n\t}\r\n\r\n\tpublic void AddPoint( Vector3 pos, Vector3 normal )\r\n\t{\r\n\t\tnormal = normal.Normal;\r\n\r\n\t\tVector3 tangent = Vector3.Cross(\r\n\t\t\tnormal,\r\n\t\t\tMathF.Abs( normal.z ) \u003C 0.99f\r\n\t\t\t\t? Vector3.Up\r\n\t\t\t\t: Vector3.Forward\r\n\t\t).Normal;\r\n\r\n\t\tVector3 bitangent = Vector3.Cross( normal, tangent ).Normal;\r\n\r\n\t\tfloat half = PointSize * 0.5f;\r\n\r\n\t\tint baseIndex = vertices.Count;\r\n\r\n\t\tvertices.Add( new Vertex(\r\n\t\t\tpos \u002B (tangent \u002B bitangent) * half,\r\n\t\t\tnormal,\r\n\t\t\tnew Vector4( tangent, 1 ),\r\n\t\t\tnew Vector2( 0, 0 )\r\n\t\t) );\r\n\r\n\t\tvertices.Add( new Vertex(\r\n\t\t\tpos \u002B (tangent - bitangent) * half,\r\n\t\t\tnormal,\r\n\t\t\tnew Vector4( tangent, 1 ),\r\n\t\t\tnew Vector2( 0, 1 )\r\n\t\t) );\r\n\r\n\t\tvertices.Add( new Vertex(\r\n\t\t\tpos \u002B (-tangent - bitangent) * half,\r\n\t\t\tnormal,\r\n\t\t\tnew Vector4( tangent, 1 ),\r\n\t\t\tnew Vector2( 1, 1 )\r\n\t\t) );\r\n\r\n\t\tvertices.Add( new Vertex(\r\n\t\t\tpos \u002B (-tangent \u002B bitangent) * half,\r\n\t\t\tnormal,\r\n\t\t\tnew Vector4( tangent, 1 ),\r\n\t\t\tnew Vector2( 1, 0 )\r\n\t\t) );\r\n\r\n\t\tindices.Add( baseIndex \u002B 0 );\r\n\t\tindices.Add( baseIndex \u002B 1 );\r\n\t\tindices.Add( baseIndex \u002B 2 );\r\n\r\n\t\tindices.Add( baseIndex \u002B 0 );\r\n\t\tindices.Add( baseIndex \u002B 2 );\r\n\t\tindices.Add( baseIndex \u002B 3 );\r\n\r\n\t\tisDirty = true;\r\n\t}\r\n\r\n\tpublic void ClearPoints()\r\n\t{\r\n\t\tvertices.Clear();\r\n\t\tindices.Clear();\r\n\r\n\t\tisDirty = true;\r\n\t}\r\n\r\n\tpublic void RebuildModel()\r\n\t{\r\n\t\tisDirty = false;\r\n\r\n\t\tif ( vertices.Count == 0 )\r\n\t\t\treturn;\r\n\r\n\t\tvar mesh = new Mesh( DotMaterial );\r\n\r\n\t\tmesh.CreateVertexBuffer( vertices.Count, vertices );\r\n\t\tmesh.CreateIndexBuffer( indices.Count, indices.ToArray() );\r\n\r\n\t\tModel.Model = new ModelBuilder()\r\n\t\t\t.AddMesh( mesh )\r\n\t\t\t.Create();\r\n\t}\r\n}\r\n"},{"Ident":"yeetsneet.lidar_test","Path":".obj/__compiler_extra.cs","FileName":"__compiler_extra.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":421300,"IsPrivate":false,"Code":"global using static Sandbox.Internal.GlobalGameNamespace;\r\nglobal using Microsoft.AspNetCore.Components;\r\nglobal using Microsoft.AspNetCore.Components.Rendering;\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022AddonTitle\u0022, \u0022lidar\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022AddonIdent\u0022, \u0022lidar_test\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022OrgIdent\u0022, \u0022yeetsneet\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022Ident\u0022, \u0022yeetsneet.lidar_test\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022EngineVersion\u0022, \u002229\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022EngineMinorVersion\u0022, \u00221\u0022 )]\r\n\r\n[assembly: System.Runtime.Versioning.TargetFramework( \u0022.NETCoreApp,Version=v9.0\u0022, FrameworkDisplayName = \u0022.NET 9.0\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022CompileTime\u0022, \u00222026-10-07T04:23:04.9395740Z\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyVersion(\u00220.0.158.0\u0022)]\r\n[assembly: global::System.Reflection.AssemblyFileVersion(\u00220.0.158.0\u0022)]"},{"Ident":"yeetsneet.lidar_test","Path":"scripts/LidarControler.cs","FileName":"LidarControler.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":421300,"IsPrivate":false,"Code":"using Sandbox;\r\nusing Sandbox.Diagnostics;\r\nusing System;\r\n\r\npublic sealed class LidarControler : Component\r\n{\r\n\t[Property] public Lidar lidar;\r\n\t[Property] public float randomFov = 0f;\r\n\t[Property] public float fireRate = 1 / 30f;\r\n\t[Property] public int rayBachCount = 5;\r\n\r\n\tpublic float lastFire = 0f;\r\n\tprivate CameraComponent camera;\r\n\tprivate Random random;\r\n\r\n\tprotected override void OnUpdate()\r\n\t{\r\n\t\tif ( Input.Down( \u0022Attack1\u0022 ) )\r\n\t\t{\r\n\t\t\tBasicRay();\r\n\t\t}\r\n\r\n\t\tbase.OnUpdate();\r\n\t}\r\n\r\n\tprotected override void OnStart()\r\n\t{\r\n\t\tcamera = Scene.Camera;\r\n\t\trandom = new();\r\n\r\n\t\tbase.OnStart();\r\n\t}\r\n\r\n\tprivate Rotation randomRotionFov( float randomFov )\r\n\t{\r\n\t\tfloat angle = random.Float( 0f, MathF.PI * 2f );\r\n\t\tfloat radius = MathF.Sqrt( random.Float( 0f, 1f ) ) * randomFov;\r\n\r\n\t\tfloat x = MathF.Cos( angle ) * radius;\r\n\t\tfloat y = MathF.Sin( angle ) * radius;\r\n\r\n\t\treturn Rotation.From( x, y, 0f );\r\n\t}\r\n\r\n\tprivate void FireRay( Vector3 pos, Rotation rot )\r\n\t{\r\n\t\tSceneTraceResult tr = Scene.Trace\r\n\t\t\t.Ray( pos, pos \u002B rot.Forward * 1e6f )\r\n\t\t\t.WithoutTags( \u0022lidar\u0022 )\r\n\t\t\t.Run();\r\n\r\n\t\tif ( tr.Hit == false ) { return; }\r\n\r\n\t\tlidar.AddPoint(\r\n\t\t\ttr.HitPosition - tr.Normal * 0.01f,\r\n\t\t\ttr.Normal\r\n\t\t);\r\n\t}\r\n\r\n\r\n\tprivate void BasicRay()\r\n\t{\r\n\t\tfloat nowTime = Time.Now;\r\n\t\tif ( (nowTime - lastFire) \u003C fireRate )\r\n\t\t{\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tVector3 pos = camera.WorldPosition;\r\n\t\tRotation rot = camera.WorldRotation;\r\n\r\n\t\tfor ( var i = 0; i \u003C rayBachCount; i\u002B\u002B )\r\n\t\t{\r\n\t\t\tFireRay( pos, rot * randomRotionFov( randomFov ) );\r\n\t\t}\r\n\r\n\t\tlastFire = nowTime;\r\n\t}\r\n}\r\n"},{"Ident":"yeetsneet.lidar_test","Path":"Assembly.cs","FileName":"Assembly.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":421300,"IsPrivate":false,"Code":"global using Sandbox;\r\nglobal using System.Collections.Generic;\r\nglobal using System.Linq;\r\n"},{"Ident":"yeetsneet.lidar_test","Path":"scripts/Gputest.cs","FileName":"Gputest.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":421300,"IsPrivate":false,"Code":"\r\n"}]}