add spline based motion
							parent
							
								
									bf913716e7
								
							
						
					
					
						commit
						eb51182760
					
				|  | @ -10,3 +10,6 @@ | |||
| [submodule "Smuggler"] | ||||
| 	path = Smuggler | ||||
| 	url = https://gitea.moonside.games/MoonsideGames/Smuggler.git | ||||
| [submodule "MoonTools.Curve"] | ||||
| 	path = MoonTools.Curve | ||||
| 	url = https://gitea.moonside.games/MoonsideGames/MoonTools.Curve.git | ||||
|  |  | |||
|  | @ -0,0 +1,31 @@ | |||
| using Encompass; | ||||
| using KavTest.Extensions; | ||||
| using MoonTools.Curve; | ||||
| 
 | ||||
| namespace KavTest.Components | ||||
| { | ||||
|     public struct MoveAlongCurve3DComponent : IComponent | ||||
|     { | ||||
|         public SplineCurve3D Curve { get; } | ||||
|         public float Time { get; } | ||||
| 
 | ||||
|         public MoveAlongCurve3DComponent(SplineCurve3D curve) | ||||
|         { | ||||
|             Curve = curve; | ||||
|             Time = 0; | ||||
|         } | ||||
| 
 | ||||
|         public MoveAlongCurve3DComponent(SplineCurve3D curve, float currentTime) | ||||
|         { | ||||
|             Curve = curve; | ||||
|             Time = currentTime; | ||||
|         } | ||||
|         public Microsoft.Xna.Framework.Vector3 Position | ||||
|         {  | ||||
|             get  | ||||
|             { | ||||
|                 return Curve.Point(Time).ToXNAVector(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,29 @@ | |||
| using Encompass; | ||||
| using KavTest.Components; | ||||
| using KavTest.Messages; | ||||
| 
 | ||||
| namespace KavTest.Engines | ||||
| { | ||||
|     [Sends(typeof(TranslationMessage))] | ||||
|     [Writes(typeof(MoveAlongCurve3DComponent))] | ||||
|     [QueryWith(typeof(MoveAlongCurve3DComponent), typeof(Transform3DComponent))] | ||||
|     public class MoveAlongCurve3DEngine : Engine | ||||
|     { | ||||
|         public override void Update(double dt) | ||||
|         { | ||||
|             foreach (var entity in TrackedEntities) | ||||
|             { | ||||
|                 ref readonly var movealongCurveComponent = ref GetComponent<MoveAlongCurve3DComponent>(entity); | ||||
|                 ref readonly var transformComponent = ref GetComponent<Transform3DComponent>(entity); | ||||
| 
 | ||||
|                 var newCurve = new MoveAlongCurve3DComponent( | ||||
|                     movealongCurveComponent.Curve, | ||||
|                     movealongCurveComponent.Time + (float)dt | ||||
|                 ); | ||||
| 
 | ||||
|                 SendMessage(new TranslationMessage(entity, newCurve.Position - transformComponent.Transform.Position)); | ||||
|                 SetComponent(entity, newCurve); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -1,4 +1,5 @@ | |||
| using Encompass; | ||||
| using Kav; | ||||
| using KavTest.Components; | ||||
| using KavTest.Messages; | ||||
| 
 | ||||
|  | @ -6,12 +7,21 @@ namespace KavTest.Spawners | |||
| { | ||||
|     public class LightBulbSpawner : Spawner<LightBulbSpawnMessage> | ||||
|     { | ||||
|         public Model LightBulbModel { get; } | ||||
|          | ||||
|         public LightBulbSpawner(Model lightBulbModel) | ||||
|         { | ||||
|             LightBulbModel = lightBulbModel; | ||||
|         } | ||||
| 
 | ||||
|         protected override void Spawn(in LightBulbSpawnMessage message) | ||||
|         { | ||||
|             var entity = CreateEntity(); | ||||
| 
 | ||||
|             AddComponent(entity, new Transform3DComponent(message.Transform)); | ||||
|             AddComponent(entity, new PointLightComponent(message.Color, message.Intensity)); | ||||
|             AddComponent(entity, new MoveAlongCurve3DComponent(message.Curve)); | ||||
|             AddComponent(entity, new ModelComponent(LightBulbModel)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,10 @@ | |||
| namespace KavTest.Extensions | ||||
| { | ||||
|     public static class Vector3Extensions | ||||
|     { | ||||
|         public static Microsoft.Xna.Framework.Vector3 ToXNAVector(this System.Numerics.Vector3 vector) | ||||
|         { | ||||
|             return new Microsoft.Xna.Framework.Vector3(vector.X, vector.Y, vector.Z); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -27,6 +27,7 @@ | |||
|     <ProjectReference Include="..\encompass-cs\encompass-cs\encompass-cs.csproj" /> | ||||
|     <ProjectReference Include="..\Kav\Kav.Core.csproj" /> | ||||
|     <ProjectReference Include="..\Smuggler\Smuggler.Core.csproj" /> | ||||
|     <ProjectReference Include="..\MoonTools.Curve\Curve\Curve.csproj" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="..\build\CopyFNALibs.targets"/> | ||||
|   <Import Sdk="Microsoft.NET.Sdk" Project="Sdk.targets" /> | ||||
|  |  | |||
|  | @ -30,6 +30,7 @@ | |||
|     <ProjectReference Include="..\encompass-cs\encompass-cs\encompass-cs.csproj" /> | ||||
|     <ProjectReference Include="..\Kav\Kav.Framework.csproj" /> | ||||
|     <ProjectReference Include="..\Smuggler\Smuggler.Framework.csproj" /> | ||||
|     <ProjectReference Include="..\MoonTools.Curve\Curve\Curve.csproj" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="..\build\CopyFNALibs.targets"/> | ||||
|   <Import Sdk="Microsoft.NET.Sdk" Project="Sdk.targets" /> | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| using System.Collections.Immutable; | ||||
| using System.IO; | ||||
| using Encompass; | ||||
| using KavTest.Components; | ||||
|  | @ -7,6 +8,7 @@ using KavTest.Renderers; | |||
| using KavTest.Spawners; | ||||
| using Microsoft.Xna.Framework; | ||||
| using Microsoft.Xna.Framework.Graphics; | ||||
| using MoonTools.Curve; | ||||
| 
 | ||||
| namespace KavTest | ||||
| { | ||||
|  | @ -50,12 +52,18 @@ namespace KavTest | |||
|                 Smuggler.Importer.ImportGLB(GraphicsDevice, File.OpenRead("Content/rustysphere.glb")) | ||||
|             ); | ||||
| 
 | ||||
|             var lightBulbModel = Kav.ModelLoader.Load( | ||||
|                 GraphicsDevice, | ||||
|                 Smuggler.Importer.ImportGLB(GraphicsDevice, File.OpenRead("Content/cube.glb")) | ||||
|             ); | ||||
| 
 | ||||
|             WorldBuilder.AddEngine(new InputEngine(this)); | ||||
|             WorldBuilder.AddEngine(new AngularVelocityEngine()); | ||||
|             WorldBuilder.AddEngine(new MoveAlongCurve3DEngine()); | ||||
|             WorldBuilder.AddEngine(new MotionEngine()); | ||||
|             WorldBuilder.AddEngine(new CameraEngine()); | ||||
|             WorldBuilder.AddEngine(new RustyBallSpawner(rustyBallModel)); | ||||
|             WorldBuilder.AddEngine(new LightBulbSpawner()); | ||||
|             WorldBuilder.AddEngine(new LightBulbSpawner(lightBulbModel)); | ||||
|             WorldBuilder.AddGeneralRenderer(new SceneRenderer(GraphicsDevice), 0); | ||||
| 
 | ||||
|             WorldBuilder.SendMessage(new RustyBallSpawnMessage( | ||||
|  | @ -73,41 +81,62 @@ namespace KavTest | |||
|                 new Vector3(-1, 1, 1) | ||||
|             )); | ||||
| 
 | ||||
|             var lightMovementSpline = new SplineCurve3D( | ||||
|                 ImmutableArray.Create<ICurve3D>( | ||||
|                     new QuadraticBezierCurve3D( | ||||
|                         new System.Numerics.Vector3(-5, 2, -5), | ||||
|                         new System.Numerics.Vector3(20, 50, -20), | ||||
|                         new System.Numerics.Vector3(10, 20, 10) | ||||
|                     ), | ||||
|                     new QuadraticBezierCurve3D( | ||||
|                         new System.Numerics.Vector3(10, 20, 10), | ||||
|                         new System.Numerics.Vector3(-20, -50, -10), | ||||
|                         new System.Numerics.Vector3(-5, 2, -5) | ||||
|                     ) | ||||
|                 ), | ||||
|                 ImmutableArray.Create<float>( | ||||
|                     3f, | ||||
|                     3f | ||||
|                 ), | ||||
|                 true | ||||
|             ); | ||||
| 
 | ||||
|             WorldBuilder.SendMessage(new LightBulbSpawnMessage( | ||||
|                 new Transform3D(new Vector3(-5, 2, -5)), | ||||
|                 new Transform3D(new Vector3(-5, 2, -5), Quaternion.Identity, new Vector3(0.25f, 0.25f, 0.25f)), | ||||
|                 Color.White, | ||||
|                 300f | ||||
|                 300f, | ||||
|                 lightMovementSpline | ||||
|             )); | ||||
| 
 | ||||
|             WorldBuilder.SendMessage(new LightBulbSpawnMessage( | ||||
|                 new Transform3D(new Vector3(5, 2, -5)), | ||||
|                 Color.Blue, | ||||
|                 300f | ||||
|             )); | ||||
|             // WorldBuilder.SendMessage(new LightBulbSpawnMessage( | ||||
|             //     new Transform3D(new Vector3(5, 2, -5)), | ||||
|             //     Color.Blue, | ||||
|             //     300f | ||||
|             // )); | ||||
| 
 | ||||
|             WorldBuilder.SendMessage(new LightBulbSpawnMessage( | ||||
|                 new Transform3D(new Vector3(-5, -2, -5)), | ||||
|                 Color.Red, | ||||
|                 300f | ||||
|             )); | ||||
|             // WorldBuilder.SendMessage(new LightBulbSpawnMessage( | ||||
|             //     new Transform3D(new Vector3(-5, -2, -5)), | ||||
|             //     Color.Red, | ||||
|             //     300f | ||||
|             // )); | ||||
| 
 | ||||
|             WorldBuilder.SendMessage(new LightBulbSpawnMessage( | ||||
|                 new Transform3D(new Vector3(-5, 2, 5)), | ||||
|                 Color.Yellow, | ||||
|                 300f | ||||
|             )); | ||||
|             // WorldBuilder.SendMessage(new LightBulbSpawnMessage( | ||||
|             //     new Transform3D(new Vector3(-5, 2, 5)), | ||||
|             //     Color.Yellow, | ||||
|             //     300f | ||||
|             // )); | ||||
| 
 | ||||
|             WorldBuilder.SendMessage(new LightBulbSpawnMessage( | ||||
|                 new Transform3D(new Vector3(-5, 2, -10)), | ||||
|                 Color.Orange, | ||||
|                 300f | ||||
|             )); | ||||
|             // WorldBuilder.SendMessage(new LightBulbSpawnMessage( | ||||
|             //     new Transform3D(new Vector3(-5, 2, -10)), | ||||
|             //     Color.Orange, | ||||
|             //     300f | ||||
|             // )); | ||||
| 
 | ||||
|             WorldBuilder.SendMessage(new LightBulbSpawnMessage( | ||||
|                 new Transform3D(new Vector3(-10, 2, -5)), | ||||
|                 Color.CornflowerBlue, | ||||
|                 300f | ||||
|             )); | ||||
|             // WorldBuilder.SendMessage(new LightBulbSpawnMessage( | ||||
|             //     new Transform3D(new Vector3(-10, 2, -5)), | ||||
|             //     Color.CornflowerBlue, | ||||
|             //     300f | ||||
|             // )); | ||||
| 
 | ||||
|             var directionalLightEntity = WorldBuilder.CreateEntity(); | ||||
|             WorldBuilder.SetComponent(directionalLightEntity, new Transform3DComponent( | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| using Encompass; | ||||
| using Microsoft.Xna.Framework; | ||||
| using MoonTools.Curve; | ||||
| 
 | ||||
| namespace KavTest.Messages | ||||
| { | ||||
|  | @ -8,12 +9,14 @@ namespace KavTest.Messages | |||
|         public Transform3D Transform { get; } | ||||
|         public Color Color { get; } | ||||
|         public float Intensity { get; } | ||||
|         public SplineCurve3D Curve { get; } | ||||
| 
 | ||||
|         public LightBulbSpawnMessage(Transform3D transform, Color color, float intensity) | ||||
|         public LightBulbSpawnMessage(Transform3D transform, Color color, float intensity, SplineCurve3D curve) | ||||
|         { | ||||
|             Transform = transform; | ||||
|             Color = color; | ||||
|             Intensity = intensity; | ||||
|             Curve = curve; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1 @@ | |||
| Subproject commit 1a14f2595ad83dae3d6a715506bf2f735168416c | ||||
		Loading…
	
		Reference in New Issue