CapersProject/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs

64 lines
2.3 KiB
C#

#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Jobs;
using UnityEngine.UI;
namespace SingularityGroup.HotReload.Demo {
public class HotReloadBurstJobsDemo : MonoBehaviour {
public Transform[] cubes;
public Text informationText;
public Button openWindowButton;
public Button openScriptButton;
public TextAsset thisScript;
TransformAccessArray cubeTransforms;
CubeJob job;
void Awake() {
cubeTransforms = new TransformAccessArray(cubes);
if(Application.isEditor) {
openWindowButton.onClick.AddListener(Demo.I.OpenHotReloadWindow);
openScriptButton.onClick.AddListener(() => Demo.I.OpenScriptFile(thisScript, 49, 17));
} else {
openWindowButton.gameObject.SetActive(false);
openScriptButton.gameObject.SetActive(false);
}
informationText.gameObject.SetActive(true);
}
void Update() {
job.deltaTime = Time.deltaTime;
job.time = Time.time;
var handle = job.Schedule(cubeTransforms);
handle.Complete();
if (Demo.I.IsServerRunning()) {
informationText.text = "Hot Reload is running";
} else {
informationText.text = "Hot Reload is not running";
}
}
struct CubeJob : IJobParallelForTransform {
public float deltaTime;
public float time;
public void Execute(int index, TransformAccess transform) {
transform.localRotation *= Quaternion.Euler(50 * deltaTime, 0, 0);
// Uncomment this code to scale the cubes
// var scale = Mathf.Abs(Mathf.Sin(time));
// transform.localScale = new Vector3(scale, scale, scale);
// Uncomment this code to make the cube move from left to right and back
// transform.position += (transform.localScale.x < 0.5 ? Vector3.left : Vector3.right) * deltaTime;
}
}
void OnDestroy() {
cubeTransforms.Dispose();
}
}
}
#endif