MovementSystem.cs 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. using System;
  2. using Artemis;
  3. using StarWarrior.Components;
  4. using Microsoft.Xna.Framework.Graphics;
  5. namespace StarWarrior.Systems
  6. {
  7. public class MovementSystem : EntityProcessingSystem {
  8. private SpriteBatch spriteBatch;
  9. private ComponentMapper<Velocity> velocityMapper;
  10. private ComponentMapper<Transform> transformMapper;
  11. public MovementSystem(SpriteBatch spriteBatch) : base(typeof(Transform), typeof(Velocity)) {
  12. this.spriteBatch = spriteBatch;
  13. }
  14. public override void Initialize() {
  15. velocityMapper = new ComponentMapper<Velocity>(world);
  16. transformMapper = new ComponentMapper<Transform>(world);
  17. }
  18. public override void Process(Entity e) {
  19. Velocity velocity = velocityMapper.Get(e);
  20. float v = velocity.GetVelocity();
  21. Transform transform = transformMapper.Get(e);
  22. float r = velocity.GetAngleAsRadians();
  23. float xn = transform.GetX() + (TrigLUT.Cos(r) * v * world.GetDelta());
  24. float yn = transform.GetY() + (TrigLUT.Sin(r) * v * world.GetDelta());
  25. transform.SetLocation(xn, yn);
  26. }
  27. }
  28. }