public void SpawnPopup(float damage, float3 position) { int damageInt = (int)math.round(damage); string damageString = damageInt.ToString(); if (damageInt >= 0) { quaternion cameraRotation = cameraSystem.GetMainCamera().transform.rotation; float delay = UnityEngine.Random.Range(0.1f, 0.2f); float halfWidth = (damageString.Length * uiDatam.fontSize * 0.6f) / 2f; for (int i = 0; i < damageString.Length; i++) { float lifetime = UnityEngine.Random.Range(uiDatam.popupLifetime.x, uiDatam.popupLifetime.y); int singleDigit = int.Parse(damageString[i].ToString()); // for each digit spawn one, add a offset so they centre in the middle float3 offset = new float3(i * uiDatam.fontSize * 0.6f - halfWidth, 0, 0); offset = math.rotate(cameraRotation, offset); float3 positionBegin = position + new float3(0, 0.1f + uiDatam.fontSize / 2f, 0) + offset; float3 positionEnd = positionBegin + new float3( UnityEngine.Random.Range(uiDatam.popupVariationX.x, uiDatam.popupVariationX.y), UnityEngine.Random.Range(uiDatam.popupVariationY.x, uiDatam.popupVariationY.y), UnityEngine.Random.Range(uiDatam.popupVariationZ.x, uiDatam.popupVariationZ.y)); Entity textEntity = SpawnNumber(singleDigit, positionBegin); RenderTextSystem.SetLetterColor(World.EntityManager, textEntity, Color.red); World.EntityManager.AddComponentData(textEntity, new PositionLerper { createdTime = UnityEngine.Time.time, lifeTime = lifetime, positionBegin = positionBegin, positionEnd = positionEnd }); World.EntityManager.AddComponentData(textEntity, new ScaleLerper { createdTime = UnityEngine.Time.time, lifeTime = lifetime - delay, delay = delay, scaleBegin = new float3(1, 1, 1), scaleEnd = new float3(0, 0, 0) }); World.EntityManager.AddComponentData(textEntity, new DamagePopup { createdTime = UnityEngine.Time.time, lifeTime = lifetime, }); popups.Add(textEntity); } } }
protected override JobHandle OnUpdate(JobHandle inputDeps) { if (cameraSystem.cameraObjects.Values.Count == 0) { return(new JobHandle()); } float3 cameraPosition = cameraSystem.GetMainCameraPosition(); quaternion cameraRotation = cameraSystem.GetMainCamera().transform.rotation; FaceCameraJob job = new FaceCameraJob { cameraPosition = cameraPosition, cameraRotation = cameraRotation, delta = UnityEngine.Time.deltaTime }; JobHandle handle = job.Schedule(this, inputDeps); return(handle); }