public void SetStarType(ref PosVel pv, float distPercent, float ellipseProgression) { if (starGroupTotals == 0) { foreach (var item in StarGroups) { starGroupTotals += item.Percentage * 0.01f; // This multiplied allows artists to use whole numbers in the UI. } } float starType = Random.Range(0, starGroupTotals); float total = 0; for (int i = 0; i < StarGroups.Count; i++) { var sg = StarGroups[i]; total += sg.Percentage * 0.01f; // This multiplied allows artists to use whole numbers in the UI. if (starType < total) { pv.uv = sg.UVOffset; pv.color = sg.UseColorRange ? sg.ColorRange.Evaluate(Random.value) : centerToRimGradient.Evaluate(distPercent); float sgSize = Random.Range(sg.SizeMultiplierRange.x, sg.SizeMultiplierRange.y); pv.size = sg.SizeIsAbsolute ? sgSize : centerToRimStarSize.Evaluate(ellipseProgression) * sgSize; pv.ellipseDistance += sg.RandomEllipseScaleOffset * ((Random.value * 2) - 1); break; } } }
public PosVel[] GenerateEllipse(float offset, float ellipseProgression) { List <PosVel> result = new List <PosVel>(StarsPerEllipse); float ellipseScale = Mathf.Lerp(MinEllipseScale, MaxEllipseScale, ellipseProgression); for (int i = 0; i < StarsPerEllipse; i++) { float x = 0; float y = 0; float z = 0; float t = Random.Range(0, Mathf.PI * 2f); var maxRadii = Mathf.Max(XRadii, ZRadii); float maxDist = MaxEllipseScale * maxRadii; x = Mathf.Cos(t) * XRadii; z = Mathf.Sin(t) * ZRadii; var zp = (z * Mathf.Cos(offset * Mathf.Deg2Rad)) - (x * Mathf.Sin(offset * Mathf.Deg2Rad)); var xp = (z * Mathf.Sin(offset * Mathf.Deg2Rad)) + (x * Mathf.Cos(offset * Mathf.Deg2Rad)); x = xp; z = zp; Vector3 flatPos = new Vector3(x, y, z); float distance = flatPos.magnitude; float distPercent = Mathf.InverseLerp(0, maxDist, distance) * ellipseProgression; float verticalOffset = centerToRimVerticalOffset.Evaluate(distPercent) * YRange; y = Random.Range(-verticalOffset, verticalOffset); var pv = new PosVel(); pv.curveOffset = t; pv.ellipseOffset = offset * Mathf.Deg2Rad; pv.ellipseDistance = ellipseProgression; pv.position = new Vector3(x * ellipseScale, y, z * ellipseScale); SetStarType(ref pv, distPercent, ellipseProgression); if (pv.size > 0) { result.Add(pv); } } return(result.ToArray()); }
protected override void OnUpdate() { // aim 30 frames ahead, assume 60hz to avoid jitter float dt = .5f; var targetCount = m_PlayerQuery.CalculateEntityCount(); if (targetCount > 0) { var targets = new NativeArray <PosVel>(targetCount, Allocator.TempJob); //created as a native array so it can be passed to the job below //find the player entity Entities .WithAll <PlayerTag, BodyInput>() .WithStoreEntityQueryInField(ref m_PlayerQuery) .ForEach((int entityInQueryIndex, in Translation translation, in Rotation rotation, in Velocity velocity) => { targets[entityInQueryIndex] = new PosVel { pos = translation.Value.xz, vel = math.forward(rotation.Value).xz *velocity.Value * 2f, }; }).ScheduleParallel();
public PosVel[] GenerateEllipse(float offset, float ellipseProgression) { List<PosVel> result = new List<PosVel>(StarsPerEllipse); float ellipseScale = Mathf.Lerp(MinEllipseScale, MaxEllipseScale, ellipseProgression); for (int i = 0; i < StarsPerEllipse; i++) { float x = 0; float y = 0; float z = 0; float t = Random.Range(0, Mathf.PI * 2f); var maxRadii = Mathf.Max(XRadii, ZRadii); float maxDist = MaxEllipseScale * maxRadii; x = Mathf.Cos(t) * XRadii; z = Mathf.Sin(t) * ZRadii; var zp = (z * Mathf.Cos(offset * Mathf.Deg2Rad)) - (x * Mathf.Sin(offset * Mathf.Deg2Rad)); var xp = (z * Mathf.Sin(offset * Mathf.Deg2Rad)) + (x * Mathf.Cos(offset * Mathf.Deg2Rad)); x = xp; z = zp; Vector3 flatPos = new Vector3(x, y, z); float distance = flatPos.magnitude; float distPercent = Mathf.InverseLerp(0, maxDist, distance) * ellipseProgression; float verticalOffset = centerToRimVerticalOffset.Evaluate(distPercent) * YRange; y = Random.Range(-verticalOffset, verticalOffset); var pv = new PosVel(); pv.curveOffset = t; pv.ellipseOffset = offset * Mathf.Deg2Rad; pv.ellipseDistance = ellipseProgression; pv.position = new Vector3(x * ellipseScale, y, z * ellipseScale); SetStarType(ref pv, distPercent, ellipseProgression); if (pv.size > 0) { result.Add(pv); } } return result.ToArray(); }
private Replay ReadReplay(byte[] buffer) { Replay rep = new Replay(); if (buffer == null) { print("Buffer is null"); return rep; } rep.contry = _Loader.Country; using (var ms = new BinaryReader(buffer)) { Vector3 oldPos = Vector3.zero; float oldmeters = 0; PosVel posvel = null; int vers = 0; int errors = 0; while (ms.Position < ms.Length) { lastRd = curredRd; var b = curredRd = ms.ReadByte(); try { if (b == RD.playerName) { rep.playerName = ms.ReadString(); Debug.LogWarning(rep.playerName); } else if (b == RD.clan) rep.clanTag = ms.ReadString(); else if (b == RD.version) { if (vers == 1241 || vers == 1234) return null; vers = ms.ReadInt(); } else if (b == RD.posVel) { posvel = new PosVel(); posvel.pos = ms.ReadVector(); if (oldPos == Vector3.zero) oldPos = posvel.pos; posvel.meters = oldmeters = oldmeters + (posvel.pos - oldPos).magnitude; oldPos = posvel.pos; posvel.rot.eulerAngles = ms.ReadVector(); posvel.vel = ms.ReadVector(); rep.posVels.Add(posvel); } else if (b == RD.score) /*posvel.score = */ ms.ReadInt(); else if (b == RD.posVelMouse) posvel.mouserot = ms.ReadFloat(); else if (b == RD.posVelSkid) posvel.skid = ms.ReadFloat(); else if (b == RD.keyCode) { var kc = (KeyCode)ms.ReadInt(); float t = ms.ReadFloat(); bool d = ms.ReadBool(); //if (Player.recordKeys.Contains(kc)) rep.keyDowns.Add(new KeyDown() { down = d, keyCode = kc, time = t }); } else if (b == RD.avatarId) rep.avatarId = ms.ReadInt(); else if (b == RD.carSkin) rep.carSkin = ms.ReadInt(); else if (b == RD.FinnishTime) rep.finnishTime = ms.ReadFloat(); else if (b == RD.country) { CountryCodes countryCodes = (CountryCodes)ms.ReadByte(); //if (countryCodes != CountryCodes.fi) rep.contry = countryCodes; //print("Read Country " + rep.contry); } else if (b == RD.color) rep.color = new Color(ms.ReadFloat(), ms.ReadFloat(), ms.ReadFloat()); else if (b == RD.avatarUrl) rep.avatarUrl = ms.ReadString(); else if (b == RD.rank) rep.rank = ms.ReadInt(); else { if (errors == 0) Debug.LogError("byte unknown type " + b + " lastType " + lastRd + " version " + vers); errors++; //if (isDebug) // Debug.LogError("byte unknown type " + b); } } catch (Exception e) { if (errors == 0) Debug.LogError("error curType" + b + " lastType " + lastRd + " version " + vers + "\n" + e); errors++; } } print("Replay version " + vers + " errors" + errors); } return rep; }