Esempio n. 1
0
        public void Spherecast(Ray ray, float radius, float distance)
        {
            var hits = TimePhysics.SphereCastNonAlloc(ray, radius, HitsCache, distance);

            for (int i = 0; i < hits; i++)
            {
                var marker = HitsCache[i].collider.GetComponent <HitboxMarkerDebug>();
                if (marker != null && TimePhysics.DebugMode)
                {
                    ShooterDebug?.DebugHitRewind(marker, 1f);
                }
                HitCount++;
            }
        }
Esempio n. 2
0
//example usage snippet

/*
 * private void Shoot(Ray ray)
 * {
 *  using (TimePhysics.RewindSeconds(Ping))
 *  {
 *      RaycastHit hit;
 *      if (TimePhysics.Raycast(ray, out hit))
 *      {
 *          // hit code
 *      }
 *  }
 * }
 */

        public void Shoot(Ray ray, float distance)
        {
            RaycastHit hit;

            if (TimePhysics.Raycast(ray, out hit, distance))
            {
                var marker = hit.collider.GetComponent <HitboxMarkerDebug>();
                if (marker != null && TimePhysics.DebugMode)
                {
                    ShooterDebug?.DebugHitRewind(marker, 2f);
                }
                HitCount++;
            }
        }
Esempio n. 3
0
        public void AOE(Vector3 origin, float radius, float distance)
        {
            var hits = TimePhysics.OverlapSphereNonAlloc(origin, radius, ColliderCache);

            for (int i = 0; i < hits; i++)
            {
                var marker = ColliderCache[i].GetComponent <HitboxMarkerDebug>();
                if (marker != null && TimePhysics.DebugMode)
                {
                    ShooterDebug?.DebugHitRewind(marker, 1f);
                }
                HitCount++;
            }
        }
Esempio n. 4
0
        private void Fire()
        {
            //convert ping to float seconds
            var ping = (BasePingMs + Random.Range(0, PingRandomMs)) / 1000f;

            using (TimePhysics.RewindSeconds(ping, HitboxBody))
            {
                Ray        ray = new Ray(RayOrigin.transform.position, RayOrigin.transform.forward * ShootDistance);
                RaycastHit hit;
                Debug.DrawRay(ray.origin, ray.direction, ShotColor);
                if (TimePhysics.SphereCast(ray, SphereRadius, out hit, ShootDistance))
                {
                    var marker = hit.collider.GetComponent <HitboxMarkerDebug>();
                    if (marker != null && TimePhysics.DebugMode)
                    {
                        ShooterDebug?.DebugHitRewind(marker, 2f);
                    }
                }
            }
        }
Esempio n. 5
0
        private void ExecuteCommand(Command cmd)
        {
            if (!cmd.Rewind) // don't rewind if we don't have to
            {
                return;
            }
            var ping = Random.Range(Ping - PingJitter, Ping + PingJitter);

            Profiler.BeginSample("Rewind & Cast");
            using (TimePhysics.RewindSeconds(ping)) // or using (TimePhysics.RewindFrames(FrameDelay))
            {
                //perform all raycasts for this rewindframe within the 'using' block
                if (cmd.Primary)
                {
                    //Shoot(cmd.Ray, Distance);
                    Spherecast(cmd.Ray, .25f, Distance);
                }
                if (cmd.Secondary)
                {
                    AOE(cmd.Ray.origin, 10f, Distance);
                }
            }
            Profiler.EndSample();
        }