forked from Unity-Technologies/EntityComponentSystemSamples
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCharacterControllerEventTestAuthoring.cs
More file actions
82 lines (74 loc) · 3.45 KB
/
Copy pathCharacterControllerEventTestAuthoring.cs
File metadata and controls
82 lines (74 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using Unity.Assertions;
using Unity.Entities;
using Unity.Jobs;
using Unity.Mathematics;
using Unity.Physics;
using Unity.Physics.Stateful;
using UnityEngine;
public struct CharacterControllerEventTest : IComponentData
{
public bool IsFirstFrame;
}
public class CharacterControllerEventTestAuthoring : MonoBehaviour, IConvertGameObjectToEntity
{
public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
{
dstManager.AddComponentData(entity, new CharacterControllerEventTest
{
IsFirstFrame = true
});
}
}
[UpdateInGroup(typeof(FixedStepSimulationSystemGroup))]
[UpdateAfter(typeof(TriggerEventConversionSystem))]
[UpdateAfter(typeof(CollisionEventConversionSystem))]
public class CharacterControllerEventTestStstem : SystemBase
{
private CharacterControllerSystem m_CCSystem;
protected override void OnCreate()
{
m_CCSystem = World.GetOrCreateSystem<CharacterControllerSystem>();
}
protected override void OnUpdate()
{
Dependency = JobHandle.CombineDependencies(m_CCSystem.OutDependency, Dependency);
Entities
.WithName("CCEventsTestJob")
.WithBurst()
.ForEach((Entity ccEntity, ref DynamicBuffer<StatefulCollisionEvent> collisionEvents,
ref DynamicBuffer<StatefulTriggerEvent> triggerEvents, ref CharacterControllerEventTest test) =>
{
Assert.IsTrue(collisionEvents.Length <= 1);
Assert.IsTrue(triggerEvents.Length <= 1);
if (collisionEvents.Length == 0 || triggerEvents.Length == 0)
{
if (!test.IsFirstFrame)
{
Assert.IsTrue(triggerEvents.Length != 0, "No TriggerEvents registered!");
Assert.IsTrue(collisionEvents.Length != 0, "No CollisionEvents registered!");
}
test.IsFirstFrame = false;
}
if (collisionEvents.Length > 0)
{
var collisionEvent = collisionEvents[0];
Assert.IsTrue(collisionEvent.EntityA == ccEntity);
Assert.IsTrue(collisionEvent.GetOtherEntity(ccEntity) == collisionEvent.EntityB);
Assert.IsTrue(collisionEvent.GetOtherEntity(collisionEvent.EntityB) == ccEntity);
Assert.IsTrue(collisionEvent.Normal.Equals(math.up()));
Assert.IsTrue(collisionEvent.GetNormalFrom(collisionEvent.EntityB).Equals(math.up()));
Assert.IsTrue(collisionEvent.GetNormalFrom(ccEntity).Equals(-math.up()));
Assert.IsTrue(collisionEvent.TryGetDetails(out StatefulCollisionEvent.Details details));
Assert.IsTrue(details.IsValid == 1);
Assert.IsTrue(details.NumberOfContactPoints == 1);
}
if (triggerEvents.Length > 0)
{
var triggerEvent = triggerEvents[0];
Assert.IsTrue(triggerEvent.EntityA == ccEntity);
Assert.IsTrue(triggerEvent.GetOtherEntity(ccEntity) == triggerEvent.EntityB);
Assert.IsTrue(triggerEvent.GetOtherEntity(triggerEvent.EntityB) == ccEntity);
}
}).Schedule();
}
}