MoveActorOnInputScriptElement.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using fun.Core;
  2. using OpenTK;
  3. using OpenTK.Input;
  4. using System;
  5. using Environment = fun.Core.Environment;
  6. namespace fun.Basics.Skripts
  7. {
  8. public sealed class MoveActorOnInputScriptElement : Element
  9. {
  10. private readonly InputElement input;
  11. private readonly TransformElement transform;
  12. public MoveActorOnInputScriptElement(Environment environment, Entity entity)
  13. : base(environment, entity)
  14. {
  15. if (!entity.ContainsElement<InputElement>())
  16. throw new NotSupportedException();
  17. if (!entity.ContainsElement<TransformElement>())
  18. throw new NotSupportedException();
  19. input = entity.GetElement<InputElement>() as InputElement;
  20. transform = entity.GetElement<TransformElement>() as TransformElement;
  21. }
  22. public override void Update(double time)
  23. {
  24. var rotation = Matrix4.CreateRotationX(transform.Rotation.X) *
  25. Matrix4.CreateRotationZ(transform.Rotation.Z);
  26. var Right = Vector3.Transform(Vector3.UnitX, rotation);
  27. var Forward = Vector3.Transform(Vector3.UnitY, rotation);
  28. var Up = Vector3.Transform(Vector3.UnitZ, rotation);
  29. transform.Position += input.GetKeyDown(Key.W) ? Forward * 0.1f : Vector3.Zero;
  30. transform.Position -= input.GetKeyDown(Key.S) ? Forward * 0.1f : Vector3.Zero;
  31. transform.Position += input.GetKeyDown(Key.D) ? Right * 0.1f : Vector3.Zero;
  32. transform.Position -= input.GetKeyDown(Key.A) ? Right * 0.1f : Vector3.Zero;
  33. transform.Position += input.GetKeyDown(Key.Space) ? Up * 0.1f : Vector3.Zero;
  34. transform.Position -= input.GetKeyDown(Key.LShift) ? Up * 0.1f : Vector3.Zero;
  35. }
  36. }
  37. }