adding some language to clarify motion engine process
continuous-integration/drone/push Build is passing Details

main
Evan Hemsley 2020-07-27 14:04:18 -07:00
parent 5afc3fc29a
commit 2f2d381696
1 changed files with 15 additions and 5 deletions

View File

@ -72,7 +72,9 @@ namespace PongFE.Engines
} }
``` ```
Next, let's consolidate our MotionMessages per Entity. First, at the very beginning of the processing, we insert all of our entities with a Position and Collision into the SpatialHash.
Next, in a separate block, let's consolidate our MotionMessages per Entity.
```cs ```cs
... ...
@ -81,6 +83,11 @@ Next, let's consolidate our MotionMessages per Entity.
... ...
foreach (var entity in TrackedEntities)
{
...
}
foreach (ref readonly var entity in ReadEntities<PositionComponent>()) foreach (ref readonly var entity in ReadEntities<PositionComponent>())
{ {
ref readonly var positionComponent = ref GetComponent<PositionComponent>(entity); ref readonly var positionComponent = ref GetComponent<PositionComponent>(entity);
@ -95,7 +102,7 @@ Next, let's consolidate our MotionMessages per Entity.
... ...
``` ```
This is where our *IHasEntity* optimization comes in. It allows us to use the **ReadMessagesWithEntity** method. This is where our *IHasEntity* optimization comes in. It allows us to use the **ReadMessagesWithEntity** method. This method efficiently queries messages that refer to the given entity.
Finally, let's implement our sweep test. Finally, let's implement our sweep test.
@ -219,11 +226,16 @@ namespace PongFE.Engines
} }
``` ```
Now we can send these messages in **MotionEngine**. Now, in the final block of our **MotionEngine**, we can perform our collision tests and send out our messages.
```cs ```cs
... ...
foreach (ref readonly var entity in ReadEntities<PositionComponent>())
{
...
}
foreach (var entity in TrackedEntities) foreach (var entity in TrackedEntities)
{ {
Vector2 moveAmount = _moveAmounts[entity]; Vector2 moveAmount = _moveAmounts[entity];
@ -252,8 +264,6 @@ Now we can send these messages in **MotionEngine**.
SendMessage(new UpdatePositionMessage(entity, projectedPosition)); SendMessage(new UpdatePositionMessage(entity, projectedPosition));
} }
...
``` ```
Here, we go over everything with a Position and Collision component, sweep test for collisions, and send appropriate Collision and UpdatePosition messages accordingly. Here, we go over everything with a Position and Collision component, sweep test for collisions, and send appropriate Collision and UpdatePosition messages accordingly.