Example #1
0
    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;
            }
        }
    }
Example #2
0
    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());
    }
Example #3
0
    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();
    }
    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;
            }
        }
    }
 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;
 }