12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- using System;
- using GPUECSAnimationBaker.Engine.AnimatorSystem;
- using Unity.Entities;
- using UnityEngine;
- using Random = Unity.Mathematics.Random;
- namespace GPUECSAnimationBaker.Samples.SampleScenes.Marathon.RunnerSystems
- {
- public class RunnerSpawnerBehaviour : MonoBehaviour
- {
- public GameObject[] gpuEcsAnimatorPrefabs;
- public float walkCycleDistance;
- public AnimationClip walkAnimation;
- public float runCycleDistance;
- public AnimationClip runAnimation;
- public float sprintCycleDistance;
- public AnimationClip sprintAnimation;
- public float minSpeed;
- public float maxSpeed;
- }
- public class RunnerSpawnerBaker : Baker<RunnerSpawnerBehaviour>
- {
- public override void Bake(RunnerSpawnerBehaviour authoring)
- {
- float speedWalking = authoring.walkCycleDistance / authoring.walkAnimation.length;
- float speedRunning = authoring.runCycleDistance / authoring.runAnimation.length;
- float speedSprinting = authoring.sprintCycleDistance / authoring.sprintAnimation.length;
- float minSpeed = Math.Min(authoring.minSpeed, speedWalking);
- float maxSpeed = Math.Max(authoring.maxSpeed, speedSprinting);
- Entity entity = GetEntity(TransformUsageFlags.None);
- AddComponent(entity, new RunnerSpawnerComponent()
- {
- fieldSizeZ = 0,
- fieldSizeX = 0,
- nbrOfRunners = 0,
- speedWalking = speedWalking,
- speedRunning = speedRunning,
- speedSprinting = speedSprinting,
- minSpeed = minSpeed,
- maxSpeed = maxSpeed
- });
-
- AddComponent(entity, new RunnerSpawnerUpdateComponent()
- {
- fieldSizeZ = 0,
- fieldSizeX = 0,
- nbrOfRunners = 0,
- updateTime = 0,
- random = Random.CreateFromIndex((uint)Mathf.RoundToInt(Time.time))
- });
-
- DynamicBuffer<RunnerSpawnerAnimatorPrefabBufferElement> crowdSpawnerAnimatorPrefabs
- = AddBuffer<RunnerSpawnerAnimatorPrefabBufferElement>(entity);
- foreach(GameObject gpuEcsAnimatorPrefab in authoring.gpuEcsAnimatorPrefabs)
- {
- crowdSpawnerAnimatorPrefabs.Add(new RunnerSpawnerAnimatorPrefabBufferElement()
- {
- gpuEcsAnimatorPrefab = GetEntity(gpuEcsAnimatorPrefab,
- gpuEcsAnimatorPrefab.GetComponent<GpuEcsAnimatorBehaviour>().transformUsageFlags)
- });
- }
- AddBuffer<RunnerSpawnerAnimatorBufferElement>(entity);
- }
- }
- }
|