forked from Unity-Technologies/EntityComponentSystemSamples
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMoveAlongCircleSystem.cs
More file actions
69 lines (60 loc) · 2.45 KB
/
Copy pathMoveAlongCircleSystem.cs
File metadata and controls
69 lines (60 loc) · 2.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
using Unity.Collections;
using Unity.Entities;
using Unity.Jobs;
using Unity.Burst;
using Unity.Mathematics;
using Unity.Transforms;
using UnityEngine;
namespace Samples.Common
{
public class MoveAlongCircleSystem : JobComponentSystem
{
#pragma warning disable 649
struct MoveAlongCircleGroup
{
public ComponentDataArray<Position> positions;
public ComponentDataArray<MoveAlongCircle> moveAlongCircles;
[ReadOnly]
public ComponentDataArray<MoveSpeed> moveSpeeds;
public readonly int Length;
}
[Inject] private MoveAlongCircleGroup m_MoveAlongCircleGroup;
#pragma warning restore 649
[BurstCompile]
struct MoveAlongCirclePosition : IJobParallelFor
{
public ComponentDataArray<Position> positions;
public ComponentDataArray<MoveAlongCircle> moveAlongCircles;
[ReadOnly]
public ComponentDataArray<MoveSpeed> moveSpeeds;
public float dt;
public void Execute(int i)
{
float t = moveAlongCircles[i].t + (dt * moveSpeeds[i].speed);
float offsetT = t + (0.01f * i);
float x = moveAlongCircles[i].center.x + (math.cos(offsetT) * moveAlongCircles[i].radius);
float y = moveAlongCircles[i].center.y;
float z = moveAlongCircles[i].center.z + (math.sin(offsetT) * moveAlongCircles[i].radius);
moveAlongCircles[i] = new MoveAlongCircle
{
t = t,
center = moveAlongCircles[i].center,
radius = moveAlongCircles[i].radius
};
positions[i] = new Position
{
Value = new float3(x,y,z)
};
}
}
protected override JobHandle OnUpdate(JobHandle inputDeps)
{
var moveAlongCirclePositionJob = new MoveAlongCirclePosition();
moveAlongCirclePositionJob.positions = m_MoveAlongCircleGroup.positions;
moveAlongCirclePositionJob.moveAlongCircles = m_MoveAlongCircleGroup.moveAlongCircles;
moveAlongCirclePositionJob.moveSpeeds = m_MoveAlongCircleGroup.moveSpeeds;
moveAlongCirclePositionJob.dt = Time.deltaTime;
return moveAlongCirclePositionJob.Schedule(m_MoveAlongCircleGroup.Length, 64, inputDeps);
}
}
}