From 72d99b36f3ef9679f726502391151aa0263cd6f5 Mon Sep 17 00:00:00 2001 From: Evan Hemsley Date: Tue, 14 Jul 2020 16:07:58 -0700 Subject: [PATCH] some optimization and cleanup --- PongFE/Engines/BounceEngine.cs | 1 - PongFE/Engines/CollisionEngine.cs | 1 - PongFE/Engines/MotionEngine.cs | 58 +++++++++++-------------------- 3 files changed, 20 insertions(+), 40 deletions(-) diff --git a/PongFE/Engines/BounceEngine.cs b/PongFE/Engines/BounceEngine.cs index 7109568..157180a 100644 --- a/PongFE/Engines/BounceEngine.cs +++ b/PongFE/Engines/BounceEngine.cs @@ -19,7 +19,6 @@ namespace PongFE.Engines { if (HasComponent(message.Entity) && HasComponent(message.Entity)) { - System.Console.WriteLine("hello bounce!"); ref readonly var velocityComponent = ref GetComponent(message.Entity); Vector2 newVelocity; diff --git a/PongFE/Engines/CollisionEngine.cs b/PongFE/Engines/CollisionEngine.cs index 97b2767..e2e5d52 100644 --- a/PongFE/Engines/CollisionEngine.cs +++ b/PongFE/Engines/CollisionEngine.cs @@ -27,7 +27,6 @@ namespace PongFE.Engines { if (HasComponent(b)) { - System.Console.WriteLine("bounce"); SendMessage(new BounceMessage(b, hitOrientation)); } } diff --git a/PongFE/Engines/MotionEngine.cs b/PongFE/Engines/MotionEngine.cs index c0b68fb..7fda088 100644 --- a/PongFE/Engines/MotionEngine.cs +++ b/PongFE/Engines/MotionEngine.cs @@ -8,85 +8,67 @@ using PongFE.Messages; namespace PongFE.Engines { - [Reads( - typeof(PositionComponent), - typeof(CollisionComponent) - )] [Receives(typeof(MotionMessage))] [Sends( typeof(UpdatePositionMessage), typeof(CollisionMessage) )] + [QueryWith(typeof(PositionComponent), typeof(CollisionComponent))] public class MotionEngine : Engine { private readonly SpatialHash _spatialHash = new SpatialHash(32); private readonly Dictionary _moveAmounts = new Dictionary(); - private readonly Dictionary _finalPositions = new Dictionary(); public override void Update(double dt) { _spatialHash.Clear(); _moveAmounts.Clear(); - _finalPositions.Clear(); - foreach (ref readonly var entity in ReadEntities()) + foreach (var entity in TrackedEntities) { + ref readonly var positionComponent = ref GetComponent(entity); ref readonly var collisionComponent = ref GetComponent(entity); - if (HasComponent(entity)) - { - ref readonly var positionComponent = ref GetComponent(entity); - _spatialHash.Insert(entity, collisionComponent.Rectangle, new Transform2D(positionComponent.Position)); - } + _spatialHash.Insert(entity, collisionComponent.Rectangle, new Transform2D(positionComponent.Position)); } foreach (ref readonly var entity in ReadEntities()) { ref readonly var positionComponent = ref GetComponent(entity); - _finalPositions[entity] = positionComponent.Position; _moveAmounts[entity] = Vector2.Zero; - foreach (var motionMessage in ReadMessagesWithEntity(entity)) { _moveAmounts[entity] += motionMessage.Movement; } } - foreach (var pair in _moveAmounts) + foreach (var entity in TrackedEntities) { - var entity = pair.Key; - var moveAmount = pair.Value; + Vector2 moveAmount = _moveAmounts[entity]; ref readonly var positionComponent = ref GetComponent(entity); - var projectedPosition = positionComponent.Position + moveAmount; - if (!HasComponent(entity)) - { - SendMessage(new UpdatePositionMessage(entity, projectedPosition)); - } - else - { - ref readonly var collisionComponent = ref GetComponent(entity); - var rectangle = collisionComponent.Rectangle; - var (xHit, yHit, newPosition, collisionEntity) = SolidCollisionPosition(rectangle, positionComponent.Position, projectedPosition); + ref readonly var collisionComponent = ref GetComponent(entity); + var rectangle = collisionComponent.Rectangle; + var (xHit, yHit, newPosition, collisionEntity) = SolidCollisionPosition(rectangle, positionComponent.Position, projectedPosition); - if (xHit || yHit) + if (xHit || yHit) + { + projectedPosition = newPosition; + + if (xHit) { - projectedPosition = newPosition; - - if (xHit) - { - SendMessage(new CollisionMessage(entity, collisionEntity, HitOrientation.Horizontal)); - } - else - { - SendMessage(new CollisionMessage(entity, collisionEntity, HitOrientation.Vertical)); - } + SendMessage(new CollisionMessage(entity, collisionEntity, HitOrientation.Horizontal)); + } + else + { + SendMessage(new CollisionMessage(entity, collisionEntity, HitOrientation.Vertical)); } } + SendMessage(new UpdatePositionMessage(entity, projectedPosition)); } }